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=-12.1 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,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 A31A4C433E0 for ; Tue, 19 Jan 2021 18:59:34 +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 3FB9E20706 for ; Tue, 19 Jan 2021 18:59:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3FB9E20706 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 559236E434; Tue, 19 Jan 2021 18:59:33 +0000 (UTC) Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by gabe.freedesktop.org (Postfix) with ESMTPS id EBF576E434; Tue, 19 Jan 2021 18:59:31 +0000 (UTC) Received: by mail-ej1-x62c.google.com with SMTP id hs11so27716668ejc.1; Tue, 19 Jan 2021 10:59:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=reply-to:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=v4jKbpPKztF6i2axMkWAn5FgTWyakkCrawSAKf1bKcs=; b=kiSfZ6kA6L50dvx3xe813v2b/QszYvv0oMvv2JkqFsugdpIIYWcAxhIJF5thfBU50E HWQdg9o6uV7x/7SSwsp0zAiMwSTlVrEY6jIhGmkSu4KrfGQTLTEDpdYT6TSQgMeIsW1Y 1QQGJCRQeed2MvApPx3ZovSIe5FYnPM0ARoAVDyARK43YGkTS7FvuReDYXy13Gwfp3KR PlYFxgx3/Iw5IEoS57pp7Lq+TzSmS0CFtPw3w2w8NaFEpIbKGvNO/mER9HNSWNKC5pwC yrWCx9haWhBhRBNeeVpZLcJa1w3LqzPSaVm0rcIobuyer6gcvCICn+0C9sBGO6fO6e0y Ncfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:subject:to:cc:references:from :message-id:date:user-agent:mime-version:in-reply-to :content-transfer-encoding:content-language; bh=v4jKbpPKztF6i2axMkWAn5FgTWyakkCrawSAKf1bKcs=; b=lIuqlDVXcIYez30F8hV+SO+LFr+Y16goq9dL/HvoS41RZ8WnTCbUFclBfV7Pv0tqNt yMpMn75O5uD8YYYf8R1xM7yFMRToRZzk6JqiqG0peb8KOE8eV68xpKUPhOBv93hRHkgL 15iTqCJdCIsi00Yq4CJErdYrkLfbA0rCeOhO9SetqESAT8IPIwHIrIgfOXVo0u66jc6E N3tSwA60jNMOTGrZAkDCOhPvYAwtecjnelXKtyEQS4zDdKXkimULT7dQNFnl79/bPalX uKcsYGptKlZy5WaFRELEyTYNAtVhCyFGc84oiQDDIT7J6Da7BaVXpRCEMFhIJ9bMFpfT iAsQ== X-Gm-Message-State: AOAM532I+HQrAqMDl/WoCaeiJSTclNOtMOWIxvVEEtBQq1tdLtXAGkCi kxIjU5z/pfmMAD8aU96+yvs= X-Google-Smtp-Source: ABdhPJxqpjiWwDE8X6k4UEDN69vUKOXq2oOLwuf9ISTEEY/uR7VbQjQE4kNzI7oXx/CAu8JWd2e8GQ== X-Received: by 2002:a17:907:68c:: with SMTP id wn12mr4039992ejb.41.1611082770511; Tue, 19 Jan 2021 10:59:30 -0800 (PST) Received: from ?IPv6:2a02:908:1252:fb60:be8a:bd56:1f94:86e7? ([2a02:908:1252:fb60:be8a:bd56:1f94:86e7]) by smtp.gmail.com with ESMTPSA id di28sm5875175edb.71.2021.01.19.10.59.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 19 Jan 2021 10:59:29 -0800 (PST) Subject: Re: [PATCH v4 11/14] drm/amdgpu: Guard against write accesses after device removal To: Andrey Grodzovsky , Daniel Vetter References: <1611003683-3534-1-git-send-email-andrey.grodzovsky@amd.com> <1611003683-3534-12-git-send-email-andrey.grodzovsky@amd.com> <35ecd67f-620f-df50-3e03-d24dc12452d6@gmail.com> <8925db97-bf81-7e5e-527d-f654713b400d@amd.com> <8ed4a153-d503-e704-0a0d-3422877e50fa@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <91b8ea73-aa69-1478-2e7c-63ab1cb250ae@gmail.com> Date: Tue, 19 Jan 2021 19:59:28 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <8ed4a153-d503-e704-0a0d-3422877e50fa@amd.com> Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: christian.koenig@amd.com Cc: Greg KH , dri-devel , amd-gfx list , Alex Deucher , =?UTF-8?Q?Christian_K=c3=b6nig?= , Qiang Yu Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QW0gMTkuMDEuMjEgdW0gMTk6MjIgc2NocmllYiBBbmRyZXkgR3JvZHpvdnNreToKPgo+IE9uIDEv MTkvMjEgMTowNSBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4gT24gVHVlLCBKYW4gMTksIDIw MjEgYXQgNDozNSBQTSBBbmRyZXkgR3JvZHpvdnNreQo+PiA8QW5kcmV5Lkdyb2R6b3Zza3lAYW1k LmNvbT4gd3JvdGU6Cj4+PiBUaGVyZSBpcyByZWFsbHkgbm8gb3RoZXIgd2F5IGFjY29yZGluZyB0 byB0aGlzIGFydGljbGUKPj4+IGh0dHBzOi8vbmFtMTEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0 bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmx3bi5uZXQlMkZBcnRpY2xlcyUyRjc2Nzg4NSUy RiZhbXA7ZGF0YT0wNCU3QzAxJTdDQW5kcmV5Lkdyb2R6b3Zza3klNDBhbWQuY29tJTdDN2ExZjVh ZTZhMDZmNDY2MWQ0NzcwOGQ4YmNhNGNiMzIlN0MzZGQ4OTYxZmU0ODg0ZTYwOGUxMWE4MmQ5OTRl MTgzZCU3QzAlN0MwJTdDNjM3NDY2NzYzMjc4Njc0MTYyJTdDVW5rbm93biU3Q1RXRnBiR1pzYjNk OGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqb2lWMmx1TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pY VkNJNk1uMCUzRCU3QzEwMDAmYW1wO3NkYXRhPVF1cHNnbE85V1J1aXM4WFJMQkZJaGw2bWlUWFZP ZEFuazhvUDRCZlNjbFElM0QmYW1wO3Jlc2VydmVkPTAgCj4+Pgo+Pj4KPj4+ICJBIHBlcmZlY3Qg c29sdXRpb24gc2VlbXMgbmVhcmx5IGltcG9zc2libGUgdGhvdWdoOyB3ZSBjYW5ub3QgCj4+PiBh Y3F1aXJlIGEgbXV0ZXggb24KPj4+IHRoZSB1c2VyCj4+PiB0byBwcmV2ZW50IHRoZW0gZnJvbSB5 YW5raW5nIGEgZGV2aWNlIGFuZCB3ZSBjYW5ub3QgY2hlY2sgZm9yIGEgCj4+PiBwcmVzZW5jZSBj aGFuZ2UKPj4+IGFmdGVyIGV2ZXJ5Cj4+PiBkZXZpY2UgYWNjZXNzIGZvciBwZXJmb3JtYW5jZSBy ZWFzb25zLiAiCj4+Pgo+Pj4gQnV0IEkgYXNzdW1lZCBzcmN1X3JlYWRfbG9jayBzaG91bGQgYmUg cHJldHR5IHNlYW1sZXNzIHBlcmZvcm1hbmNlIAo+Pj4gd2lzZSwgbm8gPwo+PiBUaGUgcmVhZCBz aWRlIGlzIHN1cHBvc2VkIHRvIGJlIGRpcnQgY2hlYXAsIHRoZSB3cml0ZSBzaWRlIGlzIHdlcmUg d2UKPj4ganVzdCBzdGFsbCBmb3IgYWxsIHJlYWRlcnMgdG8gZXZlbnR1YWxseSBjb21wbGV0ZSBv biB0aGVpciBvd24uCj4+IERlZmluaXRlbHkgc2hvdWxkIGJlIG11Y2ggY2hlYXBlciB0aGFuIG1t aW8gcmVhZCwgb24gdGhlIG1taW8gd3JpdGUKPj4gc2lkZSBpdCBtaWdodCBhY3R1YWxseSBodXJ0 IGEgYml0LiBPdG9oIEkgdGhpbmsgdGhvc2UgZG9uJ3Qgc3RhbGwgdGhlCj4+IGNwdSBieSBkZWZh dWx0IHdoZW4gdGhleSdyZSB0aW1pbmcgb3V0LCBzbyBtYXliZSBpZiB0aGUgb3ZlcmhlYWQgaXMK Pj4gdG9vIG11Y2ggZm9yIHRob3NlLCB3ZSBjb3VsZCBvbWl0IHRoZW0/Cj4+Cj4+IE1heWJlIGp1 c3QgZG8gYSBzbWFsbCBtaWNyb2JlbmNobWFyayBmb3IgdGhlc2UgZm9yIHRlc3RpbmcsIHdpdGgg YQo+PiByZWdpc3RlciB0aGF0IGRvZXNuJ3QgY2hhbmdlIGh3IHN0YXRlLiBTbyB3aXRoIGFuZCB3 aXRob3V0Cj4+IGRybV9kZXZfZW50ZXIvZXhpdCwgYW5kIGFsc28gb25lIHdpdGggdGhlIGh3IHBs dWdnZWQgb3V0IHNvIHRoYXQgd2UKPj4gaGF2ZSBhY3R1YWwgdGltZW91dHMgaW4gdGhlIHRyYW5z YWN0aW9ucy4KPj4gLURhbmllbAo+Cj4KPiBTbyBzYXkgd3JpdGluZyBpbiBhIGxvb3AgdG8gc29t ZSBoYXJtbGVzcyBzY3JhdGNoIHJlZ2lzdGVyIGZvciBtYW55IAo+IHRpbWVzIGJvdGggZm9yIHBs dWdnZWQKPiBhbmQgdW5wbHVnZ2VkIGNhc2UgYW5kIG1lYXN1cmUgdG90YWwgdGltZSBkZWx0YSA/ CgpJIHRoaW5rIHdlIHNob3VsZCBhdCBsZWFzdCBtZWFzdXJlIHRoZSBmb2xsb3dpbmc6CgoxLiBX cml0aW5nIFggdGltZXMgdG8gYSBzY3JhdGNoIHJlZyB3aXRob3V0IHlvdXIgcGF0Y2guCjIuIFdy aXRpbmcgWCB0aW1lcyB0byBhIHNjcmF0Y2ggcmVnIHdpdGggeW91ciBwYXRjaC4KMy4gV3JpdGlu ZyBYIHRpbWVzIHRvIGEgc2NyYXRjaCByZWcgd2l0aCB0aGUgaGFyZHdhcmUgcGh5c2ljYWxseSAK ZGlzY29ubmVjdGVkLgoKSSBzdWdnZXN0IHRvIHJlcGVhdCB0aGF0IG9uY2UgZm9yIFBvbGFyaXMg KG9yIG9sZGVyKSBhbmQgb25jZSBmb3IgVmVnYSAKb3IgTmF2aS4KClRoZSBTUkJNIG9uIFBvbGFy aXMgaXMgbWVhbnQgdG8gaW50cm9kdWNlIHNvbWUgZGVsYXkgaW4gZWFjaCBhY2Nlc3MsIHNvIApp dCBtaWdodCByZWFjdCBkaWZmZXJlbnRseSB0aGVuIHRoZSBuZXdlciBoYXJkd2FyZS4KCkNocmlz dGlhbi4KCj4KPiBBbmRyZXkKPgo+Cj4+Cj4+PiBUaGUgb3RoZXIgc29sdXRpb24gd291bGQgYmUg YXMgSSBzdWdnZXN0ZWQgdG8ga2VlcCBhbGwgdGhlIGRldmljZSBJTyAKPj4+IHJhbmdlcwo+Pj4g cmVzZXJ2ZWQgYW5kIHN5c3RlbQo+Pj4gbWVtb3J5IHBhZ2VzIHVuZnJlZWQgdW50aWwgdGhlIGRl dmljZSBpcyBmaW5hbGl6ZWQgaW4gdGhlIGRyaXZlciBidXQgCj4+PiBEYW5pZWwgc2FpZAo+Pj4g dGhpcyB3b3VsZCB1cHNldCB0aGUgUENJIGxheWVyICh0aGUgTU1JTyByYW5nZXMgcmVzZXJ2YXRp b24gcGFydCkuCj4+Pgo+Pj4gQW5kcmV5Cj4+Pgo+Pj4KPj4+Cj4+Pgo+Pj4gT24gMS8xOS8yMSAz OjU1IEFNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+Pj4+IEFtIDE4LjAxLjIxIHVtIDIyOjAx IHNjaHJpZWIgQW5kcmV5IEdyb2R6b3Zza3k6Cj4+Pj4+IFRoaXMgc2hvdWxkIHByZXZlbnQgd3Jp dGluZyB0byBtZW1vcnkgb3IgSU8gcmFuZ2VzIHBvc3NpYmx5Cj4+Pj4+IGFscmVhZHkgYWxsb2Nh dGVkIGZvciBvdGhlciB1c2VzIGFmdGVyIG91ciBkZXZpY2UgaXMgcmVtb3ZlZC4KPj4+PiBXb3cs IHRoYXQgYWRkcyBxdWl0ZSBzb21lIG92ZXJoZWFkIHRvIGV2ZXJ5IHJlZ2lzdGVyIGFjY2Vzcy4g SSdtIAo+Pj4+IG5vdCBzdXJlIHdlCj4+Pj4gY2FuIGRvIHRoaXMuCj4+Pj4KPj4+PiBDaHJpc3Rp YW4uCj4+Pj4KPj4+Pj4gU2lnbmVkLW9mZi1ieTogQW5kcmV5IEdyb2R6b3Zza3kgPGFuZHJleS5n cm9kem92c2t5QGFtZC5jb20+Cj4+Pj4+IC0tLQo+Pj4+PiDCoMKgIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyB8IDU3IAo+Pj4+PiArKysrKysrKysrKysrKysrKysr KysrKysKPj4+Pj4gwqDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ21jLmPC oMKgwqAgfMKgIDkgKysrKwo+Pj4+PiDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9wc3AuY8KgwqDCoCB8IDUzIAo+Pj4+PiArKysrKysrKysrKysrLS0tLS0tLS0tCj4+Pj4+ IMKgwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5owqDCoMKgIHzCoCAz ICsrCj4+Pj4+IMKgwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuY8Kg wqAgfCA3MCAKPj4+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+Pj4+IMKgwqAg ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuaMKgwqAgfCA0OSAKPj4+Pj4g KystLS0tLS0tLS0tLS0tLS0tLS0tCj4+Pj4+IMKgwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvcHNwX3YxMV8wLmPCoMKgwqDCoCB8IDE2ICsrLS0tLS0KPj4+Pj4gwqDCoCBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9wc3BfdjEyXzAuY8KgwqDCoMKgIHzCoCA4ICstLS0KPj4+Pj4gwqDC oCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjNfMS5jwqDCoMKgwqDCoCB8wqAgOCAr LS0tCj4+Pj4+IMKgwqAgOSBmaWxlcyBjaGFuZ2VkLCAxODQgaW5zZXJ0aW9ucygrKSwgODkgZGVs ZXRpb25zKC0pCj4+Pj4+Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZGV2aWNlLmMKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfZGV2aWNlLmMKPj4+Pj4gaW5kZXggZTk5ZjRmMS4uMGE5ZDczYyAxMDA2NDQKPj4+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4+Pj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwo+Pj4+PiBAQCAt NzIsNiArNzIsOCBAQAo+Pj4+PiDCoMKgwqDCoCAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KPj4+ Pj4gwqDCoCArI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4+Pj4+ICsKPj4+Pj4gwqDCoCBNT0RV TEVfRklSTVdBUkUoImFtZGdwdS92ZWdhMTBfZ3B1X2luZm8uYmluIik7Cj4+Pj4+IMKgwqAgTU9E VUxFX0ZJUk1XQVJFKCJhbWRncHUvdmVnYTEyX2dwdV9pbmZvLmJpbiIpOwo+Pj4+PiDCoMKgIE1P RFVMRV9GSVJNV0FSRSgiYW1kZ3B1L3JhdmVuX2dwdV9pbmZvLmJpbiIpOwo+Pj4+PiBAQCAtNDA0 LDEzICs0MDYsMjEgQEAgdWludDhfdCBhbWRncHVfbW1fcnJlZzgoc3RydWN0IGFtZGdwdV9kZXZp Y2UgCj4+Pj4+ICphZGV2LAo+Pj4+PiB1aW50MzJfdCBvZmZzZXQpCj4+Pj4+IMKgwqDCoCAqLwo+ Pj4+PiDCoMKgIHZvaWQgYW1kZ3B1X21tX3dyZWc4KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCB1aW50MzJfdCAKPj4+Pj4gb2Zmc2V0LCB1aW50OF90Cj4+Pj4+IHZhbHVlKQo+Pj4+PiDCoMKg IHsKPj4+Pj4gK8KgwqDCoCBpbnQgaWR4Owo+Pj4+PiArCj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAo YWRldi0+aW5fcGNpX2Vycl9yZWNvdmVyeSkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuOwo+Pj4+PiDCoMKgICsKPj4+Pj4gK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50ZXIoJmFkZXYt PmRkZXYsICZpZHgpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiArCj4+Pj4+ IMKgwqDCoMKgwqDCoCBpZiAob2Zmc2V0IDwgYWRldi0+cm1taW9fc2l6ZSkKPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqAgd3JpdGViKHZhbHVlLCBhZGV2LT5ybW1pbyArIG9mZnNldCk7Cj4+Pj4+ IMKgwqDCoMKgwqDCoCBlbHNlCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJVRygpOwo+Pj4+ PiArCj4+Pj4+ICvCoMKgwqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+Pj4+IMKgwqAgfQo+Pj4+PiDC oMKgwqDCoCAvKioKPj4+Pj4gQEAgLTQyNyw5ICs0MzcsMTQgQEAgdm9pZCBhbWRncHVfZGV2aWNl X3dyZWcoc3RydWN0IGFtZGdwdV9kZXZpY2UgCj4+Pj4+ICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQzMl90IHJlZywgdWludDMyX3QgdiwKPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCBhY2NfZmxhZ3MpCj4+Pj4+IMKgwqAgewo+ Pj4+PiArwqDCoMKgIGludCBpZHg7Cj4+Pj4+ICsKPj4+Pj4gwqDCoMKgwqDCoMKgIGlmIChhZGV2 LT5pbl9wY2lfZXJyX3JlY292ZXJ5KQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47 Cj4+Pj4+IMKgwqAgK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50ZXIoJmFkZXYtPmRkZXYsICZpZHgp KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiArCj4+Pj4+IMKgwqDCoMKgwqDC oCBpZiAoKHJlZyAqIDQpIDwgYWRldi0+cm1taW9fc2l6ZSkgewo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoIShhY2NfZmxhZ3MgJiBBTURHUFVfUkVHU19OT19LSVEpICYmCj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X3NyaW92X3J1bnRpbWUoYWRldikgJiYK Pj4+Pj4gQEAgLTQ0NCw2ICs0NTksOCBAQCB2b2lkIGFtZGdwdV9kZXZpY2Vfd3JlZyhzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAKPj4+Pj4gKmFkZXYsCj4+Pj4+IMKgwqDCoMKgwqDCoCB9Cj4+Pj4+IHRy YWNlX2FtZGdwdV9kZXZpY2Vfd3JlZyhhZGV2LT5wZGV2LT5kZXZpY2UsIHJlZywgdik7Cj4+Pj4+ ICsKPj4+Pj4gK8KgwqDCoCBkcm1fZGV2X2V4aXQoaWR4KTsKPj4+Pj4gwqDCoCB9Cj4+Pj4+IMKg wqDCoMKgIC8qCj4+Pj4+IEBAIC00NTQsOSArNDcxLDE0IEBAIHZvaWQgYW1kZ3B1X2RldmljZV93 cmVnKHN0cnVjdCBhbWRncHVfZGV2aWNlIAo+Pj4+PiAqYWRldiwKPj4+Pj4gwqDCoCB2b2lkIGFt ZGdwdV9tbV93cmVnX21taW9fcmxjKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCByZWcsIHVpbnQz Ml90IHYpCj4+Pj4+IMKgwqAgewo+Pj4+PiArwqDCoMKgIGludCBpZHg7Cj4+Pj4+ICsKPj4+Pj4g wqDCoMKgwqDCoMKgIGlmIChhZGV2LT5pbl9wY2lfZXJyX3JlY292ZXJ5KQo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+IMKgwqAgK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50 ZXIoJmFkZXYtPmRkZXYsICZpZHgpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+ PiArCj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAoYW1kZ3B1X3NyaW92X2Z1bGxhY2Nlc3MoYWRldikg JiYKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+Z2Z4LnJsYy5mdW5jcyAmJgo+Pj4+ PiBhZGV2LT5nZngucmxjLmZ1bmNzLT5pc19ybGNnX2FjY2Vzc19yYW5nZSkgewo+Pj4+PiBAQCAt NDY1LDYgKzQ4Nyw4IEBAIHZvaWQgYW1kZ3B1X21tX3dyZWdfbW1pb19ybGMoc3RydWN0IAo+Pj4+ PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVsKHYsICgodm9pZCBfX2lvbWVtICopYWRldi0+cm1t aW8pICsgKHJlZyAqIDQpKTsKPj4+Pj4gwqDCoMKgwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDC oMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4+PiDCoMKgIH0KPj4+Pj4gwqDCoMKgwqAgLyoqCj4+ Pj4+IEBAIC00OTksMTUgKzUyMywyMiBAQCB1MzIgYW1kZ3B1X2lvX3JyZWcoc3RydWN0IGFtZGdw dV9kZXZpY2UgCj4+Pj4+ICphZGV2LCB1MzIgcmVnKQo+Pj4+PiDCoMKgwqAgKi8KPj4+Pj4gwqDC oCB2b2lkIGFtZGdwdV9pb193cmVnKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgcmVn LCB1MzIgdikKPj4+Pj4gwqDCoCB7Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+Pj4gKwo+Pj4+ PiDCoMKgwqDCoMKgwqAgaWYgKGFkZXYtPmluX3BjaV9lcnJfcmVjb3ZlcnkpCj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+Pj4gwqDCoCArwqDCoMKgIGlmICghZHJtX2Rldl9l bnRlcigmYWRldi0+ZGRldiwgJmlkeCkpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ Pj4+ICsKPj4+Pj4gwqDCoMKgwqDCoMKgIGlmICgocmVnICogNCkgPCBhZGV2LT5yaW9fbWVtX3Np emUpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlvd3JpdGUzMih2LCBhZGV2LT5yaW9fbWVt ICsgKHJlZyAqIDQpKTsKPj4+Pj4gwqDCoMKgwqDCoMKgIGVsc2Ugewo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpb3dyaXRlMzIoKHJlZyAqIDQpLCBhZGV2LT5yaW9fbWVtICsgKG1tTU1fSU5E RVggKiA0KSk7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlvd3JpdGUzMih2LCBhZGV2LT5y aW9fbWVtICsgKG1tTU1fREFUQSAqIDQpKTsKPj4+Pj4gwqDCoMKgwqDCoMKgIH0KPj4+Pj4gKwo+ Pj4+PiArwqDCoMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4+PiDCoMKgIH0KPj4+Pj4gwqDCoMKg wqAgLyoqCj4+Pj4+IEBAIC01NDQsMTQgKzU3NSwyMSBAQCB1MzIgYW1kZ3B1X21tX3Jkb29yYmVs bChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAKPj4+Pj4gKmFkZXYsIHUzMgo+Pj4+PiBpbmRleCkKPj4+ Pj4gwqDCoMKgICovCj4+Pj4+IMKgwqAgdm9pZCBhbWRncHVfbW1fd2Rvb3JiZWxsKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LCB1MzIgaW5kZXgsIAo+Pj4+PiB1MzIgdikKPj4+Pj4gwqDCoCB7 Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+Pj4gKwo+Pj4+PiDCoMKgwqDCoMKgwqAgaWYgKGFk ZXYtPmluX3BjaV9lcnJfcmVjb3ZlcnkpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy bjsKPj4+Pj4gwqDCoCArwqDCoMKgIGlmICghZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlk eCkpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+ICsKPj4+Pj4gwqDCoMKgwqDC oMKgIGlmIChpbmRleCA8IGFkZXYtPmRvb3JiZWxsLm51bV9kb29yYmVsbHMpIHsKPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgwqAgd3JpdGVsKHYsIGFkZXYtPmRvb3JiZWxsLnB0ciArIGluZGV4KTsK Pj4+Pj4gwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIERS TV9FUlJPUigid3JpdGluZyBiZXlvbmQgZG9vcmJlbGwgYXBlcnR1cmU6IAo+Pj4+PiAweCUwOHgh XG4iLCBpbmRleCk7Cj4+Pj4+IMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBk cm1fZGV2X2V4aXQoaWR4KTsKPj4+Pj4gwqDCoCB9Cj4+Pj4+IMKgwqDCoMKgIC8qKgo+Pj4+PiBA QCAtNTg4LDE0ICs2MjYsMjEgQEAgdTY0IGFtZGdwdV9tbV9yZG9vcmJlbGw2NChzdHJ1Y3QgCj4+ Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4+IHUzMiBpbmRleCkKPj4+Pj4gwqDCoMKgICov Cj4+Pj4+IMKgwqAgdm9pZCBhbWRncHVfbW1fd2Rvb3JiZWxsNjQoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsIHUzMiAKPj4+Pj4gaW5kZXgsIHU2NCB2KQo+Pj4+PiDCoMKgIHsKPj4+Pj4gK8Kg wqDCoCBpbnQgaWR4Owo+Pj4+PiArCj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAoYWRldi0+aW5fcGNp X2Vycl9yZWNvdmVyeSkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiDC oMKgICvCoMKgwqAgaWYgKCFkcm1fZGV2X2VudGVyKCZhZGV2LT5kZGV2LCAmaWR4KSkKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+Pj4gKwo+Pj4+PiDCoMKgwqDCoMKgwqAgaWYgKGlu ZGV4IDwgYWRldi0+ZG9vcmJlbGwubnVtX2Rvb3JiZWxscykgewo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhdG9taWM2NF9zZXQoKGF0b21pYzY0X3QgKikoYWRldi0+ZG9vcmJlbGwucHRyICsg Cj4+Pj4+IGluZGV4KSwgdik7Cj4+Pj4+IMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIndyaXRpbmcgYmV5b25kIGRvb3JiZWxsIGFwZXJ0 dXJlOiAKPj4+Pj4gMHglMDh4IVxuIiwgaW5kZXgpOwo+Pj4+PiDCoMKgwqDCoMKgwqAgfQo+Pj4+ PiArCj4+Pj4+ICvCoMKgwqAgZHJtX2Rldl9leGl0KGlkeCk7Cj4+Pj4+IMKgwqAgfQo+Pj4+PiDC oMKgwqDCoCAvKioKPj4+Pj4gQEAgLTY4Miw2ICs3MjcsMTAgQEAgdm9pZCBhbWRncHVfZGV2aWNl X2luZGlyZWN0X3dyZWcoc3RydWN0IAo+Pj4+PiBhbWRncHVfZGV2aWNlCj4+Pj4+ICphZGV2LAo+ Pj4+PiDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+Pj4gwqDCoMKgwqDCoMKg IHZvaWQgX19pb21lbSAqcGNpZV9pbmRleF9vZmZzZXQ7Cj4+Pj4+IMKgwqDCoMKgwqDCoCB2b2lk IF9faW9tZW0gKnBjaWVfZGF0YV9vZmZzZXQ7Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+Pj4g Kwo+Pj4+PiArwqDCoMKgIGlmICghZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl9s b2NrX2lycXNhdmUoJmFkZXYtPnBjaWVfaWR4X2xvY2ssIGZsYWdzKTsKPj4+Pj4gwqDCoMKgwqDC oMKgIHBjaWVfaW5kZXhfb2Zmc2V0ID0gKHZvaWQgX19pb21lbSAqKWFkZXYtPnJtbWlvICsgCj4+ Pj4+IHBjaWVfaW5kZXggKiA0Owo+Pj4+PiBAQCAtNjkyLDYgKzc0MSw4IEBAIHZvaWQgYW1kZ3B1 X2RldmljZV9pbmRpcmVjdF93cmVnKHN0cnVjdCAKPj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwK Pj4+Pj4gwqDCoMKgwqDCoMKgIHdyaXRlbChyZWdfZGF0YSwgcGNpZV9kYXRhX29mZnNldCk7Cj4+ Pj4+IMKgwqDCoMKgwqDCoCByZWFkbChwY2llX2RhdGFfb2Zmc2V0KTsKPj4+Pj4gwqDCoMKgwqDC oMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZXYtPnBjaWVfaWR4X2xvY2ssIGZsYWdzKTsK Pj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4+PiDCoMKgIH0KPj4+ Pj4gwqDCoMKgwqAgLyoqCj4+Pj4+IEBAIC03MTEsNiArNzYyLDEwIEBAIHZvaWQgYW1kZ3B1X2Rl dmljZV9pbmRpcmVjdF93cmVnNjQoc3RydWN0IAo+Pj4+PiBhbWRncHVfZGV2aWNlCj4+Pj4+ICph ZGV2LAo+Pj4+PiDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+Pj4gwqDCoMKg wqDCoMKgIHZvaWQgX19pb21lbSAqcGNpZV9pbmRleF9vZmZzZXQ7Cj4+Pj4+IMKgwqDCoMKgwqDC oCB2b2lkIF9faW9tZW0gKnBjaWVfZGF0YV9vZmZzZXQ7Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsK Pj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGlmICghZHJtX2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlk eCkpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg c3Bpbl9sb2NrX2lycXNhdmUoJmFkZXYtPnBjaWVfaWR4X2xvY2ssIGZsYWdzKTsKPj4+Pj4gwqDC oMKgwqDCoMKgIHBjaWVfaW5kZXhfb2Zmc2V0ID0gKHZvaWQgX19pb21lbSAqKWFkZXYtPnJtbWlv ICsgCj4+Pj4+IHBjaWVfaW5kZXggKiA0Owo+Pj4+PiBAQCAtNzI3LDYgKzc4Miw4IEBAIHZvaWQg YW1kZ3B1X2RldmljZV9pbmRpcmVjdF93cmVnNjQoc3RydWN0IAo+Pj4+PiBhbWRncHVfZGV2aWNl Cj4+Pj4+ICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgwqAgd3JpdGVsKCh1MzIpKHJlZ19kYXRhID4+ IDMyKSwgcGNpZV9kYXRhX29mZnNldCk7Cj4+Pj4+IMKgwqDCoMKgwqDCoCByZWFkbChwY2llX2Rh dGFfb2Zmc2V0KTsKPj4+Pj4gwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFk ZXYtPnBjaWVfaWR4X2xvY2ssIGZsYWdzKTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGRybV9kZXZf ZXhpdChpZHgpOwo+Pj4+PiDCoMKgIH0KPj4+Pj4gwqDCoMKgwqAgLyoqCj4+Pj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ21jLmMKPj4+Pj4gYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ21jLmMKPj4+Pj4gaW5kZXggZmUxYTM5Zi4u MWJlYjRlNiAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2dtYy5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9n bWMuYwo+Pj4+PiBAQCAtMzEsNiArMzEsOCBAQAo+Pj4+PiDCoMKgICNpbmNsdWRlICJhbWRncHVf cmFzLmgiCj4+Pj4+IMKgwqAgI2luY2x1ZGUgImFtZGdwdV94Z21pLmgiCj4+Pj4+IMKgwqAgKyNp bmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+Pj4+PiArCj4+Pj4+IMKgwqAgLyoqCj4+Pj4+IMKgwqDC oCAqIGFtZGdwdV9nbWNfZ2V0X3BkZV9mb3JfYm8gLSBnZXQgdGhlIFBERSBmb3IgYSBCTwo+Pj4+ PiDCoMKgwqAgKgo+Pj4+PiBAQCAtOTgsNiArMTAwLDEwIEBAIGludCBhbWRncHVfZ21jX3NldF9w dGVfcGRlKHN0cnVjdCAKPj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+Pj4gdm9pZCAqY3B1 X3B0X2FkZHIsCj4+Pj4+IMKgwqAgewo+Pj4+PiDCoMKgwqDCoMKgwqAgdm9pZCBfX2lvbWVtICpw dHIgPSAodm9pZCAqKWNwdV9wdF9hZGRyOwo+Pj4+PiDCoMKgwqDCoMKgwqAgdWludDY0X3QgdmFs dWU7Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGlmICghZHJt X2Rldl9lbnRlcigmYWRldi0+ZGRldiwgJmlkeCkpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gMDsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAvKgo+Pj4+PiDCoMKgwqDCoMKgwqDCoCAqIFRo ZSBmb2xsb3dpbmcgaXMgZm9yIFBURSBvbmx5LiBHQVJUIGRvZXMgbm90IGhhdmUgUERFcy4KPj4+ Pj4gQEAgLTEwNSw2ICsxMTEsOSBAQCBpbnQgYW1kZ3B1X2dtY19zZXRfcHRlX3BkZShzdHJ1Y3Qg Cj4+Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4+IHZvaWQgKmNwdV9wdF9hZGRyLAo+Pj4+ PiDCoMKgwqDCoMKgwqAgdmFsdWUgPSBhZGRyICYgMHgwMDAwRkZGRkZGRkZGMDAwVUxMOwo+Pj4+ PiDCoMKgwqDCoMKgwqAgdmFsdWUgfD0gZmxhZ3M7Cj4+Pj4+IMKgwqDCoMKgwqDCoCB3cml0ZXEo dmFsdWUsIHB0ciArIChncHVfcGFnZV9pZHggKiA4KSk7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBk cm1fZGV2X2V4aXQoaWR4KTsKPj4+Pj4gKwo+Pj4+PiDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ Pj4+IMKgwqAgfQo+Pj4+PiDCoMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfcHNwLmMKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfcHNwLmMKPj4+Pj4gaW5kZXggNTIzZDIyZC4uODllMmJmZSAxMDA2NDQKPj4+Pj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5jCj4+Pj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wc3AuYwo+Pj4+PiBAQCAtMzcsNiArMzcsOCBA QAo+Pj4+PiDCoMKgwqDCoCAjaW5jbHVkZSAiYW1kZ3B1X3Jhcy5oIgo+Pj4+PiDCoMKgICsjaW5j bHVkZSA8ZHJtL2RybV9kcnYuaD4KPj4+Pj4gKwo+Pj4+PiDCoMKgIHN0YXRpYyBpbnQgcHNwX3N5 c2ZzX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+Pj4+PiDCoMKgIHN0YXRpYyB2 b2lkIHBzcF9zeXNmc19maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKPj4+Pj4gwqDC oCBAQCAtMjQ4LDcgKzI1MCw3IEBAIHBzcF9jbWRfc3VibWl0X2J1ZihzdHJ1Y3QgcHNwX2NvbnRl eHQgKnBzcCwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBzcF9nZnhf Y21kX3Jlc3AgKmNtZCwgdWludDY0X3QgZmVuY2VfbWNfYWRkcikKPj4+Pj4gwqDCoCB7Cj4+Pj4+ IMKgwqDCoMKgwqDCoCBpbnQgcmV0Owo+Pj4+PiAtwqDCoMKgIGludCBpbmRleDsKPj4+Pj4gK8Kg wqDCoCBpbnQgaW5kZXgsIGlkeDsKPj4+Pj4gwqDCoMKgwqDCoMKgIGludCB0aW1lb3V0ID0gMjAw MDsKPj4+Pj4gwqDCoMKgwqDCoMKgIGJvb2wgcmFzX2ludHIgPSBmYWxzZTsKPj4+Pj4gwqDCoMKg wqDCoMKgIGJvb2wgc2tpcF91bnN1cHBvcnQgPSBmYWxzZTsKPj4+Pj4gQEAgLTI1Niw2ICsyNTgs OSBAQCBwc3BfY21kX3N1Ym1pdF9idWYoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsCj4+Pj4+IMKg wqDCoMKgwqDCoCBpZiAocHNwLT5hZGV2LT5pbl9wY2lfZXJyX3JlY292ZXJ5KQo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4gwqDCoCArwqDCoMKgIGlmICghZHJtX2Rl dl9lbnRlcigmcHNwLT5hZGV2LT5kZGV2LCAmaWR4KSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAwOwo+Pj4+PiArCj4+Pj4+IMKgwqDCoMKgwqDCoCBtdXRleF9sb2NrKCZwc3AtPm11dGV4 KTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBtZW1zZXQocHNwLT5jbWRfYnVmX21lbSwgMCwgUFNQ X0NNRF9CVUZGRVJfU0laRSk7Cj4+Pj4+IEBAIC0yNjYsOCArMjcxLDcgQEAgcHNwX2NtZF9zdWJt aXRfYnVmKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwLAo+Pj4+PiDCoMKgwqDCoMKgwqAgcmV0ID0g cHNwX3JpbmdfY21kX3N1Ym1pdChwc3AsIHBzcC0+Y21kX2J1Zl9tY19hZGRyLCAKPj4+Pj4gZmVu Y2VfbWNfYWRkciwKPj4+Pj4gaW5kZXgpOwo+Pj4+PiDCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdG9taWNfZGVjKCZwc3AtPmZlbmNlX3ZhbHVlKTsK Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIG11dGV4X3VubG9jaygmcHNwLT5tdXRleCk7Cj4+Pj4+IC3C oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBleGl0 Owo+Pj4+PiDCoMKgwqDCoMKgwqAgfQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9hc2lj X2ludmFsaWRhdGVfaGRwKHBzcC0+YWRldiwgTlVMTCk7Cj4+Pj4+IEBAIC0zMDcsOCArMzExLDgg QEAgcHNwX2NtZF9zdWJtaXRfYnVmKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwLAo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNwLT5jbWRfYnVmX21lbS0+Y21kX2lkLAo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNwLT5jbWRfYnVmX21lbS0+cmVzcC5z dGF0dXMpOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXRpbWVvdXQpIHsKPj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZwc3AtPm11dGV4KTsKPj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gZXhpdDsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiDCoMKgwqDCoMKg wqAgfQo+Pj4+PiDCoMKgIEBAIC0zMTYsOCArMzIwLDEwIEBAIHBzcF9jbWRfc3VibWl0X2J1Zihz dHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWNvZGUt PnRtcl9tY19hZGRyX2xvID0gcHNwLT5jbWRfYnVmX21lbS0+cmVzcC5md19hZGRyX2xvOwo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1Y29kZS0+dG1yX21jX2FkZHJfaGkgPSBwc3AtPmNtZF9i dWZfbWVtLT5yZXNwLmZ3X2FkZHJfaGk7Cj4+Pj4+IMKgwqDCoMKgwqDCoCB9Cj4+Pj4+IC3CoMKg wqAgbXV0ZXhfdW5sb2NrKCZwc3AtPm11dGV4KTsKPj4+Pj4gwqDCoCArZXhpdDoKPj4+Pj4gK8Kg wqDCoCBtdXRleF91bmxvY2soJnBzcC0+bXV0ZXgpOwo+Pj4+PiArwqDCoMKgIGRybV9kZXZfZXhp dChpZHgpOwo+Pj4+PiDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4gwqDCoCB9Cj4+Pj4+ IMKgwqAgQEAgLTM1NCw4ICszNjAsNyBAQCBzdGF0aWMgaW50IHBzcF9sb2FkX3RvYyhzdHJ1Y3Qg cHNwX2NvbnRleHQgCj4+Pj4+ICpwc3AsCj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAoIWNtZCkKPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4+IMKgwqDCoMKgwqDC oCAvKiBDb3B5IHRvYyB0byBwc3AgZmlybXdhcmUgcHJpdmF0ZSBidWZmZXIgKi8KPj4+Pj4gLcKg wqDCoCBtZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4+PiAtwqDCoMKg IG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+dG9jX3N0YXJ0X2FkZHIsIHBzcC0+dG9jX2Jp bl9zaXplKTsKPj4+Pj4gK8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBzcC0+dG9jX3N0YXJ0X2Fk ZHIsIHBzcC0+dG9jX2Jpbl9zaXplKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBwc3BfcHJlcF9s b2FkX3RvY19jbWRfYnVmKGNtZCwgcHNwLT5md19wcmlfbWNfYWRkciwgCj4+Pj4+IHBzcC0+dG9j X2Jpbl9zaXplKTsKPj4+Pj4gwqDCoCBAQCAtNTcwLDggKzU3NSw3IEBAIHN0YXRpYyBpbnQgcHNw X2FzZF9sb2FkKHN0cnVjdCBwc3BfY29udGV4dCAKPj4+Pj4gKnBzcCkKPj4+Pj4gwqDCoMKgwqDC oMKgIGlmICghY21kKQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsK Pj4+Pj4gwqDCoCAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7 Cj4+Pj4+IC3CoMKgwqAgbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT5hc2Rfc3RhcnRfYWRk ciwgCj4+Pj4+IHBzcC0+YXNkX3Vjb2RlX3NpemUpOwo+Pj4+PiArwqDCoMKgIHBzcF9jb3B5X2Z3 KHBzcCwgcHNwLT5hc2Rfc3RhcnRfYWRkciwgcHNwLT5hc2RfdWNvZGVfc2l6ZSk7Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgcHNwX3ByZXBfYXNkX2xvYWRfY21kX2J1ZihjbWQsIHBzcC0+ZndfcHJp X21jX2FkZHIsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cHNwLT5hc2RfdWNvZGVfc2l6ZSk7Cj4+Pj4+IEBAIC03MjYsOCArNzMwLDcgQEAgc3RhdGljIGlu dCBwc3BfeGdtaV9sb2FkKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQo+Pj4+PiDCoMKgwqDCoMKg wqAgaWYgKCFjbWQpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+ Pj4+PiDCoMKgIC3CoMKgwqAgbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsK Pj4+Pj4gLcKgwqDCoCBtZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnRhX3hnbWlfc3RhcnRf YWRkciwgCj4+Pj4+IHBzcC0+dGFfeGdtaV91Y29kZV9zaXplKTsKPj4+Pj4gK8KgwqDCoCBwc3Bf Y29weV9mdyhwc3AsIHBzcC0+dGFfeGdtaV9zdGFydF9hZGRyLCAKPj4+Pj4gcHNwLT50YV94Z21p X3Vjb2RlX3NpemUpOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIHBzcF9wcmVwX3RhX2xvYWRfY21k X2J1ZihjbWQsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBz cC0+ZndfcHJpX21jX2FkZHIsCj4+Pj4+IEBAIC05ODIsOCArOTg1LDcgQEAgc3RhdGljIGludCBw c3BfcmFzX2xvYWQoc3RydWN0IHBzcF9jb250ZXh0ICpwc3ApCj4+Pj4+IMKgwqDCoMKgwqDCoCBp ZiAoIWNtZCkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4+ IMKgwqAgLcKgwqDCoCBtZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4+ PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+dGFfcmFzX3N0YXJ0X2FkZHIs IAo+Pj4+PiBwc3AtPnRhX3Jhc191Y29kZV9zaXplKTsKPj4+Pj4gK8KgwqDCoCBwc3BfY29weV9m dyhwc3AsIHBzcC0+dGFfcmFzX3N0YXJ0X2FkZHIsIAo+Pj4+PiBwc3AtPnRhX3Jhc191Y29kZV9z aXplKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBwc3BfcHJlcF90YV9sb2FkX2NtZF9idWYoY21k LAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwc3AtPmZ3X3By aV9tY19hZGRyLAo+Pj4+PiBAQCAtMTIxOSw4ICsxMjIxLDcgQEAgc3RhdGljIGludCBwc3BfaGRj cF9sb2FkKHN0cnVjdCBwc3BfY29udGV4dCAKPj4+Pj4gKnBzcCkKPj4+Pj4gwqDCoMKgwqDCoMKg IGlmICghY21kKQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+ Pj4gwqDCoCAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7Cj4+ Pj4+IC3CoMKgwqAgbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT50YV9oZGNwX3N0YXJ0X2Fk ZHIsCj4+Pj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNwLCBwc3AtPnRhX2hkY3Bfc3RhcnRfYWRk ciwKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNwLT50YV9oZGNwX3Vjb2RlX3Np emUpOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIHBzcF9wcmVwX3RhX2xvYWRfY21kX2J1ZihjbWQs Cj4+Pj4+IEBAIC0xMzY2LDggKzEzNjcsNyBAQCBzdGF0aWMgaW50IHBzcF9kdG1fbG9hZChzdHJ1 Y3QgcHNwX2NvbnRleHQgCj4+Pj4+ICpwc3ApCj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAoIWNtZCkK Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4+IMKgwqAgLcKg wqDCoCBtZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4+PiAtwqDCoMKg IG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+dGFfZHRtX3N0YXJ0X2FkZHIsIAo+Pj4+PiBw c3AtPnRhX2R0bV91Y29kZV9zaXplKTsKPj4+Pj4gK8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBz cC0+dGFfZHRtX3N0YXJ0X2FkZHIsIAo+Pj4+PiBwc3AtPnRhX2R0bV91Y29kZV9zaXplKTsKPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCBwc3BfcHJlcF90YV9sb2FkX2NtZF9idWYoY21kLAo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwc3AtPmZ3X3ByaV9tY19hZGRy LAo+Pj4+PiBAQCAtMTUwNyw4ICsxNTA3LDcgQEAgc3RhdGljIGludCBwc3BfcmFwX2xvYWQoc3Ry dWN0IHBzcF9jb250ZXh0IAo+Pj4+PiAqcHNwKQo+Pj4+PiDCoMKgwqDCoMKgwqAgaWYgKCFjbWQp Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4+PiDCoMKgIC3C oMKgwqAgbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPj4+Pj4gLcKgwqDC oCBtZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnRhX3JhcF9zdGFydF9hZGRyLCAKPj4+Pj4g cHNwLT50YV9yYXBfdWNvZGVfc2l6ZSk7Cj4+Pj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNwLCBw c3AtPnRhX3JhcF9zdGFydF9hZGRyLCAKPj4+Pj4gcHNwLT50YV9yYXBfdWNvZGVfc2l6ZSk7Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgcHNwX3ByZXBfdGFfbG9hZF9jbWRfYnVmKGNtZCwKPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNwLT5md19wcmlfbWNfYWRk ciwKPj4+Pj4gQEAgLTI3NzgsNiArMjc3NywyMCBAQCBzdGF0aWMgc3NpemVfdCAKPj4+Pj4gcHNw X3VzYmNfcGRfZndfc3lzZnNfd3JpdGUoc3RydWN0Cj4+Pj4+IGRldmljZSAqZGV2LAo+Pj4+PiDC oMKgwqDCoMKgwqAgcmV0dXJuIGNvdW50Owo+Pj4+PiDCoMKgIH0KPj4+Pj4gwqDCoCArdm9pZCBw c3BfY29weV9mdyhzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCwgdWludDhfdCAqc3RhcnRfYWRkciwg Cj4+Pj4+IHVpbnQzMl90Cj4+Pj4+IGJpbl9zaXplKQo+Pj4+PiArewo+Pj4+PiArwqDCoMKgIGlu dCBpZHg7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50ZXIoJnBzcC0+YWRl di0+ZGRldiwgJmlkeCkpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+ICsKPj4+ Pj4gK8KgwqDCoCBtZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQU1BfMV9NRUcpOwo+Pj4+PiAr wqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHN0YXJ0X2FkZHIsIGJpbl9zaXplKTsKPj4+ Pj4gKwo+Pj4+PiArwqDCoMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4+PiArfQo+Pj4+PiArCj4+ Pj4+ICsKPj4+Pj4gwqDCoCBzdGF0aWMgREVWSUNFX0FUVFIodXNiY19wZF9mdywgU19JUlVHTyB8 IFNfSVdVU1IsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBzcF91c2JjX3BkX2Z3 X3N5c2ZzX3JlYWQsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBzcF91c2JjX3Bk X2Z3X3N5c2ZzX3dyaXRlKTsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9wc3AuaAo+Pj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9wc3AuaAo+Pj4+PiBpbmRleCBkYTI1MGJjLi5hYzY5MzE0IDEwMDY0NAo+Pj4+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcHNwLmgKPj4+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BzcC5oCj4+Pj4+IEBAIC00MDAsNCArNDAw LDcgQEAgaW50IHBzcF9pbml0X3RhX21pY3JvY29kZShzdHJ1Y3QgcHNwX2NvbnRleHQgCj4+Pj4+ ICpwc3AsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIg KmNoaXBfbmFtZSk7Cj4+Pj4+IMKgwqAgaW50IHBzcF9nZXRfZndfYXR0ZXN0YXRpb25fcmVjb3Jk c19hZGRyKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwLAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50NjRfdCAqb3V0cHV0X3B0cik7Cj4+Pj4+ICsK Pj4+Pj4gK3ZvaWQgcHNwX2NvcHlfZncoc3RydWN0IHBzcF9jb250ZXh0ICpwc3AsIHVpbnQ4X3Qg KnN0YXJ0X2FkZHIsIAo+Pj4+PiB1aW50MzJfdAo+Pj4+PiBiaW5fc2l6ZSk7Cj4+Pj4+ICsKPj4+ Pj4gwqDCoCAjZW5kaWYKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9yaW5nLmMKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfcmluZy5jCj4+Pj4+IGluZGV4IDFhNjEyZjUuLmQ2NTY0OTQgMTAwNjQ0Cj4+Pj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmMKPj4+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3JpbmcuYwo+Pj4+PiBAQCAtMzUsNiArMzUs OCBAQAo+Pj4+PiDCoMKgICNpbmNsdWRlICJhbWRncHUuaCIKPj4+Pj4gwqDCoCAjaW5jbHVkZSAi YXRvbS5oIgo+Pj4+PiDCoMKgICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPj4+Pj4gKwo+Pj4+ PiDCoMKgIC8qCj4+Pj4+IMKgwqDCoCAqIFJpbmdzCj4+Pj4+IMKgwqDCoCAqIE1vc3QgZW5naW5l cyBvbiB0aGUgR1BVIGFyZSBmZWQgdmlhIHJpbmcgYnVmZmVycy4gUmluZwo+Pj4+PiBAQCAtNDYz LDMgKzQ2NSw3MSBAQCBpbnQgYW1kZ3B1X3JpbmdfdGVzdF9oZWxwZXIoc3RydWN0IAo+Pj4+PiBh bWRncHVfcmluZyAqcmluZykKPj4+Pj4gwqDCoMKgwqDCoMKgIHJpbmctPnNjaGVkLnJlYWR5ID0g IXI7Cj4+Pj4+IMKgwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4+Pj4gwqDCoCB9Cj4+Pj4+ICsKPj4+ Pj4gK3ZvaWQgYW1kZ3B1X3JpbmdfY2xlYXJfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcp Cj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+Pj4gK8KgwqDCoCBpbnQgaSA9IDA7 Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBpZiAoIWRybV9kZXZfZW50ZXIoJnJpbmctPmFkZXYtPmRk ZXYsICZpZHgpKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiArCj4+Pj4+ICvC oMKgwqAgd2hpbGUgKGkgPD0gcmluZy0+YnVmX21hc2spCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBy aW5nLT5yaW5nW2krK10gPSByaW5nLT5mdW5jcy0+bm9wOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAg ZHJtX2Rldl9leGl0KGlkeCk7Cj4+Pj4+ICsKPj4+Pj4gK30KPj4+Pj4gKwo+Pj4+PiArdm9pZCBh bWRncHVfcmluZ193cml0ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IHYpCj4+ Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGlmICgh ZHJtX2Rldl9lbnRlcigmcmluZy0+YWRldi0+ZGRldiwgJmlkeCkpCj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm47Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBpZiAocmluZy0+Y291bnRfZHcgPD0g MCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiYW1kZ3B1OiB3cml0aW5nIG1vcmUg ZHdvcmRzIHRvIHRoZSByaW5nIHRoYW4gCj4+Pj4+IGV4cGVjdGVkIVxuIik7Cj4+Pj4+ICvCoMKg wqAgcmluZy0+cmluZ1tyaW5nLT53cHRyKysgJiByaW5nLT5idWZfbWFza10gPSB2Owo+Pj4+PiAr wqDCoMKgIHJpbmctPndwdHIgJj0gcmluZy0+cHRyX21hc2s7Cj4+Pj4+ICvCoMKgwqAgcmluZy0+ Y291bnRfZHctLTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGRybV9kZXZfZXhpdChpZHgpOwo+Pj4+ PiArfQo+Pj4+PiArCj4+Pj4+ICt2b2lkIGFtZGdwdV9yaW5nX3dyaXRlX211bHRpcGxlKHN0cnVj dCBhbWRncHVfcmluZyAqcmluZywKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZvaWQgKnNyYywgaW50IGNvdW50X2R3KQo+Pj4+PiArewo+ Pj4+PiArwqDCoMKgIHVuc2lnbmVkIG9jY3VwaWVkLCBjaHVuazEsIGNodW5rMjsKPj4+Pj4gK8Kg wqDCoCB2b2lkICpkc3Q7Cj4+Pj4+ICvCoMKgwqAgaW50IGlkeDsKPj4+Pj4gKwo+Pj4+PiArwqDC oMKgIGlmICghZHJtX2Rldl9lbnRlcigmcmluZy0+YWRldi0+ZGRldiwgJmlkeCkpCj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBpZiAodW5saWtlbHko cmluZy0+Y291bnRfZHcgPCBjb3VudF9kdykpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fRVJS T1IoImFtZGdwdTogd3JpdGluZyBtb3JlIGR3b3JkcyB0byB0aGUgcmluZyB0aGFuIAo+Pj4+PiBl eHBlY3RlZCFcbiIpOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgb2NjdXBpZWQgPSByaW5nLT53cHRy ICYgcmluZy0+YnVmX21hc2s7Cj4+Pj4+ICvCoMKgwqAgZHN0ID0gKHZvaWQgKikmcmluZy0+cmlu Z1tvY2N1cGllZF07Cj4+Pj4+ICvCoMKgwqAgY2h1bmsxID0gcmluZy0+YnVmX21hc2sgKyAxIC0g b2NjdXBpZWQ7Cj4+Pj4+ICvCoMKgwqAgY2h1bmsxID0gKGNodW5rMSA+PSBjb3VudF9kdykgPyBj b3VudF9kdzogY2h1bmsxOwo+Pj4+PiArwqDCoMKgIGNodW5rMiA9IGNvdW50X2R3IC0gY2h1bmsx Owo+Pj4+PiArwqDCoMKgIGNodW5rMSA8PD0gMjsKPj4+Pj4gK8KgwqDCoCBjaHVuazIgPDw9IDI7 Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBpZiAoY2h1bmsxKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg bWVtY3B5KGRzdCwgc3JjLCBjaHVuazEpOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgaWYgKGNodW5r Mikgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgc3JjICs9IGNodW5rMTsKPj4+Pj4gK8KgwqDCoMKg wqDCoMKgIGRzdCA9ICh2b2lkICopcmluZy0+cmluZzsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG1l bWNweShkc3QsIHNyYywgY2h1bmsyKTsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICsKPj4+Pj4gK8Kg wqDCoCByaW5nLT53cHRyICs9IGNvdW50X2R3Owo+Pj4+PiArwqDCoMKgIHJpbmctPndwdHIgJj0g cmluZy0+cHRyX21hc2s7Cj4+Pj4+ICvCoMKgwqAgcmluZy0+Y291bnRfZHcgLT0gY291bnRfZHc7 Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCBkcm1fZGV2X2V4aXQoaWR4KTsKPj4+Pj4gK30KPj4+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9yaW5nLmgKPj4+ Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcmluZy5oCj4+Pj4+IGluZGV4 IGFjY2IyNDMuLmY5MGI4MWYgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9yaW5nLmgKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3JpbmcuaAo+Pj4+PiBAQCAtMzAwLDUzICszMDAsMTIgQEAgc3RhdGljIGlubGlu ZSB2b2lkCj4+Pj4+IGFtZGdwdV9yaW5nX3NldF9wcmVlbXB0X2NvbmRfZXhlYyhzdHJ1Y3QgYW1k Z3B1X3JpbmcgKnJpbmcsCj4+Pj4+IMKgwqDCoMKgwqDCoCAqcmluZy0+Y29uZF9leGVfY3B1X2Fk ZHIgPSBjb25kX2V4ZWM7Cj4+Pj4+IMKgwqAgfQo+Pj4+PiDCoMKgIC1zdGF0aWMgaW5saW5lIHZv aWQgYW1kZ3B1X3JpbmdfY2xlYXJfcmluZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgCj4+Pj4+ICpyaW5n KQo+Pj4+PiAtewo+Pj4+PiAtwqDCoMKgIGludCBpID0gMDsKPj4+Pj4gLcKgwqDCoCB3aGlsZSAo aSA8PSByaW5nLT5idWZfbWFzaykKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHJpbmctPnJpbmdbaSsr XSA9IHJpbmctPmZ1bmNzLT5ub3A7Cj4+Pj4+IC0KPj4+Pj4gLX0KPj4+Pj4gLQo+Pj4+PiAtc3Rh dGljIGlubGluZSB2b2lkIGFtZGdwdV9yaW5nX3dyaXRlKHN0cnVjdCBhbWRncHVfcmluZyAqcmlu ZywgCj4+Pj4+IHVpbnQzMl90IHYpCj4+Pj4+IC17Cj4+Pj4+IC3CoMKgwqAgaWYgKHJpbmctPmNv dW50X2R3IDw9IDApCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoImFtZGdwdTogd3Jp dGluZyBtb3JlIGR3b3JkcyB0byB0aGUgcmluZyB0aGFuIAo+Pj4+PiBleHBlY3RlZCFcbiIpOwo+ Pj4+PiAtwqDCoMKgIHJpbmctPnJpbmdbcmluZy0+d3B0cisrICYgcmluZy0+YnVmX21hc2tdID0g djsKPj4+Pj4gLcKgwqDCoCByaW5nLT53cHRyICY9IHJpbmctPnB0cl9tYXNrOwo+Pj4+PiAtwqDC oMKgIHJpbmctPmNvdW50X2R3LS07Cj4+Pj4+IC19Cj4+Pj4+ICt2b2lkIGFtZGdwdV9yaW5nX2Ns ZWFyX3Jpbmcoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nKTsKPj4+Pj4gwqDCoCAtc3RhdGljIGlu bGluZSB2b2lkIGFtZGdwdV9yaW5nX3dyaXRlX211bHRpcGxlKHN0cnVjdCAKPj4+Pj4gYW1kZ3B1 X3JpbmcgKnJpbmcsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2b2lkICpzcmMsIGludCBjb3VudF9kdykKPj4+Pj4gLXsKPj4+Pj4gLcKg wqDCoCB1bnNpZ25lZCBvY2N1cGllZCwgY2h1bmsxLCBjaHVuazI7Cj4+Pj4+IC3CoMKgwqAgdm9p ZCAqZHN0Owo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgaWYgKHVubGlrZWx5KHJpbmctPmNvdW50X2R3 IDwgY291bnRfZHcpKQo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJhbWRncHU6IHdy aXRpbmcgbW9yZSBkd29yZHMgdG8gdGhlIHJpbmcgdGhhbiAKPj4+Pj4gZXhwZWN0ZWQhXG4iKTsK Pj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIG9jY3VwaWVkID0gcmluZy0+d3B0ciAmIHJpbmctPmJ1Zl9t YXNrOwo+Pj4+PiAtwqDCoMKgIGRzdCA9ICh2b2lkICopJnJpbmctPnJpbmdbb2NjdXBpZWRdOwo+ Pj4+PiAtwqDCoMKgIGNodW5rMSA9IHJpbmctPmJ1Zl9tYXNrICsgMSAtIG9jY3VwaWVkOwo+Pj4+ PiAtwqDCoMKgIGNodW5rMSA9IChjaHVuazEgPj0gY291bnRfZHcpID8gY291bnRfZHc6IGNodW5r MTsKPj4+Pj4gLcKgwqDCoCBjaHVuazIgPSBjb3VudF9kdyAtIGNodW5rMTsKPj4+Pj4gLcKgwqDC oCBjaHVuazEgPDw9IDI7Cj4+Pj4+IC3CoMKgwqAgY2h1bmsyIDw8PSAyOwo+Pj4+PiArdm9pZCBh bWRncHVfcmluZ193cml0ZShzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHVpbnQzMl90IHYpOwo+ Pj4+PiDCoMKgIC3CoMKgwqAgaWYgKGNodW5rMSkKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIG1lbWNw eShkc3QsIHNyYywgY2h1bmsxKTsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIGlmIChjaHVuazIpIHsK Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHNyYyArPSBjaHVuazE7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDC oCBkc3QgPSAodm9pZCAqKXJpbmctPnJpbmc7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBtZW1jcHko ZHN0LCBzcmMsIGNodW5rMik7Cj4+Pj4+IC3CoMKgwqAgfQo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAg cmluZy0+d3B0ciArPSBjb3VudF9kdzsKPj4+Pj4gLcKgwqDCoCByaW5nLT53cHRyICY9IHJpbmct PnB0cl9tYXNrOwo+Pj4+PiAtwqDCoMKgIHJpbmctPmNvdW50X2R3IC09IGNvdW50X2R3Owo+Pj4+ PiAtfQo+Pj4+PiArdm9pZCBhbWRncHVfcmluZ193cml0ZV9tdWx0aXBsZShzdHJ1Y3QgYW1kZ3B1 X3JpbmcgKnJpbmcsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2b2lkICpzcmMsIGludCBjb3VudF9kdyk7Cj4+Pj4+IMKgwqDCoMKgIGlu dCBhbWRncHVfcmluZ190ZXN0X2hlbHBlcihzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpOwo+Pj4+ PiDCoMKgIGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3BfdjExXzAu Ywo+Pj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTFfMC5jCj4+Pj4+IGlu ZGV4IGJkNDI0OGMuLmIzY2U1YmUgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L3BzcF92MTFfMC5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L3BzcF92MTFfMC5jCj4+Pj4+IEBAIC0yNjksMTAgKzI2OSw4IEBAIHN0YXRpYyBpbnQgcHNw X3YxMV8wX2Jvb3Rsb2FkZXJfbG9hZF9rZGIoc3RydWN0Cj4+Pj4+IHBzcF9jb250ZXh0ICpwc3Ap Cj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcmV0Owo+Pj4+PiDCoMKgIC3CoMKgwqAgbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwg UFNQXzFfTUVHKTsKPj4+Pj4gLQo+Pj4+PiDCoMKgwqDCoMKgwqAgLyogQ29weSBQU1AgS0RCIGJp bmFyeSB0byBtZW1vcnkgKi8KPj4+Pj4gLcKgwqDCoCBtZW1jcHkocHNwLT5md19wcmlfYnVmLCBw c3AtPmtkYl9zdGFydF9hZGRyLCBwc3AtPmtkYl9iaW5fc2l6ZSk7Cj4+Pj4+ICvCoMKgwqAgcHNw X2NvcHlfZncocHNwLCBwc3AtPmtkYl9zdGFydF9hZGRyLCBwc3AtPmtkYl9iaW5fc2l6ZSk7Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLyogUHJvdmlkZSB0aGUgUFNQIEtEQiB0byBib290bG9hZGVy ICovCj4+Pj4+IMKgwqDCoMKgwqDCoCBXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQ TVNHXzM2LAo+Pj4+PiBAQCAtMzAyLDEwICszMDAsOCBAQCBzdGF0aWMgaW50IHBzcF92MTFfMF9i b290bG9hZGVyX2xvYWRfc3BsKHN0cnVjdAo+Pj4+PiBwc3BfY29udGV4dCAqcHNwKQo+Pj4+PiDC oMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPj4+Pj4gwqDCoCAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01F Ryk7Cj4+Pj4+IC0KPj4+Pj4gwqDCoMKgwqDCoMKgIC8qIENvcHkgUFNQIFNQTCBiaW5hcnkgdG8g bWVtb3J5ICovCj4+Pj4+IC3CoMKgwqAgbWVtY3B5KHBzcC0+ZndfcHJpX2J1ZiwgcHNwLT5zcGxf c3RhcnRfYWRkciwgcHNwLT5zcGxfYmluX3NpemUpOwo+Pj4+PiArwqDCoMKgIHBzcF9jb3B5X2Z3 KHBzcCwgcHNwLT5zcGxfc3RhcnRfYWRkciwgcHNwLT5zcGxfYmluX3NpemUpOwo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgIC8qIFByb3ZpZGUgdGhlIFBTUCBTUEwgdG8gYm9vdGxvYWRlciAqLwo+Pj4+ PiDCoMKgwqDCoMKgwqAgV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBfU01OX0MyUE1TR18zNiwK Pj4+Pj4gQEAgLTMzNSwxMCArMzMxLDggQEAgc3RhdGljIGludCAKPj4+Pj4gcHNwX3YxMV8wX2Jv b3Rsb2FkZXJfbG9hZF9zeXNkcnYoc3RydWN0Cj4+Pj4+IHBzcF9jb250ZXh0ICpwc3ApCj4+Pj4+ IMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Owo+Pj4+PiDCoMKgIC3CoMKgwqAgbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFf TUVHKTsKPj4+Pj4gLQo+Pj4+PiDCoMKgwqDCoMKgwqAgLyogQ29weSBQU1AgU3lzdGVtIERyaXZl ciBiaW5hcnkgdG8gbWVtb3J5ICovCj4+Pj4+IC3CoMKgwqAgbWVtY3B5KHBzcC0+ZndfcHJpX2J1 ZiwgcHNwLT5zeXNfc3RhcnRfYWRkciwgcHNwLT5zeXNfYmluX3NpemUpOwo+Pj4+PiArwqDCoMKg IHBzcF9jb3B5X2Z3KHBzcCwgcHNwLT5zeXNfc3RhcnRfYWRkciwgcHNwLT5zeXNfYmluX3NpemUp Owo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC8qIFByb3ZpZGUgdGhlIHN5cyBkcml2ZXIgdG8gYm9v dGxvYWRlciAqLwo+Pj4+PiDCoMKgwqDCoMKgwqAgV1JFRzMyX1NPQzE1KE1QMCwgMCwgbW1NUDBf U01OX0MyUE1TR18zNiwKPj4+Pj4gQEAgLTM3MSwxMCArMzY1LDggQEAgc3RhdGljIGludCBwc3Bf djExXzBfYm9vdGxvYWRlcl9sb2FkX3NvcyhzdHJ1Y3QKPj4+Pj4gcHNwX2NvbnRleHQgKnBzcCkK Pj4+Pj4gwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4+Pj4+IMKgwqAgLcKgwqDCoCBtZW1zZXQocHNwLT5md19wcmlfYnVmLCAwLCBQ U1BfMV9NRUcpOwo+Pj4+PiAtCj4+Pj4+IMKgwqDCoMKgwqDCoCAvKiBDb3B5IFNlY3VyZSBPUyBi aW5hcnkgdG8gUFNQIG1lbW9yeSAqLwo+Pj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9i dWYsIHBzcC0+c29zX3N0YXJ0X2FkZHIsIHBzcC0+c29zX2Jpbl9zaXplKTsKPj4+Pj4gK8KgwqDC oCBwc3BfY29weV9mdyhwc3AsIHBzcC0+c29zX3N0YXJ0X2FkZHIsIHBzcC0+c29zX2Jpbl9zaXpl KTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAvKiBQcm92aWRlIHRoZSBQU1Agc2VjdXJlIE9TIHRv IGJvb3Rsb2FkZXIgKi8KPj4+Pj4gwqDCoMKgwqDCoMKgIFdSRUczMl9TT0MxNShNUDAsIDAsIG1t TVAwX1NNTl9DMlBNU0dfMzYsCj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9wc3BfdjEyXzAuYwo+Pj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3Bz cF92MTJfMC5jCj4+Pj4+IGluZGV4IGM0ODI4YmQuLjYxOGU1YjYgMTAwNjQ0Cj4+Pj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTJfMC5jCj4+Pj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTJfMC5jCj4+Pj4+IEBAIC0xMzgsMTAgKzEzOCw4 IEBAIHN0YXRpYyBpbnQgCj4+Pj4+IHBzcF92MTJfMF9ib290bG9hZGVyX2xvYWRfc3lzZHJ2KHN0 cnVjdAo+Pj4+PiBwc3BfY29udGV4dCAqcHNwKQo+Pj4+PiDCoMKgwqDCoMKgwqAgaWYgKHJldCkK Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4gwqDCoCAtwqDCoMKg IG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAsIFBTUF8xX01FRyk7Cj4+Pj4+IC0KPj4+Pj4gwqDC oMKgwqDCoMKgIC8qIENvcHkgUFNQIFN5c3RlbSBEcml2ZXIgYmluYXJ5IHRvIG1lbW9yeSAqLwo+ Pj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3X3ByaV9idWYsIHBzcC0+c3lzX3N0YXJ0X2FkZHIs IHBzcC0+c3lzX2Jpbl9zaXplKTsKPj4+Pj4gK8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBzcC0+ c3lzX3N0YXJ0X2FkZHIsIHBzcC0+c3lzX2Jpbl9zaXplKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCAvKiBQcm92aWRlIHRoZSBzeXMgZHJpdmVyIHRvIGJvb3Rsb2FkZXIgKi8KPj4+Pj4gwqDCoMKg wqDCoMKgIFdSRUczMl9TT0MxNShNUDAsIDAsIG1tTVAwX1NNTl9DMlBNU0dfMzYsCj4+Pj4+IEBA IC0xNzksMTAgKzE3Nyw4IEBAIHN0YXRpYyBpbnQgcHNwX3YxMl8wX2Jvb3Rsb2FkZXJfbG9hZF9z b3Moc3RydWN0Cj4+Pj4+IHBzcF9jb250ZXh0ICpwc3ApCj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAo cmV0KQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiDCoMKgIC3C oMKgwqAgbWVtc2V0KHBzcC0+ZndfcHJpX2J1ZiwgMCwgUFNQXzFfTUVHKTsKPj4+Pj4gLQo+Pj4+ PiDCoMKgwqDCoMKgwqAgLyogQ29weSBTZWN1cmUgT1MgYmluYXJ5IHRvIFBTUCBtZW1vcnkgKi8K Pj4+Pj4gLcKgwqDCoCBtZW1jcHkocHNwLT5md19wcmlfYnVmLCBwc3AtPnNvc19zdGFydF9hZGRy LCBwc3AtPnNvc19iaW5fc2l6ZSk7Cj4+Pj4+ICvCoMKgwqAgcHNwX2NvcHlfZncocHNwLCBwc3At PnNvc19zdGFydF9hZGRyLCBwc3AtPnNvc19iaW5fc2l6ZSk7Cj4+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgLyogUHJvdmlkZSB0aGUgUFNQIHNlY3VyZSBPUyB0byBib290bG9hZGVyICovCj4+Pj4+IMKg wqDCoMKgwqDCoCBXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM2LAo+Pj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcHNwX3YzXzEuYwo+Pj4+ PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92M18xLmMKPj4+Pj4gaW5kZXggZjJl NzI1Zi4uZDBhNmNjY2QgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L3BzcF92M18xLmMKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvcHNw X3YzXzEuYwo+Pj4+PiBAQCAtMTAyLDEwICsxMDIsOCBAQCBzdGF0aWMgaW50IAo+Pj4+PiBwc3Bf djNfMV9ib290bG9hZGVyX2xvYWRfc3lzZHJ2KHN0cnVjdAo+Pj4+PiBwc3BfY29udGV4dCAqcHNw KQo+Pj4+PiDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIHJldDsKPj4+Pj4gwqDCoCAtwqDCoMKgIG1lbXNldChwc3AtPmZ3X3ByaV9idWYsIDAs IFBTUF8xX01FRyk7Cj4+Pj4+IC0KPj4+Pj4gwqDCoMKgwqDCoMKgIC8qIENvcHkgUFNQIFN5c3Rl bSBEcml2ZXIgYmluYXJ5IHRvIG1lbW9yeSAqLwo+Pj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3 X3ByaV9idWYsIHBzcC0+c3lzX3N0YXJ0X2FkZHIsIHBzcC0+c3lzX2Jpbl9zaXplKTsKPj4+Pj4g K8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBzcC0+c3lzX3N0YXJ0X2FkZHIsIHBzcC0+c3lzX2Jp bl9zaXplKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAvKiBQcm92aWRlIHRoZSBzeXMgZHJpdmVy IHRvIGJvb3Rsb2FkZXIgKi8KPj4+Pj4gwqDCoMKgwqDCoMKgIFdSRUczMl9TT0MxNShNUDAsIDAs IG1tTVAwX1NNTl9DMlBNU0dfMzYsCj4+Pj4+IEBAIC0xNDMsMTAgKzE0MSw4IEBAIHN0YXRpYyBp bnQgcHNwX3YzXzFfYm9vdGxvYWRlcl9sb2FkX3NvcyhzdHJ1Y3QKPj4+Pj4gcHNwX2NvbnRleHQg KnBzcCkKPj4+Pj4gwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiByZXQ7Cj4+Pj4+IMKgwqAgLcKgwqDCoCBtZW1zZXQocHNwLT5md19wcmlfYnVm LCAwLCBQU1BfMV9NRUcpOwo+Pj4+PiAtCj4+Pj4+IMKgwqDCoMKgwqDCoCAvKiBDb3B5IFNlY3Vy ZSBPUyBiaW5hcnkgdG8gUFNQIG1lbW9yeSAqLwo+Pj4+PiAtwqDCoMKgIG1lbWNweShwc3AtPmZ3 X3ByaV9idWYsIHBzcC0+c29zX3N0YXJ0X2FkZHIsIHBzcC0+c29zX2Jpbl9zaXplKTsKPj4+Pj4g K8KgwqDCoCBwc3BfY29weV9mdyhwc3AsIHBzcC0+c29zX3N0YXJ0X2FkZHIsIHBzcC0+c29zX2Jp bl9zaXplKTsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAvKiBQcm92aWRlIHRoZSBQU1Agc2VjdXJl IE9TIHRvIGJvb3Rsb2FkZXIgKi8KPj4+Pj4gwqDCoMKgwqDCoMKgIFdSRUczMl9TT0MxNShNUDAs IDAsIG1tTVAwX1NNTl9DMlBNU0dfMzYsCj4+Cj4+Cj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+IGFtZC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9hbWQtZ2Z4CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK