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.2 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,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 4D2E9C432C3 for ; Thu, 14 Nov 2019 23:57:43 +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 15E75206E5 for ; Thu, 14 Nov 2019 23:57:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="D0rA4qpt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 15E75206E5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=grimberg.me Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvme-bounces+linux-nvme=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-Type: Content-Transfer-Encoding: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=c8ML1fVQwrbJPRODDSYBgxn8/adza5kd05uzZB0zpHU=; b=D0rA4qptGEs47H+9P4NejQ2mS o0QWzJxqW0+UB7CbngXS3pqUQk3Y2jczgh2LmDnRPJDave633uT5ao7MMoyOpBeTdaH9yPEW4/HPe YFLVHqH9b+5aQ5odH2cQ6lkDLzDeTrqhyPVO+ixhmBye8tJ0uA/4kwpJr1Nv3Rkm22RtCARdD3OKo RU3vq/4qJGKcc23q72Rrsf9zWfsdfpyhvyM3VXVMCHn6R3QJ/X6RiXgRIMl0hecKcaGuT+zefEa8Y lvdgK7QixDZqm9ZUqizvS9/ezzSOnfgDxoWUGYhvIJ17aigao3Kq67l14D4afjrYg3YbpHsaZNQ29 KM34UM6rg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iVOzb-0008F8-NR; Thu, 14 Nov 2019 23:57:39 +0000 Received: from mail-wr1-f67.google.com ([209.85.221.67]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iVOzX-0008Ea-Gq for linux-nvme@lists.infradead.org; Thu, 14 Nov 2019 23:57:38 +0000 Received: by mail-wr1-f67.google.com with SMTP id a15so8912468wrf.9 for ; Thu, 14 Nov 2019 15:57:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Kfo4YGowhtR66cYGICJMmCUXlvK9UeEcwQ6UOWk77ZM=; b=FYeqxsm5r5rPZEzY1rzhfR2RMMuC78s8OYvmHG6vPPMvFSAzgf+7KqAs08B6PgeDZD /O4N/22UHZ8Jj1ThbyKkbf+0F1NAEtVR5OYTtwskn9auwo5CyaYN7qi+IuUhLvtZ+azn wMcrYDD3uLA8Oiu3XSqfND/yco2EXBDYwl6ZGYhxon3hmdInbokjk0y6NIlmK+WDcxWT +aYwzsJqc9naRDxoRVWpP09Fjg8TokKKb9HicK8+rN4RS0gqMx8TTzLOln2LIEzxYyxD nJHGS0tAcjxgmOinsZXr1imM4bQ9XM2RZrIxXUSkM9ObKDJCccFRESxZ6SJfIbB/cyvp rlKQ== X-Gm-Message-State: APjAAAXvm5hWjJVw1olDT0qznpFlQuyXZX/IFxRPcQXQw5iCNY2Mg5qY Y2suNtIYFLpUW7YtjJQ0L6NtgBnT X-Google-Smtp-Source: APXvYqxc1B/3rt4hMWW79H/QIoJz4bKKMyad8/MMzeTVNUyHT33cd8/ROwFZiZ3lvbnHtOogVml2BQ== X-Received: by 2002:a05:6000:150:: with SMTP id r16mr11470996wrx.313.1573775852574; Thu, 14 Nov 2019 15:57:32 -0800 (PST) Received: from [192.168.1.114] (162-195-240-247.lightspeed.sntcca.sbcglobal.net. [162.195.240.247]) by smtp.gmail.com with ESMTPSA id f67sm8028133wme.16.2019.11.14.15.57.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Nov 2019 15:57:31 -0800 (PST) Subject: Re: [PATCH 05/15] nvme-rdma: Add metadata/T10-PI support To: Max Gurtovoy , linux-nvme@lists.infradead.org, kbusch@kernel.org, hch@lst.de References: <20191105162026.183901-1-maxg@mellanox.com> <20191105162026.183901-7-maxg@mellanox.com> <8c21bb99-4290-b7d3-d8ee-38b6ce41e042@grimberg.me> <2205eff8-3fdc-ba0f-8578-994a8ed835f6@mellanox.com> From: Sagi Grimberg Message-ID: <2233ab61-0715-b0fe-c4ac-c0d06b25ff49@grimberg.me> Date: Thu, 14 Nov 2019 15:57:24 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <2205eff8-3fdc-ba0f-8578-994a8ed835f6@mellanox.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191114_155735_654386_4D670044 X-CRM114-Status: GOOD ( 19.43 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: shlomin@mellanox.com, israelr@mellanox.com, oren@mellanox.com, vladimirk@mellanox.com, idanb@mellanox.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org CgpPbiAxMS8xMy8xOSA2OjM1IEFNLCBNYXggR3VydG92b3kgd3JvdGU6Cj4gCj4gT24gMTEvMTIv MjAxOSA4OjIyIFBNLCBTYWdpIEdyaW1iZXJnIHdyb3RlOgo+Pgo+Pgo+PiBPbiAxMS81LzE5IDg6 MjAgQU0sIE1heCBHdXJ0b3ZveSB3cm90ZToKPj4+IEZvciBjYXBhYmxlIEhDQXMgKGUuZy4gQ29u bmVjdFgtNC9Db25uZWN0WC01KSB0aGlzIHdpbGwgYWxsb3cgZW5kLXRvLWVuZAo+Pj4gcHJvdGVj dGlvbiBpbmZvcm1hdGlvbiBwYXNzdGhyb3VnaCBhbmQgdmFsaWRhdGlvbiBmb3IgTlZNZSBvdmVy IFJETUEKPj4+IHRyYW5zcG9ydC4gTWV0YWRhdGEgb2ZmbG9hZCBzdXBwb3J0IHdhcyBpbXBsZW1l bnRlZCBvdmVyIHRoZSBuZXcgUkRNQQo+Pj4gc2lnbmF0dXJlIHZlcmJzIEFQSSBhbmQgaXQgaXMg ZW5hYmxlZCBwZXIgY29udHJvbGxlciBieSB1c2luZyBudm1lLWNsaS4KPj4+Cj4+PiB1c2FnZSBl eGFtcGxlOgo+Pj4gbnZtZSBjb25uZWN0IC0tcGlfZW5hYmxlIC0tdHJhbnNwb3J0PXJkbWEgLS10 cmFkZHI9MTAuMC4xLjEgCj4+PiAtLW5xbj10ZXN0LW52bWUKPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5 OiBNYXggR3VydG92b3kgPG1heGdAbWVsbGFub3guY29tPgo+Pj4gU2lnbmVkLW9mZi1ieTogSXNy YWVsIFJ1a3NoaW4gPGlzcmFlbHJAbWVsbGFub3guY29tPgo+Pj4gLS0tCj4+PiDCoCBkcml2ZXJz L252bWUvaG9zdC9yZG1hLmMgfCAzNDYgCj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLQo+Pj4gwqAgMSBmaWxlIGNoYW5nZWQsIDI5OCBpbnNlcnRpb25z KCspLCA0OCBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hv c3QvcmRtYS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCj4+PiBpbmRleCAwNWYyZGZhLi4x NjI2M2I4IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvcmRtYS5jCj4+PiArKysg Yi9kcml2ZXJzL252bWUvaG9zdC9yZG1hLmMKPj4+IEBAIC00OCw2ICs0OCwxMiBAQCBzdHJ1Y3Qg bnZtZV9yZG1hX3FlIHsKPj4+IMKgwqDCoMKgwqAgdTY0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBk bWE7Cj4+PiDCoCB9Owo+Pj4gwqAgK3N0cnVjdCBudm1lX3JkbWFfc2dsIHsKPj4+ICvCoMKgwqAg aW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZW50czsKPj4+ICvCoMKgwqAgc3RydWN0IHNnX3Rh YmxlwqDCoMKgwqDCoMKgwqAgc2dfdGFibGU7Cj4+PiArwqDCoMKgIHN0cnVjdCBzY2F0dGVybGlz dMKgwqDCoCBmaXJzdF9zZ2xbU0dfQ0hVTktfU0laRV07Cj4+PiArfTsKPj4KPj4gSG93IGFib3V0 IHdlIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoaXMgaW4gbnZtZV9yZG1hX2luaXRfcmVxdWVzdCAo d2l0aAo+PiBhIHByZXAgcGF0Y2ggZm9yIGl0KT8gYm90aCBmb3IgcGkgYW5kIGRhdGEsIHRoaXMg aXMgZ2V0dGluZyBxdWl0ZQo+PiBsYXJnZS4uLgo+Pgo+Pj4gKwo+Pj4gwqAgc3RydWN0IG52bWVf cmRtYV9xdWV1ZTsKPj4+IMKgIHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCB7Cj4+PiDCoMKgwqDC oMKgIHN0cnVjdCBudm1lX3JlcXVlc3TCoMKgwqAgcmVxOwo+Pj4gQEAgLTU4LDEyICs2NCwxNCBA QCBzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3Qgewo+Pj4gwqDCoMKgwqDCoCByZWZjb3VudF90wqDC oMKgwqDCoMKgwqAgcmVmOwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaWJfc2dlwqDCoMKgwqDCoMKg wqAgc2dlWzEgKyBOVk1FX1JETUFfTUFYX0lOTElORV9TRUdNRU5UU107Cj4+PiDCoMKgwqDCoMKg IHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbnVtX3NnZTsKPj4+IC3CoMKgwqAgaW50wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBuZW50czsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGliX3JlZ193csKg wqDCoCByZWdfd3I7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBpYl9jcWXCoMKgwqDCoMKgwqDCoCBy ZWdfY3FlOwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9yZG1hX3F1ZXVlwqAgKnF1ZXVlOwo+ Pj4gLcKgwqDCoCBzdHJ1Y3Qgc2dfdGFibGXCoMKgwqDCoMKgwqDCoCBzZ190YWJsZTsKPj4+IC3C oMKgwqAgc3RydWN0IHNjYXR0ZXJsaXN0wqDCoMKgIGZpcnN0X3NnbFtdOwo+Pj4gK8KgwqDCoCAv KiBUMTAtUEkgc3VwcG9ydCAqLwo+Pj4gK8KgwqDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpc19wcm90ZWN0ZWQ7Cj4+PiArCj4+PiArwqDCoMKgIHN0cnVjdCBudm1lX3JkbWFfc2dswqDC oMKgIGRhdGFfc2dsOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgbnZtZV9yZG1hX3NnbMKgwqDCoCBwaV9z Z2xbXTsKPj4+IMKgIH07Cj4+PiDCoCDCoCBlbnVtIG52bWVfcmRtYV9xdWV1ZV9mbGFncyB7Cj4+ PiBAQCAtODUsNiArOTMsNyBAQCBzdHJ1Y3QgbnZtZV9yZG1hX3F1ZXVlIHsKPj4+IMKgwqDCoMKg wqAgc3RydWN0IHJkbWFfY21faWTCoMKgwqAgKmNtX2lkOwo+Pj4gwqDCoMKgwqDCoCBpbnTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNtX2Vycm9yOwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgY29tcGxl dGlvbsKgwqDCoCBjbV9kb25lOwo+Pj4gK8KgwqDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwaV9zdXBwb3J0Owo+Pgo+PiBBbnkgc3BlY2lmaWMgcmVhc29uIGZvciB0aGUgcXVldWUgbG9j YWwgcGlfc3VwcG9ydD8KPj4KPj4+IMKgIH07Cj4+PiDCoCDCoCBzdHJ1Y3QgbnZtZV9yZG1hX2N0 cmwgewo+Pj4gQEAgLTExMiw2ICsxMjEsNyBAQCBzdHJ1Y3QgbnZtZV9yZG1hX2N0cmwgewo+Pj4g wqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9jdHJswqDCoMKgIGN0cmw7Cj4+PiDCoMKgwqDCoMKgIGJv b2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVzZV9pbmxpbmVfZGF0YTsKPj4+IMKgwqDCoMKgwqAg dTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpb19xdWV1ZXNbSENUWF9NQVhfVFlQRVNdOwo+Pj4g K8KgwqDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaV9zdXBwb3J0Owo+Pj4gwqAgfTsK Pj4+IMKgIMKgIHN0YXRpYyBpbmxpbmUgc3RydWN0IG52bWVfcmRtYV9jdHJsICp0b19yZG1hX2N0 cmwoc3RydWN0IAo+Pj4gbnZtZV9jdHJsICpjdHJsKQo+Pj4gQEAgLTI2OSw2ICsyNzksOCBAQCBz dGF0aWMgaW50IG52bWVfcmRtYV9jcmVhdGVfcXAoc3RydWN0IAo+Pj4gbnZtZV9yZG1hX3F1ZXVl ICpxdWV1ZSwgY29uc3QgaW50IGZhY3RvcikKPj4+IMKgwqDCoMKgwqAgaW5pdF9hdHRyLnFwX3R5 cGUgPSBJQl9RUFRfUkM7Cj4+PiDCoMKgwqDCoMKgIGluaXRfYXR0ci5zZW5kX2NxID0gcXVldWUt PmliX2NxOwo+Pj4gwqDCoMKgwqDCoCBpbml0X2F0dHIucmVjdl9jcSA9IHF1ZXVlLT5pYl9jcTsK Pj4+ICvCoMKgwqAgaWYgKHF1ZXVlLT5waV9zdXBwb3J0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlu aXRfYXR0ci5jcmVhdGVfZmxhZ3MgfD0gSUJfUVBfQ1JFQVRFX0lOVEVHUklUWV9FTjsKPj4+IMKg IMKgwqDCoMKgwqAgcmV0ID0gcmRtYV9jcmVhdGVfcXAocXVldWUtPmNtX2lkLCBkZXYtPnBkLCAm aW5pdF9hdHRyKTsKPj4+IMKgIEBAIC00MDgsNiArNDIwLDggQEAgc3RhdGljIHZvaWQgbnZtZV9y ZG1hX2Rlc3Ryb3lfcXVldWVfaWIoc3RydWN0IAo+Pj4gbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSkK Pj4+IMKgwqDCoMKgwqAgZGV2ID0gcXVldWUtPmRldmljZTsKPj4+IMKgwqDCoMKgwqAgaWJkZXYg PSBkZXYtPmRldjsKPj4+IMKgICvCoMKgwqAgaWYgKHF1ZXVlLT5waV9zdXBwb3J0KQo+Pj4gK8Kg wqDCoMKgwqDCoMKgIGliX21yX3Bvb2xfZGVzdHJveShxdWV1ZS0+cXAsICZxdWV1ZS0+cXAtPnNp Z19tcnMpOwo+Pj4gwqDCoMKgwqDCoCBpYl9tcl9wb29sX2Rlc3Ryb3kocXVldWUtPnFwLCAmcXVl dWUtPnFwLT5yZG1hX21ycyk7Cj4+PiDCoCDCoMKgwqDCoMKgIC8qCj4+PiBAQCAtNDI0LDEwICs0 MzgsMTQgQEAgc3RhdGljIHZvaWQgbnZtZV9yZG1hX2Rlc3Ryb3lfcXVldWVfaWIoc3RydWN0IAo+ Pj4gbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSkKPj4+IMKgwqDCoMKgwqAgbnZtZV9yZG1hX2Rldl9w dXQoZGV2KTsKPj4+IMKgIH0KPj4+IMKgIC1zdGF0aWMgaW50IG52bWVfcmRtYV9nZXRfbWF4X2Zy X3BhZ2VzKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQo+Pj4gK3N0YXRpYyBpbnQgbnZtZV9yZG1h X2dldF9tYXhfZnJfcGFnZXMoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGJvb2wgCj4+PiBwaV9z dXBwb3J0KQo+Pj4gwqAgewo+Pj4gLcKgwqDCoCByZXR1cm4gbWluX3QodTMyLCBOVk1FX1JETUFf TUFYX1NFR01FTlRTLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpYmRldi0+YXR0cnMu bWF4X2Zhc3RfcmVnX3BhZ2VfbGlzdF9sZW4gLSAxKTsKPj4+ICvCoMKgwqAgaWYgKHBpX3N1cHBv cnQpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIG1pbl90KHUzMiwgTlZNRV9SRE1BX01BWF9T RUdNRU5UUywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpYmRldi0+YXR0 cnMubWF4X3BpX2Zhc3RfcmVnX3BhZ2VfbGlzdF9sZW4gLSAxKTsKPj4+ICvCoMKgwqAgZWxzZQo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBtaW5fdCh1MzIsIE5WTUVfUkRNQV9NQVhfU0VHTUVO VFMsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWJkZXYtPmF0dHJzLm1h eF9mYXN0X3JlZ19wYWdlX2xpc3RfbGVuIC0gMSk7Cj4+PiDCoCB9Cj4+Cj4+IE1heWJlIGp1c3Qg dGFrZSB0aGUgbWF4X3BhZ2VfbGlzdF9sZW4gb24gdGhlIGNvbmRpdGlvbiBhbmQgdGFrZSB0aGUg Cj4+IG1pbiBvbmNlLgo+Pgo+Pj4gwqAgwqAgc3RhdGljIGludCBudm1lX3JkbWFfY3JlYXRlX3F1 ZXVlX2liKHN0cnVjdCBudm1lX3JkbWFfcXVldWUgKnF1ZXVlKQo+Pj4gQEAgLTQ4NCw3ICs1MDIs NyBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9jcmVhdGVfcXVldWVfaWIoc3RydWN0IAo+Pj4gbnZt ZV9yZG1hX3F1ZXVlICpxdWV1ZSkKPj4+IMKgwqDCoMKgwqDCoCAqIG1pc2FsaWduZWQgd2UnbGwg ZW5kIHVwIHVzaW5nIHR3byBlbnRyaWVzIGZvciBhIHNpbmdsZSBkYXRhIAo+Pj4gcGFnZSwKPj4+ IMKgwqDCoMKgwqDCoCAqIHNvIG9uZSBhZGRpdGlvbmFsIGVudHJ5IGlzIHJlcXVpcmVkLgo+Pj4g wqDCoMKgwqDCoMKgICovCj4+PiAtwqDCoMKgIHBhZ2VzX3Blcl9tciA9IG52bWVfcmRtYV9nZXRf bWF4X2ZyX3BhZ2VzKGliZGV2KSArIDE7Cj4+PiArwqDCoMKgIHBhZ2VzX3Blcl9tciA9IG52bWVf cmRtYV9nZXRfbWF4X2ZyX3BhZ2VzKGliZGV2LCAKPj4+IHF1ZXVlLT5waV9zdXBwb3J0KSArIDE7 Cj4+PiDCoMKgwqDCoMKgIHJldCA9IGliX21yX3Bvb2xfaW5pdChxdWV1ZS0+cXAsICZxdWV1ZS0+ cXAtPnJkbWFfbXJzLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cXVldWUtPnF1ZXVlX3NpemUsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBJQl9NUl9UWVBFX01FTV9SRUcsCj4+PiBAQCAtNDk2LDEwICs1MTQsMjQgQEAgc3RhdGlj IGludCBudm1lX3JkbWFfY3JlYXRlX3F1ZXVlX2liKHN0cnVjdCAKPj4+IG52bWVfcmRtYV9xdWV1 ZSAqcXVldWUpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfZGVzdHJveV9yaW5nOwo+ Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoCArwqDCoMKgIGlmIChxdWV1ZS0+cGlfc3VwcG9ydCkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGliX21yX3Bvb2xfaW5pdChxdWV1ZS0+cXAsICZxdWV1 ZS0+cXAtPnNpZ19tcnMsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHF1ZXVlLT5xdWV1ZV9zaXplLCBJQl9NUl9UWVBFX0lOVEVHUklUWSwKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFnZXNfcGVyX21yLCBwYWdl c19wZXJfbXIpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRldl9lcnIocXVldWUtPmN0cmwtPmN0cmwuZGV2aWNlLAo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiZmFpbGVkIHRvIGluaXRpYWxpemUgUEkgTVIgcG9v bCBzaXplZCAlZCBmb3IgUUlEIAo+Pj4gJWRcbiIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHF1ZXVlLT5xdWV1ZV9zaXplLCBpZHgpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBvdXRfZGVzdHJveV9tcl9wb29sOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCBzZXRfYml0KE5WTUVfUkRNQV9RX1RSX1JF QURZLCAmcXVldWUtPmZsYWdzKTsKPj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiDCoCAr b3V0X2Rlc3Ryb3lfbXJfcG9vbDoKPj4+ICvCoMKgwqAgaWJfbXJfcG9vbF9kZXN0cm95KHF1ZXVl LT5xcCwgJnF1ZXVlLT5xcC0+cmRtYV9tcnMpOwo+Pj4gwqAgb3V0X2Rlc3Ryb3lfcmluZzoKPj4+ IMKgwqDCoMKgwqAgbnZtZV9yZG1hX2ZyZWVfcmluZyhpYmRldiwgcXVldWUtPnJzcF9yaW5nLCBx dWV1ZS0+cXVldWVfc2l6ZSwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c2l6ZW9mKHN0cnVjdCBudm1lX2NvbXBsZXRpb24pLCBETUFfRlJPTV9ERVZJQ0UpOwo+Pj4gQEAg LTUyMSw2ICs1NTMsNyBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9hbGxvY19xdWV1ZShzdHJ1Y3Qg Cj4+PiBudm1lX3JkbWFfY3RybCAqY3RybCwKPj4+IMKgIMKgwqDCoMKgwqAgcXVldWUgPSAmY3Ry bC0+cXVldWVzW2lkeF07Cj4+PiDCoMKgwqDCoMKgIHF1ZXVlLT5jdHJsID0gY3RybDsKPj4+ICvC oMKgwqAgcXVldWUtPnBpX3N1cHBvcnQgPSBpZHggJiYgY3RybC0+cGlfc3VwcG9ydDsKPj4KPj4g VGhhdHMgd2h5Li4KPj4KPj4+IGluaXRfY29tcGxldGlvbigmcXVldWUtPmNtX2RvbmUpOwo+Pj4g wqAgwqDCoMKgwqDCoCBpZiAoaWR4ID4gMCkKPj4+IEBAIC03MzAsOCArNzYzLDcgQEAgc3RhdGlj IHN0cnVjdCBibGtfbXFfdGFnX3NldCAKPj4+ICpudm1lX3JkbWFfYWxsb2NfdGFnc2V0KHN0cnVj dCBudm1lX2N0cmwgKm5jdHJsLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldC0+cXVldWVfZGVw dGggPSBOVk1FX0FRX01RX1RBR19ERVBUSDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXQtPnJl c2VydmVkX3RhZ3MgPSAyOyAvKiBjb25uZWN0ICsga2VlcC1hbGl2ZSAqLwo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIHNldC0+bnVtYV9ub2RlID0gbmN0cmwtPm51bWFfbm9kZTsKPj4+IC3CoMKgwqDC oMKgwqDCoCBzZXQtPmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBudm1lX3JkbWFfcmVxdWVzdCkg Kwo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgU0dfQ0hVTktfU0laRSAqIHNpemVvZihzdHJ1 Y3Qgc2NhdHRlcmxpc3QpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNldC0+Y21kX3NpemUgPSBzaXpl b2Yoc3RydWN0IG52bWVfcmRtYV9yZXF1ZXN0KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXQt PmRyaXZlcl9kYXRhID0gY3RybDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXQtPm5yX2h3X3F1 ZXVlcyA9IDE7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0LT50aW1lb3V0ID0gQURNSU5fVElN RU9VVDsKPj4+IEBAIC03NDUsNyArNzc3LDcgQEAgc3RhdGljIHN0cnVjdCBibGtfbXFfdGFnX3Nl dCAKPj4+ICpudm1lX3JkbWFfYWxsb2NfdGFnc2V0KHN0cnVjdCBudm1lX2N0cmwgKm5jdHJsLAo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldC0+bnVtYV9ub2RlID0gbmN0cmwtPm51bWFfbm9kZTsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXQtPmZsYWdzID0gQkxLX01RX0ZfU0hPVUxEX01FUkdF Owo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldC0+Y21kX3NpemUgPSBzaXplb2Yoc3RydWN0IG52 bWVfcmRtYV9yZXF1ZXN0KSArCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTR19DSFVOS19T SVpFICogc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAoY3RybC0+cGlfc3VwcG9ydCAqIHNpemVvZihzdHJ1Y3QgbnZtZV9yZG1hX3NnbCkpOwo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldC0+ZHJpdmVyX2RhdGEgPSBjdHJsOwo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIHNldC0+bnJfaHdfcXVldWVzID0gbmN0cmwtPnF1ZXVlX2NvdW50IC0gMTsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzZXQtPnRpbWVvdXQgPSBOVk1FX0lPX1RJTUVPVVQ7Cj4+ PiBAQCAtNzg3LDcgKzgxOSwyMiBAQCBzdGF0aWMgaW50IAo+Pj4gbnZtZV9yZG1hX2NvbmZpZ3Vy ZV9hZG1pbl9xdWV1ZShzdHJ1Y3QgbnZtZV9yZG1hX2N0cmwgKmN0cmwsCj4+PiDCoMKgwqDCoMKg IGN0cmwtPmRldmljZSA9IGN0cmwtPnF1ZXVlc1swXS5kZXZpY2U7Cj4+PiDCoMKgwqDCoMKgIGN0 cmwtPmN0cmwubnVtYV9ub2RlID0gZGV2X3RvX25vZGUoY3RybC0+ZGV2aWNlLT5kZXYtPmRtYV9k ZXZpY2UpOwo+Pj4gwqAgLcKgwqDCoCBjdHJsLT5tYXhfZnJfcGFnZXMgPSAKPj4+IG52bWVfcmRt YV9nZXRfbWF4X2ZyX3BhZ2VzKGN0cmwtPmRldmljZS0+ZGV2KTsKPj4+ICvCoMKgwqAgLyogVDEw LVBJIHN1cHBvcnQgKi8KPj4+ICvCoMKgwqAgaWYgKGN0cmwtPmN0cmwub3B0cy0+cGlfZW5hYmxl KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCEoY3RybC0+ZGV2aWNlLT5kZXYtPmF0dHJzLmRl dmljZV9jYXBfZmxhZ3MgJgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElCX0RFVklD RV9JTlRFR1JJVFlfSEFORE9WRVIpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZf d2FybihjdHJsLT5jdHJsLmRldmljZSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAiVDEwLVBJIHJlcXVlc3RlZCBidXQgbm90IHN1cHBvcnRlZCBvbiAlcywgY29udGludWUg Cj4+PiB3aXRob3V0IFQxMC1QSVxuIiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjdHJsLT5kZXZpY2UtPmRldi0+bmFtZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjdHJsLT5waV9zdXBwb3J0ID0gZmFsc2U7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj dHJsLT5jdHJsLm9wdHMtPnBpX2VuYWJsZSA9IGZhbHNlOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0g ZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHJsLT5waV9zdXBwb3J0ID0gdHJ1 ZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAg Y3RybC0+bWF4X2ZyX3BhZ2VzID0gbnZtZV9yZG1hX2dldF9tYXhfZnJfcGFnZXMoY3RybC0+ZGV2 aWNlLT5kZXYsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGN0cmwtPnBpX3N1cHBvcnQpOwo+Pj4gwqAgwqDCoMKgwqDCoCAvKgo+Pj4g wqDCoMKgwqDCoMKgICogQmluZCB0aGUgYXN5bmMgZXZlbnQgU1FFIERNQSBtYXBwaW5nIHRvIHRo ZSBhZG1pbiBxdWV1ZSAKPj4+IGxpZmV0aW1lLgo+Pj4gQEAgLTgyOSw2ICs4NzYsOCBAQCBzdGF0 aWMgaW50IG52bWVfcmRtYV9jb25maWd1cmVfYWRtaW5fcXVldWUoc3RydWN0IAo+Pj4gbnZtZV9y ZG1hX2N0cmwgKmN0cmwsCj4+PiDCoCDCoMKgwqDCoMKgIGN0cmwtPmN0cmwubWF4X3NlZ21lbnRz ID0gY3RybC0+bWF4X2ZyX3BhZ2VzOwo+Pj4gwqDCoMKgwqDCoCBjdHJsLT5jdHJsLm1heF9od19z ZWN0b3JzID0gY3RybC0+bWF4X2ZyX3BhZ2VzIDw8IChpbG9nMihTWl80SykgCj4+PiAtIDkpOwo+ Pj4gK8KgwqDCoCBpZiAoY3RybC0+cGlfc3VwcG9ydCkKPj4+ICvCoMKgwqDCoMKgwqDCoCBjdHJs LT5jdHJsLm1heF9pbnRlZ3JpdHlfc2VnbWVudHMgPSBjdHJsLT5tYXhfZnJfcGFnZXM7Cj4+PiDC oCDCoMKgwqDCoMKgIGJsa19tcV91bnF1aWVzY2VfcXVldWUoY3RybC0+Y3RybC5hZG1pbl9xKTsK Pj4+IMKgIEBAIC0xMTU0LDEzICsxMjAzLDI0IEBAIHN0YXRpYyB2b2lkIG52bWVfcmRtYV91bm1h cF9kYXRhKHN0cnVjdCAKPj4+IG52bWVfcmRtYV9xdWV1ZSAqcXVldWUsCj4+PiDCoMKgwqDCoMKg IGlmICghYmxrX3JxX25yX3BoeXNfc2VnbWVudHMocnEpKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybjsKPj4+IMKgICvCoMKgwqAgaWYgKGJsa19pbnRlZ3JpdHlfcnEocnEpKSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgaWJfZG1hX3VubWFwX3NnKGliZGV2LCByZXEtPnBpX3NnbC0+c2dfdGFi bGUuc2dsLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5waV9zZ2wtPm5lbnRzLCBy cV9kbWFfZGlyKHJxKSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc2dfZnJlZV90YWJsZV9jaGFpbmVk KCZyZXEtPnBpX3NnbC0+c2dfdGFibGUsIFNHX0NIVU5LX1NJWkUpOwo+Pj4gK8KgwqDCoCB9Cj4+ PiArCj4+PiDCoMKgwqDCoMKgIGlmIChyZXEtPm1yKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgaWJf bXJfcG9vbF9wdXQocXVldWUtPnFwLCAmcXVldWUtPnFwLT5yZG1hX21ycywgcmVxLT5tcik7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJlcS0+aXNfcHJvdGVjdGVkKQo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWJfbXJfcG9vbF9wdXQocXVldWUtPnFwLCAmcXVldWUtPnFwLT5zaWdfbXJz LCByZXEtPm1yKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpYl9tcl9wb29sX3B1dChxdWV1ZS0+cXAsICZxdWV1ZS0+cXAtPnJkbWFfbXJzLAo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+bXIp Owo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+bXIgPSBOVUxMOwo+Pj4gwqDCoMKgwqDCoCB9 Cj4+PiDCoCAtwqDCoMKgIGliX2RtYV91bm1hcF9zZyhpYmRldiwgcmVxLT5zZ190YWJsZS5zZ2ws IHJlcS0+bmVudHMsIAo+Pj4gcnFfZG1hX2RpcihycSkpOwo+Pj4gLcKgwqDCoCBzZ19mcmVlX3Rh YmxlX2NoYWluZWQoJnJlcS0+c2dfdGFibGUsIFNHX0NIVU5LX1NJWkUpOwo+Pj4gK8KgwqDCoCBp Yl9kbWFfdW5tYXBfc2coaWJkZXYsIHJlcS0+ZGF0YV9zZ2wuc2dfdGFibGUuc2dsLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5kYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkp Owo+Pj4gK8KgwqDCoCBzZ19mcmVlX3RhYmxlX2NoYWluZWQoJnJlcS0+ZGF0YV9zZ2wuc2dfdGFi bGUsIFNHX0NIVU5LX1NJWkUpOwo+Pj4gwqAgfQo+Pj4gwqAgwqAgc3RhdGljIGludCBudm1lX3Jk bWFfc2V0X3NnX251bGwoc3RydWN0IG52bWVfY29tbWFuZCAqYykKPj4+IEBAIC0xMTc5LDcgKzEy MzksNyBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9tYXBfc2dfaW5saW5lKHN0cnVjdCAKPj4+IG52 bWVfcmRtYV9xdWV1ZSAqcXVldWUsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGNvdW50KQo+ Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2cgPSAmYy0+Y29t bW9uLmRwdHIuc2dsOwo+Pj4gLcKgwqDCoCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCA9IHJlcS0+ c2dfdGFibGUuc2dsOwo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCA9IHJlcS0+ ZGF0YV9zZ2wuc2dfdGFibGUuc2dsOwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaWJfc2dlICpzZ2Ug PSAmcmVxLT5zZ2VbMV07Cj4+PiDCoMKgwqDCoMKgIHUzMiBsZW4gPSAwOwo+Pj4gwqDCoMKgwqDC oCBpbnQgaTsKPj4+IEBAIC0xMjA0LDQwICsxMjY0LDExNSBAQCBzdGF0aWMgaW50IG52bWVfcmRt YV9tYXBfc2dfc2luZ2xlKHN0cnVjdCAKPj4+IG52bWVfcmRtYV9xdWV1ZSAqcXVldWUsCj4+PiDC oCB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBudm1lX2tleWVkX3NnbF9kZXNjICpzZyA9ICZjLT5j b21tb24uZHB0ci5rc2dsOwo+Pj4gwqAgLcKgwqDCoCBzZy0+YWRkciA9IGNwdV90b19sZTY0KHNn X2RtYV9hZGRyZXNzKHJlcS0+c2dfdGFibGUuc2dsKSk7Cj4+PiAtwqDCoMKgIHB1dF91bmFsaWdu ZWRfbGUyNChzZ19kbWFfbGVuKHJlcS0+c2dfdGFibGUuc2dsKSwgc2ctPmxlbmd0aCk7Cj4+PiAr wqDCoMKgIHNnLT5hZGRyID0gY3B1X3RvX2xlNjQoc2dfZG1hX2FkZHJlc3MocmVxLT5kYXRhX3Nn bC5zZ190YWJsZS5zZ2wpKTsKPj4+ICsgcHV0X3VuYWxpZ25lZF9sZTI0KHNnX2RtYV9sZW4ocmVx LT5kYXRhX3NnbC5zZ190YWJsZS5zZ2wpLCAKPj4+IHNnLT5sZW5ndGgpOwo+Pj4gcHV0X3VuYWxp Z25lZF9sZTMyKHF1ZXVlLT5kZXZpY2UtPnBkLT51bnNhZmVfZ2xvYmFsX3JrZXksIHNnLT5rZXkp Owo+Pj4gwqDCoMKgwqDCoCBzZy0+dHlwZSA9IE5WTUVfS0VZX1NHTF9GTVRfREFUQV9ERVNDIDw8 IDQ7Cj4+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4gwqAgfQo+Pj4gwqAgLXN0YXRpYyBpbnQg bnZtZV9yZG1hX21hcF9zZ19mcihzdHJ1Y3QgbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSwKPj4+IC3C oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSwgc3RydWN0IG52bWVf Y29tbWFuZCAqYywKPj4+IC3CoMKgwqDCoMKgwqDCoCBpbnQgY291bnQpCj4+PiArc3RhdGljIHZv aWQgbnZtZV9yZG1hX3NldF9kaWZmX2RvbWFpbihzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQsIAo+ Pj4gc3RydWN0IGJpbyAqYmlvLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBpYl9zaWdfZG9t YWluICpkb21haW4sIHN0cnVjdCByZXF1ZXN0ICpycSkKPj4+IMKgIHsKPj4+IC3CoMKgwqAgc3Ry dWN0IG52bWVfa2V5ZWRfc2dsX2Rlc2MgKnNnID0gJmMtPmNvbW1vbi5kcHRyLmtzZ2w7Cj4+PiAt wqDCoMKgIGludCBucjsKPj4+ICvCoMKgwqAgc3RydWN0IGJsa19pbnRlZ3JpdHkgKmJpID0gYmxr X2dldF9pbnRlZ3JpdHkoYmlvLT5iaV9kaXNrKTsKPj4+ICvCoMKgwqAgc3RydWN0IG52bWVfbnMg Km5zID0gcnEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKPj4+IMKgIC3CoMKgwqAgcmVxLT5tciA9 IGliX21yX3Bvb2xfZ2V0KHF1ZXVlLT5xcCwgJnF1ZXVlLT5xcC0+cmRtYV9tcnMpOwo+Pj4gLcKg wqDCoCBpZiAoV0FSTl9PTl9PTkNFKCFyZXEtPm1yKSkKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVBR0FJTjsKPj4+ICvCoMKgwqAgV0FSTl9PTihiaSA9PSBOVUxMKTsKPj4+ICsKPj4+ICvC oMKgwqAgZG9tYWluLT5zaWdfdHlwZSA9IElCX1NJR19UWVBFX1QxMF9ESUY7Cj4+PiArwqDCoMKg IGRvbWFpbi0+c2lnLmRpZi5iZ190eXBlID0gSUJfVDEwRElGX0NSQzsKPj4+ICvCoMKgwqAgZG9t YWluLT5zaWcuZGlmLnBpX2ludGVydmFsID0gMSA8PCBiaS0+aW50ZXJ2YWxfZXhwOwo+Pj4gK8Kg wqDCoCBkb21haW4tPnNpZy5kaWYucmVmX3RhZyA9IGxlMzJfdG9fY3B1KGNtZC0+cncucmVmdGFn KTsKPj4+IMKgIMKgwqDCoMKgwqAgLyoKPj4+IC3CoMKgwqDCoCAqIEFsaWduIHRoZSBNUiB0byBh IDRLIHBhZ2Ugc2l6ZSB0byBtYXRjaCB0aGUgY3RybCBwYWdlIHNpemUgYW5kCj4+PiAtwqDCoMKg wqAgKiB0aGUgYmxvY2sgdmlydHVhbCBib3VuZGFyeS4KPj4+ICvCoMKgwqDCoCAqIEF0IHRoZSBt b21lbnQgd2UgaGFyZCBjb2RlIHRob3NlLCBidXQgaW4gdGhlIGZ1dHVyZQo+Pj4gK8KgwqDCoMKg ICogd2Ugd2lsbCB0YWtlIHRoZW0gZnJvbSBjbWQuCj4+PiDCoMKgwqDCoMKgwqAgKi8KPj4+IC3C oMKgwqAgbnIgPSBpYl9tYXBfbXJfc2cocmVxLT5tciwgcmVxLT5zZ190YWJsZS5zZ2wsIGNvdW50 LCBOVUxMLCBTWl80Syk7Cj4+PiAtwqDCoMKgIGlmICh1bmxpa2VseShuciA8IGNvdW50KSkgewo+ Pj4gLcKgwqDCoMKgwqDCoMKgIGliX21yX3Bvb2xfcHV0KHF1ZXVlLT5xcCwgJnF1ZXVlLT5xcC0+ cmRtYV9tcnMsIHJlcS0+bXIpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJlcS0+bXIgPSBOVUxMOwo+ Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChuciA8IDApCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gbnI7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArwqDC oMKgIGRvbWFpbi0+c2lnLmRpZi5hcHB0YWdfY2hlY2tfbWFzayA9IDB4ZmZmZjsKPj4+ICvCoMKg wqAgZG9tYWluLT5zaWcuZGlmLmFwcF9lc2NhcGUgPSB0cnVlOwo+Pj4gK8KgwqDCoCBkb21haW4t PnNpZy5kaWYucmVmX2VzY2FwZSA9IHRydWU7Cj4+PiArwqDCoMKgIGlmIChucy0+cGlfdHlwZSAh PSBOVk1FX05TX0RQU19QSV9UWVBFMykKPj4+ICvCoMKgwqDCoMKgwqDCoCBkb21haW4tPnNpZy5k aWYucmVmX3JlbWFwID0gdHJ1ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgbnZtZV9y ZG1hX3NldF9zaWdfYXR0cnMoc3RydWN0IGJpbyAqYmlvLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0 cnVjdCBpYl9zaWdfYXR0cnMgKnNpZ19hdHRycywgc3RydWN0IG52bWVfY29tbWFuZCAqYywKPj4+ ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCj4+PiArewo+Pj4gK8KgwqDCoCB1 MTYgY29udHJvbCA9IGxlMTZfdG9fY3B1KGMtPnJ3LmNvbnRyb2wpOwo+Pj4gKwo+Pj4gK8KgwqDC oCBtZW1zZXQoc2lnX2F0dHJzLCAwLCBzaXplb2YoKnNpZ19hdHRycykpOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBpZiAoY29udHJvbCAmIE5WTUVfUldfUFJJTkZPX1BSQUNUKSB7Cj4+PiArwqDCoMKgwqDC oMKgwqAgLyogZm9yIFdSSVRFX0lOU0VSVC9SRUFEX1NUUklQIG5vIG1lbW9yeSBkb21haW4gKi8K Pj4+ICvCoMKgwqDCoMKgwqDCoCBzaWdfYXR0cnMtPm1lbS5zaWdfdHlwZSA9IElCX1NJR19UWVBF X05PTkU7Cj4+PiArwqDCoMKgwqDCoMKgwqAgbnZtZV9yZG1hX3NldF9kaWZmX2RvbWFpbihjLCBi aW8sICZzaWdfYXR0cnMtPndpcmUsIHJxKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBDbGVhciB0 aGUgUFJBQ1QgYml0IHNpbmNlIEhDQSB3aWxsIGdlbmVyYXRlL3ZlcmlmeSB0aGUgUEkgKi8KPj4+ ICvCoMKgwqDCoMKgwqDCoCBjb250cm9sICY9IH5OVk1FX1JXX1BSSU5GT19QUkFDVDsKPj4+ICvC oMKgwqDCoMKgwqDCoCBjLT5ydy5jb250cm9sID0gY3B1X3RvX2xlMTYoY29udHJvbCk7Cj4+PiAr wqDCoMKgIH0gZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLyogZm9yIFdSSVRFX1BBU1MvUkVB RF9QQVNTIGJvdGggd2lyZS9tZW1vcnkgZG9tYWlucyBleGlzdCAqLwo+Pj4gK8KgwqDCoMKgwqDC oMKgIG52bWVfcmRtYV9zZXRfZGlmZl9kb21haW4oYywgYmlvLCAmc2lnX2F0dHJzLT53aXJlLCBy cSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgbnZtZV9yZG1hX3NldF9kaWZmX2RvbWFpbihjLCBiaW8s ICZzaWdfYXR0cnMtPm1lbSwgcnEpOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB2b2lkIG52bWVfcmRtYV9zZXRfcHJvdF9jaGVja3Moc3RydWN0IG52bWVfY29tbWFu ZCAqY21kLCB1OCAKPj4+ICptYXNrKQo+Pj4gK3sKPj4+ICvCoMKgwqAgKm1hc2sgPSAwOwo+Pj4g K8KgwqDCoCBpZiAobGUxNl90b19jcHUoY21kLT5ydy5jb250cm9sKSAmIE5WTUVfUldfUFJJTkZP X1BSQ0hLX1JFRikKPj4+ICvCoMKgwqDCoMKgwqDCoCAqbWFzayB8PSBJQl9TSUdfQ0hFQ0tfUkVG VEFHOwo+Pj4gK8KgwqDCoCBpZiAobGUxNl90b19jcHUoY21kLT5ydy5jb250cm9sKSAmIE5WTUVf UldfUFJJTkZPX1BSQ0hLX0dVQVJEKQo+Pj4gK8KgwqDCoMKgwqDCoMKgICptYXNrIHw9IElCX1NJ R19DSEVDS19HVUFSRDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgbnZtZV9yZG1hX3Np Z19kb25lKHN0cnVjdCBpYl9jcSAqY3EsIHN0cnVjdCBpYl93YyAqd2MpCj4+PiArewo+Pj4gK8Kg wqDCoCBpZiAodW5saWtlbHkod2MtPnN0YXR1cyAhPSBJQl9XQ19TVUNDRVNTKSkKPj4+ICvCoMKg wqDCoMKgwqDCoCBudm1lX3JkbWFfd3JfZXJyb3IoY3EsIHdjLCAiU0lHIik7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyB2b2lkIG52bWVfcmRtYV9zZXRfcGlfd3Ioc3RydWN0IG52bWVfcmRtYV9y ZXF1ZXN0ICpyZXEsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBu dm1lX2NvbW1hbmQgKmMpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaWJfc2lnX2F0dHJzICpz aWdfYXR0cnMgPSByZXEtPm1yLT5zaWdfYXR0cnM7Cj4+PiArwqDCoMKgIHN0cnVjdCBpYl9yZWdf d3IgKndyID0gJnJlcS0+cmVnX3dyOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBi bGtfbXFfcnFfZnJvbV9wZHUocmVxKTsKPj4+ICvCoMKgwqAgc3RydWN0IGJpbyAqYmlvID0gcnEt PmJpbzsKPj4+ICvCoMKgwqAgc3RydWN0IG52bWVfa2V5ZWRfc2dsX2Rlc2MgKnNnID0gJmMtPmNv bW1vbi5kcHRyLmtzZ2w7Cj4+PiArCj4+PiArwqDCoMKgIG52bWVfcmRtYV9zZXRfc2lnX2F0dHJz KGJpbywgc2lnX2F0dHJzLCBjLCBycSk7Cj4+PiArCj4+PiArwqDCoMKgIG52bWVfcmRtYV9zZXRf cHJvdF9jaGVja3MoYywgJnNpZ19hdHRycy0+Y2hlY2tfbWFzayk7Cj4+PiDCoCDCoMKgwqDCoMKg IGliX3VwZGF0ZV9mYXN0X3JlZ19rZXkocmVxLT5tciwgaWJfaW5jX3JrZXkocmVxLT5tci0+cmtl eSkpOwo+Pj4gwqAgK8KgwqDCoCByZXEtPnJlZ19jcWUuZG9uZSA9IG52bWVfcmRtYV9zaWdfZG9u ZTsKPj4+ICsKPj4+ICvCoMKgwqAgbWVtc2V0KHdyLCAwLCBzaXplb2YoKndyKSk7Cj4+PiArwqDC oMKgIHdyLT53ci5vcGNvZGUgPSBJQl9XUl9SRUdfTVJfSU5URUdSSVRZOwo+Pj4gK8KgwqDCoCB3 ci0+d3Iud3JfY3FlID0gJnJlcS0+cmVnX2NxZTsKPj4+ICvCoMKgwqAgd3ItPndyLm51bV9zZ2Ug PSAwOwo+Pj4gK8KgwqDCoCB3ci0+d3Iuc2VuZF9mbGFncyA9IDA7Cj4+PiArwqDCoMKgIHdyLT5t ciA9IHJlcS0+bXI7Cj4+PiArwqDCoMKgIHdyLT5rZXkgPSByZXEtPm1yLT5ya2V5Owo+Pj4gK8Kg wqDCoCB3ci0+YWNjZXNzID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgSUJfQUNDRVNTX1JFTU9URV9XUklURTsKPj4+ICsKPj4+ICvCoMKgwqAgc2ct PmFkZHIgPSBjcHVfdG9fbGU2NChyZXEtPm1yLT5pb3ZhKTsKPj4+ICvCoMKgwqAgcHV0X3VuYWxp Z25lZF9sZTI0KHJlcS0+bXItPmxlbmd0aCwgc2ctPmxlbmd0aCk7Cj4+PiArwqDCoMKgIHB1dF91 bmFsaWduZWRfbGUzMihyZXEtPm1yLT5ya2V5LCBzZy0+a2V5KTsKPj4+ICvCoMKgwqAgc2ctPnR5 cGUgPSAoTlZNRV9LRVlfU0dMX0ZNVF9EQVRBX0RFU0MgPDwgNCkgfCAKPj4+IE5WTUVfU0dMX0ZN VF9JTlZBTElEQVRFOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBudm1lX3JkbWFfc2V0 X3JlZ193cihzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjKQo+Pj4gK3sKPj4+ICvC oMKgwqAgc3RydWN0IG52bWVfa2V5ZWRfc2dsX2Rlc2MgKnNnID0gJmMtPmNvbW1vbi5kcHRyLmtz Z2w7Cj4+PiArCj4+PiDCoMKgwqDCoMKgIHJlcS0+cmVnX2NxZS5kb25lID0gbnZtZV9yZG1hX21l bXJlZ19kb25lOwo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCBtZW1zZXQoJnJlcS0+cmVnX3dyLCAwLCBz aXplb2YocmVxLT5yZWdfd3IpKTsKPj4+IMKgwqDCoMKgwqAgcmVxLT5yZWdfd3Iud3Iub3Bjb2Rl ID0gSUJfV1JfUkVHX01SOwo+Pj4gwqDCoMKgwqDCoCByZXEtPnJlZ193ci53ci53cl9jcWUgPSAm cmVxLT5yZWdfY3FlOwo+Pj4gQEAgLTEyNTMsOCArMTM4OCw1MiBAQCBzdGF0aWMgaW50IG52bWVf cmRtYV9tYXBfc2dfZnIoc3RydWN0IAo+Pj4gbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSwKPj4+IMKg wqDCoMKgwqAgcHV0X3VuYWxpZ25lZF9sZTMyKHJlcS0+bXItPnJrZXksIHNnLT5rZXkpOwo+Pj4g wqDCoMKgwqDCoCBzZy0+dHlwZSA9IChOVk1FX0tFWV9TR0xfRk1UX0RBVEFfREVTQyA8PCA0KSB8 Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVk1FX1NHTF9GTVRfSU5WQUxJREFURTsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBudm1lX3JkbWFfbWFwX3NnX2ZyKHN0cnVjdCBu dm1lX3JkbWFfcXVldWUgKnF1ZXVlLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBudm1lX3Jk bWFfcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgbnZtZV9jb21tYW5kICpjLAo+Pj4gK8KgwqDCoMKgwqDC oMKgIGludCBjb3VudCwgaW50IHBpX2NvdW50KQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IG52 bWVfcmRtYV9zZ2wgKnNnbCA9ICZyZXEtPmRhdGFfc2dsOwo+Pj4gK8KgwqDCoCBpbnQgbnI7Cj4+ PiArCj4+PiArwqDCoMKgIGlmIChyZXEtPmlzX3Byb3RlY3RlZCkgewo+Pj4gK8KgwqDCoMKgwqDC oMKgIHJlcS0+bXIgPSBpYl9tcl9wb29sX2dldChxdWV1ZS0+cXAsICZxdWV1ZS0+cXAtPnNpZ19t cnMpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChXQVJOX09OX09OQ0UoIXJlcS0+bXIpKQo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FQUdBSU47Cj4+PiArCj4+PiArwqDCoMKg wqDCoMKgwqAgbnIgPSBpYl9tYXBfbXJfc2dfcGkocmVxLT5tciwgc2dsLT5zZ190YWJsZS5zZ2ws IGNvdW50LCAwLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmVxLT5waV9zZ2wtPnNnX3RhYmxlLnNnbCwgcGlfY291bnQsIDAsCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTWl80Syk7Cj4+PiArwqDCoMKgwqDCoMKgwqAg aWYgKHVubGlrZWx5KG5yKSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gbXJfcHV0 Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIG52bWVfcmRtYV9zZXRfcGlfd3IocmVxLCBjKTsK Pj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXEtPm1yID0gaWJfbXJf cG9vbF9nZXQocXVldWUtPnFwLCAmcXVldWUtPnFwLT5yZG1hX21ycyk7Cj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKFdBUk5fT05fT05DRSghcmVxLT5tcikpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVBR0FJTjsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+Pj4gK8KgwqDCoMKg wqDCoMKgwqAgKiBBbGlnbiB0aGUgTVIgdG8gYSA0SyBwYWdlIHNpemUgdG8gbWF0Y2ggdGhlIGN0 cmwgcGFnZSBzaXplCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIGFuZCB0aGUgYmxvY2sgdmlydHVh bCBib3VuZGFyeS4KPj4+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+PiArwqDCoMKgwqDCoMKgwqAg bnIgPSBpYl9tYXBfbXJfc2cocmVxLT5tciwgc2dsLT5zZ190YWJsZS5zZ2wsIGNvdW50LCAwLCBT Wl80Syk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KG5yIDwgY291bnQpKQo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBtcl9wdXQ7Cj4+PiArCj4+PiArwqDCoMKgwqDC oMKgwqAgbnZtZV9yZG1hX3NldF9yZWdfd3IocmVxLCBjKTsKPj4+ICvCoMKgwqAgfQo+Pj4gwqAg wqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+ICttcl9wdXQ6Cj4+PiArwqDCoMKgIGlmIChyZXEtPmlz X3Byb3RlY3RlZCkKPj4+ICvCoMKgwqDCoMKgwqDCoCBpYl9tcl9wb29sX3B1dChxdWV1ZS0+cXAs ICZxdWV1ZS0+cXAtPnNpZ19tcnMsIHJlcS0+bXIpOwo+Pj4gK8KgwqDCoCBlbHNlCj4+PiArwqDC oMKgwqDCoMKgwqAgaWJfbXJfcG9vbF9wdXQocXVldWUtPnFwLCAmcXVldWUtPnFwLT5yZG1hX21y cywgcmVxLT5tcik7Cj4+PiArwqDCoMKgIHJlcS0+bXIgPSBOVUxMOwo+Pj4gK8KgwqDCoCBpZiAo bnIgPCAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBucjsKPj4+ICvCoMKgwqAgcmV0dXJu IC1FSU5WQUw7Cj4+PiDCoCB9Cj4+PiDCoCDCoCBzdGF0aWMgaW50IG52bWVfcmRtYV9tYXBfZGF0 YShzdHJ1Y3QgbnZtZV9yZG1hX3F1ZXVlICpxdWV1ZSwKPj4+IEBAIC0xMjYzLDYgKzE0NDIsNyBA QCBzdGF0aWMgaW50IG52bWVfcmRtYV9tYXBfZGF0YShzdHJ1Y3QgCj4+PiBudm1lX3JkbWFfcXVl dWUgKnF1ZXVlLAo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9yZG1hX3JlcXVlc3QgKnJlcSA9 IGJsa19tcV9ycV90b19wZHUocnEpOwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbnZtZV9yZG1hX2Rl dmljZSAqZGV2ID0gcXVldWUtPmRldmljZTsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGliX2Rldmlj ZSAqaWJkZXYgPSBkZXYtPmRldjsKPj4+ICvCoMKgwqAgaW50IHBpX2NvdW50ID0gMDsKPj4+IMKg wqDCoMKgwqAgaW50IGNvdW50LCByZXQ7Cj4+PiDCoCDCoMKgwqDCoMKgIHJlcS0+bnVtX3NnZSA9 IDE7Cj4+PiBAQCAtMTI3MywyMyArMTQ1Myw0NCBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9tYXBf ZGF0YShzdHJ1Y3QgCj4+PiBudm1lX3JkbWFfcXVldWUgKnF1ZXVlLAo+Pj4gwqDCoMKgwqDCoCBp ZiAoIWJsa19ycV9ucl9waHlzX3NlZ21lbnRzKHJxKSkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gbnZtZV9yZG1hX3NldF9zZ19udWxsKGMpOwo+Pj4gwqAgLcKgwqDCoCByZXEtPnNnX3Rh YmxlLnNnbCA9IHJlcS0+Zmlyc3Rfc2dsOwo+Pj4gLcKgwqDCoCByZXQgPSBzZ19hbGxvY190YWJs ZV9jaGFpbmVkKCZyZXEtPnNnX3RhYmxlLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmxr X3JxX25yX3BoeXNfc2VnbWVudHMocnEpLCByZXEtPnNnX3RhYmxlLnNnbCwKPj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFNHX0NIVU5LX1NJWkUpOwo+Pj4gK8KgwqDCoCByZXEtPmRhdGFfc2ds LnNnX3RhYmxlLnNnbCA9IHJlcS0+ZGF0YV9zZ2wuZmlyc3Rfc2dsOwo+Pj4gK8KgwqDCoCByZXQg PSBzZ19hbGxvY190YWJsZV9jaGFpbmVkKCZyZXEtPmRhdGFfc2dsLnNnX3RhYmxlLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYmxrX3JxX25yX3BoeXNfc2VnbWVudHMocnEpLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5kYXRhX3NnbC5zZ190YWJsZS5zZ2wsIFNHX0NIVU5L X1NJWkUpOwo+Pj4gwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU5PTUVNOwo+Pj4gwqAgLcKgwqDCoCByZXEtPm5lbnRzID0gYmxrX3JxX21hcF9zZyhy cS0+cSwgcnEsIHJlcS0+c2dfdGFibGUuc2dsKTsKPj4+ICvCoMKgwqAgcmVxLT5kYXRhX3NnbC5u ZW50cyA9IGJsa19ycV9tYXBfc2cocnEtPnEsIHJxLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT5kYXRhX3NnbC5zZ190YWJsZS5zZ2wpOwo+ Pj4gwqAgLcKgwqDCoCBjb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsIHJlcS0+c2dfdGFibGUu c2dsLCByZXEtPm5lbnRzLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cnFfZG1hX2RpcihycSkpOwo+Pj4gK8KgwqDCoCBjb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYs IHJlcS0+ZGF0YV9zZ2wuc2dfdGFibGUuc2dsLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmVxLT5kYXRhX3NnbC5uZW50cywgcnFfZG1hX2RpcihycSkpOwo+Pj4gwqDC oMKgwqDCoCBpZiAodW5saWtlbHkoY291bnQgPD0gMCkpIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCByZXQgPSAtRUlPOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZyZWVfdGFibGU7 Cj4+PiDCoMKgwqDCoMKgIH0KPj4+IMKgIC3CoMKgwqAgaWYgKGNvdW50IDw9IGRldi0+bnVtX2lu bGluZV9zZWdtZW50cykgewo+Pj4gK8KgwqDCoCBpZiAoYmxrX2ludGVncml0eV9ycShycSkpIHsK Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXEtPnBpX3NnbC0+c2dfdGFibGUuc2dsID0gcmVxLT5waV9z Z2wtPmZpcnN0X3NnbDsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBzZ19hbGxvY190YWJsZV9j aGFpbmVkKCZyZXEtPnBpX3NnbC0+c2dfdGFibGUsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJsa19ycV9jb3VudF9pbnRlZ3JpdHlfc2cocnEtPnEsIHJxLT5iaW8pLAo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXEtPnBpX3NnbC0+c2dfdGFibGUuc2ds LCBTR19DSFVOS19TSVpFKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkocmV0KSkg ewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVOT01FTTsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X3VubWFwX3NnOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0K Pj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXEtPnBpX3NnbC0+bmVudHMgPSBibGtfcnFfbWFw X2ludGVncml0eV9zZyhycS0+cSwgcnEtPmJpbywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXEtPnBpX3NnbC0+c2dfdGFibGUuc2dsKTsKPj4+ICvCoMKgwqDC oMKgwqDCoCBwaV9jb3VudCA9IGliX2RtYV9tYXBfc2coaWJkZXYsIHJlcS0+cGlfc2dsLT5zZ190 YWJsZS5zZ2wsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+cGlfc2ds LT5uZW50cywgcnFfZG1hX2RpcihycSkpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICh1bmxpa2Vs eShwaV9jb3VudCA8PSAwKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJ TzsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2ZyZWVfcGlfdGFibGU7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIGlmIChj b3VudCA8PSBkZXYtPm51bV9pbmxpbmVfc2VnbWVudHMgJiYgIXJlcS0+aXNfcHJvdGVjdGVkKSB7 Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSAmJiBu dm1lX3JkbWFfcXVldWVfaWR4KHF1ZXVlKSAmJgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcXVldWUtPmN0cmwtPnVzZV9pbmxpbmVfZGF0YSAmJgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYmxrX3JxX3BheWxvYWRfYnl0ZXMocnEpIDw9Cj4+PiBAQCAtMTMwNCwxNyArMTUw NSwyNSBAQCBzdGF0aWMgaW50IG52bWVfcmRtYV9tYXBfZGF0YShzdHJ1Y3QgCj4+PiBudm1lX3Jk bWFfcXVldWUgKnF1ZXVlLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqAg fQo+Pj4gwqAgLcKgwqDCoCByZXQgPSBudm1lX3JkbWFfbWFwX3NnX2ZyKHF1ZXVlLCByZXEsIGMs IGNvdW50KTsKPj4+ICvCoMKgwqAgcmV0ID0gbnZtZV9yZG1hX21hcF9zZ19mcihxdWV1ZSwgcmVx LCBjLCBjb3VudCwgcGlfY291bnQpOwo+Pj4gwqAgb3V0Ogo+Pj4gwqDCoMKgwqDCoCBpZiAodW5s aWtlbHkocmV0KSkKPj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bm1hcF9zZzsKPj4+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIG91dF91bm1hcF9waV9zZzsKPj4+IMKgIMKgwqDCoMKgwqAgcmV0 dXJuIDA7Cj4+PiDCoCArb3V0X3VubWFwX3BpX3NnOgo+Pj4gK8KgwqDCoCBpZiAoYmxrX2ludGVn cml0eV9ycShycSkpCj4+PiArwqDCoMKgwqDCoMKgwqAgaWJfZG1hX3VubWFwX3NnKGliZGV2LCBy ZXEtPnBpX3NnbC0+c2dfdGFibGUuc2dsLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXEtPnBpX3NnbC0+bmVudHMsIHJxX2RtYV9kaXIocnEpKTsKPj4+ICtvdXRfZnJlZV9w aV90YWJsZToKPj4+ICvCoMKgwqAgaWYgKGJsa19pbnRlZ3JpdHlfcnEocnEpKQo+Pj4gK8KgwqDC oMKgwqDCoMKgIHNnX2ZyZWVfdGFibGVfY2hhaW5lZCgmcmVxLT5waV9zZ2wtPnNnX3RhYmxlLCBT R19DSFVOS19TSVpFKTsKPj4+IMKgIG91dF91bm1hcF9zZzoKPj4+IC3CoMKgwqAgaWJfZG1hX3Vu bWFwX3NnKGliZGV2LCByZXEtPnNnX3RhYmxlLnNnbCwgcmVxLT5uZW50cywgCj4+PiBycV9kbWFf ZGlyKHJxKSk7Cj4+PiArwqDCoMKgIGliX2RtYV91bm1hcF9zZyhpYmRldiwgcmVxLT5kYXRhX3Nn bC5zZ190YWJsZS5zZ2wsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXEtPmRhdGFfc2ds Lm5lbnRzLCBycV9kbWFfZGlyKHJxKSk7Cj4+PiDCoCBvdXRfZnJlZV90YWJsZToKPj4+IC3CoMKg wqAgc2dfZnJlZV90YWJsZV9jaGFpbmVkKCZyZXEtPnNnX3RhYmxlLCBTR19DSFVOS19TSVpFKTsK Pj4+ICvCoMKgwqAgc2dfZnJlZV90YWJsZV9jaGFpbmVkKCZyZXEtPmRhdGFfc2dsLnNnX3RhYmxl LCBTR19DSFVOS19TSVpFKTsKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+IMKgIH0KPj4+ IMKgIEBAIC0xNzU0LDYgKzE5NjMsMTMgQEAgc3RhdGljIGJsa19zdGF0dXNfdCAKPj4+IG52bWVf cmRtYV9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwKPj4+IMKgIMKgwqDCoMKg wqAgYmxrX21xX3N0YXJ0X3JlcXVlc3QocnEpOwo+Pj4gwqAgK8KgwqDCoCByZXEtPmlzX3Byb3Rl Y3RlZCA9IGZhbHNlOwo+Pj4gK8KgwqDCoCBpZiAobnZtZV9yZG1hX3F1ZXVlX2lkeChxdWV1ZSkg JiYgcXVldWUtPnBpX3N1cHBvcnQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYy0+Y29tbW9u Lm9wY29kZSA9PSBudm1lX2NtZF93cml0ZSB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Yy0+Y29tbW9uLm9wY29kZSA9PSBudm1lX2NtZF9yZWFkKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmVxLT5pc19wcm90ZWN0ZWQgPSBudm1lX25zX2hhc19waShucyk7Cj4+PiArwqDCoMKg IH0KPj4+ICsKPj4KPj4gVGhpcyBjaGVjayBiZWxvbmdzIHRvIG52bWUtY29yZSBpbiBuYXR1cmUu IFdoeSBub3QgdGVzdAo+PiBibGtfaW50ZWdyaXR5X3JxKCk/Cj4gCj4gSW4gY2FzZSB0aGF0IHdy aXRlX2dlbmVyYXRlIGFuZCByZWFkX3ZlcmlmeSBhcmUgMCwgdGhlIGNhbGwgCj4gYmxrX2ludGVn cml0eV9ycSgpIHdpbGwgcmV0dXJuIDAgYXMgd2VsbC4gU28gaXQncyBub3QgZ29vZCBlbm91Z2gg Zm9yIHVzLgo+IAo+IGlzX3Byb3RlY3RlZCBib29sIGlzIGEgaGVscGVyIGZvciBSRE1BIHRyYW5z cG9ydCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIAo+IHBpX3JlcSBhbmQgbm9uX3BpIHJlcXVlc3Qu CgpUaGlzIGlzIGEgaGFjaywgWW91IG5lZWQgdG8gdGFrZSB0aGlzIGluZm8gZnJvbSB0aGUgY29t bWFuZC4KSG93IGFib3V0IGZsYWdnaW5nIGl0IHdoZW4gdGhlIFBSSU5GTyBpcyBzZXQuLgoKU29t ZXRoaW5nIGxpa2U6Ci0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9k cml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggNGJlNjQ3MDNhYTQ3Li4xMmVmMjYwMjk2ZTEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYworKysgYi9kcml2ZXJzL252bWUv aG9zdC9jb3JlLmMKQEAgLTQzNCw2ICs0MzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbnZtZV9j bGVhcl9udm1lX3JlcXVlc3Qoc3RydWN0IApyZXF1ZXN0ICpyZXEpCiAgICAgICAgIGlmICghKHJl cS0+cnFfZmxhZ3MgJiBSUUZfRE9OVFBSRVApKSB7CiAgICAgICAgICAgICAgICAgbnZtZV9yZXEo cmVxKS0+cmV0cmllcyA9IDA7CiAgICAgICAgICAgICAgICAgbnZtZV9yZXEocmVxKS0+ZmxhZ3Mg PSAwOworICAgICAgICAgICAgICAgbnZtZV9yZXEocmVxKS0+aGFzX3BpID0gZmFsc2U7CiAgICAg ICAgICAgICAgICAgcmVxLT5ycV9mbGFncyB8PSBSUUZfRE9OVFBSRVA7CiAgICAgICAgIH0KICB9 CkBAIC02ODQsNiArNjg1LDcgQEAgc3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnZtZV9zZXR1 cF9ydyhzdHJ1Y3QgCm52bWVfbnMgKm5zLAogICAgICAgICAgICAgICAgICAgICAgICAgY21uZC0+ cncucmVmdGFnID0gY3B1X3RvX2xlMzIodDEwX3BpX3JlZl90YWcocmVxKSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBu dm1lX3JlcShyZXEpLT5oYXNfcGkgPSB0cnVlOwogICAgICAgICB9CgogICAgICAgICBjbW5kLT5y dy5jb250cm9sID0gY3B1X3RvX2xlMTYoY29udHJvbCk7Ci0tCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1udm1lIG1haWxpbmcgbGlzdApMaW51 eC1udm1lQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1udm1lCg==