From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender4-pp-o91.zoho.com (sender4-pp-o90.zoho.com [136.143.188.90]) by sourceware.org (Postfix) with ESMTPS id 5D0263858D3C; Sat, 20 Nov 2021 05:58:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5D0263858D3C ARC-Seal: i=1; a=rsa-sha256; t=1637387911; cv=none; d=zohomail.com; s=zohoarc; b=YNzySpmvXGjumnInYIrO9GGySxFpktLEudDeFX33EoOLR9CuhRGPRaReHBq+8uvaPoq4Jw2oHNIcD9LewXI+mR/Z30ZcAYA87qCVM4iS1qNRjLQA8kj+DJbMJfS4Z0o2QcLS6OXe2hbZX7ooiVvWDN/3jcGHci/XBl0p9fsPbZg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1637387911; h=Content-Type:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=axWcMTF6SGjXuiXZsnKQLoJlAefLfmVAB6sjrfm4yzY=; b=LNv/qotlnWzUTc6YIQ6Qc92hXWfjK5KXSvlm3dkaskPgcFU0btvmxMHrP6O6XXTEfHIE+Tybna2uyGHKw3X0s0ogWBTb8Wq8yH/QFClTwC8EkRgjJK7xTMsrHb28LgQ6y2u6UnSAr40fm/lDxyZpoPFwE7w9WWJu4gLrzFu3HvA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= Received: from [192.168.1.174] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 1637387908486536.8055921644653; Fri, 19 Nov 2021 21:58:28 -0800 (PST) Message-ID: Subject: Re: [PATCH] libgccjit: Add support for setting the link section of global variables [PR100688] From: Antoni Boucher To: David Malcolm , jit@gcc.gnu.org, gcc-patches@gcc.gnu.org Date: Sat, 20 Nov 2021 00:58:26 -0500 In-Reply-To: References: <7fde146d8c3aecb47f66f34c836e2733eb4d8a6d.camel@zoho.com> Content-Type: multipart/mixed; boundary="=-XLxXslk0EcKtBX74OHRD" User-Agent: Evolution 3.42.1 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-ZohoMailClient: External X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Nov 2021 05:58:39 -0000 --=-XLxXslk0EcKtBX74OHRD Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for your reviews! Here's the updated patch, ready for another review. See comments/questions below. I'll update the other patches over the weekend. Le jeudi 20 mai 2021 =C3=A0 15:29 -0400, David Malcolm a =C3=A9crit=C2=A0: > On Wed, 2021-05-19 at 20:32 -0400, Antoni Boucher via Jit wrote: > > Hello. > > This patch adds support to set the link section of global > > variables. > > I used the ABI 18 because I submitted other patches up to 17. > > Thanks for the review. >=20 > I didn't see this email until now, and put the review in bugzilla > instead; sorry. >=20 > Here's a copy-and-paste of what I put in bugzilla: >=20 >=20 > Thanks for the patch; I like the idea; various nits below: >=20 > > diff --git a/gcc/jit/docs/topics/expressions.rst > b/gcc/jit/docs/topics/expressions.rst > > index 396259ef07e..b39f6c02527 100644 > > --- a/gcc/jit/docs/topics/expressions.rst > > +++ b/gcc/jit/docs/topics/expressions.rst > > @@ -539,6 +539,18 @@ where the rvalue is computed by reading from > > the > storage area. > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 in C. > > =C2=A0 > > +.. function:: void > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 gcc_jit_lvalue_set_link_section (gcc_jit_lvalue > *lvalue, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 const char *name) > > + > > +=C2=A0=C2=A0 Set the link section of a variable; analogous to: > > + > > +=C2=A0=C2=A0 .. code-block:: c > > + > > +=C2=A0=C2=A0=C2=A0=C2=A0 int variable __attribute__((section(".section= "))); > > + > > +=C2=A0=C2=A0 in C. >=20 > Please rename param "name" to "section_name".=C2=A0 Your implementation > requires that it be non-NULL (rather than having NULL unset the > section), so please specify that it must be non-NULL in the docs. >=20 > Please add the usual "This entrypoint was added in" text to state > which > API version it was added in. >=20 > > + > > =C2=A0Global variables > > =C2=A0**************** > > =C2=A0 > > diff --git a/gcc/jit/jit-playback.h b/gcc/jit/jit-playback.h > > index 825a3e172e9..8b0f65e87e8 100644 > > --- a/gcc/jit/jit-playback.h > > +++ b/gcc/jit/jit-playback.h > > @@ -650,6 +650,8 @@ public: > > =C2=A0 > > =C2=A0private: > > =C2=A0=C2=A0 context *m_ctxt; > > + > > +protected: > > =C2=A0=C2=A0 tree m_inner; > > =C2=A0}; >=20 > I think you only use this... >=20 > > =C2=A0 > > @@ -670,6 +672,12 @@ public: > > =C2=A0=C2=A0 rvalue * > > =C2=A0=C2=A0 get_address (location *loc); > > =C2=A0 > > +=C2=A0 void > > +=C2=A0 set_link_section (const char* name) > > +=C2=A0 { > > +=C2=A0=C2=A0=C2=A0 set_decl_section_name (m_inner, name); > > +=C2=A0 } >=20 > ...here, and you can get at rvalue::m_inner using as_tree (), so I > don't think we need to make m_inner protected. >=20 > > diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c > > index 117ff70114c..d54f878cc6b 100644 > > --- a/gcc/jit/jit-recording.c > > +++ b/gcc/jit/jit-recording.c > > @@ -3713,6 +3713,11 @@ recording::lvalue::get_address > (recording::location *loc) > > =C2=A0=C2=A0 return result; > > =C2=A0} > > =C2=A0 > > +void recording::lvalue::set_link_section (const char *name) > > +{ > > +=C2=A0 m_link_section =3D new_string (name); > > +} > > + > > =C2=A0/* The implementation of class gcc::jit::recording::param.=C2=A0 = */ > > =C2=A0 > > =C2=A0/* Implementation of pure virtual hook > recording::memento::replay_into > > @@ -4547,8 +4552,7 @@ recording::block::dump_edges_to_dot > (pretty_printer *pp) > > =C2=A0void > > =C2=A0recording::global::replay_into (replayer *r) > > =C2=A0{ > > -=C2=A0 set_playback_obj ( > > -=C2=A0=C2=A0=C2=A0 m_initializer > > +=C2=A0 playback::lvalue *global =3D m_initializer > > =C2=A0=C2=A0=C2=A0=C2=A0 ? r->new_global_initialized (playback_location= (r, m_loc), > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 m_kind, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 m_type->playback_type (), > > @@ -4560,7 +4564,12 @@ recording::global::replay_into (replayer *r) > > =C2=A0=C2=A0=C2=A0=C2=A0 : r->new_global (playback_location (r, m_loc), > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 m_kind, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 m_type->playback_type (= ), > > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 playback_string (m_name))); > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 playback_string (m_name)); > > +=C2=A0 if (m_link_section !=3D NULL) > > +=C2=A0 { > > +=C2=A0=C2=A0=C2=A0 global->set_link_section(m_link_section->c_str()); > > +=C2=A0 } >=20 > Coding convention nits: don't use {} when it's just one statement > (which I think is a bad convention, but it is the project's > convention). > Missing spaces between function name and open-paren in both calls > here. >=20 >=20 > > +=C2=A0 set_playback_obj (global); > > =C2=A0} > > =C2=A0 >=20 > [...snip....] >=20 > > diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h > > index 03fa1160cf0..0691fac579d 100644 > > --- a/gcc/jit/jit-recording.h > > +++ b/gcc/jit/jit-recording.h > > @@ -1105,7 +1105,8 @@ public: > > =C2=A0=C2=A0 lvalue (context *ctxt, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 location *loc, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 type *type_) > > -=C2=A0=C2=A0=C2=A0 : rvalue (ctxt, loc, type_) > > +=C2=A0=C2=A0=C2=A0 : rvalue (ctxt, loc, type_), > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 m_link_section(NULL) > > =C2=A0=C2=A0=C2=A0=C2=A0 {} > > =C2=A0 > > =C2=A0=C2=A0 playback::lvalue * > > @@ -1127,6 +1128,10 @@ public: > > =C2=A0=C2=A0 const char *access_as_rvalue (reproducer &r) OVERRIDE; > > =C2=A0=C2=A0 virtual const char *access_as_lvalue (reproducer &r); > > =C2=A0=C2=A0 virtual bool is_global () const { return false; } > > +=C2=A0 void set_link_section (const char *name); > > + > > +protected: > > +=C2=A0 string *m_link_section; > > =C2=A0}; >=20 > Can it be private, rather than protected? m_link_section can't be private because it's used in recording::global::replay_into. >=20 >=20 > > diff --git a/gcc/jit/libgccjit.c b/gcc/jit/libgccjit.c > > index 7fa948007ad..8cfa48aae24 100644 > > --- a/gcc/jit/libgccjit.c > > +++ b/gcc/jit/libgccjit.c > > @@ -1953,6 +1953,18 @@ gcc_jit_lvalue_get_address (gcc_jit_lvalue > *lvalue, > > =C2=A0=C2=A0 return (gcc_jit_rvalue *)lvalue->get_address (loc); > > =C2=A0} > > =C2=A0 > > +/* Public entrypoint.=C2=A0 See description in libgccjit.h. > > + > > +=C2=A0=C2=A0 After error-checking, the real work is done by the > > +=C2=A0=C2=A0 gcc::jit::recording::lvalue::set_section method in jit- > recording.c.=C2=A0 */ > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ^^^^^^^^^^^ > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 set_link_section >=20 > Also, a newline here please for consistency with the other > entrypoints. Where should I add a newline? >=20 > > +void > > +gcc_jit_lvalue_set_link_section (gcc_jit_lvalue *lvalue, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 const char *name) > > +{ > > +=C2=A0 RETURN_IF_FAIL (name, NULL, NULL, "NULL name"); > > +=C2=A0 lvalue->set_link_section(name); >=20 > Missing a space between function name and open-paren. >=20 >=20 > > diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h > > index 5c722c2c57f..21553ede3de 100644 > > --- a/gcc/jit/libgccjit.h > > +++ b/gcc/jit/libgccjit.h > > @@ -1072,6 +1072,19 @@ extern gcc_jit_rvalue * > > =C2=A0gcc_jit_lvalue_get_address (gcc_jit_lvalue *lvalue, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 gcc_jit_location *loc); > > =C2=A0 > > +#define LIBGCCJIT_HAVE_gcc_jit_lvalue_set_link_section > > + > > +/* Set the link section of a global variable; analogous to: > > +=C2=A0=C2=A0=C2=A0=C2=A0 __attribute__((section("section_name"))) > > +=C2=A0=C2=A0 in C. > > + > > +=C2=A0=C2=A0 This API entrypoint was added in LIBGCCJIT_ABI_18; you ca= n test > for its > > +=C2=A0=C2=A0 presence using > > +=C2=A0=C2=A0=C2=A0=C2=A0 #ifdef LIBGCCJIT_HAVE_gcc_jit_lvalue_set_tls_= model=C2=A0 */ >=20 > Wrong #ifdef in the comment. >=20 > > +extern void > > +gcc_jit_lvalue_set_link_section (gcc_jit_lvalue *lvalue, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 const char *name); >=20 > Rename param "name" to "section_name" to match the comment. >=20 > > diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map > > index 337ea6c7fe4..9e722c2bde1 100644 > > --- a/gcc/jit/libgccjit.map > > +++ b/gcc/jit/libgccjit.map > > @@ -205,3 +205,14 @@ LIBGCCJIT_ABI_15 { > > =C2=A0=C2=A0=C2=A0=C2=A0 gcc_jit_extended_asm_add_clobber; > > =C2=A0=C2=A0=C2=A0=C2=A0 gcc_jit_context_add_top_level_asm; > > =C2=A0} LIBGCCJIT_ABI_14; > > + > > +LIBGCCJIT_ABI_16 { > > +} LIBGCCJIT_ABI_15; > > + > > +LIBGCCJIT_ABI_17 { > > +} LIBGCCJIT_ABI_16; > > + > > +LIBGCCJIT_ABI_18 { > > +=C2=A0 global: > > +=C2=A0=C2=A0=C2=A0 gcc_jit_lvalue_set_link_section; > > +} LIBGCCJIT_ABI_17; >=20 > I have some other patches of yours to review (presumably where the > other ABI things are); sorry about that.=C2=A0 I'll try to get to them > today. >=20 >=20 > > diff --git a/gcc/testsuite/jit.dg/all-non-failing-tests.h > b/gcc/testsuite/jit.dg/all-non-failing-tests.h > > index 4202eb7798b..7e3b59dee0d 100644 > > --- a/gcc/testsuite/jit.dg/all-non-failing-tests.h > > +++ b/gcc/testsuite/jit.dg/all-non-failing-tests.h > > @@ -181,6 +181,13 @@ > > =C2=A0#undef create_code > > =C2=A0#undef verify_code > > =C2=A0 > > +/* test-link-section.c */ > > +#define create_code create_code_link_section > > +#define verify_code verify_code_link_section > > +#include "test-link-section.c" > > +#undef create_code > > +#undef verify_code > > + > > =C2=A0/* test-hello-world.c */ > > =C2=A0#define create_code create_code_hello_world > > =C2=A0#define verify_code verify_code_hello_world > > diff --git a/gcc/testsuite/jit.dg/test-link-section.c > b/gcc/testsuite/jit.dg/test-link-section.c > > new file mode 100644 > > index 00000000000..546c1e95b92 > > --- /dev/null > > +++ b/gcc/testsuite/jit.dg/test-link-section.c > > @@ -0,0 +1,25 @@ > > +#include > > +#include > > + > > +#include "libgccjit.h" > > + > > +#include "harness.h" > > + > > +void > > +create_code (gcc_jit_context *ctxt, void *user_data) > > +{ > > +=C2=A0 /* Let's try to inject the equivalent of: > > +=C2=A0=C2=A0=C2=A0=C2=A0 int foo __attribute__((section(".section"))); > > +=C2=A0 */ > > +=C2=A0 gcc_jit_type *int_type =3D > > +=C2=A0=C2=A0=C2=A0 gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); > > +=C2=A0 gcc_jit_lvalue *foo =3D > > +=C2=A0=C2=A0=C2=A0 gcc_jit_context_new_global ( > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ctxt, NULL, GCC_JIT_GLOBAL_EXPORTED, in= t_type, "foo"); > > +=C2=A0 gcc_jit_lvalue_set_link_section(foo, "section"); > > +} > > + > > +extern void > > +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) > > +{ > > +} >=20 > This is OK, but ideally it would test that the section name made it > into the generated assembler.=C2=A0 test-compile-to-assembler.c has a > testcase for this which does something similar, with a DejaGnu > directive looking for a substring in the generated asm if you want to > attempt it. >=20 > One other thing: the docs should make it clear about the leading ".". >=20 > If I want to create the equivalent of: >=20 > =C2=A0=C2=A0 __attribute__((section(".section"))) >=20 > do I call it with: >=20 > =C2=A0=C2=A0 gcc_jit_lvalue_set_link_section(foo, "section"); >=20 > or with: >=20 > =C2=A0=C2=A0 gcc_jit_lvalue_set_link_section(foo, ".section"); >=20 > It's a bit unclear to me from just reading the patch.=C2=A0 The example > suggests it's the former.=C2=A0 In either case, the documentation should > be > clearer about this. >=20 >=20 > Hope this is constructive > Dave >=20 --=-XLxXslk0EcKtBX74OHRD Content-Disposition: attachment; filename*0=0001-libgccjit-Add-support-for-setting-the-link-section-o.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-libgccjit-Add-support-for-setting-the-link-section-o.patch"; charset="UTF-8" RnJvbSBhNDU0Y2I5Y2UxNGFhNjkwM2Y3YmU5ZjJhNTZjMzVhYjgyNTFlNjc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogV2VkLCAxMiBNYXkgMjAyMSAwNzo1Nzo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYmdj Y2ppdDogQWRkIHN1cHBvcnQgZm9yIHNldHRpbmcgdGhlIGxpbmsgc2VjdGlvbiBvZiBnbG9iYWwK IHZhcmlhYmxlcyBbUFIxMDA2ODhdCgoyMDIxLTExLTIwICBBbnRvbmkgQm91Y2hlciAgPGJvdWFu dG9Aem9oby5jb20+CgogICAgZ2NjL2ppdC8KICAgICAgICAgICAgUFIgdGFyZ2V0LzEwMDY4OAog ICAgICAgICAgICAqIGRvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0IChMSUJHQ0NKSVRfQUJJ XzE4KTogTmV3IEFCSQogICAgICAgICAgICB0YWcuCiAgICAgICAgICAgICogZG9jcy90b3BpY3Mv ZXhwcmVzc2lvbnMucnN0OiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCiAgICAgICAgICAgIGZ1 bmN0aW9uIGdjY19qaXRfbHZhbHVlX3NldF9saW5rX3NlY3Rpb24uCiAgICAgICAgICAgICogaml0 LXBsYXliYWNrLmg6IE5ldyBmdW5jdGlvbiAoc2V0X2xpbmtfc2VjdGlvbikgYW5kCiAgICAgICAg ICAgIHJ2YWx1ZTo6bV9pbm5lciBwcm90ZWN0ZWQuCiAgICAgICAgICAgICogaml0LXJlY29yZGlu Zy5jOiBOZXcgZnVuY3Rpb24gKHNldF9saW5rX3NlY3Rpb24pIGFuZAogICAgICAgICAgICBzdXBw b3J0IGZvciBzZXR0aW5nIHRoZSBsaW5rIHNlY3Rpb24uCiAgICAgICAgICAgICogaml0LXJlY29y ZGluZy5oOiBOZXcgZnVuY3Rpb24gKHNldF9saW5rX3NlY3Rpb24pIGFuZCBuZXcKICAgICAgICAg ICAgZmllbGQgbV9saW5rX3NlY3Rpb24uCiAgICAgICAgICAgICogbGliZ2Njaml0LmM6IE5ldyBm dW5jdGlvbiAoZ2NjX2ppdF9sdmFsdWVfc2V0X2xpbmtfc2VjdGlvbikuCiAgICAgICAgICAgICog bGliZ2Njaml0Lmg6IE5ldyBmdW5jdGlvbiAoZ2NjX2ppdF9sdmFsdWVfc2V0X2xpbmtfc2VjdGlv bikuCiAgICAgICAgICAgICogbGliZ2Njaml0Lm1hcCAoTElCR0NDSklUX0FCSV8xOCk6IE5ldyBB QkkgdGFnLgoKICAgIGdjYy90ZXN0c3VpdGUvCiAgICAgICAgICAgIFBSIHRhcmdldC8xMDA2ODgK ICAgICAgICAgICAgKiBqaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmg6IEFkZCB0ZXN0LWxp bmstc2VjdGlvbi5jLgogICAgICAgICAgICAqIGppdC5kZy90ZXN0LWxpbmtfc2VjdGlvbi5jOiBO ZXcgdGVzdC4KICAgICAgICAgICAgKiBqaXQuZGcvaml0LmV4cDogTmV3IGhlbHBlciBmdW5jdGlv biB0byB0ZXN0IHRoYXQgdGhlCiAgICAgICAgICAgIGFzc2VtYmx5IGNvbnRhaW5zIGEgcGF0dGVy bi4KLS0tCiBnY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0ICAgICAgICAgfCAg OSArKysrKwogZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QgICAgICAgICAgIHwg MjEgKysrKysrKysrKysKIGdjYy9qaXQvaml0LXBsYXliYWNrLmggICAgICAgICAgICAgICAgICAg ICAgICB8ICA2ICsrKwogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMgICAgICAgICAgICAgICAgICAg ICAgIHwgMzUgKysrKysrKysrKysrKysrLS0tCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCAgICAg ICAgICAgICAgICAgICAgICAgfCAgNyArKystCiBnY2Mvaml0L2xpYmdjY2ppdC5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAxMiArKysrKysKIGdjYy9qaXQvbGliZ2Njaml0LmggICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDE0ICsrKysrKysKIGdjYy9qaXQvbGliZ2Njaml0Lm1hcCAg ICAgICAgICAgICAgICAgICAgICAgICB8ICA4ICsrKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL2pp dC5leHAgICAgICAgICAgICAgICAgICB8IDMzICsrKysrKysrKysrKysrKysrCiAuLi4vaml0LmRn L3Rlc3QtbGluay1zZWN0aW9uLWFzc2VtYmxlci5jICAgICAgfCAzNyArKysrKysrKysrKysrKysr KysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAxNzUgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxpbmstc2VjdGlv bi1hc3NlbWJsZXIuYwoKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJp bGl0eS5yc3QgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CmluZGV4IDUy ZWUzZjg2MGE3Li5iODUyZjIwNWZkNyAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9j b21wYXRpYmlsaXR5LnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHku cnN0CkBAIC0yODQsMyArMjg0LDEyIEBAIGVudHJ5cG9pbnRzOgogICAqIDpmdW5jOmBnY2Nfaml0 X3N0cnVjdF9nZXRfZmllbGRgCiAKICAgKiA6ZnVuYzpgZ2NjX2ppdF9zdHJ1Y3RfZ2V0X2ZpZWxk X2NvdW50YAorCisuLiBfTElCR0NDSklUX0FCSV8xODoKKworYGBMSUJHQ0NKSVRfQUJJXzE4YGAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgYExJQkdDQ0pJVF9BQklfMThgYCBjb3ZlcnMgdGhl IGFkZGl0aW9uIG9mIGFuIEFQSSBlbnRyeXBvaW50IHRvIHNldCB0aGUgbGluaworc2VjdGlvbiBv ZiBhIHZhcmlhYmxlOgorCisgICogOmZ1bmM6YGdjY19qaXRfbHZhbHVlX3NldF9saW5rX3NlY3Rp b25gCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdCBiL2dj Yy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CmluZGV4IDM5NjI1OWVmMDdlLi4wMmRl NTMxZjMxYSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QK KysrIGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKQEAgLTUzOSw2ICs1Mzks MjcgQEAgd2hlcmUgdGhlIHJ2YWx1ZSBpcyBjb21wdXRlZCBieSByZWFkaW5nIGZyb20gdGhlIHN0 b3JhZ2UgYXJlYS4KIAogICAgaW4gQy4KIAorLi4gZnVuY3Rpb246OiB2b2lkCisgICAgICAgICAg ICAgIGdjY19qaXRfbHZhbHVlX3NldF9saW5rX3NlY3Rpb24gKGdjY19qaXRfbHZhbHVlICpsdmFs dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnNlY3Rpb25fbmFtZSkKKworICAgU2V0IHRoZSBsaW5rIHNlY3Rpb24gb2YgYSB2YXJp YWJsZS4KKyAgIFRoZSBwYXJhbWV0ZXIgYGBzZWN0aW9uX25hbWVgYCBtdXN0IGJlIG5vbi1OVUxM IGFuZCBtdXN0IGNvbnRhaW5zIHRoZQorICAgbGVhZGluZyBkb3QuIEFuYWxvZ291cyB0bzoKKwor ICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICBpbnQgdmFyaWFibGUgX19hdHRyaWJ1dGVfXygo c2VjdGlvbigiLnNlY3Rpb24iKSkpOworCisgICBpbiBDLgorCisgICBUaGlzIGVudHJ5cG9pbnQg d2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMThgOyB5b3UgY2FuIHRlc3QgZm9yCisg ICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lm ZGVmIExJQkdDQ0pJVF9IQVZFX2djY19qaXRfbHZhbHVlX3NldF9saW5rX3NlY3Rpb24KKwogR2xv YmFsIHZhcmlhYmxlcwogKioqKioqKioqKioqKioqKgogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2pp dC1wbGF5YmFjay5oIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAppbmRleCBmNjcwYzllODFkZi4u MTVmZjRmOTFlYjcgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNrLmgKKysrIGIvZ2Nj L2ppdC9qaXQtcGxheWJhY2suaApAQCAtNjc1LDYgKzY3NSwxMiBAQCBwdWJsaWM6CiAgIHJ2YWx1 ZSAqCiAgIGdldF9hZGRyZXNzIChsb2NhdGlvbiAqbG9jKTsKIAorICB2b2lkCisgIHNldF9saW5r X3NlY3Rpb24gKGNvbnN0IGNoYXIqIG5hbWUpCisgIHsKKyAgICBzZXRfZGVjbF9zZWN0aW9uX25h bWUgKGFzX3RyZWUgKCksIG5hbWUpOworICB9CisKIHByaXZhdGU6CiAgIGJvb2wgbWFya19hZGRy ZXNzYWJsZSAobG9jYXRpb24gKmxvYyk7CiB9OwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVj b3JkaW5nLmMgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYwppbmRleCAxMTdmZjcwMTE0Yy4uMmFk OWU5MGUzOTcgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jCisrKyBiL2djYy9q aXQvaml0LXJlY29yZGluZy5jCkBAIC0zNzEzLDYgKzM3MTMsMTEgQEAgcmVjb3JkaW5nOjpsdmFs dWU6OmdldF9hZGRyZXNzIChyZWNvcmRpbmc6OmxvY2F0aW9uICpsb2MpCiAgIHJldHVybiByZXN1 bHQ7CiB9CiAKK3ZvaWQgcmVjb3JkaW5nOjpsdmFsdWU6OnNldF9saW5rX3NlY3Rpb24gKGNvbnN0 IGNoYXIgKm5hbWUpCit7CisgIG1fbGlua19zZWN0aW9uID0gbmV3X3N0cmluZyAobmFtZSk7Cit9 CisKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjbGFzcyBnY2M6OmppdDo6cmVjb3JkaW5nOjpw YXJhbS4gICovCiAKIC8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBob29rIHJlY29y ZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KQEAgLTQ1NDcsMjAgKzQ1NTIsMzAgQEAgcmVjb3Jk aW5nOjpibG9jazo6ZHVtcF9lZGdlc190b19kb3QgKHByZXR0eV9wcmludGVyICpwcCkKIHZvaWQK IHJlY29yZGluZzo6Z2xvYmFsOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiB7Ci0gIHNldF9w bGF5YmFja19vYmogKAotICAgIG1faW5pdGlhbGl6ZXIKLSAgICA/IHItPm5ld19nbG9iYWxfaW5p dGlhbGl6ZWQgKHBsYXliYWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCisgIHBsYXliYWNrOjpsdmFs dWUgKmdsb2JhbDsKKyAgaWYgKG1faW5pdGlhbGl6ZXIpCisgIHsKKyAgICAgIGdsb2JhbCA9IHIt Pm5ld19nbG9iYWxfaW5pdGlhbGl6ZWQgKHBsYXliYWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCiAJ CQkJIG1fa2luZCwKIAkJCQkgbV90eXBlLT5wbGF5YmFja190eXBlICgpLAogCQkJCSBtX3R5cGUt PmRlcmVmZXJlbmNlICgpLT5nZXRfc2l6ZSAoKSwKIAkJCQkgbV9pbml0aWFsaXplcl9udW1fYnl0 ZXMKIAkJCQkgLyBtX3R5cGUtPmRlcmVmZXJlbmNlICgpLT5nZXRfc2l6ZSAoKSwKIAkJCQkgbV9p bml0aWFsaXplciwKLQkJCQkgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpKQotICAgIDogci0+bmV3 X2dsb2JhbCAocGxheWJhY2tfbG9jYXRpb24gKHIsIG1fbG9jKSwKKwkJCQkgcGxheWJhY2tfc3Ry aW5nIChtX25hbWUpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAgIGdsb2JhbCA9IHItPm5ld19n bG9iYWwgKHBsYXliYWNrX2xvY2F0aW9uIChyLCBtX2xvYyksCiAJCSAgICAgbV9raW5kLAogCQkg ICAgIG1fdHlwZS0+cGxheWJhY2tfdHlwZSAoKSwKLQkJICAgICBwbGF5YmFja19zdHJpbmcgKG1f bmFtZSkpKTsKKwkJICAgICBwbGF5YmFja19zdHJpbmcgKG1fbmFtZSkpOworICB9CisKKyAgaWYg KG1fbGlua19zZWN0aW9uICE9IE5VTEwpCisgICAgZ2xvYmFsLT5zZXRfbGlua19zZWN0aW9uICht X2xpbmtfc2VjdGlvbi0+Y19zdHIgKCkpOworCisgIHNldF9wbGF5YmFja19vYmogKGdsb2JhbCk7 CiB9CiAKIC8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mCkBAIC00Njc1 LDYgKzQ2OTAsMTQgQEAgcmVjb3JkaW5nOjpnbG9iYWw6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJv ZHVjZXIgJnIpCiAgICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChnZXRfdHlwZSAoKSksCiAg ICAgbV9uYW1lLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKIAorICBpZiAobV9saW5rX3NlY3Rpb24g IT0gTlVMTCkKKyAgeworICAgIHIud3JpdGUgKCIgIGdjY19qaXRfbHZhbHVlX3NldF9saW5rX3Nl Y3Rpb24gKCVzLCAvKiBnY2Nfaml0X2x2YWx1ZSAqbHZhbHVlICovXG4iCisJIiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcIiVzXCIpOyAvKiAqL1xuIiwKKyAgICAgaWQsCisgICAg IG1fbGlua19zZWN0aW9uLT5jX3N0ciAoKSk7CisgIH0KKwogICBpZiAobV9pbml0aWFsaXplcikK ICAgICBzd2l0Y2ggKG1fdHlwZS0+ZGVyZWZlcmVuY2UgKCktPmdldF9zaXplICgpKQogICAgICAg ewpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggYi9nY2Mvaml0L2ppdC1yZWNv cmRpbmcuaAppbmRleCA0YTk5NGZlNzA5NC4uMmQwOGUwNDNlMTAgMTAwNjQ0Ci0tLSBhL2djYy9q aXQvaml0LXJlY29yZGluZy5oCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCkBAIC0xMTEy LDcgKzExMTIsOCBAQCBwdWJsaWM6CiAgIGx2YWx1ZSAoY29udGV4dCAqY3R4dCwKIAkgIGxvY2F0 aW9uICpsb2MsCiAJICB0eXBlICp0eXBlXykKLSAgICA6IHJ2YWx1ZSAoY3R4dCwgbG9jLCB0eXBl XykKKyAgICA6IHJ2YWx1ZSAoY3R4dCwgbG9jLCB0eXBlXyksCisgICAgICBtX2xpbmtfc2VjdGlv biAoTlVMTCkKICAgICB7fQogCiAgIHBsYXliYWNrOjpsdmFsdWUgKgpAQCAtMTEzNCw2ICsxMTM1 LDEwIEBAIHB1YmxpYzoKICAgY29uc3QgY2hhciAqYWNjZXNzX2FzX3J2YWx1ZSAocmVwcm9kdWNl ciAmcikgT1ZFUlJJREU7CiAgIHZpcnR1YWwgY29uc3QgY2hhciAqYWNjZXNzX2FzX2x2YWx1ZSAo cmVwcm9kdWNlciAmcik7CiAgIHZpcnR1YWwgYm9vbCBpc19nbG9iYWwgKCkgY29uc3QgeyByZXR1 cm4gZmFsc2U7IH0KKyAgdm9pZCBzZXRfbGlua19zZWN0aW9uIChjb25zdCBjaGFyICpuYW1lKTsK KworcHJvdGVjdGVkOgorICBzdHJpbmcgKm1fbGlua19zZWN0aW9uOwogfTsKIAogY2xhc3MgcGFy YW0gOiBwdWJsaWMgbHZhbHVlCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5jIGIvZ2Nj L2ppdC9saWJnY2NqaXQuYwppbmRleCBjNzQ0YjYzNGY0Yi4uNWI0MTNkNDFlMmMgMTAwNjQ0Ci0t LSBhL2djYy9qaXQvbGliZ2Njaml0LmMKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuYwpAQCAtMjIx Nyw2ICsyMjE3LDE4IEBAIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzIChnY2Nfaml0X2x2YWx1 ZSAqbHZhbHVlLAogICByZXR1cm4gKGdjY19qaXRfcnZhbHVlICopbHZhbHVlLT5nZXRfYWRkcmVz cyAobG9jKTsKIH0KIAorLyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4g bGliZ2Njaml0LmguCisKKyAgIEFmdGVyIGVycm9yLWNoZWNraW5nLCB0aGUgcmVhbCB3b3JrIGlz IGRvbmUgYnkgdGhlCisgICBnY2M6OmppdDo6cmVjb3JkaW5nOjpsdmFsdWU6OnNldF9saW5rX3Nl Y3Rpb24gbWV0aG9kIGluIGppdC1yZWNvcmRpbmcuYy4gICovCit2b2lkCitnY2Nfaml0X2x2YWx1 ZV9zZXRfbGlua19zZWN0aW9uIChnY2Nfaml0X2x2YWx1ZSAqbHZhbHVlLAorCQkJICAgIGNvbnN0 IGNoYXIgKnNlY3Rpb25fbmFtZSkKK3sKKyAgUkVUVVJOX0lGX0ZBSUwgKG5hbWUsIE5VTEwsIE5V TEwsICJOVUxMIHNlY3Rpb25fbmFtZSIpOworICBsdmFsdWUtPnNldF9saW5rX3NlY3Rpb24gKG5h bWUpOworfQorCiAvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJn Y2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9u ZSBieSB0aGUKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmggYi9nY2Mvaml0L2xpYmdj Y2ppdC5oCmluZGV4IGExYzk0MzZjNTQ1Li42NDZiNTE3MmIwOCAxMDA2NDQKLS0tIGEvZ2NjL2pp dC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBAIC0xMDg5LDYgKzEwODks MjAgQEAgZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNz IChnY2Nfaml0X2x2YWx1ZSAqbHZhbHVlLAogCQkJICAgIGdjY19qaXRfbG9jYXRpb24gKmxvYyk7 CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfZ2NjX2ppdF9sdmFsdWVfc2V0X2xpbmtfc2VjdGlv bgorCisvKiBTZXQgdGhlIGxpbmsgc2VjdGlvbiBvZiBhIGdsb2JhbCB2YXJpYWJsZTsgYW5hbG9n b3VzIHRvOgorICAgICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuc2VjdGlvbl9uYW1lIikpKQor ICAgaW4gQy4KKworICAgVGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0NDSklU X0FCSV8xODsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNlIHVzaW5nCisgICAgICNp ZmRlZiBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X2x2YWx1ZV9zZXRfbGlua19zZWN0aW9uCisqLwor ZXh0ZXJuIHZvaWQKK2djY19qaXRfbHZhbHVlX3NldF9saW5rX3NlY3Rpb24gKGdjY19qaXRfbHZh bHVlICpsdmFsdWUsCisJCQkgICAgY29uc3QgY2hhciAqc2VjdGlvbl9uYW1lKTsKKwogZXh0ZXJu IGdjY19qaXRfbHZhbHVlICoKIGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChnY2Nfaml0X2Z1 bmN0aW9uICpmdW5jLAogCQkJICAgIGdjY19qaXRfbG9jYXRpb24gKmxvYywKZGlmZiAtLWdpdCBh L2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcAppbmRleCA2NGU3 OTA5NDllOC4uZTViZGFmZDAxNTYgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcAor KysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTIyNiwzICsyMjYsMTEgQEAgTElCR0NDSklU X0FCSV8xNiB7CiAgICAgZ2NjX2ppdF90eXBlX2lzX3N0cnVjdDsKICAgICBnY2Nfaml0X3N0cnVj dF9nZXRfZmllbGRfY291bnQ7CiB9IExJQkdDQ0pJVF9BQklfMTU7CisKK0xJQkdDQ0pJVF9BQklf MTcgeworfSBMSUJHQ0NKSVRfQUJJXzE2OworCitMSUJHQ0NKSVRfQUJJXzE4IHsKKyAgZ2xvYmFs OgorICAgIGdjY19qaXRfbHZhbHVlX3NldF9saW5rX3NlY3Rpb247Cit9IExJQkdDQ0pJVF9BQklf MTc7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9qaXQuZXhwIGIvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvaml0LmV4cAppbmRleCAxMGI5OGJkYzc0Yi4uMzU2OGRiYjlkNjMgMTAwNjQ0 Ci0tLSBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5leHAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvaml0LmV4cApAQCAtODY0LDYgKzg2NCwzOSBAQCBwcm9jIGppdC12ZXJpZnktYXNzZW1i bGVyIHsgYXJncyB9IHsKICAgICBqaXQtcnVuLWV4ZWN1dGFibGUgJHtleGVjdXRhYmxlX2Zyb21f YXNtfSAke2RnLW91dHB1dC10ZXh0fQogfQogCisjIEFzc3VtaW5nIHRoYXQgYSAucyBmaWxlIGhh cyBiZWVuIHdyaXR0ZW4gb3V0IG5hbWVkCisjIE9VVFBVVF9GSUxFTkFNRSwgY2hlY2sgdGhhdCB0 aGUgYXJndW1lbnQgbWF0Y2hlcyB0aGUKKyMgb3V0cHV0IGZpbGUuCisjIEZvciB1c2UgYnkgdGhl IHRlc3QtbGluay1zZWN0aW9uLWFzc2VtYmxlci5jIHRlc3RjYXNlLgorcHJvYyBqaXQtdmVyaWZ5 LWFzc2VtYmxlci1vdXRwdXQgeyBhcmdzIH0geworICAgIHZlcmJvc2UgImppdC12ZXJpZnktYXNz ZW1ibGVyOiAkYXJncyIKKworICAgIHNldCBkZy1vdXRwdXQtdGV4dCBbbGluZGV4ICRhcmdzIDBd CisgICAgdmVyYm9zZSAiZGctb3V0cHV0LXRleHQ6ICR7ZGctb3V0cHV0LXRleHR9IgorCisgICAg dXB2YXIgMiBuYW1lIG5hbWUKKyAgICB2ZXJib3NlICJuYW1lOiAkbmFtZSIKKworICAgIHVwdmFy IDIgcHJvZyBwcm9nCisgICAgdmVyYm9zZSAicHJvZzogJHByb2ciCisgICAgc2V0IGFzbV9maWxl bmFtZSBbaml0LWdldC1vdXRwdXQtZmlsZW5hbWUgJHByb2ddCisgICAgdmVyYm9zZSAiICBhc21f ZmlsZW5hbWU6ICR7YXNtX2ZpbGVuYW1lfSIKKworICAgICMgUmVhZCB0aGUgYXNzZW1ibHkgZmls ZS4KKyAgICBzZXQgZiBbb3BlbiAkYXNtX2ZpbGVuYW1lIHJdCisgICAgc2V0IGNvbnRlbnQgW3Jl YWQgJGZdCisgICAgY2xvc2UgJGYKKworICAgICMgVmVyaWZ5IHRoYXQgdGhlIGFzc2VtYmx5IG1h dGNoZXMgdGhlIHJlZ2V4LgorICAgIGlmIHsgIVtyZWdleHAgJHtkZy1vdXRwdXQtdGV4dH0gJGNv bnRlbnRdIH0geworCWZhaWwgIiR7YXNtX2ZpbGVuYW1lfSBvdXRwdXQgcGF0dGVybiB0ZXN0LCBp cyAke2NvbnRlbnR9LCBzaG91bGQgbWF0Y2ggJHtkZy1vdXRwdXQtdGV4dH0iCisJdmVyYm9zZSAi RmFpbGVkIHRlc3QgZm9yIG91dHB1dCBwYXR0ZXJuICR7ZGctb3V0cHV0LXRleHR9IiAzCisgICAg fSBlbHNlIHsKKwlwYXNzICIke2FzbV9maWxlbmFtZX0gb3V0cHV0IHBhdHRlcm4gdGVzdCwgJHtk Zy1vdXRwdXQtdGV4dH0iCisJdmVyYm9zZSAiUGFzc2VkIHRlc3QgZm9yIG91dHB1dCBwYXR0ZXJu ICR7ZGctb3V0cHV0LXRleHR9IiAzCisgICAgfQorCit9CiAjIEFzc3VtaW5nIHRoYXQgYSAubyBm aWxlIGhhcyBiZWVuIHdyaXR0ZW4gb3V0IG5hbWVkCiAjIE9VVFBVVF9GSUxFTkFNRSwgaW52b2tl IHRoZSBkcml2ZXIgdG8gdHJ5IHRvIHR1cm4gaXQgaW50bwogIyBhbiBleGVjdXRhYmxlLCBhbmQg dHJ5IHRvIHJ1biB0aGUgcmVzdWx0LgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1saW5rLXNlY3Rpb24tYXNzZW1ibGVyLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWxpbmstc2VjdGlvbi1hc3NlbWJsZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYTkwYjAwZTlhODIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWxpbmstc2VjdGlvbi1hc3NlbWJsZXIuYwpAQCAtMCwwICsxLDM3IEBACisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2pp dC5oIgorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJ TkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklM RU5BTUUgICJvdXRwdXQtb2YtdGVzdC1saW5rLXNlY3Rpb24tYXNzZW1ibGVyLmMucyIKKyNpbmNs dWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgLyogTGV0J3MgdHJ5IHRvIGluamVjdCB0aGUgZXF1 aXZhbGVudCBvZjoKKyAgICAgaW50IGZvbyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuc2VjdGlv biIpKSk7CisgICovCisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29u dGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfbHZhbHVl ICpmb28gPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5V TEwsIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELCBpbnRfdHlwZSwgImZvbyIpOworICBnY2Nfaml0 X2x2YWx1ZV9zZXRfbGlua19zZWN0aW9uKGZvbywgIi5teV9zZWN0aW9uIik7CisKKyAgZ2NjX2pp dF9mdW5jdGlvbiAqZnVuY19tYWluID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9u IChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGlu dF90eXBlLAorCQkJCSAgIm1haW4iLAorCQkJCSAgMCwgTlVMTCwKKwkJCQkgIDApOworICBnY2Nf aml0X3J2YWx1ZSAqemVybyA9IGdjY19qaXRfY29udGV4dF96ZXJvIChjdHh0LCBpbnRfdHlwZSk7 CisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1 bmNfbWFpbiwgTlVMTCk7CisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywg TlVMTCwgemVybyk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxl LXdhcy1jcmVhdGVkICIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1i bGVyLW91dHB1dCAiLnNlY3Rpb24JLm15X3NlY3Rpb24iIH0gfSAqLwotLSAKMi4yNi4yLjcuZzE5 ZGI5Y2ZiNjguZGlydHkKCg== --=-XLxXslk0EcKtBX74OHRD--