From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,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 40D1DC4332F for ; Thu, 23 Sep 2021 13:34:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2D9A561164 for ; Thu, 23 Sep 2021 13:34:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241398AbhIWNfc (ORCPT ); Thu, 23 Sep 2021 09:35:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241217AbhIWNfb (ORCPT ); Thu, 23 Sep 2021 09:35:31 -0400 Received: from mail-qt1-x82a.google.com (mail-qt1-x82a.google.com [IPv6:2607:f8b0:4864:20::82a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC64EC061757 for ; Thu, 23 Sep 2021 06:33:58 -0700 (PDT) Received: by mail-qt1-x82a.google.com with SMTP id l13so6170115qtv.3 for ; Thu, 23 Sep 2021 06:33:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=az5dtnTKt8wXBRvHgluiZUyI7/WHxEpTmi90AFdYYys=; b=EsPxWD8K8aXYaJY7CdiZKaSIfheHENnaFUHCkQE9/SDaWdbOX7+tds0M9UeRh4ptRB 8PmJsx2jv6vxjB5t9cV5PMMNBd9WZ4yMdABd3Veub61ISiznqb9qZ8OKUSgss1+6j1qt N5JOc21t4Nw+WxBsxJrFYzUlmJTlXs/fW77tZukViLPED2E4xL4P5Qb9I+AvDyxPod5O YvrWHZJls52QUaODAzoOsrI47uCwuMzSeEXeATPA56dpN4JUdXWaLZIoS1cvG5YgaVbK qtXXG4eV1lIMBKocH4X0P2Cqb3J3k9G0650ReFo9wjQsgDW76Htx3q+vdau3nY7D/424 MapA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=az5dtnTKt8wXBRvHgluiZUyI7/WHxEpTmi90AFdYYys=; b=GrkyieFgMoakOJ27aEwoiq6SdbwMVYLPbMTANHViDwtvvMvrKzddKsgiZlJ/Okpwxf CqHviqe59orfUW8mN5JxqUaL/n/LV2fBqY2RF0ci2S7aSO3MP1q7thmlYM1u3X381i4u Dl31m4oPpOJAP5AWpAqmgYpY0bFB0mgNK95mU6we3b409KkRb6fqUGFHtOJe1I7ax7by 2dAJyn1tAjVpD9ckQecgCWyGruZnteLASKQX8RcWoePRplFd+lWsPFfaObp3p7KO/AeK mPyxchLEGAGTXgxJ3oqnck61t86gypJsrQEKIQpjiVn+NGrS1nYUnxeXwUO3S3RRbxQL hwgA== X-Gm-Message-State: AOAM531qb1Rc6/bM97DmKbWcfxTtR5EOPCyeKnWjD2EjKKqW+HgrPIg2 YjFgbqAh8bL2t5M1oB009UZ9ug== X-Google-Smtp-Source: ABdhPJw428/5fv3zH5tnuAZMy+QFH/r8pP0A2mBpjPGnjGMET4l/QGHI2xLbw9vnwIeJcWJAz2K51w== X-Received: by 2002:ac8:67c2:: with SMTP id r2mr4655055qtp.201.1632404037883; Thu, 23 Sep 2021 06:33:57 -0700 (PDT) Received: from nicolas-tpx395.localdomain (173-246-12-168.qc.cable.ebox.net. [173.246.12.168]) by smtp.gmail.com with ESMTPSA id d13sm3438366qtm.32.2021.09.23.06.33.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Sep 2021 06:33:57 -0700 (PDT) Message-ID: <27ec66639de79216e9b887ee6977f35906e33a43.camel@ndufresne.ca> Subject: Re: [EXT] Re: [PATCH v9 00/13] amphion video decoder/encoder driver From: Nicolas Dufresne To: Ming Qian , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" Cc: "hverkuil-cisco@xs4all.nl" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , Aisheng Dong , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Date: Thu, 23 Sep 2021 09:33:55 -0400 In-Reply-To: References: <7591d62b4aedb0ad789f09d90695c700c65df53d.camel@ndufresne.ca> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.40.4 (3.40.4-1.fc34) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le jeudi 23 septembre 2021 à 10:45 +0000, Ming Qian a écrit : > > -----Original Message----- > > From: Nicolas Dufresne [mailto:nicolas@ndufresne.ca] > > Sent: Wednesday, September 22, 2021 10:14 PM > > To: Ming Qian ; mchehab@kernel.org; > > shawnguo@kernel.org; robh+dt@kernel.org; s.hauer@pengutronix.de > > Cc: hverkuil-cisco@xs4all.nl; kernel@pengutronix.de; festevam@gmail.com; > > dl-linux-imx ; Aisheng Dong ; > > linux-media@vger.kernel.org; linux-kernel@vger.kernel.org; > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org > > Subject: [EXT] Re: [PATCH v9 00/13] amphion video decoder/encoder driver > > > > Caution: EXT Email > > > > Hi Ming, > > > > Le lundi 13 septembre 2021 à 17:11 +0800, Ming Qian a écrit : > > > Hi all, > > > > > > This patch series adds support for > > > the amphion video encoder and decoder > > > via the VPU block present in imx8q platforms. > > > Currently, support for IMX8QXP and IMX8QM is included. > > > > I've been trying to test this driver, based it on mainline 5.15-rc2 in > > absence of > > recommendation here. There seems to be poor mainline support for this board, > > notably only 1 CPU come up. Finally, I could not test anything as the driver > > failed to boot the decoders and encoder cores: > > > > [ 30.766160] [VPU CORE][0] decoder boot > > [ 31.873175] [VPU CORE][0] decoder boot timeout > > [ 31.878057] [VPU V4L2]there is no core for decoder > > [ 1766.495963] [VPU CORE][1] encoder boot [ 1767.524957] [VPU CORE][1] > > encoder boot timeout [ 1767.529724] [VPU V4L2]there is no core for encoder > > > > Please, let me know how I can get passed these issues. I have used firmwares > > referenced in Yocto tree: > > > > > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.n > > xp.com%2Flgfiles%2FNMG%2FMAD%2FYOCTO%2Ffirmware-imx-7.9.bin& > > ;data=04%7C01%7Cming.qian%40nxp.com%7Ce50ac93addb444f7cd9b08d97 > > dd33c6e%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C63767916 > > 8483236134%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIj > > oiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=cM3%2F > > Go0MxD0RSDmS5ELr6yCdNe4EH%2FeTAFtcAcBArRo%3D&reserved=0 > > > > Firmware for this driver will also be a subject to tackle. In an ideal > > world, the > > "self extracted" script requirement to accept your EULA would need to be > > waved, and distribution of the firmware should go into linux-firmwares. I > > believe firmwares are still allowed to have some user agreement, but I > > suppose > > there must be guidelines, best is to ask there directly. > > > > regards, > > Nicolas > > > > Seems you use the wrong firmware, I will send the firmware to you. > My commit base is 9c3a0f285248899dfa81585bc5d5bc9ebdb8fead, > You can find it in the bottom of this cover. > > Would you please explain the linux-firmware issue in detail I believe that to merge a driver (non staging) that depends on a firmware (I'll let Hans and others confirm), you need to submit this firmware, along with a non-interactive licence to be included in the linux-firmware project. NXP notably have an SDMA firmware in there, with a licence file. Perhaps these developers can assist in this regard. Often that takes time due to legal requirement of moving from an interactive EULA to a licence file. In later version, it would be nice to explain in the cover later the status of firmware distribution, and how to obtain the correct version of (specially if not yet in linux-firmware). Thanks for sending me the firmwares, I will see if I can do more tests. > > > > > > > It features decoding for the following formats: > > > - H.264 > > > - HEVC > > > - MPEG4 > > > - MPEG2 > > > - VC1 > > > - VP8 > > > > > > It features encoding for the following formats: > > > - H.264 > > > > > > The driver creates a separate device node for the encoder and decoder. > > > > > > Changelog: > > > > > > v9 > > > - drop V4L2_BUF_FLAG_CODECCONFIG > > > - drop V4L2_EVENT_CODEC_ERROR > > > - drop V4L2_EVENT_SKIP > > > - use the v4l2_buffer.sequence counter > > > - fix some build warnings with W=1 reported by kernel test robot > > > > > > v8 > > > - move driver from driver/media/platform/imx/vpu-8q to > > >   driver/media/platform/amphion > > > - rename driver name to amphion > > > - remove imx_vpu.h > > > - move the definition of V4L2_EVENT_CODEC_ERROR to videodev2.h > > > - move the definition of V4L2_EVENT_SKIP to videodev2.h > > > > > > v7 > > > - fix build warnings with W=1 reported by kernel test robot > > > > > > v6: > > > - rename V4L2_PIX_FMT_NT8 to V4L2_PIX_FMT_NV12_8L128 > > > - rename V4L2_PIX_FMT_NT10 to V4L2_PIX_FMT_NV12_10BE_8L128 > > > > > > v5: > > > - move some definition from imx_vph.h to videodev2.h > > > - remove some unnecessary content > > > - add some documentation descriptions > > > - pass the lateset v4l2-compliance test > > > > > > v4: > > > - redefine the memory-region in devicetree bindings documentation > > > - use v4l2's mechanism to implement synchronize queuing ioctl > > > - remove the unnecessary mutex ioctl_sync > > > - don't notify source change event if the parameters are same as > > > previously established > > > - add flag V4L2_FMT_FLAG_DYN_RESOLUTION to decoder's capture format > > > > > > v3: > > > - don't make vpu device node a simple-bus > > > - trigger probing vpu core in the driver > > > - remove unnecessary vpu core index property > > > > > > v2: > > > - fix dt bindings build error > > > - split driver patch into several parts to avoid exceeding bytes limit > > > > > > Compliance > > > ========== > > > # v4l2-compliance -d /dev/video0 > > > v4l2-compliance 1.21.0-4838, 64 bits, 64-bit time_t v4l2-compliance > > > SHA: 22466798f9a9 2021-08-25 11:05:21 > > > > > > Compliance test for amphion-vpu device /dev/video0: > > > > > > Driver Info: > > >       Driver name : amphion-vpu > > >       Card type : amphion vpu decoder > > >       Bus info : platform: amphion-vpu > > >       Driver version : 5.14.0 > > >       Capabilities : 0x84204000 > > >               Video Memory-to-Memory Multiplanar > > >               Streaming > > >               Extended Pix Format > > >               Device Capabilities > > >       Device Caps : 0x04204000 > > >               Video Memory-to-Memory Multiplanar > > >               Streaming > > >               Extended Pix Format > > >       Detected Stateful Decoder > > > > > > Required ioctls: > > >       test VIDIOC_QUERYCAP: OK > > >       test invalid ioctls: OK > > > > > > Allow for multiple opens: > > >       test second /dev/video0 open: OK > > >       test VIDIOC_QUERYCAP: OK > > >       test VIDIOC_G/S_PRIORITY: OK > > >       test for unlimited opens: OK > > > > > > Debug ioctls: > > >       test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) > > >       test VIDIOC_LOG_STATUS: OK (Not Supported) > > > > > > Input ioctls: > > >       test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) > > >       test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > > >       test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > > >       test VIDIOC_ENUMAUDIO: OK (Not Supported) > > >       test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) > > >       test VIDIOC_G/S_AUDIO: OK (Not Supported) > > >       Inputs: 0 Audio Inputs: 0 Tuners: 0 > > > > > > Output ioctls: > > >       test VIDIOC_G/S_MODULATOR: OK (Not Supported) > > >       test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > > >       test VIDIOC_ENUMAUDOUT: OK (Not Supported) > > >       test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > > >       test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > >       Outputs: 0 Audio Outputs: 0 Modulators: 0 > > > > > > Input/Output configuration ioctls: > > >       test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) > > >       test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) > > >       test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) > > >       test VIDIOC_G/S_EDID: OK (Not Supported) > > > > > > Control ioctls: > > >       test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > >       test VIDIOC_QUERYCTRL: OK > > >       test VIDIOC_G/S_CTRL: OK > > >       test VIDIOC_G/S/TRY_EXT_CTRLS: OK > > >       test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > >       test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > >       Standard Controls: 3 Private Controls: 0 > > > > > > Format ioctls: > > >       test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > > >       test VIDIOC_G/S_PARM: OK (Not Supported) > > >       test VIDIOC_G_FBUF: OK (Not Supported) > > >       test VIDIOC_G_FMT: OK > > >       test VIDIOC_TRY_FMT: OK > > >       test VIDIOC_S_FMT: OK > > >       test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > > >       test Cropping: OK (Not Supported) > > >       test Composing: OK > > >       test Scaling: OK (Not Supported) > > > > > > Codec ioctls: > > >       test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) > > >       test VIDIOC_G_ENC_INDEX: OK (Not Supported) > > >       test VIDIOC_(TRY_)DECODER_CMD: OK > > > > > > Buffer ioctls: > > >       test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > >       test VIDIOC_EXPBUF: OK > > >       test Requests: OK (Not Supported) > > > > > > Total for amphion-vpu device /dev/video0: 45, Succeeded: 45, Failed: > > > 0, Warnings: 0 > > > > > > # v4l2-compliance -d /dev/video1 > > > v4l2-compliance 1.21.0-4838, 64 bits, 64-bit time_t v4l2-compliance > > > SHA: 22466798f9a9 2021-08-25 11:05:21 > > > > > > Compliance test for amphion-vpu device /dev/video1: > > > > > > Driver Info: > > >       Driver name : amphion-vpu > > >       Card type : amphion vpu encoder > > >       Bus info : platform: amphion-vpu > > >       Driver version : 5.14.0 > > >       Capabilities : 0x84204000 > > >               Video Memory-to-Memory Multiplanar > > >               Streaming > > >               Extended Pix Format > > >               Device Capabilities > > >       Device Caps : 0x04204000 > > >               Video Memory-to-Memory Multiplanar > > >               Streaming > > >               Extended Pix Format > > >       Detected Stateful Encoder > > > > > > Required ioctls: > > >       test VIDIOC_QUERYCAP: OK > > >       test invalid ioctls: OK > > > > > > Allow for multiple opens: > > >       test second /dev/video1 open: OK > > >       test VIDIOC_QUERYCAP: OK > > >       test VIDIOC_G/S_PRIORITY: OK > > >       test for unlimited opens: OK > > > > > > Debug ioctls: > > >       test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) > > >       test VIDIOC_LOG_STATUS: OK (Not Supported) > > > > > > Input ioctls: > > >       test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) > > >       test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > > >       test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) > > >       test VIDIOC_ENUMAUDIO: OK (Not Supported) > > >       test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) > > >       test VIDIOC_G/S_AUDIO: OK (Not Supported) > > >       Inputs: 0 Audio Inputs: 0 Tuners: 0 > > > > > > Output ioctls: > > >       test VIDIOC_G/S_MODULATOR: OK (Not Supported) > > >       test VIDIOC_G/S_FREQUENCY: OK (Not Supported) > > >       test VIDIOC_ENUMAUDOUT: OK (Not Supported) > > >       test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) > > >       test VIDIOC_G/S_AUDOUT: OK (Not Supported) > > >       Outputs: 0 Audio Outputs: 0 Modulators: 0 > > > > > > Input/Output configuration ioctls: > > >       test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) > > >       test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) > > >       test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) > > >       test VIDIOC_G/S_EDID: OK (Not Supported) > > > > > > Control ioctls: > > >       test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK > > >       test VIDIOC_QUERYCTRL: OK > > >       test VIDIOC_G/S_CTRL: OK > > >       test VIDIOC_G/S/TRY_EXT_CTRLS: OK > > >       test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK > > >       test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) > > >       Standard Controls: 20 Private Controls: 0 > > > > > > Format ioctls: > > >       test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK > > >       test VIDIOC_G/S_PARM: OK > > >       test VIDIOC_G_FBUF: OK (Not Supported) > > >       test VIDIOC_G_FMT: OK > > >       test VIDIOC_TRY_FMT: OK > > >       test VIDIOC_S_FMT: OK > > >       test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) > > >       test Cropping: OK > > >       test Composing: OK (Not Supported) > > >       test Scaling: OK (Not Supported) > > > > > > Codec ioctls: > > >       test VIDIOC_(TRY_)ENCODER_CMD: OK > > >       test VIDIOC_G_ENC_INDEX: OK (Not Supported) > > >       test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) > > > > > > Buffer ioctls: > > >       test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK > > >       test VIDIOC_EXPBUF: OK > > >       test Requests: OK (Not Supported) > > > > > > Total for amphion-vpu device /dev/video1: 45, Succeeded: 45, Failed: > > > 0, Warnings: 0 > > > > > > Ming Qian (13): > > >   dt-bindings: media: amphion: add amphion video codec bindings > > >   media:Add nt8 and nt10 video format. > > >   media: amphion: add amphion vpu device driver > > >   media: amphion: add vpu core driver > > >   media: amphion: implement vpu core communication based on mailbox > > >   media: amphion: add vpu v4l2 m2m support > > >   media: amphion: add v4l2 m2m vpu encoder stateful driver > > >   media: amphion: add v4l2 m2m vpu decoder stateful driver > > >   media: amphion: implement windsor encoder rpc interface > > >   media: amphion: implement malone decoder rpc interface > > >   ARM64: dts: freescale: imx8q: add imx vpu codec entries > > >   firmware: imx: scu-pd: imx8q: add vpu mu resources > > >   MAINTAINERS: add AMPHION VPU CODEC V4L2 driver entry > > > > > >  .../bindings/media/amphion,vpu.yaml | 178 ++ > > >  .../media/v4l/pixfmt-yuv-planar.rst | 15 + > > >  MAINTAINERS | 9 + > > >  .../arm64/boot/dts/freescale/imx8-ss-vpu.dtsi | 72 + > > >  arch/arm64/boot/dts/freescale/imx8qxp-mek.dts | 17 + > > >  arch/arm64/boot/dts/freescale/imx8qxp.dtsi | 24 + > > >  drivers/firmware/imx/scu-pd.c | 4 + > > >  drivers/media/platform/Kconfig | 19 + > > >  drivers/media/platform/Makefile | 2 + > > >  drivers/media/platform/amphion/Makefile | 23 + > > >  drivers/media/platform/amphion/vdec.c | 1652 > > ++++++++++++++++ > > >  drivers/media/platform/amphion/venc.c | 1382 > > ++++++++++++++ > > >  drivers/media/platform/amphion/vpu.h | 333 ++++ > > >  drivers/media/platform/amphion/vpu_cmds.c | 435 +++++ > > >  drivers/media/platform/amphion/vpu_cmds.h | 25 + > > >  drivers/media/platform/amphion/vpu_codec.h | 68 + > > >  drivers/media/platform/amphion/vpu_color.c | 192 ++ > > >  drivers/media/platform/amphion/vpu_core.c | 901 +++++++++ > > >  drivers/media/platform/amphion/vpu_core.h | 16 + > > >  drivers/media/platform/amphion/vpu_dbg.c | 496 +++++ > > >  drivers/media/platform/amphion/vpu_defs.h | 186 ++ > > >  .../media/platform/amphion/vpu_dev_imx8q.c | 72 + > > >  drivers/media/platform/amphion/vpu_drv.c | 215 +++ > > >  drivers/media/platform/amphion/vpu_helpers.c | 453 +++++ > > >  drivers/media/platform/amphion/vpu_helpers.h | 72 + > > >  drivers/media/platform/amphion/vpu_imx8q.c | 218 +++ > > >  drivers/media/platform/amphion/vpu_imx8q.h | 116 ++ > > >  drivers/media/platform/amphion/vpu_log.h | 44 + > > >  drivers/media/platform/amphion/vpu_malone.c | 1683 > > +++++++++++++++++ > > >  drivers/media/platform/amphion/vpu_malone.h | 42 + > > >  drivers/media/platform/amphion/vpu_mbox.c | 126 ++ > > >  drivers/media/platform/amphion/vpu_mbox.h | 16 + > > >  drivers/media/platform/amphion/vpu_msgs.c | 413 ++++ > > >  drivers/media/platform/amphion/vpu_msgs.h | 14 + > > >  drivers/media/platform/amphion/vpu_rpc.c | 263 +++ > > >  drivers/media/platform/amphion/vpu_rpc.h | 463 +++++ > > >  drivers/media/platform/amphion/vpu_v4l2.c | 625 ++++++ > > >  drivers/media/platform/amphion/vpu_v4l2.h | 53 + > > >  drivers/media/platform/amphion/vpu_windsor.c | 1244 ++++++++++++ > > >  drivers/media/platform/amphion/vpu_windsor.h | 39 + > > >  drivers/media/v4l2-core/v4l2-ioctl.c | 2 + > > >  include/uapi/linux/videodev2.h | 4 + > > >  42 files changed, 12226 insertions(+) create mode 100644 > > > Documentation/devicetree/bindings/media/amphion,vpu.yaml > > >  create mode 100644 arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi > > >  create mode 100644 drivers/media/platform/amphion/Makefile > > >  create mode 100644 drivers/media/platform/amphion/vdec.c > > >  create mode 100644 drivers/media/platform/amphion/venc.c > > >  create mode 100644 drivers/media/platform/amphion/vpu.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_cmds.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_cmds.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_codec.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_color.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_core.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_core.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_dbg.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_defs.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_dev_imx8q.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_drv.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_helpers.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_helpers.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_imx8q.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_imx8q.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_log.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_malone.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_malone.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_mbox.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_mbox.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_msgs.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_msgs.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_rpc.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_rpc.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_v4l2.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_v4l2.h > > >  create mode 100644 drivers/media/platform/amphion/vpu_windsor.c > > >  create mode 100644 drivers/media/platform/amphion/vpu_windsor.h > > > > > > > > > base-commit: 9c3a0f285248899dfa81585bc5d5bc9ebdb8fead > > > 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=-10.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 7A36CC433F5 for ; Thu, 23 Sep 2021 13:41:11 +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 42CE66058D for ; Thu, 23 Sep 2021 13:41:11 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 42CE66058D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ndufresne.ca Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=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=3SuLCkaLyuYqn2Ri/WSjRbBVjXki5luk/EpRfLF1Xe0=; b=k6gP2STebGhj/a YLlrbQ8GCq3bza4KM8iLXIXVv5WTTx4zGzL20nSxyFYBuy+YfUrw/tcv5Joq/240E5AXSkj6z6AMV xZY6UZy4XgPX9Uwmz1z/mZKVVwcApzDfg8zMxJQTlWXW4SyxqdbmaHsw87AAnzWorXE858oab3kbs NMV9JWnGnqqAo/pEH0gxDHyiA0GvHviYusFk7Zux17EOLuSGvn+iz69DZYT7D0PxSrNkBPOaPWpmt O234dNcfis2dlP9PuVY2LpIexfveW0AokAmFHM8o+w0wPXuZDUp76jEDnpJzLS3gLqME5KyX2fXSu wKah40zzC3dAfiY25FFw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mTOwX-00BgrV-Oc; Thu, 23 Sep 2021 13:39:20 +0000 Received: from mail-qt1-x836.google.com ([2607:f8b0:4864:20::836]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mTOrP-00Bexr-Q7 for linux-arm-kernel@lists.infradead.org; Thu, 23 Sep 2021 13:34:02 +0000 Received: by mail-qt1-x836.google.com with SMTP id d8so6137860qtd.5 for ; Thu, 23 Sep 2021 06:33:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=az5dtnTKt8wXBRvHgluiZUyI7/WHxEpTmi90AFdYYys=; b=EsPxWD8K8aXYaJY7CdiZKaSIfheHENnaFUHCkQE9/SDaWdbOX7+tds0M9UeRh4ptRB 8PmJsx2jv6vxjB5t9cV5PMMNBd9WZ4yMdABd3Veub61ISiznqb9qZ8OKUSgss1+6j1qt N5JOc21t4Nw+WxBsxJrFYzUlmJTlXs/fW77tZukViLPED2E4xL4P5Qb9I+AvDyxPod5O YvrWHZJls52QUaODAzoOsrI47uCwuMzSeEXeATPA56dpN4JUdXWaLZIoS1cvG5YgaVbK qtXXG4eV1lIMBKocH4X0P2Cqb3J3k9G0650ReFo9wjQsgDW76Htx3q+vdau3nY7D/424 MapA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=az5dtnTKt8wXBRvHgluiZUyI7/WHxEpTmi90AFdYYys=; b=kKfbZTlXjyTuJCry3OpSPASwFJduanbA4WHCBE2xk8D0eUjRDB+Rd81aoBIl8gRSfA o4/YK76fAI8SK87VZu2Mty7Lz/vhQBUtyGaKvkAhVxmP/zIVgmd4LEoVWW9MU+13VjBt 54zCNTVDoF7u469C4X753UV36XJ5PKPenz4nXWD6m2Cf+zdFVWr+0PqLgQkH2fmoLHZ2 IpIYJTVDiFHfG1C+2wNHldqgmTq0BvP4lscUnb6gz2nKotLbzlsdt8I5LZA0Tss/R3Ym XrJTPkjPP3g2qB42nJeSehdrdKTrNqhwHt9wcksONl4PfyQrCLaFuLtyDSgQRBzKWgMC 6thA== X-Gm-Message-State: AOAM532Uw5JtwYzxdn074LeUr7iXJ2AqBbgoyjsgyfnmRex7U9cv+uwB PBJv6z/0K9o9gAr1wIU2UbxfYg== X-Google-Smtp-Source: ABdhPJw428/5fv3zH5tnuAZMy+QFH/r8pP0A2mBpjPGnjGMET4l/QGHI2xLbw9vnwIeJcWJAz2K51w== X-Received: by 2002:ac8:67c2:: with SMTP id r2mr4655055qtp.201.1632404037883; Thu, 23 Sep 2021 06:33:57 -0700 (PDT) Received: from nicolas-tpx395.localdomain (173-246-12-168.qc.cable.ebox.net. [173.246.12.168]) by smtp.gmail.com with ESMTPSA id d13sm3438366qtm.32.2021.09.23.06.33.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Sep 2021 06:33:57 -0700 (PDT) Message-ID: <27ec66639de79216e9b887ee6977f35906e33a43.camel@ndufresne.ca> Subject: Re: [EXT] Re: [PATCH v9 00/13] amphion video decoder/encoder driver From: Nicolas Dufresne To: Ming Qian , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" Cc: "hverkuil-cisco@xs4all.nl" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , Aisheng Dong , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Date: Thu, 23 Sep 2021 09:33:55 -0400 In-Reply-To: References: <7591d62b4aedb0ad789f09d90695c700c65df53d.camel@ndufresne.ca> User-Agent: Evolution 3.40.4 (3.40.4-1.fc34) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210923_063359_930890_7BDFD98E X-CRM114-Status: GOOD ( 44.61 ) 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 TGUgamV1ZGkgMjMgc2VwdGVtYnJlIDIwMjEgw6AgMTA6NDUgKzAwMDAsIE1pbmcgUWlhbiBhIMOp Y3JpdMKgOgo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IE5pY29sYXMg RHVmcmVzbmUgW21haWx0bzpuaWNvbGFzQG5kdWZyZXNuZS5jYV0KPiA+IFNlbnQ6IFdlZG5lc2Rh eSwgU2VwdGVtYmVyIDIyLCAyMDIxIDEwOjE0IFBNCj4gPiBUbzogTWluZyBRaWFuIDxtaW5nLnFp YW5AbnhwLmNvbT47IG1jaGVoYWJAa2VybmVsLm9yZzsKPiA+IHNoYXduZ3VvQGtlcm5lbC5vcmc7 IHJvYmgrZHRAa2VybmVsLm9yZzsgcy5oYXVlckBwZW5ndXRyb25peC5kZQo+ID4gQ2M6IGh2ZXJr dWlsLWNpc2NvQHhzNGFsbC5ubDsga2VybmVsQHBlbmd1dHJvbml4LmRlOyBmZXN0ZXZhbUBnbWFp bC5jb207Cj4gPiBkbC1saW51eC1pbXggPGxpbnV4LWlteEBueHAuY29tPjsgQWlzaGVuZyBEb25n IDxhaXNoZW5nLmRvbmdAbnhwLmNvbT47Cj4gPiBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc7 IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7Cj4gPiBkZXZpY2V0cmVlQHZnZXIua2VybmVs Lm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gPiBTdWJqZWN0OiBb RVhUXSBSZTogW1BBVENIIHY5IDAwLzEzXSBhbXBoaW9uIHZpZGVvIGRlY29kZXIvZW5jb2RlciBk cml2ZXIKPiA+IAo+ID4gQ2F1dGlvbjogRVhUIEVtYWlsCj4gPiAKPiA+IEhpIE1pbmcsCj4gPiAK PiA+IExlIGx1bmRpIDEzIHNlcHRlbWJyZSAyMDIxIMOgIDE3OjExICswODAwLCBNaW5nIFFpYW4g YSDDqWNyaXQgOgo+ID4gPiBIaSBhbGwsCj4gPiA+IAo+ID4gPiBUaGlzIHBhdGNoIHNlcmllcyBh ZGRzIHN1cHBvcnQgZm9yCj4gPiA+IHRoZSBhbXBoaW9uIHZpZGVvIGVuY29kZXIgYW5kIGRlY29k ZXIKPiA+ID4gdmlhIHRoZSBWUFUgYmxvY2sgcHJlc2VudCBpbiBpbXg4cSBwbGF0Zm9ybXMuCj4g PiA+IEN1cnJlbnRseSwgc3VwcG9ydCBmb3IgSU1YOFFYUCBhbmQgSU1YOFFNIGlzIGluY2x1ZGVk Lgo+ID4gCj4gPiBJJ3ZlIGJlZW4gdHJ5aW5nIHRvIHRlc3QgdGhpcyBkcml2ZXIsIGJhc2VkIGl0 IG9uIG1haW5saW5lIDUuMTUtcmMyIGluCj4gPiBhYnNlbmNlIG9mCj4gPiByZWNvbW1lbmRhdGlv biBoZXJlLiBUaGVyZSBzZWVtcyB0byBiZSBwb29yIG1haW5saW5lIHN1cHBvcnQgZm9yIHRoaXMg Ym9hcmQsCj4gPiBub3RhYmx5IG9ubHkgMSBDUFUgY29tZSB1cC4gRmluYWxseSwgSSBjb3VsZCBu b3QgdGVzdCBhbnl0aGluZyBhcyB0aGUgZHJpdmVyCj4gPiBmYWlsZWQgdG8gYm9vdCB0aGUgZGVj b2RlcnMgYW5kIGVuY29kZXIgY29yZXM6Cj4gPiAKPiA+IFsgICAzMC43NjYxNjBdIFtWUFUgQ09S RV1bMF0gZGVjb2RlciBib290Cj4gPiBbICAgMzEuODczMTc1XSBbVlBVIENPUkVdWzBdIGRlY29k ZXIgYm9vdCB0aW1lb3V0Cj4gPiBbICAgMzEuODc4MDU3XSBbVlBVIFY0TDJddGhlcmUgaXMgbm8g Y29yZSBmb3IgZGVjb2Rlcgo+ID4gWyAxNzY2LjQ5NTk2M10gW1ZQVSBDT1JFXVsxXSBlbmNvZGVy IGJvb3QgWyAxNzY3LjUyNDk1N10gW1ZQVSBDT1JFXVsxXQo+ID4gZW5jb2RlciBib290IHRpbWVv dXQgWyAxNzY3LjUyOTcyNF0gW1ZQVSBWNEwyXXRoZXJlIGlzIG5vIGNvcmUgZm9yIGVuY29kZXIK PiA+IAo+ID4gUGxlYXNlLCBsZXQgbWUga25vdyBob3cgSSBjYW4gZ2V0IHBhc3NlZCB0aGVzZSBp c3N1ZXMuIEkgaGF2ZSB1c2VkIGZpcm13YXJlcwo+ID4gcmVmZXJlbmNlZCBpbiBZb2N0byB0cmVl Ogo+ID4gCj4gPiAKPiA+IGh0dHBzOi8vZXVyMDEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9v ay5jb20vP3VybD1odHRwcyUzQSUyRiUyRnd3dy5uCj4gPiB4cC5jb20lMkZsZ2ZpbGVzJTJGTk1H JTJGTUFEJTJGWU9DVE8lMkZmaXJtd2FyZS1pbXgtNy45LmJpbiZhbXAKPiA+IDtkYXRhPTA0JTdD MDElN0NtaW5nLnFpYW4lNDBueHAuY29tJTdDZTUwYWM5M2FkZGI0NDRmN2NkOWIwOGQ5Nwo+ID4g ZGQzM2M2ZSU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAxNjM1JTdDMCU3QzAlN0M2Mzc2 NzkxNgo+ID4gODQ4MzIzNjEzNCU3Q1Vua25vd24lN0NUV0ZwYkdac2IzZDhleUpXSWpvaU1DNHdM akF3TURBaUxDSlFJago+ID4gb2lWMmx1TXpJaUxDSkJUaUk2SWsxaGFXd2lMQ0pYVkNJNk1uMCUz RCU3QzEwMDAmYW1wO3NkYXRhPWNNMyUyRgo+ID4gR28wTXhEMFJTRG1TNUVMcjZ5Q2ROZTRFSCUy RmVUQUZ0Y0FjQkFyUm8lM0QmYW1wO3Jlc2VydmVkPTAKPiA+IAo+ID4gRmlybXdhcmUgZm9yIHRo aXMgZHJpdmVyIHdpbGwgYWxzbyBiZSBhIHN1YmplY3QgdG8gdGFja2xlLiBJbiBhbiBpZGVhbAo+ ID4gd29ybGQsIHRoZQo+ID4gInNlbGYgZXh0cmFjdGVkIiBzY3JpcHQgcmVxdWlyZW1lbnQgdG8g YWNjZXB0IHlvdXIgRVVMQSB3b3VsZCBuZWVkIHRvIGJlCj4gPiB3YXZlZCwgYW5kIGRpc3RyaWJ1 dGlvbiBvZiB0aGUgZmlybXdhcmUgc2hvdWxkIGdvIGludG8gbGludXgtZmlybXdhcmVzLiBJCj4g PiBiZWxpZXZlIGZpcm13YXJlcyBhcmUgc3RpbGwgYWxsb3dlZCB0byBoYXZlIHNvbWUgdXNlciBh Z3JlZW1lbnQsIGJ1dCBJCj4gPiBzdXBwb3NlCj4gPiB0aGVyZSBtdXN0IGJlIGd1aWRlbGluZXMs IGJlc3QgaXMgdG8gYXNrIHRoZXJlIGRpcmVjdGx5Lgo+ID4gCj4gPiByZWdhcmRzLAo+ID4gTmlj b2xhcwo+ID4gCj4gCj4gU2VlbXMgeW91IHVzZSB0aGUgd3JvbmcgZmlybXdhcmUsIEkgd2lsbCBz ZW5kIHRoZSBmaXJtd2FyZSB0byB5b3UuCj4gTXkgY29tbWl0IGJhc2UgaXMgOWMzYTBmMjg1MjQ4 ODk5ZGZhODE1ODViYzVkNWJjOWViZGI4ZmVhZCwgCj4gWW91IGNhbiBmaW5kIGl0IGluIHRoZSBi b3R0b20gb2YgdGhpcyBjb3Zlci4KPiAKPiBXb3VsZCB5b3UgcGxlYXNlIGV4cGxhaW4gdGhlIGxp bnV4LWZpcm13YXJlIGlzc3VlIGluIGRldGFpbAoKSSBiZWxpZXZlIHRoYXQgdG8gbWVyZ2UgYSBk cml2ZXIgKG5vbiBzdGFnaW5nKSB0aGF0IGRlcGVuZHMgb24gYSBmaXJtd2FyZSAoSSdsbApsZXQg SGFucyBhbmQgb3RoZXJzIGNvbmZpcm0pLCB5b3UgbmVlZCB0byBzdWJtaXQgdGhpcyBmaXJtd2Fy ZSwgYWxvbmcgd2l0aCBhCm5vbi1pbnRlcmFjdGl2ZSBsaWNlbmNlIHRvIGJlIGluY2x1ZGVkIGlu IHRoZSBsaW51eC1maXJtd2FyZSBwcm9qZWN0LgoKTlhQIG5vdGFibHkgaGF2ZSBhbiBTRE1BIGZp cm13YXJlIGluIHRoZXJlLCB3aXRoIGEgbGljZW5jZSBmaWxlLiBQZXJoYXBzIHRoZXNlCmRldmVs b3BlcnMgY2FuIGFzc2lzdCBpbiB0aGlzIHJlZ2FyZC4gT2Z0ZW4gdGhhdCB0YWtlcyB0aW1lIGR1 ZSB0byBsZWdhbApyZXF1aXJlbWVudCBvZiBtb3ZpbmcgZnJvbSBhbiBpbnRlcmFjdGl2ZSBFVUxB IHRvIGEgbGljZW5jZSBmaWxlLgoKSW4gbGF0ZXIgdmVyc2lvbiwgaXQgd291bGQgYmUgbmljZSB0 byBleHBsYWluIGluIHRoZSBjb3ZlciBsYXRlciB0aGUgc3RhdHVzIG9mCmZpcm13YXJlIGRpc3Ry aWJ1dGlvbiwgYW5kIGhvdyB0byBvYnRhaW4gdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiAoc3BlY2lh bGx5IGlmCm5vdCB5ZXQgaW4gbGludXgtZmlybXdhcmUpLgoKVGhhbmtzIGZvciBzZW5kaW5nIG1l IHRoZSBmaXJtd2FyZXMsIEkgd2lsbCBzZWUgaWYgSSBjYW4gZG8gbW9yZSB0ZXN0cy4KCj4gCj4g PiA+IAo+ID4gPiBJdCBmZWF0dXJlcyBkZWNvZGluZyBmb3IgdGhlIGZvbGxvd2luZyBmb3JtYXRz Ogo+ID4gPiAtIEguMjY0Cj4gPiA+IC0gSEVWQwo+ID4gPiAtIE1QRUc0Cj4gPiA+IC0gTVBFRzIK PiA+ID4gLSBWQzEKPiA+ID4gLSBWUDgKPiA+ID4gCj4gPiA+IEl0IGZlYXR1cmVzIGVuY29kaW5n IGZvciB0aGUgZm9sbG93aW5nIGZvcm1hdHM6Cj4gPiA+IC0gSC4yNjQKPiA+ID4gCj4gPiA+IFRo ZSBkcml2ZXIgY3JlYXRlcyBhIHNlcGFyYXRlIGRldmljZSBub2RlIGZvciB0aGUgZW5jb2RlciBh bmQgZGVjb2Rlci4KPiA+ID4gCj4gPiA+IENoYW5nZWxvZzoKPiA+ID4gCj4gPiA+IHY5Cj4gPiA+ IC0gZHJvcCBWNEwyX0JVRl9GTEFHX0NPREVDQ09ORklHCj4gPiA+IC0gZHJvcCBWNEwyX0VWRU5U X0NPREVDX0VSUk9SCj4gPiA+IC0gZHJvcCBWNEwyX0VWRU5UX1NLSVAKPiA+ID4gLSB1c2UgdGhl IHY0bDJfYnVmZmVyLnNlcXVlbmNlIGNvdW50ZXIKPiA+ID4gLSBmaXggc29tZSBidWlsZCB3YXJu aW5ncyB3aXRoIFc9MSByZXBvcnRlZCBieSBrZXJuZWwgdGVzdCByb2JvdAo+ID4gPiAKPiA+ID4g djgKPiA+ID4gLSBtb3ZlIGRyaXZlciBmcm9tIGRyaXZlci9tZWRpYS9wbGF0Zm9ybS9pbXgvdnB1 LThxIHRvCj4gPiA+IMKgwqBkcml2ZXIvbWVkaWEvcGxhdGZvcm0vYW1waGlvbgo+ID4gPiAtIHJl bmFtZSBkcml2ZXIgbmFtZSB0byBhbXBoaW9uCj4gPiA+IC0gcmVtb3ZlIGlteF92cHUuaAo+ID4g PiAtIG1vdmUgdGhlIGRlZmluaXRpb24gb2YgVjRMMl9FVkVOVF9DT0RFQ19FUlJPUiB0byB2aWRl b2RldjIuaAo+ID4gPiAtIG1vdmUgdGhlIGRlZmluaXRpb24gb2YgVjRMMl9FVkVOVF9TS0lQIHRv IHZpZGVvZGV2Mi5oCj4gPiA+IAo+ID4gPiB2Nwo+ID4gPiAtIGZpeCBidWlsZCB3YXJuaW5ncyB3 aXRoIFc9MSByZXBvcnRlZCBieSBrZXJuZWwgdGVzdCByb2JvdAo+ID4gPiAKPiA+ID4gdjY6Cj4g PiA+IC0gcmVuYW1lIFY0TDJfUElYX0ZNVF9OVDggdG8gVjRMMl9QSVhfRk1UX05WMTJfOEwxMjgK PiA+ID4gLSByZW5hbWUgVjRMMl9QSVhfRk1UX05UMTAgdG8gVjRMMl9QSVhfRk1UX05WMTJfMTBC RV84TDEyOAo+ID4gPiAKPiA+ID4gdjU6Cj4gPiA+IC0gbW92ZSBzb21lIGRlZmluaXRpb24gZnJv bSBpbXhfdnBoLmggdG8gdmlkZW9kZXYyLmgKPiA+ID4gLSByZW1vdmUgc29tZSB1bm5lY2Vzc2Fy eSBjb250ZW50Cj4gPiA+IC0gYWRkIHNvbWUgZG9jdW1lbnRhdGlvbiBkZXNjcmlwdGlvbnMKPiA+ ID4gLSBwYXNzIHRoZSBsYXRlc2V0IHY0bDItY29tcGxpYW5jZSB0ZXN0Cj4gPiA+IAo+ID4gPiB2 NDoKPiA+ID4gLSByZWRlZmluZSB0aGUgbWVtb3J5LXJlZ2lvbiBpbiBkZXZpY2V0cmVlIGJpbmRp bmdzIGRvY3VtZW50YXRpb24KPiA+ID4gLSB1c2UgdjRsMidzIG1lY2hhbmlzbSB0byBpbXBsZW1l bnQgc3luY2hyb25pemUgcXVldWluZyBpb2N0bAo+ID4gPiAtIHJlbW92ZSB0aGUgdW5uZWNlc3Nh cnkgbXV0ZXggaW9jdGxfc3luYwo+ID4gPiAtIGRvbid0IG5vdGlmeSBzb3VyY2UgY2hhbmdlIGV2 ZW50IGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSBzYW1lIGFzCj4gPiA+IHByZXZpb3VzbHkgZXN0YWJs aXNoZWQKPiA+ID4gLSBhZGQgZmxhZyBWNEwyX0ZNVF9GTEFHX0RZTl9SRVNPTFVUSU9OIHRvIGRl Y29kZXIncyBjYXB0dXJlIGZvcm1hdAo+ID4gPiAKPiA+ID4gdjM6Cj4gPiA+IC0gZG9uJ3QgbWFr ZSB2cHUgZGV2aWNlIG5vZGUgYSBzaW1wbGUtYnVzCj4gPiA+IC0gdHJpZ2dlciBwcm9iaW5nIHZw dSBjb3JlIGluIHRoZSBkcml2ZXIKPiA+ID4gLSByZW1vdmUgdW5uZWNlc3NhcnkgdnB1IGNvcmUg aW5kZXggcHJvcGVydHkKPiA+ID4gCj4gPiA+IHYyOgo+ID4gPiAtIGZpeCBkdCBiaW5kaW5ncyBi dWlsZCBlcnJvcgo+ID4gPiAtIHNwbGl0IGRyaXZlciBwYXRjaCBpbnRvIHNldmVyYWwgcGFydHMg dG8gYXZvaWQgZXhjZWVkaW5nIGJ5dGVzIGxpbWl0Cj4gPiA+IAo+ID4gPiBDb21wbGlhbmNlCj4g PiA+ID09PT09PT09PT0KPiA+ID4gIyB2NGwyLWNvbXBsaWFuY2UgLWQgL2Rldi92aWRlbzAKPiA+ ID4gdjRsMi1jb21wbGlhbmNlIDEuMjEuMC00ODM4LCA2NCBiaXRzLCA2NC1iaXQgdGltZV90IHY0 bDItY29tcGxpYW5jZQo+ID4gPiBTSEE6IDIyNDY2Nzk4ZjlhOSAyMDIxLTA4LTI1IDExOjA1OjIx Cj4gPiA+IAo+ID4gPiBDb21wbGlhbmNlIHRlc3QgZm9yIGFtcGhpb24tdnB1IGRldmljZSAvZGV2 L3ZpZGVvMDoKPiA+ID4gCj4gPiA+IERyaXZlciBJbmZvOgo+ID4gPiDCoMKgwqDCoMKgwqBEcml2 ZXIgbmFtZSAgICAgIDogYW1waGlvbi12cHUKPiA+ID4gwqDCoMKgwqDCoMKgQ2FyZCB0eXBlICAg ICAgICA6IGFtcGhpb24gdnB1IGRlY29kZXIKPiA+ID4gwqDCoMKgwqDCoMKgQnVzIGluZm8gICAg ICAgICA6IHBsYXRmb3JtOiBhbXBoaW9uLXZwdQo+ID4gPiDCoMKgwqDCoMKgwqBEcml2ZXIgdmVy c2lvbiAgIDogNS4xNC4wCj4gPiA+IMKgwqDCoMKgwqDCoENhcGFiaWxpdGllcyAgICAgOiAweDg0 MjA0MDAwCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBWaWRlbyBNZW1vcnktdG8t TWVtb3J5IE11bHRpcGxhbmFyCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBTdHJl YW1pbmcKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEV4dGVuZGVkIFBpeCBGb3Jt YXQKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERldmljZSBDYXBhYmlsaXRpZXMK PiA+ID4gwqDCoMKgwqDCoMKgRGV2aWNlIENhcHMgICAgICA6IDB4MDQyMDQwMDAKPiA+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFZpZGVvIE1lbW9yeS10by1NZW1vcnkgTXVsdGlwbGFu YXIKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFN0cmVhbWluZwo+ID4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRXh0ZW5kZWQgUGl4IEZvcm1hdAo+ID4gPiDCoMKgwqDC oMKgwqBEZXRlY3RlZCBTdGF0ZWZ1bCBEZWNvZGVyCj4gPiA+IAo+ID4gPiBSZXF1aXJlZCBpb2N0 bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX1FVRVJZQ0FQOiBPSwo+ID4gPiDCoMKg wqDCoMKgwqB0ZXN0IGludmFsaWQgaW9jdGxzOiBPSwo+ID4gPiAKPiA+ID4gQWxsb3cgZm9yIG11 bHRpcGxlIG9wZW5zOgo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IHNlY29uZCAvZGV2L3ZpZGVvMCBv cGVuOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19RVUVSWUNBUDogT0sKPiA+ID4g wqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX1BSSU9SSVRZOiBPSwo+ID4gPiDCoMKgwqDCoMKg wqB0ZXN0IGZvciB1bmxpbWl0ZWQgb3BlbnM6IE9LCj4gPiA+IAo+ID4gPiBEZWJ1ZyBpb2N0bHM6 Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0RCR19HL1NfUkVHSVNURVI6IE9LIChOb3Qg U3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19MT0dfU1RBVFVTOiBPSyAo Tm90IFN1cHBvcnRlZCkKPiA+ID4gCj4gPiA+IElucHV0IGlvY3RsczoKPiA+ID4gwqDCoMKgwqDC oMKgdGVzdCBWSURJT0NfRy9TX1RVTkVSL0VOVU1fRlJFUV9CQU5EUzogT0sgKE5vdCBTdXBwb3J0 ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19GUkVRVUVOQ1k6IE9LIChOb3Qg U3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19TX0hXX0ZSRVFfU0VFSzog T0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0VOVU1BVURJ TzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvUy9F TlVNSU5QVVQ6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElP Q19HL1NfQVVESU86IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqBJbnB1dHM6 IDAgQXVkaW8gSW5wdXRzOiAwIFR1bmVyczogMAo+ID4gPiAKPiA+ID4gT3V0cHV0IGlvY3RsczoK PiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX01PRFVMQVRPUjogT0sgKE5vdCBTdXBw b3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19GUkVRVUVOQ1k6IE9LIChO b3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19FTlVNQVVET1VUOiBP SyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TL0VOVU1P VVRQVVQ6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19H L1NfQVVET1VUOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgT3V0cHV0czog MCBBdWRpbyBPdXRwdXRzOiAwIE1vZHVsYXRvcnM6IDAKPiA+ID4gCj4gPiA+IElucHV0L091dHB1 dCBjb25maWd1cmF0aW9uIGlvY3RsczoKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRU5V TS9HL1MvUVVFUllfU1REOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgdGVz dCBWSURJT0NfRU5VTS9HL1MvUVVFUllfRFZfVElNSU5HUzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4g PiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0RWX1RJTUlOR1NfQ0FQOiBPSyAoTm90IFN1cHBv cnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX0VESUQ6IE9LIChOb3QgU3Vw cG9ydGVkKQo+ID4gPiAKPiA+ID4gQ29udHJvbCBpb2N0bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRl c3QgVklESU9DX1FVRVJZX0VYVF9DVFJML1FVRVJZTUVOVTogT0sKPiA+ID4gwqDCoMKgwqDCoMKg dGVzdCBWSURJT0NfUVVFUllDVFJMOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19H L1NfQ1RSTDogT0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TL1RSWV9FWFRfQ1RS TFM6IE9LCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DXyhVTilTVUJTQ1JJQkVfRVZFTlQv RFFFVkVOVDogT0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX0pQRUdDT01QOiBP SyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgU3RhbmRhcmQgQ29udHJvbHM6IDMg UHJpdmF0ZSBDb250cm9sczogMAo+ID4gPiAKPiA+ID4gRm9ybWF0IGlvY3RsczoKPiA+ID4gwqDC oMKgwqDCoMKgdGVzdCBWSURJT0NfRU5VTV9GTVQvRlJBTUVTSVpFUy9GUkFNRUlOVEVSVkFMUzog T0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX1BBUk06IE9LIChOb3QgU3VwcG9y dGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HX0ZCVUY6IE9LIChOb3QgU3VwcG9y dGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HX0ZNVDogT0sKPiA+ID4gwqDCoMKg wqDCoMKgdGVzdCBWSURJT0NfVFJZX0ZNVDogT0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJ T0NfU19GTVQ6IE9LCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0dfU0xJQ0VEX1ZCSV9D QVA6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IENyb3BwaW5nOiBP SyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBDb21wb3Npbmc6IE9LCj4g PiA+IMKgwqDCoMKgwqDCoHRlc3QgU2NhbGluZzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IAo+ ID4gPiBDb2RlYyBpb2N0bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DXyhUUllfKUVO Q09ERVJfQ01EOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJ T0NfR19FTkNfSU5ERVg6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0 IFZJRElPQ18oVFJZXylERUNPREVSX0NNRDogT0sKPiA+ID4gCj4gPiA+IEJ1ZmZlciBpb2N0bHM6 Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX1JFUUJVRlMvQ1JFQVRFX0JVRlMvUVVFUllC VUY6IE9LCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0VYUEJVRjogT0sKPiA+ID4gwqDC oMKgwqDCoMKgdGVzdCBSZXF1ZXN0czogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IAo+ID4gPiBU b3RhbCBmb3IgYW1waGlvbi12cHUgZGV2aWNlIC9kZXYvdmlkZW8wOiA0NSwgU3VjY2VlZGVkOiA0 NSwgRmFpbGVkOgo+ID4gPiAwLCBXYXJuaW5nczogMAo+ID4gPiAKPiA+ID4gIyB2NGwyLWNvbXBs aWFuY2UgLWQgL2Rldi92aWRlbzEKPiA+ID4gdjRsMi1jb21wbGlhbmNlIDEuMjEuMC00ODM4LCA2 NCBiaXRzLCA2NC1iaXQgdGltZV90IHY0bDItY29tcGxpYW5jZQo+ID4gPiBTSEE6IDIyNDY2Nzk4 ZjlhOSAyMDIxLTA4LTI1IDExOjA1OjIxCj4gPiA+IAo+ID4gPiBDb21wbGlhbmNlIHRlc3QgZm9y IGFtcGhpb24tdnB1IGRldmljZSAvZGV2L3ZpZGVvMToKPiA+ID4gCj4gPiA+IERyaXZlciBJbmZv Ogo+ID4gPiDCoMKgwqDCoMKgwqBEcml2ZXIgbmFtZSAgICAgIDogYW1waGlvbi12cHUKPiA+ID4g wqDCoMKgwqDCoMKgQ2FyZCB0eXBlICAgICAgICA6IGFtcGhpb24gdnB1IGVuY29kZXIKPiA+ID4g wqDCoMKgwqDCoMKgQnVzIGluZm8gICAgICAgICA6IHBsYXRmb3JtOiBhbXBoaW9uLXZwdQo+ID4g PiDCoMKgwqDCoMKgwqBEcml2ZXIgdmVyc2lvbiAgIDogNS4xNC4wCj4gPiA+IMKgwqDCoMKgwqDC oENhcGFiaWxpdGllcyAgICAgOiAweDg0MjA0MDAwCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBWaWRlbyBNZW1vcnktdG8tTWVtb3J5IE11bHRpcGxhbmFyCj4gPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBTdHJlYW1pbmcKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoEV4dGVuZGVkIFBpeCBGb3JtYXQKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoERldmljZSBDYXBhYmlsaXRpZXMKPiA+ID4gwqDCoMKgwqDCoMKgRGV2aWNlIENhcHMgICAg ICA6IDB4MDQyMDQwMDAKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFZpZGVvIE1l bW9yeS10by1NZW1vcnkgTXVsdGlwbGFuYXIKPiA+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoFN0cmVhbWluZwo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRXh0ZW5kZWQg UGl4IEZvcm1hdAo+ID4gPiDCoMKgwqDCoMKgwqBEZXRlY3RlZCBTdGF0ZWZ1bCBFbmNvZGVyCj4g PiA+IAo+ID4gPiBSZXF1aXJlZCBpb2N0bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9D X1FVRVJZQ0FQOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IGludmFsaWQgaW9jdGxzOiBPSwo+ ID4gPiAKPiA+ID4gQWxsb3cgZm9yIG11bHRpcGxlIG9wZW5zOgo+ID4gPiDCoMKgwqDCoMKgwqB0 ZXN0IHNlY29uZCAvZGV2L3ZpZGVvMSBvcGVuOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJ RElPQ19RVUVSWUNBUDogT0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX1BSSU9S SVRZOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IGZvciB1bmxpbWl0ZWQgb3BlbnM6IE9LCj4g PiA+IAo+ID4gPiBEZWJ1ZyBpb2N0bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0RC R19HL1NfUkVHSVNURVI6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0 IFZJRElPQ19MT0dfU1RBVFVTOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gCj4gPiA+IElucHV0 IGlvY3RsczoKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX1RVTkVSL0VOVU1fRlJF UV9CQU5EUzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9D X0cvU19GUkVRVUVOQ1k6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0 IFZJRElPQ19TX0hXX0ZSRVFfU0VFSzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDCoMKg wqDCoHRlc3QgVklESU9DX0VOVU1BVURJTzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDC oMKgwqDCoHRlc3QgVklESU9DX0cvUy9FTlVNSU5QVVQ6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4g PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfQVVESU86IE9LIChOb3QgU3VwcG9ydGVkKQo+ ID4gPiDCoMKgwqDCoMKgwqBJbnB1dHM6IDAgQXVkaW8gSW5wdXRzOiAwIFR1bmVyczogMAo+ID4g PiAKPiA+ID4gT3V0cHV0IGlvY3RsczoKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9T X01PRFVMQVRPUjogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklE SU9DX0cvU19GUkVRVUVOQ1k6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0 ZXN0IFZJRElPQ19FTlVNQVVET1VUOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDC oMKgdGVzdCBWSURJT0NfRy9TL0VOVU1PVVRQVVQ6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDC oMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfQVVET1VUOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ ID4gwqDCoMKgwqDCoMKgT3V0cHV0czogMCBBdWRpbyBPdXRwdXRzOiAwIE1vZHVsYXRvcnM6IDAK PiA+ID4gCj4gPiA+IElucHV0L091dHB1dCBjb25maWd1cmF0aW9uIGlvY3RsczoKPiA+ID4gwqDC oMKgwqDCoMKgdGVzdCBWSURJT0NfRU5VTS9HL1MvUVVFUllfU1REOiBPSyAoTm90IFN1cHBvcnRl ZCkKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRU5VTS9HL1MvUVVFUllfRFZfVElNSU5H UzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0RWX1RJ TUlOR1NfQ0FQOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJ T0NfRy9TX0VESUQ6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiAKPiA+ID4gQ29udHJvbCBpb2N0 bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX1FVRVJZX0VYVF9DVFJML1FVRVJZTUVO VTogT0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfUVVFUllDVFJMOiBPSwo+ID4gPiDC oMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfQ1RSTDogT0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVz dCBWSURJT0NfRy9TL1RSWV9FWFRfQ1RSTFM6IE9LCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklE SU9DXyhVTilTVUJTQ1JJQkVfRVZFTlQvRFFFVkVOVDogT0sKPiA+ID4gwqDCoMKgwqDCoMKgdGVz dCBWSURJT0NfRy9TX0pQRUdDT01QOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gwqDCoMKgwqDC oMKgU3RhbmRhcmQgQ29udHJvbHM6IDIwIFByaXZhdGUgQ29udHJvbHM6IDAKPiA+ID4gCj4gPiA+ IEZvcm1hdCBpb2N0bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0VOVU1fRk1UL0ZS QU1FU0laRVMvRlJBTUVJTlRFUlZBTFM6IE9LCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9D X0cvU19QQVJNOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HX0ZCVUY6IE9LIChO b3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HX0ZNVDogT0sKPiA+ ID4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfVFJZX0ZNVDogT0sKPiA+ID4gwqDCoMKgwqDCoMKg dGVzdCBWSURJT0NfU19GTVQ6IE9LCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0dfU0xJ Q0VEX1ZCSV9DQVA6IE9LIChOb3QgU3VwcG9ydGVkKQo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IENy b3BwaW5nOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IENvbXBvc2luZzogT0sgKE5vdCBTdXBw b3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgU2NhbGluZzogT0sgKE5vdCBTdXBwb3J0ZWQp Cj4gPiA+IAo+ID4gPiBDb2RlYyBpb2N0bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9D XyhUUllfKUVOQ09ERVJfQ01EOiBPSwo+ID4gPiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HX0VO Q19JTkRFWDogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9D XyhUUllfKURFQ09ERVJfQ01EOiBPSyAoTm90IFN1cHBvcnRlZCkKPiA+ID4gCj4gPiA+IEJ1ZmZl ciBpb2N0bHM6Cj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX1JFUUJVRlMvQ1JFQVRFX0JV RlMvUVVFUllCVUY6IE9LCj4gPiA+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0VYUEJVRjogT0sK PiA+ID4gwqDCoMKgwqDCoMKgdGVzdCBSZXF1ZXN0czogT0sgKE5vdCBTdXBwb3J0ZWQpCj4gPiA+ IAo+ID4gPiBUb3RhbCBmb3IgYW1waGlvbi12cHUgZGV2aWNlIC9kZXYvdmlkZW8xOiA0NSwgU3Vj Y2VlZGVkOiA0NSwgRmFpbGVkOgo+ID4gPiAwLCBXYXJuaW5nczogMAo+ID4gPiAKPiA+ID4gTWlu ZyBRaWFuICgxMyk6Cj4gPiA+IMKgwqBkdC1iaW5kaW5nczogbWVkaWE6IGFtcGhpb246IGFkZCBh bXBoaW9uIHZpZGVvIGNvZGVjIGJpbmRpbmdzCj4gPiA+IMKgwqBtZWRpYTpBZGQgbnQ4IGFuZCBu dDEwIHZpZGVvIGZvcm1hdC4KPiA+ID4gwqDCoG1lZGlhOiBhbXBoaW9uOiBhZGQgYW1waGlvbiB2 cHUgZGV2aWNlIGRyaXZlcgo+ID4gPiDCoMKgbWVkaWE6IGFtcGhpb246IGFkZCB2cHUgY29yZSBk cml2ZXIKPiA+ID4gwqDCoG1lZGlhOiBhbXBoaW9uOiBpbXBsZW1lbnQgdnB1IGNvcmUgY29tbXVu aWNhdGlvbiBiYXNlZCBvbiBtYWlsYm94Cj4gPiA+IMKgwqBtZWRpYTogYW1waGlvbjogYWRkIHZw dSB2NGwyIG0ybSBzdXBwb3J0Cj4gPiA+IMKgwqBtZWRpYTogYW1waGlvbjogYWRkIHY0bDIgbTJt IHZwdSBlbmNvZGVyIHN0YXRlZnVsIGRyaXZlcgo+ID4gPiDCoMKgbWVkaWE6IGFtcGhpb246IGFk ZCB2NGwyIG0ybSB2cHUgZGVjb2RlciBzdGF0ZWZ1bCBkcml2ZXIKPiA+ID4gwqDCoG1lZGlhOiBh bXBoaW9uOiBpbXBsZW1lbnQgd2luZHNvciBlbmNvZGVyIHJwYyBpbnRlcmZhY2UKPiA+ID4gwqDC oG1lZGlhOiBhbXBoaW9uOiBpbXBsZW1lbnQgbWFsb25lIGRlY29kZXIgcnBjIGludGVyZmFjZQo+ ID4gPiDCoMKgQVJNNjQ6IGR0czogZnJlZXNjYWxlOiBpbXg4cTogYWRkIGlteCB2cHUgY29kZWMg ZW50cmllcwo+ID4gPiDCoMKgZmlybXdhcmU6IGlteDogc2N1LXBkOiBpbXg4cTogYWRkIHZwdSBt dSByZXNvdXJjZXMKPiA+ID4gwqDCoE1BSU5UQUlORVJTOiBhZGQgQU1QSElPTiBWUFUgQ09ERUMg VjRMMiBkcml2ZXIgZW50cnkKPiA+ID4gCj4gPiA+IMKgLi4uL2JpbmRpbmdzL21lZGlhL2FtcGhp b24sdnB1LnlhbWwgICAgICAgICAgIHwgIDE3OCArKwo+ID4gPiDCoC4uLi9tZWRpYS92NGwvcGl4 Zm10LXl1di1wbGFuYXIucnN0ICAgICAgICAgICB8ICAgMTUgKwo+ID4gPiDCoE1BSU5UQUlORVJT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwo+ID4gPiDCoC4uLi9h cm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OC1zcy12cHUuZHRzaSB8ICAgNzIgKwo+ID4gPiDC oGFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxeHAtbWVrLmR0cyB8ICAgMTcgKwo+ ID4gPiDCoGFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxeHAuZHRzaSAgICB8ICAg MjQgKwo+ID4gPiDCoGRyaXZlcnMvZmlybXdhcmUvaW14L3NjdS1wZC5jICAgICAgICAgICAgICAg ICB8ICAgIDQgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vS2NvbmZpZyAgICAgICAg ICAgICAgICB8ICAgMTkgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vTWFrZWZpbGUg ICAgICAgICAgICAgICB8ICAgIDIgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1w aGlvbi9NYWtlZmlsZSAgICAgICB8ICAgMjMgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1waGlvbi92ZGVjLmMgICAgICAgICB8IDE2NTIKPiA+ICsrKysrKysrKysrKysrKysKPiA+ ID4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdmVuYy5jICAgICAgICAgfCAxMzgy Cj4gPiArKysrKysrKysrKysrKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlv bi92cHUuaCAgICAgICAgICB8ICAzMzMgKysrKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1waGlvbi92cHVfY21kcy5jICAgICB8ICA0MzUgKysrKysKPiA+ID4gwqBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NtZHMuaCAgICAgfCAgIDI1ICsKPiA+ID4gwqBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmggICAgfCAgIDY4ICsKPiA+ID4g wqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvbG9yLmMgICAgfCAgMTkyICsr Cj4gPiA+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmMgICAgIHwg IDkwMSArKysrKysrKysKPiA+ID4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1 X2NvcmUuaCAgICAgfCAgIDE2ICsKPiA+ID4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhp b24vdnB1X2RiZy5jICAgICAgfCAgNDk2ICsrKysrCj4gPiA+IMKgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hbXBoaW9uL3ZwdV9kZWZzLmggICAgIHwgIDE4NiArKwo+ID4gPiDCoC4uLi9tZWRpYS9w bGF0Zm9ybS9hbXBoaW9uL3ZwdV9kZXZfaW14OHEuYyAgICB8ICAgNzIgKwo+ID4gPiDCoGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZHJ2LmMgICAgICB8ICAyMTUgKysrCj4gPiA+ IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9oZWxwZXJzLmMgIHwgIDQ1MyAr KysrKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfaGVscGVycy5o ICB8ICAgNzIgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfaW14 OHEuYyAgICB8ICAyMTggKysrCj4gPiA+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9u L3ZwdV9pbXg4cS5oICAgIHwgIDExNiArKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YW1waGlvbi92cHVfbG9nLmggICAgICB8ICAgNDQgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYW1waGlvbi92cHVfbWFsb25lLmMgICB8IDE2ODMKPiA+ICsrKysrKysrKysrKysrKysr Cj4gPiA+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9tYWxvbmUuaCAgIHwg ICA0MiArCj4gPiA+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9tYm94LmMg ICAgIHwgIDEyNiArKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVf bWJveC5oICAgICB8ICAgMTYgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlv bi92cHVfbXNncy5jICAgICB8ICA0MTMgKysrKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1waGlvbi92cHVfbXNncy5oICAgICB8ICAgMTQgKwo+ID4gPiDCoGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1waGlvbi92cHVfcnBjLmMgICAgICB8ICAyNjMgKysrCj4gPiA+IMKgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9ycGMuaCAgICAgIHwgIDQ2MyArKysrKwo+ID4g PiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfdjRsMi5jICAgICB8ICA2MjUg KysrKysrCj4gPiA+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV92NGwyLmgg ICAgIHwgICA1MyArCj4gPiA+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV93 aW5kc29yLmMgIHwgMTI0NCArKysrKysrKysrKysKPiA+ID4gwqBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL2FtcGhpb24vdnB1X3dpbmRzb3IuaCAgfCAgIDM5ICsKPiA+ID4gwqBkcml2ZXJzL21lZGlh L3Y0bDItY29yZS92NGwyLWlvY3RsLmMgICAgICAgICAgfCAgICAyICsKPiA+ID4gwqBpbmNsdWRl L3VhcGkvbGludXgvdmlkZW9kZXYyLmggICAgICAgICAgICAgICAgfCAgICA0ICsKPiA+ID4gwqA0 MiBmaWxlcyBjaGFuZ2VkLCAxMjIyNiBpbnNlcnRpb25zKCspICBjcmVhdGUgbW9kZSAxMDA2NDQK PiA+ID4gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2FtcGhpb24sdnB1 LnlhbWwKPiA+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm02NC9ib290L2R0cy9mcmVl c2NhbGUvaW14OC1zcy12cHUuZHRzaQo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vTWFrZWZpbGUKPiA+ID4gwqBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZkZWMuYwo+ID4gPiDCoGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdmVuYy5jCj4gPiA+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHUuaAo+ ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24v dnB1X2NtZHMuYwo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL2FtcGhpb24vdnB1X2NtZHMuaAo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmgKPiA+ID4gwqBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb2xvci5jCj4gPiA+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29y ZS5jCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1w aGlvbi92cHVfY29yZS5oCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMKPiA+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9kZWZzLmgKPiA+ID4gwqBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9kZXZfaW14OHEuYwo+ ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24v dnB1X2Rydi5jCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1waGlvbi92cHVfaGVscGVycy5jCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfaGVscGVycy5oCj4gPiA+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfaW14OHEuYwo+ID4g PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1 X2lteDhxLmgKPiA+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hbXBoaW9uL3ZwdV9sb2cuaAo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X21hbG9uZS5jCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfbWFsb25lLmgKPiA+ID4gwqBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9tYm94 LmMKPiA+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBo aW9uL3ZwdV9tYm94LmgKPiA+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hbXBoaW9uL3ZwdV9tc2dzLmMKPiA+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9tc2dzLmgKPiA+ID4gwqBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9ycGMuYwo+ID4gPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X3Jw Yy5oCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1w aGlvbi92cHVfdjRsMi5jCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1waGlvbi92cHVfdjRsMi5oCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfd2luZHNvci5jCj4gPiA+IMKgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfd2luZHNvci5o Cj4gPiA+IAo+ID4gPiAKPiA+ID4gYmFzZS1jb21taXQ6IDljM2EwZjI4NTI0ODg5OWRmYTgxNTg1 YmM1ZDViYzllYmRiOGZlYWQKPiA+IAo+IAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==