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=-5.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable 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 1AECBC433E0 for ; Fri, 19 Jun 2020 08:22:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E8A6120885 for ; Fri, 19 Jun 2020 08:22:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731380AbgFSIWP (ORCPT ); Fri, 19 Jun 2020 04:22:15 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:39962 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731369AbgFSIV1 (ORCPT ); Fri, 19 Jun 2020 04:21:27 -0400 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 2AE8129E78B79E999E1F; Fri, 19 Jun 2020 16:21:23 +0800 (CST) Received: from [127.0.0.1] (10.166.213.90) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.487.0; Fri, 19 Jun 2020 16:21:16 +0800 Subject: Re: [PATCH v8 0/5] support reserving crashkernel above 4G on arm64 kdump To: John Donnelly , Nicolas Saenz Julienne , Bhupesh Sharma References: <20200521093805.64398-1-chenzhou10@huawei.com> <303695cc-d3ea-9f51-1489-07d27d4253d4@oracle.com> <6EA47B07-5119-49DF-9980-12A2066F22CA@oracle.com> <8463464e-5461-f328-621c-bacc6a3b88dd@huawei.com> <8E0D45DC-12BF-437D-A342-03E974D9C6D4@oracle.com> <751bbe2512628ff38002db33ce02af051d080cd2.camel@suse.de> <8ca6c3e9-b8ab-77c3-a1d3-beb513c22f1b@oracle.com> CC: Simon Horman , Devicetree List , Arnd Bergmann , Baoquan He , Linux Doc Mailing List , "Catalin Marinas" , , kexec mailing list , Linux Kernel Mailing List , Will Deacon , Rob Herring , James Morse , Prabhakar Kushwaha , Thomas Gleixner , "Prabhakar Kushwaha" , RuiRui Yang , "Ingo Molnar" , linux-arm-kernel From: chenzhou Message-ID: <03929ef5-7044-5610-c207-e497d3994f49@huawei.com> Date: Fri, 19 Jun 2020 16:21:15 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: <8ca6c3e9-b8ab-77c3-a1d3-beb513c22f1b@oracle.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.166.213.90] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020/6/19 10:32, John Donnelly wrote: > > On 6/4/20 12:01 PM, Nicolas Saenz Julienne wrote: >> On Thu, 2020-06-04 at 01:17 +0530, Bhupesh Sharma wrote: >>> Hi All, >>> >>> On Wed, Jun 3, 2020 at 9:03 PM John Donnelly >>> wrote: >>>> >>>>> On Jun 3, 2020, at 8:20 AM, chenzhou wrote: >>>>> >>>>> Hi, >>>>> >>>>> >>>>> On 2020/6/3 19:47, Prabhakar Kushwaha wrote: >>>>>> Hi Chen, >>>>>> >>>>>> On Tue, Jun 2, 2020 at 8:12 PM John Donnelly >>>>>> wrote: >>>>>>> >>>>>>>> On Jun 2, 2020, at 12:38 AM, Prabhakar Kushwaha < >>>>>>>> prabhakar.pkin@gmail.com> wrote: >>>>>>>> >>>>>>>> On Tue, Jun 2, 2020 at 3:29 AM John Donnelly < >>>>>>>> john.p.donnelly@oracle.com> wrote: >>>>>>>>> Hi . See below ! >>>>>>>>> >>>>>>>>>> On Jun 1, 2020, at 4:02 PM, Bhupesh Sharma >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Hi John, >>>>>>>>>> >>>>>>>>>> On Tue, Jun 2, 2020 at 1:01 AM John Donnelly < >>>>>>>>>> John.P.donnelly@oracle.com> wrote: >>>>>>>>>>> Hi, >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On 6/1/20 7:02 AM, Prabhakar Kushwaha wrote: >>>>>>>>>>>> Hi Chen, >>>>>>>>>>>> >>>>>>>>>>>> On Thu, May 21, 2020 at 3:05 PM Chen Zhou < >>>>>>>>>>>> chenzhou10@huawei.com> wrote: >>>>>>>>>>>>> This patch series enable reserving crashkernel above 4G in >>>>>>>>>>>>> arm64. >>>>>>>>>>>>> >>>>>>>>>>>>> There are following issues in arm64 kdump: >>>>>>>>>>>>> 1. We use crashkernel=X to reserve crashkernel below 4G, >>>>>>>>>>>>> which will fail >>>>>>>>>>>>> when there is no enough low memory. >>>>>>>>>>>>> 2. Currently, crashkernel=Y@X can be used to reserve >>>>>>>>>>>>> crashkernel above 4G, >>>>>>>>>>>>> in this case, if swiotlb or DMA buffers are required, >>>>>>>>>>>>> crash dump kernel >>>>>>>>>>>>> will boot failure because there is no low memory available >>>>>>>>>>>>> for allocation. >>>>>>>>>>>>> >>>>>>>>>>>> We are getting "warn_alloc" [1] warning during boot of kdump >>>>>>>>>>>> kernel >>>>>>>>>>>> with bootargs as [2] of primary kernel. >>>>>>>>>>>> This error observed on ThunderX2 ARM64 platform. >>>>>>>>>>>> >>>>>>>>>>>> It is observed with latest upstream tag (v5.7-rc3) with this >>>>>>>>>>>> patch set >>>>>>>>>>>> and >>>>>>>>>>>> >> https://urldefense.com/v3/__https://lists.infradead.org/pipermail/kexec/2020-May/025128.html__;!!GqivPVa7Brio!LnTSARkCt0V0FozR0KmqooaH5ADtdXvs3mPdP3KRVqALmvSK2VmCkIPIhsaxbiIAAlzu$ >>>>>>>>>>>> Also **without** this patch-set >>>>>>>>>>>> " >>>>>>>>>>>> >> https://urldefense.com/v3/__https://www.spinics.net/lists/arm-kernel/msg806882.html__;!!GqivPVa7Brio!LnTSARkCt0V0FozR0KmqooaH5ADtdXvs3mPdP3KRVqALmvSK2VmCkIPIhsaxbjC6ujMA$ >>>>>>>>>>>> " >>>>>>>>>>>> >>>>>>>>>>>> This issue comes whenever crashkernel memory is reserved >>>>>>>>>>>> after 0xc000_0000. >>>>>>>>>>>> More details discussed earlier in >>>>>>>>>>>> >> https://urldefense.com/v3/__https://www.spinics.net/lists/arm-kernel/msg806882.html__;!!GqivPVa7Brio!LnTSARkCt0V0FozR0KmqooaH5ADtdXvs3mPdP3KRVqALmvSK2VmCkIPIhsaxbjC6ujMA$ >> without >>>>>>>>>>>> any >>>>>>>>>>>> solution >>>>>>>>>>>> >>>>>>>>>>>> This patch-set is expected to solve similar kind of issue. >>>>>>>>>>>> i.e. low memory is only targeted for DMA, swiotlb; So above >>>>>>>>>>>> mentioned >>>>>>>>>>>> observation should be considered/fixed. . >>>>>>>>>>>> >>>>>>>>>>>> --pk >>>>>>>>>>>> >>>>>>>>>>>> [1] >>>>>>>>>>>> [ 30.366695] DMI: Cavium Inc. Saber/Saber, BIOS >>>>>>>>>>>> TX2-FW-Release-3.1-build_01-2803-g74253a541a mm/dd/yyyy >>>>>>>>>>>> [ 30.367696] NET: Registered protocol family 16 >>>>>>>>>>>> [ 30.369973] swapper/0: page allocation failure: order:6, >>>>>>>>>>>> mode:0x1(GFP_DMA), nodemask=(null),cpuset=/,mems_allowed=0 >>>>>>>>>>>> [ 30.369980] CPU: 0 PID: 1 Comm: swapper/0 Not tainted >>>>>>>>>>>> 5.7.0-rc3+ #121 >>>>>>>>>>>> [ 30.369981] Hardware name: Cavium Inc. Saber/Saber, BIOS >>>>>>>>>>>> TX2-FW-Release-3.1-build_01-2803-g74253a541a mm/dd/yyyy >>>>>>>>>>>> [ 30.369984] Call trace: >>>>>>>>>>>> [ 30.369989] dump_backtrace+0x0/0x1f8 >>>>>>>>>>>> [ 30.369991] show_stack+0x20/0x30 >>>>>>>>>>>> [ 30.369997] dump_stack+0xc0/0x10c >>>>>>>>>>>> [ 30.370001] warn_alloc+0x10c/0x178 >>>>>>>>>>>> [ 30.370004] __alloc_pages_slowpath.constprop.111+0xb10/0 >>>>>>>>>>>> xb50 >>>>>>>>>>>> [ 30.370006] __alloc_pages_nodemask+0x2b4/0x300 >>>>>>>>>>>> [ 30.370008] alloc_page_interleave+0x24/0x98 >>>>>>>>>>>> [ 30.370011] alloc_pages_current+0xe4/0x108 >>>>>>>>>>>> [ 30.370017] dma_atomic_pool_init+0x44/0x1a4 >>>>>>>>>>>> [ 30.370020] do_one_initcall+0x54/0x228 >>>>>>>>>>>> [ 30.370027] kernel_init_freeable+0x228/0x2cc >>>>>>>>>>>> [ 30.370031] kernel_init+0x1c/0x110 >>>>>>>>>>>> [ 30.370034] ret_from_fork+0x10/0x18 >>>>>>>>>>>> [ 30.370036] Mem-Info: >>>>>>>>>>>> [ 30.370064] active_anon:0 inactive_anon:0 isolated_anon:0 >>>>>>>>>>>> [ 30.370064] active_file:0 inactive_file:0 >>>>>>>>>>>> isolated_file:0 >>>>>>>>>>>> [ 30.370064] unevictable:0 dirty:0 writeback:0 unstable:0 >>>>>>>>>>>> [ 30.370064] slab_reclaimable:34 slab_unreclaimable:4438 >>>>>>>>>>>> [ 30.370064] mapped:0 shmem:0 pagetables:14 bounce:0 >>>>>>>>>>>> [ 30.370064] free:1537719 free_pcp:219 free_cma:0 >>>>>>>>>>>> [ 30.370070] Node 0 active_anon:0kB inactive_anon:0kB >>>>>>>>>>>> active_file:0kB inactive_file:0kB unevictable:0kB >>>>>>>>>>>> isolated(anon):0kB >>>>>>>>>>>> isolated(file):0kB mapped:0kB dirty:0kB writeback:0kB >>>>>>>>>>>> shmem:0kB >>>>>>>>>>>> shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB >>>>>>>>>>>> writeback_tmp:0kB >>>>>>>>>>>> unstable:0kB all_unreclaimable? no >>>>>>>>>>>> [ 30.370073] Node 1 active_anon:0kB inactive_anon:0kB >>>>>>>>>>>> active_file:0kB inactive_file:0kB unevictable:0kB >>>>>>>>>>>> isolated(anon):0kB >>>>>>>>>>>> isolated(file):0kB mapped:0kB dirty:0kB writeback:0kB >>>>>>>>>>>> shmem:0kB >>>>>>>>>>>> shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB >>>>>>>>>>>> writeback_tmp:0kB >>>>>>>>>>>> unstable:0kB all_unreclaimable? no >>>>>>>>>>>> [ 30.370079] Node 0 DMA free:0kB min:0kB low:0kB high:0kB >>>>>>>>>>>> reserved_highatomic:0KB active_anon:0kB inactive_anon:0kB >>>>>>>>>>>> active_file:0kB inactive_file:0kB unevictable:0kB >>>>>>>>>>>> writepending:0kB >>>>>>>>>>>> present:128kB managed:0kB mlocked:0kB kernel_stack:0kB >>>>>>>>>>>> pagetables:0kB >>>>>>>>>>>> bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB >>>>>>>>>>>> [ 30.370084] lowmem_reserve[]: 0 250 6063 6063 >>>>>>>>>>>> [ 30.370090] Node 0 DMA32 free:256000kB min:408kB >>>>>>>>>>>> low:664kB >>>>>>>>>>>> high:920kB reserved_highatomic:0KB active_anon:0kB >>>>>>>>>>>> inactive_anon:0kB >>>>>>>>>>>> active_file:0kB inactive_file:0kB unevictable:0kB >>>>>>>>>>>> writepending:0kB >>>>>>>>>>>> present:269700kB managed:256000kB mlocked:0kB >>>>>>>>>>>> kernel_stack:0kB >>>>>>>>>>>> pagetables:0kB bounce:0kB free_pcp:0kB local_pcp:0kB >>>>>>>>>>>> free_cma:0kB >>>>>>>>>>>> [ 30.370094] lowmem_reserve[]: 0 0 5813 5813 >>>>>>>>>>>> [ 30.370100] Node 0 Normal free:5894876kB min:9552kB >>>>>>>>>>>> low:15504kB >>>>>>>>>>>> high:21456kB reserved_highatomic:0KB active_anon:0kB >>>>>>>>>>>> inactive_anon:0kB >>>>>>>>>>>> active_file:0kB inactive_file:0kB unevictable:0kB >>>>>>>>>>>> writepending:0kB >>>>>>>>>>>> present:8388608kB managed:5953112kB mlocked:0kB >>>>>>>>>>>> kernel_stack:21672kB >>>>>>>>>>>> pagetables:56kB bounce:0kB free_pcp:876kB local_pcp:176kB >>>>>>>>>>>> free_cma:0kB >>>>>>>>>>>> [ 30.370104] lowmem_reserve[]: 0 0 0 0 >>>>>>>>>>>> [ 30.370107] Node 0 DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB >>>>>>>>>>>> 0*128kB >>>>>>>>>>>> 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 0kB >>>>>>>>>>>> [ 30.370113] Node 0 DMA32: 0*4kB 0*8kB 0*16kB 0*32kB >>>>>>>>>>>> 0*64kB 0*128kB >>>>>>>>>>>> 0*256kB 0*512kB 0*1024kB 1*2048kB (M) 62*4096kB (M) = >>>>>>>>>>>> 256000kB >>>>>>>>>>>> [ 30.370119] Node 0 Normal: 2*4kB (M) 3*8kB (ME) 2*16kB >>>>>>>>>>>> (UE) 3*32kB >>>>>>>>>>>> (UM) 1*64kB (U) 2*128kB (M) 2*256kB (ME) 3*512kB (ME) >>>>>>>>>>>> 3*1024kB (ME) >>>>>>>>>>>> 3*2048kB (UME) 1436*4096kB (M) = 5893600kB >>>>>>>>>>>> [ 30.370129] Node 0 hugepages_total=0 hugepages_free=0 >>>>>>>>>>>> hugepages_surp=0 hugepages_size=1048576kB >>>>>>>>>>>> [ 30.370130] 0 total pagecache pages >>>>>>>>>>>> [ 30.370132] 0 pages in swap cache >>>>>>>>>>>> [ 30.370134] Swap cache stats: add 0, delete 0, find 0/0 >>>>>>>>>>>> [ 30.370135] Free swap = 0kB >>>>>>>>>>>> [ 30.370136] Total swap = 0kB >>>>>>>>>>>> [ 30.370137] 2164609 pages RAM >>>>>>>>>>>> [ 30.370139] 0 pages HighMem/MovableOnly >>>>>>>>>>>> [ 30.370140] 612331 pages reserved >>>>>>>>>>>> [ 30.370141] 0 pages hwpoisoned >>>>>>>>>>>> [ 30.370143] DMA: failed to allocate 256 KiB pool for >>>>>>>>>>>> atomic >>>>>>>>>>>> coherent allocation >>>>>>>>>>> During my testing I saw the same error and Chen's solution >>>>>>>>>>> corrected it . >>>>>>>>>> Which combination you are using on your side? I am using >>>>>>>>>> Prabhakar's >>>>>>>>>> suggested environment and can reproduce the issue >>>>>>>>>> with or without Chen's crashkernel support above 4G patchset. >>>>>>>>>> >>>>>>>>>> I am also using a ThunderX2 platform with latest makedumpfile >>>>>>>>>> code and >>>>>>>>>> kexec-tools (with the suggested patch >>>>>>>>>> < >>>>>>>>>> >> https://urldefense.com/v3/__https://lists.infradead.org/pipermail/kexec/2020-May/025128.html__;!!GqivPVa7Brio!J6lUig58-Gw6TKZnEEYzEeSU36T-1SqlB1kImU00xtX_lss5Tx-JbUmLE9TJC3foXBLg$ >>>>>>>>>>> ). >>>>>>>>>> Thanks, >>>>>>>>>> Bhupesh >>>>>>>>> I did this activity 5 months ago and I have moved on to other >>>>>>>>> activities. My DMA failures were related to PCI devices that could >>>>>>>>> not be enumerated because low-DMA space was not available when >>>>>>>>> crashkernel was moved above 4G; I don’t recall the exact platform. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> For this failure , >>>>>>>>> >>>>>>>>>>>> DMA: failed to allocate 256 KiB pool for atomic >>>>>>>>>>>> coherent allocation >>>>>>>>> Is due to : >>>>>>>>> >>>>>>>>> >>>>>>>>> 3618082c >>>>>>>>> ("arm64 use both ZONE_DMA and ZONE_DMA32") >>>>>>>>> >>>>>>>>> With the introduction of ZONE_DMA to support the Raspberry DMA >>>>>>>>> region below 1G, the crashkernel is placed in the upper 4G >>>>>>>>> ZONE_DMA_32 region. Since the crashkernel does not have access >>>>>>>>> to the ZONE_DMA region, it prints out call trace during bootup. >>>>>>>>> >>>>>>>>> It is due to having this CONFIG item ON : >>>>>>>>> >>>>>>>>> >>>>>>>>> CONFIG_ZONE_DMA=y >>>>>>>>> >>>>>>>>> Turning off ZONE_DMA fixes a issue and Raspberry PI 4 will >>>>>>>>> use the device tree to specify memory below 1G. >>>>>>>>> >>>>>>>>> >>>>>>>> Disabling ZONE_DMA is temporary solution. We may need proper >>>>>>>> solution >>>>>>> Perhaps the Raspberry platform configuration dependencies need >>>>>>> separated from “server class” Arm equipment ? Or auto-configured on >>>>>>> boot ? Consult an expert ;-) >>>>>>> >>>>>>> >>>>>>> >>>>>>>>> I would like to see Chen’s feature added , perhaps as >>>>>>>>> EXPERIMENTAL, so we can get some configuration testing done on >>>>>>>>> it. It corrects having a DMA zone in low memory while crash- >>>>>>>>> kernel is above 4GB. This has been going on for a year now. >>>>>>>> I will also like this patch to be added in Linux as early as >>>>>>>> possible. >>>>>>>> >>>>>>>> Issue mentioned by me happens with or without this patch. >>>>>>>> >>>>>>>> This patch-set can consider fixing because it uses low memory for >>>>>>>> DMA >>>>>>>> & swiotlb only. >>>>>>>> We can consider restricting crashkernel within the required range >>>>>>>> like below >>>>>>>> >>>>>>>> diff --git a/kernel/crash_core.c b/kernel/crash_core.c >>>>>>>> index 7f9e5a6dc48c..bd67b90d35bd 100644 >>>>>>>> --- a/kernel/crash_core.c >>>>>>>> +++ b/kernel/crash_core.c >>>>>>>> @@ -354,7 +354,7 @@ int __init reserve_crashkernel_low(void) >>>>>>>> return 0; >>>>>>>> } >>>>>>>> >>>>>>>> - low_base = memblock_find_in_range(0, 1ULL << 32, low_size, >>>>>>>> CRASH_ALIGN); >>>>>>>> + low_base = memblock_find_in_range(0,0xc0000000, low_size, >>>>>>>> CRASH_ALIGN); >>>>>>>> if (!low_base) { >>>>>>>> pr_err("Cannot reserve %ldMB crashkernel low memory, >>>>>>>> please try smaller size.\n", >>>>>>>> (unsigned long)(low_size >> 20)); >>>>>>>> >>>>>>>> >>>>>>> I suspect 0xc0000000 would need to be a CONFIG item and not >>>>>>> hard-coded. >>>>>>> >>>>>> if you consider this as valid change, can you please incorporate as >>>>>> part of your patch-set. >>>>> After commit 1a8e1cef7 ("arm64: use both ZONE_DMA and ZONE_DMA32"),the 0- >>>>> 4G memory is splited >>>>> to DMA [mem 0x0000000000000000-0x000000003fffffff] and DMA32 [mem >>>>> 0x0000000040000000-0x00000000ffffffff] on arm64. >>>>> >>>>> From the above discussion, on your platform, the low crashkernel fall in >>>>> DMA32 region, but your environment needs to access DMA >>>>> region, so there is the call trace. >>>>> >>>>> I have a question, why do you choose 0xc0000000 here? >>>>> >>>>> Besides, this is common code, we also need to consider about x86. >>>>> >>>> + nsaenzjulienne@suse.de >> Thanks for adding me to the conversation, and sorry for the headaches. >> >>>> Exactly . This is why it needs to be a CONFIG option for Raspberry >>>> .., or device tree option. >>>> >>>> >>>> We could revert 1a8e1cef7 since it broke Arm kdump too. >>> Well, unfortunately the patch for commit 1a8e1cef7603 ("arm64: use >>> both ZONE_DMA and ZONE_DMA32") was not Cc'ed to the kexec mailing >>> list, thus we couldn't get many eyes on it for a thorough review from >>> kexec/kdump p-o-v. >>> >>> Also we historically never had distinction in common arch code on the >>> basis of the intended end use-case: embedded, server or automotive, so >>> I am not sure introducing a Raspberry specific CONFIG option would be >>> a good idea. >> +1 >> >> From the distros perspective it's very important to keep a single kernel image. >> >>> So, rather than reverting the patch, we can look at addressing the >>> same properly this time - especially from a kdump p-o-v. >>> This issue has been reported by some Red Hat arm64 partners with >>> upstream kernel also and as we have noticed in the past as well, >>> hardcoding the placement of the crashkernel base address (unless the >>> base address is specified by a crashkernel=X@Y like bootargs) is also >>> not a portable suggestion. >>> >>> I am working on a possible fix and will have more updates on the same >>> in a day-or-two. >> Please keep me in the loop, we've also had issues pointing to this reported by >> SUSE partners. I can do some testing both on the RPi4 and on big servers that >> need huge crashkernel sizes. >> >> Regards, >> Nicolas >> > > Hi > > Has there been any progress on this ? It appears we are stalled because Nicolas's and Chen's changes are not compatible . One is needed for RPi4 and the other for server class equipment. > > > Thanks, > > John > > Hi all, Thanks for John's reminder. commit 1a8e1cef7 ("arm64: use both ZONE_DMA and ZONE_DMA32") broken the arm64 kdump, there is a simple solution similar to pk's to fix this, see below: In crash dump kernel, if the peripherals need to use ZONE_DMA like the the Raspberry Pi 4, based on my solution, we adjusted the memory range in memblock_find_in_range. diff --git a/kernel/crash_core.c b/kernel/crash_core.c index a7580d291c37..eb16c6d54b73 100644 --- a/kernel/crash_core.c +++ b/kernel/crash_core.c @@ -320,6 +320,7 @@ int __init reserve_crashkernel_low(void) unsigned long long base, low_base = 0, low_size = 0; unsigned long total_low_mem; int ret; + phys_addr_t crash_max = 1ULL << 32; total_low_mem = memblock_mem_size(1UL << (32 - PAGE_SHIFT)); @@ -352,7 +353,12 @@ int __init reserve_crashkernel_low(void) return 0; } - low_base = memblock_find_in_range(0, 1ULL << 32, low_size, CRASH_ALIGN); +#ifdef CONFIG_ARM64 + if (IS_ENABLED(CONFIG_ZONE_DMA)) { + crash_max = arm64_dma_phys_limit; + } +#endif + low_base = memblock_find_in_range(0, crash_max, low_size, CRASH_ALIGN); if (!low_base) { pr_err("Cannot reserve %ldMB crashkernel low memory, please try smaller size.\n", (unsigned long)(low_size >> 20)); Thanks, Chen Zhou > > . > 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=-5.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B4D46C433E0 for ; Fri, 19 Jun 2020 08:24:58 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7DB2C20885 for ; Fri, 19 Jun 2020 08:24:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="P3oTEQ1w" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7DB2C20885 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=FzvLyshmFYf96Gze0Anv7N5OlvwFWnFIDyxRH/VgQc8=; b=P3oTEQ1wd9ZWNI hWl1Z9jSQswS45S3Ld75qGpqTboEjMTQwFwSDICIj7N/B74NidovQSyICpQVpW7mYmCjH8wn+PcKX TjrTpQAyKIj08AtJrh+L0HHi8DvejVn8MdcipkKQUhU5h58v+Iamiz0ou3+0jD3imhTVRT2v3rL1R WHQCvro6aRnEyLdajCuZL16w6+bFDNC4efVcsCr39uc+Z3eUJ6dZsns2vciWvaO8sSgGSSX5GCjQ9 ChVQubUTpn1xbRYcvziyqYJregfYtBGIPzb6rjt678xaXRoKWhH8kQwDHOhdL2oHgB+jyz0J+83m5 2WRNsBhC/CWWj7mEDwyQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jmCKX-0005z1-84; Fri, 19 Jun 2020 08:24:57 +0000 Received: from szxga06-in.huawei.com ([45.249.212.32] helo=huawei.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jmCHH-00037F-6H; Fri, 19 Jun 2020 08:21:40 +0000 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 2AE8129E78B79E999E1F; Fri, 19 Jun 2020 16:21:23 +0800 (CST) Received: from [127.0.0.1] (10.166.213.90) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.487.0; Fri, 19 Jun 2020 16:21:16 +0800 Subject: Re: [PATCH v8 0/5] support reserving crashkernel above 4G on arm64 kdump To: John Donnelly , Nicolas Saenz Julienne , Bhupesh Sharma References: <20200521093805.64398-1-chenzhou10@huawei.com> <303695cc-d3ea-9f51-1489-07d27d4253d4@oracle.com> <6EA47B07-5119-49DF-9980-12A2066F22CA@oracle.com> <8463464e-5461-f328-621c-bacc6a3b88dd@huawei.com> <8E0D45DC-12BF-437D-A342-03E974D9C6D4@oracle.com> <751bbe2512628ff38002db33ce02af051d080cd2.camel@suse.de> <8ca6c3e9-b8ab-77c3-a1d3-beb513c22f1b@oracle.com> From: chenzhou Message-ID: <03929ef5-7044-5610-c207-e497d3994f49@huawei.com> Date: Fri, 19 Jun 2020 16:21:15 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: <8ca6c3e9-b8ab-77c3-a1d3-beb513c22f1b@oracle.com> X-Originating-IP: [10.166.213.90] X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200619_012135_624229_69D1A461 X-CRM114-Status: GOOD ( 20.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Devicetree List , Arnd Bergmann , Baoquan He , Linux Doc Mailing List , Catalin Marinas , RuiRui Yang , Prabhakar Kushwaha , kexec mailing list , Linux Kernel Mailing List , Rob Herring , Simon Horman , James Morse , guohanjun@huawei.com, Thomas Gleixner , Prabhakar Kushwaha , Will Deacon , Ingo Molnar , linux-arm-kernel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDIwMjAvNi8xOSAxMDozMiwgSm9obiBEb25uZWxseSB3cm90ZToKPgo+IE9uIDYvNC8yMCAx MjowMSBQTSwgTmljb2xhcyBTYWVueiBKdWxpZW5uZSB3cm90ZToKPj4gT24gVGh1LCAyMDIwLTA2 LTA0IGF0IDAxOjE3ICswNTMwLCBCaHVwZXNoIFNoYXJtYSB3cm90ZToKPj4+IEhpIEFsbCwKPj4+ Cj4+PiBPbiBXZWQsIEp1biAzLCAyMDIwIGF0IDk6MDMgUE0gSm9obiBEb25uZWxseSA8am9obi5w LmRvbm5lbGx5QG9yYWNsZS5jb20+Cj4+PiB3cm90ZToKPj4+Pgo+Pj4+PiBPbiBKdW4gMywgMjAy MCwgYXQgODoyMCBBTSwgY2hlbnpob3UgPGNoZW56aG91MTBAaHVhd2VpLmNvbT4gd3JvdGU6Cj4+ Pj4+Cj4+Pj4+IEhpLAo+Pj4+Pgo+Pj4+Pgo+Pj4+PiBPbiAyMDIwLzYvMyAxOTo0NywgUHJhYmhh a2FyIEt1c2h3YWhhIHdyb3RlOgo+Pj4+Pj4gSGkgQ2hlbiwKPj4+Pj4+Cj4+Pj4+PiBPbiBUdWUs IEp1biAyLCAyMDIwIGF0IDg6MTIgUE0gSm9obiBEb25uZWxseSA8am9obi5wLmRvbm5lbGx5QG9y YWNsZS5jb20KPj4+Pj4+PiB3cm90ZToKPj4+Pj4+Pgo+Pj4+Pj4+PiBPbiBKdW4gMiwgMjAyMCwg YXQgMTI6MzggQU0sIFByYWJoYWthciBLdXNod2FoYSA8Cj4+Pj4+Pj4+IHByYWJoYWthci5wa2lu QGdtYWlsLmNvbT4gd3JvdGU6Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IE9uIFR1ZSwgSnVuIDIsIDIwMjAg YXQgMzoyOSBBTSBKb2huIERvbm5lbGx5IDwKPj4+Pj4+Pj4gam9obi5wLmRvbm5lbGx5QG9yYWNs ZS5jb20+IHdyb3RlOgo+Pj4+Pj4+Pj4gSGkgLiAgU2VlIGJlbG93ICEKPj4+Pj4+Pj4+Cj4+Pj4+ Pj4+Pj4gT24gSnVuIDEsIDIwMjAsIGF0IDQ6MDIgUE0sIEJodXBlc2ggU2hhcm1hIDxiaHNoYXJt YUByZWRoYXQuY29tPgo+Pj4+Pj4+Pj4+IHdyb3RlOgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gSGkg Sm9obiwKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IE9uIFR1ZSwgSnVuIDIsIDIwMjAgYXQgMTowMSBB TSBKb2huIERvbm5lbGx5IDwKPj4+Pj4+Pj4+PiBKb2huLlAuZG9ubmVsbHlAb3JhY2xlLmNvbT4g d3JvdGU6Cj4+Pj4+Pj4+Pj4+IEhpLAo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+ PiBPbiA2LzEvMjAgNzowMiBBTSwgUHJhYmhha2FyIEt1c2h3YWhhIHdyb3RlOgo+Pj4+Pj4+Pj4+ Pj4gSGkgQ2hlbiwKPj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+PiBPbiBUaHUsIE1heSAyMSwgMjAy MCBhdCAzOjA1IFBNIENoZW4gWmhvdSA8Cj4+Pj4+Pj4+Pj4+PiBjaGVuemhvdTEwQGh1YXdlaS5j b20+IHdyb3RlOgo+Pj4+Pj4+Pj4+Pj4+IFRoaXMgcGF0Y2ggc2VyaWVzIGVuYWJsZSByZXNlcnZp bmcgY3Jhc2hrZXJuZWwgYWJvdmUgNEcgaW4KPj4+Pj4+Pj4+Pj4+PiBhcm02NC4KPj4+Pj4+Pj4+ Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+IFRoZXJlIGFyZSBmb2xsb3dpbmcgaXNzdWVzIGluIGFybTY0IGtk dW1wOgo+Pj4+Pj4+Pj4+Pj4+IDEuIFdlIHVzZSBjcmFzaGtlcm5lbD1YIHRvIHJlc2VydmUgY3Jh c2hrZXJuZWwgYmVsb3cgNEcsCj4+Pj4+Pj4+Pj4+Pj4gd2hpY2ggd2lsbCBmYWlsCj4+Pj4+Pj4+ Pj4+Pj4gd2hlbiB0aGVyZSBpcyBubyBlbm91Z2ggbG93IG1lbW9yeS4KPj4+Pj4+Pj4+Pj4+PiAy LiBDdXJyZW50bHksIGNyYXNoa2VybmVsPVlAWCBjYW4gYmUgdXNlZCB0byByZXNlcnZlCj4+Pj4+ Pj4+Pj4+Pj4gY3Jhc2hrZXJuZWwgYWJvdmUgNEcsCj4+Pj4+Pj4+Pj4+Pj4gaW4gdGhpcyBjYXNl LCBpZiBzd2lvdGxiIG9yIERNQSBidWZmZXJzIGFyZSByZXF1aXJlZCwKPj4+Pj4+Pj4+Pj4+PiBj cmFzaCBkdW1wIGtlcm5lbAo+Pj4+Pj4+Pj4+Pj4+IHdpbGwgYm9vdCBmYWlsdXJlIGJlY2F1c2Ug dGhlcmUgaXMgbm8gbG93IG1lbW9yeSBhdmFpbGFibGUKPj4+Pj4+Pj4+Pj4+PiBmb3IgYWxsb2Nh dGlvbi4KPj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gV2UgYXJlIGdldHRpbmcgIndhcm5fYWxs b2MiIFsxXSB3YXJuaW5nIGR1cmluZyBib290IG9mIGtkdW1wCj4+Pj4+Pj4+Pj4+PiBrZXJuZWwK Pj4+Pj4+Pj4+Pj4+IHdpdGggYm9vdGFyZ3MgYXMgWzJdIG9mIHByaW1hcnkga2VybmVsLgo+Pj4+ Pj4+Pj4+Pj4gVGhpcyBlcnJvciBvYnNlcnZlZCBvbiBUaHVuZGVyWDIgIEFSTTY0IHBsYXRmb3Jt Lgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IEl0IGlzIG9ic2VydmVkIHdpdGggbGF0ZXN0IHVw c3RyZWFtIHRhZyAodjUuNy1yYzMpIHdpdGggdGhpcwo+Pj4+Pj4+Pj4+Pj4gcGF0Y2ggc2V0Cj4+ Pj4+Pj4+Pj4+PiBhbmQKPj4+Pj4+Pj4+Pj4+Cj4+IGh0dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMv X19odHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvcGlwZXJtYWlsL2tleGVjLzIwMjAtTWF5LzAy NTEyOC5odG1sX187ISFHcWl2UFZhN0JyaW8hTG5UU0FSa0N0MFYwRm96UjBLbXFvb2FINUFEdGRY dnMzbVBkUDNLUlZxQUxtdlNLMlZtQ2tJUEloc2F4YmlJQUFsenUkCj4+Pj4+Pj4+Pj4+PiBBbHNv ICoqd2l0aG91dCoqIHRoaXMgcGF0Y2gtc2V0Cj4+Pj4+Pj4+Pj4+PiAiCj4+Pj4+Pj4+Pj4+Pgo+ PiBodHRwczovL3VybGRlZmVuc2UuY29tL3YzL19faHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlz dHMvYXJtLWtlcm5lbC9tc2c4MDY4ODIuaHRtbF9fOyEhR3FpdlBWYTdCcmlvIUxuVFNBUmtDdDBW MEZvelIwS21xb29hSDVBRHRkWHZzM21QZFAzS1JWcUFMbXZTSzJWbUNrSVBJaHNheGJqQzZ1ak1B JAo+Pj4+Pj4+Pj4+Pj4gIgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IFRoaXMgaXNzdWUgY29t ZXMgd2hlbmV2ZXIgY3Jhc2hrZXJuZWwgbWVtb3J5IGlzIHJlc2VydmVkCj4+Pj4+Pj4+Pj4+PiBh ZnRlciAweGMwMDBfMDAwMC4KPj4+Pj4+Pj4+Pj4+IE1vcmUgZGV0YWlscyBkaXNjdXNzZWQgZWFy bGllciBpbgo+Pj4+Pj4+Pj4+Pj4KPj4gaHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBz Oi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2FybS1rZXJuZWwvbXNnODA2ODgyLmh0bWxfXzshIUdx aXZQVmE3QnJpbyFMblRTQVJrQ3QwVjBGb3pSMEttcW9vYUg1QUR0ZFh2czNtUGRQM0tSVnFBTG12 U0syVm1Da0lQSWhzYXhiakM2dWpNQSQKPj4gICAgd2l0aG91dAo+Pj4+Pj4+Pj4+Pj4gYW55Cj4+ Pj4+Pj4+Pj4+PiBzb2x1dGlvbgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IFRoaXMgcGF0Y2gt c2V0IGlzIGV4cGVjdGVkIHRvIHNvbHZlIHNpbWlsYXIga2luZCBvZiBpc3N1ZS4KPj4+Pj4+Pj4+ Pj4+IGkuZS4gbG93IG1lbW9yeSBpcyBvbmx5IHRhcmdldGVkIGZvciBETUEsIHN3aW90bGI7IFNv IGFib3ZlCj4+Pj4+Pj4+Pj4+PiBtZW50aW9uZWQKPj4+Pj4+Pj4+Pj4+IG9ic2VydmF0aW9uIHNo b3VsZCBiZSBjb25zaWRlcmVkL2ZpeGVkLiAuCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gLS1w awo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IFsxXQo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2NjY5 NV0gRE1JOiBDYXZpdW0gSW5jLiBTYWJlci9TYWJlciwgQklPUwo+Pj4+Pj4+Pj4+Pj4gVFgyLUZX LVJlbGVhc2UtMy4xLWJ1aWxkXzAxLTI4MDMtZzc0MjUzYTU0MWEgbW0vZGQveXl5eQo+Pj4+Pj4+ Pj4+Pj4gWyAgIDMwLjM2NzY5Nl0gTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxNgo+ Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2OTk3M10gc3dhcHBlci8wOiBwYWdlIGFsbG9jYXRpb24gZmFp bHVyZTogb3JkZXI6NiwKPj4+Pj4+Pj4+Pj4+IG1vZGU6MHgxKEdGUF9ETUEpLCBub2RlbWFzaz0o bnVsbCksY3B1c2V0PS8sbWVtc19hbGxvd2VkPTAKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNjk5ODBd IENQVTogMCBQSUQ6IDEgQ29tbTogc3dhcHBlci8wIE5vdCB0YWludGVkCj4+Pj4+Pj4+Pj4+PiA1 LjcuMC1yYzMrICMxMjEKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNjk5ODFdIEhhcmR3YXJlIG5hbWU6 IENhdml1bSBJbmMuIFNhYmVyL1NhYmVyLCBCSU9TCj4+Pj4+Pj4+Pj4+PiBUWDItRlctUmVsZWFz ZS0zLjEtYnVpbGRfMDEtMjgwMy1nNzQyNTNhNTQxYSBtbS9kZC95eXl5Cj4+Pj4+Pj4+Pj4+PiBb ICAgMzAuMzY5OTg0XSBDYWxsIHRyYWNlOgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2OTk4OV0gIGR1 bXBfYmFja3RyYWNlKzB4MC8weDFmOAo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2OTk5MV0gIHNob3df c3RhY2srMHgyMC8weDMwCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzY5OTk3XSAgZHVtcF9zdGFjaysw eGMwLzB4MTBjCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDAxXSAgd2Fybl9hbGxvYysweDEwYy8w eDE3OAo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDAwNF0gIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgu Y29uc3Rwcm9wLjExMSsweGIxMC8wCj4+Pj4+Pj4+Pj4+PiB4YjUwCj4+Pj4+Pj4+Pj4+PiBbICAg MzAuMzcwMDA2XSAgX19hbGxvY19wYWdlc19ub2RlbWFzaysweDJiNC8weDMwMAo+Pj4+Pj4+Pj4+ Pj4gWyAgIDMwLjM3MDAwOF0gIGFsbG9jX3BhZ2VfaW50ZXJsZWF2ZSsweDI0LzB4OTgKPj4+Pj4+ Pj4+Pj4+IFsgICAzMC4zNzAwMTFdICBhbGxvY19wYWdlc19jdXJyZW50KzB4ZTQvMHgxMDgKPj4+ Pj4+Pj4+Pj4+IFsgICAzMC4zNzAwMTddICBkbWFfYXRvbWljX3Bvb2xfaW5pdCsweDQ0LzB4MWE0 Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDIwXSAgZG9fb25lX2luaXRjYWxsKzB4NTQvMHgyMjgK Pj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAwMjddICBrZXJuZWxfaW5pdF9mcmVlYWJsZSsweDIyOC8w eDJjYwo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDAzMV0gIGtlcm5lbF9pbml0KzB4MWMvMHgxMTAK Pj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAwMzRdICByZXRfZnJvbV9mb3JrKzB4MTAvMHgxOAo+Pj4+ Pj4+Pj4+Pj4gWyAgIDMwLjM3MDAzNl0gTWVtLUluZm86Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcw MDY0XSBhY3RpdmVfYW5vbjowIGluYWN0aXZlX2Fub246MCBpc29sYXRlZF9hbm9uOjAKPj4+Pj4+ Pj4+Pj4+IFsgICAzMC4zNzAwNjRdICBhY3RpdmVfZmlsZTowIGluYWN0aXZlX2ZpbGU6MAo+Pj4+ Pj4+Pj4+Pj4gaXNvbGF0ZWRfZmlsZTowCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDY0XSAgdW5l dmljdGFibGU6MCBkaXJ0eTowIHdyaXRlYmFjazowIHVuc3RhYmxlOjAKPj4+Pj4+Pj4+Pj4+IFsg ICAzMC4zNzAwNjRdICBzbGFiX3JlY2xhaW1hYmxlOjM0IHNsYWJfdW5yZWNsYWltYWJsZTo0NDM4 Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDY0XSAgbWFwcGVkOjAgc2htZW06MCBwYWdldGFibGVz OjE0IGJvdW5jZTowCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDY0XSAgZnJlZToxNTM3NzE5IGZy ZWVfcGNwOjIxOSBmcmVlX2NtYTowCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDcwXSBOb2RlIDAg YWN0aXZlX2Fub246MGtCIGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+PiBhY3RpdmVfZmls ZTowa0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+Pj4+Pj4+PiBpc29s YXRlZChhbm9uKTowa0IKPj4+Pj4+Pj4+Pj4+IGlzb2xhdGVkKGZpbGUpOjBrQiBtYXBwZWQ6MGtC IGRpcnR5OjBrQiB3cml0ZWJhY2s6MGtCCj4+Pj4+Pj4+Pj4+PiBzaG1lbTowa0IKPj4+Pj4+Pj4+ Pj4+IHNobWVtX3RocDogMGtCIHNobWVtX3BtZG1hcHBlZDogMGtCIGFub25fdGhwOiAwa0IKPj4+ Pj4+Pj4+Pj4+IHdyaXRlYmFja190bXA6MGtCCj4+Pj4+Pj4+Pj4+PiB1bnN0YWJsZTowa0IgYWxs X3VucmVjbGFpbWFibGU/IG5vCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDczXSBOb2RlIDEgYWN0 aXZlX2Fub246MGtCIGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+PiBhY3RpdmVfZmlsZTow a0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+Pj4+Pj4+PiBpc29sYXRl ZChhbm9uKTowa0IKPj4+Pj4+Pj4+Pj4+IGlzb2xhdGVkKGZpbGUpOjBrQiBtYXBwZWQ6MGtCIGRp cnR5OjBrQiB3cml0ZWJhY2s6MGtCCj4+Pj4+Pj4+Pj4+PiBzaG1lbTowa0IKPj4+Pj4+Pj4+Pj4+ IHNobWVtX3RocDogMGtCIHNobWVtX3BtZG1hcHBlZDogMGtCIGFub25fdGhwOiAwa0IKPj4+Pj4+ Pj4+Pj4+IHdyaXRlYmFja190bXA6MGtCCj4+Pj4+Pj4+Pj4+PiB1bnN0YWJsZTowa0IgYWxsX3Vu cmVjbGFpbWFibGU/IG5vCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDc5XSBOb2RlIDAgRE1BIGZy ZWU6MGtCIG1pbjowa0IgbG93OjBrQiBoaWdoOjBrQgo+Pj4+Pj4+Pj4+Pj4gcmVzZXJ2ZWRfaGln aGF0b21pYzowS0IgYWN0aXZlX2Fub246MGtCIGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+ PiBhY3RpdmVfZmlsZTowa0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+ Pj4+Pj4+PiB3cml0ZXBlbmRpbmc6MGtCCj4+Pj4+Pj4+Pj4+PiBwcmVzZW50OjEyOGtCIG1hbmFn ZWQ6MGtCIG1sb2NrZWQ6MGtCIGtlcm5lbF9zdGFjazowa0IKPj4+Pj4+Pj4+Pj4+IHBhZ2V0YWJs ZXM6MGtCCj4+Pj4+Pj4+Pj4+PiBib3VuY2U6MGtCIGZyZWVfcGNwOjBrQiBsb2NhbF9wY3A6MGtC IGZyZWVfY21hOjBrQgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDA4NF0gbG93bWVtX3Jlc2VydmVb XTogMCAyNTAgNjA2MyA2MDYzCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDkwXSBOb2RlIDAgRE1B MzIgZnJlZToyNTYwMDBrQiBtaW46NDA4a0IKPj4+Pj4+Pj4+Pj4+IGxvdzo2NjRrQgo+Pj4+Pj4+ Pj4+Pj4gaGlnaDo5MjBrQiByZXNlcnZlZF9oaWdoYXRvbWljOjBLQiBhY3RpdmVfYW5vbjowa0IK Pj4+Pj4+Pj4+Pj4+IGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+PiBhY3RpdmVfZmlsZTow a0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+Pj4+Pj4+PiB3cml0ZXBl bmRpbmc6MGtCCj4+Pj4+Pj4+Pj4+PiBwcmVzZW50OjI2OTcwMGtCIG1hbmFnZWQ6MjU2MDAwa0Ig bWxvY2tlZDowa0IKPj4+Pj4+Pj4+Pj4+IGtlcm5lbF9zdGFjazowa0IKPj4+Pj4+Pj4+Pj4+IHBh Z2V0YWJsZXM6MGtCIGJvdW5jZTowa0IgZnJlZV9wY3A6MGtCIGxvY2FsX3BjcDowa0IKPj4+Pj4+ Pj4+Pj4+IGZyZWVfY21hOjBrQgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDA5NF0gbG93bWVtX3Jl c2VydmVbXTogMCAwIDU4MTMgNTgxMwo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDEwMF0gTm9kZSAw IE5vcm1hbCBmcmVlOjU4OTQ4NzZrQiBtaW46OTU1MmtCCj4+Pj4+Pj4+Pj4+PiBsb3c6MTU1MDRr Qgo+Pj4+Pj4+Pj4+Pj4gaGlnaDoyMTQ1NmtCIHJlc2VydmVkX2hpZ2hhdG9taWM6MEtCIGFjdGl2 ZV9hbm9uOjBrQgo+Pj4+Pj4+Pj4+Pj4gaW5hY3RpdmVfYW5vbjowa0IKPj4+Pj4+Pj4+Pj4+IGFj dGl2ZV9maWxlOjBrQiBpbmFjdGl2ZV9maWxlOjBrQiB1bmV2aWN0YWJsZTowa0IKPj4+Pj4+Pj4+ Pj4+IHdyaXRlcGVuZGluZzowa0IKPj4+Pj4+Pj4+Pj4+IHByZXNlbnQ6ODM4ODYwOGtCIG1hbmFn ZWQ6NTk1MzExMmtCIG1sb2NrZWQ6MGtCCj4+Pj4+Pj4+Pj4+PiBrZXJuZWxfc3RhY2s6MjE2NzJr Qgo+Pj4+Pj4+Pj4+Pj4gcGFnZXRhYmxlczo1NmtCIGJvdW5jZTowa0IgZnJlZV9wY3A6ODc2a0Ig bG9jYWxfcGNwOjE3NmtCCj4+Pj4+Pj4+Pj4+PiBmcmVlX2NtYTowa0IKPj4+Pj4+Pj4+Pj4+IFsg ICAzMC4zNzAxMDRdIGxvd21lbV9yZXNlcnZlW106IDAgMCAwIDAKPj4+Pj4+Pj4+Pj4+IFsgICAz MC4zNzAxMDddIE5vZGUgMCBETUE6IDAqNGtCIDAqOGtCIDAqMTZrQiAwKjMya0IgMCo2NGtCCj4+ Pj4+Pj4+Pj4+PiAwKjEyOGtCCj4+Pj4+Pj4+Pj4+PiAwKjI1NmtCIDAqNTEya0IgMCoxMDI0a0Ig MCoyMDQ4a0IgMCo0MDk2a0IgPSAwa0IKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAxMTNdIE5vZGUg MCBETUEzMjogMCo0a0IgMCo4a0IgMCoxNmtCIDAqMzJrQgo+Pj4+Pj4+Pj4+Pj4gMCo2NGtCIDAq MTI4a0IKPj4+Pj4+Pj4+Pj4+IDAqMjU2a0IgMCo1MTJrQiAwKjEwMjRrQiAxKjIwNDhrQiAoTSkg NjIqNDA5NmtCIChNKSA9Cj4+Pj4+Pj4+Pj4+PiAyNTYwMDBrQgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMw LjM3MDExOV0gTm9kZSAwIE5vcm1hbDogMio0a0IgKE0pIDMqOGtCIChNRSkgMioxNmtCCj4+Pj4+ Pj4+Pj4+PiAoVUUpIDMqMzJrQgo+Pj4+Pj4+Pj4+Pj4gKFVNKSAxKjY0a0IgKFUpIDIqMTI4a0Ig KE0pIDIqMjU2a0IgKE1FKSAzKjUxMmtCIChNRSkKPj4+Pj4+Pj4+Pj4+IDMqMTAyNGtCIChNRSkK Pj4+Pj4+Pj4+Pj4+IDMqMjA0OGtCIChVTUUpIDE0MzYqNDA5NmtCIChNKSA9IDU4OTM2MDBrQgo+ Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDEyOV0gTm9kZSAwIGh1Z2VwYWdlc190b3RhbD0wIGh1Z2Vw YWdlc19mcmVlPTAKPj4+Pj4+Pj4+Pj4+IGh1Z2VwYWdlc19zdXJwPTAgaHVnZXBhZ2VzX3NpemU9 MTA0ODU3NmtCCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTMwXSAwIHRvdGFsIHBhZ2VjYWNoZSBw YWdlcwo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDEzMl0gMCBwYWdlcyBpbiBzd2FwIGNhY2hlCj4+ Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTM0XSBTd2FwIGNhY2hlIHN0YXRzOiBhZGQgMCwgZGVsZXRl IDAsIGZpbmQgMC8wCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTM1XSBGcmVlIHN3YXAgID0gMGtC Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTM2XSBUb3RhbCBzd2FwID0gMGtCCj4+Pj4+Pj4+Pj4+ PiBbICAgMzAuMzcwMTM3XSAyMTY0NjA5IHBhZ2VzIFJBTQo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3 MDEzOV0gMCBwYWdlcyBIaWdoTWVtL01vdmFibGVPbmx5Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcw MTQwXSA2MTIzMzEgcGFnZXMgcmVzZXJ2ZWQKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAxNDFdIDAg cGFnZXMgaHdwb2lzb25lZAo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDE0M10gRE1BOiBmYWlsZWQg dG8gYWxsb2NhdGUgMjU2IEtpQiBwb29sIGZvcgo+Pj4+Pj4+Pj4+Pj4gYXRvbWljCj4+Pj4+Pj4+ Pj4+PiBjb2hlcmVudCBhbGxvY2F0aW9uCj4+Pj4+Pj4+Pj4+IER1cmluZyBteSB0ZXN0aW5nIEkg c2F3IHRoZSBzYW1lIGVycm9yIGFuZCBDaGVuJ3MgIHNvbHV0aW9uCj4+Pj4+Pj4+Pj4+IGNvcnJl Y3RlZCBpdCAuCj4+Pj4+Pj4+Pj4gV2hpY2ggY29tYmluYXRpb24geW91IGFyZSB1c2luZyBvbiB5 b3VyIHNpZGU/IEkgYW0gdXNpbmcKPj4+Pj4+Pj4+PiBQcmFiaGFrYXIncwo+Pj4+Pj4+Pj4+IHN1 Z2dlc3RlZCBlbnZpcm9ubWVudCBhbmQgY2FuIHJlcHJvZHVjZSB0aGUgaXNzdWUKPj4+Pj4+Pj4+ PiB3aXRoIG9yIHdpdGhvdXQgQ2hlbidzIGNyYXNoa2VybmVsIHN1cHBvcnQgYWJvdmUgNEcgcGF0 Y2hzZXQuCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBJIGFtIGFsc28gdXNpbmcgYSBUaHVuZGVyWDIg cGxhdGZvcm0gd2l0aCBsYXRlc3QgbWFrZWR1bXBmaWxlCj4+Pj4+Pj4+Pj4gY29kZSBhbmQKPj4+ Pj4+Pj4+PiBrZXhlYy10b29scyAod2l0aCB0aGUgc3VnZ2VzdGVkIHBhdGNoCj4+Pj4+Pj4+Pj4g PAo+Pj4+Pj4+Pj4+Cj4+IGh0dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMvX19odHRwczovL2xpc3Rz LmluZnJhZGVhZC5vcmcvcGlwZXJtYWlsL2tleGVjLzIwMjAtTWF5LzAyNTEyOC5odG1sX187ISFH cWl2UFZhN0JyaW8hSjZsVWlnNTgtR3c2VEtabkVFWXpFZVNVMzZULTFTcWxCMWtJbVUwMHh0WF9s c3M1VHgtSmJVbUxFOVRKQzNmb1hCTGckCj4+Pj4+Pj4+Pj4+ICkuCj4+Pj4+Pj4+Pj4gVGhhbmtz LAo+Pj4+Pj4+Pj4+IEJodXBlc2gKPj4+Pj4+Pj4+IEkgZGlkIHRoaXMgYWN0aXZpdHkgNSBtb250 aHMgYWdvIGFuZCBJIGhhdmUgbW92ZWQgb24gdG8gb3RoZXIKPj4+Pj4+Pj4+IGFjdGl2aXRpZXMu IE15IERNQSBmYWlsdXJlcyB3ZXJlIHJlbGF0ZWQgdG8gUENJIGRldmljZXMgdGhhdCBjb3VsZAo+ Pj4+Pj4+Pj4gbm90IGJlIGVudW1lcmF0ZWQgYmVjYXVzZSAgbG93LURNQSBzcGFjZSB3YXMgbm90 ICBhdmFpbGFibGUgd2hlbgo+Pj4+Pj4+Pj4gY3Jhc2hrZXJuZWwgd2FzIG1vdmVkIGFib3ZlIDRH OyBJIGRvbuKAmXQgcmVjYWxsIHRoZSBleGFjdCBwbGF0Zm9ybS4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEZvciB0aGlzIGZhaWx1cmUgLAo+Pj4+Pj4+Pj4KPj4+Pj4+ Pj4+Pj4+IERNQTogZmFpbGVkIHRvIGFsbG9jYXRlIDI1NiBLaUIgcG9vbCBmb3IgYXRvbWljCj4+ Pj4+Pj4+Pj4+PiBjb2hlcmVudCBhbGxvY2F0aW9uCj4+Pj4+Pj4+PiBJcyBkdWUgdG8gOgo+Pj4+ Pj4+Pj4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiAzNjE4MDgyYwo+Pj4+Pj4+Pj4gKCJhcm02NCB1c2Ug Ym90aCBaT05FX0RNQSBhbmQgWk9ORV9ETUEzMiIpCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gV2l0aCB0 aGUgaW50cm9kdWN0aW9uIG9mIFpPTkVfRE1BIHRvIHN1cHBvcnQgdGhlIFJhc3BiZXJyeSBETUEK Pj4+Pj4+Pj4+IHJlZ2lvbiBiZWxvdyAxRywgdGhlIGNyYXNoa2VybmVsIGlzIHBsYWNlZCBpbiB0 aGUgdXBwZXIgNEcKPj4+Pj4+Pj4+IFpPTkVfRE1BXzMyIHJlZ2lvbi4gU2luY2UgdGhlIGNyYXNo a2VybmVsIGRvZXMgbm90IGhhdmUgYWNjZXNzCj4+Pj4+Pj4+PiB0byB0aGUgWk9ORV9ETUEgcmVn aW9uLCBpdCBwcmludHMgb3V0IGNhbGwgdHJhY2UgZHVyaW5nIGJvb3R1cC4KPj4+Pj4+Pj4+Cj4+ Pj4+Pj4+PiBJdCBpcyBkdWUgdG8gaGF2aW5nIHRoaXMgQ09ORklHIGl0ZW0gIE9OICA6Cj4+Pj4+ Pj4+Pgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IENPTkZJR19aT05FX0RNQT15Cj4+Pj4+Pj4+Pgo+Pj4+ Pj4+Pj4gVHVybmluZyBvZmYgWk9ORV9ETUEgZml4ZXMgYSBpc3N1ZSBhbmQgUmFzcGJlcnJ5IFBJ IDQgd2lsbAo+Pj4+Pj4+Pj4gdXNlIHRoZSBkZXZpY2UgdHJlZSB0byBzcGVjaWZ5IG1lbW9yeSBi ZWxvdyAxRy4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+PiBEaXNhYmxpbmcgWk9ORV9ETUEg aXMgdGVtcG9yYXJ5IHNvbHV0aW9uLiAgV2UgbWF5IG5lZWQgcHJvcGVyCj4+Pj4+Pj4+IHNvbHV0 aW9uCj4+Pj4+Pj4gUGVyaGFwcyB0aGUgUmFzcGJlcnJ5IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24g ZGVwZW5kZW5jaWVzIG5lZWQKPj4+Pj4+PiBzZXBhcmF0ZWQgIGZyb20g4oCcc2VydmVyIGNsYXNz 4oCdIEFybSAgZXF1aXBtZW50ID8gIE9yIGF1dG8tY29uZmlndXJlZCBvbgo+Pj4+Pj4+IGJvb3Qg PyAgQ29uc3VsdCBhbiBleHBlcnQgOy0pCj4+Pj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4+Cj4+Pj4+Pj4+ PiBJIHdvdWxkIGxpa2UgdG8gc2VlIENoZW7igJlzIGZlYXR1cmUgYWRkZWQgLCBwZXJoYXBzIGFz Cj4+Pj4+Pj4+PiBFWFBFUklNRU5UQUwsICBzbyB3ZSBjYW4gZ2V0IHNvbWUgY29uZmlndXJhdGlv biB0ZXN0aW5nIGRvbmUgb24KPj4+Pj4+Pj4+IGl0LiAgIEl0IGNvcnJlY3RzIGhhdmluZyBhIERN QSB6b25lIGluIGxvdyBtZW1vcnkgd2hpbGUgY3Jhc2gtCj4+Pj4+Pj4+PiBrZXJuZWwgaXMgYWJv dmUgNEdCLiAgVGhpcyBoYXMgYmVlbiBnb2luZyBvbiBmb3IgYSB5ZWFyIG5vdy4KPj4+Pj4+Pj4g SSB3aWxsIGFsc28gbGlrZSB0aGlzIHBhdGNoIHRvIGJlIGFkZGVkIGluIExpbnV4IGFzIGVhcmx5 IGFzCj4+Pj4+Pj4+IHBvc3NpYmxlLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBJc3N1ZSBtZW50aW9uZWQg YnkgbWUgaGFwcGVucyB3aXRoIG9yIHdpdGhvdXQgdGhpcyBwYXRjaC4KPj4+Pj4+Pj4KPj4+Pj4+ Pj4gVGhpcyBwYXRjaC1zZXQgY2FuIGNvbnNpZGVyIGZpeGluZyBiZWNhdXNlIGl0IHVzZXMgbG93 IG1lbW9yeSBmb3IKPj4+Pj4+Pj4gRE1BCj4+Pj4+Pj4+ICYgc3dpb3RsYiBvbmx5Lgo+Pj4+Pj4+ PiBXZSBjYW4gY29uc2lkZXIgcmVzdHJpY3RpbmcgY3Jhc2hrZXJuZWwgd2l0aGluIHRoZSByZXF1 aXJlZCByYW5nZQo+Pj4+Pj4+PiBsaWtlIGJlbG93Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IGRpZmYgLS1n aXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuYwo+Pj4+Pj4+PiBp bmRleCA3ZjllNWE2ZGM0OGMuLmJkNjdiOTBkMzViZCAxMDA2NDQKPj4+Pj4+Pj4gLS0tIGEva2Vy bmVsL2NyYXNoX2NvcmUuYwo+Pj4+Pj4+PiArKysgYi9rZXJuZWwvY3Jhc2hfY29yZS5jCj4+Pj4+ Pj4+IEBAIC0zNTQsNyArMzU0LDcgQEAgaW50IF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsX2xv dyh2b2lkKQo+Pj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4+Pj4+ PiAgICAgICAgfQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAtICAgICAgIGxvd19iYXNlID0gbWVtYmxvY2tf ZmluZF9pbl9yYW5nZSgwLCAxVUxMIDw8IDMyLCBsb3dfc2l6ZSwKPj4+Pj4+Pj4gQ1JBU0hfQUxJ R04pOwo+Pj4+Pj4+PiArICAgICAgIGxvd19iYXNlID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZSgw LDB4YzAwMDAwMDAsIGxvd19zaXplLAo+Pj4+Pj4+PiBDUkFTSF9BTElHTik7Cj4+Pj4+Pj4+ICAg ICAgICBpZiAoIWxvd19iYXNlKSB7Cj4+Pj4+Pj4+ICAgICAgICAgICAgICAgIHByX2VycigiQ2Fu bm90IHJlc2VydmUgJWxkTUIgY3Jhc2hrZXJuZWwgbG93IG1lbW9yeSwKPj4+Pj4+Pj4gcGxlYXNl IHRyeSBzbWFsbGVyIHNpemUuXG4iLAo+Pj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcpKGxvd19zaXplID4+IDIwKSk7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+Cj4+Pj4+Pj4g ICAgIEkgc3VzcGVjdCAgMHhjMDAwMDAwMCAgd291bGQgbmVlZCB0byBiZSBhIENPTkZJRyBpdGVt ICBhbmQgbm90Cj4+Pj4+Pj4gaGFyZC1jb2RlZC4KPj4+Pj4+Pgo+Pj4+Pj4gaWYgeW91IGNvbnNp ZGVyIHRoaXMgYXMgdmFsaWQgY2hhbmdlLCAgY2FuIHlvdSBwbGVhc2UgaW5jb3Jwb3JhdGUgYXMK Pj4+Pj4+IHBhcnQgb2YgeW91ciBwYXRjaC1zZXQuCj4+Pj4+IEFmdGVyIGNvbW1pdCAxYThlMWNl ZjcgKCJhcm02NDogdXNlIGJvdGggWk9ORV9ETUEgYW5kIFpPTkVfRE1BMzIiKe+8jHRoZSAwLQo+ Pj4+PiA0RyBtZW1vcnkgaXMgc3BsaXRlZAo+Pj4+PiB0byBETUEgW21lbSAweDAwMDAwMDAwMDAw MDAwMDAtMHgwMDAwMDAwMDNmZmZmZmZmXSBhbmQgRE1BMzIgW21lbQo+Pj4+PiAweDAwMDAwMDAw NDAwMDAwMDAtMHgwMDAwMDAwMGZmZmZmZmZmXSBvbiBhcm02NC4KPj4+Pj4KPj4+Pj4gIEZyb20g dGhlIGFib3ZlIGRpc2N1c3Npb24sIG9uIHlvdXIgcGxhdGZvcm0sIHRoZSBsb3cgY3Jhc2hrZXJu ZWwgZmFsbCBpbgo+Pj4+PiBETUEzMiByZWdpb24sIGJ1dCB5b3VyIGVudmlyb25tZW50IG5lZWRz IHRvIGFjY2VzcyBETUEKPj4+Pj4gcmVnaW9uLCBzbyB0aGVyZSBpcyB0aGUgY2FsbCB0cmFjZS4K Pj4+Pj4KPj4+Pj4gSSBoYXZlIGEgcXVlc3Rpb24sIHdoeSBkbyB5b3UgY2hvb3NlIDB4YzAwMDAw MDAgaGVyZT8KPj4+Pj4KPj4+Pj4gQmVzaWRlcywgdGhpcyBpcyBjb21tb24gY29kZSwgd2UgYWxz byBuZWVkIHRvIGNvbnNpZGVyIGFib3V0IHg4Ni4KPj4+Pj4KPj4+PiAgICsgbnNhZW56anVsaWVu bmVAc3VzZS5kZQo+PiBUaGFua3MgZm9yIGFkZGluZyBtZSB0byB0aGUgY29udmVyc2F0aW9uLCBh bmQgc29ycnkgZm9yIHRoZSBoZWFkYWNoZXMuCj4+Cj4+Pj4gICAgRXhhY3RseSAuICBUaGlzIGlz IHdoeSBpdCBuZWVkcyB0byBiZSBhIENPTkZJRyBvcHRpb24gZm9yICBSYXNwYmVycnkKPj4+PiAu LiwgIG9yIGRldmljZSB0cmVlIG9wdGlvbi4KPj4+Pgo+Pj4+Cj4+Pj4gICAgV2UgY291bGQgcmV2 ZXJ0IDFhOGUxY2VmNyBzaW5jZSBpdCBicm9rZSAgQXJtIGtkdW1wIHRvby4KPj4+IFdlbGwsIHVu Zm9ydHVuYXRlbHkgdGhlIHBhdGNoIGZvciBjb21taXQgMWE4ZTFjZWY3NjAzICgiYXJtNjQ6IHVz ZQo+Pj4gYm90aCBaT05FX0RNQSBhbmQgWk9ORV9ETUEzMiIpIHdhcyBub3QgQ2MnZWQgdG8gdGhl IGtleGVjIG1haWxpbmcKPj4+IGxpc3QsIHRodXMgd2UgY291bGRuJ3QgZ2V0IG1hbnkgZXllcyBv biBpdCBmb3IgYSB0aG9yb3VnaCByZXZpZXcgZnJvbQo+Pj4ga2V4ZWMva2R1bXAgcC1vLXYuCj4+ Pgo+Pj4gQWxzbyB3ZSBoaXN0b3JpY2FsbHkgbmV2ZXIgaGFkIGRpc3RpbmN0aW9uIGluIGNvbW1v biBhcmNoIGNvZGUgb24gdGhlCj4+PiBiYXNpcyBvZiB0aGUgaW50ZW5kZWQgZW5kIHVzZS1jYXNl OiBlbWJlZGRlZCwgc2VydmVyIG9yIGF1dG9tb3RpdmUsIHNvCj4+PiBJIGFtIG5vdCBzdXJlIGlu dHJvZHVjaW5nIGEgUmFzcGJlcnJ5IHNwZWNpZmljIENPTkZJRyBvcHRpb24gd291bGQgYmUKPj4+ IGEgZ29vZCBpZGVhLgo+PiArMQo+Pgo+PiAgRnJvbSB0aGUgZGlzdHJvcyBwZXJzcGVjdGl2ZSBp dCdzIHZlcnkgaW1wb3J0YW50IHRvIGtlZXAgYSBzaW5nbGUga2VybmVsIGltYWdlLgo+Pgo+Pj4g U28sIHJhdGhlciB0aGFuIHJldmVydGluZyB0aGUgcGF0Y2gsIHdlIGNhbiBsb29rIGF0IGFkZHJl c3NpbmcgdGhlCj4+PiBzYW1lIHByb3Blcmx5IHRoaXMgdGltZSAtIGVzcGVjaWFsbHkgZnJvbSBh IGtkdW1wIHAtby12Lgo+Pj4gVGhpcyBpc3N1ZSBoYXMgYmVlbiByZXBvcnRlZCBieSBzb21lIFJl ZCBIYXQgYXJtNjQgcGFydG5lcnMgd2l0aAo+Pj4gdXBzdHJlYW0ga2VybmVsIGFsc28gYW5kIGFz IHdlIGhhdmUgbm90aWNlZCBpbiB0aGUgcGFzdCBhcyB3ZWxsLAo+Pj4gaGFyZGNvZGluZyB0aGUg cGxhY2VtZW50IG9mIHRoZSBjcmFzaGtlcm5lbCBiYXNlIGFkZHJlc3MgKHVubGVzcyB0aGUKPj4+ IGJhc2UgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYnkgYSBjcmFzaGtlcm5lbD1YQFkgbGlrZSBib290 YXJncykgaXMgYWxzbwo+Pj4gbm90IGEgcG9ydGFibGUgc3VnZ2VzdGlvbi4KPj4+Cj4+PiBJIGFt IHdvcmtpbmcgb24gYSBwb3NzaWJsZSBmaXggYW5kIHdpbGwgaGF2ZSBtb3JlIHVwZGF0ZXMgb24g dGhlIHNhbWUKPj4+IGluIGEgZGF5LW9yLXR3by4KPj4gUGxlYXNlIGtlZXAgbWUgaW4gdGhlIGxv b3AsIHdlJ3ZlIGFsc28gaGFkIGlzc3VlcyBwb2ludGluZyB0byB0aGlzIHJlcG9ydGVkIGJ5Cj4+ IFNVU0UgcGFydG5lcnMuIEkgY2FuIGRvIHNvbWUgdGVzdGluZyBib3RoIG9uIHRoZSBSUGk0IGFu ZCBvbiBiaWcgc2VydmVycyB0aGF0Cj4+IG5lZWQgaHVnZSBjcmFzaGtlcm5lbCBzaXplcy4KPj4K Pj4gUmVnYXJkcywKPj4gTmljb2xhcwo+Pgo+Cj4gICBIaQo+Cj4gICBIYXMgdGhlcmUgYmVlbiBh bnkgcHJvZ3Jlc3Mgb24gdGhpcyA/IEl0IGFwcGVhcnMgd2UgYXJlIHN0YWxsZWQgYmVjYXVzZSBO aWNvbGFzJ3MgIGFuZCBDaGVuJ3MgY2hhbmdlcyBhcmUgbm90IGNvbXBhdGlibGUgLiBPbmUgaXMg bmVlZGVkIGZvciBSUGk0IGFuZCB0aGUgb3RoZXIgZm9yIHNlcnZlciBjbGFzcyBlcXVpcG1lbnQu Cj4KPgo+IFRoYW5rcywKPgo+IEpvaG4KPgo+CkhpIGFsbCwKClRoYW5rcyBmb3IgSm9obidzIHJl bWluZGVyLgpjb21taXQgMWE4ZTFjZWY3ICgiYXJtNjQ6IHVzZSBib3RoIFpPTkVfRE1BIGFuZCBa T05FX0RNQTMyIikgYnJva2VuIHRoZSBhcm02NCBrZHVtcCwKdGhlcmUgaXMgYSBzaW1wbGUgc29s dXRpb24gc2ltaWxhciB0byBwaydzIHRvIGZpeCB0aGlzLCBzZWUgYmVsb3c6CgpJbiBjcmFzaCBk dW1wIGtlcm5lbCwgaWYgdGhlIHBlcmlwaGVyYWxzIG5lZWQgdG8gdXNlIFpPTkVfRE1BIGxpa2Ug dGhlIHRoZSBSYXNwYmVycnkgUGkgNCwgYmFzZWQgb24KbXkgc29sdXRpb24sIHdlIGFkanVzdGVk IHRoZSBtZW1vcnkgcmFuZ2UgaW4gbWVtYmxvY2tfZmluZF9pbl9yYW5nZS4KCmRpZmYgLS1naXQg YS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuYwppbmRleCBhNzU4MGQy OTFjMzcuLmViMTZjNmQ1NGI3MyAxMDA2NDQKLS0tIGEva2VybmVsL2NyYXNoX2NvcmUuYworKysg Yi9rZXJuZWwvY3Jhc2hfY29yZS5jCkBAIC0zMjAsNiArMzIwLDcgQEAgaW50IF9faW5pdCByZXNl cnZlX2NyYXNoa2VybmVsX2xvdyh2b2lkKQogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBiYXNl LCBsb3dfYmFzZSA9IDAsIGxvd19zaXplID0gMDsKICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFs X2xvd19tZW07CiAgICAgICAgaW50IHJldDsKKyAgICAgICBwaHlzX2FkZHJfdCBjcmFzaF9tYXgg PSAxVUxMIDw8IDMyOwogCiAgICAgICAgdG90YWxfbG93X21lbSA9IG1lbWJsb2NrX21lbV9zaXpl KDFVTCA8PCAoMzIgLSBQQUdFX1NISUZUKSk7CiAKQEAgLTM1Miw3ICszNTMsMTIgQEAgaW50IF9f aW5pdCByZXNlcnZlX2NyYXNoa2VybmVsX2xvdyh2b2lkKQogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gMDsKICAgICAgICB9CiAKLSAgICAgICBsb3dfYmFzZSA9IG1lbWJsb2NrX2ZpbmRf aW5fcmFuZ2UoMCwgMVVMTCA8PCAzMiwgbG93X3NpemUsIENSQVNIX0FMSUdOKTsKKyNpZmRlZiBD T05GSUdfQVJNNjQKKyAgICAgICBpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpKSB7Cisg ICAgICAgICAgICAgICBjcmFzaF9tYXggPSBhcm02NF9kbWFfcGh5c19saW1pdDsKKyAgICAgICB9 CisjZW5kaWYKKyAgICAgICBsb3dfYmFzZSA9IG1lbWJsb2NrX2ZpbmRfaW5fcmFuZ2UoMCwgY3Jh c2hfbWF4LCBsb3dfc2l6ZSwgQ1JBU0hfQUxJR04pOwogICAgICAgIGlmICghbG93X2Jhc2UpIHsK ICAgICAgICAgICAgICAgIHByX2VycigiQ2Fubm90IHJlc2VydmUgJWxkTUIgY3Jhc2hrZXJuZWwg bG93IG1lbW9yeSwgcGxlYXNlIHRyeSBzbWFsbGVyIHNpemUuXG4iLAogICAgICAgICAgICAgICAg ICAgICAgICh1bnNpZ25lZCBsb25nKShsb3dfc2l6ZSA+PiAyMCkpOwoKClRoYW5rcywKQ2hlbiBa aG91Cgo+Cj4gLgo+CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Subject: Re: [PATCH v8 0/5] support reserving crashkernel above 4G on arm64 kdump References: <20200521093805.64398-1-chenzhou10@huawei.com> <303695cc-d3ea-9f51-1489-07d27d4253d4@oracle.com> <6EA47B07-5119-49DF-9980-12A2066F22CA@oracle.com> <8463464e-5461-f328-621c-bacc6a3b88dd@huawei.com> <8E0D45DC-12BF-437D-A342-03E974D9C6D4@oracle.com> <751bbe2512628ff38002db33ce02af051d080cd2.camel@suse.de> <8ca6c3e9-b8ab-77c3-a1d3-beb513c22f1b@oracle.com> From: chenzhou Message-ID: <03929ef5-7044-5610-c207-e497d3994f49@huawei.com> Date: Fri, 19 Jun 2020 16:21:15 +0800 MIME-Version: 1.0 In-Reply-To: <8ca6c3e9-b8ab-77c3-a1d3-beb513c22f1b@oracle.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: John Donnelly , Nicolas Saenz Julienne , Bhupesh Sharma Cc: Devicetree List , Arnd Bergmann , Baoquan He , Linux Doc Mailing List , Catalin Marinas , RuiRui Yang , Prabhakar Kushwaha , kexec mailing list , Linux Kernel Mailing List , Rob Herring , Simon Horman , James Morse , guohanjun@huawei.com, Thomas Gleixner , Prabhakar Kushwaha , Will Deacon , Ingo Molnar , linux-arm-kernel Ck9uIDIwMjAvNi8xOSAxMDozMiwgSm9obiBEb25uZWxseSB3cm90ZToKPgo+IE9uIDYvNC8yMCAx MjowMSBQTSwgTmljb2xhcyBTYWVueiBKdWxpZW5uZSB3cm90ZToKPj4gT24gVGh1LCAyMDIwLTA2 LTA0IGF0IDAxOjE3ICswNTMwLCBCaHVwZXNoIFNoYXJtYSB3cm90ZToKPj4+IEhpIEFsbCwKPj4+ Cj4+PiBPbiBXZWQsIEp1biAzLCAyMDIwIGF0IDk6MDMgUE0gSm9obiBEb25uZWxseSA8am9obi5w LmRvbm5lbGx5QG9yYWNsZS5jb20+Cj4+PiB3cm90ZToKPj4+Pgo+Pj4+PiBPbiBKdW4gMywgMjAy MCwgYXQgODoyMCBBTSwgY2hlbnpob3UgPGNoZW56aG91MTBAaHVhd2VpLmNvbT4gd3JvdGU6Cj4+ Pj4+Cj4+Pj4+IEhpLAo+Pj4+Pgo+Pj4+Pgo+Pj4+PiBPbiAyMDIwLzYvMyAxOTo0NywgUHJhYmhh a2FyIEt1c2h3YWhhIHdyb3RlOgo+Pj4+Pj4gSGkgQ2hlbiwKPj4+Pj4+Cj4+Pj4+PiBPbiBUdWUs IEp1biAyLCAyMDIwIGF0IDg6MTIgUE0gSm9obiBEb25uZWxseSA8am9obi5wLmRvbm5lbGx5QG9y YWNsZS5jb20KPj4+Pj4+PiB3cm90ZToKPj4+Pj4+Pgo+Pj4+Pj4+PiBPbiBKdW4gMiwgMjAyMCwg YXQgMTI6MzggQU0sIFByYWJoYWthciBLdXNod2FoYSA8Cj4+Pj4+Pj4+IHByYWJoYWthci5wa2lu QGdtYWlsLmNvbT4gd3JvdGU6Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IE9uIFR1ZSwgSnVuIDIsIDIwMjAg YXQgMzoyOSBBTSBKb2huIERvbm5lbGx5IDwKPj4+Pj4+Pj4gam9obi5wLmRvbm5lbGx5QG9yYWNs ZS5jb20+IHdyb3RlOgo+Pj4+Pj4+Pj4gSGkgLiAgU2VlIGJlbG93ICEKPj4+Pj4+Pj4+Cj4+Pj4+ Pj4+Pj4gT24gSnVuIDEsIDIwMjAsIGF0IDQ6MDIgUE0sIEJodXBlc2ggU2hhcm1hIDxiaHNoYXJt YUByZWRoYXQuY29tPgo+Pj4+Pj4+Pj4+IHdyb3RlOgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gSGkg Sm9obiwKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IE9uIFR1ZSwgSnVuIDIsIDIwMjAgYXQgMTowMSBB TSBKb2huIERvbm5lbGx5IDwKPj4+Pj4+Pj4+PiBKb2huLlAuZG9ubmVsbHlAb3JhY2xlLmNvbT4g d3JvdGU6Cj4+Pj4+Pj4+Pj4+IEhpLAo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+ PiBPbiA2LzEvMjAgNzowMiBBTSwgUHJhYmhha2FyIEt1c2h3YWhhIHdyb3RlOgo+Pj4+Pj4+Pj4+ Pj4gSGkgQ2hlbiwKPj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+PiBPbiBUaHUsIE1heSAyMSwgMjAy MCBhdCAzOjA1IFBNIENoZW4gWmhvdSA8Cj4+Pj4+Pj4+Pj4+PiBjaGVuemhvdTEwQGh1YXdlaS5j b20+IHdyb3RlOgo+Pj4+Pj4+Pj4+Pj4+IFRoaXMgcGF0Y2ggc2VyaWVzIGVuYWJsZSByZXNlcnZp bmcgY3Jhc2hrZXJuZWwgYWJvdmUgNEcgaW4KPj4+Pj4+Pj4+Pj4+PiBhcm02NC4KPj4+Pj4+Pj4+ Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+IFRoZXJlIGFyZSBmb2xsb3dpbmcgaXNzdWVzIGluIGFybTY0IGtk dW1wOgo+Pj4+Pj4+Pj4+Pj4+IDEuIFdlIHVzZSBjcmFzaGtlcm5lbD1YIHRvIHJlc2VydmUgY3Jh c2hrZXJuZWwgYmVsb3cgNEcsCj4+Pj4+Pj4+Pj4+Pj4gd2hpY2ggd2lsbCBmYWlsCj4+Pj4+Pj4+ Pj4+Pj4gd2hlbiB0aGVyZSBpcyBubyBlbm91Z2ggbG93IG1lbW9yeS4KPj4+Pj4+Pj4+Pj4+PiAy LiBDdXJyZW50bHksIGNyYXNoa2VybmVsPVlAWCBjYW4gYmUgdXNlZCB0byByZXNlcnZlCj4+Pj4+ Pj4+Pj4+Pj4gY3Jhc2hrZXJuZWwgYWJvdmUgNEcsCj4+Pj4+Pj4+Pj4+Pj4gaW4gdGhpcyBjYXNl LCBpZiBzd2lvdGxiIG9yIERNQSBidWZmZXJzIGFyZSByZXF1aXJlZCwKPj4+Pj4+Pj4+Pj4+PiBj cmFzaCBkdW1wIGtlcm5lbAo+Pj4+Pj4+Pj4+Pj4+IHdpbGwgYm9vdCBmYWlsdXJlIGJlY2F1c2Ug dGhlcmUgaXMgbm8gbG93IG1lbW9yeSBhdmFpbGFibGUKPj4+Pj4+Pj4+Pj4+PiBmb3IgYWxsb2Nh dGlvbi4KPj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gV2UgYXJlIGdldHRpbmcgIndhcm5fYWxs b2MiIFsxXSB3YXJuaW5nIGR1cmluZyBib290IG9mIGtkdW1wCj4+Pj4+Pj4+Pj4+PiBrZXJuZWwK Pj4+Pj4+Pj4+Pj4+IHdpdGggYm9vdGFyZ3MgYXMgWzJdIG9mIHByaW1hcnkga2VybmVsLgo+Pj4+ Pj4+Pj4+Pj4gVGhpcyBlcnJvciBvYnNlcnZlZCBvbiBUaHVuZGVyWDIgIEFSTTY0IHBsYXRmb3Jt Lgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IEl0IGlzIG9ic2VydmVkIHdpdGggbGF0ZXN0IHVw c3RyZWFtIHRhZyAodjUuNy1yYzMpIHdpdGggdGhpcwo+Pj4+Pj4+Pj4+Pj4gcGF0Y2ggc2V0Cj4+ Pj4+Pj4+Pj4+PiBhbmQKPj4+Pj4+Pj4+Pj4+Cj4+IGh0dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMv X19odHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvcGlwZXJtYWlsL2tleGVjLzIwMjAtTWF5LzAy NTEyOC5odG1sX187ISFHcWl2UFZhN0JyaW8hTG5UU0FSa0N0MFYwRm96UjBLbXFvb2FINUFEdGRY dnMzbVBkUDNLUlZxQUxtdlNLMlZtQ2tJUEloc2F4YmlJQUFsenUkCj4+Pj4+Pj4+Pj4+PiBBbHNv ICoqd2l0aG91dCoqIHRoaXMgcGF0Y2gtc2V0Cj4+Pj4+Pj4+Pj4+PiAiCj4+Pj4+Pj4+Pj4+Pgo+ PiBodHRwczovL3VybGRlZmVuc2UuY29tL3YzL19faHR0cHM6Ly93d3cuc3Bpbmljcy5uZXQvbGlz dHMvYXJtLWtlcm5lbC9tc2c4MDY4ODIuaHRtbF9fOyEhR3FpdlBWYTdCcmlvIUxuVFNBUmtDdDBW MEZvelIwS21xb29hSDVBRHRkWHZzM21QZFAzS1JWcUFMbXZTSzJWbUNrSVBJaHNheGJqQzZ1ak1B JAo+Pj4+Pj4+Pj4+Pj4gIgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IFRoaXMgaXNzdWUgY29t ZXMgd2hlbmV2ZXIgY3Jhc2hrZXJuZWwgbWVtb3J5IGlzIHJlc2VydmVkCj4+Pj4+Pj4+Pj4+PiBh ZnRlciAweGMwMDBfMDAwMC4KPj4+Pj4+Pj4+Pj4+IE1vcmUgZGV0YWlscyBkaXNjdXNzZWQgZWFy bGllciBpbgo+Pj4+Pj4+Pj4+Pj4KPj4gaHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92My9fX2h0dHBz Oi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2FybS1rZXJuZWwvbXNnODA2ODgyLmh0bWxfXzshIUdx aXZQVmE3QnJpbyFMblRTQVJrQ3QwVjBGb3pSMEttcW9vYUg1QUR0ZFh2czNtUGRQM0tSVnFBTG12 U0syVm1Da0lQSWhzYXhiakM2dWpNQSQKPj4gICAgd2l0aG91dAo+Pj4+Pj4+Pj4+Pj4gYW55Cj4+ Pj4+Pj4+Pj4+PiBzb2x1dGlvbgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IFRoaXMgcGF0Y2gt c2V0IGlzIGV4cGVjdGVkIHRvIHNvbHZlIHNpbWlsYXIga2luZCBvZiBpc3N1ZS4KPj4+Pj4+Pj4+ Pj4+IGkuZS4gbG93IG1lbW9yeSBpcyBvbmx5IHRhcmdldGVkIGZvciBETUEsIHN3aW90bGI7IFNv IGFib3ZlCj4+Pj4+Pj4+Pj4+PiBtZW50aW9uZWQKPj4+Pj4+Pj4+Pj4+IG9ic2VydmF0aW9uIHNo b3VsZCBiZSBjb25zaWRlcmVkL2ZpeGVkLiAuCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gLS1w awo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IFsxXQo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2NjY5 NV0gRE1JOiBDYXZpdW0gSW5jLiBTYWJlci9TYWJlciwgQklPUwo+Pj4+Pj4+Pj4+Pj4gVFgyLUZX LVJlbGVhc2UtMy4xLWJ1aWxkXzAxLTI4MDMtZzc0MjUzYTU0MWEgbW0vZGQveXl5eQo+Pj4+Pj4+ Pj4+Pj4gWyAgIDMwLjM2NzY5Nl0gTkVUOiBSZWdpc3RlcmVkIHByb3RvY29sIGZhbWlseSAxNgo+ Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2OTk3M10gc3dhcHBlci8wOiBwYWdlIGFsbG9jYXRpb24gZmFp bHVyZTogb3JkZXI6NiwKPj4+Pj4+Pj4+Pj4+IG1vZGU6MHgxKEdGUF9ETUEpLCBub2RlbWFzaz0o bnVsbCksY3B1c2V0PS8sbWVtc19hbGxvd2VkPTAKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNjk5ODBd IENQVTogMCBQSUQ6IDEgQ29tbTogc3dhcHBlci8wIE5vdCB0YWludGVkCj4+Pj4+Pj4+Pj4+PiA1 LjcuMC1yYzMrICMxMjEKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNjk5ODFdIEhhcmR3YXJlIG5hbWU6 IENhdml1bSBJbmMuIFNhYmVyL1NhYmVyLCBCSU9TCj4+Pj4+Pj4+Pj4+PiBUWDItRlctUmVsZWFz ZS0zLjEtYnVpbGRfMDEtMjgwMy1nNzQyNTNhNTQxYSBtbS9kZC95eXl5Cj4+Pj4+Pj4+Pj4+PiBb ICAgMzAuMzY5OTg0XSBDYWxsIHRyYWNlOgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2OTk4OV0gIGR1 bXBfYmFja3RyYWNlKzB4MC8weDFmOAo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM2OTk5MV0gIHNob3df c3RhY2srMHgyMC8weDMwCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzY5OTk3XSAgZHVtcF9zdGFjaysw eGMwLzB4MTBjCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDAxXSAgd2Fybl9hbGxvYysweDEwYy8w eDE3OAo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDAwNF0gIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgu Y29uc3Rwcm9wLjExMSsweGIxMC8wCj4+Pj4+Pj4+Pj4+PiB4YjUwCj4+Pj4+Pj4+Pj4+PiBbICAg MzAuMzcwMDA2XSAgX19hbGxvY19wYWdlc19ub2RlbWFzaysweDJiNC8weDMwMAo+Pj4+Pj4+Pj4+ Pj4gWyAgIDMwLjM3MDAwOF0gIGFsbG9jX3BhZ2VfaW50ZXJsZWF2ZSsweDI0LzB4OTgKPj4+Pj4+ Pj4+Pj4+IFsgICAzMC4zNzAwMTFdICBhbGxvY19wYWdlc19jdXJyZW50KzB4ZTQvMHgxMDgKPj4+ Pj4+Pj4+Pj4+IFsgICAzMC4zNzAwMTddICBkbWFfYXRvbWljX3Bvb2xfaW5pdCsweDQ0LzB4MWE0 Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDIwXSAgZG9fb25lX2luaXRjYWxsKzB4NTQvMHgyMjgK Pj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAwMjddICBrZXJuZWxfaW5pdF9mcmVlYWJsZSsweDIyOC8w eDJjYwo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDAzMV0gIGtlcm5lbF9pbml0KzB4MWMvMHgxMTAK Pj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAwMzRdICByZXRfZnJvbV9mb3JrKzB4MTAvMHgxOAo+Pj4+ Pj4+Pj4+Pj4gWyAgIDMwLjM3MDAzNl0gTWVtLUluZm86Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcw MDY0XSBhY3RpdmVfYW5vbjowIGluYWN0aXZlX2Fub246MCBpc29sYXRlZF9hbm9uOjAKPj4+Pj4+ Pj4+Pj4+IFsgICAzMC4zNzAwNjRdICBhY3RpdmVfZmlsZTowIGluYWN0aXZlX2ZpbGU6MAo+Pj4+ Pj4+Pj4+Pj4gaXNvbGF0ZWRfZmlsZTowCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDY0XSAgdW5l dmljdGFibGU6MCBkaXJ0eTowIHdyaXRlYmFjazowIHVuc3RhYmxlOjAKPj4+Pj4+Pj4+Pj4+IFsg ICAzMC4zNzAwNjRdICBzbGFiX3JlY2xhaW1hYmxlOjM0IHNsYWJfdW5yZWNsYWltYWJsZTo0NDM4 Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDY0XSAgbWFwcGVkOjAgc2htZW06MCBwYWdldGFibGVz OjE0IGJvdW5jZTowCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDY0XSAgZnJlZToxNTM3NzE5IGZy ZWVfcGNwOjIxOSBmcmVlX2NtYTowCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDcwXSBOb2RlIDAg YWN0aXZlX2Fub246MGtCIGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+PiBhY3RpdmVfZmls ZTowa0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+Pj4+Pj4+PiBpc29s YXRlZChhbm9uKTowa0IKPj4+Pj4+Pj4+Pj4+IGlzb2xhdGVkKGZpbGUpOjBrQiBtYXBwZWQ6MGtC IGRpcnR5OjBrQiB3cml0ZWJhY2s6MGtCCj4+Pj4+Pj4+Pj4+PiBzaG1lbTowa0IKPj4+Pj4+Pj4+ Pj4+IHNobWVtX3RocDogMGtCIHNobWVtX3BtZG1hcHBlZDogMGtCIGFub25fdGhwOiAwa0IKPj4+ Pj4+Pj4+Pj4+IHdyaXRlYmFja190bXA6MGtCCj4+Pj4+Pj4+Pj4+PiB1bnN0YWJsZTowa0IgYWxs X3VucmVjbGFpbWFibGU/IG5vCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDczXSBOb2RlIDEgYWN0 aXZlX2Fub246MGtCIGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+PiBhY3RpdmVfZmlsZTow a0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+Pj4+Pj4+PiBpc29sYXRl ZChhbm9uKTowa0IKPj4+Pj4+Pj4+Pj4+IGlzb2xhdGVkKGZpbGUpOjBrQiBtYXBwZWQ6MGtCIGRp cnR5OjBrQiB3cml0ZWJhY2s6MGtCCj4+Pj4+Pj4+Pj4+PiBzaG1lbTowa0IKPj4+Pj4+Pj4+Pj4+ IHNobWVtX3RocDogMGtCIHNobWVtX3BtZG1hcHBlZDogMGtCIGFub25fdGhwOiAwa0IKPj4+Pj4+ Pj4+Pj4+IHdyaXRlYmFja190bXA6MGtCCj4+Pj4+Pj4+Pj4+PiB1bnN0YWJsZTowa0IgYWxsX3Vu cmVjbGFpbWFibGU/IG5vCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDc5XSBOb2RlIDAgRE1BIGZy ZWU6MGtCIG1pbjowa0IgbG93OjBrQiBoaWdoOjBrQgo+Pj4+Pj4+Pj4+Pj4gcmVzZXJ2ZWRfaGln aGF0b21pYzowS0IgYWN0aXZlX2Fub246MGtCIGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+ PiBhY3RpdmVfZmlsZTowa0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+ Pj4+Pj4+PiB3cml0ZXBlbmRpbmc6MGtCCj4+Pj4+Pj4+Pj4+PiBwcmVzZW50OjEyOGtCIG1hbmFn ZWQ6MGtCIG1sb2NrZWQ6MGtCIGtlcm5lbF9zdGFjazowa0IKPj4+Pj4+Pj4+Pj4+IHBhZ2V0YWJs ZXM6MGtCCj4+Pj4+Pj4+Pj4+PiBib3VuY2U6MGtCIGZyZWVfcGNwOjBrQiBsb2NhbF9wY3A6MGtC IGZyZWVfY21hOjBrQgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDA4NF0gbG93bWVtX3Jlc2VydmVb XTogMCAyNTAgNjA2MyA2MDYzCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMDkwXSBOb2RlIDAgRE1B MzIgZnJlZToyNTYwMDBrQiBtaW46NDA4a0IKPj4+Pj4+Pj4+Pj4+IGxvdzo2NjRrQgo+Pj4+Pj4+ Pj4+Pj4gaGlnaDo5MjBrQiByZXNlcnZlZF9oaWdoYXRvbWljOjBLQiBhY3RpdmVfYW5vbjowa0IK Pj4+Pj4+Pj4+Pj4+IGluYWN0aXZlX2Fub246MGtCCj4+Pj4+Pj4+Pj4+PiBhY3RpdmVfZmlsZTow a0IgaW5hY3RpdmVfZmlsZTowa0IgdW5ldmljdGFibGU6MGtCCj4+Pj4+Pj4+Pj4+PiB3cml0ZXBl bmRpbmc6MGtCCj4+Pj4+Pj4+Pj4+PiBwcmVzZW50OjI2OTcwMGtCIG1hbmFnZWQ6MjU2MDAwa0Ig bWxvY2tlZDowa0IKPj4+Pj4+Pj4+Pj4+IGtlcm5lbF9zdGFjazowa0IKPj4+Pj4+Pj4+Pj4+IHBh Z2V0YWJsZXM6MGtCIGJvdW5jZTowa0IgZnJlZV9wY3A6MGtCIGxvY2FsX3BjcDowa0IKPj4+Pj4+ Pj4+Pj4+IGZyZWVfY21hOjBrQgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDA5NF0gbG93bWVtX3Jl c2VydmVbXTogMCAwIDU4MTMgNTgxMwo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDEwMF0gTm9kZSAw IE5vcm1hbCBmcmVlOjU4OTQ4NzZrQiBtaW46OTU1MmtCCj4+Pj4+Pj4+Pj4+PiBsb3c6MTU1MDRr Qgo+Pj4+Pj4+Pj4+Pj4gaGlnaDoyMTQ1NmtCIHJlc2VydmVkX2hpZ2hhdG9taWM6MEtCIGFjdGl2 ZV9hbm9uOjBrQgo+Pj4+Pj4+Pj4+Pj4gaW5hY3RpdmVfYW5vbjowa0IKPj4+Pj4+Pj4+Pj4+IGFj dGl2ZV9maWxlOjBrQiBpbmFjdGl2ZV9maWxlOjBrQiB1bmV2aWN0YWJsZTowa0IKPj4+Pj4+Pj4+ Pj4+IHdyaXRlcGVuZGluZzowa0IKPj4+Pj4+Pj4+Pj4+IHByZXNlbnQ6ODM4ODYwOGtCIG1hbmFn ZWQ6NTk1MzExMmtCIG1sb2NrZWQ6MGtCCj4+Pj4+Pj4+Pj4+PiBrZXJuZWxfc3RhY2s6MjE2NzJr Qgo+Pj4+Pj4+Pj4+Pj4gcGFnZXRhYmxlczo1NmtCIGJvdW5jZTowa0IgZnJlZV9wY3A6ODc2a0Ig bG9jYWxfcGNwOjE3NmtCCj4+Pj4+Pj4+Pj4+PiBmcmVlX2NtYTowa0IKPj4+Pj4+Pj4+Pj4+IFsg ICAzMC4zNzAxMDRdIGxvd21lbV9yZXNlcnZlW106IDAgMCAwIDAKPj4+Pj4+Pj4+Pj4+IFsgICAz MC4zNzAxMDddIE5vZGUgMCBETUE6IDAqNGtCIDAqOGtCIDAqMTZrQiAwKjMya0IgMCo2NGtCCj4+ Pj4+Pj4+Pj4+PiAwKjEyOGtCCj4+Pj4+Pj4+Pj4+PiAwKjI1NmtCIDAqNTEya0IgMCoxMDI0a0Ig MCoyMDQ4a0IgMCo0MDk2a0IgPSAwa0IKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAxMTNdIE5vZGUg MCBETUEzMjogMCo0a0IgMCo4a0IgMCoxNmtCIDAqMzJrQgo+Pj4+Pj4+Pj4+Pj4gMCo2NGtCIDAq MTI4a0IKPj4+Pj4+Pj4+Pj4+IDAqMjU2a0IgMCo1MTJrQiAwKjEwMjRrQiAxKjIwNDhrQiAoTSkg NjIqNDA5NmtCIChNKSA9Cj4+Pj4+Pj4+Pj4+PiAyNTYwMDBrQgo+Pj4+Pj4+Pj4+Pj4gWyAgIDMw LjM3MDExOV0gTm9kZSAwIE5vcm1hbDogMio0a0IgKE0pIDMqOGtCIChNRSkgMioxNmtCCj4+Pj4+ Pj4+Pj4+PiAoVUUpIDMqMzJrQgo+Pj4+Pj4+Pj4+Pj4gKFVNKSAxKjY0a0IgKFUpIDIqMTI4a0Ig KE0pIDIqMjU2a0IgKE1FKSAzKjUxMmtCIChNRSkKPj4+Pj4+Pj4+Pj4+IDMqMTAyNGtCIChNRSkK Pj4+Pj4+Pj4+Pj4+IDMqMjA0OGtCIChVTUUpIDE0MzYqNDA5NmtCIChNKSA9IDU4OTM2MDBrQgo+ Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDEyOV0gTm9kZSAwIGh1Z2VwYWdlc190b3RhbD0wIGh1Z2Vw YWdlc19mcmVlPTAKPj4+Pj4+Pj4+Pj4+IGh1Z2VwYWdlc19zdXJwPTAgaHVnZXBhZ2VzX3NpemU9 MTA0ODU3NmtCCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTMwXSAwIHRvdGFsIHBhZ2VjYWNoZSBw YWdlcwo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDEzMl0gMCBwYWdlcyBpbiBzd2FwIGNhY2hlCj4+ Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTM0XSBTd2FwIGNhY2hlIHN0YXRzOiBhZGQgMCwgZGVsZXRl IDAsIGZpbmQgMC8wCj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTM1XSBGcmVlIHN3YXAgID0gMGtC Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcwMTM2XSBUb3RhbCBzd2FwID0gMGtCCj4+Pj4+Pj4+Pj4+ PiBbICAgMzAuMzcwMTM3XSAyMTY0NjA5IHBhZ2VzIFJBTQo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3 MDEzOV0gMCBwYWdlcyBIaWdoTWVtL01vdmFibGVPbmx5Cj4+Pj4+Pj4+Pj4+PiBbICAgMzAuMzcw MTQwXSA2MTIzMzEgcGFnZXMgcmVzZXJ2ZWQKPj4+Pj4+Pj4+Pj4+IFsgICAzMC4zNzAxNDFdIDAg cGFnZXMgaHdwb2lzb25lZAo+Pj4+Pj4+Pj4+Pj4gWyAgIDMwLjM3MDE0M10gRE1BOiBmYWlsZWQg dG8gYWxsb2NhdGUgMjU2IEtpQiBwb29sIGZvcgo+Pj4+Pj4+Pj4+Pj4gYXRvbWljCj4+Pj4+Pj4+ Pj4+PiBjb2hlcmVudCBhbGxvY2F0aW9uCj4+Pj4+Pj4+Pj4+IER1cmluZyBteSB0ZXN0aW5nIEkg c2F3IHRoZSBzYW1lIGVycm9yIGFuZCBDaGVuJ3MgIHNvbHV0aW9uCj4+Pj4+Pj4+Pj4+IGNvcnJl Y3RlZCBpdCAuCj4+Pj4+Pj4+Pj4gV2hpY2ggY29tYmluYXRpb24geW91IGFyZSB1c2luZyBvbiB5 b3VyIHNpZGU/IEkgYW0gdXNpbmcKPj4+Pj4+Pj4+PiBQcmFiaGFrYXIncwo+Pj4+Pj4+Pj4+IHN1 Z2dlc3RlZCBlbnZpcm9ubWVudCBhbmQgY2FuIHJlcHJvZHVjZSB0aGUgaXNzdWUKPj4+Pj4+Pj4+ PiB3aXRoIG9yIHdpdGhvdXQgQ2hlbidzIGNyYXNoa2VybmVsIHN1cHBvcnQgYWJvdmUgNEcgcGF0 Y2hzZXQuCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBJIGFtIGFsc28gdXNpbmcgYSBUaHVuZGVyWDIg cGxhdGZvcm0gd2l0aCBsYXRlc3QgbWFrZWR1bXBmaWxlCj4+Pj4+Pj4+Pj4gY29kZSBhbmQKPj4+ Pj4+Pj4+PiBrZXhlYy10b29scyAod2l0aCB0aGUgc3VnZ2VzdGVkIHBhdGNoCj4+Pj4+Pj4+Pj4g PAo+Pj4+Pj4+Pj4+Cj4+IGh0dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMvX19odHRwczovL2xpc3Rz LmluZnJhZGVhZC5vcmcvcGlwZXJtYWlsL2tleGVjLzIwMjAtTWF5LzAyNTEyOC5odG1sX187ISFH cWl2UFZhN0JyaW8hSjZsVWlnNTgtR3c2VEtabkVFWXpFZVNVMzZULTFTcWxCMWtJbVUwMHh0WF9s c3M1VHgtSmJVbUxFOVRKQzNmb1hCTGckCj4+Pj4+Pj4+Pj4+ICkuCj4+Pj4+Pj4+Pj4gVGhhbmtz LAo+Pj4+Pj4+Pj4+IEJodXBlc2gKPj4+Pj4+Pj4+IEkgZGlkIHRoaXMgYWN0aXZpdHkgNSBtb250 aHMgYWdvIGFuZCBJIGhhdmUgbW92ZWQgb24gdG8gb3RoZXIKPj4+Pj4+Pj4+IGFjdGl2aXRpZXMu IE15IERNQSBmYWlsdXJlcyB3ZXJlIHJlbGF0ZWQgdG8gUENJIGRldmljZXMgdGhhdCBjb3VsZAo+ Pj4+Pj4+Pj4gbm90IGJlIGVudW1lcmF0ZWQgYmVjYXVzZSAgbG93LURNQSBzcGFjZSB3YXMgbm90 ICBhdmFpbGFibGUgd2hlbgo+Pj4+Pj4+Pj4gY3Jhc2hrZXJuZWwgd2FzIG1vdmVkIGFib3ZlIDRH OyBJIGRvbuKAmXQgcmVjYWxsIHRoZSBleGFjdCBwbGF0Zm9ybS4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEZvciB0aGlzIGZhaWx1cmUgLAo+Pj4+Pj4+Pj4KPj4+Pj4+ Pj4+Pj4+IERNQTogZmFpbGVkIHRvIGFsbG9jYXRlIDI1NiBLaUIgcG9vbCBmb3IgYXRvbWljCj4+ Pj4+Pj4+Pj4+PiBjb2hlcmVudCBhbGxvY2F0aW9uCj4+Pj4+Pj4+PiBJcyBkdWUgdG8gOgo+Pj4+ Pj4+Pj4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiAzNjE4MDgyYwo+Pj4+Pj4+Pj4gKCJhcm02NCB1c2Ug Ym90aCBaT05FX0RNQSBhbmQgWk9ORV9ETUEzMiIpCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gV2l0aCB0 aGUgaW50cm9kdWN0aW9uIG9mIFpPTkVfRE1BIHRvIHN1cHBvcnQgdGhlIFJhc3BiZXJyeSBETUEK Pj4+Pj4+Pj4+IHJlZ2lvbiBiZWxvdyAxRywgdGhlIGNyYXNoa2VybmVsIGlzIHBsYWNlZCBpbiB0 aGUgdXBwZXIgNEcKPj4+Pj4+Pj4+IFpPTkVfRE1BXzMyIHJlZ2lvbi4gU2luY2UgdGhlIGNyYXNo a2VybmVsIGRvZXMgbm90IGhhdmUgYWNjZXNzCj4+Pj4+Pj4+PiB0byB0aGUgWk9ORV9ETUEgcmVn aW9uLCBpdCBwcmludHMgb3V0IGNhbGwgdHJhY2UgZHVyaW5nIGJvb3R1cC4KPj4+Pj4+Pj4+Cj4+ Pj4+Pj4+PiBJdCBpcyBkdWUgdG8gaGF2aW5nIHRoaXMgQ09ORklHIGl0ZW0gIE9OICA6Cj4+Pj4+ Pj4+Pgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IENPTkZJR19aT05FX0RNQT15Cj4+Pj4+Pj4+Pgo+Pj4+ Pj4+Pj4gVHVybmluZyBvZmYgWk9ORV9ETUEgZml4ZXMgYSBpc3N1ZSBhbmQgUmFzcGJlcnJ5IFBJ IDQgd2lsbAo+Pj4+Pj4+Pj4gdXNlIHRoZSBkZXZpY2UgdHJlZSB0byBzcGVjaWZ5IG1lbW9yeSBi ZWxvdyAxRy4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+PiBEaXNhYmxpbmcgWk9ORV9ETUEg aXMgdGVtcG9yYXJ5IHNvbHV0aW9uLiAgV2UgbWF5IG5lZWQgcHJvcGVyCj4+Pj4+Pj4+IHNvbHV0 aW9uCj4+Pj4+Pj4gUGVyaGFwcyB0aGUgUmFzcGJlcnJ5IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24g ZGVwZW5kZW5jaWVzIG5lZWQKPj4+Pj4+PiBzZXBhcmF0ZWQgIGZyb20g4oCcc2VydmVyIGNsYXNz 4oCdIEFybSAgZXF1aXBtZW50ID8gIE9yIGF1dG8tY29uZmlndXJlZCBvbgo+Pj4+Pj4+IGJvb3Qg PyAgQ29uc3VsdCBhbiBleHBlcnQgOy0pCj4+Pj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4+Cj4+Pj4+Pj4+ PiBJIHdvdWxkIGxpa2UgdG8gc2VlIENoZW7igJlzIGZlYXR1cmUgYWRkZWQgLCBwZXJoYXBzIGFz Cj4+Pj4+Pj4+PiBFWFBFUklNRU5UQUwsICBzbyB3ZSBjYW4gZ2V0IHNvbWUgY29uZmlndXJhdGlv biB0ZXN0aW5nIGRvbmUgb24KPj4+Pj4+Pj4+IGl0LiAgIEl0IGNvcnJlY3RzIGhhdmluZyBhIERN QSB6b25lIGluIGxvdyBtZW1vcnkgd2hpbGUgY3Jhc2gtCj4+Pj4+Pj4+PiBrZXJuZWwgaXMgYWJv dmUgNEdCLiAgVGhpcyBoYXMgYmVlbiBnb2luZyBvbiBmb3IgYSB5ZWFyIG5vdy4KPj4+Pj4+Pj4g SSB3aWxsIGFsc28gbGlrZSB0aGlzIHBhdGNoIHRvIGJlIGFkZGVkIGluIExpbnV4IGFzIGVhcmx5 IGFzCj4+Pj4+Pj4+IHBvc3NpYmxlLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBJc3N1ZSBtZW50aW9uZWQg YnkgbWUgaGFwcGVucyB3aXRoIG9yIHdpdGhvdXQgdGhpcyBwYXRjaC4KPj4+Pj4+Pj4KPj4+Pj4+ Pj4gVGhpcyBwYXRjaC1zZXQgY2FuIGNvbnNpZGVyIGZpeGluZyBiZWNhdXNlIGl0IHVzZXMgbG93 IG1lbW9yeSBmb3IKPj4+Pj4+Pj4gRE1BCj4+Pj4+Pj4+ICYgc3dpb3RsYiBvbmx5Lgo+Pj4+Pj4+ PiBXZSBjYW4gY29uc2lkZXIgcmVzdHJpY3RpbmcgY3Jhc2hrZXJuZWwgd2l0aGluIHRoZSByZXF1 aXJlZCByYW5nZQo+Pj4+Pj4+PiBsaWtlIGJlbG93Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IGRpZmYgLS1n aXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuYwo+Pj4+Pj4+PiBp bmRleCA3ZjllNWE2ZGM0OGMuLmJkNjdiOTBkMzViZCAxMDA2NDQKPj4+Pj4+Pj4gLS0tIGEva2Vy bmVsL2NyYXNoX2NvcmUuYwo+Pj4+Pj4+PiArKysgYi9rZXJuZWwvY3Jhc2hfY29yZS5jCj4+Pj4+ Pj4+IEBAIC0zNTQsNyArMzU0LDcgQEAgaW50IF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsX2xv dyh2b2lkKQo+Pj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4+Pj4+ PiAgICAgICAgfQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAtICAgICAgIGxvd19iYXNlID0gbWVtYmxvY2tf ZmluZF9pbl9yYW5nZSgwLCAxVUxMIDw8IDMyLCBsb3dfc2l6ZSwKPj4+Pj4+Pj4gQ1JBU0hfQUxJ R04pOwo+Pj4+Pj4+PiArICAgICAgIGxvd19iYXNlID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZSgw LDB4YzAwMDAwMDAsIGxvd19zaXplLAo+Pj4+Pj4+PiBDUkFTSF9BTElHTik7Cj4+Pj4+Pj4+ICAg ICAgICBpZiAoIWxvd19iYXNlKSB7Cj4+Pj4+Pj4+ICAgICAgICAgICAgICAgIHByX2VycigiQ2Fu bm90IHJlc2VydmUgJWxkTUIgY3Jhc2hrZXJuZWwgbG93IG1lbW9yeSwKPj4+Pj4+Pj4gcGxlYXNl IHRyeSBzbWFsbGVyIHNpemUuXG4iLAo+Pj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcpKGxvd19zaXplID4+IDIwKSk7Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+Cj4+Pj4+Pj4g ICAgIEkgc3VzcGVjdCAgMHhjMDAwMDAwMCAgd291bGQgbmVlZCB0byBiZSBhIENPTkZJRyBpdGVt ICBhbmQgbm90Cj4+Pj4+Pj4gaGFyZC1jb2RlZC4KPj4+Pj4+Pgo+Pj4+Pj4gaWYgeW91IGNvbnNp ZGVyIHRoaXMgYXMgdmFsaWQgY2hhbmdlLCAgY2FuIHlvdSBwbGVhc2UgaW5jb3Jwb3JhdGUgYXMK Pj4+Pj4+IHBhcnQgb2YgeW91ciBwYXRjaC1zZXQuCj4+Pj4+IEFmdGVyIGNvbW1pdCAxYThlMWNl ZjcgKCJhcm02NDogdXNlIGJvdGggWk9ORV9ETUEgYW5kIFpPTkVfRE1BMzIiKe+8jHRoZSAwLQo+ Pj4+PiA0RyBtZW1vcnkgaXMgc3BsaXRlZAo+Pj4+PiB0byBETUEgW21lbSAweDAwMDAwMDAwMDAw MDAwMDAtMHgwMDAwMDAwMDNmZmZmZmZmXSBhbmQgRE1BMzIgW21lbQo+Pj4+PiAweDAwMDAwMDAw NDAwMDAwMDAtMHgwMDAwMDAwMGZmZmZmZmZmXSBvbiBhcm02NC4KPj4+Pj4KPj4+Pj4gIEZyb20g dGhlIGFib3ZlIGRpc2N1c3Npb24sIG9uIHlvdXIgcGxhdGZvcm0sIHRoZSBsb3cgY3Jhc2hrZXJu ZWwgZmFsbCBpbgo+Pj4+PiBETUEzMiByZWdpb24sIGJ1dCB5b3VyIGVudmlyb25tZW50IG5lZWRz IHRvIGFjY2VzcyBETUEKPj4+Pj4gcmVnaW9uLCBzbyB0aGVyZSBpcyB0aGUgY2FsbCB0cmFjZS4K Pj4+Pj4KPj4+Pj4gSSBoYXZlIGEgcXVlc3Rpb24sIHdoeSBkbyB5b3UgY2hvb3NlIDB4YzAwMDAw MDAgaGVyZT8KPj4+Pj4KPj4+Pj4gQmVzaWRlcywgdGhpcyBpcyBjb21tb24gY29kZSwgd2UgYWxz byBuZWVkIHRvIGNvbnNpZGVyIGFib3V0IHg4Ni4KPj4+Pj4KPj4+PiAgICsgbnNhZW56anVsaWVu bmVAc3VzZS5kZQo+PiBUaGFua3MgZm9yIGFkZGluZyBtZSB0byB0aGUgY29udmVyc2F0aW9uLCBh bmQgc29ycnkgZm9yIHRoZSBoZWFkYWNoZXMuCj4+Cj4+Pj4gICAgRXhhY3RseSAuICBUaGlzIGlz IHdoeSBpdCBuZWVkcyB0byBiZSBhIENPTkZJRyBvcHRpb24gZm9yICBSYXNwYmVycnkKPj4+PiAu LiwgIG9yIGRldmljZSB0cmVlIG9wdGlvbi4KPj4+Pgo+Pj4+Cj4+Pj4gICAgV2UgY291bGQgcmV2 ZXJ0IDFhOGUxY2VmNyBzaW5jZSBpdCBicm9rZSAgQXJtIGtkdW1wIHRvby4KPj4+IFdlbGwsIHVu Zm9ydHVuYXRlbHkgdGhlIHBhdGNoIGZvciBjb21taXQgMWE4ZTFjZWY3NjAzICgiYXJtNjQ6IHVz ZQo+Pj4gYm90aCBaT05FX0RNQSBhbmQgWk9ORV9ETUEzMiIpIHdhcyBub3QgQ2MnZWQgdG8gdGhl IGtleGVjIG1haWxpbmcKPj4+IGxpc3QsIHRodXMgd2UgY291bGRuJ3QgZ2V0IG1hbnkgZXllcyBv biBpdCBmb3IgYSB0aG9yb3VnaCByZXZpZXcgZnJvbQo+Pj4ga2V4ZWMva2R1bXAgcC1vLXYuCj4+ Pgo+Pj4gQWxzbyB3ZSBoaXN0b3JpY2FsbHkgbmV2ZXIgaGFkIGRpc3RpbmN0aW9uIGluIGNvbW1v biBhcmNoIGNvZGUgb24gdGhlCj4+PiBiYXNpcyBvZiB0aGUgaW50ZW5kZWQgZW5kIHVzZS1jYXNl OiBlbWJlZGRlZCwgc2VydmVyIG9yIGF1dG9tb3RpdmUsIHNvCj4+PiBJIGFtIG5vdCBzdXJlIGlu dHJvZHVjaW5nIGEgUmFzcGJlcnJ5IHNwZWNpZmljIENPTkZJRyBvcHRpb24gd291bGQgYmUKPj4+ IGEgZ29vZCBpZGVhLgo+PiArMQo+Pgo+PiAgRnJvbSB0aGUgZGlzdHJvcyBwZXJzcGVjdGl2ZSBp dCdzIHZlcnkgaW1wb3J0YW50IHRvIGtlZXAgYSBzaW5nbGUga2VybmVsIGltYWdlLgo+Pgo+Pj4g U28sIHJhdGhlciB0aGFuIHJldmVydGluZyB0aGUgcGF0Y2gsIHdlIGNhbiBsb29rIGF0IGFkZHJl c3NpbmcgdGhlCj4+PiBzYW1lIHByb3Blcmx5IHRoaXMgdGltZSAtIGVzcGVjaWFsbHkgZnJvbSBh IGtkdW1wIHAtby12Lgo+Pj4gVGhpcyBpc3N1ZSBoYXMgYmVlbiByZXBvcnRlZCBieSBzb21lIFJl ZCBIYXQgYXJtNjQgcGFydG5lcnMgd2l0aAo+Pj4gdXBzdHJlYW0ga2VybmVsIGFsc28gYW5kIGFz IHdlIGhhdmUgbm90aWNlZCBpbiB0aGUgcGFzdCBhcyB3ZWxsLAo+Pj4gaGFyZGNvZGluZyB0aGUg cGxhY2VtZW50IG9mIHRoZSBjcmFzaGtlcm5lbCBiYXNlIGFkZHJlc3MgKHVubGVzcyB0aGUKPj4+ IGJhc2UgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYnkgYSBjcmFzaGtlcm5lbD1YQFkgbGlrZSBib290 YXJncykgaXMgYWxzbwo+Pj4gbm90IGEgcG9ydGFibGUgc3VnZ2VzdGlvbi4KPj4+Cj4+PiBJIGFt IHdvcmtpbmcgb24gYSBwb3NzaWJsZSBmaXggYW5kIHdpbGwgaGF2ZSBtb3JlIHVwZGF0ZXMgb24g dGhlIHNhbWUKPj4+IGluIGEgZGF5LW9yLXR3by4KPj4gUGxlYXNlIGtlZXAgbWUgaW4gdGhlIGxv b3AsIHdlJ3ZlIGFsc28gaGFkIGlzc3VlcyBwb2ludGluZyB0byB0aGlzIHJlcG9ydGVkIGJ5Cj4+ IFNVU0UgcGFydG5lcnMuIEkgY2FuIGRvIHNvbWUgdGVzdGluZyBib3RoIG9uIHRoZSBSUGk0IGFu ZCBvbiBiaWcgc2VydmVycyB0aGF0Cj4+IG5lZWQgaHVnZSBjcmFzaGtlcm5lbCBzaXplcy4KPj4K Pj4gUmVnYXJkcywKPj4gTmljb2xhcwo+Pgo+Cj4gICBIaQo+Cj4gICBIYXMgdGhlcmUgYmVlbiBh bnkgcHJvZ3Jlc3Mgb24gdGhpcyA/IEl0IGFwcGVhcnMgd2UgYXJlIHN0YWxsZWQgYmVjYXVzZSBO aWNvbGFzJ3MgIGFuZCBDaGVuJ3MgY2hhbmdlcyBhcmUgbm90IGNvbXBhdGlibGUgLiBPbmUgaXMg bmVlZGVkIGZvciBSUGk0IGFuZCB0aGUgb3RoZXIgZm9yIHNlcnZlciBjbGFzcyBlcXVpcG1lbnQu Cj4KPgo+IFRoYW5rcywKPgo+IEpvaG4KPgo+CkhpIGFsbCwKClRoYW5rcyBmb3IgSm9obidzIHJl bWluZGVyLgpjb21taXQgMWE4ZTFjZWY3ICgiYXJtNjQ6IHVzZSBib3RoIFpPTkVfRE1BIGFuZCBa T05FX0RNQTMyIikgYnJva2VuIHRoZSBhcm02NCBrZHVtcCwKdGhlcmUgaXMgYSBzaW1wbGUgc29s dXRpb24gc2ltaWxhciB0byBwaydzIHRvIGZpeCB0aGlzLCBzZWUgYmVsb3c6CgpJbiBjcmFzaCBk dW1wIGtlcm5lbCwgaWYgdGhlIHBlcmlwaGVyYWxzIG5lZWQgdG8gdXNlIFpPTkVfRE1BIGxpa2Ug dGhlIHRoZSBSYXNwYmVycnkgUGkgNCwgYmFzZWQgb24KbXkgc29sdXRpb24sIHdlIGFkanVzdGVk IHRoZSBtZW1vcnkgcmFuZ2UgaW4gbWVtYmxvY2tfZmluZF9pbl9yYW5nZS4KCmRpZmYgLS1naXQg YS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuYwppbmRleCBhNzU4MGQy OTFjMzcuLmViMTZjNmQ1NGI3MyAxMDA2NDQKLS0tIGEva2VybmVsL2NyYXNoX2NvcmUuYworKysg Yi9rZXJuZWwvY3Jhc2hfY29yZS5jCkBAIC0zMjAsNiArMzIwLDcgQEAgaW50IF9faW5pdCByZXNl cnZlX2NyYXNoa2VybmVsX2xvdyh2b2lkKQogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBiYXNl LCBsb3dfYmFzZSA9IDAsIGxvd19zaXplID0gMDsKICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFs X2xvd19tZW07CiAgICAgICAgaW50IHJldDsKKyAgICAgICBwaHlzX2FkZHJfdCBjcmFzaF9tYXgg PSAxVUxMIDw8IDMyOwogCiAgICAgICAgdG90YWxfbG93X21lbSA9IG1lbWJsb2NrX21lbV9zaXpl KDFVTCA8PCAoMzIgLSBQQUdFX1NISUZUKSk7CiAKQEAgLTM1Miw3ICszNTMsMTIgQEAgaW50IF9f aW5pdCByZXNlcnZlX2NyYXNoa2VybmVsX2xvdyh2b2lkKQogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gMDsKICAgICAgICB9CiAKLSAgICAgICBsb3dfYmFzZSA9IG1lbWJsb2NrX2ZpbmRf aW5fcmFuZ2UoMCwgMVVMTCA8PCAzMiwgbG93X3NpemUsIENSQVNIX0FMSUdOKTsKKyNpZmRlZiBD T05GSUdfQVJNNjQKKyAgICAgICBpZiAoSVNfRU5BQkxFRChDT05GSUdfWk9ORV9ETUEpKSB7Cisg ICAgICAgICAgICAgICBjcmFzaF9tYXggPSBhcm02NF9kbWFfcGh5c19saW1pdDsKKyAgICAgICB9 CisjZW5kaWYKKyAgICAgICBsb3dfYmFzZSA9IG1lbWJsb2NrX2ZpbmRfaW5fcmFuZ2UoMCwgY3Jh c2hfbWF4LCBsb3dfc2l6ZSwgQ1JBU0hfQUxJR04pOwogICAgICAgIGlmICghbG93X2Jhc2UpIHsK ICAgICAgICAgICAgICAgIHByX2VycigiQ2Fubm90IHJlc2VydmUgJWxkTUIgY3Jhc2hrZXJuZWwg bG93IG1lbW9yeSwgcGxlYXNlIHRyeSBzbWFsbGVyIHNpemUuXG4iLAogICAgICAgICAgICAgICAg ICAgICAgICh1bnNpZ25lZCBsb25nKShsb3dfc2l6ZSA+PiAyMCkpOwoKClRoYW5rcywKQ2hlbiBa aG91Cgo+Cj4gLgo+CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmtleGVjIG1haWxpbmcgbGlzdAprZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8va2V4ZWMK