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.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D51B3C2B9F4 for ; Mon, 14 Jun 2021 17:03:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B3DA561209 for ; Mon, 14 Jun 2021 17:03:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235266AbhFNRF3 (ORCPT ); Mon, 14 Jun 2021 13:05:29 -0400 Received: from mail-wr1-f53.google.com ([209.85.221.53]:33400 "EHLO mail-wr1-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233795AbhFNRF0 (ORCPT ); Mon, 14 Jun 2021 13:05:26 -0400 Received: by mail-wr1-f53.google.com with SMTP id a20so15349898wrc.0; Mon, 14 Jun 2021 10:03:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=H7yznGHlzfPxvDpvZSbqFd5fVDqQ5LFFKjpUq3W88rg=; b=eQzf6PJn6Zk1h/GN3B0JmHx0rAjPNLihmapVuV7mJKiCo3bhpaST/DcK68HSBsBf9D yXYoRlPQkhGh3DRxeuzzAxfmsYyrhLaB/feUN0ym1TwyNSPGph3eElvlw6WFShiRbv+F gEzkzGHGMzREQQYj1bWXp/OaIyT91fhFtlxzaDrfxZ5uPlDM8SuSgfs4t23tCSMxl1Sh g5S4L/6o3NA1Zbhld8CYwXiaT6/hdC3x0+UScFFW3LwOplSe/SwcCWC4ohHo12nFmxEx xJEhu/wWEZAqtt3N6VDjte7t4Phs80dBzqkWap2LdIUEMzXxNck81+EJqwGOnjk0dXwj oL2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=H7yznGHlzfPxvDpvZSbqFd5fVDqQ5LFFKjpUq3W88rg=; b=dmvpqw/BGXjA8XRpjZZx3b3gbdQEYr35y85QzPbZpupPfwRZSuiCda4c+leNllIPIt KPWfpVTOaPg9egJg7b6f42gz6nnnZrpydmLMGBA9NCssOaznpqFmZhPWit06Hs88GkEz /5lE9qYXld4OyA2bf3hgbfh3QVCLoy7EhhIhTwcZ3ggraxmHYd+w2kj0i06f9dQZF+H2 4+5oWXRt1oPiG38qe0XoAylbG+ZaWktNV5QC1F03nlJiEMmY6M0zi6WwooDtoRavwYJ8 KSYDBX1z2w0/i4T8k/y6+H32TKV9UsId8rOxpU5bzCRNOONayCcLsLJtt0MRnGS2Hwzz 6ssw== X-Gm-Message-State: AOAM530Tt4sGco50yzCLlnXiCFmqmfxm5ZddWz0bH5GkzHVqQejCVMrd jjpWsGrCsW+3AHsp4s5sLA== X-Google-Smtp-Source: ABdhPJy7b4eSjTkgfw/IxRkzpfMfUcVmAIq1umEwAkfPgPl7K9B+Fd5iZM/qYWqycRgOBXrogfGRjw== X-Received: by 2002:a5d:494c:: with SMTP id r12mr19591862wrs.421.1623690142709; Mon, 14 Jun 2021 10:02:22 -0700 (PDT) Received: from [192.168.200.247] (ip5b434b8b.dynamic.kabel-deutschland.de. [91.67.75.139]) by smtp.gmail.com with ESMTPSA id u15sm374626wmq.1.2021.06.14.10.02.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Jun 2021 10:02:22 -0700 (PDT) Subject: Re: [PATCH v2 05/12] media: hantro: merge Rockchip platform drivers To: Ezequiel Garcia Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Rob Herring , Heiko Stuebner , Philipp Zabel , Lee Jones , Greg Kroah-Hartman , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-rockchip@lists.infradead.org References: <20210525152225.154302-1-knaerzche@gmail.com> <20210527154455.358869-1-knaerzche@gmail.com> <20210527154455.358869-6-knaerzche@gmail.com> <35c24063aec561ca9696ab696fda86d34c38016e.camel@collabora.com> From: Alex Bee Message-ID: Date: Mon, 14 Jun 2021 19:02:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <35c24063aec561ca9696ab696fda86d34c38016e.camel@collabora.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Ezequiel, Am 11.06.21 um 17:36 schrieb Ezequiel Garcia: > Hi Alex, > > This cleanup looks nice, thanks! > > Just a comment about the clock rate and a minor typo. > > On Thu, 2021-05-27 at 17:44 +0200, Alex Bee wrote: >> Merge the two Rockchip platform drivers into one as it was suggested at >> [1] and [2]. >> This will hopefully make it easier to add new variants (which are surely >> to come for Rockchip). >> Also rename from "rk3288" to "v(d/e)pu1" and "rk3399" to "v(d/e)pu2" >> where applicable, as this is the dicition the vendor uses and will >> also refelect the variants that get added later in this series. Rename >> from "rk3288" to "rockchip" if applicable to both hardware versions. >> >> [1] https://patchwork.kernel.org/project/linux-rockchip/patch/20210107134101.195426-6-paul.kocialkowski@bootlin.com/ >> [2] https://patchwork.kernel.org/project/linux-rockchip/patch/20210525152225.154302-5-knaerzche@gmail.com/ >> >> Signed-off-by: Alex Bee >> --- >> >>  Changes in v2: >>  - added patch >> >>  drivers/staging/media/hantro/Makefile         |   9 +- >>  drivers/staging/media/hantro/hantro_hw.h      |  22 +- >>  drivers/staging/media/hantro/rk3288_vpu_hw.c  | 208 ---------- >>  drivers/staging/media/hantro/rk3399_vpu_hw.c  | 222 ----------- >>  ...jpeg_enc.c => rockchip_vpu2_hw_jpeg_enc.c} |  30 +- >>  ...eg2_dec.c => rockchip_vpu2_hw_mpeg2_dec.c} |  25 +- >>  ...w_vp8_dec.c => rockchip_vpu2_hw_vp8_dec.c} |   2 +- >>  ...rk3399_vpu_regs.h => rockchip_vpu2_regs.h} |   6 +- >>  .../staging/media/hantro/rockchip_vpu_hw.c    | 356 ++++++++++++++++++ >>  9 files changed, 402 insertions(+), 478 deletions(-) >>  delete mode 100644 drivers/staging/media/hantro/rk3288_vpu_hw.c >>  delete mode 100644 drivers/staging/media/hantro/rk3399_vpu_hw.c >>  rename drivers/staging/media/hantro/{rk3399_vpu_hw_jpeg_enc.c => rockchip_vpu2_hw_jpeg_enc.c} (87%) >>  rename drivers/staging/media/hantro/{rk3399_vpu_hw_mpeg2_dec.c => rockchip_vpu2_hw_mpeg2_dec.c} (93%) >>  rename drivers/staging/media/hantro/{rk3399_vpu_hw_vp8_dec.c => rockchip_vpu2_hw_vp8_dec.c} (99%) >>  rename drivers/staging/media/hantro/{rk3399_vpu_regs.h => rockchip_vpu2_regs.h} (99%) >>  create mode 100644 drivers/staging/media/hantro/rockchip_vpu_hw.c >> > [..] >> diff --git a/drivers/staging/media/hantro/rockchip_vpu_hw.c b/drivers/staging/media/hantro/rockchip_vpu_hw.c >> new file mode 100644 >> index 000000000000..175d0c5dfdbe >> --- /dev/null >> +++ b/drivers/staging/media/hantro/rockchip_vpu_hw.c >> @@ -0,0 +1,356 @@ >> +// SPDX-License-Identifier: GPL-2.0 >> +/* >> + * Hantro VPU codec driver >> + * >> + * Copyright (C) 2018 Rockchip Electronics Co., Ltd. >> + *     Jeffy Chen >> + */ >> + >> +#include >> + >> +#include "hantro.h" >> +#include "hantro_jpeg.h" >> +#include "hantro_h1_regs.h" >> +#include "rockchip_vpu2_regs.h" >> + >> +#define RK3288_ACLK_MAX_FREQ (400 * 1000 * 1000) >> + > Something for later, could we bump this clock? > > Rockchip uses 300MHz and 600MHz even for RK3288, > see arch/arm/boot/dts/rk3288.dtsi: > > vdpu: vdpu@ff9a0400 { > compatible = "rockchip,vpu-decoder-rk3288", "rockchip,vpu-decoder-v1"; > reg = <0x0 0xff9a0400 0x0 0x400>; > interrupts = ; > interrupt-names = "irq_dec"; > clocks = <&cru ACLK_VCODEC>, <&cru HCLK_VCODEC>; > clock-names = "aclk_vcodec", "hclk_vcodec"; > rockchip,normal-rates = <300000000>, <0>; > rockchip,advanced-rates = <600000000>, <0>; > > On vdpu1 for instance, it switches to the "advanced-rate" > when width > 2560, which I think it's too naive for us. > > At least on RK3566 I tested bumping this rate, while still > passing conformance tests. Yes, RK3288's can (and maybe also should) run at 600 MHz (since we are sugesting to "Bump ACLK to max. possible freq. to improve performance." currently) - but I never ran conformance tests after setting this rate, tbh. I'm also not sure, VDPU2 (RK3399) variant supports VP8 up to 3840x2160p. It would be the only codec supported up that frame size (we already know, that H.264 is supported up to 1920x1088, even if it is not supported currently by upstream hantro driver) and TRM says the hantro IP block is a "1080P encoder/decoder Processing Core", without saying anything specific per codec. Both should be checked and addressed in a upcoming series. >> +/* >> + * Supported formats. >> + */ >> + >> +static const struct hantro_fmt rockchip_vpu_enc_fmts[] = { >> +       { >> +               .fourcc = V4L2_PIX_FMT_YUV420M, >> +               .codec_mode = HANTRO_MODE_NONE, >> +               .enc_fmt = ROCKCHIP_VPU_ENC_FMT_YUV420P, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_NV12M, >> +               .codec_mode = HANTRO_MODE_NONE, >> +               .enc_fmt = ROCKCHIP_VPU_ENC_FMT_YUV420SP, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_YUYV, >> +               .codec_mode = HANTRO_MODE_NONE, >> +               .enc_fmt = ROCKCHIP_VPU_ENC_FMT_YUYV422, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_UYVY, >> +               .codec_mode = HANTRO_MODE_NONE, >> +               .enc_fmt = ROCKCHIP_VPU_ENC_FMT_UYVY422, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_JPEG, >> +               .codec_mode = HANTRO_MODE_JPEG_ENC, >> +               .max_depth = 2, >> +               .header_size = JPEG_HEADER_SIZE, >> +               .frmsize = { >> +                       .min_width = 96, >> +                       .max_width = 8192, >> +                       .step_width = MB_DIM, >> +                       .min_height = 32, >> +                       .max_height = 8192, >> +                       .step_height = MB_DIM, >> +               }, >> +       }, >> +}; >> + >> +static const struct hantro_fmt rockchip_vpu1_postproc_fmts[] = { >> +       { >> +               .fourcc = V4L2_PIX_FMT_YUYV, >> +               .codec_mode = HANTRO_MODE_NONE, >> +       }, >> +}; >> + >> +static const struct hantro_fmt rk3288_vpu_dec_fmts[] = { >> +       { >> +               .fourcc = V4L2_PIX_FMT_NV12, >> +               .codec_mode = HANTRO_MODE_NONE, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_H264_SLICE, >> +               .codec_mode = HANTRO_MODE_H264_DEC, >> +               .max_depth = 2, >> +               .frmsize = { >> +                       .min_width = 48, >> +                       .max_width = 4096, >> +                       .step_width = MB_DIM, >> +                       .min_height = 48, >> +                       .max_height = 2304, >> +                       .step_height = MB_DIM, >> +               }, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_MPEG2_SLICE, >> +               .codec_mode = HANTRO_MODE_MPEG2_DEC, >> +               .max_depth = 2, >> +               .frmsize = { >> +                       .min_width = 48, >> +                       .max_width = 1920, >> +                       .step_width = MB_DIM, >> +                       .min_height = 48, >> +                       .max_height = 1088, >> +                       .step_height = MB_DIM, >> +               }, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_VP8_FRAME, >> +               .codec_mode = HANTRO_MODE_VP8_DEC, >> +               .max_depth = 2, >> +               .frmsize = { >> +                       .min_width = 48, >> +                       .max_width = 3840, >> +                       .step_width = MB_DIM, >> +                       .min_height = 48, >> +                       .max_height = 2160, >> +                       .step_height = MB_DIM, >> +               }, >> +       }, >> +}; >> + >> +static const struct hantro_fmt rk3399_vpu_dec_fmts[] = { >> +       { >> +               .fourcc = V4L2_PIX_FMT_NV12, >> +               .codec_mode = HANTRO_MODE_NONE, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_MPEG2_SLICE, >> +               .codec_mode = HANTRO_MODE_MPEG2_DEC, >> +               .max_depth = 2, >> +               .frmsize = { >> +                       .min_width = 48, >> +                       .max_width = 1920, >> +                       .step_width = MB_DIM, >> +                       .min_height = 48, >> +                       .max_height = 1088, >> +                       .step_height = MB_DIM, >> +               }, >> +       }, >> +       { >> +               .fourcc = V4L2_PIX_FMT_VP8_FRAME, >> +               .codec_mode = HANTRO_MODE_VP8_DEC, >> +               .max_depth = 2, >> +               .frmsize = { >> +                       .min_width = 48, >> +                       .max_width = 3840, >> +                       .step_width = MB_DIM, >> +                       .min_height = 48, >> +                       .max_height = 2160, >> +                       .step_height = MB_DIM, >> +               }, >> +       }, >> +}; >> + >> +static irqreturn_t rockchip_vpu1_vepu_irq(int irq, void *dev_id) >> +{ >> +       struct hantro_dev *vpu = dev_id; >> +       enum vb2_buffer_state state; >> +       u32 status; >> + >> +       status = vepu_read(vpu, H1_REG_INTERRUPT); >> +       state = (status & H1_REG_INTERRUPT_FRAME_RDY) ? >> +               VB2_BUF_STATE_DONE : VB2_BUF_STATE_ERROR; >> + >> +       vepu_write(vpu, 0, H1_REG_INTERRUPT); >> +       vepu_write(vpu, 0, H1_REG_AXI_CTRL); >> + >> +       hantro_irq_done(vpu, state); >> + >> +       return IRQ_HANDLED; >> +} >> + >> +static irqreturn_t rockchip_vpu2_vdpu_irq(int irq, void *dev_id) >> +{ >> +       struct hantro_dev *vpu = dev_id; >> +       enum vb2_buffer_state state; >> +       u32 status; >> + >> +       status = vdpu_read(vpu, VDPU_REG_INTERRUPT); >> +       state = (status & VDPU_REG_INTERRUPT_DEC_IRQ) ? >> +               VB2_BUF_STATE_DONE : VB2_BUF_STATE_ERROR; >> + >> +       vdpu_write(vpu, 0, VDPU_REG_INTERRUPT); >> +       vdpu_write(vpu, 0, VDPU_REG_AXI_CTRL); >> + >> +       hantro_irq_done(vpu, state); >> + >> +       return IRQ_HANDLED; >> +} >> + >> +static irqreturn_t rockchip_vpu2_vepu_irq(int irq, void *dev_id) >> +{ >> +       struct hantro_dev *vpu = dev_id; >> +       enum vb2_buffer_state state; >> +       u32 status; >> + >> +       status = vepu_read(vpu, VEPU_REG_INTERRUPT); >> +       state = (status & VEPU_REG_INTERRUPT_FRAME_READY) ? >> +               VB2_BUF_STATE_DONE : VB2_BUF_STATE_ERROR; >> + >> +       vepu_write(vpu, 0, VEPU_REG_INTERRUPT); >> +       vepu_write(vpu, 0, VEPU_REG_AXI_CTRL); >> + >> +       hantro_irq_done(vpu, state); >> + >> +       return IRQ_HANDLED; >> +} >> + >> +static int rockchip_vpu_hw_init(struct hantro_dev *vpu) >> +{ >> +       /* Bump ACLK to max. possible freq. to improve performance. */ >> +       clk_set_rate(vpu->clocks[0].clk, RK3288_ACLK_MAX_FREQ); >> +       return 0; >> +} >> + >> +static void rockchip_vpu1_enc_reset(struct hantro_ctx *ctx) >> +{ >> +       struct hantro_dev *vpu = ctx->dev; >> + >> +       vepu_write(vpu, H1_REG_INTERRUPT_DIS_BIT, H1_REG_INTERRUPT); >> +       vepu_write(vpu, 0, H1_REG_ENC_CTRL); >> +       vepu_write(vpu, 0, H1_REG_AXI_CTRL); >> +} >> + >> +static void rockchip_vpu2_dec_reset(struct hantro_ctx *ctx) >> +{ >> +       struct hantro_dev *vpu = ctx->dev; >> + >> +       vdpu_write(vpu, VDPU_REG_INTERRUPT_DEC_IRQ_DIS, VDPU_REG_INTERRUPT); >> +       vdpu_write(vpu, 0, VDPU_REG_EN_FLAGS); >> +       vdpu_write(vpu, 1, VDPU_REG_SOFT_RESET); >> +} >> + >> +static void rockchip_vpu2_enc_reset(struct hantro_ctx *ctx) >> +{ >> +       struct hantro_dev *vpu = ctx->dev; >> + >> +       vepu_write(vpu, VEPU_REG_INTERRUPT_DIS_BIT, VEPU_REG_INTERRUPT); >> +       vepu_write(vpu, 0, VEPU_REG_ENCODE_START); >> +       vepu_write(vpu, 0, VEPU_REG_AXI_CTRL); >> +} >> + >> +/* >> + * Supported codec ops. >> + */ >> + >> +static const struct hantro_codec_ops rk3288_vpu_codec_ops[] = { >> +       [HANTRO_MODE_JPEG_ENC] = { >> +               .run = hantro_h1_jpeg_enc_run, >> +               .reset = rockchip_vpu1_enc_reset, >> +               .init = hantro_jpeg_enc_init, >> +               .done = hantro_jpeg_enc_done, >> +               .exit = hantro_jpeg_enc_exit, >> +       }, >> +       [HANTRO_MODE_H264_DEC] = { >> +               .run = hantro_g1_h264_dec_run, >> +               .reset = hantro_g1_reset, >> +               .init = hantro_h264_dec_init, >> +               .exit = hantro_h264_dec_exit, >> +       }, >> +       [HANTRO_MODE_MPEG2_DEC] = { >> +               .run = hantro_g1_mpeg2_dec_run, >> +               .reset = hantro_g1_reset, >> +               .init = hantro_mpeg2_dec_init, >> +               .exit = hantro_mpeg2_dec_exit, >> +       }, >> +       [HANTRO_MODE_VP8_DEC] = { >> +               .run = hantro_g1_vp8_dec_run, >> +               .reset = hantro_g1_reset, >> +               .init = hantro_vp8_dec_init, >> +               .exit = hantro_vp8_dec_exit, >> +       }, >> +}; >> + >> +static const struct hantro_codec_ops rk3399_vpu_codec_ops[] = { >> +       [HANTRO_MODE_JPEG_ENC] = { >> +               .run = rockchip_vpu2_jpeg_enc_run, >> +               .reset = rockchip_vpu2_enc_reset, >> +               .init = hantro_jpeg_enc_init, >> +               .exit = hantro_jpeg_enc_exit, >> +       }, >> +       [HANTRO_MODE_MPEG2_DEC] = { >> +               .run = rockchip_vpu2_mpeg2_dec_run, >> +               .reset = rockchip_vpu2_dec_reset, >> +               .init = hantro_mpeg2_dec_init, >> +               .exit = hantro_mpeg2_dec_exit, >> +       }, >> +       [HANTRO_MODE_VP8_DEC] = { >> +               .run = rockchip_vpu2_vp8_dec_run, >> +               .reset = rockchip_vpu2_dec_reset, >> +               .init = hantro_vp8_dec_init, >> +               .exit = hantro_vp8_dec_exit, >> +       }, >> +}; >> + >> +/* >> + * VPU variant. >> + */ >> + >> +static const struct hantro_irq rockchip_vpu1_irqs[] = { >> +       { "vepu", rockchip_vpu1_vepu_irq }, >> +       { "vdpu", hantro_g1_irq }, >> +}; >> + >> +static const struct hantro_irq rockchip_vpdu2_irqs[] = { > Typo: vpdu -> vdpu? Will fix it in v3. > >> +       { "vdpu", rockchip_vpu2_vdpu_irq }, >> +}; >> + > Reviewed-by: Ezequiel Garcia > > Thanks, > Ezequiel > Alex 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=-12.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,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 3F26CC48BE6 for ; Mon, 14 Jun 2021 17:02:34 +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 E7647613B6 for ; Mon, 14 Jun 2021 17:02:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E7647613B6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=YiW7v67WbFvI8vFch7ZSxgl+T7fHuPZ+NYRxzL0Yick=; b=2OZoF3bZKpluFMiw3U/0H8B3j0 vdp2lbBuM/R+cIoU/ciIoBKUMAXiczIBp8caSZ9pnLn6Ri5Wasso5R7V95R0h1/0Q9Bc39ZFwAtSF gqGElPP/ZYoVVElqMYTCcnDB7Q8bVvDFVd/WmoeTt6iefN807iM9kj5j57+Zw+D4Yf9JG4SSeUuNT gr7yAWjCXuSqE0FWFKCoLK/6oWdONo4JwlLVhSXA4rxCofQe+VaawVgVYU2hXokB/chKVmRzW5e8h UR0Kd+JGS8r7KkIGIl3QSmCv8+QbQtLMbbpA/UiEoVMIHhupzXgMEwoQzG1vI+t9FEHmYa6zrdjvg vXOrTmUA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lspym-00FIQT-HM; Mon, 14 Jun 2021 17:02:28 +0000 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lspyi-00FIOh-7x; Mon, 14 Jun 2021 17:02:26 +0000 Received: by mail-wr1-x432.google.com with SMTP id i94so15277388wri.4; Mon, 14 Jun 2021 10:02:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=H7yznGHlzfPxvDpvZSbqFd5fVDqQ5LFFKjpUq3W88rg=; b=eQzf6PJn6Zk1h/GN3B0JmHx0rAjPNLihmapVuV7mJKiCo3bhpaST/DcK68HSBsBf9D yXYoRlPQkhGh3DRxeuzzAxfmsYyrhLaB/feUN0ym1TwyNSPGph3eElvlw6WFShiRbv+F gEzkzGHGMzREQQYj1bWXp/OaIyT91fhFtlxzaDrfxZ5uPlDM8SuSgfs4t23tCSMxl1Sh g5S4L/6o3NA1Zbhld8CYwXiaT6/hdC3x0+UScFFW3LwOplSe/SwcCWC4ohHo12nFmxEx xJEhu/wWEZAqtt3N6VDjte7t4Phs80dBzqkWap2LdIUEMzXxNck81+EJqwGOnjk0dXwj oL2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=H7yznGHlzfPxvDpvZSbqFd5fVDqQ5LFFKjpUq3W88rg=; b=ek9gNz7GIUx51THF21qoFF5JN0AqxgCUOOYEUxzpAC9uV4o+8HHDKlMJKB/6ptf7mm crDgCmb3l6EJZ7lxFYje6Kom6IitYZuRWRbv+EReTevfbm75lry9RNzfaxRAMruUo0Vo 6Cb83AmtUvjFFbXyUQabjxT/+qW+oX57b6g2Zo2Ag6WWmnu2KBymSmNHNrbs1kdcdD7Z quJ+Q0KEziLZQ48HtRvPJE2G5hTFtS++rwz1KVCPuYTAaTqqffzzDrpV1P76OKovWB/T 0rUEXgqEWOHfl4uD3cVJ4ws+tQQ8g9BERZ6QfxBQZNAd3G10XremCeLSk2s5ErKEiqrM ajUg== X-Gm-Message-State: AOAM53125sLx9t1/8MV4GlbbeQSaNIRGLYtYpvfMY229sSdjR/Wv3h+0 B//sOK+9VE3YgmGthIiquNfghmIOcQ== X-Google-Smtp-Source: ABdhPJy7b4eSjTkgfw/IxRkzpfMfUcVmAIq1umEwAkfPgPl7K9B+Fd5iZM/qYWqycRgOBXrogfGRjw== X-Received: by 2002:a5d:494c:: with SMTP id r12mr19591862wrs.421.1623690142709; Mon, 14 Jun 2021 10:02:22 -0700 (PDT) Received: from [192.168.200.247] (ip5b434b8b.dynamic.kabel-deutschland.de. [91.67.75.139]) by smtp.gmail.com with ESMTPSA id u15sm374626wmq.1.2021.06.14.10.02.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Jun 2021 10:02:22 -0700 (PDT) Subject: Re: [PATCH v2 05/12] media: hantro: merge Rockchip platform drivers To: Ezequiel Garcia Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Rob Herring , Heiko Stuebner , Philipp Zabel , Lee Jones , Greg Kroah-Hartman , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-rockchip@lists.infradead.org References: <20210525152225.154302-1-knaerzche@gmail.com> <20210527154455.358869-1-knaerzche@gmail.com> <20210527154455.358869-6-knaerzche@gmail.com> <35c24063aec561ca9696ab696fda86d34c38016e.camel@collabora.com> From: Alex Bee Message-ID: Date: Mon, 14 Jun 2021 19:02:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <35c24063aec561ca9696ab696fda86d34c38016e.camel@collabora.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210614_100224_334676_EF8B893B X-CRM114-Status: GOOD ( 29.56 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgRXplcXVpZWwsCgpBbSAxMS4wNi4yMSB1bSAxNzozNiBzY2hyaWViIEV6ZXF1aWVsIEdhcmNp YToKPiBIaSBBbGV4LAo+Cj4gVGhpcyBjbGVhbnVwIGxvb2tzIG5pY2UsIHRoYW5rcyEKPgo+IEp1 c3QgYSBjb21tZW50IGFib3V0IHRoZSBjbG9jayByYXRlIGFuZCBhIG1pbm9yIHR5cG8uCj4KPiBP biBUaHUsIDIwMjEtMDUtMjcgYXQgMTc6NDQgKzAyMDAsIEFsZXggQmVlIHdyb3RlOgo+PiBNZXJn ZSB0aGUgdHdvIFJvY2tjaGlwIHBsYXRmb3JtIGRyaXZlcnMgaW50byBvbmUgYXMgaXQgd2FzIHN1 Z2dlc3RlZCBhdAo+PiBbMV0gYW5kIFsyXS4KPj4gVGhpcyB3aWxsIGhvcGVmdWxseSBtYWtlIGl0 IGVhc2llciB0byBhZGQgbmV3IHZhcmlhbnRzICh3aGljaCBhcmUgc3VyZWx5Cj4+IHRvIGNvbWUg Zm9yIFJvY2tjaGlwKS4KPj4gQWxzbyByZW5hbWUgZnJvbSAicmszMjg4IiB0byAidihkL2UpcHUx IiBhbmQgInJrMzM5OSIgdG8gInYoZC9lKXB1MiIKPj4gd2hlcmUgYXBwbGljYWJsZSwgYXMgdGhp cyBpcyB0aGUgZGljaXRpb24gdGhlIHZlbmRvciB1c2VzIGFuZCB3aWxsCj4+IGFsc28gcmVmZWxl Y3QgdGhlIHZhcmlhbnRzIHRoYXQgZ2V0IGFkZGVkIGxhdGVyIGluIHRoaXMgc2VyaWVzLiBSZW5h bWUKPj4gZnJvbSAicmszMjg4IiB0byAicm9ja2NoaXAiIGlmIGFwcGxpY2FibGUgdG8gYm90aCBo YXJkd2FyZSB2ZXJzaW9ucy4KPj4KPj4gWzFdIGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcv cHJvamVjdC9saW51eC1yb2NrY2hpcC9wYXRjaC8yMDIxMDEwNzEzNDEwMS4xOTU0MjYtNi1wYXVs LmtvY2lhbGtvd3NraUBib290bGluLmNvbS8KPj4gWzJdIGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5l bC5vcmcvcHJvamVjdC9saW51eC1yb2NrY2hpcC9wYXRjaC8yMDIxMDUyNTE1MjIyNS4xNTQzMDIt NS1rbmFlcnpjaGVAZ21haWwuY29tLwo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4IEJlZSA8a25h ZXJ6Y2hlQGdtYWlsLmNvbT4KPj4gLS0tCj4+Cj4+ICDCoENoYW5nZXMgaW4gdjI6Cj4+ICDCoC0g YWRkZWQgcGF0Y2gKPj4KPj4gIMKgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9NYWtlZmls ZcKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgOSArLQo+PiAgwqBkcml2ZXJzL3N0YWdpbmcvbWVkaWEv aGFudHJvL2hhbnRyb19ody5owqDCoMKgwqDCoCB8wqAgMjIgKy0KPj4gIMKgZHJpdmVycy9zdGFn aW5nL21lZGlhL2hhbnRyby9yazMyODhfdnB1X2h3LmPCoCB8IDIwOCAtLS0tLS0tLS0tCj4+ICDC oGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vcmszMzk5X3ZwdV9ody5jwqAgfCAyMjIgLS0t LS0tLS0tLS0KPj4gIMKgLi4uanBlZ19lbmMuYyA9PiByb2NrY2hpcF92cHUyX2h3X2pwZWdfZW5j LmN9IHzCoCAzMCArLQo+PiAgwqAuLi5lZzJfZGVjLmMgPT4gcm9ja2NoaXBfdnB1Ml9od19tcGVn Ml9kZWMuY30gfMKgIDI1ICstCj4+ICDCoC4uLndfdnA4X2RlYy5jID0+IHJvY2tjaGlwX3ZwdTJf aHdfdnA4X2RlYy5jfSB8wqDCoCAyICstCj4+ICDCoC4uLnJrMzM5OV92cHVfcmVncy5oID0+IHJv Y2tjaGlwX3ZwdTJfcmVncy5ofSB8wqDCoCA2ICstCj4+ICDCoC4uLi9zdGFnaW5nL21lZGlhL2hh bnRyby9yb2NrY2hpcF92cHVfaHcuY8KgwqDCoCB8IDM1NiArKysrKysrKysrKysrKysrKysKPj4g IMKgOSBmaWxlcyBjaGFuZ2VkLCA0MDIgaW5zZXJ0aW9ucygrKSwgNDc4IGRlbGV0aW9ucygtKQo+ PiAgwqBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9yazMy ODhfdnB1X2h3LmMKPj4gIMKgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vcmszMzk5X3ZwdV9ody5jCj4+ICDCoHJlbmFtZSBkcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL3tyazMzOTlfdnB1X2h3X2pwZWdfZW5jLmMgPT4gcm9ja2NoaXBfdnB1Ml9od19q cGVnX2VuYy5jfSAoODclKQo+PiAgwqByZW5hbWUgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by97cmszMzk5X3ZwdV9od19tcGVnMl9kZWMuYyA9PiByb2NrY2hpcF92cHUyX2h3X21wZWcyX2Rl Yy5jfSAoOTMlKQo+PiAgwqByZW5hbWUgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby97cmsz Mzk5X3ZwdV9od192cDhfZGVjLmMgPT4gcm9ja2NoaXBfdnB1Ml9od192cDhfZGVjLmN9ICg5OSUp Cj4+ICDCoHJlbmFtZSBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL3tyazMzOTlfdnB1X3Jl Z3MuaCA9PiByb2NrY2hpcF92cHUyX3JlZ3MuaH0gKDk5JSkKPj4gIMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vcm9ja2NoaXBfdnB1X2h3LmMKPj4KPiBb Li5dCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL3JvY2tjaGlw X3ZwdV9ody5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9yb2NrY2hpcF92cHVfaHcu Ywo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjE3NWQwYzVk ZmRiZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vcm9ja2NoaXBfdnB1X2h3LmMKPj4gQEAgLTAsMCArMSwzNTYgQEAKPj4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogSGFudHJvIFZQVSBjb2RlYyBk cml2ZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggUm9ja2NoaXAgRWxlY3Ryb25p Y3MgQ28uLCBMdGQuCj4+ICsgKsKgwqDCoMKgwqBKZWZmeSBDaGVuIDxqZWZmeS5jaGVuQHJvY2st Y2hpcHMuY29tPgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPj4gKwo+ PiArI2luY2x1ZGUgImhhbnRyby5oIgo+PiArI2luY2x1ZGUgImhhbnRyb19qcGVnLmgiCj4+ICsj aW5jbHVkZSAiaGFudHJvX2gxX3JlZ3MuaCIKPj4gKyNpbmNsdWRlICJyb2NrY2hpcF92cHUyX3Jl Z3MuaCIKPj4gKwo+PiArI2RlZmluZSBSSzMyODhfQUNMS19NQVhfRlJFUSAoNDAwICogMTAwMCAq IDEwMDApCj4+ICsKPiBTb21ldGhpbmcgZm9yIGxhdGVyLCBjb3VsZCB3ZSBidW1wIHRoaXMgY2xv Y2s/Cj4KPiBSb2NrY2hpcCB1c2VzIDMwME1IeiBhbmQgNjAwTUh6IGV2ZW4gZm9yIFJLMzI4OCwK PiBzZWUgYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LmR0c2k6Cj4KPiAgICAgICAgICB2ZHB1OiB2 ZHB1QGZmOWEwNDAwIHsKPiAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAicm9ja2NoaXAs dnB1LWRlY29kZXItcmszMjg4IiwgInJvY2tjaGlwLHZwdS1kZWNvZGVyLXYxIjsKPiAgICAgICAg ICAgICAgICAgIHJlZyA9IDwweDAgMHhmZjlhMDQwMCAweDAgMHg0MDA+Owo+ICAgICAgICAgICAg ICAgICAgaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+Owo+ICAg ICAgICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gImlycV9kZWMiOwo+ICAgICAgICAgICAg ICAgICAgY2xvY2tzID0gPCZjcnUgQUNMS19WQ09ERUM+LCA8JmNydSBIQ0xLX1ZDT0RFQz47Cj4g ICAgICAgICAgICAgICAgICBjbG9jay1uYW1lcyA9ICJhY2xrX3Zjb2RlYyIsICJoY2xrX3Zjb2Rl YyI7Cj4gICAgICAgICAgICAgICAgICByb2NrY2hpcCxub3JtYWwtcmF0ZXMgPSA8MzAwMDAwMDAw PiwgPDA+Owo+ICAgICAgICAgICAgICAgICAgcm9ja2NoaXAsYWR2YW5jZWQtcmF0ZXMgPSA8NjAw MDAwMDAwPiwgPDA+Owo+Cj4gT24gdmRwdTEgZm9yIGluc3RhbmNlLCBpdCBzd2l0Y2hlcyB0byB0 aGUgImFkdmFuY2VkLXJhdGUiCj4gd2hlbiB3aWR0aCA+IDI1NjAsIHdoaWNoIEkgdGhpbmsgaXQn cyB0b28gbmFpdmUgZm9yIHVzLgo+Cj4gQXQgbGVhc3Qgb24gUkszNTY2IEkgdGVzdGVkIGJ1bXBp bmcgdGhpcyByYXRlLCB3aGlsZSBzdGlsbAo+IHBhc3NpbmcgY29uZm9ybWFuY2UgdGVzdHMuCgpZ ZXMsIFJLMzI4OCdzIGNhbiAoYW5kIG1heWJlIGFsc28gc2hvdWxkKSBydW4gYXQgNjAwIE1IeiAo c2luY2Ugd2UgYXJlIApzdWdlc3RpbmcgdG8gIkJ1bXAgQUNMSyB0byBtYXguIHBvc3NpYmxlIGZy ZXEuIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuIiAKY3VycmVudGx5KSAtIGJ1dCBJIG5ldmVyIHJh biBjb25mb3JtYW5jZSB0ZXN0cyBhZnRlciBzZXR0aW5nIHRoaXMgcmF0ZSwgdGJoLgoKSSdtIGFs c28gbm90IHN1cmUsIFZEUFUyIChSSzMzOTkpIHZhcmlhbnQgc3VwcG9ydHMgVlA4IHVwIHRvIDM4 NDB4MjE2MHAuIApJdCB3b3VsZCBiZSB0aGUgb25seSBjb2RlYyBzdXBwb3J0ZWQgdXAgdGhhdCBm cmFtZSBzaXplICh3ZSBhbHJlYWR5IAprbm93LCB0aGF0IEguMjY0IGlzIHN1cHBvcnRlZCB1cCB0 byAxOTIweDEwODgsIGV2ZW4gaWYgaXQgaXMgbm90IApzdXBwb3J0ZWQgY3VycmVudGx5IGJ5IHVw c3RyZWFtIGhhbnRybyBkcml2ZXIpIGFuZCBUUk0gc2F5cyB0aGUgaGFudHJvIApJUCBibG9jayBp cyBhICIxMDgwUCBlbmNvZGVyL2RlY29kZXIgUHJvY2Vzc2luZyBDb3JlIiwgd2l0aG91dCBzYXlp bmcgCmFueXRoaW5nIHNwZWNpZmljIHBlciBjb2RlYy4KCkJvdGggc2hvdWxkIGJlIGNoZWNrZWQg YW5kIGFkZHJlc3NlZCBpbiBhIHVwY29taW5nIHNlcmllcy4KCj4+ICsvKgo+PiArICogU3VwcG9y dGVkIGZvcm1hdHMuCj4+ICsgKi8KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9f Zm10IHJvY2tjaGlwX3ZwdV9lbmNfZm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQy ME0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRS T19NT0RFX05PTkUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZW5jX2ZtdCA9 IFJPQ0tDSElQX1ZQVV9FTkNfRk1UX1lVVjQyMFAsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvC oMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mb3VyY2Mg PSBWNEwyX1BJWF9GTVRfTlYxMk0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu Y29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAuZW5jX2ZtdCA9IFJPQ0tDSElQX1ZQVV9FTkNfRk1UX1lVVjQyMFNQLAo+PiArwqDC oMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZW5jX2ZtdCA9IFJPQ0tDSElQX1ZQVV9FTkNfRk1U X1lVWVY0MjIsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfVVlWWSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01P REVfTk9ORSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5lbmNfZm10ID0gUk9D S0NISVBfVlBVX0VOQ19GTVRfVVlWWTQyMiwKPj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDC oMKgwqDCoMKgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZvdXJjYyA9IFY0 TDJfUElYX0ZNVF9KUEVHLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNvZGVj X21vZGUgPSBIQU5UUk9fTU9ERV9KUEVHX0VOQywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5tYXhfZGVwdGggPSAyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LmhlYWRlcl9zaXplID0gSlBFR19IRUFERVJfU0laRSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5mcm1zaXplID0gewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC5taW5fd2lkdGggPSA5NiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X3dpZHRoID0gODE5MiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF93aWR0aCA9IE1CX0RJ TSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWlu X2hlaWdodCA9IDMyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5tYXhfaGVpZ2h0ID0gODE5MiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF9oZWlnaHQgPSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fZm10IHJvY2tjaGlwX3ZwdTFfcG9zdHByb2Nf Zm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvCoMKgwqDC oMKgwqDCoH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19mbXQg cmszMjg4X3ZwdV9kZWNfZm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX05WMTIsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05P TkUsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfSDI2NF9TTElDRSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01P REVfSDI2NF9ERUMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2RlcHRo ID0gMiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mcm1zaXplID0gewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5taW5fd2lkdGgg PSA0OCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu bWF4X3dpZHRoID0gNDA5NiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuc3RlcF93aWR0aCA9IE1CX0RJTSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX2hlaWdodCA9IDQ4LAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfaGVpZ2h0ID0gMjMwNCwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF9o ZWlnaHQgPSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+PiAr wqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX01QRUcyX1NMSUNFLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNvZGVjX21vZGUgPSBIQU5UUk9fTU9ERV9NUEVH Ml9ERUMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2RlcHRoID0gMiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mcm1zaXplID0gewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5taW5fd2lkdGggPSA0OCwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X3dp ZHRoID0gMTkyMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuc3RlcF93aWR0aCA9IE1CX0RJTSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX2hlaWdodCA9IDQ4LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfaGVpZ2h0ID0gMTA4OCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF9oZWlnaHQg PSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKg wqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1ZQOF9GUkFNRSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01PREVfVlA4X0RFQywKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfZGVwdGggPSAyLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZybXNpemUgPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1pbl93aWR0aCA9IDQ4LAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfd2lkdGggPSAzODQw LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zdGVw X3dpZHRoID0gTUJfRElNLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5taW5faGVpZ2h0ID0gNDgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF9oZWlnaHQgPSAyMTYwLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zdGVwX2hlaWdodCA9IE1CX0RJTSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoH0s Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19mbXQgcmszMzk5X3Zw dV9kZWNfZm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX05WMTIsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvC oMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzJfU0xJQ0UsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX01QRUcy X0RFQywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfZGVwdGggPSAyLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZybXNpemUgPSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1pbl93aWR0aCA9IDQ4LAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfd2lk dGggPSAxOTIwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5zdGVwX3dpZHRoID0gTUJfRElNLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5taW5faGVpZ2h0ID0gNDgsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF9oZWlnaHQgPSAxMDg4LAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zdGVwX2hlaWdodCA9 IE1CX0RJTSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDC oMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfVlA4X0ZSQU1FLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLmNvZGVjX21vZGUgPSBIQU5UUk9fTU9ERV9WUDhfREVDLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF9kZXB0aCA9IDIsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZnJtc2l6ZSA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX3dpZHRoID0gNDgsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF93aWR0aCA9IDM4NDAs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0ZXBf d2lkdGggPSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLm1pbl9oZWlnaHQgPSA0OCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2hlaWdodCA9IDIxNjAsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0ZXBfaGVpZ2h0ID0gTUJfRElNLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDCoMKgwqDCoMKgfSwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCByb2NrY2hpcF92cHUxX3ZlcHVfaXJx KGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGhh bnRyb19kZXYgKnZwdSA9IGRldl9pZDsKPj4gK8KgwqDCoMKgwqDCoMKgZW51bSB2YjJfYnVmZmVy X3N0YXRlIHN0YXRlOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoHN0YXR1cyA9IHZlcHVfcmVhZCh2cHUsIEgxX1JFR19JTlRFUlJVUFQpOwo+PiAr wqDCoMKgwqDCoMKgwqBzdGF0ZSA9IChzdGF0dXMgJiBIMV9SRUdfSU5URVJSVVBUX0ZSQU1FX1JE WSkgPwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgVkIyX0JVRl9TVEFURV9ET05F IDogVkIyX0JVRl9TVEFURV9FUlJPUjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqB2ZXB1X3dyaXRl KHZwdSwgMCwgSDFfUkVHX0lOVEVSUlVQVCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHZlcHVfd3JpdGUo dnB1LCAwLCBIMV9SRUdfQVhJX0NUUkwpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGhhbnRyb19p cnFfZG9uZSh2cHUsIHN0YXRlKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gSVJRX0hB TkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCByb2NrY2hpcF92cHUyX3Zk cHVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGhhbnRyb19kZXYgKnZwdSA9IGRldl9pZDsKPj4gK8KgwqDCoMKgwqDCoMKgZW51bSB2YjJf YnVmZmVyX3N0YXRlIHN0YXRlOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IHZkcHVfcmVhZCh2cHUsIFZEUFVfUkVHX0lOVEVSUlVQ VCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0YXRlID0gKHN0YXR1cyAmIFZEUFVfUkVHX0lOVEVSUlVQ VF9ERUNfSVJRKSA/Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBWQjJfQlVGX1NU QVRFX0RPTkUgOiBWQjJfQlVGX1NUQVRFX0VSUk9SOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHZk cHVfd3JpdGUodnB1LCAwLCBWRFBVX1JFR19JTlRFUlJVUFQpOwo+PiArwqDCoMKgwqDCoMKgwqB2 ZHB1X3dyaXRlKHZwdSwgMCwgVkRQVV9SRUdfQVhJX0NUUkwpOwo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoGhhbnRyb19pcnFfZG9uZSh2cHUsIHN0YXRlKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCByb2Nr Y2hpcF92cHUyX3ZlcHVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGhhbnRyb19kZXYgKnZwdSA9IGRldl9pZDsKPj4gK8KgwqDCoMKgwqDC oMKgZW51bSB2YjJfYnVmZmVyX3N0YXRlIHN0YXRlOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgc3Rh dHVzOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IHZlcHVfcmVhZCh2cHUsIFZFUFVf UkVHX0lOVEVSUlVQVCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0YXRlID0gKHN0YXR1cyAmIFZFUFVf UkVHX0lOVEVSUlVQVF9GUkFNRV9SRUFEWSkgPwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgVkIyX0JVRl9TVEFURV9ET05FIDogVkIyX0JVRl9TVEFURV9FUlJPUjsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqB2ZXB1X3dyaXRlKHZwdSwgMCwgVkVQVV9SRUdfSU5URVJSVVBUKTsKPj4g K8KgwqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIDAsIFZFUFVfUkVHX0FYSV9DVFJMKTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqBoYW50cm9faXJxX2RvbmUodnB1LCBzdGF0ZSk7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IHJvY2tjaGlwX3ZwdV9od19pbml0KHN0cnVjdCBoYW50cm9fZGV2ICp2cHUpCj4+ICt7Cj4+ ICvCoMKgwqDCoMKgwqDCoC8qIEJ1bXAgQUNMSyB0byBtYXguIHBvc3NpYmxlIGZyZXEuIHRvIGlt cHJvdmUgcGVyZm9ybWFuY2UuICovCj4+ICvCoMKgwqDCoMKgwqDCoGNsa19zZXRfcmF0ZSh2cHUt PmNsb2Nrc1swXS5jbGssIFJLMzI4OF9BQ0xLX01BWF9GUkVRKTsKPj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTFfZW5jX3Jl c2V0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqB2ZXB1 X3dyaXRlKHZwdSwgSDFfUkVHX0lOVEVSUlVQVF9ESVNfQklULCBIMV9SRUdfSU5URVJSVVBUKTsK Pj4gK8KgwqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIDAsIEgxX1JFR19FTkNfQ1RSTCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoHZlcHVfd3JpdGUodnB1LCAwLCBIMV9SRUdfQVhJX0NUUkwpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCByb2NrY2hpcF92cHUyX2RlY19yZXNldChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaGFudHJvX2RldiAq dnB1ID0gY3R4LT5kZXY7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgdmRwdV93cml0ZSh2cHUsIFZE UFVfUkVHX0lOVEVSUlVQVF9ERUNfSVJRX0RJUywgVkRQVV9SRUdfSU5URVJSVVBUKTsKPj4gK8Kg wqDCoMKgwqDCoMKgdmRwdV93cml0ZSh2cHUsIDAsIFZEUFVfUkVHX0VOX0ZMQUdTKTsKPj4gK8Kg wqDCoMKgwqDCoMKgdmRwdV93cml0ZSh2cHUsIDEsIFZEUFVfUkVHX1NPRlRfUkVTRVQpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCByb2NrY2hpcF92cHUyX2VuY19yZXNldChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaGFudHJvX2RldiAq dnB1ID0gY3R4LT5kZXY7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIFZF UFVfUkVHX0lOVEVSUlVQVF9ESVNfQklULCBWRVBVX1JFR19JTlRFUlJVUFQpOwo+PiArwqDCoMKg wqDCoMKgwqB2ZXB1X3dyaXRlKHZwdSwgMCwgVkVQVV9SRUdfRU5DT0RFX1NUQVJUKTsKPj4gK8Kg wqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIDAsIFZFUFVfUkVHX0FYSV9DVFJMKTsKPj4gK30K Pj4gKwo+PiArLyoKPj4gKyAqIFN1cHBvcnRlZCBjb2RlYyBvcHMuCj4+ICsgKi8KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fY29kZWNfb3BzIHJrMzI4OF92cHVfY29kZWNfb3Bz W10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoFtIQU5UUk9fTU9ERV9KUEVHX0VOQ10gPSB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnVuID0gaGFudHJvX2gxX2pwZWdfZW5jX3J1 biwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5yZXNldCA9IHJvY2tjaGlwX3Zw dTFfZW5jX3Jlc2V0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmluaXQgPSBo YW50cm9fanBlZ19lbmNfaW5pdCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5k b25lID0gaGFudHJvX2pwZWdfZW5jX2RvbmUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuZXhpdCA9IGhhbnRyb19qcGVnX2VuY19leGl0LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+ PiArwqDCoMKgwqDCoMKgwqBbSEFOVFJPX01PREVfSDI2NF9ERUNdID0gewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLnJ1biA9IGhhbnRyb19nMV9oMjY0X2RlY19ydW4sCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVzZXQgPSBoYW50cm9fZzFfcmVzZXQsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaW5pdCA9IGhhbnRyb19oMjY0X2RlY19p bml0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmV4aXQgPSBoYW50cm9faDI2 NF9kZWNfZXhpdCwKPj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDCoMKgwqDCoMKgW0hBTlRS T19NT0RFX01QRUcyX0RFQ10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu cnVuID0gaGFudHJvX2cxX21wZWcyX2RlY19ydW4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAucmVzZXQgPSBoYW50cm9fZzFfcmVzZXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuaW5pdCA9IGhhbnRyb19tcGVnMl9kZWNfaW5pdCwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5leGl0ID0gaGFudHJvX21wZWcyX2RlY19leGl0LAo+PiArwqDC oMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqBbSEFOVFJPX01PREVfVlA4X0RFQ10gPSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnVuID0gaGFudHJvX2cxX3ZwOF9k ZWNfcnVuLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnJlc2V0ID0gaGFudHJv X2cxX3Jlc2V0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmluaXQgPSBoYW50 cm9fdnA4X2RlY19pbml0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmV4aXQg PSBoYW50cm9fdnA4X2RlY19leGl0LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fY29kZWNfb3BzIHJrMzM5OV92cHVfY29kZWNf b3BzW10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoFtIQU5UUk9fTU9ERV9KUEVHX0VOQ10gPSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnVuID0gcm9ja2NoaXBfdnB1Ml9qcGVn X2VuY19ydW4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVzZXQgPSByb2Nr Y2hpcF92cHUyX2VuY19yZXNldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5p bml0ID0gaGFudHJvX2pwZWdfZW5jX2luaXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuZXhpdCA9IGhhbnRyb19qcGVnX2VuY19leGl0LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+ PiArwqDCoMKgwqDCoMKgwqBbSEFOVFJPX01PREVfTVBFRzJfREVDXSA9IHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5ydW4gPSByb2NrY2hpcF92cHUyX21wZWcyX2RlY19ydW4s Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVzZXQgPSByb2NrY2hpcF92cHUy X2RlY19yZXNldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5pbml0ID0gaGFu dHJvX21wZWcyX2RlY19pbml0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmV4 aXQgPSBoYW50cm9fbXBlZzJfZGVjX2V4aXQsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKg wqDCoMKgwqDCoFtIQU5UUk9fTU9ERV9WUDhfREVDXSA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC5ydW4gPSByb2NrY2hpcF92cHUyX3ZwOF9kZWNfcnVuLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnJlc2V0ID0gcm9ja2NoaXBfdnB1Ml9kZWNfcmVzZXQs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaW5pdCA9IGhhbnRyb192cDhfZGVj X2luaXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZXhpdCA9IGhhbnRyb192 cDhfZGVjX2V4aXQsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICt9Owo+PiArCj4+ICsvKgo+PiAr ICogVlBVIHZhcmlhbnQuCj4+ICsgKi8KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50 cm9faXJxIHJvY2tjaGlwX3ZwdTFfaXJxc1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7ICJ2ZXB1 Iiwgcm9ja2NoaXBfdnB1MV92ZXB1X2lycSB9LAo+PiArwqDCoMKgwqDCoMKgwqB7ICJ2ZHB1Iiwg aGFudHJvX2cxX2lycSB9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50 cm9faXJxIHJvY2tjaGlwX3ZwZHUyX2lycXNbXSA9IHsKPiBUeXBvOiB2cGR1IC0+IHZkcHU/Cldp bGwgZml4IGl0IGluIHYzLgo+Cj4+ICvCoMKgwqDCoMKgwqDCoHsgInZkcHUiLCByb2NrY2hpcF92 cHUyX3ZkcHVfaXJxIH0sCj4+ICt9Owo+PiArCj4gUmV2aWV3ZWQtYnk6IEV6ZXF1aWVsIEdhcmNp YSA8ZXplcXVpZWxAY29sbGFib3JhLmNvbT4KPgo+IFRoYW5rcywKPiBFemVxdWllbAo+CkFsZXgK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LXJv Y2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2NoaXAK 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=-12.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B4716C4743C for ; Mon, 14 Jun 2021 17:04:13 +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 846DF61209 for ; Mon, 14 Jun 2021 17:04:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 846DF61209 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=N+Ldt/pWPkuvjSyBEuq/N9Yh0FPIdHrB7OPgO2pp/VI=; b=dmiJta/Z/lo+Qm44jhmcO8dLZ8 dREP5fJsIqLGRV+skIcW0yqNaVskxAwJFfTYs3qj7zkfMqeuRnYf6e6POO3epFEawaKorTU+RZ4LS soNXvBsreUTeVTkVCqfuzU05D9Ogf7Y4QaU3vfejs894j1AhhN8bMBl0SMcjczAYBP86l1+ItWcol JdFn8lJSbymtrR+/JGLNCZDD9Y8Ph9s2y1nBqfX/hYpRVHEMGSCT3fquznoi2Befvn8egBa8Q7zeq 0Xmvd5JQRZ2kWucA8idrrEO3oYvu48exNx9QLCa9i7+mLeK/aeyT5YS8vCZ5aVw78j+SBZKQYJapA KZ6QDQcg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lspyo-00FIQf-W9; Mon, 14 Jun 2021 17:02:31 +0000 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lspyi-00FIOh-7x; Mon, 14 Jun 2021 17:02:26 +0000 Received: by mail-wr1-x432.google.com with SMTP id i94so15277388wri.4; Mon, 14 Jun 2021 10:02:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=H7yznGHlzfPxvDpvZSbqFd5fVDqQ5LFFKjpUq3W88rg=; b=eQzf6PJn6Zk1h/GN3B0JmHx0rAjPNLihmapVuV7mJKiCo3bhpaST/DcK68HSBsBf9D yXYoRlPQkhGh3DRxeuzzAxfmsYyrhLaB/feUN0ym1TwyNSPGph3eElvlw6WFShiRbv+F gEzkzGHGMzREQQYj1bWXp/OaIyT91fhFtlxzaDrfxZ5uPlDM8SuSgfs4t23tCSMxl1Sh g5S4L/6o3NA1Zbhld8CYwXiaT6/hdC3x0+UScFFW3LwOplSe/SwcCWC4ohHo12nFmxEx xJEhu/wWEZAqtt3N6VDjte7t4Phs80dBzqkWap2LdIUEMzXxNck81+EJqwGOnjk0dXwj oL2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=H7yznGHlzfPxvDpvZSbqFd5fVDqQ5LFFKjpUq3W88rg=; b=ek9gNz7GIUx51THF21qoFF5JN0AqxgCUOOYEUxzpAC9uV4o+8HHDKlMJKB/6ptf7mm crDgCmb3l6EJZ7lxFYje6Kom6IitYZuRWRbv+EReTevfbm75lry9RNzfaxRAMruUo0Vo 6Cb83AmtUvjFFbXyUQabjxT/+qW+oX57b6g2Zo2Ag6WWmnu2KBymSmNHNrbs1kdcdD7Z quJ+Q0KEziLZQ48HtRvPJE2G5hTFtS++rwz1KVCPuYTAaTqqffzzDrpV1P76OKovWB/T 0rUEXgqEWOHfl4uD3cVJ4ws+tQQ8g9BERZ6QfxBQZNAd3G10XremCeLSk2s5ErKEiqrM ajUg== X-Gm-Message-State: AOAM53125sLx9t1/8MV4GlbbeQSaNIRGLYtYpvfMY229sSdjR/Wv3h+0 B//sOK+9VE3YgmGthIiquNfghmIOcQ== X-Google-Smtp-Source: ABdhPJy7b4eSjTkgfw/IxRkzpfMfUcVmAIq1umEwAkfPgPl7K9B+Fd5iZM/qYWqycRgOBXrogfGRjw== X-Received: by 2002:a5d:494c:: with SMTP id r12mr19591862wrs.421.1623690142709; Mon, 14 Jun 2021 10:02:22 -0700 (PDT) Received: from [192.168.200.247] (ip5b434b8b.dynamic.kabel-deutschland.de. [91.67.75.139]) by smtp.gmail.com with ESMTPSA id u15sm374626wmq.1.2021.06.14.10.02.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Jun 2021 10:02:22 -0700 (PDT) Subject: Re: [PATCH v2 05/12] media: hantro: merge Rockchip platform drivers To: Ezequiel Garcia Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab , Rob Herring , Heiko Stuebner , Philipp Zabel , Lee Jones , Greg Kroah-Hartman , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-rockchip@lists.infradead.org References: <20210525152225.154302-1-knaerzche@gmail.com> <20210527154455.358869-1-knaerzche@gmail.com> <20210527154455.358869-6-knaerzche@gmail.com> <35c24063aec561ca9696ab696fda86d34c38016e.camel@collabora.com> From: Alex Bee Message-ID: Date: Mon, 14 Jun 2021 19:02:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <35c24063aec561ca9696ab696fda86d34c38016e.camel@collabora.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210614_100224_334676_EF8B893B X-CRM114-Status: GOOD ( 29.56 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRXplcXVpZWwsCgpBbSAxMS4wNi4yMSB1bSAxNzozNiBzY2hyaWViIEV6ZXF1aWVsIEdhcmNp YToKPiBIaSBBbGV4LAo+Cj4gVGhpcyBjbGVhbnVwIGxvb2tzIG5pY2UsIHRoYW5rcyEKPgo+IEp1 c3QgYSBjb21tZW50IGFib3V0IHRoZSBjbG9jayByYXRlIGFuZCBhIG1pbm9yIHR5cG8uCj4KPiBP biBUaHUsIDIwMjEtMDUtMjcgYXQgMTc6NDQgKzAyMDAsIEFsZXggQmVlIHdyb3RlOgo+PiBNZXJn ZSB0aGUgdHdvIFJvY2tjaGlwIHBsYXRmb3JtIGRyaXZlcnMgaW50byBvbmUgYXMgaXQgd2FzIHN1 Z2dlc3RlZCBhdAo+PiBbMV0gYW5kIFsyXS4KPj4gVGhpcyB3aWxsIGhvcGVmdWxseSBtYWtlIGl0 IGVhc2llciB0byBhZGQgbmV3IHZhcmlhbnRzICh3aGljaCBhcmUgc3VyZWx5Cj4+IHRvIGNvbWUg Zm9yIFJvY2tjaGlwKS4KPj4gQWxzbyByZW5hbWUgZnJvbSAicmszMjg4IiB0byAidihkL2UpcHUx IiBhbmQgInJrMzM5OSIgdG8gInYoZC9lKXB1MiIKPj4gd2hlcmUgYXBwbGljYWJsZSwgYXMgdGhp cyBpcyB0aGUgZGljaXRpb24gdGhlIHZlbmRvciB1c2VzIGFuZCB3aWxsCj4+IGFsc28gcmVmZWxl Y3QgdGhlIHZhcmlhbnRzIHRoYXQgZ2V0IGFkZGVkIGxhdGVyIGluIHRoaXMgc2VyaWVzLiBSZW5h bWUKPj4gZnJvbSAicmszMjg4IiB0byAicm9ja2NoaXAiIGlmIGFwcGxpY2FibGUgdG8gYm90aCBo YXJkd2FyZSB2ZXJzaW9ucy4KPj4KPj4gWzFdIGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcv cHJvamVjdC9saW51eC1yb2NrY2hpcC9wYXRjaC8yMDIxMDEwNzEzNDEwMS4xOTU0MjYtNi1wYXVs LmtvY2lhbGtvd3NraUBib290bGluLmNvbS8KPj4gWzJdIGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5l bC5vcmcvcHJvamVjdC9saW51eC1yb2NrY2hpcC9wYXRjaC8yMDIxMDUyNTE1MjIyNS4xNTQzMDIt NS1rbmFlcnpjaGVAZ21haWwuY29tLwo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBBbGV4IEJlZSA8a25h ZXJ6Y2hlQGdtYWlsLmNvbT4KPj4gLS0tCj4+Cj4+ICDCoENoYW5nZXMgaW4gdjI6Cj4+ICDCoC0g YWRkZWQgcGF0Y2gKPj4KPj4gIMKgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9NYWtlZmls ZcKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgOSArLQo+PiAgwqBkcml2ZXJzL3N0YWdpbmcvbWVkaWEv aGFudHJvL2hhbnRyb19ody5owqDCoMKgwqDCoCB8wqAgMjIgKy0KPj4gIMKgZHJpdmVycy9zdGFn aW5nL21lZGlhL2hhbnRyby9yazMyODhfdnB1X2h3LmPCoCB8IDIwOCAtLS0tLS0tLS0tCj4+ICDC oGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vcmszMzk5X3ZwdV9ody5jwqAgfCAyMjIgLS0t LS0tLS0tLS0KPj4gIMKgLi4uanBlZ19lbmMuYyA9PiByb2NrY2hpcF92cHUyX2h3X2pwZWdfZW5j LmN9IHzCoCAzMCArLQo+PiAgwqAuLi5lZzJfZGVjLmMgPT4gcm9ja2NoaXBfdnB1Ml9od19tcGVn Ml9kZWMuY30gfMKgIDI1ICstCj4+ICDCoC4uLndfdnA4X2RlYy5jID0+IHJvY2tjaGlwX3ZwdTJf aHdfdnA4X2RlYy5jfSB8wqDCoCAyICstCj4+ICDCoC4uLnJrMzM5OV92cHVfcmVncy5oID0+IHJv Y2tjaGlwX3ZwdTJfcmVncy5ofSB8wqDCoCA2ICstCj4+ICDCoC4uLi9zdGFnaW5nL21lZGlhL2hh bnRyby9yb2NrY2hpcF92cHVfaHcuY8KgwqDCoCB8IDM1NiArKysrKysrKysrKysrKysrKysKPj4g IMKgOSBmaWxlcyBjaGFuZ2VkLCA0MDIgaW5zZXJ0aW9ucygrKSwgNDc4IGRlbGV0aW9ucygtKQo+ PiAgwqBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9yazMy ODhfdnB1X2h3LmMKPj4gIMKgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vcmszMzk5X3ZwdV9ody5jCj4+ICDCoHJlbmFtZSBkcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL3tyazMzOTlfdnB1X2h3X2pwZWdfZW5jLmMgPT4gcm9ja2NoaXBfdnB1Ml9od19q cGVnX2VuYy5jfSAoODclKQo+PiAgwqByZW5hbWUgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by97cmszMzk5X3ZwdV9od19tcGVnMl9kZWMuYyA9PiByb2NrY2hpcF92cHUyX2h3X21wZWcyX2Rl Yy5jfSAoOTMlKQo+PiAgwqByZW5hbWUgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby97cmsz Mzk5X3ZwdV9od192cDhfZGVjLmMgPT4gcm9ja2NoaXBfdnB1Ml9od192cDhfZGVjLmN9ICg5OSUp Cj4+ICDCoHJlbmFtZSBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL3tyazMzOTlfdnB1X3Jl Z3MuaCA9PiByb2NrY2hpcF92cHUyX3JlZ3MuaH0gKDk5JSkKPj4gIMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vcm9ja2NoaXBfdnB1X2h3LmMKPj4KPiBb Li5dCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL3JvY2tjaGlw X3ZwdV9ody5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9yb2NrY2hpcF92cHVfaHcu Ywo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjE3NWQwYzVk ZmRiZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vcm9ja2NoaXBfdnB1X2h3LmMKPj4gQEAgLTAsMCArMSwzNTYgQEAKPj4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogSGFudHJvIFZQVSBjb2RlYyBk cml2ZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggUm9ja2NoaXAgRWxlY3Ryb25p Y3MgQ28uLCBMdGQuCj4+ICsgKsKgwqDCoMKgwqBKZWZmeSBDaGVuIDxqZWZmeS5jaGVuQHJvY2st Y2hpcHMuY29tPgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPj4gKwo+ PiArI2luY2x1ZGUgImhhbnRyby5oIgo+PiArI2luY2x1ZGUgImhhbnRyb19qcGVnLmgiCj4+ICsj aW5jbHVkZSAiaGFudHJvX2gxX3JlZ3MuaCIKPj4gKyNpbmNsdWRlICJyb2NrY2hpcF92cHUyX3Jl Z3MuaCIKPj4gKwo+PiArI2RlZmluZSBSSzMyODhfQUNMS19NQVhfRlJFUSAoNDAwICogMTAwMCAq IDEwMDApCj4+ICsKPiBTb21ldGhpbmcgZm9yIGxhdGVyLCBjb3VsZCB3ZSBidW1wIHRoaXMgY2xv Y2s/Cj4KPiBSb2NrY2hpcCB1c2VzIDMwME1IeiBhbmQgNjAwTUh6IGV2ZW4gZm9yIFJLMzI4OCwK PiBzZWUgYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LmR0c2k6Cj4KPiAgICAgICAgICB2ZHB1OiB2 ZHB1QGZmOWEwNDAwIHsKPiAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAicm9ja2NoaXAs dnB1LWRlY29kZXItcmszMjg4IiwgInJvY2tjaGlwLHZwdS1kZWNvZGVyLXYxIjsKPiAgICAgICAg ICAgICAgICAgIHJlZyA9IDwweDAgMHhmZjlhMDQwMCAweDAgMHg0MDA+Owo+ICAgICAgICAgICAg ICAgICAgaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwIElSUV9UWVBFX0xFVkVMX0hJR0g+Owo+ICAg ICAgICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gImlycV9kZWMiOwo+ICAgICAgICAgICAg ICAgICAgY2xvY2tzID0gPCZjcnUgQUNMS19WQ09ERUM+LCA8JmNydSBIQ0xLX1ZDT0RFQz47Cj4g ICAgICAgICAgICAgICAgICBjbG9jay1uYW1lcyA9ICJhY2xrX3Zjb2RlYyIsICJoY2xrX3Zjb2Rl YyI7Cj4gICAgICAgICAgICAgICAgICByb2NrY2hpcCxub3JtYWwtcmF0ZXMgPSA8MzAwMDAwMDAw PiwgPDA+Owo+ICAgICAgICAgICAgICAgICAgcm9ja2NoaXAsYWR2YW5jZWQtcmF0ZXMgPSA8NjAw MDAwMDAwPiwgPDA+Owo+Cj4gT24gdmRwdTEgZm9yIGluc3RhbmNlLCBpdCBzd2l0Y2hlcyB0byB0 aGUgImFkdmFuY2VkLXJhdGUiCj4gd2hlbiB3aWR0aCA+IDI1NjAsIHdoaWNoIEkgdGhpbmsgaXQn cyB0b28gbmFpdmUgZm9yIHVzLgo+Cj4gQXQgbGVhc3Qgb24gUkszNTY2IEkgdGVzdGVkIGJ1bXBp bmcgdGhpcyByYXRlLCB3aGlsZSBzdGlsbAo+IHBhc3NpbmcgY29uZm9ybWFuY2UgdGVzdHMuCgpZ ZXMsIFJLMzI4OCdzIGNhbiAoYW5kIG1heWJlIGFsc28gc2hvdWxkKSBydW4gYXQgNjAwIE1IeiAo c2luY2Ugd2UgYXJlIApzdWdlc3RpbmcgdG8gIkJ1bXAgQUNMSyB0byBtYXguIHBvc3NpYmxlIGZy ZXEuIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuIiAKY3VycmVudGx5KSAtIGJ1dCBJIG5ldmVyIHJh biBjb25mb3JtYW5jZSB0ZXN0cyBhZnRlciBzZXR0aW5nIHRoaXMgcmF0ZSwgdGJoLgoKSSdtIGFs c28gbm90IHN1cmUsIFZEUFUyIChSSzMzOTkpIHZhcmlhbnQgc3VwcG9ydHMgVlA4IHVwIHRvIDM4 NDB4MjE2MHAuIApJdCB3b3VsZCBiZSB0aGUgb25seSBjb2RlYyBzdXBwb3J0ZWQgdXAgdGhhdCBm cmFtZSBzaXplICh3ZSBhbHJlYWR5IAprbm93LCB0aGF0IEguMjY0IGlzIHN1cHBvcnRlZCB1cCB0 byAxOTIweDEwODgsIGV2ZW4gaWYgaXQgaXMgbm90IApzdXBwb3J0ZWQgY3VycmVudGx5IGJ5IHVw c3RyZWFtIGhhbnRybyBkcml2ZXIpIGFuZCBUUk0gc2F5cyB0aGUgaGFudHJvIApJUCBibG9jayBp cyBhICIxMDgwUCBlbmNvZGVyL2RlY29kZXIgUHJvY2Vzc2luZyBDb3JlIiwgd2l0aG91dCBzYXlp bmcgCmFueXRoaW5nIHNwZWNpZmljIHBlciBjb2RlYy4KCkJvdGggc2hvdWxkIGJlIGNoZWNrZWQg YW5kIGFkZHJlc3NlZCBpbiBhIHVwY29taW5nIHNlcmllcy4KCj4+ICsvKgo+PiArICogU3VwcG9y dGVkIGZvcm1hdHMuCj4+ICsgKi8KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9f Zm10IHJvY2tjaGlwX3ZwdV9lbmNfZm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQy ME0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRS T19NT0RFX05PTkUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZW5jX2ZtdCA9 IFJPQ0tDSElQX1ZQVV9FTkNfRk1UX1lVVjQyMFAsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvC oMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mb3VyY2Mg PSBWNEwyX1BJWF9GTVRfTlYxMk0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu Y29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAuZW5jX2ZtdCA9IFJPQ0tDSElQX1ZQVV9FTkNfRk1UX1lVVjQyMFNQLAo+PiArwqDC oMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZW5jX2ZtdCA9IFJPQ0tDSElQX1ZQVV9FTkNfRk1U X1lVWVY0MjIsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfVVlWWSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01P REVfTk9ORSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5lbmNfZm10ID0gUk9D S0NISVBfVlBVX0VOQ19GTVRfVVlWWTQyMiwKPj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDC oMKgwqDCoMKgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZvdXJjYyA9IFY0 TDJfUElYX0ZNVF9KUEVHLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNvZGVj X21vZGUgPSBIQU5UUk9fTU9ERV9KUEVHX0VOQywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5tYXhfZGVwdGggPSAyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LmhlYWRlcl9zaXplID0gSlBFR19IRUFERVJfU0laRSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5mcm1zaXplID0gewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC5taW5fd2lkdGggPSA5NiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X3dpZHRoID0gODE5MiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF93aWR0aCA9IE1CX0RJ TSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWlu X2hlaWdodCA9IDMyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5tYXhfaGVpZ2h0ID0gODE5MiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF9oZWlnaHQgPSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fZm10IHJvY2tjaGlwX3ZwdTFfcG9zdHByb2Nf Zm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvCoMKgwqDC oMKgwqDCoH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19mbXQg cmszMjg4X3ZwdV9kZWNfZm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX05WMTIsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05P TkUsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfSDI2NF9TTElDRSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01P REVfSDI2NF9ERUMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2RlcHRo ID0gMiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mcm1zaXplID0gewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5taW5fd2lkdGgg PSA0OCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu bWF4X3dpZHRoID0gNDA5NiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuc3RlcF93aWR0aCA9IE1CX0RJTSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX2hlaWdodCA9IDQ4LAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfaGVpZ2h0ID0gMjMwNCwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF9o ZWlnaHQgPSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+PiAr wqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX01QRUcyX1NMSUNFLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmNvZGVjX21vZGUgPSBIQU5UUk9fTU9ERV9NUEVH Ml9ERUMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2RlcHRoID0gMiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5mcm1zaXplID0gewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5taW5fd2lkdGggPSA0OCwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X3dp ZHRoID0gMTkyMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuc3RlcF93aWR0aCA9IE1CX0RJTSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX2hlaWdodCA9IDQ4LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfaGVpZ2h0ID0gMTA4OCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RlcF9oZWlnaHQg PSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKg wqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX1ZQOF9GUkFNRSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5jb2RlY19tb2RlID0gSEFOVFJPX01PREVfVlA4X0RFQywKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfZGVwdGggPSAyLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZybXNpemUgPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1pbl93aWR0aCA9IDQ4LAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfd2lkdGggPSAzODQw LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zdGVw X3dpZHRoID0gTUJfRElNLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC5taW5faGVpZ2h0ID0gNDgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF9oZWlnaHQgPSAyMTYwLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zdGVwX2hlaWdodCA9IE1CX0RJTSwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoH0s Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19mbXQgcmszMzk5X3Zw dV9kZWNfZm10c1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAuZm91cmNjID0gVjRMMl9QSVhfRk1UX05WMTIsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX05PTkUsCj4+ICvC oMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzJfU0xJQ0UsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuY29kZWNfbW9kZSA9IEhBTlRST19NT0RFX01QRUcy X0RFQywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfZGVwdGggPSAyLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmZybXNpemUgPSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1pbl93aWR0aCA9IDQ4LAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5tYXhfd2lk dGggPSAxOTIwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5zdGVwX3dpZHRoID0gTUJfRElNLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5taW5faGVpZ2h0ID0gNDgsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF9oZWlnaHQgPSAxMDg4LAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zdGVwX2hlaWdodCA9 IE1CX0RJTSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDC oMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfVlA4X0ZSQU1FLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLmNvZGVjX21vZGUgPSBIQU5UUk9fTU9ERV9WUDhfREVDLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF9kZXB0aCA9IDIsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZnJtc2l6ZSA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubWluX3dpZHRoID0gNDgsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm1heF93aWR0aCA9IDM4NDAs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0ZXBf d2lkdGggPSBNQl9ESU0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLm1pbl9oZWlnaHQgPSA0OCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAubWF4X2hlaWdodCA9IDIxNjAsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN0ZXBfaGVpZ2h0ID0gTUJfRElNLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDCoMKgwqDCoMKgfSwK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCByb2NrY2hpcF92cHUxX3ZlcHVfaXJx KGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGhh bnRyb19kZXYgKnZwdSA9IGRldl9pZDsKPj4gK8KgwqDCoMKgwqDCoMKgZW51bSB2YjJfYnVmZmVy X3N0YXRlIHN0YXRlOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoHN0YXR1cyA9IHZlcHVfcmVhZCh2cHUsIEgxX1JFR19JTlRFUlJVUFQpOwo+PiAr wqDCoMKgwqDCoMKgwqBzdGF0ZSA9IChzdGF0dXMgJiBIMV9SRUdfSU5URVJSVVBUX0ZSQU1FX1JE WSkgPwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgVkIyX0JVRl9TVEFURV9ET05F IDogVkIyX0JVRl9TVEFURV9FUlJPUjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqB2ZXB1X3dyaXRl KHZwdSwgMCwgSDFfUkVHX0lOVEVSUlVQVCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHZlcHVfd3JpdGUo dnB1LCAwLCBIMV9SRUdfQVhJX0NUUkwpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGhhbnRyb19p cnFfZG9uZSh2cHUsIHN0YXRlKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gSVJRX0hB TkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCByb2NrY2hpcF92cHUyX3Zk cHVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGhhbnRyb19kZXYgKnZwdSA9IGRldl9pZDsKPj4gK8KgwqDCoMKgwqDCoMKgZW51bSB2YjJf YnVmZmVyX3N0YXRlIHN0YXRlOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IHZkcHVfcmVhZCh2cHUsIFZEUFVfUkVHX0lOVEVSUlVQ VCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0YXRlID0gKHN0YXR1cyAmIFZEUFVfUkVHX0lOVEVSUlVQ VF9ERUNfSVJRKSA/Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBWQjJfQlVGX1NU QVRFX0RPTkUgOiBWQjJfQlVGX1NUQVRFX0VSUk9SOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHZk cHVfd3JpdGUodnB1LCAwLCBWRFBVX1JFR19JTlRFUlJVUFQpOwo+PiArwqDCoMKgwqDCoMKgwqB2 ZHB1X3dyaXRlKHZwdSwgMCwgVkRQVV9SRUdfQVhJX0NUUkwpOwo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoGhhbnRyb19pcnFfZG9uZSh2cHUsIHN0YXRlKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gSVJRX0hBTkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCByb2Nr Y2hpcF92cHUyX3ZlcHVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPj4gK3sKPj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGhhbnRyb19kZXYgKnZwdSA9IGRldl9pZDsKPj4gK8KgwqDCoMKgwqDC oMKgZW51bSB2YjJfYnVmZmVyX3N0YXRlIHN0YXRlOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgc3Rh dHVzOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHN0YXR1cyA9IHZlcHVfcmVhZCh2cHUsIFZFUFVf UkVHX0lOVEVSUlVQVCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0YXRlID0gKHN0YXR1cyAmIFZFUFVf UkVHX0lOVEVSUlVQVF9GUkFNRV9SRUFEWSkgPwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgVkIyX0JVRl9TVEFURV9ET05FIDogVkIyX0JVRl9TVEFURV9FUlJPUjsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqB2ZXB1X3dyaXRlKHZwdSwgMCwgVkVQVV9SRUdfSU5URVJSVVBUKTsKPj4g K8KgwqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIDAsIFZFUFVfUkVHX0FYSV9DVFJMKTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqBoYW50cm9faXJxX2RvbmUodnB1LCBzdGF0ZSk7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IHJvY2tjaGlwX3ZwdV9od19pbml0KHN0cnVjdCBoYW50cm9fZGV2ICp2cHUpCj4+ICt7Cj4+ ICvCoMKgwqDCoMKgwqDCoC8qIEJ1bXAgQUNMSyB0byBtYXguIHBvc3NpYmxlIGZyZXEuIHRvIGlt cHJvdmUgcGVyZm9ybWFuY2UuICovCj4+ICvCoMKgwqDCoMKgwqDCoGNsa19zZXRfcmF0ZSh2cHUt PmNsb2Nrc1swXS5jbGssIFJLMzI4OF9BQ0xLX01BWF9GUkVRKTsKPj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTFfZW5jX3Jl c2V0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqB2ZXB1 X3dyaXRlKHZwdSwgSDFfUkVHX0lOVEVSUlVQVF9ESVNfQklULCBIMV9SRUdfSU5URVJSVVBUKTsK Pj4gK8KgwqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIDAsIEgxX1JFR19FTkNfQ1RSTCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoHZlcHVfd3JpdGUodnB1LCAwLCBIMV9SRUdfQVhJX0NUUkwpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCByb2NrY2hpcF92cHUyX2RlY19yZXNldChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaGFudHJvX2RldiAq dnB1ID0gY3R4LT5kZXY7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgdmRwdV93cml0ZSh2cHUsIFZE UFVfUkVHX0lOVEVSUlVQVF9ERUNfSVJRX0RJUywgVkRQVV9SRUdfSU5URVJSVVBUKTsKPj4gK8Kg wqDCoMKgwqDCoMKgdmRwdV93cml0ZSh2cHUsIDAsIFZEUFVfUkVHX0VOX0ZMQUdTKTsKPj4gK8Kg wqDCoMKgwqDCoMKgdmRwdV93cml0ZSh2cHUsIDEsIFZEUFVfUkVHX1NPRlRfUkVTRVQpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCByb2NrY2hpcF92cHUyX2VuY19yZXNldChzdHJ1Y3QgaGFu dHJvX2N0eCAqY3R4KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaGFudHJvX2RldiAq dnB1ID0gY3R4LT5kZXY7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIFZF UFVfUkVHX0lOVEVSUlVQVF9ESVNfQklULCBWRVBVX1JFR19JTlRFUlJVUFQpOwo+PiArwqDCoMKg wqDCoMKgwqB2ZXB1X3dyaXRlKHZwdSwgMCwgVkVQVV9SRUdfRU5DT0RFX1NUQVJUKTsKPj4gK8Kg wqDCoMKgwqDCoMKgdmVwdV93cml0ZSh2cHUsIDAsIFZFUFVfUkVHX0FYSV9DVFJMKTsKPj4gK30K Pj4gKwo+PiArLyoKPj4gKyAqIFN1cHBvcnRlZCBjb2RlYyBvcHMuCj4+ICsgKi8KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fY29kZWNfb3BzIHJrMzI4OF92cHVfY29kZWNfb3Bz W10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoFtIQU5UUk9fTU9ERV9KUEVHX0VOQ10gPSB7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnVuID0gaGFudHJvX2gxX2pwZWdfZW5jX3J1 biwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5yZXNldCA9IHJvY2tjaGlwX3Zw dTFfZW5jX3Jlc2V0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmluaXQgPSBo YW50cm9fanBlZ19lbmNfaW5pdCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5k b25lID0gaGFudHJvX2pwZWdfZW5jX2RvbmUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuZXhpdCA9IGhhbnRyb19qcGVnX2VuY19leGl0LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+ PiArwqDCoMKgwqDCoMKgwqBbSEFOVFJPX01PREVfSDI2NF9ERUNdID0gewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLnJ1biA9IGhhbnRyb19nMV9oMjY0X2RlY19ydW4sCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVzZXQgPSBoYW50cm9fZzFfcmVzZXQsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaW5pdCA9IGhhbnRyb19oMjY0X2RlY19p bml0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmV4aXQgPSBoYW50cm9faDI2 NF9kZWNfZXhpdCwKPj4gK8KgwqDCoMKgwqDCoMKgfSwKPj4gK8KgwqDCoMKgwqDCoMKgW0hBTlRS T19NT0RFX01QRUcyX0RFQ10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAu cnVuID0gaGFudHJvX2cxX21wZWcyX2RlY19ydW4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAucmVzZXQgPSBoYW50cm9fZzFfcmVzZXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuaW5pdCA9IGhhbnRyb19tcGVnMl9kZWNfaW5pdCwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5leGl0ID0gaGFudHJvX21wZWcyX2RlY19leGl0LAo+PiArwqDC oMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDCoMKgwqBbSEFOVFJPX01PREVfVlA4X0RFQ10gPSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnVuID0gaGFudHJvX2cxX3ZwOF9k ZWNfcnVuLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnJlc2V0ID0gaGFudHJv X2cxX3Jlc2V0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmluaXQgPSBoYW50 cm9fdnA4X2RlY19pbml0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmV4aXQg PSBoYW50cm9fdnA4X2RlY19leGl0LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fY29kZWNfb3BzIHJrMzM5OV92cHVfY29kZWNf b3BzW10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoFtIQU5UUk9fTU9ERV9KUEVHX0VOQ10gPSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnVuID0gcm9ja2NoaXBfdnB1Ml9qcGVn X2VuY19ydW4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVzZXQgPSByb2Nr Y2hpcF92cHUyX2VuY19yZXNldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5p bml0ID0gaGFudHJvX2pwZWdfZW5jX2luaXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAuZXhpdCA9IGhhbnRyb19qcGVnX2VuY19leGl0LAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+ PiArwqDCoMKgwqDCoMKgwqBbSEFOVFJPX01PREVfTVBFRzJfREVDXSA9IHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5ydW4gPSByb2NrY2hpcF92cHUyX21wZWcyX2RlY19ydW4s Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucmVzZXQgPSByb2NrY2hpcF92cHUy X2RlY19yZXNldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5pbml0ID0gaGFu dHJvX21wZWcyX2RlY19pbml0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmV4 aXQgPSBoYW50cm9fbXBlZzJfZGVjX2V4aXQsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKg wqDCoMKgwqDCoFtIQU5UUk9fTU9ERV9WUDhfREVDXSA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC5ydW4gPSByb2NrY2hpcF92cHUyX3ZwOF9kZWNfcnVuLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnJlc2V0ID0gcm9ja2NoaXBfdnB1Ml9kZWNfcmVzZXQs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuaW5pdCA9IGhhbnRyb192cDhfZGVj X2luaXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZXhpdCA9IGhhbnRyb192 cDhfZGVjX2V4aXQsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICt9Owo+PiArCj4+ICsvKgo+PiAr ICogVlBVIHZhcmlhbnQuCj4+ICsgKi8KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50 cm9faXJxIHJvY2tjaGlwX3ZwdTFfaXJxc1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqB7ICJ2ZXB1 Iiwgcm9ja2NoaXBfdnB1MV92ZXB1X2lycSB9LAo+PiArwqDCoMKgwqDCoMKgwqB7ICJ2ZHB1Iiwg aGFudHJvX2cxX2lycSB9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50 cm9faXJxIHJvY2tjaGlwX3ZwZHUyX2lycXNbXSA9IHsKPiBUeXBvOiB2cGR1IC0+IHZkcHU/Cldp bGwgZml4IGl0IGluIHYzLgo+Cj4+ICvCoMKgwqDCoMKgwqDCoHsgInZkcHUiLCByb2NrY2hpcF92 cHUyX3ZkcHVfaXJxIH0sCj4+ICt9Owo+PiArCj4gUmV2aWV3ZWQtYnk6IEV6ZXF1aWVsIEdhcmNp YSA8ZXplcXVpZWxAY29sbGFib3JhLmNvbT4KPgo+IFRoYW5rcywKPiBFemVxdWllbAo+CkFsZXgK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK