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=-13.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED 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 B82A0C47426 for ; Fri, 4 Jun 2021 16:32:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A25BC610E7 for ; Fri, 4 Jun 2021 16:32:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231438AbhFDQeM (ORCPT ); Fri, 4 Jun 2021 12:34:12 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:37404 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230446AbhFDQeL (ORCPT ); Fri, 4 Jun 2021 12:34:11 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 604901F43C1E Message-ID: <6c8a685e123ec0a9510f134a5d6a32ed66920700.camel@collabora.com> Subject: Re: [PATCH 2/8] media: hantro: Add support of compressed reference buffers From: Ezequiel Garcia To: Benjamin Gaignard , hverkuil@xs4all.nl, p.zabel@pengutronix.de, mchehab@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@siol.net, emil.l.velikov@gmail.com, andrzej.p@collabora.com, jc@kynesim.co.uk Cc: kernel@pengutronix.de, linux-imx@nxp.com, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Date: Fri, 04 Jun 2021 13:32:13 -0300 In-Reply-To: <20210604130619.491200-3-benjamin.gaignard@collabora.com> References: <20210604130619.491200-1-benjamin.gaignard@collabora.com> <20210604130619.491200-3-benjamin.gaignard@collabora.com> Organization: Collabora Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.38.2-1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Benjamin, Thanks for the patches, they looks really nice! On Fri, 2021-06-04 at 15:06 +0200, Benjamin Gaignard wrote: > Reference frame compression is a feature added in G2 decoder to compress > frame buffers so that the bandwidth of storing/loading reference frames > can be reduced, especially when the resolution of decoded stream is of > high definition. > Can you do some tracing using the performance counters in patch 1, with and without this patch, while we are here, it would be interesting to run some experiments. If I understand correctly, the G2 HEVC engine is producing tiled buffers, which are then post-processed to NV12. So this compression feature is compressing the tiled buffers, the NV12 are still uncompressed. If this is the case, could add some comments somewhere about the different sets of buffers involved? Also, I believe I mentioned this before, is there a plan to be able to expose the tiled buffers to userspace (i.e. without the NV12 linear post-processing)? I think the display controller can take compressed tiled-buffers. > Signed-off-by: Benjamin Gaignard > --- >  .../staging/media/hantro/hantro_g2_hevc_dec.c | 20 ++++++++++-- >  drivers/staging/media/hantro/hantro_g2_regs.h |  4 +++ >  drivers/staging/media/hantro/hantro_hevc.c    | 32 ++++++++++++++++++- >  drivers/staging/media/hantro/hantro_hw.h      |  2 ++ >  4 files changed, 54 insertions(+), 4 deletions(-) > > diff --git a/drivers/staging/media/hantro/hantro_g2_hevc_dec.c b/drivers/staging/media/hantro/hantro_g2_hevc_dec.c > index 89fac5146433..9a715e803037 100644 > --- a/drivers/staging/media/hantro/hantro_g2_hevc_dec.c > +++ b/drivers/staging/media/hantro/hantro_g2_hevc_dec.c > @@ -382,10 +382,12 @@ static int set_ref(struct hantro_ctx *ctx) >         const struct v4l2_ctrl_hevc_pps *pps = ctrls->pps; >         const struct v4l2_ctrl_hevc_decode_params *decode_params = ctrls->decode_params; >         const struct v4l2_hevc_dpb_entry *dpb = decode_params->dpb; > -       dma_addr_t luma_addr, chroma_addr, mv_addr = 0; > +       dma_addr_t luma_addr, chroma_addr, mv_addr, compress_luma_addr, compress_chroma_addr = 0; >         struct hantro_dev *vpu = ctx->dev; >         size_t cr_offset = hantro_hevc_chroma_offset(sps); >         size_t mv_offset = hantro_hevc_motion_vectors_offset(sps); > +       size_t compress_luma_offset = hantro_hevc_luma_compress_offset(sps); > +       size_t compress_chroma_offset = hantro_hevc_chroma_compress_offset(sps); >         u32 max_ref_frames; >         u16 dpb_longterm_e; >         static const struct hantro_reg cur_poc[] = { > @@ -460,6 +462,8 @@ static int set_ref(struct hantro_ctx *ctx) >   >                 chroma_addr = luma_addr + cr_offset; >                 mv_addr = luma_addr + mv_offset; > +               compress_luma_addr = luma_addr + compress_luma_offset; > +               compress_chroma_addr = luma_addr + compress_chroma_offset; >   >                 if (dpb[i].rps == V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR) >                         dpb_longterm_e |= BIT(V4L2_HEVC_DPB_ENTRIES_NUM_MAX - 1 - i); > @@ -467,6 +471,8 @@ static int set_ref(struct hantro_ctx *ctx) >                 hantro_write_addr(vpu, G2_REG_ADDR_REF(i), luma_addr); >                 hantro_write_addr(vpu, G2_REG_CHR_REF(i), chroma_addr); >                 hantro_write_addr(vpu, G2_REG_DMV_REF(i), mv_addr); > +               hantro_write_addr(vpu, G2_COMP_ADDR_REF(i), compress_luma_addr); > +               hantro_write_addr(vpu, G2_COMP_CHR_REF(i), compress_chroma_addr); I'm a bit confused here, you are seeing luma_addr and also compress_luma_addr for references?? I'm not saying this is wrong, just would like some comments in the code so the intention is a bit more clear and I can understand what's going on. >         } >   >         luma_addr = hantro_hevc_get_ref_buf(ctx, decode_params->pic_order_cnt_val); > @@ -475,7 +481,11 @@ static int set_ref(struct hantro_ctx *ctx) >   >         chroma_addr = luma_addr + cr_offset; >         mv_addr = luma_addr + mv_offset; > +       compress_luma_addr = luma_addr + compress_luma_offset; > +       compress_chroma_addr = luma_addr + compress_chroma_offset; >   > +       hantro_write_addr(vpu, G2_COMP_ADDR_REF(i), compress_luma_addr); > +       hantro_write_addr(vpu, G2_COMP_CHR_REF(i), compress_chroma_addr); >         hantro_write_addr(vpu, G2_REG_ADDR_REF(i), luma_addr); >         hantro_write_addr(vpu, G2_REG_CHR_REF(i), chroma_addr); >         hantro_write_addr(vpu, G2_REG_DMV_REF(i++), mv_addr); > @@ -483,6 +493,8 @@ static int set_ref(struct hantro_ctx *ctx) >         hantro_write_addr(vpu, G2_ADDR_DST, luma_addr); >         hantro_write_addr(vpu, G2_ADDR_DST_CHR, chroma_addr); >         hantro_write_addr(vpu, G2_ADDR_DST_MV, mv_addr); > +       hantro_write_addr(vpu, G2_COMP_ADDR_DST, compress_luma_addr); > +       hantro_write_addr(vpu, G2_COMP_CHR, compress_chroma_addr); >   >         hantro_hevc_ref_remove_unused(ctx); >   > @@ -490,6 +502,8 @@ static int set_ref(struct hantro_ctx *ctx) >                 hantro_write_addr(vpu, G2_REG_ADDR_REF(i), 0); >                 hantro_write_addr(vpu, G2_REG_CHR_REF(i), 0); >                 hantro_write_addr(vpu, G2_REG_DMV_REF(i), 0); > +               hantro_write_addr(vpu, G2_COMP_ADDR_REF(i), 0); > +               hantro_write_addr(vpu, G2_COMP_CHR_REF(i), 0); >         } >   >         hantro_reg_write(vpu, &g2_refer_lterm_e, dpb_longterm_e); > @@ -580,8 +594,8 @@ int hantro_g2_hevc_dec_run(struct hantro_ctx *ctx) >         /* Don't disable output */ >         hantro_reg_write(vpu, &g2_out_dis, 0); >   > -       /* Don't compress buffers */ > -       hantro_reg_write(vpu, &g2_ref_compress_bypass, 1); > +       /* Compress buffers */ > +       hantro_reg_write(vpu, &g2_ref_compress_bypass, 0); >   >         /* use NV12 as output format */ >         hantro_reg_write(vpu, &g2_out_rs_e, 1); > diff --git a/drivers/staging/media/hantro/hantro_g2_regs.h b/drivers/staging/media/hantro/hantro_g2_regs.h > index 17d84ec9c5c2..0414d92e3860 100644 > --- a/drivers/staging/media/hantro/hantro_g2_regs.h > +++ b/drivers/staging/media/hantro/hantro_g2_regs.h > @@ -192,6 +192,10 @@ >  #define G2_TILE_FILTER         (G2_SWREG(179)) >  #define G2_TILE_SAO            (G2_SWREG(181)) >  #define G2_TILE_BSD            (G2_SWREG(183)) > +#define G2_COMP_ADDR_DST       (G2_SWREG(190)) > +#define G2_COMP_ADDR_REF(i)    (G2_SWREG(192) + ((i) * 0x8)) > +#define G2_COMP_CHR            (G2_SWREG(224)) > +#define G2_COMP_CHR_REF(i)     (G2_SWREG(226) + ((i) * 0x8)) >   >  #define g2_strm_buffer_len     G2_DEC_REG(258, 0, 0xffffffff) >  #define g2_strm_start_offset   G2_DEC_REG(259, 0, 0xffffffff) > diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c > index 5347f5a41c2a..1b2da990fbf0 100644 > --- a/drivers/staging/media/hantro/hantro_hevc.c > +++ b/drivers/staging/media/hantro/hantro_hevc.c > @@ -61,12 +61,42 @@ static size_t hantro_hevc_mv_size(const struct v4l2_ctrl_hevc_sps *sps) >         return mv_size; >  } >   > +size_t hantro_hevc_luma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps) > +{ > +       return hantro_hevc_motion_vectors_offset(sps) + hantro_hevc_mv_size(sps); > +} > + > +static size_t hantro_hevc_luma_compress_size(const struct v4l2_ctrl_hevc_sps *sps) > +{ > +       u32 pic_width_in_cbsy = > +               round_up((sps->pic_width_in_luma_samples + 8 - 1) / 8, 16); > +       u32 pic_height_in_cbsy = (sps->pic_height_in_luma_samples + 8 - 1) / 8; > + > +       return round_up(pic_width_in_cbsy * pic_height_in_cbsy, 16); > +} > + > +size_t hantro_hevc_chroma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps) > +{ > +       return hantro_hevc_luma_compress_offset(sps) + hantro_hevc_luma_compress_size(sps); > +} > + > +static size_t hantro_hevc_chroma_compress_size(const struct v4l2_ctrl_hevc_sps *sps) > +{ > +       u32 pic_width_in_cbsc = > +               round_up((sps->pic_width_in_luma_samples + 16 - 1) / 16, 16); > +       u32 pic_height_in_cbsc = (sps->pic_height_in_luma_samples / 2 + 4 - 1) / 4; > + Can we get some #defines for these magic numbers? > +       return round_up(pic_width_in_cbsc * pic_height_in_cbsc, 16); > +} > + >  static size_t hantro_hevc_ref_size(struct hantro_ctx *ctx) >  { >         const struct hantro_hevc_dec_ctrls *ctrls = &ctx->hevc_dec.ctrls; >         const struct v4l2_ctrl_hevc_sps *sps = ctrls->sps; >   > -       return hantro_hevc_motion_vectors_offset(sps) + hantro_hevc_mv_size(sps); > +       return hantro_hevc_motion_vectors_offset(sps) + hantro_hevc_mv_size(sps) + > +              hantro_hevc_luma_compress_size(sps) + > +              hantro_hevc_chroma_compress_size(sps); >  } >   >  static void hantro_hevc_ref_free(struct hantro_ctx *ctx) > diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h > index 8fa0aacb61cd..c5374cd74d66 100644 > --- a/drivers/staging/media/hantro/hantro_hw.h > +++ b/drivers/staging/media/hantro/hantro_hw.h > @@ -246,6 +246,8 @@ dma_addr_t hantro_hevc_get_ref_buf(struct hantro_ctx *ctx, int poc); >  void hantro_hevc_ref_remove_unused(struct hantro_ctx *ctx); >  size_t hantro_hevc_chroma_offset(const struct v4l2_ctrl_hevc_sps *sps); >  size_t hantro_hevc_motion_vectors_offset(const struct v4l2_ctrl_hevc_sps *sps); > +size_t hantro_hevc_luma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps); > +size_t hantro_hevc_chroma_compress_offset(const struct v4l2_ctrl_hevc_sps *sps); >   >  static inline size_t >  hantro_h264_mv_size(unsigned int width, unsigned int height) Thanks, Ezequiel 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=-14.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED 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 9C6E7C47428 for ; Fri, 4 Jun 2021 16:32:46 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 47CD6613C9 for ; Fri, 4 Jun 2021 16:32:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 47CD6613C9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.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: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=FvHfJIYCULenskyBcWHFIFjyPTHKFTXhSa+e7dwN1Ck=; b=hT9DCqyXEINS4T ovSdZt1HRgXXBT1RUn1+oV7vr8gZbXSpy7qH+YFHj5OC45cQZctjbgWDcDH2hol2NdMgyLmo/rXKv wqi10xFEb5RHcEB8LN2Zn90auEaVbBwwFb4ZE7DWJ8f5NPbJC6XOyGqYjkDxtwUEfkA6MTU3ny4Ma zMrbmjBmVnXEJD/+6jqimTTcSkceE/jL04Y6EgxBxjyHehIpCvCRiJjsoZqbjZdjnrg9auESDpg+0 zmcCuxHt9jInArXInrB5oWXXQo2z8Dfzmrn0Xfqf/ah9j/Gp1Wdn/zNq3ocISFnbJNqVwM50i7u+o piTYxQz/IOPaCmYki59A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lpCkT-00ENAA-BK; Fri, 04 Jun 2021 16:32:41 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lpCkF-00EN6T-0f; Fri, 04 Jun 2021 16:32:29 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 604901F43C1E Message-ID: <6c8a685e123ec0a9510f134a5d6a32ed66920700.camel@collabora.com> Subject: Re: [PATCH 2/8] media: hantro: Add support of compressed reference buffers From: Ezequiel Garcia To: Benjamin Gaignard , hverkuil@xs4all.nl, p.zabel@pengutronix.de, mchehab@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@siol.net, emil.l.velikov@gmail.com, andrzej.p@collabora.com, jc@kynesim.co.uk Cc: kernel@pengutronix.de, linux-imx@nxp.com, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Date: Fri, 04 Jun 2021 13:32:13 -0300 In-Reply-To: <20210604130619.491200-3-benjamin.gaignard@collabora.com> References: <20210604130619.491200-1-benjamin.gaignard@collabora.com> <20210604130619.491200-3-benjamin.gaignard@collabora.com> Organization: Collabora User-Agent: Evolution 3.38.2-1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210604_093227_328190_28094376 X-CRM114-Status: GOOD ( 29.09 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgQmVuamFtaW4sCgpUaGFua3MgZm9yIHRoZSBwYXRjaGVzLCB0aGV5IGxvb2tzIHJlYWxseSBu aWNlIQoKT24gRnJpLCAyMDIxLTA2LTA0IGF0IDE1OjA2ICswMjAwLCBCZW5qYW1pbiBHYWlnbmFy ZCB3cm90ZToKPiBSZWZlcmVuY2UgZnJhbWUgY29tcHJlc3Npb24gaXMgYSBmZWF0dXJlIGFkZGVk IGluIEcyIGRlY29kZXIgdG8gY29tcHJlc3MKPiBmcmFtZSBidWZmZXJzIHNvIHRoYXQgdGhlIGJh bmR3aWR0aCBvZiBzdG9yaW5nL2xvYWRpbmcgcmVmZXJlbmNlIGZyYW1lcwo+IGNhbiBiZSByZWR1 Y2VkLCBlc3BlY2lhbGx5IHdoZW4gdGhlIHJlc29sdXRpb24gb2YgZGVjb2RlZCBzdHJlYW0gaXMg b2YKPiBoaWdoIGRlZmluaXRpb24uCj4gCgpDYW4geW91IGRvIHNvbWUgdHJhY2luZyB1c2luZyB0 aGUgcGVyZm9ybWFuY2UgY291bnRlcnMgaW4gcGF0Y2ggMSwKd2l0aCBhbmQgd2l0aG91dCB0aGlz IHBhdGNoLCB3aGlsZSB3ZSBhcmUgaGVyZSwgaXQgd291bGQgYmUgaW50ZXJlc3RpbmcKdG8gcnVu IHNvbWUgZXhwZXJpbWVudHMuCgpJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB0aGUgRzIgSEVW QyBlbmdpbmUgaXMgcHJvZHVjaW5nIHRpbGVkIGJ1ZmZlcnMsCndoaWNoIGFyZSB0aGVuIHBvc3Qt cHJvY2Vzc2VkIHRvIE5WMTIuCgpTbyB0aGlzIGNvbXByZXNzaW9uIGZlYXR1cmUgaXMgY29tcHJl c3NpbmcgdGhlIHRpbGVkIGJ1ZmZlcnMsCnRoZSBOVjEyIGFyZSBzdGlsbCB1bmNvbXByZXNzZWQu IElmIHRoaXMgaXMgdGhlIGNhc2UsIGNvdWxkIGFkZApzb21lIGNvbW1lbnRzIHNvbWV3aGVyZSBh Ym91dCB0aGUgZGlmZmVyZW50IHNldHMgb2YgYnVmZmVycyBpbnZvbHZlZD8gCgpBbHNvLCBJIGJl bGlldmUgSSBtZW50aW9uZWQgdGhpcyBiZWZvcmUsIGlzIHRoZXJlIGEgcGxhbgp0byBiZSBhYmxl IHRvIGV4cG9zZSB0aGUgdGlsZWQgYnVmZmVycyB0byB1c2Vyc3BhY2UgKGkuZS4gd2l0aG91dAp0 aGUgTlYxMiBsaW5lYXIgcG9zdC1wcm9jZXNzaW5nKT8gSSB0aGluayB0aGUgZGlzcGxheSBjb250 cm9sbGVyCmNhbiB0YWtlIGNvbXByZXNzZWQgdGlsZWQtYnVmZmVycy4KCj4gU2lnbmVkLW9mZi1i eTogQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+Cj4g LS0tCj4gwqAuLi4vc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMgfCAy MCArKysrKysrKysrLS0KPiDCoGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cy X3JlZ3MuaCB8wqAgNCArKysKPiDCoGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJv X2hldmMuY8KgwqDCoCB8IDMyICsrKysrKysrKysrKysrKysrKy0KPiDCoGRyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmjCoMKgwqDCoMKgIHzCoCAyICsrCj4gwqA0IGZpbGVz IGNoYW5nZWQsIDU0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMgYi9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9oZXZjX2RlYy5jCj4gaW5kZXgg ODlmYWM1MTQ2NDMzLi45YTcxNWU4MDMwMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9oYW50cm9fZzJfaGV2Y19kZWMuYwo+ICsrKyBiL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMKPiBAQCAtMzgyLDEwICszODIsMTIg QEAgc3RhdGljIGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDC oMKgwqDCoGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19wcHMgKnBwcyA9IGN0cmxzLT5wcHM7 Cj4gwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19kZWNvZGVfcGFy YW1zICpkZWNvZGVfcGFyYW1zID0gY3RybHMtPmRlY29kZV9wYXJhbXM7Cj4gwqDCoMKgwqDCoMKg wqDCoGNvbnN0IHN0cnVjdCB2NGwyX2hldmNfZHBiX2VudHJ5ICpkcGIgPSBkZWNvZGVfcGFyYW1z LT5kcGI7Cj4gLcKgwqDCoMKgwqDCoMKgZG1hX2FkZHJfdCBsdW1hX2FkZHIsIGNocm9tYV9hZGRy LCBtdl9hZGRyID0gMDsKPiArwqDCoMKgwqDCoMKgwqBkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hy b21hX2FkZHIsIG12X2FkZHIsIGNvbXByZXNzX2x1bWFfYWRkciwgY29tcHJlc3NfY2hyb21hX2Fk ZHIgPSAwOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5k ZXY7Cj4gwqDCoMKgwqDCoMKgwqDCoHNpemVfdCBjcl9vZmZzZXQgPSBoYW50cm9faGV2Y19jaHJv bWFfb2Zmc2V0KHNwcyk7Cj4gwqDCoMKgwqDCoMKgwqDCoHNpemVfdCBtdl9vZmZzZXQgPSBoYW50 cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZzZXQoc3BzKTsKPiArwqDCoMKgwqDCoMKgwqBzaXpl X3QgY29tcHJlc3NfbHVtYV9vZmZzZXQgPSBoYW50cm9faGV2Y19sdW1hX2NvbXByZXNzX29mZnNl dChzcHMpOwo+ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBjb21wcmVzc19jaHJvbWFfb2Zmc2V0ID0g aGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX29mZnNldChzcHMpOwo+IMKgwqDCoMKgwqDCoMKg wqB1MzIgbWF4X3JlZl9mcmFtZXM7Cj4gwqDCoMKgwqDCoMKgwqDCoHUxNiBkcGJfbG9uZ3Rlcm1f ZTsKPiDCoMKgwqDCoMKgwqDCoMKgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGN1cl9w b2NbXSA9IHsKPiBAQCAtNDYwLDYgKzQ2Miw4IEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj aHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNyX29mZnNldDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG12X2FkZHIgPSBsdW1hX2FkZHIgKyBtdl9vZmZzZXQ7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXByZXNzX2x1bWFfYWRkciA9IGx1bWFfYWRkciArIGNv bXByZXNzX2x1bWFfb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21w cmVzc19jaHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNvbXByZXNzX2Nocm9tYV9vZmZzZXQ7Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChkcGJbaV0ucnBzID09IFY0 TDJfSEVWQ19EUEJfRU5UUllfUlBTX0xUX0NVUlIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHBiX2xvbmd0ZXJtX2UgfD0gQklUKFY0TDJfSEVWQ19E UEJfRU5UUklFU19OVU1fTUFYIC0gMSAtIGkpOwo+IEBAIC00NjcsNiArNDcxLDggQEAgc3RhdGlj IGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERSX1JFRihpKSwg bHVtYV9hZGRyKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0 ZV9hZGRyKHZwdSwgRzJfUkVHX0NIUl9SRUYoaSksIGNocm9tYV9hZGRyKTsKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfUkVHX0RNVl9S RUYoaSksIG12X2FkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoYW50cm9f d3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQUREUl9SRUYoaSksIGNvbXByZXNzX2x1bWFfYWRkcik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwg RzJfQ09NUF9DSFJfUkVGKGkpLCBjb21wcmVzc19jaHJvbWFfYWRkcik7CgpJJ20gYSBiaXQgY29u ZnVzZWQgaGVyZSwgeW91IGFyZSBzZWVpbmcgbHVtYV9hZGRyIGFuZCBhbHNvIGNvbXByZXNzX2x1 bWFfYWRkcgpmb3IgcmVmZXJlbmNlcz8/CgpJJ20gbm90IHNheWluZyB0aGlzIGlzIHdyb25nLCBq dXN0IHdvdWxkIGxpa2Ugc29tZSBjb21tZW50cyBpbiB0aGUgY29kZQpzbyB0aGUgaW50ZW50aW9u IGlzIGEgYml0IG1vcmUgY2xlYXIgYW5kIEkgY2FuIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9u LgoKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGx1bWFfYWRkciA9 IGhhbnRyb19oZXZjX2dldF9yZWZfYnVmKGN0eCwgZGVjb2RlX3BhcmFtcy0+cGljX29yZGVyX2Nu dF92YWwpOwo+IEBAIC00NzUsNyArNDgxLDExIEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGNocm9tYV9hZGRyID0gbHVt YV9hZGRyICsgY3Jfb2Zmc2V0Owo+IMKgwqDCoMKgwqDCoMKgwqBtdl9hZGRyID0gbHVtYV9hZGRy ICsgbXZfb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoGNvbXByZXNzX2x1bWFfYWRkciA9IGx1bWFf YWRkciArIGNvbXByZXNzX2x1bWFfb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoGNvbXByZXNzX2No cm9tYV9hZGRyID0gbHVtYV9hZGRyICsgY29tcHJlc3NfY2hyb21hX29mZnNldDsKPiDCoAo+ICvC oMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9BRERSX1JFRihpKSwg Y29tcHJlc3NfbHVtYV9hZGRyKTsKPiArwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2 cHUsIEcyX0NPTVBfQ0hSX1JFRihpKSwgY29tcHJlc3NfY2hyb21hX2FkZHIpOwo+IMKgwqDCoMKg wqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERSX1JFRihpKSwgbHVtYV9h ZGRyKTsKPiDCoMKgwqDCoMKgwqDCoMKgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9SRUdfQ0hS X1JFRihpKSwgY2hyb21hX2FkZHIpOwo+IMKgwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRk cih2cHUsIEcyX1JFR19ETVZfUkVGKGkrKyksIG12X2FkZHIpOwo+IEBAIC00ODMsNiArNDkzLDgg QEAgc3RhdGljIGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDC oMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQUREUl9EU1QsIGx1bWFfYWRkcik7Cj4g wqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQUREUl9EU1RfQ0hSLCBj aHJvbWFfYWRkcik7Cj4gwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJf QUREUl9EU1RfTVYsIG12X2FkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRy KHZwdSwgRzJfQ09NUF9BRERSX0RTVCwgY29tcHJlc3NfbHVtYV9hZGRyKTsKPiArwqDCoMKgwqDC oMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQ0hSLCBjb21wcmVzc19jaHJvbWFf YWRkcik7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVz ZWQoY3R4KTsKPiDCoAo+IEBAIC00OTAsNiArNTAyLDggQEAgc3RhdGljIGludCBzZXRfcmVmKHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBo YW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERSX1JFRihpKSwgMCk7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19DSFJf UkVGKGkpLCAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0 ZV9hZGRyKHZwdSwgRzJfUkVHX0RNVl9SRUYoaSksIDApOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQUREUl9SRUYoaSksIDAp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUs IEcyX0NPTVBfQ0hSX1JFRihpKSwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqBoYW50cm9fcmVnX3dyaXRlKHZwdSwgJmcyX3JlZmVyX2x0ZXJtX2UsIGRwYl9s b25ndGVybV9lKTsKPiBAQCAtNTgwLDggKzU5NCw4IEBAIGludCBoYW50cm9fZzJfaGV2Y19kZWNf cnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoC8qIERvbid0IGRp c2FibGUgb3V0cHV0ICovCj4gwqDCoMKgwqDCoMKgwqDCoGhhbnRyb19yZWdfd3JpdGUodnB1LCAm ZzJfb3V0X2RpcywgMCk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAvKiBEb24ndCBjb21wcmVzcyBi dWZmZXJzICovCj4gLcKgwqDCoMKgwqDCoMKgaGFudHJvX3JlZ193cml0ZSh2cHUsICZnMl9yZWZf Y29tcHJlc3NfYnlwYXNzLCAxKTsKPiArwqDCoMKgwqDCoMKgwqAvKiBDb21wcmVzcyBidWZmZXJz ICovCj4gK8KgwqDCoMKgwqDCoMKgaGFudHJvX3JlZ193cml0ZSh2cHUsICZnMl9yZWZfY29tcHJl c3NfYnlwYXNzLCAwKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiB1c2UgTlYxMiBhcyBvdXRw dXQgZm9ybWF0ICovCj4gwqDCoMKgwqDCoMKgwqDCoGhhbnRyb19yZWdfd3JpdGUodnB1LCAmZzJf b3V0X3JzX2UsIDEpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJv L2hhbnRyb19nMl9yZWdzLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19n Ml9yZWdzLmgKPiBpbmRleCAxN2Q4NGVjOWM1YzIuLjA0MTRkOTJlMzg2MCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgKPiArKysgYi9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgKPiBAQCAtMTkyLDYg KzE5MiwxMCBAQAo+IMKgI2RlZmluZSBHMl9USUxFX0ZJTFRFUsKgwqDCoMKgwqDCoMKgwqDCoChH Ml9TV1JFRygxNzkpKQo+IMKgI2RlZmluZSBHMl9USUxFX1NBT8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoChHMl9TV1JFRygxODEpKQo+IMKgI2RlZmluZSBHMl9USUxFX0JTRMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoChHMl9TV1JFRygxODMpKQo+ICsjZGVmaW5lIEcyX0NPTVBfQUREUl9EU1TCoMKg wqDCoMKgwqDCoChHMl9TV1JFRygxOTApKQo+ICsjZGVmaW5lIEcyX0NPTVBfQUREUl9SRUYoaSnC oMKgwqDCoChHMl9TV1JFRygxOTIpICsgKChpKSAqIDB4OCkpCj4gKyNkZWZpbmUgRzJfQ09NUF9D SFLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoRzJfU1dSRUcoMjI0KSkKPiArI2RlZmluZSBHMl9D T01QX0NIUl9SRUYoaSnCoMKgwqDCoMKgKEcyX1NXUkVHKDIyNikgKyAoKGkpICogMHg4KSkKPiDC oAo+IMKgI2RlZmluZSBnMl9zdHJtX2J1ZmZlcl9sZW7CoMKgwqDCoMKgRzJfREVDX1JFRygyNTgs IDAsIDB4ZmZmZmZmZmYpCj4gwqAjZGVmaW5lIGcyX3N0cm1fc3RhcnRfb2Zmc2V0wqDCoMKgRzJf REVDX1JFRygyNTksIDAsIDB4ZmZmZmZmZmYpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vaGFudHJvX2hldmMuYwo+IGluZGV4IDUzNDdmNWE0MWMyYS4uMWIyZGE5OTBmYmYwIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYwo+ICsr KyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYwo+IEBAIC02MSwx MiArNjEsNDIgQEAgc3RhdGljIHNpemVfdCBoYW50cm9faGV2Y19tdl9zaXplKGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG12X3Np emU7Cj4gwqB9Cj4gwqAKPiArc2l6ZV90IGhhbnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfb2Zmc2V0 KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPiArewo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiBoYW50cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZzZXQoc3BzKSArIGhhbnRy b19oZXZjX212X3NpemUoc3BzKTsKPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBoYW50cm9faGV2 Y19sdW1hX2NvbXByZXNzX3NpemUoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3Bz KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIHBpY193aWR0aF9pbl9jYnN5ID0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcm91bmRfdXAoKHNwcy0+cGljX3dpZHRoX2luX2x1bWFf c2FtcGxlcyArIDggLSAxKSAvIDgsIDE2KTsKPiArwqDCoMKgwqDCoMKgwqB1MzIgcGljX2hlaWdo dF9pbl9jYnN5ID0gKHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXMgKyA4IC0gMSkgLyA4 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcm91bmRfdXAocGljX3dpZHRoX2luX2Nic3kg KiBwaWNfaGVpZ2h0X2luX2Nic3ksIDE2KTsKPiArfQo+ICsKPiArc2l6ZV90IGhhbnRyb19oZXZj X2Nocm9tYV9jb21wcmVzc19vZmZzZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAq c3BzKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGhhbnRyb19oZXZjX2x1bWFfY29tcHJl c3Nfb2Zmc2V0KHNwcykgKyBoYW50cm9faGV2Y19sdW1hX2NvbXByZXNzX3NpemUoc3BzKTsKPiAr fQo+ICsKPiArc3RhdGljIHNpemVfdCBoYW50cm9faGV2Y19jaHJvbWFfY29tcHJlc3Nfc2l6ZShj b25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpzcHMpCj4gK3sKPiArwqDCoMKgwqDCoMKg wqB1MzIgcGljX3dpZHRoX2luX2Nic2MgPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByb3VuZF91cCgoc3BzLT5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzICsgMTYgLSAxKSAvIDE2 LCAxNik7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIHBpY19oZWlnaHRfaW5fY2JzYyA9IChzcHMtPnBp Y19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzIC8gMiArIDQgLSAxKSAvIDQ7Cj4gKwoKQ2FuIHdlIGdl dCBzb21lICNkZWZpbmVzIGZvciB0aGVzZSBtYWdpYyBudW1iZXJzPwoKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gcm91bmRfdXAocGljX3dpZHRoX2luX2Nic2MgKiBwaWNfaGVpZ2h0X2luX2Nic2Ms IDE2KTsKPiArfQo+ICsKPiDCoHN0YXRpYyBzaXplX3QgaGFudHJvX2hldmNfcmVmX3NpemUoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0 IGhhbnRyb19oZXZjX2RlY19jdHJscyAqY3RybHMgPSAmY3R4LT5oZXZjX2RlYy5jdHJsczsKPiDC oMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzID0gY3Ry bHMtPnNwczsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBoYW50cm9faGV2Y19tb3Rpb25f dmVjdG9yc19vZmZzZXQoc3BzKSArIGhhbnRyb19oZXZjX212X3NpemUoc3BzKTsKPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gaGFudHJvX2hldmNfbW90aW9uX3ZlY3RvcnNfb2Zmc2V0KHNwcykgKyBo YW50cm9faGV2Y19tdl9zaXplKHNwcykgKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBo YW50cm9faGV2Y19sdW1hX2NvbXByZXNzX3NpemUoc3BzKSArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhhbnRyb19oZXZjX2Nocm9tYV9jb21wcmVzc19zaXplKHNwcyk7Cj4gwqB9Cj4g wqAKPiDCoHN0YXRpYyB2b2lkIGhhbnRyb19oZXZjX3JlZl9mcmVlKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJv X2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4gaW5kZXgg OGZhMGFhY2I2MWNkLi5jNTM3NGNkNzRkNjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9oYW50cm9faHcuaAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX2h3LmgKPiBAQCAtMjQ2LDYgKzI0Niw4IEBAIGRtYV9hZGRyX3QgaGFudHJv X2hldmNfZ2V0X3JlZl9idWYoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgaW50IHBvYyk7Cj4gwqB2 b2lkIGhhbnRyb19oZXZjX3JlZl9yZW1vdmVfdW51c2VkKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgp Owo+IMKgc2l6ZV90IGhhbnRyb19oZXZjX2Nocm9tYV9vZmZzZXQoY29uc3Qgc3RydWN0IHY0bDJf Y3RybF9oZXZjX3NwcyAqc3BzKTsKPiDCoHNpemVfdCBoYW50cm9faGV2Y19tb3Rpb25fdmVjdG9y c19vZmZzZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPiArc2l6ZV90 IGhhbnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxf aGV2Y19zcHMgKnNwcyk7Cj4gK3NpemVfdCBoYW50cm9faGV2Y19jaHJvbWFfY29tcHJlc3Nfb2Zm c2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcyk7Cj4gwqAKPiDCoHN0YXRp YyBpbmxpbmUgc2l6ZV90Cj4gwqBoYW50cm9faDI2NF9tdl9zaXplKHVuc2lnbmVkIGludCB3aWR0 aCwgdW5zaWduZWQgaW50IGhlaWdodCkKClRoYW5rcywKRXplcXVpZWwKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5n IGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg== 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=-14.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D3DC1C47425 for ; Fri, 4 Jun 2021 16:34:15 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8CCCC61107 for ; Fri, 4 Jun 2021 16:34:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8CCCC61107 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.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: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Jgd9rtOwMq0xcQUW5O8yHIVK2REZRkffwENLVGvEhBE=; b=FglAjTp6vrBUTz k8Z391dWukwYwIMiH5mcmRUiPm55xMEz8X/rYaCWh7Uk0xeF1xJWW9qd63EiwQ++YRAYzRNXS2I4u 49017pB8AgmJ1FFBp1bzywYzVdBP9AmNAURkfRffMTJ/M8kXOp1cjFTWIW3eBVePf+0i/o59B25lu ck/YZZXDNxmPJNHgqP7OGBwfBE4H81/BR9+poHECWWDcsZDNsy8hwJCeNdGB6VI6ONt24YYtObIiP 9LcTtTjOsKAg0L/RHrUcCBfIbSM2BLaDYoZBsx4aOydNkW0eEbJDwMOqWbr1XpkO4Y5emUfepf7j0 OsXzPZAgVgAKGvOjAehQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lpCkJ-00EN8V-LE; Fri, 04 Jun 2021 16:32:31 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lpCkF-00EN6T-0f; Fri, 04 Jun 2021 16:32:29 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: ezequiel) with ESMTPSA id 604901F43C1E Message-ID: <6c8a685e123ec0a9510f134a5d6a32ed66920700.camel@collabora.com> Subject: Re: [PATCH 2/8] media: hantro: Add support of compressed reference buffers From: Ezequiel Garcia To: Benjamin Gaignard , hverkuil@xs4all.nl, p.zabel@pengutronix.de, mchehab@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@siol.net, emil.l.velikov@gmail.com, andrzej.p@collabora.com, jc@kynesim.co.uk Cc: kernel@pengutronix.de, linux-imx@nxp.com, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Date: Fri, 04 Jun 2021 13:32:13 -0300 In-Reply-To: <20210604130619.491200-3-benjamin.gaignard@collabora.com> References: <20210604130619.491200-1-benjamin.gaignard@collabora.com> <20210604130619.491200-3-benjamin.gaignard@collabora.com> Organization: Collabora User-Agent: Evolution 3.38.2-1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210604_093227_328190_28094376 X-CRM114-Status: GOOD ( 29.09 ) 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 SGkgQmVuamFtaW4sCgpUaGFua3MgZm9yIHRoZSBwYXRjaGVzLCB0aGV5IGxvb2tzIHJlYWxseSBu aWNlIQoKT24gRnJpLCAyMDIxLTA2LTA0IGF0IDE1OjA2ICswMjAwLCBCZW5qYW1pbiBHYWlnbmFy ZCB3cm90ZToKPiBSZWZlcmVuY2UgZnJhbWUgY29tcHJlc3Npb24gaXMgYSBmZWF0dXJlIGFkZGVk IGluIEcyIGRlY29kZXIgdG8gY29tcHJlc3MKPiBmcmFtZSBidWZmZXJzIHNvIHRoYXQgdGhlIGJh bmR3aWR0aCBvZiBzdG9yaW5nL2xvYWRpbmcgcmVmZXJlbmNlIGZyYW1lcwo+IGNhbiBiZSByZWR1 Y2VkLCBlc3BlY2lhbGx5IHdoZW4gdGhlIHJlc29sdXRpb24gb2YgZGVjb2RlZCBzdHJlYW0gaXMg b2YKPiBoaWdoIGRlZmluaXRpb24uCj4gCgpDYW4geW91IGRvIHNvbWUgdHJhY2luZyB1c2luZyB0 aGUgcGVyZm9ybWFuY2UgY291bnRlcnMgaW4gcGF0Y2ggMSwKd2l0aCBhbmQgd2l0aG91dCB0aGlz IHBhdGNoLCB3aGlsZSB3ZSBhcmUgaGVyZSwgaXQgd291bGQgYmUgaW50ZXJlc3RpbmcKdG8gcnVu IHNvbWUgZXhwZXJpbWVudHMuCgpJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB0aGUgRzIgSEVW QyBlbmdpbmUgaXMgcHJvZHVjaW5nIHRpbGVkIGJ1ZmZlcnMsCndoaWNoIGFyZSB0aGVuIHBvc3Qt cHJvY2Vzc2VkIHRvIE5WMTIuCgpTbyB0aGlzIGNvbXByZXNzaW9uIGZlYXR1cmUgaXMgY29tcHJl c3NpbmcgdGhlIHRpbGVkIGJ1ZmZlcnMsCnRoZSBOVjEyIGFyZSBzdGlsbCB1bmNvbXByZXNzZWQu IElmIHRoaXMgaXMgdGhlIGNhc2UsIGNvdWxkIGFkZApzb21lIGNvbW1lbnRzIHNvbWV3aGVyZSBh Ym91dCB0aGUgZGlmZmVyZW50IHNldHMgb2YgYnVmZmVycyBpbnZvbHZlZD8gCgpBbHNvLCBJIGJl bGlldmUgSSBtZW50aW9uZWQgdGhpcyBiZWZvcmUsIGlzIHRoZXJlIGEgcGxhbgp0byBiZSBhYmxl IHRvIGV4cG9zZSB0aGUgdGlsZWQgYnVmZmVycyB0byB1c2Vyc3BhY2UgKGkuZS4gd2l0aG91dAp0 aGUgTlYxMiBsaW5lYXIgcG9zdC1wcm9jZXNzaW5nKT8gSSB0aGluayB0aGUgZGlzcGxheSBjb250 cm9sbGVyCmNhbiB0YWtlIGNvbXByZXNzZWQgdGlsZWQtYnVmZmVycy4KCj4gU2lnbmVkLW9mZi1i eTogQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+Cj4g LS0tCj4gwqAuLi4vc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMgfCAy MCArKysrKysrKysrLS0KPiDCoGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cy X3JlZ3MuaCB8wqAgNCArKysKPiDCoGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJv X2hldmMuY8KgwqDCoCB8IDMyICsrKysrKysrKysrKysrKysrKy0KPiDCoGRyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2h3LmjCoMKgwqDCoMKgIHzCoCAyICsrCj4gwqA0IGZpbGVz IGNoYW5nZWQsIDU0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMgYi9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9oZXZjX2RlYy5jCj4gaW5kZXgg ODlmYWM1MTQ2NDMzLi45YTcxNWU4MDMwMzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9oYW50cm9fZzJfaGV2Y19kZWMuYwo+ICsrKyBiL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX2hldmNfZGVjLmMKPiBAQCAtMzgyLDEwICszODIsMTIg QEAgc3RhdGljIGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDC oMKgwqDCoGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19wcHMgKnBwcyA9IGN0cmxzLT5wcHM7 Cj4gwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19kZWNvZGVfcGFy YW1zICpkZWNvZGVfcGFyYW1zID0gY3RybHMtPmRlY29kZV9wYXJhbXM7Cj4gwqDCoMKgwqDCoMKg wqDCoGNvbnN0IHN0cnVjdCB2NGwyX2hldmNfZHBiX2VudHJ5ICpkcGIgPSBkZWNvZGVfcGFyYW1z LT5kcGI7Cj4gLcKgwqDCoMKgwqDCoMKgZG1hX2FkZHJfdCBsdW1hX2FkZHIsIGNocm9tYV9hZGRy LCBtdl9hZGRyID0gMDsKPiArwqDCoMKgwqDCoMKgwqBkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hy b21hX2FkZHIsIG12X2FkZHIsIGNvbXByZXNzX2x1bWFfYWRkciwgY29tcHJlc3NfY2hyb21hX2Fk ZHIgPSAwOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5k ZXY7Cj4gwqDCoMKgwqDCoMKgwqDCoHNpemVfdCBjcl9vZmZzZXQgPSBoYW50cm9faGV2Y19jaHJv bWFfb2Zmc2V0KHNwcyk7Cj4gwqDCoMKgwqDCoMKgwqDCoHNpemVfdCBtdl9vZmZzZXQgPSBoYW50 cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZzZXQoc3BzKTsKPiArwqDCoMKgwqDCoMKgwqBzaXpl X3QgY29tcHJlc3NfbHVtYV9vZmZzZXQgPSBoYW50cm9faGV2Y19sdW1hX2NvbXByZXNzX29mZnNl dChzcHMpOwo+ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBjb21wcmVzc19jaHJvbWFfb2Zmc2V0ID0g aGFudHJvX2hldmNfY2hyb21hX2NvbXByZXNzX29mZnNldChzcHMpOwo+IMKgwqDCoMKgwqDCoMKg wqB1MzIgbWF4X3JlZl9mcmFtZXM7Cj4gwqDCoMKgwqDCoMKgwqDCoHUxNiBkcGJfbG9uZ3Rlcm1f ZTsKPiDCoMKgwqDCoMKgwqDCoMKgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGN1cl9w b2NbXSA9IHsKPiBAQCAtNDYwLDYgKzQ2Miw4IEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj aHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNyX29mZnNldDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG12X2FkZHIgPSBsdW1hX2FkZHIgKyBtdl9vZmZzZXQ7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXByZXNzX2x1bWFfYWRkciA9IGx1bWFfYWRkciArIGNv bXByZXNzX2x1bWFfb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21w cmVzc19jaHJvbWFfYWRkciA9IGx1bWFfYWRkciArIGNvbXByZXNzX2Nocm9tYV9vZmZzZXQ7Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChkcGJbaV0ucnBzID09IFY0 TDJfSEVWQ19EUEJfRU5UUllfUlBTX0xUX0NVUlIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHBiX2xvbmd0ZXJtX2UgfD0gQklUKFY0TDJfSEVWQ19E UEJfRU5UUklFU19OVU1fTUFYIC0gMSAtIGkpOwo+IEBAIC00NjcsNiArNDcxLDggQEAgc3RhdGlj IGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERSX1JFRihpKSwg bHVtYV9hZGRyKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0 ZV9hZGRyKHZwdSwgRzJfUkVHX0NIUl9SRUYoaSksIGNocm9tYV9hZGRyKTsKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfUkVHX0RNVl9S RUYoaSksIG12X2FkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoYW50cm9f d3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQUREUl9SRUYoaSksIGNvbXByZXNzX2x1bWFfYWRkcik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwg RzJfQ09NUF9DSFJfUkVGKGkpLCBjb21wcmVzc19jaHJvbWFfYWRkcik7CgpJJ20gYSBiaXQgY29u ZnVzZWQgaGVyZSwgeW91IGFyZSBzZWVpbmcgbHVtYV9hZGRyIGFuZCBhbHNvIGNvbXByZXNzX2x1 bWFfYWRkcgpmb3IgcmVmZXJlbmNlcz8/CgpJJ20gbm90IHNheWluZyB0aGlzIGlzIHdyb25nLCBq dXN0IHdvdWxkIGxpa2Ugc29tZSBjb21tZW50cyBpbiB0aGUgY29kZQpzbyB0aGUgaW50ZW50aW9u IGlzIGEgYml0IG1vcmUgY2xlYXIgYW5kIEkgY2FuIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9u LgoKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGx1bWFfYWRkciA9 IGhhbnRyb19oZXZjX2dldF9yZWZfYnVmKGN0eCwgZGVjb2RlX3BhcmFtcy0+cGljX29yZGVyX2Nu dF92YWwpOwo+IEBAIC00NzUsNyArNDgxLDExIEBAIHN0YXRpYyBpbnQgc2V0X3JlZihzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGNocm9tYV9hZGRyID0gbHVt YV9hZGRyICsgY3Jfb2Zmc2V0Owo+IMKgwqDCoMKgwqDCoMKgwqBtdl9hZGRyID0gbHVtYV9hZGRy ICsgbXZfb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoGNvbXByZXNzX2x1bWFfYWRkciA9IGx1bWFf YWRkciArIGNvbXByZXNzX2x1bWFfb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoGNvbXByZXNzX2No cm9tYV9hZGRyID0gbHVtYV9hZGRyICsgY29tcHJlc3NfY2hyb21hX29mZnNldDsKPiDCoAo+ICvC oMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQ09NUF9BRERSX1JFRihpKSwg Y29tcHJlc3NfbHVtYV9hZGRyKTsKPiArwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2 cHUsIEcyX0NPTVBfQ0hSX1JFRihpKSwgY29tcHJlc3NfY2hyb21hX2FkZHIpOwo+IMKgwqDCoMKg wqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERSX1JFRihpKSwgbHVtYV9h ZGRyKTsKPiDCoMKgwqDCoMKgwqDCoMKgaGFudHJvX3dyaXRlX2FkZHIodnB1LCBHMl9SRUdfQ0hS X1JFRihpKSwgY2hyb21hX2FkZHIpOwo+IMKgwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRk cih2cHUsIEcyX1JFR19ETVZfUkVGKGkrKyksIG12X2FkZHIpOwo+IEBAIC00ODMsNiArNDkzLDgg QEAgc3RhdGljIGludCBzZXRfcmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDC oMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQUREUl9EU1QsIGx1bWFfYWRkcik7Cj4g wqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJfQUREUl9EU1RfQ0hSLCBj aHJvbWFfYWRkcik7Cj4gwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRyKHZwdSwgRzJf QUREUl9EU1RfTVYsIG12X2FkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0ZV9hZGRy KHZwdSwgRzJfQ09NUF9BRERSX0RTVCwgY29tcHJlc3NfbHVtYV9hZGRyKTsKPiArwqDCoMKgwqDC oMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQ0hSLCBjb21wcmVzc19jaHJvbWFf YWRkcik7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaGFudHJvX2hldmNfcmVmX3JlbW92ZV91bnVz ZWQoY3R4KTsKPiDCoAo+IEBAIC00OTAsNiArNTAyLDggQEAgc3RhdGljIGludCBzZXRfcmVmKHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBo YW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19BRERSX1JFRihpKSwgMCk7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX1JFR19DSFJf UkVGKGkpLCAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhhbnRyb193cml0 ZV9hZGRyKHZwdSwgRzJfUkVHX0RNVl9SRUYoaSksIDApOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUsIEcyX0NPTVBfQUREUl9SRUYoaSksIDAp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoYW50cm9fd3JpdGVfYWRkcih2cHUs IEcyX0NPTVBfQ0hSX1JFRihpKSwgMCk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqBoYW50cm9fcmVnX3dyaXRlKHZwdSwgJmcyX3JlZmVyX2x0ZXJtX2UsIGRwYl9s b25ndGVybV9lKTsKPiBAQCAtNTgwLDggKzU5NCw4IEBAIGludCBoYW50cm9fZzJfaGV2Y19kZWNf cnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gwqDCoMKgwqDCoMKgwqDCoC8qIERvbid0IGRp c2FibGUgb3V0cHV0ICovCj4gwqDCoMKgwqDCoMKgwqDCoGhhbnRyb19yZWdfd3JpdGUodnB1LCAm ZzJfb3V0X2RpcywgMCk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAvKiBEb24ndCBjb21wcmVzcyBi dWZmZXJzICovCj4gLcKgwqDCoMKgwqDCoMKgaGFudHJvX3JlZ193cml0ZSh2cHUsICZnMl9yZWZf Y29tcHJlc3NfYnlwYXNzLCAxKTsKPiArwqDCoMKgwqDCoMKgwqAvKiBDb21wcmVzcyBidWZmZXJz ICovCj4gK8KgwqDCoMKgwqDCoMKgaGFudHJvX3JlZ193cml0ZSh2cHUsICZnMl9yZWZfY29tcHJl c3NfYnlwYXNzLCAwKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiB1c2UgTlYxMiBhcyBvdXRw dXQgZm9ybWF0ICovCj4gwqDCoMKgwqDCoMKgwqDCoGhhbnRyb19yZWdfd3JpdGUodnB1LCAmZzJf b3V0X3JzX2UsIDEpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJv L2hhbnRyb19nMl9yZWdzLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19n Ml9yZWdzLmgKPiBpbmRleCAxN2Q4NGVjOWM1YzIuLjA0MTRkOTJlMzg2MCAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgKPiArKysgYi9k cml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmgKPiBAQCAtMTkyLDYg KzE5MiwxMCBAQAo+IMKgI2RlZmluZSBHMl9USUxFX0ZJTFRFUsKgwqDCoMKgwqDCoMKgwqDCoChH Ml9TV1JFRygxNzkpKQo+IMKgI2RlZmluZSBHMl9USUxFX1NBT8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoChHMl9TV1JFRygxODEpKQo+IMKgI2RlZmluZSBHMl9USUxFX0JTRMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoChHMl9TV1JFRygxODMpKQo+ICsjZGVmaW5lIEcyX0NPTVBfQUREUl9EU1TCoMKg wqDCoMKgwqDCoChHMl9TV1JFRygxOTApKQo+ICsjZGVmaW5lIEcyX0NPTVBfQUREUl9SRUYoaSnC oMKgwqDCoChHMl9TV1JFRygxOTIpICsgKChpKSAqIDB4OCkpCj4gKyNkZWZpbmUgRzJfQ09NUF9D SFLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoRzJfU1dSRUcoMjI0KSkKPiArI2RlZmluZSBHMl9D T01QX0NIUl9SRUYoaSnCoMKgwqDCoMKgKEcyX1NXUkVHKDIyNikgKyAoKGkpICogMHg4KSkKPiDC oAo+IMKgI2RlZmluZSBnMl9zdHJtX2J1ZmZlcl9sZW7CoMKgwqDCoMKgRzJfREVDX1JFRygyNTgs IDAsIDB4ZmZmZmZmZmYpCj4gwqAjZGVmaW5lIGcyX3N0cm1fc3RhcnRfb2Zmc2V0wqDCoMKgRzJf REVDX1JFRygyNTksIDAsIDB4ZmZmZmZmZmYpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vaGFudHJvX2hldmMuYwo+IGluZGV4IDUzNDdmNWE0MWMyYS4uMWIyZGE5OTBmYmYwIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYwo+ICsr KyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2hldmMuYwo+IEBAIC02MSwx MiArNjEsNDIgQEAgc3RhdGljIHNpemVfdCBoYW50cm9faGV2Y19tdl9zaXplKGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG12X3Np emU7Cj4gwqB9Cj4gwqAKPiArc2l6ZV90IGhhbnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfb2Zmc2V0 KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcykKPiArewo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiBoYW50cm9faGV2Y19tb3Rpb25fdmVjdG9yc19vZmZzZXQoc3BzKSArIGhhbnRy b19oZXZjX212X3NpemUoc3BzKTsKPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBoYW50cm9faGV2 Y19sdW1hX2NvbXByZXNzX3NpemUoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3Bz KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIHBpY193aWR0aF9pbl9jYnN5ID0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcm91bmRfdXAoKHNwcy0+cGljX3dpZHRoX2luX2x1bWFf c2FtcGxlcyArIDggLSAxKSAvIDgsIDE2KTsKPiArwqDCoMKgwqDCoMKgwqB1MzIgcGljX2hlaWdo dF9pbl9jYnN5ID0gKHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXMgKyA4IC0gMSkgLyA4 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcm91bmRfdXAocGljX3dpZHRoX2luX2Nic3kg KiBwaWNfaGVpZ2h0X2luX2Nic3ksIDE2KTsKPiArfQo+ICsKPiArc2l6ZV90IGhhbnRyb19oZXZj X2Nocm9tYV9jb21wcmVzc19vZmZzZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAq c3BzKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGhhbnRyb19oZXZjX2x1bWFfY29tcHJl c3Nfb2Zmc2V0KHNwcykgKyBoYW50cm9faGV2Y19sdW1hX2NvbXByZXNzX3NpemUoc3BzKTsKPiAr fQo+ICsKPiArc3RhdGljIHNpemVfdCBoYW50cm9faGV2Y19jaHJvbWFfY29tcHJlc3Nfc2l6ZShj b25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpzcHMpCj4gK3sKPiArwqDCoMKgwqDCoMKg wqB1MzIgcGljX3dpZHRoX2luX2Nic2MgPQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByb3VuZF91cCgoc3BzLT5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzICsgMTYgLSAxKSAvIDE2 LCAxNik7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIHBpY19oZWlnaHRfaW5fY2JzYyA9IChzcHMtPnBp Y19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzIC8gMiArIDQgLSAxKSAvIDQ7Cj4gKwoKQ2FuIHdlIGdl dCBzb21lICNkZWZpbmVzIGZvciB0aGVzZSBtYWdpYyBudW1iZXJzPwoKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gcm91bmRfdXAocGljX3dpZHRoX2luX2Nic2MgKiBwaWNfaGVpZ2h0X2luX2Nic2Ms IDE2KTsKPiArfQo+ICsKPiDCoHN0YXRpYyBzaXplX3QgaGFudHJvX2hldmNfcmVmX3NpemUoc3Ry dWN0IGhhbnRyb19jdHggKmN0eCkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0 IGhhbnRyb19oZXZjX2RlY19jdHJscyAqY3RybHMgPSAmY3R4LT5oZXZjX2RlYy5jdHJsczsKPiDC oMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzID0gY3Ry bHMtPnNwczsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBoYW50cm9faGV2Y19tb3Rpb25f dmVjdG9yc19vZmZzZXQoc3BzKSArIGhhbnRyb19oZXZjX212X3NpemUoc3BzKTsKPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gaGFudHJvX2hldmNfbW90aW9uX3ZlY3RvcnNfb2Zmc2V0KHNwcykgKyBo YW50cm9faGV2Y19tdl9zaXplKHNwcykgKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBo YW50cm9faGV2Y19sdW1hX2NvbXByZXNzX3NpemUoc3BzKSArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhhbnRyb19oZXZjX2Nocm9tYV9jb21wcmVzc19zaXplKHNwcyk7Cj4gwqB9Cj4g wqAKPiDCoHN0YXRpYyB2b2lkIGhhbnRyb19oZXZjX3JlZl9mcmVlKHN0cnVjdCBoYW50cm9fY3R4 ICpjdHgpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJv X2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4gaW5kZXgg OGZhMGFhY2I2MWNkLi5jNTM3NGNkNzRkNjYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9oYW50cm9faHcuaAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX2h3LmgKPiBAQCAtMjQ2LDYgKzI0Niw4IEBAIGRtYV9hZGRyX3QgaGFudHJv X2hldmNfZ2V0X3JlZl9idWYoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgaW50IHBvYyk7Cj4gwqB2 b2lkIGhhbnRyb19oZXZjX3JlZl9yZW1vdmVfdW51c2VkKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgp Owo+IMKgc2l6ZV90IGhhbnRyb19oZXZjX2Nocm9tYV9vZmZzZXQoY29uc3Qgc3RydWN0IHY0bDJf Y3RybF9oZXZjX3NwcyAqc3BzKTsKPiDCoHNpemVfdCBoYW50cm9faGV2Y19tb3Rpb25fdmVjdG9y c19vZmZzZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9oZXZjX3NwcyAqc3BzKTsKPiArc2l6ZV90 IGhhbnRyb19oZXZjX2x1bWFfY29tcHJlc3Nfb2Zmc2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxf aGV2Y19zcHMgKnNwcyk7Cj4gK3NpemVfdCBoYW50cm9faGV2Y19jaHJvbWFfY29tcHJlc3Nfb2Zm c2V0KGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zcHMgKnNwcyk7Cj4gwqAKPiDCoHN0YXRp YyBpbmxpbmUgc2l6ZV90Cj4gwqBoYW50cm9faDI2NF9tdl9zaXplKHVuc2lnbmVkIGludCB3aWR0 aCwgdW5zaWduZWQgaW50IGhlaWdodCkKClRoYW5rcywKRXplcXVpZWwKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==