From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21150 invoked by alias); 30 Mar 2015 19:49:28 -0000 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 Received: (qmail 19240 invoked by uid 89); 30 Mar 2015 19:49:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ie0-f174.google.com Received: from mail-ie0-f174.google.com (HELO mail-ie0-f174.google.com) (209.85.223.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 30 Mar 2015 19:49:20 +0000 Received: by iedfl3 with SMTP id fl3so8339ied.1 for ; Mon, 30 Mar 2015 12:49:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=68LzUDkFIrkrRABwqsXJIIn5yqTwHEmqrcokBc/x1c0=; b=lSnflg7qzL2o7d/Iza0o4LRjg05aHvY7V+7TN7GnCqu0Dn2j6MjkFfueQsEkmVNMPh 8QaJTq7Z/lYckWZ9XSwhAjnoYo8opRsy7anfFumSuqgdWx4MMNxx0d/CfBoVQgUlRbW+ /Mgwbu4sWuITV1+BBBX6hXan2yeONmpWddpDbqSSd/EWxxaP1BaTyiZHlDD+keVlBXV/ JgBpsCT7uLhGi8sMHHSNxQ9hvpeqv6cqJCMnjbMOz7HSiJohhUHCMdG3BGVfrULzmtt5 oq3/6Th3lBkzgMl2vFN6jULV+nVevB4G1Rwef6SoEU2WyByrH75SRw+w3U8CqoKhGDV6 +vMQ== X-Gm-Message-State: ALoCoQlYcHixja42rVlphiVy5hcQZ6AowitbwcwVjQhBtv0UBkdFSKBlKbwV1Wp5/SbGrHmbaIx6 MIME-Version: 1.0 X-Received: by 10.107.170.87 with SMTP id t84mr10709924ioe.2.1427744958233; Mon, 30 Mar 2015 12:49:18 -0700 (PDT) Received: by 10.64.98.103 with HTTP; Mon, 30 Mar 2015 12:49:17 -0700 (PDT) In-Reply-To: <21785.35758.416843.730797@ruffy2.mtv.corp.google.com> References: <21714.40641.510825.30998@ruffy2.mtv.corp.google.com> <54E71694.1080304@redhat.com> <87ioei31uj.fsf@igalia.com> <87d24p19tt.fsf@igalia.com> <54FD7DAA.7010603@redhat.com> <87twxrncld.fsf@igalia.com> <87ioe1dvu2.fsf@igalia.com> <87sid4atms.fsf@igalia.com> <87r3smado6.fsf@igalia.com> <21776.28787.615626.171251@ruffy2.mtv.corp.google.com> <21781.55769.949230.79805@ruffy2.mtv.corp.google.com> <21785.35758.416843.730797@ruffy2.mtv.corp.google.com> Date: Mon, 30 Mar 2015 19:49:00 -0000 Message-ID: Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python From: Alexander Smundak To: Doug Evans Cc: Andy Wingo , gdb-patches Content-Type: multipart/mixed; boundary=001a11415cc813c557051286c717 X-SW-Source: 2015-03/txt/msg01014.txt.bz2 --001a11415cc813c557051286c717 Content-Type: text/plain; charset=UTF-8 Content-length: 10574 Fixed documentation and added '_gdb.' prefix to 'objfiles()'. PTAL. On Mon, Mar 30, 2015 at 10:45 AM, Doug Evans wrote: > Alexander Smundak writes: > > Addressed eliz@ and dje@ comments. > > > > gdb/ChangeLog > > > > 2015-03-28 Sasha Smundak > > > > * Makefile.in (SUBDIR_PYTHON_OBJS): Add py-unwind.o. > > (SUBDIR_PYTHON_SRCS): Add py-unwind.c. > > (py-unwind.o): New recipe. > > * NEWS: mention Python frame unwinding. > > * data-directory/Makefile.in (PYTHON_FILE_LIST): Add > > gdb/unwinder.py and gdb/command/unwinder.py > > * doc/python.texi (Writing a Frame Unwinder in Python): Add > > section. > > * python/lib/gdb/__init__.py (packages): Add frame_unwinders > > list. > > (execute_unwinders): New function. > > * python/lib/gdb/command/unwinders.py: New file. > > * python/lib/gdb/unwinder.py: New file. > > * python/py-objfile.c (objfile_object): Add frame_unwinders field. > > (objfpy_dealloc): Decrement frame_unwinders reference count. > > (objfpy_initialize): Create frame_unwinders list. > > (objfpy_get_frame_unwinders): New function. > > (objfpy_set_frame_unwinders): Ditto. > > (objfile_getset): Add frame_unwinders attribute to Objfile. > > * python/py-progspace.c (pspace_object): Add frame_unwinders field. > > (pspy_dealloc): Decrement frame_unwinders reference count. > > (pspy_initialize): Create frame_unwinders list. > > (pspy_get_frame_unwinders): New function. > > (pspy_set_frame_unwinders): Ditto. > > (pspy_getset): Add frame_unwinders attribute to gdb.Progspace. > > * python/py-unwind.c: New file. > > * python/python-internal.h (pspy_get_name_unwinders): New prototype. > > (objpy_get_frame_unwinders): New prototype. > > (gdbpy_initialize_unwind): New prototype. > > * python/python.c (gdbpy_apply_type_printers): Call > > gdbpy_initialize_unwind. > > > > gdb/testsuite/ChangeLog > > > > 2015-03-28 Sasha Smundak > > > > * gdb.python/py-unwind-maint.c: New file. > > * gdb.python/py-unwind-maint.exp: New test. > > * gdb.python/py-unwind-maint.py: New file. > > * gdb.python/py-unwind.c: New file. > > * gdb.python/py-unwind.exp: New test. > > * gdb.python/py-unwind.py: New test. > > Hi. Just a few more nits. > > > diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi > > index d725eb0..6b1878e 100644 > > --- a/gdb/doc/python.texi > > +++ b/gdb/doc/python.texi > > @@ -144,6 +144,7 @@ optional arguments while skipping others. Example: > > * Frame Filter API:: Filtering Frames. > > * Frame Decorator API:: Decorating Frames. > > * Writing a Frame Filter:: Writing a Frame Filter. > > +* Unwinding Frames in Python:: Writing frame unwinder. > > * Xmethods In Python:: Adding and replacing methods of C++ classes. > > * Xmethod API:: Xmethod types. > > * Writing an Xmethod:: Writing an xmethod. > > @@ -2178,6 +2179,148 @@ printed hierarchically. Another approach would be to combine the > > marker in the inlined frame, and also show the hierarchical > > relationship. > > > > +@node Unwinding Frames in Python > > +@subsubsection Unwinding Frames in Python > > +@cindex unwinding frames in Python > > + > > +In @value{GDBN} terminology ``unwinding'' is the process of finding > > +the previous frame (that is, caller's) from the current one. An > > +unwinder has three methods. The first one checks if it can handle > > +given frame (``sniff'' it). For the frames it can sniff an unwinder > > +provides two additional methods: it can return frame's ID, and it can > > +fetch registers from the previous frame. A running @value{GDBN} > > +mantains a list of the unwinders and calls each unwinder's sniffer in > > +turn until it finds the one that recognizes the current frame. There > > +is an API to register an unwinder. > > + > > +The unwinders that come with @value{GDBN} handle standard frames. > > +However, mixed language applications (for example, an application > > +running Java Virtual Machine) sometimes use frame layouts that cannot > > +be handled by the @value{GDBN} unwinders. You can write Python code > > +that can handle such custom frames. > > + > > +You implement a frame unwinder in Python as a class with which has two > > +attributes, @code{name} and @code{enabled}, with obvious meanings, and > > +a single method @code{__call__}, which examines a given frame and > > +returns an object (an instance of @code{gdb.UnwindInfo class)} > > +describing it. If an unwinder does not recognize a frame, it should > > +return @code{None}. The code in @value{GDBN} that enables writing > > +unwinders in Python uses this object to return frame's ID and previous > > +frame registers when @value{GDBN} core asks for them. > > + > > +@subheading Unwinder Input > > + > > +An object passed to an unwinder (a @code{gdb.PendingFrame} instance) > > +provides a method to read frame's registers: > > + > > +@defun PendingFrame.read_register (reg) > > +This method returns the contents of the register @var{regn} in the > > +frame as a @code{gdb.Value} object. @var{reg} can be either a > > +register number or a register name; the values are platform-specific. > > +They are usually found in the corresponding > > +@file{@var{platform}-tdep.h} file in the @value{GDBN} source tree. > > +@end defun > > + > > +It also provides a factory method to create a @code{gdb.UnwindInfo} > > +instance to be returned to @value{GDBN}: > > + > > +@defun PendingFrame.create_unwind_info (frame_id) > > +Returns a new @code{gdb.UnwindInfo} instance identified by given > > +@var{frame_id}. The argument is used to build @value{GDBN}'s frame ID > > +using one of functions provided by @value{GDBN}. @var{frame_id}'s attributes > > +determine which function will be used, as follows: > > + > > +@table @code > > +@item sp, pc, special > > +@code{frame_id_build_special (@var{frame_id}.sp, @var{frame_id}.pc, @var{frame_id}.special)} > > + > > +@item sp, pc > > +@code{frame_id_build (@var{frame_id}.sp, @var{frame_id}.pc)} > > + > > +This is the most common case. > > + > > +@item sp > > +@code{frame_id_build_wild (@var{frame_id}.sp)} > > +@end table > > +The attribute values should be @code{gdb.Value} > > + > > +@end defun > > + > > +@subheading Unwinder Output: UnwindInfo > > + > > +A @code{gdb.UnwindInfo} object can be constructed by one of the > > +methods described above. Use the following method to set the caller > > I'd replace "can be constructed by one of the methods describe above." with > "is constructed with the @code{PendingFrame.create_unwind_info} > method described above." > > > +frame's registers: > > + > > +@defun gdb.UnwindInfo.add_saved_register (reg, value) > > +@var{reg} identifies the register. It can be a number or a name, just > > +as for the @code{PendingFrame.read_register} method above. > > +@var{value} is a register value (a @code{gdb.Value} object). > > +@end defun > > + > > +@subheading Unwinder Skeleton Code > > + > > +@value{GDBN} comes with the module containing the base @code{Unwinder} > > +class. Derive your unwinder class from it and structure the code as > > +follows: > > + > > +@smallexample > > +from gdb.unwinders import Unwinder > > + > > +class FrameId(object): > > + def __init__(self, sp, pc): > > + self.sp = sp > > + self.pc = pc > > + > > + > > +class MyUnwinder(Unwinder): > > + def __init__(....): > > + supe(MyUnwinder, self).__init___() > > + > > + def __call__(pending_frame): > > + if not : > > + return None > > + # Create UnwindInfo. Usually the frame is identified by the stack > > + # pointer and the program counter. > > + sp = pending_frame.read_register() > > + pc = pending_frame.read_register() > > + unwind_info = pending_frame.create_unwind_info(FrameId(sp, pc)) > > + > > + # Find the values of the registers in the caller's frame and > > + # save them in the result: > > + unwind_info.add_saved_register(, ) > > + .... > > + > > + # Return the result: > > + return unwind_instance > > s/unwind_instance/unwind_info/ > > > diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py > > index 92b06f2..0494959 100644 > > --- a/gdb/python/lib/gdb/__init__.py > > +++ b/gdb/python/lib/gdb/__init__.py > > @@ -71,6 +71,42 @@ type_printers = [] > > xmethods = [] > > # Initial frame filters. > > frame_filters = {} > > +# Initial frame unwinders. > > +frame_unwinders = [] > > + > > +def execute_unwinders(pending_frame): > > + """Internal function called from GDB to execute all unwinders. > > + > > + Runs each currently enabled unwinder until it finds the one that > > + can unwind given frame. > > + > > + Arguments: > > + pending_frame: gdb.PendingFrame instance. > > + Returns: > > + gdb.UnwindInfo instance or None. > > + """ > > + for objfile in objfiles(): > > It's odd to call objfiles() here and _gdb.current_progspace() below. > Either the _gdb. prefix is necessary or it is not. > At the least let's be consistent here. > How about instead of adding _gdb. prefix here ... > > > + for unwinder in objfile.frame_unwinders: > > + if unwinder.enabled: > > + unwind_info = unwinder(pending_frame) > > + if unwind_info is not None: > > + return unwind_info > > + > > + current_progspace = _gdb.current_progspace() > > .... remove it here. > [and rerun the testsuite to verify] > > > + for unwinder in current_progspace.frame_unwinders: > > + if unwinder.enabled: > > + unwind_info = unwinder(pending_frame) > > + if unwind_info is not None: > > + return unwind_info > > + > > + for unwinder in frame_unwinders: > > + if unwinder.enabled: > > + unwind_info = unwinder(pending_frame) > > + if unwind_info is not None: > > + return unwind_info > > + > > + return None > > + > > > > # Convenience variable to GDB's python directory > > PYTHONDIR = os.path.dirname(os.path.dirname(__file__)) --001a11415cc813c557051286c717 Content-Type: text/plain; charset=US-ASCII; name="patch11.diff" Content-Disposition: attachment; filename="patch11.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i7wah7340 Content-length: 91801 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCA5MDc5OTdiLi43NDFiZGZiIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC0zOTgsNiArMzk4 LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktc3ltdGFiLm8gXAog CXB5LXRocmVhZGV2ZW50Lm8gXAogCXB5LXR5cGUubyBcCisJcHktdW53aW5k Lm8gXAogCXB5LXV0aWxzLm8gXAogCXB5LXZhbHVlLm8gXAogCXB5LXZhcm9i ai5vCkBAIC00MzcsNiArNDM4LDcgQEAgU1VCRElSX1BZVEhPTl9TUkNTID0g XAogCXB5dGhvbi9weS1zeW10YWIuYyBcCiAJcHl0aG9uL3B5LXRocmVhZGV2 ZW50LmMgXAogCXB5dGhvbi9weS10eXBlLmMgXAorCXB5dGhvbi9weS11bndp bmQuYyBcCiAJcHl0aG9uL3B5LXV0aWxzLmMgXAogCXB5dGhvbi9weS12YWx1 ZS5jIFwKIAlweXRob24vcHktdmFyb2JqLmMKQEAgLTI2MzMsNiArMjYzNSwx MCBAQCBweS10eXBlLm86ICQoc3JjZGlyKS9weXRob24vcHktdHlwZS5jCiAJ JChDT01QSUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24v cHktdHlwZS5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktdW53aW5kLm86ICQo c3JjZGlyKS9weXRob24vcHktdW53aW5kLmMKKwkkKENPTVBJTEUpICQoUFlU SE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS11bndpbmQuYworCSQo UE9TVENPTVBJTEUpCisKIHB5LXV0aWxzLm86ICQoc3JjZGlyKS9weXRob24v cHktdXRpbHMuYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5LXV0aWxzLmMKIAkkKFBPU1RDT01QSUxFKQpkaWZm IC0tZ2l0IGEvZ2RiL05FV1MgYi9nZGIvTkVXUwppbmRleCAzZmEzM2M5Li5m NTNjODM5IDEwMDY0NAotLS0gYS9nZGIvTkVXUworKysgYi9nZGIvTkVXUwpA QCAtMTYsNiArMTYsNyBAQAogICAqKiBnZGIuT2JqZmlsZSBvYmplY3RzIGhh dmUgYSBuZXcgYXR0cmlidXRlICJ1c2VybmFtZSIsCiAgICAgIHdoaWNoIGlz IHRoZSBuYW1lIG9mIHRoZSBvYmpmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUg dXNlciwKICAgICAgd2l0aG91dCwgZm9yIGV4YW1wbGUsIHJlc29sdmluZyBz eW1saW5rcy4KKyAgKiogWW91IGNhbiBub3cgd3JpdGUgZnJhbWUgdW53aW5k ZXJzIGluIFB5dGhvbi4KIAogKiBOZXcgY29tbWFuZHMKIApkaWZmIC0tZ2l0 IGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluIGIvZ2RiL2RhdGEt ZGlyZWN0b3J5L01ha2VmaWxlLmluCmluZGV4IGMwMWI4NmQuLjMwY2ZkMTcg MTAwNjQ0Ci0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgor KysgYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KQEAgLTYyLDEx ICs2MiwxMyBAQCBQWVRIT05fRklMRV9MSVNUID0gXAogCWdkYi9GcmFtZURl Y29yYXRvci5weSBcCiAJZ2RiL3R5cGVzLnB5IFwKIAlnZGIvcHJpbnRpbmcu cHkgXAorCWdkYi91bndpbmRlci5weSBcCiAJZ2RiL3Byb21wdC5weSBcCiAJ Z2RiL3htZXRob2QucHkgXAogCWdkYi9jb21tYW5kL19faW5pdF9fLnB5IFwK IAlnZGIvY29tbWFuZC94bWV0aG9kcy5weSBcCiAJZ2RiL2NvbW1hbmQvZnJh bWVfZmlsdGVycy5weSBcCisJZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5IFwK IAlnZGIvY29tbWFuZC90eXBlX3ByaW50ZXJzLnB5IFwKIAlnZGIvY29tbWFu ZC9wcmV0dHlfcHJpbnRlcnMucHkgXAogCWdkYi9jb21tYW5kL3Byb21wdC5w eSBcCmRpZmYgLS1naXQgYS9nZGIvZG9jL3B5dGhvbi50ZXhpIGIvZ2RiL2Rv Yy9weXRob24udGV4aQppbmRleCBkNzI1ZWIwLi4wOThkNzE4IDEwMDY0NAot LS0gYS9nZGIvZG9jL3B5dGhvbi50ZXhpCisrKyBiL2dkYi9kb2MvcHl0aG9u LnRleGkKQEAgLTE0NCw2ICsxNDQsNyBAQCBvcHRpb25hbCBhcmd1bWVudHMg d2hpbGUgc2tpcHBpbmcgb3RoZXJzLiAgRXhhbXBsZToKICogRnJhbWUgRmls dGVyIEFQSTo6ICAgICAgICAgICAgRmlsdGVyaW5nIEZyYW1lcy4KICogRnJh bWUgRGVjb3JhdG9yIEFQSTo6ICAgICAgICAgRGVjb3JhdGluZyBGcmFtZXMu CiAqIFdyaXRpbmcgYSBGcmFtZSBGaWx0ZXI6OiAgICAgIFdyaXRpbmcgYSBG cmFtZSBGaWx0ZXIuCisqIFVud2luZGluZyBGcmFtZXMgaW4gUHl0aG9uOjog IFdyaXRpbmcgZnJhbWUgdW53aW5kZXIuCiAqIFhtZXRob2RzIEluIFB5dGhv bjo6ICAgICAgICAgIEFkZGluZyBhbmQgcmVwbGFjaW5nIG1ldGhvZHMgb2Yg QysrIGNsYXNzZXMuCiAqIFhtZXRob2QgQVBJOjogICAgICAgICAgICAgICAg IFhtZXRob2QgdHlwZXMuCiAqIFdyaXRpbmcgYW4gWG1ldGhvZDo6ICAgICAg ICAgIFdyaXRpbmcgYW4geG1ldGhvZC4KQEAgLTIxNzgsNiArMjE3OSwxNDgg QEAgcHJpbnRlZCBoaWVyYXJjaGljYWxseS4gIEFub3RoZXIgYXBwcm9hY2gg d291bGQgYmUgdG8gY29tYmluZSB0aGUKIG1hcmtlciBpbiB0aGUgaW5saW5l ZCBmcmFtZSwgYW5kIGFsc28gc2hvdyB0aGUgaGllcmFyY2hpY2FsCiByZWxh dGlvbnNoaXAuCiAKK0Bub2RlIFVud2luZGluZyBGcmFtZXMgaW4gUHl0aG9u CitAc3Vic3Vic2VjdGlvbiBVbndpbmRpbmcgRnJhbWVzIGluIFB5dGhvbgor QGNpbmRleCB1bndpbmRpbmcgZnJhbWVzIGluIFB5dGhvbgorCitJbiBAdmFs dWV7R0RCTn0gdGVybWlub2xvZ3kgYGB1bndpbmRpbmcnJyBpcyB0aGUgcHJv Y2VzcyBvZiBmaW5kaW5nCit0aGUgcHJldmlvdXMgZnJhbWUgKHRoYXQgaXMs IGNhbGxlcidzKSBmcm9tIHRoZSBjdXJyZW50IG9uZS4gIEFuCit1bndpbmRl ciBoYXMgdGhyZWUgbWV0aG9kcy4gIFRoZSBmaXJzdCBvbmUgY2hlY2tzIGlm IGl0IGNhbiBoYW5kbGUKK2dpdmVuIGZyYW1lIChgYHNuaWZmJycgaXQpLiAg Rm9yIHRoZSBmcmFtZXMgaXQgY2FuIHNuaWZmIGFuIHVud2luZGVyCitwcm92 aWRlcyB0d28gYWRkaXRpb25hbCBtZXRob2RzOiBpdCBjYW4gcmV0dXJuIGZy YW1lJ3MgSUQsIGFuZCBpdCBjYW4KK2ZldGNoIHJlZ2lzdGVycyBmcm9tIHRo ZSBwcmV2aW91cyBmcmFtZS4gIEEgcnVubmluZyBAdmFsdWV7R0RCTn0KK21h bnRhaW5zIGEgbGlzdCBvZiB0aGUgdW53aW5kZXJzIGFuZCBjYWxscyBlYWNo IHVud2luZGVyJ3Mgc25pZmZlciBpbgordHVybiB1bnRpbCBpdCBmaW5kcyB0 aGUgb25lIHRoYXQgcmVjb2duaXplcyB0aGUgY3VycmVudCBmcmFtZS4gIFRo ZXJlCitpcyBhbiBBUEkgdG8gcmVnaXN0ZXIgYW4gdW53aW5kZXIuCisKK1Ro ZSB1bndpbmRlcnMgdGhhdCBjb21lIHdpdGggQHZhbHVle0dEQk59IGhhbmRs ZSBzdGFuZGFyZCBmcmFtZXMuCitIb3dldmVyLCBtaXhlZCBsYW5ndWFnZSBh cHBsaWNhdGlvbnMgKGZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbgorcnVu bmluZyBKYXZhIFZpcnR1YWwgTWFjaGluZSkgc29tZXRpbWVzIHVzZSBmcmFt ZSBsYXlvdXRzIHRoYXQgY2Fubm90CitiZSBoYW5kbGVkIGJ5IHRoZSBAdmFs dWV7R0RCTn0gdW53aW5kZXJzLiAgWW91IGNhbiB3cml0ZSBQeXRob24gY29k ZQordGhhdCBjYW4gaGFuZGxlIHN1Y2ggY3VzdG9tIGZyYW1lcy4KKworWW91 IGltcGxlbWVudCBhIGZyYW1lIHVud2luZGVyIGluIFB5dGhvbiBhcyBhIGNs YXNzIHdpdGggd2hpY2ggaGFzIHR3bworYXR0cmlidXRlcywgQGNvZGV7bmFt ZX0gYW5kIEBjb2Rle2VuYWJsZWR9LCB3aXRoIG9idmlvdXMgbWVhbmluZ3Ms IGFuZAorYSBzaW5nbGUgbWV0aG9kIEBjb2Rle19fY2FsbF9ffSwgd2hpY2gg ZXhhbWluZXMgYSBnaXZlbiBmcmFtZSBhbmQKK3JldHVybnMgYW4gb2JqZWN0 IChhbiBpbnN0YW5jZSBvZiBAY29kZXtnZGIuVW53aW5kSW5mbyBjbGFzcyl9 CitkZXNjcmliaW5nIGl0LiAgSWYgYW4gdW53aW5kZXIgZG9lcyBub3QgcmVj b2duaXplIGEgZnJhbWUsIGl0IHNob3VsZAorcmV0dXJuIEBjb2Rle05vbmV9 LiAgVGhlIGNvZGUgaW4gQHZhbHVle0dEQk59IHRoYXQgZW5hYmxlcyB3cml0 aW5nCit1bndpbmRlcnMgaW4gUHl0aG9uIHVzZXMgdGhpcyBvYmplY3QgdG8g cmV0dXJuIGZyYW1lJ3MgSUQgYW5kIHByZXZpb3VzCitmcmFtZSByZWdpc3Rl cnMgd2hlbiBAdmFsdWV7R0RCTn0gY29yZSBhc2tzIGZvciB0aGVtLgorCitA c3ViaGVhZGluZyBVbndpbmRlciBJbnB1dAorCitBbiBvYmplY3QgcGFzc2Vk IHRvIGFuIHVud2luZGVyIChhIEBjb2Rle2dkYi5QZW5kaW5nRnJhbWV9IGlu c3RhbmNlKQorcHJvdmlkZXMgYSBtZXRob2QgdG8gcmVhZCBmcmFtZSdzIHJl Z2lzdGVyczoKKworQGRlZnVuIFBlbmRpbmdGcmFtZS5yZWFkX3JlZ2lzdGVy IChyZWcpCitUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0 aGUgcmVnaXN0ZXIgQHZhcntyZWdufSBpbiB0aGUKK2ZyYW1lIGFzIGEgQGNv ZGV7Z2RiLlZhbHVlfSBvYmplY3QuICBAdmFye3JlZ30gY2FuIGJlIGVpdGhl ciBhCityZWdpc3RlciBudW1iZXIgb3IgYSByZWdpc3RlciBuYW1lOyB0aGUg dmFsdWVzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4KK1RoZXkgYXJlIHVzdWFs bHkgZm91bmQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKK0BmaWxle0B2YXJ7cGxh dGZvcm19LXRkZXAuaH0gZmlsZSBpbiB0aGUgQHZhbHVle0dEQk59IHNvdXJj ZSB0cmVlLgorQGVuZCBkZWZ1bgorCitJdCBhbHNvIHByb3ZpZGVzIGEgZmFj dG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgQGNvZGV7Z2RiLlVud2luZEluZm99 CitpbnN0YW5jZSB0byBiZSByZXR1cm5lZCB0byBAdmFsdWV7R0RCTn06CisK K0BkZWZ1biBQZW5kaW5nRnJhbWUuY3JlYXRlX3Vud2luZF9pbmZvIChmcmFt ZV9pZCkKK1JldHVybnMgYSBuZXcgQGNvZGV7Z2RiLlVud2luZEluZm99IGlu c3RhbmNlIGlkZW50aWZpZWQgYnkgZ2l2ZW4KK0B2YXJ7ZnJhbWVfaWR9LiAg VGhlIGFyZ3VtZW50IGlzIHVzZWQgdG8gYnVpbGQgQHZhbHVle0dEQk59J3Mg ZnJhbWUgSUQKK3VzaW5nIG9uZSBvZiBmdW5jdGlvbnMgcHJvdmlkZWQgYnkg QHZhbHVle0dEQk59LiAgQHZhcntmcmFtZV9pZH0ncyBhdHRyaWJ1dGVzCitk ZXRlcm1pbmUgd2hpY2ggZnVuY3Rpb24gd2lsbCBiZSB1c2VkLCBhcyBmb2xs b3dzOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIHNwLCBwYywgc3BlY2lhbAor QGNvZGV7ZnJhbWVfaWRfYnVpbGRfc3BlY2lhbCAoQHZhcntmcmFtZV9pZH0u c3AsIEB2YXJ7ZnJhbWVfaWR9LnBjLCBAdmFye2ZyYW1lX2lkfS5zcGVjaWFs KX0KKworQGl0ZW0gc3AsIHBjCitAY29kZXtmcmFtZV9pZF9idWlsZCAoQHZh cntmcmFtZV9pZH0uc3AsIEB2YXJ7ZnJhbWVfaWR9LnBjKX0KKworVGhpcyBp cyB0aGUgbW9zdCBjb21tb24gY2FzZS4KKworQGl0ZW0gc3AKK0Bjb2Rle2Zy YW1lX2lkX2J1aWxkX3dpbGQgKEB2YXJ7ZnJhbWVfaWR9LnNwKX0KK0BlbmQg dGFibGUKK1RoZSBhdHRyaWJ1dGUgdmFsdWVzIHNob3VsZCBiZSBAY29kZXtn ZGIuVmFsdWV9CisKK0BlbmQgZGVmdW4KKworQHN1YmhlYWRpbmcgVW53aW5k ZXIgT3V0cHV0OiBVbndpbmRJbmZvCisKK1VzZSBAY29kZXtQZW5kaW5nRnJh bWUuY3JlYXRlX3Vud2luZF9pbmZvfSBtZXRob2QgZGVzY3JpYmVkIGFib3Zl IHRvCitjcmVhdGUgYSBAY29kZXtnZGIuVW53aW5kSW5mb30gaW5zdGFuY2Uu ICBVc2UgdGhlIGZvbGxvd2luZyBtZXRob2QgdG8KK3NwZWNpZnkgY2FsbGVy IHJlZ2lzdGVycyB0aGF0IGhhdmUgYmVlbiBzYXZlZCBpbiB0aGlzIGZyYW1l OgorCitAZGVmdW4gZ2RiLlVud2luZEluZm8uYWRkX3NhdmVkX3JlZ2lzdGVy IChyZWcsIHZhbHVlKQorQHZhcntyZWd9IGlkZW50aWZpZXMgdGhlIHJlZ2lz dGVyLiAgSXQgY2FuIGJlIGEgbnVtYmVyIG9yIGEgbmFtZSwganVzdAorYXMg Zm9yIHRoZSBAY29kZXtQZW5kaW5nRnJhbWUucmVhZF9yZWdpc3Rlcn0gbWV0 aG9kIGFib3ZlLgorQHZhcnt2YWx1ZX0gaXMgYSByZWdpc3RlciB2YWx1ZSAo YSBAY29kZXtnZGIuVmFsdWV9IG9iamVjdCkuCitAZW5kIGRlZnVuCisKK0Bz dWJoZWFkaW5nIFVud2luZGVyIFNrZWxldG9uIENvZGUKKworQHZhbHVle0dE Qk59IGNvbWVzIHdpdGggdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBiYXNl IEBjb2Rle1Vud2luZGVyfQorY2xhc3MuICBEZXJpdmUgeW91ciB1bndpbmRl ciBjbGFzcyBmcm9tIGl0IGFuZCBzdHJ1Y3R1cmUgdGhlIGNvZGUgYXMKK2Zv bGxvd3M6CisKK0BzbWFsbGV4YW1wbGUKK2Zyb20gZ2RiLnVud2luZGVycyBp bXBvcnQgVW53aW5kZXIKKworY2xhc3MgRnJhbWVJZChvYmplY3QpOgorICAg IGRlZiBfX2luaXRfXyhzZWxmLCBzcCwgcGMpOgorICAgICAgICBzZWxmLnNw ID0gc3AKKyAgICAgICAgc2VsZi5wYyA9IHBjCisKKworY2xhc3MgTXlVbndp bmRlcihVbndpbmRlcik6CisgICAgZGVmIF9faW5pdF9fKC4uLi4pOgorICAg ICAgICBzdXBlKE15VW53aW5kZXIsIHNlbGYpLl9faW5pdF9fXyg8ZXhwZWN0 cyB1bndpbmRlciBuYW1lIGFyZ3VtZW50PikKKworICAgIGRlZiBfX2NhbGxf XyhwZW5kaW5nX2ZyYW1lKToKKyAgICAgICAgaWYgbm90IDx3ZSByZWNvZ25p emUgZnJhbWU+OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg IyBDcmVhdGUgVW53aW5kSW5mby4gIFVzdWFsbHkgdGhlIGZyYW1lIGlzIGlk ZW50aWZpZWQgYnkgdGhlIHN0YWNrIAorICAgICAgICAjIHBvaW50ZXIgYW5k IHRoZSBwcm9ncmFtIGNvdW50ZXIuCisgICAgICAgIHNwID0gcGVuZGluZ19m cmFtZS5yZWFkX3JlZ2lzdGVyKDxTUCBudW1iZXI+KQorICAgICAgICBwYyA9 IHBlbmRpbmdfZnJhbWUucmVhZF9yZWdpc3Rlcig8UEMgbnVtYmVyPikKKyAg ICAgICAgdW53aW5kX2luZm8gPSBwZW5kaW5nX2ZyYW1lLmNyZWF0ZV91bndp bmRfaW5mbyhGcmFtZUlkKHNwLCBwYykpCisKKyAgICAgICAgIyBGaW5kIHRo ZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBpbiB0aGUgY2FsbGVyJ3MgZnJh bWUgYW5kIAorICAgICAgICAjIHNhdmUgdGhlbSBpbiB0aGUgcmVzdWx0Ogor ICAgICAgICB1bndpbmRfaW5mby5hZGRfc2F2ZWRfcmVnaXN0ZXIoPHJlZ2lz dGVyPiwgPHZhbHVlPikKKyAgICAgICAgLi4uLgorCisgICAgICAgICMgUmV0 dXJuIHRoZSByZXN1bHQ6CisgICAgICAgIHJldHVybiB1bndpbmRfaW5mbwor CitAZW5kIHNtYWxsZXhhbXBsZQorCitAc3ViaGVhZGluZyBSZWdpc3Rlcmlu ZyBhIFVud2luZGVyCisKK0FuIG9iamVjdCBmaWxlLCBhIHByb2dyYW0gc3Bh Y2UsIGFuZCB0aGUgQHZhbHVle0dEQk59IHByb3BlciBjYW4gaGF2ZQordW53 aW5kZXJzIHJlZ2lzdGVyZWQgd2l0aCBpdC4KKworVGhlIEBjb2Rle2dkYi51 bndpbmRlcnN9IG1vZHVsZSBwcm92aWRlcyB0aGUgZnVuY3Rpb24gdG8gcmVn aXN0ZXIgYQordW53aW5kZXI6CisKK0BkZWZ1biBnZGIudW53aW5kZXIucmVn aXN0ZXJfdW53aW5kZXIgKGxvY3VzLCB1bndpbmRlciwgcmVwbGFjZT1GYWxz ZSkKK0B2YXJ7bG9jdXN9IGlzIHNwZWNpZmllcyBhbiBvYmplY3QgZmlsZSBv ciBhIHByb2dyYW0gc3BhY2UgdG8gd2hpY2gKK0B2YXJ7dW53aW5kZXJ9IGlz IGFkZGVkLiAgUGFzc2luZyBAY29kZXtOb25lfSBvciBAY29kZXtnZGJ9IGFk ZHMKK0B2YXJ7dW53aW5kZXJ9IHRvIHRoZSBAdmFsdWV7R0RCTn0ncyBnbG9i YWwgdW53aW5kZXIgbGlzdC4gIFRoZSBuZXdseQorYWRkZWQgQHZhcnt1bndp bmRlcn0gd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB1bndpbmRl ciBmcm9tIHRoZQorc2FtZSBsb2N1cy4gIFR3byB1bndpbmRlcnMgaW4gdGhl IHNhbWUgbG9jdXMgY2Fubm90IGhhdmUgdGhlIHNhbWUKK25hbWUuICBBbiBh dHRlbXB0IHRvIGFkZCBhIHVud2luZGVyIHdpdGggYWxyZWFkeSBleGlzdGlu ZyBuYW1lIHJhaXNlcworYW4gZXhjZXB0aW9uIHVubGVzcyBAdmFye3JlcGxh Y2V9IGlzIEBjb2Rle1RydWV9LCBpbiB3aGljaCBjYXNlIHRoZQorb2xkIHVu d2luZGVyIGlzIGRlbGV0ZWQuCitAZW5kIGRlZnVuCisKK0BzdWJoZWFkaW5n IFVud2luZGVyIFByZWNlZGVuY2UKKworQHZhbHVle0dEQk59IGZpcnN0IGNh bGxzIHRoZSB1bndpbmRlcnMgZnJvbSBhbGwgdGhlIG9iamVjdCBmaWxlcyBp biBubworcGFydGljdWxhciBvcmRlciwgdGhlbiB0aGUgdW53aW5kZXJzIGZy b20gdGhlIGN1cnJlbnQgcHJvZ3JhbSBzcGFjZSwKK2FuZCBmaW5hbGx5IHRo ZSB1bndpbmRlcnMgZnJvbSBAdmFsdWV7R0RCTn0uCisKIEBub2RlIFhtZXRo b2RzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gWG1ldGhvZHMgSW4gUHl0 aG9uCiBAY2luZGV4IHhtZXRob2RzIGluIFB5dGhvbgpkaWZmIC0tZ2l0IGEv Z2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5IGIvZ2RiL3B5dGhvbi9s aWIvZ2RiL19faW5pdF9fLnB5CmluZGV4IDkyYjA2ZjIuLjgxNzg5ZTUgMTAw NjQ0Ci0tLSBhL2dkYi9weXRob24vbGliL2dkYi9fX2luaXRfXy5weQorKysg Yi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKQEAgLTI4LDcgKzI4 LDcgQEAgY2xhc3MgX0dkYkZpbGUgKG9iamVjdCk6CiAgICAgIyBUaGVzZSB0 d28gYXJlIG5lZWRlZCBpbiBQeXRob24gMwogICAgIGVuY29kaW5nID0gIlVU Ri04IgogICAgIGVycm9ycyA9ICJzdHJpY3QiCi0gICAgCisKICAgICBkZWYg Y2xvc2Uoc2VsZik6CiAgICAgICAgICMgRG8gbm90aGluZy4KICAgICAgICAg cmV0dXJuIE5vbmUKQEAgLTcxLDYgKzcxLDQyIEBAIHR5cGVfcHJpbnRlcnMg PSBbXQogeG1ldGhvZHMgPSBbXQogIyBJbml0aWFsIGZyYW1lIGZpbHRlcnMu CiBmcmFtZV9maWx0ZXJzID0ge30KKyMgSW5pdGlhbCBmcmFtZSB1bndpbmRl cnMuCitmcmFtZV91bndpbmRlcnMgPSBbXQorCitkZWYgZXhlY3V0ZV91bndp bmRlcnMocGVuZGluZ19mcmFtZSk6CisgICAgIiIiSW50ZXJuYWwgZnVuY3Rp b24gY2FsbGVkIGZyb20gR0RCIHRvIGV4ZWN1dGUgYWxsIHVud2luZGVycy4K KworICAgIFJ1bnMgZWFjaCBjdXJyZW50bHkgZW5hYmxlZCB1bndpbmRlciB1 bnRpbCBpdCBmaW5kcyB0aGUgb25lIHRoYXQKKyAgICBjYW4gdW53aW5kIGdp dmVuIGZyYW1lLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBwZW5kaW5n X2ZyYW1lOiBnZGIuUGVuZGluZ0ZyYW1lIGluc3RhbmNlLgorICAgIFJldHVy bnM6CisgICAgICAgIGdkYi5VbndpbmRJbmZvIGluc3RhbmNlIG9yIE5vbmUu CisgICAgIiIiCisgICAgZm9yIG9iamZpbGUgaW4gX2dkYi5vYmpmaWxlcygp OgorICAgICAgICBmb3IgdW53aW5kZXIgaW4gb2JqZmlsZS5mcmFtZV91bndp bmRlcnM6CisgICAgICAgICAgICBpZiB1bndpbmRlci5lbmFibGVkOgorICAg ICAgICAgICAgICAgIHVud2luZF9pbmZvID0gdW53aW5kZXIocGVuZGluZ19m cmFtZSkKKyAgICAgICAgICAgICAgICBpZiB1bndpbmRfaW5mbyBpcyBub3Qg Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVud2luZF9pbmZv CisKKyAgICBjdXJyZW50X3Byb2dzcGFjZSA9IF9nZGIuY3VycmVudF9wcm9n c3BhY2UoKQorICAgIGZvciB1bndpbmRlciBpbiBjdXJyZW50X3Byb2dzcGFj ZS5mcmFtZV91bndpbmRlcnM6CisgICAgICAgIGlmIHVud2luZGVyLmVuYWJs ZWQ6CisgICAgICAgICAgICB1bndpbmRfaW5mbyA9IHVud2luZGVyKHBlbmRp bmdfZnJhbWUpCisgICAgICAgICAgICBpZiB1bndpbmRfaW5mbyBpcyBub3Qg Tm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW53aW5kX2luZm8KKwor ICAgIGZvciB1bndpbmRlciBpbiBmcmFtZV91bndpbmRlcnM6CisgICAgICAg IGlmIHVud2luZGVyLmVuYWJsZWQ6CisgICAgICAgICAgICB1bndpbmRfaW5m byA9IHVud2luZGVyKHBlbmRpbmdfZnJhbWUpCisgICAgICAgICAgICBpZiB1 bndpbmRfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1 cm4gdW53aW5kX2luZm8KKworICAgIHJldHVybiBOb25lCisKIAogIyBDb252 ZW5pZW5jZSB2YXJpYWJsZSB0byBHREIncyBweXRob24gZGlyZWN0b3J5CiBQ WVRIT05ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9f ZmlsZV9fKSkKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9jb21t YW5kL3Vud2luZGVycy5weSBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5k L3Vud2luZGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi44NTMwYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9s aWIvZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5CkBAIC0wLDAgKzEsMTk4IEBA CisjIFVud2luZGVyIGNvbW1hbmRzLgorIyBDb3B5cmlnaHQgMjAxNSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworaW1wb3J0IGdkYgoraW1wb3J0IHJlCisKKworZGVmIHZhbGlkYXRlX3Jl Z2V4cChleHAsIGlkc3RyaW5nKToKKyAgICB0cnk6CisgICAgICAgIHJldHVy biByZS5jb21waWxlKGV4cCkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6Cisg ICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJJbnZhbGlkICVzIHJlZ2V4cDog JXMuIiAlIChpZHN0cmluZywgZXhwKSkKKworCitkZWYgcGFyc2VfdW53aW5k ZXJfY29tbWFuZF9hcmdzKGFyZyk6CisgICAgIiIiSW50ZXJuYWwgdXRpbGl0 eSB0byBwYXJzZSB1bndpbmRlciBjb21tYW5kIGFyZ3YuCisKKyAgICBBcmd1 bWVudHM6CisgICAgICAgIGFyZzogVGhlIGFyZ3VtZW50cyB0byB0aGUgY29t bWFuZC4gVGhlIGZvcm1hdCBpczoKKyAgICAgICAgICAgICBbbG9jdXMtcmVn ZXhwIFtuYW1lLXJlZ2V4cF1dCisKKyAgICBSZXR1cm5zOgorICAgICAgICBB IDItdHVwbGUgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KKwor ICAgIFJhaXNlczoKKyAgICAgICAgU3ludGF4RXJyb3I6IGFuIGVycm9yIHBy b2Nlc3NpbmcgQVJHCisgICAgIiIiCisKKyAgICBhcmd2ID0gZ2RiLnN0cmlu Z190b19hcmd2KGFyZykKKyAgICBhcmdjID0gbGVuKGFyZ3YpCisgICAgaWYg YXJnYyA+IDI6CisgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJUb28gbWFu eSBhcmd1bWVudHMuIikKKyAgICBsb2N1c19yZWdleHAgPSAiIgorICAgIG5h bWVfcmVnZXhwID0gIiIKKyAgICBpZiBhcmdjID49IDE6CisgICAgICAgIGxv Y3VzX3JlZ2V4cCA9IGFyZ3ZbMF0KKyAgICAgICAgaWYgYXJnYyA+PSAyOgor ICAgICAgICAgICAgbmFtZV9yZWdleHAgPSBhcmd2WzFdCisgICAgcmV0dXJu ICh2YWxpZGF0ZV9yZWdleHAobG9jdXNfcmVnZXhwLCAibG9jdXMiKSwKKyAg ICAgICAgICAgIHZhbGlkYXRlX3JlZ2V4cChuYW1lX3JlZ2V4cCwgInVud2lu ZGVyIikpCisKKworY2xhc3MgSW5mb1Vud2luZGVyKGdkYi5Db21tYW5kKToK KyAgICAiIiJHREIgY29tbWFuZCB0byBsaXN0IHVud2luZGVycy4KKworICAg IFVzYWdlOiBpbmZvIHVud2luZGVyIFtsb2N1cy1yZWdleHAgW25hbWUtcmVn ZXhwXV0KKworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVz c2lvbiBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgdW53aW5k ZXIuICBJZiBpdCBpcyBvbWl0dGVkLCBhbGwgcmVnaXN0ZXJlZCB1bndpbmRl cnMgZnJvbSBhbGwKKyAgICBsb2NpIGFyZSBsaXN0ZWQuICBBIGxvY3VzIGNh biBiZSAnZ2xvYmFsJywgJ3Byb2dzcGFjZScgdG8gbGlzdAorICAgIHRoZSB1 bndpbmRlcnMgZnJvbSB0aGUgY3VycmVudCBwcm9nc3BhY2UsIG9yIGEgcmVn dWxhciBleHByZXNzaW9uCisgICAgbWF0Y2hpbmcgZmlsZW5hbWVzIG9mIG9i amZpbGVzLgorCisgICAgTkFNRS1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJl c3Npb24gdG8gZmlsdGVyIHVud2luZGVyIG5hbWVzLiAgSWYKKyAgICB0aGlz IG9taXR0ZWQgZm9yIGEgc3BlY2lmaWVkIGxvY3VzLCB0aGVuIGFsbCByZWdp c3RlcmVkIHVud2luZGVycworICAgIGluIHRoZSBsb2N1cyBhcmUgbGlzdGVk LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg ICBzdXBlcihJbmZvVW53aW5kZXIsIHNlbGYpLl9faW5pdF9fKCJpbmZvIHVu d2luZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2RiLkNPTU1BTkRfU1RBQ0spCisKKyAgICBkZWYgbGlzdF91 bndpbmRlcnMoc2VsZiwgdGl0bGUsIHVud2luZGVycywgbmFtZV9yZSk6Cisg ICAgICAgICIiIkxpc3RzIHRoZSB1bndpbmRlcnMgd2hvc2UgbmFtZSBtYXRj aGVzIHJlZ2V4cC4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAg ICB0aXRsZTogVGhlIGxpbmUgdG8gcHJpbnQgYmVmb3JlIHRoZSBsaXN0Lgor ICAgICAgICAgICAgdW53aW5kZXJzOiBUaGUgbGlzdCBvZiB0aGUgdW53aW5k ZXJzLgorICAgICAgICAgICAgbmFtZV9yZTogdW53aW5kZXIgbmFtZSBmaWx0 ZXIuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgdW53aW5kZXJzOgor ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHByaW50IHRpdGxlCisgICAg ICAgIGZvciB1bndpbmRlciBpbiB1bndpbmRlcnM6CisgICAgICAgICAgICBp ZiBuYW1lX3JlLm1hdGNoKHVud2luZGVyLm5hbWUpOgorICAgICAgICAgICAg ICAgIHByaW50KCIgICVzJXMiICUgKHVud2luZGVyLm5hbWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgaWYgdW53aW5kZXIuZW5h YmxlZCBlbHNlICIgW2Rpc2FibGVkXSIpKQorCisgICAgZGVmIGludm9rZShz ZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgbG9jdXNfcmUsIG5hbWVf cmUgPSBwYXJzZV91bndpbmRlcl9jb21tYW5kX2FyZ3MoYXJnKQorICAgICAg ICBpZiBsb2N1c19yZS5tYXRjaCgiZ2xvYmFsIik6CisgICAgICAgICAgICBz ZWxmLmxpc3RfdW53aW5kZXJzKCJHbG9iYWw6IiwgZ2RiLmZyYW1lX3Vud2lu ZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9y ZSkKKyAgICAgICAgaWYgbG9jdXNfcmUubWF0Y2goInByb2dzcGFjZSIpOgor ICAgICAgICAgICAgY3AgPSBnZGIuY3VycmVudF9wcm9nc3BhY2UoKQorICAg ICAgICAgICAgc2VsZi5saXN0X3Vud2luZGVycygiUHJvZ3NwYWNlICVzOiIg JSBjcC5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3AuZnJhbWVfdW53aW5kZXJzLCBuYW1lX3JlKQorICAgICAgICBmb3Ig b2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKyAgICAgICAgICAgIGlmIGxv Y3VzX3JlLm1hdGNoKG9iamZpbGUuZmlsZW5hbWUpOgorICAgICAgICAgICAg ICAgIHNlbGYubGlzdF91bndpbmRlcnMoIk9iamZpbGUgJXM6IiAlIG9iamZp bGUuZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvYmpmaWxlLmZyYW1lX3Vud2luZGVycywgbmFtZV9yZSkKKworCitk ZWYgZG9fZW5hYmxlX3Vud2luZGVyMSh1bndpbmRlcnMsIG5hbWVfcmUsIGZs YWcpOgorICAgICIiIkVuYWJsZS9kaXNhYmxlIHVud2luZGVycyB3aG9zZSBu YW1lcyBtYXRjaCBnaXZlbiByZWdleC4KKworICAgIEFyZ3VtZW50czoKKyAg ICAgICAgdW53aW5kZXJzOiBUaGUgbGlzdCBvZiB1bndpbmRlcnMuCisgICAg ICAgIG5hbWVfcmU6IFVud2luZGVyIG5hbWUgZmlsdGVyLgorICAgICAgICBm bGFnOiBFbmFibGUvZGlzYWJsZS4KKworICAgIFJldHVybnM6CisgICAgICAg IFRoZSBudW1iZXIgb2YgdW53aW5kZXJzIGFmZmVjdGVkLgorICAgICIiIgor ICAgIHRvdGFsID0gMAorICAgIGZvciB1bndpbmRlciBpbiB1bndpbmRlcnM6 CisgICAgICAgIGlmIG5hbWVfcmUubWF0Y2godW53aW5kZXIubmFtZSk6Cisg ICAgICAgICAgICB1bndpbmRlci5lbmFibGVkID0gZmxhZworICAgICAgICAg ICAgdG90YWwgKz0gMQorICAgIHJldHVybiB0b3RhbAorCisKK2RlZiBkb19l bmFibGVfdW53aW5kZXIoYXJnLCBmbGFnKToKKyAgICAiIiJFbmFibGUvZGlz YWJsZSB1bndpbmRlcihzKS4iIiIKKyAgICAobG9jdXNfcmUsIG5hbWVfcmUp ID0gcGFyc2VfdW53aW5kZXJfY29tbWFuZF9hcmdzKGFyZykKKyAgICB0b3Rh bCA9IDAKKyAgICBpZiBsb2N1c19yZS5tYXRjaCgiZ2xvYmFsIik6CisgICAg ICAgIHRvdGFsICs9IGRvX2VuYWJsZV91bndpbmRlcjEoZ2RiLmZyYW1lX3Vu d2luZGVycywgbmFtZV9yZSwgZmxhZykKKyAgICBpZiBsb2N1c19yZS5tYXRj aCgicHJvZ3NwYWNlIik6CisgICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV91 bndpbmRlcjEoZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkuZnJhbWVfdW53aW5k ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h bWVfcmUsIGZsYWcpCisgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVz KCk6CisgICAgICAgIGlmIGxvY3VzX3JlLm1hdGNoKG9iamZpbGUuZmlsZW5h bWUpOgorICAgICAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX3Vud2luZGVy MShvYmpmaWxlLmZyYW1lX3Vud2luZGVycywgbmFtZV9yZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykKKyAgICBw cmludCgiJWQgdW53aW5kZXIlcyAlcyIgJSAodG90YWwsICIiIGlmIHRvdGFs ID09IDEgZWxzZSAicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJlbmFibGVkIiBpZiBmbGFnIGVsc2UgImRpc2FibGVkIikpCisKKwor Y2xhc3MgRW5hYmxlVW53aW5kZXIoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdE QiBjb21tYW5kIHRvIGVuYWJsZSB1bndpbmRlcnMuCisKKyAgICBVc2FnZTog ZW5hYmxlIHVud2luZGVyIFtsb2N1cy1yZWdleHAgW25hbWUtcmVnZXhwXV0K KworICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBz cGVjaWZ5aW5nIHRoZSB1bndpbmRlcnMgdG8KKyAgICBlbmFibGUuICBJdCBj YW4gJ2dsb2JhbCcsICdwcm9nc3BhY2UnLCBvciB0aGUgbmFtZSBvZiBhbiBv YmpmaWxlCisgICAgd2l0aGluIHRoYXQgcHJvZ3NwYWNlLgorCisgICAgTkFN RV9SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHVu d2luZGVyIG5hbWVzLiAgSWYKKyAgICB0aGlzIG9taXR0ZWQgZm9yIGEgc3Bl Y2lmaWVkIGxvY3VzLCB0aGVuIGFsbCByZWdpc3RlcmVkIHVud2luZGVycwor ICAgIGluIHRoZSBsb2N1cyBhcmUgYWZmZWN0ZWQuCisKKyAgICAiIiIKKwor ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoRW5hYmxl VW53aW5kZXIsIHNlbGYpLl9faW5pdF9fKCJlbmFibGUgdW53aW5kZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2RiLkNPTU1BTkRfU1RBQ0spCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFy ZywgZnJvbV90dHkpOgorICAgICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBw ZXJmb3JtIHRoZSBjb21tYW5kLiIiIgorICAgICAgICBkb19lbmFibGVfdW53 aW5kZXIoYXJnLCBUcnVlKQorCisKK2NsYXNzIERpc2FibGVVbndpbmRlcihn ZGIuQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8gZGlzYWJsZSB0 aGUgc3BlY2lmaWVkIHVud2luZGVyLgorCisgICAgVXNhZ2U6IGRpc2FibGUg dW53aW5kZXIgW2xvY3VzLXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisgICAg TE9DVVMtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHNwZWNpZnlp bmcgdGhlIHVud2luZGVycyB0bworICAgIGRpc2FibGUuICBJdCBjYW4gJ2ds b2JhbCcsICdwcm9nc3BhY2UnLCBvciB0aGUgbmFtZSBvZiBhbiBvYmpmaWxl CisgICAgd2l0aGluIHRoYXQgcHJvZ3NwYWNlLgorCisgICAgTkFNRV9SRUdF WFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHVud2luZGVy IG5hbWVzLiAgSWYKKyAgICB0aGlzIG9taXR0ZWQgZm9yIGEgc3BlY2lmaWVk IGxvY3VzLCB0aGVuIGFsbCByZWdpc3RlcmVkIHVud2luZGVycworICAgIGlu IHRoZSBsb2N1cyBhcmUgYWZmZWN0ZWQuCisKKyAgICAiIiIKKworICAgIGRl ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoRGlzYWJsZVVud2lu ZGVyLCBzZWxmKS5fX2luaXRfXygiZGlzYWJsZSB1bndpbmRlciIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Ri LkNPTU1BTkRfU1RBQ0spCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywg ZnJvbV90dHkpOgorICAgICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJm b3JtIHRoZSBjb21tYW5kLiIiIgorICAgICAgICBkb19lbmFibGVfdW53aW5k ZXIoYXJnLCBGYWxzZSkKKworCitkZWYgcmVnaXN0ZXJfdW53aW5kZXJfY29t bWFuZHMoKToKKyAgICAiIiJJbnN0YWxscyB0aGUgdW53aW5kZXIgY29tbWFu ZHMuIiIiCisgICAgSW5mb1Vud2luZGVyKCkKKyAgICBFbmFibGVVbndpbmRl cigpCisgICAgRGlzYWJsZVVud2luZGVyKCkKKworCityZWdpc3Rlcl91bndp bmRlcl9jb21tYW5kcygpCmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9n ZGIvdW53aW5kZXIucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvdW53aW5kZXIu cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU1NGU5 YwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9weXRob24vbGliL2dkYi91bndp bmRlci5weQpAQCAtMCwwICsxLDk0IEBACisjIENvcHlyaWdodCAoQykgMjAx NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKworIiIiVW53aW5kZXIgY2xhc3MgYW5kIHJlZ2lzdGVyX3Vud2lu ZGVyIGZ1bmN0aW9uLiIiIgorCitpbXBvcnQgZ2RiCisKKworY2xhc3MgVW53 aW5kZXIob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIChvciBhIHRlbXBs YXRlKSBmb3IgZnJhbWUgdW53aW5kZXJzIHdyaXR0ZW4gaW4gUHl0aG9uLgor CisgICAgQW4gdW53aW5kZXIgaGFzIGEgc2luZ2xlIG1ldGhvZCBfX2NhbGxf XyBhbmQgdGhlIGF0dHJpYnV0ZXMKKyAgICBkZXNjcmliZWQgYmVsb3cuCisK KyAgICBBdHRyaWJ1dGVzOgorICAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0 aGUgdW53aW5kZXIuCisgICAgICAgIGVuYWJsZWQ6IEEgYm9vbGVhbiBpbmRp Y2F0aW5nIHdoZXRoZXIgdGhlIHVud2luZGVyIGlzIGVuYWJsZWQuCisgICAg IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAg ICIiIkNvbnN0cnVjdG9yLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg ICBuYW1lOiBBbiBpZGVudGlmeWluZyBuYW1lIGZvciB0aGUgdW53aW5kZXIu CisgICAgICAgICIiIgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAg ICAgIHNlbGYuZW5hYmxlZCA9IFRydWUKKworICAgIGRlZiBfX2NhbGxfXyhz ZWxmLCBwZW5kaW5nX2ZyYW1lKToKKyAgICAgICAgIiIiR0RCIGNhbGxzIHRo aXMgbWV0aG9kIHRvIHVud2luZCBhIGZyYW1lLgorCisgICAgICAgIEFyZ3Vt ZW50czoKKyAgICAgICAgICAgIHBlbmRpbmdfZnJhbWU6IGdkYi5QZW5kaW5n RnJhbWUgaW5zdGFuY2UuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAg ICAgIGdkYi5VbndpbmRJbmZvIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAg ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiVW53aW5kZXIgX19j YWxsX18uIikKKworCitkZWYgcmVnaXN0ZXJfdW53aW5kZXIobG9jdXMsIHVu d2luZGVyLCByZXBsYWNlPUZhbHNlKToKKyAgICAiIiJSZWdpc3RlciB1bndp bmRlciBpbiBnaXZlbiBsb2N1cy4KKworICAgIFRoZSB1bndpbmRlciBpcyBw cmVwZW5kZWQgdG8gdGhlIGxvY3VzJ3MgdW53aW5kZXJzIGxpc3QuIFVud2lu ZGVyCisgICAgbmFtZSBzaG91bGQgYmUgdW5pcXVlLgorCisgICAgQXJndW1l bnRzOgorICAgICAgICBsb2N1czogRWl0aGVyIGFuIG9iamZpbGUsIHByb2dz cGFjZSwgb3IgTm9uZSAoaW4gd2hpY2ggY2FzZQorICAgICAgICAgICAgICAg dGhlIHVud2luZGVyIGlzIHJlZ2lzdGVyZWQgZ2xvYmFsbHkpLgorICAgICAg ICB1bndpbmRlcjogQW4gb2JqZWN0IG9mIGEgZ2RiLlVud2luZGVyIHN1YmNs YXNzCisgICAgICAgIHJlcGxhY2U6IElmIFRydWUsIHJlcGxhY2VzIGV4aXN0 aW5nIHVud2luZGVyIHdpdGggdGhlIHNhbWUgbmFtZS4KKyAgICAgICAgICAg ICAgICAgT3RoZXJ3aXNlLCByYWlzZXMgZXhjZXB0aW9uIGlmIHVud2luZGVy IHdpdGggdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgbmFtZSBhbHJlYWR5 IGV4aXN0cy4KKworICAgIFJldHVybnM6CisgICAgICAgIE5vdGhpbmcuCisK KyAgICBSYWlzZXM6CisgICAgICAgIFJ1bnRpbWVFcnJvcjogVW53aW5kZXIg bmFtZSBpcyBub3QgdW5pcXVlCisgICAgICAgIFR5cGVFcnJvcjogQmFkIGxv Y3VzIHR5cGUKKyAgICAiIiIKKyAgICBpZiBsb2N1cyBpcyBOb25lOgorICAg ICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJib3NlIik6CisgICAgICAgICAg ICBnZGIud3JpdGUoIlJlZ2lzdGVyaW5nIGdsb2JhbCAlcyB1bndpbmRlciAu Li5cbiIgJSB1bndpbmRlci5uYW1lKQorICAgICAgICBsb2N1cyA9IGdkYgor ICAgIGVsaWYgaXNpbnN0YW5jZShsb2N1cywgZ2RiLk9iamZpbGUpIG9yIGlz aW5zdGFuY2UobG9jdXMsIGdkYi5Qcm9nc3BhY2UpOgorICAgICAgICBpZiBn ZGIucGFyYW1ldGVyKCJ2ZXJib3NlIik6CisgICAgICAgICAgICBnZGIud3Jp dGUoIlJlZ2lzdGVyaW5nICVzIHVud2luZGVyIGZvciAlcyAuLi5cbiIgJQor ICAgICAgICAgICAgICAgICAgICAgICh1bndpbmRlci5uYW1lLCBsb2N1cy5m aWxlbmFtZSkpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9y KCJsb2N1cyBzaG91bGQgYmUgZ2RiLk9iamZpbGUgb3IgZ2RiLlByb2dzcGFj ZSBvciBOb25lIikKKworICAgIGkgPSAwCisgICAgZm9yIG5lZWRsZSBpbiBs b2N1cy5mcmFtZV91bndpbmRlcnM6CisgICAgICAgIGlmIG5lZWRsZS5uYW1l ID09IHVud2luZGVyLm5hbWU6CisgICAgICAgICAgICBpZiByZXBsYWNlOgor ICAgICAgICAgICAgICAgIGRlbCBsb2N1cy5mcmFtZV91bndpbmRlcnNbaV0K KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVu dGltZUVycm9yKCJVbndpbmRlciAlcyBhbHJlYWR5IGV4aXN0cy4iICUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW53aW5kZXIubmFt ZSkKKyAgICAgICAgaSArPSAxCisgICAgbG9jdXMuZnJhbWVfdW53aW5kZXJz Lmluc2VydCgwLCB1bndpbmRlcikKZGlmZiAtLWdpdCBhL2dkYi9weXRob24v cHktb2JqZmlsZS5jIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKaW5kZXgg MTU3ZDIwMC4uYzk1MjhjMyAxMDA2NDQKLS0tIGEvZ2RiL3B5dGhvbi9weS1v YmpmaWxlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKQEAgLTQy LDYgKzQyLDEwIEBAIHR5cGVkZWYgc3RydWN0CiAKICAgLyogVGhlIGZyYW1l IGZpbHRlciBsaXN0IG9mIGZ1bmN0aW9ucy4gICovCiAgIFB5T2JqZWN0ICpm cmFtZV9maWx0ZXJzOworCisgIC8qIFRoZSBsaXN0IG9mIGZyYW1lIHVud2lu ZGVycy4gICovCisgIFB5T2JqZWN0ICpmcmFtZV91bndpbmRlcnM7CisKICAg LyogVGhlIHR5cGUtcHJpbnRlciBsaXN0LiAgKi8KICAgUHlPYmplY3QgKnR5 cGVfcHJpbnRlcnM7CiAKQEAgLTE4NCw2ICsxODgsNyBAQCBvYmpmcHlfZGVh bGxvYyAoUHlPYmplY3QgKm8pCiAgIFB5X1hERUNSRUYgKHNlbGYtPmRpY3Qp OwogICBQeV9YREVDUkVGIChzZWxmLT5wcmludGVycyk7CiAgIFB5X1hERUNS RUYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMpOworICBQeV9YREVDUkVGIChzZWxm LT5mcmFtZV91bndpbmRlcnMpOwogICBQeV9YREVDUkVGIChzZWxmLT50eXBl X3ByaW50ZXJzKTsKICAgUHlfWERFQ1JFRiAoc2VsZi0+eG1ldGhvZHMpOwog ICBQeV9UWVBFIChzZWxmKS0+dHBfZnJlZSAoc2VsZik7CkBAIC0yMDYsNiAr MjExLDEwIEBAIG9iamZweV9pbml0aWFsaXplIChvYmpmaWxlX29iamVjdCAq c2VsZikKICAgaWYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMgPT0gTlVMTCkKICAg ICByZXR1cm4gMDsKIAorICBzZWxmLT5mcmFtZV91bndpbmRlcnMgPSBQeUxp c3RfTmV3ICgwKTsKKyAgaWYgKHNlbGYtPmZyYW1lX3Vud2luZGVycyA9PSBO VUxMKQorICAgIHJldHVybiAwOworCiAgIHNlbGYtPnR5cGVfcHJpbnRlcnMg PSBQeUxpc3RfTmV3ICgwKTsKICAgaWYgKHNlbGYtPnR5cGVfcHJpbnRlcnMg PT0gTlVMTCkKICAgICByZXR1cm4gMDsKQEAgLTMxMyw2ICszMjIsNDggQEAg b2JqZnB5X3NldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqbywgUHlPYmpl Y3QgKmZpbHRlcnMsIHZvaWQgKmlnbm9yZSkKICAgcmV0dXJuIDA7CiB9CiAK Ky8qIFJldHVybiB0aGUgZnJhbWUgdW53aW5kZXJzIGF0dHJpYnV0ZSBmb3Ig dGhpcyBvYmplY3QgZmlsZS4gICovCisKK1B5T2JqZWN0ICoKK29iamZweV9n ZXRfZnJhbWVfdW53aW5kZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3Jl KQoreworICBvYmpmaWxlX29iamVjdCAqc2VsZiA9IChvYmpmaWxlX29iamVj dCAqKSBvOworCisgIFB5X0lOQ1JFRiAoc2VsZi0+ZnJhbWVfdW53aW5kZXJz KTsKKyAgcmV0dXJuIHNlbGYtPmZyYW1lX3Vud2luZGVyczsKK30KKworLyog U2V0IHRoaXMgb2JqZWN0IGZpbGUncyBmcmFtZSB1bndpbmRlcnMgbGlzdCB0 byBVTldJTkRFUlMuICAqLworCitzdGF0aWMgaW50CitvYmpmcHlfc2V0X2Zy YW1lX3Vud2luZGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp1bndpbmRl cnMsIHZvaWQgKmlnbm9yZSkKK3sKKyAgUHlPYmplY3QgKnRtcDsKKyAgb2Jq ZmlsZV9vYmplY3QgKnNlbGYgPSAob2JqZmlsZV9vYmplY3QgKikgbzsKKwor ICBpZiAoIXVud2luZGVycykKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJp bmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJICAgICAgIF8oIkNhbm5vdCBkZWxl dGUgdGhlIGZyYW1lIHVud2luZGVycyBhdHRyaWJ1dGUuIikpOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKworICBpZiAoIVB5TGlzdF9DaGVjayAodW53 aW5kZXJzKSkKKyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhj X1R5cGVFcnJvciwKKwkJICAgICAgIF8oIlRoZSBmcmFtZV91bndpbmRlcnMg YXR0cmlidXRlIG11c3QgYmUgYSBsaXN0LiIpKTsKKyAgICAgIHJldHVybiAt MTsKKyAgICB9CisKKyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBh bmQgUkhTIGFyZSByZWxhdGVkIHNvbWVob3cuICAqLworICB0bXAgPSBzZWxm LT5mcmFtZV91bndpbmRlcnM7CisgIFB5X0lOQ1JFRiAodW53aW5kZXJzKTsK KyAgc2VsZi0+ZnJhbWVfdW53aW5kZXJzID0gdW53aW5kZXJzOworICBQeV9Y REVDUkVGICh0bXApOworCisgIHJldHVybiAwOworfQorCiAvKiBHZXQgdGhl ICd0eXBlX3ByaW50ZXJzJyBhdHRyaWJ1dGUuICAqLwogCiBzdGF0aWMgUHlP YmplY3QgKgpAQCAtNjUxLDYgKzcwMiw4IEBAIHN0YXRpYyBQeUdldFNldERl ZiBvYmpmaWxlX2dldHNldFtdID0KICAgICAiUHJldHR5IHByaW50ZXJzLiIs IE5VTEwgfSwKICAgeyAiZnJhbWVfZmlsdGVycyIsIG9iamZweV9nZXRfZnJh bWVfZmlsdGVycywKICAgICBvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMsICJG cmFtZSBGaWx0ZXJzLiIsIE5VTEwgfSwKKyAgeyAiZnJhbWVfdW53aW5kZXJz Iiwgb2JqZnB5X2dldF9mcmFtZV91bndpbmRlcnMsCisgICAgb2JqZnB5X3Nl dF9mcmFtZV91bndpbmRlcnMsICJGcmFtZSBVbndpbmRlcnMiLCBOVUxMIH0s CiAgIHsgInR5cGVfcHJpbnRlcnMiLCBvYmpmcHlfZ2V0X3R5cGVfcHJpbnRl cnMsIG9iamZweV9zZXRfdHlwZV9wcmludGVycywKICAgICAiVHlwZSBwcmlu dGVycy4iLCBOVUxMIH0sCiAgIHsgInhtZXRob2RzIiwgb2JqZnB5X2dldF94 bWV0aG9kcywgTlVMTCwKZGlmZiAtLWdpdCBhL2dkYi9weXRob24vcHktcHJv Z3NwYWNlLmMgYi9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCmluZGV4IDkz ZmJjMTQuLjE3ZGEzZDEgMTAwNjQ0Ci0tLSBhL2dkYi9weXRob24vcHktcHJv Z3NwYWNlLmMKKysrIGIvZ2RiL3B5dGhvbi9weS1wcm9nc3BhY2UuYwpAQCAt NDEsNiArNDEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QKIAogICAvKiBUaGUgZnJh bWUgZmlsdGVyIGxpc3Qgb2YgZnVuY3Rpb25zLiAgKi8KICAgUHlPYmplY3Qg KmZyYW1lX2ZpbHRlcnM7CisKKyAgLyogVGhlIGZyYW1lIHVud2luZGVyIGxp c3QuICAqLworICBQeU9iamVjdCAqZnJhbWVfdW53aW5kZXJzOworCiAgIC8q IFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICovCiAgIFB5T2JqZWN0ICp0eXBl X3ByaW50ZXJzOwogCkBAIC04Miw2ICs4Niw3IEBAIHBzcHlfZGVhbGxvYyAo UHlPYmplY3QgKnNlbGYpCiAgIFB5X1hERUNSRUYgKHBzX3NlbGYtPmRpY3Qp OwogICBQeV9YREVDUkVGIChwc19zZWxmLT5wcmludGVycyk7CiAgIFB5X1hE RUNSRUYgKHBzX3NlbGYtPmZyYW1lX2ZpbHRlcnMpOworICBQeV9YREVDUkVG IChwc19zZWxmLT5mcmFtZV91bndpbmRlcnMpOwogICBQeV9YREVDUkVGIChw c19zZWxmLT50eXBlX3ByaW50ZXJzKTsKICAgUHlfWERFQ1JFRiAocHNfc2Vs Zi0+eG1ldGhvZHMpOwogICBQeV9UWVBFIChzZWxmKS0+dHBfZnJlZSAoc2Vs Zik7CkBAIC0xMDQsNiArMTA5LDEwIEBAIHBzcHlfaW5pdGlhbGl6ZSAocHNw YWNlX29iamVjdCAqc2VsZikKICAgaWYgKHNlbGYtPmZyYW1lX2ZpbHRlcnMg PT0gTlVMTCkKICAgICByZXR1cm4gMDsKIAorICBzZWxmLT5mcmFtZV91bndp bmRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKKyAgaWYgKHNlbGYtPmZyYW1lX3Vu d2luZGVycyA9PSBOVUxMKQorICAgIHJldHVybiAwOworCiAgIHNlbGYtPnR5 cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKICAgaWYgKHNlbGYtPnR5 cGVfcHJpbnRlcnMgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKQEAgLTIxMSw2 ICsyMjAsNDggQEAgcHNweV9zZXRfZnJhbWVfZmlsdGVycyAoUHlPYmplY3Qg Km8sIFB5T2JqZWN0ICpmcmFtZSwgdm9pZCAqaWdub3JlKQogICByZXR1cm4g MDsKIH0KIAorLyogUmV0dXJuIHRoZSBsaXN0IG9mIHRoZSBmcmFtZSB1bndp bmRlcnMgZm9yIHRoaXMgcHJvZ3JhbSBzcGFjZS4gICovCisKK1B5T2JqZWN0 ICoKK3BzcHlfZ2V0X2ZyYW1lX3Vud2luZGVycyAoUHlPYmplY3QgKm8sIHZv aWQgKmlnbm9yZSkKK3sKKyAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChwc3Bh Y2Vfb2JqZWN0ICopIG87CisKKyAgUHlfSU5DUkVGIChzZWxmLT5mcmFtZV91 bndpbmRlcnMpOworICByZXR1cm4gc2VsZi0+ZnJhbWVfdW53aW5kZXJzOwor fQorCisvKiBTZXQgdGhpcyBwcm9ncmFtIHNwYWNlJ3MgbGlzdCBvZiB0aGUg dW53aW5kZXJzIHRvIFVOV0lOREVSUy4gICovCisKK3N0YXRpYyBpbnQKK3Bz cHlfc2V0X2ZyYW1lX3Vud2luZGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0 ICp1bndpbmRlcnMsIHZvaWQgKmlnbm9yZSkKK3sKKyAgUHlPYmplY3QgKnRt cDsKKyAgcHNwYWNlX29iamVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0ICop IG87CisKKyAgaWYgKCF1bndpbmRlcnMpCisgICAgeworICAgICAgUHlFcnJf U2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisJCSAgICAgICAiY2Fubm90 IGRlbGV0ZSB0aGUgZnJhbWUgdW53aW5kZXJzIGxpc3QiKTsKKyAgICAgIHJl dHVybiAtMTsKKyAgICB9CisKKyAgaWYgKCFQeUxpc3RfQ2hlY2sgKHVud2lu ZGVycykpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19U eXBlRXJyb3IsCisJCSAgICAgICAidGhlIGZyYW1lIHVud2luZGVycyBhdHRy aWJ1dGUgbXVzdCBiZSBhIGxpc3QiKTsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CisKKyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQgUkhT IGFyZSByZWxhdGVkIHNvbWVob3cuICAqLworICB0bXAgPSBzZWxmLT5mcmFt ZV91bndpbmRlcnM7CisgIFB5X0lOQ1JFRiAodW53aW5kZXJzKTsKKyAgc2Vs Zi0+ZnJhbWVfdW53aW5kZXJzID0gdW53aW5kZXJzOworICBQeV9YREVDUkVG ICh0bXApOworCisgIHJldHVybiAwOworfQorCiAvKiBHZXQgdGhlICd0eXBl X3ByaW50ZXJzJyBhdHRyaWJ1dGUuICAqLwogCiBzdGF0aWMgUHlPYmplY3Qg KgpAQCAtMzQ1LDYgKzM5Niw4IEBAIHN0YXRpYyBQeUdldFNldERlZiBwc3Bh Y2VfZ2V0c2V0W10gPQogICAgICJQcmV0dHkgcHJpbnRlcnMuIiwgTlVMTCB9 LAogICB7ICJmcmFtZV9maWx0ZXJzIiwgcHNweV9nZXRfZnJhbWVfZmlsdGVy cywgcHNweV9zZXRfZnJhbWVfZmlsdGVycywKICAgICAiRnJhbWUgZmlsdGVy cy4iLCBOVUxMIH0sCisgIHsgImZyYW1lX3Vud2luZGVycyIsIHBzcHlfZ2V0 X2ZyYW1lX3Vud2luZGVycywgcHNweV9zZXRfZnJhbWVfdW53aW5kZXJzLAor ICAgICJGcmFtZSB1bndpbmRlcnMuIiwgTlVMTCB9LAogICB7ICJ0eXBlX3By aW50ZXJzIiwgcHNweV9nZXRfdHlwZV9wcmludGVycywgcHNweV9zZXRfdHlw ZV9wcmludGVycywKICAgICAiVHlwZSBwcmludGVycy4iLCBOVUxMIH0sCiAg IHsgInhtZXRob2RzIiwgcHNweV9nZXRfeG1ldGhvZHMsIE5VTEwsCmRpZmYg LS1naXQgYS9nZGIvcHl0aG9uL3B5LXVud2luZC5jIGIvZ2RiL3B5dGhvbi9w eS11bndpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5iY2ZlYTRiCi0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3B5dGhvbi9weS11 bndpbmQuYwpAQCAtMCwwICsxLDc4OCBAQAorLyogUHl0aG9uIGZyYW1lIHVu d2luZGVyIGludGVyZmFjZS4KKworICAgQ29weXJpZ2h0IChDKSAyMDE1IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiYXJjaC11dGlscy5o IgorI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorI2luY2x1ZGUgImdkYl9v YnN0YWNrLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVkZSAibGFu Z3VhZ2UuaCIKKyNpbmNsdWRlICJvYnNlcnZlci5oIgorI2luY2x1ZGUgInB5 dGhvbi1pbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5j bHVkZSAidmFscHJpbnQuaCIKKyNpbmNsdWRlICJ1c2VyLXJlZ3MuaCIKKwor I2RlZmluZSBUUkFDRV9QWV9VTldJTkQobGV2ZWwsIGFyZ3MuLi4pIGlmIChw eXV3X2RlYnVnID49IGxldmVsKSAgXAorICB7IGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywgYXJncyk7IH0KKwordHlwZWRlZiBzdHJ1Y3QKK3sK KyAgUHlPYmplY3RfSEVBRAorCisgIC8qIEZyYW1lIHdlIGFyZSB1bndpbmRp bmcuICAqLworICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWVfaW5mbzsKKwor ICAvKiBJdHMgYXJjaGl0ZWN0dXJlLCBwYXNzZWQgYnkgdGhlIHNuaWZmZXIg Y2FsbGVyLiAgKi8KKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7Cit9IHBl bmRpbmdfZnJhbWVfb2JqZWN0OworCisvKiBTYXZlZCByZWdpc3RlcnMgYXJy YXkgaXRlbS4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCBudW1i ZXI7CisgIFB5T2JqZWN0ICp2YWx1ZTsKK30gc2F2ZWRfcmVnOworREVGX1ZF Q19PIChzYXZlZF9yZWcpOworCisvKiBUaGUgZGF0YSB3ZSBrZWVwIGZvciB0 aGUgUHlVbndpbmRJbmZvOiBwZW5kaW5nX2ZyYW1lLCBzYXZlZCByZWdpc3Rl cnMKKyAgIGFuZCBmcmFtZSBJRC4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7 CisgIFB5T2JqZWN0X0hFQUQKKworICAvKiBnZGIuUGVuZGluZ0ZyYW1lIGZv ciB0aGUgZnJhbWUgd2UgYXJlIHVud2luZGluZy4gICovCisgIFB5T2JqZWN0 ICpwZW5kaW5nX2ZyYW1lOworCisgIC8qIEl0cyBJRC4gICovCisgIHN0cnVj dCBmcmFtZV9pZCBmcmFtZV9pZDsKKworICAvKiBTYXZlZCByZWdpc3RlcnMg YXJyYXkuICAqLworICBWRUMgKHNhdmVkX3JlZykgKnNhdmVkX3JlZ3M7Cit9 IHVud2luZF9pbmZvX29iamVjdDsKKworLyogVGhlIGRhdGEgd2Uga2VlcCBm b3IgYSBmcmFtZSB3ZSBjYW4gdW53aW5kOiBmcmFtZSBJRCBhbmQgYW4gYXJy YXkgb2YKKyAgIChyZWdpc3Rlcl9udW1iZXIsIHJlZ2lzdGVyX3ZhbHVlKSBw YWlycy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIEZyYW1lIElE LiAgKi8KKyAgc3RydWN0IGZyYW1lX2lkIGZyYW1lX2lkOworCisgIC8qIEdE QiBBcmNoaXRlY3R1cmUuICAqLworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJj aDsKKworICAvKiBMZW5ndGggb2YgdGhlIGByZWcnIGFycmF5IGJlbG93LiAg Ki8KKyAgaW50IHJlZ19jb3VudDsKKworICBzdHJ1Y3QgcmVnX2luZm8KKyAg eworICAgIC8qIFJlZ2lzdGVyIG51bWJlci4gICovCisgICAgaW50IG51bWJl cjsKKworICAgIC8qIFJlZ2lzdGVyIGRhdGEgYnl0ZXMgcG9pbnRlci4gICov CisgICAgZ2RiX2J5dGUgZGF0YVtNQVhfUkVHSVNURVJfU0laRV07CisgIH0g cmVnW107Cit9IGNhY2hlZF9mcmFtZV9pbmZvOworCitzdGF0aWMgUHlUeXBl T2JqZWN0IHBlbmRpbmdfZnJhbWVfb2JqZWN0X3R5cGUKKyAgICBDUFlDSEVD S0VSX1RZUEVfT0JKRUNUX0ZPUl9UWVBFREVGICgicGVuZGluZ19mcmFtZV9v YmplY3QiKTsKKworc3RhdGljIFB5VHlwZU9iamVjdCB1bndpbmRfaW5mb19v YmplY3RfdHlwZQorICAgIENQWUNIRUNLRVJfVFlQRV9PQkpFQ1RfRk9SX1RZ UEVERUYgKCJ1bndpbmRfaW5mb19vYmplY3QiKTsKKworc3RhdGljIHVuc2ln bmVkIGludCBweXV3X2RlYnVnID0gMDsKKworc3RhdGljIHN0cnVjdCBnZGJh cmNoX2RhdGEgKnB5dXdfZ2RiYXJjaF9kYXRhOworCisvKiBQYXJzZXMgcmVn aXN0ZXIgaWQsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYSBu YW1lLgorICAgUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb3RoZXJ3aXNlLiAg Ki8KKworc3RhdGljIGludAorcHl1d19wYXJzZV9yZWdpc3Rlcl9pZCAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsIFB5T2JqZWN0ICpweW9fcmVnX2lkLAor ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZWdfbnVtKQoreworICBp ZiAocHlvX3JlZ19pZCA9PSBOVUxMKQorICAgIHJldHVybiAwOworICBpZiAo Z2RicHlfaXNfc3RyaW5nIChweW9fcmVnX2lkKSkKKyAgICB7CisgICAgICBj b25zdCBjaGFyICpyZWdfbmFtZSA9IGdkYnB5X29ial90b19zdHJpbmcgKHB5 b19yZWdfaWQpOworCisgICAgICBpZiAocmVnX25hbWUgPT0gTlVMTCkKKyAg ICAgICAgcmV0dXJuIDA7CisgICAgICAqcmVnX251bSA9IHVzZXJfcmVnX21h cF9uYW1lX3RvX3JlZ251bSAoZ2RiYXJjaCwgcmVnX25hbWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVu IChyZWdfbmFtZSkpOworICAgICAgcmV0dXJuICpyZWdfbnVtID49IDA7Cisg ICAgfQorICBlbHNlIGlmIChQeUludF9DaGVjayAocHlvX3JlZ19pZCkpCisg ICAgeworICAgICAgbG9uZyB2YWx1ZTsKKyAgICAgIGlmIChnZGJfcHlfaW50 X2FzX2xvbmcgKHB5b19yZWdfaWQsICZ2YWx1ZSkgJiYgKGludCkgdmFsdWUg PT0gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAqcmVnX251bSA9IChp bnQpIHZhbHVlOworICAgICAgICAgIHJldHVybiB1c2VyX3JlZ19tYXBfcmVn bnVtX3RvX25hbWUgKGdkYmFyY2gsICpyZWdfbnVtKSAhPSBOVUxMOworICAg ICAgICB9CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogQ29udmVydCBn ZGIuVmFsdWUgaW5zdGFuY2UgdG8gaW5mZXJpb3IncyBwb2ludGVyLiAgUmV0 dXJuIDEgb24gc3VjY2VzcywKKyAgIDAgb24gZmFpbHVyZS4gICovCisKK3N0 YXRpYyBpbnQKK3B5dXdfdmFsdWVfb2JqX3RvX3BvaW50ZXIgKFB5T2JqZWN0 ICpweW9fdmFsdWUsIENPUkVfQUREUiAqYWRkcikKK3sKKyAgaW50IHJjID0g MDsKKyAgc3RydWN0IHZhbHVlICp2YWx1ZTsKKworICBUUlkKKyAgICB7Cisg ICAgICBpZiAoKHZhbHVlID0gdmFsdWVfb2JqZWN0X3RvX3ZhbHVlIChweW9f dmFsdWUpKSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgKmFkZHIg PSB1bnBhY2tfcG9pbnRlciAodmFsdWVfdHlwZSAodmFsdWUpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2NvbnRlbnRzICh2 YWx1ZSkpOworICAgICAgICAgIHJjID0gMTsKKyAgICAgICAgfQorICAgIH0K KyAgQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAg ICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworICAgIH0K KyAgRU5EX0NBVENICisgIHJldHVybiByYzsKK30KKworLyogR2V0IGF0dHJp YnV0ZSBmcm9tIGFuIG9iamVjdCBhbmQgY29udmVydCBpdCB0byB0aGUgaW5m ZXJpb3IncworICAgcG9pbnRlciB2YWx1ZS4gIFJldHVybiAxIGlmIGF0dHJp YnV0ZSBleGlzdHMgYW5kIGl0cyB2YWx1ZSBjYW4gYmUKKyAgIGNvbnZlcnRl ZC4gIE90aGVyd2lzZSwgaWYgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0IG9y IGl0cyB2YWx1ZSBpcworICAgTm9uZSwgcmV0dXJuIDAuICBJbiBhbGwgb3Ro ZXIgY2FzZXMgc2V0IFB5dGhvbiBlcnJvciBhbmQgcmV0dXJuCisgICAwLiAg Ki8KKworc3RhdGljIGludAorcHl1d19vYmplY3RfYXR0cmlidXRlX3RvX3Bv aW50ZXIgKFB5T2JqZWN0ICpweW8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JFX0FERFIg KmFkZHIpCit7CisgIGludCByYyA9IDA7CisKKyAgaWYgKFB5T2JqZWN0X0hh c0F0dHJTdHJpbmcgKHB5bywgYXR0cl9uYW1lKSkKKyAgICB7CisgICAgICBQ eU9iamVjdCAqcHlvX3ZhbHVlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyAo cHlvLCBhdHRyX25hbWUpOworICAgICAgc3RydWN0IHZhbHVlICp2YWx1ZTsK KworICAgICAgaWYgKHB5b192YWx1ZSAhPSBOVUxMICYmIHB5b192YWx1ZSAh PSBQeV9Ob25lKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSBweXV3X3Zh bHVlX29ial90b19wb2ludGVyIChweW9fdmFsdWUsIGFkZHIpOworICAgICAg ICAgIGlmICghcmMpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQgKAorICAg ICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAg ICAgXygiVGhlIHZhbHVlIG9mIHRoZSAnJXMnIGF0dHJpYnV0ZSBpcyBub3Qg YSBwb2ludGVyLiIpLAorICAgICAgICAgICAgICAgIGF0dHJfbmFtZSk7Cisg ICAgICAgIH0KKyAgICAgIFB5X1hERUNSRUYgKHB5b192YWx1ZSk7CisgICAg fQorICByZXR1cm4gcmM7Cit9CisKKy8qIENhbGxlZCBieSB0aGUgUHl0aG9u IGludGVycHJldGVyIHRvIG9idGFpbiBzdHJpbmcgcmVwcmVzZW50YXRpb24K KyAgIG9mIHRoZSBVbndpbmRJbmZvIG9iamVjdC4gICovCisKK3N0YXRpYyBQ eU9iamVjdCAqCit1bndpbmRfaW5mb3B5X3N0ciAoUHlPYmplY3QgKnNlbGYp Cit7CisgIHN0cnVjdCB1aV9maWxlICpzdHJmaWxlID0gbWVtX2ZpbGVvcGVu ICgpOworICB1bndpbmRfaW5mb19vYmplY3QgKnVud2luZF9pbmZvID0gKHVu d2luZF9pbmZvX29iamVjdCAqKSBzZWxmOworICBwZW5kaW5nX2ZyYW1lX29i amVjdCAqcGVuZGluZ19mcmFtZQorICAgICAgPSAocGVuZGluZ19mcmFtZV9v YmplY3QgKikgKHVud2luZF9pbmZvLT5wZW5kaW5nX2ZyYW1lKTsKKyAgUHlP YmplY3QgKnJlc3VsdDsKKworICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZp bGUsICJGcmFtZSBJRDogIik7CisgIGZwcmludF9mcmFtZV9pZCAoc3RyZmls ZSwgdW53aW5kX2luZm8tPmZyYW1lX2lkKTsKKyAgeworICAgIGNoYXIgKnNl cCA9ICIiOworICAgIGludCBpOworICAgIHN0cnVjdCB2YWx1ZV9wcmludF9v cHRpb25zIG9wdHM7CisgICAgc2F2ZWRfcmVnICpyZWc7CisKKyAgICBnZXRf dXNlcl9wcmludF9vcHRpb25zICgmb3B0cyk7CisgICAgZnByaW50Zl91bmZp bHRlcmVkIChzdHJmaWxlLCAiXG5TYXZlZCByZWdpc3RlcnM6ICgiKTsKKyAg ICBmb3IgKGkgPSAwOworICAgICAgICAgaSA8IFZFQ19pdGVyYXRlIChzYXZl ZF9yZWcsIHVud2luZF9pbmZvLT5zYXZlZF9yZWdzLCBpLCByZWcpOworICAg ICAgICAgaSsrKQorICAgICAgeworICAgICAgICBzdHJ1Y3QgdmFsdWUgKnZh bHVlID0gdmFsdWVfb2JqZWN0X3RvX3ZhbHVlIChyZWctPnZhbHVlKTsKKwor ICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKHN0cmZpbGUsICIlcyglZCwg Iiwgc2VwLCByZWctPm51bWJlcik7CisgICAgICAgIGlmICh2YWx1ZSAhPSBO VUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIFRSWQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgdmFsdWVfcHJpbnQgKHZhbHVlLCBz dHJmaWxlLCAmb3B0cyk7CisgICAgICAgICAgICAgICAgZnByaW50Zl91bmZp bHRlcmVkIChzdHJmaWxlLCAiKSIpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICBDQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHREJfUFlfSEFORExFX0VY Q0VQVElPTiAoZXhjZXB0KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgRU5EX0NBVENICisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChzdHJmaWxlLCAiPEJBRD4pIik7 CisgICAgICAgIHNlcCA9ICIsICI7CisgICAgICB9CisgICAgZnByaW50Zl91 bmZpbHRlcmVkIChzdHJmaWxlLCAiKSIpOworICB9CisgIHsKKyAgICBjaGFy ICpzID0gdWlfZmlsZV94c3RyZHVwIChzdHJmaWxlLCBOVUxMKTsKKworICAg IHJlc3VsdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKHMpOworICAgIHhmcmVl IChzKTsKKyAgfQorICB1aV9maWxlX2RlbGV0ZSAoc3RyZmlsZSk7CisgIHJl dHVybiByZXN1bHQ7Cit9CisKKy8qIENyZWF0ZSBVbndpbmRJbmZvIGluc3Rh bmNlIGZvciBnaXZlbiBQZW5kaW5nRnJhbWUgYW5kIGZyYW1lIElELgorICAg U2V0cyBQeXRob24gZXJyb3IgYW5kIHJldHVybnMgTlVMTCBvbiBlcnJvci4g ICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitweXV3X2NyZWF0ZV91bndpbmRf aW5mbyAoUHlPYmplY3QgKnB5b19wZW5kaW5nX2ZyYW1lLAorICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBmcmFtZV9pZCBmcmFtZV9pZCkKK3sK KyAgdW53aW5kX2luZm9fb2JqZWN0ICp1bndpbmRfaW5mbworICAgICAgPSBQ eU9iamVjdF9OZXcgKHVud2luZF9pbmZvX29iamVjdCwgJnVud2luZF9pbmZv X29iamVjdF90eXBlKTsKKworICBpZiAoKChwZW5kaW5nX2ZyYW1lX29iamVj dCAqKSBweW9fcGVuZGluZ19mcmFtZSktPmZyYW1lX2luZm8gPT0gTlVMTCkK KyAgICB7CisgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJy b3IsCisgICAgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0aW5nIHRvIHVz ZSBzdGFsZSBQZW5kaW5nRnJhbWUiKTsKKyAgICAgIHJldHVybiBOVUxMOwor ICAgIH0KKyAgdW53aW5kX2luZm8tPmZyYW1lX2lkID0gZnJhbWVfaWQ7Cisg IFB5X0lOQ1JFRiAocHlvX3BlbmRpbmdfZnJhbWUpOworICB1bndpbmRfaW5m by0+cGVuZGluZ19mcmFtZSA9IHB5b19wZW5kaW5nX2ZyYW1lOworICB1bndp bmRfaW5mby0+c2F2ZWRfcmVncyA9IFZFQ19hbGxvYyAoc2F2ZWRfcmVnLCA0 KTsKKyAgcmV0dXJuIChQeU9iamVjdCAqKSB1bndpbmRfaW5mbzsKK30KKwor LyogVGhlIGltcGxlbWVudGF0aW9uIG9mCisgICBnZGIuVW53aW5kSW5mby5h ZGRfc2F2ZWRfcmVnaXN0ZXIgKFJFRywgVkFMVUUpIC0+IE5vbmUuICAqLwor CitzdGF0aWMgUHlPYmplY3QgKgordW53aW5kX2luZm9weV9hZGRfc2F2ZWRf cmVnaXN0ZXIgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sK KyAgdW53aW5kX2luZm9fb2JqZWN0ICp1bndpbmRfaW5mbyA9ICh1bndpbmRf aW5mb19vYmplY3QgKikgc2VsZjsKKyAgcGVuZGluZ19mcmFtZV9vYmplY3Qg KnBlbmRpbmdfZnJhbWUKKyAgICAgID0gKHBlbmRpbmdfZnJhbWVfb2JqZWN0 ICopICh1bndpbmRfaW5mby0+cGVuZGluZ19mcmFtZSk7CisgIFB5T2JqZWN0 ICpweW9fcmVnX2lkOworICBQeU9iamVjdCAqcHlvX3JlZ192YWx1ZTsKKyAg aW50IHJlZ251bTsKKworICBpZiAocGVuZGluZ19mcmFtZS0+ZnJhbWVfaW5m byA9PSBOVUxMKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlF eGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIlVud2lu ZEluZm8gaW5zdGFuY2UgcmVmZXJzIHRvIGEgc3RhbGUgUGVuZGluZ0ZyYW1l Iik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGlmICghUHlBcmdf VW5wYWNrVHVwbGUgKGFyZ3MsICJwcmV2aW91c19mcmFtZV9yZWdpc3RlciIs IDIsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZweW9fcmVnX2lk LCAmcHlvX3JlZ192YWx1ZSkpCisgICAgcmV0dXJuIE5VTEw7CisgIGlmICgh cHl1d19wYXJzZV9yZWdpc3Rlcl9pZCAocGVuZGluZ19mcmFtZS0+Z2RiYXJj aCwgcHlvX3JlZ19pZCwgJnJlZ251bSkpCisgICAgeworICAgICAgUHlFcnJf U2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLCAiQmFkIHJlZ2lzdGVyIik7 CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHsKKyAgICBzdHJ1Y3Qg dmFsdWUgKnZhbHVlOworICAgIHNpemVfdCBkYXRhX3NpemU7CisKKyAgICBp ZiAocHlvX3JlZ192YWx1ZSA9PSBOVUxMCisgICAgICB8fCAodmFsdWUgPSB2 YWx1ZV9vYmplY3RfdG9fdmFsdWUgKHB5b19yZWdfdmFsdWUpKSA9PSBOVUxM KQorICAgICAgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1Zh bHVlRXJyb3IsICJCYWQgcmVnaXN0ZXIgdmFsdWUiKTsKKyAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgICB9CisgICAgZGF0YV9zaXplID0gcmVnaXN0ZXJf c2l6ZSAocGVuZGluZ19mcmFtZS0+Z2RiYXJjaCwgcmVnbnVtKTsKKyAgICBp ZiAoZGF0YV9zaXplICE9IFRZUEVfTEVOR1RIICh2YWx1ZV90eXBlICh2YWx1 ZSkpKQorICAgICAgeworICAgICAgICBQeUVycl9Gb3JtYXQgKAorICAgICAg ICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICJUaGUgdmFs dWUgb2YgdGhlIHJlZ2lzdGVyIHJldHVybmVkIGJ5IHRoZSBQeXRob24gIgor ICAgICAgICAgICAgInNuaWZmZXIgaGFzIHVuZXhwZWN0ZWQgc2l6ZTogJXUg aW5zdGVhZCBvZiAldS4iLAorICAgICAgICAgICAgKHVuc2lnbmVkKSBUWVBF X0xFTkdUSCAodmFsdWVfdHlwZSAodmFsdWUpKSwKKyAgICAgICAgICAgICh1 bnNpZ25lZCkgZGF0YV9zaXplKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgICB9CisgIH0KKyAgeworICAgIGludCBpOworICAgIHNhdmVkX3JlZyAq cmVnOworCisgICAgZm9yIChpID0gMDsgVkVDX2l0ZXJhdGUgKHNhdmVkX3Jl ZywgdW53aW5kX2luZm8tPnNhdmVkX3JlZ3MsIGksIHJlZyk7IGkrKykKKyAg ICAgIHsKKyAgICAgICAgaWYgKHJlZ251bSA9PSByZWctPm51bWJlcikKKyAg ICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYgKHJlZy0+dmFsdWUp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQor ICAgIGlmIChyZWcgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgICAgcmVnID0g VkVDX3NhZmVfcHVzaCAoc2F2ZWRfcmVnLCB1bndpbmRfaW5mby0+c2F2ZWRf cmVncywgTlVMTCk7CisgICAgICAgIHJlZy0+bnVtYmVyID0gcmVnbnVtOwor ICAgICAgfQorICAgIFB5X0lOQ1JFRiAocHlvX3JlZ192YWx1ZSk7CisgICAg cmVnLT52YWx1ZSA9IHB5b19yZWdfdmFsdWU7CisgIH0KKyAgUHlfUkVUVVJO X05PTkU7Cit9CisKKy8qIFVud2luZEluZm8gY2xlYW51cC4gICovCisKK3N0 YXRpYyB2b2lkCit1bndpbmRfaW5mb3B5X2RlYWxsb2MgKFB5T2JqZWN0ICpz ZWxmKQoreworICB1bndpbmRfaW5mb19vYmplY3QgKnVud2luZF9pbmZvID0g KHVud2luZF9pbmZvX29iamVjdCAqKSBzZWxmOworICBpbnQgaTsKKyAgc2F2 ZWRfcmVnICpyZWc7CisKKyAgUHlfWERFQ1JFRiAodW53aW5kX2luZm8tPnBl bmRpbmdfZnJhbWUpOworICBmb3IgKGkgPSAwOyBWRUNfaXRlcmF0ZSAoc2F2 ZWRfcmVnLCB1bndpbmRfaW5mby0+c2F2ZWRfcmVncywgaSwgcmVnKTsgaSsr KQorICAgICAgUHlfREVDUkVGIChyZWctPnZhbHVlKTsKKyAgVkVDX2ZyZWUg KHNhdmVkX3JlZywgdW53aW5kX2luZm8tPnNhdmVkX3JlZ3MpOworICBQeV9U WVBFIChzZWxmKS0+dHBfZnJlZSAoc2VsZik7Cit9CisKKy8qIENhbGxlZCBi eSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRvIG9idGFpbiBzdHJpbmcgcmVw cmVzZW50YXRpb24KKyAgIG9mIHRoZSBQZW5kaW5nRnJhbWUgb2JqZWN0LiAg Ki8KKworc3RhdGljIFB5T2JqZWN0ICoKK3BlbmRpbmdfZnJhbWVweV9zdHIg KFB5T2JqZWN0ICpzZWxmKQoreworICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJh bWUgPSAoKHBlbmRpbmdfZnJhbWVfb2JqZWN0ICopIHNlbGYpLT5mcmFtZV9p bmZvOworICBjb25zdCBjaGFyICpzcF9zdHIgPSBOVUxMOworICBjb25zdCBj aGFyICpwY19zdHIgPSBOVUxMOworCisgIGlmIChmcmFtZSA9PSBOVUxMKQor ICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nICgiU3RhbGUgUGVuZGlu Z0ZyYW1lIGluc3RhbmNlIik7CisgIFRSWQorICAgIHsKKyAgICAgIHNwX3N0 ciA9IGNvcmVfYWRkcl90b19zdHJpbmdfbnogKGdldF9mcmFtZV9zcCAoZnJh bWUpKTsKKyAgICAgIHBjX3N0ciA9IGNvcmVfYWRkcl90b19zdHJpbmdfbnog KGdldF9mcmFtZV9wYyAoZnJhbWUpKTsKKyAgICB9CisgIENBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKKyAgICB7CisgICAgICBHREJfUFlfSEFO RExFX0VYQ0VQVElPTiAoZXhjZXB0KTsKKyAgICB9CisgIEVORF9DQVRDSAor CisgIHJldHVybiBQeVN0cmluZ19Gcm9tRm9ybWF0ICgiU1A9JXMsUEM9JXMi LCBzcF9zdHIsIHBjX3N0cik7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9m IGdkYi5QZW5kaW5nRnJhbWUucmVhZF9yZWdpc3RlciAoc2VsZiwgcmVnKSAt PiBnZGIuVmFsdWUuCisgICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdpc3Rl ciBSRUcgYXMgZ2RiLlZhbHVlIGluc3RhbmNlLiAgKi8KKworc3RhdGljIFB5 T2JqZWN0ICoKK3BlbmRpbmdfZnJhbWVweV9yZWFkX3JlZ2lzdGVyIChQeU9i amVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIHBlbmRpbmdfZnJh bWVfb2JqZWN0ICpwZW5kaW5nX2ZyYW1lID0gKHBlbmRpbmdfZnJhbWVfb2Jq ZWN0ICopIHNlbGY7CisgIHN0cnVjdCB2YWx1ZSAqdmFsID0gTlVMTDsKKyAg aW50IHJlZ251bTsKKyAgUHlPYmplY3QgKnB5b19yZWdfaWQ7CisKKyAgaWYg KHBlbmRpbmdfZnJhbWUtPmZyYW1lX2luZm8gPT0gTlVMTCkKKyAgICB7Cisg ICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAg ICAgICAgICAgICAgICAgICAgICJBdHRlbXB0aW5nIHRvIHJlYWQgcmVnaXN0 ZXIgZnJvbSBzdGFsZSBQZW5kaW5nRnJhbWUiKTsKKyAgICAgIHJldHVybiBO VUxMOworICAgIH0KKyAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZSAoYXJncywg InJlYWRfcmVnaXN0ZXIiLCAxLCAxLCAmcHlvX3JlZ19pZCkpCisgICAgcmV0 dXJuIE5VTEw7CisgIGlmICghcHl1d19wYXJzZV9yZWdpc3Rlcl9pZCAocGVu ZGluZ19mcmFtZS0+Z2RiYXJjaCwgcHlvX3JlZ19pZCwgJnJlZ251bSkpCisg ICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9y LCAiQmFkIHJlZ2lzdGVyIik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9 CisKKyAgVFJZCisgICAgeworICAgICAgdmFsID0gZ2V0X2ZyYW1lX3JlZ2lz dGVyX3ZhbHVlIChwZW5kaW5nX2ZyYW1lLT5mcmFtZV9pbmZvLCByZWdudW0p OworICAgICAgaWYgKHZhbCA9PSBOVUxMKQorICAgICAgICBQeUVycl9Gb3Jt YXQgKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg IkNhbm5vdCByZWFkIHJlZ2lzdGVyICVkIGZyb20gZnJhbWUuIiwKKyAgICAg ICAgICAgICAgICAgICAgICByZWdudW0pOworICAgIH0KKyAgQ0FUQ0ggKGV4 Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorICAgIHsKKyAgICAgIEdEQl9QWV9I QU5ETEVfRVhDRVBUSU9OIChleGNlcHQpOworICAgIH0KKyAgRU5EX0NBVENI CisKKyAgcmV0dXJuIHZhbCA9PSBOVUxMID8gTlVMTCA6IHZhbHVlX3RvX3Zh bHVlX29iamVjdCAodmFsKTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YK KyAgIFBlbmRpbmdGcmFtZS5jcmVhdGVfdW53aW5kX2luZm8gKHNlbGYsIGZy YW1lSWQpIC0+IFVud2luZEluZm8uICAqLworCitzdGF0aWMgUHlPYmplY3Qg KgorcGVuZGluZ19mcmFtZXB5X2NyZWF0ZV91bndpbmRfaW5mbyAoUHlPYmpl Y3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICBQeU9iamVjdCAqcHlv X2ZyYW1lX2lkOworICBDT1JFX0FERFIgc3A7CisgIENPUkVfQUREUiBwYzsK KyAgQ09SRV9BRERSIHNwZWNpYWw7CisKKyAgaWYgKCFQeUFyZ19QYXJzZVR1 cGxlIChhcmdzLCAiTzpjcmVhdGVfdW53aW5kX2luZm8iLCAmcHlvX2ZyYW1l X2lkKSkKKyAgICAgIHJldHVybiBOVUxMOworICBpZiAoIXB5dXdfb2JqZWN0 X2F0dHJpYnV0ZV90b19wb2ludGVyIChweW9fZnJhbWVfaWQsICJzcCIsICZz cCkpCisgICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1 ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICBfKCJmcmFtZV9pZCBz aG91bGQgaGF2ZSAnc3AnIGF0dHJpYnV0ZS4iKSk7CisgICAgICByZXR1cm4g TlVMTDsKKyAgICB9CisKKyAgLyogVGhlIGxvZ2ljIG9mIGJ1aWxkaW5nIGZy YW1lX2lkIGRlcGVuZGluZyBvbiB0aGUgYXR0cmlidXRlcyBvZgorICAgICB0 aGUgZnJhbWVfaWQgb2JqZWN0OgorICAgICBIYXMgICAgIEhhcyAgICBIYXMg ICAgICAgICAgIEZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgJ3NwJz8gICAncGMn PyAgJ3NwZWNpYWwnPworICAgICAtLS0tLS18LS0tLS0tfC0tLS0tLS0tLS0t LS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgWSAgICAgICBO ICAgICAgKiAgICAgICAgICAgICBmcmFtZV9pZF9idWlsZF93aWxkIChzcCkK KyAgICAgWSAgICAgICBZICAgICAgTiAgICAgICAgICAgICBmcmFtZV9pZF9i dWlsZCAoc3AsIHBjKQorICAgICBZICAgICAgIFkgICAgICBZICAgICAgICAg ICAgIGZyYW1lX2lkX2J1aWxkX3NwZWNpYWwgKHNwLCBwYywgc3BlY2lhbCkK KyAgKi8KKyAgaWYgKCFweXV3X29iamVjdF9hdHRyaWJ1dGVfdG9fcG9pbnRl ciAocHlvX2ZyYW1lX2lkLCAicGMiLCAmcGMpKQorICAgIHJldHVybiBweXV3 X2NyZWF0ZV91bndpbmRfaW5mbyAoc2VsZiwgZnJhbWVfaWRfYnVpbGRfd2ls ZCAoc3ApKTsKKyAgaWYgKCFweXV3X29iamVjdF9hdHRyaWJ1dGVfdG9fcG9p bnRlciAocHlvX2ZyYW1lX2lkLCAic3BlY2lhbCIsICZzcGVjaWFsKSkKKyAg ICByZXR1cm4gcHl1d19jcmVhdGVfdW53aW5kX2luZm8gKHNlbGYsIGZyYW1l X2lkX2J1aWxkIChzcCwgcGMpKTsKKyAgZWxzZQorICAgIHJldHVybiBweXV3 X2NyZWF0ZV91bndpbmRfaW5mbyAoc2VsZiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZyYW1lX2lkX2J1aWxkX3NwZWNpYWwgKHNw LCBwYywgc3BlY2lhbCkpOworfQorCisvKiBJbnZhbGlkYXRlIFBlbmRpbmdG cmFtZSBpbnN0YW5jZS4gICovCisKK3N0YXRpYyB2b2lkCitwZW5kaW5nX2Zy YW1lX2ludmFsaWRhdGUgKHZvaWQgKnB5b19wZW5kaW5nX2ZyYW1lKQorewor ICBpZiAocHlvX3BlbmRpbmdfZnJhbWUgIT0gTlVMTCkKKyAgICAoKHBlbmRp bmdfZnJhbWVfb2JqZWN0ICopIHB5b19wZW5kaW5nX2ZyYW1lKS0+ZnJhbWVf aW5mbyA9IE5VTEw7Cit9CisKKy8qIGZyYW1lX3Vud2luZC50aGlzX2lkIG1l dGhvZC4gICovCisKK3N0YXRpYyB2b2lkCitweXV3X3RoaXNfaWQgKHN0cnVj dCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqY2FjaGVfcHRyLAor ICAgICAgICAgICAgICBzdHJ1Y3QgZnJhbWVfaWQgKnRoaXNfaWQpCit7Cisg ICp0aGlzX2lkID0gKChjYWNoZWRfZnJhbWVfaW5mbyAqKSAqY2FjaGVfcHRy KS0+ZnJhbWVfaWQ7CisgIGlmIChweXV3X2RlYnVnID49IDEpCisgICAgewor ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiJXM6IGZy YW1lX2lkOiAiLCBfX0ZVTkNUSU9OX18pOworICAgICAgZnByaW50X2ZyYW1l X2lkIChnZGJfc3RkbG9nLCAqdGhpc19pZCk7CisgICAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJcbiIpOworICAgIH0KK30KKworLyog ZnJhbWVfdW53aW5kLnByZXZfcmVnaXN0ZXIuICAqLworCitzdGF0aWMgc3Ry dWN0IHZhbHVlICoKK3B5dXdfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1l X2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKipjYWNoZV9wdHIsCisgICAgICAg ICAgICAgICAgICAgIGludCByZWdudW0pCit7CisgIGNhY2hlZF9mcmFtZV9p bmZvICpjYWNoZWRfZnJhbWUgPSAqY2FjaGVfcHRyOworICBzdHJ1Y3QgcmVn X2luZm8gKnJlZ19pbmZvID0gY2FjaGVkX2ZyYW1lLT5yZWc7CisgIHN0cnVj dCByZWdfaW5mbyAqcmVnX2luZm9fZW5kID0gcmVnX2luZm8gKyBjYWNoZWRf ZnJhbWUtPnJlZ19jb3VudDsKKworICBUUkFDRV9QWV9VTldJTkQgKDEsICIl cyAoZnJhbWU9JXAsLi4uLHJlZz0lZClcbiIsIF9fRlVOQ1RJT05fXywgdGhp c19mcmFtZSwKKyAgICAgICAgICAgICAgICAgICByZWdudW0pOworICBmb3Ig KDsgcmVnX2luZm8gPCByZWdfaW5mb19lbmQ7ICsrcmVnX2luZm8pCisgICAg eworICAgICAgaWYgKHJlZ251bSA9PSByZWdfaW5mby0+bnVtYmVyKQorICAg ICAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9ieXRlcyAodGhpc19mcmFt ZSwgcmVnbnVtLCByZWdfaW5mby0+ZGF0YSk7CisgICAgfQorCisgIHJldHVy biBmcmFtZV91bndpbmRfZ290X29wdGltaXplZCAodGhpc19mcmFtZSwgcmVn bnVtKTsKK30KKworLyogRnJhbWUgc25pZmZlciBkaXNwYXRjaC4gICovCisK K3N0YXRpYyBpbnQKK3B5dXdfc25pZmZlciAoY29uc3Qgc3RydWN0IGZyYW1l X3Vud2luZCAqc2VsZiwgc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUs CisgICAgICAgICAgICAgIHZvaWQgKipjYWNoZV9wdHIpCit7CisgIHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoID0gKHN0cnVjdCBnZGJhcmNoICopIChzZWxm LT51bndpbmRfZGF0YSk7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwcyA9 IGVuc3VyZV9weXRob25fZW52IChnZGJhcmNoLCBjdXJyZW50X2xhbmd1YWdl KTsKKyAgUHlPYmplY3QgKnB5b19leGVjdXRlOworICBQeU9iamVjdCAqcHlv X3BlbmRpbmdfZnJhbWU7CisgIFB5T2JqZWN0ICpweW9fdW53aW5kX2luZm87 CisgIGNhY2hlZF9mcmFtZV9pbmZvICpjYWNoZWRfZnJhbWU7CisKKyAgVFJB Q0VfUFlfVU5XSU5EICgzLCAiJXMgKFNQPSVzLCBQQz0lcylcbiIsIF9fRlVO Q1RJT05fXywKKyAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJj aCwgZ2V0X2ZyYW1lX3NwICh0aGlzX2ZyYW1lKSksCisgICAgICAgICAgICAg ICAgICAgcGFkZHJlc3MgKGdkYmFyY2gsIGdldF9mcmFtZV9wYyAodGhpc19m cmFtZSkpKTsKKworICAvKiBDcmVhdGUgUGVuZGluZ0ZyYW1lIGluc3RhbmNl IHRvIHBhc3MgdG8gc25pZmZlcnMuICAqLworICBweW9fcGVuZGluZ19mcmFt ZSAgPSAoUHlPYmplY3QgKikgUHlPYmplY3RfTmV3IChwZW5kaW5nX2ZyYW1l X29iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnBlbmRpbmdfZnJhbWVfb2JqZWN0X3R5cGUpOwor ICBpZiAocHlvX3BlbmRpbmdfZnJhbWUgPT0gTlVMTCkKKyAgICBnb3RvIGVy cm9yOworICAoKHBlbmRpbmdfZnJhbWVfb2JqZWN0ICopIHB5b19wZW5kaW5n X2ZyYW1lKS0+Z2RiYXJjaCA9IGdkYmFyY2g7CisgICgocGVuZGluZ19mcmFt ZV9vYmplY3QgKikgcHlvX3BlbmRpbmdfZnJhbWUpLT5mcmFtZV9pbmZvID0g dGhpc19mcmFtZTsKKyAgbWFrZV9jbGVhbnVwIChwZW5kaW5nX2ZyYW1lX2lu dmFsaWRhdGUsICh2b2lkICopIHB5b19wZW5kaW5nX2ZyYW1lKTsKKyAgbWFr ZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlvX3BlbmRpbmdfZnJhbWUpOworCisg IC8qIFJ1biB1bndpbmRlcnMuICAqLworICBpZiAoZ2RiX3B5dGhvbl9tb2R1 bGUgPT0gTlVMTAorICAgICAgfHwgISBQeU9iamVjdF9IYXNBdHRyU3RyaW5n IChnZGJfcHl0aG9uX21vZHVsZSwgImV4ZWN1dGVfdW53aW5kZXJzIikpCisg ICAgeworICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19OYW1lRXJyb3Is CisgICAgICAgICAgICAgICAgICAgICAgICJJbnN0YWxsYXRpb24gZXJyb3I6 IGdkYi5leGVjdXRlX3Vud2luZGVycyBmdW5jdGlvbiAiCisgICAgICAgICAg ICAgICAgICAgICAgICJpcyBtaXNzaW5nIik7CisgICAgICBnb3RvIGVycm9y OworICAgIH0KKyAgcHlvX2V4ZWN1dGUgPSBQeU9iamVjdF9HZXRBdHRyU3Ry aW5nIChnZGJfcHl0aG9uX21vZHVsZSwgImV4ZWN1dGVfdW53aW5kZXJzIik7 CisgIGlmIChweW9fZXhlY3V0ZSA9PSBOVUxMKQorICAgIGdvdG8gZXJyb3I7 CisgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKHB5b19leGVjdXRlKTsKKyAg cHlvX3Vud2luZF9pbmZvCisgICAgICA9IFB5T2JqZWN0X0NhbGxGdW5jdGlv bk9iakFyZ3MgKHB5b19leGVjdXRlLCBweW9fcGVuZGluZ19mcmFtZSwgTlVM TCk7CisgIGlmIChweW9fdW53aW5kX2luZm8gPT0gTlVMTCkKKyAgICBnb3Rv IGVycm9yOworICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChweW9fdW53aW5k X2luZm8pOworICBpZiAocHlvX3Vud2luZF9pbmZvID09IFB5X05vbmUpCisg ICAgZ290byBjYW5ub3RfdW53aW5kOworCisgIC8qIFJlY2VpdmVkIFVud2lu ZEluZm8sIGNhY2hlIGRhdGEuICAqLworICBpZiAoUHlPYmplY3RfSXNJbnN0 YW5jZSAocHlvX3Vud2luZF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKFB5T2JqZWN0ICopICZ1bndpbmRfaW5mb19vYmplY3RfdHlwZSkg PD0gMCkKKyAgICBlcnJvciAoXygiQSBVbndpbmRlciBzaG91bGQgcmV0dXJu IGdkYi5VbndpbmRJbmZvIGluc3RhbmNlLiIpKTsKKworICB7CisgICAgdW53 aW5kX2luZm9fb2JqZWN0ICp1bndpbmRfaW5mbyA9ICh1bndpbmRfaW5mb19v YmplY3QgKikgcHlvX3Vud2luZF9pbmZvOworICAgIGludCByZWdfY291bnQg PSBWRUNfbGVuZ3RoIChzYXZlZF9yZWcsIHVud2luZF9pbmZvLT5zYXZlZF9y ZWdzKTsKKyAgICBzYXZlZF9yZWcgKnJlZzsKKyAgICBpbnQgaTsKKworICAg IGNhY2hlZF9mcmFtZSA9IHhtYWxsb2MgKHNpemVvZiAoKmNhY2hlZF9mcmFt ZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19jb3VudCAq IHNpemVvZiAoY2FjaGVkX2ZyYW1lLT5yZWdbMF0pKTsKKyAgICBjYWNoZWRf ZnJhbWUtPmdkYmFyY2ggPSBnZGJhcmNoOworICAgIGNhY2hlZF9mcmFtZS0+ ZnJhbWVfaWQgPSB1bndpbmRfaW5mby0+ZnJhbWVfaWQ7CisgICAgY2FjaGVk X2ZyYW1lLT5yZWdfY291bnQgPSByZWdfY291bnQ7CisKKyAgICAvKiBQb3B1 bGF0ZSByZWdpc3RlcnMgYXJyYXkuICAqLworICAgIGZvciAoaSA9IDA7IFZF Q19pdGVyYXRlIChzYXZlZF9yZWcsIHVud2luZF9pbmZvLT5zYXZlZF9yZWdz LCBpLCByZWcpOyBpKyspCisgICAgICB7CisgICAgICAgIHN0cnVjdCB2YWx1 ZSAqdmFsdWUgPSB2YWx1ZV9vYmplY3RfdG9fdmFsdWUgKHJlZy0+dmFsdWUp OworICAgICAgICBzaXplX3QgZGF0YV9zaXplID0gcmVnaXN0ZXJfc2l6ZSAo Z2RiYXJjaCwgcmVnLT5udW1iZXIpOworCisgICAgICAgIGNhY2hlZF9mcmFt ZS0+cmVnW2ldLm51bWJlciA9IHJlZy0+bnVtYmVyOworCisgICAgICAgIC8q IGB2YWx1ZScgdmFsaWRhdGlvbiB3YXMgZG9uZSBiZWZvcmUsIGp1c3QgYXNz ZXJ0LiAgKi8KKyAgICAgICAgZ2RiX2Fzc2VydCAodmFsdWUgIT0gTlVMTCk7 CisgICAgICAgIGdkYl9hc3NlcnQgKGRhdGFfc2l6ZSA9PSBUWVBFX0xFTkdU SCAodmFsdWVfdHlwZSAodmFsdWUpKSk7CisgICAgICAgIGdkYl9hc3NlcnQg KGRhdGFfc2l6ZSA8PSBNQVhfUkVHSVNURVJfU0laRSk7CisKKyAgICAgICAg bWVtY3B5IChjYWNoZWRfZnJhbWUtPnJlZ1tpXS5kYXRhLCB2YWx1ZV9jb250 ZW50cyAodmFsdWUpLCBkYXRhX3NpemUpOworICAgICAgfQorICB9CisKKyAg KmNhY2hlX3B0ciA9IGNhY2hlZF9mcmFtZTsKKyAgZG9fY2xlYW51cHMgKGNs ZWFudXBzKTsKKyAgcmV0dXJuIDE7CisKKyBlcnJvcjoKKyAgZ2RicHlfcHJp bnRfc3RhY2sgKCk7CisgIC8qIEZhbGx0aHJvdWdoLiAgKi8KKyBjYW5ub3Rf dW53aW5kOgorICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworICByZXR1cm4g MDsKK30KKworLyogRnJhbWUgY2FjaGUgcmVsZWFzZSBzaGltLiAgKi8KKwor c3RhdGljIHZvaWQKK3B5dXdfZGVhbGxvY19jYWNoZSAoc3RydWN0IGZyYW1l X2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKmNhY2hlKQoreworICBUUkFDRV9Q WV9VTldJTkQgKDMsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworICB4 ZnJlZSAoY2FjaGUpOworfQorCitzdHJ1Y3QgcHl1d19nZGJhcmNoX2RhdGFf dHlwZQoreworICAvKiBIYXMgdGhlIHVud2luZGVyIHNoaW0gYmVlbiBwcmVw ZW5kZWQ/ICovCisgIGludCB1bndpbmRlcl9yZWdpc3RlcmVkOworfTsKKwor c3RhdGljIHZvaWQgKgorcHl1d19nZGJhcmNoX2RhdGFfaW5pdCAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gpCit7CisgIHJldHVybiBHREJBUkNIX09CU1RB Q0tfWkFMTE9DIChnZGJhcmNoLCBzdHJ1Y3QgcHl1d19nZGJhcmNoX2RhdGFf dHlwZSk7Cit9CisKKy8qIE5ldyBpbmZlcmlvciBhcmNoaXRlY3R1cmUgY2Fs bGJhY2s6IHJlZ2lzdGVyIHRoZSBQeXRob24gdW53aW5kZXJzCisgICBpbnRl cm1lZGlhcnkuICAqLworCitzdGF0aWMgdm9pZAorcHl1d19vbl9uZXdfZ2Ri YXJjaCAoc3RydWN0IGdkYmFyY2ggKm5ld2FyY2gpCit7CisgIHN0cnVjdCBw eXV3X2dkYmFyY2hfZGF0YV90eXBlICpkYXRhID0KKyAgICAgIGdkYmFyY2hf ZGF0YSAobmV3YXJjaCwgcHl1d19nZGJhcmNoX2RhdGEpOworCisgIGlmICgh ZGF0YS0+dW53aW5kZXJfcmVnaXN0ZXJlZCkKKyAgICB7CisgICAgICBzdHJ1 Y3QgZnJhbWVfdW53aW5kICp1bndpbmRlcgorICAgICAgICAgID0gR0RCQVJD SF9PQlNUQUNLX1pBTExPQyAobmV3YXJjaCwgc3RydWN0IGZyYW1lX3Vud2lu ZCk7CisKKyAgICAgIHVud2luZGVyLT50eXBlID0gTk9STUFMX0ZSQU1FOwor ICAgICAgdW53aW5kZXItPnN0b3BfcmVhc29uID0gZGVmYXVsdF9mcmFtZV91 bndpbmRfc3RvcF9yZWFzb247CisgICAgICB1bndpbmRlci0+dGhpc19pZCA9 IHB5dXdfdGhpc19pZDsKKyAgICAgIHVud2luZGVyLT5wcmV2X3JlZ2lzdGVy ID0gcHl1d19wcmV2X3JlZ2lzdGVyOworICAgICAgdW53aW5kZXItPnVud2lu ZF9kYXRhID0gKHZvaWQgKikgbmV3YXJjaDsKKyAgICAgIHVud2luZGVyLT5z bmlmZmVyID0gcHl1d19zbmlmZmVyOworICAgICAgdW53aW5kZXItPmRlYWxs b2NfY2FjaGUgPSBweXV3X2RlYWxsb2NfY2FjaGU7CisgICAgICBmcmFtZV91 bndpbmRfcHJlcGVuZF91bndpbmRlciAobmV3YXJjaCwgdW53aW5kZXIpOwor ICAgICAgZGF0YS0+dW53aW5kZXJfcmVnaXN0ZXJlZCA9IDE7CisgICAgfQor fQorCisvKiBJbml0aWFsaXplIHVud2luZCBtYWNoaW5lcnkuICAqLworCitp bnQKK2dkYnB5X2luaXRpYWxpemVfdW53aW5kICh2b2lkKQoreworICBpbnQg cmM7CisgIGFkZF9zZXRzaG93X3p1aW50ZWdlcl9jbWQKKyAgICAgICgicHkt dW53aW5kIiwgY2xhc3NfbWFpbnRlbmFuY2UsICZweXV3X2RlYnVnLAorICAg ICAgICBfKCJTZXQgUHl0aG9uIHVud2luZGVyIGRlYnVnZ2luZy4iKSwKKyAg ICAgICAgXygiU2hvdyBQeXRob24gdW53aW5kZXIgZGVidWdnaW5nLiIpLAor ICAgICAgICBfKCJXaGVuIG5vbi16ZXJvLCBQeXRob24gdW53aW5kZXIgZGVi dWdnaW5nIGlzIGVuYWJsZWQuIiksCisgICAgICAgIE5VTEwsCisgICAgICAg IE5VTEwsCisgICAgICAgICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0 KTsKKyAgcHl1d19nZGJhcmNoX2RhdGEKKyAgICAgID0gZ2RiYXJjaF9kYXRh X3JlZ2lzdGVyX3Bvc3RfaW5pdCAocHl1d19nZGJhcmNoX2RhdGFfaW5pdCk7 CisgIG9ic2VydmVyX2F0dGFjaF9hcmNoaXRlY3R1cmVfY2hhbmdlZCAocHl1 d19vbl9uZXdfZ2RiYXJjaCk7CisKKyAgaWYgKFB5VHlwZV9SZWFkeSAoJnBl bmRpbmdfZnJhbWVfb2JqZWN0X3R5cGUpIDwgMCkKKyAgICByZXR1cm4gLTE7 CisgIHJjID0gZ2RiX3B5bW9kdWxlX2FkZG9iamVjdCAoZ2RiX21vZHVsZSwg IlBlbmRpbmdGcmFtZSIsCisgICAgICAoUHlPYmplY3QgKikgJnBlbmRpbmdf ZnJhbWVfb2JqZWN0X3R5cGUpOworICBpZiAocmMpCisgICAgcmV0dXJuIHJj OworCisgIGlmIChQeVR5cGVfUmVhZHkgKCZ1bndpbmRfaW5mb19vYmplY3Rf dHlwZSkgPCAwKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIGdkYl9weW1v ZHVsZV9hZGRvYmplY3QgKGdkYl9tb2R1bGUsICJVbndpbmRJbmZvIiwKKyAg ICAgIChQeU9iamVjdCAqKSAmdW53aW5kX2luZm9fb2JqZWN0X3R5cGUpOwor fQorCitzdGF0aWMgUHlNZXRob2REZWYgcGVuZGluZ19mcmFtZV9vYmplY3Rf bWV0aG9kc1tdID0KK3sKKyAgeyAicmVhZF9yZWdpc3RlciIsIHBlbmRpbmdf ZnJhbWVweV9yZWFkX3JlZ2lzdGVyLCBNRVRIX1ZBUkFSR1MsCisgICAgInJl YWRfcmVnaXN0ZXIgKFJFRykgLT4gZ2RiLlZhbHVlXG4iCisgICAgIlJldHVy biB0aGUgdmFsdWUgb2YgdGhlIFJFRyBpbiB0aGUgZnJhbWUuIiB9LAorICB7 ICJjcmVhdGVfdW53aW5kX2luZm8iLAorICAgIHBlbmRpbmdfZnJhbWVweV9j cmVhdGVfdW53aW5kX2luZm8sIE1FVEhfVkFSQVJHUywKKyAgICAiY3JlYXRl X3Vud2luZF9pbmZvIChGUkFNRV9JRCkgLT4gZ2RiLlVud2luZEluZm9cbiIK KyAgICAiQ29uc3RydWN0IFVud2luZEluZm8gZm9yIHRoaXMgUGVuZGluZ0Zy YW1lLCB1c2luZyBGUkFNRV9JRFxuIgorICAgICJ0byBpZGVudGlmeSBpdC4i IH0sCisgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQ eVR5cGVPYmplY3QgcGVuZGluZ19mcmFtZV9vYmplY3RfdHlwZSA9Cit7Cisg IFB5VmFyT2JqZWN0X0hFQURfSU5JVCAoTlVMTCwgMCkKKyAgImdkYi5QZW5k aW5nRnJhbWUiLCAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgIHNpemVv ZiAocGVuZGluZ19mcmFtZV9vYmplY3QpLCAgLyogdHBfYmFzaWNzaXplICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRl bXNpemUgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9kZWFsbG9jICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdHBfcHJpbnQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICov CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNf bnVtYmVyICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgIHBl bmRpbmdfZnJhbWVweV9zdHIsICAgICAgICAgICAgLyogdHBfc3RyICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0 cm8gKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9zZXRhdHRybyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICBQeV9UUEZMQUdTX0RFRkFVTFQs ICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICJHREIgUGVuZGluZ0Zy YW1lIG9iamVjdCIsICAgICAgLyogdHBfZG9jICovCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hj b21wYXJlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgcGVuZGlu Z19mcmFtZV9vYmplY3RfbWV0aG9kcywgICAvKiB0cF9tZXRob2RzICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVy cyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRw X2dldHNldCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHRwX2Jhc2UgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9kaWN0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgIDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lu aXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9hbGxvYyAqLworfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIHVud2luZF9p bmZvX29iamVjdF9tZXRob2RzW10gPQoreworICB7ICJhZGRfc2F2ZWRfcmVn aXN0ZXIiLAorICAgIHVud2luZF9pbmZvcHlfYWRkX3NhdmVkX3JlZ2lzdGVy LCBNRVRIX1ZBUkFSR1MsCisgICAgImFkZF9zYXZlZF9yZWdpc3RlciAoUkVH LCBWQUxVRSkgLT4gTm9uZVxuIgorICAgICJTZXQgdGhlIHZhbHVlIG9mIHRo ZSBSRUcgaW4gdGhlIHByZXZpb3VzIGZyYW1lIHRvIFZBTFVFLiIgfSwKKyAg eyBOVUxMIH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBl T2JqZWN0IHVud2luZF9pbmZvX29iamVjdF90eXBlID0KK3sKKyAgUHlWYXJP YmplY3RfSEVBRF9JTklUIChOVUxMLCAwKQorICAiZ2RiLlVud2luZEluZm8i LCAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgc2l6ZW9mICh1bndp bmRfaW5mb19vYmplY3QpLCAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAq LworICB1bndpbmRfaW5mb3B5X2RlYWxsb2MsICAgICAgICAgIC8qIHRwX2Rl YWxsb2MgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9wcmludCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9h c19zZXF1ZW5jZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0cF9oYXNoICAqLworICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgdW53aW5kX2lu Zm9weV9zdHIsICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwor ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0 dHJvICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog dHBfYXNfYnVmZmVyICovCisgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQ RkxBR1NfQkFTRVRZUEUsICAvKiB0cF9mbGFncyAqLworICAiR0RCIFVud2lu ZEluZm8gb2JqZWN0IiwgICAgICAgIC8qIHRwX2RvYyAqLworICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisg IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIg Ki8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9y aWNoY29tcGFyZSAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgIHVu d2luZF9pbmZvX29iamVjdF9tZXRob2RzLCAgICAgLyogdHBfbWV0aG9kcyAq LworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21l bWJlcnMgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0cF9nZXRzZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiB0cF9iYXNlICovCisgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogdHBfZGljdCAqLworICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZz ZXQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0 cF9pbml0ICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogdHBfYWxsb2MgKi8KK307CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5 dGhvbi1pbnRlcm5hbC5oIGIvZ2RiL3B5dGhvbi9weXRob24taW50ZXJuYWwu aAppbmRleCA0YzRkMzJhLi4wNTgxYjMzIDEwMDY0NAotLS0gYS9nZGIvcHl0 aG9uL3B5dGhvbi1pbnRlcm5hbC5oCisrKyBiL2dkYi9weXRob24vcHl0aG9u LWludGVybmFsLmgKQEAgLTM5MSwxMiArMzkxLDE0IEBAIFB5T2JqZWN0ICpw c3BhY2VfdG9fcHNwYWNlX29iamVjdCAoc3RydWN0IHByb2dyYW1fc3BhY2Ug KikKICAgICBDUFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVGOwogUHlP YmplY3QgKnBzcHlfZ2V0X3ByaW50ZXJzIChQeU9iamVjdCAqLCB2b2lkICop OwogUHlPYmplY3QgKnBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMgKFB5T2JqZWN0 ICosIHZvaWQgKik7CitQeU9iamVjdCAqcHNweV9nZXRfZnJhbWVfdW53aW5k ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKnBzcHlfZ2V0 X3htZXRob2RzIChQeU9iamVjdCAqLCB2b2lkICopOwogCiBQeU9iamVjdCAq b2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbGUgKikK ICAgICBDUFlDSEVDS0VSX1JFVFVSTlNfQk9SUk9XRURfUkVGOwogUHlPYmpl Y3QgKm9iamZweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICosIHZvaWQgKik7 CiBQeU9iamVjdCAqb2JqZnB5X2dldF9mcmFtZV9maWx0ZXJzIChQeU9iamVj dCAqLCB2b2lkICopOworUHlPYmplY3QgKm9iamZweV9nZXRfZnJhbWVfdW53 aW5kZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogUHlPYmplY3QgKm9iamZw eV9nZXRfeG1ldGhvZHMgKFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeU9iamVj dCAqZ2RicHlfbG9va3VwX29iamZpbGUgKFB5T2JqZWN0ICpzZWxmLCBQeU9i amVjdCAqYXJncywgUHlPYmplY3QgKmt3KTsKIApAQCAtNDkxLDYgKzQ5Myw4 IEBAIGludCBnZGJweV9pbml0aWFsaXplX2FyY2ggKHZvaWQpCiAgIENQWUNI RUNLRVJfTkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOwogaW50IGdk YnB5X2luaXRpYWxpemVfeG1ldGhvZHMgKHZvaWQpCiAgIENQWUNIRUNLRVJf TkVHQVRJVkVfUkVTVUxUX1NFVFNfRVhDRVBUSU9OOworaW50IGdkYnB5X2lu aXRpYWxpemVfdW53aW5kICh2b2lkKQorICBDUFlDSEVDS0VSX05FR0FUSVZF X1JFU1VMVF9TRVRTX0VYQ0VQVElPTjsKIAogc3RydWN0IGNsZWFudXAgKm1h a2VfY2xlYW51cF9weV9kZWNyZWYgKFB5T2JqZWN0ICpweSk7CiBzdHJ1Y3Qg Y2xlYW51cCAqbWFrZV9jbGVhbnVwX3B5X3hkZWNyZWYgKFB5T2JqZWN0ICpw eSk7CmRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL3B5dGhvbi5jIGIvZ2RiL3B5 dGhvbi9weXRob24uYwppbmRleCA1OGM3YzkyLi4xZGE2M2ZkIDEwMDY0NAot LS0gYS9nZGIvcHl0aG9uL3B5dGhvbi5jCisrKyBiL2dkYi9weXRob24vcHl0 aG9uLmMKQEAgLTE4MjEsNyArMTgyMSw4IEBAIG1lc3NhZ2UgPT0gYW4gZXJy b3IgbWVzc2FnZSB3aXRob3V0IGEgc3RhY2sgd2lsbCBiZSBwcmludGVkLiIp LAogICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV9uZXdfb2JqZmlsZV9ldmVu dCAoKSAgPCAwCiAgICAgICB8fCBnZGJweV9pbml0aWFsaXplX2NsZWFyX29i amZpbGVzX2V2ZW50ICgpICA8IDAKICAgICAgIHx8IGdkYnB5X2luaXRpYWxp emVfYXJjaCAoKSA8IDAKLSAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfeG1l dGhvZHMgKCkgPCAwKQorICAgICAgfHwgZ2RicHlfaW5pdGlhbGl6ZV94bWV0 aG9kcyAoKSA8IDAKKyAgICAgIHx8IGdkYnB5X2luaXRpYWxpemVfdW53aW5k ICgpIDwgMCkKICAgICBnb3RvIGZhaWw7CiAKICAgZ2RicHlfdG9fc3RyaW5n X2NzdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKCJ0b19zdHJpbmciKTsKZGlm ZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQt bWFpbnQuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQt bWFpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44 YzFkOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIu cHl0aG9uL3B5LXVud2luZC1tYWludC5jCkBAIC0wLDAgKzEsMjQgQEAKKy8q IFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdn ZXIuCisKKyAgIENvcHlyaWdodCAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitp bnQKK21haW4gKHZvaWQpCit7CisgIGludCBpID0gMDsKKworICByZXR1cm4g aTsgLyogbmV4dC1saW5lICovCit9CmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50LmV4cCBiL2dkYi90ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQuZXhwCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMGUwMjEKLS0tIC9kZXYv bnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5k LW1haW50LmV4cApAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAoQykg MjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor IworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRl c3RzdWl0ZS4gIEl0IHRlc3RzIFB5dGhvbi1iYXNlZAorIyB1bndpbmRpbmcg Q0xJLgorCitsb2FkX2xpYiBnZGItcHl0aG9uLmV4cAorCitzdGFuZGFyZF90 ZXN0ZmlsZQorCitpZiB7W3ByZXBhcmVfZm9yX3Rlc3RpbmcgJHt0ZXN0Zmls ZX0uZXhwICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0geworICAgIHJldHVy biAtMQorfQorCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRp bmcgaXMgbm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10g fSB7IGNvbnRpbnVlIH0KKworc2V0IHB5ZmlsZSBbZ2RiX3JlbW90ZV9kb3du bG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHld CisKK2lmICFbcnVudG9fbWFpbiBdIHRoZW4geworICAgIGZhaWwgIkNhbid0 IHJ1biB0byBtYWluIgorICAgIHJldHVybiAtMQorfQorCitnZGJfdGVzdCAi c291cmNlICR7cHlmaWxlfSIgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQiICJp bXBvcnQgcHl0aG9uIHNjcmlwdHMiCisKK2dkYl90ZXN0X3NlcXVlbmNlICJp bmZvIHVud2luZGVyIiAiU2hvdyBhbGwgdW53aW5kZXJzIiB7CisgICAgIkds b2JhbDoiCisgICAgIiAgZ2xvYmFsX3Vud2luZGVyIgorICAgICJQcm9nc3Bh Y2UgLipweS11bndpbmQtbWFpbnQ6IgorICAgICJweV91bndpbmRfbWFpbnRf cHNfdW53aW5kZXIiCit9CisKK2dkYl9icmVha3BvaW50ICR7c3JjZmlsZX06 W2dkYl9nZXRfbGluZV9udW1iZXIgIm5leHQtbGluZSJdCisKK2dkYl90ZXN0 X3NlcXVlbmNlICJjb250aW51ZSIgIlVud2luZGVycyBjYWxsZWQiIHsKKyAg ICAicHlfdW53aW5kX21haW50X3BzX3Vud2luZGVyIGNhbGxlZCIKKyAgICAi Z2xvYmFsX3Vud2luZGVyIGNhbGxlZCIKK30KKworZ2RiX3Rlc3QgImRpc2Fi bGUgdW53aW5kZXIgZ2xvYmFsIC4qIiAiMSB1bndpbmRlciBkaXNhYmxlZCIg IlVud2luZGVyIGRpc2FibGVkIgorCitnZGJfdGVzdF9zZXF1ZW5jZSAiaW5m byB1bndpbmRlciIgIlNob3cgd2l0aCBnbG9iYWwgdW53aW5kZXIgZGlzYWJs ZWQiIHsKKyAgICAiR2xvYmFsOiIKKyAgICAiICBnbG9iYWxfdW53aW5kZXIg XFxbZGlzYWJsZWRcXF0iCisgICAgIlByb2dzcGFjZSAuKnB5LXVud2luZC1t YWludDoiCisgICAgIiAgcHlfdW53aW5kX21haW50X3BzX3Vud2luZGVyIgor fQorCitnZGJfdGVzdF9zZXF1ZW5jZSAid2hlcmUiICJHbG9iYWwgdW53aW5k ZXIgZGlzYWJsZWQiIHsKKyAgICAicHlfdW53aW5kX21haW50X3BzX3Vud2lu ZGVyIGNhbGxlZFxyXG4jMCAgbWFpbiIKK30KZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQtbWFpbnQucHkgYi9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLW1haW50LnB5Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzYyNzcKLS0tIC9k ZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53 aW5kLW1haW50LnB5CkBAIC0wLDAgKzEsNTkgQEAKKyMgQ29weXJpZ2h0IChD KSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIg dGVzdHN1aXRlLiAgSXQgdGVzdHMgcHl0aG9uIHVud2luZGVycy4KKworaW1w b3J0IHJlCitpbXBvcnQgZ2RiLnR5cGVzCitmcm9tIGdkYi51bndpbmRlciBp bXBvcnQgVW53aW5kZXIsIHJlZ2lzdGVyX3Vud2luZGVyCisKK2NsYXNzIFRl c3RHbG9iYWxVbndpbmRlcihVbndpbmRlcik6CisgICAgZGVmIF9faW5pdF9f KHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0R2xvYmFsVW53aW5kZXIsIHNl bGYpLl9faW5pdF9fKCJnbG9iYWxfdW53aW5kZXIiKQorCisgICAgZGVmIF9f Y2FsbF9fKHNlbGYsIHVud2luZGVyX2luZm8pOgorICAgICAgICBwcmludCAi JXMgY2FsbGVkIiAlIHNlbGYubmFtZQorICAgICAgICByZXR1cm4gTm9uZQor CitjbGFzcyBUZXN0UHJvZ3NwYWNlVW53aW5kZXIoVW53aW5kZXIpOgorICAg IGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc3VwZXIoVGVz dFByb2dzcGFjZVVud2luZGVyLCBzZWxmKS5fX2luaXRfXygiJXNfcHNfdW53 aW5kZXIiICUgbmFtZSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB1bndp bmRlcl9pbmZvKToKKyAgICAgICAgcHJpbnQgIiVzIGNhbGxlZCIgJSBzZWxm Lm5hbWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgVGVzdE9iamZp bGVVbndpbmRlcihVbndpbmRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs IG5hbWUpOgorICAgICAgICBzdXBlcihUZXN0T2JqZmlsZVVud2luZGVyLCBz ZWxmKS5fX2luaXRfXygiJXNfb2JqX3Vud2luZGVyIiAlIG5hbWUpCisKKyAg ICBkZWYgX19jYWxsX18oc2VsZiwgdW53aW5kZXJfaW5mbyk6CisgICAgICAg IHByaW50ICIlcyBjYWxsZWQiICUgc2VsZi5uYW1lCisgICAgICAgIHJldHVy biBOb25lCisKKworCitnZGIudW53aW5kZXIucmVnaXN0ZXJfdW53aW5kZXIo Tm9uZSwgVGVzdEdsb2JhbFVud2luZGVyKCkpCitzYXdfcnVudGltZV9lcnJv ciA9IEZhbHNlCit0cnk6CisgICAgZ2RiLnVud2luZGVyLnJlZ2lzdGVyX3Vu d2luZGVyKE5vbmUsIFRlc3RHbG9iYWxVbndpbmRlcigpLCByZXBsYWNlPUZh bHNlKQorZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICBzYXdfcnVudGltZV9l cnJvciA9IFRydWUKK2lmIG5vdCBzYXdfcnVudGltZV9lcnJvcjoKKyAgICBy YWlzZSBSdW50aW1lRXJyb3IoIk1pc3NpbmcgcnVudGltZSBlcnJvciBmcm9t IHJlZ2lzdGVyX3Vud2luZGVyLiIpCitnZGIudW53aW5kZXIucmVnaXN0ZXJf dW53aW5kZXIoTm9uZSwgVGVzdEdsb2JhbFVud2luZGVyKCksIHJlcGxhY2U9 VHJ1ZSkKK2dkYi51bndpbmRlci5yZWdpc3Rlcl91bndpbmRlcihnZGIuY3Vy cmVudF9wcm9nc3BhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUZXN0UHJvZ3NwYWNlVW53aW5kZXIoInB5X3Vud2luZF9tYWludCIp KQorcHJpbnQgIlB5dGhvbiBzY3JpcHQgaW1wb3J0ZWQiCmRpZmYgLS1naXQg YS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmMgYi9nZGIv dGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0MWQ3OAotLS0gL2Rldi9udWxs CisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS11bndpbmQuYwpA QCAtMCwwICsxLDgxIEBACisvKiBUaGlzIHRlc3QgcHJvZ3JhbSBpcyBwYXJ0 IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIw MTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgaXMgdGhlIHRlc3QgcHJv Z3JhbSBsb2FkZWQgaW50byBHREIgYnkgdGhlIHB5LXVud2luZCB0ZXN0LiAg Ki8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyB2b2lkICoKK3N3YXBf dmFsdWUgKHZvaWQgKipsb2NhdGlvbiwgdm9pZCAqbmV3X3ZhbHVlKQorewor ICB2b2lkICpvbGRfdmFsdWUgPSAqbG9jYXRpb247CisgICpsb2NhdGlvbiA9 IG5ld192YWx1ZTsKKyAgcmV0dXJuIG9sZF92YWx1ZTsKK30KKworc3RhdGlj IHZvaWQKK2JhZF9sYXlvdXQodm9pZCAqKnZhcmlhYmxlX3B0ciwgdm9pZCAq ZnApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIkZpcnN0IHZhcmlhYmxlIHNo b3VsZCBiZSBhbGxvY2F0ZWQgb25lIHdvcmQgYmVsb3cgIgorICAgICAgICAg ICAidGhlIGZyYW1lLiAgR290IHZhcmlhYmxlJ3MgYWRkcmVzcyAlcCwgZnJh bWUgYXQgJXAgaW5zdGVhZC5cbiIsCisgICAgICAgICAgIHZhcmlhYmxlX3B0 ciwgZnApOworICBhYm9ydCgpOworfQorCisjZGVmaW5lIE1ZX0ZSQU1FIChf X2J1aWx0aW5fZnJhbWVfYWRkcmVzcyAoMCkpCisKK3N0YXRpYyB2b2lkCitj b3JydXB0X2ZyYW1lX2lubmVyICh2b2lkKQoreworICAvKiBTYXZlIG91dGVy IGZyYW1lIGFkZHJlc3MsIHRoZW4gY29ycnVwdCB0aGUgdW53aW5kIGNoYWlu IGJ5CisgICAgIHNldHRpbmcgdGhlIG91dGVyIGZyYW1lIGFkZHJlc3MgaW4g aXQgdG8gc2VsZi4gIFRoaXMgaXMKKyAgICAgQUJJLXNwZWNpZmljOiB0aGUg Zmlyc3Qgd29yZCBvZiB0aGUgZnJhbWUgY29udGFpbnMgcHJldmlvdXMgZnJh bWUKKyAgICAgYWRkcmVzcyBpbiBhbWQ2NC4gICovCisgIHZvaWQgKnByZXZp b3VzX2ZwID0gc3dhcF92YWx1ZSAoKHZvaWQgKiopIE1ZX0ZSQU1FLCBNWV9G UkFNRSk7CisKKyAgLyogVmVyaWZ5IHRoZSBjb21waWxlciBhbGxvY2F0ZXMg dGhlIGZpcnN0IGxvY2FsIHZhcmlhYmxlIG9uZSB3b3JkCisgICAgIGJlbG93 IGZyYW1lLiAgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdCB1bndpbmRlciBleHBl Y3RzIHRvIGZpbmQgdGhlCisgICAgIGNvcnJlY3Qgb3V0ZXIgZnJhbWUgYWRk cmVzcy4gICovCisgIGlmICgmcHJldmlvdXNfZnAgKyAxICE9ICh2b2lkICoq KSBNWV9GUkFNRSkKKyAgICBiYWRfbGF5b3V0ICgmcHJldmlvdXNfZnAgKyAx LCBNWV9GUkFNRSk7CisKKyAgLyogTm93IHJlc3RvcmUgaXQgc28gdGhhdCB3 ZSBjYW4gcmV0dXJuLiAgVGhlIHRlc3Qgc2V0cyB0aGUKKyAgICAgYnJlYWtw b2ludCBqdXN0IGJlZm9yZSB0aGlzIGhhcHBlbnMsIGFuZCBHREIgd2lsbCBu b3QgYmUgYWJsZSB0bworICAgICBzaG93IHRoZSBiYWNrdHJhY2Ugd2l0aG91 dCBKSVQgcmVhZGVyLiAgKi8KKyAgc3dhcF92YWx1ZSAoKHZvaWQgKiopIE1Z X0ZSQU1FLCBwcmV2aW91c19mcCk7IC8qIGJyZWFrIGJhY2t0cmFjZS1icm9r ZW4gKi8KK30KKworc3RhdGljIHZvaWQKK2NvcnJ1cHRfZnJhbWVfb3V0ZXIg KHZvaWQpCit7CisgIC8qIFNlZSBhYm92ZSBmb3IgdGhlIGV4cGxhbmF0aW9u IG9mIHRoZSBjb2RlIGhlcmUuICBUaGlzIGZ1bmN0aW9uCisgICAgIGNvcnJ1 cHRzIGl0cyBmcmFtZSwgdG9vLCBhbmQgdGhlbiBjYWxscyB0aGUgaW5uZXIg b25lLiAgKi8KKyAgdm9pZCAqcHJldmlvdXNfZnAgPSBzd2FwX3ZhbHVlICgo dm9pZCAqKikgTVlfRlJBTUUsIE1ZX0ZSQU1FKTsKKyAgaWYgKCZwcmV2aW91 c19mcCArIDEgIT0gKHZvaWQgKiopIE1ZX0ZSQU1FKQorICAgIGJhZF9sYXlv dXQgKCZwcmV2aW91c19mcCwgTVlfRlJBTUUpOworICBjb3JydXB0X2ZyYW1l X2lubmVyICgpOworICBzd2FwX3ZhbHVlICgodm9pZCAqKikgTVlfRlJBTUUs IHByZXZpb3VzX2ZwKTsKK30KKworaW50CittYWluICgpCit7CisgIGNvcnJ1 cHRfZnJhbWVfb3V0ZXIgKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2luZC5leHAgYi9n ZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktdW53aW5kLmV4cApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q2NzQ2Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXVud2lu ZC5leHAKQEAgLTAsMCArMSw1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3Vp dGUuICBJdCB2ZXJpZmllcyB0aGF0IGZyYW1lCisjIHVud2luZGVycyBjYW4g YmUgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLgorCitsb2FkX2xpYiBnZGItcHl0 aG9uLmV4cAorCitzdGFuZGFyZF90ZXN0ZmlsZQorCitpZiB7IFtwcmVwYXJl X2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAke3Ny Y2ZpbGV9XSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworIyBTa2lwIGFsbCB0 ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgoraWYg eyBbc2tpcF9weXRob25fdGVzdHNdIH0geyBjb250aW51ZSB9CisKKyMgVGhp cyB0ZXN0IHJ1bnMgb24gYSBzcGVjaWZpYyBwbGF0Zm9ybS4KK2lmIHsgISBb aXN0YXJnZXQgeDg2XzY0LSpdfSB7IGNvbnRpbnVlIH0KKworIyBUaGUgZm9s bG93aW5nIHRlc3RzIHJlcXVpcmUgZXhlY3V0aW9uLgorCitpZiAhW3J1bnRv X21haW5dIHRoZW4geworICAgIGZhaWwgIkNhbid0IHJ1biB0byBtYWluIgor ICAgIHJldHVybiAwCit9CisKK3NldCBweWZpbGUgW2dkYl9yZW1vdGVfZG93 bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5 XQorCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiYnJl YWsgYmFja3RyYWNlLWJyb2tlbiJdCisKK2dkYl90ZXN0ICJzb3VyY2UgJHtw eWZpbGV9IiAiUHl0aG9uIHNjcmlwdCBpbXBvcnRlZCIgXAorICAgICAgICAg ImltcG9ydCBweXRob24gc2NyaXB0cyIKKworZ2RiX2NvbnRpbnVlX3RvX2Jy ZWFrcG9pbnQgImJyZWFrIGJhY2t0cmFjZS1icm9rZW4iCitnZGJfdGVzdF9z ZXF1ZW5jZSAid2hlcmUiICAiQmFja3RyYWNlIHJlc3RvcmVkIGJ5IHVud2lu ZGVyIiB7CisgICAgIlxcclxcbiMwIC4qIGNvcnJ1cHRfZnJhbWVfaW5uZXIg XFwoXFwpIGF0ICIKKyAgICAiXFxyXFxuIzEgLiogY29ycnVwdF9mcmFtZV9v dXRlciBcXChcXCkgYXQgIgorICAgICJcXHJcXG4jMiAuKiBtYWluIFxcKC4q XFwpIGF0IgorfQorCisKZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS11bndpbmQucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRo b24vcHktdW53aW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjYyNTdmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktdW53aW5kLnB5CkBAIC0wLDAgKzEsOTkgQEAK KyMgQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisj IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisj IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgZ2RiCitmcm9t IGdkYi51bndpbmRlciBpbXBvcnQgVW53aW5kZXIKKworY2xhc3MgRnJhbWVJ ZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwLCBwYyk6 CisgICAgICAgIHNlbGYuX3NwID0gc3AKKyAgICAgICAgc2VsZi5fcGMgPSBw YworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNwKHNlbGYpOgorICAgICAg ICByZXR1cm4gc2VsZi5fc3AKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBw YyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BjCisKKworY2xhc3Mg VGVzdFVud2luZGVyKFVud2luZGVyKToKKyAgICBBTUQ2NF9SQlAgPSA2Cisg ICAgQU1ENjRfUlNQID0gNworICAgIEFNRDY0X1JJUCA9IDE2CisKKyAgICBk ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIFVud2luZGVyLl9faW5pdF9f KHNlbGYsICJ0ZXN0IHVud2luZGVyIikKKyAgICAgICAgc2VsZi5jaGFyX3B0 cl90ID0gZ2RiLmxvb2t1cF90eXBlKCJ1bnNpZ25lZCBjaGFyIikucG9pbnRl cigpCisgICAgICAgIHNlbGYuY2hhcl9wdHJfcHRyX3QgPSBzZWxmLmNoYXJf cHRyX3QucG9pbnRlcigpCisKKyAgICBkZWYgX3JlYWRfd29yZChzZWxmLCBh ZGRyZXNzKToKKyAgICAgICAgcmV0dXJuIGFkZHJlc3MuY2FzdChzZWxmLmNo YXJfcHRyX3B0cl90KS5kZXJlZmVyZW5jZSgpCisKKyAgICBkZWYgX19jYWxs X18oc2VsZiwgcGVuZGluZ19mcmFtZSk6CisgICAgICAgICIiIlRlc3QgdW53 aW5kZXIgd3JpdHRlbiBpbiBQeXRob24uCisKKyAgICAgICAgVGhpcyB1bndp bmRlciBjYW4gdW53aW5kIHRoZSBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gZGVs aWJlcmF0ZWx5CisgICAgICAgIGNvcnJ1cHRlZCBpbiBhIHNwZWNpZmljIHdh eSAoZnVuY3Rpb25zIGluIHRoZSBhY2NvbXBhbnlpbmcKKyAgICAgICAgcHkt dW53aW5kLmMgZmlsZSBkbyB0aGF0LikKKyAgICAgICAgVGhpcyBjb2RlIGlz IG9ubHkgb24gQU1ENjQuCisgICAgICAgIE9uIEFNRDY0ICRSQlAgcG9pbnRz IHRvIHRoZSBpbm5lcm1vc3QgZnJhbWUgKHVubGVzcyB0aGUgY29kZQorICAg ICAgICB3YXMgY29tcGlsZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlciks IHdoaWNoIGNvbnRhaW5zIHRoZQorICAgICAgICBhZGRyZXNzIG9mIHRoZSBw cmV2aW91cyBmcmFtZSBhdCBvZmZzZXQgMC4gVGhlIGZ1bmN0aW9ucworICAg ICAgICBkZWxpYmVyYXRlbHkgY29ycnVwdCB0aGVpciBmcmFtZXMgYXMgZm9s bG93czoKKyAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSAgICAgICAgICAg ICAgICAgQWZ0ZXIKKyAgICAgICAgICAgICAgICAgICBDb3JydXB0aW9uOiAg ICAgICAgICAgQ29ycnVwdGlvbjoKKyAgICAgICAgICAgICAgICArLS0tLS0t LS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgUkJQ LTggICB8ICAgICAgICAgICAgICB8ICAgICAgIHwgUHJldmlvdXMgUkJQIHwK KyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICstLS0t LS0tLS0tLS0tLSsKKyAgICAgICAgUkJQICAgICArIFByZXZpb3VzIFJCUCB8 ICAgICAgIHwgICAgUkJQICAgICAgIHwKKyAgICAgICAgICAgICAgICArLS0t LS0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLS0tLS0tLSsKKyAgICAgICAg UkJQKzggICB8IFJldHVybiBSSVAgICB8ICAgICAgIHwgUmV0dXJuICBSSVAg IHwKKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICst LS0tLS0tLS0tLS0tLSsKKyAgICAgICAgT2xkIFNQICB8ICAgICAgICAgICAg ICB8ICAgICAgIHwgICAgICAgICAgICAgIHwKKworICAgICAgICBUaGlzIHVu d2luZGVyIHJlY29nbml6ZXMgdGhlIGNvcnJ1cHQgZnJhbWVzIGJ5IGNoZWNr aW5nIHRoYXQKKyAgICAgICAgKlJCUCA9PSBSQlAsIGFuZCByZXN0b3JlcyBw cmV2aW91cyBSQlAgZnJvbSB0aGUgd29yZCBhYm92ZSBpdC4KKyAgICAgICAg IiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTk9URTogdGhlIHJl Z2lzdGVycyBpbiBVbndpbmRlciBBUEkgY2FuIGJlIHJlZmVyZW5jZWQKKyAg ICAgICAgICAgICMgZWl0aGVyIGJ5IG5hbWUgb3IgYnkgbnVtYmVyLiBUaGUg Y29kZSBiZWxvdyB1c2VzIGJvdGgKKyAgICAgICAgICAgICMgdG8gYWNoaWV2 ZSBtb3JlIGNvdmVyYWdlLgorICAgICAgICAgICAgYnAgPSBwZW5kaW5nX2Zy YW1lLnJlYWRfcmVnaXN0ZXIoInJicCIpLmNhc3Qoc2VsZi5jaGFyX3B0cl90 KQorICAgICAgICAgICAgaWYgc2VsZi5fcmVhZF93b3JkKGJwKSAhPSBicDoK KyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBG b3VuZCB0aGUgZnJhbWUgdGhhdCB0aGUgdGVzdCBwcm9ncmFtIGhhcyBjb3Jy dXB0ZWQgZm9yIHVzLgorICAgICAgICAgICAgIyBUaGUgY29ycmVjdCBCUCBm b3IgdGhlIG91dGVyIGZyYW1lIGhhcyBiZWVuIHNhdmVkIG9uZSB3b3JkCisg ICAgICAgICAgICAjIGFib3ZlLCBwcmV2aW91cyBJUCBhbmQgU1AgYXJlIGF0 IHRoZSBleHBlY3RlZCBwbGFjZXMuCisgICAgICAgICAgICBwcmV2aW91c19i cCA9IHNlbGYuX3JlYWRfd29yZChicCAtIDgpCisgICAgICAgICAgICBwcmV2 aW91c19pcCA9IHNlbGYuX3JlYWRfd29yZChicCArIDgpCisgICAgICAgICAg ICBwcmV2aW91c19zcCA9IGJwICsgMTYKKworICAgICAgICAgICAgZnJhbWVf aWQgPSBGcmFtZUlkKAorICAgICAgICAgICAgICAgIHBlbmRpbmdfZnJhbWUu cmVhZF9yZWdpc3RlcihUZXN0VW53aW5kZXIuQU1ENjRfUlNQKSwKKyAgICAg ICAgICAgICAgICBwZW5kaW5nX2ZyYW1lLnJlYWRfcmVnaXN0ZXIoVGVzdFVu d2luZGVyLkFNRDY0X1JJUCkpCisgICAgICAgICAgICB1bndpbmRfaW5mbyA9 IHBlbmRpbmdfZnJhbWUuY3JlYXRlX3Vud2luZF9pbmZvKGZyYW1lX2lkKQor ICAgICAgICAgICAgdW53aW5kX2luZm8uYWRkX3NhdmVkX3JlZ2lzdGVyKFRl c3RVbndpbmRlci5BTUQ2NF9SQlAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfYnApCisgICAgICAgICAg ICB1bndpbmRfaW5mby5hZGRfc2F2ZWRfcmVnaXN0ZXIoInJpcCIsIHByZXZp b3VzX2lwKQorICAgICAgICAgICAgdW53aW5kX2luZm8uYWRkX3NhdmVkX3Jl Z2lzdGVyKCJyc3AiLCBwcmV2aW91c19zcCkKKyAgICAgICAgICAgIHJldHVy biB1bndpbmRfaW5mbworICAgICAgICBleGNlcHQgKGdkYi5lcnJvciwgUnVu dGltZUVycm9yKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKK2dkYi51 bndpbmRlci5yZWdpc3Rlcl91bndpbmRlcihOb25lLCBUZXN0VW53aW5kZXIo KSwgVHJ1ZSkKK3ByaW50KCJQeXRob24gc2NyaXB0IGltcG9ydGVkIikK --001a11415cc813c557051286c717--