From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5CECDC4332F for ; Mon, 11 Oct 2021 09:12:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3BCCA60EB6 for ; Mon, 11 Oct 2021 09:12:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235419AbhJKJOO (ORCPT ); Mon, 11 Oct 2021 05:14:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234280AbhJKJOM (ORCPT ); Mon, 11 Oct 2021 05:14:12 -0400 Received: from lb1-smtp-cloud7.xs4all.net (lb1-smtp-cloud7.xs4all.net [IPv6:2001:888:0:108::1a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60C77C061570; Mon, 11 Oct 2021 02:12:12 -0700 (PDT) Received: from cust-b5b5937f ([IPv6:fc0c:c16d:66b8:757f:c639:739b:9d66:799d]) by smtp-cloud7.xs4all.net with ESMTPA id ZrLqmxJC2k3b0ZrLtmLoI2; Mon, 11 Oct 2021 11:12:10 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xs4all.nl; s=s2; t=1633943530; bh=kREqiEIOflmprmouJt/QUBN3Z8G98boZs8B1bMamwCY=; h=Subject:To:From:Message-ID:Date:MIME-Version:Content-Type:From: Subject; b=NefE9L/lQpV+bqk/y1m8/ck/itz3TMfeAwltmHBE9JaetNvqwE1q6o0SWEc4Hb59L LkXUmGJYY4ofSgebGd6AK6jJ2Wzv/Xar9JQw0tHsrMS9ZPbSE2PyqbNAOaXMA81epA 6YkWHC8G1UfeOsL4ZtbFlJ7qhWMx+orlfD63AighFgSbzNemYU88EbS8zqxv/i+TeJ 3WRn4BAsYqHas2dnM9P4m2RCikFOWQQiMDdjRVGFyAZslw3y/3wasQQV77UDlp3a+u TIgjoPu5TNK08pnveYjjybR273pHko09CaEgKpolN9f9s9dEfTa3OSCzmrqeQ0w81X b4VNZpHoTz+QQ== Subject: Re: [EXT] Re: [PATCH v9 00/13] amphion video decoder/encoder driver To: Nicolas Dufresne , Ming Qian , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" Cc: "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" References: <7591d62b4aedb0ad789f09d90695c700c65df53d.camel@ndufresne.ca> <27ec66639de79216e9b887ee6977f35906e33a43.camel@ndufresne.ca> From: Hans Verkuil Message-ID: Date: Mon, 11 Oct 2021 11:12:06 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <27ec66639de79216e9b887ee6977f35906e33a43.camel@ndufresne.ca> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-CMAE-Envelope: MS4xfNMJsIcLIBb4VscJuke1SX934hbxdEHDEFOHj5ikzDzjEMocQGXuN5tUwjjxpsCAZB74xt7DlUwucXtYR7zP9bKODOhphbMrKrJuLh8sAvpTzR1GWQXN Y3exBUTaffRgav41uxLTQpeObDy93pL09EJsIpoJJ7ENudHtiiO1FqFZFgo0Rim3JeVl/F/lY3Wv/50A3eISShUpix3z6E5QPECY255fx/AqpL4PiNWxPOv+ cfajO/g71y4aO3HFwfbZlFHh4t80p5+4LnKgirVuu5OxeMj8tv56ouk8eDWKKIKEY02zcQxOnOKEUbBSZ0v2h/gL8GVilzeZehMIM6gcdB6O5CEFntz1+JVo cI7daOL6A1MxtagacekoaHiZOCs5L1ktxzw4L6PkvM0LDHDhTgMzzJ/YQaFx7OqWP8qE8D4Yr0VTaQVd5Z7zx5PwHN7BO7lPfe7Fjob3AaoazhSpkE9midhs ylvNEK03JqrNCthIwdBHbMPLQkSpDDaGYkJ8F7QDJVyWxiI1qWzM7GYKR9swKVxCN7af/ny/qzPEuiJaPpphUvd2DH0ZcrIxEVRD5UVAGDncLszmv5QausuO Xq5xsrAVBmRCofAKS/RK2v/b0ShMdDmLY/tpkwCsbmnbpvFGh15ZA8va/FvqMPAVNY8= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 23/09/2021 15:33, Nicolas Dufresne wrote: > 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. That's correct. Regards, Hans > 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 459C4C433F5 for ; Mon, 11 Oct 2021 09:15:02 +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 07A7C60EB6 for ; Mon, 11 Oct 2021 09:15:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 07A7C60EB6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=xs4all.nl 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: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=wKPJx9/WLGzGwBoUSt+Jh4CLEymg7c+d/iEy179Z8Vw=; b=uk6eY9M9Q8FMoOA8Aw7j13DP1j 0xR9LwULmvmqlJHNLwUus0fSX8+YK7U+zIsHPPot+QGQ1GH80eJRmCm3Z/Xu1ZDZnwUrVNFXJwFR5 Jrp0FZheE7hKRsx1sLmRNa0zUPCdPYqLHZD5qitAJkoaYe5boEjJS/Xg61geVMuvLYc3ApfciJs2/ rM421g/VXWtpP6eZ+p2sppTaAyDdwnD94lDlQxtXscuaLpoJLDtT+U5z55VlNBLZmeVeet7fufhGY F91arv6uCm/0OmUiwll+Rf1KZQrqtr+w6jx9nh/Kn+HtPvr8CRcKd/xRTj/Bz7qViFIyXs0XxQJxR ZyVEwKmw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mZrM8-008UL9-AL; Mon, 11 Oct 2021 09:12:24 +0000 Received: from lb2-smtp-cloud7.xs4all.net ([2001:888:0:108::2a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mZrM1-008UJK-Hz for linux-arm-kernel@lists.infradead.org; Mon, 11 Oct 2021 09:12:21 +0000 Received: from cust-b5b5937f ([IPv6:fc0c:c16d:66b8:757f:c639:739b:9d66:799d]) by smtp-cloud7.xs4all.net with ESMTPA id ZrLqmxJC2k3b0ZrLtmLoI2; Mon, 11 Oct 2021 11:12:10 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xs4all.nl; s=s2; t=1633943530; bh=kREqiEIOflmprmouJt/QUBN3Z8G98boZs8B1bMamwCY=; h=Subject:To:From:Message-ID:Date:MIME-Version:Content-Type:From: Subject; b=NefE9L/lQpV+bqk/y1m8/ck/itz3TMfeAwltmHBE9JaetNvqwE1q6o0SWEc4Hb59L LkXUmGJYY4ofSgebGd6AK6jJ2Wzv/Xar9JQw0tHsrMS9ZPbSE2PyqbNAOaXMA81epA 6YkWHC8G1UfeOsL4ZtbFlJ7qhWMx+orlfD63AighFgSbzNemYU88EbS8zqxv/i+TeJ 3WRn4BAsYqHas2dnM9P4m2RCikFOWQQiMDdjRVGFyAZslw3y/3wasQQV77UDlp3a+u TIgjoPu5TNK08pnveYjjybR273pHko09CaEgKpolN9f9s9dEfTa3OSCzmrqeQ0w81X b4VNZpHoTz+QQ== Subject: Re: [EXT] Re: [PATCH v9 00/13] amphion video decoder/encoder driver To: Nicolas Dufresne , Ming Qian , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" Cc: "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" References: <7591d62b4aedb0ad789f09d90695c700c65df53d.camel@ndufresne.ca> <27ec66639de79216e9b887ee6977f35906e33a43.camel@ndufresne.ca> From: Hans Verkuil Message-ID: Date: Mon, 11 Oct 2021 11:12:06 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <27ec66639de79216e9b887ee6977f35906e33a43.camel@ndufresne.ca> Content-Language: en-US X-CMAE-Envelope: MS4xfNMJsIcLIBb4VscJuke1SX934hbxdEHDEFOHj5ikzDzjEMocQGXuN5tUwjjxpsCAZB74xt7DlUwucXtYR7zP9bKODOhphbMrKrJuLh8sAvpTzR1GWQXN Y3exBUTaffRgav41uxLTQpeObDy93pL09EJsIpoJJ7ENudHtiiO1FqFZFgo0Rim3JeVl/F/lY3Wv/50A3eISShUpix3z6E5QPECY255fx/AqpL4PiNWxPOv+ cfajO/g71y4aO3HFwfbZlFHh4t80p5+4LnKgirVuu5OxeMj8tv56ouk8eDWKKIKEY02zcQxOnOKEUbBSZ0v2h/gL8GVilzeZehMIM6gcdB6O5CEFntz1+JVo cI7daOL6A1MxtagacekoaHiZOCs5L1ktxzw4L6PkvM0LDHDhTgMzzJ/YQaFx7OqWP8qE8D4Yr0VTaQVd5Z7zx5PwHN7BO7lPfe7Fjob3AaoazhSpkE9midhs ylvNEK03JqrNCthIwdBHbMPLQkSpDDaGYkJ8F7QDJVyWxiI1qWzM7GYKR9swKVxCN7af/ny/qzPEuiJaPpphUvd2DH0ZcrIxEVRD5UVAGDncLszmv5QausuO Xq5xsrAVBmRCofAKS/RK2v/b0ShMdDmLY/tpkwCsbmnbpvFGh15ZA8va/FvqMPAVNY8= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211011_021217_923034_BC18B8BB X-CRM114-Status: GOOD ( 28.44 ) 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 T24gMjMvMDkvMjAyMSAxNTozMywgTmljb2xhcyBEdWZyZXNuZSB3cm90ZToKPiBMZSBqZXVkaSAy MyBzZXB0ZW1icmUgMjAyMSDDoCAxMDo0NSArMDAwMCwgTWluZyBRaWFuIGEgw6ljcml0wqA6Cj4+ PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+Pj4gRnJvbTogTmljb2xhcyBEdWZyZXNuZSBb bWFpbHRvOm5pY29sYXNAbmR1ZnJlc25lLmNhXQo+Pj4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1i ZXIgMjIsIDIwMjEgMTA6MTQgUE0KPj4+IFRvOiBNaW5nIFFpYW4gPG1pbmcucWlhbkBueHAuY29t PjsgbWNoZWhhYkBrZXJuZWwub3JnOwo+Pj4gc2hhd25ndW9Aa2VybmVsLm9yZzsgcm9iaCtkdEBr ZXJuZWwub3JnOyBzLmhhdWVyQHBlbmd1dHJvbml4LmRlCj4+PiBDYzogaHZlcmt1aWwtY2lzY29A eHM0YWxsLm5sOyBrZXJuZWxAcGVuZ3V0cm9uaXguZGU7IGZlc3RldmFtQGdtYWlsLmNvbTsKPj4+ IGRsLWxpbnV4LWlteCA8bGludXgtaW14QG54cC5jb20+OyBBaXNoZW5nIERvbmcgPGFpc2hlbmcu ZG9uZ0BueHAuY29tPjsKPj4+IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZzsgbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZzsKPj4+IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4+IFN1YmplY3Q6IFtFWFRdIFJlOiBb UEFUQ0ggdjkgMDAvMTNdIGFtcGhpb24gdmlkZW8gZGVjb2Rlci9lbmNvZGVyIGRyaXZlcgo+Pj4K Pj4+IENhdXRpb246IEVYVCBFbWFpbAo+Pj4KPj4+IEhpIE1pbmcsCj4+Pgo+Pj4gTGUgbHVuZGkg MTMgc2VwdGVtYnJlIDIwMjEgw6AgMTc6MTEgKzA4MDAsIE1pbmcgUWlhbiBhIMOpY3JpdCA6Cj4+ Pj4gSGkgYWxsLAo+Pj4+Cj4+Pj4gVGhpcyBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvcgo+ Pj4+IHRoZSBhbXBoaW9uIHZpZGVvIGVuY29kZXIgYW5kIGRlY29kZXIKPj4+PiB2aWEgdGhlIFZQ VSBibG9jayBwcmVzZW50IGluIGlteDhxIHBsYXRmb3Jtcy4KPj4+PiBDdXJyZW50bHksIHN1cHBv cnQgZm9yIElNWDhRWFAgYW5kIElNWDhRTSBpcyBpbmNsdWRlZC4KPj4+Cj4+PiBJJ3ZlIGJlZW4g dHJ5aW5nIHRvIHRlc3QgdGhpcyBkcml2ZXIsIGJhc2VkIGl0IG9uIG1haW5saW5lIDUuMTUtcmMy IGluCj4+PiBhYnNlbmNlIG9mCj4+PiByZWNvbW1lbmRhdGlvbiBoZXJlLiBUaGVyZSBzZWVtcyB0 byBiZSBwb29yIG1haW5saW5lIHN1cHBvcnQgZm9yIHRoaXMgYm9hcmQsCj4+PiBub3RhYmx5IG9u bHkgMSBDUFUgY29tZSB1cC4gRmluYWxseSwgSSBjb3VsZCBub3QgdGVzdCBhbnl0aGluZyBhcyB0 aGUgZHJpdmVyCj4+PiBmYWlsZWQgdG8gYm9vdCB0aGUgZGVjb2RlcnMgYW5kIGVuY29kZXIgY29y ZXM6Cj4+Pgo+Pj4gWyAgIDMwLjc2NjE2MF0gW1ZQVSBDT1JFXVswXSBkZWNvZGVyIGJvb3QKPj4+ IFsgICAzMS44NzMxNzVdIFtWUFUgQ09SRV1bMF0gZGVjb2RlciBib290IHRpbWVvdXQKPj4+IFsg ICAzMS44NzgwNTddIFtWUFUgVjRMMl10aGVyZSBpcyBubyBjb3JlIGZvciBkZWNvZGVyCj4+PiBb IDE3NjYuNDk1OTYzXSBbVlBVIENPUkVdWzFdIGVuY29kZXIgYm9vdCBbIDE3NjcuNTI0OTU3XSBb VlBVIENPUkVdWzFdCj4+PiBlbmNvZGVyIGJvb3QgdGltZW91dCBbIDE3NjcuNTI5NzI0XSBbVlBV IFY0TDJddGhlcmUgaXMgbm8gY29yZSBmb3IgZW5jb2Rlcgo+Pj4KPj4+IFBsZWFzZSwgbGV0IG1l IGtub3cgaG93IEkgY2FuIGdldCBwYXNzZWQgdGhlc2UgaXNzdWVzLiBJIGhhdmUgdXNlZCBmaXJt d2FyZXMKPj4+IHJlZmVyZW5jZWQgaW4gWW9jdG8gdHJlZToKPj4+Cj4+Pgo+Pj4gaHR0cHM6Ly9l dXIwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJG d3d3Lm4KPj4+IHhwLmNvbSUyRmxnZmlsZXMlMkZOTUclMkZNQUQlMkZZT0NUTyUyRmZpcm13YXJl LWlteC03LjkuYmluJmFtcAo+Pj4gO2RhdGE9MDQlN0MwMSU3Q21pbmcucWlhbiU0MG54cC5jb20l N0NlNTBhYzkzYWRkYjQ0NGY3Y2Q5YjA4ZDk3Cj4+PiBkZDMzYzZlJTdDNjg2ZWExZDNiYzJiNGM2 ZmE5MmNkOTljNWMzMDE2MzUlN0MwJTdDMCU3QzYzNzY3OTE2Cj4+PiA4NDgzMjM2MTM0JTdDVW5r bm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqCj4+PiBvaVYybHVN eklpTENKQlRpSTZJazFoYVd3aUxDSlhWQ0k2TW4wJTNEJTdDMTAwMCZhbXA7c2RhdGE9Y00zJTJG Cj4+PiBHbzBNeEQwUlNEbVM1RUxyNnlDZE5lNEVIJTJGZVRBRnRjQWNCQXJSbyUzRCZhbXA7cmVz ZXJ2ZWQ9MAo+Pj4KPj4+IEZpcm13YXJlIGZvciB0aGlzIGRyaXZlciB3aWxsIGFsc28gYmUgYSBz dWJqZWN0IHRvIHRhY2tsZS4gSW4gYW4gaWRlYWwKPj4+IHdvcmxkLCB0aGUKPj4+ICJzZWxmIGV4 dHJhY3RlZCIgc2NyaXB0IHJlcXVpcmVtZW50IHRvIGFjY2VwdCB5b3VyIEVVTEEgd291bGQgbmVl ZCB0byBiZQo+Pj4gd2F2ZWQsIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIGZpcm13YXJlIHNob3Vs ZCBnbyBpbnRvIGxpbnV4LWZpcm13YXJlcy4gSQo+Pj4gYmVsaWV2ZSBmaXJtd2FyZXMgYXJlIHN0 aWxsIGFsbG93ZWQgdG8gaGF2ZSBzb21lIHVzZXIgYWdyZWVtZW50LCBidXQgSQo+Pj4gc3VwcG9z ZQo+Pj4gdGhlcmUgbXVzdCBiZSBndWlkZWxpbmVzLCBiZXN0IGlzIHRvIGFzayB0aGVyZSBkaXJl Y3RseS4KPj4+Cj4+PiByZWdhcmRzLAo+Pj4gTmljb2xhcwo+Pj4KPj4KPj4gU2VlbXMgeW91IHVz ZSB0aGUgd3JvbmcgZmlybXdhcmUsIEkgd2lsbCBzZW5kIHRoZSBmaXJtd2FyZSB0byB5b3UuCj4+ IE15IGNvbW1pdCBiYXNlIGlzIDljM2EwZjI4NTI0ODg5OWRmYTgxNTg1YmM1ZDViYzllYmRiOGZl YWQsIAo+PiBZb3UgY2FuIGZpbmQgaXQgaW4gdGhlIGJvdHRvbSBvZiB0aGlzIGNvdmVyLgo+Pgo+ PiBXb3VsZCB5b3UgcGxlYXNlIGV4cGxhaW4gdGhlIGxpbnV4LWZpcm13YXJlIGlzc3VlIGluIGRl dGFpbAo+IAo+IEkgYmVsaWV2ZSB0aGF0IHRvIG1lcmdlIGEgZHJpdmVyIChub24gc3RhZ2luZykg dGhhdCBkZXBlbmRzIG9uIGEgZmlybXdhcmUgKEknbGwKPiBsZXQgSGFucyBhbmQgb3RoZXJzIGNv bmZpcm0pLCB5b3UgbmVlZCB0byBzdWJtaXQgdGhpcyBmaXJtd2FyZSwgYWxvbmcgd2l0aCBhCj4g bm9uLWludGVyYWN0aXZlIGxpY2VuY2UgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpbnV4LWZpcm13 YXJlIHByb2plY3QuCgpUaGF0J3MgY29ycmVjdC4KClJlZ2FyZHMsCgoJSGFucwoKPiBOWFAgbm90 YWJseSBoYXZlIGFuIFNETUEgZmlybXdhcmUgaW4gdGhlcmUsIHdpdGggYSBsaWNlbmNlIGZpbGUu IFBlcmhhcHMgdGhlc2UKPiBkZXZlbG9wZXJzIGNhbiBhc3Npc3QgaW4gdGhpcyByZWdhcmQuIE9m dGVuIHRoYXQgdGFrZXMgdGltZSBkdWUgdG8gbGVnYWwKPiByZXF1aXJlbWVudCBvZiBtb3Zpbmcg ZnJvbSBhbiBpbnRlcmFjdGl2ZSBFVUxBIHRvIGEgbGljZW5jZSBmaWxlLgo+IAo+IEluIGxhdGVy IHZlcnNpb24sIGl0IHdvdWxkIGJlIG5pY2UgdG8gZXhwbGFpbiBpbiB0aGUgY292ZXIgbGF0ZXIg dGhlIHN0YXR1cyBvZgo+IGZpcm13YXJlIGRpc3RyaWJ1dGlvbiwgYW5kIGhvdyB0byBvYnRhaW4g dGhlIGNvcnJlY3QgdmVyc2lvbiBvZiAoc3BlY2lhbGx5IGlmCj4gbm90IHlldCBpbiBsaW51eC1m aXJtd2FyZSkuCj4gCj4gVGhhbmtzIGZvciBzZW5kaW5nIG1lIHRoZSBmaXJtd2FyZXMsIEkgd2ls bCBzZWUgaWYgSSBjYW4gZG8gbW9yZSB0ZXN0cy4KPiAKPj4KPj4+Pgo+Pj4+IEl0IGZlYXR1cmVz IGRlY29kaW5nIGZvciB0aGUgZm9sbG93aW5nIGZvcm1hdHM6Cj4+Pj4gLSBILjI2NAo+Pj4+IC0g SEVWQwo+Pj4+IC0gTVBFRzQKPj4+PiAtIE1QRUcyCj4+Pj4gLSBWQzEKPj4+PiAtIFZQOAo+Pj4+ Cj4+Pj4gSXQgZmVhdHVyZXMgZW5jb2RpbmcgZm9yIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKPj4+ PiAtIEguMjY0Cj4+Pj4KPj4+PiBUaGUgZHJpdmVyIGNyZWF0ZXMgYSBzZXBhcmF0ZSBkZXZpY2Ug bm9kZSBmb3IgdGhlIGVuY29kZXIgYW5kIGRlY29kZXIuCj4+Pj4KPj4+PiBDaGFuZ2Vsb2c6Cj4+ Pj4KPj4+PiB2OQo+Pj4+IC0gZHJvcCBWNEwyX0JVRl9GTEFHX0NPREVDQ09ORklHCj4+Pj4gLSBk cm9wIFY0TDJfRVZFTlRfQ09ERUNfRVJST1IKPj4+PiAtIGRyb3AgVjRMMl9FVkVOVF9TS0lQCj4+ Pj4gLSB1c2UgdGhlIHY0bDJfYnVmZmVyLnNlcXVlbmNlIGNvdW50ZXIKPj4+PiAtIGZpeCBzb21l IGJ1aWxkIHdhcm5pbmdzIHdpdGggVz0xIHJlcG9ydGVkIGJ5IGtlcm5lbCB0ZXN0IHJvYm90Cj4+ Pj4KPj4+PiB2OAo+Pj4+IC0gbW92ZSBkcml2ZXIgZnJvbSBkcml2ZXIvbWVkaWEvcGxhdGZvcm0v aW14L3ZwdS04cSB0bwo+Pj4+IMKgwqBkcml2ZXIvbWVkaWEvcGxhdGZvcm0vYW1waGlvbgo+Pj4+ IC0gcmVuYW1lIGRyaXZlciBuYW1lIHRvIGFtcGhpb24KPj4+PiAtIHJlbW92ZSBpbXhfdnB1LmgK Pj4+PiAtIG1vdmUgdGhlIGRlZmluaXRpb24gb2YgVjRMMl9FVkVOVF9DT0RFQ19FUlJPUiB0byB2 aWRlb2RldjIuaAo+Pj4+IC0gbW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBWNEwyX0VWRU5UX1NLSVAg dG8gdmlkZW9kZXYyLmgKPj4+Pgo+Pj4+IHY3Cj4+Pj4gLSBmaXggYnVpbGQgd2FybmluZ3Mgd2l0 aCBXPTEgcmVwb3J0ZWQgYnkga2VybmVsIHRlc3Qgcm9ib3QKPj4+Pgo+Pj4+IHY2Ogo+Pj4+IC0g cmVuYW1lIFY0TDJfUElYX0ZNVF9OVDggdG8gVjRMMl9QSVhfRk1UX05WMTJfOEwxMjgKPj4+PiAt IHJlbmFtZSBWNEwyX1BJWF9GTVRfTlQxMCB0byBWNEwyX1BJWF9GTVRfTlYxMl8xMEJFXzhMMTI4 Cj4+Pj4KPj4+PiB2NToKPj4+PiAtIG1vdmUgc29tZSBkZWZpbml0aW9uIGZyb20gaW14X3ZwaC5o IHRvIHZpZGVvZGV2Mi5oCj4+Pj4gLSByZW1vdmUgc29tZSB1bm5lY2Vzc2FyeSBjb250ZW50Cj4+ Pj4gLSBhZGQgc29tZSBkb2N1bWVudGF0aW9uIGRlc2NyaXB0aW9ucwo+Pj4+IC0gcGFzcyB0aGUg bGF0ZXNldCB2NGwyLWNvbXBsaWFuY2UgdGVzdAo+Pj4+Cj4+Pj4gdjQ6Cj4+Pj4gLSByZWRlZmlu ZSB0aGUgbWVtb3J5LXJlZ2lvbiBpbiBkZXZpY2V0cmVlIGJpbmRpbmdzIGRvY3VtZW50YXRpb24K Pj4+PiAtIHVzZSB2NGwyJ3MgbWVjaGFuaXNtIHRvIGltcGxlbWVudCBzeW5jaHJvbml6ZSBxdWV1 aW5nIGlvY3RsCj4+Pj4gLSByZW1vdmUgdGhlIHVubmVjZXNzYXJ5IG11dGV4IGlvY3RsX3N5bmMK Pj4+PiAtIGRvbid0IG5vdGlmeSBzb3VyY2UgY2hhbmdlIGV2ZW50IGlmIHRoZSBwYXJhbWV0ZXJz IGFyZSBzYW1lIGFzCj4+Pj4gcHJldmlvdXNseSBlc3RhYmxpc2hlZAo+Pj4+IC0gYWRkIGZsYWcg VjRMMl9GTVRfRkxBR19EWU5fUkVTT0xVVElPTiB0byBkZWNvZGVyJ3MgY2FwdHVyZSBmb3JtYXQK Pj4+Pgo+Pj4+IHYzOgo+Pj4+IC0gZG9uJ3QgbWFrZSB2cHUgZGV2aWNlIG5vZGUgYSBzaW1wbGUt YnVzCj4+Pj4gLSB0cmlnZ2VyIHByb2JpbmcgdnB1IGNvcmUgaW4gdGhlIGRyaXZlcgo+Pj4+IC0g cmVtb3ZlIHVubmVjZXNzYXJ5IHZwdSBjb3JlIGluZGV4IHByb3BlcnR5Cj4+Pj4KPj4+PiB2MjoK Pj4+PiAtIGZpeCBkdCBiaW5kaW5ncyBidWlsZCBlcnJvcgo+Pj4+IC0gc3BsaXQgZHJpdmVyIHBh dGNoIGludG8gc2V2ZXJhbCBwYXJ0cyB0byBhdm9pZCBleGNlZWRpbmcgYnl0ZXMgbGltaXQKPj4+ Pgo+Pj4+IENvbXBsaWFuY2UKPj4+PiA9PT09PT09PT09Cj4+Pj4gIyB2NGwyLWNvbXBsaWFuY2Ug LWQgL2Rldi92aWRlbzAKPj4+PiB2NGwyLWNvbXBsaWFuY2UgMS4yMS4wLTQ4MzgsIDY0IGJpdHMs IDY0LWJpdCB0aW1lX3QgdjRsMi1jb21wbGlhbmNlCj4+Pj4gU0hBOiAyMjQ2Njc5OGY5YTkgMjAy MS0wOC0yNSAxMTowNToyMQo+Pj4+Cj4+Pj4gQ29tcGxpYW5jZSB0ZXN0IGZvciBhbXBoaW9uLXZw dSBkZXZpY2UgL2Rldi92aWRlbzA6Cj4+Pj4KPj4+PiBEcml2ZXIgSW5mbzoKPj4+PiDCoMKgwqDC oMKgwqBEcml2ZXIgbmFtZSAgICAgIDogYW1waGlvbi12cHUKPj4+PiDCoMKgwqDCoMKgwqBDYXJk IHR5cGUgICAgICAgIDogYW1waGlvbiB2cHUgZGVjb2Rlcgo+Pj4+IMKgwqDCoMKgwqDCoEJ1cyBp bmZvICAgICAgICAgOiBwbGF0Zm9ybTogYW1waGlvbi12cHUKPj4+PiDCoMKgwqDCoMKgwqBEcml2 ZXIgdmVyc2lvbiAgIDogNS4xNC4wCj4+Pj4gwqDCoMKgwqDCoMKgQ2FwYWJpbGl0aWVzICAgICA6 IDB4ODQyMDQwMDAKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgVmlkZW8gTWVtb3J5 LXRvLU1lbW9yeSBNdWx0aXBsYW5hcgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBT dHJlYW1pbmcKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRXh0ZW5kZWQgUGl4IEZv cm1hdAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEZXZpY2UgQ2FwYWJpbGl0aWVz Cj4+Pj4gwqDCoMKgwqDCoMKgRGV2aWNlIENhcHMgICAgICA6IDB4MDQyMDQwMDAKPj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgVmlkZW8gTWVtb3J5LXRvLU1lbW9yeSBNdWx0aXBsYW5h cgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBTdHJlYW1pbmcKPj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgRXh0ZW5kZWQgUGl4IEZvcm1hdAo+Pj4+IMKgwqDCoMKgwqDC oERldGVjdGVkIFN0YXRlZnVsIERlY29kZXIKPj4+Pgo+Pj4+IFJlcXVpcmVkIGlvY3RsczoKPj4+ PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19RVUVSWUNBUDogT0sKPj4+PiDCoMKgwqDCoMKgwqB0 ZXN0IGludmFsaWQgaW9jdGxzOiBPSwo+Pj4+Cj4+Pj4gQWxsb3cgZm9yIG11bHRpcGxlIG9wZW5z Ogo+Pj4+IMKgwqDCoMKgwqDCoHRlc3Qgc2Vjb25kIC9kZXYvdmlkZW8wIG9wZW46IE9LCj4+Pj4g wqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfUVVFUllDQVA6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVz dCBWSURJT0NfRy9TX1BSSU9SSVRZOiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgZm9yIHVubGlt aXRlZCBvcGVuczogT0sKPj4+Pgo+Pj4+IERlYnVnIGlvY3RsczoKPj4+PiDCoMKgwqDCoMKgwqB0 ZXN0IFZJRElPQ19EQkdfRy9TX1JFR0lTVEVSOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDCoMKg wqDCoMKgwqB0ZXN0IFZJRElPQ19MT0dfU1RBVFVTOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+Pgo+ Pj4+IElucHV0IGlvY3RsczoKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfVFVORVIv RU5VTV9GUkVRX0JBTkRTOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0 IFZJRElPQ19HL1NfRlJFUVVFTkNZOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDCoMKgwqDCoMKg wqB0ZXN0IFZJRElPQ19TX0hXX0ZSRVFfU0VFSzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDC oMKgwqDCoMKgdGVzdCBWSURJT0NfRU5VTUFVRElPOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDC oMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1MvRU5VTUlOUFVUOiBPSyAoTm90IFN1cHBvcnRlZCkK Pj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfQVVESU86IE9LIChOb3QgU3VwcG9ydGVk KQo+Pj4+IMKgwqDCoMKgwqDCoElucHV0czogMCBBdWRpbyBJbnB1dHM6IDAgVHVuZXJzOiAwCj4+ Pj4KPj4+PiBPdXRwdXQgaW9jdGxzOgo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19N T0RVTEFUT1I6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9D X0cvU19GUkVRVUVOQ1k6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3Qg VklESU9DX0VOVU1BVURPVVQ6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRl c3QgVklESU9DX0cvUy9FTlVNT1VUUFVUOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDCoMKgwqDC oMKgwqB0ZXN0IFZJRElPQ19HL1NfQVVET1VUOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDCoMKg wqDCoMKgwqBPdXRwdXRzOiAwIEF1ZGlvIE91dHB1dHM6IDAgTW9kdWxhdG9yczogMAo+Pj4+Cj4+ Pj4gSW5wdXQvT3V0cHV0IGNvbmZpZ3VyYXRpb24gaW9jdGxzOgo+Pj4+IMKgwqDCoMKgwqDCoHRl c3QgVklESU9DX0VOVU0vRy9TL1FVRVJZX1NURDogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDC oMKgwqDCoMKgdGVzdCBWSURJT0NfRU5VTS9HL1MvUVVFUllfRFZfVElNSU5HUzogT0sgKE5vdCBT dXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRFZfVElNSU5HU19DQVA6IE9L IChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19FRElEOiBP SyAoTm90IFN1cHBvcnRlZCkKPj4+Pgo+Pj4+IENvbnRyb2wgaW9jdGxzOgo+Pj4+IMKgwqDCoMKg wqDCoHRlc3QgVklESU9DX1FVRVJZX0VYVF9DVFJML1FVRVJZTUVOVTogT0sKPj4+PiDCoMKgwqDC oMKgwqB0ZXN0IFZJRElPQ19RVUVSWUNUUkw6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJ T0NfRy9TX0NUUkw6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TL1RSWV9FWFRf Q1RSTFM6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfKFVOKVNVQlNDUklCRV9FVkVO VC9EUUVWRU5UOiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19KUEVHQ09NUDog T0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgU3RhbmRhcmQgQ29udHJvbHM6IDMg UHJpdmF0ZSBDb250cm9sczogMAo+Pj4+Cj4+Pj4gRm9ybWF0IGlvY3RsczoKPj4+PiDCoMKgwqDC oMKgwqB0ZXN0IFZJRElPQ19FTlVNX0ZNVC9GUkFNRVNJWkVTL0ZSQU1FSU5URVJWQUxTOiBPSwo+ Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19QQVJNOiBPSyAoTm90IFN1cHBvcnRlZCkK Pj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HX0ZCVUY6IE9LIChOb3QgU3VwcG9ydGVkKQo+ Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0dfRk1UOiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRl c3QgVklESU9DX1RSWV9GTVQ6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfU19GTVQ6 IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfR19TTElDRURfVkJJX0NBUDogT0sgKE5v dCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBDcm9wcGluZzogT0sgKE5vdCBTdXBw b3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBDb21wb3Npbmc6IE9LCj4+Pj4gwqDCoMKgwqDC oMKgdGVzdCBTY2FsaW5nOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+Pgo+Pj4+IENvZGVjIGlvY3Rs czoKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ18oVFJZXylFTkNPREVSX0NNRDogT0sgKE5v dCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfR19FTkNfSU5ERVg6IE9L IChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DXyhUUllfKURFQ09E RVJfQ01EOiBPSwo+Pj4+Cj4+Pj4gQnVmZmVyIGlvY3RsczoKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0 IFZJRElPQ19SRVFCVUZTL0NSRUFURV9CVUZTL1FVRVJZQlVGOiBPSwo+Pj4+IMKgwqDCoMKgwqDC oHRlc3QgVklESU9DX0VYUEJVRjogT0sKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFJlcXVlc3RzOiBP SyAoTm90IFN1cHBvcnRlZCkKPj4+Pgo+Pj4+IFRvdGFsIGZvciBhbXBoaW9uLXZwdSBkZXZpY2Ug L2Rldi92aWRlbzA6IDQ1LCBTdWNjZWVkZWQ6IDQ1LCBGYWlsZWQ6Cj4+Pj4gMCwgV2FybmluZ3M6 IDAKPj4+Pgo+Pj4+ICMgdjRsMi1jb21wbGlhbmNlIC1kIC9kZXYvdmlkZW8xCj4+Pj4gdjRsMi1j b21wbGlhbmNlIDEuMjEuMC00ODM4LCA2NCBiaXRzLCA2NC1iaXQgdGltZV90IHY0bDItY29tcGxp YW5jZQo+Pj4+IFNIQTogMjI0NjY3OThmOWE5IDIwMjEtMDgtMjUgMTE6MDU6MjEKPj4+Pgo+Pj4+ IENvbXBsaWFuY2UgdGVzdCBmb3IgYW1waGlvbi12cHUgZGV2aWNlIC9kZXYvdmlkZW8xOgo+Pj4+ Cj4+Pj4gRHJpdmVyIEluZm86Cj4+Pj4gwqDCoMKgwqDCoMKgRHJpdmVyIG5hbWUgICAgICA6IGFt cGhpb24tdnB1Cj4+Pj4gwqDCoMKgwqDCoMKgQ2FyZCB0eXBlICAgICAgICA6IGFtcGhpb24gdnB1 IGVuY29kZXIKPj4+PiDCoMKgwqDCoMKgwqBCdXMgaW5mbyAgICAgICAgIDogcGxhdGZvcm06IGFt cGhpb24tdnB1Cj4+Pj4gwqDCoMKgwqDCoMKgRHJpdmVyIHZlcnNpb24gICA6IDUuMTQuMAo+Pj4+ IMKgwqDCoMKgwqDCoENhcGFiaWxpdGllcyAgICAgOiAweDg0MjA0MDAwCj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFZpZGVvIE1lbW9yeS10by1NZW1vcnkgTXVsdGlwbGFuYXIKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgU3RyZWFtaW5nCj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEV4dGVuZGVkIFBpeCBGb3JtYXQKPj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgRGV2aWNlIENhcGFiaWxpdGllcwo+Pj4+IMKgwqDCoMKgwqDCoERldmljZSBD YXBzICAgICAgOiAweDA0MjA0MDAwCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFZp ZGVvIE1lbW9yeS10by1NZW1vcnkgTXVsdGlwbGFuYXIKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgU3RyZWFtaW5nCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEV4dGVu ZGVkIFBpeCBGb3JtYXQKPj4+PiDCoMKgwqDCoMKgwqBEZXRlY3RlZCBTdGF0ZWZ1bCBFbmNvZGVy Cj4+Pj4KPj4+PiBSZXF1aXJlZCBpb2N0bHM6Cj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0Nf UVVFUllDQVA6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBpbnZhbGlkIGlvY3RsczogT0sKPj4+ Pgo+Pj4+IEFsbG93IGZvciBtdWx0aXBsZSBvcGVuczoKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IHNl Y29uZCAvZGV2L3ZpZGVvMSBvcGVuOiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX1FV RVJZQ0FQOiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19QUklPUklUWTogT0sK Pj4+PiDCoMKgwqDCoMKgwqB0ZXN0IGZvciB1bmxpbWl0ZWQgb3BlbnM6IE9LCj4+Pj4KPj4+PiBE ZWJ1ZyBpb2N0bHM6Cj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfREJHX0cvU19SRUdJU1RF UjogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfTE9HX1NU QVRVUzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4KPj4+PiBJbnB1dCBpb2N0bHM6Cj4+Pj4gwqDC oMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX1RVTkVSL0VOVU1fRlJFUV9CQU5EUzogT0sgKE5vdCBT dXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX0ZSRVFVRU5DWTogT0sg KE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfU19IV19GUkVRX1NF RUs6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0VOVU1B VURJTzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9T L0VOVU1JTlBVVDogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJ T0NfRy9TX0FVRElPOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDCoMKgwqDCoMKgwqBJbnB1dHM6 IDAgQXVkaW8gSW5wdXRzOiAwIFR1bmVyczogMAo+Pj4+Cj4+Pj4gT3V0cHV0IGlvY3RsczoKPj4+ PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfTU9EVUxBVE9SOiBPSyAoTm90IFN1cHBvcnRl ZCkKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfRlJFUVVFTkNZOiBPSyAoTm90IFN1 cHBvcnRlZCkKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19FTlVNQVVET1VUOiBPSyAoTm90 IFN1cHBvcnRlZCkKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HL1MvRU5VTU9VVFBVVDog T0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfRy9TX0FVRE9V VDogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4gwqDCoMKgwqDCoMKgT3V0cHV0czogMCBBdWRpbyBP dXRwdXRzOiAwIE1vZHVsYXRvcnM6IDAKPj4+Pgo+Pj4+IElucHV0L091dHB1dCBjb25maWd1cmF0 aW9uIGlvY3RsczoKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19FTlVNL0cvUy9RVUVSWV9T VEQ6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0VOVU0v Ry9TL1FVRVJZX0RWX1RJTUlOR1M6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDC oHRlc3QgVklESU9DX0RWX1RJTUlOR1NfQ0FQOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+PiDCoMKg wqDCoMKgwqB0ZXN0IFZJRElPQ19HL1NfRURJRDogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4KPj4+ PiBDb250cm9sIGlvY3RsczoKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19RVUVSWV9FWFRf Q1RSTC9RVUVSWU1FTlU6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfUVVFUllDVFJM OiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0cvU19DVFJMOiBPSwo+Pj4+IMKgwqDC oMKgwqDCoHRlc3QgVklESU9DX0cvUy9UUllfRVhUX0NUUkxTOiBPSwo+Pj4+IMKgwqDCoMKgwqDC oHRlc3QgVklESU9DXyhVTilTVUJTQ1JJQkVfRVZFTlQvRFFFVkVOVDogT0sKPj4+PiDCoMKgwqDC oMKgwqB0ZXN0IFZJRElPQ19HL1NfSlBFR0NPTVA6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKg wqDCoMKgwqDCoFN0YW5kYXJkIENvbnRyb2xzOiAyMCBQcml2YXRlIENvbnRyb2xzOiAwCj4+Pj4K Pj4+PiBGb3JtYXQgaW9jdGxzOgo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0VOVU1fRk1U L0ZSQU1FU0laRVMvRlJBTUVJTlRFUlZBTFM6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJ T0NfRy9TX1BBUk06IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfR19GQlVGOiBPSyAo Tm90IFN1cHBvcnRlZCkKPj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19HX0ZNVDogT0sKPj4+ PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19UUllfRk1UOiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRl c3QgVklESU9DX1NfRk1UOiBPSwo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DX0dfU0xJQ0VE X1ZCSV9DQVA6IE9LIChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgQ3JvcHBp bmc6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBDb21wb3Npbmc6IE9LIChOb3QgU3VwcG9ydGVk KQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgU2NhbGluZzogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4K Pj4+PiBDb2RlYyBpb2N0bHM6Cj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfKFRSWV8pRU5D T0RFUl9DTUQ6IE9LCj4+Pj4gwqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfR19FTkNfSU5ERVg6IE9L IChOb3QgU3VwcG9ydGVkKQo+Pj4+IMKgwqDCoMKgwqDCoHRlc3QgVklESU9DXyhUUllfKURFQ09E RVJfQ01EOiBPSyAoTm90IFN1cHBvcnRlZCkKPj4+Pgo+Pj4+IEJ1ZmZlciBpb2N0bHM6Cj4+Pj4g wqDCoMKgwqDCoMKgdGVzdCBWSURJT0NfUkVRQlVGUy9DUkVBVEVfQlVGUy9RVUVSWUJVRjogT0sK Pj4+PiDCoMKgwqDCoMKgwqB0ZXN0IFZJRElPQ19FWFBCVUY6IE9LCj4+Pj4gwqDCoMKgwqDCoMKg dGVzdCBSZXF1ZXN0czogT0sgKE5vdCBTdXBwb3J0ZWQpCj4+Pj4KPj4+PiBUb3RhbCBmb3IgYW1w aGlvbi12cHUgZGV2aWNlIC9kZXYvdmlkZW8xOiA0NSwgU3VjY2VlZGVkOiA0NSwgRmFpbGVkOgo+ Pj4+IDAsIFdhcm5pbmdzOiAwCj4+Pj4KPj4+PiBNaW5nIFFpYW4gKDEzKToKPj4+PiDCoMKgZHQt YmluZGluZ3M6IG1lZGlhOiBhbXBoaW9uOiBhZGQgYW1waGlvbiB2aWRlbyBjb2RlYyBiaW5kaW5n cwo+Pj4+IMKgwqBtZWRpYTpBZGQgbnQ4IGFuZCBudDEwIHZpZGVvIGZvcm1hdC4KPj4+PiDCoMKg bWVkaWE6IGFtcGhpb246IGFkZCBhbXBoaW9uIHZwdSBkZXZpY2UgZHJpdmVyCj4+Pj4gwqDCoG1l ZGlhOiBhbXBoaW9uOiBhZGQgdnB1IGNvcmUgZHJpdmVyCj4+Pj4gwqDCoG1lZGlhOiBhbXBoaW9u OiBpbXBsZW1lbnQgdnB1IGNvcmUgY29tbXVuaWNhdGlvbiBiYXNlZCBvbiBtYWlsYm94Cj4+Pj4g wqDCoG1lZGlhOiBhbXBoaW9uOiBhZGQgdnB1IHY0bDIgbTJtIHN1cHBvcnQKPj4+PiDCoMKgbWVk aWE6IGFtcGhpb246IGFkZCB2NGwyIG0ybSB2cHUgZW5jb2RlciBzdGF0ZWZ1bCBkcml2ZXIKPj4+ PiDCoMKgbWVkaWE6IGFtcGhpb246IGFkZCB2NGwyIG0ybSB2cHUgZGVjb2RlciBzdGF0ZWZ1bCBk cml2ZXIKPj4+PiDCoMKgbWVkaWE6IGFtcGhpb246IGltcGxlbWVudCB3aW5kc29yIGVuY29kZXIg cnBjIGludGVyZmFjZQo+Pj4+IMKgwqBtZWRpYTogYW1waGlvbjogaW1wbGVtZW50IG1hbG9uZSBk ZWNvZGVyIHJwYyBpbnRlcmZhY2UKPj4+PiDCoMKgQVJNNjQ6IGR0czogZnJlZXNjYWxlOiBpbXg4 cTogYWRkIGlteCB2cHUgY29kZWMgZW50cmllcwo+Pj4+IMKgwqBmaXJtd2FyZTogaW14OiBzY3Ut cGQ6IGlteDhxOiBhZGQgdnB1IG11IHJlc291cmNlcwo+Pj4+IMKgwqBNQUlOVEFJTkVSUzogYWRk IEFNUEhJT04gVlBVIENPREVDIFY0TDIgZHJpdmVyIGVudHJ5Cj4+Pj4KPj4+PiDCoC4uLi9iaW5k aW5ncy9tZWRpYS9hbXBoaW9uLHZwdS55YW1sICAgICAgICAgICB8ICAxNzggKysKPj4+PiDCoC4u Li9tZWRpYS92NGwvcGl4Zm10LXl1di1wbGFuYXIucnN0ICAgICAgICAgICB8ICAgMTUgKwo+Pj4+ IMKgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSAr Cj4+Pj4gwqAuLi4vYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDgtc3MtdnB1LmR0c2kgfCAg IDcyICsKPj4+PiDCoGFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhxeHAtbWVrLmR0 cyB8ICAgMTcgKwo+Pj4+IMKgYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OHF4cC5k dHNpICAgIHwgICAyNCArCj4+Pj4gwqBkcml2ZXJzL2Zpcm13YXJlL2lteC9zY3UtcGQuYyAgICAg ICAgICAgICAgICAgfCAgICA0ICsKPj4+PiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vS2NvbmZp ZyAgICAgICAgICAgICAgICB8ICAgMTkgKwo+Pj4+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9N YWtlZmlsZSAgICAgICAgICAgICAgIHwgICAgMiArCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL2FtcGhpb24vTWFrZWZpbGUgICAgICAgfCAgIDIzICsKPj4+PiDCoGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1waGlvbi92ZGVjLmMgICAgICAgICB8IDE2NTIKPj4+ICsrKysrKysrKysrKysr KysKPj4+PiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92ZW5jLmMgICAgICAgICB8 IDEzODIKPj4+ICsrKysrKysrKysrKysrCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2Ft cGhpb24vdnB1LmggICAgICAgICAgfCAgMzMzICsrKysKPj4+PiDCoGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYW1waGlvbi92cHVfY21kcy5jICAgICB8ICA0MzUgKysrKysKPj4+PiDCoGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY21kcy5oICAgICB8ICAgMjUgKwo+Pj4+IMKgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb2RlYy5oICAgIHwgICA2OCArCj4+Pj4g wqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvbG9yLmMgICAgfCAgMTkyICsr Cj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUuYyAgICAgfCAg OTAxICsrKysrKysrKwo+Pj4+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9j b3JlLmggICAgIHwgICAxNiArCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24v dnB1X2RiZy5jICAgICAgfCAgNDk2ICsrKysrCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2FtcGhpb24vdnB1X2RlZnMuaCAgICAgfCAgMTg2ICsrCj4+Pj4gwqAuLi4vbWVkaWEvcGxhdGZv cm0vYW1waGlvbi92cHVfZGV2X2lteDhxLmMgICAgfCAgIDcyICsKPj4+PiDCoGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZHJ2LmMgICAgICB8ICAyMTUgKysrCj4+Pj4gwqBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2hlbHBlcnMuYyAgfCAgNDUzICsrKysrCj4+ Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2hlbHBlcnMuaCAgfCAgIDcy ICsKPj4+PiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfaW14OHEuYyAgICB8 ICAyMTggKysrCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2lteDhx LmggICAgfCAgMTE2ICsrCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1 X2xvZy5oICAgICAgfCAgIDQ0ICsKPj4+PiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlv bi92cHVfbWFsb25lLmMgICB8IDE2ODMKPj4+ICsrKysrKysrKysrKysrKysrCj4+Pj4gwqBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X21hbG9uZS5oICAgfCAgIDQyICsKPj4+PiDC oGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfbWJveC5jICAgICB8ICAxMjYgKysK Pj4+PiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfbWJveC5oICAgICB8ICAg MTYgKwo+Pj4+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9tc2dzLmMgICAg IHwgIDQxMyArKysrCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X21z Z3MuaCAgICAgfCAgIDE0ICsKPj4+PiDCoGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92 cHVfcnBjLmMgICAgICB8ICAyNjMgKysrCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2Ft cGhpb24vdnB1X3JwYy5oICAgICAgfCAgNDYzICsrKysrCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2FtcGhpb24vdnB1X3Y0bDIuYyAgICAgfCAgNjI1ICsrKysrKwo+Pj4+IMKgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV92NGwyLmggICAgIHwgICA1MyArCj4+Pj4gwqBk cml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X3dpbmRzb3IuYyAgfCAxMjQ0ICsrKysr KysrKysrKwo+Pj4+IMKgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV93aW5kc29y LmggIHwgICAzOSArCj4+Pj4gwqBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWlvY3RsLmMg ICAgICAgICAgfCAgICAyICsKPj4+PiDCoGluY2x1ZGUvdWFwaS9saW51eC92aWRlb2RldjIuaCAg ICAgICAgICAgICAgICB8ICAgIDQgKwo+Pj4+IMKgNDIgZmlsZXMgY2hhbmdlZCwgMTIyMjYgaW5z ZXJ0aW9ucygrKSAgY3JlYXRlIG1vZGUgMTAwNjQ0Cj4+Pj4gRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL21lZGlhL2FtcGhpb24sdnB1LnlhbWwKPj4+PiDCoGNyZWF0ZSBtb2RlIDEw MDY0NCBhcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4LXNzLXZwdS5kdHNpCj4+Pj4g wqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL01ha2Vm aWxlCj4+Pj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBo aW9uL3ZkZWMuYwo+Pj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1waGlvbi92ZW5jLmMKPj4+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL2FtcGhpb24vdnB1LmgKPj4+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NtZHMuYwo+Pj4+IMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY21kcy5oCj4+Pj4gwqBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb2RlYy5o Cj4+Pj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9u L3ZwdV9jb2xvci5jCj4+Pj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmMKPj4+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUuaAo+Pj4+IMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMKPj4+PiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2RlZnMuaAo+ Pj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92 cHVfZGV2X2lteDhxLmMKPj4+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2FtcGhpb24vdnB1X2Rydi5jCj4+Pj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9oZWxwZXJzLmMKPj4+PiDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2hlbHBlcnMuaAo+Pj4+ IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVf aW14OHEuYwo+Pj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YW1waGlvbi92cHVfaW14OHEuaAo+Pj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vYW1waGlvbi92cHVfbG9nLmgKPj4+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X21hbG9uZS5jCj4+Pj4gwqBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9tYWxvbmUuaAo+ Pj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92 cHVfbWJveC5jCj4+Pj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hbXBoaW9uL3ZwdV9tYm94LmgKPj4+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X21zZ3MuYwo+Pj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfbXNncy5oCj4+Pj4gwqBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9ycGMuYwo+Pj4+ IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVf cnBjLmgKPj4+PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2Ft cGhpb24vdnB1X3Y0bDIuYwo+Pj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1waGlvbi92cHVfdjRsMi5oCj4+Pj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV93aW5kc29yLmMKPj4+PiDCoGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X3dpbmRzb3IuaAo+ Pj4+Cj4+Pj4KPj4+PiBiYXNlLWNvbW1pdDogOWMzYTBmMjg1MjQ4ODk5ZGZhODE1ODViYzVkNWJj OWViZGI4ZmVhZAo+Pj4KPj4KPiAKPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==