From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4639 invoked by alias); 21 Apr 2010 19:23:57 -0000 Received: (qmail 4350 invoked by uid 22791); 21 Apr 2010 19:23:44 -0000 X-SWARE-Spam-Status: No, hits=0.9 required=5.0 tests=BAYES_20,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SARE_MSGID_LONG45,SPF_HELO_PASS,TW_BJ,TW_CP,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (74.125.121.35) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 21 Apr 2010 19:23:24 +0000 Received: from hpaq12.eem.corp.google.com (hpaq12.eem.corp.google.com [10.3.21.12]) by smtp-out.google.com with ESMTP id o3LJNJgZ007628 for ; Wed, 21 Apr 2010 21:23:20 +0200 Received: from pzk4 (pzk4.prod.google.com [10.243.19.132]) by hpaq12.eem.corp.google.com with ESMTP id o3LJMMg8025370 for ; Wed, 21 Apr 2010 21:23:18 +0200 Received: by pzk4 with SMTP id 4so1116022pzk.9 for ; Wed, 21 Apr 2010 12:23:17 -0700 (PDT) MIME-Version: 1.0 Received: by 10.141.91.13 with HTTP; Wed, 21 Apr 2010 12:23:16 -0700 (PDT) In-Reply-To: References: <20100416070540.4205E84396@ruffy.mtv.corp.google.com> <83tyrbwxex.fsf@gnu.org> <83bpdjccpc.fsf@gnu.org> Date: Wed, 21 Apr 2010 19:23:00 -0000 Received: by 10.140.251.20 with SMTP id y20mr5478918rvh.206.1271877797074; Wed, 21 Apr 2010 12:23:17 -0700 (PDT) Message-ID: Subject: Re: [RFA] [1/2] auto-loading scripts from .debug_gdb_scripts section From: Doug Evans To: Eli Zaretskii , Tom Tromey , gdb-patches Content-Type: multipart/mixed; boundary=000e0cd112504ad8500484c42073 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/msg00694.txt.bz2 --000e0cd112504ad8500484c42073 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1805 I've applied the requested doc changes, except that Auto-loading is still moved up one level, moved from node Python API to node Python. I'm going to defer fixing DOS path support to a separate patch. This is a bug in the existing code (all this patch does is move said code from one file to another), and I don't want to overload this patch. If there are no objections I will check this in tomorrow. 2010-04-21 Doug Evans Add support for auto-loading scripts from .debug_gdb_scripts section. * NEWS: Add entry for .debug_gdb_scripts. * Makefile.in SUBDIR_PYTHON_OBS): Add py-auto-load.o. (SUBDIR_PYTHON_SRCS): Add py-auto-load.c. (py-auto-load.o): New rule. * cli/cli-cmds.c (find_and_open_script): Make externally visible. * cli/cli-cmds.h (find_and_open_script): Update prototype. * python/py-auto-load.c: New file. * python/python-internal.h: #include . (set_python_list, show_python_list): Declare. (gdbpy_initialize_auto_load): Declare. (source_python_script_for_objfile): Declare. * python/python.c: Remove #include of observer.h. (gdbpy_auto_load): Moved to py-auto-load.c. (GDBPY_AUTO_FILENAME): Ditto. (gdbpy_new_objfile): Delete. (source_python_script_for_objfile): New function. (set_python_list, show_python_list): Make externally visible. (_initialize_python): Move "auto-load" command to py-auto-load.c and observer_attach_new_objfile to py-auto-load.c. doc/ * gdb.texinfo (Python): Move Auto-loading section here ... (Python API): from here. (Auto-loading): Add docs for .debug_gdb_scripts auto-loaded scripts. (Maintenance Commands): Add docs for "maint print section-scripts". testsuite/ * gdb.python/py-section-script.c: New file. * gdb.python/py-section-script.exp: New file. * gdb.python/py-section-script.py: New file. --000e0cd112504ad8500484c42073 Content-Type: text/plain; charset=US-ASCII; name="gdb-100421-debug-gdb-scripts-2.patch.txt" Content-Disposition: attachment; filename="gdb-100421-debug-gdb-scripts-2.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g8aj66x90 Content-length: 56873 MjAxMC0wNC0yMSAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCUFk ZCBzdXBwb3J0IGZvciBhdXRvLWxvYWRpbmcgc2NyaXB0cyBmcm9tIC5kZWJ1 Z19nZGJfc2NyaXB0cyBzZWN0aW9uLgoJKiBORVdTOiBBZGQgZW50cnkgZm9y IC5kZWJ1Z19nZGJfc2NyaXB0cy4KCSogTWFrZWZpbGUuaW4gU1VCRElSX1BZ VEhPTl9PQlMpOiBBZGQgcHktYXV0by1sb2FkLm8uCgkoU1VCRElSX1BZVEhP Tl9TUkNTKTogQWRkIHB5LWF1dG8tbG9hZC5jLgoJKHB5LWF1dG8tbG9hZC5v KTogTmV3IHJ1bGUuCgkqIGNsaS9jbGktY21kcy5jIChmaW5kX2FuZF9vcGVu X3NjcmlwdCk6IE1ha2UgZXh0ZXJuYWxseSB2aXNpYmxlLgoJKiBjbGkvY2xp LWNtZHMuaCAoZmluZF9hbmRfb3Blbl9zY3JpcHQpOiBVcGRhdGUgcHJvdG90 eXBlLgoJKiBweXRob24vcHktYXV0by1sb2FkLmM6IE5ldyBmaWxlLgoJKiBw eXRob24vcHl0aG9uLWludGVybmFsLmg6ICNpbmNsdWRlIDxzdGRpby5oPi4K CShzZXRfcHl0aG9uX2xpc3QsIHNob3dfcHl0aG9uX2xpc3QpOiBEZWNsYXJl LgoJKGdkYnB5X2luaXRpYWxpemVfYXV0b19sb2FkKTogRGVjbGFyZS4KCShz b3VyY2VfcHl0aG9uX3NjcmlwdF9mb3Jfb2JqZmlsZSk6IERlY2xhcmUuCgkq IHB5dGhvbi9weXRob24uYzogUmVtb3ZlICNpbmNsdWRlIG9mIG9ic2VydmVy LmguCgkoZ2RicHlfYXV0b19sb2FkKTogTW92ZWQgdG8gcHktYXV0by1sb2Fk LmMuCgkoR0RCUFlfQVVUT19GSUxFTkFNRSk6IERpdHRvLgoJKGdkYnB5X25l d19vYmpmaWxlKTogRGVsZXRlLgoJKHNvdXJjZV9weXRob25fc2NyaXB0X2Zv cl9vYmpmaWxlKTogTmV3IGZ1bmN0aW9uLgoJKHNldF9weXRob25fbGlzdCwg c2hvd19weXRob25fbGlzdCk6IE1ha2UgZXh0ZXJuYWxseSB2aXNpYmxlLgoJ KF9pbml0aWFsaXplX3B5dGhvbik6IE1vdmUgImF1dG8tbG9hZCIgY29tbWFu ZCB0byBweS1hdXRvLWxvYWQuYwoJYW5kIG9ic2VydmVyX2F0dGFjaF9uZXdf b2JqZmlsZSB0byBweS1hdXRvLWxvYWQuYy4KCglkb2MvCgkqIGdkYi50ZXhp bmZvIChQeXRob24pOiBNb3ZlIEF1dG8tbG9hZGluZyBzZWN0aW9uIGhlcmUg Li4uCgkoUHl0aG9uIEFQSSk6IGZyb20gaGVyZS4KCShBdXRvLWxvYWRpbmcp OiBBZGQgZG9jcyBmb3IgLmRlYnVnX2dkYl9zY3JpcHRzIGF1dG8tbG9hZGVk IHNjcmlwdHMuCgkoTWFpbnRlbmFuY2UgQ29tbWFuZHMpOiBBZGQgZG9jcyBm b3IgIm1haW50IHByaW50IHNlY3Rpb24tc2NyaXB0cyIuCgoJdGVzdHN1aXRl LwoJKiBnZGIucHl0aG9uL3B5LXNlY3Rpb24tc2NyaXB0LmM6IE5ldyBmaWxl LgoJKiBnZGIucHl0aG9uL3B5LXNlY3Rpb24tc2NyaXB0LmV4cDogTmV3IGZp bGUuCgkqIGdkYi5weXRob24vcHktc2VjdGlvbi1zY3JpcHQucHk6IE5ldyBm aWxlLgoKSW5kZXg6IE1ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvTWFrZWZpbGUuaW4sdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTExOApkaWZmIC11IC1wIC1yMS4xMTE4 IE1ha2VmaWxlLmluCi0tLSBNYWtlZmlsZS5pbgkxNSBBcHIgMjAxMCAxOTo1 NDoxMiAtMDAwMAkxLjExMTgKKysrIE1ha2VmaWxlLmluCTIxIEFwciAyMDEw IDE5OjA3OjE2IC0wMDAwCkBAIC0yNjcsNiArMjY3LDcgQEAgU1VCRElSX1RV SV9DRkxBR1M9IFwKICMKIFNVQkRJUl9QWVRIT05fT0JTID0gXAogCXB5dGhv bi5vIFwKKwlweS1hdXRvLWxvYWQubyBcCiAJcHktYmxvY2subyBcCiAJcHkt YnJlYWtwb2ludC5vIFwKIAlweS1jbWQubyBcCkBAIC0yODMsNiArMjg0LDcg QEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCiAJcHktdmFsdWUubwogU1VCRElS X1BZVEhPTl9TUkNTID0gXAogCXB5dGhvbi9weXRob24uYyBcCisJcHl0aG9u L3B5LWF1dG8tbG9hZC5jIFwKIAlweXRob24vcHktYmxvY2suYyBcCiAJcHl0 aG9uL3B5LWJyZWFrcG9pbnQuYyBcCiAJcHl0aG9uL3B5LWNtZC5jIFwKQEAg LTE5ODYsNiArMTk4OCwxMCBAQCBweXRob24ubzogJChzcmNkaXIpL3B5dGhv bi9weXRob24uYwogCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNy Y2RpcikvcHl0aG9uL3B5dGhvbi5jCiAJJChQT1NUQ09NUElMRSkKIAorcHkt YXV0by1sb2FkLm86ICQoc3JjZGlyKS9weXRob24vcHktYXV0by1sb2FkLmMK KwkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhv bi9weS1hdXRvLWxvYWQuYworCSQoUE9TVENPTVBJTEUpCisKIHB5LWJsb2Nr Lm86ICQoc3JjZGlyKS9weXRob24vcHktYmxvY2suYwogCSQoQ09NUElMRSkg JChQWVRIT05fQ0ZMQUdTKSAkKHNyY2RpcikvcHl0aG9uL3B5LWJsb2NrLmMK IAkkKFBPU1RDT01QSUxFKQpJbmRleDogTkVXUwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL05FV1MsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMzczCmRpZmYgLXUgLXAgLXIxLjM3MyBORVdT Ci0tLSBORVdTCTE5IEFwciAyMDEwIDAwOjQ4OjQzIC0wMDAwCTEuMzczCisr KyBORVdTCTIxIEFwciAyMDEwIDE5OjA3OjE3IC0wMDAwCkBAIC02Nyw2ICs2 NywxMCBAQCBpcyBub3cgZGVwcmVjYXRlZC4KIAogKiogUHJldHR5LXByaW50 ZXJzIGFyZSBub3cgYWxzbyBsb29rZWQgdXAgaW4gdGhlIGN1cnJlbnQgcHJv Z3JhbSBzcGFjZS4KIAorKiogR0RCIG5vdyBsb29rcyBmb3IgbmFtZXMgb2Yg UHl0aG9uIHNjcmlwdHMgdG8gYXV0by1sb2FkIGluIGEKKyAgIHNwZWNpYWwg c2VjdGlvbiBuYW1lZCBgLmRlYnVnX2dkYl9zY3JpcHRzJywgaW4gYWRkaXRp b24gdG8gbG9va2luZworICAgZm9yIGEgT0JKRklMRS1nZGIucHkgc2NyaXB0 IHdoZW4gT0JKRklMRSBpcyByZWFkIGJ5IHRoZSBkZWJ1Z2dlci4KKwogKiBU cmFjZXBvaW50IGFjdGlvbnMgd2VyZSB1bmlmaWVkIHdpdGggYnJlYWtwb2lu dCBjb21tYW5kcy4gSW4gcGFydGljdWxhciwKIHRoZXJlIGFyZSBubyBsb25n ZXIgZGlmZmVyZW5jZXMgaW4gImluZm8gYnJlYWsiIG91dHB1dCBmb3IgYnJl YWtwb2ludHMgYW5kCiB0cmFjZXBvaW50cyBhbmQgdGhlICJjb21tYW5kcyIg Y29tbWFuZCBjYW4gYmUgdXNlZCBmb3IgYm90aCB0cmFjZXBvaW50cyBhbmQK SW5kZXg6IGNsaS9jbGktY21kcy5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvY2xpL2NsaS1jbWRzLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAxCmRpZmYgLXUgLXAgLXIxLjEwMSBj bGktY21kcy5jCi0tLSBjbGkvY2xpLWNtZHMuYwkxNSBBcHIgMjAxMCAxNzo0 NTo1MiAtMDAwMAkxLjEwMQorKysgY2xpL2NsaS1jbWRzLmMJMjEgQXByIDIw MTAgMTk6MDc6MTcgLTAwMDAKQEAgLTQ4Myw3ICs0ODMsNyBAQCBTY3JpcHQg ZmlsZW5hbWUgZXh0ZW5zaW9uIHJlY29nbml0aW9uIGlzCiAgICBOT1RFOiBU aGlzIGNhbGxzIG9wZW5wIHdoaWNoIHVzZXMgeGZ1bGxwYXRoIHRvIGNvbXB1 dGUgdGhlIGZ1bGwgcGF0aAogICAgaW5zdGVhZCBvZiBnZGJfcmVhbHBhdGgu ICBTeW1ib2xpYyBsaW5rcyBhcmUgbm90IHJlc29sdmVkLiAgKi8KIAotc3Rh dGljIGludAoraW50CiBmaW5kX2FuZF9vcGVuX3NjcmlwdCAoY29uc3QgY2hh ciAqc2NyaXB0X2ZpbGUsIGludCBzZWFyY2hfcGF0aCwKIAkJICAgICAgRklM RSAqKnN0cmVhbXAsIGNoYXIgKipmdWxsX3BhdGhwKQogewpJbmRleDogY2xp L2NsaS1jbWRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9jbGkvY2xpLWNtZHMuaCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBjbGktY21kcy5oCi0t LSBjbGkvY2xpLWNtZHMuaAkxIEphbiAyMDEwIDA3OjMxOjQ2IC0wMDAwCTEu MTQKKysrIGNsaS9jbGktY21kcy5oCTIxIEFwciAyMDEwIDE5OjA3OjE3IC0w MDAwCkBAIC0xMjMsNiArMTIzLDExIEBAIGV4dGVybiB2b2lkIHF1aXRfY29t bWFuZCAoY2hhciAqLCBpbnQpOwogCiBleHRlcm4gdm9pZCBzb3VyY2Vfc2Ny aXB0IChjaGFyICosIGludCk7CiAKKy8qIEV4cG9ydGVkIHRvIG9iamZpbGVz LmMuICAqLworCitleHRlcm4gaW50IGZpbmRfYW5kX29wZW5fc2NyaXB0IChj b25zdCBjaGFyICpmaWxlLCBpbnQgc2VhcmNoX3BhdGgsCisJCQkJIEZJTEUg KipzdHJlYW1wLCBjaGFyICoqZnVsbF9wYXRoKTsKKwogLyogVXNlZCBldmVy eXdoZXJlIHdoZW5ldmVyIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgaXMgcmVx dWlyZWQgYW5kCiAgIG5vbmUgaXMgc3BlY2lmaWVkLiAqLwogCkluZGV4OiBk b2MvZ2RiLnRleGluZm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9kb2MvZ2RiLnRleGluZm8sdgpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuNzA4CmRpZmYgLXUgLXAgLXIxLjcwOCBnZGIudGV4 aW5mbwotLS0gZG9jL2dkYi50ZXhpbmZvCTE5IEFwciAyMDEwIDAwOjQ4OjQ0 IC0wMDAwCTEuNzA4CisrKyBkb2MvZ2RiLnRleGluZm8JMjEgQXByIDIwMTAg MTk6MDc6MTggLTAwMDAKQEAgLTE5Njg1LDYgKzE5Njg1LDcgQEAgUHl0aG9u IHByb2dyYW1taW5nIGxhbmd1YWdlfS4gIFRoaXMgZmVhdAogQG1lbnUKICog UHl0aG9uIENvbW1hbmRzOjogICAgICAgICAgICAgQWNjZXNzaW5nIFB5dGhv biBmcm9tIEB2YWx1ZXtHREJOfS4KICogUHl0aG9uIEFQSTo6ICAgICAgICAg ICAgICAgICAgQWNjZXNzaW5nIEB2YWx1ZXtHREJOfSBmcm9tIFB5dGhvbi4K KyogQXV0by1sb2FkaW5nOjogICAgICAgICAgICAgICAgQXV0b21hdGljYWxs eSBsb2FkaW5nIFB5dGhvbiBjb2RlLgogQGVuZCBtZW51CiAKIEBub2RlIFB5 dGhvbiBDb21tYW5kcwpAQCAtMTk3NjIsNyArMTk3NjMsNiBAQCBzaXR1YXRp b24sIGEgUHl0aG9uIEBjb2Rle0tleWJvYXJkSW50ZXJyCiBAbWVudQogKiBC YXNpYyBQeXRob246OiAgICAgICAgICAgICAgICBCYXNpYyBQeXRob24gRnVu Y3Rpb25zLgogKiBFeGNlcHRpb24gSGFuZGxpbmc6OgotKiBBdXRvLWxvYWRp bmc6OiAgICAgICAgICAgICAgICBBdXRvbWF0aWNhbGx5IGxvYWRpbmcgUHl0 aG9uIGNvZGUuCiAqIFZhbHVlcyBGcm9tIEluZmVyaW9yOjoKICogVHlwZXMg SW4gUHl0aG9uOjoJCVB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiB0eXBlcy4K ICogUHJldHR5IFByaW50aW5nOjoJCVByZXR0eS1wcmludGluZyB2YWx1ZXMu CkBAIC0xOTkwOCw1MyArMTk5MDgsNiBAQCBtZXNzYWdlIGFzIGl0cyB2YWx1 ZSwgYW5kIHRoZSBQeXRob24gY2FsCiBQeXRob24gc3RhdGVtZW50IGNsb3Nl c3QgdG8gd2hlcmUgdGhlIEB2YWx1ZXtHREJOfSBlcnJvciBvY2N1cmVkIGFz IHRoZQogdHJhY2ViYWNrLgogCi1Abm9kZSBBdXRvLWxvYWRpbmcKLUBzdWJz dWJzZWN0aW9uIEF1dG8tbG9hZGluZwotQGNpbmRleCBhdXRvLWxvYWRpbmcs IFB5dGhvbgotCi1XaGVuIGEgbmV3IG9iamVjdCBmaWxlIGlzIHJlYWQgKGZv ciBleGFtcGxlLCBkdWUgdG8gdGhlIEBjb2Rle2ZpbGV9Ci1jb21tYW5kLCBv ciBiZWNhdXNlIHRoZSBpbmZlcmlvciBoYXMgbG9hZGVkIGEgc2hhcmVkIGxp YnJhcnkpLAotQHZhbHVle0dEQk59IHdpbGwgbG9vayBmb3IgYSBmaWxlIG5h bWVkIEBmaWxle0B2YXJ7b2JqZmlsZX0tZ2RiLnB5fSwKLXdoZXJlIEB2YXJ7 b2JqZmlsZX0gaXMgdGhlIG9iamVjdCBmaWxlJ3MgcmVhbCBuYW1lLCBmb3Jt ZWQgYnkgZW5zdXJpbmcKLXRoYXQgdGhlIGZpbGUgbmFtZSBpcyBhYnNvbHV0 ZSwgZm9sbG93aW5nIGFsbCBzeW1saW5rcywgYW5kIHJlc29sdmluZwotQGNv ZGV7Ln0gYW5kIEBjb2Rley4ufSAgY29tcG9uZW50cy4gIElmIHRoaXMgZmls ZSBleGlzdHMgYW5kIGlzCi1yZWFkYWJsZSwgQHZhbHVle0dEQk59IHdpbGwg ZXZhbHVhdGUgaXQgYXMgYSBQeXRob24gc2NyaXB0LgotCi1JZiB0aGlzIGZp bGUgZG9lcyBub3QgZXhpc3QsIGFuZCBpZiB0aGUgcGFyYW1ldGVyCi1AY29k ZXtkZWJ1Zy1maWxlLWRpcmVjdG9yeX0gaXMgc2V0IChAcHhyZWZ7U2VwYXJh dGUgRGVidWcgRmlsZXN9KSwKLXRoZW4gQHZhbHVle0dEQk59IHdpbGwgdXNl IGZvciBpdHMgZWFjaCBzZXBhcmF0ZWQgZGlyZWN0b3J5IGNvbXBvbmVudAot QGNvZGV7Y29tcG9uZW50fSB0aGUgZmlsZSBuYW1lZCBAZmlsZXtAY29kZXtj b21wb25lbnR9L0B2YXJ7cmVhbC1uYW1lfX0sIHdoZXJlCi1AdmFye3JlYWwt bmFtZX0gaXMgdGhlIG9iamVjdCBmaWxlJ3MgcmVhbCBuYW1lLCBhcyBkZXNj cmliZWQgYWJvdmUuCi0KLUZpbmFsbHksIGlmIHRoaXMgZmlsZSBkb2VzIG5v dCBleGlzdCwgdGhlbiBAdmFsdWV7R0RCTn0gd2lsbCBsb29rIGZvcgotYSBm aWxlIG5hbWVkIEBmaWxle0B2YXJ7ZGF0YS1kaXJlY3Rvcnl9L3B5dGhvbi9h dXRvLWxvYWQvQHZhcntyZWFsLW5hbWV9fSwgd2hlcmUKLUB2YXJ7ZGF0YS1k aXJlY3Rvcnl9IGlzIEB2YWx1ZXtHREJOfSdzIGRhdGEgZGlyZWN0b3J5IChh dmFpbGFibGUgdmlhCi1AY29kZXtzaG93IGRhdGEtZGlyZWN0b3J5fSwgQHB4 cmVme0RhdGEgRmlsZXN9KSwgYW5kIEB2YXJ7cmVhbC1uYW1lfQotaXMgdGhl IG9iamVjdCBmaWxlJ3MgcmVhbCBuYW1lLCBhcyBkZXNjcmliZWQgYWJvdmUu Ci0KLVdoZW4gcmVhZGluZyBhbiBhdXRvLWxvYWRlZCBmaWxlLCBAdmFsdWV7 R0RCTn0gc2V0cyB0aGUgYGBjdXJyZW50Ci1vYmpmaWxlJycuICBUaGlzIGlz IGF2YWlsYWJsZSB2aWEgdGhlIEBjb2Rle2dkYi5jdXJyZW50X29iamZpbGV9 Ci1mdW5jdGlvbiAoQHB4cmVme09iamZpbGVzIEluIFB5dGhvbn0pLiAgVGhp cyBjYW4gYmUgdXNlZnVsIGZvcgotcmVnaXN0ZXJpbmcgb2JqZmlsZS1zcGVj aWZpYyBwcmV0dHktcHJpbnRlcnMuCi0KLVRoZSBhdXRvLWxvYWRpbmcgZmVh dHVyZSBpcyB1c2VmdWwgZm9yIHN1cHBseWluZyBhcHBsaWNhdGlvbi1zcGVj aWZpYwotZGVidWdnaW5nIGNvbW1hbmRzIGFuZCBzY3JpcHRzLiAgWW91IGNh biBlbmFibGUgb3IgZGlzYWJsZSB0aGlzCi1mZWF0dXJlLCBhbmQgdmlldyBp dHMgY3VycmVudCBzdGF0ZS4KLQotQHRhYmxlIEBjb2RlCi1Aa2luZGV4IG1h aW50IHNldCBweXRob24gYXV0by1sb2FkCi1AaXRlbSBtYWludCBzZXQgcHl0 aG9uIGF1dG8tbG9hZCBbeWVzfG5vXQotRW5hYmxlIG9yIGRpc2FibGUgdGhl IFB5dGhvbiBhdXRvLWxvYWRpbmcgZmVhdHVyZS4KLQotQGtpbmRleCBtYWlu dCBzaG93IHB5dGhvbiBhdXRvLWxvYWQKLUBpdGVtIG1haW50IHNob3cgcHl0 aG9uIGF1dG8tbG9hZAotU2hvdyB3aGV0aGVyIFB5dGhvbiBhdXRvLWxvYWRp bmcgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLUBlbmQgdGFibGUKLQotQHZh bHVle0dEQk59IGRvZXMgbm90IHRyYWNrIHdoaWNoIGZpbGVzIGl0IGhhcyBh bHJlYWR5IGF1dG8tbG9hZGVkLgotU28sIHlvdXIgQHNhbXB7LWdkYi5weX0g ZmlsZSBzaG91bGQgdGFrZSBjYXJlIHRvIGVuc3VyZSB0aGF0IGl0IG1heSBi ZQotZXZhbHVhdGVkIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgZXJyb3IuCi0K IEBub2RlIFZhbHVlcyBGcm9tIEluZmVyaW9yCiBAc3Vic3Vic2VjdGlvbiBW YWx1ZXMgRnJvbSBJbmZlcmlvcgogQGNpbmRleCB2YWx1ZXMgZnJvbSBpbmZl cmlvciwgd2l0aCBQeXRob24KQEAgLTIxNjExLDYgKzIxNTY0LDE2MyBAQCBy ZXNvbHZlIHRoaXMgdG8gdGhlIGxhenkgc3RyaW5nJ3MgY2hhcmFjCiB3cml0 YWJsZS4KIEBlbmQgZGVmaXZhcgogCitAbm9kZSBBdXRvLWxvYWRpbmcKK0Bz dWJzZWN0aW9uIEF1dG8tbG9hZGluZworQGNpbmRleCBhdXRvLWxvYWRpbmcs IFB5dGhvbgorCitXaGVuIGEgbmV3IG9iamVjdCBmaWxlIGlzIHJlYWQgKGZv ciBleGFtcGxlLCBkdWUgdG8gdGhlIEBjb2Rle2ZpbGV9Citjb21tYW5kLCBv ciBiZWNhdXNlIHRoZSBpbmZlcmlvciBoYXMgbG9hZGVkIGEgc2hhcmVkIGxp YnJhcnkpLAorQHZhbHVle0dEQk59IHdpbGwgbG9vayBmb3IgUHl0aG9uIHN1 cHBvcnQgc2NyaXB0cyBpbiBzZXZlcmFsIHdheXM6CitAZmlsZXtAdmFye29i amZpbGV9LWdkYi5weX0gYW5kIEBjb2Rley5kZWJ1Z19nZGJfc2NyaXB0c30g c2VjdGlvbi4KKworQG1lbnUKKyogb2JqZmlsZS1nZGIucHkgZmlsZTo6ICAg ICAgICAgVGhlIEBmaWxle0B2YXJ7b2JqZmlsZX0tZ2RiLnB5fSBmaWxlCisq IC5kZWJ1Z19nZGJfc2NyaXB0cyBzZWN0aW9uOjogIFRoZSBAY29kZXsuZGVi dWdfZ2RiX3NjcmlwdHN9IHNlY3Rpb24KKyogV2hpY2ggZmxhdm9yIHRvIGNo b29zZT86OgorQGVuZCBtZW51CisKK1RoZSBhdXRvLWxvYWRpbmcgZmVhdHVy ZSBpcyB1c2VmdWwgZm9yIHN1cHBseWluZyBhcHBsaWNhdGlvbi1zcGVjaWZp YworZGVidWdnaW5nIGNvbW1hbmRzIGFuZCBzY3JpcHRzLgorCitBdXRvLWxv YWRpbmcgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisKK0B0YWJsZSBA Y29kZQorQGtpbmRleCBtYWludCBzZXQgcHl0aG9uIGF1dG8tbG9hZAorQGl0 ZW0gbWFpbnQgc2V0IHB5dGhvbiBhdXRvLWxvYWQgW3llc3xub10KK0VuYWJs ZSBvciBkaXNhYmxlIHRoZSBQeXRob24gYXV0by1sb2FkaW5nIGZlYXR1cmUu CisKK0BraW5kZXggbWFpbnQgc2hvdyBweXRob24gYXV0by1sb2FkCitAaXRl bSBtYWludCBzaG93IHB5dGhvbiBhdXRvLWxvYWQKK1Nob3cgd2hldGhlciBQ eXRob24gYXV0by1sb2FkaW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCitA ZW5kIHRhYmxlCisKK1doZW4gcmVhZGluZyBhbiBhdXRvLWxvYWRlZCBmaWxl LCBAdmFsdWV7R0RCTn0gc2V0cyB0aGUKK0BkZm57Y3VycmVudCBvYmpmaWxl fS4gIFRoaXMgaXMgYXZhaWxhYmxlIHZpYSB0aGUgQGNvZGV7Z2RiLmN1cnJl bnRfb2JqZmlsZX0KK2Z1bmN0aW9uIChAcHhyZWZ7T2JqZmlsZXMgSW4gUHl0 aG9ufSkuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yCityZWdpc3RlcmluZyBv YmpmaWxlLXNwZWNpZmljIHByZXR0eS1wcmludGVycy4KKworQG5vZGUgb2Jq ZmlsZS1nZGIucHkgZmlsZQorQHN1YnN1YnNlY3Rpb24gVGhlIEBmaWxle0B2 YXJ7b2JqZmlsZX0tZ2RiLnB5fSBmaWxlCitAY2luZGV4IEBmaWxle0B2YXJ7 b2JqZmlsZX0tZ2RiLnB5fQorCitXaGVuIGEgbmV3IG9iamVjdCBmaWxlIGlz IHJlYWQsIEB2YWx1ZXtHREJOfSBsb29rcyBmb3IKK2EgZmlsZSBuYW1lZCBA ZmlsZXtAdmFye29iamZpbGV9LWdkYi5weX0sCit3aGVyZSBAdmFye29iamZp bGV9IGlzIHRoZSBvYmplY3QgZmlsZSdzIHJlYWwgbmFtZSwgZm9ybWVkIGJ5 IGVuc3VyaW5nCit0aGF0IHRoZSBmaWxlIG5hbWUgaXMgYWJzb2x1dGUsIGZv bGxvd2luZyBhbGwgc3ltbGlua3MsIGFuZCByZXNvbHZpbmcKK0Bjb2Rley59 IGFuZCBAY29kZXsuLn0gY29tcG9uZW50cy4gIElmIHRoaXMgZmlsZSBleGlz dHMgYW5kIGlzCityZWFkYWJsZSwgQHZhbHVle0dEQk59IHdpbGwgZXZhbHVh dGUgaXQgYXMgYSBQeXRob24gc2NyaXB0LgorCitJZiB0aGlzIGZpbGUgZG9l cyBub3QgZXhpc3QsIGFuZCBpZiB0aGUgcGFyYW1ldGVyCitAY29kZXtkZWJ1 Zy1maWxlLWRpcmVjdG9yeX0gaXMgc2V0IChAcHhyZWZ7U2VwYXJhdGUgRGVi dWcgRmlsZXN9KSwKK3RoZW4gQHZhbHVle0dEQk59IHdpbGwgdXNlIGZvciBp dHMgZWFjaCBzZXBhcmF0ZWQgZGlyZWN0b3J5IGNvbXBvbmVudAorQGNvZGV7 Y29tcG9uZW50fSB0aGUgZmlsZSBuYW1lZCBAZmlsZXtAY29kZXtjb21wb25l bnR9L0B2YXJ7cmVhbC1uYW1lfX0sIHdoZXJlCitAdmFye3JlYWwtbmFtZX0g aXMgdGhlIG9iamVjdCBmaWxlJ3MgcmVhbCBuYW1lLCBhcyBkZXNjcmliZWQg YWJvdmUuCisKK0ZpbmFsbHksIGlmIHRoaXMgZmlsZSBkb2VzIG5vdCBleGlz dCwgdGhlbiBAdmFsdWV7R0RCTn0gd2lsbCBsb29rIGZvcgorYSBmaWxlIG5h bWVkIEBmaWxle0B2YXJ7ZGF0YS1kaXJlY3Rvcnl9L3B5dGhvbi9hdXRvLWxv YWQvQHZhcntyZWFsLW5hbWV9fSwgd2hlcmUKK0B2YXJ7ZGF0YS1kaXJlY3Rv cnl9IGlzIEB2YWx1ZXtHREJOfSdzIGRhdGEgZGlyZWN0b3J5IChhdmFpbGFi bGUgdmlhCitAY29kZXtzaG93IGRhdGEtZGlyZWN0b3J5fSwgQHB4cmVme0Rh dGEgRmlsZXN9KSwgYW5kIEB2YXJ7cmVhbC1uYW1lfQoraXMgdGhlIG9iamVj dCBmaWxlJ3MgcmVhbCBuYW1lLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKK0B2 YWx1ZXtHREJOfSBkb2VzIG5vdCB0cmFjayB3aGljaCBmaWxlcyBpdCBoYXMg YWxyZWFkeSBhdXRvLWxvYWRlZCB0aGlzIHdheS4KK0B2YWx1ZXtHREJOfSB3 aWxsIGxvYWQgdGhlIGFzc29jaWF0ZWQgc2NyaXB0IGV2ZXJ5IHRpbWUgdGhl IGNvcnJlc3BvbmRpbmcKK0B2YXJ7b2JqZmlsZX0gaXMgb3BlbmVkLgorU28g eW91ciBAZmlsZXstZ2RiLnB5fSBmaWxlIHNob3VsZCBiZSBjYXJlZnVsIHRv IGF2b2lkIGVycm9ycyBpZiBpdAoraXMgZXZhbHVhdGVkIG1vcmUgdGhhbiBv bmNlLgorCitAbm9kZSAuZGVidWdfZ2RiX3NjcmlwdHMgc2VjdGlvbgorQHN1 YnN1YnNlY3Rpb24gVGhlIEBjb2Rley5kZWJ1Z19nZGJfc2NyaXB0c30gc2Vj dGlvbgorQGNpbmRleCBAY29kZXsuZGVidWdfZ2RiX3NjcmlwdHN9IHNlY3Rp b24KKworRm9yIHN5c3RlbXMgdXNpbmcgZmlsZSBmb3JtYXRzIGxpa2UgRUxG IGFuZCBDT0ZGLAord2hlbiBAdmFsdWV7R0RCTn0gbG9hZHMgYSBuZXcgb2Jq ZWN0IGZpbGUKK2l0IHdpbGwgbG9vayBmb3IgYSBzcGVjaWFsIHNlY3Rpb24g bmFtZWQgQHNhbXB7LmRlYnVnX2dkYl9zY3JpcHRzfS4KK0lmIHRoaXMgc2Vj dGlvbiBleGlzdHMsIGl0cyBjb250ZW50cyBpcyBhIGxpc3Qgb2YgbmFtZXMg b2Ygc2NyaXB0cyB0byBsb2FkLgorCitAdmFsdWV7R0RCTn0gd2lsbCBsb29r IGZvciBlYWNoIHNwZWNpZmllZCBzY3JpcHQgZmlsZSBmaXJzdCBpbiB0aGUK K2N1cnJlbnQgZGlyZWN0b3J5IGFuZCB0aGVuIGFsb25nIHRoZSBzb3VyY2Ug c2VhcmNoIHBhdGgKKyhAcHhyZWZ7U291cmNlIFBhdGgsICxTcGVjaWZ5aW5n IFNvdXJjZSBEaXJlY3Rvcmllc30pLAorZXhjZXB0IHRoYXQgQGZpbGV7JGNk aXJ9IGlzIG5vdCBzZWFyY2hlZCwgc2luY2UgdGhlIGNvbXBpbGF0aW9uCitk aXJlY3RvcnkgaXMgbm90IHJlbGV2YW50IHRvIHNjcmlwdHMuCisKK0VudHJp ZXMgY2FuIGJlIHBsYWNlZCBpbiBzZWN0aW9uIEBjb2Rley5kZWJ1Z19nZGJf c2NyaXB0c30gd2l0aCwKK2ZvciBleGFtcGxlLCB0aGlzIEdDQyBtYWNybzoK KworQGV4YW1wbGUKKy8qIE5vdGU6IFRoZSAiTVMiIHNlY3Rpb24gZmxhZ3Mg YXJlIHRvIHJlbW90ZSBkdXBsaWNhdGVzLiAgKi8KKyNkZWZpbmUgREVGSU5F X0dEQl9TQ1JJUFQoc2NyaXB0X25hbWUpIFwKKyAgYXNtKCJcCisucHVzaHNl Y3Rpb24gXCIuZGVidWdfZ2RiX3NjcmlwdHNcIiwgXCJNU1wiLEBAcHJvZ2Jp dHMsMVxuXAorLmJ5dGUgMVxuXAorLmFzY2l6IFwiIiBzY3JpcHRfbmFtZSAi XCJcblwKKy5wb3BzZWN0aW9uIFxuXAorIik7CitAZW5kIGV4YW1wbGUKKwor QG5vaW5kZW50CitUaGVuIG9uZSBjYW4gcmVmZXJlbmNlIHRoZSBtYWNybyBp biBhIGhlYWRlciBvciBzb3VyY2UgZmlsZSBsaWtlIHRoaXM6CisKK0BleGFt cGxlCitERUZJTkVfR0RCX1NDUklQVCAoIm15LWFwcC1zY3JpcHRzLnB5IikK K0BlbmQgZXhhbXBsZQorCitUaGUgc2NyaXB0IG5hbWUgbWF5IGluY2x1ZGUg ZGlyZWN0b3JpZXMgaWYgZGVzaXJlZC4KKworSWYgdGhlIG1hY3JvIGlzIHB1 dCBpbiBhIGhlYWRlciwgYW55IGFwcGxpY2F0aW9uIG9yIGxpYnJhcnkKK3Vz aW5nIHRoaXMgaGVhZGVyIHdpbGwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBz cGVjaWZpZWQgc2NyaXB0LgorCitAbm9kZSBXaGljaCBmbGF2b3IgdG8gY2hv b3NlPworQHN1YnN1YnNlY3Rpb24gV2hpY2ggZmxhdm9yIHRvIGNob29zZT8K KworR2l2ZW4gdGhlIG11bHRpcGxlIHdheXMgb2YgYXV0by1sb2FkaW5nIFB5 dGhvbiBzY3JpcHRzLCBpdCBtaWdodCBub3QgYWx3YXlzCitiZSBjbGVhciB3 aGljaCBvbmUgdG8gY2hvb3NlLiAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIHNv bWUgZ3VpZGFuY2UuCisKK0JlbmVmaXRzIG9mIHRoZSBAZmlsZXstZ2RiLnB5 fSB3YXk6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitDYW4gYmUgdXNl ZCB3aXRoIGZpbGUgZm9ybWF0cyB0aGF0IGRvbid0IHN1cHBvcnQgbXVsdGlw bGUgc2VjdGlvbnMuCisKK0BpdGVtCitFYXNlIG9mIGZpbmRpbmcgc2NyaXB0 cyBmb3IgcHVibGljIGxpYnJhcmllcy4KKworU2NyaXB0cyBzcGVjaWZpZWQg aW4gdGhlIEBjb2Rley5kZWJ1Z19nZGJfc2NyaXB0c30gc2VjdGlvbiBhcmUg c2VhcmNoZWQgZm9yCitpbiB0aGUgc291cmNlIHNlYXJjaCBwYXRoLgorRm9y IHB1YmxpY2x5IGluc3RhbGxlZCBsaWJyYXJpZXMsIGUuZy4sIEBmaWxle2xp YnN0ZGMrK30sIHRoZXJlIHR5cGljYWxseQoraXNuJ3QgYSBzb3VyY2UgZGly ZWN0b3J5IGluIHdoaWNoIHRvIGZpbmQgdGhlIHNjcmlwdC4KKworQGl0ZW0K K0RvZXNuJ3QgcmVxdWlyZSBzb3VyY2UgY29kZSBhZGRpdGlvbnMuCitAZW5k IGl0ZW1pemUKKworQmVuZWZpdHMgb2YgdGhlIEBjb2Rley5kZWJ1Z19nZGJf c2NyaXB0c30gd2F5OgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorV29y a3Mgd2l0aCBzdGF0aWMgbGlua2luZy4KKworU2NyaXB0cyBmb3IgbGlicmFy aWVzIGRvbmUgdGhlIEBmaWxley1nZGIucHl9IHdheSByZXF1aXJlIGFuIG9i amZpbGUgdG8KK3RyaWdnZXIgdGhlaXIgbG9hZGluZy4gIFdoZW4gYW4gYXBw bGljYXRpb24gaXMgc3RhdGljYWxseSBsaW5rZWQgdGhlIG9ubHkKK29iamZp bGUgYXZhaWxhYmxlIGlzIHRoZSBleGVjdXRhYmxlLCBhbmQgaXQgaXMgY3Vt YmVyc29tZSB0byBhdHRhY2ggYWxsIHRoZQorc2NyaXB0cyBmcm9tIGFsbCB0 aGUgaW5wdXQgbGlicmFyaWVzIHRvIHRoZSBleGVjdXRhYmxlJ3MgQGZpbGV7 LWdkYi5weX0gc2NyaXB0LgorCitAaXRlbQorV29ya3Mgd2l0aCBjbGFzc2Vz IHRoYXQgYXJlIGVudGlyZWx5IGlubGluZWQuCisKK1NvbWUgY2xhc3NlcyBj YW4gYmUgZW50aXJlbHkgaW5saW5lZCwgYW5kIHRodXMgdGhlcmUgbWF5IG5v dCBiZSBhbiBhc3NvY2lhdGVkCitzaGFyZWQgbGlicmFyeSB0byBhdHRhY2gg YSBAZmlsZXstZ2RiLnB5fSBzY3JpcHQgdG8uCisKK0BpdGVtCitTY3JpcHRz IG5lZWRuJ3QgYmUgY29waWVkIG91dCBvZiB0aGUgc291cmNlIHRyZWUuCisK K0luIHNvbWUgY2lyY3Vtc3RhbmNlcywgYXBwcyBjYW4gYmUgYnVpbHQgb3V0 IG9mIGxhcmdlIGNvbGxlY3Rpb25zIG9mIGludGVybmFsCitsaWJyYXJpZXMs IGFuZCB0aGUgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgbmVjZXNzYXJ5IHRvIGlu c3RhbGwgdGhlCitAZmlsZXstZ2RiLnB5fSBzY3JpcHRzIGluIGEgcGxhY2Ug d2hlcmUgQHZhbHVle0dEQk59IGNhbiBmaW5kIHRoZW0gaXMKK2N1bWJlcnNv bWUuICBJdCBtYXkgYmUgZWFzaWVyIHRvIHNwZWNpZnkgdGhlIHNjcmlwdHMg aW4gdGhlCitAY29kZXsuZGVidWdfZ2RiX3NjcmlwdHN9IHNlY3Rpb24gYXMg cmVsYXRpdmUgcGF0aHMsIGFuZCBhZGQgYSBwYXRoIHRvIHRoZQordG9wIG9m IHRoZSBzb3VyY2UgdHJlZSB0byB0aGUgc291cmNlIHNlYXJjaCBwYXRoLgor QGVuZCBpdGVtaXplCisKIEBub2RlIEludGVycHJldGVycwogQGNoYXB0ZXIg Q29tbWFuZCBJbnRlcnByZXRlcnMKIEBjaW5kZXggY29tbWFuZCBpbnRlcnBy ZXRlcnMKQEAgLTI5NDEzLDYgKzI5NTIzLDE2IEBAIFByaW50IGEgZHVtcCBv ZiBhbGwga25vd24gb2JqZWN0IGZpbGVzLiAKIGNvbW1hbmQgcHJpbnRzIGl0 cyBuYW1lLCBhZGRyZXNzIGluIG1lbW9yeSwgYW5kIGFsbCBvZiBpdHMgcHN5 bXRhYnMKIGFuZCBzeW10YWJzLgogCitAa2luZGV4IG1haW50IHByaW50IHNl Y3Rpb24tc2NyaXB0cworQGNpbmRleCBpbmZvIGZvciBrbm93biAuZGVidWdf Z2RiX3NjcmlwdHMtbG9hZGVkIHNjcmlwdHMKK0BpdGVtIG1haW50IHByaW50 IHNlY3Rpb24tc2NyaXB0cyBbQHZhcntyZWdleHB9XQorUHJpbnQgYSBkdW1w IG9mIHNjcmlwdHMgc3BlY2lmaWVkIGluIHRoZSBAY29kZXsuZGVidWdfZ2Ri X3NlY3Rpb259IHNlY3Rpb24uCitJZiBAdmFye3JlZ2V4cH0gaXMgc3BlY2lm aWVkLCBvbmx5IHByaW50IHNjcmlwdHMgbG9hZGVkIGJ5IG9iamVjdCBmaWxl cworbWF0Y2hpbmcgQHZhcntyZWdleHB9LgorRm9yIGVhY2ggc2NyaXB0LCB0 aGlzIGNvbW1hbmQgcHJpbnRzIGl0cyBuYW1lIGFzIHNwZWNpZmllZCBpbiB0 aGUgb2JqZmlsZSwKK2FuZCB0aGUgZnVsbCBwYXRoIGlmIGtub3duLgorQHhy ZWZ7LmRlYnVnX2dkYl9zY3JpcHRzIHNlY3Rpb259LgorCiBAa2luZGV4IG1h aW50IHByaW50IHN0YXRpc3RpY3MKIEBjaW5kZXggYmNhY2hlIHN0YXRpc3Rp Y3MKIEBpdGVtIG1haW50IHByaW50IHN0YXRpc3RpY3MKSW5kZXg6IHB5dGhv bi9weS1hdXRvLWxvYWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiBweXRob24vcHktYXV0by1sb2FkLmMKZGlmZiAtTiBweXRob24vcHkt YXV0by1sb2FkLmMKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAw IC0wMDAwCisrKyBweXRob24vcHktYXV0by1sb2FkLmMJMjEgQXByIDIwMTAg MTk6MDc6MTggLTAwMDAKQEAgLTAsMCArMSw0NTkgQEAKKy8qIEdEQiByb3V0 aW5lcyBmb3Igc3VwcG9ydGluZyBhdXRvLWxvYWRlZCBzY3JpcHRzLgorCisg ICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIK KyNpbmNsdWRlICJnZGJfc3RyaW5nLmgiCisjaW5jbHVkZSAiZ2RiX3JlZ2V4 LmgiCisjaW5jbHVkZSAidG9wLmgiCisjaW5jbHVkZSAiZXhjZXB0aW9ucy5o IgorI2luY2x1ZGUgImNvbW1hbmQuaCIKKyNpbmNsdWRlICJnZGJjbWQuaCIK KyNpbmNsdWRlICJvYnNlcnZlci5oIgorI2luY2x1ZGUgInByb2dzcGFjZS5o IgorI2luY2x1ZGUgIm9iamZpbGVzLmgiCisjaW5jbHVkZSAicHl0aG9uLmgi CisjaW5jbHVkZSAicHl0aG9uLWludGVybmFsLmgiCisjaW5jbHVkZSAiY2xp L2NsaS1jbWRzLmgiCisKKy8qIE5PVEU6IEl0J3MgdHJpdmlhbCB0byBhbHNv IHN1cHBvcnQgYXV0by1sb2FkaW5nIG5vcm1hbCBnZGIgc2NyaXB0cy4KKyAg IFRoZXJlIGhhcyB5ZXQgdG8gYmUgYSBuZWVkIHNvIGl0J3Mgbm90IGltcGxl bWVudGVkLiAgKi8KKworLyogVGhlIHN1ZmZpeCBvZiBwZXItb2JqZmlsZSBz Y3JpcHRzIHRvIGF1dG8tbG9hZC4KKyAgIEUuZy4gV2hlbiB0aGUgcHJvZ3Jh bSBsb2FkcyBsaWJmb28uc28sIGxvb2sgZm9yIGxpYmZvby1nZGIucHkuICAq LworI2RlZmluZSBHREJQWV9BVVRPX0ZJTEVfTkFNRSAiLWdkYi5weSIKKwor LyogVGhlIHNlY3Rpb24gdG8gbG9vayBmb3Igc2NyaXB0cyAoaW4gZmlsZSBm b3JtYXRzIHRoYXQgc3VwcG9ydCBzZWN0aW9ucykuCisgICBFYWNoIGVudHJ5 IGluIHRoaXMgc2VjdGlvbiBpcyBhIGJ5dGUgb2YgdmFsdWUgMSwgYW5kIHRo ZW4gdGhlIG51bC10ZXJtaW5hdGVkCisgICBuYW1lIG9mIHRoZSBzY3JpcHQu ICBUaGUgc2NyaXB0IG5hbWUgbWF5IGluY2x1ZGUgYSBkaXJlY3RvcnkuCisg ICBUaGUgbGVhZGluZyBieXRlIGlzIHRvIGFsbG93IHVwd2FyZCBjb21wYXRp YmxlIGV4dGVuc2lvbnMuICAqLworI2RlZmluZSBHREJQWV9BVVRPX1NFQ1RJ T05fTkFNRSAiLmRlYnVnX2dkYl9zY3JpcHRzIgorCisvKiBGb3Igc2NyaXB0 cyBzcGVjaWZpZWQgaW4gLmRlYnVnX2dkYl9zY3JpcHRzLCBtdWx0aXBsZSBv YmpmaWxlcyBtYXkgbG9hZAorICAgdGhlIHNhbWUgc2NyaXB0LiAgVGhlcmUn cyBubyBwb2ludCBpbiBsb2FkaW5nIHRoZSBzY3JpcHQgbXVsdGlwbGUgdGlt ZXMsCisgICBhbmQgdGhlcmUgY2FuIGJlIGEgbG90IG9mIG9iamZpbGVzIGFu ZCBzY3JpcHRzLCBzbyB3ZSBrZWVwIHRyYWNrIG9mIHNjcmlwdHMKKyAgIGxv YWRlZCB0aGlzIHdheS4gICovCisKK3N0cnVjdCBhdXRvX2xvYWRfcHNwYWNl X2luZm8KK3sKKyAgLyogRm9yIGVhY2ggcHJvZ3JhbSBzcGFjZSB3ZSBrZWVw IHRyYWNrIG9mIGxvYWRlZCBzY3JpcHRzLiAgKi8KKyAgc3RydWN0IGh0YWIg KmxvYWRlZF9zY3JpcHRzOworfTsKKworLyogT2JqZWN0cyBvZiB0aGlzIHR5 cGUgYXJlIHN0b3JlZCBpbiB0aGUgbG9hZGVkIHNjcmlwdCBoYXNoIHRhYmxl LiAgKi8KKworc3RydWN0IGxvYWRlZF9zY3JpcHRfZW50cnkKK3sKKyAgLyog TmFtZSBhcyBwcm92aWRlZCBieSB0aGUgb2JqZmlsZS4gICovCisgIGNvbnN0 IGNoYXIgKm5hbWU7CisgIC8qIEZ1bGwgcGF0aCBuYW1lIG9yIE5VTEwgaWYg c2NyaXB0IHdhc24ndCBmb3VuZCAob3Igd2FzIG90aGVyd2lzZQorICAgICBp bmFjY2Vzc2libGUpLiAgKi8KKyAgY29uc3QgY2hhciAqZnVsbF9wYXRoOwor fTsKKworLyogVGhpcyBpcyB0cnVlIGlmIHdlIHNob3VsZCBhdXRvLWxvYWQg cHl0aG9uIGNvZGUgd2hlbiBhbiBvYmpmaWxlIGlzIG9wZW5lZCwKKyAgIGZh bHNlIG90aGVyd2lzZS4gICovCitzdGF0aWMgaW50IGdkYnB5X2F1dG9fbG9h ZCA9IDE7CisKKy8qIFBlci1wcm9ncmFtLXNwYWNlIGRhdGEga2V5LiAgKi8K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvZ3JhbV9zcGFjZV9kYXRhICphdXRv X2xvYWRfcHNwYWNlX2RhdGE7CisKK3N0YXRpYyB2b2lkCithdXRvX2xvYWRf cHNwYWNlX2RhdGFfY2xlYW51cCAoc3RydWN0IHByb2dyYW1fc3BhY2UgKnBz cGFjZSwgdm9pZCAqYXJnKQoreworICBzdHJ1Y3QgYXV0b19sb2FkX3BzcGFj ZV9pbmZvICppbmZvOworCisgIGluZm8gPSBwcm9ncmFtX3NwYWNlX2RhdGEg KHBzcGFjZSwgYXV0b19sb2FkX3BzcGFjZV9kYXRhKTsKKyAgaWYgKGluZm8g IT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoaW5mby0+bG9hZGVkX3Njcmlw dHMpCisJaHRhYl9kZWxldGUgKGluZm8tPmxvYWRlZF9zY3JpcHRzKTsKKyAg ICAgIHhmcmVlIChpbmZvKTsKKyAgICB9Cit9CisKKy8qIEdldCB0aGUgY3Vy cmVudCBhdXRvbG9hZCBkYXRhLiAgSWYgbm9uZSBpcyBmb3VuZCB5ZXQsIGFk ZCBpdCBub3cuICBUaGlzCisgICBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBh IHZhbGlkIG9iamVjdC4gICovCisKK3N0YXRpYyBzdHJ1Y3QgYXV0b19sb2Fk X3BzcGFjZV9pbmZvICoKK2dldF9hdXRvX2xvYWRfcHNwYWNlX2RhdGEgKHN0 cnVjdCBwcm9ncmFtX3NwYWNlICpwc3BhY2UpCit7CisgIHN0cnVjdCBhdXRv X2xvYWRfcHNwYWNlX2luZm8gKmluZm87CisKKyAgaW5mbyA9IHByb2dyYW1f c3BhY2VfZGF0YSAocHNwYWNlLCBhdXRvX2xvYWRfcHNwYWNlX2RhdGEpOwor ICBpZiAoaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGluZm8gPSBYWkFM TE9DIChzdHJ1Y3QgYXV0b19sb2FkX3BzcGFjZV9pbmZvKTsKKyAgICAgIHNl dF9wcm9ncmFtX3NwYWNlX2RhdGEgKHBzcGFjZSwgYXV0b19sb2FkX3BzcGFj ZV9kYXRhLCBpbmZvKTsKKyAgICB9CisKKyAgcmV0dXJuIGluZm87Cit9CisK Ky8qIEhhc2ggZnVuY3Rpb24gZm9yIHRoZSBsb2FkZWQgc2NyaXB0IGhhc2gu ICAqLworCitzdGF0aWMgaGFzaHZhbF90CitoYXNoX2xvYWRlZF9zY3JpcHRf ZW50cnkgKGNvbnN0IHZvaWQgKmRhdGEpCit7CisgIGNvbnN0IHN0cnVjdCBs b2FkZWRfc2NyaXB0X2VudHJ5ICplID0gZGF0YTsKKyAgcmV0dXJuIGh0YWJf aGFzaF9zdHJpbmcgKGUtPm5hbWUpOworfQorCisvKiBFcXVhbGl0eSBmdW5j dGlvbiBmb3IgdGhlIGxvYWRlZCBzY3JpcHQgaGFzaC4gICovCisKK3N0YXRp YyBpbnQKK2VxX2xvYWRlZF9zY3JpcHRfZW50cnkgKGNvbnN0IHZvaWQgKmEs IGNvbnN0IHZvaWQgKmIpCit7CisgIGNvbnN0IHN0cnVjdCBsb2FkZWRfc2Ny aXB0X2VudHJ5ICplYSA9IGE7CisgIGNvbnN0IHN0cnVjdCBsb2FkZWRfc2Ny aXB0X2VudHJ5ICplYiA9IGI7CisgIHJldHVybiBzdHJjbXAgKGVhLT5uYW1l LCBlYi0+bmFtZSkgPT0gMDsKK30KKworLyogQ3JlYXRlIHRoZSBoYXNoIHRh YmxlIHVzZWQgZm9yIGxvYWRlZCBzY3JpcHRzLgorICAgRWFjaCBlbnRyeSBp cyBoYXNoZWQgYnkgdGhlIGZ1bGwgcGF0aCBuYW1lLiAgKi8KKworc3RhdGlj IHZvaWQKK2NyZWF0ZV9sb2FkZWRfc2NyaXB0c19oYXNoIChzdHJ1Y3QgYXV0 b19sb2FkX3BzcGFjZV9pbmZvICpwc3BhY2VfaW5mbykKK3sKKyAgLyogQ2hv b3NlIDMxIGFzIHRoZSBzdGFydGluZyBzaXplIG9mIHRoZSBoYXNoIHRhYmxl LCBzb21ld2hhdCBhcmJpdHJhcmlseS4KKyAgICAgU3BhY2UgZm9yIGVhY2gg ZW50cnkgaXMgb2J0YWluZWQgd2l0aCBvbmUgbWFsbG9jIHNvIHdlIGNhbiBm cmVlIHRoZW0KKyAgICAgZWFzaWx5LiAgKi8KKworICBwc3BhY2VfaW5mby0+ bG9hZGVkX3NjcmlwdHMgPSBodGFiX2NyZWF0ZSAoMzEsCisJCQkJCSAgICAg aGFzaF9sb2FkZWRfc2NyaXB0X2VudHJ5LAorCQkJCQkgICAgIGVxX2xvYWRl ZF9zY3JpcHRfZW50cnksCisJCQkJCSAgICAgeGZyZWUpOworfQorCisvKiBM b2FkIHNjcmlwdHMgc3BlY2lmaWVkIGluIE9CSkZJTEUuCisgICBTVEFSVCxF TkQgZGVsaW1pdCBhIGJ1ZmZlciBjb250YWluaW5nIGEgbGlzdCBvZiBudWwt dGVybWluYXRlZAorICAgZmlsZSBuYW1lcy4KKyAgIFNPVVJDRV9OQU1FIGlz IHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMuCisKKyAgIFNjcmlwdHMgYXJlIGZv dW5kIHBlciBub3JtYWwgInNvdXJjZSAtcyIgY29tbWFuZCBwcm9jZXNzaW5n LgorICAgRmlyc3QgdGhlIHNjcmlwdCBpcyBsb29rZWQgZm9yIGluICRjd2Qu ICBJZiBub3QgZm91bmQgdGhlcmUgdGhlCisgICBzb3VyY2Ugc2VhcmNoIHBh dGggaXMgdXNlZC4KKworICAgVGhlIHNlY3Rpb24gY29udGFpbnMgYSBsaXN0 IG9mIHBhdGggbmFtZXMgb2YgZmlsZXMgY29udGFpbmluZworICAgcHl0aG9u IGNvZGUgdG8gbG9hZC4gIEVhY2ggcGF0aCBpcyBudWxsLXRlcm1pbmF0ZWQu ICAqLworCitzdGF0aWMgdm9pZAorc291cmNlX3NlY3Rpb25fc2NyaXB0cyAo c3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGNvbnN0IGNoYXIgKnNvdXJjZV9u YW1lLAorCQkJY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCkK K3sKKyAgY29uc3QgY2hhciAqcDsKKyAgc3RydWN0IGF1dG9fbG9hZF9wc3Bh Y2VfaW5mbyAqcHNwYWNlX2luZm87CisgIHN0cnVjdCBsb2FkZWRfc2NyaXB0 X2VudHJ5ICoqc2xvdCwgZW50cnk7CisKKyAgcHNwYWNlX2luZm8gPSBnZXRf YXV0b19sb2FkX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1fc3BhY2Up OworICBpZiAocHNwYWNlX2luZm8tPmxvYWRlZF9zY3JpcHRzID09IE5VTEwp CisgICAgY3JlYXRlX2xvYWRlZF9zY3JpcHRzX2hhc2ggKHBzcGFjZV9pbmZv KTsKKworICBmb3IgKHAgPSBzdGFydDsgcCA8IGVuZDsgKytwKQorICAgIHsK KyAgICAgIGNvbnN0IGNoYXIgKmZpbGU7CisgICAgICBGSUxFICpzdHJlYW07 CisgICAgICBjaGFyICpmdWxsX3BhdGg7CisgICAgICBpbnQgb3BlbmVkLCBp bl9oYXNoX3RhYmxlOworCisgICAgICBpZiAoKnAgIT0gMSkKKwl7CisJICB3 YXJuaW5nIChfKCJJbnZhbGlkIGVudHJ5IGluICVzIHNlY3Rpb24iKSwgR0RC UFlfQVVUT19TRUNUSU9OX05BTUUpOworCSAgLyogV2UgY291bGQgdHJ5IHZh cmlvdXMgaGV1cmlzdGljcyB0byBmaW5kIHRoZSBuZXh0IHZhbGlkIGVudHJ5 LAorCSAgICAgYnV0IGl0J3Mgc2FmZXIgdG8ganVzdCBwdW50LiAgKi8KKwkg IGJyZWFrOworCX0KKyAgICAgIGZpbGUgPSArK3A7CisKKyAgICAgIHdoaWxl IChwIDwgZW5kICYmICpwICE9ICdcMCcpCisJKytwOworICAgICAgaWYgKHAg PT0gZW5kKQorCXsKKwkgIGNoYXIgKmJ1ZiA9IGFsbG9jYSAocCAtIGZpbGUg KyAxKTsKKwkgIG1lbWNweSAoYnVmLCBmaWxlLCBwIC0gZmlsZSk7CisJICBi dWZbcCAtIGZpbGVdID0gJ1wwJzsKKwkgIHdhcm5pbmcgKF8oIk5vbi1udWxs LXRlcm1pbmF0ZWQgcGF0aCBpbiAlczogJXMiKSwKKwkJICAgc291cmNlX25h bWUsIGJ1Zik7CisJICAvKiBEb24ndCBsb2FkIGl0LiAgKi8KKwkgIGJyZWFr OworCX0KKyAgICAgIGlmIChwID09IGZpbGUpCisJeworCSAgd2FybmluZyAo XygiRW1wdHkgcGF0aCBpbiAlcyIpLCBzb3VyY2VfbmFtZSk7CisJICBjb250 aW51ZTsKKwl9CisKKyAgICAgIG9wZW5lZCA9IGZpbmRfYW5kX29wZW5fc2Ny aXB0IChmaWxlLCAxIC8qc2VhcmNoX3BhdGgqLywKKwkJCQkgICAgICZzdHJl YW0sICZmdWxsX3BhdGgpOworCisgICAgICAvKiBJZiB0aGUgZmlsZSBpcyBu b3QgZm91bmQsIHdlIHN0aWxsIHJlY29yZCB0aGUgZmlsZSBpbiB0aGUgaGFz aCB0YWJsZSwKKwkgd2Ugb25seSB3YW50IHRvIHByaW50IGFuIGVycm9yIG1l c3NhZ2Ugb25jZS4KKwkgSVdCTiBpZiBjb21wbGFpbnRzLmMgd2VyZSBtb3Jl IGdlbmVyYWwtcHVycG9zZS4gICovCisKKyAgICAgIGVudHJ5Lm5hbWUgPSBm aWxlOworICAgICAgaWYgKG9wZW5lZCkKKwllbnRyeS5mdWxsX3BhdGggPSBm dWxsX3BhdGg7CisgICAgICBlbHNlCisJZW50cnkuZnVsbF9wYXRoID0gTlVM TDsKKyAgICAgIHNsb3QgPSAoKHN0cnVjdCBsb2FkZWRfc2NyaXB0X2VudHJ5 ICoqKQorCSAgICAgIGh0YWJfZmluZF9zbG90IChwc3BhY2VfaW5mby0+bG9h ZGVkX3NjcmlwdHMsCisJCQkgICAgICAmZW50cnksIElOU0VSVCkpOworICAg ICAgaW5faGFzaF90YWJsZSA9ICpzbG90ICE9IE5VTEw7CisKKyAgICAgIC8q IElmIHRoaXMgZmlsZSBpcyBub3QgaW4gdGhlIGhhc2ggdGFibGUsIGFkZCBp dC4gICovCisgICAgICBpZiAoISBpbl9oYXNoX3RhYmxlKQorCXsKKwkgIGNo YXIgKnA7CisJICAqc2xvdCA9IHhtYWxsb2MgKHNpemVvZiAoKipzbG90KQor CQkJICAgKyBzdHJsZW4gKGZpbGUpICsgMQorCQkJICAgKyAob3BlbmVkID8g KHN0cmxlbiAoZnVsbF9wYXRoKSArIDEpIDogMCkpOworCSAgcCA9ICgoY2hh ciopICpzbG90KSArIHNpemVvZiAoKipzbG90KTsKKwkgIHN0cmNweSAocCwg ZmlsZSk7CisJICAoKnNsb3QpLT5uYW1lID0gcDsKKwkgIGlmIChvcGVuZWQp CisJICAgIHsKKwkgICAgICBwICs9IHN0cmxlbiAocCkgKyAxOworCSAgICAg IHN0cmNweSAocCwgZnVsbF9wYXRoKTsKKwkgICAgICAoKnNsb3QpLT5mdWxs X3BhdGggPSBwOworCSAgICB9CisJICBlbHNlCisJICAgICgqc2xvdCktPmZ1 bGxfcGF0aCA9IE5VTEw7CisJfQorCisgICAgICBpZiAob3BlbmVkKQorCWZy ZWUgKGZ1bGxfcGF0aCk7CisKKyAgICAgIGlmICghIG9wZW5lZCkKKwl7CisJ ICAvKiBXZSBkb24ndCB0aHJvdyBhbiBlcnJvciwgdGhlIHByb2dyYW0gaXMg c3RpbGwgZGVidWdnYWJsZS4KKwkgICAgIENoZWNrIGluX2hhc2hfdGFibGUg dG8gb25seSBwcmludCB0aGUgd2FybmluZyBvbmNlLiAgKi8KKwkgIGlmICgh IGluX2hhc2hfdGFibGUpCisJICAgIHdhcm5pbmcgKF8oIiVzIChyZWZlcmVu Y2VkIGluICVzKTogJXNcbiIpLAorCQkgICAgIGZpbGUsIEdEQlBZX0FVVE9f U0VDVElPTl9OQU1FLCBzYWZlX3N0cmVycm9yIChlcnJubykpOworCSAgY29u dGludWU7CisJfQorCisgICAgICAvKiBJZiB0aGlzIGZpbGUgaXMgbm90IGN1 cnJlbnRseSBsb2FkZWQsIGxvYWQgaXQuICAqLworICAgICAgaWYgKCEgaW5f aGFzaF90YWJsZSkKKwlzb3VyY2VfcHl0aG9uX3NjcmlwdF9mb3Jfb2JqZmls ZSAob2JqZmlsZSwgc3RyZWFtLCBmaWxlKTsKKyAgICB9Cit9CisKKy8qIExv YWQgc2NyaXB0cyBzcGVjaWZpZWQgaW4gc2VjdGlvbiBTRUNUSU9OX05BTUUg b2YgT0JKRklMRS4gICovCisKK3N0YXRpYyB2b2lkCithdXRvX2xvYWRfc2Vj dGlvbl9zY3JpcHRzIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwgY29uc3Qg Y2hhciAqc2VjdGlvbl9uYW1lKQoreworICBiZmQgKmFiZmQgPSBvYmpmaWxl LT5vYmZkOworICBhc2VjdGlvbiAqc2NyaXB0c19zZWN0OworICBiZmRfc2l6 ZV90eXBlIHNpemU7CisgIGNoYXIgKnA7CisgIHN0cnVjdCBjbGVhbnVwICpj bGVhbnVwczsKKworICBzY3JpcHRzX3NlY3QgPSBiZmRfZ2V0X3NlY3Rpb25f YnlfbmFtZSAoYWJmZCwgc2VjdGlvbl9uYW1lKTsKKyAgaWYgKHNjcmlwdHNf c2VjdCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBzaXplID0gYmZkX2dl dF9zZWN0aW9uX3NpemUgKHNjcmlwdHNfc2VjdCk7CisgIHAgPSB4bWFsbG9j IChzaXplKTsKKyAgCisgIGNsZWFudXBzID0gbWFrZV9jbGVhbnVwICh4ZnJl ZSwgcCk7CisKKyAgaWYgKGJmZF9nZXRfc2VjdGlvbl9jb250ZW50cyAoYWJm ZCwgc2NyaXB0c19zZWN0LCBwLCAoZmlsZV9wdHIpIDAsIHNpemUpKQorICAg IHNvdXJjZV9zZWN0aW9uX3NjcmlwdHMgKG9iamZpbGUsIHNlY3Rpb25fbmFt ZSwgcCwgcCArIHNpemUpOworICBlbHNlCisgICAgd2FybmluZyAoXygiQ291 bGRuJ3QgcmVhZCAlcyBzZWN0aW9uIG9mICVzIiksCisJICAgICBzZWN0aW9u X25hbWUsIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQpKTsKKworICBkb19jbGVh bnVwcyAoY2xlYW51cHMpOworfQorCisvKiBDbGVhciB0aGUgdGFibGUgb2Yg bG9hZGVkIHNlY3Rpb24gc2NyaXB0cy4gICovCisKK3N0YXRpYyB2b2lkCitj bGVhcl9zZWN0aW9uX3NjcmlwdHMgKHZvaWQpCit7CisgIHN0cnVjdCBwcm9n cmFtX3NwYWNlICpwc3BhY2UgPSBjdXJyZW50X3Byb2dyYW1fc3BhY2U7Cisg IHN0cnVjdCBhdXRvX2xvYWRfcHNwYWNlX2luZm8gKmluZm87CisKKyAgaW5m byA9IHByb2dyYW1fc3BhY2VfZGF0YSAocHNwYWNlLCBhdXRvX2xvYWRfcHNw YWNlX2RhdGEpOworICBpZiAoaW5mbyAhPSBOVUxMICYmIGluZm8tPmxvYWRl ZF9zY3JpcHRzICE9IE5VTEwpCisgICAgeworICAgICAgaHRhYl9kZWxldGUg KGluZm8tPmxvYWRlZF9zY3JpcHRzKTsKKyAgICAgIGluZm8tPmxvYWRlZF9z Y3JpcHRzID0gTlVMTDsKKyAgICB9Cit9CisKKy8qIExvb2sgZm9yIHRoZSBh dXRvLWxvYWQgc2NyaXB0IGFzc29jaWF0ZWQgd2l0aCBPQkpGSUxFIGFuZCBs b2FkIGl0LiAgKi8KKworc3RhdGljIHZvaWQKK2F1dG9fbG9hZF9vYmpmaWxl X3NjcmlwdCAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGNvbnN0IGNoYXIg KnN1ZmZpeCkKK3sKKyAgY2hhciAqcmVhbG5hbWU7CisgIGNoYXIgKmZpbGVu YW1lLCAqZGVidWdmaWxlOworICBpbnQgbGVuOworICBGSUxFICppbnB1dDsK KyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBzOworCisgIHJlYWxuYW1lID0g Z2RiX3JlYWxwYXRoIChvYmpmaWxlLT5uYW1lKTsKKyAgbGVuID0gc3RybGVu IChyZWFsbmFtZSk7CisgIGZpbGVuYW1lID0geG1hbGxvYyAobGVuICsgc3Ry bGVuIChzdWZmaXgpICsgMSk7CisgIG1lbWNweSAoZmlsZW5hbWUsIHJlYWxu YW1lLCBsZW4pOworICBzdHJjcHkgKGZpbGVuYW1lICsgbGVuLCBzdWZmaXgp OworCisgIGNsZWFudXBzID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwgZmlsZW5h bWUpOworICBtYWtlX2NsZWFudXAgKHhmcmVlLCByZWFsbmFtZSk7CisKKyAg aW5wdXQgPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CisgIGRlYnVnZmlsZSA9 IGZpbGVuYW1lOworCisgIGlmICghaW5wdXQgJiYgZGVidWdfZmlsZV9kaXJl Y3RvcnkpCisgICAgeworICAgICAgLyogQWxzbyB0cnkgdGhlIHNhbWUgZmls ZSBpbiB0aGUgc2VwYXJhdGUgZGVidWcgaW5mbyBkaXJlY3RvcnkuICAqLwor ICAgICAgZGVidWdmaWxlID0geG1hbGxvYyAoc3RybGVuIChmaWxlbmFtZSkK KwkJCSAgICsgc3RybGVuIChkZWJ1Z19maWxlX2RpcmVjdG9yeSkgKyAxKTsK KyAgICAgIHN0cmNweSAoZGVidWdmaWxlLCBkZWJ1Z19maWxlX2RpcmVjdG9y eSk7CisgICAgICAvKiBGSUxFTkFNRSBpcyBhYnNvbHV0ZSwgc28gd2UgZG9u J3QgbmVlZCBhICIvIiBoZXJlLiAgKi8KKyAgICAgIHN0cmNhdCAoZGVidWdm aWxlLCBmaWxlbmFtZSk7CisKKyAgICAgIG1ha2VfY2xlYW51cCAoeGZyZWUs IGRlYnVnZmlsZSk7CisgICAgICBpbnB1dCA9IGZvcGVuIChkZWJ1Z2ZpbGUs ICJyIik7CisgICAgfQorCisgIGlmICghaW5wdXQgJiYgZ2RiX2RhdGFkaXIp CisgICAgeworICAgICAgLyogQWxzbyB0cnkgdGhlIHNhbWUgZmlsZSBpbiBh IHN1YmRpcmVjdG9yeSBvZiBnZGIncyBkYXRhCisJIGRpcmVjdG9yeS4gICov CisgICAgICBkZWJ1Z2ZpbGUgPSB4bWFsbG9jIChzdHJsZW4gKGdkYl9kYXRh ZGlyKSArIHN0cmxlbiAoZmlsZW5hbWUpCisJCQkgICArIHN0cmxlbiAoIi9h dXRvLWxvYWQiKSArIDEpOworICAgICAgc3RyY3B5IChkZWJ1Z2ZpbGUsIGdk Yl9kYXRhZGlyKTsKKyAgICAgIHN0cmNhdCAoZGVidWdmaWxlLCAiL2F1dG8t bG9hZCIpOworICAgICAgLyogRklMRU5BTUUgaXMgYWJzb2x1dGUsIHNvIHdl IGRvbid0IG5lZWQgYSAiLyIgaGVyZS4gICovCisgICAgICBzdHJjYXQgKGRl YnVnZmlsZSwgZmlsZW5hbWUpOworCisgICAgICBtYWtlX2NsZWFudXAgKHhm cmVlLCBkZWJ1Z2ZpbGUpOworICAgICAgaW5wdXQgPSBmb3BlbiAoZGVidWdm aWxlLCAiciIpOworICAgIH0KKworICBpZiAoaW5wdXQpCisgICAgeworICAg ICAgc291cmNlX3B5dGhvbl9zY3JpcHRfZm9yX29iamZpbGUgKG9iamZpbGUs IGlucHV0LCBkZWJ1Z2ZpbGUpOworICAgICAgZmNsb3NlIChpbnB1dCk7Cisg ICAgfQorCisgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7Cit9CisKKy8qIFRo aXMgaXMgYSBuZXdfb2JqZmlsZSBvYnNlcnZlciBjYWxsYmFjayB0byBhdXRv LWxvYWQgc2NyaXB0cy4KKworICAgVHdvIGZsYXZvcnMgb2YgYXV0by1sb2Fk ZWQgc2NyaXB0cyBhcmUgc3VwcG9ydGVkLgorICAgMSkgYmFzZWQgb24gdGhl IHBhdGggdG8gdGhlIG9iamZpbGUKKyAgIDIpIGZyb20gLmRlYnVnX2dkYl9z Y3JpcHRzIHNlY3Rpb24gICovCisKK3N0YXRpYyB2b2lkCithdXRvX2xvYWRf bmV3X29iamZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQoreworICBp ZiAoIW9iamZpbGUpCisgICAgeworICAgICAgLyogT0JKRklMRSBpcyBOVUxM IHdoZW4gbG9hZGluZyBhIG5ldyAibWFpbiIgc3ltYm9sLWZpbGUuICAqLwor ICAgICAgY2xlYXJfc2VjdGlvbl9zY3JpcHRzICgpOworICAgICAgcmV0dXJu OworICAgIH0KKyAgaWYgKCFvYmpmaWxlLT5uYW1lKQorICAgIHJldHVybjsK KworICBpZiAoZ2RicHlfYXV0b19sb2FkKQorICAgIHsKKyAgICAgIGF1dG9f bG9hZF9vYmpmaWxlX3NjcmlwdCAob2JqZmlsZSwgR0RCUFlfQVVUT19GSUxF X05BTUUpOworICAgICAgYXV0b19sb2FkX3NlY3Rpb25fc2NyaXB0cyAob2Jq ZmlsZSwgR0RCUFlfQVVUT19TRUNUSU9OX05BTUUpOworICAgIH0KK30KKwwK Ky8qIFRyYXZlcnNhbCBmdW5jdGlvbiBmb3IgaHRhYl90cmF2ZXJzZS4KKyAg IFByaW50IHRoZSBlbnRyeSBpZiBzcGVjaWZpZWQgaW4gdGhlIHJlZ2V4LiAg Ki8KKworc3RhdGljIGludAorbWF5YmVfcHJpbnRfc2VjdGlvbl9zY3JpcHQg KHZvaWQgKipzbG90LCB2b2lkICppbmZvKQoreworICBzdHJ1Y3QgbG9hZGVk X3NjcmlwdF9lbnRyeSAqZW50cnkgPSAqc2xvdDsKKworICBpZiAocmVfZXhl YyAoZW50cnktPm5hbWUpKQorICAgIHsKKyAgICAgIHByaW50Zl9maWx0ZXJl ZCAoXygiU2NyaXB0IG5hbWU6ICVzXG4iKSwgZW50cnktPm5hbWUpOworICAg ICAgcHJpbnRmX2ZpbHRlcmVkIChfKCIgIEZ1bGwgbmFtZTogJXNcbiIpLAor CQkgICAgICAgZW50cnktPmZ1bGxfcGF0aCA/IGVudHJ5LT5mdWxsX3BhdGgg OiBfKCJ1bmtub3duIikpOworICAgIH0KKworICByZXR1cm4gMTsKK30KKwor LyogIm1haW50IHByaW50IHNlY3Rpb24tc2NyaXB0cyIgY29tbWFuZC4gICov CisKK3N0YXRpYyB2b2lkCittYWludGVuYW5jZV9wcmludF9zZWN0aW9uX3Nj cmlwdHMgKGNoYXIgKnBhdHRlcm4sIGludCBmcm9tX3R0eSkKK3sKKyAgc3Ry dWN0IGF1dG9fbG9hZF9wc3BhY2VfaW5mbyAqcHNwYWNlX2luZm87CisKKyAg ZG9udF9yZXBlYXQgKCk7CisKKyAgaWYgKHBhdHRlcm4gJiYgKnBhdHRlcm4p CisgICAgeworICAgICAgY2hhciAqcmVfZXJyID0gcmVfY29tcCAocGF0dGVy bik7CisKKyAgICAgIGlmIChyZV9lcnIpCisJZXJyb3IgKF8oIkludmFsaWQg cmVnZXhwOiAlcyIpLCByZV9lcnIpOworCisgICAgICBwcmludGZfZmlsdGVy ZWQgKF8oIk9iamZpbGUgc2NyaXB0cyBtYXRjaGluZyAlczpcbiIpLCBwYXR0 ZXJuKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZV9jb21wICgi Iik7CisgICAgICBwcmludGZfZmlsdGVyZWQgKF8oIk9iamZpbGUgc2NyaXB0 czpcbiIpKTsKKyAgICB9CisKKyAgcHNwYWNlX2luZm8gPSBnZXRfYXV0b19s b2FkX3BzcGFjZV9kYXRhIChjdXJyZW50X3Byb2dyYW1fc3BhY2UpOworICBp ZiAocHNwYWNlX2luZm8gPT0gTlVMTCB8fCBwc3BhY2VfaW5mby0+bG9hZGVk X3NjcmlwdHMgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgaW1tZWRpYXRl X3F1aXQrKzsKKyAgaHRhYl90cmF2ZXJzZV9ub3Jlc2l6ZSAocHNwYWNlX2lu Zm8tPmxvYWRlZF9zY3JpcHRzLAorCQkJICBtYXliZV9wcmludF9zZWN0aW9u X3NjcmlwdCwgTlVMTCk7CisgIGltbWVkaWF0ZV9xdWl0LS07Cit9CisMCit2 b2lkCitnZGJweV9pbml0aWFsaXplX2F1dG9fbG9hZCAodm9pZCkKK3sKKyAg YXV0b19sb2FkX3BzcGFjZV9kYXRhCisgICAgPSByZWdpc3Rlcl9wcm9ncmFt X3NwYWNlX2RhdGFfd2l0aF9jbGVhbnVwIChhdXRvX2xvYWRfcHNwYWNlX2Rh dGFfY2xlYW51cCk7CisKKyAgb2JzZXJ2ZXJfYXR0YWNoX25ld19vYmpmaWxl IChhdXRvX2xvYWRfbmV3X29iamZpbGUpOworCisgIGFkZF9zZXRzaG93X2Jv b2xlYW5fY21kICgiYXV0by1sb2FkIiwgY2xhc3NfbWFpbnRlbmFuY2UsCisJ CQkgICAmZ2RicHlfYXV0b19sb2FkLCBfKCJcCitFbmFibGUgb3IgZGlzYWJs ZSBhdXRvLWxvYWRpbmcgb2YgUHl0aG9uIGNvZGUgd2hlbiBhbiBvYmplY3Qg aXMgb3BlbmVkLiIpLCBfKCJcCitTaG93IHdoZXRoZXIgUHl0aG9uIGNvZGUg d2lsbCBiZSBhdXRvLWxvYWRlZCB3aGVuIGFuIG9iamVjdCBpcyBvcGVuZWQu IiksIF8oIlwKK0VuYWJsZXMgb3IgZGlzYWJsZXMgYXV0by1sb2FkaW5nIG9m IFB5dGhvbiBjb2RlIHdoZW4gYW4gb2JqZWN0IGlzIG9wZW5lZC4iKSwKKwkJ CSAgIE5VTEwsIE5VTEwsCisJCQkgICAmc2V0X3B5dGhvbl9saXN0LAorCQkJ ICAgJnNob3dfcHl0aG9uX2xpc3QpOworCisgIGFkZF9jbWQgKCJzZWN0aW9u LXNjcmlwdHMiLCBjbGFzc19tYWludGVuYW5jZSwgbWFpbnRlbmFuY2VfcHJp bnRfc2VjdGlvbl9zY3JpcHRzLAorCSAgIF8oIlByaW50IGR1bXAgb2YgYXV0 by1sb2FkZWQgc2VjdGlvbiBzY3JpcHRzIG1hdGNoaW5nIFJFR0VYUC4iKSwK KwkgICAmbWFpbnRlbmFuY2VwcmludGxpc3QpOworfQpJbmRleDogcHl0aG9u L3B5dGhvbi1pbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5h bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXUgLXAgLXIx LjI0IHB5dGhvbi1pbnRlcm5hbC5oCi0tLSBweXRob24vcHl0aG9uLWludGVy bmFsLmgJMTUgQXByIDIwMTAgMTk6NTQ6MTMgLTAwMDAJMS4yNAorKysgcHl0 aG9uL3B5dGhvbi1pbnRlcm5hbC5oCTIxIEFwciAyMDEwIDE5OjA3OjE4IC0w MDAwCkBAIC0yMCw2ICsyMCw4IEBACiAjaWZuZGVmIEdEQl9QWVRIT05fSU5U RVJOQUxfSAogI2RlZmluZSBHREJfUFlUSE9OX0lOVEVSTkFMX0gKIAorI2lu Y2x1ZGUgPHN0ZGlvLmg+CisKIC8qIFB5dGhvbiAyLjQgZG9lc24ndCBpbmNs dWRlIHN0ZGludC5oIHNvb24gZW5vdWdoIHRvIGdldCB7dSx9aW50cHRyX3QK ICAgIG5lZWRlZCBieSBweXBvcnQuaC4gICovCiAjaW5jbHVkZSA8c3RkaW50 Lmg+CkBAIC03NSw2ICs3Nyw5IEBAIGV4dGVybiBQeVR5cGVPYmplY3QgdmFs dWVfb2JqZWN0X3R5cGU7CiBleHRlcm4gUHlUeXBlT2JqZWN0IGJsb2NrX29i amVjdF90eXBlOwogZXh0ZXJuIFB5VHlwZU9iamVjdCBzeW1ib2xfb2JqZWN0 X3R5cGU7CiAKK2V4dGVybiBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqc2V0 X3B5dGhvbl9saXN0OworZXh0ZXJuIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50 ICpzaG93X3B5dGhvbl9saXN0OworCiBQeU9iamVjdCAqZ2RicHlfaGlzdG9y eSAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKIFB5T2JqZWN0 ICpnZGJweV9icmVha3BvaW50cyAoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7 CiBQeU9iamVjdCAqZ2RicHlfZnJhbWVfc3RvcF9yZWFzb25fc3RyaW5nIChQ eU9iamVjdCAqLCBQeU9iamVjdCAqKTsKQEAgLTEwNyw2ICsxMTIsNyBAQCBz dHJ1Y3QgdHlwZSAqdHlwZV9vYmplY3RfdG9fdHlwZSAoUHlPYmplCiBzdHJ1 Y3Qgc3ltdGFiICpzeW10YWJfb2JqZWN0X3RvX3N5bXRhYiAoUHlPYmplY3Qg Km9iaik7CiBzdHJ1Y3Qgc3ltdGFiX2FuZF9saW5lICpzYWxfb2JqZWN0X3Rv X3N5bXRhYl9hbmRfbGluZSAoUHlPYmplY3QgKm9iaik7CiAKK3ZvaWQgZ2Ri cHlfaW5pdGlhbGl6ZV9hdXRvX2xvYWQgKHZvaWQpOwogdm9pZCBnZGJweV9p bml0aWFsaXplX3ZhbHVlcyAodm9pZCk7CiB2b2lkIGdkYnB5X2luaXRpYWxp emVfZnJhbWVzICh2b2lkKTsKIHZvaWQgZ2RicHlfaW5pdGlhbGl6ZV9zeW10 YWJzICh2b2lkKTsKQEAgLTE1NCw2ICsxNjAsOSBAQCBleHRlcm4gY29uc3Qg c3RydWN0IGxhbmd1YWdlX2RlZm4gKnB5dGhvCiAKIHZvaWQgZ2RicHlfcHJp bnRfc3RhY2sgKHZvaWQpOwogCit2b2lkIHNvdXJjZV9weXRob25fc2NyaXB0 X2Zvcl9vYmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKKwkJCQkg ICAgICAgRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpmaWxlKTsKKwogUHlP YmplY3QgKnB5dGhvbl9zdHJpbmdfdG9fdW5pY29kZSAoUHlPYmplY3QgKm9i aik7CiBjaGFyICp1bmljb2RlX3RvX3RhcmdldF9zdHJpbmcgKFB5T2JqZWN0 ICp1bmljb2RlX3N0cik7CiBjaGFyICpweXRob25fc3RyaW5nX3RvX3Rhcmdl dF9zdHJpbmcgKFB5T2JqZWN0ICpvYmopOwpJbmRleDogcHl0aG9uL3B5dGhv bi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvcHl0aG9uL3B5dGhvbi5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjMyCmRpZmYgLXUgLXAgLXIxLjMyIHB5dGhvbi5jCi0tLSBweXRob24v cHl0aG9uLmMJMTUgQXByIDIwMTAgMTk6NTQ6MTMgLTAwMDAJMS4zMgorKysg cHl0aG9uL3B5dGhvbi5jCTIxIEFwciAyMDEwIDE5OjA3OjE4IC0wMDAwCkBA IC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiZ2RiY21kLmgiCiAjaW5jbHVk ZSAicHJvZ3NwYWNlLmgiCiAjaW5jbHVkZSAib2JqZmlsZXMuaCIKLSNpbmNs dWRlICJvYnNlcnZlci5oIgogI2luY2x1ZGUgInZhbHVlLmgiCiAjaW5jbHVk ZSAibGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJleGNlcHRpb25zLmgiCkBAIC0z NiwxMCArMzUsNiBAQAogICAgZmFsc2Ugb3RoZXJ3aXNlLiAgKi8KIHN0YXRp YyBpbnQgZ2RicHlfc2hvdWxkX3ByaW50X3N0YWNrID0gMTsKIAotLyogVGhp cyBpcyB0cnVlIGlmIHdlIHNob3VsZCBhdXRvLWxvYWQgcHl0aG9uIGNvZGUg d2hlbiBhbiBvYmpmaWxlIGlzCi0gICBvcGVuZWQsIGZhbHNlIG90aGVyd2lz ZS4gICovCi1zdGF0aWMgaW50IGdkYnB5X2F1dG9fbG9hZCA9IDE7Ci0KICNp ZmRlZiBIQVZFX1BZVEhPTgogCiAjaW5jbHVkZSAicHl0aG9uLmgiCkBAIC00 NjAsODUgKzQ1NSwzMyBAQCBnZGJweV9wcm9nc3BhY2VzIChQeU9iamVjdCAq dW51c2VkMSwgUHlPCiAMCiAKIC8qIFRoZSAiY3VycmVudCIgb2JqZmlsZS4g IFRoaXMgaXMgc2V0IHdoZW4gZ2RiIGRldGVjdHMgdGhhdCBhIG5ldwotICAg b2JqZmlsZSBoYXMgYmVlbiBsb2FkZWQuICBJdCBpcyBvbmx5IHNldCBmb3Ig dGhlIGR1cmF0aW9uIG9mIGEgY2FsbAotICAgdG8gZ2RicHlfbmV3X29iamZp bGU7IGl0IGlzIE5VTEwgYXQgb3RoZXIgdGltZXMuICAqLworICAgb2JqZmls ZSBoYXMgYmVlbiBsb2FkZWQuICBJdCBpcyBvbmx5IHNldCBmb3IgdGhlIGR1 cmF0aW9uIG9mIGEgY2FsbCB0bworICAgc291cmNlX3B5dGhvbl9zY3JpcHRf Zm9yX29iamZpbGU7IGl0IGlzIE5VTEwgYXQgb3RoZXIgdGltZXMuICAqLwog c3RhdGljIHN0cnVjdCBvYmpmaWxlICpnZGJweV9jdXJyZW50X29iamZpbGU7 CiAKLS8qIFRoZSBmaWxlIG5hbWUgd2UgYXR0ZW1wdCB0byByZWFkLiAgKi8K LSNkZWZpbmUgR0RCUFlfQVVUT19GSUxFTkFNRSAiLWdkYi5weSIKKy8qIFNl dCB0aGUgY3VycmVudCBvYmpmaWxlIHRvIE9CSkZJTEUgYW5kIHRoZW4gcmVh ZCBTVFJFQU0sRklMRSBhcworICAgUHl0aG9uIGNvZGUuICAqLwogCi0vKiBU aGlzIGlzIGEgbmV3X29iamZpbGUgb2JzZXJ2ZXIgY2FsbGJhY2sgd2hpY2gg bG9hZHMgcHl0aG9uIGNvZGUKLSAgIGJhc2VkIG9uIHRoZSBwYXRoIHRvIHRo ZSBvYmpmaWxlLiAgKi8KLXN0YXRpYyB2b2lkCi1nZGJweV9uZXdfb2JqZmls ZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCit2b2lkCitzb3VyY2VfcHl0 aG9uX3NjcmlwdF9mb3Jfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZp bGUsCisJCQkJICBGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZpbGUpCiB7 Ci0gIGNoYXIgKnJlYWxuYW1lOwotICBjaGFyICpmaWxlbmFtZSwgKmRlYnVn ZmlsZTsKLSAgaW50IGxlbjsKLSAgRklMRSAqaW5wdXQ7CiAgIHN0cnVjdCBj bGVhbnVwICpjbGVhbnVwczsKIAotICBpZiAoIWdkYnB5X2F1dG9fbG9hZCB8 fCAhb2JqZmlsZSB8fCAhb2JqZmlsZS0+bmFtZSkKLSAgICByZXR1cm47Ci0K ICAgY2xlYW51cHMgPSBlbnN1cmVfcHl0aG9uX2VudiAoZ2V0X29iamZpbGVf YXJjaCAob2JqZmlsZSksIGN1cnJlbnRfbGFuZ3VhZ2UpOwotCiAgIGdkYnB5 X2N1cnJlbnRfb2JqZmlsZSA9IG9iamZpbGU7CiAKLSAgcmVhbG5hbWUgPSBn ZGJfcmVhbHBhdGggKG9iamZpbGUtPm5hbWUpOwotICBsZW4gPSBzdHJsZW4g KHJlYWxuYW1lKTsKLSAgZmlsZW5hbWUgPSB4bWFsbG9jIChsZW4gKyBzaXpl b2YgKEdEQlBZX0FVVE9fRklMRU5BTUUpKTsKLSAgbWVtY3B5IChmaWxlbmFt ZSwgcmVhbG5hbWUsIGxlbik7Ci0gIHN0cmNweSAoZmlsZW5hbWUgKyBsZW4s IEdEQlBZX0FVVE9fRklMRU5BTUUpOwotCi0gIGlucHV0ID0gZm9wZW4gKGZp bGVuYW1lLCAiciIpOwotICBkZWJ1Z2ZpbGUgPSBmaWxlbmFtZTsKLQotICBt YWtlX2NsZWFudXAgKHhmcmVlLCBmaWxlbmFtZSk7Ci0gIG1ha2VfY2xlYW51 cCAoeGZyZWUsIHJlYWxuYW1lKTsKLQotICBpZiAoIWlucHV0ICYmIGRlYnVn X2ZpbGVfZGlyZWN0b3J5KQotICAgIHsKLSAgICAgIC8qIEFsc28gdHJ5IHRo ZSBzYW1lIGZpbGUgaW4gdGhlIHNlcGFyYXRlIGRlYnVnIGluZm8gZGlyZWN0 b3J5LiAgKi8KLSAgICAgIGRlYnVnZmlsZSA9IHhtYWxsb2MgKHN0cmxlbiAo ZmlsZW5hbWUpCi0JCQkgICArIHN0cmxlbiAoZGVidWdfZmlsZV9kaXJlY3Rv cnkpICsgMSk7Ci0gICAgICBzdHJjcHkgKGRlYnVnZmlsZSwgZGVidWdfZmls ZV9kaXJlY3RvcnkpOwotICAgICAgLyogRklMRU5BTUUgaXMgYWJzb2x1dGUs IHNvIHdlIGRvbid0IG5lZWQgYSAiLyIgaGVyZS4gICovCi0gICAgICBzdHJj YXQgKGRlYnVnZmlsZSwgZmlsZW5hbWUpOwotCi0gICAgICBtYWtlX2NsZWFu dXAgKHhmcmVlLCBkZWJ1Z2ZpbGUpOwotICAgICAgaW5wdXQgPSBmb3BlbiAo ZGVidWdmaWxlLCAiciIpOwotICAgIH0KLQotICBpZiAoIWlucHV0ICYmIGdk Yl9kYXRhZGlyKQotICAgIHsKLSAgICAgIC8qIEFsc28gdHJ5IHRoZSBzYW1l IGZpbGUgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgZ2RiJ3MgZGF0YQotCSBkaXJl Y3RvcnkuICAqLwotICAgICAgZGVidWdmaWxlID0geG1hbGxvYyAoc3RybGVu IChnZGJfZGF0YWRpcikgKyBzdHJsZW4gKGZpbGVuYW1lKQotCQkJICAgKyBz dHJsZW4gKCIvYXV0by1sb2FkIikgKyAxKTsKLSAgICAgIHN0cmNweSAoZGVi dWdmaWxlLCBnZGJfZGF0YWRpcik7Ci0gICAgICBzdHJjYXQgKGRlYnVnZmls ZSwgIi9hdXRvLWxvYWQiKTsKLSAgICAgIC8qIEZJTEVOQU1FIGlzIGFic29s dXRlLCBzbyB3ZSBkb24ndCBuZWVkIGEgIi8iIGhlcmUuICAqLwotICAgICAg c3RyY2F0IChkZWJ1Z2ZpbGUsIGZpbGVuYW1lKTsKLQotICAgICAgbWFrZV9j bGVhbnVwICh4ZnJlZSwgZGVidWdmaWxlKTsKLSAgICAgIGlucHV0ID0gZm9w ZW4gKGRlYnVnZmlsZSwgInIiKTsKLSAgICB9Ci0KLSAgaWYgKGlucHV0KQot ICAgIHsKLSAgICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gdGhyb3cgYW4gZXhj ZXB0aW9uIGhlcmUgLS0gYnV0IHRoZSB1c2VyCi0JIHdvdWxkIGxpa2UgdG8g a25vdyB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLiAgKi8KLSAgICAgIGlm IChQeVJ1bl9TaW1wbGVGaWxlIChpbnB1dCwgZGVidWdmaWxlKSkKLQlnZGJw eV9wcmludF9zdGFjayAoKTsKLSAgICAgIGZjbG9zZSAoaW5wdXQpOwotICAg IH0KKyAgLyogV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBhbiBleGNlcHRpb24g aGVyZSAtLSBidXQgdGhlIHVzZXIKKyAgICAgd291bGQgbGlrZSB0byBrbm93 IHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICAqLworICBpZiAoUHlSdW5f U2ltcGxlRmlsZSAoc3RyZWFtLCBmaWxlKSkKKyAgICBnZGJweV9wcmludF9z dGFjayAoKTsKIAogICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOwogICBnZGJw eV9jdXJyZW50X29iamZpbGUgPSBOVUxMOwogfQogCiAvKiBSZXR1cm4gdGhl IGN1cnJlbnQgT2JqZmlsZSwgb3IgTm9uZSBpZiB0aGVyZSBpc24ndCBvbmUu ICAqLworCiBzdGF0aWMgUHlPYmplY3QgKgogZ2RicHlfZ2V0X2N1cnJlbnRf b2JqZmlsZSAoUHlPYmplY3QgKnVudXNlZDEsIFB5T2JqZWN0ICp1bnVzZWQy KQogewpAQCAtNjE3LDggKzU2MCw4IEBAIHNvdXJjZV9weXRob25fc2NyaXB0 IChGSUxFICpzdHJlYW0sIGNvbnMKIAogLyogTGlzdHMgZm9yICdtYWludCBz ZXQgcHl0aG9uJyBjb21tYW5kcy4gICovCiAKLXN0YXRpYyBzdHJ1Y3QgY21k X2xpc3RfZWxlbWVudCAqc2V0X3B5dGhvbl9saXN0Owotc3RhdGljIHN0cnVj dCBjbWRfbGlzdF9lbGVtZW50ICpzaG93X3B5dGhvbl9saXN0Oworc3RydWN0 IGNtZF9saXN0X2VsZW1lbnQgKnNldF9weXRob25fbGlzdDsKK3N0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpzaG93X3B5dGhvbl9saXN0OwogCiAvKiBGdW5j dGlvbiBmb3IgdXNlIGJ5ICdtYWludCBzZXQgcHl0aG9uJyBwcmVmaXggY29t bWFuZC4gICovCiAKQEAgLTY4MywxNiArNjI2LDcgQEAgRW5hYmxlcyBvciBk aXNhYmxlcyBwcmludGluZyBvZiBQeXRob24gcwogCQkJICAgJnNldF9weXRo b25fbGlzdCwKIAkJCSAgICZzaG93X3B5dGhvbl9saXN0KTsKIAotICBhZGRf c2V0c2hvd19ib29sZWFuX2NtZCAoImF1dG8tbG9hZCIsIGNsYXNzX21haW50 ZW5hbmNlLAotCQkJICAgJmdkYnB5X2F1dG9fbG9hZCwgXygiXAotRW5hYmxl IG9yIGRpc2FibGUgYXV0by1sb2FkaW5nIG9mIFB5dGhvbiBjb2RlIHdoZW4g YW4gb2JqZWN0IGlzIG9wZW5lZC4iKSwgXygiXAotU2hvdyB3aGV0aGVyIFB5 dGhvbiBjb2RlIHdpbGwgYmUgYXV0by1sb2FkZWQgd2hlbiBhbiBvYmplY3Qg aXMgb3BlbmVkLiIpLCBfKCJcCi1FbmFibGVzIG9yIGRpc2FibGVzIGF1dG8t bG9hZGluZyBvZiBQeXRob24gY29kZSB3aGVuIGFuIG9iamVjdCBpcyBvcGVu ZWQuIiksCi0JCQkgICBOVUxMLCBOVUxMLAotCQkJICAgJnNldF9weXRob25f bGlzdCwKLQkJCSAgICZzaG93X3B5dGhvbl9saXN0KTsKLQogI2lmZGVmIEhB VkVfUFlUSE9OCiAgIFB5X0luaXRpYWxpemUgKCk7CiAgIFB5RXZhbF9Jbml0 VGhyZWFkcyAoKTsKIApAQCAtNzAzLDYgKzY0Myw3IEBAIEVuYWJsZXMgb3Ig ZGlzYWJsZXMgYXV0by1sb2FkaW5nIG9mIFB5dGgKICAgUHlNb2R1bGVfQWRk U3RyaW5nQ29uc3RhbnQgKGdkYl9tb2R1bGUsICJIT1NUX0NPTkZJRyIsIChj aGFyKikgaG9zdF9uYW1lKTsKICAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3Rh bnQgKGdkYl9tb2R1bGUsICJUQVJHRVRfQ09ORklHIiwgKGNoYXIqKSB0YXJn ZXRfbmFtZSk7CiAKKyAgZ2RicHlfaW5pdGlhbGl6ZV9hdXRvX2xvYWQgKCk7 CiAgIGdkYnB5X2luaXRpYWxpemVfdmFsdWVzICgpOwogICBnZGJweV9pbml0 aWFsaXplX2ZyYW1lcyAoKTsKICAgZ2RicHlfaW5pdGlhbGl6ZV9jb21tYW5k cyAoKTsKQEAgLTcxOSw4ICs2NjAsNiBAQCBFbmFibGVzIG9yIGRpc2FibGVz IGF1dG8tbG9hZGluZyBvZiBQeXRoCiAgIFB5UnVuX1NpbXBsZVN0cmluZyAo ImltcG9ydCBnZGIiKTsKICAgUHlSdW5fU2ltcGxlU3RyaW5nICgiZ2RiLnBy ZXR0eV9wcmludGVycyA9IFtdIik7CiAKLSAgb2JzZXJ2ZXJfYXR0YWNoX25l d19vYmpmaWxlIChnZGJweV9uZXdfb2JqZmlsZSk7Ci0KICAgZ2RicHlfdG9f c3RyaW5nX2NzdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKCJ0b19zdHJpbmci KTsKICAgZ2RicHlfY2hpbGRyZW5fY3N0ID0gUHlTdHJpbmdfRnJvbVN0cmlu ZyAoImNoaWxkcmVuIik7CiAgIGdkYnB5X2Rpc3BsYXlfaGludF9jc3QgPSBQ eVN0cmluZ19Gcm9tU3RyaW5nICgiZGlzcGxheV9oaW50Iik7CkluZGV4OiB0 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1zZWN0aW9uLXNjcmlwdC5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LXNlY3Rpb24tc2NyaXB0LmMKZGlmZiAtTiB0ZXN0c3VpdGUvZ2Ri LnB5dGhvbi9weS1zZWN0aW9uLXNjcmlwdC5jCi0tLSAvZGV2L251bGwJMSBK YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5weXRo b24vcHktc2VjdGlvbi1zY3JpcHQuYwkyMSBBcHIgMjAxMCAxOTowNzoxOCAt MDAwMApAQCAtMCwwICsxLDUyIEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBh cnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQg MjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogUHV0IHRoZSBwYXRoIHRvIHRo ZSBwcmV0dHktcHJpbnRlciBzY3JpcHQgaW4gLmRlYnVnX2dkYl9zY3JpcHRz IHNvCisgICBnZGIgd2lsbCBhdXRvbWFnaWNhbGx5IGxvYWRlZCBpdC4gICov CisKKyNkZWZpbmUgREVGSU5FX0dEQl9TQ1JJUFQoc2NyaXB0X25hbWUpIFwK KyAgYXNtKCJcCisucHVzaHNlY3Rpb24gXCIuZGVidWdfZ2RiX3NjcmlwdHNc IiwgXCJNU1wiLEBwcm9nYml0cywxXG5cCisuYnl0ZSAxXG5cCisuYXNjaXog XCIiIHNjcmlwdF9uYW1lICJcIlxuXAorLnBvcHNlY3Rpb24gXG5cCisiKTsK KworREVGSU5FX0dEQl9TQ1JJUFQgKCJweS1zZWN0aW9uLXNjcmlwdC5weSIp CisKK3N0cnVjdCBzcworeworICBpbnQgYTsKKyAgaW50IGI7Cit9OworCit2 b2lkCitpbml0X3NzIChzdHJ1Y3Qgc3MgKnMsIGludCBhLCBpbnQgYikKK3sK KyAgcy0+YSA9IGE7CisgIHMtPmIgPSBiOworfQorCitpbnQKK21haW4gKCkK K3sKKyAgc3RydWN0IHNzIHNzOworCisgIGluaXRfc3MgKCZzcywgMSwgMik7 CisKKyAgcmV0dXJuIDA7ICAgICAgLyogYnJlYWsgdG8gaW5zcGVjdCBzdHJ1 Y3QgYW5kIHVuaW9uICovCit9CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLnB5dGhv bi9weS1zZWN0aW9uLXNjcmlwdC5leHAKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5weXRob24vcHktc2VjdGlvbi1z Y3JpcHQuZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRob24vcHktc2Vj dGlvbi1zY3JpcHQuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow MDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5weXRob24vcHktc2VjdGlv bi1zY3JpcHQuZXhwCTIxIEFwciAyMDEwIDE5OjA3OjE4IC0wMDAwCkBAIC0w LDAgKzEsNjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1aXRlLiAgSXQgdGVz dHMgYXV0b21hZ2ljIGxvYWRpbmcgb2YKKyMgc2NyaXB0cyBzcGVjaWZpZWQg aW4gdGhlIC5kZWJ1Z19nZGJfc2NyaXB0cyBzZWN0aW9uLgorCisjIFRoaXMg dGVzdCBjYW4gb25seSBiZSBydW4gb24gdGFyZ2V0cyB3aGljaCBzdXBwb3J0 IEVMRiBhbmQgdXNlIGdhcy4KKyMgRm9yIG5vdyBwaWNrIGEgc2FtcGxpbmcg b2YgbGlrZWx5IHRhcmdldHMuCitpZiB7IVtpc3RhcmdldCAqLSotbGludXgq XQorICAgICYmICFbaXN0YXJnZXQgKi0qLWdudSpdCisgICAgJiYgIVtpc3Rh cmdldCAqLSotZWxmKl0KKyAgICAmJiAhW2lzdGFyZ2V0ICotKi1vcGVuYnNk Kl0KKyAgICAmJiAhW2lzdGFyZ2V0IGFybS0qLWVhYmkqXQorICAgICYmICFb aXN0YXJnZXQgcG93ZXJwYy0qLWVhYmkqXX0geworICAgIHZlcmJvc2UgIlNr aXBwaW5nIHB5LXNlY3Rpb24tc2NyaXB0LmV4cCBiZWNhdXNlIG9mIGxhY2sg b2Ygc3VwcG9ydC4iCisgICAgcmV0dXJuCit9CisKK2lmICR0cmFjZWxldmVs IHRoZW4geworICAgIHN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitzZXQgdGVz dGZpbGUgInB5LXNlY3Rpb24tc2NyaXB0Igorc2V0IHNyY2ZpbGUgJHt0ZXN0 ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rl c3RmaWxlfQoraWYgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRp cn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUge2RlYnVn fV0gIT0gIiIgfSB7CisgICAgdW50ZXN0ZWQgIkNvdWxkbid0IGNvbXBpbGUg JHtzcmNmaWxlfSIKKyAgICByZXR1cm4gLTEKK30KKworIyBNYWtlIHRoaXMg YXZhaWxhYmxlIHRvIGdkYiBiZWZvcmUgdGhlIHByb2dyYW0gc3RhcnRzLCBp dCBpcworIyBhdXRvbWFnaWNhbGx5IGxvYWRlZCBieSBnZGIuCitzZXQgcmVt b3RlX3B5dGhvbl9maWxlIFtyZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rp cn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5XQorCisjIFN0YXJ0IHdpdGgg YSBmcmVzaCBnZGIuCisKK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWlu aXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5m aWxlfQorCitpZiAhW3J1bnRvX21haW5dIHsKKyAgICBwZXJyb3IgImNvdWxk bid0IHJ1biB0byBtYWluIgorICAgIHJldHVybgorfQorCitnZGJfdGVzdCAi YiBbZ2RiX2dldF9saW5lX251bWJlciB7YnJlYWsgdG8gaW5zcGVjdH0gJHt0 ZXN0ZmlsZX0uYyBdIiBcCisgICAgIi4qQnJlYWtwb2ludC4qIgorZ2RiX3Rl c3QgImNvbnRpbnVlIiAiLipCcmVha3BvaW50LioiCisKK2dkYl90ZXN0ICJw cmludCBzcyIgIiA9IGE9PDE+IGI9PDI+IgorCityZW1vdGVfZmlsZSBob3N0 IGRlbGV0ZSAke3JlbW90ZV9weXRob25fZmlsZX0KSW5kZXg6IHRlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LXNlY3Rpb24tc2NyaXB0LnB5Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LXNlY3Rpb24tc2NyaXB0LnB5CmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRo b24vcHktc2VjdGlvbi1zY3JpcHQucHkKLS0tIC9kZXYvbnVsbAkxIEphbiAx OTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1zZWN0aW9uLXNjcmlwdC5weQkyMSBBcHIgMjAxMCAxOTowNzoxOCAtMDAw MApAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4K KworaW1wb3J0IHJlCisKK2NsYXNzIHBwX3NzOgorICAgIGRlZiBfX2luaXRf XyhzZWxmLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAg ZGVmIHRvX3N0cmluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJhPTwiICsg c3RyKHNlbGYudmFsWyJhIl0pICsgIj4gYj08IiArIHN0cihzZWxmLnZhbFsi YiJdKSArICI+IgorCitkZWYgbG9va3VwX2Z1bmN0aW9uICh2YWwpOgorICAg ICJMb29rLXVwIGFuZCByZXR1cm4gYSBwcmV0dHktcHJpbnRlciB0aGF0IGNh biBwcmludCB2YWwuIgorCisgICAgIyBHZXQgdGhlIHR5cGUuCisgICAgdHlw ZSA9IHZhbC50eXBlCisKKyAgICAjIElmIGl0IHBvaW50cyB0byBhIHJlZmVy ZW5jZSwgZ2V0IHRoZSByZWZlcmVuY2UuCisgICAgaWYgdHlwZS5jb2RlID09 IGdkYi5UWVBFX0NPREVfUkVGOgorICAgICAgICB0eXBlID0gdHlwZS50YXJn ZXQgKCkKKworICAgICMgR2V0IHRoZSB1bnF1YWxpZmllZCB0eXBlLCBzdHJp cHBlZCBvZiB0eXBlZGVmcy4KKyAgICB0eXBlID0gdHlwZS51bnF1YWxpZmll ZCAoKS5zdHJpcF90eXBlZGVmcyAoKQorCisgICAgIyBHZXQgdGhlIHR5cGUg bmFtZS4gICAgCisgICAgdHlwZW5hbWUgPSB0eXBlLnRhZworCisgICAgaWYg dHlwZW5hbWUgPT0gTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAg ICMgSXRlcmF0ZSBvdmVyIGxvY2FsIGRpY3Rpb25hcnkgb2YgdHlwZXMgdG8g ZGV0ZXJtaW5lCisgICAgIyBpZiBhIHByaW50ZXIgaXMgcmVnaXN0ZXJlZCBm b3IgdGhhdCB0eXBlLiAgUmV0dXJuIGFuCisgICAgIyBpbnN0YW50aWF0aW9u IG9mIHRoZSBwcmludGVyIGlmIGZvdW5kLgorICAgIGZvciBmdW5jdGlvbiBp biBwcmV0dHlfcHJpbnRlcnNfZGljdDoKKyAgICAgICAgaWYgZnVuY3Rpb24u bWF0Y2ggKHR5cGVuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBwcmV0dHlf cHJpbnRlcnNfZGljdFtmdW5jdGlvbl0gKHZhbCkKKyAgICAgICAgCisgICAg IyBDYW5ub3QgZmluZCBhIHByZXR0eSBwcmludGVyLiAgUmV0dXJuIE5vbmUu CisKKyAgICByZXR1cm4gTm9uZQorCitkZWYgcmVnaXN0ZXJfcHJldHR5X3By aW50ZXJzICgpOgorICAgIHByZXR0eV9wcmludGVyc19kaWN0W3JlLmNvbXBp bGUgKCdec3MkJyldICA9IHBwX3NzCisKK3ByZXR0eV9wcmludGVyc19kaWN0 ID0ge30KKworcmVnaXN0ZXJfcHJldHR5X3ByaW50ZXJzICgpCitnZGIuY3Vy cmVudF9wcm9nc3BhY2UoKS5wcmV0dHlfcHJpbnRlcnMuYXBwZW5kIChsb29r dXBfZnVuY3Rpb24pCg== --000e0cd112504ad8500484c42073--