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=-15.9 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1, USER_IN_DEF_DKIM_WL 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 C3F59C43603 for ; Tue, 10 Dec 2019 19:13:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6EFC920637 for ; Tue, 10 Dec 2019 19:13:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ciyXAInn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727700AbfLJTNm (ORCPT ); Tue, 10 Dec 2019 14:13:42 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:37314 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727374AbfLJTNl (ORCPT ); Tue, 10 Dec 2019 14:13:41 -0500 Received: by mail-pg1-f195.google.com with SMTP id q127so9347755pga.4 for ; Tue, 10 Dec 2019 11:13:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=fzyJdxEkRkXN3PnMPhqA/O7Yt9Gr29cLh0NszcoBVg4=; b=ciyXAInnRtyVNIZa4K3x3etkO8M81JqViyEe+R6hhxWl3euGouJpR4gxYPWpMRiuya jF7KZpbB/D8LiOnKYrSdX6KJxm6G6Sw0kcY7DnJ9x9O66qUBXvkHh9cUWPRf6cwALZtH TlLnn1lIHOTLFdQqCfpls9AsDy1nJsoE+17aOqOf6rFL9SZAaF/PQ8nS9AUj7xkCSk++ XImlqPekKX15YhCDHLeWiJs2omgrFNiTdHwUS5KmNIf/ZQFGid7Z2OIk06XEMT/Kb4Gl m+0PWS9UWUQYJsO19HR9XFG0tdxWe1e6to91U+Tp0Q61QLIrh9p2zLlla1DEgGX7enUK 9YpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=fzyJdxEkRkXN3PnMPhqA/O7Yt9Gr29cLh0NszcoBVg4=; b=l++hF5rq6LlrmcuJpuv9EI7NBb2/jPGrHix0TS0mbqSnV1dFr+51BaTuR7oIUYU2rW y552IiYB6hBiratLWVlJ5+emeIsZr4MdZGUCosjhBg+qxcBNxcg5ncTvvpCCG+Lqlwuq Zajb82UisEchKR1nGEohG93NCJ0hwy3y7ur1g4LPFiBz5b+VSar+o8pzBTUOK5i6qK8x zUia20YSOD/mvCI7Hbh/neKWwaklD4cdB/vHahUsVPBzlywFKqRDwQfsLOaNFtodTGCA G79ErSiJST/oibS/AwYSQtL0E8EDfpGUThQzLhXqaJK983F8Jd4pR7DPiH3fRfMoVx8k hSsg== X-Gm-Message-State: APjAAAVQRNBEeQ6ocXc7O4mnYKIudupbQ4hyUqnwWY50yP+ECHCKcPp7 kEY79ofqZioUwHhzCoFtFZamgQ== X-Google-Smtp-Source: APXvYqzF6nEf2X/qHXLFiX5VFn8Ug6OE5V0B84YZf071zouP35lZe2qCC8vYOha0eVdBCqgg5n6q3g== X-Received: by 2002:aa7:8f33:: with SMTP id y19mr35621399pfr.47.1576005220344; Tue, 10 Dec 2019 11:13:40 -0800 (PST) Received: from google.com ([2620:0:1000:2511:b34b:87b6:d099:91b0]) by smtp.gmail.com with ESMTPSA id g26sm4311441pfo.128.2019.12.10.11.13.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2019 11:13:39 -0800 (PST) Date: Tue, 10 Dec 2019 11:13:35 -0800 From: Tom Anderson To: Ville =?utf-8?B?U3lyasOkbMOk?= Cc: Bhawanpreet Lakha , Harry Wentland , Maarten Lankhorst , Maxime Ripard , Sean Pau , Daniel Vetter , David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH] drm/edid: Add modes from CTA-861-G Message-ID: <20191210191335.GA24292@google.com> References: <20191123055053.154550-1-thomasanderson@google.com> <20191202233246.GA49251@google.com> <20191203125312.GM1208@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20191203125312.GM1208@intel.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Dec 03, 2019 at 02:53:12PM +0200, Ville Syrjälä wrote: > On Mon, Dec 02, 2019 at 03:32:46PM -0800, Tom Anderson wrote: > > On Mon, Nov 25, 2019 at 01:42:00PM -0500, Bhawanpreet Lakha wrote: > > > Reviewed-by: Bhawanpreet Lakha > > > > Thank you for the review. +Ville has brought to my attention 978f6b0693c7 which > > added modes up to 128 which was part of a recent merge, so I didn't seen the > > changes until now. > > > > Ville also pointed out [1] which achieves the same thing, but has been in limbo. > > At any rate, I'll be sending out a rebased v2 patch. I don't mind which patch > > lands, all I want is for my 8K display to work :) > > I'd just need someone to slap on a reviwed-by for the few patches > that are missing it. I'd rather not waste ~13 KiB of memory for > those 128-192 dummy modes, which is why I prefer my apporach. Like I said, I'm fine with either patch landing. But in your patch, please merge the drm_connector.h changes from here, otherwise there's a buffer overflow. > > > > > [1] https://patchwork.freedesktop.org/series/63555/ > > > > > > > > On 2019-11-25 1:14 p.m., Harry Wentland wrote: > > > > +Bhawan who has been looking at this from our side. > > > > > > > > Harry > > > > > > > > On 2019-11-23 12:50 a.m., Thomas Anderson wrote: > > > > > The new modes are needed for exotic displays such as 8K. Verified that > > > > > modes like 8K60 and 4K120 are properly obtained from a Samsung Q900R. > > > > > > > > > > Signed-off-by: Thomas Anderson > > > > > --- > > > > > drivers/gpu/drm/drm_edid.c | 388 +++++++++++++++++++++++++++++++++++- > > > > > include/drm/drm_connector.h | 16 +- > > > > > 2 files changed, 391 insertions(+), 13 deletions(-) > > > > > > > > > > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > > > > > index 6b0177112e18..ff5c928516fb 100644 > > > > > --- a/drivers/gpu/drm/drm_edid.c > > > > > +++ b/drivers/gpu/drm/drm_edid.c > > > > > @@ -1278,6 +1278,374 @@ static const struct drm_display_mode edid_cea_modes[] = { > > > > > 4104, 4400, 0, 2160, 2168, 2178, 2250, 0, > > > > > DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 108 - 1280x720@48Hz 16:9 */ > > > > > + { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 90000, 1280, 2240, > > > > > + 2280, 2500, 0, 720, 725, 730, 750, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 109 - 1280x720@48Hz 64:27 */ > > > > > + { DRM_MODE("1280x720", DRM_MODE_TYPE_DRIVER, 90000, 1280, 2240, > > > > > + 2280, 2500, 0, 720, 725, 730, 750, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 110 - 1680x720@48Hz 64:27 */ > > > > > + { DRM_MODE("1680x720", DRM_MODE_TYPE_DRIVER, 99000, 1680, 2490, > > > > > + 2530, 2750, 0, 720, 725, 730, 750, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 111 - 1920x1080@48Hz 16:9 */ > > > > > + { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2558, > > > > > + 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 112 - 1920x1080@48Hz 64:27 */ > > > > > + { DRM_MODE("1920x1080", DRM_MODE_TYPE_DRIVER, 148500, 1920, 2558, > > > > > + 2602, 2750, 0, 1080, 1084, 1089, 1125, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 113 - 2560x1080@48Hz 64:27 */ > > > > > + { DRM_MODE("2560x1080", DRM_MODE_TYPE_DRIVER, 198000, 2560, 3558, > > > > > + 3602, 3750, 0, 1080, 1084, 1089, 1100, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 114 - 3840x2160@48Hz 16:9 */ > > > > > + { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 5116, > > > > > + 5204, 5500, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 115 - 4096x2160@48Hz 256:135 */ > > > > > + { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 594000, 4096, 5116, > > > > > + 5204, 5500, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, > > > > > + .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135, }, > > > > > + /* 116 - 3840x2160@48Hz 64:27 */ > > > > > + { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 594000, 3840, 5116, > > > > > + 5204, 5500, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 117 - 3840x2160@100Hz 16:9 */ > > > > > + { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 1188000, 3840, 4896, > > > > > + 4984, 5280, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 118 - 3840x2160@120Hz 16:9 */ > > > > > + { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 1188000, 3840, 4016, > > > > > + 4104, 4400, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 119 - 3840x2160@100Hz 64:27 */ > > > > > + { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 1188000, 3840, 4896, > > > > > + 4984, 5280, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 120 - 3840x2160@120Hz 64:27 */ > > > > > + { DRM_MODE("3840x2160", DRM_MODE_TYPE_DRIVER, 1188000, 3840, 4016, > > > > > + 4104, 4400, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 121 - 5120x2160@24Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 396000, 5120, 7116, > > > > > + 7204, 7500, 0, 2160, 2168, 2178, 2200, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 122 - 5120x2160@25Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 396000, 5120, 6816, > > > > > + 6904, 7200, 0, 2160, 2168, 2178, 2200, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 123 - 5120x2160@30Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 396000, 5120, 5784, > > > > > + 5872, 6000, 0, 2160, 2168, 2178, 2200, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 124 - 5120x2160@48Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 742500, 5120, 5866, > > > > > + 5954, 6250, 0, 2160, 2168, 2178, 2475, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 125 - 5120x2160@50Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 742500, 5120, 6216, > > > > > + 6304, 6600, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 126 - 5120x2160@60Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 742500, 5120, 5284, > > > > > + 5372, 5500, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 127 - 5120x2160@100Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 1485000, 5120, 6216, > > > > > + 6304, 6600, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 128 - dummy */ > > > > > + { }, > > > > > + /* 129 - reserved for native timing 1 */ > > > > > + { }, > > > > > + /* 130 - reserved for native timing 2 */ > > > > > + { }, > > > > > + /* 131 - reserved for native timing 3 */ > > > > > + { }, > > > > > + /* 132 - reserved for native timing 4 */ > > > > > + { }, > > > > > + /* 133 - reserved for native timing 5 */ > > > > > + { }, > > > > > + /* 134 - reserved for native timing 6 */ > > > > > + { }, > > > > > + /* 135 - reserved for native timing 7 */ > > > > > + { }, > > > > > + /* 136 - reserved for native timing 8 */ > > > > > + { }, > > > > > + /* 137 - reserved for native timing 9 */ > > > > > + { }, > > > > > + /* 138 - reserved for native timing 10 */ > > > > > + { }, > > > > > + /* 139 - reserved for native timing 11 */ > > > > > + { }, > > > > > + /* 140 - reserved for native timing 12 */ > > > > > + { }, > > > > > + /* 141 - reserved for native timing 13 */ > > > > > + { }, > > > > > + /* 142 - reserved for native timing 14 */ > > > > > + { }, > > > > > + /* 143 - reserved for native timing 15 */ > > > > > + { }, > > > > > + /* 144 - reserved for native timing 16 */ > > > > > + { }, > > > > > + /* 145 - reserved for native timing 17 */ > > > > > + { }, > > > > > + /* 146 - reserved for native timing 18 */ > > > > > + { }, > > > > > + /* 147 - reserved for native timing 19 */ > > > > > + { }, > > > > > + /* 148 - reserved for native timing 20 */ > > > > > + { }, > > > > > + /* 149 - reserved for native timing 21 */ > > > > > + { }, > > > > > + /* 150 - reserved for native timing 22 */ > > > > > + { }, > > > > > + /* 151 - reserved for native timing 23 */ > > > > > + { }, > > > > > + /* 152 - reserved for native timing 24 */ > > > > > + { }, > > > > > + /* 153 - reserved for native timing 25 */ > > > > > + { }, > > > > > + /* 154 - reserved for native timing 26 */ > > > > > + { }, > > > > > + /* 155 - reserved for native timing 27 */ > > > > > + { }, > > > > > + /* 156 - reserved for native timing 28 */ > > > > > + { }, > > > > > + /* 157 - reserved for native timing 29 */ > > > > > + { }, > > > > > + /* 158 - reserved for native timing 30 */ > > > > > + { }, > > > > > + /* 159 - reserved for native timing 31 */ > > > > > + { }, > > > > > + /* 160 - reserved for native timing 32 */ > > > > > + { }, > > > > > + /* 161 - reserved for native timing 33 */ > > > > > + { }, > > > > > + /* 162 - reserved for native timing 34 */ > > > > > + { }, > > > > > + /* 163 - reserved for native timing 35 */ > > > > > + { }, > > > > > + /* 164 - reserved for native timing 36 */ > > > > > + { }, > > > > > + /* 165 - reserved for native timing 37 */ > > > > > + { }, > > > > > + /* 166 - reserved for native timing 38 */ > > > > > + { }, > > > > > + /* 167 - reserved for native timing 39 */ > > > > > + { }, > > > > > + /* 168 - reserved for native timing 40 */ > > > > > + { }, > > > > > + /* 169 - reserved for native timing 41 */ > > > > > + { }, > > > > > + /* 170 - reserved for native timing 42 */ > > > > > + { }, > > > > > + /* 171 - reserved for native timing 43 */ > > > > > + { }, > > > > > + /* 172 - reserved for native timing 44 */ > > > > > + { }, > > > > > + /* 173 - reserved for native timing 45 */ > > > > > + { }, > > > > > + /* 174 - reserved for native timing 46 */ > > > > > + { }, > > > > > + /* 175 - reserved for native timing 47 */ > > > > > + { }, > > > > > + /* 176 - reserved for native timing 48 */ > > > > > + { }, > > > > > + /* 177 - reserved for native timing 49 */ > > > > > + { }, > > > > > + /* 178 - reserved for native timing 50 */ > > > > > + { }, > > > > > + /* 179 - reserved for native timing 51 */ > > > > > + { }, > > > > > + /* 180 - reserved for native timing 52 */ > > > > > + { }, > > > > > + /* 181 - reserved for native timing 53 */ > > > > > + { }, > > > > > + /* 182 - reserved for native timing 54 */ > > > > > + { }, > > > > > + /* 183 - reserved for native timing 55 */ > > > > > + { }, > > > > > + /* 184 - reserved for native timing 56 */ > > > > > + { }, > > > > > + /* 185 - reserved for native timing 57 */ > > > > > + { }, > > > > > + /* 186 - reserved for native timing 58 */ > > > > > + { }, > > > > > + /* 187 - reserved for native timing 59 */ > > > > > + { }, > > > > > + /* 188 - reserved for native timing 60 */ > > > > > + { }, > > > > > + /* 189 - reserved for native timing 61 */ > > > > > + { }, > > > > > + /* 190 - reserved for native timing 62 */ > > > > > + { }, > > > > > + /* 191 - reserved for native timing 63 */ > > > > > + { }, > > > > > + /* 192 - reserved for native timing 64 */ > > > > > + { }, > > > > > + /* 193 - 5120x2160@120Hz 64:27 */ > > > > > + { DRM_MODE("5120x2160", DRM_MODE_TYPE_DRIVER, 1485000, 5120, 5284, > > > > > + 5372, 5500, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 194 - 7680x4320@24Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 1188000, 7680, 10232, > > > > > + 10408, 11000, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 195 - 7680x4320@25Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 1188000, 7680, 10032, > > > > > + 10208, 10800, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 196 - 7680x4320@30Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 1188000, 7680, 8232, > > > > > + 8408, 9000, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 197 - 7680x4320@48Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 2376000, 7680, 10232, > > > > > + 10408, 11000, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 198 - 7680x4320@50Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 2376000, 7680, 10032, > > > > > + 10208, 10800, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 199 - 7680x4320@60Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 2376000, 7680, 8232, > > > > > + 8408, 9000, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 200 - 7680x4320@100Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 4752000, 7680, 9792, > > > > > + 9968, 10560, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 201 - 7680x4320@120Hz 16:9 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 4752000, 7680, 8032, > > > > > + 8208, 8800, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, }, > > > > > + /* 202 - 7680x4320@24Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 1188000, 7680, 10232, > > > > > + 10408, 11000, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 203 - 7680x4320@25Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 1188000, 7680, 10032, > > > > > + 10208, 10800, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 204 - 7680x4320@30Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 1188000, 7680, 8232, > > > > > + 8408, 9000, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 205 - 7680x4320@48Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 2376000, 7680, 10232, > > > > > + 10408, 11000, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 206 - 7680x4320@50Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 2376000, 7680, 10032, > > > > > + 10208, 10800, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 207 - 7680x4320@60Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 2376000, 7680, 8232, > > > > > + 8408, 9000, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 208 - 7680x4320@100Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 4752000, 7680, 9792, > > > > > + 9968, 10560, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 209 - 7680x4320@120Hz 64:27 */ > > > > > + { DRM_MODE("7680x4320", DRM_MODE_TYPE_DRIVER, 4752000, 7680, 8032, > > > > > + 8208, 8800, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 210 - 10240x4320@24Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 1485000, 10240, 11732, > > > > > + 11908, 12500, 0, 4320, 4336, 4356, 4950, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 24, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 211 - 10240x4320@25Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 1485000, 10240, 12732, > > > > > + 12908, 13500, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 25, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 212 - 10240x4320@30Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 1485000, 10240, 10528, > > > > > + 10704, 11000, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 30, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 213 - 10240x4320@48Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 2970000, 10240, 11732, > > > > > + 11908, 12500, 0, 4320, 4336, 4356, 4950, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 48, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 214 - 10240x4320@50Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 2970000, 10240, 12732, > > > > > + 12908, 13500, 0, 4320, 4336, 4356, 4400, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 50, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 215 - 10240x4320@60Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 2970000, 10240, 10528, > > > > > + 10704, 11000, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 216 - 10240x4320@100Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 5940000, 10240, 12432, > > > > > + 12608, 13200, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 100, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 217 - 10240x4320@120Hz 64:27 */ > > > > > + { DRM_MODE("10240x4320", DRM_MODE_TYPE_DRIVER, 5940000, 10240, 10528, > > > > > + 10704, 11000, 0, 4320, 4336, 4356, 4500, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 120, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_64_27, }, > > > > > + /* 218 - 4096x2160@100Hz 256:135 */ > > > > > + { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 1188000, 4096, 4896, > > > > > + 4984, 5280, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 100, > > > > > + .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135, }, > > > > > + /* 219 - 4096x2160@120Hz 256:135 */ > > > > > + { DRM_MODE("4096x2160", DRM_MODE_TYPE_DRIVER, 1188000, 4096, 4184, > > > > > + 4272, 4400, 0, 2160, 2168, 2178, 2250, 0, > > > > > + DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC), > > > > > + .vrefresh = 120, > > > > > + .picture_aspect_ratio = HDMI_PICTURE_ASPECT_256_135, }, > > > > > }; > > > > > /* > > > > > @@ -3030,6 +3398,12 @@ cea_mode_alternate_timings(u8 vic, struct drm_display_mode *mode) > > > > > return false; > > > > > } > > > > > +static bool drm_valid_cea_vic(u8 vic) > > > > > +{ > > > > > + return (vic > 0 && vic < 128) || > > > > > + (vic > 192 && vic < ARRAY_SIZE(edid_cea_modes)); > > > > > +} > > > > > + > > > > > static u8 drm_match_cea_mode_clock_tolerance(const struct drm_display_mode *to_match, > > > > > unsigned int clock_tolerance) > > > > > { > > > > > @@ -3046,6 +3420,9 @@ static u8 drm_match_cea_mode_clock_tolerance(const struct drm_display_mode *to_m > > > > > struct drm_display_mode cea_mode = edid_cea_modes[vic]; > > > > > unsigned int clock1, clock2; > > > > > + if (!drm_valid_cea_vic(vic)) > > > > > + continue; > > > > > + > > > > > /* Check both 60Hz and 59.94Hz */ > > > > > clock1 = cea_mode.clock; > > > > > clock2 = cea_mode_alternate_clock(&cea_mode); > > > > > @@ -3085,6 +3462,9 @@ u8 drm_match_cea_mode(const struct drm_display_mode *to_match) > > > > > struct drm_display_mode cea_mode = edid_cea_modes[vic]; > > > > > unsigned int clock1, clock2; > > > > > + if (!drm_valid_cea_vic(vic)) > > > > > + continue; > > > > > + > > > > > /* Check both 60Hz and 59.94Hz */ > > > > > clock1 = cea_mode.clock; > > > > > clock2 = cea_mode_alternate_clock(&cea_mode); > > > > > @@ -3103,11 +3483,6 @@ u8 drm_match_cea_mode(const struct drm_display_mode *to_match) > > > > > } > > > > > EXPORT_SYMBOL(drm_match_cea_mode); > > > > > -static bool drm_valid_cea_vic(u8 vic) > > > > > -{ > > > > > - return vic > 0 && vic < ARRAY_SIZE(edid_cea_modes); > > > > > -} > > > > > - > > > > > /** > > > > > * drm_get_cea_aspect_ratio - get the picture aspect ratio corresponding to > > > > > * the input VIC from the CEA mode list > > > > > @@ -3117,6 +3492,9 @@ static bool drm_valid_cea_vic(u8 vic) > > > > > */ > > > > > enum hdmi_picture_aspect drm_get_cea_aspect_ratio(const u8 video_code) > > > > > { > > > > > + if (!drm_valid_cea_vic(video_code)) > > > > > + return HDMI_PICTURE_ASPECT_NONE; > > > > > + > > > > > return edid_cea_modes[video_code].picture_aspect_ratio; > > > > > } > > > > > EXPORT_SYMBOL(drm_get_cea_aspect_ratio); > > > > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > > > > > index 681cb590f952..0a90efa0246e 100644 > > > > > --- a/include/drm/drm_connector.h > > > > > +++ b/include/drm/drm_connector.h > > > > > @@ -188,19 +188,19 @@ struct drm_hdmi_info { > > > > > /** > > > > > * @y420_vdb_modes: bitmap of modes which can support ycbcr420 > > > > > - * output only (not normal RGB/YCBCR444/422 outputs). There are total > > > > > - * 107 VICs defined by CEA-861-F spec, so the size is 128 bits to map > > > > > - * upto 128 VICs; > > > > > + * output only (not normal RGB/YCBCR444/422 outputs). The max VIC > > > > > + * defined by the CEA-861-G spec is 219, so the size is 256 bits to map > > > > > + * upto 256 VICs. > > > > > */ > > > > > - unsigned long y420_vdb_modes[BITS_TO_LONGS(128)]; > > > > > + unsigned long y420_vdb_modes[BITS_TO_LONGS(256)]; > > > > > /** > > > > > * @y420_cmdb_modes: bitmap of modes which can support ycbcr420 > > > > > - * output also, along with normal HDMI outputs. There are total 107 > > > > > - * VICs defined by CEA-861-F spec, so the size is 128 bits to map upto > > > > > - * 128 VICs; > > > > > + * output also, along with normal HDMI outputs. The max VIC defined by > > > > > + * the CEA-861-G spec is 219, so the size is 256 bits to map upto 256 > > > > > + * VICs. > > > > > */ > > > > > - unsigned long y420_cmdb_modes[BITS_TO_LONGS(128)]; > > > > > + unsigned long y420_cmdb_modes[BITS_TO_LONGS(256)]; > > > > > /** @y420_cmdb_map: bitmap of SVD index, to extraxt vcb modes */ > > > > > u64 y420_cmdb_map; > > > > > > > -- > Ville Syrjälä > Intel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,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 962D5C43603 for ; Wed, 11 Dec 2019 09:21:30 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6BF2D214AF for ; Wed, 11 Dec 2019 09:21:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="ciyXAInn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6BF2D214AF Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 543E46EAAF; Wed, 11 Dec 2019 09:20:38 +0000 (UTC) Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 482876E155 for ; Tue, 10 Dec 2019 19:13:41 +0000 (UTC) Received: by mail-pg1-x543.google.com with SMTP id k3so8696589pgc.3 for ; Tue, 10 Dec 2019 11:13:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=fzyJdxEkRkXN3PnMPhqA/O7Yt9Gr29cLh0NszcoBVg4=; b=ciyXAInnRtyVNIZa4K3x3etkO8M81JqViyEe+R6hhxWl3euGouJpR4gxYPWpMRiuya jF7KZpbB/D8LiOnKYrSdX6KJxm6G6Sw0kcY7DnJ9x9O66qUBXvkHh9cUWPRf6cwALZtH TlLnn1lIHOTLFdQqCfpls9AsDy1nJsoE+17aOqOf6rFL9SZAaF/PQ8nS9AUj7xkCSk++ XImlqPekKX15YhCDHLeWiJs2omgrFNiTdHwUS5KmNIf/ZQFGid7Z2OIk06XEMT/Kb4Gl m+0PWS9UWUQYJsO19HR9XFG0tdxWe1e6to91U+Tp0Q61QLIrh9p2zLlla1DEgGX7enUK 9YpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=fzyJdxEkRkXN3PnMPhqA/O7Yt9Gr29cLh0NszcoBVg4=; b=RAS3MYDgNbsJS1BqFEPeF5e4jlvrZKOyIAEVSg72XIknlkP+7PcHeuET69r65n25P+ NSWjK9WUCFfiZBi69Lsy49/AFGseoF5tcR3+B3eRveI4/Qu6Z/j2WR5mi+ogQofIxnIz LgT3YbHp+U4TVwgNPMZ0RjQFrEEXbZbiRaraPFBJ21CsLEsyEVb+JW1UAUVVbgigLoD0 qTjnt9N+P9ryzfVGfKyCIgNDokIbniP5OihgGEtfFf54frCRZVcORB0oiJy0QVNeEFBy Gre3rQ1LDT6KYRWY2ke/btv7nvZkoYcVCw0MV45krtgrWk3h869e/jASgxWadg+CNhk4 oLAA== X-Gm-Message-State: APjAAAU4o+P4fQauLOiC2lk7qlFGyCQtVgL/BJftVIaWNYtNFvKiApd4 X67Xjf/5SKOupfYr+QAPuijhPA== X-Google-Smtp-Source: APXvYqzF6nEf2X/qHXLFiX5VFn8Ug6OE5V0B84YZf071zouP35lZe2qCC8vYOha0eVdBCqgg5n6q3g== X-Received: by 2002:aa7:8f33:: with SMTP id y19mr35621399pfr.47.1576005220344; Tue, 10 Dec 2019 11:13:40 -0800 (PST) Received: from google.com ([2620:0:1000:2511:b34b:87b6:d099:91b0]) by smtp.gmail.com with ESMTPSA id g26sm4311441pfo.128.2019.12.10.11.13.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Dec 2019 11:13:39 -0800 (PST) Date: Tue, 10 Dec 2019 11:13:35 -0800 From: Tom Anderson To: Ville =?utf-8?B?U3lyasOkbMOk?= Subject: Re: [PATCH] drm/edid: Add modes from CTA-861-G Message-ID: <20191210191335.GA24292@google.com> References: <20191123055053.154550-1-thomasanderson@google.com> <20191202233246.GA49251@google.com> <20191203125312.GM1208@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191203125312.GM1208@intel.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-Mailman-Approved-At: Wed, 11 Dec 2019 09:20:35 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Airlie , Sean Pau , linux-kernel@vger.kernel.org, Bhawanpreet Lakha , dri-devel@lists.freedesktop.org, Harry Wentland Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gVHVlLCBEZWMgMDMsIDIwMTkgYXQgMDI6NTM6MTJQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIE1vbiwgRGVjIDAyLCAyMDE5IGF0IDAzOjMyOjQ2UE0gLTA4MDAsIFRvbSBB bmRlcnNvbiB3cm90ZToKPiA+IE9uIE1vbiwgTm92IDI1LCAyMDE5IGF0IDAxOjQyOjAwUE0gLTA1 MDAsIEJoYXdhbnByZWV0IExha2hhIHdyb3RlOgo+ID4gPiBSZXZpZXdlZC1ieTogQmhhd2FucHJl ZXQgTGFraGEgPEJoYXdhbnByZWV0Lkxha2hhQGFtZC5jb20+Cj4gPiAKPiA+IFRoYW5rIHlvdSBm b3IgdGhlIHJldmlldy4gK1ZpbGxlIGhhcyBicm91Z2h0IHRvIG15IGF0dGVudGlvbiA5NzhmNmIw NjkzYzcgd2hpY2gKPiA+IGFkZGVkIG1vZGVzIHVwIHRvIDEyOCB3aGljaCB3YXMgcGFydCBvZiBh IHJlY2VudCBtZXJnZSwgc28gSSBkaWRuJ3Qgc2VlbiB0aGUKPiA+IGNoYW5nZXMgdW50aWwgbm93 Lgo+ID4gCj4gPiBWaWxsZSBhbHNvIHBvaW50ZWQgb3V0IFsxXSB3aGljaCBhY2hpZXZlcyB0aGUg c2FtZSB0aGluZywgYnV0IGhhcyBiZWVuIGluIGxpbWJvLgo+ID4gQXQgYW55IHJhdGUsIEknbGwg YmUgc2VuZGluZyBvdXQgYSByZWJhc2VkIHYyIHBhdGNoLiBJIGRvbid0IG1pbmQgd2hpY2ggcGF0 Y2gKPiA+IGxhbmRzLCBhbGwgSSB3YW50IGlzIGZvciBteSA4SyBkaXNwbGF5IHRvIHdvcmsgOikK PiAKPiBJJ2QganVzdCBuZWVkIHNvbWVvbmUgdG8gc2xhcCBvbiBhIHJldml3ZWQtYnkgZm9yIHRo ZSBmZXcgcGF0Y2hlcwo+IHRoYXQgYXJlIG1pc3NpbmcgaXQuIEknZCByYXRoZXIgbm90IHdhc3Rl IH4xMyBLaUIgb2YgbWVtb3J5IGZvcgo+IHRob3NlIDEyOC0xOTIgZHVtbXkgbW9kZXMsIHdoaWNo IGlzIHdoeSBJIHByZWZlciBteSBhcHBvcmFjaC4KCkxpa2UgSSBzYWlkLCBJJ20gZmluZSB3aXRo IGVpdGhlciBwYXRjaCBsYW5kaW5nLiBCdXQgaW4geW91ciBwYXRjaCwgcGxlYXNlIG1lcmdlCnRo ZSBkcm1fY29ubmVjdG9yLmggY2hhbmdlcyBmcm9tIGhlcmUsIG90aGVyd2lzZSB0aGVyZSdzIGEg YnVmZmVyIG92ZXJmbG93LgoKPiAKPiA+IAo+ID4gWzFdIGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVk ZXNrdG9wLm9yZy9zZXJpZXMvNjM1NTUvCj4gPiAKPiA+ID4gCj4gPiA+IE9uIDIwMTktMTEtMjUg MToxNCBwLm0uLCBIYXJyeSBXZW50bGFuZCB3cm90ZToKPiA+ID4gPiArQmhhd2FuIHdobyBoYXMg YmVlbiBsb29raW5nIGF0IHRoaXMgZnJvbSBvdXIgc2lkZS4KPiA+ID4gPiAKPiA+ID4gPiBIYXJy eQo+ID4gPiA+IAo+ID4gPiA+IE9uIDIwMTktMTEtMjMgMTI6NTAgYS5tLiwgVGhvbWFzIEFuZGVy c29uIHdyb3RlOgo+ID4gPiA+ID4gVGhlIG5ldyBtb2RlcyBhcmUgbmVlZGVkIGZvciBleG90aWMg ZGlzcGxheXMgc3VjaCBhcyA4Sy4gVmVyaWZpZWQgdGhhdAo+ID4gPiA+ID4gbW9kZXMgbGlrZSA4 SzYwIGFuZCA0SzEyMCBhcmUgcHJvcGVybHkgb2J0YWluZWQgZnJvbSBhIFNhbXN1bmcgUTkwMFIu Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBBbmRlcnNvbiA8dGhv bWFzYW5kZXJzb25AZ29vZ2xlLmNvbT4KPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gICBkcml2ZXJz L2dwdS9kcm0vZHJtX2VkaWQuYyAgfCAzODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystCj4gPiA+ID4gPiAgIGluY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCB8ICAxNiArLQo+ ID4gPiA+ID4gICAyIGZpbGVzIGNoYW5nZWQsIDM5MSBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlv bnMoLSkKPiA+ID4gPiA+IAo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9k cm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKPiA+ID4gPiA+IGluZGV4IDZi MDE3NzExMmUxOC4uZmY1YzkyODUxNmZiIDEwMDY0NAo+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9lZGlkLmMKPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRp ZC5jCj4gPiA+ID4gPiBAQCAtMTI3OCw2ICsxMjc4LDM3NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgZWRpZF9jZWFfbW9kZXNbXSA9IHsKPiA+ID4gPiA+ICAgCQkgICA0 MTA0LCA0NDAwLCAwLCAyMTYwLCAyMTY4LCAyMTc4LCAyMjUwLCAwLAo+ID4gPiA+ID4gICAJCSAg IERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4g ICAJICAudnJlZnJlc2ggPSA2MCwgLnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJF X0FTUEVDVF82NF8yNywgfSwKPiA+ID4gPiA+ICsJLyogMTA4IC0gMTI4MHg3MjBANDhIeiAxNjo5 ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjEyODB4NzIwIiwgRFJNX01PREVfVFlQRV9EUklW RVIsIDkwMDAwLCAxMjgwLCAyMjQwLAo+ID4gPiA+ID4gKwkJICAgMjI4MCwgMjUwMCwgMCwgNzIw LCA3MjUsIDczMCwgNzUwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMg fCBEUk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0gNDgsIC5w aWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfMTZfOSwgfSwKPiA+ID4g PiA+ICsJLyogMTA5IC0gMTI4MHg3MjBANDhIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9N T0RFKCIxMjgweDcyMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA5MDAwMCwgMTI4MCwgMjI0MCwK PiA+ID4gPiA+ICsJCSAgIDIyODAsIDI1MDAsIDAsIDcyMCwgNzI1LCA3MzAsIDc1MCwgMCwKPiA+ ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMp LAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDQ4LCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBI RE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAxMTAgLSAxNjgweDcy MEA0OEh6IDY0OjI3ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjE2ODB4NzIwIiwgRFJNX01P REVfVFlQRV9EUklWRVIsIDk5MDAwLCAxNjgwLCAyNDkwLAo+ID4gPiA+ID4gKwkJICAgMjUzMCwg Mjc1MCwgMCwgNzIwLCA3MjUsIDczMCwgNzUwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVf RkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZy ZXNoID0gNDgsIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRf MjcsIH0sCj4gPiA+ID4gPiArCS8qIDExMSAtIDE5MjB4MTA4MEA0OEh6IDE2OjkgKi8KPiA+ID4g PiA+ICsJeyBEUk1fTU9ERSgiMTkyMHgxMDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE0ODUw MCwgMTkyMCwgMjU1OCwKPiA+ID4gPiA+ICsJCSAgIDI2MDIsIDI3NTAsIDAsIDEwODAsIDEwODQs IDEwODksIDExMjUsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERS TV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSA0OCwgLnBpY3R1 cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJFX0FTUEVDVF8xNl85LCB9LAo+ID4gPiA+ID4g KwkvKiAxMTIgLSAxOTIweDEwODBANDhIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RF KCIxOTIweDEwODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTQ4NTAwLCAxOTIwLCAyNTU4LAo+ ID4gPiA+ID4gKwkJICAgMjYwMiwgMjc1MCwgMCwgMTA4MCwgMTA4NCwgMTA4OSwgMTEyNSwgMCwK PiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZ TkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDQ4LCAucGljdHVyZV9hc3BlY3RfcmF0aW8g PSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAxMTMgLSAyNTYw eDEwODBANDhIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCIyNTYweDEwODAiLCBE Uk1fTU9ERV9UWVBFX0RSSVZFUiwgMTk4MDAwLCAyNTYwLCAzNTU4LAo+ID4gPiA+ID4gKwkJICAg MzYwMiwgMzc1MCwgMCwgMTA4MCwgMTA4NCwgMTA4OSwgMTEwMCwgMCwKPiA+ID4gPiA+ICsJCSAg IERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4g KwkgIC52cmVmcmVzaCA9IDQ4LCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVf QVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAxMTQgLSAzODQweDIxNjBANDhIeiAxNjo5 ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjM4NDB4MjE2MCIsIERSTV9NT0RFX1RZUEVfRFJJ VkVSLCA1OTQwMDAsIDM4NDAsIDUxMTYsCj4gPiA+ID4gPiArCQkgICA1MjA0LCA1NTAwLCAwLCAy MTYwLCAyMTY4LCAyMTc4LCAyMjUwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19Q SFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0g NDgsIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfMTZfOSwgfSwK PiA+ID4gPiA+ICsJLyogMTE1IC0gNDA5NngyMTYwQDQ4SHogMjU2OjEzNSAqLwo+ID4gPiA+ID4g Kwl7IERSTV9NT0RFKCI0MDk2eDIxNjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNTk0MDAwLCA0 MDk2LCA1MTE2LAo+ID4gPiA+ID4gKwkJICAgNTIwNCwgNTUwMCwgMCwgMjE2MCwgMjE2OCwgMjE3 OCwgMjI1MCwgMCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01P REVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDQ4LAo+ID4gPiA+ID4g KwkgIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfMjU2XzEzNSwg fSwKPiA+ID4gPiA+ICsJLyogMTE2IC0gMzg0MHgyMTYwQDQ4SHogNjQ6MjcgKi8KPiA+ID4gPiA+ ICsJeyBEUk1fTU9ERSgiMzg0MHgyMTYwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU5NDAwMCwg Mzg0MCwgNTExNiwKPiA+ID4gPiA+ICsJCSAgIDUyMDQsIDU1MDAsIDAsIDIxNjAsIDIxNjgsIDIx NzgsIDIyNTAsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9N T0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSA0OCwgLnBpY3R1cmVf YXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJFX0FTUEVDVF82NF8yNywgfSwKPiA+ID4gPiA+ICsJ LyogMTE3IC0gMzg0MHgyMTYwQDEwMEh6IDE2OjkgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgi Mzg0MHgyMTYwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDExODgwMDAsIDM4NDAsIDQ4OTYsCj4g PiA+ID4gPiArCQkgICA0OTg0LCA1MjgwLCAwLCAyMTYwLCAyMTY4LCAyMTc4LCAyMjUwLCAwLAo+ ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lO QyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0gMTAwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8g PSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzE2XzksIH0sCj4gPiA+ID4gPiArCS8qIDExOCAtIDM4NDB4 MjE2MEAxMjBIeiAxNjo5ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjM4NDB4MjE2MCIsIERS TV9NT0RFX1RZUEVfRFJJVkVSLCAxMTg4MDAwLCAzODQwLCA0MDE2LAo+ID4gPiA+ID4gKwkJICAg NDEwNCwgNDQwMCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjI1MCwgMCwKPiA+ID4gPiA+ICsJCSAg IERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4g KwkgIC52cmVmcmVzaCA9IDEyMCwgLnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJF X0FTUEVDVF8xNl85LCB9LAo+ID4gPiA+ID4gKwkvKiAxMTkgLSAzODQweDIxNjBAMTAwSHogNjQ6 MjcgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgiMzg0MHgyMTYwIiwgRFJNX01PREVfVFlQRV9E UklWRVIsIDExODgwMDAsIDM4NDAsIDQ4OTYsCj4gPiA+ID4gPiArCQkgICA0OTg0LCA1MjgwLCAw LCAyMTYwLCAyMTY4LCAyMTc4LCAyMjUwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxB R19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNo ID0gMTAwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3 LCB9LAo+ID4gPiA+ID4gKwkvKiAxMjAgLSAzODQweDIxNjBAMTIwSHogNjQ6MjcgKi8KPiA+ID4g PiA+ICsJeyBEUk1fTU9ERSgiMzg0MHgyMTYwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDExODgw MDAsIDM4NDAsIDQwMTYsCj4gPiA+ID4gPiArCQkgICA0MTA0LCA0NDAwLCAwLCAyMTYwLCAyMTY4 LCAyMTc4LCAyMjUwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBE Uk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0gMTIwLCAucGlj dHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ ID4gKwkvKiAxMjEgLSA1MTIweDIxNjBAMjRIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9N T0RFKCI1MTIweDIxNjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzk2MDAwLCA1MTIwLCA3MTE2 LAo+ID4gPiA+ID4gKwkJICAgNzIwNCwgNzUwMCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjIwMCwg MCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19Q VlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDI0LCAucGljdHVyZV9hc3BlY3RfcmF0 aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAxMjIgLSA1 MTIweDIxNjBAMjVIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCI1MTIweDIxNjAi LCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzk2MDAwLCA1MTIwLCA2ODE2LAo+ID4gPiA+ID4gKwkJ ICAgNjkwNCwgNzIwMCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjIwMCwgMCwKPiA+ID4gPiA+ICsJ CSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ ID4gKwkgIC52cmVmcmVzaCA9IDI1LCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RV UkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAxMjMgLSA1MTIweDIxNjBAMzBIeiA2 NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCI1MTIweDIxNjAiLCBEUk1fTU9ERV9UWVBF X0RSSVZFUiwgMzk2MDAwLCA1MTIwLCA1Nzg0LAo+ID4gPiA+ID4gKwkJICAgNTg3MiwgNjAwMCwg MCwgMjE2MCwgMjE2OCwgMjE3OCwgMjIwMCwgMCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZM QUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVz aCA9IDMwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3 LCB9LAo+ID4gPiA+ID4gKwkvKiAxMjQgLSA1MTIweDIxNjBANDhIeiA2NDoyNyAqLwo+ID4gPiA+ ID4gKwl7IERSTV9NT0RFKCI1MTIweDIxNjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNzQyNTAw LCA1MTIwLCA1ODY2LAo+ID4gPiA+ID4gKwkJICAgNTk1NCwgNjI1MCwgMCwgMjE2MCwgMjE2OCwg MjE3OCwgMjQ3NSwgMCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJN X01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDQ4LCAucGljdHVy ZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4g KwkvKiAxMjUgLSA1MTIweDIxNjBANTBIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RF KCI1MTIweDIxNjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNzQyNTAwLCA1MTIwLCA2MjE2LAo+ ID4gPiA+ID4gKwkJICAgNjMwNCwgNjYwMCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjI1MCwgMCwK PiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZ TkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDUwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8g PSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAxMjYgLSA1MTIw eDIxNjBANjBIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCI1MTIweDIxNjAiLCBE Uk1fTU9ERV9UWVBFX0RSSVZFUiwgNzQyNTAwLCA1MTIwLCA1Mjg0LAo+ID4gPiA+ID4gKwkJICAg NTM3MiwgNTUwMCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjI1MCwgMCwKPiA+ID4gPiA+ICsJCSAg IERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4g KwkgIC52cmVmcmVzaCA9IDYwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVf QVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAxMjcgLSA1MTIweDIxNjBAMTAwSHogNjQ6 MjcgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgiNTEyMHgyMTYwIiwgRFJNX01PREVfVFlQRV9E UklWRVIsIDE0ODUwMDAsIDUxMjAsIDYyMTYsCj4gPiA+ID4gPiArCQkgICA2MzA0LCA2NjAwLCAw LCAyMTYwLCAyMTY4LCAyMTc4LCAyMjUwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxB R19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNo ID0gMTAwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3 LCB9LAo+ID4gPiA+ID4gKwkvKiAxMjggLSBkdW1teSAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ ID4gPiArCS8qIDEyOSAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDEgKi8KPiA+ID4gPiA+ ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxMzAgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyAy ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTMxIC0gcmVzZXJ2ZWQgZm9yIG5h dGl2ZSB0aW1pbmcgMyAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDEzMiAtIHJl c2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDQgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4g KwkvKiAxMzMgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyA1ICovCj4gPiA+ID4gPiArCXsg fSwKPiA+ID4gPiA+ICsJLyogMTM0IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgNiAqLwo+ ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDEzNSAtIHJlc2VydmVkIGZvciBuYXRpdmUg dGltaW5nIDcgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxMzYgLSByZXNlcnZl ZCBmb3IgbmF0aXZlIHRpbWluZyA4ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyog MTM3IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgOSAqLwo+ID4gPiA+ID4gKwl7IH0sCj4g PiA+ID4gPiArCS8qIDEzOCAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDEwICovCj4gPiA+ ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTM5IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1p bmcgMTEgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNDAgLSByZXNlcnZlZCBm b3IgbmF0aXZlIHRpbWluZyAxMiAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE0 MSAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDEzICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ ID4gPiA+ICsJLyogMTQyIC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgMTQgKi8KPiA+ID4g PiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNDMgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWlu ZyAxNSAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE0NCAtIHJlc2VydmVkIGZv ciBuYXRpdmUgdGltaW5nIDE2ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTQ1 IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgMTcgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4g PiA+ID4gKwkvKiAxNDYgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyAxOCAqLwo+ID4gPiA+ ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE0NyAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5n IDE5ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTQ4IC0gcmVzZXJ2ZWQgZm9y IG5hdGl2ZSB0aW1pbmcgMjAgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNDkg LSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyAyMSAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ ID4gPiArCS8qIDE1MCAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDIyICovCj4gPiA+ID4g PiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTUxIC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcg MjMgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNTIgLSByZXNlcnZlZCBmb3Ig bmF0aXZlIHRpbWluZyAyNCAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE1MyAt IHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDI1ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4g PiA+ICsJLyogMTU0IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgMjYgKi8KPiA+ID4gPiA+ ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNTUgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyAy NyAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE1NiAtIHJlc2VydmVkIGZvciBu YXRpdmUgdGltaW5nIDI4ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTU3IC0g cmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgMjkgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ ID4gKwkvKiAxNTggLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyAzMCAqLwo+ID4gPiA+ID4g Kwl7IH0sCj4gPiA+ID4gPiArCS8qIDE1OSAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDMx ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTYwIC0gcmVzZXJ2ZWQgZm9yIG5h dGl2ZSB0aW1pbmcgMzIgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNjEgLSBy ZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyAzMyAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4g PiArCS8qIDE2MiAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDM0ICovCj4gPiA+ID4gPiAr CXsgfSwKPiA+ID4gPiA+ICsJLyogMTYzIC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgMzUg Ki8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNjQgLSByZXNlcnZlZCBmb3IgbmF0 aXZlIHRpbWluZyAzNiAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE2NSAtIHJl c2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDM3ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ ICsJLyogMTY2IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgMzggKi8KPiA+ID4gPiA+ICsJ eyB9LAo+ID4gPiA+ID4gKwkvKiAxNjcgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyAzOSAq Lwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE2OCAtIHJlc2VydmVkIGZvciBuYXRp dmUgdGltaW5nIDQwICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTY5IC0gcmVz ZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgNDEgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4g KwkvKiAxNzAgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyA0MiAqLwo+ID4gPiA+ID4gKwl7 IH0sCj4gPiA+ID4gPiArCS8qIDE3MSAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDQzICov Cj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTcyIC0gcmVzZXJ2ZWQgZm9yIG5hdGl2 ZSB0aW1pbmcgNDQgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNzMgLSByZXNl cnZlZCBmb3IgbmF0aXZlIHRpbWluZyA0NSAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiAr CS8qIDE3NCAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDQ2ICovCj4gPiA+ID4gPiArCXsg fSwKPiA+ID4gPiA+ICsJLyogMTc1IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgNDcgKi8K PiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxNzYgLSByZXNlcnZlZCBmb3IgbmF0aXZl IHRpbWluZyA0OCAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE3NyAtIHJlc2Vy dmVkIGZvciBuYXRpdmUgdGltaW5nIDQ5ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJ LyogMTc4IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgNTAgKi8KPiA+ID4gPiA+ICsJeyB9 LAo+ID4gPiA+ID4gKwkvKiAxNzkgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyA1MSAqLwo+ ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE4MCAtIHJlc2VydmVkIGZvciBuYXRpdmUg dGltaW5nIDUyICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTgxIC0gcmVzZXJ2 ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgNTMgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkv KiAxODIgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyA1NCAqLwo+ID4gPiA+ID4gKwl7IH0s Cj4gPiA+ID4gPiArCS8qIDE4MyAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDU1ICovCj4g PiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTg0IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0 aW1pbmcgNTYgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxODUgLSByZXNlcnZl ZCBmb3IgbmF0aXZlIHRpbWluZyA1NyAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8q IDE4NiAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGltaW5nIDU4ICovCj4gPiA+ID4gPiArCXsgfSwK PiA+ID4gPiA+ICsJLyogMTg3IC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgNTkgKi8KPiA+ ID4gPiA+ICsJeyB9LAo+ID4gPiA+ID4gKwkvKiAxODggLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRp bWluZyA2MCAqLwo+ID4gPiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE4OSAtIHJlc2VydmVk IGZvciBuYXRpdmUgdGltaW5nIDYxICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyog MTkwIC0gcmVzZXJ2ZWQgZm9yIG5hdGl2ZSB0aW1pbmcgNjIgKi8KPiA+ID4gPiA+ICsJeyB9LAo+ ID4gPiA+ID4gKwkvKiAxOTEgLSByZXNlcnZlZCBmb3IgbmF0aXZlIHRpbWluZyA2MyAqLwo+ID4g PiA+ID4gKwl7IH0sCj4gPiA+ID4gPiArCS8qIDE5MiAtIHJlc2VydmVkIGZvciBuYXRpdmUgdGlt aW5nIDY0ICovCj4gPiA+ID4gPiArCXsgfSwKPiA+ID4gPiA+ICsJLyogMTkzIC0gNTEyMHgyMTYw QDEyMEh6IDY0OjI3ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjUxMjB4MjE2MCIsIERSTV9N T0RFX1RZUEVfRFJJVkVSLCAxNDg1MDAwLCA1MTIwLCA1Mjg0LAo+ID4gPiA+ID4gKwkJICAgNTM3 MiwgNTUwMCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjI1MCwgMCwKPiA+ID4gPiA+ICsJCSAgIERS TV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkg IC52cmVmcmVzaCA9IDEyMCwgLnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJFX0FT UEVDVF82NF8yNywgfSwKPiA+ID4gPiA+ICsJLyogMTk0IC0gNzY4MHg0MzIwQDI0SHogMTY6OSAq Lwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCI3NjgweDQzMjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZF UiwgMTE4ODAwMCwgNzY4MCwgMTAyMzIsCj4gPiA+ID4gPiArCQkgICAxMDQwOCwgMTEwMDAsIDAs IDQzMjAsIDQzMzYsIDQzNTYsIDQ1MDAsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFH X1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2gg PSAyNCwgLnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJFX0FTUEVDVF8xNl85LCB9 LAo+ID4gPiA+ID4gKwkvKiAxOTUgLSA3NjgweDQzMjBAMjVIeiAxNjo5ICovCj4gPiA+ID4gPiAr CXsgRFJNX01PREUoIjc2ODB4NDMyMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMTg4MDAwLCA3 NjgwLCAxMDAzMiwKPiA+ID4gPiA+ICsJCSAgIDEwMjA4LCAxMDgwMCwgMCwgNDMyMCwgNDMzNiwg NDM1NiwgNDQwMCwgMCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJN X01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDI1LCAucGljdHVy ZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzE2XzksIH0sCj4gPiA+ID4gPiAr CS8qIDE5NiAtIDc2ODB4NDMyMEAzMEh6IDE2OjkgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgi NzY4MHg0MzIwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDExODgwMDAsIDc2ODAsIDgyMzIsCj4g PiA+ID4gPiArCQkgICA4NDA4LCA5MDAwLCAwLCA0MzIwLCA0MzM2LCA0MzU2LCA0NDAwLCAwLAo+ ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lO QyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0gMzAsIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9 IEhETUlfUElDVFVSRV9BU1BFQ1RfMTZfOSwgfSwKPiA+ID4gPiA+ICsJLyogMTk3IC0gNzY4MHg0 MzIwQDQ4SHogMTY6OSAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCI3NjgweDQzMjAiLCBEUk1f TU9ERV9UWVBFX0RSSVZFUiwgMjM3NjAwMCwgNzY4MCwgMTAyMzIsCj4gPiA+ID4gPiArCQkgICAx MDQwOCwgMTEwMDAsIDAsIDQzMjAsIDQzMzYsIDQzNTYsIDQ1MDAsIDAsCj4gPiA+ID4gPiArCQkg ICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ ICsJICAudnJlZnJlc2ggPSA0OCwgLnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJF X0FTUEVDVF8xNl85LCB9LAo+ID4gPiA+ID4gKwkvKiAxOTggLSA3NjgweDQzMjBANTBIeiAxNjo5 ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjc2ODB4NDMyMCIsIERSTV9NT0RFX1RZUEVfRFJJ VkVSLCAyMzc2MDAwLCA3NjgwLCAxMDAzMiwKPiA+ID4gPiA+ICsJCSAgIDEwMjA4LCAxMDgwMCwg MCwgNDMyMCwgNDMzNiwgNDM1NiwgNDQwMCwgMCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZM QUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVz aCA9IDUwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzE2Xzks IH0sCj4gPiA+ID4gPiArCS8qIDE5OSAtIDc2ODB4NDMyMEA2MEh6IDE2OjkgKi8KPiA+ID4gPiA+ ICsJeyBEUk1fTU9ERSgiNzY4MHg0MzIwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIzNzYwMDAs IDc2ODAsIDgyMzIsCj4gPiA+ID4gPiArCQkgICA4NDA4LCA5MDAwLCAwLCA0MzIwLCA0MzM2LCA0 MzU2LCA0NDAwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1f TU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0gNjAsIC5waWN0dXJl X2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfMTZfOSwgfSwKPiA+ID4gPiA+ICsJ LyogMjAwIC0gNzY4MHg0MzIwQDEwMEh6IDE2OjkgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgi NzY4MHg0MzIwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDQ3NTIwMDAsIDc2ODAsIDk3OTIsCj4g PiA+ID4gPiArCQkgICA5OTY4LCAxMDU2MCwgMCwgNDMyMCwgNDMzNiwgNDM1NiwgNDUwMCwgMCwK PiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZ TkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDEwMCwgLnBpY3R1cmVfYXNwZWN0X3JhdGlv ID0gSERNSV9QSUNUVVJFX0FTUEVDVF8xNl85LCB9LAo+ID4gPiA+ID4gKwkvKiAyMDEgLSA3Njgw eDQzMjBAMTIwSHogMTY6OSAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCI3NjgweDQzMjAiLCBE Uk1fTU9ERV9UWVBFX0RSSVZFUiwgNDc1MjAwMCwgNzY4MCwgODAzMiwKPiA+ID4gPiA+ICsJCSAg IDgyMDgsIDg4MDAsIDAsIDQzMjAsIDQzMzYsIDQzNTYsIDQ1MDAsIDAsCj4gPiA+ID4gPiArCQkg ICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ ICsJICAudnJlZnJlc2ggPSAxMjAsIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVS RV9BU1BFQ1RfMTZfOSwgfSwKPiA+ID4gPiA+ICsJLyogMjAyIC0gNzY4MHg0MzIwQDI0SHogNjQ6 MjcgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgiNzY4MHg0MzIwIiwgRFJNX01PREVfVFlQRV9E UklWRVIsIDExODgwMDAsIDc2ODAsIDEwMjMyLAo+ID4gPiA+ID4gKwkJICAgMTA0MDgsIDExMDAw LCAwLCA0MzIwLCA0MzM2LCA0MzU2LCA0NTAwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVf RkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZy ZXNoID0gMjQsIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRf MjcsIH0sCj4gPiA+ID4gPiArCS8qIDIwMyAtIDc2ODB4NDMyMEAyNUh6IDY0OjI3ICovCj4gPiA+ ID4gPiArCXsgRFJNX01PREUoIjc2ODB4NDMyMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMTg4 MDAwLCA3NjgwLCAxMDAzMiwKPiA+ID4gPiA+ICsJCSAgIDEwMjA4LCAxMDgwMCwgMCwgNDMyMCwg NDMzNiwgNDM1NiwgNDQwMCwgMCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5D IHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDI1LCAu cGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4g PiA+ID4gKwkvKiAyMDQgLSA3NjgweDQzMjBAMzBIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERS TV9NT0RFKCI3NjgweDQzMjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTE4ODAwMCwgNzY4MCwg ODIzMiwKPiA+ID4gPiA+ICsJCSAgIDg0MDgsIDkwMDAsIDAsIDQzMjAsIDQzMzYsIDQzNTYsIDQ0 MDAsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZM QUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSAzMCwgLnBpY3R1cmVfYXNwZWN0 X3JhdGlvID0gSERNSV9QSUNUVVJFX0FTUEVDVF82NF8yNywgfSwKPiA+ID4gPiA+ICsJLyogMjA1 IC0gNzY4MHg0MzIwQDQ4SHogNjQ6MjcgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgiNzY4MHg0 MzIwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIzNzYwMDAsIDc2ODAsIDEwMjMyLAo+ID4gPiA+ ID4gKwkJICAgMTA0MDgsIDExMDAwLCAwLCA0MzIwLCA0MzM2LCA0MzU2LCA0NTAwLCAwLAo+ID4g PiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyks Cj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0gNDgsIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhE TUlfUElDVFVSRV9BU1BFQ1RfNjRfMjcsIH0sCj4gPiA+ID4gPiArCS8qIDIwNiAtIDc2ODB4NDMy MEA1MEh6IDY0OjI3ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjc2ODB4NDMyMCIsIERSTV9N T0RFX1RZUEVfRFJJVkVSLCAyMzc2MDAwLCA3NjgwLCAxMDAzMiwKPiA+ID4gPiA+ICsJCSAgIDEw MjA4LCAxMDgwMCwgMCwgNDMyMCwgNDMzNiwgNDM1NiwgNDQwMCwgMCwKPiA+ID4gPiA+ICsJCSAg IERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4g KwkgIC52cmVmcmVzaCA9IDUwLCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVf QVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAyMDcgLSA3NjgweDQzMjBANjBIeiA2NDoy NyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCI3NjgweDQzMjAiLCBEUk1fTU9ERV9UWVBFX0RS SVZFUiwgMjM3NjAwMCwgNzY4MCwgODIzMiwKPiA+ID4gPiA+ICsJCSAgIDg0MDgsIDkwMDAsIDAs IDQzMjAsIDQzMzYsIDQzNTYsIDQ0MDAsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFH X1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2gg PSA2MCwgLnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJFX0FTUEVDVF82NF8yNywg fSwKPiA+ID4gPiA+ICsJLyogMjA4IC0gNzY4MHg0MzIwQDEwMEh6IDY0OjI3ICovCj4gPiA+ID4g PiArCXsgRFJNX01PREUoIjc2ODB4NDMyMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0NzUyMDAw LCA3NjgwLCA5NzkyLAo+ID4gPiA+ID4gKwkJICAgOTk2OCwgMTA1NjAsIDAsIDQzMjAsIDQzMzYs IDQzNTYsIDQ1MDAsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERS TV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSAxMDAsIC5waWN0 dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRfMjcsIH0sCj4gPiA+ID4g PiArCS8qIDIwOSAtIDc2ODB4NDMyMEAxMjBIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9N T0RFKCI3NjgweDQzMjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNDc1MjAwMCwgNzY4MCwgODAz MiwKPiA+ID4gPiA+ICsJCSAgIDgyMDgsIDg4MDAsIDAsIDQzMjAsIDQzMzYsIDQzNTYsIDQ1MDAs IDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdf UFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSAxMjAsIC5waWN0dXJlX2FzcGVjdF9y YXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRfMjcsIH0sCj4gPiA+ID4gPiArCS8qIDIxMCAt IDEwMjQweDQzMjBAMjRIeiA2NDoyNyAqLwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCIxMDI0MHg0 MzIwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE0ODUwMDAsIDEwMjQwLCAxMTczMiwKPiA+ID4g PiA+ICsJCSAgIDExOTA4LCAxMjUwMCwgMCwgNDMyMCwgNDMzNiwgNDM1NiwgNDk1MCwgMCwKPiA+ ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMp LAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDI0LCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBI RE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3LCB9LAo+ID4gPiA+ID4gKwkvKiAyMTEgLSAxMDI0MHg0 MzIwQDI1SHogNjQ6MjcgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgiMTAyNDB4NDMyMCIsIERS TV9NT0RFX1RZUEVfRFJJVkVSLCAxNDg1MDAwLCAxMDI0MCwgMTI3MzIsCj4gPiA+ID4gPiArCQkg ICAxMjkwOCwgMTM1MDAsIDAsIDQzMjAsIDQzMzYsIDQzNTYsIDQ0MDAsIDAsCj4gPiA+ID4gPiAr CQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4g PiA+ICsJICAudnJlZnJlc2ggPSAyNSwgLnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNU VVJFX0FTUEVDVF82NF8yNywgfSwKPiA+ID4gPiA+ICsJLyogMjEyIC0gMTAyNDB4NDMyMEAzMEh6 IDY0OjI3ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjEwMjQweDQzMjAiLCBEUk1fTU9ERV9U WVBFX0RSSVZFUiwgMTQ4NTAwMCwgMTAyNDAsIDEwNTI4LAo+ID4gPiA+ID4gKwkJICAgMTA3MDQs IDExMDAwLCAwLCA0MzIwLCA0MzM2LCA0MzU2LCA0NTAwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJN X01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAg LnZyZWZyZXNoID0gMzAsIC5waWN0dXJlX2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BF Q1RfNjRfMjcsIH0sCj4gPiA+ID4gPiArCS8qIDIxMyAtIDEwMjQweDQzMjBANDhIeiA2NDoyNyAq Lwo+ID4gPiA+ID4gKwl7IERSTV9NT0RFKCIxMDI0MHg0MzIwIiwgRFJNX01PREVfVFlQRV9EUklW RVIsIDI5NzAwMDAsIDEwMjQwLCAxMTczMiwKPiA+ID4gPiA+ICsJCSAgIDExOTA4LCAxMjUwMCwg MCwgNDMyMCwgNDMzNiwgNDM1NiwgNDk1MCwgMCwKPiA+ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZM QUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4gPiA+ID4gKwkgIC52cmVmcmVz aCA9IDQ4LCAucGljdHVyZV9hc3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzY0XzI3 LCB9LAo+ID4gPiA+ID4gKwkvKiAyMTQgLSAxMDI0MHg0MzIwQDUwSHogNjQ6MjcgKi8KPiA+ID4g PiA+ICsJeyBEUk1fTU9ERSgiMTAyNDB4NDMyMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTcw MDAwLCAxMDI0MCwgMTI3MzIsCj4gPiA+ID4gPiArCQkgICAxMjkwOCwgMTM1MDAsIDAsIDQzMjAs IDQzMzYsIDQzNTYsIDQ0MDAsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lO QyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSA1MCwg LnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gSERNSV9QSUNUVVJFX0FTUEVDVF82NF8yNywgfSwKPiA+ ID4gPiA+ICsJLyogMjE1IC0gMTAyNDB4NDMyMEA2MEh6IDY0OjI3ICovCj4gPiA+ID4gPiArCXsg RFJNX01PREUoIjEwMjQweDQzMjAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjk3MDAwMCwgMTAy NDAsIDEwNTI4LAo+ID4gPiA+ID4gKwkJICAgMTA3MDQsIDExMDAwLCAwLCA0MzIwLCA0MzM2LCA0 MzU2LCA0NTAwLCAwLAo+ID4gPiA+ID4gKwkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1f TU9ERV9GTEFHX1BWU1lOQyksCj4gPiA+ID4gPiArCSAgLnZyZWZyZXNoID0gNjAsIC5waWN0dXJl X2FzcGVjdF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRfMjcsIH0sCj4gPiA+ID4gPiAr CS8qIDIxNiAtIDEwMjQweDQzMjBAMTAwSHogNjQ6MjcgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9E RSgiMTAyNDB4NDMyMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1OTQwMDAwLCAxMDI0MCwgMTI0 MzIsCj4gPiA+ID4gPiArCQkgICAxMjYwOCwgMTMyMDAsIDAsIDQzMjAsIDQzMzYsIDQzNTYsIDQ1 MDAsIDAsCj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZM QUdfUFZTWU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSAxMDAsIC5waWN0dXJlX2FzcGVj dF9yYXRpbyA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRfMjcsIH0sCj4gPiA+ID4gPiArCS8qIDIx NyAtIDEwMjQweDQzMjBAMTIwSHogNjQ6MjcgKi8KPiA+ID4gPiA+ICsJeyBEUk1fTU9ERSgiMTAy NDB4NDMyMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1OTQwMDAwLCAxMDI0MCwgMTA1MjgsCj4g PiA+ID4gPiArCQkgICAxMDcwNCwgMTEwMDAsIDAsIDQzMjAsIDQzMzYsIDQzNTYsIDQ1MDAsIDAs Cj4gPiA+ID4gPiArCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZT WU5DKSwKPiA+ID4gPiA+ICsJICAudnJlZnJlc2ggPSAxMjAsIC5waWN0dXJlX2FzcGVjdF9yYXRp byA9IEhETUlfUElDVFVSRV9BU1BFQ1RfNjRfMjcsIH0sCj4gPiA+ID4gPiArCS8qIDIxOCAtIDQw OTZ4MjE2MEAxMDBIeiAyNTY6MTM1ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjQwOTZ4MjE2 MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMTg4MDAwLCA0MDk2LCA0ODk2LAo+ID4gPiA+ID4g KwkJICAgNDk4NCwgNTI4MCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjI1MCwgMCwKPiA+ID4gPiA+ ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpLAo+ID4g PiA+ID4gKwkgIC52cmVmcmVzaCA9IDEwMCwKPiA+ID4gPiA+ICsJICAucGljdHVyZV9hc3BlY3Rf cmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzI1Nl8xMzUsIH0sCj4gPiA+ID4gPiArCS8qIDIx OSAtIDQwOTZ4MjE2MEAxMjBIeiAyNTY6MTM1ICovCj4gPiA+ID4gPiArCXsgRFJNX01PREUoIjQw OTZ4MjE2MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxMTg4MDAwLCA0MDk2LCA0MTg0LAo+ID4g PiA+ID4gKwkJICAgNDI3MiwgNDQwMCwgMCwgMjE2MCwgMjE2OCwgMjE3OCwgMjI1MCwgMCwKPiA+ ID4gPiA+ICsJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMp LAo+ID4gPiA+ID4gKwkgIC52cmVmcmVzaCA9IDEyMCwKPiA+ID4gPiA+ICsJICAucGljdHVyZV9h c3BlY3RfcmF0aW8gPSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzI1Nl8xMzUsIH0sCj4gPiA+ID4gPiAg IH07Cj4gPiA+ID4gPiAgIC8qCj4gPiA+ID4gPiBAQCAtMzAzMCw2ICszMzk4LDEyIEBAIGNlYV9t b2RlX2FsdGVybmF0ZV90aW1pbmdzKHU4IHZpYywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCj4gPiA+ID4gPiAgIAlyZXR1cm4gZmFsc2U7Cj4gPiA+ID4gPiAgIH0KPiA+ID4gPiA+ICtz dGF0aWMgYm9vbCBkcm1fdmFsaWRfY2VhX3ZpYyh1OCB2aWMpCj4gPiA+ID4gPiArewo+ID4gPiA+ ID4gKwlyZXR1cm4gKHZpYyA+IDAgJiYgdmljIDwgMTI4KSB8fAo+ID4gPiA+ID4gKwkgICAgICAg KHZpYyA+IDE5MiAmJiB2aWMgPCBBUlJBWV9TSVpFKGVkaWRfY2VhX21vZGVzKSk7Cj4gPiA+ID4g PiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gICBzdGF0aWMgdTggZHJtX21hdGNoX2NlYV9tb2Rl X2Nsb2NrX3RvbGVyYW5jZShjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdG9fbWF0Y2gs Cj4gPiA+ID4gPiAgIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgY2xvY2tfdG9sZXJhbmNlKQo+ID4g PiA+ID4gICB7Cj4gPiA+ID4gPiBAQCAtMzA0Niw2ICszNDIwLDkgQEAgc3RhdGljIHU4IGRybV9t YXRjaF9jZWFfbW9kZV9jbG9ja190b2xlcmFuY2UoY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKnRvX20KPiA+ID4gPiA+ICAgCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBjZWFfbW9kZSA9 IGVkaWRfY2VhX21vZGVzW3ZpY107Cj4gPiA+ID4gPiAgIAkJdW5zaWduZWQgaW50IGNsb2NrMSwg Y2xvY2syOwo+ID4gPiA+ID4gKwkJaWYgKCFkcm1fdmFsaWRfY2VhX3ZpYyh2aWMpKQo+ID4gPiA+ ID4gKwkJCWNvbnRpbnVlOwo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gICAJCS8qIENoZWNrIGJvdGgg NjBIeiBhbmQgNTkuOTRIeiAqLwo+ID4gPiA+ID4gICAJCWNsb2NrMSA9IGNlYV9tb2RlLmNsb2Nr Owo+ID4gPiA+ID4gICAJCWNsb2NrMiA9IGNlYV9tb2RlX2FsdGVybmF0ZV9jbG9jaygmY2VhX21v ZGUpOwo+ID4gPiA+ID4gQEAgLTMwODUsNiArMzQ2Miw5IEBAIHU4IGRybV9tYXRjaF9jZWFfbW9k ZShjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqdG9fbWF0Y2gpCj4gPiA+ID4gPiAgIAkJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgY2VhX21vZGUgPSBlZGlkX2NlYV9tb2Rlc1t2aWNdOwo+ ID4gPiA+ID4gICAJCXVuc2lnbmVkIGludCBjbG9jazEsIGNsb2NrMjsKPiA+ID4gPiA+ICsJCWlm ICghZHJtX3ZhbGlkX2NlYV92aWModmljKSkKPiA+ID4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4g PiA+ICsKPiA+ID4gPiA+ICAgCQkvKiBDaGVjayBib3RoIDYwSHogYW5kIDU5Ljk0SHogKi8KPiA+ ID4gPiA+ICAgCQljbG9jazEgPSBjZWFfbW9kZS5jbG9jazsKPiA+ID4gPiA+ICAgCQljbG9jazIg PSBjZWFfbW9kZV9hbHRlcm5hdGVfY2xvY2soJmNlYV9tb2RlKTsKPiA+ID4gPiA+IEBAIC0zMTAz LDExICszNDgzLDYgQEAgdTggZHJtX21hdGNoX2NlYV9tb2RlKGNvbnN0IHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICp0b19tYXRjaCkKPiA+ID4gPiA+ICAgfQo+ID4gPiA+ID4gICBFWFBPUlRfU1lN Qk9MKGRybV9tYXRjaF9jZWFfbW9kZSk7Cj4gPiA+ID4gPiAtc3RhdGljIGJvb2wgZHJtX3ZhbGlk X2NlYV92aWModTggdmljKQo+ID4gPiA+ID4gLXsKPiA+ID4gPiA+IC0JcmV0dXJuIHZpYyA+IDAg JiYgdmljIDwgQVJSQVlfU0laRShlZGlkX2NlYV9tb2Rlcyk7Cj4gPiA+ID4gPiAtfQo+ID4gPiA+ ID4gLQo+ID4gPiA+ID4gICAvKioKPiA+ID4gPiA+ICAgICogZHJtX2dldF9jZWFfYXNwZWN0X3Jh dGlvIC0gZ2V0IHRoZSBwaWN0dXJlIGFzcGVjdCByYXRpbyBjb3JyZXNwb25kaW5nIHRvCj4gPiA+ ID4gPiAgICAqIHRoZSBpbnB1dCBWSUMgZnJvbSB0aGUgQ0VBIG1vZGUgbGlzdAo+ID4gPiA+ID4g QEAgLTMxMTcsNiArMzQ5Miw5IEBAIHN0YXRpYyBib29sIGRybV92YWxpZF9jZWFfdmljKHU4IHZp YykKPiA+ID4gPiA+ICAgICovCj4gPiA+ID4gPiAgIGVudW0gaGRtaV9waWN0dXJlX2FzcGVjdCBk cm1fZ2V0X2NlYV9hc3BlY3RfcmF0aW8oY29uc3QgdTggdmlkZW9fY29kZSkKPiA+ID4gPiA+ICAg ewo+ID4gPiA+ID4gKwlpZiAoIWRybV92YWxpZF9jZWFfdmljKHZpZGVvX2NvZGUpKQo+ID4gPiA+ ID4gKwkJcmV0dXJuIEhETUlfUElDVFVSRV9BU1BFQ1RfTk9ORTsKPiA+ID4gPiA+ICsKPiA+ID4g PiA+ICAgCXJldHVybiBlZGlkX2NlYV9tb2Rlc1t2aWRlb19jb2RlXS5waWN0dXJlX2FzcGVjdF9y YXRpbzsKPiA+ID4gPiA+ICAgfQo+ID4gPiA+ID4gICBFWFBPUlRfU1lNQk9MKGRybV9nZXRfY2Vh X2FzcGVjdF9yYXRpbyk7Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2Nv bm5lY3Rvci5oIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4gPiA+ID4gPiBpbmRleCA2 ODFjYjU5MGY5NTIuLjBhOTBlZmEwMjQ2ZSAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUv ZHJtL2RybV9jb25uZWN0b3IuaAo+ID4gPiA+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5l Y3Rvci5oCj4gPiA+ID4gPiBAQCAtMTg4LDE5ICsxODgsMTkgQEAgc3RydWN0IGRybV9oZG1pX2lu Zm8gewo+ID4gPiA+ID4gICAJLyoqCj4gPiA+ID4gPiAgIAkgKiBAeTQyMF92ZGJfbW9kZXM6IGJp dG1hcCBvZiBtb2RlcyB3aGljaCBjYW4gc3VwcG9ydCB5Y2JjcjQyMAo+ID4gPiA+ID4gLQkgKiBv dXRwdXQgb25seSAobm90IG5vcm1hbCBSR0IvWUNCQ1I0NDQvNDIyIG91dHB1dHMpLiBUaGVyZSBh cmUgdG90YWwKPiA+ID4gPiA+IC0JICogMTA3IFZJQ3MgZGVmaW5lZCBieSBDRUEtODYxLUYgc3Bl Yywgc28gdGhlIHNpemUgaXMgMTI4IGJpdHMgdG8gbWFwCj4gPiA+ID4gPiAtCSAqIHVwdG8gMTI4 IFZJQ3M7Cj4gPiA+ID4gPiArCSAqIG91dHB1dCBvbmx5IChub3Qgbm9ybWFsIFJHQi9ZQ0JDUjQ0 NC80MjIgb3V0cHV0cykuIFRoZSBtYXggVklDCj4gPiA+ID4gPiArCSAqIGRlZmluZWQgYnkgdGhl IENFQS04NjEtRyBzcGVjIGlzIDIxOSwgc28gdGhlIHNpemUgaXMgMjU2IGJpdHMgdG8gbWFwCj4g PiA+ID4gPiArCSAqIHVwdG8gMjU2IFZJQ3MuCj4gPiA+ID4gPiAgIAkgKi8KPiA+ID4gPiA+IC0J dW5zaWduZWQgbG9uZyB5NDIwX3ZkYl9tb2Rlc1tCSVRTX1RPX0xPTkdTKDEyOCldOwo+ID4gPiA+ ID4gKwl1bnNpZ25lZCBsb25nIHk0MjBfdmRiX21vZGVzW0JJVFNfVE9fTE9OR1MoMjU2KV07Cj4g PiA+ID4gPiAgIAkvKioKPiA+ID4gPiA+ICAgCSAqIEB5NDIwX2NtZGJfbW9kZXM6IGJpdG1hcCBv ZiBtb2RlcyB3aGljaCBjYW4gc3VwcG9ydCB5Y2JjcjQyMAo+ID4gPiA+ID4gLQkgKiBvdXRwdXQg YWxzbywgYWxvbmcgd2l0aCBub3JtYWwgSERNSSBvdXRwdXRzLiBUaGVyZSBhcmUgdG90YWwgMTA3 Cj4gPiA+ID4gPiAtCSAqIFZJQ3MgZGVmaW5lZCBieSBDRUEtODYxLUYgc3BlYywgc28gdGhlIHNp emUgaXMgMTI4IGJpdHMgdG8gbWFwIHVwdG8KPiA+ID4gPiA+IC0JICogMTI4IFZJQ3M7Cj4gPiA+ ID4gPiArCSAqIG91dHB1dCBhbHNvLCBhbG9uZyB3aXRoIG5vcm1hbCBIRE1JIG91dHB1dHMuIFRo ZSBtYXggVklDIGRlZmluZWQgYnkKPiA+ID4gPiA+ICsJICogdGhlIENFQS04NjEtRyBzcGVjIGlz IDIxOSwgc28gdGhlIHNpemUgaXMgMjU2IGJpdHMgdG8gbWFwIHVwdG8gMjU2Cj4gPiA+ID4gPiAr CSAqIFZJQ3MuCj4gPiA+ID4gPiAgIAkgKi8KPiA+ID4gPiA+IC0JdW5zaWduZWQgbG9uZyB5NDIw X2NtZGJfbW9kZXNbQklUU19UT19MT05HUygxMjgpXTsKPiA+ID4gPiA+ICsJdW5zaWduZWQgbG9u ZyB5NDIwX2NtZGJfbW9kZXNbQklUU19UT19MT05HUygyNTYpXTsKPiA+ID4gPiA+ICAgCS8qKiBA eTQyMF9jbWRiX21hcDogYml0bWFwIG9mIFNWRCBpbmRleCwgdG8gZXh0cmF4dCB2Y2IgbW9kZXMg Ki8KPiA+ID4gPiA+ICAgCXU2NCB5NDIwX2NtZGJfbWFwOwo+ID4gPiA+ID4gCj4gCj4gLS0gCj4g VmlsbGUgU3lyasOkbMOkCj4gSW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==