From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13881 invoked by alias); 30 Nov 2011 16:02:50 -0000 Received: (qmail 13859 invoked by uid 22791); 30 Nov 2011 16:02:41 -0000 X-SWARE-Spam-Status: No, hits=0.2 required=5.0 tests=AWL,BAYES_50,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,TW_BP,TW_EG,TW_GJ,TW_WB,TW_YB X-Spam-Check-By: sourceware.org Received: from mail-vw0-f41.google.com (HELO mail-vw0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 30 Nov 2011 16:02:17 +0000 Received: by vbbfn1 with SMTP id fn1so587188vbb.0 for ; Wed, 30 Nov 2011 08:02:16 -0800 (PST) Received: by 10.52.23.134 with SMTP id m6mr2473437vdf.123.1322668936318; Wed, 30 Nov 2011 08:02:16 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.3.140 with HTTP; Wed, 30 Nov 2011 08:01:55 -0800 (PST) In-Reply-To: References: From: Kevin Pouget Date: Wed, 30 Nov 2011 16:02:00 -0000 Message-ID: Subject: Re: [RFC] Python Finish Breakpoints To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf307ca44e1ace5304b2f5dcf6 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-11/txt/msg00846.txt.bz2 --20cf307ca44e1ace5304b2f5dcf6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 11661 On Thu, Nov 24, 2011 at 9:26 AM, Kevin Pouget wrot= e: > > On Thu, Nov 17, 2011 at 6:48 PM, Tom Tromey wrote: > > > > >>>>> "Kevin" =3D=3D Kevin Pouget writes: > > > > Kevin> py-breakpoint.c::gdbpy_should_stop is executed _before_ we have = the > > Kevin> chance to save the stop_registers, used to compute the return va= lue > > Kevin> (in infrun.c::normal_stop). > > Kevin> (the problem existed since the beginning, but I never faced it b= efore) > > > > Kevin> I've updated the function infcmd.c::get_return_value to take this > > Kevin> situation into account, using the current registers if the > > Kevin> 'stop_registers' are not set, based on what is done in > > Kevin> infrun.c::normal_stop: > > > > This approach seems reasonable to me but I am not sure whether or not it > > is really ok. =A0Most times I've tried to change infrun, I've been burn= ed. > > I'm not sure what to do here, > I don't change the value of the global variable "stop_registers" so > if shouldn't affect more than my code, > but it also depends of the side effects of > > regcache_dup (get_current_regcache ()) > which is now triggered 'slightly' before when it used to be ... > > > Kevin> I think that I handle that in the following lines: > > Kevin> + =A0if (except.reason < 0 > > Kevin> + =A0 =A0 =A0|| !self_bpfinish->return_type || !self_bpfinish->f= unction_type) > > > > The problem is that Python errors are sticky. =A0So, if one occurs one > > must either pass it upward (having the current function fail), or clear > > it somehow. =A0It isn't ok to ignore them, call other Python functions, > > and then later check. > > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Remember only non-VOID return ty= pes. =A0*/ > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (TYPE_CODE (ret_type) !=3D TYPE_= CODE_VOID) > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0self_bpfinish->return_type = =3D type_to_type_object (ret_type); > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0self_bpfinish->function_typ= e =3D > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0type_to_type_object= (SYMBOL_TYPE (function)); > > > > As discussed above, you need to check for errors immediately after each > > call, and DTRT. =A0You can ignore them with PyErr_Clear. > > ok, I didn't know this point, so I've rewritten this to > unconditionally clear the Py exception after these two calls, and then > test against NULL as before. > > > Kevin> I think I wrote a word about that in the previous mail, anyway, = my > > Kevin> feeling was that I don't want to abort the FinishBreakpoint crea= tion > > Kevin> just because of a return value not computable, so I currently nu= llify > > Kevin> these fields and silently disable return value computation. I ca= n't > > Kevin> see any straightforward way to notify Python about that, > > Kevin> warning/exceptions won't suite ... otherwise, I could expose the > > Kevin> return_type to the Python interface, this way, one could check t= hat > > Kevin> it's not None and now if GDB will/might be able to compute the r= eturn > > Kevin> value when the FinishBP is hit > > > > Ok, this makes sense to me. > > > > Tom> bpfinishpy_detect_out_scope_cb still acquires the GIL (via > > Tom> ensure_python_env), but should not. > > > > Kevin> I'm not exactly sure what was you concern here, as far as I > > Kevin> understand, the GIL was acquired in bpfinishpy_handle_stop, so it > > Kevin> should have no effect in detect_out_scope_cb. So I've removed it= from > > Kevin> detect_out_scope_cb as it was useless. > > > > I think it is inefficient to recursively acquire the GIL. > > right, the doc doesn't say anything about the efficiency of GIL > acquisition, so let's > assume you're right! > > > Kevin> +@defun FinishBreakpoint.__init__ (@r{[}frame@r{]} @r{[}, intern= al@r{]}) > > Kevin> +Create a finish breakpoint at the return address of the @code{g= db.Frame} > > Kevin> +object @var{frame} (or @code{gdb.selected_frame()} is not provi= ded). > > > > I think it should read something like: > > > > =A0 =A0Create a finish breakpoint at the return address of the @code{gd= b.Frame} > > =A0 =A0object @var{frame}. =A0If @var{frame} is not provided, this defa= ults to > > =A0 =A0the newest frame. > > ok for the sentence construction, > > > I think it is better to default to the newest frame, because the > > selected frame is more of a user-interface thing, and I think code > > wanting this should explicitly use it. > > My thought when I chose to use 'selected_frame' was to match the > behavior of the CLI finish command. When you type it, you finish the > 'selected' frame, and not the newest one. > > In my use-cases, I always have gdb.selected_frame =3D=3D gdb.newest_frame, > so I don't have a strong preference. I've switch the code/doc to > newest_frame. > > > Kevin> +type is @code{VOID} > > > > I think just @code{void} is better. > > sure > > > Kevin> + =A0/* If stop_registers where not saved, use the current regis= ters. =A0*/ > > > > s/where/were/ > > fixed > > > Kevin> + =A0if (cleanup) > > Kevin> + =A0 =A0do_cleanups (cleanup); > > > > This is a gdb anti-pattern. =A0A call to make_cleanup can return NULL in > > some scenarios. > > > > It is better to install a null cleanup and then unconditionally call > > do_cleanups. > > ok, didn't know it either, fixed with the null cleanup > > > Kevin> + =A0/* Default to gdb.selected_frame if necessary. =A0*/ > > Kevin> + =A0if (!frame_obj) > > Kevin> + =A0 =A0frame_obj =3D gdbpy_selected_frame (NULL, NULL); > > > > gdbpy_newest_frame > > > > I don't think there is a decref for the frame_obj along this path. > > I've changed it to: > > =A0if (!frame_obj) > =A0 =A0frame_obj =3D gdbpy_newest_frame (NULL, NULL); > =A0else > =A0 =A0Py_INCREF (frame_obj); > > =A0frame =3D frame_object_to_frame_info (frame_obj); > =A0Py_DECREF (frame_obj); > > which looks clearer to me than setting a flag, or testing the kwargs > for the "frame" keyword > > > Kevin> + =A0 =A0 =A0 =A0 =A0PyErr_SetString (PyExc_ValueError, > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0_("\"FinishBreakpoint\" not meaningful = in the outermost frame.")); > > > > Kevin> + =A0 =A0 =A0 =A0 =A0PyErr_SetString (PyExc_ValueError, > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 _("\"FinishBreakpoint\" ca= nnot be set on a dummy frame.")); > > > > Indentation. > > > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0PyErr_SetString (PyExc_ValueError, > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 _("Invalid ID for the `frame' object.")); > > > > Indentation. > > These 3 lines where right-justified to column 79, I've split them. > > > Kevin> +static void > > Kevin> +bpfinishpy_out_of_scope (struct finish_breakpoint_object *bpfin= ish_obj) > > Kevin> +{ > > [...] > > Kevin> + =A0TRY_CATCH (except, RETURN_MASK_ALL) > > Kevin> + =A0 =A0{ > > Kevin> + =A0 =A0 =A0delete_breakpoint (bpfinish_obj->py_bp.bp); > > Kevin> + =A0 =A0} > > Kevin> + =A0if (except.reason < 0) > > Kevin> + =A0 =A0{ > > Kevin> + =A0 =A0 =A0gdbpy_convert_exception (except); > > Kevin> + =A0 =A0 =A0gdbpy_print_stack (); > > Kevin> + =A0 =A0} > > > > I probably asked you to add this, but if bpfinishpy_out_of_scope can > > only be called in one spot: > > > > Kevin> + =A0 =A0 =A0 =A0 =A0TRY_CATCH (except, RETURN_MASK_ALL) > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0{ > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0if (b->pspace =3D=3D current_inferi= or ()->pspace > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 && (!target_has_registers > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 || frame_find_by_id (b= ->frame_id) =3D=3D NULL)) > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0{ > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bpfinishpy_out_of_scope (finish= _bp); > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0} > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0} > > Kevin> + =A0 =A0 =A0 =A0 =A0if (except.reason < 0) > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0{ > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0gdbpy_convert_exception (except); > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0 =A0gdbpy_print_stack (); > > Kevin> + =A0 =A0 =A0 =A0 =A0 =A0} > > > > ... then the TRY_CATCH in bpfinishpy_out_of_scope is not needed. > > right > > > Kevin> + =A0struct cleanup *cleanup =3D ensure_python_env (target_gdbar= ch, > > Kevin> + =A0 =A0 =A0current_language); > > > > Indentation. > > fixed > > > There is no regression against the current tree (2011-11-18) > > > Thanks, > > Kevin Hello, I noticed a bug in the previous version of the patch, which led to `out_of_scope' callback being triggered when it was not supposed to be (namely, when the breakpoint was hit, the execution continued, and then the callback was triggered before the temporary breakpoint could be deleted. I fixed it by ensuring that the breakpoint is active before triggering the notification: > if (bpfinish_obj->py_bp.bp->enable_state =3D=3D bp_enabled > && PyObject_HasAttrString (py_obj, outofscope_func)) > ... Cordially, Kevin -- 2011-11-30 Kevin Pouget Introduce gdb.FinishBreakpoint in Python * Makefile.in (SUBDIR_PYTHON_OBS): Add py-finishbreakpoint.o. (SUBDIR_PYTHON_SRCS): Add python/py-finishbreakpoint.c. Add build rule for this file. * infcmd.c (print_return_value): Split to create get_return_value. (get_return_value): New function based on print_return_value. Handle case where stop_registers are not set. * inferior.h (get_return_value): New prototype. * python/py-breakpoint.c (bppy_pending_object): Make non-static. (gdbpy_breakpoint_created): Set is_py_finish_bp is necessary. (struct breakpoint_object): Move to python-internal.h (BPPY_REQUIRE_VALID): Likewise. (BPPY_SET_REQUIRE_VALID): Likewise. (gdbpy_breakpoint_created): Initialize is_finish_bp. (gdbpy_should_stop): Add pre/post hooks before/after calling stop method. * python/python-internal.h (breakpoint_object_type): Add as extern. (bppy_pending_object): Likewise. (typedef struct breakpoint_object) Removed. (struct breakpoint_object): Moved from py-breakpoint.c. Add field is_finish_bp. (BPPY_REQUIRE_VALID): Moved from py-breakpoint.c. (BPPY_SET_REQUIRE_VALID): Likewise. (frame_object_to_frame_info): New prototype. (gdbpy_initialize_finishbreakpoints): New prototype. (bpfinishpy_is_finish_bp): Likewise. (bpfinishpy_pre_stop_hook): Likewise. (bpfinishpy_post_stop_hook): Likewise. * python/py-finishbreakpoint.c: New file. * python/py-frame.c(frame_object_to_frame_info): Make non-static and accept PyObject instead of frame_object. (frapy_is_valid): Don't cast to frame_object. (frapy_name): Likewise. (frapy_type): Likewise. (frapy_unwind_stop_reason): Likewise. (frapy_pc): Likewise. (frapy_block): Likewise. (frapy_function): Likewise. (frapy_older): Likewise. (frapy_newer): Likewise. (frapy_find_sal): Likewise. (frapy_read_var): Likewise. (frapy_select): Likewise. * python/python.c (gdbpy_is_stopped_at_finish_bp): New noop function. (_initialize_python): Add gdbpy_initialize_finishbreakpoints. * python/python.h: Include breakpoint.h (gdbpy_is_stopped_at_finish_bp): New prototype. doc/ * gdb.texinfo (Finish Breakpoints in Python): New subsection. (Python API): Add menu entry for Finish Breakpoints. testsuite/ * gdb.python/py-breakpoint.exp (mult_line): Define and use variable instead of line number. * gdb.python/py-finish-breakpoint.c: New file. * gdb.python/py-finish-breakpoint.exp: New file. * gdb.python/py-finish-breakpoint.py: New file. * gdb.python/py-finish-breakpoint2.cc: New file. * gdb.python/py-finish-breakpoint2.exp: New file. * gdb.python/py-finish-breakpoint2.py: New file. --20cf307ca44e1ace5304b2f5dcf6 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Disposition: attachment; filename="0001-Introduce-gdb.FinishBreakpoint.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gvmiwl3t0 Content-length: 75718 RnJvbSAwZTE4YzQ5MTJiMDI2M2Q4ZGIxZWE1NDVlMzVlOWE2Mzc0NGM3NjVk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLZXZpbiBQb3VnZXQg PGtldmluLnBvdWdldEBzdC5jb20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMTEg MTM6NTk6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSAgSW50cm9kdWNlIGdk Yi5GaW5pc2hCcmVha3BvaW50CgotLS0KIGdkYi9NYWtlZmlsZS5pbiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnZGIv TkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDQgKwogZ2RiL2RvYy9nZGIudGV4aW5mbyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUxICsrKwogZ2RiL2luZmNtZC5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM5ICsr LQogZ2RiL2luZmVyaW9yLmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAzICsKIGdkYi9weXRob24vcHktYnJlYWtwb2ludC5j ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0OCArLS0KIGdkYi9weXRo b24vcHktZmluaXNoYnJlYWtwb2ludC5jICAgICAgICAgICAgICAgICAgIHwg IDQ0OCArKysrKysrKysrKysrKysrKysrKwogZ2RiL3B5dGhvbi9weS1mcmFt ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICstCiBn ZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNTAgKystCiBnZGIvcHl0aG9uL3B5dGhvbi5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWJyZWFrcG9pbnQuZXhwICAgICAgICAgfCAgICA3 ICstCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQuYyAgICB8ICAgOTcgKysrKysKIGdkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAgIHwgIDIzMyArKysrKysr KysrCiBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQucHkgICB8ICAgODkgKysrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYyAgfCAgIDU5ICsrKwogZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5l eHAgfCAgIDY1ICsrKwogZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZp bmlzaC1icmVha3BvaW50Mi5weSAgfCAgIDMzICsrCiAxNyBmaWxlcyBjaGFu Z2VkLCAxMjAwIGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdkYi9weXRob24vcHktZmluaXNoYnJlYWtwb2lu dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9p bnQuZXhwCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5CiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50Mi5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlz aC1icmVha3BvaW50Mi5weQoKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5p biBiL2dkYi9NYWtlZmlsZS5pbgppbmRleCA0ODIyMWYyLi43MjRmMjVkIDEw MDY0NAotLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxl LmluCkBAIC0yODcsNiArMjg3LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBc CiAJcHktZXZ0cmVnaXN0cnkubyBcCiAJcHktZXZ0cy5vIFwKIAlweS1leGl0 ZWRldmVudC5vIFwKKwlweS1maW5pc2hicmVha3BvaW50Lm8gXAogCXB5LWZy YW1lLm8gXAogCXB5LWZ1bmN0aW9uLm8gXAogCXB5LWluZmVyaW9yLm8gXApA QCAtMzE4LDYgKzMxOSw3IEBAIFNVQkRJUl9QWVRIT05fU1JDUyA9IFwKIAlw eXRob24vcHktZXZ0cmVnaXN0cnkuYyBcCiAJcHl0aG9uL3B5LWV2dHMuYyBc CiAJcHl0aG9uL3B5LWV4aXRlZGV2ZW50LmMgXAorCXB5dGhvbi9weS1maW5p c2hicmVha3BvaW50LmMgXAogCXB5dGhvbi9weS1mcmFtZS5jIFwKIAlweXRo b24vcHktZnVuY3Rpb24uYyBcCiAJcHl0aG9uL3B5LWluZmVyaW9yLmMgXApA QCAtMjEwOCw2ICsyMTEwLDEwIEBAIHB5LWV4aXRlZGV2ZW50Lm86ICQoc3Jj ZGlyKS9weXRob24vcHktZXhpdGVkZXZlbnQuYwogCSQoQ09NUElMRSkgJChQ WVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWV4aXRlZGV2ZW50 LmMKIAkkKFBPU1RDT01QSUxFKQogCitweS1maW5pc2hicmVha3BvaW50Lm86 ICQoc3JjZGlyKS9weXRob24vcHktZmluaXNoYnJlYWtwb2ludC5jCisJJChD T01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHkt ZmluaXNoYnJlYWtwb2ludC5jCisJJChQT1NUQ09NUElMRSkKKwogcHktZnJh bWUubzogJChzcmNkaXIpL3B5dGhvbi9weS1mcmFtZS5jCiAJJChDT01QSUxF KSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZnJhbWUu YwogCSQoUE9TVENPTVBJTEUpCmRpZmYgLS1naXQgYS9nZGIvTkVXUyBiL2dk Yi9ORVdTCmluZGV4IGYxM2NhZjguLjdiM2Y3ZjIgMTAwNjQ0Ci0tLSBhL2dk Yi9ORVdTCisrKyBiL2dkYi9ORVdTCkBAIC01MSw2ICs1MSwxMCBAQAogICAq KiBUaGUgImdkYi5icmVha3BvaW50IiBmdW5jdGlvbiBoYXMgYmVlbiBkZXBy ZWNhdGVkIGluIGZhdm9yIG9mCiAgICAgICJnZGIuYnJlYWtwb2ludHMiLgog CisgICoqIEEgbmV3IGNsYXNzICJnZGIuRmluaXNoQnJlYWtwb2ludCIgaXMg cHJvdmlkZWQgdG8gY2F0Y2ggdGhlIHJldHVybgorICAgICBvZiBhIGZ1bmN0 aW9uLiAgVGhpcyBjbGFzcyBpcyBiYXNlZCBvbiB0aGUgImZpbmlzaCIgY29t bWFuZAorICAgICBhdmFpbGFibGUgaW4gdGhlIENMSS4gCisKICAgKiogVHlw ZSBvYmplY3RzIGZvciBzdHJ1Y3QgYW5kIHVuaW9uIHR5cGVzIG5vdyBhbGxv dyBhY2Nlc3MgdG8KICAgICAgdGhlIGZpZWxkcyB1c2luZyBzdGFuZGFyZCBQ eXRob24gZGljdGlvbmFyeSAobWFwcGluZykgbWV0aG9kcy4KICAgICAgRm9y IGV4YW1wbGUsICJzb21lX3R5cGVbJ215ZmllbGQnXSIgbm93IHdvcmtzLCBh cyBkb2VzCmRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2Ri L2RvYy9nZGIudGV4aW5mbwppbmRleCAzMzIxYTc3Li5lZWJmMDQ4IDEwMDY0 NAotLS0gYS9nZGIvZG9jL2dkYi50ZXhpbmZvCisrKyBiL2dkYi9kb2MvZ2Ri LnRleGluZm8KQEAgLTIxNTAyLDYgKzIxNTAyLDggQEAgc2l0dWF0aW9uLCBh IFB5dGhvbiBAY29kZXtLZXlib2FyZEludGVycnVwdH0gZXhjZXB0aW9uIGlz IHRocm93bi4KICogU3ltYm9sIFRhYmxlcyBJbiBQeXRob246OiAgICAgUHl0 aG9uIHJlcHJlc2VudGF0aW9uIG9mIHN5bWJvbCB0YWJsZXMuCiAqIExhenkg U3RyaW5ncyBJbiBQeXRob246OiAgICAgIFB5dGhvbiByZXByZXNlbnRhdGlv biBvZiBsYXp5IHN0cmluZ3MuCiAqIEJyZWFrcG9pbnRzIEluIFB5dGhvbjo6 ICAgICAgIE1hbmlwdWxhdGluZyBicmVha3BvaW50cyB1c2luZyBQeXRob24u CisqIEZpbmlzaCBCcmVha3BvaW50cyBpbiBQeXRob246OiBTZXR0aW5nIEJy ZWFrcG9pbnRzIG9uIGZ1bmN0aW9uIHJldHVybgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1c2luZyBQeXRob24uCiBAZW5kIG1lbnUKIAog QG5vZGUgQmFzaWMgUHl0aG9uCkBAIC0yNDMzNiw2ICsyNDMzOCw1NSBAQCBj b21tYW5kcywgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzLiAgSWYgdGhlcmUgYXJl IG5vIGNvbW1hbmRzLCB0aGlzCiBhdHRyaWJ1dGUgaXMgQGNvZGV7Tm9uZX0u ICBUaGlzIGF0dHJpYnV0ZSBpcyBub3Qgd3JpdGFibGUuCiBAZW5kIGRlZnZh cgogCitAbm9kZSBGaW5pc2ggQnJlYWtwb2ludHMgaW4gUHl0aG9uCitAc3Vi c3Vic2VjdGlvbiBGaW5pc2ggQnJlYWtwb2ludHMKKworQGNpbmRleCBweXRo b24gZmluaXNoIGJyZWFrcG9pbnRzCitAdGluZGV4IGdkYi5GaW5pc2hCcmVh a3BvaW50CisKK0EgZmluaXNoIGJyZWFrcG9pbnQgaXMgYSB0ZW1wb3Jhcnkg YnJlYWtwb2ludCBzZXQgYXQgdGhlIHJldHVybiBhZGRyZXNzIG9mCithIGZy YW1lLCBiYXNlZCBvbiB0aGUgQGNvZGV7ZmluaXNofSBjb21tYW5kLiAgQGNv ZGV7Z2RiLkZpbmlzaEJyZWFrcG9pbnR9CitleHRlbmRzIEBjb2Rle2dkYi5C cmVha3BvaW50fS4gIFRoZSB1bmRlcmx5aW5nIGJyZWFrcG9pbnQgd2lsbCBi ZSBkaXNhYmxlZCAKK2FuZCBkZWxldGVkIHdoZW4gdGhlIGV4ZWN1dGlvbiB3 aWxsIHJ1biBvdXQgb2YgdGhlIGJyZWFrcG9pbnQgc2NvcGUgKGkuZS5AOiAK K0Bjb2Rle0JyZWFrcG9pbnQuc3RvcH0gb3IgQGNvZGV7RmluaXNoQnJlYWtw b2ludC5vdXRfb2Zfc2NvcGV9IHRyaWdnZXJlZCkuCisKK0BkZWZ1biBGaW5p c2hCcmVha3BvaW50Ll9faW5pdF9fIChAcntbfWZyYW1lQHJ7XX0gQHJ7W30s IGludGVybmFsQHJ7XX0pCitDcmVhdGUgYSBmaW5pc2ggYnJlYWtwb2ludCBh dCB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIEBjb2Rle2dkYi5GcmFtZX0K K29iamVjdCBAdmFye2ZyYW1lfS4gIElmIEB2YXJ7ZnJhbWV9IGlzIG5vdCBw cm92aWRlZCwgdGhpcyBkZWZhdWx0cyB0byB0aGUKK25ld2VzdCBmcmFtZS4g IFRoZSBvcHRpb25hbCBAdmFye2ludGVybmFsfSBhcmd1bWVudCBhbGxvd3Mg dGhlIGJyZWFrcG9pbnQgdG8KK2JlY29tZSBpbnZpc2libGUgdG8gdGhlIHVz ZXIuICBAeHJlZntCcmVha3BvaW50cyBJbiBQeXRob259LCBmb3IgZnVydGhl ciAKK2RldGFpbHMgYWJvdXQgdGhpcyBhcmd1bWVudC4KK0BlbmQgZGVmdW4K KworQGRlZnVuIEZpbmlzaEJyZWFrcG9pbnQub3V0X29mX3Njb3BlIChzZWxm KQorSW4gc29tZSBjaXJjdW1zdGFuY2VzIChlLmcuQDogQGNvZGV7bG9uZ2pt cH0sIENAdHsrK30gZXhjZXB0aW9ucywgQHZhbHVle0dEQk59IAorQGNvZGV7 cmV0dXJufSBjb21tYW5kLCBAZG90c3t9KSwgYSBmdW5jdGlvbiBtYXkgbm90 IHByb3Blcmx5IHRlcm1pbmF0ZSwgYW5kCit0aHVzIG5ldmVyIGhpdCB0aGUg ZmluaXNoIGJyZWFrcG9pbnQuICBXaGVuIEB2YWx1ZXtHREJOfSBub3RpY2Vz IHN1Y2ggYQorc2l0dWF0aW9uLCB0aGUgQGNvZGV7b3V0X29mX3Njb3BlfSBj YWxsYmFjayB3aWxsIGJlIHRyaWdnZXJlZC4KKworWW91IG1heSB3YW50IHRv IHN1Yi1jbGFzcyBAY29kZXtnZGIuRmluaXNoQnJlYWtwb2ludH0gYW5kIG92 ZXJyaWRlIHRoaXMKK21ldGhvZDoKKworQHNtYWxsZXhhbXBsZQorY2xhc3Mg TXlGaW5pc2hCcmVha3BvaW50IChnZGIuRmluaXNoQnJlYWtwb2ludCkKKyAg ICBkZWYgc3RvcCAoc2VsZik6CisgICAgICAgIHByaW50ICJub3JtYWwgZmlu aXNoIgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIAorICAgIGRlZiBvdXRf b2Zfc2NvcGUgKCk6CisgICAgICAgIHByaW50ICJhYm5vcm1hbCBmaW5pc2gi CitAZW5kIHNtYWxsZXhhbXBsZSAKK0BlbmQgZGVmdW4KKworQGRlZnZhciBG aW5pc2hCcmVha3BvaW50LnJldHVybl92YWx1ZQorV2hlbiBAdmFsdWV7R0RC Tn0gaXMgc3RvcHBlZCBhdCBhIGZpbmlzaCBicmVha3BvaW50IGFuZCB0aGUg ZnJhbWUgCit1c2VkIHRvIGJ1aWxkIHRoZSBAY29kZXtnZGIuRmluaXNoQnJl YWtwb2ludH0gb2JqZWN0IGhhZCBkZWJ1ZyBzeW1ib2xzLCB0aGlzCithdHRy aWJ1dGUgd2lsbCBjb250YWluIGEgQGNvZGV7Z2RiLlZhbHVlfSBvYmplY3Qg Y29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuCit2YWx1ZSBvZiB0aGUgZnVu Y3Rpb24uICBUaGUgdmFsdWUgd2lsbCBiZSBAY29kZXtOb25lfSBpZiB0aGUg ZnVuY3Rpb24gcmV0dXJuIAordHlwZSBpcyBAY29kZXt2b2lkfSBvciBpZiB0 aGUgcmV0dXJuIHZhbHVlIHdhcyBub3QgY29tcHV0YWJsZS4gIFRoaXMgYXR0 cmlidXRlCitpcyBub3Qgd3JpdGFibGUuCitAZW5kIGRlZnZhcgorCiBAbm9k ZSBMYXp5IFN0cmluZ3MgSW4gUHl0aG9uCiBAc3Vic3Vic2VjdGlvbiBQeXRo b24gcmVwcmVzZW50YXRpb24gb2YgbGF6eSBzdHJpbmdzLgogCmRpZmYgLS1n aXQgYS9nZGIvaW5mY21kLmMgYi9nZGIvaW5mY21kLmMKaW5kZXggN2I5MzVm ZS4uNzZhZGRmMCAxMDA2NDQKLS0tIGEvZ2RiL2luZmNtZC5jCisrKyBiL2dk Yi9pbmZjbWQuYwpAQCAtMTQxMywxNiArMTQxMywyNiBAQCBhZHZhbmNlX2Nv bW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQogICB1bnRpbF9icmVh a19jb21tYW5kIChhcmcsIGZyb21fdHR5LCAxKTsKIH0KIAwKLS8qIFByaW50 IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zp bmlzaCcgY29tbWFuZC4gICovCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRo ZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zpbmlz aCcKKyAgIGNvbW1hbmQvQlAuICAqLwogCi1zdGF0aWMgdm9pZAotcHJpbnRf cmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3Qg dHlwZSAqdmFsdWVfdHlwZSkKK3N0cnVjdCB2YWx1ZSAqCitnZXRfcmV0dXJu X3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAq dmFsdWVfdHlwZSkKIHsKLSAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBn ZXRfcmVnY2FjaGVfYXJjaCAoc3RvcF9yZWdpc3RlcnMpOwotICBzdHJ1Y3Qg Y2xlYW51cCAqb2xkX2NoYWluOwotICBzdHJ1Y3QgdWlfc3RyZWFtICpzdGI7 CisgIHN0cnVjdCByZWdjYWNoZSAqc3RvcF9yZWdzID0gc3RvcF9yZWdpc3Rl cnM7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwogICBzdHJ1Y3QgdmFs dWUgKnZhbHVlOwogICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJlbnRf dWlvdXQ7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gbWFrZV9jbGVh bnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworCisgIC8qIElmIHN0b3BfcmVn aXN0ZXJzIHdlcmUgbm90IHNhdmVkLCB1c2UgdGhlIGN1cnJlbnQgcmVnaXN0 ZXJzLiAgKi8KKyAgaWYgKCFzdG9wX3JlZ3MpCisgICAgeworICAgICAgc3Rv cF9yZWdzID0gcmVnY2FjaGVfZHVwIChnZXRfY3VycmVudF9yZWdjYWNoZSAo KSk7CisgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVwX3JlZ2NhY2hlX3hm cmVlIChzdG9wX3JlZ3MpOworICAgIH0KKworICBnZGJhcmNoID0gZ2V0X3Jl Z2NhY2hlX2FyY2ggKHN0b3BfcmVncyk7CiAKICAgQ0hFQ0tfVFlQRURFRiAo dmFsdWVfdHlwZSk7CiAgIGdkYl9hc3NlcnQgKFRZUEVfQ09ERSAodmFsdWVf dHlwZSkgIT0gVFlQRV9DT0RFX1ZPSUQpOwpAQCAtMTQ0MSw3ICsxNDUxLDcg QEAgcHJpbnRfcmV0dXJuX3ZhbHVlIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBl LCBzdHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSkKICAgICBjYXNlIFJFVFVSTl9W QUxVRV9BQklfUkVUVVJOU19BRERSRVNTOgogICAgIGNhc2UgUkVUVVJOX1ZB TFVFX0FCSV9QUkVTRVJWRVNfQUREUkVTUzoKICAgICAgIHZhbHVlID0gYWxs b2NhdGVfdmFsdWUgKHZhbHVlX3R5cGUpOwotICAgICAgZ2RiYXJjaF9yZXR1 cm5fdmFsdWUgKGdkYmFyY2gsIGZ1bmNfdHlwZSwgdmFsdWVfdHlwZSwgc3Rv cF9yZWdpc3RlcnMsCisgICAgICBnZGJhcmNoX3JldHVybl92YWx1ZSAoZ2Ri YXJjaCwgZnVuY190eXBlLCB2YWx1ZV90eXBlLCBzdG9wX3JlZ3MsCiAJCQkg ICAgdmFsdWVfY29udGVudHNfcmF3ICh2YWx1ZSksIE5VTEwpOwogICAgICAg YnJlYWs7CiAgICAgY2FzZSBSRVRVUk5fVkFMVUVfU1RSVUNUX0NPTlZFTlRJ T046CkBAIC0xNDUxLDYgKzE0NjEsMjEgQEAgcHJpbnRfcmV0dXJuX3ZhbHVl IChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlLCBzdHJ1Y3QgdHlwZSAqdmFsdWVf dHlwZSkKICAgICAgIGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5F X18sIF8oImJhZCBzd2l0Y2giKSk7CiAgICAgfQogCisgIGRvX2NsZWFudXBz IChjbGVhbnVwKTsKKworICByZXR1cm4gdmFsdWU7Cit9CisKKy8qIFByaW50 IHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGEgJ2Zp bmlzaCcgY29tbWFuZC4gICovCisKK3N0YXRpYyB2b2lkCitwcmludF9yZXR1 cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5cGUsIHN0cnVjdCB0eXBl ICp2YWx1ZV90eXBlKQoreworICBzdHJ1Y3QgdmFsdWUgKnZhbHVlID0gZ2V0 X3JldHVybl92YWx1ZSAoZnVuY190eXBlLCB2YWx1ZV90eXBlKTsKKyAgc3Ry dWN0IGNsZWFudXAgKm9sZF9jaGFpbjsKKyAgc3RydWN0IHVpX3N0cmVhbSAq c3RiOworICBzdHJ1Y3QgdWlfb3V0ICp1aW91dCA9IGN1cnJlbnRfdWlvdXQ7 CisKICAgaWYgKHZhbHVlKQogICAgIHsKICAgICAgIHN0cnVjdCB2YWx1ZV9w cmludF9vcHRpb25zIG9wdHM7CmRpZmYgLS1naXQgYS9nZGIvaW5mZXJpb3Iu aCBiL2dkYi9pbmZlcmlvci5oCmluZGV4IGNmYWVhN2YuLmYxOTg2OTYgMTAw NjQ0Ci0tLSBhL2dkYi9pbmZlcmlvci5oCisrKyBiL2dkYi9pbmZlcmlvci5o CkBAIC0yNjksNiArMjY5LDkgQEAgZXh0ZXJuIHZvaWQgZGV0YWNoX2NvbW1h bmQgKGNoYXIgKiwgaW50KTsKIAogZXh0ZXJuIHZvaWQgbm90aWNlX25ld19p bmZlcmlvciAocHRpZF90LCBpbnQsIGludCk7CiAKK2V4dGVybiBzdHJ1Y3Qg dmFsdWUgKmdldF9yZXR1cm5fdmFsdWUgKHN0cnVjdCB0eXBlICpmdW5jX3R5 cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdHlwZSAqdmFsdWVfdHlwZSk7CisKIC8qIEFkZHJlc3MgYXQgd2hp Y2ggaW5mZXJpb3Igc3RvcHBlZC4gICovCiAKIGV4dGVybiBDT1JFX0FERFIg c3RvcF9wYzsKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktYnJlYWtwb2lu dC5jIGIvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKaW5kZXggMTFkNjBm ZS4uNjRlZjQ1ZiAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1icmVha3Bv aW50LmMKKysrIGIvZ2RiL3B5dGhvbi9weS1icmVha3BvaW50LmMKQEAgLTMx LDUyICszMSwxNiBAQAogI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKICNpbmNs dWRlICJsYW5ndWFnZS5oIgogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IGJyZWFr cG9pbnRfb2JqZWN0X3R5cGU7Ci0KIC8qIE51bWJlciBvZiBsaXZlIGJyZWFr cG9pbnRzLiAgKi8KIHN0YXRpYyBpbnQgYnBweV9saXZlOwogCiAvKiBWYXJp YWJsZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIEJy ZWFrcG9pbnQKICAgIGNvbnN0cnVjdG9yIGFuZCB0aGUgYnJlYWtwb2ludC1j cmVhdGVkIGhvb2sgZnVuY3Rpb24uICAqLwotc3RhdGljIGJyZWFrcG9pbnRf b2JqZWN0ICpicHB5X3BlbmRpbmdfb2JqZWN0OworYnJlYWtwb2ludF9vYmpl Y3QgKmJwcHlfcGVuZGluZ19vYmplY3Q7CiAKIC8qIEZ1bmN0aW9uIHRoYXQg aXMgY2FsbGVkIHdoZW4gYSBQeXRob24gY29uZGl0aW9uIGlzIGV2YWx1YXRl ZC4gICovCiBzdGF0aWMgY2hhciAqIGNvbnN0IHN0b3BfZnVuYyA9ICJzdG9w IjsKIAotc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Ci17Ci0gIFB5T2JqZWN0 X0hFQUQKLQotICAvKiBUaGUgYnJlYWtwb2ludCBudW1iZXIgYWNjb3JkaW5n IHRvIGdkYi4gICovCi0gIGludCBudW1iZXI7Ci0KLSAgLyogVGhlIGdkYiBi cmVha3BvaW50IG9iamVjdCwgb3IgTlVMTCBpZiB0aGUgYnJlYWtwb2ludCBo YXMgYmVlbgotICAgICBkZWxldGVkLiAgKi8KLSAgc3RydWN0IGJyZWFrcG9p bnQgKmJwOwotfTsKLQotLyogUmVxdWlyZSB0aGF0IEJSRUFLUE9JTlQgYmUg YSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBhIFB5dGhvbgotICAgZXhj ZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICAqLwotI2RlZmluZSBCUFBZX1JF UVVJUkVfVkFMSUQoQnJlYWtwb2ludCkJCQkJCVwKLSAgICBkbyB7CQkJCQkJ CQlcCi0gICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBOVUxMKQkJCQkJ XAotCXJldHVybiBQeUVycl9Gb3JtYXQgKFB5RXhjX1J1bnRpbWVFcnJvciwg ICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkgICAgIF8oIkJyZWFrcG9p bnQgJWQgaXMgaW52YWxpZC4iKSwJCVwKLQkJCSAgICAgKEJyZWFrcG9pbnQp LT5udW1iZXIpOwkJCVwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBSZXF1aXJl IHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQgSUQ7IHRo cm93IGEgUHl0aG9uCi0gICBleGNlcHRpb24gaWYgaXQgaXMgaW52YWxpZC4g IFRoaXMgbWFjcm8gaXMgZm9yIHVzZSBpbiBzZXR0ZXIgZnVuY3Rpb25zLiAg Ki8KLSNkZWZpbmUgQlBQWV9TRVRfUkVRVUlSRV9WQUxJRChCcmVha3BvaW50 KQkJCQlcCi0gICAgZG8gewkJCQkJCQkJXAotICAgICAgaWYgKChCcmVha3Bv aW50KS0+YnAgPT0gTlVMTCkJCQkJCVwKLSAgICAgICAgewkJCQkJCQkJXAot CSAgUHlFcnJfRm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFr cG9pbnQgJWQgaXMgaW52YWxpZC4iKSwgXAotCQkJKEJyZWFrcG9pbnQpLT5u dW1iZXIpOwkJCQlcCi0JICByZXR1cm4gLTE7CQkJCQkJCVwKLQl9CQkJCQkJ CQlcCi0gICAgfSB3aGlsZSAoMCkKLQogLyogVGhpcyBpcyB1c2VkIHRvIGlu aXRpYWxpemUgdmFyaW91cyBnZGIuYnBfKiBjb25zdGFudHMuICAqLwogc3Ry dWN0IHB5YnBfY29kZQogewpAQCAtNzYyLDYgKzcyNiw5IEBAIGdkYnB5X3No b3VsZF9zdG9wIChzdHJ1Y3QgYnJlYWtwb2ludF9vYmplY3QgKmJwX29iaikK ICAgc3RydWN0IGdkYmFyY2ggKmdhcmNoID0gYi0+Z2RiYXJjaCA/IGItPmdk YmFyY2ggOiBnZXRfY3VycmVudF9hcmNoICgpOwogICBzdHJ1Y3QgY2xlYW51 cCAqY2xlYW51cCA9IGVuc3VyZV9weXRob25fZW52IChnYXJjaCwgY3VycmVu dF9sYW5ndWFnZSk7CiAKKyAgaWYgKGJwX29iai0+aXNfZmluaXNoX2JwKQor ICAgIGJwZmluaXNocHlfcHJlX3N0b3BfaG9vayAoYnBfb2JqKTsKKwogICBp ZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAocHlfYnAsIHN0b3BfZnVuYykp CiAgICAgewogICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0Nh bGxNZXRob2QgKHB5X2JwLCBzdG9wX2Z1bmMsIE5VTEwpOwpAQCAtNzgzLDYg Kzc1MCwxMCBAQCBnZGJweV9zaG91bGRfc3RvcCAoc3RydWN0IGJyZWFrcG9p bnRfb2JqZWN0ICpicF9vYmopCiAgICAgICBlbHNlCiAJZ2RicHlfcHJpbnRf c3RhY2sgKCk7CiAgICAgfQorCisgIGlmIChicF9vYmotPmlzX2ZpbmlzaF9i cCkKKyAgICBicGZpbmlzaHB5X3Bvc3Rfc3RvcF9ob29rIChicF9vYmopOwor CiAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKIAogICByZXR1cm4gc3RvcDsK QEAgLTg0NSw2ICs4MTYsNyBAQCBnZGJweV9icmVha3BvaW50X2NyZWF0ZWQg KHN0cnVjdCBicmVha3BvaW50ICpicCkKICAgICAgIG5ld2JwLT5udW1iZXIg PSBicC0+bnVtYmVyOwogICAgICAgbmV3YnAtPmJwID0gYnA7CiAgICAgICBu ZXdicC0+YnAtPnB5X2JwX29iamVjdCA9IG5ld2JwOworICAgICAgbmV3YnAt PmlzX2ZpbmlzaF9icCA9IDA7CiAgICAgICBQeV9JTkNSRUYgKG5ld2JwKTsK ICAgICAgICsrYnBweV9saXZlOwogICAgIH0KQEAgLTEwMDYsNyArOTc4LDcg QEAgc3RhdGljIFB5TWV0aG9kRGVmIGJyZWFrcG9pbnRfb2JqZWN0X21ldGhv ZHNbXSA9CiAgIHsgTlVMTCB9IC8qIFNlbnRpbmVsLiAgKi8KIH07CiAKLXN0 YXRpYyBQeVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZSA9CitQ eVR5cGVPYmplY3QgYnJlYWtwb2ludF9vYmplY3RfdHlwZSA9CiB7CiAgIFB5 T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkKICAgMCwJCQkJICAvKm9iX3NpemUq LwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50 LmMgYi9nZGIvcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGMzNTMyCi0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS1maW5pc2hicmVha3BvaW50LmMK QEAgLTAsMCArMSw0NDggQEAKKy8qIFB5dGhvbiBpbnRlcmZhY2UgdG8gZmlu aXNoIGJyZWFrcG9pbnRzCisKKyAgIENvcHlyaWdodCAoQykgMjAxMSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwor CisKKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJleGNlcHRpb25z LmgiCisjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiCisjaW5jbHVkZSAi YnJlYWtwb2ludC5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAi Z2RidGhyZWFkLmgiCisjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorI2luY2x1 ZGUgImxhbmd1YWdlLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNs dWRlICJpbmZlcmlvci5oIgorCitzdGF0aWMgUHlUeXBlT2JqZWN0IGZpbmlz aF9icmVha3BvaW50X29iamVjdF90eXBlOworCisvKiBGdW5jdGlvbiB0aGF0 IGlzIGNhbGxlZCB3aGVuIGEgUHl0aG9uIGZpbmlzaCBicCBpcyBmb3VuZCBv dXQgb2Ygc2NvcGUuICAqLworc3RhdGljIGNoYXIgKiBjb25zdCBvdXRvZnNj b3BlX2Z1bmMgPSAib3V0X29mX3Njb3BlIjsKKworLyogc3RydWN0IGltcGxl bWVudGluZyB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9pbnQgb2JqZWN0IGJ5IGV4 dGVuZGluZworICAgdGhlIGdkYi5CcmVha3BvaW50IGNsYXNzLiAgKi8KK3N0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QKK3sKKyAgLyogZ2RiLkJy ZWFrcG9pbnQgYmFzZSBjbGFzcy4gICovCisgIGJyZWFrcG9pbnRfb2JqZWN0 IHB5X2JwOworICAvKiBnZGIuVHlwZSBvYmplY3Qgb2YgdGhlIHZhbHVlIHJl dHVybiBieSB0aGUgYnJlYWtwb2ludGVkIGZ1bmN0aW9uLgorICAgICBNYXkg YmUgTlVMTCBpZiBubyBkZWJ1ZyBpbmZvcm1hdGlvbiB3YXMgYXZhaWxhYmxl IG9yIHJldHVybiB0eXBlCisgICAgIHdhcyBWT0lELiAgKi8KKyAgUHlPYmpl Y3QgKnJldHVybl90eXBlOworICAvKiBnZGIuVHlwZSBvYmplY3Qgb2YgdGhl IGZ1bmN0aW9uIGZpbmlzaGVkIGJ5IHRoaXMgYnJlYWtwb2ludC4gIFdpbGwg YmUKKyAgICAgTlVMTCBpZiByZXR1cm5fdHlwZSBpcyBOVUxMLiAgKi8KKyAg UHlPYmplY3QgKmZ1bmN0aW9uX3R5cGU7CisgIC8qIFdoZW4gc3RvcHBlZCBh dCB0aGlzIEZpbmlzaEJyZWFrcG9pbnQsIGdkYi5WYWx1ZSBvYmplY3QgcmV0 dXJuZWQgYnkKKyAgICAgdGhlIGZ1bmN0aW9uOyBQeV9Ob25lIGlmIHRoZSB2 YWx1ZSBpcyBub3QgY29tcHV0YWJsZTsgTlVMTCBpZiBHREIgaXMKKyAgICAg bm90IHN0b3BwZWQgYXQgYSBGaW5pc2hCcmVha3BvaW50LiAgKi8KKyAgUHlP YmplY3QgKnJldHVybl92YWx1ZTsKK307CisKKy8qIFB5dGhvbiBmdW5jdGlv biB0byBnZXQgdGhlICdyZXR1cm5fdmFsdWUnIGF0dHJpYnV0ZSBvZgorICAg RmluaXNoQnJlYWtwb2ludC4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCiti cGZpbmlzaHB5X2dldF9yZXR1cm52YWx1ZSAoUHlPYmplY3QgKnNlbGYsIHZv aWQgKmNsb3N1cmUpCit7CisgIHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9v YmplY3QgKnNlbGZfZmluaXNoYnAgPQorICAgICAgKHN0cnVjdCBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKworICBpZiAoIXNlbGZfZmlu aXNoYnAtPnJldHVybl92YWx1ZSkKKyAgICBQeV9SRVRVUk5fTk9ORTsKKwor ICBQeV9JTkNSRUYgKHNlbGZfZmluaXNoYnAtPnJldHVybl92YWx1ZSk7Cisg IHJldHVybiBzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWU7Cit9CisKKy8q IERlYWxsb2NhdGUgRmluaXNoQnJlYWtwb2ludCBvYmplY3QuICAqLworCitz dGF0aWMgdm9pZAorYnBmaW5pc2hweV9kZWFsbG9jIChQeU9iamVjdCAqc2Vs ZikKK3sKKyAgc3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqc2Vs Zl9icGZpbmlzaCA9CisgICAgICAgIChzdHJ1Y3QgZmluaXNoX2JyZWFrcG9p bnRfb2JqZWN0ICopIHNlbGY7CisKKyAgUHlfWERFQ1JFRiAoc2VsZl9icGZp bmlzaC0+ZnVuY3Rpb25fdHlwZSk7CisgIFB5X1hERUNSRUYgKHNlbGZfYnBm aW5pc2gtPnJldHVybl90eXBlKTsKKyAgUHlfWERFQ1JFRiAoc2VsZl9icGZp bmlzaC0+cmV0dXJuX3ZhbHVlKTsKK30KKworLyogVHJpZ2dlcmVkIHdoZW4g Z2RicHlfc2hvdWxkX3N0b3AgaXMgYWJvdXQgdG8gZXhlY3V0ZSB0aGUgYHN0 b3AnIGNhbGxiYWNrCisgICBvZiB0aGUgZ2RiLkZpbmlzaEJyZWFrcG9pbnQg b2JqZWN0IEJQX09CSi4gIFdpbGwgY29tcHV0ZSBhbmQgY2FjaGUgdGhlCisg ICBgcmV0dXJuX3ZhbHVlJywgaWYgcG9zc2libGUuICAqLworCit2b2lkCiti cGZpbmlzaHB5X3ByZV9zdG9wX2hvb2sgKHN0cnVjdCBicmVha3BvaW50X29i amVjdCAqYnBfb2JqKQoreworICBzdHJ1Y3QgZmluaXNoX2JyZWFrcG9pbnRf b2JqZWN0ICpzZWxmX2ZpbmlzaGJwID0KKyAgICAgICAgKHN0cnVjdCBmaW5p c2hfYnJlYWtwb2ludF9vYmplY3QgKikgYnBfb2JqOworICB2b2xhdGlsZSBz dHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisKKyAgLyogQ2FuIGNvbXB1 dGUgcmV0dXJuX3ZhbHVlIG9ubHkgb25jZS4gICovCisgIGdkYl9hc3NlcnQg KCFzZWxmX2ZpbmlzaGJwLT5yZXR1cm5fdmFsdWUpOworCisgIGlmICghc2Vs Zl9maW5pc2hicC0+cmV0dXJuX3R5cGUpCisgICAgcmV0dXJuOworCisgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAgeworICAg ICAgc3RydWN0IHZhbHVlICpyZXQgPQorICAgICAgICAgIGdldF9yZXR1cm5f dmFsdWUgKHR5cGVfb2JqZWN0X3RvX3R5cGUgKHNlbGZfZmluaXNoYnAtPmZ1 bmN0aW9uX3R5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVfb2JqZWN0X3RvX3R5cGUgKHNlbGZfZmluaXNoYnAtPnJldHVybl90eXBl KSk7CisKKyAgICAgIGlmIChyZXQpCisgICAgICAgIHNlbGZfZmluaXNoYnAt PnJldHVybl92YWx1ZSA9IHZhbHVlX3RvX3ZhbHVlX29iamVjdCAocmV0KTsK KyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIFB5X0lOQ1JFRiAo UHlfTm9uZSk7CisgICAgICAgICAgc2VsZl9maW5pc2hicC0+cmV0dXJuX3Zh bHVlID0gUHlfTm9uZTsKKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGV4Y2Vw dC5yZWFzb24gPCAwKQorICAgIHsKKyAgICAgIGdkYnB5X2NvbnZlcnRfZXhj ZXB0aW9uIChleGNlcHQpOworICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7 CisgICAgfQorfQorCisvKiBUcmlnZ2VyZWQgd2hlbiBnZGJweV9zaG91bGRf c3RvcCBoYXMgdHJpZ2dlcmVkIHRoZSBgc3RvcCcgY2FsbGJhY2sKKyAgIG9m IHRoZSBnZGIuRmluaXNoQnJlYWtwb2ludCBvYmplY3QgQlBfT0JKLiAgKi8K Kwordm9pZAorYnBmaW5pc2hweV9wb3N0X3N0b3BfaG9vayAoc3RydWN0IGJy ZWFrcG9pbnRfb2JqZWN0ICpicF9vYmopCit7CisgIHZvbGF0aWxlIHN0cnVj dCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKworICBUUllfQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIC8qIENhbid0IGRl bGV0ZSBpdCBoZXJlLCBidXQgaXQgd2lsbCBiZSByZW1vdmVkIGF0IHRoZSBu ZXh0IHN0b3AuICAqLworICAgICAgZGlzYWJsZV9icmVha3BvaW50IChicF9v YmotPmJwKTsKKyAgICAgIGdkYl9hc3NlcnQgKGJwX29iai0+YnAtPmRpc3Bv c2l0aW9uID09IGRpc3BfZGVsKTsKKyAgICB9CisgIGlmIChleGNlcHQucmVh c29uIDwgMCkKKyAgICB7CisgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlv biAoZXhjZXB0KTsKKyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOworICAg IH0KK30KKworLyogUHl0aG9uIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBi cmVha3BvaW50LiAgKi8KKworc3RhdGljIGludAorYnBmaW5pc2hweV9pbml0 IChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICpr d2FyZ3MpCit7CisgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyAiZnJh bWUiLCAiaW50ZXJuYWwiLCBOVUxMIH07CisgIHN0cnVjdCBmaW5pc2hfYnJl YWtwb2ludF9vYmplY3QgKnNlbGZfYnBmaW5pc2ggPQorICAgICAgKHN0cnVj dCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QgKikgc2VsZjsKKyAgaW50IHR5 cGUgPSBicF9icmVha3BvaW50OworICBQeU9iamVjdCAqZnJhbWVfb2JqID0g TlVMTDsKKyAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCAqcHJldl9mcmFt ZSA9IE5VTEw7CisgIHN0cnVjdCBmcmFtZV9pZCBmcmFtZV9pZDsKKyAgUHlP YmplY3QgKmludGVybmFsID0gTlVMTDsKKyAgaW50IGludGVybmFsX2JwID0g MDsKKyAgQ09SRV9BRERSIGZpbmlzaF9wYywgcGM7CisgIHZvbGF0aWxlIHN0 cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsKKyAgY2hhciAqYWRkcl9zdHIs IHNtYWxsX2J1ZlsxMDBdOworICBzdHJ1Y3Qgc3ltYm9sICpmdW5jdGlvbjsK KworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyAoYXJncywg a3dhcmdzLCAifE9PIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZnJhbWVfb2JqLCAmaW50ZXJuYWwpKQorICAg IHJldHVybiAtMTsKKworICAvKiBEZWZhdWx0IHRvIGdkYi5uZXdlc3RfZnJh bWUgaWYgbmVjZXNzYXJ5LiAgKi8KKyAgaWYgKCFmcmFtZV9vYmopCisgICAg ZnJhbWVfb2JqID0gZ2RicHlfbmV3ZXN0X2ZyYW1lIChOVUxMLCBOVUxMKTsK KyAgZWxzZQorICAgIFB5X0lOQ1JFRiAoZnJhbWVfb2JqKTsKKworICBmcmFt ZSA9IGZyYW1lX29iamVjdF90b19mcmFtZV9pbmZvIChmcmFtZV9vYmopOwor ICBQeV9ERUNSRUYgKGZyYW1lX29iaik7CisKKyAgaWYgKGZyYW1lID09IE5V TEwpCisgICAgZ290byBpbnZhbGlkX2ZyYW1lOworICAKKyAgVFJZX0NBVENI IChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICBwcmV2 X2ZyYW1lID0gZ2V0X3ByZXZfZnJhbWUgKGZyYW1lKTsKKyAgICAgIGlmIChw cmV2X2ZyYW1lID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBQeUVycl9T ZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsIF8oIlwiRmluaXNoQnJlYWtw b2ludFwiIG5vdCAiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAibWVhbmluZ2Z1bCBpbiB0aGUgb3V0ZXJt b3N0ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJmcmFtZS4iKSk7CisgICAgICAgIH0KKyAgICAgIGVsc2Ug aWYgKGdldF9mcmFtZV90eXBlIChwcmV2X2ZyYW1lKSA9PSBEVU1NWV9GUkFN RSkKKyAgICAgICAgeworICAgICAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlF eGNfVmFsdWVFcnJvciwgXygiXCJGaW5pc2hCcmVha3BvaW50XCIgY2Fubm90 ICJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJiZSBzZXQgb24gYSBkdW1teSBmcmFtZS4iKSk7CisgICAgICAg IH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGZyYW1lX2lk ID0gZ2V0X2ZyYW1lX2lkIChwcmV2X2ZyYW1lKTsKKyAgICAgICAgICBpZiAo ZnJhbWVfaWRfZXEgKGZyYW1lX2lkLCBudWxsX2ZyYW1lX2lkKSkKKyAgICAg ICAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSW52YWxpZCBJRCBmb3Ig dGhlIGBmcmFtZScgb2JqZWN0LiIpKTsKKyAgICAgICAgfQorICAgIH0KKyAg aWYgKGV4Y2VwdC5yZWFzb24gPCAwKQorICAgIHsKKyAgICAgIGdkYnB5X2Nv bnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQgKCkpCisgICAgcmV0 dXJuIC0xOworCisgIGlmIChpbnRlcm5hbCkKKyAgICB7CisgICAgICBpbnRl cm5hbF9icCA9IFB5T2JqZWN0X0lzVHJ1ZSAoaW50ZXJuYWwpOworICAgICAg aWYgKGludGVybmFsX2JwID09IC0xKSAKKyAgICAgICAgeworICAgICAgICAg IFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVmFsdWVFcnJvciwgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBfKCJUaGUgdmFsdWUgb2YgYGludGVybmFs JyBtdXN0IGJlIGEgYm9vbGVhbi4iKSk7CisgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICB9CisgICAgfQorCisgIC8qIEZpbmQgdGhlIGZ1bmN0aW9u IHdlIHdpbGwgcmV0dXJuIGZyb20uICAqLworICBzZWxmX2JwZmluaXNoLT5y ZXR1cm5fdHlwZSA9IE5VTEw7CisgIHNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9u X3R5cGUgPSBOVUxMOworCisgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5f TUFTS19BTEwpCisgICAgeworICAgICAgaWYgKGdldF9mcmFtZV9wY19pZl9h dmFpbGFibGUgKGZyYW1lLCAmcGMpKQorICAgICAgICB7CisgICAgICAgICAg ZnVuY3Rpb24gPSBmaW5kX3BjX2Z1bmN0aW9uIChwYyk7CisgICAgICAgICAg aWYgKGZ1bmN0aW9uICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIHN0cnVjdCB0eXBlICpyZXRfdHlwZSA9CisgICAgICAgICAgICAg ICAgICBUWVBFX1RBUkdFVF9UWVBFIChTWU1CT0xfVFlQRSAoZnVuY3Rpb24p KTsKKworICAgICAgICAgICAgICAvKiBSZW1lbWJlciBvbmx5IG5vbi12b2lk IHJldHVybiB0eXBlcy4gICovCisgICAgICAgICAgICAgIGlmIChUWVBFX0NP REUgKHJldF90eXBlKSAhPSBUWVBFX0NPREVfVk9JRCkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBJZ25vcmUgUHl0aG9uIGVy cm9ycyBhdCB0aGlzIHN0YWdlLiAgKi8KKyAgICAgICAgICAgICAgICAgIHNl bGZfYnBmaW5pc2gtPnJldHVybl90eXBlID0gdHlwZV90b190eXBlX29iamVj dCAocmV0X3R5cGUpOworICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIg KCk7CisgICAgICAgICAgICAgICAgICBzZWxmX2JwZmluaXNoLT5mdW5jdGlv bl90eXBlID0KKyAgICAgICAgICAgICAgICAgICAgICB0eXBlX3RvX3R5cGVf b2JqZWN0IChTWU1CT0xfVFlQRSAoZnVuY3Rpb24pKTsKKyAgICAgICAgICAg ICAgICAgIFB5RXJyX0NsZWFyICgpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgaWYgKGV4Y2VwdC5y ZWFzb24gPCAwCisgICAgICB8fCAhc2VsZl9icGZpbmlzaC0+cmV0dXJuX3R5 cGUgfHwgIXNlbGZfYnBmaW5pc2gtPmZ1bmN0aW9uX3R5cGUpCisgICAgewor ICAgICAgLyogV29uJ3QgYmUgYWJsZSB0byBjb21wdXRlIHJldHVybiB2YWx1 ZS4gICovCisgICAgICBQeV9YREVDUkVGIChzZWxmX2JwZmluaXNoLT5yZXR1 cm5fdHlwZSk7CisgICAgICBQeV9YREVDUkVGIChzZWxmX2JwZmluaXNoLT5m dW5jdGlvbl90eXBlKTsKKworICAgICAgc2VsZl9icGZpbmlzaC0+cmV0dXJu X3R5cGUgPSBOVUxMOworICAgICAgc2VsZl9icGZpbmlzaC0+ZnVuY3Rpb25f dHlwZSA9IE5VTEw7CisgICAgfQorCisgIGJwcHlfcGVuZGluZ19vYmplY3Qg PSAmc2VsZl9icGZpbmlzaC0+cHlfYnA7CisgIGJwcHlfcGVuZGluZ19vYmpl Y3QtPm51bWJlciA9IC0xOworICBicHB5X3BlbmRpbmdfb2JqZWN0LT5icCA9 IE5VTEw7CisKKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FM TCkKKyAgICB7CisgICAgICAvKiBTZXQgYSBicmVha3BvaW50IG9uIHRoZSBy ZXR1cm4gYWRkcmVzcy4gICovCisgICAgICBmaW5pc2hfcGMgPSBnZXRfZnJh bWVfcGMgKHByZXZfZnJhbWUpOworICAgICAgc3ByaW50ZiAoc21hbGxfYnVm LCAiKiVzIiwgaGV4X3N0cmluZyAoZmluaXNoX3BjKSk7CisgICAgICBhZGRy X3N0ciA9IHNtYWxsX2J1ZjsKKworICAgICAgY3JlYXRlX2JyZWFrcG9pbnQg KHB5dGhvbl9nZGJhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFk ZHJfc3RyLCBOVUxMLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAw LAorICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyp0ZW1wX2ZsYWcqLywK KyAgICAgICAgICAgICAgICAgICAgICAgICBicF9icmVha3BvaW50LAorICAg ICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgQVVUT19CT09MRUFOX1RSVUUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgJmJrcHRfYnJlYWtwb2ludF9vcHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgMCwgMSwgaW50ZXJuYWxfYnApOworICAgIH0KKyAgR0RCX1BZ X1NFVF9IQU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworICAKKyAgc2VsZl9i cGZpbmlzaC0+cHlfYnAuYnAtPmZyYW1lX2lkID0gZnJhbWVfaWQ7CisgIHNl bGZfYnBmaW5pc2gtPnB5X2JwLmlzX2ZpbmlzaF9icCA9IDE7CisgIAorICBy ZXR1cm4gMDsKKyAgCisgaW52YWxpZF9mcmFtZToKKyAgUHlFcnJfU2V0U3Ry aW5nIChQeUV4Y19WYWx1ZUVycm9yLCAKKyAgICAgICAgICAgICAgICAgICBf KCJJbnZhbGlkIElEIGZvciB0aGUgYGZyYW1lJyBvYmplY3QuIikpOworICBy ZXR1cm4gLTE7Cit9CisKKy8qIENhbGxlZCB3aGVuIEdEQiBub3RpY2VzIHRo YXQgdGhlIGZpbmlzaCBicmVha3BvaW50IEJQX09CSiBpcyBvdXQgb2YKKyAg IHRoZSBjdXJyZW50IGNhbGxzdGFjay4gIFRyaWdnZXJzIHRoZSBtZXRob2Qg T1VUX09GX1NDT1BFIGlmIGltcGxlbWVudGVkLAorICAgdGhlbiBkZWxldGUg dGhlIGJyZWFrcG9pbnQuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hw eV9vdXRfb2Zfc2NvcGUgKHN0cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmpl Y3QgKmJwZmluaXNoX29iaikKK3sKKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9l eGNlcHRpb24gZXhjZXB0OworICBicmVha3BvaW50X29iamVjdCAqYnBfb2Jq ID0gKGJyZWFrcG9pbnRfb2JqZWN0ICopIGJwZmluaXNoX29iajsKKyAgUHlP YmplY3QgKnB5X29iaiA9IChQeU9iamVjdCAqKSBicF9vYmo7CisKKyAgaWYg KGJwZmluaXNoX29iai0+cHlfYnAuYnAtPmVuYWJsZV9zdGF0ZSA9PSBicF9l bmFibGVkCisgICAgICAmJiBQeU9iamVjdF9IYXNBdHRyU3RyaW5nIChweV9v YmosIG91dG9mc2NvcGVfZnVuYykpCisgICAgeworICAgICAgaWYgKCFQeU9i amVjdF9DYWxsTWV0aG9kIChweV9vYmosIG91dG9mc2NvcGVfZnVuYywgTlVM TCkpCisgICAgICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisgICAgfQor CisgIGRlbGV0ZV9icmVha3BvaW50IChicGZpbmlzaF9vYmotPnB5X2JwLmJw KTsKK30KKworLyogQ2FsbGJhY2sgZm9yIGBicGZpbmlzaHB5X2RldGVjdF9v dXRfc2NvcGUnLiAgVHJpZ2dlcnMgUHl0aG9uJ3MKKyAgIGBCLT5vdXRfb2Zf c2NvcGUnIGZ1bmN0aW9uIGlmIEIgaXMgYSBGaW5pc2hCcmVha3BvaW50IG91 dCBvZiBpdHMgc2NvcGUuICAqLworCitzdGF0aWMgaW50CiticGZpbmlzaHB5 X2RldGVjdF9vdXRfc2NvcGVfY2IgKHN0cnVjdCBicmVha3BvaW50ICpiLCB2 b2lkICphcmdzKQoreworICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlv biBleGNlcHQ7CisgIHN0cnVjdCBicmVha3BvaW50ICpicF9zdG9wcGVkID0g KHN0cnVjdCBicmVha3BvaW50ICopIGFyZ3M7CisgIFB5T2JqZWN0ICpweV9i cCA9IChQeU9iamVjdCAqKSBiLT5weV9icF9vYmplY3Q7CisgIHN0cnVjdCBn ZGJhcmNoICpnYXJjaCA9IGItPmdkYmFyY2ggPyBiLT5nZGJhcmNoIDogZ2V0 X2N1cnJlbnRfYXJjaCAoKTsKKyAgCisgIC8qIFRyaWdnZXIgb3V0X29mX3Nj b3BlIGlmIHRoaXMgaXMgYSBGaW5pc2hCcmVha3BvaW50IGFuZCBpdHMgZnJh bWUgaXMKKyAgICAgbm90IGFueW1vcmUgaW4gdGhlIGN1cnJlbnQgY2FsbHN0 YWNrLiAgKi8KKyAgaWYgKHB5X2JwICE9IE5VTEwgJiYgYi0+cHlfYnBfb2Jq ZWN0LT5pc19maW5pc2hfYnApCisgICAgeworICAgICAgc3RydWN0IGZpbmlz aF9icmVha3BvaW50X29iamVjdCAqZmluaXNoX2JwID0KKyAgICAgICAgICAo c3RydWN0IGZpbmlzaF9icmVha3BvaW50X29iamVjdCAqKSBweV9icDsKKwor ICAgICAgLyogQ2hlY2sgc2NvcGUgaWYgbm90IGN1cnJlbnRseSBzdG9wcGVk IGF0IHRoZSBGaW5pc2hCcmVha3BvaW50LiAgKi8KKyAgICAgIGlmIChiICE9 IGJwX3N0b3BwZWQpCisgICAgICAgIHsKKyAgICAgICAgICBUUllfQ0FUQ0gg KGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBpZiAoYi0+cHNwYWNlID09IGN1cnJlbnRfaW5mZXJpb3Ig KCktPnBzcGFjZQorICAgICAgICAgICAgICAgICAmJiAoIXRhcmdldF9oYXNf cmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICB8fCBmcmFtZV9maW5k X2J5X2lkIChiLT5mcmFtZV9pZCkgPT0gTlVMTCkpCisgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBicGZpbmlzaHB5X291dF9vZl9zY29wZSAo ZmluaXNoX2JwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4 Y2VwdCk7CisgICAgICAgICAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIHJldHVybiAw OworfQorCisvKiBBdHRhY2hlZCB0byBgc3RvcCcgbm90aWZpY2F0aW9ucywg Y2hlY2sgaWYgdGhlIGV4ZWN1dGlvbiBoYXMgcnVuCisgICBvdXQgb2YgdGhl IHNjb3BlIG9mIGFueSBGaW5pc2hCcmVha3BvaW50IGJlZm9yZSBpdCBoYXMg YmVlbiBoaXQuICAqLworCitzdGF0aWMgdm9pZAorYnBmaW5pc2hweV9oYW5k bGVfc3RvcCAoc3RydWN0IGJwc3RhdHMgKmJzLCBpbnQgcHJpbnRfZnJhbWUp Cit7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwID0gZW5zdXJlX3B5dGhv bl9lbnYgKGdldF9jdXJyZW50X2FyY2ggKCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGFuZ3Vh Z2UpOworCisgIGl0ZXJhdGVfb3Zlcl9icmVha3BvaW50cyAoYnBmaW5pc2hw eV9kZXRlY3Rfb3V0X3Njb3BlX2NiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJzID09IE5VTEwgPyBOVUxMIDogYnMtPmJyZWFrcG9pbnRfYXQp OworCisgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKK30KKworLyogQXR0YWNo ZWQgdG8gYGV4aXQnIG5vdGlmaWNhdGlvbnMsIHRyaWdnZXJzIGFsbCB0aGUg bmVjZXNzYXJ5IG91dCBvZgorICAgc2NvcGUgbm90aWZpY2F0aW9ucy4gICov CisKK3N0YXRpYyB2b2lkCiticGZpbmlzaHB5X2hhbmRsZV9leGl0IChzdHJ1 Y3QgaW5mZXJpb3IgKmluZikKK3sKKyAgc3RydWN0IGNsZWFudXAgKmNsZWFu dXAgPSBlbnN1cmVfcHl0aG9uX2VudiAodGFyZ2V0X2dkYmFyY2gsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1 cnJlbnRfbGFuZ3VhZ2UpOworCisgIGl0ZXJhdGVfb3Zlcl9icmVha3BvaW50 cyAoYnBmaW5pc2hweV9kZXRlY3Rfb3V0X3Njb3BlX2NiLCBOVUxMKTsKKwor ICBkb19jbGVhbnVwcyAoY2xlYW51cCk7Cit9CisKKy8qIEluaXRpYWxpemUg dGhlIFB5dGhvbiBmaW5pc2ggYnJlYWtwb2ludCBjb2RlLiAgKi8KKwordm9p ZAorZ2RicHlfaW5pdGlhbGl6ZV9maW5pc2hicmVha3BvaW50cyAodm9pZCkK K3sKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJmZpbmlzaF9icmVha3BvaW50X29i amVjdF90eXBlKSA8IDApCisgICAgICByZXR1cm47CisgIAorICBQeV9JTkNS RUYgKCZmaW5pc2hfYnJlYWtwb2ludF9vYmplY3RfdHlwZSk7CisgIFB5TW9k dWxlX0FkZE9iamVjdCAoZ2RiX21vZHVsZSwgIkZpbmlzaEJyZWFrcG9pbnQi LAorICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSAmZmluaXNo X2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUpOworICAgIAorICBvYnNlcnZlcl9h dHRhY2hfbm9ybWFsX3N0b3AgKGJwZmluaXNocHlfaGFuZGxlX3N0b3ApOwor ICBvYnNlcnZlcl9hdHRhY2hfaW5mZXJpb3JfZXhpdCAoYnBmaW5pc2hweV9o YW5kbGVfZXhpdCk7Cit9CisKK3N0YXRpYyBQeUdldFNldERlZiBmaW5pc2hf YnJlYWtwb2ludF9vYmplY3RfZ2V0c2V0W10gPSB7CisgIHsgInJldHVybl92 YWx1ZSIsIGJwZmluaXNocHlfZ2V0X3JldHVybnZhbHVlLCBOVUxMLAorICAi Z2RiLlZhbHVlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJldHVybiB2YWx1 ZSwgaWYgYW55LiBcCitOb25lIG90aGVyd2lzZS4iLCBOVUxMIH0sCisgICAg eyBOVUxMIH0gIC8qIFNlbnRpbmVsLiAgKi8KK307CisKK3N0YXRpYyBQeVR5 cGVPYmplY3QgZmluaXNoX2JyZWFrcG9pbnRfb2JqZWN0X3R5cGUgPQorewor ICBQeU9iamVjdF9IRUFEX0lOSVQgKE5VTEwpCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLypvYl9zaXplKi8KKyAgImdkYi5GaW5pc2hC cmVha3BvaW50IiwgICAgICAgICAvKnRwX25hbWUqLworICBzaXplb2YgKHN0 cnVjdCBmaW5pc2hfYnJlYWtwb2ludF9vYmplY3QpLCAgLyp0cF9iYXNpY3Np emUqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBf aXRlbXNpemUqLworICBicGZpbmlzaHB5X2RlYWxsb2MsICAgICAgICAgICAg IC8qdHBfZGVhbGxvYyovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyp0cF9wcmludCovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1 ZW5jZSovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0 cF9hc19tYXBwaW5nKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKnRwX2hhc2ggKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKnRwX2NhbGwqLworICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qdHBfc3RyKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvICovCisgIDAsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICBQ eV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0 cF9mbGFncyovCisgICJHREIgZmluaXNoIGJyZWFrcG9pbnQgb2JqZWN0Iiwg LyogdHBfZG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZz ZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9pdGVyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfaXRlcm5leHQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiB0cF9tZXRob2RzICovCisgIDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICBmaW5pc2hfYnJl YWtwb2ludF9vYmplY3RfZ2V0c2V0LC8qIHRwX2dldHNldCAqLworICAmYnJl YWtwb2ludF9vYmplY3RfdHlwZSwgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVz Y3JfZ2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICBicGZpbmlzaHB5X2lu aXQsICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworfTsK ZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktZnJhbWUuYyBiL2dkYi9weXRo b24vcHktZnJhbWUuYwppbmRleCAyMDA2NGNhLi5jMzM0ZjYzIDEwMDY0NAot LS0gYS9nZGIvcHl0aG9uL3B5LWZyYW1lLmMKKysrIGIvZ2RiL3B5dGhvbi9w eS1mcmFtZS5jCkBAIC02MCw5ICs2MCwxMCBAQCBzdGF0aWMgUHlUeXBlT2Jq ZWN0IGZyYW1lX29iamVjdF90eXBlOwogICAgb2JqZWN0LiAgSWYgdGhlIGZy YW1lIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSAodGhlIGZyYW1lIGlkIGRvZXNu J3QKICAgIGNvcnJlc3BvbmQgdG8gYW55IGZyYW1lIGluIHRoZSBpbmZlcmlv ciksIHJldHVybnMgTlVMTC4gICovCiAKLXN0YXRpYyBzdHJ1Y3QgZnJhbWVf aW5mbyAqCi1mcmFtZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAoZnJhbWVfb2Jq ZWN0ICpmcmFtZV9vYmopCitzdHJ1Y3QgZnJhbWVfaW5mbyAqCitmcmFtZV9v YmplY3RfdG9fZnJhbWVfaW5mbyAoUHlPYmplY3QgKm9iaikKIHsKKyAgZnJh bWVfb2JqZWN0ICpmcmFtZV9vYmogPSAoZnJhbWVfb2JqZWN0ICopIG9iajsg IAogICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CiAKICAgZnJhbWUgPSBm cmFtZV9maW5kX2J5X2lkIChmcmFtZV9vYmotPmZyYW1lX2lkKTsKQEAgLTEw Niw3ICsxMDcsNyBAQCBmcmFweV9pc192YWxpZCAoUHlPYmplY3QgKnNlbGYs IFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRV Uk5fTUFTS19BTEwpCiAgICAgewotICAgICAgZnJhbWUgPSBmcmFtZV9vYmpl Y3RfdG9fZnJhbWVfaW5mbyAoKGZyYW1lX29iamVjdCAqKSBzZWxmKTsKKyAg ICAgIGZyYW1lID0gZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKHNlbGYp OwogICAgIH0KICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7 CiAKQEAgLTEzMCw3ICsxMzEsNyBAQCBmcmFweV9uYW1lIChQeU9iamVjdCAq c2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQs IFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJF X1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAg IEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAgICAg ZmluZF9mcmFtZV9mdW5uYW1lIChmcmFtZSwgJm5hbWUsICZsYW5nLCBOVUxM KTsKICAgICB9CkBAIC0xNTksNyArMTYwLDcgQEAgZnJhcHlfdHlwZSAoUHlP YmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAo ZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7 CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAK ICAgICAgIHR5cGUgPSBnZXRfZnJhbWVfdHlwZSAoZnJhbWUpOwogICAgIH0K QEAgLTE4MCw3ICsxODEsNyBAQCBmcmFweV91bndpbmRfc3RvcF9yZWFzb24g KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZS QVBZX1JFUVVJUkVfVkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJh bWUpOworICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUp OwogICAgIH0KICAgR0RCX1BZX0hBTkRMRV9FWENFUFRJT04gKGV4Y2VwdCk7 CiAKQEAgLTIwMSw3ICsyMDIsNyBAQCBmcmFweV9wYyAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHBj ID0gZ2V0X2ZyYW1lX3BjIChmcmFtZSk7CiAgICAgfQpAQCAtMjIyLDcgKzIy Myw3IEBAIGZyYXB5X2Jsb2NrIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3Qg KmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FM TCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEICgoZnJhbWVf b2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAgICAgIEZSQVBZX1JFUVVJUkVf VkFMSUQgKHNlbGYsIGZyYW1lKTsKICAgICAgIGJsb2NrID0gZ2V0X2ZyYW1l X2Jsb2NrIChmcmFtZSwgTlVMTCk7CiAgICAgfQogICBHREJfUFlfSEFORExF X0VYQ0VQVElPTiAoZXhjZXB0KTsKQEAgLTI2Myw3ICsyNjQsNyBAQCBmcmFw eV9mdW5jdGlvbiAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQog CiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCiAgICAg ewotICAgICAgRlJBUFlfUkVRVUlSRV9WQUxJRCAoKGZyYW1lX29iamVjdCAq KSBzZWxmLCBmcmFtZSk7CisgICAgICBGUkFQWV9SRVFVSVJFX1ZBTElEIChz ZWxmLCBmcmFtZSk7CiAKICAgICAgIHN5bSA9IGZpbmRfcGNfZnVuY3Rpb24g KGdldF9mcmFtZV9hZGRyZXNzX2luX2Jsb2NrIChmcmFtZSkpOwogICAgIH0K QEAgLTMzMCw3ICszMzEsNyBAQCBmcmFweV9vbGRlciAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogCiAgIFRSWV9DQVRDSCAoZXhjZXB0LCBS RVRVUk5fTUFTS19BTEwpCiAgICAgewotICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoKGZyYW1lX29iamVjdCAqKSBzZWxmLCBmcmFtZSk7CisgICAgICBG UkFQWV9SRVFVSVJFX1ZBTElEIChzZWxmLCBmcmFtZSk7CiAKICAgICAgIHBy ZXYgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUpOwogICAgICAgaWYgKHByZXYp CkBAIC0zNTksNyArMzYwLDcgQEAgZnJhcHlfbmV3ZXIgKFB5T2JqZWN0ICpz ZWxmLCBQeU9iamVjdCAqYXJncykKIAogICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQogICAgIHsKLSAgICAgIEZSQVBZX1JFUVVJUkVf VkFMSUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworICAgICAg RlJBUFlfUkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAgICAgICBu ZXh0ID0gZ2V0X25leHRfZnJhbWUgKGZyYW1lKTsKICAgICAgIGlmIChuZXh0 KQpAQCAtMzg4LDcgKzM4OSw3IEBAIGZyYXB5X2ZpbmRfc2FsIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAg ICAgZmluZF9mcmFtZV9zYWwgKGZyYW1lLCAmc2FsKTsKICAgICAgIHNhbF9v YmogPSBzeW10YWJfYW5kX2xpbmVfdG9fc2FsX29iamVjdCAoc2FsKTsKQEAg LTQ0NCw3ICs0NDUsNyBAQCBmcmFweV9yZWFkX3ZhciAoUHlPYmplY3QgKnNl bGYsIFB5T2JqZWN0ICphcmdzKQogCiAgICAgICBUUllfQ0FUQ0ggKGV4Y2Vw dCwgUkVUVVJOX01BU0tfQUxMKQogCXsKLQkgIEZSQVBZX1JFUVVJUkVfVkFM SUQgKChmcmFtZV9vYmplY3QgKikgc2VsZiwgZnJhbWUpOworCSAgRlJBUFlf UkVRVUlSRV9WQUxJRCAoc2VsZiwgZnJhbWUpOwogCiAJICBpZiAoIWJsb2Nr KQogCSAgICBibG9jayA9IGdldF9mcmFtZV9ibG9jayAoZnJhbWUsIE5VTEwp OwpAQCAtNDcyLDcgKzQ3Myw3IEBAIGZyYXB5X3JlYWRfdmFyIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEICgoZnJhbWVfb2JqZWN0ICopIHNlbGYsIGZyYW1lKTsKKyAg ICAgIEZSQVBZX1JFUVVJUkVfVkFMSUQgKHNlbGYsIGZyYW1lKTsKIAogICAg ICAgdmFsID0gcmVhZF92YXJfdmFsdWUgKHZhciwgZnJhbWUpOwogICAgIH0K QEAgLTQ4NywxMiArNDg4LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFw eV9zZWxlY3QgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsK ICAgc3RydWN0IGZyYW1lX2luZm8gKmZpOwotICBmcmFtZV9vYmplY3QgKmZy YW1lID0gKGZyYW1lX29iamVjdCAqKSBzZWxmOwogICB2b2xhdGlsZSBzdHJ1 Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CiAKICAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKICAgICB7Ci0gICAgICBGUkFQWV9SRVFV SVJFX1ZBTElEIChmcmFtZSwgZmkpOworICAgICAgRlJBUFlfUkVRVUlSRV9W QUxJRCAoc2VsZiwgZmkpOwogCiAgICAgICBzZWxlY3RfZnJhbWUgKGZpKTsK ICAgICB9CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5h bC5oIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwuaAppbmRleCBlZjM5 ZDVkLi4xYmE3MTMzIDEwMDY0NAotLS0gYS9nZGIvcHl0aG9uL3B5dGhvbi1p bnRlcm5hbC5oCisrKyBiL2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgK QEAgLTEyMCw5ICsxMjAsNTAgQEAgZXh0ZXJuIFB5VHlwZU9iamVjdCBzeW1i b2xfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0IGV2ZW50X29i amVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBldmVudHNfb2JqZWN0 X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0IHN0b3BfZXZlbnRfb2JqZWN0 X3R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0 X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Cit7 CisgIFB5T2JqZWN0X0hFQUQKKworICAvKiBUaGUgYnJlYWtwb2ludCBudW1i ZXIgYWNjb3JkaW5nIHRvIGdkYi4gICovCisgIGludCBudW1iZXI7CisKKyAg LyogVGhlIGdkYiBicmVha3BvaW50IG9iamVjdCwgb3IgTlVMTCBpZiB0aGUg YnJlYWtwb2ludCBoYXMgYmVlbgorICAgICBkZWxldGVkLiAgKi8KKyAgc3Ry dWN0IGJyZWFrcG9pbnQgKmJwOworCisgIC8qIDEgaXMgdGhpcyBpcyBhIEZp bmlzaEJyZWFrcG9pbnQgb2JqZWN0LCAwIG90aGVyd2lzZS4gICovCisgIGlu dCBpc19maW5pc2hfYnA7Cit9IGJyZWFrcG9pbnRfb2JqZWN0OworCisvKiBS ZXF1aXJlIHRoYXQgQlJFQUtQT0lOVCBiZSBhIHZhbGlkIGJyZWFrcG9pbnQg SUQ7IHRocm93IGEgUHl0aG9uCisgICBleGNlcHRpb24gaWYgaXQgaXMgaW52 YWxpZC4gICovCisjZGVmaW5lIEJQUFlfUkVRVUlSRV9WQUxJRChCcmVha3Bv aW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoKEJyZWFrcG9p bnQpLT5icCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQgKFB5RXhj X1J1bnRpbWVFcnJvciwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkJyZWFrcG9pbnQgJWQgaXMg aW52YWxpZC4iKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChCcmVha3BvaW50KS0+bnVtYmVyKTsgICAgICAgICAgICAg ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworLyogUmVxdWlyZSB0aGF0 IEJSRUFLUE9JTlQgYmUgYSB2YWxpZCBicmVha3BvaW50IElEOyB0aHJvdyBh IFB5dGhvbgorICAgZXhjZXB0aW9uIGlmIGl0IGlzIGludmFsaWQuICBUaGlz IG1hY3JvIGlzIGZvciB1c2UgaW4gc2V0dGVyIGZ1bmN0aW9ucy4gICovCisj ZGVmaW5lIEJQUFlfU0VUX1JFUVVJUkVfVkFMSUQoQnJlYWtwb2ludCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICBpZiAoKEJyZWFrcG9pbnQpLT5icCA9PSBO VUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgUHlFcnJf Rm9ybWF0IChQeUV4Y19SdW50aW1lRXJyb3IsIF8oIkJyZWFrcG9pbnQgJWQg aXMgaW52YWxpZC4iKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKEJy ZWFrcG9pbnQpLT5udW1iZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKworLyogVmFy aWFibGVzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBC cmVha3BvaW50CisgICBjb25zdHJ1Y3RvciBhbmQgdGhlIGJyZWFrcG9pbnQt Y3JlYXRlZCBob29rIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiBicmVha3BvaW50 X29iamVjdCAqYnBweV9wZW5kaW5nX29iamVjdDsKIAotLyogRGVmaW5lZCBp biBweS1icmVha3BvaW50LmMgKi8KLXR5cGVkZWYgc3RydWN0IGJyZWFrcG9p bnRfb2JqZWN0IGJyZWFrcG9pbnRfb2JqZWN0OwogCiB0eXBlZGVmIHN0cnVj dAogewpAQCAtMTg4LDYgKzIyOSw3IEBAIHN0cnVjdCB2YWx1ZSAqY29udmVy dF92YWx1ZV9mcm9tX3B5dGhvbiAoUHlPYmplY3QgKm9iaik7CiBzdHJ1Y3Qg dHlwZSAqdHlwZV9vYmplY3RfdG9fdHlwZSAoUHlPYmplY3QgKm9iaik7CiBz dHJ1Y3Qgc3ltdGFiICpzeW10YWJfb2JqZWN0X3RvX3N5bXRhYiAoUHlPYmpl Y3QgKm9iaik7CiBzdHJ1Y3Qgc3ltdGFiX2FuZF9saW5lICpzYWxfb2JqZWN0 X3RvX3N5bXRhYl9hbmRfbGluZSAoUHlPYmplY3QgKm9iaik7CitzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZnJhbWVfb2JqZWN0X3RvX2ZyYW1lX2luZm8gKFB5T2Jq ZWN0ICpmcmFtZV9vYmopOwogCiB2b2lkIGdkYnB5X2luaXRpYWxpemVfYXV0 b19sb2FkICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV92YWx1ZXMg KHZvaWQpOwpAQCAtMjAyLDYgKzI0NCw3IEBAIHZvaWQgZ2RicHlfaW5pdGlh bGl6ZV9mdW5jdGlvbnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXpl X3BzcGFjZSAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfb2JqZmls ZSAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfYnJlYWtwb2ludHMg KHZvaWQpOwordm9pZCBnZGJweV9pbml0aWFsaXplX2ZpbmlzaGJyZWFrcG9p bnRzICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9sYXp5X3N0cmlu ZyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfcGFyYW1ldGVycyAo dm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfdGhyZWFkICh2b2lkKTsK QEAgLTI3NSw2ICszMTgsOSBAQCBQeU9iamVjdCAqZ2RicHlfZ2V0X3Zhcm9i al9wcmV0dHlfcHJpbnRlciAoc3RydWN0IHZhbHVlICp2YWx1ZSk7CiBjaGFy ICpnZGJweV9nZXRfZGlzcGxheV9oaW50IChQeU9iamVjdCAqcHJpbnRlcik7 CiBQeU9iamVjdCAqZ2RicHlfZGVmYXVsdF92aXN1YWxpemVyIChQeU9iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwogCit2b2lkIGJwZmluaXNocHlf cHJlX3N0b3BfaG9vayAoc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0ICpicF9v YmopOwordm9pZCBicGZpbmlzaHB5X3Bvc3Rfc3RvcF9ob29rIChzdHJ1Y3Qg YnJlYWtwb2ludF9vYmplY3QgKmJwX29iaik7CisKIGV4dGVybiBQeU9iamVj dCAqZ2RicHlfZG9jX2NzdDsKIGV4dGVybiBQeU9iamVjdCAqZ2RicHlfY2hp bGRyZW5fY3N0OwogZXh0ZXJuIFB5T2JqZWN0ICpnZGJweV90b19zdHJpbmdf Y3N0OwpkaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9weXRob24uYyBiL2dkYi9w eXRob24vcHl0aG9uLmMKaW5kZXggNjAyMjU3Mi4uMmY4ZjgyOCAxMDA2NDQK LS0tIGEvZ2RiL3B5dGhvbi9weXRob24uYworKysgYi9nZGIvcHl0aG9uL3B5 dGhvbi5jCkBAIC0xMjQ3LDYgKzEyNDcsNyBAQCBFbmFibGVzIG9yIGRpc2Fi bGVzIHByaW50aW5nIG9mIFB5dGhvbiBzdGFjayB0cmFjZXMuIiksCiAgIGdk YnB5X2luaXRpYWxpemVfcHNwYWNlICgpOwogICBnZGJweV9pbml0aWFsaXpl X29iamZpbGUgKCk7CiAgIGdkYnB5X2luaXRpYWxpemVfYnJlYWtwb2ludHMg KCk7CisgIGdkYnB5X2luaXRpYWxpemVfZmluaXNoYnJlYWtwb2ludHMgKCk7 CiAgIGdkYnB5X2luaXRpYWxpemVfbGF6eV9zdHJpbmcgKCk7CiAgIGdkYnB5 X2luaXRpYWxpemVfdGhyZWFkICgpOwogICBnZGJweV9pbml0aWFsaXplX2lu ZmVyaW9yICgpOwpkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWJyZWFrcG9pbnQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWJyZWFrcG9pbnQuZXhwCmluZGV4IGUwZGQwODcuLjBlM2FkYmQg MTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1icmVh a3BvaW50LmV4cAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt YnJlYWtwb2ludC5leHAKQEAgLTQ0LDcgKzQ0LDggQEAgZ2RiX3B5X3Rlc3Rf c2lsZW50X2NtZCAicHl0aG9uIGJsaXN0ID0gZ2RiLmJyZWFrcG9pbnRzKCki ICJHZXQgQnJlYWtwb2ludCBMaXN0IgogZ2RiX3Rlc3QgInB5dGhvbiBwcmlu dCBibGlzdFxbMFxdIiAiPGdkYi5CcmVha3BvaW50IG9iamVjdCBhdCAkaGV4 PiIgIkNoZWNrIG9iaiBleGlzdHMiCiBnZGJfdGVzdCAicHl0aG9uIHByaW50 IGJsaXN0XFswXF0ubG9jYXRpb24iICJtYWluLiIgIkNoZWNrIGJyZWFrcG9p bnQgbG9jYXRpb24iCiAKLWdkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVf bnVtYmVyICJCcmVhayBhdCBtdWx0aXBseS4iXQorc2V0IG11bHRfbGluZSBb Z2RiX2dldF9saW5lX251bWJlciAiQnJlYWsgYXQgbXVsdGlwbHkuIl0KK2dk Yl9icmVha3BvaW50ICR7bXVsdF9saW5lfQogZ2RiX2NvbnRpbnVlX3RvX2Jy ZWFrcG9pbnQgIkJyZWFrIGF0IG11bHRpcGx5LiIKIAogIyBDaGVjayB0aGF0 IHRoZSBQeXRob24gYnJlYWtwb2ludCBjb2RlIG5vdGVkIHRoZSBhZGRpdGlv biBvZiBhCkBAIC01NCw3ICs1NSw5IEBAIGdkYl90ZXN0ICJweXRob24gcHJp bnQgbGVuKGJsaXN0KSIgIjIiICJDaGVjayBmb3IgdHdvIGJyZWFrcG9pbnRz IgogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMFxdIiAiPGdkYi5C cmVha3BvaW50IG9iamVjdCBhdCAkaGV4PiIgIkNoZWNrIG9iaiBleGlzdHMi CiBnZGJfdGVzdCAicHl0aG9uIHByaW50IGJsaXN0XFswXF0ubG9jYXRpb24i ICJtYWluLiIgIkNoZWNrIGJyZWFrcG9pbnQgbG9jYXRpb24iCiBnZGJfdGVz dCAicHl0aG9uIHByaW50IGJsaXN0XFsxXF0iICI8Z2RiLkJyZWFrcG9pbnQg b2JqZWN0IGF0ICRoZXg+IiAiQ2hlY2sgb2JqIGV4aXN0cyIKLWdkYl90ZXN0 ICJweXRob24gcHJpbnQgYmxpc3RcWzFcXS5sb2NhdGlvbiIgInB5LWJyZWFr cG9pbnRcLmM6NDEqIiAiQ2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKKwor Z2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlzdFxbMVxdLmxvY2F0aW9uIiAi cHktYnJlYWtwb2ludFwuYzoke211bHRfbGluZX0qIiBcCisgICAgICAgICAi Q2hlY2sgYnJlYWtwb2ludCBsb2NhdGlvbiIKIAogIyBDaGVjayBoaXQgYW5k IGlnbm9yZSBjb3VudHMuIAogZ2RiX3Rlc3QgInB5dGhvbiBwcmludCBibGlz dFxbMVxdLmhpdF9jb3VudCIgIjEiICJDaGVjayBicmVha3BvaW50IGhpdCBj b3VudCIKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1maW5pc2gtYnJlYWtwb2ludC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uN2NkYmVhZAotLS0gL2Rldi9udWxsCisrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2lu dC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFy dCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAy MDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSAgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgPHNldGptcC5oPgor I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitp bnQgaW5jcmVhc2VfMSAoaW50ICphKQoreworICAqYSArPSAxOworICByZXR1 cm4gLTU7Cit9CisKK3ZvaWQgaW5jcmVhc2UgKGludCAqYSkKK3sKKyAgaW5j cmVhc2VfMSAoYSk7Cit9CisKK2ludAordGVzdF8xIChpbnQgaSwgaW50IGop Cit7CisgIHJldHVybiBpID09IGo7Cit9CisKK2ludAordGVzdCAoaW50IGks IGludCBqKQoreworICByZXR1cm4gdGVzdF8xIChpLCBqKTsKK30KKworaW50 CitjYWxsX2xvbmdqbXBfMSAoam1wX2J1ZiAqYnVmKQoreworICBsb25nam1w ICgqYnVmLCAxKTsKK30KKworaW50CitjYWxsX2xvbmdqbXAgKGptcF9idWYg KmJ1ZikKK3sKKyAgY2FsbF9sb25nam1wXzEgKGJ1Zik7Cit9CisKK3ZvaWQK K3Rlc3RfZXhlY19leGl0IChpbnQgZG9fZXhpdCkKK3sKKyAgaWYgKGRvX2V4 aXQpCisgICAgZXhpdCAoMCk7CisgIGVsc2UKKyAgICBleGVjbCAoIi9iaW4v ZWNobyIsICJlY2hvIiwgIi0xIiwgKGNoYXIgKikwKTsKK30KKworaW50IG1h aW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGptcF9idWYgZW52 OworICBpbnQgZm9vID0gNTsKKyAgaW50IGJhciA9IDQyOworICBpbnQgaSwg ajsKKworICBnZXRwaWQgKCk7CisKKyAgaSA9IDA7CisgIC8qIEJyZWFrIGF0 IGluY3JlYXNlLiAgKi8KKyAgaW5jcmVhc2UgKCZpKTsKKyAgaW5jcmVhc2Ug KCZpKTsKKyAgaW5jcmVhc2UgKCZpKTsKKworICBmb3IgKGkgPSAwOyBpIDwg MTA7IGkrKykKKyAgICB7CisgICAgICBqICs9IDE7IC8qIENvbmRpdGlvbiBC cmVhay4gICovCisgICAgfQorCisgIGlmIChzZXRqbXAgKGVudikgPT0gMCkg LyogbG9uZ2ptcCBjYXVnaHQgKi8KKyAgICB7CisgICAgICBjYWxsX2xvbmdq bXAgKCZlbnYpOworICAgIH0KKyAgZWxzZQorICAgIGogKz0gMTsgLyogYWZ0 ZXIgbG9uZ2ptcC4gICovCisKKyAgdGVzdF9leGVjX2V4aXQgKDEpOworCisg IHJldHVybiBqOyAvKiBCcmVhayBhdCBlbmQuICAqLworfQpkaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3Bv aW50LmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gt YnJlYWtwb2ludC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNTdkY2UxYgotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludC5leHAKQEAgLTAs MCArMSwyMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBU aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRl c3RzIHRoZSBtZWNoYW5pc20KKyMgZXhwb3NpbmcgdmFsdWVzIHRvIFB5dGhv bi4KKworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7CisgICAgc3RyYWNlICR0cmFj ZWxldmVsCit9CisKK2xvYWRfbGliIGdkYi1weXRob24uZXhwCisKK3NldCB0 ZXN0ZmlsZSAicHktZmluaXNoLWJyZWFrcG9pbnQiCitzZXQgc3JjZmlsZSAk e3Rlc3RmaWxlfS5jCisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0 ZXN0ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAg IHJldHVybiAtMQorfQorCitzZXQgcmVtb3RlX3B5dGhvbl9maWxlIFtyZW1v dGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZp bGV9LnB5XQorCisKKyMgU2tpcCBhbGwgdGVzdHMgaWYgUHl0aG9uIHNjcmlw dGluZyBpcyBub3QgZW5hYmxlZC4KK2lmIHsgW3NraXBfcHl0aG9uX3Rlc3Rz XSB9IHsgY29udGludWUgfQorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2lu dCBpbiBub3JtYWwgY29uZGl0aW9ucworIworCitjbGVhbl9yZXN0YXJ0ICR7 dGVzdGZpbGV9CisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFp bCAiQ2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorZ2Ri X3Rlc3Rfbm9fb3V0cHV0ICJzZXQgY29uZmlybSBvZmYiICJkaXNhYmxlIGNv bmZpcm1hdGlvbiIKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25f ZmlsZSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAg ImltcG9ydCBweXRob24gc2NyaXB0cyIKK2dkYl9icmVha3BvaW50ICJpbmNy ZWFzZV8xIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJlYWtwb2ludCAuKmF0 LioiICJjb250aW51ZSB0byB0aGUgZnVuY3Rpb24gdG8gZmluaXNoIgorCisj IHNldCBGaW5pc2hCcmVha3BvaW50CisKK2dkYl90ZXN0ICJweXRob24gZmlu aXNoYnBfZGVmYXVsdCA9IGdkYi5GaW5pc2hCcmVha3BvaW50ICgpIiBcCisg ICAgICAgICAiVGVtcG9yYXJ5IGJyZWFrcG9pbnQuKiIgInNldCBGaW5pc2hC cmVha3BvaW50IHdpdGggZGVmYXVsdCBmcmFtZSB2YWx1ZSIKK2dkYl90ZXN0 ICJweXRob24gZmluaXNoYnAgPSBNeUZpbmlzaEJyZWFrcG9pbnQgKGdkYi5w YXJzZV9hbmRfZXZhbCAoJ2EnKSwgZ2RiLm5ld2VzdF9mcmFtZSAoKSkiIFwK KyAgICAgICAgICJUZW1wb3JhcnkgYnJlYWtwb2ludC4qIiAic2V0IEZpbmlz aEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJw LnJldHVybl92YWx1ZSIgIk5vbmUuKiIgXAorICAgICAgICAgImNoZWNrIHJl dHVybl92YWx1ZSBhdCBpbml0IgorCisjIGNoZWNrIG5vcm1hbCBicCBoaXQK KworZ2RiX3Rlc3QgImNvbnRpbnVlIiAiTXlGaW5pc2hCcmVha3BvaW50IHN0 b3Agd2l0aC4qcmV0dXJuX3ZhbHVlIGlzOiAtNS4qIzAuKmluY3JlYXNlLioi IFwKKyAgICAgICAgICJjaGVjayBNeUZpbmlzaEJyZWFrcG9pbnQgaGl0Igor Z2RiX3Rlc3QgInB5dGhvbiBwcmludCBmaW5pc2hicC5yZXR1cm5fdmFsdWUi ICItNS4qIiAiY2hlY2sgcmV0dXJuX3ZhbHVlIgorCitnZGJfdGVzdCAicHl0 aG9uIHByaW50IGZpbmlzaGJwX2RlZmF1bHQuaGl0X2NvdW50IiAiMS4qIiAi Y2hlY2sgZmluaXNoQlAgb24gZGVmYXVsdCBmcmFtZSBoYXMgYmVlbiBoaXQi CitnZGJfdGVzdCAicHl0aG9uIHByaW50IGZpbmlzaGJwLmlzX3ZhbGlkKCki ICJGYWxzZS4qIlwKKyAgICAgICAgICJlbnN1cmUgdGhhdCBmaW5pc2ggYnAg aXMgaW52YWxpZCBhZmVyIG5vcm1hbCBoaXQiCisKKyMgY2hlY2sgRmluaXNo QnJlYWtwb2ludCBpbiBtYWluIG5vIGFsbG93ZWQKKworZ2RiX3Rlc3QgImZp bmlzaCIgIm1haW4uKiIgInJldHVybiB0byBtYWluKCkiCitnZGJfdGVzdCAi cHl0aG9uIE15RmluaXNoQnJlYWtwb2ludCAoTm9uZSwgZ2RiLnNlbGVjdGVk X2ZyYW1lICgpKSIgXAorICAgICAgICAgIlZhbHVlRXJyb3I6IFwiRmluaXNo QnJlYWtwb2ludFwiIG5vdCBtZWFuaW5nZnVsIGluIHRoZSBvdXRlcm1vc3Qg ZnJhbWUuLioiIFwKKyAgICAgICAgICJjaGVjayBGaW5pc2hCUCBub3QgYWxs b3dlZCBpbiBtYWluIgorCisjCisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCB3 aXRoIG5vIGRlYnVnIHN5bWJvbCAKKyMKKworY2xlYW5fcmVzdGFydCAke3Rl c3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2Zp bGUiICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJp bXBvcnQgcHl0aG9uIHNjcmlwdHMiCitzZXQgY29uZF9saW5lIFtnZGJfZ2V0 X2xpbmVfbnVtYmVyICJDb25kaXRpb24gQnJlYWsuIl0KKworaWYgIVtydW50 byAiZ2V0cGlkIl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBn ZXRwaWQuIgorICAgIHJldHVybiAwCit9CisKK2dkYl90ZXN0ICJweXRob24g ZmluaXNoQlAgPSBTaW1wbGVGaW5pc2hCcmVha3BvaW50KGdkYi5uZXdlc3Rf ZnJhbWUoKSkiIFwKKyAgICAgICAgICJTaW1wbGVGaW5pc2hCcmVha3BvaW50 IGluaXQiIFwKKyAgICAgICAgICJzZXQgZmluaXNoIGJyZWFrcG9pbnQiCitn ZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0 b3AuKiIgImNoZWNrIEZpbmlzaEJyZWFrcG9pbnQgaGl0IgorZ2RiX3Rlc3Qg InB5dGhvbiBwcmludCBmaW5pc2hCUC5yZXR1cm5fdmFsdWUiICJOb25lIiAi Y2hlY2sgcmV0dXJuIHZhbHVlIHdpdGhvdXQgZGVidWcgc3ltYm9sIgorCisj CisjIFRlc3QgRmluaXNoQnJlYWtwb2ludCBpbiBmdW5jdGlvbiByZXR1cm5l ZCBieSBsb25nam1wIAorIworCitjbGVhbl9yZXN0YXJ0ICR7dGVzdGZpbGV9 CisKK2dkYl90ZXN0ICJzb3VyY2UgJHJlbW90ZV9weXRob25fZmlsZSIgIlB5 dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBw eXRob24gc2NyaXB0cyIKKworaWYgIVtydW50byBjYWxsX2xvbmdqbXBfMV0g dGhlbiB7CisgICAgcGVycm9yICJjb3VsZG4ndCBydW4gdG8gYnJlYWtwb2lu dCBjYWxsX2xvbmdqbXAiCisgICAgY29udGludWUKK30KKworZ2RiX3Rlc3Qg InB5dGhvbiBmaW5pc2hicCA9IFNpbXBsZUZpbmlzaEJyZWFrcG9pbnQoZ2Ri Lm5ld2VzdF9mcmFtZSgpKSIgXAorICAgICAgICAgIlNpbXBsZUZpbmlzaEJy ZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAgInNldCBmaW5pc2ggYnJlYWtw b2ludCIgCitnZGJfdGVzdCAiYnJlYWsgW2dkYl9nZXRfbGluZV9udW1iZXIg ImFmdGVyIGxvbmdqbXAuIl0iICJCcmVha3BvaW50LiogYXQgLioiIFwKKyAg ICAgICAgICJzZXQgQlAgYWZ0ZXIgdGhlIGp1bXAiCitnZGJfdGVzdCAiY29u dGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZS4q IiBcCisgICAgICAgICAiY2hlY2sgRmluaXNoQlAgb3V0IG9mIHNjb3BlIG5v dGlmaWNhdGlvbiIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZmluaXNoYnAu aXNfdmFsaWQoKSIgIkZhbHNlLioiXAorICAgICAgICAgImVuc3VyZSB0aGF0 IGZpbmlzaCBicCBpcyBpbnZhbGlkIGFmZXIgb3V0IG9mIHNjb3BlIG5vdGlm aWNhdGlvbiIKKworIworIyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgaW4gQlAg Y29uZGl0aW9uIGV2YWx1YXRpb24gCisjIChmaW5pc2ggaW4gZHVtbXkgZnJh bWUpCisjCisKK2NsZWFuX3Jlc3RhcnQgJHt0ZXN0ZmlsZX0KKworZ2RiX3Rl c3QgInNvdXJjZSAkcmVtb3RlX3B5dGhvbl9maWxlIiAiUHl0aG9uIHNjcmlw dCBpbXBvcnRlZC4qIiBcCisgICAgICAgICAiaW1wb3J0IHB5dGhvbiBzY3Jp cHRzIgorCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAi Q2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorICAgICAg ICAgCitnZGJfdGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9IGlmIHRlc3RfMShp LDgpIiAiQnJlYWtwb2ludCAuKiBhdCAuKiIgXAorICAgICAgICAgInNldCBh IGNvbmRpdGlvbmFsIEJQIgorZ2RiX3Rlc3QgInB5dGhvbiBUZXN0QnJlYWtw b2ludCgpIiAiVGVzdEJyZWFrcG9pbnQgaW5pdCIgXAorICAgICAgICAgInNl dCBGaW5pc2hCUCBpbiBhIGJyZWFrcG9pbnQgY29uZGl0aW9uIgorZ2RiX3Rl c3QgImNvbnRpbnVlIiBcCisgICAgICAgICAiXCJGaW5pc2hCcmVha3BvaW50 XCIgY2Fubm90IGJlIHNldCBvbiBhIGR1bW15IGZyYW1lLioiIFwKKyAgICAg ICAgICJkb24ndCBhbGxvdyBGaW5pc2hCcmVha3BvaW50IG9uIGR1bW15IGZy YW1lcyIKK2dkYl90ZXN0ICJwcmludCBpIiAiOCIgImNoZWNrIHN0b3BwZWQg bG9jYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IGluIEJQ IGNvbmRpdGlvbiBldmFsdWF0aW9uIAorIyAoZmluaXNoIGluIG5vcm1hbCBm cmFtZSkKKyMKKworY2xlYW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJf dGVzdCAic291cmNlICRyZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2Ny aXB0IGltcG9ydGVkLioiIFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNj cmlwdHMiCisKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAi Q2Fubm90IHJ1biB0byBtYWluLiIKKyAgICByZXR1cm4gMAorfQorCitnZGJf dGVzdCAiYnJlYWsgJHtjb25kX2xpbmV9IGlmIHRlc3QoaSw4KSIgXAorICAg ICAgICAgIkJyZWFrcG9pbnQgLiogYXQgLioiICJzZXQgY29uZGl0aW9uYWwg QlAiCitnZGJfdGVzdCAicHl0aG9uIFRlc3RCcmVha3BvaW50KCkiICJUZXN0 QnJlYWtwb2ludCBpbml0IiAic2V0IEJQIGluIGNvbmRpdGlvbiIKKworZ2Ri X3Rlc3QgImNvbnRpbnVlIiBcCisgICAgICAgICAidGVzdCBkb24ndCBzdG9w OiAxLip0ZXN0IGRvbid0IHN0b3A6IDIuKnRlc3Qgc3RvcC4qRXJyb3IgaW4g dGVzdGluZyBicmVha3BvaW50IGNvbmRpdGlvbi4qVGhlIHByb2dyYW0gYmVp bmcgZGVidWdnZWQgc3RvcHBlZCB3aGlsZSBpbiBhIGZ1bmN0aW9uIGNhbGxl ZCBmcm9tIEdEQi4qIiBcCisgICAgICAgICAic3RvcCBpbiBjb25kaXRpb24g ZnVuY3Rpb24iCisKK2dkYl90ZXN0ICJjb250aW51ZSIgIkNvbnRpbnVpbmcu KiIgImZpbmlzaCBjb25kaXRpb24gZXZhbHVhdGlvbiIKK2dkYl90ZXN0ICJj b250aW51ZSIgIkJyZWFrcG9pbnQuKiIgInN0b3AgYXQgY29uZGl0aW9uYWwg YnJlYWtwb2ludCIKK2dkYl90ZXN0ICJwcmludCBpIiAiOCIgImNoZWNrIHN0 b3BwZWQgbG9jYXRpb24iCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50 IGluIGV4cGxpY2l0IGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwKKyMKKworY2xl YW5fcmVzdGFydCAke3Rlc3RmaWxlfQorCitnZGJfdGVzdCAic291cmNlICRy ZW1vdGVfcHl0aG9uX2ZpbGUiICJQeXRob24gc2NyaXB0IGltcG9ydGVkLioi IFwKKyAgICAgICAgICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCisKK2lmICFb cnVudG9fbWFpbl0gdGhlbiB7CisgICAgZmFpbCAiQ2Fubm90IHJ1biB0byBt YWluLiIKKyAgICByZXR1cm4gMAorfQorCisjIHJldHVybiBhZGRyZXNzIGlu IGR1bW15IGZyYW1lCisKK2dkYl90ZXN0ICJweXRob24gVGVzdEV4cGxpY2l0 QnJlYWtwb2ludCgnaW5jcmVhc2VfMScpIiAiQnJlYWtwb2ludC4qYXQuKiIg XAorICAgICAgICAgInByZXBhcmUgVGVzdEV4cGxpY2l0QnJlYWtwb2ludCIK K2dkYl90ZXN0ICJwcmludCBpbmNyZWFzZV8xKCZpKSIgXAorICAgICAgICAg IlwiRmluaXNoQnJlYWtwb2ludFwiIGNhbm5vdCBiZSBzZXQgb24gYSBkdW1t eSBmcmFtZS4qIiBcCisgICAgICAgICAiZG9uJ3QgYWxsb3cgRmluaXNoQnJl YWtwb2ludCBvbiBkdW1teSBmcmFtZXMiCisKKyMgcmV0dXJuIGFkZHJlc3Mg aW4gbm9ybWFsIGZyYW1lCisKK2RlbGV0ZV9icmVha3BvaW50cworZ2RiX3Rl c3QgInB5dGhvbiBUZXN0RXhwbGljaXRCcmVha3BvaW50KFwiaW5jcmVhc2Vf MVwiKSIgIkJyZWFrcG9pbnQuKmF0LioiIFwKKyAgICAgICAgICJwcmVwYXJl IFRlc3RFeHBsaWNpdEJyZWFrcG9pbnQiCitnZGJfdGVzdCAicHJpbnQgaW5j cmVhc2UoJmkpIiBcCisgICAgICAgICAiU2ltcGxlRmluaXNoQnJlYWtwb2lu dCBpbml0LipTaW1wbGVGaW5pc2hCcmVha3BvaW50IHN0b3AuKlRoZSBwcm9n cmFtIGJlaW5nIGRlYnVnZ2VkIHN0b3BwZWQgd2hpbGUgaW4gYSBmdW5jdGlv biBjYWxsZWQgZnJvbSBHREIuKiIgXAorICAgICAgICAgIkZpbmlzaEJQIHN0 b3AgYXQgZHVyaW5nIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwiCisKKworIwor IyBUZXN0IEZpbmlzaEJyZWFrcG9pbnQgd2hlbiBpbmZlcmlvciBleGl0cwor IworCitpZiAhW3J1bnRvICJ0ZXN0X2V4ZWNfZXhpdCJdIHRoZW4geworICAg IGZhaWwgIkNhbm5vdCBydW4gdG8gdGVzdF9leGVjX2V4aXQuIgorICAgIHJl dHVybiAwCit9CisKK2dkYl90ZXN0ICJweXRob24gU2ltcGxlRmluaXNoQnJl YWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkpIiAiU2ltcGxlRmluaXNoQnJl YWtwb2ludCBpbml0IiAic2V0IEZpbmlzaEJQIGFmdGVyIHRoZSBleGl0KCki CitnZGJfdGVzdCAiY29udGludWUiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50 IG91dCBvZiBzY29wZS4qIiAiY2F0Y2ggb3V0IG9mIHNjb3BlIGFmdGVyIGV4 aXQiCisKKyMKKyMgVGVzdCBGaW5pc2hCcmVha3BvaW50IHdoZW4gaW5mZXJp b3IgZXhlY3MKKyMKKworaWYgIVtydW50byAidGVzdF9leGVjX2V4aXQiXSB0 aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIHRlc3RfZXhlY19leGl0 LiIKKyAgICByZXR1cm4gMAorfSAgICAgCisKK2dkYl90ZXN0X25vX291dHB1 dCAic2V0IHZhciBkb19leGl0ID0gMCIgInN3aXRjaCB0byBleGVjdmUoKSB0 ZXN0IgorZ2RiX3Rlc3QgInB5dGhvbiBTaW1wbGVGaW5pc2hCcmVha3BvaW50 KGdkYi5uZXdlc3RfZnJhbWUoKSkiICJTaW1wbGVGaW5pc2hCcmVha3BvaW50 IGluaXQiICJzZXQgRmluaXNoQlAgYWZ0ZXIgdGhlIGV4ZWMiCitnZGJfdGVz dCAiY2F0Y2ggZXhlYyIgIkNhdGNocG9pbnQuKlwoZXhlY1wpLioiICJjYXRj aCBleGVjIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiU2ltcGxlRmluaXNoQnJl YWtwb2ludCBvdXQgb2Ygc2NvcGUuKiIgImNhdGNoIG91dCBvZiBzY29wZSBh ZnRlciBleGVjIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludC5weSBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5p c2gtYnJlYWtwb2ludC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5kZWEyYTczCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50LnB5CkBAIC0w LDAgKzEsODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVz dHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4KKwkJCitjbGFzcyBN eUZpbmlzaEJyZWFrcG9pbnQgKGdkYi5GaW5pc2hCcmVha3BvaW50KToKKwlk ZWYgX19pbml0X18oc2VsZiwgdmFsLCBmcmFtZSk6CisJCWdkYi5GaW5pc2hC cmVha3BvaW50Ll9faW5pdF9fIChzZWxmLCBmcmFtZSkKKwkJcHJpbnQgIk15 RmluaXNoQnJlYWtwb2ludCBpbml0IgorCQlzZWxmLnZhbCA9IHZhbAorCQkK KwlkZWYgc3RvcChzZWxmKToKKwkJcHJpbnQgIk15RmluaXNoQnJlYWtwb2lu dCBzdG9wIHdpdGggJWQiICUgaW50IChzZWxmLnZhbC5kZXJlZmVyZW5jZSAo KSkKKwkJcHJpbnQgInJldHVybl92YWx1ZSBpczogJWQiICUgaW50IChzZWxm LnJldHVybl92YWx1ZSkKKwkJZ2RiLmV4ZWN1dGUgKCJ3aGVyZSAxIikKKwkJ cmV0dXJuIFRydWUKKwkKKwlkZWYgb3V0X29mX3Njb3BlKHNlbGYpOgorCQlw cmludCAiTXlGaW5pc2hCcmVha3BvaW50IG91dCBvZiBzY29wZSIKKworY2xh c3MgVGVzdEJyZWFrcG9pbnQoZ2RiLkJyZWFrcG9pbnQpOgorICAgIGRlZiBf X2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkJyZWFrcG9pbnQuX19pbml0 X18gKHNlbGYsIHNwZWM9InRlc3RfMSIsIGludGVybmFsPTEpCisgICAgICAg IHNlbGYuc2lsZW50ID0gVHJ1ZQorICAgICAgICBzZWxmLmNvdW50ID0gMAor ICAgICAgICBwcmludCAiVGVzdEJyZWFrcG9pbnQgaW5pdCIKKyAgICAgICAg CisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgCXNlbGYuY291bnQgKz0gMQor ICAgIAl0cnk6CisgICAgICAgIAlUZXN0RmluaXNoQnJlYWtwb2ludCAoZ2Ri Lm5ld2VzdF9mcmFtZSAoKSwgc2VsZi5jb3VudCkKKyAgICAgICAgZXhjZXB0 IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgCXByaW50IGUKKyAgICAgICAg cmV0dXJuIEZhbHNlCisKK2NsYXNzIFRlc3RGaW5pc2hCcmVha3BvaW50IChn ZGIuRmluaXNoQnJlYWtwb2ludCk6CisgICAgZGVmIF9faW5pdF9fIChzZWxm LCBmcmFtZSwgY291bnQpOgorICAgIAlzZWxmLmNvdW50ID0gY291bnQKKyAg ICAgICAgZ2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZy YW1lLCBpbnRlcm5hbD0xKQorICAgICAgICAKKyAgICAgICAgCisgICAgZGVm IHN0b3Aoc2VsZik6CisgICAgICAgIHByaW50ICItLT4iLCBzZWxmLm51bWJl cgorICAgICAgICBpZiAoc2VsZi5jb3VudCA9PSAzKToKKyAgICAgICAgICAg IHByaW50ICJ0ZXN0IHN0b3A6ICVkIiAlIHNlbGYuY291bnQKKyAgICAgICAg ICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBw cmludCAidGVzdCBkb24ndCBzdG9wOiAlZCIgJSBzZWxmLmNvdW50CisgICAg ICAgICAgICByZXR1cm4gRmFsc2UgCisgICAgICAgIAorICAgIAorICAgIGRl ZiBvdXRfb2Zfc2NvcGUoc2VsZik6CisgICAgICAgIHByaW50ICJ0ZXN0IGRp ZG4ndCBmaW5pc2g6ICVkIiAlIHNlbGYuY291bnQKKworY2xhc3MgVGVzdEV4 cGxpY2l0QnJlYWtwb2ludChnZGIuQnJlYWtwb2ludCk6CisJZGVmIHN0b3Ao c2VsZik6CisJCXRyeToKKwkJCVNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgKGdk Yi5uZXdlc3RfZnJhbWUgKCkpCisJCWV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6 CisJCQlwcmludCBlCisJCXJldHVybiBGYWxzZQorCitjbGFzcyBTaW1wbGVG aW5pc2hCcmVha3BvaW50KGdkYi5GaW5pc2hCcmVha3BvaW50KToKKwlkZWYg X19pbml0X18oc2VsZiwgZnJhbWUpOgorCQlnZGIuRmluaXNoQnJlYWtwb2lu dC5fX2luaXRfXyAoc2VsZiwgZnJhbWUpCisJCQorCQlwcmludCAiU2ltcGxl RmluaXNoQnJlYWtwb2ludCBpbml0IgorCQkKKwlkZWYgc3RvcChzZWxmKToK KwkJcHJpbnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgc3RvcCIgCisJCXJl dHVybiBUcnVlCisJCisJZGVmIG91dF9vZl9zY29wZShzZWxmKToKKwkJcHJp bnQgIlNpbXBsZUZpbmlzaEJyZWFrcG9pbnQgb3V0IG9mIHNjb3BlIgorCitw cmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZGQiCmRpZmYgLS1naXQgYS9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQy LmNjIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZpbmlzaC1icmVh a3BvaW50Mi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5hMGVlYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWZpbmlzaC1icmVha3BvaW50Mi5jYwpAQCAtMCwwICsx LDU5IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUg R05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyovCisKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCit2b2lkCit0aHJv d19leGNlcHRpb25fMSAoaW50IGUpCit7CisgIHRocm93IG5ldyBpbnQgKGUp OworfQorCit2b2lkCit0aHJvd19leGNlcHRpb24gKGludCBlKQoreworICB0 aHJvd19leGNlcHRpb25fMSAoZSk7Cit9CisKK2ludAorbWFpbiAodm9pZCkK K3sKKyAgaW50IGk7CisgIHRyeQorICAgIHsKKyAgICAgIHRocm93X2V4Y2Vw dGlvbl8xICgxMCk7CisgICAgfQorICBjYXRjaCAoY29uc3QgaW50ICplKQor ICAgIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJFeGNlcHRpb24gIyIgPDwg KmUgPDwgc3RkOjplbmRsOworICAgIH0KKyAgaSArPSAxOyAvKiBCcmVhayBh ZnRlciBleGNlcHRpb24gMS4gICovCisKKyAgdHJ5CisgICAgeworICAgICAg dGhyb3dfZXhjZXB0aW9uICgxMCk7CisgICAgfQorICBjYXRjaCAoY29uc3Qg aW50ICplKQorICAgIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJFeGNlcHRp b24gIyIgPDwgKmUgPDwgc3RkOjplbmRsOworICAgIH0KKyAgaSArPSAxOyAv KiBCcmVhayBhZnRlciBleGNlcHRpb24gMi4gICovCisKKyAgcmV0dXJuIGk7 Cit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt ZmluaXNoLWJyZWFrcG9pbnQyLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1maW5pc2gtYnJlYWtwb2ludDIuZXhwCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTc5OGMKLS0tIC9kZXYvbnVsbAor KysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFr cG9pbnQyLmV4cApAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoQykg MjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0 ZXN0c3VpdGUuICBJdCB0ZXN0cyB0aGUgbWVjaGFuaXNtCisjIGV4cG9zaW5n IHZhbHVlcyB0byBQeXRob24uCisKK2lmICR0cmFjZWxldmVsIHRoZW4gewor ICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitsb2FkX2xpYiBnZGItcHl0 aG9uLmV4cAorCitzZXQgdGVzdGZpbGUgInB5LWZpbmlzaC1icmVha3BvaW50 MiIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmNjCitzZXQgYmluZmlsZSAk e29iamRpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9CitzZXQgcHlmaWxlICAk e3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5CisKKyMgU3RhcnQg d2l0aCBhIGZyZXNoIGdkYi4KK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9y ZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHti aW5maWxlfQorCitpZiB7IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9LyR7c3Vi ZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSB7ZGVi dWcgYysrfV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQgIkNvdWxkbid0IGNv bXBpbGUgJHtzcmNmaWxlfSIKKyAgICByZXR1cm4gLTEKK30KKworaWYgIVty dW50b19tYWluXSB0aGVuIHsKKyAgICBmYWlsICJDYW5ub3QgcnVuIHRvIG1h aW4uIgorICAgIHJldHVybiAwCit9CisKKyMKKyMgQ2hlY2sgRmluaXNoQnJl YWtwb2ludHMgYWdhaW5zdCBDKysgZXhjZXB0aW9ucworIworCitnZGJfYnJl YWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiQnJlYWsgYWZ0ZXIgZXhj ZXB0aW9uIDIiXQorCitnZGJfdGVzdCAic291cmNlICRweWZpbGUiICIuKlB5 dGhvbiBzY3JpcHQgaW1wb3J0ZWQuKiIgXAorICAgICAgICAgImltcG9ydCBw eXRob24gc2NyaXB0cyIKKyAgICAgICAgIAorZ2RiX2JyZWFrcG9pbnQgInRo cm93X2V4Y2VwdGlvbl8xIgorZ2RiX3Rlc3QgImNvbnRpbnVlIiAiQnJlYWtw b2ludCAuKnRocm93X2V4Y2VwdGlvbl8xLioiICJydW4gdG8gZXhjZXB0aW9u IDEiCisKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgbGVuKGdkYi5icmVha3Bv aW50cygpKSIgIjMiICJjaGVjayBCUCBjb3VudCIKK2dkYl90ZXN0ICJweXRo b24gRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1l KCkpIiAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IiAic2V0IEZp bmlzaEJQIGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJfdGVzdCAiY29udGlu dWUiICIuKnN0b3BwZWQgYXQgRXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludC4q IiAiY2hlY2sgRmluaXNoQnJlYWtwb2ludCBpbiBjYXRjaCgpIgorZ2RiX3Rl c3QgInB5dGhvbiBwcmludCBsZW4oZ2RiLmJyZWFrcG9pbnRzKCkpIiAiMyIg ImNoZWNrIGZpbmlzaCBCUCByZW1vdmFsIgorCitnZGJfdGVzdCAiY29udGlu dWUiICIuKkJyZWFrcG9pbnQuKiB0aHJvd19leGNlcHRpb25fMS4qIiAiY29u dGludWUgdG8gc2Vjb25kIGV4Y2VwdGlvbiIKK2dkYl90ZXN0ICJweXRob24g RXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIubmV3ZXN0X2ZyYW1lKCkp IiAiaW5pdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IiAic2V0IEZpbmlz aEJQIGFmdGVyIHRoZSBleGNlcHRpb24iCitnZGJfdGVzdCAiY29udGludWUi ICIuKmV4Y2VwdGlvbiBkaWQgbm90IGZpbmlzaC4qIiAiRmluaXNoQnJlYWtw b2ludCB3aXRoIGV4Y2VwdGlvbiB0aHJvd24gbm90IGNhdWdodCIKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1maW5pc2gtYnJl YWtwb2ludDIucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZmlu aXNoLWJyZWFrcG9pbnQyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjBmYjY5NTUKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZmluaXNoLWJyZWFrcG9pbnQyLnB5CkBA IC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisj IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQg dGVzdHMgcHl0aG9uIEZpbmlzaAorIyBCcmVha3BvaW50cy4KKworY2xhc3Mg RXhjZXB0aW9uRmluaXNoQnJlYWtwb2ludChnZGIuRmluaXNoQnJlYWtwb2lu dCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAg Z2RiLkZpbmlzaEJyZWFrcG9pbnQuX19pbml0X18gKHNlbGYsIGZyYW1lLCBp bnRlcm5hbD0xKQorICAgICAgICBzZWxmLnNpbGVudCA9IFRydWU7CisgICAg ICAgIHByaW50ICJpbml0IEV4Y2VwdGlvbkZpbmlzaEJyZWFrcG9pbnQiCisg ICAgICAgIAorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwcmludCAi c3RvcHBlZCBhdCBFeGNlcHRpb25GaW5pc2hCcmVha3BvaW50IgorICAgICAg ICByZXR1cm4gVHJ1ZSAKKyAgICAKKyAgICBkZWYgb3V0X29mX3Njb3BlKHNl bGYpOgorICAgICAgICBwcmludCAiZXhjZXB0aW9uIGRpZCBub3QgZmluaXNo IC4uLiIKKworCitwcmludCAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIKLS0g CjEuNy42LjQKCg== --20cf307ca44e1ace5304b2f5dcf6--