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.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,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 D51FEC2D0DB for ; Thu, 23 Jan 2020 14:35:15 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 AB7682087E for ; Thu, 23 Jan 2020 14:35:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="TWci245u" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AB7682087E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7E4AC6FA18; Thu, 23 Jan 2020 14:35:15 +0000 (UTC) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-eopbgr770047.outbound.protection.outlook.com [40.107.77.47]) by gabe.freedesktop.org (Postfix) with ESMTPS id C3BD86FA18 for ; Thu, 23 Jan 2020 14:35:14 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ki19Bp89GFAyMTGhu0ElW1n8wse4MiOiUaJP+0U2LzU6XS8mMJLY1NjRDkFuMpKbdGZkJh1Ibgl71qpUlrHbK128dQtw/G7sDJEK1xhCAYWET+nCVDNIBl3IQWOAZ4fePSY9WjT6nwrHPUs5q4ODUK+JqzabTXu0f1RB/Y20DnCZfaMr9TFrUaC0gVOtWXeykW/1zQyR+SHF81kQ8Iu3D6zOnYJGR5Zi16sOFqz9WA+KhMR3ie+/snWOCx1c1hXa1R79VKOOd8JK/EWVAVqB62mmcVz/FvZNnSeZ98GWwDYuw6VA4dqmYK4xNRu7cl8AW4aONHPnKMekCCps7Lr5kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PApaxDOwEcuj55ATo93GFBoTsTdlcXd6i/86wW+/3W4=; b=gOAC676N52yQtrII28LYbE6HjKTyWQFq1rg10orAXEXSwZhiTVhfTDTOoG8qL22scSFJNdNFuMnMMfjwCN50tpTAz/CUmeneM2bez1yCC58Bl/a7Ve1W3EZB0vfdNLjL5CLMms6Rc+uAGXaWu5SfhdN2NKsXkk4QdI1w+ge4P9pb3PLzNMoXZAODg2sfXoFRc+5G4fHWho84g1C8JaAhuILHSY9uOYGJvNTnWsrHk6fNGoGgxA7UJatrtW+MPvq4jfvLjFtYZvkM9ic6mMAlZsk0ZDqJhJRVJMJpj9W1iWPy5uUrp5N3uQm+P69s24n7q4r+Vr2Js4Rj6Oi9JvUvYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PApaxDOwEcuj55ATo93GFBoTsTdlcXd6i/86wW+/3W4=; b=TWci245uq3XDpZaEV+JntTL10B4znjzo6qJuyY4dl5XFVUqZIVBZG55PbFgwvN/3QpF37f8M9KYLiK1dXchALhOSLvYDazMo7/H6ORMSGpkNks4TDhOqbpwN9EJUYCAaCaxLEDZwekh/SVteqEQOj8UsTeRM0lcD5O1IdEWmgOg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Christian.Koenig@amd.com; Received: from DM5PR12MB1705.namprd12.prod.outlook.com (10.175.88.22) by DM5PR12MB2582.namprd12.prod.outlook.com (52.132.141.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.21; Thu, 23 Jan 2020 14:35:13 +0000 Received: from DM5PR12MB1705.namprd12.prod.outlook.com ([fe80::8dde:b52a:d97a:e89]) by DM5PR12MB1705.namprd12.prod.outlook.com ([fe80::8dde:b52a:d97a:e89%2]) with mapi id 15.20.2644.028; Thu, 23 Jan 2020 14:35:13 +0000 Subject: Re: [PATCH 4/4] drm/amdgpu: rework synchronization of VM updates v3 To: Tom St Denis , amd-gfx@lists.freedesktop.org, Felix.Kuehling@amd.com References: <20200123142122.4084-1-christian.koenig@amd.com> <20200123142122.4084-4-christian.koenig@amd.com> <72d0c177-11d2-c43e-bf0d-53123739790d@gmail.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <2fa7de0d-a08e-f36d-31d0-cbb4e8632163@amd.com> Date: Thu, 23 Jan 2020 15:35:07 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 In-Reply-To: Content-Language: en-US X-ClientProxiedBy: AM0PR07CA0005.eurprd07.prod.outlook.com (2603:10a6:208:ac::18) To DM5PR12MB1705.namprd12.prod.outlook.com (2603:10b6:3:10c::22) MIME-Version: 1.0 Received: from [IPv6:2a02:908:1252:fb60:be8a:bd56:1f94:86e7] (2a02:908:1252:fb60:be8a:bd56:1f94:86e7) by AM0PR07CA0005.eurprd07.prod.outlook.com (2603:10a6:208:ac::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.14 via Frontend Transport; Thu, 23 Jan 2020 14:35:11 +0000 X-Originating-IP: [2a02:908:1252:fb60:be8a:bd56:1f94:86e7] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 39f4eddb-90f2-407d-2d6d-08d7a011748b X-MS-TrafficTypeDiagnostic: DM5PR12MB2582:|DM5PR12MB2582: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-Forefront-PRVS: 029174C036 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(39860400002)(346002)(136003)(376002)(396003)(199004)(189003)(36756003)(66574012)(6636002)(6486002)(86362001)(31686004)(66476007)(66556008)(2616005)(478600001)(66946007)(31696002)(15650500001)(6666004)(5660300002)(316002)(2906002)(52116002)(30864003)(8676002)(53546011)(186003)(16526019)(8936002)(81156014)(81166006); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB2582; H:DM5PR12MB1705.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nj0yFYDHMTUIE4ctANtzR9iMGk1do96pdVKhL4AcAaU8HpQLnTu3JP2a5ALOOUvHCfoDspyR+K91FNmp/jagB98qw8PUGXAsXQoozWcV/sukAG09/XlOiGoK0pajJOm6xatr5GdSCZrpIIvotAFmw38nWaynhQdFu5oxAyRQSzry6kXzNs0E+hrol8r6Bwd89UVZ3+ym95eEEfL1EKN91idisnY0/Ni4Bo9xPso6FyEQ04hOlk46G3U8OOfiePpxmOEJMy0wa13hpoPwwkxOzqigjwABUZr53skc9mDfxAI+VdJEmq7kt1WHV9NNHk0jVJHEeUQ8+uTT1Z3MbItkfQWCx196P+jyYg7okcZXvA+4y4AjamCwGaReMM8EF+IfYyQWqCTDVKqu6imtrG03rrDr80WOZsqvL08/8sTQpNanIcRDBTu1z0OQFWK/mU+n X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 39f4eddb-90f2-407d-2d6d-08d7a011748b X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jan 2020 14:35:13.0259 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jO5/IJulhcWdBQXnpmSNVv2WfiHDbuOW+wiCi10I529ov4tHJHN0e7R6sjxlWk4U X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB2582 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" VGhhdCBpcyBmaXhlZCBieSBwYXRjaCAjMiBpbiB0aGlzIHNlcmllcy4KClBhdGNoICM0IGlzIHRo ZW4gcmUtYXBwbHlpbmcgdGhlIGZhdWx0eSBzeW5jaHJvbml6YXRpb24gY2xlYW51cC4KClJlZ2Fy ZHMsCkNocmlzdGlhbi4KCkFtIDIzLjAxLjIwIHVtIDE1OjI1IHNjaHJpZWIgVG9tIFN0IERlbmlz Ogo+IE9uIHRoZSB0aXAgb2YgZHJtLW5leHQgKGFzIG9mIHRoaXMgbW9ybmluZykgSSB3YXMgc3Rp bGwgZ2V0dGluZwo+Cj4gW8KgIDk4My44OTEyNjRdIFtkcm06YW1kZ3B1X2dlbV92YV9pb2N0bCBb YW1kZ3B1XV0gKkVSUk9SKiBDb3VsZG4ndCAKPiB1cGRhdGUgQk9fVkEgKC0yKQo+Cj4gdHlwZSBl cnJvcnMuwqAgU28gSSdtIGxvb2tpbmcgZm9yIHRoYXQgdG8gc3RvcC7CoCBBdCBsZWFzdCBMTFZN IHdhcyAKPiBmaXhlZCBzbyBJIGNhbiBydW4gYSBmdWxsIHJ1biBvZiBwaWdsaXQgd2l0aG91dCBn ZnggaGFuZ3MuCj4KPiBUb20KPgo+IE9uIDIwMjAtMDEtMjMgOToyNCBhLm0uLCBDaHJpc3RpYW4g S8O2bmlnIHdyb3RlOgo+PiBUaGFua3MsIHBsZWFzZSBnaXZlIHRoZW0gYSBmdWxsIHJvdW5kLgo+ Pgo+PiBUb29rIG1lIGEgd2VlayB0byBmaWd1cmUgb3V0IHRoYXQgd2UgYWNjaWRlbnRhbGx5IHBh c3MgaW4gdGhlIAo+PiByZXNlcnZhdGlvbiBvYmplY3QgYXMgTlVMTCBmb3IgY2xlYXJlZCBCT3Mu Cj4+Cj4+IFRoYW5rcywKPj4gQ2hyaXN0aWFuLgo+Pgo+PiBBbSAyMy4wMS4yMCB1bSAxNToyMiBz Y2hyaWViIFRvbSBTdCBEZW5pczoKPj4+IEp1c3QgYXBwbGllZCB0aGVzZSBub3csIHRyeWluZyB0 aGVtIG91dCB3aWxsIHJlcG9ydCBiYWNrIGluIH4yMCBtaW5zLgo+Pj4KPj4+IE9uIDIwMjAtMDEt MjMgOToyMSBhLm0uLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+Pj4+IElmIHByb3ZpZGVkIHdl IG9ubHkgc3luYyB0byB0aGUgQk9zIHJlc2VydmF0aW9uCj4+Pj4gb2JqZWN0IGFuZCBubyBsb25n ZXIgdG8gdGhlIHJvb3QgUEQuCj4+Pj4KPj4+PiB2MjogdXBkYXRlIGNvbW1lbnQsIGNsZWFudXAg YW1kZ3B1X2JvX3N5bmNfd2FpdF9yZXN2Cj4+Pj4gdjM6IHVzZSBjb3JyZWN0IHJlc2VydmF0aW9u IG9iamVjdCB3aGlsZSBjbGVhcmluZwo+Pj4+Cj4+Pj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFu IEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+Pj4+IC0tLQo+Pj4+IMKgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuY8KgIHwgMzcgCj4+Pj4gKysrKysr KysrKysrKysrKysrKystLS0tLS0KPj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfb2JqZWN0LmjCoCB8wqAgMyArKysKPj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfc3luYy5jwqDCoMKgIHzCoCA3IC0tLS0tCj4+Pj4gwqAgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmPCoMKgwqDCoMKgIHwgNDEgCj4+Pj4gKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0KPj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdm0uaMKgwqDCoMKgwqAgfMKgIDQgKy0tCj4+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3ZtX2NwdS5jwqAgfCAyMiArKysrLS0tLS0tLS0tLS0tCj4+Pj4gwqAg ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtX3NkbWEuYyB8IDE1ICsrKy0tLS0t LS0tCj4+Pj4gwqAgNyBmaWxlcyBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlv bnMoLSkKPj4+Pgo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfb2JqZWN0LmMgCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf b2JqZWN0LmMKPj4+PiBpbmRleCA0NmM3NmUyZTEyODEuLmM3MGJiZGRhMDc4YyAxMDA2NDQKPj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPj4+PiBAQCAt MTQwMywzMCArMTQwMyw1MSBAQCB2b2lkIGFtZGdwdV9ib19mZW5jZShzdHJ1Y3QgYW1kZ3B1X2Jv ICpibywgCj4+Pj4gc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCj4+Pj4gwqAgfQo+Pj4+IMKgIMKg IC8qKgo+Pj4+IC0gKiBhbWRncHVfc3luY193YWl0X3Jlc3YgLSBXYWl0IGZvciBCTyByZXNlcnZh dGlvbiBmZW5jZXMKPj4+PiArICogYW1kZ3B1X2JvX3N5bmNfd2FpdF9yZXN2IC0gV2FpdCBmb3Ig Qk8gcmVzZXJ2YXRpb24gZmVuY2VzCj4+Pj4gwqDCoCAqCj4+Pj4gLSAqIEBibzogYnVmZmVyIG9i amVjdAo+Pj4+ICsgKiBAYWRldjogYW1kZ3B1IGRldmljZSBwb2ludGVyCj4+Pj4gKyAqIEByZXN2 OiByZXNlcnZhdGlvbiBvYmplY3QgdG8gc3luYyB0bwo+Pj4+ICsgKiBAc3luY19tb2RlOiBzeW5j aHJvbml6YXRpb24gbW9kZQo+Pj4+IMKgwqAgKiBAb3duZXI6IGZlbmNlIG93bmVyCj4+Pj4gwqDC oCAqIEBpbnRyOiBXaGV0aGVyIHRoZSB3YWl0IGlzIGludGVycnVwdGlibGUKPj4+PiDCoMKgICoK Pj4+PiArICogRXh0cmFjdCB0aGUgZmVuY2VzIGZyb20gdGhlIHJlc2VydmF0aW9uIG9iamVjdCBh bmQgd2FpdHMgZm9yIAo+Pj4+IHRoZW0gdG8gZmluaXNoLgo+Pj4+ICsgKgo+Pj4+IMKgwqAgKiBS ZXR1cm5zOgo+Pj4+IMKgwqAgKiAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZS4KPj4+PiDC oMKgICovCj4+Pj4gLWludCBhbWRncHVfYm9fc3luY193YWl0KHN0cnVjdCBhbWRncHVfYm8gKmJv LCB2b2lkICpvd25lciwgYm9vbCBpbnRyKQo+Pj4+ICtpbnQgYW1kZ3B1X2JvX3N5bmNfd2FpdF9y ZXN2KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgCj4+Pj4gZG1hX3Jlc3YgKnJl c3YsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gYW1kZ3B1X3N5 bmNfbW9kZSBzeW5jX21vZGUsIHZvaWQgKm93bmVyLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBib29sIGludHIpCj4+Pj4gwqAgewo+Pj4+IC3CoMKgwqAgc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSBhbWRncHVfdHRtX2FkZXYoYm8tPnRiby5iZGV2KTsKPj4+PiDC oMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfc3luYyBzeW5jOwo+Pj4+IMKgwqDCoMKgwqAgaW50IHI7 Cj4+Pj4gwqAgwqDCoMKgwqDCoCBhbWRncHVfc3luY19jcmVhdGUoJnN5bmMpOwo+Pj4+IC3CoMKg wqAgYW1kZ3B1X3N5bmNfcmVzdihhZGV2LCAmc3luYywgYm8tPnRiby5iYXNlLnJlc3YsCj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBTURHUFVfU1lOQ19ORV9PV05FUiwgb3duZXIpOwo+ Pj4+IC3CoMKgwqAgciA9IGFtZGdwdV9zeW5jX3dhaXQoJnN5bmMsIGludHIpOwo+Pj4+ICvCoMKg wqAgYW1kZ3B1X3N5bmNfcmVzdihhZGV2LCAmc3luYywgcmVzdiwgc3luY19tb2RlLCBvd25lcik7 Cj4+Pj4gK8KgwqDCoCByID0gYW1kZ3B1X3N5bmNfd2FpdCgmc3luYywgdHJ1ZSk7Cj4+Pj4gwqDC oMKgwqDCoCBhbWRncHVfc3luY19mcmVlKCZzeW5jKTsKPj4+PiAtCj4+Pj4gwqDCoMKgwqDCoCBy ZXR1cm4gcjsKPj4+PiDCoCB9Cj4+Pj4gwqAgKy8qKgo+Pj4+ICsgKiBhbWRncHVfYm9fc3luY193 YWl0IC0gV3JhcHBlciBmb3IgYW1kZ3B1X2JvX3N5bmNfd2FpdF9yZXN2Cj4+Pj4gKyAqIEBibzog YnVmZmVyIG9iamVjdCB0byB3YWl0IGZvcgo+Pj4+ICsgKiBAb3duZXI6IGZlbmNlIG93bmVyCj4+ Pj4gKyAqIEBpbnRyOiBXaGV0aGVyIHRoZSB3YWl0IGlzIGludGVycnVwdGlibGUKPj4+PiArICoK Pj4+PiArICogV3JhcHBlciB0byB3YWl0IGZvciBmZW5jZXMgaW4gYSBCTy4KPj4+PiArICogUmV0 dXJuczoKPj4+PiArICogMCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCj4+Pj4gKyAqLwo+ Pj4+ICtpbnQgYW1kZ3B1X2JvX3N5bmNfd2FpdChzdHJ1Y3QgYW1kZ3B1X2JvICpibywgdm9pZCAq b3duZXIsIGJvb2wgaW50cikKPj4+PiArewo+Pj4+ICvCoMKgwqAgc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSBhbWRncHVfdHRtX2FkZXYoYm8tPnRiby5iZGV2KTsKPj4+PiArCj4+Pj4gK8Kg wqDCoCByZXR1cm4gYW1kZ3B1X2JvX3N5bmNfd2FpdF9yZXN2KGFkZXYsIGJvLT50Ym8uYmFzZS5y ZXN2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBTURHUFVf U1lOQ19ORV9PV05FUiwgb3duZXIsIGludHIpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+IMKgIC8qKgo+ Pj4+IMKgwqAgKiBhbWRncHVfYm9fZ3B1X29mZnNldCAtIHJldHVybiBHUFUgb2Zmc2V0IG9mIGJv Cj4+Pj4gwqDCoCAqIEBibzrCoMKgwqAgYW1kZ3B1IG9iamVjdCBmb3Igd2hpY2ggd2UgcXVlcnkg dGhlIG9mZnNldAo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfb2JqZWN0LmggCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf b2JqZWN0LmgKPj4+PiBpbmRleCAyZWVhZmM3N2M5YzEuLjk2ZDgwNTg4OWU4ZCAxMDA2NDQKPj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmgKPj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmgKPj4+PiBAQCAt MjgzLDYgKzI4Myw5IEBAIHZvaWQgYW1kZ3B1X2JvX3JlbGVhc2Vfbm90aWZ5KHN0cnVjdCAKPj4+ PiB0dG1fYnVmZmVyX29iamVjdCAqYm8pOwo+Pj4+IMKgIGludCBhbWRncHVfYm9fZmF1bHRfcmVz ZXJ2ZV9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyk7Cj4+Pj4gwqAgdm9pZCBh bWRncHVfYm9fZmVuY2Uoc3RydWN0IGFtZGdwdV9ibyAqYm8sIHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBzaGFyZWQpOwo+Pj4+ ICtpbnQgYW1kZ3B1X2JvX3N5bmNfd2FpdF9yZXN2KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCBzdHJ1Y3QgCj4+Pj4gZG1hX3Jlc3YgKnJlc3YsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGVudW0gYW1kZ3B1X3N5bmNfbW9kZSBzeW5jX21vZGUsIHZvaWQgKm93bmVy LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIGludHIpOwo+Pj4+ IMKgIGludCBhbWRncHVfYm9fc3luY193YWl0KHN0cnVjdCBhbWRncHVfYm8gKmJvLCB2b2lkICpv d25lciwgYm9vbCAKPj4+PiBpbnRyKTsKPj4+PiDCoCB1NjQgYW1kZ3B1X2JvX2dwdV9vZmZzZXQo c3RydWN0IGFtZGdwdV9ibyAqYm8pOwo+Pj4+IMKgIGludCBhbWRncHVfYm9fdmFsaWRhdGUoc3Ry dWN0IGFtZGdwdV9ibyAqYm8pOwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfc3luYy5jIAo+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X3N5bmMuYwo+Pj4+IGluZGV4IDlmNDIwMzI2NzZkYS4uYjg2MzkyMjUzNjk2IDEwMDY0 NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9zeW5jLmMKPj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfc3luYy5jCj4+Pj4gQEAg LTI0OSwxMyArMjQ5LDYgQEAgaW50IGFtZGdwdV9zeW5jX3Jlc3Yoc3RydWN0IGFtZGdwdV9kZXZp Y2UgCj4+Pj4gKmFkZXYsIHN0cnVjdCBhbWRncHVfc3luYyAqc3luYywKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBvd25lciAhPSBBTURHUFVfRkVOQ0VfT1dORVJfVU5ERUZJTkVEKQo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+IMKgIC3CoMKgwqDC oMKgwqDCoCAvKiBWTSB1cGRhdGVzIG9ubHkgc3luYyB3aXRoIG1vdmVzIGJ1dCBub3Qgd2l0aCB1 c2VyCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKiBjb21tYW5kIHN1Ym1pc3Npb25zIG9yIEtGRCBl dmljdGlvbnMgZmVuY2VzCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+PiAtwqDCoMKgwqDC oMKgwqAgaWYgKGZlbmNlX293bmVyICE9IEFNREdQVV9GRU5DRV9PV05FUl9VTkRFRklORUQgJiYK Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvd25lciA9PSBBTURHUFVfRkVOQ0VfT1dORVJf Vk0pCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+Pj4gLQo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBJZ25vcmUgZmVuY2VzIGRlcGVuZGluZyBvbiB0aGUgc3luYyBt b2RlICovCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN3aXRjaCAobW9kZSkgewo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBjYXNlIEFNREdQVV9TWU5DX0FMV0FZUzoKPj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgCj4+Pj4gYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+Pj4+IGluZGV4IDBmNzljMTcxMThiZi4uYzI2 OGFhMTQzODFlIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV92bS5jCj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3Zt LmMKPj4+PiBAQCAtNzk3LDcgKzc5Nyw3IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX2NsZWFyX2Jv KHN0cnVjdCAKPj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+IMKgwqDCoMKgwqAgcGFyYW1z LnZtID0gdm07Cj4+Pj4gwqDCoMKgwqDCoCBwYXJhbXMuZGlyZWN0ID0gZGlyZWN0Owo+Pj4+IMKg IC3CoMKgwqAgciA9IHZtLT51cGRhdGVfZnVuY3MtPnByZXBhcmUoJnBhcmFtcywgCj4+Pj4gQU1E R1BVX0ZFTkNFX09XTkVSX0tGRCwgTlVMTCk7Cj4+Pj4gK8KgwqDCoCByID0gdm0tPnVwZGF0ZV9m dW5jcy0+cHJlcGFyZSgmcGFyYW1zLCBOVUxMLCAKPj4+PiBBTURHUFVfU1lOQ19FWFBMSUNJVCk7 Cj4+Pj4gwqDCoMKgwqDCoCBpZiAocikKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHI7 Cj4+Pj4gwqAgQEAgLTEyOTMsNyArMTI5Myw3IEBAIGludCBhbWRncHVfdm1fdXBkYXRlX3BkZXMo c3RydWN0IAo+Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4gwqDCoMKgwqDCoCBwYXJhbXMu dm0gPSB2bTsKPj4+PiDCoMKgwqDCoMKgIHBhcmFtcy5kaXJlY3QgPSBkaXJlY3Q7Cj4+Pj4gwqAg LcKgwqDCoCByID0gdm0tPnVwZGF0ZV9mdW5jcy0+cHJlcGFyZSgmcGFyYW1zLCAKPj4+PiBBTURH UFVfRkVOQ0VfT1dORVJfVk0sIE5VTEwpOwo+Pj4+ICvCoMKgwqAgciA9IHZtLT51cGRhdGVfZnVu Y3MtPnByZXBhcmUoJnBhcmFtcywgTlVMTCwgCj4+Pj4gQU1ER1BVX1NZTkNfRVhQTElDSVQpOwo+ Pj4+IMKgwqDCoMKgwqAgaWYgKHIpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+ Pj4+IMKgIEBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV92bV91cGRhdGVf cHRlcyhzdHJ1Y3QgCj4+Pj4gYW1kZ3B1X3ZtX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKPj4+PiDC oMKgICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgo+Pj4+IMKgwqAgKiBAdm06IHJlcXVl c3RlZCB2bQo+Pj4+IMKgwqAgKiBAZGlyZWN0OiBkaXJlY3Qgc3VibWlzc2lvbiBpbiBhIHBhZ2Ug ZmF1bHQKPj4+PiAtICogQGV4Y2x1c2l2ZTogZmVuY2Ugd2UgbmVlZCB0byBzeW5jIHRvCj4+Pj4g KyAqIEByZXN2OiBmZW5jZXMgd2UgbmVlZCB0byBzeW5jIHRvCj4+Pj4gwqDCoCAqIEBzdGFydDog c3RhcnQgb2YgbWFwcGVkIHJhbmdlCj4+Pj4gwqDCoCAqIEBsYXN0OiBsYXN0IG1hcHBlZCBlbnRy eQo+Pj4+IMKgwqAgKiBAZmxhZ3M6IGZsYWdzIGZvciB0aGUgZW50cmllcwo+Pj4+IEBAIC0xNTY3 LDE0ICsxNTY3LDE0IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZtX3VwZGF0ZV9wdGVzKHN0cnVjdCAK Pj4+PiBhbWRncHVfdm1fdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAo+Pj4+IMKgwqAgKi8KPj4+PiDC oCBzdGF0aWMgaW50IGFtZGdwdV92bV9ib191cGRhdGVfbWFwcGluZyhzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGFtZGdwdV92bSAqdm0sIGJvb2wgZGlyZWN0LAo+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICpl eGNsdXNpdmUsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBkbWFfcmVzdiAqcmVzdiwKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGxhc3QsCj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQ2 NF90IGZsYWdzLCB1aW50NjRfdCBhZGRyLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfYWRkcl90ICpwYWdlc19hZGRyLAo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2Zl bmNlICoqZmVuY2UpCj4+Pj4gwqAgewo+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV92bV91 cGRhdGVfcGFyYW1zIHBhcmFtczsKPj4+PiAtwqDCoMKgIHZvaWQgKm93bmVyID0gQU1ER1BVX0ZF TkNFX09XTkVSX1ZNOwo+Pj4+ICvCoMKgwqAgZW51bSBhbWRncHVfc3luY19tb2RlIHN5bmNfbW9k ZTsKPj4+PiDCoMKgwqDCoMKgIGludCByOwo+Pj4+IMKgIMKgwqDCoMKgwqAgbWVtc2V0KCZwYXJh bXMsIDAsIHNpemVvZihwYXJhbXMpKTsKPj4+PiBAQCAtMTU4Myw5ICsxNTgzLDEzIEBAIHN0YXRp YyBpbnQgCj4+Pj4gYW1kZ3B1X3ZtX2JvX3VwZGF0ZV9tYXBwaW5nKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAo+Pj4+IMKgwqDCoMKgwqAgcGFyYW1zLmRpcmVjdCA9IGRpcmVjdDsKPj4+PiDC oMKgwqDCoMKgIHBhcmFtcy5wYWdlc19hZGRyID0gcGFnZXNfYWRkcjsKPj4+PiDCoCAtwqDCoMKg IC8qIHN5bmMgdG8gZXZlcnl0aGluZyBleGNlcHQgZXZpY3Rpb24gZmVuY2VzIG9uIHVubWFwcGlu ZyAqLwo+Pj4+ICvCoMKgwqAgLyogSW1wbGljaXRseSBzeW5jIHRvIGNvbW1hbmQgc3VibWlzc2lv bnMgaW4gdGhlIHNhbWUgVk0gYmVmb3JlCj4+Pj4gK8KgwqDCoMKgICogdW5tYXBwaW5nLiBTeW5j IHRvIG1vdmluZyBmZW5jZXMgYmVmb3JlIG1hcHBpbmcuCj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4g wqDCoMKgwqDCoCBpZiAoIShmbGFncyAmIEFNREdQVV9QVEVfVkFMSUQpKQo+Pj4+IC3CoMKgwqDC oMKgwqDCoCBvd25lciA9IEFNREdQVV9GRU5DRV9PV05FUl9LRkQ7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHN5bmNfbW9kZSA9IEFNREdQVV9TWU5DX0VRX09XTkVSOwo+Pj4+ICvCoMKgwqAgZWxzZQo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBzeW5jX21vZGUgPSBBTURHUFVfU1lOQ19FWFBMSUNJVDsKPj4+ PiDCoCDCoMKgwqDCoMKgIGFtZGdwdV92bV9ldmljdGlvbl9sb2NrKHZtKTsKPj4+PiDCoMKgwqDC oMKgIGlmICh2bS0+ZXZpY3RpbmcpIHsKPj4+PiBAQCAtMTU5Myw3ICsxNTk3LDcgQEAgc3RhdGlj IGludCBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBpbmcoc3RydWN0IAo+Pj4+IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfdW5sb2NrOwo+Pj4+ IMKgwqDCoMKgwqAgfQo+Pj4+IMKgIC3CoMKgwqAgciA9IHZtLT51cGRhdGVfZnVuY3MtPnByZXBh cmUoJnBhcmFtcywgb3duZXIsIGV4Y2x1c2l2ZSk7Cj4+Pj4gK8KgwqDCoCByID0gdm0tPnVwZGF0 ZV9mdW5jcy0+cHJlcGFyZSgmcGFyYW1zLCByZXN2LCBzeW5jX21vZGUpOwo+Pj4+IMKgwqDCoMKg wqAgaWYgKHIpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfdW5sb2NrOwo+Pj4+ IMKgIEBAIC0xNjEyLDcgKzE2MTYsNyBAQCBzdGF0aWMgaW50IAo+Pj4+IGFtZGdwdV92bV9ib191 cGRhdGVfbWFwcGluZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+PiDCoMKgICogYW1k Z3B1X3ZtX2JvX3NwbGl0X21hcHBpbmcgLSBzcGxpdCBhIG1hcHBpbmcgaW50byBzbWFsbGVyIGNo dW5rcwo+Pj4+IMKgwqAgKgo+Pj4+IMKgwqAgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2ludGVy Cj4+Pj4gLSAqIEBleGNsdXNpdmU6IGZlbmNlIHdlIG5lZWQgdG8gc3luYyB0bwo+Pj4+ICsgKiBA cmVzdjogZmVuY2VzIHdlIG5lZWQgdG8gc3luYyB0bwo+Pj4+IMKgwqAgKiBAcGFnZXNfYWRkcjog RE1BIGFkZHJlc3NlcyB0byB1c2UgZm9yIG1hcHBpbmcKPj4+PiDCoMKgICogQHZtOiByZXF1ZXN0 ZWQgdm0KPj4+PiDCoMKgICogQG1hcHBpbmc6IG1hcHBlZCByYW5nZSBhbmQgZmxhZ3MgdG8gdXNl IGZvciB0aGUgdXBkYXRlCj4+Pj4gQEAgLTE2MjgsNyArMTYzMiw3IEBAIHN0YXRpYyBpbnQgYW1k Z3B1X3ZtX2JvX3VwZGF0ZV9tYXBwaW5nKHN0cnVjdCAKPj4+PiBhbWRncHVfZGV2aWNlICphZGV2 LAo+Pj4+IMKgwqAgKiAwIGZvciBzdWNjZXNzLCAtRUlOVkFMIGZvciBmYWlsdXJlLgo+Pj4+IMKg wqAgKi8KPj4+PiDCoCBzdGF0aWMgaW50IGFtZGdwdV92bV9ib19zcGxpdF9tYXBwaW5nKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqZXhjbHVzaXZlLAo+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtYV9yZXN2ICpyZXN2 LAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1h X2FkZHJfdCAqcGFnZXNfYWRkciwKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfdm0gKnZtLAo+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9ib192YV9tYXBw aW5nICptYXBwaW5nLAo+Pj4+IEBAIC0xNzA0LDcgKzE3MDgsNyBAQCBzdGF0aWMgaW50IGFtZGdw dV92bV9ib19zcGxpdF9tYXBwaW5nKHN0cnVjdCAKPj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGxhc3Qg PSBtaW4oKHVpbnQ2NF90KW1hcHBpbmctPmxhc3QsIHN0YXJ0ICsgbWF4X2VudHJpZXMgCj4+Pj4g LSAxKTsKPj4+PiAtwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV92bV9ib191cGRhdGVfbWFwcGlu ZyhhZGV2LCB2bSwgZmFsc2UsIGV4Y2x1c2l2ZSwKPj4+PiArwqDCoMKgwqDCoMKgwqAgciA9IGFt ZGdwdV92bV9ib191cGRhdGVfbWFwcGluZyhhZGV2LCB2bSwgZmFsc2UsIHJlc3YsCj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhcnQsIGxh c3QsIGZsYWdzLCBhZGRyLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGRtYV9hZGRyLCBmZW5jZSk7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChyKQo+Pj4+IEBAIC0xNzQzLDcgKzE3NDcsOCBAQCBpbnQgYW1kZ3B1X3ZtX2JvX3VwZGF0 ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAKPj4+PiAqYWRldiwgc3RydWN0IGFtZGdwdV9ib192YSAq Ym9fdmEsCj4+Pj4gwqDCoMKgwqDCoCBkbWFfYWRkcl90ICpwYWdlc19hZGRyID0gTlVMTDsKPj4+ PiDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtOwo+Pj4+IMKgwqDCoMKgwqAgc3Ry dWN0IGRybV9tbV9ub2RlICpub2RlczsKPj4+PiAtwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmV4 Y2x1c2l2ZSwgKipsYXN0X3VwZGF0ZTsKPj4+PiArwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKips YXN0X3VwZGF0ZTsKPj4+PiArwqDCoMKgIHN0cnVjdCBkbWFfcmVzdiAqcmVzdjsKPj4+PiDCoMKg wqDCoMKgIHVpbnQ2NF90IGZsYWdzOwo+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmJvX2FkZXYgPSBhZGV2Owo+Pj4+IMKgwqDCoMKgwqAgaW50IHI7Cj4+Pj4gQEAgLTE3NTEs NyArMTc1Niw3IEBAIGludCBhbWRncHVfdm1fYm9fdXBkYXRlKHN0cnVjdCBhbWRncHVfZGV2aWNl IAo+Pj4+ICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X2JvX3ZhICpib192YSwKPj4+PiDCoMKgwqDCoMKg IGlmIChjbGVhciB8fCAhYm8pIHsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtID0gTlVMTDsK Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbm9kZXMgPSBOVUxMOwo+Pj4+IC3CoMKgwqDCoMKgwqDC oCBleGNsdXNpdmUgPSBOVUxMOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXN2ID0gdm0tPnJvb3Qu YmFzZS5iby0+dGJvLmJhc2UucmVzdjsKPj4+PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fZG1hX3R0ICp0dG07Cj4+Pj4gwqAgQEAgLTE3NjEs NyArMTc2Niw3IEBAIGludCBhbWRncHVfdm1fYm9fdXBkYXRlKHN0cnVjdCAKPj4+PiBhbWRncHVf ZGV2aWNlICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X2JvX3ZhICpib192YSwKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB0dG0gPSBjb250YWluZXJfb2YoYm8tPnRiby50dG0sIHN0cnVjdCB0 dG1fZG1hX3R0LCB0dG0pOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZ2VzX2Fk ZHIgPSB0dG0tPmRtYV9hZGRyZXNzOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gLcKg wqDCoMKgwqDCoMKgIGV4Y2x1c2l2ZSA9IGJvLT50Ym8ubW92aW5nOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoCByZXN2ID0gYm8tPnRiby5iYXNlLnJlc3Y7Cj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4gwqAg wqDCoMKgwqDCoCBpZiAoYm8pIHsKPj4+PiBAQCAtMTc3NSw3ICsxNzgwLDggQEAgaW50IGFtZGdw dV92bV9ib191cGRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgCj4+Pj4gKmFkZXYsIHN0cnVjdCBh bWRncHVfYm9fdmEgKmJvX3ZhLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBmbGFncyA9IDB4MDsK Pj4+PiDCoMKgwqDCoMKgIH0KPj4+PiDCoCAtwqDCoMKgIGlmIChjbGVhciB8fCAoYm8gJiYgYm8t PnRiby5iYXNlLnJlc3YgPT0gCj4+Pj4gdm0tPnJvb3QuYmFzZS5iby0+dGJvLmJhc2UucmVzdikp Cj4+Pj4gK8KgwqDCoCBpZiAoY2xlYXIgfHwgKGJvICYmIGJvLT50Ym8uYmFzZS5yZXN2ID09Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZtLT5yb290LmJhc2UuYm8tPnRiby5iYXNl LnJlc3YpKQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBsYXN0X3VwZGF0ZSA9ICZ2bS0+bGFzdF91 cGRhdGU7Cj4+Pj4gwqDCoMKgwqDCoCBlbHNlCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGxhc3Rf dXBkYXRlID0gJmJvX3ZhLT5sYXN0X3B0X3VwZGF0ZTsKPj4+PiBAQCAtMTc4OSw3ICsxNzk1LDcg QEAgaW50IGFtZGdwdV92bV9ib191cGRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgCj4+Pj4gKmFk ZXYsIHN0cnVjdCBhbWRncHVfYm9fdmEgKmJvX3ZhLAo+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+IMKg IMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShtYXBwaW5nLCAmYm9fdmEtPmludmFsaWRz LCBsaXN0KSB7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfdm1fYm9fc3BsaXRfbWFw cGluZyhhZGV2LCBleGNsdXNpdmUsIAo+Pj4+IHBhZ2VzX2FkZHIsIHZtLAo+Pj4+ICvCoMKgwqDC oMKgwqDCoCByID0gYW1kZ3B1X3ZtX2JvX3NwbGl0X21hcHBpbmcoYWRldiwgcmVzdiwgcGFnZXNf YWRkciwgdm0sCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbWFwcGluZywgZmxhZ3MsIGJvX2FkZXYsIG5vZGVzLAo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxhc3Rf dXBkYXRlKTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIpCj4+Pj4gQEAgLTE5ODQsNiAr MTk5MCw3IEBAIGludCBhbWRncHVfdm1fY2xlYXJfZnJlZWQoc3RydWN0IAo+Pj4+IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBh bWRncHVfdm0gKnZtLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg ZG1hX2ZlbmNlICoqZmVuY2UpCj4+Pj4gwqAgewo+Pj4+ICvCoMKgwqAgc3RydWN0IGRtYV9yZXN2 ICpyZXN2ID0gdm0tPnJvb3QuYmFzZS5iby0+dGJvLmJhc2UucmVzdjsKPj4+PiDCoMKgwqDCoMKg IHN0cnVjdCBhbWRncHVfYm9fdmFfbWFwcGluZyAqbWFwcGluZzsKPj4+PiDCoMKgwqDCoMKgIHVp bnQ2NF90IGluaXRfcHRlX3ZhbHVlID0gMDsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVu Y2UgKmYgPSBOVUxMOwo+Pj4+IEBAIC0xOTk4LDcgKzIwMDUsNyBAQCBpbnQgYW1kZ3B1X3ZtX2Ns ZWFyX2ZyZWVkKHN0cnVjdCAKPj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG1hcHBpbmctPnN0YXJ0IDwgQU1ER1BVX0dNQ19IT0xFX1NUQVJU KQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluaXRfcHRlX3ZhbHVlID0gQU1ER1BV X1BURV9ERUZBVUxUX0FUQzsKPj4+PiDCoCAtwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV92bV9i b191cGRhdGVfbWFwcGluZyhhZGV2LCB2bSwgZmFsc2UsIE5VTEwsCj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHIgPSBhbWRncHVfdm1fYm9fdXBkYXRlX21hcHBpbmcoYWRldiwgdm0sIGZhbHNlLCByZXN2 LAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG1hcHBpbmctPnN0YXJ0LCBtYXBwaW5nLT5sYXN0LAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluaXRfcHRlX3ZhbHVlLCAwLCBOVUxMLCAm Zik7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV92bV9mcmVlX21hcHBpbmcoYWRldiwg dm0sIG1hcHBpbmcsIGYpOwo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdm0uaCAKPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV92bS5oCj4+Pj4gaW5kZXggYzIxYTM2YmViYzBjLi5iNTcwNWZjZmM5MzUgMTAwNjQ0Cj4+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmgKPj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaAo+Pj4+IEBAIC0yMzAsOCArMjMw LDggQEAgc3RydWN0IGFtZGdwdV92bV91cGRhdGVfcGFyYW1zIHsKPj4+PiDCoCDCoCBzdHJ1Y3Qg YW1kZ3B1X3ZtX3VwZGF0ZV9mdW5jcyB7Cj4+Pj4gwqDCoMKgwqDCoCBpbnQgKCptYXBfdGFibGUp KHN0cnVjdCBhbWRncHVfYm8gKmJvKTsKPj4+PiAtwqDCoMKgIGludCAoKnByZXBhcmUpKHN0cnVj dCBhbWRncHVfdm1fdXBkYXRlX3BhcmFtcyAqcCwgdm9pZCAqIG93bmVyLAo+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmV4Y2x1c2l2ZSk7Cj4+Pj4g K8KgwqDCoCBpbnQgKCpwcmVwYXJlKShzdHJ1Y3QgYW1kZ3B1X3ZtX3VwZGF0ZV9wYXJhbXMgKnAs IHN0cnVjdCAKPj4+PiBkbWFfcmVzdiAqcmVzdiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbnVtIGFtZGdwdV9zeW5jX21vZGUgc3luY19tb2RlKTsKPj4+PiDCoMKgwqDCoMKg IGludCAoKnVwZGF0ZSkoc3RydWN0IGFtZGdwdV92bV91cGRhdGVfcGFyYW1zICpwLAo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2JvICpibywgdWludDY0 X3QgcGUsIHVpbnQ2NF90IGFkZHIsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGNvdW50LCB1aW50MzJfdCBpbmNyLCB1aW50NjRfdCBmbGFncyk7Cj4+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bV9jcHUuYyAKPj4+ PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bV9jcHUuYwo+Pj4+IGluZGV4 IDY4YjAxM2JlMzgzNy4uZTM4NTE2MzA0MDcwIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bV9jcHUuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV92bV9jcHUuYwo+Pj4+IEBAIC00NCwyNiArNDQsMTQgQEAgc3Rh dGljIGludCBhbWRncHVfdm1fY3B1X21hcF90YWJsZShzdHJ1Y3QgCj4+Pj4gYW1kZ3B1X2JvICp0 YWJsZSkKPj4+PiDCoMKgICogUmV0dXJuczoKPj4+PiDCoMKgICogTmVnYXRpdiBlcnJubywgMCBm b3Igc3VjY2Vzcy4KPj4+PiDCoMKgICovCj4+Pj4gLXN0YXRpYyBpbnQgYW1kZ3B1X3ZtX2NwdV9w cmVwYXJlKHN0cnVjdCBhbWRncHVfdm1fdXBkYXRlX3BhcmFtcyAKPj4+PiAqcCwgdm9pZCAqb3du ZXIsCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVu Y2UgKmV4Y2x1c2l2ZSkKPj4+PiArc3RhdGljIGludCBhbWRncHVfdm1fY3B1X3ByZXBhcmUoc3Ry dWN0IGFtZGdwdV92bV91cGRhdGVfcGFyYW1zICpwLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YsCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gYW1kZ3B1X3N5bmNfbW9kZSBzeW5jX21vZGUpCj4+Pj4g wqAgewo+Pj4+IC3CoMKgwqAgaW50IHI7Cj4+Pj4gLQo+Pj4+IC3CoMKgwqAgLyogV2FpdCBmb3Ig YW55IEJPIG1vdmUgdG8gYmUgY29tcGxldGVkICovCj4+Pj4gLcKgwqDCoCBpZiAoZXhjbHVzaXZl KSB7Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBkbWFfZmVuY2Vfd2FpdChleGNsdXNpdmUsIHRy dWUpOwo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAodW5saWtlbHkocikpCj4+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHI7Cj4+Pj4gLcKgwqDCoCB9Cj4+Pj4gLQo+Pj4+IC3CoMKg wqAgLyogRG9uJ3Qgd2FpdCBmb3Igc3VibWlzc2lvbnMgZHVyaW5nIHBhZ2UgZmF1bHQgKi8KPj4+ PiAtwqDCoMKgIGlmIChwLT5kaXJlY3QpCj4+Pj4gK8KgwqDCoCBpZiAoIXJlc3YpCj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+IMKgIC3CoMKgwqAgLyogV2FpdCBmb3IgUFQg Qk9zIHRvIGJlIGlkbGUuIFBUcyBzaGFyZSB0aGUgc2FtZSByZXN2LiBvYmplY3QKPj4+PiAtwqDC oMKgwqAgKiBhcyB0aGUgcm9vdCBQRCBCTwo+Pj4+IC3CoMKgwqDCoCAqLwo+Pj4+IC3CoMKgwqAg cmV0dXJuIGFtZGdwdV9ib19zeW5jX3dhaXQocC0+dm0tPnJvb3QuYmFzZS5ibywgb3duZXIsIHRy dWUpOwo+Pj4+ICvCoMKgwqAgcmV0dXJuIGFtZGdwdV9ib19zeW5jX3dhaXRfcmVzdihwLT5hZGV2 LCByZXN2LCBzeW5jX21vZGUsIAo+Pj4+IHAtPnZtLCB0cnVlKTsKPj4+PiDCoCB9Cj4+Pj4gwqAg wqAgLyoqCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV92bV9zZG1hLmMgCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm1f c2RtYS5jCj4+Pj4gaW5kZXggYWI2NDgxNzUxNzYzLi40Y2M3ODgxZjQzOGMgMTAwNjQ0Cj4+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtX3NkbWEuYwo+Pj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bV9zZG1hLmMKPj4+PiBAQCAt NTgsOSArNTgsOSBAQCBzdGF0aWMgaW50IGFtZGdwdV92bV9zZG1hX21hcF90YWJsZShzdHJ1Y3Qg Cj4+Pj4gYW1kZ3B1X2JvICp0YWJsZSkKPj4+PiDCoMKgICogTmVnYXRpdiBlcnJubywgMCBmb3Ig c3VjY2Vzcy4KPj4+PiDCoMKgICovCj4+Pj4gwqAgc3RhdGljIGludCBhbWRncHVfdm1fc2RtYV9w cmVwYXJlKHN0cnVjdCBhbWRncHVfdm1fdXBkYXRlX3BhcmFtcyAqcCwKPj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2b2lkICpvd25lciwgc3RydWN0IGRtYV9mZW5jZSAq ZXhjbHVzaXZlKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBkbWFfcmVzdiAqcmVzdiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBlbnVtIGFtZGdwdV9zeW5jX21vZGUgc3luY19tb2RlKQo+Pj4+IMKgIHsKPj4+PiAtwqDCoMKg IHN0cnVjdCBhbWRncHVfYm8gKnJvb3QgPSBwLT52bS0+cm9vdC5iYXNlLmJvOwo+Pj4+IMKgwqDC oMKgwqAgdW5zaWduZWQgaW50IG5kdyA9IEFNREdQVV9WTV9TRE1BX01JTl9OVU1fRFc7Cj4+Pj4g wqDCoMKgwqDCoCBpbnQgcjsKPj4+PiDCoCBAQCAtNzAsMTcgKzcwLDEwIEBAIHN0YXRpYyBpbnQg YW1kZ3B1X3ZtX3NkbWFfcHJlcGFyZShzdHJ1Y3QgCj4+Pj4gYW1kZ3B1X3ZtX3VwZGF0ZV9wYXJh bXMgKnAsCj4+Pj4gwqAgwqDCoMKgwqDCoCBwLT5udW1fZHdfbGVmdCA9IG5kdzsKPj4+PiDCoCAt wqDCoMKgIC8qIFdhaXQgZm9yIG1vdmVzIHRvIGJlIGNvbXBsZXRlZCAqLwo+Pj4+IC3CoMKgwqAg ciA9IGFtZGdwdV9zeW5jX2ZlbmNlKCZwLT5qb2ItPnN5bmMsIGV4Y2x1c2l2ZSwgZmFsc2UpOwo+ Pj4+IC3CoMKgwqAgaWYgKHIpCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+Pj4+IC0K Pj4+PiAtwqDCoMKgIC8qIERvbid0IHdhaXQgZm9yIGFueSBzdWJtaXNzaW9ucyBkdXJpbmcgcGFn ZSBmYXVsdCBoYW5kbGluZyAqLwo+Pj4+IC3CoMKgwqAgaWYgKHAtPmRpcmVjdCkKPj4+PiArwqDC oMKgIGlmICghcmVzdikKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4gwqAg LcKgwqDCoCByZXR1cm4gYW1kZ3B1X3N5bmNfcmVzdihwLT5hZGV2LCAmcC0+am9iLT5zeW5jLCAK Pj4+PiByb290LT50Ym8uYmFzZS5yZXN2LAo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQU1ER1BVX1NZTkNfTkVfT1dORVIsIG93bmVyKTsKPj4+PiArwqDCoMKgIHJldHVybiBh bWRncHVfc3luY19yZXN2KHAtPmFkZXYsICZwLT5qb2ItPnN5bmMsIHJlc3YsIAo+Pj4+IHN5bmNf bW9kZSwgcC0+dm0pOwo+Pj4+IMKgIH0KPj4+PiDCoCDCoCAvKioKPj4KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFt ZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=