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 EEB98C433EF for ; Thu, 4 Nov 2021 10:26:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C81716120E for ; Thu, 4 Nov 2021 10:26:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230401AbhKDK3c (ORCPT ); Thu, 4 Nov 2021 06:29:32 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:54492 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229809AbhKDK3b (ORCPT ); Thu, 4 Nov 2021 06:29:31 -0400 Received: from [IPv6:2a0d:6fc0:11c8:f600:2430:3a4b:db98:84e5] (unknown [IPv6:2a0d:6fc0:11c8:f600:2430:3a4b:db98:84e5]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dafna) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id C12861F45FA5; Thu, 4 Nov 2021 10:26:51 +0000 (GMT) Subject: =?UTF-8?B?UmU6IOetlOWkjTog562U5aSNOiBbUEFUQ0ggNC81XSBtZWRpYTogbXRr?= =?UTF-8?Q?-vcodec=3a_Add_two_error_cases_upon_vpu_irq_handling?= To: Irui Wang Cc: Linux Media Mailing List , "moderated list:ARM/Mediatek SoC support" , Collabora Kernel ML References: <20210804142729.7231-1-dafna.hirschfeld@collabora.com> <20210804142729.7231-5-dafna.hirschfeld@collabora.com> <81524c608e9ef640e71d969aa83d1a383e687b0a.camel@mediatek.com> <18e477a2-60c7-3e18-730d-ab0cb5e5821a@collabora.com> <0c9a80957eaf5e5b99436fb3b478838538340da8.camel@mediatek.com> <2d251d3f-fe9b-9d09-dfd3-e229d335cf88@collabora.com> <45407cdc-a0f6-336f-aa5c-3c85981af36c@collabora.com> <9947e332400d4ecebd31e7e02b99671af881b422.camel@mediatek.com> From: Dafna Hirschfeld Message-ID: <720b3a11-be68-8b70-afd8-d6863fe95ade@collabora.com> Date: Thu, 4 Nov 2021 12:26:48 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: <9947e332400d4ecebd31e7e02b99671af881b422.camel@mediatek.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org On 04.11.21 11:51, Irui Wang wrote: > On Thu, 2021-11-04 at 11:23 +0200, Dafna Hirschfeld wrote: >> >> On 04.11.21 11:16, Irui Wang wrote: >>> On Thu, 2021-11-04 at 08:50 +0200, Dafna Hirschfeld wrote: >>>> >>>> On 04.11.21 03:38, Irui Wang wrote: >>>>> Hi, >>>>> >>>>> On Wed, 2021-11-03 at 22:50 +0200, Dafna Hirschfeld wrote: >>>>>> >>>>>> On 09.08.21 12:12, Irui Wang (王瑞) wrote: >>>>>>> Hi Dafna, >>>>>>> >>>>>>>>> 2. Always happened issue ? timeout at the beginning >>>>>>>>> or in >>>>>>>>> processing ? >>>>>>>> >>>>>>>> The commands that I run is: >>>>>>>>> sudo --user=#1000 /usr/local/libexec/chrome-binary- >>>>>>>>> tests/video_encode_accelerator_tests --gtest_filter=- >>>>>>>>> *NV12Dmabuf* -->>codec=vp8 >>>>>>>>>> /usr/local/share/tast/data/chromiumos/tast/local/bund >>>>>>>>>> les/ >>>>>>>>>> cros/ >>>>>>>>> >>>>>>>>> video/data/tulip2-320x180.yuv --disable_validator >>>>>>>>> The command sometime succeed but when I run it >>>>>>>>> sequentially >>>>>>>>> then at some point after few attempts I start to get >>>>>>>>> those >>>>>>>>> timeout errors. >>>>>>> >>>>>>> It seems mean VP8 encoding function OK, but failed >>>>>>> sometimes, >>>>>>> did >>>>>>> you have check VENC clock info during encoding: >>>>>>> >>>>>>> cat /sys/kernel/debug/clk/clk_summary | grep venc: >>>>>>> >>>>>>> venc_sel > it's H.264 clock >>>>>>> venclt_sel > it's VP8 clock >>>>>>> >>>>>>> the enable&prepare count is not 0 during encoding process. >>>>>>> >>>>>>> Thanks >>>>>>> Best Regards >>>>>>> >>>>>>> -----邮件原件----- >>>>>>> 发件人: Dafna Hirschfeld [mailto: >>>>>>> dafna.hirschfeld@collabora.com] >>>>>>> 发送时间: 2021年8月9日 16:27 >>>>>>> 收件人: Irui Wang (王瑞) >>>>>>> 抄送: Linux Media Mailing List; moderated list:ARM/Mediatek >>>>>>> SoC >>>>>>> support; Enric Balletbo i Serra >>>>>>> 主题: Re: 答复: [PATCH 4/5] media: mtk-vcodec: Add two error >>>>>>> cases >>>>>>> upon >>>>>>> vpu irq handling >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 09.08.21 09:37, Irui Wang (王瑞) wrote: >>>>>>>> Hi Dafna, >>>>>>>> >>>>>>>>>> I am testing the vp8 encoder on chromeos and at some >>>>>>>>>> point >>>>>>>>>> the encoder interrupts stop arriving so I try to >>>>>>>>>> figure >>>>>>>>>> out >>>>>>>>>> why and report any possible error. >>>>>>>> >>>>>>>> 1. Log shows wait IRQ timeout ? >>>>>>> >>>>>>> Hi, yes, I get timeout when waiting to the encoder >>>>>>> interrupt. >>>>>>> The >>>>>>> timeout is on vp8_enc_wait_venc_done >>>>>>> >>>>>>> >>>>>>>> 2. Always happened issue ? timeout at the beginning >>>>>>>> or in >>>>>>>> processing ? >>>>>>> >>>>>>> The commands that I run is: >>>>>>> >>>>>>> sudo --user=#1000 /usr/local/libexec/chrome-binary- >>>>>>> tests/video_encode_accelerator_tests --gtest_filter=- >>>>>>> *NV12Dmabuf* --codec=vp8 >>>>>>> /usr/local/share/tast/data/chromiumos/tast/local/bundles/cr >>>>>>> os/v >>>>>>> ideo >>>>>>> /data/tulip2-320x180.yuv --disable_validator >>>>>>> >>>>>>> The command sometime succeed but when I run it sequentially >>>>>>> then at >>>>>>> some point after few attempts I start to get those timeout >>>>>>> errors. >>>>>>> >>>>>>>> 3. how about IRQ infos? >>>>>>>> cat /proc/interrupts | grep vcodec >>>>>>>> 18002000.vcodec >> it's H.264 encoder >>>>>>>> 19002000.vcodec >> it's VP8 encoder >>>>>>>> >>>>>>>> I was told you have met another H.264 encoding failed >>>>>>>> before, >>>>>>>> did you find reasons about that ? >>>>>>> >>>>>>> No, >>>>>>> But since I see that the google meetup uses the vp8 encoder >>>>>>> I >>>>>>> decided to test the vp8 first. >>>>>>> >>>>>>>>> [ 81.918747] [MTK_V4L2][ERROR] >>>>>>>>> mtk_vcodec_wait_for_done_ctx:32: [3] ctx->type=1, >>>>>>>>> cmd=1, >>>>>>>>> wait_event_interruptible_timeout time=1000ms out 0 0! >>>>>>>>> [ 81.931392] [MTK_VCODEC][ERROR][3]: >>>>>>>>> h264_encode_frame() >>>>>>>>> irq_status=0 failed >>>>>>>>> [ 81.938470] [MTK_V4L2][ERROR] mtk_venc_worker:1219: >>>>>>>>> venc_if_encode failed=-5 >>>>>> >>>>>> Hi, >>>>>> I test the driver on debian now, I stream several instances >>>>>> of >>>>>> vp8 >>>>>> and h264 in parallel. >>>>>> I see that those errors always occur after an iommu page >>>>>> fault: >>>>>> >>>>>> [gst-master] root@debian:~/gst-build# [ 5743.206014] mtk- >>>>>> iommu >>>>>> 10205000.iommu: fault type=0x5 iova=0xac2ff003 pa=0x0 larb=3 >>>>>> port=0 >>>>>> layer=1 write >>>>>> [ 5744.204964] [MTK_V4L2][ERROR] >>>>>> mtk_vcodec_wait_for_done_ctx:32: >>>>>> [2706] ctx->type=1, cmd=1, wait_event_interruptible_timeout >>>>>> time=1000ms out 0 0! >>>>>> [ 5744.217849] [MTK_VCODEC][ERROR][2706]: >>>>>> vp8_enc_encode_frame() >>>>>> irq_status=0 failed >>>>>> [ 5744.225359] [MTK_V4L2][ERROR] mtk_venc_worker:1243: >>>>>> venc_if_encode >>>>>> failed=-5 >>>>>> >>>>>> I suspect that maybe this is because the iova of the >>>>>> working_buffers >>>>>> is handed to the vpu in the function vp8_enc_alloc_work_buf: >>>>>> wb[i].iova = inst->work_bufs[i].dma_addr; >>>>>> >>>>>> Maybe the vpu keep writing to those addresses after they are >>>>>> already >>>>>> unmapped? >>>>>> >>>>>> Thanks, >>>>>> Dafna >>>>> >>>>> failed larb=3, it's for h264 encoder, vp8 encoder is larb5, is >>>>> there >>>>> any h264 encoding failed at that time? I have no ideas why >>>>> these >>>>> errors >>>>> happened on your platform, but when we got the "iommu: fault", >>>>> the >>>>> possible reason is related to power or clock. >>>> >>>> Once the iommu fault fires, both encoders constantly fail and >>>> never >>>> recover >>>> (also not when starting new instance). >>>> >>>> With the falut: >>>> mtk_iommu_isr: fault type=0x5 iova=0xebede003 pa=0x0 larb=3 >>>> port=0 >>>> layer=1 write >>>> >>>> I looked at the iommu tracing log: >>>> >>>> gst-launch-1.0-606 [000] ..... 714.634398: unmap: >>>> IOMMU: >>>> iova=0x00000000ebede000 - 0x00000000ebedf000 size=4096 >>>> unmapped_size=4096 >>>> gst-launch-1.0-606 [000] ..... 714.634417: unmap: >>>> IOMMU: >>>> iova=0x00000000ebed0000 - 0x00000000ebed5000 size=20480 >>>> unmapped_size=20480 >>>> gst-launch-1.0-606 [000] ..... 714.634435: unmap: >>>> IOMMU: >>>> iova=0x00000000eb800000 - 0x00000000ebb0a000 size=3186688 >>>> unmapped_size=3186688 >>>> gst-launch-1.0-606 [000] .N... 714.634891: unmap: >>>> IOMMU: >>>> iova=0x00000000eb700000 - 0x00000000eb7ff000 size=1044480 >>>> unmapped_size=1044480 >>>> gst-launch-1.0-606 [000] .N... 714.635481: unmap: >>>> IOMMU: >>>> iova=0x00000000eb000000 - 0x00000000eb30a000 size=3186688 >>>> unmapped_size=3186688 >>>> gst-launch-1.0-606 [000] ..... 714.635934: unmap: >>>> IOMMU: >>>> iova=0x00000000eaf00000 - 0x00000000eafff000 size=1044480 >>>> unmapped_size=1044480 >>>> gst-launch-1.0-606 [000] ..... 714.636041: unmap: >>>> IOMMU: >>>> iova=0x00000000eaef0000 - 0x00000000eaf00000 size=65536 >>>> unmapped_size=65536 >>>> gst-launch-1.0-606 [000] ..... 714.636056: unmap: >>>> IOMMU: >>>> iova=0x00000000eaee0000 - 0x00000000eaef0000 size=65536 >>>> unmapped_size=65536 >>>> gst-launch-1.0-606 [000] ..... 714.636069: unmap: >>>> IOMMU: >>>> iova=0x00000000eaedf000 - 0x00000000eaee0000 size=4096 >>>> unmapped_size=4096 >>>> kworker/0:0-537 [000] d.h.. 714.636191: >>>> io_page_fault: >>>> IOMMU:mtk-iommu 10205000.iommu iova=0x00000000ebede003 >>>> flags=0x0001 >>>> >>>> (I changed the iommu map/unmap trace events to print the iova >>>> range) >>>> you can see the first line unmapping 00000000ebede000 which is >>>> the >>>> faulting iova. >>>> So it seems that the problem is due to a device trying to access >>>> an >>>> address that is already unmapped. >>>> This might be either the encoder or the vpu. >>>> Since the wb[i].iova is not reset when freeing the working >>>> buffers I >>>> suspect it might be the vpu device, what do you think? >>>> >>>> Thanks, >>>> Dafna >>> >>> vpu device won't access the address, the fault logs: >> >> >> Looking at the line: >> wb[i].iova = wb[i].iova = inst->work_bufs[i].dma_addr; >> >> in both vp8 and h264 it seems that the codec drivers give the vpu >> access to the allocated iova address. >> If the vpu doesn't access those addresses then what is the purpose of >> this line? >> > "wb" is a shared buffer between AP-kernel and VPU firmware, to store > these encoder working buffers informations, the architecture like this: > 1. VPU firmware will set working buffers informations(size, iova(is 0 > now)); > 2. AP-kernel allocate these working buffers and get a truly > memory(iova), so VPU firmware can get these wbs' iova after allocate > done. > 3. when encoding, these iova will set to encoder hardware in VPU > firmware > 4. encoder hardware can get the data from these "iova" to do encoding. ok, thanks for the explanation, so vpu firmware only hand the iova adresses further to the encoder hw but never access them itself? > > I suppose you mean that "vpu" is "vpu firmware"? not mtk-vpu driver ? yes, > >> >>> fault type=0x5 iova=0xebede003 pa=0x0 larb=3 port=0 layer=1 write >>> >>> it's h264 encoder error when writing "RCPU" data address to encoder >>> hardware through iommu, but why unmap happended at this time? it >>> seems >>> encoding process still going on.... >> >> Why is it seems so? > > the fault means errors happended while reading prepared encode data, so > I think encoding is still going on. I added more trace_printk debug, adding log before and after the working buffers are freed: see 'BEFORE/AFTER' log gst-launch-1.0-590 [000] ..... 353.825276: h264_enc_free_work_buf: h264 BEFORE unmapping work buffers gst-launch-1.0-590 [000] ..... 353.825282: unmap: IOMMU: iova=0x00000000e5dff000 - 0x00000000e5e00000 size=4096 unmapped_size=4096 gst-launch-1.0-590 [000] ..... 353.825300: unmap: IOMMU: iova=0x00000000e5df0000 - 0x00000000e5df5000 size=20480 unmapped_size=20480 gst-launch-1.0-590 [000] ..... 353.825317: unmap: IOMMU: iova=0x00000000e5800000 - 0x00000000e5b0a000 size=3186688 unmapped_size=3186688 gst-launch-1.0-590 [000] ..... 353.825740: unmap: IOMMU: iova=0x00000000e5500000 - 0x00000000e55ff000 size=1044480 unmapped_size=1044480 gst-launch-1.0-590 [000] ..... 353.825854: unmap: IOMMU: iova=0x00000000e1000000 - 0x00000000e130a000 size=3186688 unmapped_size=3186688 gst-launch-1.0-590 [000] ..... 353.826273: unmap: IOMMU: iova=0x00000000e0f00000 - 0x00000000e0fff000 size=1044480 unmapped_size=1044480 gst-launch-1.0-590 [000] ..... 353.826477: unmap: IOMMU: iova=0x00000000e0ef0000 - 0x00000000e0f00000 size=65536 unmapped_size=65536 gst-launch-1.0-590 [000] ..... 353.826494: unmap: IOMMU: iova=0x00000000e0ee0000 - 0x00000000e0ef0000 size=65536 unmapped_size=65536 gst-launch-1.0-590 [000] ..... 353.826507: unmap: IOMMU: iova=0x00000000e0edf000 - 0x00000000e0ee0000 size=4096 unmapped_size=4096 gst-launch-1.0-590 [000] ..... 353.826515: h264_enc_free_work_buf: h264 AFTER unmapping work buffers kworker/0:3-67 [000] d.h.. 353.826631: io_page_fault: IOMMU:mtk-iommu 10205000.iommu iova=0x00000000e5dff003 flags=0x0001 It is clear that the fault happen for the first working buffer that is unmapped, and the freeing of the working buffers happens only after streaming is done in the '.deinit' cb of the encoder. So it is clear that the encoder device writes to that working buffer that was just unmapped. Maybe it is a firmware bug? Or Maybe the encoder should indeed write to those buffers and the kernel should wait a while before freeing them? >> >>> >>>> >>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> MT8173 latest VPUD firmware: >>>>>>>> >>>>> >>>>> >>> >>> > https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmwar >>>>>>>> e.git/commit/?id=aaed4a8bf9a77ec68376e8d92fb218d5fdd88b59 >>>>>>>> >>>>>>> >>>>>>> I uses the latest firmware. >>>>>>> >>>>>>> Thanks, >>>>>>> Dafna >>>>>>> >>>>>>>> Thanks >>>>>>>> Best Regards >>>>>>>> >>>>>>>> -----邮件原件----- >>>>>>>> 发件人: Dafna Hirschfeld [mailto: >>>>>>>> dafna.hirschfeld@collabora.com] >>>>>>>> 发送时间: 2021年8月6日 15:49 >>>>>>>> 收件人: Irui Wang (王瑞); linux-kernel@vger.kernel.org; >>>>>>>> linux-media@vger.kernel.org; >>>>>>>> linux-mediatek@lists.infradead.org >>>>>>>> 抄送: dafna3@gmail.com; tfiga@chromium.org; Tiffany Lin >>>>>>>> (林慧珊); >>>>>>>> eizan@chromium.org; Maoguang Meng (孟毛广); >>>>>>>> kernel@collabora.com >>>>>>>> ; >>>>>>>> mchehab@kernel.org; hverkuil@xs4all.nl; Yunfei Dong >>>>>>>> (董云飞); >>>>>>>> Yong >>>>>>>> Wu >>>>>>>> (吴勇); hsinyi@chromium.org; matthias.bgg@gmail.com; >>>>>>>> Andrew-CT >>>>>>>> Chen >>>>>>>> (陳智迪); acourbot@chromium.org >>>>>>>> 主题: Re: [PATCH 4/5] media: mtk-vcodec: Add two error >>>>>>>> cases >>>>>>>> upon >>>>>>>> vpu >>>>>>>> irq handling >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 06.08.21 08:58, Irui Wang (王瑞) wrote: >>>>>>>>> On Wed, 2021-08-04 at 16:27 +0200, Dafna Hirschfeld >>>>>>>>> wrote: >>>>>>>>>> 1. Fail if the function mtk_vcodec_fw_map_dm_addr >>>>>>>>>> returns >>>>>>>>>> ERR >>>>>>>>>> pointer. >>>>>>>>>> 2. Fail if the state from the vpu msg is either >>>>>>>>>> VEN_IPI_MSG_ENC_STATE_ERROR or >>>>>>>>>> VEN_IPI_MSG_ENC_STATE_PART >>>>>>>>>> >>>>>>>>>> Signed-off-by: Dafna Hirschfeld < >>>>>>>>>> dafna.hirschfeld@collabora.com> >>>>>>>>>> --- >>>>>>>>>> drivers/media/platform/mtk-vcodec/venc_vpu_if.c >>>>>>>>>> | 8 >>>>>>>>>> ++++++++ >>>>>>>>>> 1 file changed, 8 insertions(+) >>>>>>>>>> >>>>>>>>>> diff --git a/drivers/media/platform/mtk- >>>>>>>>>> vcodec/venc_vpu_if.c >>>>>>>>>> b/drivers/media/platform/mtk-vcodec/venc_vpu_if.c >>>>>>>>>> index 32dc844d16f9..234705ba7cd6 100644 >>>>>>>>>> --- a/drivers/media/platform/mtk-vcodec/venc_vpu_if.c >>>>>>>>>> +++ b/drivers/media/platform/mtk-vcodec/venc_vpu_if.c >>>>>>>>>> @@ -17,6 +17,8 @@ static int >>>>>>>>>> handle_enc_init_msg(struct >>>>>>>>>> venc_vpu_inst *vpu, const void *data) >>>>>>>>>> vpu->vsi = mtk_vcodec_fw_map_dm_addr(vpu->ctx- >>>>>>>>>>> dev- >>>>>>>>>>> fw_handler, >>>>>>>>>> >>>>>>>>>> msg->vpu_inst_addr); >>>>>>>>>> >>>>>>>>>> +if (IS_ERR(vpu->vsi)) >>>>>>>>>> +return PTR_ERR(vpu->vsi); >>>>>>>>>> /* Firmware version field value is unspecified >>>>>>>>>> on >>>>>>>>>> MT8173. >>>>>>>>>> */ >>>>>>>>>> if (vpu->ctx->dev->venc_pdata->chip == >>>>>>>>>> MTK_MT8173) >>>>>>>>>> return 0; >>>>>>>>>> @@ -42,6 +44,12 @@ static int >>>>>>>>>> handle_enc_encode_msg(struct >>>>>>>>>> venc_vpu_inst *vpu, const void *data) >>>>>>>>>> vpu->state = msg->state; >>>>>>>>>> vpu->bs_size = msg->bs_size; >>>>>>>>>> vpu->is_key_frm = msg->is_key_frm; >>>>>>>>>> +if (vpu->state == VEN_IPI_MSG_ENC_STATE_ERROR || >>>>>>>>>> + vpu->state == VEN_IPI_MSG_ENC_STATE_PART) { >>>>>>>>>> mtk_vcodec_err(vpu, >>>>>>>>>> +"bad ipi-enc-state: %s", >>>>>>>>>> + vpu->state == >>>>>>>>>> VEN_IPI_MSG_ENC_STATE_ERROR ? "ERR" : "PART"); >>>>>>>>>> +return -EINVAL; >>>>>>>>>> +} >>>>>>>>> >>>>>>>>> Hi Dafna, >>>>>>>>> >>>>>>>>> This state check is useless, the enc result will check >>>>>>>>> in >>>>>>>>> "vpu_enc_ipi_handler". >>>>>>>>> >>>>>>>> >>>>>>>> Hi, thanks for reviewing. I see that the >>>>>>>> vpu_enc_ipi_handler >>>>>>>> only >>>>>>>> test the msg->status and I see that the states are not >>>>>>>> tested >>>>>>>> anywhere except of "skip" state in the h264 enc. >>>>>>>> >>>>>>>> Can't there be a scenario where msg->status is ok but the >>>>>>>> state >>>>>>>> is error? >>>>>>>> I am testing the vp8 encoder on chromeos and at some >>>>>>>> point >>>>>>>> the >>>>>>>> encoder interrupts stop arriving so I try to figure out >>>>>>>> why >>>>>>>> and >>>>>>>> report any possible error. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Dafna >>>>>>>> >>>>>>>>> Thanks >>>>>>>>> >>>>>>>>>> return 0; >>>>>>>>>> } >>>>>>>>>> >>>>>>>> >>>>>>>> ************* MEDIATEK Confidentiality Notice >>>>>>>> ******************** The >>>>>>>> information contained in this e-mail message (including >>>>>>>> any >>>>>>>> attachments) may be confidential, proprietary, >>>>>>>> privileged, or >>>>>>>> otherwise exempt from disclosure under applicable laws. >>>>>>>> It is >>>>>>>> intended >>>>>>>> to be conveyed only to the designated recipient(s). Any >>>>>>>> use, >>>>>>>> dissemination, distribution, printing, retaining or >>>>>>>> copying >>>>>>>> of >>>>>>>> this >>>>>>>> e-mail (including its >>>>>>>> attachments) by unintended recipient(s) is strictly >>>>>>>> prohibited >>>>>>>> and may >>>>>>>> be unlawful. If you are not an intended recipient of this >>>>>>>> e- >>>>>>>> mail, >>>>>>>> or >>>>>>>> believe that you have received this e-mail in error, >>>>>>>> please >>>>>>>> notify the >>>>>>>> sender immediately (by replying to this e-mail), delete >>>>>>>> any >>>>>>>> and >>>>>>>> all >>>>>>>> copies of this e-mail (including any attachments) from >>>>>>>> your >>>>>>>> system, >>>>>>>> and do not disclose the content of this e-mail to any >>>>>>>> other >>>>>>>> person. Thank you! >>>>>>>> >>>>> >>>>> _______________________________________________ >>>>> Linux-mediatek mailing list >>>>> Linux-mediatek@lists.infradead.org >>>>> http://lists.infradead.org/mailman/listinfo/linux-mediatek >>>>> > _______________________________________________ > Linux-mediatek mailing list > Linux-mediatek@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-mediatek > 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 1B04CC433F5 for ; Thu, 4 Nov 2021 10:27:17 +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 B724E60ED5 for ; Thu, 4 Nov 2021 10:27:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org B724E60ED5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com 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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=7kGJUaHmry8c7v3lXVIxNTyz/FNecrCkpbDAjgOWms4=; b=NVk4DSIAnCNvjscSIAYchuLZkH e897DJgFcDvAcU75wBkkN15zGPAG01Vcsuc14pEf2baJTyc6jcsM5ELUVz+wCvmTX2GMBN9NQ2gst pUdhjs7ckclzwo3NrPULjNKe8tK1s5SWv+yhauvPGOa9uLJOWFYz/YrqaHjpzVIsJn4XTIRRQgTCn gm8GUgd2LS0l3iYnGyXrRTo5cra5RUHXuB91SDVkhdeYaIP1WpPdwJa6m+jlkrcjQ35hPl/bGD3w2 fymEInwsgMYl2rkpv6yt7FgInAEg9fCsrBBl8Hm78eA33/Bs9BkKGxE624jKq7aOAjgw5F2TX454w K2Ds90iA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1miZxT-008aW8-Oa; Thu, 04 Nov 2021 10:26:59 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1miZxQ-008aVW-Df for linux-mediatek@lists.infradead.org; Thu, 04 Nov 2021 10:26:59 +0000 Received: from [IPv6:2a0d:6fc0:11c8:f600:2430:3a4b:db98:84e5] (unknown [IPv6:2a0d:6fc0:11c8:f600:2430:3a4b:db98:84e5]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dafna) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id C12861F45FA5; Thu, 4 Nov 2021 10:26:51 +0000 (GMT) Subject: =?UTF-8?B?UmU6IOetlOWkjTog562U5aSNOiBbUEFUQ0ggNC81XSBtZWRpYTogbXRr?= =?UTF-8?Q?-vcodec=3a_Add_two_error_cases_upon_vpu_irq_handling?= To: Irui Wang Cc: Linux Media Mailing List , "moderated list:ARM/Mediatek SoC support" , Collabora Kernel ML References: <20210804142729.7231-1-dafna.hirschfeld@collabora.com> <20210804142729.7231-5-dafna.hirschfeld@collabora.com> <81524c608e9ef640e71d969aa83d1a383e687b0a.camel@mediatek.com> <18e477a2-60c7-3e18-730d-ab0cb5e5821a@collabora.com> <0c9a80957eaf5e5b99436fb3b478838538340da8.camel@mediatek.com> <2d251d3f-fe9b-9d09-dfd3-e229d335cf88@collabora.com> <45407cdc-a0f6-336f-aa5c-3c85981af36c@collabora.com> <9947e332400d4ecebd31e7e02b99671af881b422.camel@mediatek.com> From: Dafna Hirschfeld Message-ID: <720b3a11-be68-8b70-afd8-d6863fe95ade@collabora.com> Date: Thu, 4 Nov 2021 12:26:48 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: <9947e332400d4ecebd31e7e02b99671af881b422.camel@mediatek.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211104_032656_763562_FC6FFAEE X-CRM114-Status: GOOD ( 37.89 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org CgpPbiAwNC4xMS4yMSAxMTo1MSwgSXJ1aSBXYW5nIHdyb3RlOgo+IE9uIFRodSwgMjAyMS0xMS0w NCBhdCAxMToyMyArMDIwMCwgRGFmbmEgSGlyc2NoZmVsZCB3cm90ZToKPj4KPj4gT24gMDQuMTEu MjEgMTE6MTYsIElydWkgV2FuZyB3cm90ZToKPj4+IE9uIFRodSwgMjAyMS0xMS0wNCBhdCAwODo1 MCArMDIwMCwgRGFmbmEgSGlyc2NoZmVsZCB3cm90ZToKPj4+Pgo+Pj4+IE9uIDA0LjExLjIxIDAz OjM4LCBJcnVpIFdhbmcgd3JvdGU6Cj4+Pj4+IEhpLAo+Pj4+Pgo+Pj4+PiBPbiBXZWQsIDIwMjEt MTEtMDMgYXQgMjI6NTAgKzAyMDAsIERhZm5hIEhpcnNjaGZlbGQgd3JvdGU6Cj4+Pj4+Pgo+Pj4+ Pj4gT24gMDkuMDguMjEgMTI6MTIsIElydWkgV2FuZyAo546L55GeKSB3cm90ZToKPj4+Pj4+PiBI aSBEYWZuYSwKPj4+Pj4+Pgo+Pj4+Pj4+Pj4gMi4gQWx3YXlzIGhhcHBlbmVkICBpc3N1ZSA/ICB0 aW1lb3V0IGF0IHRoZSBiZWdpbm5pbmcKPj4+Pj4+Pj4+IG9yICBpbgo+Pj4+Pj4+Pj4gcHJvY2Vz c2luZyA/Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFRoZSBjb21tYW5kcyB0aGF0IEkgcnVuIGlzOgo+Pj4+ Pj4+Pj4gc3VkbyAtLXVzZXI9IzEwMDAgL3Vzci9sb2NhbC9saWJleGVjL2Nocm9tZS1iaW5hcnkt Cj4+Pj4+Pj4+PiB0ZXN0cy92aWRlb19lbmNvZGVfYWNjZWxlcmF0b3JfdGVzdHMgLS1ndGVzdF9m aWx0ZXI9LQo+Pj4+Pj4+Pj4gKk5WMTJEbWFidWYqICAtLT4+Y29kZWM9dnA4Cj4+Pj4+Pj4+Pj4g L3Vzci9sb2NhbC9zaGFyZS90YXN0L2RhdGEvY2hyb21pdW1vcy90YXN0L2xvY2FsL2J1bmQKPj4+ Pj4+Pj4+PiBsZXMvCj4+Pj4+Pj4+Pj4gY3Jvcy8KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiB2aWRlby9k YXRhL3R1bGlwMi0zMjB4MTgwLnl1diAtLWRpc2FibGVfdmFsaWRhdG9yCj4+Pj4+Pj4+PiBUaGUg Y29tbWFuZCBzb21ldGltZSBzdWNjZWVkIGJ1dCB3aGVuIEkgcnVuIGl0Cj4+Pj4+Pj4+PiBzZXF1 ZW50aWFsbHkKPj4+Pj4+Pj4+IHRoZW4gYXQgc29tZSBwb2ludCBhZnRlciBmZXcgYXR0ZW1wdHMg SSBzdGFydCB0byBnZXQKPj4+Pj4+Pj4+IHRob3NlCj4+Pj4+Pj4+PiB0aW1lb3V0IGVycm9ycy4K Pj4+Pj4+Pgo+Pj4+Pj4+IEl0IHNlZW1zIG1lYW4gVlA4IGVuY29kaW5nIGZ1bmN0aW9uIE9LLCBi dXQgZmFpbGVkCj4+Pj4+Pj4gc29tZXRpbWVzLAo+Pj4+Pj4+IGRpZAo+Pj4+Pj4+IHlvdSBoYXZl IGNoZWNrIFZFTkMgY2xvY2sgaW5mbyBkdXJpbmcgZW5jb2Rpbmc6Cj4+Pj4+Pj4KPj4+Pj4+PiBj YXQgL3N5cy9rZXJuZWwvZGVidWcvY2xrL2Nsa19zdW1tYXJ5IHwgZ3JlcCB2ZW5jOgo+Pj4+Pj4+ Cj4+Pj4+Pj4gdmVuY19zZWwgICA+IGl0J3MgSC4yNjQgY2xvY2sKPj4+Pj4+PiB2ZW5jbHRfc2Vs ICA+IGl0J3MgVlA4IGNsb2NrCj4+Pj4+Pj4KPj4+Pj4+PiB0aGUgZW5hYmxlJnByZXBhcmUgY291 bnQgaXMgbm90IDAgZHVyaW5nIGVuY29kaW5nIHByb2Nlc3MuCj4+Pj4+Pj4KPj4+Pj4+PiBUaGFu a3MKPj4+Pj4+PiBCZXN0IFJlZ2FyZHMKPj4+Pj4+Pgo+Pj4+Pj4+IC0tLS0t6YKu5Lu25Y6f5Lu2 LS0tLS0KPj4+Pj4+PiDlj5Hku7bkuro6IERhZm5hIEhpcnNjaGZlbGQgW21haWx0bzoKPj4+Pj4+ PiBkYWZuYS5oaXJzY2hmZWxkQGNvbGxhYm9yYS5jb21dCj4+Pj4+Pj4g5Y+R6YCB5pe26Ze0OiAy MDIx5bm0OOaciDnml6UgMTY6MjcKPj4+Pj4+PiDmlLbku7bkuro6IElydWkgV2FuZyAo546L55Ge KQo+Pj4+Pj4+IOaKhOmAgTogTGludXggTWVkaWEgTWFpbGluZyBMaXN0OyBtb2RlcmF0ZWQgbGlz dDpBUk0vTWVkaWF0ZWsKPj4+Pj4+PiBTb0MKPj4+Pj4+PiBzdXBwb3J0OyBFbnJpYyBCYWxsZXRi byBpIFNlcnJhCj4+Pj4+Pj4g5Li76aKYOiBSZTog562U5aSNOiBbUEFUQ0ggNC81XSBtZWRpYTog bXRrLXZjb2RlYzogQWRkIHR3byBlcnJvcgo+Pj4+Pj4+IGNhc2VzCj4+Pj4+Pj4gdXBvbgo+Pj4+ Pj4+IHZwdSBpcnEgaGFuZGxpbmcKPj4+Pj4+Pgo+Pj4+Pj4+Cj4+Pj4+Pj4KPj4+Pj4+PiBPbiAw OS4wOC4yMSAwOTozNywgSXJ1aSBXYW5nICjnjovnkZ4pIHdyb3RlOgo+Pj4+Pj4+PiBIaSBEYWZu YSwKPj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBJIGFtIHRlc3RpbmcgdGhlIHZwOCBlbmNvZGVyIG9uIGNo cm9tZW9zIGFuZCBhdCBzb21lCj4+Pj4+Pj4+Pj4gcG9pbnQKPj4+Pj4+Pj4+PiB0aGUgZW5jb2Rl ciBpbnRlcnJ1cHRzIHN0b3AgYXJyaXZpbmcgc28gSSB0cnkgdG8KPj4+Pj4+Pj4+PiBmaWd1cmUK Pj4+Pj4+Pj4+PiBvdXQKPj4+Pj4+Pj4+PiB3aHkgYW5kIHJlcG9ydCBhbnkgcG9zc2libGUgZXJy b3IuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IDEuIExvZyBzaG93cyB3YWl0IElSUSB0aW1lb3V0ID8KPj4+ Pj4+Pgo+Pj4+Pj4+IEhpLCB5ZXMsIEkgZ2V0IHRpbWVvdXQgd2hlbiB3YWl0aW5nIHRvIHRoZSBl bmNvZGVyCj4+Pj4+Pj4gaW50ZXJydXB0Lgo+Pj4+Pj4+IFRoZQo+Pj4+Pj4+IHRpbWVvdXQgaXMg b24gdnA4X2VuY193YWl0X3ZlbmNfZG9uZQo+Pj4+Pj4+Cj4+Pj4+Pj4KPj4+Pj4+Pj4gMi4gQWx3 YXlzIGhhcHBlbmVkICBpc3N1ZSA/ICB0aW1lb3V0IGF0IHRoZSBiZWdpbm5pbmcKPj4+Pj4+Pj4g b3IgIGluCj4+Pj4+Pj4+IHByb2Nlc3NpbmcgPwo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhlIGNvbW1hbmRz IHRoYXQgSSBydW4gaXM6Cj4+Pj4+Pj4KPj4+Pj4+PiBzdWRvIC0tdXNlcj0jMTAwMCAvdXNyL2xv Y2FsL2xpYmV4ZWMvY2hyb21lLWJpbmFyeS0KPj4+Pj4+PiB0ZXN0cy92aWRlb19lbmNvZGVfYWNj ZWxlcmF0b3JfdGVzdHMgLS1ndGVzdF9maWx0ZXI9LQo+Pj4+Pj4+ICpOVjEyRG1hYnVmKiAgLS1j b2RlYz12cDgKPj4+Pj4+PiAvdXNyL2xvY2FsL3NoYXJlL3Rhc3QvZGF0YS9jaHJvbWl1bW9zL3Rh c3QvbG9jYWwvYnVuZGxlcy9jcgo+Pj4+Pj4+IG9zL3YKPj4+Pj4+PiBpZGVvCj4+Pj4+Pj4gL2Rh dGEvdHVsaXAyLTMyMHgxODAueXV2IC0tZGlzYWJsZV92YWxpZGF0b3IKPj4+Pj4+Pgo+Pj4+Pj4+ IFRoZSBjb21tYW5kIHNvbWV0aW1lIHN1Y2NlZWQgYnV0IHdoZW4gSSBydW4gaXQgc2VxdWVudGlh bGx5Cj4+Pj4+Pj4gdGhlbiBhdAo+Pj4+Pj4+IHNvbWUgcG9pbnQgYWZ0ZXIgZmV3IGF0dGVtcHRz IEkgc3RhcnQgdG8gZ2V0IHRob3NlIHRpbWVvdXQKPj4+Pj4+PiBlcnJvcnMuCj4+Pj4+Pj4KPj4+ Pj4+Pj4gMy4gaG93IGFib3V0IElSUSBpbmZvcz8KPj4+Pj4+Pj4gY2F0IC9wcm9jL2ludGVycnVw dHMgfCBncmVwIHZjb2RlYwo+Pj4+Pj4+PiAxODAwMjAwMC52Y29kZWMgICA+PiBpdCdzIEguMjY0 IGVuY29kZXIKPj4+Pj4+Pj4gMTkwMDIwMDAudmNvZGVjICA+PiBpdCdzICBWUDggZW5jb2Rlcgo+ Pj4+Pj4+Pgo+Pj4+Pj4+PiBJIHdhcyB0b2xkIHlvdSBoYXZlICBtZXQgYW5vdGhlciBILjI2NCBl bmNvZGluZyBmYWlsZWQKPj4+Pj4+Pj4gYmVmb3JlLAo+Pj4+Pj4+PiBkaWQgeW91IGZpbmQgcmVh c29ucyBhYm91dCB0aGF0ID8KPj4+Pj4+Pgo+Pj4+Pj4+IE5vLAo+Pj4+Pj4+IEJ1dCBzaW5jZSBJ IHNlZSB0aGF0IHRoZSBnb29nbGUgbWVldHVwIHVzZXMgdGhlIHZwOCBlbmNvZGVyCj4+Pj4+Pj4g SQo+Pj4+Pj4+IGRlY2lkZWQgdG8gdGVzdCB0aGUgdnA4IGZpcnN0Lgo+Pj4+Pj4+Cj4+Pj4+Pj4+ PiBbICAgODEuOTE4NzQ3XSBbTVRLX1Y0TDJdW0VSUk9SXQo+Pj4+Pj4+Pj4gbXRrX3Zjb2RlY193 YWl0X2Zvcl9kb25lX2N0eDozMjogWzNdIGN0eC0+dHlwZT0xLAo+Pj4+Pj4+Pj4gY21kPTEsCj4+ Pj4+Pj4+PiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCB0aW1lPTEwMDBtcyBvdXQg MCAwIQo+Pj4+Pj4+Pj4gWyAgIDgxLjkzMTM5Ml0gW01US19WQ09ERUNdW0VSUk9SXVszXToKPj4+ Pj4+Pj4+IGgyNjRfZW5jb2RlX2ZyYW1lKCkKPj4+Pj4+Pj4+IGlycV9zdGF0dXM9MCBmYWlsZWQK Pj4+Pj4+Pj4+IFsgICA4MS45Mzg0NzBdIFtNVEtfVjRMMl1bRVJST1JdIG10a192ZW5jX3dvcmtl cjoxMjE5Ogo+Pj4+Pj4+Pj4gdmVuY19pZl9lbmNvZGUgZmFpbGVkPS01Cj4+Pj4+Pgo+Pj4+Pj4g SGksCj4+Pj4+PiBJIHRlc3QgdGhlIGRyaXZlciBvbiBkZWJpYW4gbm93LCBJIHN0cmVhbSBzZXZl cmFsIGluc3RhbmNlcwo+Pj4+Pj4gb2YKPj4+Pj4+IHZwOAo+Pj4+Pj4gYW5kIGgyNjQgaW4gcGFy YWxsZWwuCj4+Pj4+PiBJIHNlZSB0aGF0IHRob3NlIGVycm9ycyBhbHdheXMgb2NjdXIgYWZ0ZXIg YW4gaW9tbXUgcGFnZQo+Pj4+Pj4gZmF1bHQ6Cj4+Pj4+Pgo+Pj4+Pj4gW2dzdC1tYXN0ZXJdIHJv b3RAZGViaWFuOn4vZ3N0LWJ1aWxkIyBbIDU3NDMuMjA2MDE0XSBtdGstCj4+Pj4+PiBpb21tdQo+ Pj4+Pj4gMTAyMDUwMDAuaW9tbXU6IGZhdWx0IHR5cGU9MHg1IGlvdmE9MHhhYzJmZjAwMyBwYT0w eDAgbGFyYj0zCj4+Pj4+PiBwb3J0PTAKPj4+Pj4+IGxheWVyPTEgd3JpdGUKPj4+Pj4+IFsgNTc0 NC4yMDQ5NjRdIFtNVEtfVjRMMl1bRVJST1JdCj4+Pj4+PiBtdGtfdmNvZGVjX3dhaXRfZm9yX2Rv bmVfY3R4OjMyOgo+Pj4+Pj4gWzI3MDZdIGN0eC0+dHlwZT0xLCBjbWQ9MSwgd2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlX3RpbWVvdXQKPj4+Pj4+IHRpbWU9MTAwMG1zIG91dCAwIDAhCj4+Pj4+PiBb IDU3NDQuMjE3ODQ5XSBbTVRLX1ZDT0RFQ11bRVJST1JdWzI3MDZdOgo+Pj4+Pj4gdnA4X2VuY19l bmNvZGVfZnJhbWUoKQo+Pj4+Pj4gaXJxX3N0YXR1cz0wIGZhaWxlZAo+Pj4+Pj4gWyA1NzQ0LjIy NTM1OV0gW01US19WNEwyXVtFUlJPUl0gbXRrX3ZlbmNfd29ya2VyOjEyNDM6Cj4+Pj4+PiB2ZW5j X2lmX2VuY29kZQo+Pj4+Pj4gZmFpbGVkPS01Cj4+Pj4+Pgo+Pj4+Pj4gSSBzdXNwZWN0IHRoYXQg bWF5YmUgdGhpcyBpcyBiZWNhdXNlIHRoZSBpb3ZhIG9mIHRoZQo+Pj4+Pj4gd29ya2luZ19idWZm ZXJzCj4+Pj4+PiBpcyBoYW5kZWQgdG8gdGhlIHZwdSBpbiB0aGUgZnVuY3Rpb24gdnA4X2VuY19h bGxvY193b3JrX2J1ZjoKPj4+Pj4+IHdiW2ldLmlvdmEgPSBpbnN0LT53b3JrX2J1ZnNbaV0uZG1h X2FkZHI7Cj4+Pj4+Pgo+Pj4+Pj4gTWF5YmUgdGhlIHZwdSBrZWVwIHdyaXRpbmcgdG8gdGhvc2Ug YWRkcmVzc2VzIGFmdGVyIHRoZXkgYXJlCj4+Pj4+PiBhbHJlYWR5Cj4+Pj4+PiB1bm1hcHBlZD8K Pj4+Pj4+Cj4+Pj4+PiBUaGFua3MsCj4+Pj4+PiBEYWZuYQo+Pj4+Pgo+Pj4+PiBmYWlsZWQgbGFy Yj0zLCBpdCdzIGZvciBoMjY0IGVuY29kZXIsICB2cDggZW5jb2RlciBpcyBsYXJiNSwgaXMKPj4+ Pj4gdGhlcmUKPj4+Pj4gYW55IGgyNjQgZW5jb2RpbmcgZmFpbGVkIGF0IHRoYXQgdGltZT8gSSBo YXZlIG5vIGlkZWFzIHdoeQo+Pj4+PiB0aGVzZQo+Pj4+PiBlcnJvcnMKPj4+Pj4gaGFwcGVuZWQg b24geW91ciBwbGF0Zm9ybSwgYnV0IHdoZW4gd2UgZ290IHRoZSAiaW9tbXU6IGZhdWx0IiwKPj4+ Pj4gdGhlCj4+Pj4+IHBvc3NpYmxlIHJlYXNvbiBpcyByZWxhdGVkIHRvIHBvd2VyIG9yIGNsb2Nr Lgo+Pj4+Cj4+Pj4gT25jZSB0aGUgaW9tbXUgZmF1bHQgZmlyZXMsIGJvdGggZW5jb2RlcnMgY29u c3RhbnRseSBmYWlsIGFuZAo+Pj4+IG5ldmVyCj4+Pj4gcmVjb3Zlcgo+Pj4+IChhbHNvIG5vdCB3 aGVuIHN0YXJ0aW5nIG5ldyBpbnN0YW5jZSkuCj4+Pj4KPj4+PiBXaXRoIHRoZSBmYWx1dDoKPj4+ PiBtdGtfaW9tbXVfaXNyOiBmYXVsdCB0eXBlPTB4NSBpb3ZhPTB4ZWJlZGUwMDMgcGE9MHgwIGxh cmI9Mwo+Pj4+IHBvcnQ9MAo+Pj4+IGxheWVyPTEgd3JpdGUKPj4+Pgo+Pj4+IEkgbG9va2VkIGF0 IHRoZSBpb21tdSB0cmFjaW5nIGxvZzoKPj4+Pgo+Pj4+ICAgICAgZ3N0LWxhdW5jaC0xLjAtNjA2 ICAgICBbMDAwXSAuLi4uLiAgIDcxNC42MzQzOTg6IHVubWFwOgo+Pj4+IElPTU1VOgo+Pj4+IGlv dmE9MHgwMDAwMDAwMGViZWRlMDAwIC0gMHgwMDAwMDAwMGViZWRmMDAwIHNpemU9NDA5Ngo+Pj4+ IHVubWFwcGVkX3NpemU9NDA5Ngo+Pj4+ICAgICAgZ3N0LWxhdW5jaC0xLjAtNjA2ICAgICBbMDAw XSAuLi4uLiAgIDcxNC42MzQ0MTc6IHVubWFwOgo+Pj4+IElPTU1VOgo+Pj4+IGlvdmE9MHgwMDAw MDAwMGViZWQwMDAwIC0gMHgwMDAwMDAwMGViZWQ1MDAwIHNpemU9MjA0ODAKPj4+PiB1bm1hcHBl ZF9zaXplPTIwNDgwCj4+Pj4gICAgICBnc3QtbGF1bmNoLTEuMC02MDYgICAgIFswMDBdIC4uLi4u ICAgNzE0LjYzNDQzNTogdW5tYXA6Cj4+Pj4gSU9NTVU6Cj4+Pj4gaW92YT0weDAwMDAwMDAwZWI4 MDAwMDAgLSAweDAwMDAwMDAwZWJiMGEwMDAgc2l6ZT0zMTg2Njg4Cj4+Pj4gdW5tYXBwZWRfc2l6 ZT0zMTg2Njg4Cj4+Pj4gICAgICBnc3QtbGF1bmNoLTEuMC02MDYgICAgIFswMDBdIC5OLi4uICAg NzE0LjYzNDg5MTogdW5tYXA6Cj4+Pj4gSU9NTVU6Cj4+Pj4gaW92YT0weDAwMDAwMDAwZWI3MDAw MDAgLSAweDAwMDAwMDAwZWI3ZmYwMDAgc2l6ZT0xMDQ0NDgwCj4+Pj4gdW5tYXBwZWRfc2l6ZT0x MDQ0NDgwCj4+Pj4gICAgICBnc3QtbGF1bmNoLTEuMC02MDYgICAgIFswMDBdIC5OLi4uICAgNzE0 LjYzNTQ4MTogdW5tYXA6Cj4+Pj4gSU9NTVU6Cj4+Pj4gaW92YT0weDAwMDAwMDAwZWIwMDAwMDAg LSAweDAwMDAwMDAwZWIzMGEwMDAgc2l6ZT0zMTg2Njg4Cj4+Pj4gdW5tYXBwZWRfc2l6ZT0zMTg2 Njg4Cj4+Pj4gICAgICBnc3QtbGF1bmNoLTEuMC02MDYgICAgIFswMDBdIC4uLi4uICAgNzE0LjYz NTkzNDogdW5tYXA6Cj4+Pj4gSU9NTVU6Cj4+Pj4gaW92YT0weDAwMDAwMDAwZWFmMDAwMDAgLSAw eDAwMDAwMDAwZWFmZmYwMDAgc2l6ZT0xMDQ0NDgwCj4+Pj4gdW5tYXBwZWRfc2l6ZT0xMDQ0NDgw Cj4+Pj4gICAgICBnc3QtbGF1bmNoLTEuMC02MDYgICAgIFswMDBdIC4uLi4uICAgNzE0LjYzNjA0 MTogdW5tYXA6Cj4+Pj4gSU9NTVU6Cj4+Pj4gaW92YT0weDAwMDAwMDAwZWFlZjAwMDAgLSAweDAw MDAwMDAwZWFmMDAwMDAgc2l6ZT02NTUzNgo+Pj4+IHVubWFwcGVkX3NpemU9NjU1MzYKPj4+PiAg ICAgIGdzdC1sYXVuY2gtMS4wLTYwNiAgICAgWzAwMF0gLi4uLi4gICA3MTQuNjM2MDU2OiB1bm1h cDoKPj4+PiBJT01NVToKPj4+PiBpb3ZhPTB4MDAwMDAwMDBlYWVlMDAwMCAtIDB4MDAwMDAwMDBl YWVmMDAwMCBzaXplPTY1NTM2Cj4+Pj4gdW5tYXBwZWRfc2l6ZT02NTUzNgo+Pj4+ICAgICAgZ3N0 LWxhdW5jaC0xLjAtNjA2ICAgICBbMDAwXSAuLi4uLiAgIDcxNC42MzYwNjk6IHVubWFwOgo+Pj4+ IElPTU1VOgo+Pj4+IGlvdmE9MHgwMDAwMDAwMGVhZWRmMDAwIC0gMHgwMDAwMDAwMGVhZWUwMDAw IHNpemU9NDA5Ngo+Pj4+IHVubWFwcGVkX3NpemU9NDA5Ngo+Pj4+ICAgICAgICAga3dvcmtlci8w OjAtNTM3ICAgICBbMDAwXSBkLmguLiAgIDcxNC42MzYxOTE6Cj4+Pj4gaW9fcGFnZV9mYXVsdDoK Pj4+PiBJT01NVTptdGstaW9tbXUgMTAyMDUwMDAuaW9tbXUgaW92YT0weDAwMDAwMDAwZWJlZGUw MDMKPj4+PiBmbGFncz0weDAwMDEKPj4+Pgo+Pj4+IChJIGNoYW5nZWQgdGhlIGlvbW11IG1hcC91 bm1hcCB0cmFjZSBldmVudHMgdG8gcHJpbnQgdGhlIGlvdmEKPj4+PiByYW5nZSkKPj4+PiB5b3Ug Y2FuIHNlZSB0aGUgZmlyc3QgbGluZSB1bm1hcHBpbmcgMDAwMDAwMDBlYmVkZTAwMCB3aGljaCBp cwo+Pj4+IHRoZQo+Pj4+IGZhdWx0aW5nIGlvdmEuCj4+Pj4gU28gaXQgc2VlbXMgdGhhdCB0aGUg cHJvYmxlbSBpcyBkdWUgdG8gYSBkZXZpY2UgdHJ5aW5nIHRvIGFjY2Vzcwo+Pj4+IGFuCj4+Pj4g YWRkcmVzcyB0aGF0IGlzIGFscmVhZHkgdW5tYXBwZWQuCj4+Pj4gVGhpcyBtaWdodCBiZSBlaXRo ZXIgdGhlIGVuY29kZXIgb3IgdGhlIHZwdS4KPj4+PiBTaW5jZSB0aGUgd2JbaV0uaW92YSBpcyBu b3QgcmVzZXQgd2hlbiBmcmVlaW5nIHRoZSB3b3JraW5nCj4+Pj4gYnVmZmVycyBJCj4+Pj4gc3Vz cGVjdCBpdCBtaWdodCBiZSB0aGUgdnB1IGRldmljZSwgd2hhdCBkbyB5b3UgdGhpbms/Cj4+Pj4K Pj4+PiBUaGFua3MsCj4+Pj4gRGFmbmEKPj4+Cj4+PiB2cHUgZGV2aWNlIHdvbid0IGFjY2VzcyB0 aGUgYWRkcmVzcywgdGhlIGZhdWx0IGxvZ3M6Cj4+Cj4+Cj4+IExvb2tpbmcgYXQgdGhlIGxpbmU6 Cj4+IHdiW2ldLmlvdmEgPSB3YltpXS5pb3ZhID0gaW5zdC0+d29ya19idWZzW2ldLmRtYV9hZGRy Owo+Pgo+PiBpbiBib3RoIHZwOCBhbmQgaDI2NCBpdCBzZWVtcyB0aGF0IHRoZSBjb2RlYyBkcml2 ZXJzIGdpdmUgdGhlIHZwdQo+PiBhY2Nlc3MgdG8gdGhlIGFsbG9jYXRlZCBpb3ZhIGFkZHJlc3Mu Cj4+IElmIHRoZSB2cHUgZG9lc24ndCBhY2Nlc3MgdGhvc2UgYWRkcmVzc2VzIHRoZW4gd2hhdCBp cyB0aGUgcHVycG9zZSBvZgo+PiB0aGlzIGxpbmU/Cj4+Cj4gIndiIiBpcyBhIHNoYXJlZCBidWZm ZXIgYmV0d2VlbiBBUC1rZXJuZWwgYW5kIFZQVSBmaXJtd2FyZSwgdG8gc3RvcmUKPiB0aGVzZSBl bmNvZGVyIHdvcmtpbmcgYnVmZmVycyBpbmZvcm1hdGlvbnMsIHRoZSBhcmNoaXRlY3R1cmUgbGlr ZSB0aGlzOgo+IDEuIFZQVSBmaXJtd2FyZSB3aWxsIHNldCB3b3JraW5nIGJ1ZmZlcnMgaW5mb3Jt YXRpb25zKHNpemUsIGlvdmEoaXMgMAo+IG5vdykpOwo+IDIuIEFQLWtlcm5lbCBhbGxvY2F0ZSB0 aGVzZSB3b3JraW5nIGJ1ZmZlcnMgYW5kIGdldCBhIHRydWx5Cj4gbWVtb3J5KGlvdmEpLCBzbyBW UFUgZmlybXdhcmUgY2FuIGdldCB0aGVzZSB3YnMnIGlvdmEgYWZ0ZXIgYWxsb2NhdGUKPiBkb25l Lgo+IDMuIHdoZW4gZW5jb2RpbmcsIHRoZXNlIGlvdmEgd2lsbCBzZXQgdG8gZW5jb2RlciBoYXJk d2FyZSBpbiBWUFUKPiBmaXJtd2FyZQo+IDQuIGVuY29kZXIgaGFyZHdhcmUgY2FuIGdldCB0aGUg ZGF0YSBmcm9tIHRoZXNlICJpb3ZhIiB0byBkbyBlbmNvZGluZy4KCm9rLCB0aGFua3MgZm9yIHRo ZSBleHBsYW5hdGlvbiwgc28gdnB1IGZpcm13YXJlIG9ubHkgaGFuZCB0aGUgaW92YSBhZHJlc3Nl cyBmdXJ0aGVyIHRvIHRoZSBlbmNvZGVyIGh3IGJ1dCBuZXZlciBhY2Nlc3MgdGhlbSBpdHNlbGY/ Cgo+IAo+IEkgc3VwcG9zZSB5b3UgbWVhbiB0aGF0ICJ2cHUiIGlzICJ2cHUgZmlybXdhcmUiPyBu b3QgbXRrLXZwdSBkcml2ZXIgPwoKeWVzLAoKPiAKPj4KPj4+IGZhdWx0IHR5cGU9MHg1IGlvdmE9 MHhlYmVkZTAwMyBwYT0weDAgbGFyYj0zIHBvcnQ9MCBsYXllcj0xIHdyaXRlCj4+Pgo+Pj4gaXQn cyBoMjY0IGVuY29kZXIgZXJyb3Igd2hlbiB3cml0aW5nICJSQ1BVIiBkYXRhIGFkZHJlc3MgdG8g ZW5jb2Rlcgo+Pj4gaGFyZHdhcmUgdGhyb3VnaCBpb21tdSwgYnV0IHdoeSB1bm1hcCBoYXBwZW5k ZWQgYXQgdGhpcyB0aW1lPyBpdAo+Pj4gc2VlbXMKPj4+IGVuY29kaW5nIHByb2Nlc3Mgc3RpbGwg Z29pbmcgb24uLi4uCj4+Cj4+IFdoeSBpcyBpdCBzZWVtcyBzbz8KPiAKPiB0aGUgZmF1bHQgbWVh bnMgZXJyb3JzIGhhcHBlbmRlZCB3aGlsZSByZWFkaW5nIHByZXBhcmVkIGVuY29kZSBkYXRhLCBz bwo+IEkgdGhpbmsgZW5jb2RpbmcgaXMgc3RpbGwgZ29pbmcgb24uCgpJIGFkZGVkIG1vcmUgdHJh Y2VfcHJpbnRrIGRlYnVnLCBhZGRpbmcgbG9nIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdvcmtpbmcg YnVmZmVycyBhcmUgZnJlZWQ6IHNlZSAnQkVGT1JFL0FGVEVSJyBsb2cKCiAgIGdzdC1sYXVuY2gt MS4wLTU5MCAgICAgWzAwMF0gLi4uLi4gICAzNTMuODI1Mjc2OiBoMjY0X2VuY19mcmVlX3dvcmtf YnVmOiBoMjY0IEJFRk9SRSB1bm1hcHBpbmcgd29yayBidWZmZXJzCiAgIGdzdC1sYXVuY2gtMS4w LTU5MCAgICAgWzAwMF0gLi4uLi4gICAzNTMuODI1MjgyOiB1bm1hcDogSU9NTVU6IGlvdmE9MHgw MDAwMDAwMGU1ZGZmMDAwIC0gMHgwMDAwMDAwMGU1ZTAwMDAwIHNpemU9NDA5NiB1bm1hcHBlZF9z aXplPTQwOTYKICAgZ3N0LWxhdW5jaC0xLjAtNTkwICAgICBbMDAwXSAuLi4uLiAgIDM1My44MjUz MDA6IHVubWFwOiBJT01NVTogaW92YT0weDAwMDAwMDAwZTVkZjAwMDAgLSAweDAwMDAwMDAwZTVk ZjUwMDAgc2l6ZT0yMDQ4MCB1bm1hcHBlZF9zaXplPTIwNDgwCiAgIGdzdC1sYXVuY2gtMS4wLTU5 MCAgICAgWzAwMF0gLi4uLi4gICAzNTMuODI1MzE3OiB1bm1hcDogSU9NTVU6IGlvdmE9MHgwMDAw MDAwMGU1ODAwMDAwIC0gMHgwMDAwMDAwMGU1YjBhMDAwIHNpemU9MzE4NjY4OCB1bm1hcHBlZF9z aXplPTMxODY2ODgKICAgZ3N0LWxhdW5jaC0xLjAtNTkwICAgICBbMDAwXSAuLi4uLiAgIDM1My44 MjU3NDA6IHVubWFwOiBJT01NVTogaW92YT0weDAwMDAwMDAwZTU1MDAwMDAgLSAweDAwMDAwMDAw ZTU1ZmYwMDAgc2l6ZT0xMDQ0NDgwIHVubWFwcGVkX3NpemU9MTA0NDQ4MAogICBnc3QtbGF1bmNo LTEuMC01OTAgICAgIFswMDBdIC4uLi4uICAgMzUzLjgyNTg1NDogdW5tYXA6IElPTU1VOiBpb3Zh PTB4MDAwMDAwMDBlMTAwMDAwMCAtIDB4MDAwMDAwMDBlMTMwYTAwMCBzaXplPTMxODY2ODggdW5t YXBwZWRfc2l6ZT0zMTg2Njg4CiAgIGdzdC1sYXVuY2gtMS4wLTU5MCAgICAgWzAwMF0gLi4uLi4g ICAzNTMuODI2MjczOiB1bm1hcDogSU9NTVU6IGlvdmE9MHgwMDAwMDAwMGUwZjAwMDAwIC0gMHgw MDAwMDAwMGUwZmZmMDAwIHNpemU9MTA0NDQ4MCB1bm1hcHBlZF9zaXplPTEwNDQ0ODAKICAgZ3N0 LWxhdW5jaC0xLjAtNTkwICAgICBbMDAwXSAuLi4uLiAgIDM1My44MjY0Nzc6IHVubWFwOiBJT01N VTogaW92YT0weDAwMDAwMDAwZTBlZjAwMDAgLSAweDAwMDAwMDAwZTBmMDAwMDAgc2l6ZT02NTUz NiB1bm1hcHBlZF9zaXplPTY1NTM2CiAgIGdzdC1sYXVuY2gtMS4wLTU5MCAgICAgWzAwMF0gLi4u Li4gICAzNTMuODI2NDk0OiB1bm1hcDogSU9NTVU6IGlvdmE9MHgwMDAwMDAwMGUwZWUwMDAwIC0g MHgwMDAwMDAwMGUwZWYwMDAwIHNpemU9NjU1MzYgdW5tYXBwZWRfc2l6ZT02NTUzNgogICBnc3Qt bGF1bmNoLTEuMC01OTAgICAgIFswMDBdIC4uLi4uICAgMzUzLjgyNjUwNzogdW5tYXA6IElPTU1V OiBpb3ZhPTB4MDAwMDAwMDBlMGVkZjAwMCAtIDB4MDAwMDAwMDBlMGVlMDAwMCBzaXplPTQwOTYg dW5tYXBwZWRfc2l6ZT00MDk2CiAgIGdzdC1sYXVuY2gtMS4wLTU5MCAgICAgWzAwMF0gLi4uLi4g ICAzNTMuODI2NTE1OiBoMjY0X2VuY19mcmVlX3dvcmtfYnVmOiBoMjY0IEFGVEVSICB1bm1hcHBp bmcgd29yayBidWZmZXJzCiAgICAgIGt3b3JrZXIvMDozLTY3ICAgICAgWzAwMF0gZC5oLi4gICAz NTMuODI2NjMxOiBpb19wYWdlX2ZhdWx0OiBJT01NVTptdGstaW9tbXUgMTAyMDUwMDAuaW9tbXUg aW92YT0weDAwMDAwMDAwZTVkZmYwMDMgZmxhZ3M9MHgwMDAxCgpJdCBpcyBjbGVhciB0aGF0IHRo ZSBmYXVsdCBoYXBwZW4gZm9yIHRoZSBmaXJzdCB3b3JraW5nIGJ1ZmZlciB0aGF0IGlzIHVubWFw cGVkLCBhbmQgdGhlIGZyZWVpbmcgb2YgdGhlIHdvcmtpbmcgYnVmZmVycyBoYXBwZW5zIG9ubHkK YWZ0ZXIgc3RyZWFtaW5nIGlzIGRvbmUgaW4gdGhlICcuZGVpbml0JyBjYiBvZiB0aGUgZW5jb2Rl ci4KU28gaXQgaXMgY2xlYXIgdGhhdCB0aGUgZW5jb2RlciBkZXZpY2Ugd3JpdGVzIHRvIHRoYXQg d29ya2luZyBidWZmZXIgdGhhdCB3YXMganVzdCB1bm1hcHBlZC4gTWF5YmUgaXQgaXMgYSBmaXJt d2FyZSBidWc/Ck9yIE1heWJlIHRoZSBlbmNvZGVyIHNob3VsZCAgaW5kZWVkIHdyaXRlIHRvIHRo b3NlIGJ1ZmZlcnMgYW5kIHRoZSBrZXJuZWwgc2hvdWxkIHdhaXQgYSB3aGlsZSBiZWZvcmUgZnJl ZWluZyB0aGVtPwoKPj4KPj4+Cj4+Pj4KPj4+Pj4KPj4+Pj4+Cj4+Pj4+Pgo+Pj4+Pj4+Cj4+Pj4+ Pj4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gTVQ4MTczIGxhdGVzdCBWUFVEIGZpcm13YXJlOgo+Pj4+Pj4+ Pgo+Pj4+Pgo+Pj4+Pgo+Pj4KPj4+Cj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xp bnV4L2tlcm5lbC9naXQvZmlybXdhcmUvbGludXgtZmlybXdhcgo+Pj4+Pj4+PiBlLmdpdC9jb21t aXQvP2lkPWFhZWQ0YThiZjlhNzdlYzY4Mzc2ZThkOTJmYjIxOGQ1ZmRkODhiNTkKPj4+Pj4+Pj4K Pj4+Pj4+Pgo+Pj4+Pj4+IEkgdXNlcyB0aGUgbGF0ZXN0IGZpcm13YXJlLgo+Pj4+Pj4+Cj4+Pj4+ Pj4gVGhhbmtzLAo+Pj4+Pj4+IERhZm5hCj4+Pj4+Pj4KPj4+Pj4+Pj4gVGhhbmtzCj4+Pj4+Pj4+ IEJlc3QgUmVnYXJkcwo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAtLS0tLemCruS7tuWOn+S7ti0tLS0tCj4+ Pj4+Pj4+IOWPkeS7tuS6ujogRGFmbmEgSGlyc2NoZmVsZCBbbWFpbHRvOgo+Pj4+Pj4+PiBkYWZu YS5oaXJzY2hmZWxkQGNvbGxhYm9yYS5jb21dCj4+Pj4+Pj4+IOWPkemAgeaXtumXtDogMjAyMeW5 tDjmnIg25pelIDE1OjQ5Cj4+Pj4+Pj4+IOaUtuS7tuS6ujogSXJ1aSBXYW5nICjnjovnkZ4pOyBs aW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOwo+Pj4+Pj4+PiBsaW51eC1tZWRpYUB2Z2VyLmtl cm5lbC5vcmc7Cj4+Pj4+Pj4+IGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4+ Pj4+Pj4g5oqE6YCBOiBkYWZuYTNAZ21haWwuY29tOyB0ZmlnYUBjaHJvbWl1bS5vcmc7IFRpZmZh bnkgTGluCj4+Pj4+Pj4+ICjmnpfmhafnj4opOwo+Pj4+Pj4+PiBlaXphbkBjaHJvbWl1bS5vcmc7 IE1hb2d1YW5nIE1lbmcgKOWtn+avm+W5vyk7Cj4+Pj4+Pj4+IGtlcm5lbEBjb2xsYWJvcmEuY29t Cj4+Pj4+Pj4+IDsKPj4+Pj4+Pj4gbWNoZWhhYkBrZXJuZWwub3JnOyBodmVya3VpbEB4czRhbGwu bmw7IFl1bmZlaSBEb25nCj4+Pj4+Pj4+ICjokaPkupHpo54pOwo+Pj4+Pj4+PiBZb25nCj4+Pj4+ Pj4+IFd1Cj4+Pj4+Pj4+ICjlkLTli4cpOyBoc2lueWlAY2hyb21pdW0ub3JnOyBtYXR0aGlhcy5i Z2dAZ21haWwuY29tOwo+Pj4+Pj4+PiBBbmRyZXctQ1QKPj4+Pj4+Pj4gQ2hlbgo+Pj4+Pj4+PiAo 6Zmz5pm66L+qKTsgYWNvdXJib3RAY2hyb21pdW0ub3JnCj4+Pj4+Pj4+IOS4u+mimDogUmU6IFtQ QVRDSCA0LzVdIG1lZGlhOiBtdGstdmNvZGVjOiBBZGQgdHdvIGVycm9yCj4+Pj4+Pj4+IGNhc2Vz Cj4+Pj4+Pj4+IHVwb24KPj4+Pj4+Pj4gdnB1Cj4+Pj4+Pj4+IGlycSBoYW5kbGluZwo+Pj4+Pj4+ Pgo+Pj4+Pj4+Pgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBPbiAwNi4wOC4yMSAwODo1OCwgSXJ1aSBXYW5n ICjnjovnkZ4pIHdyb3RlOgo+Pj4+Pj4+Pj4gT24gV2VkLCAyMDIxLTA4LTA0IGF0IDE2OjI3ICsw MjAwLCBEYWZuYSBIaXJzY2hmZWxkCj4+Pj4+Pj4+PiB3cm90ZToKPj4+Pj4+Pj4+PiAxLiBGYWls IGlmIHRoZSBmdW5jdGlvbiBtdGtfdmNvZGVjX2Z3X21hcF9kbV9hZGRyCj4+Pj4+Pj4+Pj4gcmV0 dXJucwo+Pj4+Pj4+Pj4+IEVSUgo+Pj4+Pj4+Pj4+IHBvaW50ZXIuCj4+Pj4+Pj4+Pj4gMi4gRmFp bCBpZiB0aGUgc3RhdGUgZnJvbSB0aGUgdnB1IG1zZyBpcyBlaXRoZXIKPj4+Pj4+Pj4+PiBWRU5f SVBJX01TR19FTkNfU1RBVEVfRVJST1Igb3IKPj4+Pj4+Pj4+PiBWRU5fSVBJX01TR19FTkNfU1RB VEVfUEFSVAo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogRGFmbmEgSGlyc2No ZmVsZCA8Cj4+Pj4+Pj4+Pj4gZGFmbmEuaGlyc2NoZmVsZEBjb2xsYWJvcmEuY29tPgo+Pj4+Pj4+ Pj4+IC0tLQo+Pj4+Pj4+Pj4+ICAgICAgIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2Rl Yy92ZW5jX3ZwdV9pZi5jCj4+Pj4+Pj4+Pj4gfCA4Cj4+Pj4+Pj4+Pj4gKysrKysrKysKPj4+Pj4+ Pj4+PiAgICAgICAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCj4+Pj4+Pj4+Pj4KPj4+ Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstCj4+Pj4+Pj4+ Pj4gdmNvZGVjL3ZlbmNfdnB1X2lmLmMKPj4+Pj4+Pj4+PiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vbXRrLXZjb2RlYy92ZW5jX3ZwdV9pZi5jCj4+Pj4+Pj4+Pj4gaW5kZXggMzJkYzg0NGQxNmY5 Li4yMzQ3MDViYTdjZDYgMTAwNjQ0Cj4+Pj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9tdGstdmNvZGVjL3ZlbmNfdnB1X2lmLmMKPj4+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL210ay12Y29kZWMvdmVuY192cHVfaWYuYwo+Pj4+Pj4+Pj4+IEBAIC0xNyw2 ICsxNyw4IEBAIHN0YXRpYyBpbnQKPj4+Pj4+Pj4+PiBoYW5kbGVfZW5jX2luaXRfbXNnKHN0cnVj dAo+Pj4+Pj4+Pj4+IHZlbmNfdnB1X2luc3QgKnZwdSwgY29uc3Qgdm9pZCAqZGF0YSkKPj4+Pj4+ Pj4+PiAgICAgICB2cHUtPnZzaSA9IG10a192Y29kZWNfZndfbWFwX2RtX2FkZHIodnB1LT5jdHgt Cj4+Pj4+Pj4+Pj4+IGRldi0KPj4+Pj4+Pj4+Pj4gZndfaGFuZGxlciwKPj4+Pj4+Pj4+Pgo+Pj4+ Pj4+Pj4+ICAgICAgICAgICAgbXNnLT52cHVfaW5zdF9hZGRyKTsKPj4+Pj4+Pj4+PiAgICAgICAK Pj4+Pj4+Pj4+PiAraWYgKElTX0VSUih2cHUtPnZzaSkpCj4+Pj4+Pj4+Pj4gK3JldHVybiBQVFJf RVJSKHZwdS0+dnNpKTsKPj4+Pj4+Pj4+PiAgICAgICAvKiBGaXJtd2FyZSB2ZXJzaW9uIGZpZWxk IHZhbHVlIGlzIHVuc3BlY2lmaWVkCj4+Pj4+Pj4+Pj4gb24KPj4+Pj4+Pj4+PiBNVDgxNzMuCj4+ Pj4+Pj4+Pj4gKi8KPj4+Pj4+Pj4+PiAgICAgICBpZiAodnB1LT5jdHgtPmRldi0+dmVuY19wZGF0 YS0+Y2hpcCA9PQo+Pj4+Pj4+Pj4+IE1US19NVDgxNzMpCj4+Pj4+Pj4+Pj4gICAgICAgcmV0dXJu IDA7Cj4+Pj4+Pj4+Pj4gQEAgLTQyLDYgKzQ0LDEyIEBAIHN0YXRpYyBpbnQKPj4+Pj4+Pj4+PiBo YW5kbGVfZW5jX2VuY29kZV9tc2coc3RydWN0Cj4+Pj4+Pj4+Pj4gdmVuY192cHVfaW5zdCAqdnB1 LCBjb25zdCB2b2lkICpkYXRhKQo+Pj4+Pj4+Pj4+ICAgICAgIHZwdS0+c3RhdGUgPSBtc2ctPnN0 YXRlOwo+Pj4+Pj4+Pj4+ICAgICAgIHZwdS0+YnNfc2l6ZSA9IG1zZy0+YnNfc2l6ZTsKPj4+Pj4+ Pj4+PiAgICAgICB2cHUtPmlzX2tleV9mcm0gPSBtc2ctPmlzX2tleV9mcm07Cj4+Pj4+Pj4+Pj4g K2lmICh2cHUtPnN0YXRlID09IFZFTl9JUElfTVNHX0VOQ19TVEFURV9FUlJPUiB8fAo+Pj4+Pj4+ Pj4+ICsgICAgdnB1LT5zdGF0ZSA9PSBWRU5fSVBJX01TR19FTkNfU1RBVEVfUEFSVCkgewo+Pj4+ Pj4+Pj4+IG10a192Y29kZWNfZXJyKHZwdSwKPj4+Pj4+Pj4+PiArImJhZCBpcGktZW5jLXN0YXRl OiAlcyIsCj4+Pj4+Pj4+Pj4gKyAgICAgICB2cHUtPnN0YXRlID09Cj4+Pj4+Pj4+Pj4gVkVOX0lQ SV9NU0dfRU5DX1NUQVRFX0VSUk9SID8gIkVSUiIgOiAiUEFSVCIpOwo+Pj4+Pj4+Pj4+ICtyZXR1 cm4gLUVJTlZBTDsKPj4+Pj4+Pj4+PiArfQo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEhpIERhZm5hLAo+ Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IFRoaXMgc3RhdGUgY2hlY2sgaXMgdXNlbGVzcywgdGhlIGVuYyBy ZXN1bHQgd2lsbCBjaGVjawo+Pj4+Pj4+Pj4gaW4KPj4+Pj4+Pj4+ICJ2cHVfZW5jX2lwaV9oYW5k bGVyIi4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IEhpLCB0aGFua3MgZm9yIHJldmlld2lu Zy4gSSBzZWUgdGhhdCB0aGUKPj4+Pj4+Pj4gdnB1X2VuY19pcGlfaGFuZGxlcgo+Pj4+Pj4+PiBv bmx5Cj4+Pj4+Pj4+IHRlc3QgdGhlIG1zZy0+c3RhdHVzIGFuZCBJIHNlZSB0aGF0IHRoZSBzdGF0 ZXMgYXJlIG5vdAo+Pj4+Pj4+PiB0ZXN0ZWQKPj4+Pj4+Pj4gYW55d2hlcmUgZXhjZXB0IG9mICJz a2lwIiBzdGF0ZSBpbiB0aGUgaDI2NCBlbmMuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IENhbid0IHRoZXJl IGJlIGEgc2NlbmFyaW8gd2hlcmUgbXNnLT5zdGF0dXMgaXMgb2sgYnV0IHRoZQo+Pj4+Pj4+PiBz dGF0ZQo+Pj4+Pj4+PiBpcyBlcnJvcj8KPj4+Pj4+Pj4gSSBhbSB0ZXN0aW5nIHRoZSB2cDggZW5j b2RlciBvbiBjaHJvbWVvcyBhbmQgYXQgc29tZQo+Pj4+Pj4+PiBwb2ludAo+Pj4+Pj4+PiB0aGUK Pj4+Pj4+Pj4gZW5jb2RlciBpbnRlcnJ1cHRzIHN0b3AgYXJyaXZpbmcgc28gSSB0cnkgdG8gZmln dXJlIG91dAo+Pj4+Pj4+PiB3aHkKPj4+Pj4+Pj4gYW5kCj4+Pj4+Pj4+IHJlcG9ydCBhbnkgcG9z c2libGUgZXJyb3IuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFRoYW5rcywKPj4+Pj4+Pj4gRGFmbmEKPj4+ Pj4+Pj4KPj4+Pj4+Pj4+IFRoYW5rcwo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiAgICAgICByZXR1cm4g MDsKPj4+Pj4+Pj4+PiAgICAgICB9Cj4+Pj4+Pj4+Pj4gICAgICAgCj4+Pj4+Pj4+Cj4+Pj4+Pj4+ ICoqKioqKioqKioqKiogTUVESUFURUsgQ29uZmlkZW50aWFsaXR5IE5vdGljZQo+Pj4+Pj4+PiAq KioqKioqKioqKioqKioqKioqKiBUaGUKPj4+Pj4+Pj4gaW5mb3JtYXRpb24gY29udGFpbmVkIGlu IHRoaXMgZS1tYWlsIG1lc3NhZ2UgKGluY2x1ZGluZwo+Pj4+Pj4+PiBhbnkKPj4+Pj4+Pj4gYXR0 YWNobWVudHMpIG1heSBiZSBjb25maWRlbnRpYWwsIHByb3ByaWV0YXJ5LAo+Pj4+Pj4+PiBwcml2 aWxlZ2VkLCBvcgo+Pj4+Pj4+PiBvdGhlcndpc2UgZXhlbXB0IGZyb20gZGlzY2xvc3VyZSB1bmRl ciBhcHBsaWNhYmxlIGxhd3MuCj4+Pj4+Pj4+IEl0IGlzCj4+Pj4+Pj4+IGludGVuZGVkCj4+Pj4+ Pj4+IHRvIGJlIGNvbnZleWVkIG9ubHkgdG8gdGhlIGRlc2lnbmF0ZWQgcmVjaXBpZW50KHMpLiBB bnkKPj4+Pj4+Pj4gdXNlLAo+Pj4+Pj4+PiBkaXNzZW1pbmF0aW9uLCBkaXN0cmlidXRpb24sIHBy aW50aW5nLCByZXRhaW5pbmcgb3IKPj4+Pj4+Pj4gY29weWluZwo+Pj4+Pj4+PiBvZgo+Pj4+Pj4+ PiB0aGlzCj4+Pj4+Pj4+IGUtbWFpbCAoaW5jbHVkaW5nIGl0cwo+Pj4+Pj4+PiBhdHRhY2htZW50 cykgYnkgdW5pbnRlbmRlZCByZWNpcGllbnQocykgaXMgc3RyaWN0bHkKPj4+Pj4+Pj4gcHJvaGli aXRlZAo+Pj4+Pj4+PiBhbmQgbWF5Cj4+Pj4+Pj4+IGJlIHVubGF3ZnVsLiBJZiB5b3UgYXJlIG5v dCBhbiBpbnRlbmRlZCByZWNpcGllbnQgb2YgdGhpcwo+Pj4+Pj4+PiBlLQo+Pj4+Pj4+PiBtYWls LAo+Pj4+Pj4+PiBvcgo+Pj4+Pj4+PiBiZWxpZXZlIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgdGhp cyBlLW1haWwgaW4gZXJyb3IsCj4+Pj4+Pj4+IHBsZWFzZQo+Pj4+Pj4+PiBub3RpZnkgdGhlCj4+ Pj4+Pj4+IHNlbmRlciBpbW1lZGlhdGVseSAoYnkgcmVwbHlpbmcgdG8gdGhpcyBlLW1haWwpLCBk ZWxldGUKPj4+Pj4+Pj4gYW55Cj4+Pj4+Pj4+IGFuZAo+Pj4+Pj4+PiBhbGwKPj4+Pj4+Pj4gY29w aWVzIG9mIHRoaXMgZS1tYWlsIChpbmNsdWRpbmcgYW55IGF0dGFjaG1lbnRzKSBmcm9tCj4+Pj4+ Pj4+IHlvdXIKPj4+Pj4+Pj4gc3lzdGVtLAo+Pj4+Pj4+PiBhbmQgZG8gbm90IGRpc2Nsb3NlIHRo ZSBjb250ZW50IG9mIHRoaXMgZS1tYWlsIHRvIGFueQo+Pj4+Pj4+PiBvdGhlcgo+Pj4+Pj4+PiBw ZXJzb24uIFRoYW5rIHlvdSEKPj4+Pj4+Pj4KPj4+Pj4KPj4+Pj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+Pj4gTGludXgtbWVkaWF0ZWsgbWFpbGlu ZyBsaXN0Cj4+Pj4+IExpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4+Pj4gaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlawo+ Pj4+Pgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g TGludXgtbWVkaWF0ZWsgbWFpbGluZyBsaXN0Cj4gTGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFk ZWFkLm9yZwo+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtbWVkaWF0ZWsKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkxpbnV4LW1lZGlhdGVrIG1haWxpbmcgbGlzdApMaW51eC1tZWRpYXRla0BsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtbWVkaWF0ZWsK