From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1901C433E4 for ; Thu, 16 Jul 2020 10:50:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8CD6E206C1 for ; Thu, 16 Jul 2020 10:50:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="T35eyFNB" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726898AbgGPKuP (ORCPT ); Thu, 16 Jul 2020 06:50:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41818 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726907AbgGPKuO (ORCPT ); Thu, 16 Jul 2020 06:50:14 -0400 Received: from mail-ej1-x642.google.com (mail-ej1-x642.google.com [IPv6:2a00:1450:4864:20::642]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 973CDC061755 for ; Thu, 16 Jul 2020 03:50:13 -0700 (PDT) Received: by mail-ej1-x642.google.com with SMTP id f12so6064353eja.9 for ; Thu, 16 Jul 2020 03:50:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=7Px6j0xeOYkPjHURcyI2MVrHh5xdpIzdarGduqmRZnc=; b=T35eyFNB1arzCVcg48FlkWIK/EYz/6agiVn+A1QezpzpbtETnIogDHR7nwleQfaTj8 CTyVXJ7KNPc1R3pnb7//3tRYkfmi9JlFgYT48havDrV86+KC01p63DH85zGDloyTfHdh NhfAfpi/MB5m/BUOIua9EXatR6/8Clj2mcvUHHME5EyxiCRGGNTTfsfbXydlKrs79/6A d3ObVjjIeEOR1F2yhKyrIYgU6z3nwtoDSQ34ruxAkIVCU26FM6E8uIRq+O2c0u21Q8So TrCY4jLB2jU21/IyQmVUg5DLHwD7VOOEWoRvzFV22hqyQ+tXqYZhO837AO+/JyI2k8q0 gXLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=7Px6j0xeOYkPjHURcyI2MVrHh5xdpIzdarGduqmRZnc=; b=BgGI0XiYM7FtqUmL9NGTQiUDUQSwzXZcoGM5z0awiIhpQKYfehUpAJ3US9IjA/oWOz CNsK/7ink5SpBVcXO5F84/vLO1/aVcDYxwmMaQHF1EhS431bWThSLClwuqvvnazsKvrL pl7leyC9A84aObNdHzGTqd5SOCS7hrbw6452YmS0LEborXvQF5yWEZ5Tdd5pnJFqpaVC p8oSm69rfHy9eTQhuzTcfkMmhogyJMxJ2eXYGc/1swgVQTyO5isVBVZallU1Sg/MKT/J CM9sEGBx7bMbtkWKmXpb1ibub0fyKvpJx8sEqn3IocywCAHglCka6R/y19iOmu9kmTSI XESA== X-Gm-Message-State: AOAM531CMj+fyyQkW/UlndY4np9ZEV7iGxlMl64DfgevfbujI6TdzR4/ kkkxYjFPUoTa6u4gavX/LUGH0w== X-Google-Smtp-Source: ABdhPJyFgdX7spYQNHdnpyJWAr7qao+RiC56kNwWy1iEA9wQYNAgnfTAAkQNW9uF3c8/uSw6RGPUlg== X-Received: by 2002:a17:906:a459:: with SMTP id cb25mr3115995ejb.234.1594896612299; Thu, 16 Jul 2020 03:50:12 -0700 (PDT) Received: from [192.168.1.2] (212-5-158-188.ip.btc-net.bg. [212.5.158.188]) by smtp.googlemail.com with ESMTPSA id cb7sm4768901ejb.12.2020.07.16.03.50.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 16 Jul 2020 03:50:11 -0700 (PDT) Subject: Re: [PATCH 1/4] media: v4l2-ctrl: Add frame-skip std encoder control To: Nicolas Dufresne , Stanimir Varbanov , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Kyungmin Park , Kamil Debski , Jeongtae Park , Andrzej Hajda , Hans Verkuil , Maheshwar Ajja References: <20200705121128.5250-1-stanimir.varbanov@linaro.org> <20200705121128.5250-2-stanimir.varbanov@linaro.org> <513fd919-56a2-08b4-c8a7-5d37d7743129@linaro.org> From: Stanimir Varbanov Message-ID: Date: Thu, 16 Jul 2020 13:50:09 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 7/15/20 9:12 PM, Nicolas Dufresne wrote: > Le mercredi 15 juillet 2020 à 18:42 +0300, Stanimir Varbanov a écrit : >> Hi Nicolas, >> >> On 7/7/20 11:53 PM, Nicolas Dufresne wrote: >>> Le dimanche 05 juillet 2020 à 15:11 +0300, Stanimir Varbanov a écrit : >>>> Adds encoders standard v4l2 control for frame-skip. The control >>>> is a copy of a custom encoder control so that other v4l2 encoder >>>> drivers can use it. >>>> >>>> Signed-off-by: Stanimir Varbanov >>>> --- >>>> .../media/v4l/ext-ctrls-codec.rst | 32 +++++++++++++++++++ >>>> drivers/media/v4l2-core/v4l2-ctrls.c | 10 ++++++ >>>> include/uapi/linux/v4l2-controls.h | 6 ++++ >>>> 3 files changed, 48 insertions(+) >>>> >>>> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >>>> index d0d506a444b1..a8b4c0b40747 100644 >>>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >>>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >>>> @@ -592,6 +592,38 @@ enum v4l2_mpeg_video_bitrate_mode - >>>> the average video bitrate. It is ignored if the video bitrate mode >>>> is set to constant bitrate. >>>> >>>> +``V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE (enum)`` >>>> + >>>> +enum v4l2_mpeg_video_frame_skip_mode - >>>> + Indicates in what conditions the encoder should skip frames. If >>>> + encoding a frame would cause the encoded stream to be larger then a >>>> + chosen data limit then the frame will be skipped. Possible values >>>> + are: >>> >>> I have nothing against this API, in fact it's really nice to generalize >>> as this is very common. Though, I think we are missing two things. This >>> documentation refer to the "chosen data limit". Is there controls to >>> configure these *chosen* limit ? The other issue is the vagueness of >>> the documented mode, see lower... >>> >>>> + >>>> + >>>> +.. tabularcolumns:: |p{9.2cm}|p{8.3cm}| >>>> + >>>> +.. raw:: latex >>>> + >>>> + \small >>>> + >>>> +.. flat-table:: >>>> + :header-rows: 0 >>>> + :stub-columns: 0 >>>> + >>>> + * - ``V4L2_MPEG_FRAME_SKIP_MODE_DISABLED`` >>>> + - Frame skip mode is disabled. >>>> + * - ``V4L2_MPEG_FRAME_SKIP_MODE_LEVEL_LIMIT`` >>>> + - Frame skip mode enabled and buffer limit is set by the chosen >>>> + level and is defined by the standard. >>> >>> At least for H.264, a level is compose of 3 limits. One is the maximum >>> number of macroblocks, this is is evidently not use for frame skipping >>> and already constrained in V4L2 (assuming the driver does not ignore >>> the level control of course). The two other limits are decoded >>> macroblocks/s and encoded kbits/s. Both are measure over time, which >>> means the M2M encoder needs to be timing aware. I think the time source >>> should be documented. Perhaps it is mandatory to set a frame interval >>> for this to work ? Or we need some timestamp to allow variable frame >>> interval ? (I don't think the second is really an option without >>> extending the API again, and confusingly, since I think we have used >>> the timestamp for other purpose already) >> >> Do you want to say that the encoder input timestamp, bitrate control >> (V4L2_CID_MPEG_VIDEO_BITRATE) and S_PARM is not enough to describe >> FRAME_SKIP_MODE_LEVEL_LIMIT mode? > > I don't think we have spec to give the input timestamp a meaning that > driver can interpret. In fact I think we gave it a meaning that the > driver must not interpret it (aka driver opaque). So remain S_PARM to At least for Venus the timestamps are passed to the firmware and used by encoder rate-controller. > give a clue, but some stream don't have a framerate (like RTP streams, > unless written in bitstream). I think v4l2 clients should be able to guess what would be the frame rate in such cases, no? -- regards, Stan From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 43F01C433E0 for ; Thu, 16 Jul 2020 10:51:42 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 0F2B8206C1 for ; Thu, 16 Jul 2020 10:51:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="S3Wlqp6I"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="T35eyFNB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0F2B8206C1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=C5IXXKJpiRjkxnjWtdzQi7DTaDYjwo5p6RTiYdUmGAM=; b=S3Wlqp6IFLwyG1q5+fEEH8d36 FBs8fAzzca0xgeKo+QA/VsUfOLizwr3lLSjOqLznbN6VvmZ/tqSyiKr2HhprdgZTnxLabkqfGbEqL 4XNdP8e8h45N3LaPzOwEUeA3NB2UjkpJvB24Eqc19xt7mxs3mEfrxH6uHfGnyjHKbI3fGaigLbAPr 9xanW0kxT20IJY5clChmykeESlvuxTNsv+D+wyZpRMoQi6giuI2HQr+sqPWRU2jpebaoEXqqLX8ab EgJhaBYcsAqWK7zbqWURDi05M0WDDZtcZZLVhbHpcahAg5y29HjkaObBt3mrK4rHLwf4Pl6BAiHn6 qWQpYrxBQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jw1T1-0008EC-8n; Thu, 16 Jul 2020 10:50:19 +0000 Received: from mail-ej1-x642.google.com ([2a00:1450:4864:20::642]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jw1Sw-0008C3-TD for linux-arm-kernel@lists.infradead.org; Thu, 16 Jul 2020 10:50:17 +0000 Received: by mail-ej1-x642.google.com with SMTP id w6so6068813ejq.6 for ; Thu, 16 Jul 2020 03:50:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=7Px6j0xeOYkPjHURcyI2MVrHh5xdpIzdarGduqmRZnc=; b=T35eyFNB1arzCVcg48FlkWIK/EYz/6agiVn+A1QezpzpbtETnIogDHR7nwleQfaTj8 CTyVXJ7KNPc1R3pnb7//3tRYkfmi9JlFgYT48havDrV86+KC01p63DH85zGDloyTfHdh NhfAfpi/MB5m/BUOIua9EXatR6/8Clj2mcvUHHME5EyxiCRGGNTTfsfbXydlKrs79/6A d3ObVjjIeEOR1F2yhKyrIYgU6z3nwtoDSQ34ruxAkIVCU26FM6E8uIRq+O2c0u21Q8So TrCY4jLB2jU21/IyQmVUg5DLHwD7VOOEWoRvzFV22hqyQ+tXqYZhO837AO+/JyI2k8q0 gXLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=7Px6j0xeOYkPjHURcyI2MVrHh5xdpIzdarGduqmRZnc=; b=mR+0kfL5bCFiDLqbneDs3bPZ3DNtDVNS+JhW5UI1HdJPu3OFSVlxktXbQcmHyl5g3D IAw9vn+s1/9XYYLpeo01t8fu5V9DWSqqrCY+tiqQlSzeiNnZXfs/ZhR3aM4Zjg+kCTRz l8i7aWZFg972ngZHRyarKLJ5mhRyH50jQpNRlgRnDYNlTHgP7fFheBs2AJgKcGv6vGpb zNHGTkSE2i0fR7Y4hCc1CORPXKuw6niD2T9LUcV1uLBKrmeF/G/yLKIX/ldzTQUtKKvM B2xr0PhJOs+I+49rKIpD72I+VF/i5K8X0Wq3CD67GnnHncF/wDv8mmoL9pscempcLZgG u3Bg== X-Gm-Message-State: AOAM532WnUySi/OsUr1zWuHaiB64Cv21Zd+rPr4NHTbHG6628/hHfjrK +7bQCcOpiEv0c1lyaXCxBANW5w== X-Google-Smtp-Source: ABdhPJyFgdX7spYQNHdnpyJWAr7qao+RiC56kNwWy1iEA9wQYNAgnfTAAkQNW9uF3c8/uSw6RGPUlg== X-Received: by 2002:a17:906:a459:: with SMTP id cb25mr3115995ejb.234.1594896612299; Thu, 16 Jul 2020 03:50:12 -0700 (PDT) Received: from [192.168.1.2] (212-5-158-188.ip.btc-net.bg. [212.5.158.188]) by smtp.googlemail.com with ESMTPSA id cb7sm4768901ejb.12.2020.07.16.03.50.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 16 Jul 2020 03:50:11 -0700 (PDT) Subject: Re: [PATCH 1/4] media: v4l2-ctrl: Add frame-skip std encoder control To: Nicolas Dufresne , Stanimir Varbanov , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20200705121128.5250-1-stanimir.varbanov@linaro.org> <20200705121128.5250-2-stanimir.varbanov@linaro.org> <513fd919-56a2-08b4-c8a7-5d37d7743129@linaro.org> From: Stanimir Varbanov Message-ID: Date: Thu, 16 Jul 2020 13:50:09 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200716_065015_673082_554B2202 X-CRM114-Status: GOOD ( 24.65 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Maheshwar Ajja , Andrzej Hajda , Kamil Debski , Jeongtae Park , Kyungmin Park , Hans Verkuil 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 CgpPbiA3LzE1LzIwIDk6MTIgUE0sIE5pY29sYXMgRHVmcmVzbmUgd3JvdGU6Cj4gTGUgbWVyY3Jl ZGkgMTUganVpbGxldCAyMDIwIMOgIDE4OjQyICswMzAwLCBTdGFuaW1pciBWYXJiYW5vdiBhIMOp Y3JpdCA6Cj4+IEhpIE5pY29sYXMsCj4+Cj4+IE9uIDcvNy8yMCAxMTo1MyBQTSwgTmljb2xhcyBE dWZyZXNuZSB3cm90ZToKPj4+IExlIGRpbWFuY2hlIDA1IGp1aWxsZXQgMjAyMCDDoCAxNToxMSAr MDMwMCwgU3RhbmltaXIgVmFyYmFub3YgYSDDqWNyaXQgOgo+Pj4+IEFkZHMgZW5jb2RlcnMgc3Rh bmRhcmQgdjRsMiBjb250cm9sIGZvciBmcmFtZS1za2lwLiBUaGUgY29udHJvbAo+Pj4+IGlzIGEg Y29weSBvZiBhIGN1c3RvbSBlbmNvZGVyIGNvbnRyb2wgc28gdGhhdCBvdGhlciB2NGwyIGVuY29k ZXIKPj4+PiBkcml2ZXJzIGNhbiB1c2UgaXQuCj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBTdGFu aW1pciBWYXJiYW5vdiA8c3RhbmltaXIudmFyYmFub3ZAbGluYXJvLm9yZz4KPj4+PiAtLS0KPj4+ PiAgLi4uL21lZGlhL3Y0bC9leHQtY3RybHMtY29kZWMucnN0ICAgICAgICAgICAgIHwgMzIgKysr KysrKysrKysrKysrKysrKwo+Pj4+ICBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxz LmMgICAgICAgICAgfCAxMCArKysrKysKPj4+PiAgaW5jbHVkZS91YXBpL2xpbnV4L3Y0bDItY29u dHJvbHMuaCAgICAgICAgICAgIHwgIDYgKysrKwo+Pj4+ICAzIGZpbGVzIGNoYW5nZWQsIDQ4IGlu c2VydGlvbnMoKykKPj4+Pgo+Pj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFj ZS1hcGkvbWVkaWEvdjRsL2V4dC1jdHJscy1jb2RlYy5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXJz cGFjZS1hcGkvbWVkaWEvdjRsL2V4dC1jdHJscy1jb2RlYy5yc3QKPj4+PiBpbmRleCBkMGQ1MDZh NDQ0YjEuLmE4YjRjMGI0MDc0NyAxMDA2NDQKPj4+PiAtLS0gYS9Eb2N1bWVudGF0aW9uL3VzZXJz cGFjZS1hcGkvbWVkaWEvdjRsL2V4dC1jdHJscy1jb2RlYy5yc3QKPj4+PiArKysgYi9Eb2N1bWVu dGF0aW9uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL2V4dC1jdHJscy1jb2RlYy5yc3QKPj4+PiBA QCAtNTkyLDYgKzU5MiwzOCBAQCBlbnVtIHY0bDJfbXBlZ192aWRlb19iaXRyYXRlX21vZGUgLQo+ Pj4+ICAgICAgdGhlIGF2ZXJhZ2UgdmlkZW8gYml0cmF0ZS4gSXQgaXMgaWdub3JlZCBpZiB0aGUg dmlkZW8gYml0cmF0ZSBtb2RlCj4+Pj4gICAgICBpcyBzZXQgdG8gY29uc3RhbnQgYml0cmF0ZS4K Pj4+PiAgCj4+Pj4gK2BgVjRMMl9DSURfTVBFR19WSURFT19GUkFNRV9TS0lQX01PREUgKGVudW0p YGAKPj4+PiArCj4+Pj4gK2VudW0gdjRsMl9tcGVnX3ZpZGVvX2ZyYW1lX3NraXBfbW9kZSAtCj4+ Pj4gKyAgICBJbmRpY2F0ZXMgaW4gd2hhdCBjb25kaXRpb25zIHRoZSBlbmNvZGVyIHNob3VsZCBz a2lwIGZyYW1lcy4gSWYKPj4+PiArICAgIGVuY29kaW5nIGEgZnJhbWUgd291bGQgY2F1c2UgdGhl IGVuY29kZWQgc3RyZWFtIHRvIGJlIGxhcmdlciB0aGVuIGEKPj4+PiArICAgIGNob3NlbiBkYXRh IGxpbWl0IHRoZW4gdGhlIGZyYW1lIHdpbGwgYmUgc2tpcHBlZC4gUG9zc2libGUgdmFsdWVzCj4+ Pj4gKyAgICBhcmU6Cj4+Pgo+Pj4gSSBoYXZlIG5vdGhpbmcgYWdhaW5zdCB0aGlzIEFQSSwgaW4g ZmFjdCBpdCdzIHJlYWxseSBuaWNlIHRvIGdlbmVyYWxpemUKPj4+IGFzIHRoaXMgaXMgdmVyeSBj b21tb24uIFRob3VnaCwgSSB0aGluayB3ZSBhcmUgbWlzc2luZyB0d28gdGhpbmdzLiBUaGlzCj4+ PiBkb2N1bWVudGF0aW9uIHJlZmVyIHRvIHRoZSAiY2hvc2VuIGRhdGEgbGltaXQiLiBJcyB0aGVy ZSBjb250cm9scyB0bwo+Pj4gY29uZmlndXJlIHRoZXNlICpjaG9zZW4qIGxpbWl0ID8gVGhlIG90 aGVyIGlzc3VlIGlzIHRoZSB2YWd1ZW5lc3Mgb2YKPj4+IHRoZSBkb2N1bWVudGVkIG1vZGUsIHNl ZSBsb3dlci4uLgo+Pj4KPj4+PiArCj4+Pj4gKwo+Pj4+ICsuLiB0YWJ1bGFyY29sdW1uczo6IHxw ezkuMmNtfXxwezguM2NtfXwKPj4+PiArCj4+Pj4gKy4uIHJhdzo6IGxhdGV4Cj4+Pj4gKwo+Pj4+ ICsgICAgXHNtYWxsCj4+Pj4gKwo+Pj4+ICsuLiBmbGF0LXRhYmxlOjoKPj4+PiArICAgIDpoZWFk ZXItcm93czogIDAKPj4+PiArICAgIDpzdHViLWNvbHVtbnM6IDAKPj4+PiArCj4+Pj4gKyAgICAq IC0gYGBWNEwyX01QRUdfRlJBTUVfU0tJUF9NT0RFX0RJU0FCTEVEYGAKPj4+PiArICAgICAgLSBG cmFtZSBza2lwIG1vZGUgaXMgZGlzYWJsZWQuCj4+Pj4gKyAgICAqIC0gYGBWNEwyX01QRUdfRlJB TUVfU0tJUF9NT0RFX0xFVkVMX0xJTUlUYGAKPj4+PiArICAgICAgLSBGcmFtZSBza2lwIG1vZGUg ZW5hYmxlZCBhbmQgYnVmZmVyIGxpbWl0IGlzIHNldCBieSB0aGUgY2hvc2VuCj4+Pj4gKwlsZXZl bCBhbmQgaXMgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQuCj4+Pgo+Pj4gQXQgbGVhc3QgZm9yIEgu MjY0LCBhIGxldmVsIGlzIGNvbXBvc2Ugb2YgMyBsaW1pdHMuIE9uZSBpcyB0aGUgbWF4aW11bQo+ Pj4gbnVtYmVyIG9mIG1hY3JvYmxvY2tzLCB0aGlzIGlzIGlzIGV2aWRlbnRseSBub3QgdXNlIGZv ciBmcmFtZSBza2lwcGluZwo+Pj4gYW5kIGFscmVhZHkgY29uc3RyYWluZWQgaW4gVjRMMiAoYXNz dW1pbmcgdGhlIGRyaXZlciBkb2VzIG5vdCBpZ25vcmUKPj4+IHRoZSBsZXZlbCBjb250cm9sIG9m IGNvdXJzZSkuIFRoZSB0d28gb3RoZXIgbGltaXRzIGFyZSBkZWNvZGVkCj4+PiBtYWNyb2Jsb2Nr cy9zIGFuZCBlbmNvZGVkIGtiaXRzL3MuIEJvdGggYXJlIG1lYXN1cmUgb3ZlciB0aW1lLCB3aGlj aAo+Pj4gbWVhbnMgdGhlIE0yTSBlbmNvZGVyIG5lZWRzIHRvIGJlIHRpbWluZyBhd2FyZS4gSSB0 aGluayB0aGUgdGltZSBzb3VyY2UKPj4+IHNob3VsZCBiZSBkb2N1bWVudGVkLiBQZXJoYXBzIGl0 IGlzIG1hbmRhdG9yeSB0byBzZXQgYSBmcmFtZSBpbnRlcnZhbAo+Pj4gZm9yIHRoaXMgdG8gd29y ayA/IE9yIHdlIG5lZWQgc29tZSB0aW1lc3RhbXAgdG8gYWxsb3cgdmFyaWFibGUgZnJhbWUKPj4+ IGludGVydmFsID8gKEkgZG9uJ3QgdGhpbmsgdGhlIHNlY29uZCBpcyByZWFsbHkgYW4gb3B0aW9u IHdpdGhvdXQKPj4+IGV4dGVuZGluZyB0aGUgQVBJIGFnYWluLCBhbmQgY29uZnVzaW5nbHksIHNp bmNlIEkgdGhpbmsgd2UgaGF2ZSB1c2VkCj4+PiB0aGUgdGltZXN0YW1wIGZvciBvdGhlciBwdXJw b3NlIGFscmVhZHkpCj4+Cj4+IERvIHlvdSB3YW50IHRvIHNheSB0aGF0IHRoZSBlbmNvZGVyIGlu cHV0IHRpbWVzdGFtcCwgYml0cmF0ZSBjb250cm9sCj4+IChWNEwyX0NJRF9NUEVHX1ZJREVPX0JJ VFJBVEUpIGFuZCBTX1BBUk0gaXMgbm90IGVub3VnaCB0byBkZXNjcmliZQo+PiBGUkFNRV9TS0lQ X01PREVfTEVWRUxfTElNSVQgbW9kZT8KPiAKPiBJIGRvbid0IHRoaW5rIHdlIGhhdmUgc3BlYyB0 byBnaXZlIHRoZSBpbnB1dCB0aW1lc3RhbXAgYSBtZWFuaW5nIHRoYXQKPiBkcml2ZXIgY2FuIGlu dGVycHJldC4gSW4gZmFjdCBJIHRoaW5rIHdlIGdhdmUgaXQgYSBtZWFuaW5nIHRoYXQgdGhlCj4g ZHJpdmVyIG11c3Qgbm90IGludGVycHJldCBpdCAoYWthIGRyaXZlciBvcGFxdWUpLiBTbyByZW1h aW4gU19QQVJNIHRvCgpBdCBsZWFzdCBmb3IgVmVudXMgdGhlIHRpbWVzdGFtcHMgYXJlIHBhc3Nl ZCB0byB0aGUgZmlybXdhcmUgYW5kIHVzZWQgYnkKZW5jb2RlciByYXRlLWNvbnRyb2xsZXIuCgo+ IGdpdmUgYSBjbHVlLCBidXQgc29tZSBzdHJlYW0gZG9uJ3QgaGF2ZSBhIGZyYW1lcmF0ZSAobGlr ZSBSVFAgc3RyZWFtcywKPiB1bmxlc3Mgd3JpdHRlbiBpbiBiaXRzdHJlYW0pLgpJIHRoaW5rIHY0 bDIgY2xpZW50cyBzaG91bGQgYmUgYWJsZSB0byBndWVzcyB3aGF0IHdvdWxkIGJlIHRoZSBmcmFt ZQpyYXRlIGluIHN1Y2ggY2FzZXMsIG5vPwoKLS0gCnJlZ2FyZHMsClN0YW4KCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK