From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C791E70 for ; Mon, 9 Aug 2021 18:04:13 +0000 (UTC) Received: by mail-wr1-f44.google.com with SMTP id i4so5108489wru.0 for ; Mon, 09 Aug 2021 11:04:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QtQqwt3VI+trnMEx32LMLIe8V5MgPCsexLq/UHW/lps=; b=GlMehTIt3clj/opou7/HNpCqR8E7xoRAnzRjV0F096VOLDGNY9Z6AW3P+DplXaIDz+ 6WH2yU6AtDoE0lBsNmJDPgSFOGL89BHxGIS9jbSVAZh3qLH7Hcchr1PlS4zqjC1fXRvG LRw/0w0R1QInmHmlc4p/QWzYH0TCiYfWWBxotZRyM3KPm1zqf7Avva9OkfDe4pSgCg8E 72jdVHx3H6vGpvKnYZymzr4jXMdn+oLC/e5OxfruCfG0vrYZsUGUpIzhzZ92ml/Utthb ByLrtgW4ERnd4B/bKiH5z8C4yqZx8BR+ePUnX7HTI+rFiWuqUgngarXnR6T1b7ew3IAZ VRhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QtQqwt3VI+trnMEx32LMLIe8V5MgPCsexLq/UHW/lps=; b=tFKOIWMHhxEHrverGaFGyPbbyzGzYdlFnbV4OPZ1CicaLD7APKSOuR21vMRjtSGLGJ 0JjkMiv8LCnTq61SQgZ3/1rYXj3k1NaUkuXZAJA5vumv6DiInkOFeNfzR+sbaJWhaUJc 6UgAZWG9Z5Vczj9ofcZ24OTWWV0xXpdEd07zrcVVkMIsGIcMW8Ra4h08vwPXrw0+VCXu 7T4iIbsH0+PVUimcb1PDhP/h0zMLsRNa009kOmu7JKw2/t9V7eNnrkkCeEtMEiMEKbdP O5s12+M4S6kCoEh50RmuwsHdz6GPlDQqRi8o15CfXdf6nSrkS5ElUy+g0ej0zg+jNz6F qkrQ== X-Gm-Message-State: AOAM532VBrKDsO88UU9gAxOVddqK3+V8kxVLu21Zx9/lBuhher1SoHL8 pI7xeqPBeffAUOsimv23VX8= X-Google-Smtp-Source: ABdhPJxPG8cvzM8MDr2R5bsDfeI9wG/Eo1v9ODMH3nlO48uHgQ/ic0QcHaH4kOr2o6bMLd3LMDn35w== X-Received: by 2002:a5d:4e8f:: with SMTP id e15mr26545217wru.313.1628532251963; Mon, 09 Aug 2021 11:04:11 -0700 (PDT) Received: from kista.localnet (cpe-86-58-46-198.static.triera.net. [86.58.46.198]) by smtp.gmail.com with ESMTPSA id b20sm19508185wmj.48.2021.08.09.11.04.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 11:04:11 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, Andrzej Pietrasiewicz Cc: Andrzej Pietrasiewicz , Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Mauro Carvalho Chehab , Nicolas Dufresne , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com, Ezequiel Garcia , Adrian Ratiu , Daniel Almeida Subject: Re: [PATCH v3 05/10] media: uapi: Add VP9 stateless decoder controls Date: Mon, 09 Aug 2021 20:04:09 +0200 Message-ID: <5154683.x8GX3iSW2O@kista> In-Reply-To: <20210805144246.11998-6-andrzej.p@collabora.com> References: <20210805144246.11998-1-andrzej.p@collabora.com> <20210805144246.11998-6-andrzej.p@collabora.com> Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Hi Andrzej! Dne =C4=8Detrtek, 05. avgust 2021 ob 16:42:41 CEST je Andrzej Pietrasiewicz= =20 napisal(a): > Add the VP9 stateless decoder controls plus the documentation that goes > with it. >=20 > Signed-off-by: Boris Brezillon > Co-developed-by: Ezequiel Garcia > Signed-off-by: Ezequiel Garcia > Signed-off-by: Adrian Ratiu > Signed-off-by: Andrzej Pietrasiewicz > Co-developed-by: Daniel Almeida > Signed-off-by: Daniel Almeida > --- > .../userspace-api/media/v4l/biblio.rst | 10 + > .../media/v4l/ext-ctrls-codec-stateless.rst | 545 ++++++++++++++++++ > .../media/v4l/pixfmt-compressed.rst | 15 + > .../media/v4l/vidioc-g-ext-ctrls.rst | 8 + > .../media/v4l/vidioc-queryctrl.rst | 12 + > .../media/videodev2.h.rst.exceptions | 2 + > drivers/media/v4l2-core/v4l2-ctrls-core.c | 174 ++++++ > drivers/media/v4l2-core/v4l2-ctrls-defs.c | 8 + > drivers/media/v4l2-core/v4l2-ioctl.c | 1 + > include/media/v4l2-ctrls.h | 4 + > include/uapi/linux/v4l2-controls.h | 433 ++++++++++++++ > include/uapi/linux/videodev2.h | 6 + > 12 files changed, 1218 insertions(+) >=20 > diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2- controls.h > index 5532b5f68493..8f8c3c1ad885 100644 > --- a/include/uapi/linux/v4l2-controls.h > +++ b/include/uapi/linux/v4l2-controls.h > @@ -2010,6 +2010,439 @@ struct v4l2_ctrl_hdr10_mastering_display { > __u32 min_display_mastering_luminance; > }; > =20 > +/* Stateless VP9 controls */ > + > +/** > + * enum v4l2_vp9_loop_filter_flags - VP9 loop filter flags > + * > + * @V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED: the filter level depends on > + * the mode and reference frame used to predict a block > + * @V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE: the bitstream contains=20 additional > + * syntax elements that specify which mode and reference frame deltas=20 are to be updated > + * > + * Those are the flags that may be passed to &v4l2_vp9_loop_filter.flags= =2E See > + * section '7.2.8 Loop filter semantics' of the VP9 specification for mo= re > + * details. > + */ > +enum v4l2_vp9_loop_filter_flags { > + V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED =3D 1 << 0, > + V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE =3D 1 << 1, > +}; > + > +/** > + * struct v4l2_vp9_loop_filter - VP9 loop filter parameters > + * > + * @ref_deltas: contains the adjustment needed for the filter level base= d on=20 the chosen > + * reference frame. If this syntax element is not present in the=20 bitstream, users > + * should pass its last value. > + * @mode_deltas: contains the adjustment needed for the filter level bas= ed=20 on the chosen mode. > + * If this syntax element is not present in the bitstream, users > + * should pass its last value. > + * @level: indicates the loop filter strength > + * @sharpness: indicates the sharpness level > + * @flags: combination of V4L2_VP9_LOOP_FILTER_FLAG_* flags > + * @reserved: padding field. Should be zeroed by applications. > + * > + * This structure contains all loop filter related parameters. See secti= ons > + * '7.2.8 Loop filter semantics' of the VP9 specification for more detai= ls. > + */ > +struct v4l2_vp9_loop_filter { > + __s8 ref_deltas[4]; > + __s8 mode_deltas[2]; > + __u8 level; > + __u8 sharpness; > + __u8 flags; > + __u8 reserved[7]; > +}; > + > +/** > + * struct v4l2_vp9_quantization - VP9 quantization parameters > + * > + * @base_q_idx: indicates the base frame qindex > + * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx > + * @delta_q_uv_dc: indicates the UV DC quantizer relative to base_q_idx > + * @delta_q_uv_ac: indicates the UV AC quantizer relative to base_q_idx > + * @reserved: padding field. Should be zeroed by applications. > + * > + * Encodes the quantization parameters. See section '7.2.9 Quantization= =20 params > + * syntax' of the VP9 specification for more details. > + */ > +struct v4l2_vp9_quantization { > + __u8 base_q_idx; > + __s8 delta_q_y_dc; > + __s8 delta_q_uv_dc; > + __s8 delta_q_uv_ac; > + __u8 reserved[4]; > +}; > + > +/** > + * enum v4l2_vp9_segmentation_flags - VP9 segmentation flags > + * > + * @V4L2_VP9_SEGMENTATION_FLAG_ENABLED: indicates that this frame makes = use=20 of > + * the segmentation tool > + * @V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP: indicates that the segmentati= on=20 map > + * should be updated during the decoding of this frame > + * @V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE: indicates that the updat= es=20 to > + * the segmentation map are coded relative to the existing=20 segmentation map > + * @V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA: indicates that new parameter= s=20 are > + * about to be specified for each segment > + * @V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE: indicates that the > + * segmentation parameters represent the actual values to be used > + * > + * Those are the flags that may be passed to &v4l2_vp9_segmentation.flag= s.=20 See > + * section '7.2.10 Segmentation params syntax' of the VP9 specification = for > + * more details. > + */ > +enum v4l2_vp9_segmentation_flags { > + V4L2_VP9_SEGMENTATION_FLAG_ENABLED =3D 1 << 0, > + V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP =3D 1 << 1, > + V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE =3D 1 << 2, > + V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA =3D 1 << 3, > + V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE =3D 1 << 4, > +}; > + > +#define V4L2_VP9_SEGMENT_FEATURE_ENABLED(id) (1 << (id)) > +#define V4L2_VP9_SEGMENT_FEATURE_ENABLED_MASK 0xf > + > +/** > + * enum v4l2_vp9_segment_feature - VP9 segment feature IDs > + * > + * @V4L2_VP9_SEG_LVL_ALT_Q: quantizer segment feature > + * @V4L2_VP9_SEG_LVL_ALT_L: loop filter segment feature > + * @V4L2_VP9_SEG_LVL_REF_FRAME reference frame segment feature > + * @V4L2_VP9_SEG_LVL_SKIP: skip segment feature > + * @V4L2_VP9_SEG_LVV_MAX: number of segment features > + * > + * Segment feature IDs. See section '7.2.10 Segmentation params syntax' = of=20 the > + * VP9 specification for more details. > + */ > +enum v4l2_vp9_segment_feature { > + V4L2_VP9_SEG_LVL_ALT_Q, > + V4L2_VP9_SEG_LVL_ALT_L, > + V4L2_VP9_SEG_LVL_REF_FRAME, > + V4L2_VP9_SEG_LVL_SKIP, > + V4L2_VP9_SEG_LVL_MAX, > +}; What is the reason not to assign values like 1 << 0, 1 << 1, etc. and inste= ad=20 provide separate macro V4L2_VP9_SEGMENT_FEATURE_ENABLED()? This is a depart= ure=20 from current practice. > + > +/** > + * struct v4l2_vp9_segmentation - VP9 segmentation parameters > + * > + * @feature_data: data attached to each feature. Data entry is only vali= d=20 if the feature is enabled > + * @feature_enabled: bitmask defining which features are enabled in each= =20 segment > + * @tree_probs: specifies the probability values to be used when > + * decoding a Segment-ID. See '5.15. Segmentation map' section of the=20 VP9 specification > + * for more details. > + * @pred_probs: specifies the probability values to be used when decodin= g a > + * Predicted-Segment-ID. See '6.4.14. Get segment id syntax' section=20 of :ref:`vp9` > + * for more details. > + * @flags: combination of V4L2_VP9_SEGMENTATION_FLAG_* flags > + * @reserved: padding field. Should be zeroed by applications. > + * > + * Encodes the quantization parameters. See section '7.2.10 Segmentation= =20 params syntax' of > + * the VP9 specification for more details. > + */ > +struct v4l2_vp9_segmentation { > + __s16 feature_data[8][4]; > + __u8 feature_enabled[8]; > + __u8 tree_probs[7]; > + __u8 pred_probs[3]; > + __u8 flags; > + __u8 reserved[5]; > +}; > + > +/** > + * enum v4l2_vp9_intra_prediction_mode - VP9 Intra prediction modes > + * > + * @V4L2_VP9_INTRA_PRED_MODE_DC_PRED: DC intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_V_PRED: vertical intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_H_PRED: horizontal intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_D45_PRED: D45 intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_D135_PRED: D135 intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_D117_PRED: D117 intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_D153_PRED: D153 intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_D207_PRED: D207 intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_D63_PRED: D63 intra prediction > + * @V4L2_VP9_INTRA_PRED_MODE_TM_PRED: True Motion intra prediction > + * > + * See section '7.4.5 Intra frame mode info semantics' for more details. > + */ > +enum v4l2_vp9_intra_prediction_mode { > + V4L2_VP9_INTRA_PRED_MODE_DC_PRED, > + V4L2_VP9_INTRA_PRED_MODE_V_PRED, > + V4L2_VP9_INTRA_PRED_MODE_H_PRED, > + V4L2_VP9_INTRA_PRED_MODE_D45_PRED, > + V4L2_VP9_INTRA_PRED_MODE_D135_PRED, > + V4L2_VP9_INTRA_PRED_MODE_D117_PRED, > + V4L2_VP9_INTRA_PRED_MODE_D153_PRED, > + V4L2_VP9_INTRA_PRED_MODE_D207_PRED, > + V4L2_VP9_INTRA_PRED_MODE_D63_PRED, > + V4L2_VP9_INTRA_PRED_MODE_TM_PRED, > +}; I dislike using enums without assigning values. I see that historically (at= =20 the beginning of this file), values were always assigned. However, if=20 maintainers agree with you, that's fine by me. > + > +/** > + * enum v4l2_vp9_reset_frame_context - Valid values for > + * &v4l2_ctrl_vp9_frame->reset_frame_context > + * > + * @V4L2_VP9_RESET_FRAME_CTX_NONE: don't reset any frame context > + * @V4L2_VP9_RESET_FRAME_CTX_SPEC: reset the frame context pointed by > + * &v4l2_ctrl_vp9_frame.frame_context_idx > + * @V4L2_VP9_RESET_FRAME_CTX_ALL: reset all frame contexts > + * > + * See section '7.2 Uncompressed header semantics' of the VP9 specificat= ion=20 for more details. > + */ > +enum v4l2_vp9_reset_frame_context { > + V4L2_VP9_RESET_FRAME_CTX_NONE, > + V4L2_VP9_RESET_FRAME_CTX_SPEC, > + V4L2_VP9_RESET_FRAME_CTX_ALL, > +}; > + > +/** > + * enum v4l2_vp9_interpolation_filter - VP9 interpolation filter types > + * > + * @V4L2_VP9_INTERP_FILTER_EIGHTTAP: eight tap filter > + * @V4L2_VP9_INTERP_FILTER_EIGHTTAP_SMOOTH: eight tap smooth filter > + * @V4L2_VP9_INTERP_FILTER_EIGHTTAP_SHARP: eight tap sharp filter > + * @V4L2_VP9_INTERP_FILTER_BILINEAR: bilinear filter > + * @V4L2_VP9_INTERP_FILTER_SWITCHABLE: filter selection is signaled at t= he=20 block level > + * > + * See section '7.2.7 Interpolation filter semantics' of the VP9=20 specification > + * for more details. > + */ > +enum v4l2_vp9_interpolation_filter { > + V4L2_VP9_INTERP_FILTER_EIGHTTAP, > + V4L2_VP9_INTERP_FILTER_EIGHTTAP_SMOOTH, > + V4L2_VP9_INTERP_FILTER_EIGHTTAP_SHARP, > + V4L2_VP9_INTERP_FILTER_BILINEAR, > + V4L2_VP9_INTERP_FILTER_SWITCHABLE, > +}; > + > +/** > + * enum v4l2_vp9_reference_mode - VP9 reference modes > + * > + * @V4L2_VP9_REFERENCE_MODE_SINGLE_REFERENCE: indicates that all the int= er=20 blocks use only a > + * single reference frame to generate motion compensated prediction > + * @V4L2_VP9_REFERENCE_MODE_COMPOUND_REFERENCE: requires all the inter=20 blocks to use compound mode. > + * Single reference frame prediction is not allowed > + * @V4L2_VP9_REFERENCE_MODE_SELECT: allows each individual inter block t= o=20 select between single > + * and compound prediction modes > + * > + * See section '7.3.6 Frame reference mode semantics' of the VP9=20 specification > + * for more details. > + */ > +enum v4l2_vp9_reference_mode { > + V4L2_VP9_REFERENCE_MODE_SINGLE_REFERENCE, > + V4L2_VP9_REFERENCE_MODE_COMPOUND_REFERENCE, > + V4L2_VP9_REFERENCE_MODE_SELECT, > +}; > + > +/** > + * enum v4l2_vp9_tx_mode - VP9 TX modes > + * > + * @V4L2_VP9_TX_MODE_ONLY_4X4: transform size is 4x4 > + * @V4L2_VP9_TX_MODE_ALLOW_8X8: transform size can be up to 8x8 > + * @V4L2_VP9_TX_MODE_ALLOW_16X16: transform size can be up to 16x16 > + * @V4L2_VP9_TX_MODE_ALLOW_32X32: transform size can be up to 32x32 > + * @V4L2_VP9_TX_MODE_SELECT: bitstream contains the transform size for e= ach=20 block > + * > + * See section '7.3.1 Tx mode semantics' of the VP9 specification for mo= re=20 details. > + */ > +enum v4l2_vp9_tx_mode { > + V4L2_VP9_TX_MODE_ONLY_4X4, > + V4L2_VP9_TX_MODE_ALLOW_8X8, > + V4L2_VP9_TX_MODE_ALLOW_16X16, > + V4L2_VP9_TX_MODE_ALLOW_32X32, > + V4L2_VP9_TX_MODE_SELECT, > +}; > + > +/** > + * enum v4l2_vp9_frame_flags - VP9 frame flags > + * @V4L2_VP9_FRAME_FLAG_KEY_FRAME: the frame is a key frame > + * @V4L2_VP9_FRAME_FLAG_SHOW_FRAME: the frame should be displayed > + * @V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT: the decoding should be error=20 resilient > + * @V4L2_VP9_FRAME_FLAG_INTRA_ONLY: the frame does not reference other=20 frames > + * @V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV: the frame can use high=20 precision motion vectors > + * @V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX: frame context should be updat= ed=20 after decoding > + * @V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE: parallel decoding is used > + * @V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING: vertical subsampling is enabled > + * @V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING: horizontal subsampling is enabled > + * @V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING: full UV range is used > + * > + * Check the VP9 specification for more details. > + */ > +enum v4l2_vp9_frame_flags { > + V4L2_VP9_FRAME_FLAG_KEY_FRAME =3D 1 << 0, > + V4L2_VP9_FRAME_FLAG_SHOW_FRAME =3D 1 << 1, > + V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT =3D 1 << 2, > + V4L2_VP9_FRAME_FLAG_INTRA_ONLY =3D 1 << 3, > + V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV =3D 1 << 4, > + V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX =3D 1 << 5, > + V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE =3D 1 << 6, > + V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING =3D 1 << 7, > + V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING =3D 1 << 8, > + V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING =3D 1 << 9, > +}; > + > +/** > + * enum v4l2_vp9_ref_frame_sign_bias - Whether ref_frame_sign_bias is 1 = for=20 a given reference frame > + * @V4L2_VP9_SIGN_BIAS_LAST: ref_frame_sign_bias is 1 for the "last"=20 reference frame > + * @V4L2_VP9_SIGN_BIAS_GOLDEN: ref_frame_sign_bias is 1 for the "golden"= =20 reference frame > + * @V4L2_VP9_SIGN_BIAS_ALT: ref_frame_sign_bias is 1 for the "alt"=20 reference frame > + */ > + > +enum v4l2_vp9_ref_frame_sign_bias { > + V4L2_VP9_SIGN_BIAS_LAST, > + V4L2_VP9_SIGN_BIAS_GOLDEN, > + V4L2_VP9_SIGN_BIAS_ALT, > +}; As I mentioned before, you probably want to assign values here, since value= s=20 are used as bitmap. > + > +#define V4L2_VP9_PROFILE_MAX 3 > + > +#define V4L2_CID_STATELESS_VP9_FRAME (V4L2_CID_CODEC_STATELESS_BASE +=20 300) > +/** > + * struct v4l2_ctrl_vp9_frame - VP9 frame decoding control > + * > + * @lf: loop filter parameters. See &v4l2_vp9_loop_filter for more detai= ls > + * @quant: quantization parameters. See &v4l2_vp9_quantization for more= =20 details > + * @seg: segmentation parameters. See &v4l2_vp9_segmentation for more=20 details > + * @flags: combination of V4L2_VP9_FRAME_FLAG_* flags > + * @compressed_header_size: compressed header size in bytes > + * @uncompressed_header_size: uncompressed header size in bytes > + * @frame_width_minus_1: add 1 to it and you'll get the frame width=20 expressed in pixels > + * @frame_height_minus_1: add 1 to it and you'll get the frame height=20 expressed in pixels > + * @render_width_minus_1: add 1 to it and you'll get the expected render= =20 width expressed in > + * pixels. This is not used during the decoding process but might be=20 used by HW scalers > + * to prepare a frame that's ready for scanout > + * @render_height_minus_1: add 1 to it and you'll get the expected rende= r=20 height expressed in > + * pixels. This is not used during the decoding process but might be=20 used by HW scalers > + * to prepare a frame that's ready for scanout > + * @last_frame_ts: "last" reference buffer timestamp. > + * The timestamp refers to the timestamp field in struct v4l2_buffer. > + * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64. > + * @golden_frame_ts: "golden" reference buffer timestamp. > + * The timestamp refers to the timestamp field in struct v4l2_buffer. > + * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64. > + * @alt_frame_ts: "alt" reference buffer timestamp. > + * The timestamp refers to the timestamp field in struct v4l2_buffer. > + * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64. > + * @ref_frame_sign_bias: a bitfield specifying whether the sign bias is = set=20 for a given > + * reference frame. See &v4l2_vp9_ref_frame_sign_bias for more=20 details. > + * @reset_frame_context: specifies whether the frame context should be r= eset=20 to default values. > + * See &v4l2_vp9_reset_frame_context for more details > + * @frame_context_idx: frame context that should be used/updated > + * @profile: VP9 profile. Can be 0, 1, 2 or 3 > + * @bit_depth: bits per components. Can be 8, 10 or 12. Note that not al= l=20 profiles support > + * 10 and/or 12 bits depths > + * @interpolation_filter: specifies the filter selection used for perfor= ming=20 inter prediction. > + * See &v4l2_vp9_interpolation_filter for more details > + * @tile_cols_log2: specifies the base 2 logarithm of the width of each = tile=20 (where the width > + * is measured in units of 8x8 blocks). Shall be less than or equal=20 to 6 > + * @tile_rows_log2: specifies the base 2 logarithm of the height of each= =20 tile (where the height > + * is measured in units of 8x8 blocks) > + * @tx_mode: specifies the TX mode. See &v4l2_vp9_tx_mode for more detai= ls > + * @reference_mode: specifies the type of inter prediction to be used. S= ee > + * &v4l2_vp9_reference_mode for more details > + * @reserved: padding field. Should be zeroed by applications. > + */ > +struct v4l2_ctrl_vp9_frame { > + struct v4l2_vp9_loop_filter lf; > + struct v4l2_vp9_quantization quant; > + struct v4l2_vp9_segmentation seg; > + __u32 flags; > + __u16 compressed_header_size; > + __u16 uncompressed_header_size; > + __u16 frame_width_minus_1; > + __u16 frame_height_minus_1; > + __u16 render_width_minus_1; > + __u16 render_height_minus_1; > + __u64 last_frame_ts; > + __u64 golden_frame_ts; > + __u64 alt_frame_ts; > + __u8 ref_frame_sign_bias; > + __u8 reset_frame_context; > + __u8 frame_context_idx; > + __u8 profile; > + __u8 bit_depth; > + __u8 interpolation_filter; > + __u8 tile_cols_log2; > + __u8 tile_rows_log2; > + __u8 tx_mode; AFAICS, TX mode is part of compressed header in chapter 6.3.1. Any reason i= t's=20 here and not in v4l2_ctrl_vp9_compressed_hdr_probs? > + __u8 reference_mode; > + __u8 reserved[6]; > +}; > + > +#define V4L2_VP9_NUM_FRAME_CTX 4 > + > +/** > + * struct v4l2_vp9_mv_compressed_hdr_probs - VP9 Motion vector probabili= ty=20 updates > + * @joint: motion vector joint probability updates > + * @sign: motion vector sign probability updates > + * @classes: motion vector class probability updates > + * @class0_bit: motion vector class0 bit probability updates > + * @bits: motion vector bits probability updates > + * @class0_fr: motion vector class0 fractional bit probability updates > + * @fr: motion vector fractional bit probability updates > + * @class0_hp: motion vector class0 high precision fractional bit=20 probability updates > + * @hp: motion vector high precision fractional bit probability updates > + * > + * This structure contains new values of motion vector probabilities. > + * A value of zero in an array element means there is no update of the=20 relevant probability. > + * See `struct v4l2_vp9_prob_updates` for details. > + */ > +struct v4l2_vp9_mv_compressed_hdr_probs { > + __u8 joint[3]; > + __u8 sign[2]; > + __u8 classes[2][10]; > + __u8 class0_bit[2]; > + __u8 bits[2][10]; > + __u8 class0_fr[2][2][3]; > + __u8 fr[2][3]; > + __u8 class0_hp[2]; > + __u8 hp[2]; > +}; > + > +#define V4L2_CID_STATELESS_VP9_COMPRESSED_HDR_PROBS=09 (V4L2_CID_CODEC_STATELESS_BASE + 301) > +/** > + * struct v4l2_ctrl_vp9_compressed_hdr_probs - VP9 probability updates=20 control > + * @tx8: TX 8x8 probability updates > + * @tx16: TX 16x16 probability updates > + * @tx32: TX 32x32 probability updates > + * @coef: coefficient probability updates > + * @skip: skip probability updates > + * @inter_mode: inter mode probability updates > + * @interp_filter: interpolation filter probability updates > + * @is_inter: is inter-block probability updates > + * @comp_mode: compound prediction mode probability updates > + * @single_ref: single ref probability updates > + * @comp_ref: compound ref probability updates > + * @y_mode: Y prediction mode probability updates > + * @uv_mode: UV prediction mode probability updates > + * @partition: partition probability updates > + * @mv: motion vector probability updates > + * > + * This structure holds the probabilities update as parsed in the=20 compressed > + * header (Spec 6.3). These values represent the value of probability=20 update after > + * being translated with inv_map_table[] (see 6.3.5). A value of zero in= an=20 array element > + * means that there is no update of the relevant probability. > + */ > +struct v4l2_ctrl_vp9_compressed_hdr_probs { > + __u8 tx8[2][1]; > + __u8 tx16[2][2]; > + __u8 tx32[2][3]; > + __u8 coef[4][2][2][6][6][3]; > + __u8 skip[3]; > + __u8 inter_mode[7][3]; > + __u8 interp_filter[4][2]; > + __u8 is_inter[4]; > + __u8 comp_mode[5]; > + __u8 single_ref[5][2]; > + __u8 comp_ref[5]; > + __u8 y_mode[4][9]; > + __u8 uv_mode[10][9]; > + __u8 partition[16][3]; > + > + struct v4l2_vp9_mv_compressed_hdr_probs mv; v4l2_ctrl_vp9_compressed_hdr_probs and v4l2_vp9_mv_compressed_hdr_probs are= so=20 confusingly similar, it's easy to mess up quickly. Can we find more distinc= t=20 names? Note, I just skimmed this patch, maybe I'll have some more questions later.= =20 Great work! Best regards, Jernej > +}; > + > /* MPEG-compression definitions kept for backwards compatibility */ > #ifndef __KERNEL__ > #define V4L2_CTRL_CLASS_MPEG V4L2_CTRL_CLASS_CODEC > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev= 2.h > index 58392dcd3bf5..4abe4362519e 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -703,6 +703,7 @@ struct v4l2_pix_format { > #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ > #define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') /* VP8 pa= rsed=20 frame */ > #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */ > +#define V4L2_PIX_FMT_VP9_FRAME v4l2_fourcc('V', 'P', '9', 'F') /* VP9 pa= rsed=20 frame */ > #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC ak= a H. 265 */ > #define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Wa= lsh=20 Hadamard Transform (vicodec) */ > #define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H') = /*=20 Stateless FWHT (vicodec) */ > @@ -1755,6 +1756,8 @@ struct v4l2_ext_control { > struct v4l2_ctrl_mpeg2_sequence __user=20 *p_mpeg2_sequence; > struct v4l2_ctrl_mpeg2_picture __user *p_mpeg2_picture; > struct v4l2_ctrl_mpeg2_quantisation __user=20 *p_mpeg2_quantisation; > + struct v4l2_ctrl_vp9_compressed_hdr_probs __user=20 *p_vp9_compressed_hdr_probs; > + struct v4l2_ctrl_vp9_frame __user *p_vp9_frame; > void __user *ptr; > }; > } __attribute__ ((packed)); > @@ -1819,6 +1822,9 @@ enum v4l2_ctrl_type { > V4L2_CTRL_TYPE_MPEG2_QUANTISATION =3D 0x0250, > V4L2_CTRL_TYPE_MPEG2_SEQUENCE =3D 0x0251, > V4L2_CTRL_TYPE_MPEG2_PICTURE =3D 0x0252, > + > + V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR_PROBS =3D 0x0260, > + V4L2_CTRL_TYPE_VP9_FRAME =3D 0x0261, > }; > =20 > /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ > --=20 > 2.17.1 >=20 >=20 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC3D0C4338F for ; Mon, 9 Aug 2021 18:04:33 +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 82DC1601FC for ; Mon, 9 Aug 2021 18:04:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 82DC1601FC Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=81EW8wApi2jfEwaGE3XdA393OiIV+RJWNf5TlSLbi9s=; b=g0qFd9lKjpk7m7 Os1aBphApGM9RAS/1Uboei9Y10BAtXE8F18k9B6qA0yzyfF5pdPpxzQtsQNDjqvq2lCRm7TAcPNWt hLjrh+zacM069BUUQukWm52krOYaCBIewgzDPQPqcU6+JMW1uY3eQih7OyIShFeHCPVEwFSwXsyfi mZGHEcPlkEUkwW0WWoiSFawwvu90WBrQJIahi3vEeqM746DqkEXcwijJM+rISsYasnY2MFhB2sWVY INU3Mer/GbTQh1It+8ldD0D9KVZnx+iZFU2IZdVggYemrGKQMX1mIoX0qG4KSxFeKlklGTtG9iJYf rnpzyoG1tdCkxqNoktZw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mD9dV-001dnS-QY; Mon, 09 Aug 2021 18:04:29 +0000 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mD9dF-001djL-Tw; Mon, 09 Aug 2021 18:04:17 +0000 Received: by mail-wr1-x42e.google.com with SMTP id l18so22600977wrv.5; Mon, 09 Aug 2021 11:04:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QtQqwt3VI+trnMEx32LMLIe8V5MgPCsexLq/UHW/lps=; b=GlMehTIt3clj/opou7/HNpCqR8E7xoRAnzRjV0F096VOLDGNY9Z6AW3P+DplXaIDz+ 6WH2yU6AtDoE0lBsNmJDPgSFOGL89BHxGIS9jbSVAZh3qLH7Hcchr1PlS4zqjC1fXRvG LRw/0w0R1QInmHmlc4p/QWzYH0TCiYfWWBxotZRyM3KPm1zqf7Avva9OkfDe4pSgCg8E 72jdVHx3H6vGpvKnYZymzr4jXMdn+oLC/e5OxfruCfG0vrYZsUGUpIzhzZ92ml/Utthb ByLrtgW4ERnd4B/bKiH5z8C4yqZx8BR+ePUnX7HTI+rFiWuqUgngarXnR6T1b7ew3IAZ VRhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QtQqwt3VI+trnMEx32LMLIe8V5MgPCsexLq/UHW/lps=; b=HsfdadQ9XOPnsC0UoOVlQe+/wtWc+1eZpJpCFoRcGYPyrh7ep1dw/ebEBd/BrjeE9F ce9R8/MVhU2yZe4rmxosh2gkuj+fRAi7WbvmWgQlp8bo8h7XfDr1RtAS8/2s4RoATDkF HinKBisw7v+uCUOXpiUnAT97IqrtA5/LJzAy6n0Rdte3TNwIFbujnN5pGzyqRhRVssFj BkIx25EYiIolIpCPIQXh4rXDahcQAYywHYgbfYqikq2wOVO1ORq9FgK/XRRTKLteQZbB J2ZDAkE17cS1F4fdsuhy/1VEse0N0RZyw37tHY3b9GpGT0SI/gbv4NbL+uJ4DobJCgL7 H5jw== X-Gm-Message-State: AOAM531o1TwsuOjml/tC778pQgMMSamL9N4qzWY8rtZJ6w+ZQ9DEOfzk y/QWCHgm+k2Ll49ramY2UBI= X-Google-Smtp-Source: ABdhPJxPG8cvzM8MDr2R5bsDfeI9wG/Eo1v9ODMH3nlO48uHgQ/ic0QcHaH4kOr2o6bMLd3LMDn35w== X-Received: by 2002:a5d:4e8f:: with SMTP id e15mr26545217wru.313.1628532251963; Mon, 09 Aug 2021 11:04:11 -0700 (PDT) Received: from kista.localnet (cpe-86-58-46-198.static.triera.net. [86.58.46.198]) by smtp.gmail.com with ESMTPSA id b20sm19508185wmj.48.2021.08.09.11.04.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 11:04:11 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, Andrzej Pietrasiewicz Cc: Andrzej Pietrasiewicz , Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Mauro Carvalho Chehab , Nicolas Dufresne , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com, Ezequiel Garcia , Adrian Ratiu , Daniel Almeida Subject: Re: [PATCH v3 05/10] media: uapi: Add VP9 stateless decoder controls Date: Mon, 09 Aug 2021 20:04:09 +0200 Message-ID: <5154683.x8GX3iSW2O@kista> In-Reply-To: <20210805144246.11998-6-andrzej.p@collabora.com> References: <20210805144246.11998-1-andrzej.p@collabora.com> <20210805144246.11998-6-andrzej.p@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210809_110414_057737_FB4CB968 X-CRM114-Status: GOOD ( 31.07 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgQW5kcnplaiEKCkRuZSDEjWV0cnRlaywgMDUuIGF2Z3VzdCAyMDIxIG9iIDE2OjQyOjQxIENF U1QgamUgQW5kcnplaiBQaWV0cmFzaWV3aWN6IApuYXBpc2FsKGEpOgo+IEFkZCB0aGUgVlA5IHN0 YXRlbGVzcyBkZWNvZGVyIGNvbnRyb2xzIHBsdXMgdGhlIGRvY3VtZW50YXRpb24gdGhhdCBnb2Vz Cj4gd2l0aCBpdC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJy ZXppbGxvbkBjb2xsYWJvcmEuY29tPgo+IENvLWRldmVsb3BlZC1ieTogRXplcXVpZWwgR2FyY2lh IDxlemVxdWllbEBjb2xsYWJvcmEuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEV6ZXF1aWVsIEdhcmNp YSA8ZXplcXVpZWxAY29sbGFib3JhLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBZHJpYW4gUmF0aXUg PGFkcmlhbi5yYXRpdUBjb2xsYWJvcmEuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFuZHJ6ZWogUGll dHJhc2lld2ljeiA8YW5kcnplai5wQGNvbGxhYm9yYS5jb20+Cj4gQ28tZGV2ZWxvcGVkLWJ5OiBE YW5pZWwgQWxtZWlkYSA8ZGFuaWVsLmFsbWVpZGFAY29sbGFib3JhLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBEYW5pZWwgQWxtZWlkYSA8ZGFuaWVsLmFsbWVpZGFAY29sbGFib3JhLmNvbT4KPiAtLS0K PiAgLi4uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL2JpYmxpby5yc3QgICAgICAgIHwgIDEwICsK PiAgLi4uL21lZGlhL3Y0bC9leHQtY3RybHMtY29kZWMtc3RhdGVsZXNzLnJzdCAgIHwgNTQ1ICsr KysrKysrKysrKysrKysrKwo+ICAuLi4vbWVkaWEvdjRsL3BpeGZtdC1jb21wcmVzc2VkLnJzdCAg ICAgICAgICAgfCAgMTUgKwo+ICAuLi4vbWVkaWEvdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy5yc3Qg ICAgICAgICAgfCAgIDggKwo+ICAuLi4vbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeWN0cmwucnN0ICAg ICAgICAgICAgfCAgMTIgKwo+ICAuLi4vbWVkaWEvdmlkZW9kZXYyLmgucnN0LmV4Y2VwdGlvbnMg ICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWNv cmUuYyAgICAgfCAxNzQgKysrKysrCj4gIGRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3Ry bHMtZGVmcy5jICAgICB8ICAgOCArCj4gIGRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaW9j dGwuYyAgICAgICAgICB8ICAgMSArCj4gIGluY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oICAgICAg ICAgICAgICAgICAgICB8ICAgNCArCj4gIGluY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xz LmggICAgICAgICAgICB8IDQzMyArKysrKysrKysrKysrKwo+ICBpbmNsdWRlL3VhcGkvbGludXgv dmlkZW9kZXYyLmggICAgICAgICAgICAgICAgfCAgIDYgKwo+ICAxMiBmaWxlcyBjaGFuZ2VkLCAx MjE4IGluc2VydGlvbnMoKykKPiAKCjxzbmlwPgoKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBp L2xpbnV4L3Y0bDItY29udHJvbHMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC92NGwyLQpjb250cm9s cy5oCj4gaW5kZXggNTUzMmI1ZjY4NDkzLi44ZjhjM2MxYWQ4ODUgMTAwNjQ0Cj4gLS0tIGEvaW5j bHVkZS91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC92NGwyLWNvbnRyb2xzLmgKPiBAQCAtMjAxMCw2ICsyMDEwLDQzOSBAQCBzdHJ1Y3QgdjRsMl9j dHJsX2hkcjEwX21hc3RlcmluZ19kaXNwbGF5IHsKPiAgCV9fdTMyIG1pbl9kaXNwbGF5X21hc3Rl cmluZ19sdW1pbmFuY2U7Cj4gIH07Cj4gIAo+ICsvKiBTdGF0ZWxlc3MgVlA5IGNvbnRyb2xzICov Cj4gKwo+ICsvKioKPiArICogZW51bSB2NGwyX3ZwOV9sb29wX2ZpbHRlcl9mbGFncyAtIFZQOSBs b29wIGZpbHRlciBmbGFncwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfTE9PUF9GSUxURVJfRkxBR19E RUxUQV9FTkFCTEVEOiB0aGUgZmlsdGVyIGxldmVsIGRlcGVuZHMgb24KPiArICoJdGhlIG1vZGUg YW5kIHJlZmVyZW5jZSBmcmFtZSB1c2VkIHRvIHByZWRpY3QgYSBibG9jawo+ICsgKiBAVjRMMl9W UDlfTE9PUF9GSUxURVJfRkxBR19ERUxUQV9VUERBVEU6IHRoZSBiaXRzdHJlYW0gY29udGFpbnMg CmFkZGl0aW9uYWwKPiArICoJc3ludGF4IGVsZW1lbnRzIHRoYXQgc3BlY2lmeSB3aGljaCBtb2Rl IGFuZCByZWZlcmVuY2UgZnJhbWUgZGVsdGFzIAphcmUgdG8gYmUgdXBkYXRlZAo+ICsgKgo+ICsg KiBUaG9zZSBhcmUgdGhlIGZsYWdzIHRoYXQgbWF5IGJlIHBhc3NlZCB0byAmdjRsMl92cDlfbG9v cF9maWx0ZXIuZmxhZ3MuIFNlZQo+ICsgKiBzZWN0aW9uICc3LjIuOCBMb29wIGZpbHRlciBzZW1h bnRpY3MnIG9mIHRoZSBWUDkgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZQo+ICsgKiBkZXRhaWxzLgo+ ICsgKi8KPiArZW51bSB2NGwyX3ZwOV9sb29wX2ZpbHRlcl9mbGFncyB7Cj4gKwlWNEwyX1ZQOV9M T09QX0ZJTFRFUl9GTEFHX0RFTFRBX0VOQUJMRUQgPSAxIDw8IDAsCj4gKwlWNEwyX1ZQOV9MT09Q X0ZJTFRFUl9GTEFHX0RFTFRBX1VQREFURSA9IDEgPDwgMSwKPiArfTsKPiArCj4gKy8qKgo+ICsg KiBzdHJ1Y3QgdjRsMl92cDlfbG9vcF9maWx0ZXIgLSBWUDkgbG9vcCBmaWx0ZXIgcGFyYW1ldGVy cwo+ICsgKgo+ICsgKiBAcmVmX2RlbHRhczogY29udGFpbnMgdGhlIGFkanVzdG1lbnQgbmVlZGVk IGZvciB0aGUgZmlsdGVyIGxldmVsIGJhc2VkIG9uIAp0aGUgY2hvc2VuCj4gKyAqCXJlZmVyZW5j ZSBmcmFtZS4gSWYgdGhpcyBzeW50YXggZWxlbWVudCBpcyBub3QgcHJlc2VudCBpbiB0aGUgCmJp dHN0cmVhbSwgdXNlcnMKPiArICoJc2hvdWxkIHBhc3MgaXRzIGxhc3QgdmFsdWUuCj4gKyAqIEBt b2RlX2RlbHRhczogY29udGFpbnMgdGhlIGFkanVzdG1lbnQgbmVlZGVkIGZvciB0aGUgZmlsdGVy IGxldmVsIGJhc2VkIApvbiB0aGUgY2hvc2VuIG1vZGUuCj4gKyAqCUlmIHRoaXMgc3ludGF4IGVs ZW1lbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbSwgdXNlcnMKPiArICoJc2hvdWxk IHBhc3MgaXRzIGxhc3QgdmFsdWUuCj4gKyAqIEBsZXZlbDogaW5kaWNhdGVzIHRoZSBsb29wIGZp bHRlciBzdHJlbmd0aAo+ICsgKiBAc2hhcnBuZXNzOiBpbmRpY2F0ZXMgdGhlIHNoYXJwbmVzcyBs ZXZlbAo+ICsgKiBAZmxhZ3M6IGNvbWJpbmF0aW9uIG9mIFY0TDJfVlA5X0xPT1BfRklMVEVSX0ZM QUdfKiBmbGFncwo+ICsgKiBAcmVzZXJ2ZWQ6IHBhZGRpbmcgZmllbGQuIFNob3VsZCBiZSB6ZXJv ZWQgYnkgYXBwbGljYXRpb25zLgo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBh bGwgbG9vcCBmaWx0ZXIgcmVsYXRlZCBwYXJhbWV0ZXJzLiBTZWUgc2VjdGlvbnMKPiArICogJzcu Mi44IExvb3AgZmlsdGVyIHNlbWFudGljcycgb2YgdGhlIFZQOSBzcGVjaWZpY2F0aW9uIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqLwo+ICtzdHJ1Y3QgdjRsMl92cDlfbG9vcF9maWx0ZXIgewo+ICsJ X19zOCByZWZfZGVsdGFzWzRdOwo+ICsJX19zOCBtb2RlX2RlbHRhc1syXTsKPiArCV9fdTggbGV2 ZWw7Cj4gKwlfX3U4IHNoYXJwbmVzczsKPiArCV9fdTggZmxhZ3M7Cj4gKwlfX3U4IHJlc2VydmVk WzddOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB2NGwyX3ZwOV9xdWFudGl6YXRpb24g LSBWUDkgcXVhbnRpemF0aW9uIHBhcmFtZXRlcnMKPiArICoKPiArICogQGJhc2VfcV9pZHg6IGlu ZGljYXRlcyB0aGUgYmFzZSBmcmFtZSBxaW5kZXgKPiArICogQGRlbHRhX3FfeV9kYzogaW5kaWNh dGVzIHRoZSBZIERDIHF1YW50aXplciByZWxhdGl2ZSB0byBiYXNlX3FfaWR4Cj4gKyAqIEBkZWx0 YV9xX3V2X2RjOiBpbmRpY2F0ZXMgdGhlIFVWIERDIHF1YW50aXplciByZWxhdGl2ZSB0byBiYXNl X3FfaWR4Cj4gKyAqIEBkZWx0YV9xX3V2X2FjOiBpbmRpY2F0ZXMgdGhlIFVWIEFDIHF1YW50aXpl ciByZWxhdGl2ZSB0byBiYXNlX3FfaWR4Cj4gKyAqIEByZXNlcnZlZDogcGFkZGluZyBmaWVsZC4g U2hvdWxkIGJlIHplcm9lZCBieSBhcHBsaWNhdGlvbnMuCj4gKyAqCj4gKyAqIEVuY29kZXMgdGhl IHF1YW50aXphdGlvbiBwYXJhbWV0ZXJzLiBTZWUgc2VjdGlvbiAnNy4yLjkgUXVhbnRpemF0aW9u IApwYXJhbXMKPiArICogc3ludGF4JyBvZiB0aGUgVlA5IHNwZWNpZmljYXRpb24gZm9yIG1vcmUg ZGV0YWlscy4KPiArICovCj4gK3N0cnVjdCB2NGwyX3ZwOV9xdWFudGl6YXRpb24gewo+ICsJX191 OCBiYXNlX3FfaWR4Owo+ICsJX19zOCBkZWx0YV9xX3lfZGM7Cj4gKwlfX3M4IGRlbHRhX3FfdXZf ZGM7Cj4gKwlfX3M4IGRlbHRhX3FfdXZfYWM7Cj4gKwlfX3U4IHJlc2VydmVkWzRdOwo+ICt9Owo+ ICsKPiArLyoqCj4gKyAqIGVudW0gdjRsMl92cDlfc2VnbWVudGF0aW9uX2ZsYWdzIC0gVlA5IHNl Z21lbnRhdGlvbiBmbGFncwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdf RU5BQkxFRDogaW5kaWNhdGVzIHRoYXQgdGhpcyBmcmFtZSBtYWtlcyB1c2UgCm9mCj4gKyAqCXRo ZSBzZWdtZW50YXRpb24gdG9vbAo+ICsgKiBAVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBE QVRFX01BUDogaW5kaWNhdGVzIHRoYXQgdGhlIHNlZ21lbnRhdGlvbiAKbWFwCj4gKyAqCXNob3Vs ZCBiZSB1cGRhdGVkIGR1cmluZyB0aGUgZGVjb2Rpbmcgb2YgdGhpcyBmcmFtZQo+ICsgKiBAVjRM Ml9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVEVNUE9SQUxfVVBEQVRFOiBpbmRpY2F0ZXMgdGhhdCB0 aGUgdXBkYXRlcyAKdG8KPiArICoJdGhlIHNlZ21lbnRhdGlvbiBtYXAgYXJlIGNvZGVkIHJlbGF0 aXZlIHRvIHRoZSBleGlzdGluZyAKc2VnbWVudGF0aW9uIG1hcAo+ICsgKiBAVjRMMl9WUDlfU0VH TUVOVEFUSU9OX0ZMQUdfVVBEQVRFX0RBVEE6IGluZGljYXRlcyB0aGF0IG5ldyBwYXJhbWV0ZXJz IAphcmUKPiArICoJYWJvdXQgdG8gYmUgc3BlY2lmaWVkIGZvciBlYWNoIHNlZ21lbnQKPiArICog QFY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX0FCU19PUl9ERUxUQV9VUERBVEU6IGluZGljYXRl cyB0aGF0IHRoZQo+ICsgKglzZWdtZW50YXRpb24gcGFyYW1ldGVycyByZXByZXNlbnQgdGhlIGFj dHVhbCB2YWx1ZXMgdG8gYmUgdXNlZAo+ICsgKgo+ICsgKiBUaG9zZSBhcmUgdGhlIGZsYWdzIHRo YXQgbWF5IGJlIHBhc3NlZCB0byAmdjRsMl92cDlfc2VnbWVudGF0aW9uLmZsYWdzLiAKU2VlCj4g KyAqIHNlY3Rpb24gJzcuMi4xMCBTZWdtZW50YXRpb24gcGFyYW1zIHN5bnRheCcgb2YgdGhlIFZQ OSBzcGVjaWZpY2F0aW9uIGZvcgo+ICsgKiBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICtlbnVtIHY0 bDJfdnA5X3NlZ21lbnRhdGlvbl9mbGFncyB7Cj4gKwlWNEwyX1ZQOV9TRUdNRU5UQVRJT05fRkxB R19FTkFCTEVEID0gMSA8PCAwLAo+ICsJVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBEQVRF X01BUCA9IDEgPDwgMSwKPiArCVY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX1RFTVBPUkFMX1VQ REFURSA9IDEgPDwgMiwKPiArCVY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX1VQREFURV9EQVRB ID0gMSA8PCAzLAo+ICsJVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfQUJTX09SX0RFTFRBX1VQ REFURSA9IDEgPDwgNCwKPiArfTsKPiArCj4gKyNkZWZpbmUgVjRMMl9WUDlfU0VHTUVOVF9GRUFU VVJFX0VOQUJMRUQoaWQpCSgxIDw8IChpZCkpCj4gKyNkZWZpbmUgVjRMMl9WUDlfU0VHTUVOVF9G RUFUVVJFX0VOQUJMRURfTUFTSwkweGYKPiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X3Nl Z21lbnRfZmVhdHVyZSAtIFZQOSBzZWdtZW50IGZlYXR1cmUgSURzCj4gKyAqCj4gKyAqIEBWNEwy X1ZQOV9TRUdfTFZMX0FMVF9ROiBxdWFudGl6ZXIgc2VnbWVudCBmZWF0dXJlCj4gKyAqIEBWNEwy X1ZQOV9TRUdfTFZMX0FMVF9MOiBsb29wIGZpbHRlciBzZWdtZW50IGZlYXR1cmUKPiArICogQFY0 TDJfVlA5X1NFR19MVkxfUkVGX0ZSQU1FIHJlZmVyZW5jZSBmcmFtZSBzZWdtZW50IGZlYXR1cmUK PiArICogQFY0TDJfVlA5X1NFR19MVkxfU0tJUDogc2tpcCBzZWdtZW50IGZlYXR1cmUKPiArICog QFY0TDJfVlA5X1NFR19MVlZfTUFYOiBudW1iZXIgb2Ygc2VnbWVudCBmZWF0dXJlcwo+ICsgKgo+ ICsgKiBTZWdtZW50IGZlYXR1cmUgSURzLiBTZWUgc2VjdGlvbiAnNy4yLjEwIFNlZ21lbnRhdGlv biBwYXJhbXMgc3ludGF4JyBvZiAKdGhlCj4gKyAqIFZQOSBzcGVjaWZpY2F0aW9uIGZvciBtb3Jl IGRldGFpbHMuCj4gKyAqLwo+ICtlbnVtIHY0bDJfdnA5X3NlZ21lbnRfZmVhdHVyZSB7Cj4gKwlW NEwyX1ZQOV9TRUdfTFZMX0FMVF9RLAo+ICsJVjRMMl9WUDlfU0VHX0xWTF9BTFRfTCwKPiArCVY0 TDJfVlA5X1NFR19MVkxfUkVGX0ZSQU1FLAo+ICsJVjRMMl9WUDlfU0VHX0xWTF9TS0lQLAo+ICsJ VjRMMl9WUDlfU0VHX0xWTF9NQVgsCj4gK307CgpXaGF0IGlzIHRoZSByZWFzb24gbm90IHRvIGFz c2lnbiB2YWx1ZXMgbGlrZSAxIDw8IDAsIDEgPDwgMSwgZXRjLiBhbmQgaW5zdGVhZCAKcHJvdmlk ZSBzZXBhcmF0ZSBtYWNybyBWNEwyX1ZQOV9TRUdNRU5UX0ZFQVRVUkVfRU5BQkxFRCgpPyBUaGlz IGlzIGEgZGVwYXJ0dXJlIApmcm9tIGN1cnJlbnQgcHJhY3RpY2UuCgo+ICsKPiArLyoqCj4gKyAq IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRpb24gLSBWUDkgc2VnbWVudGF0aW9uIHBhcmFtZXRl cnMKPiArICoKPiArICogQGZlYXR1cmVfZGF0YTogZGF0YSBhdHRhY2hlZCB0byBlYWNoIGZlYXR1 cmUuIERhdGEgZW50cnkgaXMgb25seSB2YWxpZCAKaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZAo+ ICsgKiBAZmVhdHVyZV9lbmFibGVkOiBiaXRtYXNrIGRlZmluaW5nIHdoaWNoIGZlYXR1cmVzIGFy ZSBlbmFibGVkIGluIGVhY2ggCnNlZ21lbnQKPiArICogQHRyZWVfcHJvYnM6IHNwZWNpZmllcyB0 aGUgcHJvYmFiaWxpdHkgdmFsdWVzIHRvIGJlIHVzZWQgd2hlbgo+ICsgKglkZWNvZGluZyBhIFNl Z21lbnQtSUQuIFNlZSAnNS4xNS4gU2VnbWVudGF0aW9uIG1hcCcgc2VjdGlvbiBvZiB0aGUgClZQ OSBzcGVjaWZpY2F0aW9uCj4gKyAqCWZvciBtb3JlIGRldGFpbHMuCj4gKyAqIEBwcmVkX3Byb2Jz OiBzcGVjaWZpZXMgdGhlIHByb2JhYmlsaXR5IHZhbHVlcyB0byBiZSB1c2VkIHdoZW4gZGVjb2Rp bmcgYQo+ICsgKglQcmVkaWN0ZWQtU2VnbWVudC1JRC4gU2VlICc2LjQuMTQuIEdldCBzZWdtZW50 IGlkIHN5bnRheCcgc2VjdGlvbiAKb2YgOnJlZjpgdnA5YAo+ICsgKglmb3IgbW9yZSBkZXRhaWxz Lgo+ICsgKiBAZmxhZ3M6IGNvbWJpbmF0aW9uIG9mIFY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFH XyogZmxhZ3MKPiArICogQHJlc2VydmVkOiBwYWRkaW5nIGZpZWxkLiBTaG91bGQgYmUgemVyb2Vk IGJ5IGFwcGxpY2F0aW9ucy4KPiArICoKPiArICogRW5jb2RlcyB0aGUgcXVhbnRpemF0aW9uIHBh cmFtZXRlcnMuIFNlZSBzZWN0aW9uICc3LjIuMTAgU2VnbWVudGF0aW9uIApwYXJhbXMgc3ludGF4 JyBvZgo+ICsgKiB0aGUgVlA5IHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4KPiArICov Cj4gK3N0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRpb24gewo+ICsJX19zMTYgZmVhdHVyZV9kYXRh WzhdWzRdOwo+ICsJX191OCBmZWF0dXJlX2VuYWJsZWRbOF07Cj4gKwlfX3U4IHRyZWVfcHJvYnNb N107Cj4gKwlfX3U4IHByZWRfcHJvYnNbM107Cj4gKwlfX3U4IGZsYWdzOwo+ICsJX191OCByZXNl cnZlZFs1XTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X2ludHJhX3ByZWRp Y3Rpb25fbW9kZSAtIFZQOSBJbnRyYSBwcmVkaWN0aW9uIG1vZGVzCj4gKyAqCj4gKyAqIEBWNEwy X1ZQOV9JTlRSQV9QUkVEX01PREVfRENfUFJFRDogREMgaW50cmEgcHJlZGljdGlvbgo+ICsgKiBA VjRMMl9WUDlfSU5UUkFfUFJFRF9NT0RFX1ZfUFJFRDogdmVydGljYWwgaW50cmEgcHJlZGljdGlv bgo+ICsgKiBAVjRMMl9WUDlfSU5UUkFfUFJFRF9NT0RFX0hfUFJFRDogaG9yaXpvbnRhbCBpbnRy YSBwcmVkaWN0aW9uCj4gKyAqIEBWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfRDQ1X1BSRUQ6IEQ0 NSBpbnRyYSBwcmVkaWN0aW9uCj4gKyAqIEBWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfRDEzNV9Q UkVEOiBEMTM1IGludHJhIHByZWRpY3Rpb24KPiArICogQFY0TDJfVlA5X0lOVFJBX1BSRURfTU9E RV9EMTE3X1BSRUQ6IEQxMTcgaW50cmEgcHJlZGljdGlvbgo+ICsgKiBAVjRMMl9WUDlfSU5UUkFf UFJFRF9NT0RFX0QxNTNfUFJFRDogRDE1MyBpbnRyYSBwcmVkaWN0aW9uCj4gKyAqIEBWNEwyX1ZQ OV9JTlRSQV9QUkVEX01PREVfRDIwN19QUkVEOiBEMjA3IGludHJhIHByZWRpY3Rpb24KPiArICog QFY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9ENjNfUFJFRDogRDYzIGludHJhIHByZWRpY3Rpb24K PiArICogQFY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9UTV9QUkVEOiBUcnVlIE1vdGlvbiBpbnRy YSBwcmVkaWN0aW9uCj4gKyAqCj4gKyAqIFNlZSBzZWN0aW9uICc3LjQuNSBJbnRyYSBmcmFtZSBt b2RlIGluZm8gc2VtYW50aWNzJyBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArZW51bSB2NGwy X3ZwOV9pbnRyYV9wcmVkaWN0aW9uX21vZGUgewo+ICsJVjRMMl9WUDlfSU5UUkFfUFJFRF9NT0RF X0RDX1BSRUQsCj4gKwlWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfVl9QUkVELAo+ICsJVjRMMl9W UDlfSU5UUkFfUFJFRF9NT0RFX0hfUFJFRCwKPiArCVY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9E NDVfUFJFRCwKPiArCVY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9EMTM1X1BSRUQsCj4gKwlWNEwy X1ZQOV9JTlRSQV9QUkVEX01PREVfRDExN19QUkVELAo+ICsJVjRMMl9WUDlfSU5UUkFfUFJFRF9N T0RFX0QxNTNfUFJFRCwKPiArCVY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9EMjA3X1BSRUQsCj4g KwlWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfRDYzX1BSRUQsCj4gKwlWNEwyX1ZQOV9JTlRSQV9Q UkVEX01PREVfVE1fUFJFRCwKPiArfTsKCkkgZGlzbGlrZSB1c2luZyBlbnVtcyB3aXRob3V0IGFz c2lnbmluZyB2YWx1ZXMuIEkgc2VlIHRoYXQgaGlzdG9yaWNhbGx5IChhdCAKdGhlIGJlZ2lubmlu ZyBvZiB0aGlzIGZpbGUpLCB2YWx1ZXMgd2VyZSBhbHdheXMgYXNzaWduZWQuIEhvd2V2ZXIsIGlm IAptYWludGFpbmVycyBhZ3JlZSB3aXRoIHlvdSwgdGhhdCdzIGZpbmUgYnkgbWUuCgo+ICsKPiAr LyoqCj4gKyAqIGVudW0gdjRsMl92cDlfcmVzZXRfZnJhbWVfY29udGV4dCAtIFZhbGlkIHZhbHVl cyBmb3IKPiArICoJCQkmdjRsMl9jdHJsX3ZwOV9mcmFtZS0+cmVzZXRfZnJhbWVfY29udGV4dAo+ ICsgKgo+ICsgKiBAVjRMMl9WUDlfUkVTRVRfRlJBTUVfQ1RYX05PTkU6IGRvbid0IHJlc2V0IGFu eSBmcmFtZSBjb250ZXh0Cj4gKyAqIEBWNEwyX1ZQOV9SRVNFVF9GUkFNRV9DVFhfU1BFQzogcmVz ZXQgdGhlIGZyYW1lIGNvbnRleHQgcG9pbnRlZCBieQo+ICsgKgkmdjRsMl9jdHJsX3ZwOV9mcmFt ZS5mcmFtZV9jb250ZXh0X2lkeAo+ICsgKiBAVjRMMl9WUDlfUkVTRVRfRlJBTUVfQ1RYX0FMTDog cmVzZXQgYWxsIGZyYW1lIGNvbnRleHRzCj4gKyAqCj4gKyAqIFNlZSBzZWN0aW9uICc3LjIgVW5j b21wcmVzc2VkIGhlYWRlciBzZW1hbnRpY3MnIG9mIHRoZSBWUDkgc3BlY2lmaWNhdGlvbiAKZm9y IG1vcmUgZGV0YWlscy4KPiArICovCj4gK2VudW0gdjRsMl92cDlfcmVzZXRfZnJhbWVfY29udGV4 dCB7Cj4gKwlWNEwyX1ZQOV9SRVNFVF9GUkFNRV9DVFhfTk9ORSwKPiArCVY0TDJfVlA5X1JFU0VU X0ZSQU1FX0NUWF9TUEVDLAo+ICsJVjRMMl9WUDlfUkVTRVRfRlJBTUVfQ1RYX0FMTCwKPiArfTsK PiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X2ludGVycG9sYXRpb25fZmlsdGVyIC0gVlA5 IGludGVycG9sYXRpb24gZmlsdGVyIHR5cGVzCj4gKyAqCj4gKyAqIEBWNEwyX1ZQOV9JTlRFUlBf RklMVEVSX0VJR0hUVEFQOiBlaWdodCB0YXAgZmlsdGVyCj4gKyAqIEBWNEwyX1ZQOV9JTlRFUlBf RklMVEVSX0VJR0hUVEFQX1NNT09USDogZWlnaHQgdGFwIHNtb290aCBmaWx0ZXIKPiArICogQFY0 TDJfVlA5X0lOVEVSUF9GSUxURVJfRUlHSFRUQVBfU0hBUlA6IGVpZ2h0IHRhcCBzaGFycCBmaWx0 ZXIKPiArICogQFY0TDJfVlA5X0lOVEVSUF9GSUxURVJfQklMSU5FQVI6IGJpbGluZWFyIGZpbHRl cgo+ICsgKiBAVjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9TV0lUQ0hBQkxFOiBmaWx0ZXIgc2VsZWN0 aW9uIGlzIHNpZ25hbGVkIGF0IHRoZSAKYmxvY2sgbGV2ZWwKPiArICoKPiArICogU2VlIHNlY3Rp b24gJzcuMi43IEludGVycG9sYXRpb24gZmlsdGVyIHNlbWFudGljcycgb2YgdGhlIFZQOSAKc3Bl Y2lmaWNhdGlvbgo+ICsgKiBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArZW51bSB2NGwyX3Zw OV9pbnRlcnBvbGF0aW9uX2ZpbHRlciB7Cj4gKwlWNEwyX1ZQOV9JTlRFUlBfRklMVEVSX0VJR0hU VEFQLAo+ICsJVjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9FSUdIVFRBUF9TTU9PVEgsCj4gKwlWNEwy X1ZQOV9JTlRFUlBfRklMVEVSX0VJR0hUVEFQX1NIQVJQLAo+ICsJVjRMMl9WUDlfSU5URVJQX0ZJ TFRFUl9CSUxJTkVBUiwKPiArCVY0TDJfVlA5X0lOVEVSUF9GSUxURVJfU1dJVENIQUJMRSwKPiAr fTsKPiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X3JlZmVyZW5jZV9tb2RlIC0gVlA5IHJl ZmVyZW5jZSBtb2Rlcwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfU0lOR0xF X1JFRkVSRU5DRTogaW5kaWNhdGVzIHRoYXQgYWxsIHRoZSBpbnRlciAKYmxvY2tzIHVzZSBvbmx5 IGEKPiArICoJc2luZ2xlIHJlZmVyZW5jZSBmcmFtZSB0byBnZW5lcmF0ZSBtb3Rpb24gY29tcGVu c2F0ZWQgcHJlZGljdGlvbgo+ICsgKiBAVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfQ09NUE9VTkRf UkVGRVJFTkNFOiByZXF1aXJlcyBhbGwgdGhlIGludGVyIApibG9ja3MgdG8gdXNlIGNvbXBvdW5k IG1vZGUuCj4gKyAqCVNpbmdsZSByZWZlcmVuY2UgZnJhbWUgcHJlZGljdGlvbiBpcyBub3QgYWxs b3dlZAo+ICsgKiBAVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfU0VMRUNUOiBhbGxvd3MgZWFjaCBp bmRpdmlkdWFsIGludGVyIGJsb2NrIHRvIApzZWxlY3QgYmV0d2VlbiBzaW5nbGUKPiArICoJYW5k IGNvbXBvdW5kIHByZWRpY3Rpb24gbW9kZXMKPiArICoKPiArICogU2VlIHNlY3Rpb24gJzcuMy42 IEZyYW1lIHJlZmVyZW5jZSBtb2RlIHNlbWFudGljcycgb2YgdGhlIFZQOSAKc3BlY2lmaWNhdGlv bgo+ICsgKiBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArZW51bSB2NGwyX3ZwOV9yZWZlcmVu Y2VfbW9kZSB7Cj4gKwlWNEwyX1ZQOV9SRUZFUkVOQ0VfTU9ERV9TSU5HTEVfUkVGRVJFTkNFLAo+ ICsJVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfQ09NUE9VTkRfUkVGRVJFTkNFLAo+ICsJVjRMMl9W UDlfUkVGRVJFTkNFX01PREVfU0VMRUNULAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gdjRs Ml92cDlfdHhfbW9kZSAtIFZQOSBUWCBtb2Rlcwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfVFhfTU9E RV9PTkxZXzRYNDogdHJhbnNmb3JtIHNpemUgaXMgNHg0Cj4gKyAqIEBWNEwyX1ZQOV9UWF9NT0RF X0FMTE9XXzhYODogdHJhbnNmb3JtIHNpemUgY2FuIGJlIHVwIHRvIDh4OAo+ICsgKiBAVjRMMl9W UDlfVFhfTU9ERV9BTExPV18xNlgxNjogdHJhbnNmb3JtIHNpemUgY2FuIGJlIHVwIHRvIDE2eDE2 Cj4gKyAqIEBWNEwyX1ZQOV9UWF9NT0RFX0FMTE9XXzMyWDMyOiB0cmFuc2Zvcm0gc2l6ZSBjYW4g YmUgdXAgdG8gMzJ4MzIKPiArICogQFY0TDJfVlA5X1RYX01PREVfU0VMRUNUOiBiaXRzdHJlYW0g Y29udGFpbnMgdGhlIHRyYW5zZm9ybSBzaXplIGZvciBlYWNoIApibG9jawo+ICsgKgo+ICsgKiBT ZWUgc2VjdGlvbiAnNy4zLjEgVHggbW9kZSBzZW1hbnRpY3MnIG9mIHRoZSBWUDkgc3BlY2lmaWNh dGlvbiBmb3IgbW9yZSAKZGV0YWlscy4KPiArICovCj4gK2VudW0gdjRsMl92cDlfdHhfbW9kZSB7 Cj4gKwlWNEwyX1ZQOV9UWF9NT0RFX09OTFlfNFg0LAo+ICsJVjRMMl9WUDlfVFhfTU9ERV9BTExP V184WDgsCj4gKwlWNEwyX1ZQOV9UWF9NT0RFX0FMTE9XXzE2WDE2LAo+ICsJVjRMMl9WUDlfVFhf TU9ERV9BTExPV18zMlgzMiwKPiArCVY0TDJfVlA5X1RYX01PREVfU0VMRUNULAo+ICt9Owo+ICsK PiArLyoqCj4gKyAqIGVudW0gdjRsMl92cDlfZnJhbWVfZmxhZ3MgLSBWUDkgZnJhbWUgZmxhZ3MK PiArICogQFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FOiB0aGUgZnJhbWUgaXMgYSBrZXkg ZnJhbWUKPiArICogQFY0TDJfVlA5X0ZSQU1FX0ZMQUdfU0hPV19GUkFNRTogdGhlIGZyYW1lIHNo b3VsZCBiZSBkaXNwbGF5ZWQKPiArICogQFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJST1JfUkVTSUxJ RU5UOiB0aGUgZGVjb2Rpbmcgc2hvdWxkIGJlIGVycm9yIApyZXNpbGllbnQKPiArICogQFY0TDJf VlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWTogdGhlIGZyYW1lIGRvZXMgbm90IHJlZmVyZW5jZSBv dGhlciAKZnJhbWVzCj4gKyAqIEBWNEwyX1ZQOV9GUkFNRV9GTEFHX0FMTE9XX0hJR0hfUFJFQ19N VjogdGhlIGZyYW1lIGNhbiB1c2UgaGlnaCAKcHJlY2lzaW9uIG1vdGlvbiB2ZWN0b3JzCj4gKyAq IEBWNEwyX1ZQOV9GUkFNRV9GTEFHX1JFRlJFU0hfRlJBTUVfQ1RYOiBmcmFtZSBjb250ZXh0IHNo b3VsZCBiZSB1cGRhdGVkIAphZnRlciBkZWNvZGluZwo+ICsgKiBAVjRMMl9WUDlfRlJBTUVfRkxB R19QQVJBTExFTF9ERUNfTU9ERTogcGFyYWxsZWwgZGVjb2RpbmcgaXMgdXNlZAo+ICsgKiBAVjRM Ml9WUDlfRlJBTUVfRkxBR19YX1NVQlNBTVBMSU5HOiB2ZXJ0aWNhbCBzdWJzYW1wbGluZyBpcyBl bmFibGVkCj4gKyAqIEBWNEwyX1ZQOV9GUkFNRV9GTEFHX1lfU1VCU0FNUExJTkc6IGhvcml6b250 YWwgc3Vic2FtcGxpbmcgaXMgZW5hYmxlZAo+ICsgKiBAVjRMMl9WUDlfRlJBTUVfRkxBR19DT0xP Ul9SQU5HRV9GVUxMX1NXSU5HOiBmdWxsIFVWIHJhbmdlIGlzIHVzZWQKPiArICoKPiArICogQ2hl Y2sgdGhlIFZQOSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICtlbnVt IHY0bDJfdnA5X2ZyYW1lX2ZsYWdzIHsKPiArCVY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1F ID0gMSA8PCAwLAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19TSE9XX0ZSQU1FID0gMSA8PCAxLAo+ ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19FUlJPUl9SRVNJTElFTlQgPSAxIDw8IDIsCj4gKwlWNEwy X1ZQOV9GUkFNRV9GTEFHX0lOVFJBX09OTFkgPSAxIDw8IDMsCj4gKwlWNEwyX1ZQOV9GUkFNRV9G TEFHX0FMTE9XX0hJR0hfUFJFQ19NViA9IDEgPDwgNCwKPiArCVY0TDJfVlA5X0ZSQU1FX0ZMQUdf UkVGUkVTSF9GUkFNRV9DVFggPSAxIDw8IDUsCj4gKwlWNEwyX1ZQOV9GUkFNRV9GTEFHX1BBUkFM TEVMX0RFQ19NT0RFID0gMSA8PCA2LAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19YX1NVQlNBTVBM SU5HID0gMSA8PCA3LAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19ZX1NVQlNBTVBMSU5HID0gMSA8 PCA4LAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19DT0xPUl9SQU5HRV9GVUxMX1NXSU5HID0gMSA8 PCA5LAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gdjRsMl92cDlfcmVmX2ZyYW1lX3NpZ25f YmlhcyAtIFdoZXRoZXIgcmVmX2ZyYW1lX3NpZ25fYmlhcyBpcyAxIGZvciAKYSBnaXZlbiByZWZl cmVuY2UgZnJhbWUKPiArICogQFY0TDJfVlA5X1NJR05fQklBU19MQVNUOiByZWZfZnJhbWVfc2ln bl9iaWFzIGlzIDEgZm9yIHRoZSAibGFzdCIgCnJlZmVyZW5jZSBmcmFtZQo+ICsgKiBAVjRMMl9W UDlfU0lHTl9CSUFTX0dPTERFTjogcmVmX2ZyYW1lX3NpZ25fYmlhcyBpcyAxIGZvciB0aGUgImdv bGRlbiIgCnJlZmVyZW5jZSBmcmFtZQo+ICsgKiBAVjRMMl9WUDlfU0lHTl9CSUFTX0FMVDogcmVm X2ZyYW1lX3NpZ25fYmlhcyBpcyAxIGZvciB0aGUgImFsdCIgCnJlZmVyZW5jZSBmcmFtZQo+ICsg Ki8KPiArCj4gK2VudW0gdjRsMl92cDlfcmVmX2ZyYW1lX3NpZ25fYmlhcyB7Cj4gKwlWNEwyX1ZQ OV9TSUdOX0JJQVNfTEFTVCwKPiArCVY0TDJfVlA5X1NJR05fQklBU19HT0xERU4sCj4gKwlWNEwy X1ZQOV9TSUdOX0JJQVNfQUxULAo+ICt9OwoKQXMgSSBtZW50aW9uZWQgYmVmb3JlLCB5b3UgcHJv YmFibHkgd2FudCB0byBhc3NpZ24gdmFsdWVzIGhlcmUsIHNpbmNlIHZhbHVlcyAKYXJlIHVzZWQg YXMgYml0bWFwLgoKPiArCj4gKyNkZWZpbmUgVjRMMl9WUDlfUFJPRklMRV9NQVgJCTMKPiArCj4g KyNkZWZpbmUgVjRMMl9DSURfU1RBVEVMRVNTX1ZQOV9GUkFNRQkoVjRMMl9DSURfQ09ERUNfU1RB VEVMRVNTX0JBU0UgKyAKMzAwKQo+ICsvKioKPiArICogc3RydWN0IHY0bDJfY3RybF92cDlfZnJh bWUgLSBWUDkgZnJhbWUgZGVjb2RpbmcgY29udHJvbAo+ICsgKgo+ICsgKiBAbGY6IGxvb3AgZmls dGVyIHBhcmFtZXRlcnMuIFNlZSAmdjRsMl92cDlfbG9vcF9maWx0ZXIgZm9yIG1vcmUgZGV0YWls cwo+ICsgKiBAcXVhbnQ6IHF1YW50aXphdGlvbiBwYXJhbWV0ZXJzLiBTZWUgJnY0bDJfdnA5X3F1 YW50aXphdGlvbiBmb3IgbW9yZSAKZGV0YWlscwo+ICsgKiBAc2VnOiBzZWdtZW50YXRpb24gcGFy YW1ldGVycy4gU2VlICZ2NGwyX3ZwOV9zZWdtZW50YXRpb24gZm9yIG1vcmUgCmRldGFpbHMKPiAr ICogQGZsYWdzOiBjb21iaW5hdGlvbiBvZiBWNEwyX1ZQOV9GUkFNRV9GTEFHXyogZmxhZ3MKPiAr ICogQGNvbXByZXNzZWRfaGVhZGVyX3NpemU6IGNvbXByZXNzZWQgaGVhZGVyIHNpemUgaW4gYnl0 ZXMKPiArICogQHVuY29tcHJlc3NlZF9oZWFkZXJfc2l6ZTogdW5jb21wcmVzc2VkIGhlYWRlciBz aXplIGluIGJ5dGVzCj4gKyAqIEBmcmFtZV93aWR0aF9taW51c18xOiBhZGQgMSB0byBpdCBhbmQg eW91J2xsIGdldCB0aGUgZnJhbWUgd2lkdGggCmV4cHJlc3NlZCBpbiBwaXhlbHMKPiArICogQGZy YW1lX2hlaWdodF9taW51c18xOiBhZGQgMSB0byBpdCBhbmQgeW91J2xsIGdldCB0aGUgZnJhbWUg aGVpZ2h0IApleHByZXNzZWQgaW4gcGl4ZWxzCj4gKyAqIEByZW5kZXJfd2lkdGhfbWludXNfMTog YWRkIDEgdG8gaXQgYW5kIHlvdSdsbCBnZXQgdGhlIGV4cGVjdGVkIHJlbmRlciAKd2lkdGggZXhw cmVzc2VkIGluCj4gKyAqCXBpeGVscy4gVGhpcyBpcyBub3QgdXNlZCBkdXJpbmcgdGhlIGRlY29k aW5nIHByb2Nlc3MgYnV0IG1pZ2h0IGJlIAp1c2VkIGJ5IEhXIHNjYWxlcnMKPiArICoJdG8gcHJl cGFyZSBhIGZyYW1lIHRoYXQncyByZWFkeSBmb3Igc2Nhbm91dAo+ICsgKiBAcmVuZGVyX2hlaWdo dF9taW51c18xOiBhZGQgMSB0byBpdCBhbmQgeW91J2xsIGdldCB0aGUgZXhwZWN0ZWQgcmVuZGVy IApoZWlnaHQgZXhwcmVzc2VkIGluCj4gKyAqCXBpeGVscy4gVGhpcyBpcyBub3QgdXNlZCBkdXJp bmcgdGhlIGRlY29kaW5nIHByb2Nlc3MgYnV0IG1pZ2h0IGJlIAp1c2VkIGJ5IEhXIHNjYWxlcnMK PiArICoJdG8gcHJlcGFyZSBhIGZyYW1lIHRoYXQncyByZWFkeSBmb3Igc2Nhbm91dAo+ICsgKiBA bGFzdF9mcmFtZV90czogImxhc3QiIHJlZmVyZW5jZSBidWZmZXIgdGltZXN0YW1wLgo+ICsgKiBU aGUgdGltZXN0YW1wIHJlZmVycyB0byB0aGUgdGltZXN0YW1wIGZpZWxkIGluIHN0cnVjdCB2NGwy X2J1ZmZlci4KPiArICogVXNlIHY0bDJfdGltZXZhbF90b19ucygpIHRvIGNvbnZlcnQgdGhlIHN0 cnVjdCB0aW1ldmFsIHRvIGEgX191NjQuCj4gKyAqIEBnb2xkZW5fZnJhbWVfdHM6ICJnb2xkZW4i IHJlZmVyZW5jZSBidWZmZXIgdGltZXN0YW1wLgo+ICsgKiBUaGUgdGltZXN0YW1wIHJlZmVycyB0 byB0aGUgdGltZXN0YW1wIGZpZWxkIGluIHN0cnVjdCB2NGwyX2J1ZmZlci4KPiArICogVXNlIHY0 bDJfdGltZXZhbF90b19ucygpIHRvIGNvbnZlcnQgdGhlIHN0cnVjdCB0aW1ldmFsIHRvIGEgX191 NjQuCj4gKyAqIEBhbHRfZnJhbWVfdHM6ICJhbHQiIHJlZmVyZW5jZSBidWZmZXIgdGltZXN0YW1w Lgo+ICsgKiBUaGUgdGltZXN0YW1wIHJlZmVycyB0byB0aGUgdGltZXN0YW1wIGZpZWxkIGluIHN0 cnVjdCB2NGwyX2J1ZmZlci4KPiArICogVXNlIHY0bDJfdGltZXZhbF90b19ucygpIHRvIGNvbnZl cnQgdGhlIHN0cnVjdCB0aW1ldmFsIHRvIGEgX191NjQuCj4gKyAqIEByZWZfZnJhbWVfc2lnbl9i aWFzOiBhIGJpdGZpZWxkIHNwZWNpZnlpbmcgd2hldGhlciB0aGUgc2lnbiBiaWFzIGlzIHNldCAK Zm9yIGEgZ2l2ZW4KPiArICoJcmVmZXJlbmNlIGZyYW1lLiBTZWUgJnY0bDJfdnA5X3JlZl9mcmFt ZV9zaWduX2JpYXMgZm9yIG1vcmUgCmRldGFpbHMuCj4gKyAqIEByZXNldF9mcmFtZV9jb250ZXh0 OiBzcGVjaWZpZXMgd2hldGhlciB0aGUgZnJhbWUgY29udGV4dCBzaG91bGQgYmUgcmVzZXQgCnRv IGRlZmF1bHQgdmFsdWVzLgo+ICsgKglTZWUgJnY0bDJfdnA5X3Jlc2V0X2ZyYW1lX2NvbnRleHQg Zm9yIG1vcmUgZGV0YWlscwo+ICsgKiBAZnJhbWVfY29udGV4dF9pZHg6IGZyYW1lIGNvbnRleHQg dGhhdCBzaG91bGQgYmUgdXNlZC91cGRhdGVkCj4gKyAqIEBwcm9maWxlOiBWUDkgcHJvZmlsZS4g Q2FuIGJlIDAsIDEsIDIgb3IgMwo+ICsgKiBAYml0X2RlcHRoOiBiaXRzIHBlciBjb21wb25lbnRz LiBDYW4gYmUgOCwgMTAgb3IgMTIuIE5vdGUgdGhhdCBub3QgYWxsIApwcm9maWxlcyBzdXBwb3J0 Cj4gKyAqCTEwIGFuZC9vciAxMiBiaXRzIGRlcHRocwo+ICsgKiBAaW50ZXJwb2xhdGlvbl9maWx0 ZXI6IHNwZWNpZmllcyB0aGUgZmlsdGVyIHNlbGVjdGlvbiB1c2VkIGZvciBwZXJmb3JtaW5nIApp bnRlciBwcmVkaWN0aW9uLgo+ICsgKglTZWUgJnY0bDJfdnA5X2ludGVycG9sYXRpb25fZmlsdGVy IGZvciBtb3JlIGRldGFpbHMKPiArICogQHRpbGVfY29sc19sb2cyOiBzcGVjaWZpZXMgdGhlIGJh c2UgMiBsb2dhcml0aG0gb2YgdGhlIHdpZHRoIG9mIGVhY2ggdGlsZSAKKHdoZXJlIHRoZSB3aWR0 aAo+ICsgKglpcyBtZWFzdXJlZCBpbiB1bml0cyBvZiA4eDggYmxvY2tzKS4gU2hhbGwgYmUgbGVz cyB0aGFuIG9yIGVxdWFsIAp0byA2Cj4gKyAqIEB0aWxlX3Jvd3NfbG9nMjogc3BlY2lmaWVzIHRo ZSBiYXNlIDIgbG9nYXJpdGhtIG9mIHRoZSBoZWlnaHQgb2YgZWFjaCAKdGlsZSAod2hlcmUgdGhl IGhlaWdodAo+ICsgKglpcyBtZWFzdXJlZCBpbiB1bml0cyBvZiA4eDggYmxvY2tzKQo+ICsgKiBA dHhfbW9kZTogc3BlY2lmaWVzIHRoZSBUWCBtb2RlLiBTZWUgJnY0bDJfdnA5X3R4X21vZGUgZm9y IG1vcmUgZGV0YWlscwo+ICsgKiBAcmVmZXJlbmNlX21vZGU6IHNwZWNpZmllcyB0aGUgdHlwZSBv ZiBpbnRlciBwcmVkaWN0aW9uIHRvIGJlIHVzZWQuIFNlZQo+ICsgKgkmdjRsMl92cDlfcmVmZXJl bmNlX21vZGUgZm9yIG1vcmUgZGV0YWlscwo+ICsgKiBAcmVzZXJ2ZWQ6IHBhZGRpbmcgZmllbGQu IFNob3VsZCBiZSB6ZXJvZWQgYnkgYXBwbGljYXRpb25zLgo+ICsgKi8KPiArc3RydWN0IHY0bDJf Y3RybF92cDlfZnJhbWUgewo+ICsJc3RydWN0IHY0bDJfdnA5X2xvb3BfZmlsdGVyIGxmOwo+ICsJ c3RydWN0IHY0bDJfdnA5X3F1YW50aXphdGlvbiBxdWFudDsKPiArCXN0cnVjdCB2NGwyX3ZwOV9z ZWdtZW50YXRpb24gc2VnOwo+ICsJX191MzIgZmxhZ3M7Cj4gKwlfX3UxNiBjb21wcmVzc2VkX2hl YWRlcl9zaXplOwo+ICsJX191MTYgdW5jb21wcmVzc2VkX2hlYWRlcl9zaXplOwo+ICsJX191MTYg ZnJhbWVfd2lkdGhfbWludXNfMTsKPiArCV9fdTE2IGZyYW1lX2hlaWdodF9taW51c18xOwo+ICsJ X191MTYgcmVuZGVyX3dpZHRoX21pbnVzXzE7Cj4gKwlfX3UxNiByZW5kZXJfaGVpZ2h0X21pbnVz XzE7Cj4gKwlfX3U2NCBsYXN0X2ZyYW1lX3RzOwo+ICsJX191NjQgZ29sZGVuX2ZyYW1lX3RzOwo+ ICsJX191NjQgYWx0X2ZyYW1lX3RzOwo+ICsJX191OCByZWZfZnJhbWVfc2lnbl9iaWFzOwo+ICsJ X191OCByZXNldF9mcmFtZV9jb250ZXh0Owo+ICsJX191OCBmcmFtZV9jb250ZXh0X2lkeDsKPiAr CV9fdTggcHJvZmlsZTsKPiArCV9fdTggYml0X2RlcHRoOwo+ICsJX191OCBpbnRlcnBvbGF0aW9u X2ZpbHRlcjsKPiArCV9fdTggdGlsZV9jb2xzX2xvZzI7Cj4gKwlfX3U4IHRpbGVfcm93c19sb2cy Owo+ICsJX191OCB0eF9tb2RlOwoKQUZBSUNTLCBUWCBtb2RlIGlzIHBhcnQgb2YgY29tcHJlc3Nl ZCBoZWFkZXIgaW4gY2hhcHRlciA2LjMuMS4gQW55IHJlYXNvbiBpdCdzIApoZXJlIGFuZCBub3Qg aW4gIHY0bDJfY3RybF92cDlfY29tcHJlc3NlZF9oZHJfcHJvYnM/Cgo+ICsJX191OCByZWZlcmVu Y2VfbW9kZTsKPiArCV9fdTggcmVzZXJ2ZWRbNl07Cj4gK307Cj4gKwo+ICsjZGVmaW5lIFY0TDJf VlA5X05VTV9GUkFNRV9DVFgJNAo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB2NGwyX3ZwOV9tdl9j b21wcmVzc2VkX2hkcl9wcm9icyAtIFZQOSBNb3Rpb24gdmVjdG9yIHByb2JhYmlsaXR5IAp1cGRh dGVzCj4gKyAqIEBqb2ludDogbW90aW9uIHZlY3RvciBqb2ludCBwcm9iYWJpbGl0eSB1cGRhdGVz Cj4gKyAqIEBzaWduOiBtb3Rpb24gdmVjdG9yIHNpZ24gcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsg KiBAY2xhc3NlczogbW90aW9uIHZlY3RvciBjbGFzcyBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAq IEBjbGFzczBfYml0OiBtb3Rpb24gdmVjdG9yIGNsYXNzMCBiaXQgcHJvYmFiaWxpdHkgdXBkYXRl cwo+ICsgKiBAYml0czogbW90aW9uIHZlY3RvciBiaXRzIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiAr ICogQGNsYXNzMF9mcjogbW90aW9uIHZlY3RvciBjbGFzczAgZnJhY3Rpb25hbCBiaXQgcHJvYmFi aWxpdHkgdXBkYXRlcwo+ICsgKiBAZnI6IG1vdGlvbiB2ZWN0b3IgZnJhY3Rpb25hbCBiaXQgcHJv YmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAY2xhc3MwX2hwOiBtb3Rpb24gdmVjdG9yIGNsYXNzMCBo aWdoIHByZWNpc2lvbiBmcmFjdGlvbmFsIGJpdCAKcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBA aHA6IG1vdGlvbiB2ZWN0b3IgaGlnaCBwcmVjaXNpb24gZnJhY3Rpb25hbCBiaXQgcHJvYmFiaWxp dHkgdXBkYXRlcwo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBuZXcgdmFsdWVz IG9mIG1vdGlvbiB2ZWN0b3IgcHJvYmFiaWxpdGllcy4KPiArICogQSB2YWx1ZSBvZiB6ZXJvIGlu IGFuIGFycmF5IGVsZW1lbnQgbWVhbnMgdGhlcmUgaXMgbm8gdXBkYXRlIG9mIHRoZSAKcmVsZXZh bnQgcHJvYmFiaWxpdHkuCj4gKyAqIFNlZSBgc3RydWN0IHY0bDJfdnA5X3Byb2JfdXBkYXRlc2Ag Zm9yIGRldGFpbHMuCj4gKyAqLwo+ICtzdHJ1Y3QgdjRsMl92cDlfbXZfY29tcHJlc3NlZF9oZHJf cHJvYnMgewo+ICsJX191OCBqb2ludFszXTsKPiArCV9fdTggc2lnblsyXTsKPiArCV9fdTggY2xh c3Nlc1syXVsxMF07Cj4gKwlfX3U4IGNsYXNzMF9iaXRbMl07Cj4gKwlfX3U4IGJpdHNbMl1bMTBd Owo+ICsJX191OCBjbGFzczBfZnJbMl1bMl1bM107Cj4gKwlfX3U4IGZyWzJdWzNdOwo+ICsJX191 OCBjbGFzczBfaHBbMl07Cj4gKwlfX3U4IGhwWzJdOwo+ICt9Owo+ICsKPiArI2RlZmluZSBWNEwy X0NJRF9TVEFURUxFU1NfVlA5X0NPTVBSRVNTRURfSERSX1BST0JTCQooVjRMMl9DSURfQ09ERUNf U1RBVEVMRVNTX0JBU0UgKyAzMDEpCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9j b21wcmVzc2VkX2hkcl9wcm9icyAtIFZQOSBwcm9iYWJpbGl0eSB1cGRhdGVzIApjb250cm9sCj4g KyAqIEB0eDg6IFRYIDh4OCBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqIEB0eDE2OiBUWCAxNngx NiBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqIEB0eDMyOiBUWCAzMngzMiBwcm9iYWJpbGl0eSB1 cGRhdGVzCj4gKyAqIEBjb2VmOiBjb2VmZmljaWVudCBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAq IEBza2lwOiBza2lwIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiArICogQGludGVyX21vZGU6IGludGVy IG1vZGUgcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAaW50ZXJwX2ZpbHRlcjogaW50ZXJwb2xh dGlvbiBmaWx0ZXIgcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAaXNfaW50ZXI6IGlzIGludGVy LWJsb2NrIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiArICogQGNvbXBfbW9kZTogY29tcG91bmQgcHJl ZGljdGlvbiBtb2RlIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiArICogQHNpbmdsZV9yZWY6IHNpbmds ZSByZWYgcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAY29tcF9yZWY6IGNvbXBvdW5kIHJlZiBw cm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqIEB5X21vZGU6IFkgcHJlZGljdGlvbiBtb2RlIHByb2Jh YmlsaXR5IHVwZGF0ZXMKPiArICogQHV2X21vZGU6IFVWIHByZWRpY3Rpb24gbW9kZSBwcm9iYWJp bGl0eSB1cGRhdGVzCj4gKyAqIEBwYXJ0aXRpb246IHBhcnRpdGlvbiBwcm9iYWJpbGl0eSB1cGRh dGVzCj4gKyAqIEBtdjogbW90aW9uIHZlY3RvciBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqCj4g KyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBwcm9iYWJpbGl0aWVzIHVwZGF0ZSBhcyBwYXJz ZWQgaW4gdGhlIApjb21wcmVzc2VkCj4gKyAqIGhlYWRlciAoU3BlYyA2LjMpLiBUaGVzZSB2YWx1 ZXMgcmVwcmVzZW50IHRoZSB2YWx1ZSBvZiBwcm9iYWJpbGl0eSAKdXBkYXRlIGFmdGVyCj4gKyAq IGJlaW5nIHRyYW5zbGF0ZWQgd2l0aCBpbnZfbWFwX3RhYmxlW10gKHNlZSA2LjMuNSkuIEEgdmFs dWUgb2YgemVybyBpbiBhbiAKYXJyYXkgZWxlbWVudAo+ICsgKiBtZWFucyB0aGF0IHRoZXJlIGlz IG5vIHVwZGF0ZSBvZiB0aGUgcmVsZXZhbnQgcHJvYmFiaWxpdHkuCj4gKyAqLwo+ICtzdHJ1Y3Qg djRsMl9jdHJsX3ZwOV9jb21wcmVzc2VkX2hkcl9wcm9icyB7Cj4gKwlfX3U4IHR4OFsyXVsxXTsK PiArCV9fdTggdHgxNlsyXVsyXTsKPiArCV9fdTggdHgzMlsyXVszXTsKPiArCV9fdTggY29lZls0 XVsyXVsyXVs2XVs2XVszXTsKPiArCV9fdTggc2tpcFszXTsKPiArCV9fdTggaW50ZXJfbW9kZVs3 XVszXTsKPiArCV9fdTggaW50ZXJwX2ZpbHRlcls0XVsyXTsKPiArCV9fdTggaXNfaW50ZXJbNF07 Cj4gKwlfX3U4IGNvbXBfbW9kZVs1XTsKPiArCV9fdTggc2luZ2xlX3JlZls1XVsyXTsKPiArCV9f dTggY29tcF9yZWZbNV07Cj4gKwlfX3U4IHlfbW9kZVs0XVs5XTsKPiArCV9fdTggdXZfbW9kZVsx MF1bOV07Cj4gKwlfX3U4IHBhcnRpdGlvblsxNl1bM107Cj4gKwo+ICsJc3RydWN0IHY0bDJfdnA5 X212X2NvbXByZXNzZWRfaGRyX3Byb2JzIG12OwoKdjRsMl9jdHJsX3ZwOV9jb21wcmVzc2VkX2hk cl9wcm9icyBhbmQgdjRsMl92cDlfbXZfY29tcHJlc3NlZF9oZHJfcHJvYnMgYXJlIHNvIApjb25m dXNpbmdseSBzaW1pbGFyLCBpdCdzIGVhc3kgdG8gbWVzcyB1cCBxdWlja2x5LiBDYW4gd2UgZmlu ZCBtb3JlIGRpc3RpbmN0IApuYW1lcz8KCk5vdGUsIEkganVzdCBza2ltbWVkIHRoaXMgcGF0Y2gs IG1heWJlIEknbGwgaGF2ZSBzb21lIG1vcmUgcXVlc3Rpb25zIGxhdGVyLiAKR3JlYXQgd29yayEK CkJlc3QgcmVnYXJkcywKSmVybmVqCgo+ICt9Owo+ICsKPiAgLyogTVBFRy1jb21wcmVzc2lvbiBk ZWZpbml0aW9ucyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwo+ICAjaWZuZGVm IF9fS0VSTkVMX18KPiAgI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfTVBFRyAgICAgICAgICAgIFY0 TDJfQ1RSTF9DTEFTU19DT0RFQwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmlk ZW9kZXYyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKPiBpbmRleCA1ODM5MmRj ZDNiZjUuLjRhYmU0MzYyNTE5ZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmlk ZW9kZXYyLmgKPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKPiBAQCAtNzAz LDYgKzcwMyw3IEBAIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgewo+ICAjZGVmaW5lIFY0TDJfUElY X0ZNVF9WUDggICAgICB2NGwyX2ZvdXJjYygnVicsICdQJywgJzgnLCAnMCcpIC8qIFZQOCAqLwo+ ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9WUDhfRlJBTUUgdjRsMl9mb3VyY2MoJ1YnLCAnUCcsICc4 JywgJ0YnKSAvKiBWUDggcGFyc2VkIApmcmFtZSAqLwo+ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9W UDkgICAgICB2NGwyX2ZvdXJjYygnVicsICdQJywgJzknLCAnMCcpIC8qIFZQOSAqLwo+ICsjZGVm aW5lIFY0TDJfUElYX0ZNVF9WUDlfRlJBTUUgdjRsMl9mb3VyY2MoJ1YnLCAnUCcsICc5JywgJ0Yn KSAvKiBWUDkgcGFyc2VkIApmcmFtZSAqLwo+ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9IRVZDICAg ICB2NGwyX2ZvdXJjYygnSCcsICdFJywgJ1YnLCAnQycpIC8qIEhFVkMgYWthIEguCjI2NSAqLwo+ ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9GV0hUICAgICB2NGwyX2ZvdXJjYygnRicsICdXJywgJ0gn LCAnVCcpIC8qIEZhc3QgV2Fsc2ggCkhhZGFtYXJkIFRyYW5zZm9ybSAodmljb2RlYykgKi8KPiAg I2RlZmluZSBWNEwyX1BJWF9GTVRfRldIVF9TVEFURUxFU1MgICAgIHY0bDJfZm91cmNjKCdTJywg J0YnLCAnVycsICdIJykgLyogClN0YXRlbGVzcyBGV0hUICh2aWNvZGVjKSAqLwo+IEBAIC0xNzU1 LDYgKzE3NTYsOCBAQCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCB7Cj4gIAkJc3RydWN0IHY0bDJf Y3RybF9tcGVnMl9zZXF1ZW5jZSBfX3VzZXIgCipwX21wZWcyX3NlcXVlbmNlOwo+ICAJCXN0cnVj dCB2NGwyX2N0cmxfbXBlZzJfcGljdHVyZSBfX3VzZXIgKnBfbXBlZzJfcGljdHVyZTsKPiAgCQlz dHJ1Y3QgdjRsMl9jdHJsX21wZWcyX3F1YW50aXNhdGlvbiBfX3VzZXIgCipwX21wZWcyX3F1YW50 aXNhdGlvbjsKPiArCQlzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9jb21wcmVzc2VkX2hkcl9wcm9icyBf X3VzZXIgCipwX3ZwOV9jb21wcmVzc2VkX2hkcl9wcm9iczsKPiArCQlzdHJ1Y3QgdjRsMl9jdHJs X3ZwOV9mcmFtZSBfX3VzZXIgKnBfdnA5X2ZyYW1lOwo+ICAJCXZvaWQgX191c2VyICpwdHI7Cj4g IAl9Owo+ICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKPiBAQCAtMTgxOSw2ICsxODIyLDkg QEAgZW51bSB2NGwyX2N0cmxfdHlwZSB7Cj4gIAlWNEwyX0NUUkxfVFlQRV9NUEVHMl9RVUFOVElT QVRJT04gICA9IDB4MDI1MCwKPiAgCVY0TDJfQ1RSTF9UWVBFX01QRUcyX1NFUVVFTkNFICAgICAg ID0gMHgwMjUxLAo+ICAJVjRMMl9DVFJMX1RZUEVfTVBFRzJfUElDVFVSRSAgICAgICAgPSAweDAy NTIsCj4gKwo+ICsJVjRMMl9DVFJMX1RZUEVfVlA5X0NPTVBSRVNTRURfSERSX1BST0JTCT0gMHgw MjYwLAo+ICsJVjRMMl9DVFJMX1RZUEVfVlA5X0ZSQU1FCQk9IDB4MDI2MSwKPiAgfTsKPiAgCj4g IC8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllDVFJMIGlvY3RsIGZvciBxdWVyeWluZyBjb250 cm9scyAqLwo+IC0tIAo+IDIuMTcuMQo+IAo+IAoKCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4 LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D997AC4338F for ; Mon, 9 Aug 2021 18:06:52 +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 8523A61004 for ; Mon, 9 Aug 2021 18:06:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 8523A61004 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=y2BuKxQzdEVwjS5hvxwzj3RozHGrkxFOjczoadKR7zA=; b=pTQ6brXxxb9zom fLjCkEj44y8wOWKx96z7/BusDHORd5tCIZoNSWGw8Vyd/NQenABz8NPSIbz4dmpj2wgqzoVIoTg9Y sVd/DjFMTzhtcxsjk96ynN3M2yx4BmEGce8SeE/M3QqEhXkvgTmqThDj46IIAjT+KzepljGnBVOcZ 9FWVVKsIP8M6GB73u2auvBZ/kuoDBt8l/CofA0LohDcg0TcFsLFolRjIr0lqoyhHhNbtdqRqbymmU jjuS0P4tMrJPVDYyY+MHjSjz/rL8G5k/JrtEOhJb0S0HHKumoEA4Rua5jWp7K5t1EoMQWmpPu0qLQ 0M+1YFLGHvR0fgrUkClg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mD9dL-001dl2-J1; Mon, 09 Aug 2021 18:04:19 +0000 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mD9dF-001djL-Tw; Mon, 09 Aug 2021 18:04:17 +0000 Received: by mail-wr1-x42e.google.com with SMTP id l18so22600977wrv.5; Mon, 09 Aug 2021 11:04:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QtQqwt3VI+trnMEx32LMLIe8V5MgPCsexLq/UHW/lps=; b=GlMehTIt3clj/opou7/HNpCqR8E7xoRAnzRjV0F096VOLDGNY9Z6AW3P+DplXaIDz+ 6WH2yU6AtDoE0lBsNmJDPgSFOGL89BHxGIS9jbSVAZh3qLH7Hcchr1PlS4zqjC1fXRvG LRw/0w0R1QInmHmlc4p/QWzYH0TCiYfWWBxotZRyM3KPm1zqf7Avva9OkfDe4pSgCg8E 72jdVHx3H6vGpvKnYZymzr4jXMdn+oLC/e5OxfruCfG0vrYZsUGUpIzhzZ92ml/Utthb ByLrtgW4ERnd4B/bKiH5z8C4yqZx8BR+ePUnX7HTI+rFiWuqUgngarXnR6T1b7ew3IAZ VRhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QtQqwt3VI+trnMEx32LMLIe8V5MgPCsexLq/UHW/lps=; b=HsfdadQ9XOPnsC0UoOVlQe+/wtWc+1eZpJpCFoRcGYPyrh7ep1dw/ebEBd/BrjeE9F ce9R8/MVhU2yZe4rmxosh2gkuj+fRAi7WbvmWgQlp8bo8h7XfDr1RtAS8/2s4RoATDkF HinKBisw7v+uCUOXpiUnAT97IqrtA5/LJzAy6n0Rdte3TNwIFbujnN5pGzyqRhRVssFj BkIx25EYiIolIpCPIQXh4rXDahcQAYywHYgbfYqikq2wOVO1ORq9FgK/XRRTKLteQZbB J2ZDAkE17cS1F4fdsuhy/1VEse0N0RZyw37tHY3b9GpGT0SI/gbv4NbL+uJ4DobJCgL7 H5jw== X-Gm-Message-State: AOAM531o1TwsuOjml/tC778pQgMMSamL9N4qzWY8rtZJ6w+ZQ9DEOfzk y/QWCHgm+k2Ll49ramY2UBI= X-Google-Smtp-Source: ABdhPJxPG8cvzM8MDr2R5bsDfeI9wG/Eo1v9ODMH3nlO48uHgQ/ic0QcHaH4kOr2o6bMLd3LMDn35w== X-Received: by 2002:a5d:4e8f:: with SMTP id e15mr26545217wru.313.1628532251963; Mon, 09 Aug 2021 11:04:11 -0700 (PDT) Received: from kista.localnet (cpe-86-58-46-198.static.triera.net. [86.58.46.198]) by smtp.gmail.com with ESMTPSA id b20sm19508185wmj.48.2021.08.09.11.04.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Aug 2021 11:04:11 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, Andrzej Pietrasiewicz Cc: Andrzej Pietrasiewicz , Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Mauro Carvalho Chehab , Nicolas Dufresne , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com, Ezequiel Garcia , Adrian Ratiu , Daniel Almeida Subject: Re: [PATCH v3 05/10] media: uapi: Add VP9 stateless decoder controls Date: Mon, 09 Aug 2021 20:04:09 +0200 Message-ID: <5154683.x8GX3iSW2O@kista> In-Reply-To: <20210805144246.11998-6-andrzej.p@collabora.com> References: <20210805144246.11998-1-andrzej.p@collabora.com> <20210805144246.11998-6-andrzej.p@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210809_110414_057737_FB4CB968 X-CRM114-Status: GOOD ( 31.07 ) 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 SGkgQW5kcnplaiEKCkRuZSDEjWV0cnRlaywgMDUuIGF2Z3VzdCAyMDIxIG9iIDE2OjQyOjQxIENF U1QgamUgQW5kcnplaiBQaWV0cmFzaWV3aWN6IApuYXBpc2FsKGEpOgo+IEFkZCB0aGUgVlA5IHN0 YXRlbGVzcyBkZWNvZGVyIGNvbnRyb2xzIHBsdXMgdGhlIGRvY3VtZW50YXRpb24gdGhhdCBnb2Vz Cj4gd2l0aCBpdC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJy ZXppbGxvbkBjb2xsYWJvcmEuY29tPgo+IENvLWRldmVsb3BlZC1ieTogRXplcXVpZWwgR2FyY2lh IDxlemVxdWllbEBjb2xsYWJvcmEuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEV6ZXF1aWVsIEdhcmNp YSA8ZXplcXVpZWxAY29sbGFib3JhLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBZHJpYW4gUmF0aXUg PGFkcmlhbi5yYXRpdUBjb2xsYWJvcmEuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFuZHJ6ZWogUGll dHJhc2lld2ljeiA8YW5kcnplai5wQGNvbGxhYm9yYS5jb20+Cj4gQ28tZGV2ZWxvcGVkLWJ5OiBE YW5pZWwgQWxtZWlkYSA8ZGFuaWVsLmFsbWVpZGFAY29sbGFib3JhLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBEYW5pZWwgQWxtZWlkYSA8ZGFuaWVsLmFsbWVpZGFAY29sbGFib3JhLmNvbT4KPiAtLS0K PiAgLi4uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL2JpYmxpby5yc3QgICAgICAgIHwgIDEwICsK PiAgLi4uL21lZGlhL3Y0bC9leHQtY3RybHMtY29kZWMtc3RhdGVsZXNzLnJzdCAgIHwgNTQ1ICsr KysrKysrKysrKysrKysrKwo+ICAuLi4vbWVkaWEvdjRsL3BpeGZtdC1jb21wcmVzc2VkLnJzdCAg ICAgICAgICAgfCAgMTUgKwo+ICAuLi4vbWVkaWEvdjRsL3ZpZGlvYy1nLWV4dC1jdHJscy5yc3Qg ICAgICAgICAgfCAgIDggKwo+ICAuLi4vbWVkaWEvdjRsL3ZpZGlvYy1xdWVyeWN0cmwucnN0ICAg ICAgICAgICAgfCAgMTIgKwo+ICAuLi4vbWVkaWEvdmlkZW9kZXYyLmgucnN0LmV4Y2VwdGlvbnMg ICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWN0cmxzLWNv cmUuYyAgICAgfCAxNzQgKysrKysrCj4gIGRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItY3Ry bHMtZGVmcy5jICAgICB8ICAgOCArCj4gIGRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaW9j dGwuYyAgICAgICAgICB8ICAgMSArCj4gIGluY2x1ZGUvbWVkaWEvdjRsMi1jdHJscy5oICAgICAg ICAgICAgICAgICAgICB8ICAgNCArCj4gIGluY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xz LmggICAgICAgICAgICB8IDQzMyArKysrKysrKysrKysrKwo+ICBpbmNsdWRlL3VhcGkvbGludXgv dmlkZW9kZXYyLmggICAgICAgICAgICAgICAgfCAgIDYgKwo+ICAxMiBmaWxlcyBjaGFuZ2VkLCAx MjE4IGluc2VydGlvbnMoKykKPiAKCjxzbmlwPgoKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBp L2xpbnV4L3Y0bDItY29udHJvbHMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC92NGwyLQpjb250cm9s cy5oCj4gaW5kZXggNTUzMmI1ZjY4NDkzLi44ZjhjM2MxYWQ4ODUgMTAwNjQ0Cj4gLS0tIGEvaW5j bHVkZS91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaAo+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC92NGwyLWNvbnRyb2xzLmgKPiBAQCAtMjAxMCw2ICsyMDEwLDQzOSBAQCBzdHJ1Y3QgdjRsMl9j dHJsX2hkcjEwX21hc3RlcmluZ19kaXNwbGF5IHsKPiAgCV9fdTMyIG1pbl9kaXNwbGF5X21hc3Rl cmluZ19sdW1pbmFuY2U7Cj4gIH07Cj4gIAo+ICsvKiBTdGF0ZWxlc3MgVlA5IGNvbnRyb2xzICov Cj4gKwo+ICsvKioKPiArICogZW51bSB2NGwyX3ZwOV9sb29wX2ZpbHRlcl9mbGFncyAtIFZQOSBs b29wIGZpbHRlciBmbGFncwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfTE9PUF9GSUxURVJfRkxBR19E RUxUQV9FTkFCTEVEOiB0aGUgZmlsdGVyIGxldmVsIGRlcGVuZHMgb24KPiArICoJdGhlIG1vZGUg YW5kIHJlZmVyZW5jZSBmcmFtZSB1c2VkIHRvIHByZWRpY3QgYSBibG9jawo+ICsgKiBAVjRMMl9W UDlfTE9PUF9GSUxURVJfRkxBR19ERUxUQV9VUERBVEU6IHRoZSBiaXRzdHJlYW0gY29udGFpbnMg CmFkZGl0aW9uYWwKPiArICoJc3ludGF4IGVsZW1lbnRzIHRoYXQgc3BlY2lmeSB3aGljaCBtb2Rl IGFuZCByZWZlcmVuY2UgZnJhbWUgZGVsdGFzIAphcmUgdG8gYmUgdXBkYXRlZAo+ICsgKgo+ICsg KiBUaG9zZSBhcmUgdGhlIGZsYWdzIHRoYXQgbWF5IGJlIHBhc3NlZCB0byAmdjRsMl92cDlfbG9v cF9maWx0ZXIuZmxhZ3MuIFNlZQo+ICsgKiBzZWN0aW9uICc3LjIuOCBMb29wIGZpbHRlciBzZW1h bnRpY3MnIG9mIHRoZSBWUDkgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZQo+ICsgKiBkZXRhaWxzLgo+ ICsgKi8KPiArZW51bSB2NGwyX3ZwOV9sb29wX2ZpbHRlcl9mbGFncyB7Cj4gKwlWNEwyX1ZQOV9M T09QX0ZJTFRFUl9GTEFHX0RFTFRBX0VOQUJMRUQgPSAxIDw8IDAsCj4gKwlWNEwyX1ZQOV9MT09Q X0ZJTFRFUl9GTEFHX0RFTFRBX1VQREFURSA9IDEgPDwgMSwKPiArfTsKPiArCj4gKy8qKgo+ICsg KiBzdHJ1Y3QgdjRsMl92cDlfbG9vcF9maWx0ZXIgLSBWUDkgbG9vcCBmaWx0ZXIgcGFyYW1ldGVy cwo+ICsgKgo+ICsgKiBAcmVmX2RlbHRhczogY29udGFpbnMgdGhlIGFkanVzdG1lbnQgbmVlZGVk IGZvciB0aGUgZmlsdGVyIGxldmVsIGJhc2VkIG9uIAp0aGUgY2hvc2VuCj4gKyAqCXJlZmVyZW5j ZSBmcmFtZS4gSWYgdGhpcyBzeW50YXggZWxlbWVudCBpcyBub3QgcHJlc2VudCBpbiB0aGUgCmJp dHN0cmVhbSwgdXNlcnMKPiArICoJc2hvdWxkIHBhc3MgaXRzIGxhc3QgdmFsdWUuCj4gKyAqIEBt b2RlX2RlbHRhczogY29udGFpbnMgdGhlIGFkanVzdG1lbnQgbmVlZGVkIGZvciB0aGUgZmlsdGVy IGxldmVsIGJhc2VkIApvbiB0aGUgY2hvc2VuIG1vZGUuCj4gKyAqCUlmIHRoaXMgc3ludGF4IGVs ZW1lbnQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbSwgdXNlcnMKPiArICoJc2hvdWxk IHBhc3MgaXRzIGxhc3QgdmFsdWUuCj4gKyAqIEBsZXZlbDogaW5kaWNhdGVzIHRoZSBsb29wIGZp bHRlciBzdHJlbmd0aAo+ICsgKiBAc2hhcnBuZXNzOiBpbmRpY2F0ZXMgdGhlIHNoYXJwbmVzcyBs ZXZlbAo+ICsgKiBAZmxhZ3M6IGNvbWJpbmF0aW9uIG9mIFY0TDJfVlA5X0xPT1BfRklMVEVSX0ZM QUdfKiBmbGFncwo+ICsgKiBAcmVzZXJ2ZWQ6IHBhZGRpbmcgZmllbGQuIFNob3VsZCBiZSB6ZXJv ZWQgYnkgYXBwbGljYXRpb25zLgo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBh bGwgbG9vcCBmaWx0ZXIgcmVsYXRlZCBwYXJhbWV0ZXJzLiBTZWUgc2VjdGlvbnMKPiArICogJzcu Mi44IExvb3AgZmlsdGVyIHNlbWFudGljcycgb2YgdGhlIFZQOSBzcGVjaWZpY2F0aW9uIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqLwo+ICtzdHJ1Y3QgdjRsMl92cDlfbG9vcF9maWx0ZXIgewo+ICsJ X19zOCByZWZfZGVsdGFzWzRdOwo+ICsJX19zOCBtb2RlX2RlbHRhc1syXTsKPiArCV9fdTggbGV2 ZWw7Cj4gKwlfX3U4IHNoYXJwbmVzczsKPiArCV9fdTggZmxhZ3M7Cj4gKwlfX3U4IHJlc2VydmVk WzddOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB2NGwyX3ZwOV9xdWFudGl6YXRpb24g LSBWUDkgcXVhbnRpemF0aW9uIHBhcmFtZXRlcnMKPiArICoKPiArICogQGJhc2VfcV9pZHg6IGlu ZGljYXRlcyB0aGUgYmFzZSBmcmFtZSBxaW5kZXgKPiArICogQGRlbHRhX3FfeV9kYzogaW5kaWNh dGVzIHRoZSBZIERDIHF1YW50aXplciByZWxhdGl2ZSB0byBiYXNlX3FfaWR4Cj4gKyAqIEBkZWx0 YV9xX3V2X2RjOiBpbmRpY2F0ZXMgdGhlIFVWIERDIHF1YW50aXplciByZWxhdGl2ZSB0byBiYXNl X3FfaWR4Cj4gKyAqIEBkZWx0YV9xX3V2X2FjOiBpbmRpY2F0ZXMgdGhlIFVWIEFDIHF1YW50aXpl ciByZWxhdGl2ZSB0byBiYXNlX3FfaWR4Cj4gKyAqIEByZXNlcnZlZDogcGFkZGluZyBmaWVsZC4g U2hvdWxkIGJlIHplcm9lZCBieSBhcHBsaWNhdGlvbnMuCj4gKyAqCj4gKyAqIEVuY29kZXMgdGhl IHF1YW50aXphdGlvbiBwYXJhbWV0ZXJzLiBTZWUgc2VjdGlvbiAnNy4yLjkgUXVhbnRpemF0aW9u IApwYXJhbXMKPiArICogc3ludGF4JyBvZiB0aGUgVlA5IHNwZWNpZmljYXRpb24gZm9yIG1vcmUg ZGV0YWlscy4KPiArICovCj4gK3N0cnVjdCB2NGwyX3ZwOV9xdWFudGl6YXRpb24gewo+ICsJX191 OCBiYXNlX3FfaWR4Owo+ICsJX19zOCBkZWx0YV9xX3lfZGM7Cj4gKwlfX3M4IGRlbHRhX3FfdXZf ZGM7Cj4gKwlfX3M4IGRlbHRhX3FfdXZfYWM7Cj4gKwlfX3U4IHJlc2VydmVkWzRdOwo+ICt9Owo+ ICsKPiArLyoqCj4gKyAqIGVudW0gdjRsMl92cDlfc2VnbWVudGF0aW9uX2ZsYWdzIC0gVlA5IHNl Z21lbnRhdGlvbiBmbGFncwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdf RU5BQkxFRDogaW5kaWNhdGVzIHRoYXQgdGhpcyBmcmFtZSBtYWtlcyB1c2UgCm9mCj4gKyAqCXRo ZSBzZWdtZW50YXRpb24gdG9vbAo+ICsgKiBAVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBE QVRFX01BUDogaW5kaWNhdGVzIHRoYXQgdGhlIHNlZ21lbnRhdGlvbiAKbWFwCj4gKyAqCXNob3Vs ZCBiZSB1cGRhdGVkIGR1cmluZyB0aGUgZGVjb2Rpbmcgb2YgdGhpcyBmcmFtZQo+ICsgKiBAVjRM Ml9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVEVNUE9SQUxfVVBEQVRFOiBpbmRpY2F0ZXMgdGhhdCB0 aGUgdXBkYXRlcyAKdG8KPiArICoJdGhlIHNlZ21lbnRhdGlvbiBtYXAgYXJlIGNvZGVkIHJlbGF0 aXZlIHRvIHRoZSBleGlzdGluZyAKc2VnbWVudGF0aW9uIG1hcAo+ICsgKiBAVjRMMl9WUDlfU0VH TUVOVEFUSU9OX0ZMQUdfVVBEQVRFX0RBVEE6IGluZGljYXRlcyB0aGF0IG5ldyBwYXJhbWV0ZXJz IAphcmUKPiArICoJYWJvdXQgdG8gYmUgc3BlY2lmaWVkIGZvciBlYWNoIHNlZ21lbnQKPiArICog QFY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX0FCU19PUl9ERUxUQV9VUERBVEU6IGluZGljYXRl cyB0aGF0IHRoZQo+ICsgKglzZWdtZW50YXRpb24gcGFyYW1ldGVycyByZXByZXNlbnQgdGhlIGFj dHVhbCB2YWx1ZXMgdG8gYmUgdXNlZAo+ICsgKgo+ICsgKiBUaG9zZSBhcmUgdGhlIGZsYWdzIHRo YXQgbWF5IGJlIHBhc3NlZCB0byAmdjRsMl92cDlfc2VnbWVudGF0aW9uLmZsYWdzLiAKU2VlCj4g KyAqIHNlY3Rpb24gJzcuMi4xMCBTZWdtZW50YXRpb24gcGFyYW1zIHN5bnRheCcgb2YgdGhlIFZQ OSBzcGVjaWZpY2F0aW9uIGZvcgo+ICsgKiBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICtlbnVtIHY0 bDJfdnA5X3NlZ21lbnRhdGlvbl9mbGFncyB7Cj4gKwlWNEwyX1ZQOV9TRUdNRU5UQVRJT05fRkxB R19FTkFCTEVEID0gMSA8PCAwLAo+ICsJVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBEQVRF X01BUCA9IDEgPDwgMSwKPiArCVY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX1RFTVBPUkFMX1VQ REFURSA9IDEgPDwgMiwKPiArCVY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFHX1VQREFURV9EQVRB ID0gMSA8PCAzLAo+ICsJVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfQUJTX09SX0RFTFRBX1VQ REFURSA9IDEgPDwgNCwKPiArfTsKPiArCj4gKyNkZWZpbmUgVjRMMl9WUDlfU0VHTUVOVF9GRUFU VVJFX0VOQUJMRUQoaWQpCSgxIDw8IChpZCkpCj4gKyNkZWZpbmUgVjRMMl9WUDlfU0VHTUVOVF9G RUFUVVJFX0VOQUJMRURfTUFTSwkweGYKPiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X3Nl Z21lbnRfZmVhdHVyZSAtIFZQOSBzZWdtZW50IGZlYXR1cmUgSURzCj4gKyAqCj4gKyAqIEBWNEwy X1ZQOV9TRUdfTFZMX0FMVF9ROiBxdWFudGl6ZXIgc2VnbWVudCBmZWF0dXJlCj4gKyAqIEBWNEwy X1ZQOV9TRUdfTFZMX0FMVF9MOiBsb29wIGZpbHRlciBzZWdtZW50IGZlYXR1cmUKPiArICogQFY0 TDJfVlA5X1NFR19MVkxfUkVGX0ZSQU1FIHJlZmVyZW5jZSBmcmFtZSBzZWdtZW50IGZlYXR1cmUK PiArICogQFY0TDJfVlA5X1NFR19MVkxfU0tJUDogc2tpcCBzZWdtZW50IGZlYXR1cmUKPiArICog QFY0TDJfVlA5X1NFR19MVlZfTUFYOiBudW1iZXIgb2Ygc2VnbWVudCBmZWF0dXJlcwo+ICsgKgo+ ICsgKiBTZWdtZW50IGZlYXR1cmUgSURzLiBTZWUgc2VjdGlvbiAnNy4yLjEwIFNlZ21lbnRhdGlv biBwYXJhbXMgc3ludGF4JyBvZiAKdGhlCj4gKyAqIFZQOSBzcGVjaWZpY2F0aW9uIGZvciBtb3Jl IGRldGFpbHMuCj4gKyAqLwo+ICtlbnVtIHY0bDJfdnA5X3NlZ21lbnRfZmVhdHVyZSB7Cj4gKwlW NEwyX1ZQOV9TRUdfTFZMX0FMVF9RLAo+ICsJVjRMMl9WUDlfU0VHX0xWTF9BTFRfTCwKPiArCVY0 TDJfVlA5X1NFR19MVkxfUkVGX0ZSQU1FLAo+ICsJVjRMMl9WUDlfU0VHX0xWTF9TS0lQLAo+ICsJ VjRMMl9WUDlfU0VHX0xWTF9NQVgsCj4gK307CgpXaGF0IGlzIHRoZSByZWFzb24gbm90IHRvIGFz c2lnbiB2YWx1ZXMgbGlrZSAxIDw8IDAsIDEgPDwgMSwgZXRjLiBhbmQgaW5zdGVhZCAKcHJvdmlk ZSBzZXBhcmF0ZSBtYWNybyBWNEwyX1ZQOV9TRUdNRU5UX0ZFQVRVUkVfRU5BQkxFRCgpPyBUaGlz IGlzIGEgZGVwYXJ0dXJlIApmcm9tIGN1cnJlbnQgcHJhY3RpY2UuCgo+ICsKPiArLyoqCj4gKyAq IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRpb24gLSBWUDkgc2VnbWVudGF0aW9uIHBhcmFtZXRl cnMKPiArICoKPiArICogQGZlYXR1cmVfZGF0YTogZGF0YSBhdHRhY2hlZCB0byBlYWNoIGZlYXR1 cmUuIERhdGEgZW50cnkgaXMgb25seSB2YWxpZCAKaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZAo+ ICsgKiBAZmVhdHVyZV9lbmFibGVkOiBiaXRtYXNrIGRlZmluaW5nIHdoaWNoIGZlYXR1cmVzIGFy ZSBlbmFibGVkIGluIGVhY2ggCnNlZ21lbnQKPiArICogQHRyZWVfcHJvYnM6IHNwZWNpZmllcyB0 aGUgcHJvYmFiaWxpdHkgdmFsdWVzIHRvIGJlIHVzZWQgd2hlbgo+ICsgKglkZWNvZGluZyBhIFNl Z21lbnQtSUQuIFNlZSAnNS4xNS4gU2VnbWVudGF0aW9uIG1hcCcgc2VjdGlvbiBvZiB0aGUgClZQ OSBzcGVjaWZpY2F0aW9uCj4gKyAqCWZvciBtb3JlIGRldGFpbHMuCj4gKyAqIEBwcmVkX3Byb2Jz OiBzcGVjaWZpZXMgdGhlIHByb2JhYmlsaXR5IHZhbHVlcyB0byBiZSB1c2VkIHdoZW4gZGVjb2Rp bmcgYQo+ICsgKglQcmVkaWN0ZWQtU2VnbWVudC1JRC4gU2VlICc2LjQuMTQuIEdldCBzZWdtZW50 IGlkIHN5bnRheCcgc2VjdGlvbiAKb2YgOnJlZjpgdnA5YAo+ICsgKglmb3IgbW9yZSBkZXRhaWxz Lgo+ICsgKiBAZmxhZ3M6IGNvbWJpbmF0aW9uIG9mIFY0TDJfVlA5X1NFR01FTlRBVElPTl9GTEFH XyogZmxhZ3MKPiArICogQHJlc2VydmVkOiBwYWRkaW5nIGZpZWxkLiBTaG91bGQgYmUgemVyb2Vk IGJ5IGFwcGxpY2F0aW9ucy4KPiArICoKPiArICogRW5jb2RlcyB0aGUgcXVhbnRpemF0aW9uIHBh cmFtZXRlcnMuIFNlZSBzZWN0aW9uICc3LjIuMTAgU2VnbWVudGF0aW9uIApwYXJhbXMgc3ludGF4 JyBvZgo+ICsgKiB0aGUgVlA5IHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4KPiArICov Cj4gK3N0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRpb24gewo+ICsJX19zMTYgZmVhdHVyZV9kYXRh WzhdWzRdOwo+ICsJX191OCBmZWF0dXJlX2VuYWJsZWRbOF07Cj4gKwlfX3U4IHRyZWVfcHJvYnNb N107Cj4gKwlfX3U4IHByZWRfcHJvYnNbM107Cj4gKwlfX3U4IGZsYWdzOwo+ICsJX191OCByZXNl cnZlZFs1XTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X2ludHJhX3ByZWRp Y3Rpb25fbW9kZSAtIFZQOSBJbnRyYSBwcmVkaWN0aW9uIG1vZGVzCj4gKyAqCj4gKyAqIEBWNEwy X1ZQOV9JTlRSQV9QUkVEX01PREVfRENfUFJFRDogREMgaW50cmEgcHJlZGljdGlvbgo+ICsgKiBA VjRMMl9WUDlfSU5UUkFfUFJFRF9NT0RFX1ZfUFJFRDogdmVydGljYWwgaW50cmEgcHJlZGljdGlv bgo+ICsgKiBAVjRMMl9WUDlfSU5UUkFfUFJFRF9NT0RFX0hfUFJFRDogaG9yaXpvbnRhbCBpbnRy YSBwcmVkaWN0aW9uCj4gKyAqIEBWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfRDQ1X1BSRUQ6IEQ0 NSBpbnRyYSBwcmVkaWN0aW9uCj4gKyAqIEBWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfRDEzNV9Q UkVEOiBEMTM1IGludHJhIHByZWRpY3Rpb24KPiArICogQFY0TDJfVlA5X0lOVFJBX1BSRURfTU9E RV9EMTE3X1BSRUQ6IEQxMTcgaW50cmEgcHJlZGljdGlvbgo+ICsgKiBAVjRMMl9WUDlfSU5UUkFf UFJFRF9NT0RFX0QxNTNfUFJFRDogRDE1MyBpbnRyYSBwcmVkaWN0aW9uCj4gKyAqIEBWNEwyX1ZQ OV9JTlRSQV9QUkVEX01PREVfRDIwN19QUkVEOiBEMjA3IGludHJhIHByZWRpY3Rpb24KPiArICog QFY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9ENjNfUFJFRDogRDYzIGludHJhIHByZWRpY3Rpb24K PiArICogQFY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9UTV9QUkVEOiBUcnVlIE1vdGlvbiBpbnRy YSBwcmVkaWN0aW9uCj4gKyAqCj4gKyAqIFNlZSBzZWN0aW9uICc3LjQuNSBJbnRyYSBmcmFtZSBt b2RlIGluZm8gc2VtYW50aWNzJyBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArZW51bSB2NGwy X3ZwOV9pbnRyYV9wcmVkaWN0aW9uX21vZGUgewo+ICsJVjRMMl9WUDlfSU5UUkFfUFJFRF9NT0RF X0RDX1BSRUQsCj4gKwlWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfVl9QUkVELAo+ICsJVjRMMl9W UDlfSU5UUkFfUFJFRF9NT0RFX0hfUFJFRCwKPiArCVY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9E NDVfUFJFRCwKPiArCVY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9EMTM1X1BSRUQsCj4gKwlWNEwy X1ZQOV9JTlRSQV9QUkVEX01PREVfRDExN19QUkVELAo+ICsJVjRMMl9WUDlfSU5UUkFfUFJFRF9N T0RFX0QxNTNfUFJFRCwKPiArCVY0TDJfVlA5X0lOVFJBX1BSRURfTU9ERV9EMjA3X1BSRUQsCj4g KwlWNEwyX1ZQOV9JTlRSQV9QUkVEX01PREVfRDYzX1BSRUQsCj4gKwlWNEwyX1ZQOV9JTlRSQV9Q UkVEX01PREVfVE1fUFJFRCwKPiArfTsKCkkgZGlzbGlrZSB1c2luZyBlbnVtcyB3aXRob3V0IGFz c2lnbmluZyB2YWx1ZXMuIEkgc2VlIHRoYXQgaGlzdG9yaWNhbGx5IChhdCAKdGhlIGJlZ2lubmlu ZyBvZiB0aGlzIGZpbGUpLCB2YWx1ZXMgd2VyZSBhbHdheXMgYXNzaWduZWQuIEhvd2V2ZXIsIGlm IAptYWludGFpbmVycyBhZ3JlZSB3aXRoIHlvdSwgdGhhdCdzIGZpbmUgYnkgbWUuCgo+ICsKPiAr LyoqCj4gKyAqIGVudW0gdjRsMl92cDlfcmVzZXRfZnJhbWVfY29udGV4dCAtIFZhbGlkIHZhbHVl cyBmb3IKPiArICoJCQkmdjRsMl9jdHJsX3ZwOV9mcmFtZS0+cmVzZXRfZnJhbWVfY29udGV4dAo+ ICsgKgo+ICsgKiBAVjRMMl9WUDlfUkVTRVRfRlJBTUVfQ1RYX05PTkU6IGRvbid0IHJlc2V0IGFu eSBmcmFtZSBjb250ZXh0Cj4gKyAqIEBWNEwyX1ZQOV9SRVNFVF9GUkFNRV9DVFhfU1BFQzogcmVz ZXQgdGhlIGZyYW1lIGNvbnRleHQgcG9pbnRlZCBieQo+ICsgKgkmdjRsMl9jdHJsX3ZwOV9mcmFt ZS5mcmFtZV9jb250ZXh0X2lkeAo+ICsgKiBAVjRMMl9WUDlfUkVTRVRfRlJBTUVfQ1RYX0FMTDog cmVzZXQgYWxsIGZyYW1lIGNvbnRleHRzCj4gKyAqCj4gKyAqIFNlZSBzZWN0aW9uICc3LjIgVW5j b21wcmVzc2VkIGhlYWRlciBzZW1hbnRpY3MnIG9mIHRoZSBWUDkgc3BlY2lmaWNhdGlvbiAKZm9y IG1vcmUgZGV0YWlscy4KPiArICovCj4gK2VudW0gdjRsMl92cDlfcmVzZXRfZnJhbWVfY29udGV4 dCB7Cj4gKwlWNEwyX1ZQOV9SRVNFVF9GUkFNRV9DVFhfTk9ORSwKPiArCVY0TDJfVlA5X1JFU0VU X0ZSQU1FX0NUWF9TUEVDLAo+ICsJVjRMMl9WUDlfUkVTRVRfRlJBTUVfQ1RYX0FMTCwKPiArfTsK PiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X2ludGVycG9sYXRpb25fZmlsdGVyIC0gVlA5 IGludGVycG9sYXRpb24gZmlsdGVyIHR5cGVzCj4gKyAqCj4gKyAqIEBWNEwyX1ZQOV9JTlRFUlBf RklMVEVSX0VJR0hUVEFQOiBlaWdodCB0YXAgZmlsdGVyCj4gKyAqIEBWNEwyX1ZQOV9JTlRFUlBf RklMVEVSX0VJR0hUVEFQX1NNT09USDogZWlnaHQgdGFwIHNtb290aCBmaWx0ZXIKPiArICogQFY0 TDJfVlA5X0lOVEVSUF9GSUxURVJfRUlHSFRUQVBfU0hBUlA6IGVpZ2h0IHRhcCBzaGFycCBmaWx0 ZXIKPiArICogQFY0TDJfVlA5X0lOVEVSUF9GSUxURVJfQklMSU5FQVI6IGJpbGluZWFyIGZpbHRl cgo+ICsgKiBAVjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9TV0lUQ0hBQkxFOiBmaWx0ZXIgc2VsZWN0 aW9uIGlzIHNpZ25hbGVkIGF0IHRoZSAKYmxvY2sgbGV2ZWwKPiArICoKPiArICogU2VlIHNlY3Rp b24gJzcuMi43IEludGVycG9sYXRpb24gZmlsdGVyIHNlbWFudGljcycgb2YgdGhlIFZQOSAKc3Bl Y2lmaWNhdGlvbgo+ICsgKiBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArZW51bSB2NGwyX3Zw OV9pbnRlcnBvbGF0aW9uX2ZpbHRlciB7Cj4gKwlWNEwyX1ZQOV9JTlRFUlBfRklMVEVSX0VJR0hU VEFQLAo+ICsJVjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9FSUdIVFRBUF9TTU9PVEgsCj4gKwlWNEwy X1ZQOV9JTlRFUlBfRklMVEVSX0VJR0hUVEFQX1NIQVJQLAo+ICsJVjRMMl9WUDlfSU5URVJQX0ZJ TFRFUl9CSUxJTkVBUiwKPiArCVY0TDJfVlA5X0lOVEVSUF9GSUxURVJfU1dJVENIQUJMRSwKPiAr fTsKPiArCj4gKy8qKgo+ICsgKiBlbnVtIHY0bDJfdnA5X3JlZmVyZW5jZV9tb2RlIC0gVlA5IHJl ZmVyZW5jZSBtb2Rlcwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfU0lOR0xF X1JFRkVSRU5DRTogaW5kaWNhdGVzIHRoYXQgYWxsIHRoZSBpbnRlciAKYmxvY2tzIHVzZSBvbmx5 IGEKPiArICoJc2luZ2xlIHJlZmVyZW5jZSBmcmFtZSB0byBnZW5lcmF0ZSBtb3Rpb24gY29tcGVu c2F0ZWQgcHJlZGljdGlvbgo+ICsgKiBAVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfQ09NUE9VTkRf UkVGRVJFTkNFOiByZXF1aXJlcyBhbGwgdGhlIGludGVyIApibG9ja3MgdG8gdXNlIGNvbXBvdW5k IG1vZGUuCj4gKyAqCVNpbmdsZSByZWZlcmVuY2UgZnJhbWUgcHJlZGljdGlvbiBpcyBub3QgYWxs b3dlZAo+ICsgKiBAVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfU0VMRUNUOiBhbGxvd3MgZWFjaCBp bmRpdmlkdWFsIGludGVyIGJsb2NrIHRvIApzZWxlY3QgYmV0d2VlbiBzaW5nbGUKPiArICoJYW5k IGNvbXBvdW5kIHByZWRpY3Rpb24gbW9kZXMKPiArICoKPiArICogU2VlIHNlY3Rpb24gJzcuMy42 IEZyYW1lIHJlZmVyZW5jZSBtb2RlIHNlbWFudGljcycgb2YgdGhlIFZQOSAKc3BlY2lmaWNhdGlv bgo+ICsgKiBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKi8KPiArZW51bSB2NGwyX3ZwOV9yZWZlcmVu Y2VfbW9kZSB7Cj4gKwlWNEwyX1ZQOV9SRUZFUkVOQ0VfTU9ERV9TSU5HTEVfUkVGRVJFTkNFLAo+ ICsJVjRMMl9WUDlfUkVGRVJFTkNFX01PREVfQ09NUE9VTkRfUkVGRVJFTkNFLAo+ICsJVjRMMl9W UDlfUkVGRVJFTkNFX01PREVfU0VMRUNULAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gdjRs Ml92cDlfdHhfbW9kZSAtIFZQOSBUWCBtb2Rlcwo+ICsgKgo+ICsgKiBAVjRMMl9WUDlfVFhfTU9E RV9PTkxZXzRYNDogdHJhbnNmb3JtIHNpemUgaXMgNHg0Cj4gKyAqIEBWNEwyX1ZQOV9UWF9NT0RF X0FMTE9XXzhYODogdHJhbnNmb3JtIHNpemUgY2FuIGJlIHVwIHRvIDh4OAo+ICsgKiBAVjRMMl9W UDlfVFhfTU9ERV9BTExPV18xNlgxNjogdHJhbnNmb3JtIHNpemUgY2FuIGJlIHVwIHRvIDE2eDE2 Cj4gKyAqIEBWNEwyX1ZQOV9UWF9NT0RFX0FMTE9XXzMyWDMyOiB0cmFuc2Zvcm0gc2l6ZSBjYW4g YmUgdXAgdG8gMzJ4MzIKPiArICogQFY0TDJfVlA5X1RYX01PREVfU0VMRUNUOiBiaXRzdHJlYW0g Y29udGFpbnMgdGhlIHRyYW5zZm9ybSBzaXplIGZvciBlYWNoIApibG9jawo+ICsgKgo+ICsgKiBT ZWUgc2VjdGlvbiAnNy4zLjEgVHggbW9kZSBzZW1hbnRpY3MnIG9mIHRoZSBWUDkgc3BlY2lmaWNh dGlvbiBmb3IgbW9yZSAKZGV0YWlscy4KPiArICovCj4gK2VudW0gdjRsMl92cDlfdHhfbW9kZSB7 Cj4gKwlWNEwyX1ZQOV9UWF9NT0RFX09OTFlfNFg0LAo+ICsJVjRMMl9WUDlfVFhfTU9ERV9BTExP V184WDgsCj4gKwlWNEwyX1ZQOV9UWF9NT0RFX0FMTE9XXzE2WDE2LAo+ICsJVjRMMl9WUDlfVFhf TU9ERV9BTExPV18zMlgzMiwKPiArCVY0TDJfVlA5X1RYX01PREVfU0VMRUNULAo+ICt9Owo+ICsK PiArLyoqCj4gKyAqIGVudW0gdjRsMl92cDlfZnJhbWVfZmxhZ3MgLSBWUDkgZnJhbWUgZmxhZ3MK PiArICogQFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FOiB0aGUgZnJhbWUgaXMgYSBrZXkg ZnJhbWUKPiArICogQFY0TDJfVlA5X0ZSQU1FX0ZMQUdfU0hPV19GUkFNRTogdGhlIGZyYW1lIHNo b3VsZCBiZSBkaXNwbGF5ZWQKPiArICogQFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJST1JfUkVTSUxJ RU5UOiB0aGUgZGVjb2Rpbmcgc2hvdWxkIGJlIGVycm9yIApyZXNpbGllbnQKPiArICogQFY0TDJf VlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWTogdGhlIGZyYW1lIGRvZXMgbm90IHJlZmVyZW5jZSBv dGhlciAKZnJhbWVzCj4gKyAqIEBWNEwyX1ZQOV9GUkFNRV9GTEFHX0FMTE9XX0hJR0hfUFJFQ19N VjogdGhlIGZyYW1lIGNhbiB1c2UgaGlnaCAKcHJlY2lzaW9uIG1vdGlvbiB2ZWN0b3JzCj4gKyAq IEBWNEwyX1ZQOV9GUkFNRV9GTEFHX1JFRlJFU0hfRlJBTUVfQ1RYOiBmcmFtZSBjb250ZXh0IHNo b3VsZCBiZSB1cGRhdGVkIAphZnRlciBkZWNvZGluZwo+ICsgKiBAVjRMMl9WUDlfRlJBTUVfRkxB R19QQVJBTExFTF9ERUNfTU9ERTogcGFyYWxsZWwgZGVjb2RpbmcgaXMgdXNlZAo+ICsgKiBAVjRM Ml9WUDlfRlJBTUVfRkxBR19YX1NVQlNBTVBMSU5HOiB2ZXJ0aWNhbCBzdWJzYW1wbGluZyBpcyBl bmFibGVkCj4gKyAqIEBWNEwyX1ZQOV9GUkFNRV9GTEFHX1lfU1VCU0FNUExJTkc6IGhvcml6b250 YWwgc3Vic2FtcGxpbmcgaXMgZW5hYmxlZAo+ICsgKiBAVjRMMl9WUDlfRlJBTUVfRkxBR19DT0xP Ul9SQU5HRV9GVUxMX1NXSU5HOiBmdWxsIFVWIHJhbmdlIGlzIHVzZWQKPiArICoKPiArICogQ2hl Y2sgdGhlIFZQOSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqLwo+ICtlbnVt IHY0bDJfdnA5X2ZyYW1lX2ZsYWdzIHsKPiArCVY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1F ID0gMSA8PCAwLAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19TSE9XX0ZSQU1FID0gMSA8PCAxLAo+ ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19FUlJPUl9SRVNJTElFTlQgPSAxIDw8IDIsCj4gKwlWNEwy X1ZQOV9GUkFNRV9GTEFHX0lOVFJBX09OTFkgPSAxIDw8IDMsCj4gKwlWNEwyX1ZQOV9GUkFNRV9G TEFHX0FMTE9XX0hJR0hfUFJFQ19NViA9IDEgPDwgNCwKPiArCVY0TDJfVlA5X0ZSQU1FX0ZMQUdf UkVGUkVTSF9GUkFNRV9DVFggPSAxIDw8IDUsCj4gKwlWNEwyX1ZQOV9GUkFNRV9GTEFHX1BBUkFM TEVMX0RFQ19NT0RFID0gMSA8PCA2LAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19YX1NVQlNBTVBM SU5HID0gMSA8PCA3LAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19ZX1NVQlNBTVBMSU5HID0gMSA8 PCA4LAo+ICsJVjRMMl9WUDlfRlJBTUVfRkxBR19DT0xPUl9SQU5HRV9GVUxMX1NXSU5HID0gMSA8 PCA5LAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGVudW0gdjRsMl92cDlfcmVmX2ZyYW1lX3NpZ25f YmlhcyAtIFdoZXRoZXIgcmVmX2ZyYW1lX3NpZ25fYmlhcyBpcyAxIGZvciAKYSBnaXZlbiByZWZl cmVuY2UgZnJhbWUKPiArICogQFY0TDJfVlA5X1NJR05fQklBU19MQVNUOiByZWZfZnJhbWVfc2ln bl9iaWFzIGlzIDEgZm9yIHRoZSAibGFzdCIgCnJlZmVyZW5jZSBmcmFtZQo+ICsgKiBAVjRMMl9W UDlfU0lHTl9CSUFTX0dPTERFTjogcmVmX2ZyYW1lX3NpZ25fYmlhcyBpcyAxIGZvciB0aGUgImdv bGRlbiIgCnJlZmVyZW5jZSBmcmFtZQo+ICsgKiBAVjRMMl9WUDlfU0lHTl9CSUFTX0FMVDogcmVm X2ZyYW1lX3NpZ25fYmlhcyBpcyAxIGZvciB0aGUgImFsdCIgCnJlZmVyZW5jZSBmcmFtZQo+ICsg Ki8KPiArCj4gK2VudW0gdjRsMl92cDlfcmVmX2ZyYW1lX3NpZ25fYmlhcyB7Cj4gKwlWNEwyX1ZQ OV9TSUdOX0JJQVNfTEFTVCwKPiArCVY0TDJfVlA5X1NJR05fQklBU19HT0xERU4sCj4gKwlWNEwy X1ZQOV9TSUdOX0JJQVNfQUxULAo+ICt9OwoKQXMgSSBtZW50aW9uZWQgYmVmb3JlLCB5b3UgcHJv YmFibHkgd2FudCB0byBhc3NpZ24gdmFsdWVzIGhlcmUsIHNpbmNlIHZhbHVlcyAKYXJlIHVzZWQg YXMgYml0bWFwLgoKPiArCj4gKyNkZWZpbmUgVjRMMl9WUDlfUFJPRklMRV9NQVgJCTMKPiArCj4g KyNkZWZpbmUgVjRMMl9DSURfU1RBVEVMRVNTX1ZQOV9GUkFNRQkoVjRMMl9DSURfQ09ERUNfU1RB VEVMRVNTX0JBU0UgKyAKMzAwKQo+ICsvKioKPiArICogc3RydWN0IHY0bDJfY3RybF92cDlfZnJh bWUgLSBWUDkgZnJhbWUgZGVjb2RpbmcgY29udHJvbAo+ICsgKgo+ICsgKiBAbGY6IGxvb3AgZmls dGVyIHBhcmFtZXRlcnMuIFNlZSAmdjRsMl92cDlfbG9vcF9maWx0ZXIgZm9yIG1vcmUgZGV0YWls cwo+ICsgKiBAcXVhbnQ6IHF1YW50aXphdGlvbiBwYXJhbWV0ZXJzLiBTZWUgJnY0bDJfdnA5X3F1 YW50aXphdGlvbiBmb3IgbW9yZSAKZGV0YWlscwo+ICsgKiBAc2VnOiBzZWdtZW50YXRpb24gcGFy YW1ldGVycy4gU2VlICZ2NGwyX3ZwOV9zZWdtZW50YXRpb24gZm9yIG1vcmUgCmRldGFpbHMKPiAr ICogQGZsYWdzOiBjb21iaW5hdGlvbiBvZiBWNEwyX1ZQOV9GUkFNRV9GTEFHXyogZmxhZ3MKPiAr ICogQGNvbXByZXNzZWRfaGVhZGVyX3NpemU6IGNvbXByZXNzZWQgaGVhZGVyIHNpemUgaW4gYnl0 ZXMKPiArICogQHVuY29tcHJlc3NlZF9oZWFkZXJfc2l6ZTogdW5jb21wcmVzc2VkIGhlYWRlciBz aXplIGluIGJ5dGVzCj4gKyAqIEBmcmFtZV93aWR0aF9taW51c18xOiBhZGQgMSB0byBpdCBhbmQg eW91J2xsIGdldCB0aGUgZnJhbWUgd2lkdGggCmV4cHJlc3NlZCBpbiBwaXhlbHMKPiArICogQGZy YW1lX2hlaWdodF9taW51c18xOiBhZGQgMSB0byBpdCBhbmQgeW91J2xsIGdldCB0aGUgZnJhbWUg aGVpZ2h0IApleHByZXNzZWQgaW4gcGl4ZWxzCj4gKyAqIEByZW5kZXJfd2lkdGhfbWludXNfMTog YWRkIDEgdG8gaXQgYW5kIHlvdSdsbCBnZXQgdGhlIGV4cGVjdGVkIHJlbmRlciAKd2lkdGggZXhw cmVzc2VkIGluCj4gKyAqCXBpeGVscy4gVGhpcyBpcyBub3QgdXNlZCBkdXJpbmcgdGhlIGRlY29k aW5nIHByb2Nlc3MgYnV0IG1pZ2h0IGJlIAp1c2VkIGJ5IEhXIHNjYWxlcnMKPiArICoJdG8gcHJl cGFyZSBhIGZyYW1lIHRoYXQncyByZWFkeSBmb3Igc2Nhbm91dAo+ICsgKiBAcmVuZGVyX2hlaWdo dF9taW51c18xOiBhZGQgMSB0byBpdCBhbmQgeW91J2xsIGdldCB0aGUgZXhwZWN0ZWQgcmVuZGVy IApoZWlnaHQgZXhwcmVzc2VkIGluCj4gKyAqCXBpeGVscy4gVGhpcyBpcyBub3QgdXNlZCBkdXJp bmcgdGhlIGRlY29kaW5nIHByb2Nlc3MgYnV0IG1pZ2h0IGJlIAp1c2VkIGJ5IEhXIHNjYWxlcnMK PiArICoJdG8gcHJlcGFyZSBhIGZyYW1lIHRoYXQncyByZWFkeSBmb3Igc2Nhbm91dAo+ICsgKiBA bGFzdF9mcmFtZV90czogImxhc3QiIHJlZmVyZW5jZSBidWZmZXIgdGltZXN0YW1wLgo+ICsgKiBU aGUgdGltZXN0YW1wIHJlZmVycyB0byB0aGUgdGltZXN0YW1wIGZpZWxkIGluIHN0cnVjdCB2NGwy X2J1ZmZlci4KPiArICogVXNlIHY0bDJfdGltZXZhbF90b19ucygpIHRvIGNvbnZlcnQgdGhlIHN0 cnVjdCB0aW1ldmFsIHRvIGEgX191NjQuCj4gKyAqIEBnb2xkZW5fZnJhbWVfdHM6ICJnb2xkZW4i IHJlZmVyZW5jZSBidWZmZXIgdGltZXN0YW1wLgo+ICsgKiBUaGUgdGltZXN0YW1wIHJlZmVycyB0 byB0aGUgdGltZXN0YW1wIGZpZWxkIGluIHN0cnVjdCB2NGwyX2J1ZmZlci4KPiArICogVXNlIHY0 bDJfdGltZXZhbF90b19ucygpIHRvIGNvbnZlcnQgdGhlIHN0cnVjdCB0aW1ldmFsIHRvIGEgX191 NjQuCj4gKyAqIEBhbHRfZnJhbWVfdHM6ICJhbHQiIHJlZmVyZW5jZSBidWZmZXIgdGltZXN0YW1w Lgo+ICsgKiBUaGUgdGltZXN0YW1wIHJlZmVycyB0byB0aGUgdGltZXN0YW1wIGZpZWxkIGluIHN0 cnVjdCB2NGwyX2J1ZmZlci4KPiArICogVXNlIHY0bDJfdGltZXZhbF90b19ucygpIHRvIGNvbnZl cnQgdGhlIHN0cnVjdCB0aW1ldmFsIHRvIGEgX191NjQuCj4gKyAqIEByZWZfZnJhbWVfc2lnbl9i aWFzOiBhIGJpdGZpZWxkIHNwZWNpZnlpbmcgd2hldGhlciB0aGUgc2lnbiBiaWFzIGlzIHNldCAK Zm9yIGEgZ2l2ZW4KPiArICoJcmVmZXJlbmNlIGZyYW1lLiBTZWUgJnY0bDJfdnA5X3JlZl9mcmFt ZV9zaWduX2JpYXMgZm9yIG1vcmUgCmRldGFpbHMuCj4gKyAqIEByZXNldF9mcmFtZV9jb250ZXh0 OiBzcGVjaWZpZXMgd2hldGhlciB0aGUgZnJhbWUgY29udGV4dCBzaG91bGQgYmUgcmVzZXQgCnRv IGRlZmF1bHQgdmFsdWVzLgo+ICsgKglTZWUgJnY0bDJfdnA5X3Jlc2V0X2ZyYW1lX2NvbnRleHQg Zm9yIG1vcmUgZGV0YWlscwo+ICsgKiBAZnJhbWVfY29udGV4dF9pZHg6IGZyYW1lIGNvbnRleHQg dGhhdCBzaG91bGQgYmUgdXNlZC91cGRhdGVkCj4gKyAqIEBwcm9maWxlOiBWUDkgcHJvZmlsZS4g Q2FuIGJlIDAsIDEsIDIgb3IgMwo+ICsgKiBAYml0X2RlcHRoOiBiaXRzIHBlciBjb21wb25lbnRz LiBDYW4gYmUgOCwgMTAgb3IgMTIuIE5vdGUgdGhhdCBub3QgYWxsIApwcm9maWxlcyBzdXBwb3J0 Cj4gKyAqCTEwIGFuZC9vciAxMiBiaXRzIGRlcHRocwo+ICsgKiBAaW50ZXJwb2xhdGlvbl9maWx0 ZXI6IHNwZWNpZmllcyB0aGUgZmlsdGVyIHNlbGVjdGlvbiB1c2VkIGZvciBwZXJmb3JtaW5nIApp bnRlciBwcmVkaWN0aW9uLgo+ICsgKglTZWUgJnY0bDJfdnA5X2ludGVycG9sYXRpb25fZmlsdGVy IGZvciBtb3JlIGRldGFpbHMKPiArICogQHRpbGVfY29sc19sb2cyOiBzcGVjaWZpZXMgdGhlIGJh c2UgMiBsb2dhcml0aG0gb2YgdGhlIHdpZHRoIG9mIGVhY2ggdGlsZSAKKHdoZXJlIHRoZSB3aWR0 aAo+ICsgKglpcyBtZWFzdXJlZCBpbiB1bml0cyBvZiA4eDggYmxvY2tzKS4gU2hhbGwgYmUgbGVz cyB0aGFuIG9yIGVxdWFsIAp0byA2Cj4gKyAqIEB0aWxlX3Jvd3NfbG9nMjogc3BlY2lmaWVzIHRo ZSBiYXNlIDIgbG9nYXJpdGhtIG9mIHRoZSBoZWlnaHQgb2YgZWFjaCAKdGlsZSAod2hlcmUgdGhl IGhlaWdodAo+ICsgKglpcyBtZWFzdXJlZCBpbiB1bml0cyBvZiA4eDggYmxvY2tzKQo+ICsgKiBA dHhfbW9kZTogc3BlY2lmaWVzIHRoZSBUWCBtb2RlLiBTZWUgJnY0bDJfdnA5X3R4X21vZGUgZm9y IG1vcmUgZGV0YWlscwo+ICsgKiBAcmVmZXJlbmNlX21vZGU6IHNwZWNpZmllcyB0aGUgdHlwZSBv ZiBpbnRlciBwcmVkaWN0aW9uIHRvIGJlIHVzZWQuIFNlZQo+ICsgKgkmdjRsMl92cDlfcmVmZXJl bmNlX21vZGUgZm9yIG1vcmUgZGV0YWlscwo+ICsgKiBAcmVzZXJ2ZWQ6IHBhZGRpbmcgZmllbGQu IFNob3VsZCBiZSB6ZXJvZWQgYnkgYXBwbGljYXRpb25zLgo+ICsgKi8KPiArc3RydWN0IHY0bDJf Y3RybF92cDlfZnJhbWUgewo+ICsJc3RydWN0IHY0bDJfdnA5X2xvb3BfZmlsdGVyIGxmOwo+ICsJ c3RydWN0IHY0bDJfdnA5X3F1YW50aXphdGlvbiBxdWFudDsKPiArCXN0cnVjdCB2NGwyX3ZwOV9z ZWdtZW50YXRpb24gc2VnOwo+ICsJX191MzIgZmxhZ3M7Cj4gKwlfX3UxNiBjb21wcmVzc2VkX2hl YWRlcl9zaXplOwo+ICsJX191MTYgdW5jb21wcmVzc2VkX2hlYWRlcl9zaXplOwo+ICsJX191MTYg ZnJhbWVfd2lkdGhfbWludXNfMTsKPiArCV9fdTE2IGZyYW1lX2hlaWdodF9taW51c18xOwo+ICsJ X191MTYgcmVuZGVyX3dpZHRoX21pbnVzXzE7Cj4gKwlfX3UxNiByZW5kZXJfaGVpZ2h0X21pbnVz XzE7Cj4gKwlfX3U2NCBsYXN0X2ZyYW1lX3RzOwo+ICsJX191NjQgZ29sZGVuX2ZyYW1lX3RzOwo+ ICsJX191NjQgYWx0X2ZyYW1lX3RzOwo+ICsJX191OCByZWZfZnJhbWVfc2lnbl9iaWFzOwo+ICsJ X191OCByZXNldF9mcmFtZV9jb250ZXh0Owo+ICsJX191OCBmcmFtZV9jb250ZXh0X2lkeDsKPiAr CV9fdTggcHJvZmlsZTsKPiArCV9fdTggYml0X2RlcHRoOwo+ICsJX191OCBpbnRlcnBvbGF0aW9u X2ZpbHRlcjsKPiArCV9fdTggdGlsZV9jb2xzX2xvZzI7Cj4gKwlfX3U4IHRpbGVfcm93c19sb2cy Owo+ICsJX191OCB0eF9tb2RlOwoKQUZBSUNTLCBUWCBtb2RlIGlzIHBhcnQgb2YgY29tcHJlc3Nl ZCBoZWFkZXIgaW4gY2hhcHRlciA2LjMuMS4gQW55IHJlYXNvbiBpdCdzIApoZXJlIGFuZCBub3Qg aW4gIHY0bDJfY3RybF92cDlfY29tcHJlc3NlZF9oZHJfcHJvYnM/Cgo+ICsJX191OCByZWZlcmVu Y2VfbW9kZTsKPiArCV9fdTggcmVzZXJ2ZWRbNl07Cj4gK307Cj4gKwo+ICsjZGVmaW5lIFY0TDJf VlA5X05VTV9GUkFNRV9DVFgJNAo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB2NGwyX3ZwOV9tdl9j b21wcmVzc2VkX2hkcl9wcm9icyAtIFZQOSBNb3Rpb24gdmVjdG9yIHByb2JhYmlsaXR5IAp1cGRh dGVzCj4gKyAqIEBqb2ludDogbW90aW9uIHZlY3RvciBqb2ludCBwcm9iYWJpbGl0eSB1cGRhdGVz Cj4gKyAqIEBzaWduOiBtb3Rpb24gdmVjdG9yIHNpZ24gcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsg KiBAY2xhc3NlczogbW90aW9uIHZlY3RvciBjbGFzcyBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAq IEBjbGFzczBfYml0OiBtb3Rpb24gdmVjdG9yIGNsYXNzMCBiaXQgcHJvYmFiaWxpdHkgdXBkYXRl cwo+ICsgKiBAYml0czogbW90aW9uIHZlY3RvciBiaXRzIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiAr ICogQGNsYXNzMF9mcjogbW90aW9uIHZlY3RvciBjbGFzczAgZnJhY3Rpb25hbCBiaXQgcHJvYmFi aWxpdHkgdXBkYXRlcwo+ICsgKiBAZnI6IG1vdGlvbiB2ZWN0b3IgZnJhY3Rpb25hbCBiaXQgcHJv YmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAY2xhc3MwX2hwOiBtb3Rpb24gdmVjdG9yIGNsYXNzMCBo aWdoIHByZWNpc2lvbiBmcmFjdGlvbmFsIGJpdCAKcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBA aHA6IG1vdGlvbiB2ZWN0b3IgaGlnaCBwcmVjaXNpb24gZnJhY3Rpb25hbCBiaXQgcHJvYmFiaWxp dHkgdXBkYXRlcwo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBuZXcgdmFsdWVz IG9mIG1vdGlvbiB2ZWN0b3IgcHJvYmFiaWxpdGllcy4KPiArICogQSB2YWx1ZSBvZiB6ZXJvIGlu IGFuIGFycmF5IGVsZW1lbnQgbWVhbnMgdGhlcmUgaXMgbm8gdXBkYXRlIG9mIHRoZSAKcmVsZXZh bnQgcHJvYmFiaWxpdHkuCj4gKyAqIFNlZSBgc3RydWN0IHY0bDJfdnA5X3Byb2JfdXBkYXRlc2Ag Zm9yIGRldGFpbHMuCj4gKyAqLwo+ICtzdHJ1Y3QgdjRsMl92cDlfbXZfY29tcHJlc3NlZF9oZHJf cHJvYnMgewo+ICsJX191OCBqb2ludFszXTsKPiArCV9fdTggc2lnblsyXTsKPiArCV9fdTggY2xh c3Nlc1syXVsxMF07Cj4gKwlfX3U4IGNsYXNzMF9iaXRbMl07Cj4gKwlfX3U4IGJpdHNbMl1bMTBd Owo+ICsJX191OCBjbGFzczBfZnJbMl1bMl1bM107Cj4gKwlfX3U4IGZyWzJdWzNdOwo+ICsJX191 OCBjbGFzczBfaHBbMl07Cj4gKwlfX3U4IGhwWzJdOwo+ICt9Owo+ICsKPiArI2RlZmluZSBWNEwy X0NJRF9TVEFURUxFU1NfVlA5X0NPTVBSRVNTRURfSERSX1BST0JTCQooVjRMMl9DSURfQ09ERUNf U1RBVEVMRVNTX0JBU0UgKyAzMDEpCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9j b21wcmVzc2VkX2hkcl9wcm9icyAtIFZQOSBwcm9iYWJpbGl0eSB1cGRhdGVzIApjb250cm9sCj4g KyAqIEB0eDg6IFRYIDh4OCBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqIEB0eDE2OiBUWCAxNngx NiBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqIEB0eDMyOiBUWCAzMngzMiBwcm9iYWJpbGl0eSB1 cGRhdGVzCj4gKyAqIEBjb2VmOiBjb2VmZmljaWVudCBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAq IEBza2lwOiBza2lwIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiArICogQGludGVyX21vZGU6IGludGVy IG1vZGUgcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAaW50ZXJwX2ZpbHRlcjogaW50ZXJwb2xh dGlvbiBmaWx0ZXIgcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAaXNfaW50ZXI6IGlzIGludGVy LWJsb2NrIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiArICogQGNvbXBfbW9kZTogY29tcG91bmQgcHJl ZGljdGlvbiBtb2RlIHByb2JhYmlsaXR5IHVwZGF0ZXMKPiArICogQHNpbmdsZV9yZWY6IHNpbmds ZSByZWYgcHJvYmFiaWxpdHkgdXBkYXRlcwo+ICsgKiBAY29tcF9yZWY6IGNvbXBvdW5kIHJlZiBw cm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqIEB5X21vZGU6IFkgcHJlZGljdGlvbiBtb2RlIHByb2Jh YmlsaXR5IHVwZGF0ZXMKPiArICogQHV2X21vZGU6IFVWIHByZWRpY3Rpb24gbW9kZSBwcm9iYWJp bGl0eSB1cGRhdGVzCj4gKyAqIEBwYXJ0aXRpb246IHBhcnRpdGlvbiBwcm9iYWJpbGl0eSB1cGRh dGVzCj4gKyAqIEBtdjogbW90aW9uIHZlY3RvciBwcm9iYWJpbGl0eSB1cGRhdGVzCj4gKyAqCj4g KyAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIHRoZSBwcm9iYWJpbGl0aWVzIHVwZGF0ZSBhcyBwYXJz ZWQgaW4gdGhlIApjb21wcmVzc2VkCj4gKyAqIGhlYWRlciAoU3BlYyA2LjMpLiBUaGVzZSB2YWx1 ZXMgcmVwcmVzZW50IHRoZSB2YWx1ZSBvZiBwcm9iYWJpbGl0eSAKdXBkYXRlIGFmdGVyCj4gKyAq IGJlaW5nIHRyYW5zbGF0ZWQgd2l0aCBpbnZfbWFwX3RhYmxlW10gKHNlZSA2LjMuNSkuIEEgdmFs dWUgb2YgemVybyBpbiBhbiAKYXJyYXkgZWxlbWVudAo+ICsgKiBtZWFucyB0aGF0IHRoZXJlIGlz IG5vIHVwZGF0ZSBvZiB0aGUgcmVsZXZhbnQgcHJvYmFiaWxpdHkuCj4gKyAqLwo+ICtzdHJ1Y3Qg djRsMl9jdHJsX3ZwOV9jb21wcmVzc2VkX2hkcl9wcm9icyB7Cj4gKwlfX3U4IHR4OFsyXVsxXTsK PiArCV9fdTggdHgxNlsyXVsyXTsKPiArCV9fdTggdHgzMlsyXVszXTsKPiArCV9fdTggY29lZls0 XVsyXVsyXVs2XVs2XVszXTsKPiArCV9fdTggc2tpcFszXTsKPiArCV9fdTggaW50ZXJfbW9kZVs3 XVszXTsKPiArCV9fdTggaW50ZXJwX2ZpbHRlcls0XVsyXTsKPiArCV9fdTggaXNfaW50ZXJbNF07 Cj4gKwlfX3U4IGNvbXBfbW9kZVs1XTsKPiArCV9fdTggc2luZ2xlX3JlZls1XVsyXTsKPiArCV9f dTggY29tcF9yZWZbNV07Cj4gKwlfX3U4IHlfbW9kZVs0XVs5XTsKPiArCV9fdTggdXZfbW9kZVsx MF1bOV07Cj4gKwlfX3U4IHBhcnRpdGlvblsxNl1bM107Cj4gKwo+ICsJc3RydWN0IHY0bDJfdnA5 X212X2NvbXByZXNzZWRfaGRyX3Byb2JzIG12OwoKdjRsMl9jdHJsX3ZwOV9jb21wcmVzc2VkX2hk cl9wcm9icyBhbmQgdjRsMl92cDlfbXZfY29tcHJlc3NlZF9oZHJfcHJvYnMgYXJlIHNvIApjb25m dXNpbmdseSBzaW1pbGFyLCBpdCdzIGVhc3kgdG8gbWVzcyB1cCBxdWlja2x5LiBDYW4gd2UgZmlu ZCBtb3JlIGRpc3RpbmN0IApuYW1lcz8KCk5vdGUsIEkganVzdCBza2ltbWVkIHRoaXMgcGF0Y2gs IG1heWJlIEknbGwgaGF2ZSBzb21lIG1vcmUgcXVlc3Rpb25zIGxhdGVyLiAKR3JlYXQgd29yayEK CkJlc3QgcmVnYXJkcywKSmVybmVqCgo+ICt9Owo+ICsKPiAgLyogTVBFRy1jb21wcmVzc2lvbiBk ZWZpbml0aW9ucyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwo+ICAjaWZuZGVm IF9fS0VSTkVMX18KPiAgI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfTVBFRyAgICAgICAgICAgIFY0 TDJfQ1RSTF9DTEFTU19DT0RFQwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmlk ZW9kZXYyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKPiBpbmRleCA1ODM5MmRj ZDNiZjUuLjRhYmU0MzYyNTE5ZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmlk ZW9kZXYyLmgKPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKPiBAQCAtNzAz LDYgKzcwMyw3IEBAIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgewo+ICAjZGVmaW5lIFY0TDJfUElY X0ZNVF9WUDggICAgICB2NGwyX2ZvdXJjYygnVicsICdQJywgJzgnLCAnMCcpIC8qIFZQOCAqLwo+ ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9WUDhfRlJBTUUgdjRsMl9mb3VyY2MoJ1YnLCAnUCcsICc4 JywgJ0YnKSAvKiBWUDggcGFyc2VkIApmcmFtZSAqLwo+ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9W UDkgICAgICB2NGwyX2ZvdXJjYygnVicsICdQJywgJzknLCAnMCcpIC8qIFZQOSAqLwo+ICsjZGVm aW5lIFY0TDJfUElYX0ZNVF9WUDlfRlJBTUUgdjRsMl9mb3VyY2MoJ1YnLCAnUCcsICc5JywgJ0Yn KSAvKiBWUDkgcGFyc2VkIApmcmFtZSAqLwo+ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9IRVZDICAg ICB2NGwyX2ZvdXJjYygnSCcsICdFJywgJ1YnLCAnQycpIC8qIEhFVkMgYWthIEguCjI2NSAqLwo+ ICAjZGVmaW5lIFY0TDJfUElYX0ZNVF9GV0hUICAgICB2NGwyX2ZvdXJjYygnRicsICdXJywgJ0gn LCAnVCcpIC8qIEZhc3QgV2Fsc2ggCkhhZGFtYXJkIFRyYW5zZm9ybSAodmljb2RlYykgKi8KPiAg I2RlZmluZSBWNEwyX1BJWF9GTVRfRldIVF9TVEFURUxFU1MgICAgIHY0bDJfZm91cmNjKCdTJywg J0YnLCAnVycsICdIJykgLyogClN0YXRlbGVzcyBGV0hUICh2aWNvZGVjKSAqLwo+IEBAIC0xNzU1 LDYgKzE3NTYsOCBAQCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCB7Cj4gIAkJc3RydWN0IHY0bDJf Y3RybF9tcGVnMl9zZXF1ZW5jZSBfX3VzZXIgCipwX21wZWcyX3NlcXVlbmNlOwo+ICAJCXN0cnVj dCB2NGwyX2N0cmxfbXBlZzJfcGljdHVyZSBfX3VzZXIgKnBfbXBlZzJfcGljdHVyZTsKPiAgCQlz dHJ1Y3QgdjRsMl9jdHJsX21wZWcyX3F1YW50aXNhdGlvbiBfX3VzZXIgCipwX21wZWcyX3F1YW50 aXNhdGlvbjsKPiArCQlzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9jb21wcmVzc2VkX2hkcl9wcm9icyBf X3VzZXIgCipwX3ZwOV9jb21wcmVzc2VkX2hkcl9wcm9iczsKPiArCQlzdHJ1Y3QgdjRsMl9jdHJs X3ZwOV9mcmFtZSBfX3VzZXIgKnBfdnA5X2ZyYW1lOwo+ICAJCXZvaWQgX191c2VyICpwdHI7Cj4g IAl9Owo+ICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKPiBAQCAtMTgxOSw2ICsxODIyLDkg QEAgZW51bSB2NGwyX2N0cmxfdHlwZSB7Cj4gIAlWNEwyX0NUUkxfVFlQRV9NUEVHMl9RVUFOVElT QVRJT04gICA9IDB4MDI1MCwKPiAgCVY0TDJfQ1RSTF9UWVBFX01QRUcyX1NFUVVFTkNFICAgICAg ID0gMHgwMjUxLAo+ICAJVjRMMl9DVFJMX1RZUEVfTVBFRzJfUElDVFVSRSAgICAgICAgPSAweDAy NTIsCj4gKwo+ICsJVjRMMl9DVFJMX1RZUEVfVlA5X0NPTVBSRVNTRURfSERSX1BST0JTCT0gMHgw MjYwLAo+ICsJVjRMMl9DVFJMX1RZUEVfVlA5X0ZSQU1FCQk9IDB4MDI2MSwKPiAgfTsKPiAgCj4g IC8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllDVFJMIGlvY3RsIGZvciBxdWVyeWluZyBjb250 cm9scyAqLwo+IC0tIAo+IDIuMTcuMQo+IAo+IAoKCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=