From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by sourceware.org (Postfix) with ESMTPS id F37F73856262 for ; Tue, 24 May 2022 09:03:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F37F73856262 Received: by mail-ej1-x62d.google.com with SMTP id gh17so20912669ejc.6 for ; Tue, 24 May 2022 02:03:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=+4TqcI+R9WKa3C8iuGwapj9u6yKaU+6BthCtL8DoGnI=; b=BceCHo+/6OMTOLJM7kDtMbEhm6RXWeXpw3qfZmjYoHLtUuidL7Fo0EtARMex/fy63S A1EwKEbWd0sSw+LNqipC8hK0WBN82jED/9Z6UoSw2pisAGRLJHO3Az8FLNRLYh2G2+Ay vIzNog3C0iCPuGRkr++rNul/zPqzcwW3LrSOga+6uZgPeo/8V9lLp3abtD4oV9czXx4x bPtbTHzUQjpOicknDnKIURtnrlK4PiuYCIMbNiHYBoLBeCgL9WhSHAyl3i+Cw7IzAOfU l9YaTDFv653bsrRf+y8o1el+vlKGvL62KYwIDgNtQUgg/aq4xjcvCq8GwZN5fxqFD1up CwVg== X-Gm-Message-State: AOAM533ZQl+LncrSX3VRrMnXw6NFDtnEvF+RLTa0jJgKFAC/RvUxJh/p jut+LunJYe/IIjqIyKBLm/qr5gkv4pN5RoEqqCPKzw== X-Google-Smtp-Source: ABdhPJyfTgKE3/FiGftkNZ272vNKH1Ve4L/2jtwtwDD5LqxZYGsbZueykrDZoq/Z/QA3+iwc9xaXQVpFElTPjW+Iluk= X-Received: by 2002:a17:907:60d3:b0:6f5:c4c3:2f96 with SMTP id hv19-20020a17090760d300b006f5c4c32f96mr22885359ejc.724.1653382989702; Tue, 24 May 2022 02:03:09 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Prathamesh Kulkarni Date: Tue, 24 May 2022 14:32:33 +0530 Message-ID: Subject: Re: [0/9] [middle-end] Add param to vec_perm_const hook to specify mode of input operand To: Prathamesh Kulkarni , gcc Patches , richard.sandiford@arm.com Content-Type: multipart/mixed; boundary="000000000000c7b5fe05dfbe3984" X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SCC_10_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 May 2022 09:03:22 -0000 --000000000000c7b5fe05dfbe3984 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 23 May 2022 at 18:14, Richard Sandiford wrote: > > Prathamesh Kulkarni writes: > > On Wed, 18 May 2022 at 17:27, Richard Sandiford > > wrote: > >> > >> Prathamesh Kulkarni writes: > >> > Hi, > >> > The attached patch adds another parameter machine_mode op_mode to ve= c_perm_const > >> > hook to specify mode of input operands. The motivation for doing thi= s > >> > is PR96463, > >> > where we create vec_perm_expr of the form: > >> > lhs =3D vec_perm_expr > >> > where lhs and rhs have different vector types but same element type > >> > (lhs is SVE and rhs is corresponding advsimd vector). > >> > > >> > It seems the following targets were affected: aarch64, i386, arm, ia= 64, > >> > mips, rs6000, s390, sparc, gcn. > >> > > >> > Bootstrapped+tested on x86_64-linux-gnu, aarch64-linux-gnu. > >> > For other targets, I did make all-gcc stage1, which seems to build O= K. > >> > > >> > Thanks, > >> > Prathamesh > >> > > >> > diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi > >> > index c5006afc00d..31ff6ef3f92 100644 > >> > --- a/gcc/doc/tm.texi > >> > +++ b/gcc/doc/tm.texi > >> > @@ -6088,7 +6088,7 @@ for the given scalar type @var{type}. @var{is= _packed} is false if the scalar > >> > access using @var{type} is known to be naturally aligned. > >> > @end deftypefn > >> > > >> > -@deftypefn {Target Hook} bool TARGET_VECTORIZE_VEC_PERM_CONST (mach= ine_mode @var{mode}, rtx @var{output}, rtx @var{in0}, rtx @var{in1}, const = vec_perm_indices @var{&sel}) > >> > +@deftypefn {Target Hook} bool TARGET_VECTORIZE_VEC_PERM_CONST (mach= ine_mode @var{mode}, machine_mode @var{op_mode}, rtx @var{output}, rtx @var= {in0}, rtx @var{in1}, const vec_perm_indices @var{&sel}) > >> > This hook is used to test whether the target can permute up to two > >> > vectors of mode @var{mode} using the permutation vector @code{sel},= and > >> > also to emit such a permutation. In the former case @var{in0}, @va= r{in1} > >> > >> Like Andre says, the documentation should describe op_mode (and mode). > >> > >> > diff --git a/gcc/optabs-query.cc b/gcc/optabs-query.cc > >> > index 68dc679cc6a..aef9d4c5d28 100644 > >> > --- a/gcc/optabs-query.cc > >> > +++ b/gcc/optabs-query.cc > >> > @@ -417,8 +417,8 @@ can_vec_perm_var_p (machine_mode mode) > >> > with here. */ > >> > > >> > bool > >> > -can_vec_perm_const_p (machine_mode mode, const vec_perm_indices &se= l, > >> > - bool allow_variable_p) > >> > +can_vec_perm_const_p (machine_mode mode, machine_mode op_mode, > >> > + const vec_perm_indices &sel, bool allow_variable= _p) > >> > { > >> > >> The function comment should describe the new parameter. > >> > >> > /* If the target doesn't implement a vector mode for the vector t= ype, > >> > then no operations are supported. */ > >> > @@ -448,7 +448,7 @@ can_vec_perm_const_p (machine_mode mode, const v= ec_perm_indices &sel, > >> > > >> > if (targetm.vectorize.vec_perm_const !=3D NULL) > >> > { > >> > - if (targetm.vectorize.vec_perm_const (mode, NULL_RTX, NULL_RT= X, > >> > + if (targetm.vectorize.vec_perm_const (mode, op_mode, NULL_RTX= , NULL_RTX, > >> > NULL_RTX, sel)) > >> > return true; > >> > > >> > @@ -462,6 +462,13 @@ can_vec_perm_const_p (machine_mode mode, const = vec_perm_indices &sel, > >> > return false; > >> > } > >> > > >> > +bool > >> > +can_vec_perm_const_p (machine_mode mode, const vec_perm_indices &se= l, > >> > + bool allow_variable_p) > >> > +{ > >> > + return can_vec_perm_const_p (mode, mode, sel, allow_variable_p); > >> > +} > >> > + > >> > >> I can understand why you went for this, but now that we've opened > >> the door to mismatched modes, I think it would be better if all caller= s > >> specified the input mode explicitly. > >> > >> > diff --git a/gcc/optabs.cc b/gcc/optabs.cc > >> > index 3d8fa3abdfe..55f10c41789 100644 > >> > --- a/gcc/optabs.cc > >> > +++ b/gcc/optabs.cc > >> > @@ -6250,7 +6250,9 @@ expand_vec_perm_const (machine_mode mode, rtx = v0, rtx v1, > >> > if (single_arg_p) > >> > v1 =3D v0; > >> > > >> > - if (targetm.vectorize.vec_perm_const (mode, target, v0, v1, i= ndices)) > >> > + gcc_checking_assert (GET_MODE (v0) =3D=3D GET_MODE (v1)); > >> > + machine_mode op_mode =3D GET_MODE (v0); > >> > + if (targetm.vectorize.vec_perm_const (mode, op_mode, target, = v0, v1, indices)) > >> > return target; > >> > } > >> > > >> > >> (FWIW, I agree the assert is worth having.) > > Hi, > > I updated the patch with doc and adjusted callers to explicitly pass op= _mode. > > Bootstrapped + tested on x86_64-linux-gnu and aarch64-linux-gnu. > > Does it look OK to commit ? > > > > [=E2=80=A6] > > diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi > > index c5006afc00d..f53068c5c53 100644 > > --- a/gcc/doc/tm.texi > > +++ b/gcc/doc/tm.texi > > @@ -6088,13 +6088,13 @@ for the given scalar type @var{type}. @var{is_= packed} is false if the scalar > > access using @var{type} is known to be naturally aligned. > > @end deftypefn > > > > -@deftypefn {Target Hook} bool TARGET_VECTORIZE_VEC_PERM_CONST (machine= _mode @var{mode}, rtx @var{output}, rtx @var{in0}, rtx @var{in1}, const vec= _perm_indices @var{&sel}) > > +@deftypefn {Target Hook} bool TARGET_VECTORIZE_VEC_PERM_CONST (machine= _mode @var{mode}, machine_mode @var{op_mode}, rtx @var{output}, rtx @var{in= 0}, rtx @var{in1}, const vec_perm_indices @var{&sel}) > > This hook is used to test whether the target can permute up to two > > -vectors of mode @var{mode} using the permutation vector @code{sel}, an= d > > +vectors of mode @var{op_mode} using the permutation vector @code{sel},= and > > also to emit such a permutation. In the former case @var{in0}, @var{i= n1} > > and @var{out} are all null. In the latter case @var{in0} and @var{in1= } are > > How about: > > This hook is used to test whether the target can permute up to two > vectors of mode @var{op_mode} using the permutation vector @code{sel}, > producing a vector of mode @var{mode}. The hook is also used to emit > such a permutation. > > When the hook is being to test whether the target supports a permutatio= n, > @var{in0}, @var{in1}, and @var{out} are all null. When the hook is > being used to emit a permutation, @var{in0} and @var{in1} are =E2=80=A6 > > so that we describe @var{mode} for both the testing and non-testing cases= . > > > -the source vectors and @var{out} is the destination vector; all three = are > > -operands of mode @var{mode}. @var{in1} is the same as @var{in0} if > > +the source vectors of mode @var{op_mode} and @var{out} is the destinat= ion vector > > +of mode @var{mode}. @var{in1} is the same as @var{in0} if > > @var{sel} describes a permutation on one vector instead of two. > > > > Return true if the operation is possible, emitting instructions for it > > diff --git a/gcc/match.pd b/gcc/match.pd > > index f5efa77560c..b06d7013603 100644 > > --- a/gcc/match.pd > > +++ b/gcc/match.pd > > @@ -7703,12 +7703,14 @@ and, > > 2-argument version. */ > > tree oldop2 =3D op2; > > if (sel.ninputs () =3D=3D 2 > > - || can_vec_perm_const_p (TYPE_MODE (type), sel, false)) > > + || can_vec_perm_const_p (TYPE_MODE (type), TYPE_MODE (type= ), > > + sel, false)) > > op2 =3D vec_perm_indices_to_tree (TREE_TYPE (op2), sel); > > else > > { > > vec_perm_indices sel2 (builder, 2, nelts); > > - if (can_vec_perm_const_p (TYPE_MODE (type), sel2, false)) > > + if (can_vec_perm_const_p (TYPE_MODE (type), TYPE_MODE (ty= pe), > > + sel2, false)) > > op2 =3D vec_perm_indices_to_tree (TREE_TYPE (op2), sel2= ); > > else > > /* Not directly supported with either encoding, > > Since this is matching an existing VEC_PERM_EXPR, we need to distinguish > between mode and op_mode. Might be worth adding both mode and op_mode > to the outermost =E2=80=9Cwith=E2=80=9D and changing later tests accordin= gly. > > > diff --git a/gcc/optabs-query.h b/gcc/optabs-query.h > > index b9c9fd6f64d..32e52b20109 100644 > > --- a/gcc/optabs-query.h > > +++ b/gcc/optabs-query.h > > @@ -178,7 +178,7 @@ bool can_conditionally_move_p (machine_mode mode); > > opt_machine_mode qimode_for_vec_perm (machine_mode); > > bool selector_fits_mode_p (machine_mode, const vec_perm_indices &); > > bool can_vec_perm_var_p (machine_mode); > > -bool can_vec_perm_const_p (machine_mode, const vec_perm_indices &, > > +bool can_vec_perm_const_p (machine_mode, machine_mode, const vec_perm_= indices &, > > bool =3D true); > > Nit: long line. > > > /* Find a widening optab even if it doesn't widen as much as we want. = */ > > #define find_widening_optab_handler(A, B, C) \ > > [=E2=80=A6] > > diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc > > index d99e3207fbe..17de3375127 100644 > > --- a/gcc/tree-vect-generic.cc > > +++ b/gcc/tree-vect-generic.cc > > @@ -1527,7 +1527,8 @@ lower_vec_perm (gimple_stmt_iterator *gsi) > > && tree_to_vec_perm_builder (&sel_int, mask)) > > { > > vec_perm_indices indices (sel_int, 2, elements); > > - if (can_vec_perm_const_p (TYPE_MODE (vect_type), indices)) > > + machine_mode vmode =3D TYPE_MODE (vect_type); > > + if (can_vec_perm_const_p (vmode, vmode, indices)) > > Similarly here: since this is testing an existing VEC_PERM_EXPR, I think > we need to read the mode of the lhs and pass both modes. > > > [=E2=80=A6] > > diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > > index 8327e9d047e..207d1097d5b 100644 > > --- a/gcc/tree-vect-stmts.cc > > +++ b/gcc/tree-vect-stmts.cc > > @@ -2016,7 +2016,7 @@ perm_mask_for_reverse (tree vectype) > > sel.quick_push (nunits - 1 - i); > > > > vec_perm_indices indices (sel, 1, nunits); > > - if (!can_vec_perm_const_p (TYPE_MODE (vectype), indices)) > > + if (!can_vec_perm_const_p (TYPE_MODE (vectype), TYPE_MODE (vectype),= indices)) > > Nit: long line. Hi Richard, Thanks for the suggestions. Does the attached patch look OK ? Bootstrapped+tested on x86_64-linux-gnu and aarch64-linux-gnu. Thanks, Prathamesh > > Thanks, > Richard --000000000000c7b5fe05dfbe3984 Content-Type: text/plain; charset="US-ASCII"; name="vec-perm-const-3-midend.txt" Content-Disposition: attachment; filename="vec-perm-const-3-midend.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l3jxil7p0 ZGlmZiAtLWdpdCBhL2djYy9kb2MvdG0udGV4aSBiL2djYy9kb2MvdG0udGV4aQppbmRleCBjNTAw NmFmYzAwZC4uMGEzYzczM2FkYTkgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvdG0udGV4aQorKysgYi9n Y2MvZG9jL3RtLnRleGkKQEAgLTYwODgsMTQgKzYwODgsMTggQEAgZm9yIHRoZSBnaXZlbiBzY2Fs YXIgdHlwZSBAdmFye3R5cGV9LiAgQHZhcntpc19wYWNrZWR9IGlzIGZhbHNlIGlmIHRoZSBzY2Fs YXIKIGFjY2VzcyB1c2luZyBAdmFye3R5cGV9IGlzIGtub3duIHRvIGJlIG5hdHVyYWxseSBhbGln bmVkLgogQGVuZCBkZWZ0eXBlZm4KIAotQGRlZnR5cGVmbiB7VGFyZ2V0IEhvb2t9IGJvb2wgVEFS R0VUX1ZFQ1RPUklaRV9WRUNfUEVSTV9DT05TVCAobWFjaGluZV9tb2RlIEB2YXJ7bW9kZX0sIHJ0 eCBAdmFye291dHB1dH0sIHJ0eCBAdmFye2luMH0sIHJ0eCBAdmFye2luMX0sIGNvbnN0IHZlY19w ZXJtX2luZGljZXMgQHZhcnsmc2VsfSkKK0BkZWZ0eXBlZm4ge1RhcmdldCBIb29rfSBib29sIFRB UkdFVF9WRUNUT1JJWkVfVkVDX1BFUk1fQ09OU1QgKG1hY2hpbmVfbW9kZSBAdmFye21vZGV9LCBt YWNoaW5lX21vZGUgQHZhcntvcF9tb2RlfSwgcnR4IEB2YXJ7b3V0cHV0fSwgcnR4IEB2YXJ7aW4w fSwgcnR4IEB2YXJ7aW4xfSwgY29uc3QgdmVjX3Blcm1faW5kaWNlcyBAdmFyeyZzZWx9KQogVGhp cyBob29rIGlzIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoZSB0YXJnZXQgY2FuIHBlcm11dGUgdXAg dG8gdHdvCi12ZWN0b3JzIG9mIG1vZGUgQHZhcnttb2RlfSB1c2luZyB0aGUgcGVybXV0YXRpb24g dmVjdG9yIEBjb2Rle3NlbH0sIGFuZAotYWxzbyB0byBlbWl0IHN1Y2ggYSBwZXJtdXRhdGlvbi4g IEluIHRoZSBmb3JtZXIgY2FzZSBAdmFye2luMH0sIEB2YXJ7aW4xfQotYW5kIEB2YXJ7b3V0fSBh cmUgYWxsIG51bGwuICBJbiB0aGUgbGF0dGVyIGNhc2UgQHZhcntpbjB9IGFuZCBAdmFye2luMX0g YXJlCi10aGUgc291cmNlIHZlY3RvcnMgYW5kIEB2YXJ7b3V0fSBpcyB0aGUgZGVzdGluYXRpb24g dmVjdG9yOyBhbGwgdGhyZWUgYXJlCi1vcGVyYW5kcyBvZiBtb2RlIEB2YXJ7bW9kZX0uICBAdmFy e2luMX0gaXMgdGhlIHNhbWUgYXMgQHZhcntpbjB9IGlmCi1AdmFye3NlbH0gZGVzY3JpYmVzIGEg cGVybXV0YXRpb24gb24gb25lIHZlY3RvciBpbnN0ZWFkIG9mIHR3by4KK3ZlY3RvcnMgb2YgbW9k ZSBAdmFye29wX21vZGV9IHVzaW5nIHRoZSBwZXJtdXRhdGlvbiB2ZWN0b3IgQGNvZGV7c2VsfSwK K3Byb2R1Y2luZyBhIHZlY3RvciBvZiBtb2RlIEB2YXJ7bW9kZX0uVGhlIGhvb2sgaXMgYWxzbyB1 c2VkIHRvIGVtaXQgc3VjaAorYSBwZXJtdXRhdGlvbi4KKworV2hlbiB0aGUgaG9vayBpcyBiZWlu ZyB1c2VkIHRvIHRlc3Qgd2hldGhlciB0aGUgdGFyZ2V0IHN1cHBvcnRzIGEgcGVybXV0YXRpb24s CitAdmFye2luMH0sIEB2YXJ7aW4xfSwgYW5kIEB2YXJ7b3V0fSBhcmUgYWxsIG51bGwuV2hlbiB0 aGUgaG9vayBpcyBiZWluZyB1c2VkCit0byBlbWl0IGEgcGVybXV0YXRpb24sIEB2YXJ7aW4wfSBh bmQgQHZhcntpbjF9IGFyZSB0aGUgc291cmNlIHZlY3RvcnMgb2YgbW9kZQorQHZhcntvcF9tb2Rl fSBhbmQgQHZhcntvdXR9IGlzIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3Igb2YgbW9kZSBAdmFye21v ZGV9LgorQHZhcntpbjF9IGlzIHRoZSBzYW1lIGFzIEB2YXJ7aW4wfSBpZiBAdmFye3NlbH0gZGVz Y3JpYmVzIGEgcGVybXV0YXRpb24gb24gb25lCit2ZWN0b3IgaW5zdGVhZCBvZiB0d28uCiAKIFJl dHVybiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgcG9zc2libGUsIGVtaXR0aW5nIGluc3RydWN0 aW9ucyBmb3IgaXQKIGlmIHJ0eGVzIGFyZSBwcm92aWRlZC4KZGlmZiAtLWdpdCBhL2djYy9tYXRj aC5wZCBiL2djYy9tYXRjaC5wZAppbmRleCBmNWVmYTc3NTYwYy4uZjJhNTI3ZDljNDIgMTAwNjQ0 Ci0tLSBhL2djYy9tYXRjaC5wZAorKysgYi9nY2MvbWF0Y2gucGQKQEAgLTc1OTYsNiArNzU5Niw4 IEBAIGFuZCwKICAod2l0aAogICB7CiAgICAgdHJlZSBvcDAgPSBAMCwgb3AxID0gQDEsIG9wMiA9 IEAyOworICAgIG1hY2hpbmVfbW9kZSByZXN1bHRfbW9kZSA9IFRZUEVfTU9ERSAodHlwZSk7Cisg ICAgbWFjaGluZV9tb2RlIG9wX21vZGUgPSBUWVBFX01PREUgKFRSRUVfVFlQRSAob3AwKSk7CiAK ICAgICAvKiBCdWlsZCBhIHZlY3RvciBvZiBpbnRlZ2VycyBmcm9tIHRoZSB0cmVlIG1hc2suICAq LwogICAgIHZlY19wZXJtX2J1aWxkZXIgYnVpbGRlcjsKQEAgLTc3MDMsMTIgKzc3MDUsMTIgQEAg YW5kLAogCSAgICAgICAyLWFyZ3VtZW50IHZlcnNpb24uICAqLwogCSAgICB0cmVlIG9sZG9wMiA9 IG9wMjsKIAkgICAgaWYgKHNlbC5uaW5wdXRzICgpID09IDIKLQkgICAgICAgfHwgY2FuX3ZlY19w ZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodHlwZSksIHNlbCwgZmFsc2UpKQorCSAgICAgICB8fCBj YW5fdmVjX3Blcm1fY29uc3RfcCAocmVzdWx0X21vZGUsIG9wX21vZGUsIHNlbCwgZmFsc2UpKQog CSAgICAgIG9wMiA9IHZlY19wZXJtX2luZGljZXNfdG9fdHJlZSAoVFJFRV9UWVBFIChvcDIpLCBz ZWwpOwogCSAgICBlbHNlCiAJICAgICAgewogCSAgICAgICAgdmVjX3Blcm1faW5kaWNlcyBzZWwy IChidWlsZGVyLCAyLCBuZWx0cyk7Ci0JICAgICAgICBpZiAoY2FuX3ZlY19wZXJtX2NvbnN0X3Ag KFRZUEVfTU9ERSAodHlwZSksIHNlbDIsIGZhbHNlKSkKKwkJaWYgKGNhbl92ZWNfcGVybV9jb25z dF9wIChyZXN1bHRfbW9kZSwgb3BfbW9kZSwgc2VsMiwgZmFsc2UpKQogCSAgICAgICAgICBvcDIg PSB2ZWNfcGVybV9pbmRpY2VzX3RvX3RyZWUgKFRSRUVfVFlQRSAob3AyKSwgc2VsMik7CiAJICAg ICAgICBlbHNlCiAJICAgICAgICAgIC8qIE5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgd2l0aCBlaXRo ZXIgZW5jb2RpbmcsCmRpZmYgLS1naXQgYS9nY2Mvb3B0YWJzLXF1ZXJ5LmNjIGIvZ2NjL29wdGFi cy1xdWVyeS5jYwppbmRleCA2OGRjNjc5Y2M2YS4uODA5NDgyYjgwOTIgMTAwNjQ0Ci0tLSBhL2dj Yy9vcHRhYnMtcXVlcnkuY2MKKysrIGIvZ2NjL29wdGFicy1xdWVyeS5jYwpAQCAtNDA3LDkgKzQw Nyw5IEBAIGNhbl92ZWNfcGVybV92YXJfcCAobWFjaGluZV9tb2RlIG1vZGUpCiB9CiAKIC8qIFJl dHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgZGlyZWN0bHkgc3VwcG9ydHMgVkVDX1BFUk1fRVhQUnMg b24gdmVjdG9ycwotICAgb2YgbW9kZSBNT0RFIHVzaW5nIHRoZSBzZWxlY3RvciBTRUwuICBBTExP V19WQVJJQUJMRV9QIGlzIHRydWUgaWYgaXQKLSAgIGlzIGFjY2VwdGFibGUgdG8gZm9yY2UgdGhl IHNlbGVjdG9yIGludG8gYSByZWdpc3RlciBhbmQgdXNlIGEgdmFyaWFibGUKLSAgIHBlcm11dGUg KGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgdGhhdCkuCisgICBvZiBtb2RlIE9QX01PREUgYW5kIHJl c3VsdCB2ZWN0b3Igb2YgbW9kZSBNT0RFIHVzaW5nIHRoZSBzZWxlY3RvciBTRUwuCisgICBBTExP V19WQVJJQUJMRV9QIGlzIHRydWUgaWYgaXQgaXMgYWNjZXB0YWJsZSB0byBmb3JjZSB0aGUgc2Vs ZWN0b3IgaW50byBhCisgICByZWdpc3RlciBhbmQgdXNlIGEgdmFyaWFibGUgcGVybXV0ZSAoaWYg dGhlIHRhcmdldCBzdXBwb3J0cyB0aGF0KS4KIAogICAgTm90ZSB0aGF0IGFkZGl0aW9uYWwgcGVy bXV0YXRpb25zIHJlcHJlc2VudGluZyB3aG9sZS12ZWN0b3Igc2hpZnRzIG1heQogICAgYWxzbyBi ZSBoYW5kbGVkIHZpYSB0aGUgdmVjX3NociBvciB2ZWNfc2hsIG9wdGFiLCBidXQgb25seSB3aGVy ZSB0aGUKQEAgLTQxNyw4ICs0MTcsOCBAQCBjYW5fdmVjX3Blcm1fdmFyX3AgKG1hY2hpbmVfbW9k ZSBtb2RlKQogICAgd2l0aCBoZXJlLiAgKi8KIAogYm9vbAotY2FuX3ZlY19wZXJtX2NvbnN0X3Ag KG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdCB2ZWNfcGVybV9pbmRpY2VzICZzZWwsCi0JCSAgICAg IGJvb2wgYWxsb3dfdmFyaWFibGVfcCkKK2Nhbl92ZWNfcGVybV9jb25zdF9wIChtYWNoaW5lX21v ZGUgbW9kZSwgbWFjaGluZV9tb2RlIG9wX21vZGUsCisJCSAgICAgIGNvbnN0IHZlY19wZXJtX2lu ZGljZXMgJnNlbCwgYm9vbCBhbGxvd192YXJpYWJsZV9wKQogewogICAvKiBJZiB0aGUgdGFyZ2V0 IGRvZXNuJ3QgaW1wbGVtZW50IGEgdmVjdG9yIG1vZGUgZm9yIHRoZSB2ZWN0b3IgdHlwZSwKICAg ICAgdGhlbiBubyBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuICAqLwpAQCAtNDQ4LDcgKzQ0OCw3 IEBAIGNhbl92ZWNfcGVybV9jb25zdF9wIChtYWNoaW5lX21vZGUgbW9kZSwgY29uc3QgdmVjX3Bl cm1faW5kaWNlcyAmc2VsLAogCiAgIGlmICh0YXJnZXRtLnZlY3Rvcml6ZS52ZWNfcGVybV9jb25z dCAhPSBOVUxMKQogICAgIHsKLSAgICAgIGlmICh0YXJnZXRtLnZlY3Rvcml6ZS52ZWNfcGVybV9j b25zdCAobW9kZSwgTlVMTF9SVFgsIE5VTExfUlRYLAorICAgICAgaWYgKHRhcmdldG0udmVjdG9y aXplLnZlY19wZXJtX2NvbnN0IChtb2RlLCBvcF9tb2RlLCBOVUxMX1JUWCwgTlVMTF9SVFgsCiAJ CQkJCSAgICBOVUxMX1JUWCwgc2VsKSkKIAlyZXR1cm4gdHJ1ZTsKIApAQCAtNTM0LDcgKzUzNCw3 IEBAIGNhbl9tdWx0X2hpZ2hwYXJ0X3AgKG1hY2hpbmVfbW9kZSBtb2RlLCBib29sIHVuc19wKQog CQkJICAgICsgKGkgJiB+MSkKIAkJCSAgICArICgoaSAmIDEpID8gbnVuaXRzIDogMCkpOwogCSAg dmVjX3Blcm1faW5kaWNlcyBpbmRpY2VzIChzZWwsIDIsIG51bml0cyk7Ci0JICBpZiAoY2FuX3Zl Y19wZXJtX2NvbnN0X3AgKG1vZGUsIGluZGljZXMpKQorCSAgaWYgKGNhbl92ZWNfcGVybV9jb25z dF9wIChtb2RlLCBtb2RlLCBpbmRpY2VzKSkKIAkgICAgcmV0dXJuIDI7CiAJfQogICAgIH0KQEAg LTU1MCw3ICs1NTAsNyBAQCBjYW5fbXVsdF9oaWdocGFydF9wIChtYWNoaW5lX21vZGUgbW9kZSwg Ym9vbCB1bnNfcCkKIAkgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMzsgKytpKQogCSAg ICBzZWwucXVpY2tfcHVzaCAoMiAqIGkgKyAoQllURVNfQklHX0VORElBTiA/IDAgOiAxKSk7CiAJ ICB2ZWNfcGVybV9pbmRpY2VzIGluZGljZXMgKHNlbCwgMiwgbnVuaXRzKTsKLQkgIGlmIChjYW5f dmVjX3Blcm1fY29uc3RfcCAobW9kZSwgaW5kaWNlcykpCisJICBpZiAoY2FuX3ZlY19wZXJtX2Nv bnN0X3AgKG1vZGUsIG1vZGUsIGluZGljZXMpKQogCSAgICByZXR1cm4gMzsKIAl9CiAgICAgfQpk aWZmIC0tZ2l0IGEvZ2NjL29wdGFicy1xdWVyeS5oIGIvZ2NjL29wdGFicy1xdWVyeS5oCmluZGV4 IGI5YzlmZDZmNjRkLi45NDVkMmE4MDNiNiAxMDA2NDQKLS0tIGEvZ2NjL29wdGFicy1xdWVyeS5o CisrKyBiL2djYy9vcHRhYnMtcXVlcnkuaApAQCAtMTc4LDggKzE3OCw4IEBAIGJvb2wgY2FuX2Nv bmRpdGlvbmFsbHlfbW92ZV9wIChtYWNoaW5lX21vZGUgbW9kZSk7CiBvcHRfbWFjaGluZV9tb2Rl IHFpbW9kZV9mb3JfdmVjX3Blcm0gKG1hY2hpbmVfbW9kZSk7CiBib29sIHNlbGVjdG9yX2ZpdHNf bW9kZV9wIChtYWNoaW5lX21vZGUsIGNvbnN0IHZlY19wZXJtX2luZGljZXMgJik7CiBib29sIGNh bl92ZWNfcGVybV92YXJfcCAobWFjaGluZV9tb2RlKTsKLWJvb2wgY2FuX3ZlY19wZXJtX2NvbnN0 X3AgKG1hY2hpbmVfbW9kZSwgY29uc3QgdmVjX3Blcm1faW5kaWNlcyAmLAotCQkJICAgYm9vbCA9 IHRydWUpOworYm9vbCBjYW5fdmVjX3Blcm1fY29uc3RfcCAobWFjaGluZV9tb2RlLCBtYWNoaW5l X21vZGUsCisJCQkgICBjb25zdCB2ZWNfcGVybV9pbmRpY2VzICYsIGJvb2wgPSB0cnVlKTsKIC8q IEZpbmQgYSB3aWRlbmluZyBvcHRhYiBldmVuIGlmIGl0IGRvZXNuJ3Qgd2lkZW4gYXMgbXVjaCBh cyB3ZSB3YW50LiAgKi8KICNkZWZpbmUgZmluZF93aWRlbmluZ19vcHRhYl9oYW5kbGVyKEEsIEIs IEMpIFwKICAgZmluZF93aWRlbmluZ19vcHRhYl9oYW5kbGVyX2FuZF9tb2RlIChBLCBCLCBDLCBO VUxMKQpkaWZmIC0tZ2l0IGEvZ2NjL29wdGFicy5jYyBiL2djYy9vcHRhYnMuY2MKaW5kZXggM2Q4 ZmEzYWJkZmUuLmMwYTY4NDcxZDJkIDEwMDY0NAotLS0gYS9nY2Mvb3B0YWJzLmNjCisrKyBiL2dj Yy9vcHRhYnMuY2MKQEAgLTYyNTAsNyArNjI1MCwxMCBAQCBleHBhbmRfdmVjX3Blcm1fY29uc3Qg KG1hY2hpbmVfbW9kZSBtb2RlLCBydHggdjAsIHJ0eCB2MSwKICAgICAgIGlmIChzaW5nbGVfYXJn X3ApCiAJdjEgPSB2MDsKIAotICAgICAgaWYgKHRhcmdldG0udmVjdG9yaXplLnZlY19wZXJtX2Nv bnN0IChtb2RlLCB0YXJnZXQsIHYwLCB2MSwgaW5kaWNlcykpCisgICAgICBnY2NfY2hlY2tpbmdf YXNzZXJ0IChHRVRfTU9ERSAodjApID09IEdFVF9NT0RFICh2MSkpOworICAgICAgbWFjaGluZV9t b2RlIG9wX21vZGUgPSBHRVRfTU9ERSAodjApOworICAgICAgaWYgKHRhcmdldG0udmVjdG9yaXpl LnZlY19wZXJtX2NvbnN0IChtb2RlLCBvcF9tb2RlLCB0YXJnZXQsIHYwLCB2MSwKKwkJCQkJICAg IGluZGljZXMpKQogCXJldHVybiB0YXJnZXQ7CiAgICAgfQogCkBAIC02MjY0LDcgKzYyNjcsNyBA QCBleHBhbmRfdmVjX3Blcm1fY29uc3QgKG1hY2hpbmVfbW9kZSBtb2RlLCBydHggdjAsIHJ0eCB2 MSwKICAgICAgIHYwX3FpID0gZ2VuX2xvd3BhcnQgKHFpbW9kZSwgdjApOwogICAgICAgdjFfcWkg PSBnZW5fbG93cGFydCAocWltb2RlLCB2MSk7CiAgICAgICBpZiAodGFyZ2V0bS52ZWN0b3JpemUu dmVjX3Blcm1fY29uc3QgIT0gTlVMTAotCSAgJiYgdGFyZ2V0bS52ZWN0b3JpemUudmVjX3Blcm1f Y29uc3QgKHFpbW9kZSwgdGFyZ2V0X3FpLCB2MF9xaSwKKwkgICYmIHRhcmdldG0udmVjdG9yaXpl LnZlY19wZXJtX2NvbnN0IChxaW1vZGUsIHFpbW9kZSwgdGFyZ2V0X3FpLCB2MF9xaSwKIAkJCQkJ ICAgICAgIHYxX3FpLCBxaW1vZGVfaW5kaWNlcykpCiAJcmV0dXJuIGdlbl9sb3dwYXJ0IChtb2Rl LCB0YXJnZXRfcWkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2djYy90YXJnZXQuZGVmIGIvZ2NjL3Rh cmdldC5kZWYKaW5kZXggZDg1YWRmMzZhMzkuLmRiOTA1NTJmYzkwIDEwMDY0NAotLS0gYS9nY2Mv dGFyZ2V0LmRlZgorKysgYi9nY2MvdGFyZ2V0LmRlZgpAQCAtMTg3OCwxMiArMTg3OCwxNiBAQCBh Y2Nlc3MgdXNpbmcgQHZhcnt0eXBlfSBpcyBrbm93biB0byBiZSBuYXR1cmFsbHkgYWxpZ25lZC4i LAogREVGSE9PSwogKHZlY19wZXJtX2NvbnN0LAogICJUaGlzIGhvb2sgaXMgdXNlZCB0byB0ZXN0 IHdoZXRoZXIgdGhlIHRhcmdldCBjYW4gcGVybXV0ZSB1cCB0byB0d29cblwKLXZlY3RvcnMgb2Yg bW9kZSBAdmFye21vZGV9IHVzaW5nIHRoZSBwZXJtdXRhdGlvbiB2ZWN0b3IgQGNvZGV7c2VsfSwg YW5kXG5cCi1hbHNvIHRvIGVtaXQgc3VjaCBhIHBlcm11dGF0aW9uLiAgSW4gdGhlIGZvcm1lciBj YXNlIEB2YXJ7aW4wfSwgQHZhcntpbjF9XG5cCi1hbmQgQHZhcntvdXR9IGFyZSBhbGwgbnVsbC4g IEluIHRoZSBsYXR0ZXIgY2FzZSBAdmFye2luMH0gYW5kIEB2YXJ7aW4xfSBhcmVcblwKLXRoZSBz b3VyY2UgdmVjdG9ycyBhbmQgQHZhcntvdXR9IGlzIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3I7IGFs bCB0aHJlZSBhcmVcblwKLW9wZXJhbmRzIG9mIG1vZGUgQHZhcnttb2RlfS4gIEB2YXJ7aW4xfSBp cyB0aGUgc2FtZSBhcyBAdmFye2luMH0gaWZcblwKLUB2YXJ7c2VsfSBkZXNjcmliZXMgYSBwZXJt dXRhdGlvbiBvbiBvbmUgdmVjdG9yIGluc3RlYWQgb2YgdHdvLlxuXAordmVjdG9ycyBvZiBtb2Rl IEB2YXJ7b3BfbW9kZX0gdXNpbmcgdGhlIHBlcm11dGF0aW9uIHZlY3RvciBAY29kZXtzZWx9LFxu XAorcHJvZHVjaW5nIGEgdmVjdG9yIG9mIG1vZGUgQHZhcnttb2RlfS5UaGUgaG9vayBpcyBhbHNv IHVzZWQgdG8gZW1pdCBzdWNoXG5cCithIHBlcm11dGF0aW9uLlxuXAorXG5cCitXaGVuIHRoZSBo b29rIGlzIGJlaW5nIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoZSB0YXJnZXQgc3VwcG9ydHMgYSBw ZXJtdXRhdGlvbixcblwKK0B2YXJ7aW4wfSwgQHZhcntpbjF9LCBhbmQgQHZhcntvdXR9IGFyZSBh bGwgbnVsbC5XaGVuIHRoZSBob29rIGlzIGJlaW5nIHVzZWRcblwKK3RvIGVtaXQgYSBwZXJtdXRh dGlvbiwgQHZhcntpbjB9IGFuZCBAdmFye2luMX0gYXJlIHRoZSBzb3VyY2UgdmVjdG9ycyBvZiBt b2RlXG5cCitAdmFye29wX21vZGV9IGFuZCBAdmFye291dH0gaXMgdGhlIGRlc3RpbmF0aW9uIHZl Y3RvciBvZiBtb2RlIEB2YXJ7bW9kZX0uXG5cCitAdmFye2luMX0gaXMgdGhlIHNhbWUgYXMgQHZh cntpbjB9IGlmIEB2YXJ7c2VsfSBkZXNjcmliZXMgYSBwZXJtdXRhdGlvbiBvbiBvbmVcblwKK3Zl Y3RvciBpbnN0ZWFkIG9mIHR3by5cblwKIFxuXAogUmV0dXJuIHRydWUgaWYgdGhlIG9wZXJhdGlv biBpcyBwb3NzaWJsZSwgZW1pdHRpbmcgaW5zdHJ1Y3Rpb25zIGZvciBpdFxuXAogaWYgcnR4ZXMg YXJlIHByb3ZpZGVkLlxuXApAQCAtMTg5NCw3ICsxODk4LDcgQEAgdHJ5IHRoZSBlcXVpdmFsZW50 IGJ5dGUgb3BlcmF0aW9uLiAgSWYgdGhhdCBhbHNvIGZhaWxzLCBpdCB3aWxsIHRyeSBmb3JjaW5n XG5cCiB0aGUgc2VsZWN0b3IgaW50byBhIHJlZ2lzdGVyIGFuZCB1c2luZyB0aGUgQHZhcnt2ZWNf cGVybUB2YXJ7bW9kZX19XG5cCiBpbnN0cnVjdGlvbiBwYXR0ZXJuLiAgVGhlcmUgaXMgbm8gbmVl ZCBmb3IgdGhlIGhvb2sgdG8gaGFuZGxlIHRoZXNlIHR3b1xuXAogaW1wbGVtZW50YXRpb24gYXBw cm9hY2hlcyBpdHNlbGYuIiwKLSBib29sLCAobWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBvdXRwdXQs IHJ0eCBpbjAsIHJ0eCBpbjEsCisgYm9vbCwgKG1hY2hpbmVfbW9kZSBtb2RlLCBtYWNoaW5lX21v ZGUgb3BfbW9kZSwgcnR4IG91dHB1dCwgcnR4IGluMCwgcnR4IGluMSwKIAljb25zdCB2ZWNfcGVy bV9pbmRpY2VzICZzZWwpLAogIE5VTEwpCiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1mb3J3 cHJvcC5jYyBiL2djYy90cmVlLXNzYS1mb3J3cHJvcC5jYwppbmRleCA0OGNhYjU4NDRlMC4uZTI1 M2U4NDg3OTYgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1mb3J3cHJvcC5jYworKysgYi9nY2Mv dHJlZS1zc2EtZm9yd3Byb3AuY2MKQEAgLTMwMTYsNyArMzAxNiw4IEBAIHNpbXBsaWZ5X3ZlY3Rv cl9jb25zdHJ1Y3RvciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKIAkJCTogKGVsdHNbMF0u c2Vjb25kID09IDAgJiYgZWx0c1swXS5maXJzdCA9PSAwCiAJCQkgICA/IDAgOiByZWZuZWx0cykg KyBpKTsKICAgICAgIHZlY19wZXJtX2luZGljZXMgaW5kaWNlcyAoc2VsLCBvcmlnWzFdID8gMiA6 IDEsIHJlZm5lbHRzKTsKLSAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9E RSAocGVybV90eXBlKSwgaW5kaWNlcykpCisgICAgICBtYWNoaW5lX21vZGUgdm1vZGUgPSBUWVBF X01PREUgKHBlcm1fdHlwZSk7CisgICAgICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wICh2bW9k ZSwgdm1vZGUsIGluZGljZXMpKQogCXJldHVybiBmYWxzZTsKICAgICAgIG1hc2tfdHlwZQogCT0g YnVpbGRfdmVjdG9yX3R5cGUgKGJ1aWxkX25vbnN0YW5kYXJkX2ludGVnZXJfdHlwZSAoZWxlbV9z aXplLCAxKSwKQEAgLTMwNjUsNyArMzA2Niw4IEBAIHNpbXBsaWZ5X3ZlY3Rvcl9jb25zdHJ1Y3Rv ciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKIAkgICAgc2VsLnF1aWNrX3B1c2ggKGVsdHNb aV0uZmlyc3QKIAkJCSAgICA/IGVsdHNbaV0uc2Vjb25kICsgbmVsdHMgOiBpKTsKIAkgIHZlY19w ZXJtX2luZGljZXMgaW5kaWNlcyAoc2VsLCAyLCBuZWx0cyk7Ci0JICBpZiAoIWNhbl92ZWNfcGVy bV9jb25zdF9wIChUWVBFX01PREUgKHR5cGUpLCBpbmRpY2VzKSkKKwkgIG1hY2hpbmVfbW9kZSB2 bW9kZSA9IFRZUEVfTU9ERSAodHlwZSk7CisJICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wICh2 bW9kZSwgdm1vZGUsIGluZGljZXMpKQogCSAgICByZXR1cm4gZmFsc2U7CiAJICBtYXNrX3R5cGUK IAkgICAgPSBidWlsZF92ZWN0b3JfdHlwZSAoYnVpbGRfbm9uc3RhbmRhcmRfaW50ZWdlcl90eXBl IChlbGVtX3NpemUsIDEpLApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2Mg Yi9nY2MvdHJlZS12ZWN0LWRhdGEtcmVmcy5jYwppbmRleCAwOTIyM2JhZjcxOC4uZDIwYTEwYTE1 MjQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjCisrKyBiL2djYy90cmVl LXZlY3QtZGF0YS1yZWZzLmNjCkBAIC01MzQ3LDcgKzUzNDcsNyBAQCB2ZWN0X2dyb3VwZWRfc3Rv cmVfc3VwcG9ydGVkICh0cmVlIHZlY3R5cGUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgY291bnQp CiAJCSAgICBzZWxbMyAqIGkgKyBuZWx0Ml0gPSAwOwogCQl9CiAJICAgICAgaW5kaWNlcy5uZXdf dmVjdG9yIChzZWwsIDIsIG5lbHQpOwotCSAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3Ag KG1vZGUsIGluZGljZXMpKQorCSAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUs IG1vZGUsIGluZGljZXMpKQogCQl7CiAJCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQogCQkgICAg ZHVtcF9wcmludGYgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLApAQCAtNTM2NSw3ICs1MzY1LDcg QEAgdmVjdF9ncm91cGVkX3N0b3JlX3N1cHBvcnRlZCAodHJlZSB2ZWN0eXBlLCB1bnNpZ25lZCBI T1NUX1dJREVfSU5UIGNvdW50KQogCQkgICAgc2VsWzMgKiBpICsgbmVsdDJdID0gbmVsdCArIGoy Kys7CiAJCX0KIAkgICAgICBpbmRpY2VzLm5ld192ZWN0b3IgKHNlbCwgMiwgbmVsdCk7Ci0JICAg ICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAobW9kZSwgaW5kaWNlcykpCisJICAgICAgaWYg KCFjYW5fdmVjX3Blcm1fY29uc3RfcCAobW9kZSwgbW9kZSwgaW5kaWNlcykpCiAJCXsKIAkJICBp ZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJCSAgICBkdW1wX3ByaW50ZiAoTVNHX01JU1NFRF9PUFRJ TUlaQVRJT04sCkBAIC01MzkwLDEyICs1MzkwLDEyIEBAIHZlY3RfZ3JvdXBlZF9zdG9yZV9zdXBw b3J0ZWQgKHRyZWUgdmVjdHlwZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBjb3VudCkKIAkgICAg ICBzZWxbaSAqIDIgKyAxXSA9IGkgKyBuZWx0OwogCSAgICB9CiAJICB2ZWNfcGVybV9pbmRpY2Vz IGluZGljZXMgKHNlbCwgMiwgbmVsdCk7Ci0JICBpZiAoY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1v ZGUsIGluZGljZXMpKQorCSAgaWYgKGNhbl92ZWNfcGVybV9jb25zdF9wIChtb2RlLCBtb2RlLCBp bmRpY2VzKSkKIAkgICAgewogCSAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCXNlbFtp XSArPSBleGFjdF9kaXYgKG5lbHQsIDIpOwogCSAgICAgIGluZGljZXMubmV3X3ZlY3RvciAoc2Vs LCAyLCBuZWx0KTsKLQkgICAgICBpZiAoY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUsIGluZGlj ZXMpKQorCSAgICAgIGlmIChjYW5fdmVjX3Blcm1fY29uc3RfcCAobW9kZSwgbW9kZSwgaW5kaWNl cykpCiAJCXJldHVybiB0cnVlOwogCSAgICB9CiAJfQpAQCAtNTk2Myw3ICs1OTYzLDcgQEAgdmVj dF9ncm91cGVkX2xvYWRfc3VwcG9ydGVkICh0cmVlIHZlY3R5cGUsIGJvb2wgc2luZ2xlX2VsZW1l bnRfcCwKIAkJZWxzZQogCQkgIHNlbFtpXSA9IDA7CiAJICAgICAgaW5kaWNlcy5uZXdfdmVjdG9y IChzZWwsIDIsIG5lbHQpOwotCSAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUs IGluZGljZXMpKQorCSAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUsIG1vZGUs IGluZGljZXMpKQogCQl7CiAJCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQogCQkgICAgZHVtcF9w cmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwKQEAgLTU5 NzcsNyArNTk3Nyw3IEBAIHZlY3RfZ3JvdXBlZF9sb2FkX3N1cHBvcnRlZCAodHJlZSB2ZWN0eXBl LCBib29sIHNpbmdsZV9lbGVtZW50X3AsCiAJCWVsc2UKIAkJICBzZWxbaV0gPSBuZWx0ICsgKChu ZWx0ICsgaykgJSAzKSArIDMgKiAoaisrKTsKIAkgICAgICBpbmRpY2VzLm5ld192ZWN0b3IgKHNl bCwgMiwgbmVsdCk7Ci0JICAgICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAobW9kZSwgaW5k aWNlcykpCisJICAgICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAobW9kZSwgbW9kZSwgaW5k aWNlcykpCiAJCXsKIAkJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJCSAgICBkdW1wX3ByaW50 Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLApAQCAtNjAwMCwx MiArNjAwMCwxMiBAQCB2ZWN0X2dyb3VwZWRfbG9hZF9zdXBwb3J0ZWQgKHRyZWUgdmVjdHlwZSwg Ym9vbCBzaW5nbGVfZWxlbWVudF9wLAogCSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKIAkgICAg c2VsW2ldID0gaSAqIDI7CiAJICB2ZWNfcGVybV9pbmRpY2VzIGluZGljZXMgKHNlbCwgMiwgbmVs dCk7Ci0JICBpZiAoY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUsIGluZGljZXMpKQorCSAgaWYg KGNhbl92ZWNfcGVybV9jb25zdF9wIChtb2RlLCBtb2RlLCBpbmRpY2VzKSkKIAkgICAgewogCSAg ICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCXNlbFtpXSA9IGkgKiAyICsgMTsKIAkgICAg ICBpbmRpY2VzLm5ld192ZWN0b3IgKHNlbCwgMiwgbmVsdCk7Ci0JICAgICAgaWYgKGNhbl92ZWNf cGVybV9jb25zdF9wIChtb2RlLCBpbmRpY2VzKSkKKwkgICAgICBpZiAoY2FuX3ZlY19wZXJtX2Nv bnN0X3AgKG1vZGUsIG1vZGUsIGluZGljZXMpKQogCQlyZXR1cm4gdHJ1ZTsKIAkgICAgfQogICAg ICAgICB9CkBAIC02MzI3LDYgKzYzMjcsNyBAQCB2ZWN0X3NoaWZ0X3Blcm11dGVfbG9hZF9jaGFp biAodmVjX2luZm8gKnZpbmZvLCB2ZWM8dHJlZT4gZHJfY2hhaW4sCiAgIGdpbXBsZSAqcGVybV9z dG10OwogCiAgIHRyZWUgdmVjdHlwZSA9IFNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9pbmZvKTsK KyAgbWFjaGluZV9tb2RlIHZtb2RlID0gVFlQRV9NT0RFICh2ZWN0eXBlKTsKICAgdW5zaWduZWQg aW50IGk7CiAgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbyA9IGR5bl9jYXN0IDxsb29wX3ZlY19p bmZvPiAodmluZm8pOwogCkBAIC02MzUxLDcgKzYzNTIsNyBAQCB2ZWN0X3NoaWZ0X3Blcm11dGVf bG9hZF9jaGFpbiAodmVjX2luZm8gKnZpbmZvLCB2ZWM8dHJlZT4gZHJfY2hhaW4sCiAgICAgICBm b3IgKGkgPSAwOyBpIDwgbmVsdCAvIDI7ICsraSkKIAlzZWxbbmVsdCAvIDIgKyBpXSA9IGkgKiAy ICsgMTsKICAgICAgIHZlY19wZXJtX2luZGljZXMgaW5kaWNlcyAoc2VsLCAyLCBuZWx0KTsKLSAg ICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodmVjdHlwZSksIGluZGlj ZXMpKQorICAgICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAodm1vZGUsIHZtb2RlLCBpbmRp Y2VzKSkKIAl7CiAJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJICAgIGR1bXBfcHJpbnRmX2xv YyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sCkBAIC02MzY2LDcgKzYz NjcsNyBAQCB2ZWN0X3NoaWZ0X3Blcm11dGVfbG9hZF9jaGFpbiAodmVjX2luZm8gKnZpbmZvLCB2 ZWM8dHJlZT4gZHJfY2hhaW4sCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmVsdCAvIDI7ICsraSkK IAlzZWxbbmVsdCAvIDIgKyBpXSA9IGkgKiAyOwogICAgICAgaW5kaWNlcy5uZXdfdmVjdG9yIChz ZWwsIDIsIG5lbHQpOwotICAgICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAoVFlQRV9NT0RF ICh2ZWN0eXBlKSwgaW5kaWNlcykpCisgICAgICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wICh2 bW9kZSwgdm1vZGUsIGluZGljZXMpKQogCXsKIAkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKIAkg ICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlv biwKQEAgLTYzODEsNyArNjM4Miw3IEBAIHZlY3Rfc2hpZnRfcGVybXV0ZV9sb2FkX2NoYWluICh2 ZWNfaW5mbyAqdmluZm8sIHZlYzx0cmVlPiBkcl9jaGFpbiwKICAgICAgIGZvciAoaSA9IDA7IGkg PCBuZWx0OyBpKyspCiAJc2VsW2ldID0gbmVsdCAvIDIgKyBpOwogICAgICAgaW5kaWNlcy5uZXdf dmVjdG9yIChzZWwsIDIsIG5lbHQpOwotICAgICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAo VFlQRV9NT0RFICh2ZWN0eXBlKSwgaW5kaWNlcykpCisgICAgICBpZiAoIWNhbl92ZWNfcGVybV9j b25zdF9wICh2bW9kZSwgdm1vZGUsIGluZGljZXMpKQogCXsKIAkgIGlmIChkdW1wX2VuYWJsZWRf cCAoKSkKIAkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVj dF9sb2NhdGlvbiwKQEAgLTYzOTcsNyArNjM5OCw3IEBAIHZlY3Rfc2hpZnRfcGVybXV0ZV9sb2Fk X2NoYWluICh2ZWNfaW5mbyAqdmluZm8sIHZlYzx0cmVlPiBkcl9jaGFpbiwKICAgICAgIGZvciAo aSA9IG5lbHQgLyAyOyBpIDwgbmVsdDsgaSsrKQogCXNlbFtpXSA9IG5lbHQgKyBpOwogICAgICAg aW5kaWNlcy5uZXdfdmVjdG9yIChzZWwsIDIsIG5lbHQpOwotICAgICAgaWYgKCFjYW5fdmVjX3Bl cm1fY29uc3RfcCAoVFlQRV9NT0RFICh2ZWN0eXBlKSwgaW5kaWNlcykpCisgICAgICBpZiAoIWNh bl92ZWNfcGVybV9jb25zdF9wICh2bW9kZSwgdm1vZGUsIGluZGljZXMpKQogCXsKIAkgIGlmIChk dW1wX2VuYWJsZWRfcCAoKSkKIAkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElN SVpBVElPTiwgdmVjdF9sb2NhdGlvbiwKQEAgLTY0NjEsNyArNjQ2Miw3IEBAIHZlY3Rfc2hpZnRf cGVybXV0ZV9sb2FkX2NoYWluICh2ZWNfaW5mbyAqdmluZm8sIHZlYzx0cmVlPiBkcl9jaGFpbiwK IAkgIGsrKzsKIAl9CiAgICAgICB2ZWNfcGVybV9pbmRpY2VzIGluZGljZXMgKHNlbCwgMiwgbmVs dCk7Ci0gICAgICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wIChUWVBFX01PREUgKHZlY3R5cGUp LCBpbmRpY2VzKSkKKyAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKHZtb2RlLCB2bW9k ZSwgaW5kaWNlcykpCiAJewogCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQogCSAgICBkdW1wX3By aW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLApAQCAtNjQ3 Niw3ICs2NDc3LDcgQEAgdmVjdF9zaGlmdF9wZXJtdXRlX2xvYWRfY2hhaW4gKHZlY19pbmZvICp2 aW5mbywgdmVjPHRyZWU+IGRyX2NoYWluLAogICAgICAgZm9yIChpID0gMDsgaSA8IG5lbHQ7IGkr KykKIAlzZWxbaV0gPSAyICogKG5lbHQgLyAzKSArIChuZWx0ICUgMykgKyBpOwogICAgICAgaW5k aWNlcy5uZXdfdmVjdG9yIChzZWwsIDIsIG5lbHQpOwotICAgICAgaWYgKCFjYW5fdmVjX3Blcm1f Y29uc3RfcCAoVFlQRV9NT0RFICh2ZWN0eXBlKSwgaW5kaWNlcykpCisgICAgICBpZiAoIWNhbl92 ZWNfcGVybV9jb25zdF9wICh2bW9kZSwgdm1vZGUsIGluZGljZXMpKQogCXsKIAkgIGlmIChkdW1w X2VuYWJsZWRfcCAoKSkKIAkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpB VElPTiwgdmVjdF9sb2NhdGlvbiwKQEAgLTY0OTAsNyArNjQ5MSw3IEBAIHZlY3Rfc2hpZnRfcGVy bXV0ZV9sb2FkX2NoYWluICh2ZWNfaW5mbyAqdmluZm8sIHZlYzx0cmVlPiBkcl9jaGFpbiwKICAg ICAgIGZvciAoaSA9IDA7IGkgPCBuZWx0OyBpKyspCiAJc2VsW2ldID0gMiAqIChuZWx0IC8gMykg KyAxICsgaTsKICAgICAgIGluZGljZXMubmV3X3ZlY3RvciAoc2VsLCAyLCBuZWx0KTsKLSAgICAg IGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodmVjdHlwZSksIGluZGljZXMp KQorICAgICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAodm1vZGUsIHZtb2RlLCBpbmRpY2Vz KSkKIAl7CiAJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJICAgIGR1bXBfcHJpbnRmX2xvYyAo TVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sCkBAIC02NTA0LDcgKzY1MDUs NyBAQCB2ZWN0X3NoaWZ0X3Blcm11dGVfbG9hZF9jaGFpbiAodmVjX2luZm8gKnZpbmZvLCB2ZWM8 dHJlZT4gZHJfY2hhaW4sCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmVsdDsgaSsrKQogCXNlbFtp XSA9IChuZWx0IC8gMykgKyAobmVsdCAlIDMpIC8gMiArIGk7CiAgICAgICBpbmRpY2VzLm5ld192 ZWN0b3IgKHNlbCwgMiwgbmVsdCk7Ci0gICAgICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wIChU WVBFX01PREUgKHZlY3R5cGUpLCBpbmRpY2VzKSkKKyAgICAgIGlmICghY2FuX3ZlY19wZXJtX2Nv bnN0X3AgKHZtb2RlLCB2bW9kZSwgaW5kaWNlcykpCiAJewogCSAgaWYgKGR1bXBfZW5hYmxlZF9w ICgpKQogCSAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0 X2xvY2F0aW9uLApAQCAtNjUxOCw3ICs2NTE5LDcgQEAgdmVjdF9zaGlmdF9wZXJtdXRlX2xvYWRf Y2hhaW4gKHZlY19pbmZvICp2aW5mbywgdmVjPHRyZWU+IGRyX2NoYWluLAogICAgICAgZm9yIChp ID0gMDsgaSA8IG5lbHQ7IGkrKykKIAlzZWxbaV0gPSAyICogKG5lbHQgLyAzKSArIChuZWx0ICUg MykgLyAyICsgaTsKICAgICAgIGluZGljZXMubmV3X3ZlY3RvciAoc2VsLCAyLCBuZWx0KTsKLSAg ICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodmVjdHlwZSksIGluZGlj ZXMpKQorICAgICAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAodm1vZGUsIHZtb2RlLCBpbmRp Y2VzKSkKIAl7CiAJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJICAgIGR1bXBfcHJpbnRmX2xv YyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sCmRpZmYgLS1naXQgYS9n Y2MvdHJlZS12ZWN0LWdlbmVyaWMuY2MgYi9nY2MvdHJlZS12ZWN0LWdlbmVyaWMuY2MKaW5kZXgg ZDk5ZTMyMDdmYmUuLjUzM2VhNjhkYjdkIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LWdlbmVy aWMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1nZW5lcmljLmNjCkBAIC0xNTI3LDcgKzE1MjcsMTAg QEAgbG93ZXJfdmVjX3Blcm0gKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2kpCiAgICAgICAmJiB0 cmVlX3RvX3ZlY19wZXJtX2J1aWxkZXIgKCZzZWxfaW50LCBtYXNrKSkKICAgICB7CiAgICAgICB2 ZWNfcGVybV9pbmRpY2VzIGluZGljZXMgKHNlbF9pbnQsIDIsIGVsZW1lbnRzKTsKLSAgICAgIGlm IChjYW5fdmVjX3Blcm1fY29uc3RfcCAoVFlQRV9NT0RFICh2ZWN0X3R5cGUpLCBpbmRpY2VzKSkK KyAgICAgIG1hY2hpbmVfbW9kZSB2bW9kZSA9IFRZUEVfTU9ERSAodmVjdF90eXBlKTsKKyAgICAg IHRyZWUgbGhzX3R5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9hc3NpZ25fbGhzIChzdG10KSk7Cisg ICAgICBtYWNoaW5lX21vZGUgbGhzX21vZGUgPSBUWVBFX01PREUgKGxoc190eXBlKTsKKyAgICAg IGlmIChjYW5fdmVjX3Blcm1fY29uc3RfcCAobGhzX21vZGUsIHZtb2RlLCBpbmRpY2VzKSkKIAl7 CiAJICBnaW1wbGVfYXNzaWduX3NldF9yaHMzIChzdG10LCBtYXNrKTsKIAkgIHVwZGF0ZV9zdG10 IChzdG10KTsKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYyBiL2djYy90 cmVlLXZlY3QtbG9vcC1tYW5pcC5jYwppbmRleCAxZDQzMzdlYjI2MS4uMTFkYzZjYmY1NzYgMTAw NjQ0Ci0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYworKysgYi9nY2MvdHJlZS12ZWN0 LWxvb3AtbWFuaXAuY2MKQEAgLTMxMiw3ICszMTIsOCBAQCBpbnRlcmxlYXZlX3N1cHBvcnRlZF9w ICh2ZWNfcGVybV9pbmRpY2VzICppbmRpY2VzLCB0cmVlIHZlY3R5cGUsCiAgICAgICBzZWwucXVp Y2tfcHVzaCAoYmFzZSArIGkgKyBuZWx0cyk7CiAgICAgfQogICBpbmRpY2VzLT5uZXdfdmVjdG9y IChzZWwsIDIsIG5lbHRzKTsKLSAgcmV0dXJuIGNhbl92ZWNfcGVybV9jb25zdF9wIChUWVBFX01P REUgKHZlY3R5cGUpLCAqaW5kaWNlcyk7CisgIHJldHVybiBjYW5fdmVjX3Blcm1fY29uc3RfcCAo VFlQRV9NT0RFICh2ZWN0eXBlKSwgVFlQRV9NT0RFICh2ZWN0eXBlKSwKKwkJCSAgICAgICAqaW5k aWNlcyk7CiB9CiAKIC8qIFRyeSB0byB1c2UgcGVybXV0ZXMgdG8gZGVmaW5lIHRoZSBtYXNrcyBp biBERVNUX1JHTSB1c2luZyB0aGUgbWFza3MKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9v cC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYwppbmRleCBhYjdkYWRlMWM3NC4uN2FjOTM4YjNj N2IgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC5jYworKysgYi9nY2MvdHJlZS12ZWN0 LWxvb3AuY2MKQEAgLTQ1MjcsNyArNDUyNyw3IEBAIGhhdmVfd2hvbGVfdmVjdG9yX3NoaWZ0ICht YWNoaW5lX21vZGUgbW9kZSkKICAgICB7CiAgICAgICBjYWxjX3ZlY19wZXJtX21hc2tfZm9yX3No aWZ0IChpLCBuZWx0LCAmc2VsKTsKICAgICAgIGluZGljZXMubmV3X3ZlY3RvciAoc2VsLCAyLCBu ZWx0KTsKLSAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUsIGluZGljZXMsIGZh bHNlKSkKKyAgICAgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUsIG1vZGUsIGluZGlj ZXMsIGZhbHNlKSkKIAlyZXR1cm4gZmFsc2U7CiAgICAgfQogICByZXR1cm4gdHJ1ZTsKZGlmZiAt LWdpdCBhL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MgYi9nY2MvdHJlZS12ZWN0LXBhdHRlcm5z LmNjCmluZGV4IDhjNjFlYjk2NWE2Li41MTgwM2VjOTdjMiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUt dmVjdC1wYXR0ZXJucy5jYworKysgYi9nY2MvdHJlZS12ZWN0LXBhdHRlcm5zLmNjCkBAIC0yNjQz LDcgKzI2NDMsOCBAQCB2ZWN0X3JlY29nX3JvdGF0ZV9wYXR0ZXJuICh2ZWNfaW5mbyAqdmluZm8s CiAKIAkgIHZlY19wZXJtX2luZGljZXMgaW5kaWNlcyAoZWx0cywgMSwKIAkJCQkgICAgVFlQRV9W RUNUT1JfU1VCUEFSVFMgKGNoYXJfdmVjdHlwZSkpOwotCSAgaWYgKGNhbl92ZWNfcGVybV9jb25z dF9wIChUWVBFX01PREUgKGNoYXJfdmVjdHlwZSksIGluZGljZXMpKQorCSAgbWFjaGluZV9tb2Rl IHZtb2RlID0gVFlQRV9NT0RFIChjaGFyX3ZlY3R5cGUpOworCSAgaWYgKGNhbl92ZWNfcGVybV9j b25zdF9wICh2bW9kZSwgdm1vZGUsIGluZGljZXMpKQogCSAgICB7CiAJICAgICAgLyogdmVjdG9y aXphYmxlX2Jzd2FwIGNhbiBoYW5kbGUgdGhlIF9fYnVpbHRpbl9ic3dhcDE2IGlmIHdlCiAJCSB1 bmRvIHRoZSBhcmd1bWVudCBwcm9tb3Rpb24uICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVj dC1zbHAuY2MgYi9nY2MvdHJlZS12ZWN0LXNscC5jYwppbmRleCBjZGZmZjFhYjlmNi4uZmU5MzYx YzMzOGUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3Qtc2xwLmNjCisrKyBiL2djYy90cmVlLXZl Y3Qtc2xwLmNjCkBAIC00MjAsOCArNDIwLDkgQEAgY2FuX2R1cGxpY2F0ZV9hbmRfaW50ZXJsZWF2 ZV9wICh2ZWNfaW5mbyAqdmluZm8sIHVuc2lnbmVkIGludCBjb3VudCwKIAkJfQogCSAgICAgIHZl Y19wZXJtX2luZGljZXMgaW5kaWNlczEgKHNlbDEsIDIsIG5lbHRzKTsKIAkgICAgICB2ZWNfcGVy bV9pbmRpY2VzIGluZGljZXMyIChzZWwyLCAyLCBuZWx0cyk7Ci0JICAgICAgaWYgKGNhbl92ZWNf cGVybV9jb25zdF9wIChUWVBFX01PREUgKHZlY3Rvcl90eXBlKSwgaW5kaWNlczEpCi0JCSAgJiYg Y2FuX3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodmVjdG9yX3R5cGUpLCBpbmRpY2VzMikp CisJICAgICAgbWFjaGluZV9tb2RlIHZtb2RlID0gVFlQRV9NT0RFICh2ZWN0b3JfdHlwZSk7CisJ ICAgICAgaWYgKGNhbl92ZWNfcGVybV9jb25zdF9wICh2bW9kZSwgdm1vZGUsIGluZGljZXMxKQor CQkgICYmIGNhbl92ZWNfcGVybV9jb25zdF9wICh2bW9kZSwgdm1vZGUsIGluZGljZXMyKSkKIAkJ ewogCQkgIGlmIChudmVjdG9yc19vdXQpCiAJCSAgICAqbnZlY3RvcnNfb3V0ID0gbnZlY3RvcnM7 CkBAIC02NzYyLDcgKzY3NjMsNyBAQCB2ZWN0X3RyYW5zZm9ybV9zbHBfcGVybV9sb2FkICh2ZWNf aW5mbyAqdmluZm8sCiAgICAgICBpZiAoaW5kZXggPT0gY291bnQgJiYgIW5vb3BfcCkKIAl7CiAJ ICBpbmRpY2VzLm5ld192ZWN0b3IgKG1hc2ssIHNlY29uZF92ZWNfaW5kZXggPT0gLTEgPyAxIDog MiwgbnVuaXRzKTsKLQkgIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKG1vZGUsIGluZGljZXMp KQorCSAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAobW9kZSwgbW9kZSwgaW5kaWNlcykpCiAJ ICAgIHsKIAkgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCiAJCXsKQEAgLTcxMjIsOCArNzEy Myw5IEBAIHZlY3Rvcml6YWJsZV9zbHBfcGVybXV0YXRpb24gKHZlY19pbmZvICp2aW5mbywgZ2lt cGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIAl7CiAJICBpbmRpY2VzLm5ld192ZWN0b3IgKG1hc2ss IHNlY29uZF92ZWMuZmlyc3QgPT0gLTFVID8gMSA6IDIsIG51bml0cyk7CiAJICBib29sIGlkZW50 aXR5X3AgPSBpbmRpY2VzLnNlcmllc19wICgwLCAxLCAwLCAxKTsKKwkgIG1hY2hpbmVfbW9kZSB2 bW9kZSA9IFRZUEVfTU9ERSAodmVjdHlwZSk7CiAJICBpZiAoIWlkZW50aXR5X3AKLQkgICAgICAm JiAhY2FuX3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodmVjdHlwZSksIGluZGljZXMpKQor CSAgICAgICYmICFjYW5fdmVjX3Blcm1fY29uc3RfcCAodm1vZGUsIHZtb2RlLCBpbmRpY2VzKSkK IAkgICAgewogCSAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKIAkJewpkaWZmIC0tZ2l0IGEv Z2NjL3RyZWUtdmVjdC1zdG10cy5jYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MKaW5kZXggODMy N2U5ZDA0N2UuLjM0NmQ4Y2UyODA0IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNj CisrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MKQEAgLTIwMTYsNyArMjAxNiw4IEBAIHBlcm1f bWFza19mb3JfcmV2ZXJzZSAodHJlZSB2ZWN0eXBlKQogICAgIHNlbC5xdWlja19wdXNoIChudW5p dHMgLSAxIC0gaSk7CiAKICAgdmVjX3Blcm1faW5kaWNlcyBpbmRpY2VzIChzZWwsIDEsIG51bml0 cyk7Ci0gIGlmICghY2FuX3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodmVjdHlwZSksIGlu ZGljZXMpKQorICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wIChUWVBFX01PREUgKHZlY3R5cGUp LCBUWVBFX01PREUgKHZlY3R5cGUpLAorCQkJICAgICBpbmRpY2VzKSkKICAgICByZXR1cm4gTlVM TF9UUkVFOwogICByZXR1cm4gdmVjdF9nZW5fcGVybV9tYXNrX2NoZWNrZWQgKHZlY3R5cGUsIGlu ZGljZXMpOwogfQpAQCAtMzE2OCw3ICszMTY5LDggQEAgdmVjdG9yaXphYmxlX2Jzd2FwICh2ZWNf aW5mbyAqdmluZm8sCiAgICAgICBlbHRzLnF1aWNrX3B1c2ggKChpICsgMSkgKiB3b3JkX2J5dGVz IC0gaiAtIDEpOwogCiAgIHZlY19wZXJtX2luZGljZXMgaW5kaWNlcyAoZWx0cywgMSwgbnVtX2J5 dGVzKTsKLSAgaWYgKCFjYW5fdmVjX3Blcm1fY29uc3RfcCAoVFlQRV9NT0RFIChjaGFyX3ZlY3R5 cGUpLCBpbmRpY2VzKSkKKyAgbWFjaGluZV9tb2RlIHZtb2RlID0gVFlQRV9NT0RFIChjaGFyX3Zl Y3R5cGUpOworICBpZiAoIWNhbl92ZWNfcGVybV9jb25zdF9wICh2bW9kZSwgdm1vZGUsIGluZGlj ZXMpKQogICAgIHJldHVybiBmYWxzZTsKIAogICBpZiAoISB2ZWNfc3RtdCkKQEAgLTY3MTIsNyAr NjcxNCw3IEBAIHNjYW5fc3RvcmVfY2FuX3Blcm1fcCAodHJlZSB2ZWN0eXBlLCB0cmVlIGluaXQs CiAJICAgIHNlbFtqXSA9IG51bml0cyArIGs7CiAJfQogICAgICAgdmVjX3Blcm1faW5kaWNlcyBp bmRpY2VzIChzZWwsIGkgPT0gdW5pdHNfbG9nMiA/IDEgOiAyLCBudW5pdHMpOwotICAgICAgaWYg KCFjYW5fdmVjX3Blcm1fY29uc3RfcCAodmVjX21vZGUsIGluZGljZXMpKQorICAgICAgaWYgKCFj YW5fdmVjX3Blcm1fY29uc3RfcCAodmVjX21vZGUsIHZlY19tb2RlLCBpbmRpY2VzKSkKIAl7CiAJ ICBpZiAoaSA9PSB1bml0c19sb2cyKQogCSAgICByZXR1cm4gLTE7CkBAIC04NTgyLDcgKzg1ODQs OCBAQCB2ZWN0X2dlbl9wZXJtX21hc2tfYW55ICh0cmVlIHZlY3R5cGUsIGNvbnN0IHZlY19wZXJt X2luZGljZXMgJnNlbCkKIHRyZWUKIHZlY3RfZ2VuX3Blcm1fbWFza19jaGVja2VkICh0cmVlIHZl Y3R5cGUsIGNvbnN0IHZlY19wZXJtX2luZGljZXMgJnNlbCkKIHsKLSAgZ2NjX2Fzc2VydCAoY2Fu X3ZlY19wZXJtX2NvbnN0X3AgKFRZUEVfTU9ERSAodmVjdHlwZSksIHNlbCkpOworICBtYWNoaW5l X21vZGUgdm1vZGUgPSBUWVBFX01PREUgKHZlY3R5cGUpOworICBnY2NfYXNzZXJ0IChjYW5fdmVj X3Blcm1fY29uc3RfcCAodm1vZGUsIHZtb2RlLCBzZWwpKTsKICAgcmV0dXJuIHZlY3RfZ2VuX3Bl cm1fbWFza19hbnkgKHZlY3R5cGUsIHNlbCk7CiB9CiAK --000000000000c7b5fe05dfbe3984--