From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25337 invoked by alias); 8 Apr 2010 22:24:54 -0000 Received: (qmail 25307 invoked by uid 22791); 8 Apr 2010 22:24:47 -0000 X-SWARE-Spam-Status: No, hits=-1.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SARE_MSGID_LONG45,SPF_HELO_PASS,TW_BJ,TW_DB,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 08 Apr 2010 22:24:38 +0000 Received: from kpbe18.cbf.corp.google.com (kpbe18.cbf.corp.google.com [172.25.105.82]) by smtp-out.google.com with ESMTP id o38MOZRI013237 for ; Thu, 8 Apr 2010 15:24:35 -0700 Received: from pzk42 (pzk42.prod.google.com [10.243.19.170]) by kpbe18.cbf.corp.google.com with ESMTP id o38MOYq1024257 for ; Thu, 8 Apr 2010 15:24:34 -0700 Received: by pzk42 with SMTP id 42so1834588pzk.4 for ; Thu, 08 Apr 2010 15:24:34 -0700 (PDT) MIME-Version: 1.0 Received: by 10.140.247.17 with HTTP; Thu, 8 Apr 2010 15:24:32 -0700 (PDT) In-Reply-To: <83r5mrw3oz.fsf@gnu.org> References: <20100407173222.A21C584397@ruffy.mtv.corp.google.com> <83r5mrw3oz.fsf@gnu.org> Date: Thu, 08 Apr 2010 22:24:00 -0000 Received: by 10.140.179.25 with SMTP id b25mr1187465rvf.54.1270765472749; Thu, 08 Apr 2010 15:24:32 -0700 (PDT) Message-ID: Subject: Re: [RFA][python] Add program space support From: Doug Evans To: Eli Zaretskii Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd1a0aa989ed80483c12472 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-04/txt/msg00200.txt.bz2 --000e0cd1a0aa989ed80483c12472 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 3143 On Wed, Apr 7, 2010 at 10:52 AM, Eli Zaretskii wrote: >> Date: Wed, =A07 Apr 2010 10:32:22 -0700 (PDT) >> From: dje@google.com (Doug Evans) >> >> This patch adds basic support for program spaces to python. > > Thanks. =A0A few comments to the patch for the manual: > >> =A0 =A0 =A0 doc/ >> =A0 =A0 =A0 * gdb.texinfo (Python API): Add progspaces section. >> =A0 =A0 =A0 (Selecting Pretty-Printers): Progspace pretty-printers are >> =A0 =A0 =A0 searched too. > > This lacks an entry for the new section you added. Fixed. >> +@node Progspaces In Python >> +@subsubsection Progspaces In Python > > It is okay to use shorthands in node names, but for the section name > I'd prefer to use "Program Spaces", the full name. =A0There's no > requirement for the two to be identical. Fixed. >> +A program space, or ``progspace'', represents a symbolic view > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ^^^^^^^^^^^^^ > Please use @dfn{progspace} here, it is specifically designed for > introducing new terminology. =A0It produces the same quoted string in > Info as ``..'', but looks prettier in the printed version. Fixed. >> +A program space, or ``progspace'', represents a symbolic view >> +of an address space. > > An @xref here to where program spaces are described would be useful. There is no existing section describing program spaces and I wouldn't know what to say beyond what I've already written. Suggestions? We *could* leave it as is for now. >> +@findex gdb.current_progspace >> +@defun current_progspace >> +This function returns the program space of the currently selected infer= ior. > > Is this a function or a method? =A0If the latter, we have @defmethod to > DTRT. Function. > Okay with those changes. > > Thanks. Here is the revised patch. gdb-patches: I will check this in tomorrow if there are no further objectio= ns. 2010-04-08 Doug Evans * NEWS: Add entry for python program space support. * Makefile.in (SUBDIR_PYTHON_OBS): Add py-progspace.o. (SUBDIR_PYTHON_SRCS): Add py-progspace.c. (py-progspace.o): New rule. * python/py-prettyprint.c (find_pretty_printer_from_objfiles): New function. (find_pretty_printer_from_progspace): New function. (find_pretty_printer_from_gdb): New function. (find_pretty_printer): Rewrite. * python/py-progspace.c: New file. * python/python-internal.h (program_space): Add forward decl. (pspace_to_pspace_object, pspy_get_printers): Declare. (gdbpy_initialize_pspace): Declare. * python/python.c: #include "progspace.h". (gdbpy_get_current_progspace, gdbpy_progspaces): New functions. (_initialize_python): Call gdbpy_initialize_pspace. (GdbMethods): Add current_progspace, progspaces. doc/ * gdb.texinfo (Python API): Add progspaces section. (Selecting Pretty-Printers): Progspace pretty-printers are searched too. (Progspaces In Python): New section. testsuite/ * gdb.python/py-progspace.c: New file. * gdb.python/py-progspace.exp: New file. --000e0cd1a0aa989ed80483c12472 Content-Type: text/plain; charset=US-ASCII; name="gdb-100408-python-progspace-2.patch.txt" Content-Disposition: attachment; filename="gdb-100408-python-progspace-2.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g7s4wytc0 Content-length: 34368 MjAxMC0wNC0wNyAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog TkVXUzogQWRkIGVudHJ5IGZvciBweXRob24gcHJvZ3JhbSBzcGFjZSBzdXBw b3J0LgoJKiBNYWtlZmlsZS5pbiAoU1VCRElSX1BZVEhPTl9PQlMpOiBBZGQg cHktcHJvZ3NwYWNlLm8uCgkoU1VCRElSX1BZVEhPTl9TUkNTKTogQWRkIHB5 LXByb2dzcGFjZS5jLgoJKHB5LXByb2dzcGFjZS5vKTogTmV3IHJ1bGUuCgkq IHB5dGhvbi9weS1wcmV0dHlwcmludC5jIChmaW5kX3ByZXR0eV9wcmludGVy X2Zyb21fb2JqZmlsZXMpOiBOZXcKCWZ1bmN0aW9uLgoJKGZpbmRfcHJldHR5 X3ByaW50ZXJfZnJvbV9wcm9nc3BhY2UpOiBOZXcgZnVuY3Rpb24uCgkoZmlu ZF9wcmV0dHlfcHJpbnRlcl9mcm9tX2dkYik6IE5ldyBmdW5jdGlvbi4KCShm aW5kX3ByZXR0eV9wcmludGVyKTogUmV3cml0ZS4KCSogcHl0aG9uL3B5LXBy b2dzcGFjZS5jOiBOZXcgZmlsZS4KCSogcHl0aG9uL3B5dGhvbi1pbnRlcm5h bC5oIChwcm9ncmFtX3NwYWNlKTogQWRkIGZvcndhcmQgZGVjbC4KCShwc3Bh Y2VfdG9fcHNwYWNlX29iamVjdCwgcHNweV9nZXRfcHJpbnRlcnMpOiBEZWNs YXJlLgoJKGdkYnB5X2luaXRpYWxpemVfcHNwYWNlKTogRGVjbGFyZS4KCSog cHl0aG9uL3B5dGhvbi5jOiAjaW5jbHVkZSAicHJvZ3NwYWNlLmgiLgoJKGdk YnB5X2dldF9jdXJyZW50X3Byb2dzcGFjZSwgZ2RicHlfcHJvZ3NwYWNlcyk6 IE5ldyBmdW5jdGlvbnMuCgkoX2luaXRpYWxpemVfcHl0aG9uKTogQ2FsbCBn ZGJweV9pbml0aWFsaXplX3BzcGFjZS4KCShHZGJNZXRob2RzKTogQWRkIGN1 cnJlbnRfcHJvZ3NwYWNlLCBwcm9nc3BhY2VzLgoKCWRvYy8KCSogZ2RiLnRl eGluZm8gKFB5dGhvbiBBUEkpOiBBZGQgcHJvZ3NwYWNlcyBzZWN0aW9uLgoJ KFNlbGVjdGluZyBQcmV0dHktUHJpbnRlcnMpOiBQcm9nc3BhY2UgcHJldHR5 LXByaW50ZXJzIGFyZQoJc2VhcmNoZWQgdG9vLgoJKFByb2dzcGFjZXMgSW4g UHl0aG9uKTogTmV3IHNlY3Rpb24uCgoJdGVzdHN1aXRlLwoJKiBnZGIucHl0 aG9uL3B5LXByb2dzcGFjZS5jOiBOZXcgZmlsZS4KCSogZ2RiLnB5dGhvbi9w eS1wcm9nc3BhY2UuZXhwOiBOZXcgZmlsZS4KCkluZGV4OiBNYWtlZmlsZS5p bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL01ha2VmaWxlLmluLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEx MTYKZGlmZiAtdSAtcCAtcjEuMTExNiBNYWtlZmlsZS5pbgotLS0gTWFrZWZp bGUuaW4JMjMgTWFyIDIwMTAgMjE6MzE6MjkgLTAwMDAJMS4xMTE2CisrKyBN YWtlZmlsZS5pbgk4IEFwciAyMDEwIDIxOjQyOjMxIC0wMDAwCkBAIC0yNzQs NiArMjc0LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktbGF6eS1z dHJpbmcubyBcCiAJcHktb2JqZmlsZS5vIFwKIAlweS1wcmV0dHlwcmludC5v IFwKKwlweS1wcm9nc3BhY2UubyBcCiAJcHktc3ltYm9sLm8gXAogCXB5LXN5 bXRhYi5vIFwKIAlweS10eXBlLm8gXApAQCAtMjg4LDYgKzI4OSw3IEBAIFNV QkRJUl9QWVRIT05fU1JDUyA9IFwKIAlweXRob24vcHktbGF6eS1zdHJpbmcu YyBcCiAJcHl0aG9uL3B5LW9iamZpbGUuYyBcCiAJcHl0aG9uL3B5LXByZXR0 eXByaW50LmMgXAorCXB5dGhvbi9weS1wcm9nc3BhY2UuYyBcCiAJcHl0aG9u L3B5LXN5bWJvbC5jIFwKIAlweXRob24vcHktc3ltdGFiLmMgXAogCXB5dGhv bi9weS10eXBlLmMgXApAQCAtMjAxMCw2ICsyMDEyLDEwIEBAIHB5LXByZXR0 eXByaW50Lm86ICQoc3JjZGlyKS9weXRob24vcHktcHIKIAkkKENPTVBJTEUp ICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1wcmV0dHlw cmludC5jCiAJJChQT1NUQ09NUElMRSkKIAorcHktcHJvZ3NwYWNlLm86ICQo c3JjZGlyKS9weXRob24vcHktcHJvZ3NwYWNlLmMKKwkkKENPTVBJTEUpICQo UFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1wcm9nc3BhY2Uu YworCSQoUE9TVENPTVBJTEUpCisKIHB5LXN5bWJvbC5vOiAkKHNyY2Rpcikv cHl0aG9uL3B5LXN5bWJvbC5jCiAJJChDT01QSUxFKSAkKFBZVEhPTl9DRkxB R1MpICQoc3JjZGlyKS9weXRob24vcHktc3ltYm9sLmMKIAkkKFBPU1RDT01Q SUxFKQpJbmRleDogTkVXUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL05FV1MsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMzY3CmRpZmYgLXUgLXAgLXIxLjM2NyBORVdTCi0tLSBORVdTCTEg QXByIDIwMTAgMTQ6MTE6MjIgLTAwMDAJMS4zNjcKKysrIE5FV1MJOCBBcHIg MjAxMCAyMTo0MjozMSAtMDAwMApAQCAtMjUsMTAgKzI1LDEzIEBACiAKICog UHl0aG9uIHNjcmlwdGluZwogCi0qKiBUaGUgR0RCIFB5dGhvbiBBUEkgbm93 IGhhcyBhY2Nlc3MgdG8gc3ltYm9scywgc3ltYm9sIHRhYmxlcywgYW5kCi0g ICBmcmFtZSdzIGNvZGUgYmxvY2tzLgorKiogVGhlIEdEQiBQeXRob24gQVBJ IG5vdyBoYXMgYWNjZXNzIHRvIHByb2dyYW0gc3BhY2VzLCBzeW1ib2xzLAor ICAgc3ltYm9sIHRhYmxlcywgYW5kIGZyYW1lJ3MgY29kZSBibG9ja3MuCiAK LSoqIE5ldyBtZXRob2RzIGdkYi50YXJnZXRfY2hhcnNldCBhbmQgZ2RiLnRh cmdldF93aWRlX2NoYXJzZXQuCisqKiBOZXcgZnVuY3Rpb25zIGdkYi50YXJn ZXRfY2hhcnNldCwgZ2RiLnRhcmdldF93aWRlX2NoYXJzZXQsCisgICBnZGIu cHJvZ3NwYWNlcywgYW5kIGdkYi5jdXJyZW50X3Byb2dzcGFjZS4KKworKiog UHJldHR5LXByaW50ZXJzIGFyZSBub3cgYWxzbyBsb29rZWQgdXAgaW4gdGhl IGN1cnJlbnQgcHJvZ3JhbSBzcGFjZS4KIAogKiBUcmFjZXBvaW50IGFjdGlv bnMgd2VyZSB1bmlmaWVkIHdpdGggYnJlYWtwb2ludCBjb21tYW5kcy4gSW4g cGFydGljdWxhciwKIHRoZXJlIGFyZSBubyBsb25nZXIgZGlmZmVyZW5jZXMg aW4gImluZm8gYnJlYWsiIG91dHB1dCBmb3IgYnJlYWtwb2ludHMgYW5kCklu ZGV4OiBkb2MvZ2RiLnRleGluZm8KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9kb2MvZ2RiLnRleGluZm8sdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuNjk3CmRpZmYgLXUgLXAgLXIxLjY5NyBn ZGIudGV4aW5mbwotLS0gZG9jL2dkYi50ZXhpbmZvCTggQXByIDIwMTAgMjE6 MDg6NDAgLTAwMDAJMS42OTcKKysrIGRvYy9nZGIudGV4aW5mbwk4IEFwciAy MDEwIDIxOjQyOjMxIC0wMDAwCkBAIC0xOTcwOCw2ICsxOTcwOCw3IEBAIHNp dHVhdGlvbiwgYSBQeXRob24gQGNvZGV7S2V5Ym9hcmRJbnRlcnIKICogU2Vs ZWN0aW5nIFByZXR0eS1QcmludGVyczo6ICAgSG93IEdEQiBjaG9vc2VzIGEg cHJldHR5LXByaW50ZXIuCiAqIENvbW1hbmRzIEluIFB5dGhvbjo6ICAgICAg ICAgIEltcGxlbWVudGluZyBuZXcgY29tbWFuZHMgaW4gUHl0aG9uLgogKiBG dW5jdGlvbnMgSW4gUHl0aG9uOjogICAgICAgICBXcml0aW5nIG5ldyBjb252 ZW5pZW5jZSBmdW5jdGlvbnMuCisqIFByb2dzcGFjZXMgSW4gUHl0aG9uOjog ICAgICAgIFByb2dyYW0gc3BhY2VzLgogKiBPYmpmaWxlcyBJbiBQeXRob246 OiAgICAgICAgICBPYmplY3QgZmlsZXMuCiAqIEZyYW1lcyBJbiBQeXRob246 OiAgICAgICAgICAgIEFjY2Vzc2luZyBpbmZlcmlvciBzdGFjayBmcmFtZXMg ZnJvbSBQeXRob24uCiAqIEJsb2NrcyBJbiBQeXRob246OiAgICAgICAgICAg IEFjY2Vzc2luZyBmcmFtZSBibG9ja3MgZnJvbSBQeXRob24uCkBAIC0yMDQz Niw2ICsyMDQzNyw3IEBAIElmIHRoZSByZXN1bHQgaXMgbm90IG9uZSBvZiB0 aGVzZSB0eXBlcywKIAogVGhlIFB5dGhvbiBsaXN0IEBjb2Rle2dkYi5wcmV0 dHlfcHJpbnRlcnN9IGNvbnRhaW5zIGFuIGFycmF5IG9mCiBmdW5jdGlvbnMg dGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCB2aWEgYWRkaXRpb24gYXMgYSBw cmV0dHktcHJpbnRlci4KK0VhY2ggQGNvZGV7Z2RiLlByb2dzcGFjZX0gY29u dGFpbnMgYSBAY29kZXtwcmV0dHlfcHJpbnRlcnN9IGF0dHJpYnV0ZS4KIEVh Y2ggQGNvZGV7Z2RiLk9iamZpbGV9IGFsc28gY29udGFpbnMgYSBAY29kZXtw cmV0dHlfcHJpbnRlcnN9CiBhdHRyaWJ1dGUuCiAKQEAgLTIwNDQ2LDggKzIw NDQ4LDEyIEBAIGNhbm5vdCBjcmVhdGUgYSBwcmV0dHktcHJpbnRlciBmb3Ig dGhlIHYKIEBjb2Rle05vbmV9LgogCiBAdmFsdWV7R0RCTn0gZmlyc3QgY2hl Y2tzIHRoZSBAY29kZXtwcmV0dHlfcHJpbnRlcnN9IGF0dHJpYnV0ZSBvZiBl YWNoCi1AY29kZXtnZGIuT2JqZmlsZX0gYW5kIGl0ZXJhdGl2ZWx5IGNhbGxz IGVhY2ggZnVuY3Rpb24gaW4gdGhlIGxpc3QgZm9yCi10aGF0IEBjb2Rle2dk Yi5PYmpmaWxlfSB1bnRpbCBpdCByZWNlaXZlcyBhIHByZXR0eS1wcmludGVy IG9iamVjdC4KK0Bjb2Rle2dkYi5PYmpmaWxlfSBpbiB0aGUgY3VycmVudCBw cm9ncmFtIHNwYWNlIGFuZCBpdGVyYXRpdmVseSBjYWxscworZWFjaCBmdW5j dGlvbiBpbiB0aGUgbGlzdCBmb3IgdGhhdCBAY29kZXtnZGIuT2JqZmlsZX0g dW50aWwgaXQgcmVjZWl2ZXMKK2EgcHJldHR5LXByaW50ZXIgb2JqZWN0Lgor SWYgbm8gcHJldHR5LXByaW50ZXIgaXMgZm91bmQgaW4gdGhlIG9iamZpbGUg bGlzdHMsIEB2YWx1ZXtHREJOfSB0aGVuCitzZWFyY2hlcyB0aGUgcHJldHR5 LXByaW50ZXIgbGlzdCBvZiB0aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlLAor Y2FsbGluZyBlYWNoIGZ1bmN0aW9uIHVudGlsIGFuIG9iamVjdCBpcyByZXR1 cm5lZC4KIEFmdGVyIHRoZXNlIGxpc3RzIGhhdmUgYmVlbiBleGhhdXN0ZWQs IGl0IHRyaWVzIHRoZSBnbG9iYWwKIEBjb2Rle2dkYi5wcmV0dHktcHJpbnRl cnN9IGxpc3QsIGFnYWluIGNhbGxpbmcgZWFjaCBmdW5jdGlvbiB1bnRpbCBh bgogb2JqZWN0IGlzIHJldHVybmVkLgpAQCAtMjA4NDUsNiArMjA4NTEsNDcg QEAgcmVnaXN0cmF0aW9uIG9mIHRoZSBmdW5jdGlvbiB3aXRoIEB2YWx1ZQog UHl0aG9uIGNvZGUgaXMgcmVhZCBpbnRvIEB2YWx1ZXtHREJOfSwgeW91IG1h eSBuZWVkIHRvIGltcG9ydCB0aGUKIEBjb2Rle2dkYn0gbW9kdWxlIGV4cGxp Y2l0bHkuCiAKK0Bub2RlIFByb2dzcGFjZXMgSW4gUHl0aG9uCitAc3Vic3Vi c2VjdGlvbiBQcm9ncmFtIFNwYWNlcyBJbiBQeXRob24KKworQGNpbmRleCBw cm9nc3BhY2VzIGluIHB5dGhvbgorQHRpbmRleCBnZGIuUHJvZ3NwYWNlCitA dGluZGV4IFByb2dzcGFjZQorQSBwcm9ncmFtIHNwYWNlLCBvciBAZGZue3By b2dzcGFjZX0sIHJlcHJlc2VudHMgYSBzeW1ib2xpYyB2aWV3CitvZiBhbiBh ZGRyZXNzIHNwYWNlLgorSXQgY29uc2lzdHMgb2YgYWxsIG9mIHRoZSBvYmpm aWxlcyBvZiB0aGUgcHJvZ3JhbS4KK0B4cmVme09iamZpbGVzIEluIFB5dGhv bn0uCisKK1RoZSBmb2xsb3dpbmcgcHJvZ3NwYWNlLXJlbGF0ZWQgZnVuY3Rp b25zIGFyZSBhdmFpbGFibGUgaW4gdGhlCitAY29kZXtnZGJ9IG1vZHVsZToK KworQGZpbmRleCBnZGIuY3VycmVudF9wcm9nc3BhY2UKK0BkZWZ1biBjdXJy ZW50X3Byb2dzcGFjZQorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcm9n cmFtIHNwYWNlIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW5mZXJpb3Iu CitAeHJlZntJbmZlcmlvcnMgYW5kIFByb2dyYW1zfS4KK0BlbmQgZGVmdW4K KworQGZpbmRleCBnZGIucHJvZ3NwYWNlcworQGRlZnVuIHByb2dzcGFjZXMK K1JldHVybiBhIHNlcXVlbmNlIG9mIGFsbCB0aGUgcHJvZ3NwYWNlcyBjdXJy ZW50bHkga25vd24gdG8gQHZhbHVle0dEQk59LgorQGVuZCBkZWZ1bgorCitF YWNoIHByb2dzcGFjZSBpcyByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBv ZiB0aGUgQGNvZGV7Z2RiLlByb2dzcGFjZX0KK2NsYXNzLgorCitAZGVmaXZh ciBQcm9nc3BhY2UgZmlsZW5hbWUKK1RoZSBmaWxlIG5hbWUgb2YgdGhlIHBy b2dzcGFjZSBhcyBhIHN0cmluZy4KK0BlbmQgZGVmaXZhcgorCitAZGVmaXZh ciBQcm9nc3BhY2UgcHJldHR5X3ByaW50ZXJzCitUaGUgQGNvZGV7cHJldHR5 X3ByaW50ZXJzfSBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIGZ1bmN0aW9ucy4g IEl0IGlzCit1c2VkIHRvIGxvb2sgdXAgcHJldHR5LXByaW50ZXJzLiAgQSBA Y29kZXtWYWx1ZX0gaXMgcGFzc2VkIHRvIGVhY2gKK2Z1bmN0aW9uIGluIG9y ZGVyOyBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBAY29kZXtOb25lfSwgdGhl biB0aGUKK3NlYXJjaCBjb250aW51ZXMuICBPdGhlcndpc2UsIHRoZSByZXR1 cm4gdmFsdWUgc2hvdWxkIGJlIGFuIG9iamVjdAord2hpY2ggaXMgdXNlZCB0 byBmb3JtYXQgdGhlIHZhbHVlLiAgQHhyZWZ7UHJldHR5IFByaW50aW5nfSwg Zm9yIG1vcmUKK2luZm9ybWF0aW9uLgorQGVuZCBkZWZpdmFyCisKIEBub2Rl IE9iamZpbGVzIEluIFB5dGhvbgogQHN1YnN1YnNlY3Rpb24gT2JqZmlsZXMg SW4gUHl0aG9uCiAKSW5kZXg6IHB5dGhvbi9weS1wcmV0dHlwcmludC5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9n ZGIvcHl0aG9uL3B5LXByZXR0eXByaW50LmMsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IHB5LXByZXR0eXByaW50LmMKLS0t IHB5dGhvbi9weS1wcmV0dHlwcmludC5jCTIgRmViIDIwMTAgMTY6NDU6MTYg LTAwMDAJMS41CisrKyBweXRob24vcHktcHJldHR5cHJpbnQuYwk4IEFwciAy MDEwIDIxOjQyOjMxIC0wMDAwCkBAIC0yOSwxMiArMjksMTIgQEAKICNpZmRl ZiBIQVZFX1BZVEhPTgogI2luY2x1ZGUgInB5dGhvbi1pbnRlcm5hbC5oIgog Ci0KIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgZmluZF9wcmV0dHlfcHJpbnRl ciB3aGljaCBpdGVyYXRlcyBvdmVyIGEgbGlzdCwKICAgIGNhbGxzIGVhY2gg ZnVuY3Rpb24gYW5kIGluc3BlY3RzIG91dHB1dC4gIFRoaXMgd2lsbCByZXR1 cm4gYQogICAgcHJpbnRlciBvYmplY3QgaWYgb25lIHJlY29nbml6ZXMgVkFM VUUuICBJZiBubyBwcmludGVyIGlzIGZvdW5kLCBpdAogICAgd2lsbCByZXR1 cm4gTm9uZS4gIE9uIGVycm9yLCBpdCB3aWxsIHNldCB0aGUgUHl0aG9uIGVy cm9yIGFuZAogICAgcmV0dXJuIE5VTEwuICAqLworCiBzdGF0aWMgUHlPYmpl Y3QgKgogc2VhcmNoX3BwX2xpc3QgKFB5T2JqZWN0ICpsaXN0LCBQeU9iamVj dCAqdmFsdWUpCiB7CkBAIC02MCwxOCArNjAsMTkgQEAgc2VhcmNoX3BwX2xp c3QgKFB5T2JqZWN0ICpsaXN0LCBQeU9iamVjdAogICBQeV9SRVRVUk5fTk9O RTsKIH0KIAotLyogRmluZCB0aGUgcHJldHR5LXByaW50aW5nIGNvbnN0cnVj dG9yIGZ1bmN0aW9uIGZvciBWQUxVRS4gIElmIG5vCi0gICBwcmV0dHktcHJp bnRlciBleGlzdHMsIHJldHVybiBOb25lLiAgSWYgb25lIGV4aXN0cywgcmV0 dXJuIGEgbmV3Ci0gICByZWZlcmVuY2UuICBPbiBlcnJvciwgc2V0IHRoZSBQ eXRob24gZXJyb3IgYW5kIHJldHVybiBOVUxMLiAgKi8KKy8qIFN1YnJvdXRp bmUgb2YgZmluZF9wcmV0dHlfcHJpbnRlciB0byBzaW1wbGlmeSBpdC4KKyAg IExvb2sgZm9yIGEgcHJldHR5LXByaW50ZXIgdG8gcHJpbnQgVkFMVUUgaW4g YWxsIG9iamZpbGVzLgorICAgVGhlIHJlc3VsdCBpcyBOVUxMIGlmIHRoZXJl J3MgYW4gZXJyb3IgYW5kIHRoZSBzZWFyY2ggc2hvdWxkIGJlIHRlcm1pbmF0 ZWQuCisgICBUaGUgcmVzdWx0IGlzIFB5X05vbmUsIHN1aXRhYmx5IGluYy1y ZWYnZCwgaWYgbm8gcHJldHR5LXByaW50ZXIgd2FzIGZvdW5kLgorICAgT3Ro ZXJ3aXNlIHRoZSByZXN1bHQgaXMgdGhlIHByZXR0eS1wcmludGVyIGZ1bmN0 aW9uLCBzdWl0YWJseSBpbmMtcmVmJ2QuICAqLworCiBzdGF0aWMgUHlPYmpl Y3QgKgotZmluZF9wcmV0dHlfcHJpbnRlciAoUHlPYmplY3QgKnZhbHVlKQor ZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9tX29iamZpbGVzIChQeU9iamVjdCAq dmFsdWUpCiB7Ci0gIFB5T2JqZWN0ICpwcF9saXN0ID0gTlVMTDsKLSAgUHlP YmplY3QgKmZ1bmN0aW9uID0gTlVMTDsKKyAgUHlPYmplY3QgKnBwX2xpc3Q7 CisgIFB5T2JqZWN0ICpmdW5jdGlvbjsKICAgc3RydWN0IG9iamZpbGUgKm9i ajsKLSAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0Owog Ci0gIC8qIExvb2sgYXQgdGhlIHByZXR0eS1wcmludGVyIGRpY3Rpb25hcnkg Zm9yIGVhY2ggb2JqZmlsZS4gICovCiAgIEFMTF9PQkpGSUxFUyAob2JqKQog ICB7CiAgICAgUHlPYmplY3QgKm9iamYgPSBvYmpmaWxlX3RvX29iamZpbGVf b2JqZWN0IChvYmopOwpAQCAtODQsNDQgKzg1LDk1IEBAIGZpbmRfcHJldHR5 X3ByaW50ZXIgKFB5T2JqZWN0ICp2YWx1ZSkKIAogICAgIHBwX2xpc3QgPSBv YmpmcHlfZ2V0X3ByaW50ZXJzIChvYmpmLCBOVUxMKTsKICAgICBmdW5jdGlv biA9IHNlYXJjaF9wcF9saXN0IChwcF9saXN0LCB2YWx1ZSk7CisgICAgUHlf WERFQ1JFRiAocHBfbGlzdCk7CiAKLSAgICAvKiBJZiB0aGVyZSBpcyBhbiBl cnJvciBpbiBhbnkgb2JqZmlsZSBsaXN0LCBhYm9ydCB0aGUgc2VhcmNoIGFu ZAotICAgICAgIGV4aXQuICAqLworICAgIC8qIElmIHRoZXJlIGlzIGFuIGVy cm9yIGluIGFueSBvYmpmaWxlIGxpc3QsIGFib3J0IHRoZSBzZWFyY2ggYW5k IGV4aXQuICAqLwogICAgIGlmICghIGZ1bmN0aW9uKQotICAgICAgewotCVB5 X1hERUNSRUYgKHBwX2xpc3QpOwotCXJldHVybiBOVUxMOwotICAgICAgfQor ICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoZnVuY3Rpb24gIT0gUHlf Tm9uZSkKLSAgICAgIGdvdG8gZG9uZTsKKyAgICAgIHJldHVybiBmdW5jdGlv bjsKICAgICAKICAgICBQeV9ERUNSRUYgKGZ1bmN0aW9uKTsKLSAgICBQeV9Y REVDUkVGIChwcF9saXN0KTsKICAgfQogCi0gIHBwX2xpc3QgPSBOVUxMOwor ICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyogU3Vicm91dGluZSBvZiBmaW5k X3ByZXR0eV9wcmludGVyIHRvIHNpbXBsaWZ5IGl0LgorICAgTG9vayBmb3Ig YSBwcmV0dHktcHJpbnRlciB0byBwcmludCBWQUxVRSBpbiB0aGUgY3VycmVu dCBwcm9ncmFtIHNwYWNlLgorICAgVGhlIHJlc3VsdCBpcyBOVUxMIGlmIHRo ZXJlJ3MgYW4gZXJyb3IgYW5kIHRoZSBzZWFyY2ggc2hvdWxkIGJlIHRlcm1p bmF0ZWQuCisgICBUaGUgcmVzdWx0IGlzIFB5X05vbmUsIHN1aXRhYmx5IGlu Yy1yZWYnZCwgaWYgbm8gcHJldHR5LXByaW50ZXIgd2FzIGZvdW5kLgorICAg T3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdGhlIHByZXR0eS1wcmludGVyIGZ1 bmN0aW9uLCBzdWl0YWJseSBpbmMtcmVmJ2QuICAqLworCitzdGF0aWMgUHlP YmplY3QgKgorZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9tX3Byb2dzcGFjZSAo UHlPYmplY3QgKnZhbHVlKQoreworICBQeU9iamVjdCAqcHBfbGlzdDsKKyAg UHlPYmplY3QgKmZ1bmN0aW9uOworICBQeU9iamVjdCAqb2JqID0gcHNwYWNl X3RvX3BzcGFjZV9vYmplY3QgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZSk7CisK KyAgaWYgKCFvYmopCisgICAgcmV0dXJuIE5VTEw7CisgIHBwX2xpc3QgPSBw c3B5X2dldF9wcmludGVycyAob2JqLCBOVUxMKTsKKyAgZnVuY3Rpb24gPSBz ZWFyY2hfcHBfbGlzdCAocHBfbGlzdCwgdmFsdWUpOworICBQeV9YREVDUkVG IChwcF9saXN0KTsKKyAgcmV0dXJuIGZ1bmN0aW9uOworfQorCisvKiBTdWJy b3V0aW5lIG9mIGZpbmRfcHJldHR5X3ByaW50ZXIgdG8gc2ltcGxpZnkgaXQu CisgICBMb29rIGZvciBhIHByZXR0eS1wcmludGVyIHRvIHByaW50IFZBTFVF IGluIHRoZSBnZGIgbW9kdWxlLgorICAgVGhlIHJlc3VsdCBpcyBOVUxMIGlm IHRoZXJlJ3MgYW4gZXJyb3IgYW5kIHRoZSBzZWFyY2ggc2hvdWxkIGJlIHRl cm1pbmF0ZWQuCisgICBUaGUgcmVzdWx0IGlzIFB5X05vbmUsIHN1aXRhYmx5 IGluYy1yZWYnZCwgaWYgbm8gcHJldHR5LXByaW50ZXIgd2FzIGZvdW5kLgor ICAgT3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdGhlIHByZXR0eS1wcmludGVy IGZ1bmN0aW9uLCBzdWl0YWJseSBpbmMtcmVmJ2QuICAqLworCitzdGF0aWMg UHlPYmplY3QgKgorZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9tX2dkYiAoUHlP YmplY3QgKnZhbHVlKQoreworICBQeU9iamVjdCAqcHBfbGlzdDsKKyAgUHlP YmplY3QgKmZ1bmN0aW9uOworCiAgIC8qIEZldGNoIHRoZSBnbG9iYWwgcHJl dHR5IHByaW50ZXIgZGljdGlvbmFyeS4gICovCiAgIGlmICghIFB5T2JqZWN0 X0hhc0F0dHJTdHJpbmcgKGdkYl9tb2R1bGUsICJwcmV0dHlfcHJpbnRlcnMi KSkKKyAgICBQeV9SRVRVUk5fTk9ORTsKKyAgcHBfbGlzdCA9IFB5T2JqZWN0 X0dldEF0dHJTdHJpbmcgKGdkYl9tb2R1bGUsICJwcmV0dHlfcHJpbnRlcnMi KTsKKyAgaWYgKHBwX2xpc3QgPT0gTlVMTCB8fCAhIFB5TGlzdF9DaGVjayAo cHBfbGlzdCkpCiAgICAgewotICAgICAgZnVuY3Rpb24gPSBQeV9Ob25lOwot ICAgICAgUHlfSU5DUkVGIChmdW5jdGlvbik7Ci0gICAgICBnb3RvIGRvbmU7 CisgICAgICBQeV9YREVDUkVGIChwcF9saXN0KTsKKyAgICAgIFB5X1JFVFVS Tl9OT05FOwogICAgIH0KLSAgcHBfbGlzdCA9IFB5T2JqZWN0X0dldEF0dHJT dHJpbmcgKGdkYl9tb2R1bGUsICJwcmV0dHlfcHJpbnRlcnMiKTsKLSAgaWYg KCEgcHBfbGlzdCkKLSAgICBnb3RvIGRvbmU7Ci0gIGlmICghIFB5TGlzdF9D aGVjayAocHBfbGlzdCkpCi0gICAgZ290byBkb25lOwogCiAgIGZ1bmN0aW9u ID0gc2VhcmNoX3BwX2xpc3QgKHBwX2xpc3QsIHZhbHVlKTsKLQotIGRvbmU6 CiAgIFB5X1hERUNSRUYgKHBwX2xpc3QpOwotICAKICAgcmV0dXJuIGZ1bmN0 aW9uOwogfQogCisvKiBGaW5kIHRoZSBwcmV0dHktcHJpbnRpbmcgY29uc3Ry dWN0b3IgZnVuY3Rpb24gZm9yIFZBTFVFLiAgSWYgbm8KKyAgIHByZXR0eS1w cmludGVyIGV4aXN0cywgcmV0dXJuIE5vbmUuICBJZiBvbmUgZXhpc3RzLCBy ZXR1cm4gYSBuZXcKKyAgIHJlZmVyZW5jZS4gIE9uIGVycm9yLCBzZXQgdGhl IFB5dGhvbiBlcnJvciBhbmQgcmV0dXJuIE5VTEwuICAqLworCitzdGF0aWMg UHlPYmplY3QgKgorZmluZF9wcmV0dHlfcHJpbnRlciAoUHlPYmplY3QgKnZh bHVlKQoreworICBQeU9iamVjdCAqZnVuY3Rpb247CisKKyAgLyogTG9vayBh dCB0aGUgcHJldHR5LXByaW50ZXIgZGljdGlvbmFyeSBmb3IgZWFjaCBvYmpm aWxlCisgICAgIGluIHRoZSBjdXJyZW50IHByb2dyYW0tc3BhY2UuICAqLwor ICBmdW5jdGlvbiA9IGZpbmRfcHJldHR5X3ByaW50ZXJfZnJvbV9vYmpmaWxl cyAodmFsdWUpOworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8fCBmdW5jdGlv biAhPSBQeV9Ob25lKQorICAgIHJldHVybiBmdW5jdGlvbjsKKyAgUHlfREVD UkVGIChmdW5jdGlvbik7CisKKyAgLyogTG9vayBhdCB0aGUgcHJldHR5LXBy aW50ZXIgZGljdGlvbmFyeSBmb3IgdGhlIGN1cnJlbnQgcHJvZ3JhbS1zcGFj ZS4gICovCisgIGZ1bmN0aW9uID0gZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9t X3Byb2dzcGFjZSAodmFsdWUpOworICBpZiAoZnVuY3Rpb24gPT0gTlVMTCB8 fCBmdW5jdGlvbiAhPSBQeV9Ob25lKQorICAgIHJldHVybiBmdW5jdGlvbjsK KyAgUHlfREVDUkVGIChmdW5jdGlvbik7CisKKyAgLyogTG9vayBhdCB0aGUg cHJldHR5LXByaW50ZXIgZGljdGlvbmFyeSBpbiB0aGUgZ2RiIG1vZHVsZS4g ICovCisgIGZ1bmN0aW9uID0gZmluZF9wcmV0dHlfcHJpbnRlcl9mcm9tX2dk YiAodmFsdWUpOworICByZXR1cm4gZnVuY3Rpb247Cit9CiAKIC8qIFByZXR0 eS1wcmludCBhIHNpbmdsZSB2YWx1ZSwgdmlhIHRoZSBwcmludGVyIG9iamVj dCBQUklOVEVSLgogICAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJp bmcsIGEgUHlPYmplY3QgY29udGFpbmluZyB0aGUgc3RyaW5nCkluZGV4OiBw eXRob24vcHktcHJvZ3NwYWNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogcHl0aG9uL3B5LXByb2dzcGFjZS5jCmRpZmYgLU4gcHl0aG9u L3B5LXByb2dzcGFjZS5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow MDowMCAtMDAwMAorKysgcHl0aG9uL3B5LXByb2dzcGFjZS5jCTggQXByIDIw MTAgMjE6NDI6MzEgLTAwMDAKQEAgLTAsMCArMSwyNDAgQEAKKy8qIFB5dGhv biBpbnRlcmZhY2UgdG8gcHJvZ3JhbSBzcGFjZXMuCisKKyAgIENvcHlyaWdo dCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUg InB5dGhvbi1pbnRlcm5hbC5oIgorI2luY2x1ZGUgImNoYXJzZXQuaCIKKyNp bmNsdWRlICJwcm9nc3BhY2UuaCIKKyNpbmNsdWRlICJvYmpmaWxlcy5oIgor I2luY2x1ZGUgImxhbmd1YWdlLmgiCisKK3R5cGVkZWYgc3RydWN0Cit7Cisg IFB5T2JqZWN0X0hFQUQKKworICAvKiBUaGUgY29ycmVzcG9uZGluZyBwc3Bh Y2UuICAqLworICBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlOworCisg IC8qIFRoZSBwcmV0dHktcHJpbnRlciBsaXN0IG9mIGZ1bmN0aW9ucy4gICov CisgIFB5T2JqZWN0ICpwcmludGVyczsKK30gcHNwYWNlX29iamVjdDsKKwor c3RhdGljIFB5VHlwZU9iamVjdCBwc3BhY2Vfb2JqZWN0X3R5cGU7CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZV9kYXRhICpwc3B5X3Bz cGFjZV9kYXRhX2tleTsKKworDAorCisvKiBBbiBPYmpmaWxlIG1ldGhvZCB3 aGljaCByZXR1cm5zIHRoZSBvYmpmaWxlJ3MgZmlsZSBuYW1lLCBvciBOb25l LiAgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3BzcHlfZ2V0X2ZpbGVuYW1l IChQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgcHNwYWNl X29iamVjdCAqb2JqID0gKHBzcGFjZV9vYmplY3QgKikgc2VsZjsKKyAgaWYg KG9iai0+cHNwYWNlKQorICAgIHsKKyAgICAgIHN0cnVjdCBvYmpmaWxlICpv YmpmaWxlID0gb2JqLT5wc3BhY2UtPnN5bWZpbGVfb2JqZWN0X2ZpbGU7Cisg ICAgICBpZiAob2JqZmlsZSAmJiBvYmpmaWxlLT5uYW1lKQorCXJldHVybiBQ eVN0cmluZ19EZWNvZGUgKG9iamZpbGUtPm5hbWUsIHN0cmxlbiAob2JqZmls ZS0+bmFtZSksCisJCQkJaG9zdF9jaGFyc2V0ICgpLCBOVUxMKTsKKyAgICB9 CisgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgdm9pZAorcHNweV9k ZWFsbG9jIChQeU9iamVjdCAqc2VsZikKK3sKKyAgcHNwYWNlX29iamVjdCAq cHNfc2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIHNlbGY7CisgIFB5X1hERUNS RUYgKHBzX3NlbGYtPnByaW50ZXJzKTsKKyAgc2VsZi0+b2JfdHlwZS0+dHBf ZnJlZSAoc2VsZik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitwc3B5X25l dyAoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmpl Y3QgKmtleXdvcmRzKQoreworICBwc3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBz cGFjZV9vYmplY3QgKikgdHlwZS0+dHBfYWxsb2MgKHR5cGUsIDApOworICBp ZiAoc2VsZikKKyAgICB7CisgICAgICBzZWxmLT5wc3BhY2UgPSBOVUxMOwor CisgICAgICBzZWxmLT5wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOworICAg ICAgaWYgKCFzZWxmLT5wcmludGVycykKKwl7CisJICBQeV9ERUNSRUYgKHNl bGYpOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKyAgcmV0dXJuIChQ eU9iamVjdCAqKSBzZWxmOworfQorCitQeU9iamVjdCAqCitwc3B5X2dldF9w cmludGVycyAoUHlPYmplY3QgKm8sIHZvaWQgKmlnbm9yZSkKK3sKKyAgcHNw YWNlX29iamVjdCAqc2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIG87CisgIFB5 X0lOQ1JFRiAoc2VsZi0+cHJpbnRlcnMpOworICByZXR1cm4gc2VsZi0+cHJp bnRlcnM7Cit9CisKK3N0YXRpYyBpbnQKK3BzcHlfc2V0X3ByaW50ZXJzIChQ eU9iamVjdCAqbywgUHlPYmplY3QgKnZhbHVlLCB2b2lkICppZ25vcmUpCit7 CisgIFB5T2JqZWN0ICp0bXA7CisgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAo cHNwYWNlX29iamVjdCAqKSBvOworICBpZiAoISB2YWx1ZSkKKyAgICB7Cisg ICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhjX1R5cGVFcnJvciwKKwkJICAg ICAgICJjYW5ub3QgZGVsZXRlIHRoZSBwcmV0dHlfcHJpbnRlcnMgYXR0cmli dXRlIik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmICghIFB5 TGlzdF9DaGVjayAodmFsdWUpKQorICAgIHsKKyAgICAgIFB5RXJyX1NldFN0 cmluZyAoUHlFeGNfVHlwZUVycm9yLAorCQkgICAgICAgInRoZSBwcmV0dHlf cHJpbnRlcnMgYXR0cmlidXRlIG11c3QgYmUgYSBsaXN0Iik7CisgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgIC8qIFRha2UgY2FyZSBpbiBjYXNlIHRo ZSBMSFMgYW5kIFJIUyBhcmUgcmVsYXRlZCBzb21laG93LiAgKi8KKyAgdG1w ID0gc2VsZi0+cHJpbnRlcnM7CisgIFB5X0lOQ1JFRiAodmFsdWUpOworICBz ZWxmLT5wcmludGVycyA9IHZhbHVlOworICBQeV9YREVDUkVGICh0bXApOwor CisgIHJldHVybiAwOworfQorCisMCisKKy8qIENsZWFyIHRoZSBQU1BBQ0Ug cG9pbnRlciBpbiBhIFBzcGFjZSBvYmplY3QgYW5kIHJlbW92ZSB0aGUgcmVm ZXJlbmNlLiAgKi8KKworc3RhdGljIHZvaWQKK3B5X2ZyZWVfcHNwYWNlIChz dHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCB2b2lkICpkYXR1bSkKK3sK KyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7CisgIHBzcGFjZV9vYmplY3Qg Km9iamVjdCA9IGRhdHVtOworICAvKiBGSVhNRTogV2hhdCdzIHRoZSByaWdo dCB3YXkgdG8gZ2V0IGEgcHJvZ3JhbSBzcGFjZSdzIGFyY2g/CisgICAgIFRo ZXJlIG1heSBiZSBtdWx0aXBsZS4gICovCisgIHN0cnVjdCBnZGJhcmNoICph cmNoID0gZ2V0X29iamZpbGVfYXJjaCAocHNwYWNlLT5zeW1maWxlX29iamVj dF9maWxlKTsKKworICBjbGVhbnVwID0gZW5zdXJlX3B5dGhvbl9lbnYgKGFy Y2gsIGN1cnJlbnRfbGFuZ3VhZ2UpOworICBvYmplY3QtPnBzcGFjZSA9IE5V TEw7CisgIFB5X0RFQ1JFRiAoKFB5T2JqZWN0ICopIG9iamVjdCk7CisgIGRv X2NsZWFudXBzIChjbGVhbnVwKTsKK30KKworLyogUmV0dXJuIGEgYm9ycm93 ZWQgcmVmZXJlbmNlIHRvIHRoZSBQeXRob24gb2JqZWN0IG9mIHR5cGUgUHNw YWNlCisgICByZXByZXNlbnRpbmcgUFNQQUNFLiAgSWYgdGhlIG9iamVjdCBo YXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsCisgICByZXR1cm4gaXQuICBPdGhl cndpc2UsIGNyZWF0ZSBpdC4gIFJldHVybiBOVUxMIGFuZCBzZXQgdGhlIFB5 dGhvbgorICAgZXJyb3Igb24gZmFpbHVyZS4gICovCisKK1B5T2JqZWN0ICoK K3BzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChzdHJ1Y3QgcHJvZ3JhbV9zcGFj ZSAqcHNwYWNlKQoreworICBwc3BhY2Vfb2JqZWN0ICpvYmplY3Q7CisKKyAg b2JqZWN0ID0gcHJvZ3JhbV9zcGFjZV9kYXRhIChwc3BhY2UsIHBzcHlfcHNw YWNlX2RhdGFfa2V5KTsKKyAgaWYgKCFvYmplY3QpCisgICAgeworICAgICAg b2JqZWN0ID0gUHlPYmplY3RfTmV3IChwc3BhY2Vfb2JqZWN0LCAmcHNwYWNl X29iamVjdF90eXBlKTsKKyAgICAgIGlmIChvYmplY3QpCisJeworCSAgUHlP YmplY3QgKmRpY3Q7CisKKwkgIG9iamVjdC0+cHNwYWNlID0gcHNwYWNlOwor CisJICBvYmplY3QtPnByaW50ZXJzID0gUHlMaXN0X05ldyAoMCk7CisJICBp ZiAoIW9iamVjdC0+cHJpbnRlcnMpCisJICAgIHsKKwkgICAgICBQeV9ERUNS RUYgKG9iamVjdCk7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwor CSAgc2V0X3Byb2dyYW1fc3BhY2VfZGF0YSAocHNwYWNlLCBwc3B5X3BzcGFj ZV9kYXRhX2tleSwgb2JqZWN0KTsKKwl9CisgICAgfQorCisgIHJldHVybiAo UHlPYmplY3QgKikgb2JqZWN0OworfQorCit2b2lkCitnZGJweV9pbml0aWFs aXplX3BzcGFjZSAodm9pZCkKK3sKKyAgcHNweV9wc3BhY2VfZGF0YV9rZXkK KyAgICA9IHJlZ2lzdGVyX3Byb2dyYW1fc3BhY2VfZGF0YV93aXRoX2NsZWFu dXAgKHB5X2ZyZWVfcHNwYWNlKTsKKworICBpZiAoUHlUeXBlX1JlYWR5ICgm cHNwYWNlX29iamVjdF90eXBlKSA8IDApCisgICAgcmV0dXJuOworCisgIFB5 X0lOQ1JFRiAoJnBzcGFjZV9vYmplY3RfdHlwZSk7CisgIFB5TW9kdWxlX0Fk ZE9iamVjdCAoZ2RiX21vZHVsZSwgIlByb2dzcGFjZSIsIChQeU9iamVjdCAq KSAmcHNwYWNlX29iamVjdF90eXBlKTsKK30KKworDAorCitzdGF0aWMgUHlH ZXRTZXREZWYgcHNwYWNlX2dldHNldFtdID0KK3sKKyAgeyAiZmlsZW5hbWUi LCBwc3B5X2dldF9maWxlbmFtZSwgTlVMTCwKKyAgICAiVGhlIHByb2dzcGFj ZSdzIG1haW4gZmlsZW5hbWUsIG9yIE5vbmUuIiwgTlVMTCB9LAorICB7ICJw cmV0dHlfcHJpbnRlcnMiLCBwc3B5X2dldF9wcmludGVycywgcHNweV9zZXRf cHJpbnRlcnMsCisgICAgIlByZXR0eSBwcmludGVycy4iLCBOVUxMIH0sCisg IHsgTlVMTCB9Cit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IHBzcGFjZV9v YmplY3RfdHlwZSA9Cit7CisgIFB5T2JqZWN0X0hFQURfSU5JVCAoTlVMTCkK KyAgMCwJCQkJICAvKm9iX3NpemUqLworICAiZ2RiLlByb2dzcGFjZSIsCQkg IC8qdHBfbmFtZSovCisgIHNpemVvZiAocHNwYWNlX29iamVjdCksCSAgLyp0 cF9iYXNpY3NpemUqLworICAwLAkJCQkgIC8qdHBfaXRlbXNpemUqLworICBw c3B5X2RlYWxsb2MsCQkJICAvKnRwX2RlYWxsb2MqLworICAwLAkJCQkgIC8q dHBfcHJpbnQqLworICAwLAkJCQkgIC8qdHBfZ2V0YXR0ciovCisgIDAsCQkJ CSAgLyp0cF9zZXRhdHRyKi8KKyAgMCwJCQkJICAvKnRwX2NvbXBhcmUqLwor ICAwLAkJCQkgIC8qdHBfcmVwciovCisgIDAsCQkJCSAgLyp0cF9hc19udW1i ZXIqLworICAwLAkJCQkgIC8qdHBfYXNfc2VxdWVuY2UqLworICAwLAkJCQkg IC8qdHBfYXNfbWFwcGluZyovCisgIDAsCQkJCSAgLyp0cF9oYXNoICovCisg IDAsCQkJCSAgLyp0cF9jYWxsKi8KKyAgMCwJCQkJICAvKnRwX3N0ciovCisg IDAsCQkJCSAgLyp0cF9nZXRhdHRybyovCisgIDAsCQkJCSAgLyp0cF9zZXRh dHRybyovCisgIDAsCQkJCSAgLyp0cF9hc19idWZmZXIqLworICBQeV9UUEZM QUdTX0RFRkFVTFQsCQkgIC8qdHBfZmxhZ3MqLworICAiR0RCIHByb2dzcGFj ZSBvYmplY3QiLAkgIC8qIHRwX2RvYyAqLworICAwLAkJCQkgIC8qIHRwX3Ry YXZlcnNlICovCisgIDAsCQkJCSAgLyogdHBfY2xlYXIgKi8KKyAgMCwJCQkJ ICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAwLAkJCQkgIC8qIHRwX3dlYWts aXN0b2Zmc2V0ICovCisgIDAsCQkJCSAgLyogdHBfaXRlciAqLworICAwLAkJ CQkgIC8qIHRwX2l0ZXJuZXh0ICovCisgIDAsCQkJCSAgLyogdHBfbWV0aG9k cyAqLworICAwLAkJCQkgIC8qIHRwX21lbWJlcnMgKi8KKyAgcHNwYWNlX2dl dHNldCwJCSAgLyogdHBfZ2V0c2V0ICovCisgIDAsCQkJCSAgLyogdHBfYmFz ZSAqLworICAwLAkJCQkgIC8qIHRwX2RpY3QgKi8KKyAgMCwJCQkJICAvKiB0 cF9kZXNjcl9nZXQgKi8KKyAgMCwJCQkJICAvKiB0cF9kZXNjcl9zZXQgKi8K KyAgMCwJCQkJICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgIDAsCQkJCSAgLyog dHBfaW5pdCAqLworICAwLAkJCQkgIC8qIHRwX2FsbG9jICovCisgIHBzcHlf bmV3LAkJCSAgLyogdHBfbmV3ICovCit9OwpJbmRleDogcHl0aG9uL3B5dGhv bi1pbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5oLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRpZmYgLXUgLXAgLXIxLjIyIHB5 dGhvbi1pbnRlcm5hbC5oCi0tLSBweXRob24vcHl0aG9uLWludGVybmFsLmgJ OSBNYXIgMjAxMCAxNzoxMjo0MCAtMDAwMAkxLjIyCisrKyBweXRob24vcHl0 aG9uLWludGVybmFsLmgJOCBBcHIgMjAxMCAyMTo0MjozMSAtMDAwMApAQCAt NjgsNiArNjgsNyBAQCB0eXBlZGVmIGludCBQeV9zc2l6ZV90Owogc3RydWN0 IGJsb2NrOwogc3RydWN0IHZhbHVlOwogc3RydWN0IGxhbmd1YWdlX2RlZm47 CitzdHJ1Y3QgcHJvZ3JhbV9zcGFjZTsKIAogZXh0ZXJuIFB5T2JqZWN0ICpn ZGJfbW9kdWxlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCB2YWx1ZV9vYmplY3Rf dHlwZTsKQEAgLTg5LDggKzkwLDExIEBAIFB5T2JqZWN0ICpzeW1ib2xfdG9f c3ltYm9sX29iamVjdCAoc3RydWMKIFB5T2JqZWN0ICpibG9ja190b19ibG9j a19vYmplY3QgKHN0cnVjdCBibG9jayAqYmxvY2ssIHN0cnVjdCBvYmpmaWxl ICpvYmpmaWxlKTsKIFB5T2JqZWN0ICp2YWx1ZV90b192YWx1ZV9vYmplY3Qg KHN0cnVjdCB2YWx1ZSAqdik7CiBQeU9iamVjdCAqdHlwZV90b190eXBlX29i amVjdCAoc3RydWN0IHR5cGUgKik7Ci1QeU9iamVjdCAqb2JqZmlsZV90b19v YmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbGUgKik7CiAKK1B5T2JqZWN0 ICpwc3BhY2VfdG9fcHNwYWNlX29iamVjdCAoc3RydWN0IHByb2dyYW1fc3Bh Y2UgKik7CitQeU9iamVjdCAqcHNweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0 ICosIHZvaWQgKik7CisKK1B5T2JqZWN0ICpvYmpmaWxlX3RvX29iamZpbGVf b2JqZWN0IChzdHJ1Y3Qgb2JqZmlsZSAqKTsKIFB5T2JqZWN0ICpvYmpmcHlf Z2V0X3ByaW50ZXJzIChQeU9iamVjdCAqLCB2b2lkICopOwogCiBzdHJ1Y3Qg YmxvY2sgKmJsb2NrX29iamVjdF90b19ibG9jayAoUHlPYmplY3QgKm9iaik7 CkBAIC0xMTAsNiArMTE0LDcgQEAgdm9pZCBnZGJweV9pbml0aWFsaXplX3N5 bXRhYnMgKHZvaWQpOwogdm9pZCBnZGJweV9pbml0aWFsaXplX2Jsb2NrcyAo dm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxpemVfdHlwZXMgKHZvaWQpOwog dm9pZCBnZGJweV9pbml0aWFsaXplX2Z1bmN0aW9ucyAodm9pZCk7Cit2b2lk IGdkYnB5X2luaXRpYWxpemVfcHNwYWNlICh2b2lkKTsKIHZvaWQgZ2RicHlf aW5pdGlhbGl6ZV9vYmpmaWxlICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlh bGl6ZV9sYXp5X3N0cmluZyAodm9pZCk7CiAKSW5kZXg6IHB5dGhvbi9weXRo b24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Ny Yy9zcmMvZ2RiL3B5dGhvbi9weXRob24uYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4yOApkaWZmIC11IC1wIC1yMS4yOCBweXRob24uYwotLS0gcHl0aG9u L3B5dGhvbi5jCTggQXByIDIwMTAgMDQ6NTc6MjUgLTAwMDAJMS4yOAorKysg cHl0aG9uL3B5dGhvbi5jCTggQXByIDIwMTAgMjE6NDI6MzEgLTAwMDAKQEAg LTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJ1aS1vdXQuaCIKICNpbmNsdWRl ICJjbGkvY2xpLXNjcmlwdC5oIgogI2luY2x1ZGUgImdkYmNtZC5oIgorI2lu Y2x1ZGUgInByb2dzcGFjZS5oIgogI2luY2x1ZGUgIm9iamZpbGVzLmgiCiAj aW5jbHVkZSAib2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJ2YWx1ZS5oIgpAQCAt NDE1LDYgKzQxNiw0NyBAQCBnZGJweV9wcmludF9zdGFjayAodm9pZCkKIAog DAogCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgUHJvZ3NwYWNlLgorICAgVGhl cmUgYWx3YXlzIGlzIG9uZS4gICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitn ZGJweV9nZXRfY3VycmVudF9wcm9nc3BhY2UgKFB5T2JqZWN0ICp1bnVzZWQx LCBQeU9iamVjdCAqdW51c2VkMikKK3sKKyAgUHlPYmplY3QgKnJlc3VsdDsK KworICByZXN1bHQgPSBwc3BhY2VfdG9fcHNwYWNlX29iamVjdCAoY3VycmVu dF9wcm9ncmFtX3NwYWNlKTsKKyAgaWYgKHJlc3VsdCkKKyAgICBQeV9JTkNS RUYgKHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJldHVy biBhIHNlcXVlbmNlIGhvbGRpbmcgYWxsIHRoZSBQcm9nc3BhY2VzLiAgKi8K Kworc3RhdGljIFB5T2JqZWN0ICoKK2dkYnB5X3Byb2dzcGFjZXMgKFB5T2Jq ZWN0ICp1bnVzZWQxLCBQeU9iamVjdCAqdW51c2VkMikKK3sKKyAgc3RydWN0 IHByb2dyYW1fc3BhY2UgKnBzOworICBQeU9iamVjdCAqbGlzdDsKKworICBs aXN0ID0gUHlMaXN0X05ldyAoMCk7CisgIGlmICghbGlzdCkKKyAgICByZXR1 cm4gTlVMTDsKKworICBBTExfUFNQQUNFUyAocHMpCisgIHsKKyAgICBQeU9i amVjdCAqaXRlbSA9IHBzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChwcyk7Cisg ICAgaWYgKCFpdGVtIHx8IFB5TGlzdF9BcHBlbmQgKGxpc3QsIGl0ZW0pID09 IC0xKQorICAgICAgeworCVB5X0RFQ1JFRiAobGlzdCk7CisJcmV0dXJuIE5V TEw7CisgICAgICB9CisgIH0KKworICByZXR1cm4gbGlzdDsKK30KKworDAor CiAvKiBUaGUgImN1cnJlbnQiIG9iamZpbGUuICBUaGlzIGlzIHNldCB3aGVu IGdkYiBkZXRlY3RzIHRoYXQgYSBuZXcKICAgIG9iamZpbGUgaGFzIGJlZW4g bG9hZGVkLiAgSXQgaXMgb25seSBzZXQgZm9yIHRoZSBkdXJhdGlvbiBvZiBh IGNhbGwKICAgIHRvIGdkYnB5X25ld19vYmpmaWxlOyBpdCBpcyBOVUxMIGF0 IG90aGVyIHRpbWVzLiAgKi8KQEAgLTUxMCw2ICs1NTIsNyBAQCBnZGJweV9n ZXRfY3VycmVudF9vYmpmaWxlIChQeU9iamVjdCAqdW51CiB9CiAKIC8qIFJl dHVybiBhIHNlcXVlbmNlIGhvbGRpbmcgYWxsIHRoZSBPYmpmaWxlcy4gICov CisKIHN0YXRpYyBQeU9iamVjdCAqCiBnZGJweV9vYmpmaWxlcyAoUHlPYmpl Y3QgKnVudXNlZDEsIFB5T2JqZWN0ICp1bnVzZWQyKQogewpAQCAtNjY3LDYg KzcxNiw3IEBAIEVuYWJsZXMgb3IgZGlzYWJsZXMgYXV0by1sb2FkaW5nIG9m IFB5dGgKICAgZ2RicHlfaW5pdGlhbGl6ZV9ibG9ja3MgKCk7CiAgIGdkYnB5 X2luaXRpYWxpemVfZnVuY3Rpb25zICgpOwogICBnZGJweV9pbml0aWFsaXpl X3R5cGVzICgpOworICBnZGJweV9pbml0aWFsaXplX3BzcGFjZSAoKTsKICAg Z2RicHlfaW5pdGlhbGl6ZV9vYmpmaWxlICgpOwogICBnZGJweV9pbml0aWFs aXplX2xhenlfc3RyaW5nICgpOwogCkBAIC03MjksNiArNzc5LDExIEBAIHN0 YXRpYyBQeU1ldGhvZERlZiBHZGJNZXRob2RzW10gPQogICB7ICJkZWZhdWx0 X3Zpc3VhbGl6ZXIiLCBnZGJweV9kZWZhdWx0X3Zpc3VhbGl6ZXIsIE1FVEhf VkFSQVJHUywKICAgICAiRmluZCB0aGUgZGVmYXVsdCB2aXN1YWxpemVyIGZv ciBhIFZhbHVlLiIgfSwKIAorICB7ICJjdXJyZW50X3Byb2dzcGFjZSIsIGdk YnB5X2dldF9jdXJyZW50X3Byb2dzcGFjZSwgTUVUSF9OT0FSR1MsCisgICAg IlJldHVybiB0aGUgY3VycmVudCBQcm9nc3BhY2UuIiB9LAorICB7ICJwcm9n c3BhY2VzIiwgZ2RicHlfcHJvZ3NwYWNlcywgTUVUSF9OT0FSR1MsCisgICAg IlJldHVybiBhIHNlcXVlbmNlIG9mIGFsbCBwcm9nc3BhY2VzLiIgfSwKKwog ICB7ICJjdXJyZW50X29iamZpbGUiLCBnZGJweV9nZXRfY3VycmVudF9vYmpm aWxlLCBNRVRIX05PQVJHUywKICAgICAiUmV0dXJuIHRoZSBjdXJyZW50IE9i amZpbGUgYmVpbmcgbG9hZGVkLCBvciBOb25lLiIgfSwKICAgeyAib2JqZmls ZXMiLCBnZGJweV9vYmpmaWxlcywgTUVUSF9OT0FSR1MsCkluZGV4OiB0ZXN0 c3VpdGUvZ2RiLnB5dGhvbi9weS1wcm9nc3BhY2UuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1w cm9nc3BhY2UuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXBy b2dzcGFjZS5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAt MDAwMAorKysgdGVzdHN1aXRlL2dkYi5weXRob24vcHktcHJvZ3NwYWNlLmMJ OCBBcHIgMjAxMCAyMTo0MjozMSAtMDAwMApAQCAtMCwwICsxLDIyIEBACisv KiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVn Z2VyLgorCisgICBDb3B5cmlnaHQgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor aW50CittYWluICgpCit7CisgIHJldHVybiAwOworfQpJbmRleDogdGVzdHN1 aXRlL2dkYi5weXRob24vcHktcHJvZ3NwYWNlLmV4cAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1w cm9nc3BhY2UuZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRob24vcHkt cHJvZ3NwYWNlLmV4cAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6 MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LXByb2dzcGFj ZS5leHAJOCBBcHIgMjAxMCAyMTo0MjozMSAtMDAwMApAQCAtMCwwICsxLDQ3 IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIwor IyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIHRoZSBw cm9ncmFtIHNwYWNlCisjIHN1cHBvcnQgaW4gUHl0aG9uLgorCitpZiAkdHJh Y2VsZXZlbCB0aGVuIHsKKyAgICBzdHJhY2UgJHRyYWNlbGV2ZWwKK30KKwor c2V0IHRlc3RmaWxlICJweS1wcm9nc3BhY2UiCitzZXQgc3JjZmlsZSAke3Rl c3RmaWxlfS5jCitzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9LyR7 dGVzdGZpbGV9CitpZiB7IFtnZGJfY29tcGlsZSAiJHtzcmNkaXJ9LyR7c3Vi ZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSB7ZGVi dWd9XSAhPSAiIiB9IHsKKyAgICB1bnRlc3RlZCAiQ291bGRuJ3QgY29tcGls ZSAke3NyY2ZpbGV9IgorICAgIHJldHVybiAtMQorfQorCisjIFN0YXJ0IHdp dGggYSBmcmVzaCBnZGIuCisKK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9y ZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorCisjIFNraXAgYWxs IHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCitp ZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworZ2Ri X3Rlc3QgInB5dGhvbiBwcmludCBnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5m aWxlbmFtZSIgIk5vbmUiIFwKKyAgImN1cnJlbnQgcHJvZ3NwYWNlIGZpbGVu YW1lIChOb25lKSIKK2dkYl90ZXN0ICJweXRob24gcHJpbnQgZ2RiLnByb2dz cGFjZXMoKSIgIlxcXFs8Z2RiLlByb2dzcGFjZSBvYmplY3QgYXQgJGhleD5c XFxdIgorCitnZGJfbG9hZCAke2JpbmZpbGV9CisKK2dkYl90ZXN0ICJweXRo b24gcHJpbnQgZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkuZmlsZW5hbWUiICJw eS1wcm9nc3BhY2UiIFwKKyAgImN1cnJlbnQgcHJvZ3NwYWNlIGZpbGVuYW1l IChweS1wcm9nc3BhY2UpIgo= --000e0cd1a0aa989ed80483c12472--