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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68D5FC433FE for ; Mon, 14 Mar 2022 23:38:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343725AbiCNXjx (ORCPT ); Mon, 14 Mar 2022 19:39:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34924 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343720AbiCNXjv (ORCPT ); Mon, 14 Mar 2022 19:39:51 -0400 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B28012617; Mon, 14 Mar 2022 16:38:40 -0700 (PDT) Received: by mail-pj1-x102b.google.com with SMTP id mj15-20020a17090b368f00b001c637aa358eso444821pjb.0; Mon, 14 Mar 2022 16:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=N4obkUD8+Xm15wKaQvsDfW38K//v1SvAKl3Zz6bdAF8=; b=CX0UxRl7yteSgeLkynLXlv/zDjZEe0djx5kWxYBmDLeLdB6pkgl/LH3Rqp+2e7E+ZB oDrEhVr82GizbOvFz6pRQl5HczpIMDAxcCZJsLjAowxkvvAteGe50tTBuZuj7fGmgNyW Q6jyc5nRJkTCkHHUgYobnEtL85JD8gKf2jjLXzAT+3feDX4QxgKRN9NdpqRa+0v4xfLj cWMWDw4M8JyI26GYVxHF14mzq/i2nWjorpSCOfqY+ViN2lFH1073nNxifCCW83lurE4g pMP/VSb5E0Qy5yymmk4J6Q0RHZ3RzC4UQX1cPKpB4zBl7uEv/rghiBCVaTVPEE4Sxsun ZN2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N4obkUD8+Xm15wKaQvsDfW38K//v1SvAKl3Zz6bdAF8=; b=3Ig71/qoJNTXjLDwaW9Oycw12PUCAGwQm4AL01fRe6lwPfPrnfGy1JeCwVPWtzjnrm GN+A2lVzkdSo8FVA8lbT8CAlvhP6gXrST3oRR0nRhVkcci+wp1SwPfts5JR2xSbR8D8p 5fH5Mg7PNaEDUJpZfiaIUCKx9DP9WdXE6YJhvDxSwpjEnfiEsTzk+OwAy9Ys556yRLmr 4eIh2Yt4Xmv78Im1QBlzFFpdjca6WHS0cF1EWmgUS6UzL//DB8eOLAD8ZTT8j308tCtT qJDXD49Dh+a+YmQNV59P/mwxNPrh7kxxDoyD4EeQzcA00jlXpzsoQIg8DPiFHLsNE8cV stoA== X-Gm-Message-State: AOAM533J3r81UOxsDlrJZNfo6lJdM4FU9egu7FvaDtCLUAUQzm8Api48 0ReTO1Pq3d2d/9mqWx6z56Y= X-Google-Smtp-Source: ABdhPJw8yRb7sdUwWB/JBXh4wMyTG4fG1xh0oPeDmrnBqnraMyyeVBHrVOHl/tNSRyifDNvg/Pj6Cw== X-Received: by 2002:a17:902:dacc:b0:152:268:27d9 with SMTP id q12-20020a170902dacc00b00152026827d9mr25586273plx.76.1647301119933; Mon, 14 Mar 2022 16:38:39 -0700 (PDT) Received: from barry-desktop.hub ([2407:7000:8942:5500:8d71:31d1:e9fc:88f3]) by smtp.gmail.com with ESMTPSA id b10-20020a056a00114a00b004f784ba5e6asm15128066pfm.17.2022.03.14.16.38.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Mar 2022 16:38:39 -0700 (PDT) From: Barry Song <21cnbao@gmail.com> To: yuzhao@google.com Cc: 21cnbao@gmail.com, Hi-Angel@yandex.ru, Michael@michaellarabel.com, ak@linux.intel.com, akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com, axboe@kernel.dk, bgeffon@google.com, catalin.marinas@arm.com, corbet@lwn.net, d@chaos-reins.com, dave.hansen@linux.intel.com, djbyrne@mtu.edu, hannes@cmpxchg.org, hdanton@sina.com, heftig@archlinux.org, holger@applied-asynchrony.com, jsbarnes@google.com, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mgorman@suse.de, mhocko@kernel.org, oleksandr@natalenko.name, page-reclaim@google.com, riel@surriel.com, rppt@kernel.org, sofia.trinh@edi.works, steven@liquorix.net, suleiman@google.com, szhai2@cs.rochester.edu, torvalds@linux-foundation.org, vbabka@suse.cz, will@kernel.org, willy@infradead.org, x86@kernel.org, ying.huang@intel.com Subject: Re: [PATCH v7 04/12] mm: multigenerational LRU: groundwork Date: Tue, 15 Mar 2022 12:38:12 +1300 Message-Id: <20220314233812.9011-1-21cnbao@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 15, 2022 at 5:45 AM Yu Zhao wrote: > > On Mon, Mar 14, 2022 at 5:12 AM Barry Song <21cnbao@gmail.com> wrote: > > > > > > > > > > > > > > > We used to put a faulted file page in inactive, if we access it a > > > > > > > second time, it can be promoted > > > > > > > to active. then in recent years, we have also applied this to anon > > > > > > > pages while kernel adds > > > > > > > workingset protection for anon pages. so basically both anon and file > > > > > > > pages go into the inactive > > > > > > > list for the 1st time, if we access it for the second time, they go to > > > > > > > the active list. if we don't access > > > > > > > it any more, they are likely to be reclaimed as they are inactive. > > > > > > > we do have some special fastpath for code section, executable file > > > > > > > pages are kept on active list > > > > > > > as long as they are accessed. > > > > > > > > > > > > Yes. > > > > > > > > > > > > > so all of the above concerns are actually not that correct? > > > > > > > > > > > > They are valid concerns but I don't know any popular workloads that > > > > > > care about them. > > > > > > > > > > Hi Yu, > > > > > here we can get a workload in Kim's patchset while he added workingset > > > > > protection > > > > > for anon pages: > > > > > https://patchwork.kernel.org/project/linux-mm/cover/1581401993-20041-1-git-send-email-iamjoonsoo.kim@lge.com/ > > > > > > > > Thanks. I wouldn't call that a workload because it's not a real > > > > application. By popular workloads, I mean applications that the > > > > majority of people actually run on phones, in cloud, etc. > > > > > > > > > anon pages used to go to active rather than inactive, but kim's patchset > > > > > moved to use inactive first. then only after the anon page is accessed > > > > > second time, it can move to active. > > > > > > > > Yes. To clarify, the A-bit doesn't really mean the first or second > > > > access. It can be many accesses each time it's set. > > > > > > > > > "In current implementation, newly created or swap-in anonymous page is > > > > > > > > > > started on the active list. Growing the active list results in rebalancing > > > > > active/inactive list so old pages on the active list are demoted to the > > > > > inactive list. Hence, hot page on the active list isn't protected at all. > > > > > > > > > > Following is an example of this situation. > > > > > > > > > > Assume that 50 hot pages on active list and system can contain total > > > > > 100 pages. Numbers denote the number of pages on active/inactive > > > > > list (active | inactive). (h) stands for hot pages and (uo) stands for > > > > > used-once pages. > > > > > > > > > > 1. 50 hot pages on active list > > > > > 50(h) | 0 > > > > > > > > > > 2. workload: 50 newly created (used-once) pages > > > > > 50(uo) | 50(h) > > > > > > > > > > 3. workload: another 50 newly created (used-once) pages > > > > > 50(uo) | 50(uo), swap-out 50(h) > > > > > > > > > > As we can see, hot pages are swapped-out and it would cause swap-in later." > > > > > > > > > > Is MGLRU able to avoid the swap-out of the 50 hot pages? > > > > > > > > I think the real question is why the 50 hot pages can be moved to the > > > > inactive list. If they are really hot, the A-bit should protect them. > > > > > > This is a good question. > > > > > > I guess it  is probably because the current lru is trying to maintain a balance > > > between the sizes of active and inactive lists. Thus, it can shrink active list > > > even though pages might be still "hot" but not the recently accessed ones. > > > > > > 1. 50 hot pages on active list > > > 50(h) | 0 > > > > > > 2. workload: 50 newly created (used-once) pages > > > 50(uo) | 50(h) > > > > > > 3. workload: another 50 newly created (used-once) pages > > > 50(uo) | 50(uo), swap-out 50(h) > > > > > > the old kernel without anon workingset protection put workload 2 on active, so > > > pushed 50 hot pages from active to inactive. workload 3 would further contribute > > > to evict the 50 hot pages. > > > > > > it seems mglru doesn't demote pages from the youngest generation to older > > > generation only in order to balance the list size? so mglru is probably safe > > > in these cases. > > > > > > I will run some tests mentioned in Kim's patchset and report the result to you > > > afterwards. > > > > > > > Hi Yu, > > I did find putting faulted pages to the youngest generation lead to some > > regression in the case ebizzy Kim's patchset mentioned while he tried > > to support workingset protection for anon pages. > > i did a little bit modification for rand_chunk() which is probably similar > > with the modifcation() Kim mentioned in his patchset. The modification > > can be found here: > > https://github.com/21cnbao/ltp/commit/7134413d747bfa9ef > > > > The test env is a x86 machine in which I have set memory size to 2.5GB and > > set zRAM to 2GB and disabled external disk swap. > > > > with the vanilla kernel: > > \time -v ./a.out -vv -t 4 -s 209715200 -S 200000 > > > > so we have 10 chunks and 4 threads, each trunk is 209715200(200MB) > > > > typical result: > >         Command being timed: "./a.out -vv -t 4 -s 209715200 -S 200000" > >         User time (seconds): 36.19 > >         System time (seconds): 229.72 > >         Percent of CPU this job got: 371% > >         Elapsed (wall clock) time (h:mm:ss or m:ss): 1:11.59 > >         Average shared text size (kbytes): 0 > >         Average unshared data size (kbytes): 0 > >         Average stack size (kbytes): 0 > >         Average total size (kbytes): 0 > >         Maximum resident set size (kbytes): 2166196 > >         Average resident set size (kbytes): 0 > >         Major (requiring I/O) page faults: 9990128 > >         Minor (reclaiming a frame) page faults: 33315945 > >         Voluntary context switches: 59144 > >         Involuntary context switches: 167754 > >         Swaps: 0 > >         File system inputs: 2760 > >         File system outputs: 8 > >         Socket messages sent: 0 > >         Socket messages received: 0 > >         Signals delivered: 0 > >         Page size (bytes): 4096 > >         Exit status: 0 > > > > with gen_lru and lru_gen/enabled=0x3: > > typical result: > > Command being timed: "./a.out -vv -t 4 -s 209715200 -S 200000" > > User time (seconds): 36.34 > > System time (seconds): 276.07 > > Percent of CPU this job got: 378% > > Elapsed (wall clock) time (h:mm:ss or m:ss): 1:22.46 > >            **** 15% time + > > Average shared text size (kbytes): 0 > > Average unshared data size (kbytes): 0 > > Average stack size (kbytes): 0 > > Average total size (kbytes): 0 > > Maximum resident set size (kbytes): 2168120 > > Average resident set size (kbytes): 0 > > Major (requiring I/O) page faults: 13362810 > >              ***** 30% page fault + > > Minor (reclaiming a frame) page faults: 33394617 > > Voluntary context switches: 55216 > > Involuntary context switches: 137220 > > Swaps: 0 > > File system inputs: 4088 > > File system outputs: 8 > > Socket messages sent: 0 > > Socket messages received: 0 > > Signals delivered: 0 > > Page size (bytes): 4096 > > Exit status: 0 > > > > with gen_lru and lru_gen/enabled=0x7: > > typical result: > > Command being timed: "./a.out -vv -t 4 -s 209715200 -S 200000" > > User time (seconds): 36.13 > > System time (seconds): 251.71 > > Percent of CPU this job got: 378% > > Elapsed (wall clock) time (h:mm:ss or m:ss): 1:16.00 > >          *****better than enabled=0x3, worse than vanilla > > Average shared text size (kbytes): 0 > > Average unshared data size (kbytes): 0 > > Average stack size (kbytes): 0 > > Average total size (kbytes): 0 > > Maximum resident set size (kbytes): 2120988 > > Average resident set size (kbytes): 0 > > Major (requiring I/O) page faults: 12706512 > > Minor (reclaiming a frame) page faults: 33422243 > > Voluntary context switches: 49485 > > Involuntary context switches: 126765 > > Swaps: 0 > > File system inputs: 2976 > > File system outputs: 8 > > Socket messages sent: 0 > > Socket messages received: 0 > > Signals delivered: 0 > > Page size (bytes): 4096 > > Exit status: 0 > > > > I can also reproduce the problem on arm64. > > > > I am not saying this is going to block mglru from being mainlined. But  I am > > still curious if this is an issue worth being addressed somehow in mglru. > > You've missed something very important: *thoughput* :) > noop :-) in the test case, there are 4 threads. they are searching a key in 10 chunks of memory. for each chunk, the size is 200MB. a "random" chunk index is returned for those threads to search. but chunk2 is the hottest, and chunk3, 7, 4 are relatively hotter than others. static inline unsigned int rand_chunk(void) { /* simulate hot and cold chunk */ unsigned int rand[16] = {2, 2, 3, 4, 5, 2, 6, 7, 9, 2, 8, 3, 7, 2, 2, 4}; static int nr = 0; return rand[nr++%16]; } each thread does search_mem(): static unsigned int search_mem(void) { record_t key, *found; record_t *src, *copy; unsigned int chunk; size_t copy_size = chunk_size; unsigned int i; unsigned int state = 0; /* run 160 loops or till timeout */ for (i = 0; threads_go == 1 && i < 160; i++) { chunk = rand_chunk(); src = mem[chunk]; ... copy = alloc_mem(copy_size); ... memcpy(copy, src, copy_size); key = rand_num(copy_size / record_size, &state); bsearch(&key, copy, copy_size / record_size, record_size, compare); /* Below check is mainly for memory corruption or other bug */ if (found == NULL) { fprintf(stderr, "Couldn't find key %zd\n", key); exit(1); } } /* end if ! touch_pages */ free_mem(copy, copy_size); } return (i); } each thread picks up a chunk, then allocates a new memory and copies the chunk to the new allocated memory, and searches a key in the allocated memory. as i have set time to rather big by -S, so each thread actually exits while it completes 160 loops. $ \time -v ./ebizzy -t 4 -s $((200*1024*1024)) -S 6000000 so the one who finishes the whole jobs earlier wins in throughput as well. > Dollars to doughnuts there was a large increase in throughput -- I > haven't tried this benchmark but I've seen many reports similar to > this one. I have no doubt about this. I am just trying to figure out some potential we can further achieve in mglru. Thanks, Barry 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id D49D6C433EF for ; Mon, 14 Mar 2022 23:40:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=jkrGFYgCJXWmRgVmfy+z8OYbdH8jLkRH02NwYlLiBlQ=; b=SOC4WNsScUXYpn EVg0+JLvFxudXYF5TN5qSnWlWfndPXsMGDgeNl78IpCFNvulAlU+KpAt3svIDzbdzCNZp8PyX1vpL iLO318KJ/gvMP+05/0OrKZCEwm+/PBDSt6F4QNVZIPSvf03jgkBs49STj8UCm4ycbmRHjz4MqTWET 4Daqx4pLN1jrbzPdFQgikhWXwYsX7HwhHI3Y1/HDaVY8mUpUKDkYKNlANZ1CN3inROiQtHc9QW7Gu WkCeg7+ejMJg3aBKTHnzhlkjgLjbpwXq19L9jJAf0saJDuIs2KgmJOi0d6vlSbvfDZ76RJuHVi48Q 8TF6IoRhj6uXaNKmnEvQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nTuH7-007CfG-8J; Mon, 14 Mar 2022 23:38:53 +0000 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nTuH3-007CcX-Is for linux-arm-kernel@lists.infradead.org; Mon, 14 Mar 2022 23:38:51 +0000 Received: by mail-pj1-x1034.google.com with SMTP id gj15-20020a17090b108f00b001bef86c67c1so855287pjb.3 for ; Mon, 14 Mar 2022 16:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=N4obkUD8+Xm15wKaQvsDfW38K//v1SvAKl3Zz6bdAF8=; b=CX0UxRl7yteSgeLkynLXlv/zDjZEe0djx5kWxYBmDLeLdB6pkgl/LH3Rqp+2e7E+ZB oDrEhVr82GizbOvFz6pRQl5HczpIMDAxcCZJsLjAowxkvvAteGe50tTBuZuj7fGmgNyW Q6jyc5nRJkTCkHHUgYobnEtL85JD8gKf2jjLXzAT+3feDX4QxgKRN9NdpqRa+0v4xfLj cWMWDw4M8JyI26GYVxHF14mzq/i2nWjorpSCOfqY+ViN2lFH1073nNxifCCW83lurE4g pMP/VSb5E0Qy5yymmk4J6Q0RHZ3RzC4UQX1cPKpB4zBl7uEv/rghiBCVaTVPEE4Sxsun ZN2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N4obkUD8+Xm15wKaQvsDfW38K//v1SvAKl3Zz6bdAF8=; b=cBtN0t5TOMwDh10bj/wW5C6+R+ef6QSrImHr/Vd7SNZh7Cx+QD516bllU/2mZgiiu+ xx8ugmI4TOqV2/kohFpqPsL1migHlEQKQR7RDlMcJU/L5XXbu7FuC/qa7QEtWSxbBM6R uhCme7i+BOI1en2erdqcpAePPja7CqvwLMEXU5wTgqrsvKU3pdJKq1KCpzxBDWReGk5v YyECr8DP/h+cDUA18BWdiIDr4mo7YDYhVNcK6Sa0EqDz64CxDVy6pTOyY7JgrXYrZD8E zG8YACpqvJTELbveWc5hvwsYmgOr6hAsAHqN8rQzS3RplNOTJFZjfBMNIGqyXNSjX9DU ahVQ== X-Gm-Message-State: AOAM533qFRO+92lVlHzGei0OQZfK8xdLw4MSlYGx9zadeyMPbv2RNqEs ahrs2pKJsZ8mXlvg+7yXyGg= X-Google-Smtp-Source: ABdhPJw8yRb7sdUwWB/JBXh4wMyTG4fG1xh0oPeDmrnBqnraMyyeVBHrVOHl/tNSRyifDNvg/Pj6Cw== X-Received: by 2002:a17:902:dacc:b0:152:268:27d9 with SMTP id q12-20020a170902dacc00b00152026827d9mr25586273plx.76.1647301119933; Mon, 14 Mar 2022 16:38:39 -0700 (PDT) Received: from barry-desktop.hub ([2407:7000:8942:5500:8d71:31d1:e9fc:88f3]) by smtp.gmail.com with ESMTPSA id b10-20020a056a00114a00b004f784ba5e6asm15128066pfm.17.2022.03.14.16.38.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Mar 2022 16:38:39 -0700 (PDT) From: Barry Song <21cnbao@gmail.com> To: yuzhao@google.com Cc: 21cnbao@gmail.com, Hi-Angel@yandex.ru, Michael@michaellarabel.com, ak@linux.intel.com, akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com, axboe@kernel.dk, bgeffon@google.com, catalin.marinas@arm.com, corbet@lwn.net, d@chaos-reins.com, dave.hansen@linux.intel.com, djbyrne@mtu.edu, hannes@cmpxchg.org, hdanton@sina.com, heftig@archlinux.org, holger@applied-asynchrony.com, jsbarnes@google.com, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mgorman@suse.de, mhocko@kernel.org, oleksandr@natalenko.name, page-reclaim@google.com, riel@surriel.com, rppt@kernel.org, sofia.trinh@edi.works, steven@liquorix.net, suleiman@google.com, szhai2@cs.rochester.edu, torvalds@linux-foundation.org, vbabka@suse.cz, will@kernel.org, willy@infradead.org, x86@kernel.org, ying.huang@intel.com Subject: Re: [PATCH v7 04/12] mm: multigenerational LRU: groundwork Date: Tue, 15 Mar 2022 12:38:12 +1300 Message-Id: <20220314233812.9011-1-21cnbao@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220314_163849_638565_1D38EDF2 X-CRM114-Status: GOOD ( 60.41 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBNYXIgMTUsIDIwMjIgYXQgNTo0NSBBTSBZdSBaaGFvIDx5dXpoYW9AZ29vZ2xlLmNv bT4gd3JvdGU6Cj4KPiBPbiBNb24sIE1hciAxNCwgMjAyMiBhdCA1OjEyIEFNIEJhcnJ5IFNvbmcg PDIxY25iYW9AZ21haWwuY29tPiB3cm90ZToKPiA+Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4g V2UgdXNlZCB0byBwdXQgYSBmYXVsdGVkIGZpbGUgcGFnZSBpbiBpbmFjdGl2ZSwgaWYgd2UgYWNj ZXNzIGl0IGEKPiA+ID4gPiA+ID4gPiBzZWNvbmQgdGltZSwgaXQgY2FuIGJlIHByb21vdGVkCj4g PiA+ID4gPiA+ID4gdG8gYWN0aXZlLiB0aGVuIGluIHJlY2VudCB5ZWFycywgd2UgaGF2ZSBhbHNv IGFwcGxpZWQgdGhpcyB0byBhbm9uCj4gPiA+ID4gPiA+ID4gcGFnZXMgd2hpbGUga2VybmVsIGFk ZHMKPiA+ID4gPiA+ID4gPiB3b3JraW5nc2V0IHByb3RlY3Rpb24gZm9yIGFub24gcGFnZXMuIHNv IGJhc2ljYWxseSBib3RoIGFub24gYW5kIGZpbGUKPiA+ID4gPiA+ID4gPiBwYWdlcyBnbyBpbnRv IHRoZSBpbmFjdGl2ZQo+ID4gPiA+ID4gPiA+IGxpc3QgZm9yIHRoZSAxc3QgdGltZSwgaWYgd2Ug YWNjZXNzIGl0IGZvciB0aGUgc2Vjb25kIHRpbWUsIHRoZXkgZ28gdG8KPiA+ID4gPiA+ID4gPiB0 aGUgYWN0aXZlIGxpc3QuIGlmIHdlIGRvbid0IGFjY2Vzcwo+ID4gPiA+ID4gPiA+IGl0IGFueSBt b3JlLCB0aGV5IGFyZSBsaWtlbHkgdG8gYmUgcmVjbGFpbWVkIGFzIHRoZXkgYXJlIGluYWN0aXZl Lgo+ID4gPiA+ID4gPiA+IHdlIGRvIGhhdmUgc29tZSBzcGVjaWFsIGZhc3RwYXRoIGZvciBjb2Rl IHNlY3Rpb24sIGV4ZWN1dGFibGUgZmlsZQo+ID4gPiA+ID4gPiA+IHBhZ2VzIGFyZSBrZXB0IG9u IGFjdGl2ZSBsaXN0Cj4gPiA+ID4gPiA+ID4gYXMgbG9uZyBhcyB0aGV5IGFyZSBhY2Nlc3NlZC4K PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gWWVzLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IHNv IGFsbCBvZiB0aGUgYWJvdmUgY29uY2VybnMgYXJlIGFjdHVhbGx5IG5vdCB0aGF0IGNvcnJlY3Q/ Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFRoZXkgYXJlIHZhbGlkIGNvbmNlcm5zIGJ1dCBJIGRv bid0IGtub3cgYW55IHBvcHVsYXIgd29ya2xvYWRzIHRoYXQKPiA+ID4gPiA+ID4gY2FyZSBhYm91 dCB0aGVtLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEhpIFl1LAo+ID4gPiA+ID4gaGVyZSB3ZSBjYW4g Z2V0IGEgd29ya2xvYWQgaW4gS2ltJ3MgcGF0Y2hzZXQgd2hpbGUgaGUgYWRkZWQgd29ya2luZ3Nl dAo+ID4gPiA+ID4gcHJvdGVjdGlvbgo+ID4gPiA+ID4gZm9yIGFub24gcGFnZXM6Cj4gPiA+ID4g PiBodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtbW0vY292ZXIvMTU4 MTQwMTk5My0yMDA0MS0xLWdpdC1zZW5kLWVtYWlsLWlhbWpvb25zb28ua2ltQGxnZS5jb20vCj4g PiA+ID4KPiA+ID4gPiBUaGFua3MuIEkgd291bGRuJ3QgY2FsbCB0aGF0IGEgd29ya2xvYWQgYmVj YXVzZSBpdCdzIG5vdCBhIHJlYWwKPiA+ID4gPiBhcHBsaWNhdGlvbi4gQnkgcG9wdWxhciB3b3Jr bG9hZHMsIEkgbWVhbiBhcHBsaWNhdGlvbnMgdGhhdCB0aGUKPiA+ID4gPiBtYWpvcml0eSBvZiBw ZW9wbGUgYWN0dWFsbHkgcnVuIG9uIHBob25lcywgaW4gY2xvdWQsIGV0Yy4KPiA+ID4gPgo+ID4g PiA+ID4gYW5vbiBwYWdlcyB1c2VkIHRvIGdvIHRvIGFjdGl2ZSByYXRoZXIgdGhhbiBpbmFjdGl2 ZSwgYnV0IGtpbSdzIHBhdGNoc2V0Cj4gPiA+ID4gPiBtb3ZlZCB0byB1c2UgaW5hY3RpdmUgZmly c3QuIHRoZW4gb25seSBhZnRlciB0aGUgYW5vbiBwYWdlIGlzIGFjY2Vzc2VkCj4gPiA+ID4gPiBz ZWNvbmQgdGltZSwgaXQgY2FuIG1vdmUgdG8gYWN0aXZlLgo+ID4gPiA+Cj4gPiA+ID4gWWVzLiBU byBjbGFyaWZ5LCB0aGUgQS1iaXQgZG9lc24ndCByZWFsbHkgbWVhbiB0aGUgZmlyc3Qgb3Igc2Vj b25kCj4gPiA+ID4gYWNjZXNzLiBJdCBjYW4gYmUgbWFueSBhY2Nlc3NlcyBlYWNoIHRpbWUgaXQn cyBzZXQuCj4gPiA+ID4KPiA+ID4gPiA+ICJJbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBuZXds eSBjcmVhdGVkIG9yIHN3YXAtaW4gYW5vbnltb3VzIHBhZ2UgaXMKPiA+ID4gPiA+Cj4gPiA+ID4g PiBzdGFydGVkIG9uIHRoZSBhY3RpdmUgbGlzdC4gR3Jvd2luZyB0aGUgYWN0aXZlIGxpc3QgcmVz dWx0cyBpbiByZWJhbGFuY2luZwo+ID4gPiA+ID4gYWN0aXZlL2luYWN0aXZlIGxpc3Qgc28gb2xk IHBhZ2VzIG9uIHRoZSBhY3RpdmUgbGlzdCBhcmUgZGVtb3RlZCB0byB0aGUKPiA+ID4gPiA+IGlu YWN0aXZlIGxpc3QuIEhlbmNlLCBob3QgcGFnZSBvbiB0aGUgYWN0aXZlIGxpc3QgaXNuJ3QgcHJv dGVjdGVkIGF0IGFsbC4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBGb2xsb3dpbmcgaXMgYW4gZXhhbXBs ZSBvZiB0aGlzIHNpdHVhdGlvbi4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBBc3N1bWUgdGhhdCA1MCBo b3QgcGFnZXMgb24gYWN0aXZlIGxpc3QgYW5kIHN5c3RlbSBjYW4gY29udGFpbiB0b3RhbAo+ID4g PiA+ID4gMTAwIHBhZ2VzLiBOdW1iZXJzIGRlbm90ZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIG9uIGFj dGl2ZS9pbmFjdGl2ZQo+ID4gPiA+ID4gbGlzdCAoYWN0aXZlIHwgaW5hY3RpdmUpLiAoaCkgc3Rh bmRzIGZvciBob3QgcGFnZXMgYW5kICh1bykgc3RhbmRzIGZvcgo+ID4gPiA+ID4gdXNlZC1vbmNl IHBhZ2VzLgo+ID4gPiA+ID4KPiA+ID4gPiA+IDEuIDUwIGhvdCBwYWdlcyBvbiBhY3RpdmUgbGlz dAo+ID4gPiA+ID4gNTAoaCkgfCAwCj4gPiA+ID4gPgo+ID4gPiA+ID4gMi4gd29ya2xvYWQ6IDUw IG5ld2x5IGNyZWF0ZWQgKHVzZWQtb25jZSkgcGFnZXMKPiA+ID4gPiA+IDUwKHVvKSB8IDUwKGgp Cj4gPiA+ID4gPgo+ID4gPiA+ID4gMy4gd29ya2xvYWQ6IGFub3RoZXIgNTAgbmV3bHkgY3JlYXRl ZCAodXNlZC1vbmNlKSBwYWdlcwo+ID4gPiA+ID4gNTAodW8pIHwgNTAodW8pLCBzd2FwLW91dCA1 MChoKQo+ID4gPiA+ID4KPiA+ID4gPiA+IEFzIHdlIGNhbiBzZWUsIGhvdCBwYWdlcyBhcmUgc3dh cHBlZC1vdXQgYW5kIGl0IHdvdWxkIGNhdXNlIHN3YXAtaW4gbGF0ZXIuIgo+ID4gPiA+ID4KPiA+ ID4gPiA+IElzIE1HTFJVIGFibGUgdG8gYXZvaWQgdGhlIHN3YXAtb3V0IG9mIHRoZSA1MCBob3Qg cGFnZXM/Cj4gPiA+ID4KPiA+ID4gPiBJIHRoaW5rIHRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoeSB0 aGUgNTAgaG90IHBhZ2VzIGNhbiBiZSBtb3ZlZCB0byB0aGUKPiA+ID4gPiBpbmFjdGl2ZSBsaXN0 LiBJZiB0aGV5IGFyZSByZWFsbHkgaG90LCB0aGUgQS1iaXQgc2hvdWxkIHByb3RlY3QgdGhlbS4K PiA+ID4KPiA+ID4gVGhpcyBpcyBhIGdvb2QgcXVlc3Rpb24uCj4gPiA+Cj4gPiA+IEkgZ3Vlc3Mg aXQgwqBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZSBjdXJyZW50IGxydSBpcyB0cnlpbmcgdG8gbWFp bnRhaW4gYSBiYWxhbmNlCj4gPiA+IGJldHdlZW4gdGhlIHNpemVzIG9mIGFjdGl2ZSBhbmQgaW5h Y3RpdmUgbGlzdHMuIFRodXMsIGl0IGNhbiBzaHJpbmsgYWN0aXZlIGxpc3QKPiA+ID4gZXZlbiB0 aG91Z2ggcGFnZXMgbWlnaHQgYmUgc3RpbGwgImhvdCIgYnV0IG5vdCB0aGUgcmVjZW50bHkgYWNj ZXNzZWQgb25lcy4KPiA+ID4KPiA+ID4gMS4gNTAgaG90IHBhZ2VzIG9uIGFjdGl2ZSBsaXN0Cj4g PiA+IDUwKGgpIHwgMAo+ID4gPgo+ID4gPiAyLiB3b3JrbG9hZDogNTAgbmV3bHkgY3JlYXRlZCAo dXNlZC1vbmNlKSBwYWdlcwo+ID4gPiA1MCh1bykgfCA1MChoKQo+ID4gPgo+ID4gPiAzLiB3b3Jr bG9hZDogYW5vdGhlciA1MCBuZXdseSBjcmVhdGVkICh1c2VkLW9uY2UpIHBhZ2VzCj4gPiA+IDUw KHVvKSB8IDUwKHVvKSwgc3dhcC1vdXQgNTAoaCkKPiA+ID4KPiA+ID4gdGhlIG9sZCBrZXJuZWwg d2l0aG91dCBhbm9uIHdvcmtpbmdzZXQgcHJvdGVjdGlvbiBwdXQgd29ya2xvYWQgMiBvbiBhY3Rp dmUsIHNvCj4gPiA+IHB1c2hlZCA1MCBob3QgcGFnZXMgZnJvbSBhY3RpdmUgdG8gaW5hY3RpdmUu IHdvcmtsb2FkIDMgd291bGQgZnVydGhlciBjb250cmlidXRlCj4gPiA+IHRvIGV2aWN0IHRoZSA1 MCBob3QgcGFnZXMuCj4gPiA+Cj4gPiA+IGl0IHNlZW1zIG1nbHJ1IGRvZXNuJ3QgZGVtb3RlIHBh Z2VzIGZyb20gdGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gdG8gb2xkZXIKPiA+ID4gZ2VuZXJhdGlv biBvbmx5IGluIG9yZGVyIHRvIGJhbGFuY2UgdGhlIGxpc3Qgc2l6ZT8gc28gbWdscnUgaXMgcHJv YmFibHkgc2FmZQo+ID4gPiBpbiB0aGVzZSBjYXNlcy4KPiA+ID4KPiA+ID4gSSB3aWxsIHJ1biBz b21lIHRlc3RzIG1lbnRpb25lZCBpbiBLaW0ncyBwYXRjaHNldCBhbmQgcmVwb3J0IHRoZSByZXN1 bHQgdG8geW91Cj4gPiA+IGFmdGVyd2FyZHMuCj4gPiA+Cj4gPgo+ID4gSGkgWXUsCj4gPiBJIGRp ZCBmaW5kIHB1dHRpbmcgZmF1bHRlZCBwYWdlcyB0byB0aGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBs ZWFkIHRvIHNvbWUKPiA+IHJlZ3Jlc3Npb24gaW4gdGhlIGNhc2UgZWJpenp5IEtpbSdzIHBhdGNo c2V0IG1lbnRpb25lZCB3aGlsZSBoZSB0cmllZAo+ID4gdG8gc3VwcG9ydCB3b3JraW5nc2V0IHBy b3RlY3Rpb24gZm9yIGFub24gcGFnZXMuCj4gPiBpIGRpZCBhIGxpdHRsZSBiaXQgbW9kaWZpY2F0 aW9uIGZvciByYW5kX2NodW5rKCkgd2hpY2ggaXMgcHJvYmFibHkgc2ltaWxhcgo+ID4gd2l0aCB0 aGUgbW9kaWZjYXRpb24oKSBLaW0gbWVudGlvbmVkIGluIGhpcyBwYXRjaHNldC4gVGhlIG1vZGlm aWNhdGlvbgo+ID4gY2FuIGJlIGZvdW5kIGhlcmU6Cj4gPiBodHRwczovL2dpdGh1Yi5jb20vMjFj bmJhby9sdHAvY29tbWl0LzcxMzQ0MTNkNzQ3YmZhOWVmCj4gPgo+ID4gVGhlIHRlc3QgZW52IGlz IGEgeDg2IG1hY2hpbmUgaW4gd2hpY2ggSSBoYXZlIHNldCBtZW1vcnkgc2l6ZSB0byAyLjVHQiBh bmQKPiA+IHNldCB6UkFNIHRvIDJHQiBhbmQgZGlzYWJsZWQgZXh0ZXJuYWwgZGlzayBzd2FwLgo+ ID4KPiA+IHdpdGggdGhlIHZhbmlsbGEga2VybmVsOgo+ID4gXHRpbWUgLXYgLi9hLm91dCAtdnYg LXQgNCAtcyAyMDk3MTUyMDAgLVMgMjAwMDAwCj4gPgo+ID4gc28gd2UgaGF2ZSAxMCBjaHVua3Mg YW5kIDQgdGhyZWFkcywgZWFjaCB0cnVuayBpcyAyMDk3MTUyMDAoMjAwTUIpCj4gPgo+ID4gdHlw aWNhbCByZXN1bHQ6Cj4gPiDCoCDCoCDCoCDCoCBDb21tYW5kIGJlaW5nIHRpbWVkOiAiLi9hLm91 dCAtdnYgLXQgNCAtcyAyMDk3MTUyMDAgLVMgMjAwMDAwIgo+ID4gwqAgwqAgwqAgwqAgVXNlciB0 aW1lIChzZWNvbmRzKTogMzYuMTkKPiA+IMKgIMKgIMKgIMKgIFN5c3RlbSB0aW1lIChzZWNvbmRz KTogMjI5LjcyCj4gPiDCoCDCoCDCoCDCoCBQZXJjZW50IG9mIENQVSB0aGlzIGpvYiBnb3Q6IDM3 MSUKPiA+IMKgIMKgIMKgIMKgIEVsYXBzZWQgKHdhbGwgY2xvY2spIHRpbWUgKGg6bW06c3Mgb3Ig bTpzcyk6IDE6MTEuNTkKPiA+IMKgIMKgIMKgIMKgIEF2ZXJhZ2Ugc2hhcmVkIHRleHQgc2l6ZSAo a2J5dGVzKTogMAo+ID4gwqAgwqAgwqAgwqAgQXZlcmFnZSB1bnNoYXJlZCBkYXRhIHNpemUgKGti eXRlcyk6IDAKPiA+IMKgIMKgIMKgIMKgIEF2ZXJhZ2Ugc3RhY2sgc2l6ZSAoa2J5dGVzKTogMAo+ ID4gwqAgwqAgwqAgwqAgQXZlcmFnZSB0b3RhbCBzaXplIChrYnl0ZXMpOiAwCj4gPiDCoCDCoCDC oCDCoCBNYXhpbXVtIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMpOiAyMTY2MTk2Cj4gPiDCoCDC oCDCoCDCoCBBdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMpOiAwCj4gPiDCoCDCoCDC oCDCoCBNYWpvciAocmVxdWlyaW5nIEkvTykgcGFnZSBmYXVsdHM6IDk5OTAxMjgKPiA+IMKgIMKg IMKgIMKgIE1pbm9yIChyZWNsYWltaW5nIGEgZnJhbWUpIHBhZ2UgZmF1bHRzOiAzMzMxNTk0NQo+ ID4gwqAgwqAgwqAgwqAgVm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXM6IDU5MTQ0Cj4gPiDCoCDC oCDCoCDCoCBJbnZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiAxNjc3NTQKPiA+IMKgIMKgIMKg IMKgIFN3YXBzOiAwCj4gPiDCoCDCoCDCoCDCoCBGaWxlIHN5c3RlbSBpbnB1dHM6IDI3NjAKPiA+ IMKgIMKgIMKgIMKgIEZpbGUgc3lzdGVtIG91dHB1dHM6IDgKPiA+IMKgIMKgIMKgIMKgIFNvY2tl dCBtZXNzYWdlcyBzZW50OiAwCj4gPiDCoCDCoCDCoCDCoCBTb2NrZXQgbWVzc2FnZXMgcmVjZWl2 ZWQ6IDAKPiA+IMKgIMKgIMKgIMKgIFNpZ25hbHMgZGVsaXZlcmVkOiAwCj4gPiDCoCDCoCDCoCDC oCBQYWdlIHNpemUgKGJ5dGVzKTogNDA5Ngo+ID4gwqAgwqAgwqAgwqAgRXhpdCBzdGF0dXM6IDAK PiA+Cj4gPiB3aXRoIGdlbl9scnUgYW5kIGxydV9nZW4vZW5hYmxlZD0weDM6Cj4gPiB0eXBpY2Fs IHJlc3VsdDoKPiA+IENvbW1hbmQgYmVpbmcgdGltZWQ6ICIuL2Eub3V0IC12diAtdCA0IC1zIDIw OTcxNTIwMCAtUyAyMDAwMDAiCj4gPiBVc2VyIHRpbWUgKHNlY29uZHMpOiAzNi4zNAo+ID4gU3lz dGVtIHRpbWUgKHNlY29uZHMpOiAyNzYuMDcKPiA+IFBlcmNlbnQgb2YgQ1BVIHRoaXMgam9iIGdv dDogMzc4JQo+ID4gRWxhcHNlZCAod2FsbCBjbG9jaykgdGltZSAoaDptbTpzcyBvciBtOnNzKTog MToyMi40Ngo+ID4gwqAgwqAgwqAgwqAgwqAgwqAqKioqIDE1JSB0aW1lICsKPiA+IEF2ZXJhZ2Ug c2hhcmVkIHRleHQgc2l6ZSAoa2J5dGVzKTogMAo+ID4gQXZlcmFnZSB1bnNoYXJlZCBkYXRhIHNp emUgKGtieXRlcyk6IDAKPiA+IEF2ZXJhZ2Ugc3RhY2sgc2l6ZSAoa2J5dGVzKTogMAo+ID4gQXZl cmFnZSB0b3RhbCBzaXplIChrYnl0ZXMpOiAwCj4gPiBNYXhpbXVtIHJlc2lkZW50IHNldCBzaXpl IChrYnl0ZXMpOiAyMTY4MTIwCj4gPiBBdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMp OiAwCj4gPiBNYWpvciAocmVxdWlyaW5nIEkvTykgcGFnZSBmYXVsdHM6IDEzMzYyODEwCj4gPiDC oCDCoCDCoCDCoCDCoCDCoCDCoCoqKioqIDMwJSBwYWdlIGZhdWx0ICsKPiA+IE1pbm9yIChyZWNs YWltaW5nIGEgZnJhbWUpIHBhZ2UgZmF1bHRzOiAzMzM5NDYxNwo+ID4gVm9sdW50YXJ5IGNvbnRl eHQgc3dpdGNoZXM6IDU1MjE2Cj4gPiBJbnZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiAxMzcy MjAKPiA+IFN3YXBzOiAwCj4gPiBGaWxlIHN5c3RlbSBpbnB1dHM6IDQwODgKPiA+IEZpbGUgc3lz dGVtIG91dHB1dHM6IDgKPiA+IFNvY2tldCBtZXNzYWdlcyBzZW50OiAwCj4gPiBTb2NrZXQgbWVz c2FnZXMgcmVjZWl2ZWQ6IDAKPiA+IFNpZ25hbHMgZGVsaXZlcmVkOiAwCj4gPiBQYWdlIHNpemUg KGJ5dGVzKTogNDA5Ngo+ID4gRXhpdCBzdGF0dXM6IDAKPiA+Cj4gPiB3aXRoIGdlbl9scnUgYW5k IGxydV9nZW4vZW5hYmxlZD0weDc6Cj4gPiB0eXBpY2FsIHJlc3VsdDoKPiA+IENvbW1hbmQgYmVp bmcgdGltZWQ6ICIuL2Eub3V0IC12diAtdCA0IC1zIDIwOTcxNTIwMCAtUyAyMDAwMDAiCj4gPiBV c2VyIHRpbWUgKHNlY29uZHMpOiAzNi4xMwo+ID4gU3lzdGVtIHRpbWUgKHNlY29uZHMpOiAyNTEu NzEKPiA+IFBlcmNlbnQgb2YgQ1BVIHRoaXMgam9iIGdvdDogMzc4JQo+ID4gRWxhcHNlZCAod2Fs bCBjbG9jaykgdGltZSAoaDptbTpzcyBvciBtOnNzKTogMToxNi4wMAo+ID4gwqAgwqAgwqAgwqAg wqAqKioqKmJldHRlciB0aGFuIGVuYWJsZWQ9MHgzLCB3b3JzZSB0aGFuIHZhbmlsbGEKPiA+IEF2 ZXJhZ2Ugc2hhcmVkIHRleHQgc2l6ZSAoa2J5dGVzKTogMAo+ID4gQXZlcmFnZSB1bnNoYXJlZCBk YXRhIHNpemUgKGtieXRlcyk6IDAKPiA+IEF2ZXJhZ2Ugc3RhY2sgc2l6ZSAoa2J5dGVzKTogMAo+ ID4gQXZlcmFnZSB0b3RhbCBzaXplIChrYnl0ZXMpOiAwCj4gPiBNYXhpbXVtIHJlc2lkZW50IHNl dCBzaXplIChrYnl0ZXMpOiAyMTIwOTg4Cj4gPiBBdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIChr Ynl0ZXMpOiAwCj4gPiBNYWpvciAocmVxdWlyaW5nIEkvTykgcGFnZSBmYXVsdHM6IDEyNzA2NTEy Cj4gPiBNaW5vciAocmVjbGFpbWluZyBhIGZyYW1lKSBwYWdlIGZhdWx0czogMzM0MjIyNDMKPiA+ IFZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiA0OTQ4NQo+ID4gSW52b2x1bnRhcnkgY29udGV4 dCBzd2l0Y2hlczogMTI2NzY1Cj4gPiBTd2FwczogMAo+ID4gRmlsZSBzeXN0ZW0gaW5wdXRzOiAy OTc2Cj4gPiBGaWxlIHN5c3RlbSBvdXRwdXRzOiA4Cj4gPiBTb2NrZXQgbWVzc2FnZXMgc2VudDog MAo+ID4gU29ja2V0IG1lc3NhZ2VzIHJlY2VpdmVkOiAwCj4gPiBTaWduYWxzIGRlbGl2ZXJlZDog MAo+ID4gUGFnZSBzaXplIChieXRlcyk6IDQwOTYKPiA+IEV4aXQgc3RhdHVzOiAwCj4gPgo+ID4g SSBjYW4gYWxzbyByZXByb2R1Y2UgdGhlIHByb2JsZW0gb24gYXJtNjQuCj4gPgo+ID4gSSBhbSBu b3Qgc2F5aW5nIHRoaXMgaXMgZ29pbmcgdG8gYmxvY2sgbWdscnUgZnJvbSBiZWluZyBtYWlubGlu ZWQuIEJ1dCDCoEkgYW0KPiA+IHN0aWxsIGN1cmlvdXMgaWYgdGhpcyBpcyBhbiBpc3N1ZSB3b3J0 aCBiZWluZyBhZGRyZXNzZWQgc29tZWhvdyBpbiBtZ2xydS4KPgo+IFlvdSd2ZSBtaXNzZWQgc29t ZXRoaW5nIHZlcnkgaW1wb3J0YW50OiAqdGhvdWdocHV0KiA6KQo+Cgpub29wIDotKQppbiB0aGUg dGVzdCBjYXNlLCB0aGVyZSBhcmUgNCB0aHJlYWRzLiB0aGV5IGFyZSBzZWFyY2hpbmcgYSBrZXkg aW4gMTAgY2h1bmtzCm9mIG1lbW9yeS4gZm9yIGVhY2ggY2h1bmssIHRoZSBzaXplIGlzIDIwME1C LgphICJyYW5kb20iIGNodW5rIGluZGV4IGlzIHJldHVybmVkIGZvciB0aG9zZSB0aHJlYWRzIHRv IHNlYXJjaC4gYnV0IGNodW5rMgppcyB0aGUgaG90dGVzdCwgYW5kIGNodW5rMywgNywgNCBhcmUg cmVsYXRpdmVseSBob3R0ZXIgdGhhbiBvdGhlcnMuCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50 IHJhbmRfY2h1bmsodm9pZCkKewoJLyogc2ltdWxhdGUgaG90IGFuZCBjb2xkIGNodW5rICovCgl1 bnNpZ25lZCBpbnQgcmFuZFsxNl0gPSB7MiwgMiwgMywgNCwgNSwgMiwgNiwgNywgOSwgMiwgOCwg MywgNywgMiwgMiwgNH07CglzdGF0aWMgaW50IG5yID0gMDsKCXJldHVybiByYW5kW25yKyslMTZd Owp9CgplYWNoIHRocmVhZCBkb2VzIHNlYXJjaF9tZW0oKToKc3RhdGljIHVuc2lnbmVkIGludCBz ZWFyY2hfbWVtKHZvaWQpCnsKCXJlY29yZF90IGtleSwgKmZvdW5kOwoJcmVjb3JkX3QgKnNyYywg KmNvcHk7Cgl1bnNpZ25lZCBpbnQgY2h1bms7CglzaXplX3QgY29weV9zaXplID0gY2h1bmtfc2l6 ZTsKCXVuc2lnbmVkIGludCBpOwoJdW5zaWduZWQgaW50IHN0YXRlID0gMDsKCgkvKiBydW4gMTYw IGxvb3BzIG9yIHRpbGwgdGltZW91dCAqLwoJZm9yIChpID0gMDsgdGhyZWFkc19nbyA9PSAxICYm IGkgPCAxNjA7IGkrKykgewoJCWNodW5rID0gcmFuZF9jaHVuaygpOwoJCXNyYyA9IG1lbVtjaHVu a107CgkJLi4uCgkJY29weSA9IGFsbG9jX21lbShjb3B5X3NpemUpOwoJCS4uLgoJCW1lbWNweShj b3B5LCBzcmMsIGNvcHlfc2l6ZSk7CgoJCWtleSA9IHJhbmRfbnVtKGNvcHlfc2l6ZSAvIHJlY29y ZF9zaXplLCAmc3RhdGUpOwoKCQlic2VhcmNoKCZrZXksIGNvcHksIGNvcHlfc2l6ZSAvIHJlY29y ZF9zaXplLAoJCQlyZWNvcmRfc2l6ZSwgY29tcGFyZSk7CgoJCQkvKiBCZWxvdyBjaGVjayBpcyBt YWlubHkgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIG90aGVyIGJ1ZyAqLwoJCQlpZiAoZm91bmQg PT0gTlVMTCkgewoJCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBmaW5kIGtleSAlemRcbiIs IGtleSk7CgkJCQlleGl0KDEpOwoJCQl9CgkJfQkJLyogZW5kIGlmICEgdG91Y2hfcGFnZXMgKi8K CgkJZnJlZV9tZW0oY29weSwgY29weV9zaXplKTsKCX0KCglyZXR1cm4gKGkpOwp9CgplYWNoIHRo cmVhZCBwaWNrcyB1cCBhIGNodW5rLCB0aGVuIGFsbG9jYXRlcyBhIG5ldyBtZW1vcnkgYW5kIGNv cGllcyB0aGUgY2h1bmsgdG8gdGhlCm5ldyBhbGxvY2F0ZWQgbWVtb3J5LCBhbmQgc2VhcmNoZXMg YSBrZXkgaW4gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCgphcyBpIGhhdmUgc2V0IHRpbWUgdG8gcmF0 aGVyIGJpZyBieSAtUywgc28gZWFjaCB0aHJlYWQgYWN0dWFsbHkgZXhpdHMgd2hpbGUgaXQKY29t cGxldGVzIDE2MCBsb29wcy4KJCBcdGltZSAtdiAuL2ViaXp6eSAtdCA0IC1zICQoKDIwMCoxMDI0 KjEwMjQpKSAtUyA2MDAwMDAwCgpzbyB0aGUgb25lIHdobyBmaW5pc2hlcyB0aGUgd2hvbGUgam9i cyBlYXJsaWVyIHdpbnMgaW4gdGhyb3VnaHB1dCBhcwp3ZWxsLgoKPiBEb2xsYXJzIHRvIGRvdWdo bnV0cyB0aGVyZSB3YXMgYSBsYXJnZSBpbmNyZWFzZSBpbiB0aHJvdWdocHV0IC0tIEkKPiBoYXZl bid0IHRyaWVkIHRoaXMgYmVuY2htYXJrIGJ1dCBJJ3ZlIHNlZW4gbWFueSByZXBvcnRzIHNpbWls YXIgdG8KPiB0aGlzIG9uZS4KCkkgaGF2ZSBubyBkb3VidCBhYm91dCB0aGlzLiBJIGFtIGp1c3Qg dHJ5aW5nIHRvIGZpZ3VyZSBvdXQgc29tZSBwb3RlbnRpYWwgd2UgY2FuCmZ1cnRoZXIgYWNoaWV2 ZSBpbiBtZ2xydS4KClRoYW5rcywKQmFycnkKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK