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=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 C8940C04E87 for ; Mon, 20 May 2019 08:24:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9005D20859 for ; Mon, 20 May 2019 08:24:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="QsXk17pA" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731335AbfETIWh (ORCPT ); Mon, 20 May 2019 04:22:37 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:34346 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731317AbfETIWf (ORCPT ); Mon, 20 May 2019 04:22:35 -0400 Received: by mail-ed1-f66.google.com with SMTP id p27so22585340eda.1 for ; Mon, 20 May 2019 01:22:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lwFpKjbpcVfpxavAIzY2FLdOXjuwdFWEEdQZCv4IdjM=; b=QsXk17pAjlKycoPZTOSaN4LlLR4asGEE0iqfcFpeJDjgVLyUgtaqMucm8pPF4Hh7y3 0P1ZDpsUiTukc91Jg9NYU0gTd9GISmiuhXHZUVXRAPCDq/c5hkdGY/fzuLrel8ZqClgJ DhGW8hIctQhq4oFsNDmF08WccwkWXo5yuibzM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lwFpKjbpcVfpxavAIzY2FLdOXjuwdFWEEdQZCv4IdjM=; b=hzsz514/uK3NolMvq3X72W4ZlkYwhCiB8T6GnV4mTaS3RM+kmuxCIpnnqcwFFz17iF tR8DycxdOQipycUq+3vGPzyU8+j6j9mBtsxf5thgpQeWlHl0c/Vmkzk4J0A7Y+6xdqJK O1dwV9exilX/1HOctHJ1t3XEE2cNii0NA/xqCMJapopBqVxDo53MpKhEru/bSicVsbPo 9nLct0PHhwg8ccPxy1VBZCg1H91JQE56SQCnMqFaE7WOf9z1Ew36pGY3Vuff/L10YfOn dKvezCMeDBPgJrXPuCiHtUpy0Naabm/P55W+45Xcg/igzAcVj6ELjbX9nV68Z2IbXnbX rE+w== X-Gm-Message-State: APjAAAU4+emd0SMCTpRVdgsQQJARtSzkahpDTJneXJyVgltkCyOh0arg F99k2c9drBX7dCGk+GRPu3fQJQ== X-Google-Smtp-Source: APXvYqyaF3UDCmRImjTKmK2S0jUqa2Jdsisz4g5gCuh/2C8JABswvXs+xL3FfvnEiNUWEG4UegO6aw== X-Received: by 2002:a50:e705:: with SMTP id a5mr73800863edn.270.1558340553273; Mon, 20 May 2019 01:22:33 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id t25sm3021263ejx.8.2019.05.20.01.22.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 May 2019 01:22:32 -0700 (PDT) From: Daniel Vetter To: DRI Development Cc: Intel Graphics Development , LKML , Daniel Vetter , Daniel Vetter , Bartlomiej Zolnierkiewicz , Hans de Goede , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Yisheng Xie , Konstantin Khorenko , Prarit Bhargava , Kees Cook Subject: [PATCH 09/33] fbcon: Remove fbcon_has_exited Date: Mon, 20 May 2019 10:21:52 +0200 Message-Id: <20190520082216.26273-10-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190520082216.26273-1-daniel.vetter@ffwll.ch> References: <20190520082216.26273-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is unused code since commit 6104c37094e729f3d4ce65797002112735d49cd1 Author: Daniel Vetter Date: Tue Aug 1 17:32:07 2017 +0200 fbcon: Make fbcon a built-time depency for fbdev when fbcon was made a compile-time static dependency of fbdev. We can't exit fbcon anymore without exiting fbdev first, which only works if all fbdev drivers have unloaded already. Hence this is all dead code. v2: I missed that fbcon_exit is also called from con_deinit stuff, and there fbcon_has_exited prevents double-cleanup. But we can fix that by properly resetting con2fb_map[] to all -1, which is used everywhere else to indicate "no fb_info allocate to this console". With that change the double-cleanup (which resulted in a module refcount underflow, among other things) is prevented. Aside: con2fb_map is a signed char, so don't register more than 128 fb_info or hilarity will ensue. Signed-off-by: Daniel Vetter Cc: Bartlomiej Zolnierkiewicz Cc: Daniel Vetter Cc: Hans de Goede Cc: "Noralf Trønnes" Cc: Yisheng Xie Cc: Konstantin Khorenko Cc: Prarit Bhargava Cc: Kees Cook --- drivers/video/fbdev/core/fbcon.c | 33 +------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 2b2082615ca1..a1be589b692f 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -112,7 +112,6 @@ static int softback_lines; static int first_fb_vc; static int last_fb_vc = MAX_NR_CONSOLES - 1; static int fbcon_is_default = 1; -static int fbcon_has_exited; static int primary_device = -1; static int fbcon_has_console_bind; @@ -1050,7 +1049,6 @@ static const char *fbcon_startup(void) info->var.bits_per_pixel); fbcon_add_cursor_timer(info); - fbcon_has_exited = 0; return display_desc; } @@ -3336,14 +3334,6 @@ static int fbcon_event_notify(struct notifier_block *self, struct fb_blit_caps *caps; int idx, ret = 0; - /* - * ignore all events except driver registration and deregistration - * if fbcon is not active - */ - if (fbcon_has_exited && !(action == FB_EVENT_FB_REGISTERED || - action == FB_EVENT_FB_UNREGISTERED)) - goto done; - switch(action) { case FB_EVENT_SUSPEND: fbcon_suspended(info); @@ -3396,7 +3386,6 @@ static int fbcon_event_notify(struct notifier_block *self, fbcon_remap_all(idx); break; } -done: return ret; } @@ -3443,9 +3432,6 @@ static ssize_t store_rotate(struct device *device, int rotate, idx; char **last = NULL; - if (fbcon_has_exited) - return count; - console_lock(); idx = con2fb_map[fg_console]; @@ -3468,9 +3454,6 @@ static ssize_t store_rotate_all(struct device *device, int rotate, idx; char **last = NULL; - if (fbcon_has_exited) - return count; - console_lock(); idx = con2fb_map[fg_console]; @@ -3491,9 +3474,6 @@ static ssize_t show_rotate(struct device *device, struct fb_info *info; int rotate = 0, idx; - if (fbcon_has_exited) - return 0; - console_lock(); idx = con2fb_map[fg_console]; @@ -3514,9 +3494,6 @@ static ssize_t show_cursor_blink(struct device *device, struct fbcon_ops *ops; int idx, blink = -1; - if (fbcon_has_exited) - return 0; - console_lock(); idx = con2fb_map[fg_console]; @@ -3543,9 +3520,6 @@ static ssize_t store_cursor_blink(struct device *device, int blink, idx; char **last = NULL; - if (fbcon_has_exited) - return count; - console_lock(); idx = con2fb_map[fg_console]; @@ -3668,9 +3642,6 @@ static void fbcon_exit(void) struct fb_info *info; int i, j, mapped; - if (fbcon_has_exited) - return; - #ifdef CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER if (deferred_takeover) { dummycon_unregister_output_notifier(&fbcon_output_nb); @@ -3695,7 +3666,7 @@ static void fbcon_exit(void) for (j = first_fb_vc; j <= last_fb_vc; j++) { if (con2fb_map[j] == i) { mapped = 1; - break; + con2fb_map[j] = -1; } } @@ -3718,8 +3689,6 @@ static void fbcon_exit(void) info->queue.func = NULL; } } - - fbcon_has_exited = 1; } void __init fb_console_init(void) -- 2.20.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 09/33] fbcon: Remove fbcon_has_exited Date: Mon, 20 May 2019 10:21:52 +0200 Message-ID: <20190520082216.26273-10-daniel.vetter@ffwll.ch> References: <20190520082216.26273-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190520082216.26273-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: DRI Development Cc: Prarit Bhargava , Kees Cook , Bartlomiej Zolnierkiewicz , Daniel Vetter , Intel Graphics Development , LKML , Yisheng Xie , =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Daniel Vetter , Konstantin Khorenko List-Id: dri-devel@lists.freedesktop.org VGhpcyBpcyB1bnVzZWQgY29kZSBzaW5jZQoKY29tbWl0IDYxMDRjMzcwOTRlNzI5ZjNkNGNlNjU3 OTcwMDIxMTI3MzVkNDljZDEKQXV0aG9yOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgpEYXRlOiAgIFR1ZSBBdWcgMSAxNzozMjowNyAyMDE3ICswMjAwCgogICAgZmJjb246 IE1ha2UgZmJjb24gYSBidWlsdC10aW1lIGRlcGVuY3kgZm9yIGZiZGV2Cgp3aGVuIGZiY29uIHdh cyBtYWRlIGEgY29tcGlsZS10aW1lIHN0YXRpYyBkZXBlbmRlbmN5IG9mIGZiZGV2LiBXZQpjYW4n dCBleGl0IGZiY29uIGFueW1vcmUgd2l0aG91dCBleGl0aW5nIGZiZGV2IGZpcnN0LCB3aGljaCBv bmx5IHdvcmtzCmlmIGFsbCBmYmRldiBkcml2ZXJzIGhhdmUgdW5sb2FkZWQgYWxyZWFkeS4gSGVu Y2UgdGhpcyBpcyBhbGwgZGVhZApjb2RlLgoKdjI6IEkgbWlzc2VkIHRoYXQgZmJjb25fZXhpdCBp cyBhbHNvIGNhbGxlZCBmcm9tIGNvbl9kZWluaXQgc3R1ZmYsIGFuZAp0aGVyZSBmYmNvbl9oYXNf ZXhpdGVkIHByZXZlbnRzIGRvdWJsZS1jbGVhbnVwLiBCdXQgd2UgY2FuIGZpeCB0aGF0CmJ5IHBy b3Blcmx5IHJlc2V0dGluZyBjb24yZmJfbWFwW10gdG8gYWxsIC0xLCB3aGljaCBpcyB1c2VkIGV2 ZXJ5d2hlcmUKZWxzZSB0byBpbmRpY2F0ZSAibm8gZmJfaW5mbyBhbGxvY2F0ZSB0byB0aGlzIGNv bnNvbGUiLiBXaXRoIHRoYXQKY2hhbmdlIHRoZSBkb3VibGUtY2xlYW51cCAod2hpY2ggcmVzdWx0 ZWQgaW4gYSBtb2R1bGUgcmVmY291bnQgdW5kZXJmbG93LAphbW9uZyBvdGhlciB0aGluZ3MpIGlz IHByZXZlbnRlZC4KCkFzaWRlOiBjb24yZmJfbWFwIGlzIGEgc2lnbmVkIGNoYXIsIHNvIGRvbid0 IHJlZ2lzdGVyIG1vcmUgdGhhbiAxMjggZmJfaW5mbwpvciBoaWxhcml0eSB3aWxsIGVuc3VlLgoK U2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+CkNj OiBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6IDxiLnpvbG5pZXJraWVAc2Ftc3VuZy5jb20+CkNj OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgpDYzogSGFucyBkZSBHb2Vk ZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KQ2M6ICJOb3JhbGYgVHLDuG5uZXMiIDxub3JhbGZAdHJv bm5lcy5vcmc+CkNjOiBZaXNoZW5nIFhpZSA8eXN4aWVAZm94bWFpbC5jb20+CkNjOiBLb25zdGFu dGluIEtob3JlbmtvIDxraG9yZW5rb0B2aXJ0dW96em8uY29tPgpDYzogUHJhcml0IEJoYXJnYXZh IDxwcmFyaXRAcmVkaGF0LmNvbT4KQ2M6IEtlZXMgQ29vayA8a2Vlc2Nvb2tAY2hyb21pdW0ub3Jn PgotLS0KIGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNvbi5jIHwgMzMgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMzIg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29u LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uYwppbmRleCAyYjIwODI2MTVjYTEu LmExYmU1ODliNjkyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29u LmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uLmMKQEAgLTExMiw3ICsxMTIs NiBAQCBzdGF0aWMgaW50IHNvZnRiYWNrX2xpbmVzOwogc3RhdGljIGludCBmaXJzdF9mYl92YzsK IHN0YXRpYyBpbnQgbGFzdF9mYl92YyA9IE1BWF9OUl9DT05TT0xFUyAtIDE7CiBzdGF0aWMgaW50 IGZiY29uX2lzX2RlZmF1bHQgPSAxOyAKLXN0YXRpYyBpbnQgZmJjb25faGFzX2V4aXRlZDsKIHN0 YXRpYyBpbnQgcHJpbWFyeV9kZXZpY2UgPSAtMTsKIHN0YXRpYyBpbnQgZmJjb25faGFzX2NvbnNv bGVfYmluZDsKIApAQCAtMTA1MCw3ICsxMDQ5LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmZiY29u X3N0YXJ0dXAodm9pZCkKIAkJaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKIAogCWZiY29uX2Fk ZF9jdXJzb3JfdGltZXIoaW5mbyk7Ci0JZmJjb25faGFzX2V4aXRlZCA9IDA7CiAJcmV0dXJuIGRp c3BsYXlfZGVzYzsKIH0KIApAQCAtMzMzNiwxNCArMzMzNCw2IEBAIHN0YXRpYyBpbnQgZmJjb25f ZXZlbnRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAlzdHJ1Y3QgZmJfYmxp dF9jYXBzICpjYXBzOwogCWludCBpZHgsIHJldCA9IDA7CiAKLQkvKgotCSAqIGlnbm9yZSBhbGwg ZXZlbnRzIGV4Y2VwdCBkcml2ZXIgcmVnaXN0cmF0aW9uIGFuZCBkZXJlZ2lzdHJhdGlvbgotCSAq IGlmIGZiY29uIGlzIG5vdCBhY3RpdmUKLQkgKi8KLQlpZiAoZmJjb25faGFzX2V4aXRlZCAmJiAh KGFjdGlvbiA9PSBGQl9FVkVOVF9GQl9SRUdJU1RFUkVEIHx8Ci0JCQkJICBhY3Rpb24gPT0gRkJf RVZFTlRfRkJfVU5SRUdJU1RFUkVEKSkKLQkJZ290byBkb25lOwotCiAJc3dpdGNoKGFjdGlvbikg ewogCWNhc2UgRkJfRVZFTlRfU1VTUEVORDoKIAkJZmJjb25fc3VzcGVuZGVkKGluZm8pOwpAQCAt MzM5Niw3ICszMzg2LDYgQEAgc3RhdGljIGludCBmYmNvbl9ldmVudF9ub3RpZnkoc3RydWN0IG5v dGlmaWVyX2Jsb2NrICpzZWxmLAogCQlmYmNvbl9yZW1hcF9hbGwoaWR4KTsKIAkJYnJlYWs7CiAJ fQotZG9uZToKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDQzLDkgKzM0MzIsNiBAQCBzdGF0aWMg c3NpemVfdCBzdG9yZV9yb3RhdGUoc3RydWN0IGRldmljZSAqZGV2aWNlLAogCWludCByb3RhdGUs IGlkeDsKIAljaGFyICoqbGFzdCA9IE5VTEw7CiAKLQlpZiAoZmJjb25faGFzX2V4aXRlZCkKLQkJ cmV0dXJuIGNvdW50OwotCiAJY29uc29sZV9sb2NrKCk7CiAJaWR4ID0gY29uMmZiX21hcFtmZ19j b25zb2xlXTsKIApAQCAtMzQ2OCw5ICszNDU0LDYgQEAgc3RhdGljIHNzaXplX3Qgc3RvcmVfcm90 YXRlX2FsbChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCiAJaW50IHJvdGF0ZSwgaWR4OwogCWNoYXIg KipsYXN0ID0gTlVMTDsKIAotCWlmIChmYmNvbl9oYXNfZXhpdGVkKQotCQlyZXR1cm4gY291bnQ7 Ci0KIAljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCkBA IC0zNDkxLDkgKzM0NzQsNiBAQCBzdGF0aWMgc3NpemVfdCBzaG93X3JvdGF0ZShzdHJ1Y3QgZGV2 aWNlICpkZXZpY2UsCiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IHJvdGF0ZSA9IDAsIGlk eDsKIAotCWlmIChmYmNvbl9oYXNfZXhpdGVkKQotCQlyZXR1cm4gMDsKLQogCWNvbnNvbGVfbG9j aygpOwogCWlkeCA9IGNvbjJmYl9tYXBbZmdfY29uc29sZV07CiAKQEAgLTM1MTQsOSArMzQ5NCw2 IEBAIHN0YXRpYyBzc2l6ZV90IHNob3dfY3Vyc29yX2JsaW5rKHN0cnVjdCBkZXZpY2UgKmRldmlj ZSwKIAlzdHJ1Y3QgZmJjb25fb3BzICpvcHM7CiAJaW50IGlkeCwgYmxpbmsgPSAtMTsKIAotCWlm IChmYmNvbl9oYXNfZXhpdGVkKQotCQlyZXR1cm4gMDsKLQogCWNvbnNvbGVfbG9jaygpOwogCWlk eCA9IGNvbjJmYl9tYXBbZmdfY29uc29sZV07CiAKQEAgLTM1NDMsOSArMzUyMCw2IEBAIHN0YXRp YyBzc2l6ZV90IHN0b3JlX2N1cnNvcl9ibGluayhzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCiAJaW50 IGJsaW5rLCBpZHg7CiAJY2hhciAqKmxhc3QgPSBOVUxMOwogCi0JaWYgKGZiY29uX2hhc19leGl0 ZWQpCi0JCXJldHVybiBjb3VudDsKLQogCWNvbnNvbGVfbG9jaygpOwogCWlkeCA9IGNvbjJmYl9t YXBbZmdfY29uc29sZV07CiAKQEAgLTM2NjgsOSArMzY0Miw2IEBAIHN0YXRpYyB2b2lkIGZiY29u X2V4aXQodm9pZCkKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgaSwgaiwgbWFwcGVkOwog Ci0JaWYgKGZiY29uX2hhc19leGl0ZWQpCi0JCXJldHVybjsKLQogI2lmZGVmIENPTkZJR19GUkFN RUJVRkZFUl9DT05TT0xFX0RFRkVSUkVEX1RBS0VPVkVSCiAJaWYgKGRlZmVycmVkX3Rha2VvdmVy KSB7CiAJCWR1bW15Y29uX3VucmVnaXN0ZXJfb3V0cHV0X25vdGlmaWVyKCZmYmNvbl9vdXRwdXRf bmIpOwpAQCAtMzY5NSw3ICszNjY2LDcgQEAgc3RhdGljIHZvaWQgZmJjb25fZXhpdCh2b2lkKQog CQlmb3IgKGogPSBmaXJzdF9mYl92YzsgaiA8PSBsYXN0X2ZiX3ZjOyBqKyspIHsKIAkJCWlmIChj b24yZmJfbWFwW2pdID09IGkpIHsKIAkJCQltYXBwZWQgPSAxOwotCQkJCWJyZWFrOworCQkJCWNv bjJmYl9tYXBbal0gPSAtMTsKIAkJCX0KIAkJfQogCkBAIC0zNzE4LDggKzM2ODksNiBAQCBzdGF0 aWMgdm9pZCBmYmNvbl9leGl0KHZvaWQpCiAJCQkJaW5mby0+cXVldWUuZnVuYyA9IE5VTEw7CiAJ CX0KIAl9Ci0KLQlmYmNvbl9oYXNfZXhpdGVkID0gMTsKIH0KIAogdm9pZCBfX2luaXQgZmJfY29u c29sZV9pbml0KHZvaWQpCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeA==