From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4753 invoked by alias); 24 Feb 2011 20:40:57 -0000 Received: (qmail 4743 invoked by uid 22791); 24 Feb 2011 20:40:54 -0000 X-SWARE-Spam-Status: No, hits=-5.0 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,TW_BJ,TW_CP,TW_GP,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 24 Feb 2011 20:40:41 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p1OKeeai025330 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 24 Feb 2011 15:40:40 -0500 Received: from valrhona.uglyboxes.com (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id p1OKeaft003384 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 24 Feb 2011 15:40:38 -0500 Message-ID: <4D66C244.5020005@redhat.com> Date: Thu, 24 Feb 2011 20:41:00 -0000 From: Keith Seitz User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209 Fedora/3.1.7-0.35.b3pre.fc13 Lightning/1.0b3pre Thunderbird/3.1.7 MIME-Version: 1.0 To: Jan Kratochvil CC: gdb-patches@sourceware.org Subject: Re: [patch 0/3] Re: [RFA] c++/11734 revisited (and c++/12273) References: <20110221110627.GA29540@host1.dyn.jankratochvil.net> In-Reply-To: <20110221110627.GA29540@host1.dyn.jankratochvil.net> Content-Type: multipart/mixed; boundary="------------030903010600050903010909" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-02/txt/msg00734.txt.bz2 This is a multi-part message in MIME format. --------------030903010600050903010909 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Content-length: 6151 On 02/21/2011 03:06 AM, Jan Kratochvil wrote: > pre-physname: > GNU gdb (GDB) 7.1.50.20100309-cvs > (gdb) b A::outer::foo (int) > Breakpoint 1 at 0x4005a3: file ./gdb.cp/ovsrch3.cc, line 23. > (gdb) b A::outer::foo (void) > Breakpoint 2 at 0x40058c: file ./gdb.cp/ovsrch2.cc, line 23. > (gdb) b A::outer::foo (char *) > Breakpoint 3 at 0x4005c0: file ./gdb.cp/ovsrch4.cc, line 23. > > patched: > GNU gdb (GDB) 7.2.50.20110220-cvs > (gdb) b A::outer::foo (int) > the class A::outer does not have any method named foo (int) This is caused by one of the consequences of dwarf2_physname: we need to have all user input canonicalized before calling lookup_symbol[*]. This is a problem I have wondered about since the dwarf2_physname patchset was originally committed, and now we have a concrete example of how to trigger this. IIRC, the only functional changes (excluding requested changes) to the patchset are: - canonicalization of user input in find_methods (linespec.c) - add tests to ovsrch.exp et al to cover the regressions you've identified > It assumes get_gdb_completer_quote_characters() is just "'" as currently is. > It cannot be changed now anyway and for future it should be rather removed > than extended. It was already hardcoded into decode_compound before physname > patch. Yes, that was sloppy on my part. I apologize. I have reintroduced the use of get_gdb_completer_quote_characters. IMO there's something to be said for consistency. One day, we'll want to identify the places where this assumption is made, and using get_gdb_completer_quote_characters is undoubtedly going to be the key to doing it. > Éxcessive backslash. Fixed all of these. > Some comment and/or removal wrt get_gdb_completer_quote_characters for '. > (OK, this ' hardcoded in decode_compound was present even before physname, > I can clean it up afterwards.) If I have understood you correctly, I've removed the quote character and tested independently for it using get_gdb_completer_quote_characters. > *p can == '\0' here, it works - but I would prefer for better readability: Fixed. > 00000000004004ea W _ZNK1C1mEv > 00000000004004ea W C::m() const > > pre-physname: > GNU gdb (GDB) 7.1.50.20100309-cvs > (gdb) b C::m if C::m() > Breakpoint 1 at 0x4004f2: file 3.C, line 4. > (gdb) b 'C::m' if C::m() > Breakpoint 1 at 0x4004f2: file 3.C, line 4. > > patched: > GNU gdb (GDB) 7.2.50.20110220-cvs > (gdb) b C::m if C::m() > the class C does not have any method named m if C::m() > (gdb) b 'C::m' if C::m() > the class C does not have any method named m' if C::m() This is also fixed, and I have added a test for this to ovsrch.exp. > 00000000004004ea W _ZNK1C1mEv > 00000000004004ea W C::m() const > > pre-physname: > GNU gdb (GDB) 7.1.50.20100309-cvs > (gdb) b 'C::m() const' > Breakpoint 1 at 0x4004f2: file 3.C, line 4. > > patched: > GNU gdb (GDB) 7.2.50.20110220-cvs > (gdb) b 'C::m() const' > Junk at end of arguments. > > This is a regression. This is also a consequence of (the lack of) canonicalization. I've modified ovsrch.exp et al to test for this. > Probably not meaningful for SYM_CLASS but isn't here appropriate rather > SYMBOL_NATURAL_NAME? If SYMBOL_LINKAGE_NAME would be a mangled name for the > class fully qualified name it would not work. But linkage name of a class > type does not make sense so the suggested change is rather for code > readability. Changed. >> +# Copyright 2010 Free Software Foundation, Inc. > > 2011 Fixed. > > if [prepare_for_testing ... ] { > return -1 > } Fixed. > [nitpick] gdb_breakpoint already always prints FAIL if it fails. Grr. Deep down, I knew that to be the case. For some reason, it looked odd, so I added the fail clause. Fixed. >> + Copyright 2010 Free Software Foundation, Inc. > > 2011 Fixed. >> + set method "${class}::foo\($ovld\)" > > Excessive backslashes. Fixed. > [nitpick] gdb_breakpoint already always prints FAIL if it fails. > (and below) Fixed. > if [prepare_for_testing ... ] { > return -1 > } Fixed. > Sorry for the review delay. It's a big patchset. It's not like I have nothing else to do! ;-) I'm not sure whether it would be easier to diff the old and new patchsets or just attach the whole thing. But I'm erring on the side of "too much information." Keith ChangeLog 2011-02-24 Keith Seitz * linespec.c (find_methods): Canonicalize NAME before looking up the symbol. PR c++/12273 * linespec.c (locate_first_half): Keep overload information, too. (decode_compound): Use a string to represent break characters to escape the loop. If P points to a break character, do not increment it. For C++ and Java, keep overload information and relevant keywords. If we cannot find a symbol, search the minimal symbols. PR c++/11734 * linespec.c (decode_compound): Rename SAVED_ARG to THE_REAL_SAVED_ARG. Make a copy of THE_REAL_SAVED_ARG in SAVED_ARG and strip single-quotes. Pass a valid block to lookup_symbol. (lookup_prefix_sym): Likewise. (find_method): Construct search name based on SYM_CLASS instead of SAVED_ARG. * psymtab.c (lookup_partial_symbol): Add language parameter. (lookup_symbol_aux_psymtabs): Likewise. Don't assume that the psymtab we found was the right one. Search for the desired symbol in the symtab to be certain. (psymtab_search_name): New function. (lookup_partial_symbol): Use psymtab_search_name. Add language parameter. (read_symtabs_for_function): Add language parameter and pass to lookup_partial_symbol. (find_symbol_file_from_partial): Likewise. * symfile.h (struct quick_symbol_functions): Add language parameter to lookup_symbol, expand_symtabs_for_function, and find_symbol_file. * cp-support.c (make_symbol_overload_list): Update above API changes. * symtab.c (lookup_symbol_aux_quick): Pass the current language to the quick symbol functions. (basic_lookup_transparent_type_quick): Likewise. (find_main_filename): Likewise. * dwarf2_read.c (dw2_lookup_symbol): Add langauge parameter. (dw2_expand_symtabs_for_function): Likewise. (dw2_find_symbol_file): Likewise. testsuite/ChangeLog [unchanged from last time] Keith --------------030903010600050903010909 Content-Type: text/plain; name="11734-12273-3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="11734-12273-3.patch" Content-length: 34108 SW5kZXg6IGxpbmVzcGVjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9saW5lc3BlYy5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjEwOQpkaWZmIC11IC1wIC1yMS4xMDkgbGluZXNwZWMu YwotLS0gbGluZXNwZWMuYwk5IEphbiAyMDExIDAzOjA4OjU3IC0wMDAwCTEu MTA5CisrKyBsaW5lc3BlYy5jCTI0IEZlYiAyMDExIDIwOjM2OjM1IC0wMDAw CkBAIC0yMTMsNiArMjEzLDE5IEBAIGZpbmRfbWV0aG9kcyAoc3RydWN0IHR5 cGUgKnQsIGNoYXIgKm5hbWUKICAgaW50IGkxID0gMDsKICAgaW50IGliYXNl OwogICBjaGFyICpjbGFzc19uYW1lID0gdHlwZV9uYW1lX25vX3RhZyAodCk7 CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOworICBjaGFyICpjYW5vbjsK KworICAvKiBOQU1FIGlzIHR5cGVkIGJ5IHRoZSB1c2VyOiBpdCBuZWVkcyB0 byBiZSBjYW5vbmljYWxpemVkIGJlZm9yZQorICAgICBwYXNzaW5nIHRvIGxv b2t1cF9zeW1ib2wuICAqLworICBjYW5vbiA9IGNwX2Nhbm9uaWNhbGl6ZV9z dHJpbmcgKG5hbWUpOworICBpZiAoY2Fub24gIT0gTlVMTCkKKyAgICB7Cisg ICAgICBuYW1lID0gY2Fub247CisgICAgICBjbGVhbnVwID0gbWFrZV9jbGVh bnVwICh4ZnJlZSwgbmFtZSk7CisgICAgfQorICBlbHNlCisgICAgY2xlYW51 cCA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKIAogICAv KiBJZ25vcmUgdGhpcyBjbGFzcyBpZiBpdCBkb2Vzbid0IGhhdmUgYSBuYW1l LiAgVGhpcyBpcyB1Z2x5LCBidXQKICAgICAgdW5sZXNzIHdlIGZpZ3VyZSBv dXQgaG93IHRvIGdldCB0aGUgcGh5c25hbWUgd2l0aG91dCB0aGUgbmFtZSBv ZgpAQCAtMjc1LDYgKzI4OCw3IEBAIGZpbmRfbWV0aG9kcyAoc3RydWN0IHR5 cGUgKnQsIGNoYXIgKm5hbWUKICAgICAgIGkxICs9IGZpbmRfbWV0aG9kcyAo VFlQRV9CQVNFQ0xBU1MgKHQsIGliYXNlKSwgbmFtZSwKIAkJCSAgbGFuZ3Vh Z2UsIHN5bV9hcnIgKyBpMSk7CiAKKyAgZG9fY2xlYW51cHMgKGNsZWFudXAp OwogICByZXR1cm4gaTE7CiB9CiAKQEAgLTEwNTcsNiArMTA3MSwxMCBAQCBs b2NhdGVfZmlyc3RfaGFsZiAoY2hhciAqKmFyZ3B0ciwgaW50ICppCiAJICAg IGVycm9yIChfKCJtYWxmb3JtZWQgdGVtcGxhdGUgc3BlY2lmaWNhdGlvbiBp biBjb21tYW5kIikpOwogCSAgcCA9IHRlbXBfZW5kOwogCX0KKworICAgICAg aWYgKHBbMF0gPT0gJygnKQorCXAgPSBmaW5kX21ldGhvZF9vdmVybG9hZF9l bmQgKHApOworCiAgICAgICAvKiBDaGVjayBmb3IgYSBjb2xvbiBhbmQgYSBw bHVzIG9yIG1pbnVzIGFuZCBhIFsgKHdoaWNoCiAgICAgICAgICBpbmRpY2F0 ZXMgYW4gT2JqZWN0aXZlLUMgbWV0aG9kKS4gICovCiAgICAgICBpZiAoaXNf b2JqY19tZXRob2RfZm9ybWF0IChwKSkKQEAgLTEyMjYsNyArMTI0NCw3IEBA IGRlY29kZV9vYmpjIChjaGFyICoqYXJncHRyLCBpbnQgZnVuZmlyc3QKIAog c3RhdGljIHN0cnVjdCBzeW10YWJzX2FuZF9saW5lcwogZGVjb2RlX2NvbXBv dW5kIChjaGFyICoqYXJncHRyLCBpbnQgZnVuZmlyc3RsaW5lLCBjaGFyICoq KmNhbm9uaWNhbCwKLQkJIGNoYXIgKnNhdmVkX2FyZywgY2hhciAqcCwgaW50 ICpub3RfZm91bmRfcHRyKQorCQkgY2hhciAqdGhlX3JlYWxfc2F2ZWRfYXJn LCBjaGFyICpwLCBpbnQgKm5vdF9mb3VuZF9wdHIpCiB7CiAgIHN0cnVjdCBz eW10YWJzX2FuZF9saW5lcyB2YWx1ZXM7CiAgIGNoYXIgKnAyOwpAQCAtMTIz Nyw2ICsxMjU1LDIzIEBAIGRlY29kZV9jb21wb3VuZCAoY2hhciAqKmFyZ3B0 ciwgaW50IGZ1bmYKICAgc3RydWN0IHN5bWJvbCAqc3ltX2NsYXNzOwogICBz dHJ1Y3QgdHlwZSAqdDsKICAgY2hhciAqc2F2ZWRfamF2YV9hcmdwdHIgPSBO VUxMOworICBjaGFyICpzYXZlZF9hcmc7CisKKyAgLyogSWYgdGhlIHVzZXIg c3BlY2lmaWVkIGFueSBjb21wbGV0ZXIgcXVvdGUgY2hhcmFjdGVycyBpbiB0 aGUgaW5wdXQsCisgICAgIHN0cmlwIHRoZW0uICBUaGV5IGFyZSBzdXBlcmZs dW91cy4gICovCisgIHNhdmVkX2FyZyA9IGFsbG9jYSAoc3RybGVuICh0aGVf cmVhbF9zYXZlZF9hcmcpICsgMSk7CisgIHsKKyAgICBjaGFyICpkc3QgPSBz YXZlZF9hcmc7CisgICAgY2hhciAqc3JjID0gdGhlX3JlYWxfc2F2ZWRfYXJn OworICAgIGNoYXIgKnF1b3RlcyA9IGdldF9nZGJfY29tcGxldGVyX3F1b3Rl X2NoYXJhY3RlcnMgKCk7CisgICAgd2hpbGUgKCpzcmMgIT0gJ1wwJykKKyAg ICAgIHsKKwlpZiAoc3RyY2hyIChxdW90ZXMsICpzcmMpID09IE5VTEwpCisJ ICAqZHN0KysgPSAqc3JjOworCSsrc3JjOworICAgICAgfQorICAgICpkc3Qg PSAnXDAnOworICB9CiAKICAgLyogRmlyc3QgY2hlY2sgZm9yICJnbG9iYWwi IG5hbWVzcGFjZSBzcGVjaWZpY2F0aW9uLCBvZiB0aGUgZm9ybQogICAgICAi Ojpmb28iLiAgSWYgZm91bmQsIHNraXAgb3ZlciB0aGUgY29sb25zIGFuZCBq dW1wIHRvIG5vcm1hbApAQCAtMTI1Myw4ICsxMjg4LDEwIEBAIGRlY29kZV9j b21wb3VuZCAoY2hhciAqKmFyZ3B0ciwgaW50IGZ1bmYKICAgICAgICAgZmlu ZF9tZXRob2QuCiAKICAgICAgMikgQUFBOjppbkEgaXNuJ3QgdGhlIG5hbWUg b2YgYSBjbGFzcy4gIEluIHRoYXQgY2FzZSwgZWl0aGVyIHRoZQotICAgICAg ICB1c2VyIG1hZGUgYSB0eXBvIG9yIEFBQTo6aW5BIGlzIHRoZSBuYW1lIG9m IGEgbmFtZXNwYWNlLgotICAgICAgICBFaXRoZXIgd2F5LCB3ZSBqdXN0IGxv b2sgdXAgQUFBOjppbkE6OmZ1biB3aXRoIGxvb2t1cF9zeW1ib2wuCisgICAg ICAgIHVzZXIgbWFkZSBhIHR5cG8sIEFBQTo6aW5BIGlzIHRoZSBuYW1lIG9m IGEgbmFtZXNwYWNlLCBvciBpdCBpcworICAgICAgICB0aGUgbmFtZSBvZiBh IG1pbmltYWwgc3ltYm9sLgorICAgICAgICBXZSBqdXN0IGxvb2sgdXAgQUFB OjppbkE6OmZ1biB3aXRoIGxvb2t1cF9zeW1ib2wuICBJZiB0aGF0IGZhaWxz LAorICAgICAgICB0cnkgbG9va3VwX21pbmltYWxfc3ltYm9sLgogCiAgICAg IFRodXMsIG91ciBmaXJzdCB0YXNrIGlzIHRvIGZpbmQgZXZlcnl0aGluZyBi ZWZvcmUgdGhlIGxhc3Qgc2V0IG9mCiAgICAgIGRvdWJsZS1jb2xvbnMgYW5k IGZpZ3VyZSBvdXQgaWYgaXQncyB0aGUgbmFtZSBvZiBhIGNsYXNzLiAgU28g d2UKQEAgLTEyNzUsNiArMTMxMiw4IEBAIGRlY29kZV9jb21wb3VuZCAoY2hh ciAqKmFyZ3B0ciwgaW50IGZ1bmYKIAogICB3aGlsZSAoMSkKICAgICB7Cisg ICAgICBzdGF0aWMgY2hhciAqYnJlYWtfY2hhcmFjdGVycyA9ICIgXHQoIjsK KwogICAgICAgLyogTW92ZSBwb2ludGVyIHVwIHRvIG5leHQgcG9zc2libGUg Y2xhc3MvbmFtZXNwYWNlIHRva2VuLiAgKi8KIAogICAgICAgcCA9IHAyICsg MTsJLyogUmVzdGFydCB3aXRoIG9sZCB2YWx1ZSArMS4gICovCkBAIC0xMjg1 LDggKzEzMjQsOSBAQCBkZWNvZGVfY29tcG91bmQgKGNoYXIgKiphcmdwdHIs IGludCBmdW5mCiAgICAgICAvKiBQQVNTMjogcDItPiI6OmZ1biIsIHAtPiI6 ZnVuIiAqLwogCiAgICAgICAvKiBNb3ZlIHBvaW50ZXIgYWhlYWQgdG8gbmV4 dCBkb3VibGUtY29sb24uICAqLwotICAgICAgd2hpbGUgKCpwICYmIChwWzBd ICE9ICcgJykgJiYgKHBbMF0gIT0gJ1x0JykgJiYgKHBbMF0gIT0gJ1wnJykK LQkgICAgICYmICgqcCAhPSAnKCcpKQorICAgICAgd2hpbGUgKCpwCisJICAg ICAmJiBzdHJjaHIgKGJyZWFrX2NoYXJhY3RlcnMsICpwKSA9PSBOVUxMCisJ ICAgICAmJiBzdHJjaHIgKGdldF9nZGJfY29tcGxldGVyX3F1b3RlX2NoYXJh Y3RlcnMgKCksICpwKSA9PSBOVUxMKQogCXsKIAkgIGlmIChjdXJyZW50X2xh bmd1YWdlLT5sYV9sYW5ndWFnZSA9PSBsYW5ndWFnZV9jcGx1cykKIAkgICAg cCArPSBjcF92YWxpZGF0ZV9vcGVyYXRvciAocCk7CkBAIC0xMzEwLDkgKzEz NTAsMTIgQEAgZGVjb2RlX2NvbXBvdW5kIChjaGFyICoqYXJncHRyLCBpbnQg ZnVuZgogCSAgZWxzZSBpZiAoKHBbMF0gPT0gJzonKSAmJiAocFsxXSA9PSAn OicpKQogCSAgICBicmVhazsJLyogRm91bmQgZG91YmxlLWNvbG9uLiAgKi8K IAkgIGVsc2UKLQkgICAgLyogUEFTUzI6IFdlJ2xsIGtlZXAgZ2V0dGluZyBo ZXJlLCB1bnRpbCBwLT4iIiwgYXQgd2hpY2ggcG9pbnQKLQkgICAgICAgd2Ug ZXhpdCB0aGlzIGxvb3AuICAqLwotCSAgICBwKys7CisJICAgIHsKKwkgICAg ICAvKiBQQVNTMjogV2UnbGwga2VlcCBnZXR0aW5nIGhlcmUsIHVudGlsIFAg cG9pbnRzIHRvIG9uZSBvZiB0aGUKKwkJIGJyZWFrIGNoYXJhY3RlcnMsIGF0 IHdoaWNoIHBvaW50IHdlIGV4aXQgdGhpcyBsb29wLiAgKi8KKwkgICAgICBp ZiAoKnAgJiYgc3RyY2hyIChicmVha19jaGFyYWN0ZXJzLCAqcCkgPT0gTlVM TCkKKwkJcCsrOworCSAgICB9CiAJfQogCiAgICAgICBpZiAoKnAgIT0gJzon KQpAQCAtMTMyMSw3ICsxMzY0LDcgQEAgZGVjb2RlX2NvbXBvdW5kIChjaGFy ICoqYXJncHRyLCBpbnQgZnVuZgogCQkJICAgdW5zdWNjZXNzZnVsbHkgYWxs IHRoZSBjb21wb25lbnRzIG9mIHRoZQogCQkJICAgc3RyaW5nLCBhbmQgcC0+ IiIoUEFTUzIpLiAgKi8KIAotICAgICAgLyogV2UgZ2V0IGhlcmUgaWYgcCBw b2ludHMgdG8gJyAnLCAnXHQnLCAnXCcnLCAiOjoiIG9yICIiKGkuZQorICAg ICAgLyogV2UgZ2V0IGhlcmUgaWYgcCBwb2ludHMgdG8gb25lIG9mIHRoZSBi cmVhayBjaGFyYWN0ZXJzIG9yICIiIChpLmUuLAogCSBzdHJpbmcgZW5kZWQp LiAgKi8KICAgICAgIC8qIFNhdmUgcmVzdGFydCBmb3IgbmV4dCB0aW1lIGFy b3VuZC4gICovCiAgICAgICBwMiA9IHA7CkBAIC0xNDcyLDYgKzE1MTUsMTgg QEAgZGVjb2RlX2NvbXBvdW5kIChjaGFyICoqYXJncHRyLCBpbnQgZnVuZgog ICAvKiBXZSBjb3VsZG4ndCBmaW5kIGEgY2xhc3MsIHNvIHdlJ3JlIGluIGNh c2UgMiBhYm92ZS4gIFdlIGNoZWNrIHRoZQogICAgICBlbnRpcmUgbmFtZSBh cyBhIHN5bWJvbCBpbnN0ZWFkLiAgKi8KIAorICBpZiAoY3VycmVudF9sYW5n dWFnZS0+bGFfbGFuZ3VhZ2UgPT0gbGFuZ3VhZ2VfY3BsdXMKKyAgICAgIHx8 IGN1cnJlbnRfbGFuZ3VhZ2UtPmxhX2xhbmd1YWdlID09IGxhbmd1YWdlX2ph dmEpCisgICAgeworICAgICAgY2hhciAqcGFyZW4gPSBzdHJjaHIgKHAsICco Jyk7CisgICAgICBpZiAocGFyZW4gIT0gTlVMTCkKKwlwID0gZmluZF9tZXRo b2Rfb3ZlcmxvYWRfZW5kIChwYXJlbik7CisKKyAgICAgIC8qIE1ha2Ugc3Vy ZSB3ZSBrZWVwIGltcG9ydGFudCBrZXdvcmRzIGxpa2UgImNvbnN0IiAqLwor ICAgICAgaWYgKHN0cm5jbXAgKHAsICIgY29uc3QiLCA2KSA9PSAwKQorCXAg Kz0gNjsKKyAgICB9CisKICAgY29weSA9IChjaGFyICopIGFsbG9jYSAocCAt IHNhdmVkX2FyZzIgKyAxKTsKICAgbWVtY3B5IChjb3B5LCBzYXZlZF9hcmcy LCBwIC0gc2F2ZWRfYXJnMik7CiAgIC8qIE5vdGU6IGlmIGlzX3F1b3RlZCBz aG91bGQgYmUgdHJ1ZSwgd2Ugc251ZmYgb3V0IHF1b3RlIGhlcmUKQEAgLTE0 ODEsMTUgKzE1MzYsMjQgQEAgZGVjb2RlX2NvbXBvdW5kIChjaGFyICoqYXJn cHRyLCBpbnQgZnVuZgogICAqYXJncHRyID0gKCpwID09ICdcJycpID8gcCAr IDEgOiBwOwogCiAgIC8qIExvb2sgdXAgZW50aXJlIG5hbWUuICAqLwotICBz eW0gPSBsb29rdXBfc3ltYm9sIChjb3B5LCAwLCBWQVJfRE9NQUlOLCAwKTsK KyAgc3ltID0gbG9va3VwX3N5bWJvbCAoY29weSwgZ2V0X3NlbGVjdGVkX2Js b2NrICgwKSwgVkFSX0RPTUFJTiwgMCk7CiAgIGlmIChzeW0pCiAgICAgcmV0 dXJuIHN5bWJvbF9mb3VuZCAoZnVuZmlyc3RsaW5lLCBjYW5vbmljYWwsIGNv cHksIHN5bSwgTlVMTCk7CisgIGVsc2UKKyAgICB7CisgICAgICBzdHJ1Y3Qg bWluaW1hbF9zeW1ib2wgKm1zeW07CiAKLSAgLyogQ291bGRuJ3QgZmluZCBh bnkgaW50ZXJwcmV0YXRpb24gYXMgY2xhc3Nlcy9uYW1lc3BhY2VzLCBzbyBn aXZlCi0gICAgIHVwLiAgVGhlIHF1b3RlcyBhcmUgaW1wb3J0YW50IGlmIGNv cHkgaXMgZW1wdHkuICAqLworICAgICAgLyogQ291bGRuJ3QgZmluZCBhbnkg aW50ZXJwcmV0YXRpb24gYXMgY2xhc3Nlcy9uYW1lc3BhY2VzLiAgQXMgYSBs YXN0CisJIHJlc29ydCwgdHJ5IHRoZSBtaW5pbWFsIHN5bWJvbCB0YWJsZXMu ICAqLworICAgICAgbXN5bSA9IGxvb2t1cF9taW5pbWFsX3N5bWJvbCAoY29w eSwgTlVMTCwgTlVMTCk7CisgICAgICBpZiAobXN5bSAhPSBOVUxMKQorCXJl dHVybiBtaW5zeW1fZm91bmQgKGZ1bmZpcnN0bGluZSwgbXN5bSk7CisgICAg fSAgICAKKworICAvKiBDb3VsZG4ndCBmaW5kIGEgbWluaW1hbCBzeW1ib2ws IGVpdGhlciwgc28gZ2l2ZSB1cC4gICovCiAgIGlmIChub3RfZm91bmRfcHRy KQogICAgICpub3RfZm91bmRfcHRyID0gMTsKLSAgY3BsdXNwbHVzX2Vycm9y IChzYXZlZF9hcmcsCisgIGNwbHVzcGx1c19lcnJvciAodGhlX3JlYWxfc2F2 ZWRfYXJnLAogCQkgICAiQ2FuJ3QgZmluZCBtZW1iZXIgb2YgbmFtZXNwYWNl LCAiCiAJCSAgICJjbGFzcywgc3RydWN0LCBvciB1bmlvbiBuYW1lZCBcIiVz XCJcbiIsCiAJCSAgIGNvcHkpOwpAQCAtMTUyOCw3ICsxNTkyLDcgQEAgbG9v a3VwX3ByZWZpeF9zeW0gKGNoYXIgKiphcmdwdHIsIGNoYXIgKgogICAvKiBB dCB0aGlzIHBvaW50IHAxLT4iOjppbkE6OmZ1biIsIHAtPiJpbkE6OmZ1biIg Y29weS0+IkFBQSIsCiAgICAgIGFyZ3B0ci0+ImluQTo6ZnVuIi4gICovCiAK LSAgc3ltID0gbG9va3VwX3N5bWJvbCAoY29weSwgMCwgU1RSVUNUX0RPTUFJ TiwgMCk7CisgIHN5bSA9IGxvb2t1cF9zeW1ib2wgKGNvcHksIGdldF9zZWxl Y3RlZF9ibG9jayAoMCksIFNUUlVDVF9ET01BSU4sIDApOwogICBpZiAoc3lt ID09IE5VTEwpCiAgICAgewogICAgICAgLyogVHlwZWRlZnMgYXJlIGluIFZB Ul9ET01BSU4gc28gdGhlIGFib3ZlIHN5bWJvbCBsb29rdXAgd2lsbApAQCAt MTU5OSwxNyArMTY2MywyOSBAQCBmaW5kX21ldGhvZCAoaW50IGZ1bmZpcnN0 bGluZSwgY2hhciAqKipjCiAgICAgICBpZiAoc3RyY2hyIChzYXZlZF9hcmcs ICcoJykgIT0gTlVMTCkKIAl7CiAJICBpbnQgaTsKLQkgIGNoYXIgKm5hbWUg PSBzYXZlZF9hcmc7Ci0JICBjaGFyICpjYW5vbiA9IGNwX2Nhbm9uaWNhbGl6 ZV9zdHJpbmcgKG5hbWUpOworCSAgY2hhciAqbmFtZTsKKwkgIGNoYXIgKmNh bm9uOwogCSAgc3RydWN0IGNsZWFudXAgKmNsZWFudXA7CiAKKwkgIC8qIENv bnN0cnVjdCB0aGUgcHJvcGVyIHNlYXJjaCBuYW1lIGJhc2VkIG9uIFNZTV9D TEFTUyBhbmQgQ09QWS4KKwkgICAgIFNBVkVEX0FSRyBtYXkgY29udGFpbiBh IHZhbGlkIG5hbWUsIGJ1dCB0aGF0IG5hbWUgbWlnaHQgbm90IGJlCisJICAg ICB3aGF0IGlzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgc3ltYm9sIHRhYmxl LiAgRm9yIGV4YW1wbGUsCisJICAgICBpZiBTQVZFRF9BUkcgKGFuZCBTWU1f Q0xBU1MpIHdlcmUgZm91bmQgdmlhIGFuIGltcG9ydAorCSAgICAgKCJ1c2lu ZyBuYW1lc3BhY2UiIGluIEMrKyksIHRoZW4gdGhlIHBoeXNuYW1lIG9mCisJ ICAgICBTWU1fQ0xBU1MgKCJBOjpteWNsYXNzIikgbWF5IG5vdCBiZSB0aGUg c2FtZSBhcyBTQVZFRF9BUkcKKwkgICAgICgibXljbGFzcyIpLiAgKi8KKwkg IG5hbWUgPSB4bWFsbG9jIChzdHJsZW4gKFNZTUJPTF9OQVRVUkFMX05BTUUg KHN5bV9jbGFzcykpCisJCQkgICsgMiAvKiAiOjoiICovICsgc3RybGVuIChj b3B5KSArIDEpOworCSAgc3RyY3B5IChuYW1lLCBTWU1CT0xfTkFUVVJBTF9O QU1FIChzeW1fY2xhc3MpKTsKKwkgIHN0cmNhdCAobmFtZSwgIjo6Iik7CisJ ICBzdHJjYXQgKG5hbWUsIGNvcHkpOworCSAgY2Fub24gPSBjcF9jYW5vbmlj YWxpemVfc3RyaW5nIChuYW1lKTsKIAkgIGlmIChjYW5vbiAhPSBOVUxMKQog CSAgICB7CisJICAgICAgeGZyZWUgKG5hbWUpOwogCSAgICAgIG5hbWUgPSBj YW5vbjsKLQkgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwg Y2Fub24pOwogCSAgICB9Ci0JICBlbHNlCi0JICAgIGNsZWFudXAgPSBtYWtl X2NsZWFudXAgKG51bGxfY2xlYW51cCwgTlVMTCk7CisJICBjbGVhbnVwID0g bWFrZV9jbGVhbnVwICh4ZnJlZSwgbmFtZSk7CiAKIAkgIGZvciAoaSA9IDA7 IGkgPCBpMTsgKytpKQogCSAgICB7CkluZGV4OiBwc3ltdGFiLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9w c3ltdGFiLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjIKZGlmZiAtdSAt cCAtcjEuMjIgcHN5bXRhYi5jCi0tLSBwc3ltdGFiLmMJMTAgSmFuIDIwMTEg MjA6Mzg6NTAgLTAwMDAJMS4yMgorKysgcHN5bXRhYi5jCTI0IEZlYiAyMDEx IDIwOjM2OjM1IC0wMDAwCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAi cmVhZGxpbmUvcmVhZGxpbmUuaCIKICNpbmNsdWRlICJnZGJfcmVnZXguaCIK ICNpbmNsdWRlICJkaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAibGFuZ3VhZ2Uu aCIKKyNpbmNsdWRlICJjcC1zdXBwb3J0LmgiCiAKICNpZm5kZWYgREVWX1RU WQogI2RlZmluZSBERVZfVFRZICIvZGV2L3R0eSIKQEAgLTQyNiw3ICs0Mjgs MjYgQEAgbG9va3VwX3N5bWJvbF9hdXhfcHN5bXRhYnMgKHN0cnVjdCBvYmpm aQogICBBTExfT0JKRklMRV9QU1lNVEFCUyAob2JqZmlsZSwgcHMpCiAgIHsK ICAgICBpZiAoIXBzLT5yZWFkaW4gJiYgbG9va3VwX3BhcnRpYWxfc3ltYm9s IChwcywgbmFtZSwgcHN5bXRhYl9pbmRleCwgZG9tYWluKSkKLSAgICAgIHJl dHVybiBQU1lNVEFCX1RPX1NZTVRBQiAocHMpOworICAgICAgeworCXN0cnVj dCBzeW1ib2wgKnN5bSA9IE5VTEw7CisJc3RydWN0IHN5bXRhYiAqc3RhYiA9 IFBTWU1UQUJfVE9fU1lNVEFCIChwcyk7CisKKwkvKiBTb21lIGNhdXRpb24g bXVzdCBiZSBvYnNlcnZlZCB3aXRoIG92ZXJsb2FkZWQgZnVuY3Rpb25zCisJ ICAgYW5kIG1ldGhvZHMsIHNpbmNlIHRoZSBwc3ltdGFiIHdpbGwgbm90IGNv bnRhaW4gYW55IG92ZXJsb2FkCisJICAgaW5mb3JtYXRpb24gKGJ1dCBOQU1F IG1pZ2h0IGNvbnRhaW4gaXQpLiAgKi8KKwlpZiAoc3RhYi0+cHJpbWFyeSkK KwkgIHsKKwkgICAgc3RydWN0IGJsb2NrdmVjdG9yICpidiA9IEJMT0NLVkVD VE9SIChzdGFiKTsKKwkgICAgc3RydWN0IGJsb2NrICpibG9jayA9IEJMT0NL VkVDVE9SX0JMT0NLIChidiwgYmxvY2tfaW5kZXgpOworCisJICAgIHN5bSA9 IGxvb2t1cF9ibG9ja19zeW1ib2wgKGJsb2NrLCBuYW1lLCBkb21haW4pOwor CSAgfQorCisJaWYgKHN5bSAmJiBzdHJjbXBfaXcgKFNZTUJPTF9TRUFSQ0hf TkFNRSAoc3ltKSwgbmFtZSkgPT0gMCkKKwkgIHJldHVybiBzdGFiOworCisJ LyogS2VlcCBsb29raW5nIHRocm91Z2ggb3RoZXIgcHN5bXRhYnMuICAqLwor ICAgICAgfQogICB9CiAKICAgcmV0dXJuIE5VTEw7CkBAIC01MTksNiArNTQw LDM5IEBAIHByZV9leHBhbmRfc3ltdGFic19tYXRjaGluZ19wc3ltdGFicyAo c3QKICAgLyogTm90aGluZy4gICovCiB9CiAKKy8qIFJldHVybnMgdGhlIG5h bWUgdXNlZCB0byBzZWFyY2ggcHN5bXRhYnMuICBVbmxpa2Ugc3ltdGFicywg cHN5bXRhYnMgZG8KKyAgIG5vdCBjb250YWluIGFueSBtZXRob2QvZnVuY3Rp b24gaW5zdGFuY2UgaW5mb3JtYXRpb24gKHNpbmNlIHRoaXMgd291bGQKKyAg IGZvcmNlIHJlYWRpbmcgdHlwZSBpbmZvcm1hdGlvbiB3aGlsZSByZWFkaW5n IHBzeW10YWJzKS4gIFRoZXJlZm9yZSwKKyAgIGlmIE5BTUUgY29udGFpbnMg b3ZlcmxvYWQgaW5mb3JtYXRpb24sIGl0IG11c3QgYmUgc3RyaXBwZWQgYmVm b3JlIHNlYXJjaGluZworICAgcHN5bXRhYnMuCisKKyAgIFRoZSBjYWxsZXIg aXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIHJldHVybiByZXN1bHQu ICAqLworCitzdGF0aWMgY2hhciAqCitwc3ltdGFiX3NlYXJjaF9uYW1lIChj b25zdCBjaGFyICpuYW1lKQoreworICBzd2l0Y2ggKGN1cnJlbnRfbGFuZ3Vh Z2UtPmxhX2xhbmd1YWdlKQorICAgIHsKKyAgICBjYXNlIGxhbmd1YWdlX2Nw bHVzOgorICAgIGNhc2UgbGFuZ3VhZ2VfamF2YToKKyAgICAgIHsKKyAgICAg ICBpZiAoc3RyY2hyIChuYW1lLCAnKCcpKQorICAgICAgICAgeworICAgICAg ICAgICBjaGFyICpyZXQgPSBjcF9yZW1vdmVfcGFyYW1zIChuYW1lKTsKKwor ICAgICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgIHJldHVybiByZXQ7 CisgICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRl ZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIHhzdHJk dXAgKG5hbWUpOworfQorCiAvKiBMb29rLCBpbiBwYXJ0aWFsX3N5bXRhYiBQ U1QsIGZvciBzeW1ib2wgd2hvc2UgbmF0dXJhbCBuYW1lIGlzIE5BTUUuCiAg ICBDaGVjayB0aGUgZ2xvYmFsIHN5bWJvbHMgaWYgR0xPQkFMLCB0aGUgc3Rh dGljIHN5bWJvbHMgaWYgbm90LiAgKi8KIApAQCAtNTMwLDExICs1ODQsMTYg QEAgbG9va3VwX3BhcnRpYWxfc3ltYm9sIChzdHJ1Y3QgcGFydGlhbF9zeQog ICBzdHJ1Y3QgcGFydGlhbF9zeW1ib2wgKip0b3AsICoqcmVhbF90b3AsICoq Ym90dG9tLCAqKmNlbnRlcjsKICAgaW50IGxlbmd0aCA9IChnbG9iYWwgPyBw c3QtPm5fZ2xvYmFsX3N5bXMgOiBwc3QtPm5fc3RhdGljX3N5bXMpOwogICBp bnQgZG9fbGluZWFyX3NlYXJjaCA9IDE7CisgIGNoYXIgKnNlYXJjaF9uYW1l OworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKIAogICBpZiAobGVuZ3Ro ID09IDApCiAgICAgewogICAgICAgcmV0dXJuIChOVUxMKTsKICAgICB9CisK KyAgc2VhcmNoX25hbWUgPSBwc3ltdGFiX3NlYXJjaF9uYW1lIChuYW1lKTsK KyAgY2xlYW51cCA9IG1ha2VfY2xlYW51cCAoeGZyZWUsIHNlYXJjaF9uYW1l KTsKICAgc3RhcnQgPSAoZ2xvYmFsID8KIAkgICBwc3QtPm9iamZpbGUtPmds b2JhbF9wc3ltYm9scy5saXN0ICsgcHN0LT5nbG9iYWxzX29mZnNldCA6CiAJ ICAgcHN0LT5vYmpmaWxlLT5zdGF0aWNfcHN5bWJvbHMubGlzdCArIHBzdC0+ c3RhdGljc19vZmZzZXQpOwpAQCAtNTYzLDcgKzYyMiw4IEBAIGxvb2t1cF9w YXJ0aWFsX3N5bWJvbCAoc3RydWN0IHBhcnRpYWxfc3kKIAkgICAgewogCSAg ICAgIGRvX2xpbmVhcl9zZWFyY2ggPSAxOwogCSAgICB9Ci0JICBpZiAoc3Ry Y21wX2l3X29yZGVyZWQgKFNZTUJPTF9TRUFSQ0hfTkFNRSAoKmNlbnRlciks IG5hbWUpID49IDApCisJICBpZiAoc3RyY21wX2l3X29yZGVyZWQgKFNZTUJP TF9TRUFSQ0hfTkFNRSAoKmNlbnRlciksCisJCQkJIHNlYXJjaF9uYW1lKSA+ PSAwKQogCSAgICB7CiAJICAgICAgdG9wID0gY2VudGVyOwogCSAgICB9CkBA IC01NzcsMTEgKzYzNywxNCBAQCBsb29rdXBfcGFydGlhbF9zeW1ib2wgKHN0 cnVjdCBwYXJ0aWFsX3N5CiAJCQlfKCJmYWlsZWQgaW50ZXJuYWwgY29uc2lz dGVuY3kgY2hlY2siKSk7CiAKICAgICAgIHdoaWxlICh0b3AgPD0gcmVhbF90 b3AKLQkgICAgICYmIFNZTUJPTF9NQVRDSEVTX1NFQVJDSF9OQU1FICgqdG9w LCBuYW1lKSkKKwkgICAgICYmIFNZTUJPTF9NQVRDSEVTX1NFQVJDSF9OQU1F ICgqdG9wLCBzZWFyY2hfbmFtZSkpCiAJewogCSAgaWYgKHN5bWJvbF9tYXRj aGVzX2RvbWFpbiAoU1lNQk9MX0xBTkdVQUdFICgqdG9wKSwKIAkJCQkgICAg IFNZTUJPTF9ET01BSU4gKCp0b3ApLCBkb21haW4pKQotCSAgICByZXR1cm4g KCp0b3ApOworCSAgICB7CisJICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXAp OworCSAgICAgIHJldHVybiAoKnRvcCk7CisJICAgIH0KIAkgIHRvcCsrOwog CX0KICAgICB9CkBAIC01OTUsMTEgKzY1OCwxNSBAQCBsb29rdXBfcGFydGlh bF9zeW1ib2wgKHN0cnVjdCBwYXJ0aWFsX3N5CiAJewogCSAgaWYgKHN5bWJv bF9tYXRjaGVzX2RvbWFpbiAoU1lNQk9MX0xBTkdVQUdFICgqcHN5bSksCiAJ CQkJICAgICBTWU1CT0xfRE9NQUlOICgqcHN5bSksIGRvbWFpbikKLQkgICAg ICAmJiBTWU1CT0xfTUFUQ0hFU19TRUFSQ0hfTkFNRSAoKnBzeW0sIG5hbWUp KQotCSAgICByZXR1cm4gKCpwc3ltKTsKKwkgICAgICAmJiBTWU1CT0xfTUFU Q0hFU19TRUFSQ0hfTkFNRSAoKnBzeW0sIHNlYXJjaF9uYW1lKSkKKwkgICAg eworCSAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwKTsKKwkgICAgICByZXR1 cm4gKCpwc3ltKTsKKwkgICAgfQogCX0KICAgICB9CiAKKyAgZG9fY2xlYW51 cHMgKGNsZWFudXApOwogICByZXR1cm4gKE5VTEwpOwogfQogCkluZGV4OiB0 ZXN0c3VpdGUvZ2RiLmNwL2NtcGQtbWluc3ltcy5jYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmNwL2NtcGQtbWlu c3ltcy5jYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIuY3AvY21wZC1taW5zeW1z LmNjCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor KysgdGVzdHN1aXRlL2dkYi5jcC9jbXBkLW1pbnN5bXMuY2MJMjQgRmViIDIw MTEgMjA6MzY6MzUgLTAwMDAKQEAgLTAsMCArMSwzNyBAQAorLyogVGhpcyB0 ZXN0IGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisK KyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCit0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIEdEQgoreworIHB1YmxpYzoKKyAgIHN0 YXRpYyBpbnQgc2ltcGxlICh2b2lkKSB7IHJldHVybiAwOyB9CisgICBzdGF0 aWMgaW50IGhhcmRlciAoVCBhKSB7IHJldHVybiAxOyB9CisgICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgWD4KKyAgIHN0YXRpYyBYIGV2ZW5faGFyZGVyIChUIGEp IHsgcmV0dXJuIHN0YXRpY19jYXN0PFg+IChhKTsgfQorICAgaW50IG9wZXJh dG9yID09IChHREIgY29uc3QmIG90aGVyKQorICAgeyByZXR1cm4gMTsgfQor fTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAg R0RCPGludD4gYSwgYjsKKyAgIGlmIChhID09IGIpCisgICAgIHJldHVybiBH REI8Y2hhcj46OmhhcmRlcignYScpICsgR0RCPGludD46OmhhcmRlcigzKQor CSsgR0RCPGNoYXI+OjpldmVuX2hhcmRlcjxpbnQ+ICgnYScpOworICAgcmV0 dXJuIEdEQjxpbnQ+OjpzaW1wbGUgKCk7Cit9CkluZGV4OiB0ZXN0c3VpdGUv Z2RiLmNwL2NtcGQtbWluc3ltcy5leHAKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5jcC9jbXBkLW1pbnN5bXMuZXhw CmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5jcC9jbXBkLW1pbnN5bXMuZXhwCi0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVz dHN1aXRlL2dkYi5jcC9jbXBkLW1pbnN5bXMuZXhwCTI0IEZlYiAyMDExIDIw OjM2OjM1IC0wMDAwCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29weXJpZ2h0IDIw MTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIENvbnRy aWJ1dGVkIGJ5IFJlZCBIYXQsIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBLZWl0 aCBTZWl0ei4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGlz IHBhcnQgb2YgdGhlIGdkYiB0ZXN0c3VpdGUuCisKK2lmIHtbc2tpcF9jcGx1 c190ZXN0c119IHsgY29udGludWUgfQorCisjIFRlc3QgZm9yIGMrKy8xMjI3 Mworc2V0IHRlc3RmaWxlICJjbXBkLW1pbnN5bXMiCisjIERvIE5PVCBjb21w aWxlIHdpdGggZGVidWcgZmxhZy4KK2lmIHtbcHJlcGFyZV9mb3JfdGVzdGlu ZyAkdGVzdGZpbGUgJHRlc3RmaWxlICR0ZXN0ZmlsZS5jYyB7YysrfV19IHsK KyAgICByZXR1cm4gLTEKK30KKworZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQg bGFuZ3VhZ2UgYysrIgorCisjIEEgbGlzdCBvZiBtaW5pbWFsIHN5bWJvbCBu YW1lcyB0byBjaGVjay4KKyMgTm90ZSB0aGF0IEdEQjxjaGFyPjo6ZXZlbl9o YXJkZXI8aW50PihjaGFyKSBpcyBxdW90ZWQgYW5kIGluY2x1ZGVzCisjIHRo ZSByZXR1cm4gdHlwZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhp cyBpcyB0aGUgZGVtYW5nbGVkIG5hbWUKKyMgb2YgdGhlIG1pbmltYWwgc3lt Ym9sLgorc2V0IG1pbl9zeW1zIFtsaXN0IFwKKwkJICAiR0RCPGludD46Om9w ZXJhdG9yID09IiBcCisJCSAgIkdEQjxpbnQ+OjpvcGVyYXRvcj09KEdEQjxp bnQ+IGNvbnN0JikiIFwKKwkJICAiR0RCPGNoYXI+OjpoYXJkZXIoY2hhciki IFwKKwkJICAiR0RCPGludD46OmhhcmRlcihpbnQpIiBcCisJCSAgeyJpbnQg R0RCPGNoYXI+OjpldmVuX2hhcmRlcjxpbnQ+KGNoYXIpIn0gXAorCQkgICJH REI8aW50Pjo6c2ltcGxlKCkiXQorCitmb3JlYWNoIHN5bSAkbWluX3N5bXMg eworICAgIHNldCB0c3QgInNldHRpbmcgYnJlYWtwb2ludCBhdCAkc3ltIgor ICAgIGlmIHtbZ2RiX2JyZWFrcG9pbnQgJHN5bV19IHsKKwlwYXNzICR0c3QK KyAgICB9Cit9CisKK2dkYl9leGl0CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmNw L292c3JjaC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog dGVzdHN1aXRlL2dkYi5jcC9vdnNyY2guZXhwCmRpZmYgLU4gdGVzdHN1aXRl L2dkYi5jcC9vdnNyY2guZXhwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw MDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5jcC9vdnNyY2guZXhw CTI0IEZlYiAyMDExIDIwOjM2OjM1IC0wMDAwCkBAIC0wLDAgKzEsOTYgQEAK KyMgQ29weXJpZ2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisjCisjIENvbnRyaWJ1dGVkIGJ5IFJlZCBIYXQsIG9yaWdpbmFsbHkg d3JpdHRlbiBieSBLZWl0aCBTZWl0ei4KKyMKKyMgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK KyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGdkYiB0ZXN0c3VpdGUuCisK K3Byb2MgdGVzdF9jbGFzcyB7Y2xhc3N9IHsKKworICAgICMgQW4gYXJyYXkg aG9sZGluZyB0aGUgb3ZlcmxvYWQgdHlwZXMgZm9yIHRoZSBtZXRob2RzIEE6 Om91dGVyOjpmb28KKyAgICAjIGFuZCBBOjpCOjppbm5lcjo6Zm9vLiAgVGhl IGZpcnN0IGVsZW1lbnQgaXMgdGhlIG92ZXJsb2FkZWQgbWV0aG9kCisgICAg IyBwYXJhbWV0ZXIuICBUaGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIGV4cGVj dGVkIHNvdXJjZSBmaWxlIG51bWJlciwKKyAgICAjIGUuZy4gIm92c3JjaD8u Y2MiLgorICAgIGFycmF5IHNldCB0ZXN0cyB7CisJImNoYXIqIiAgNAorCSJp bnQiICAgIDMKKwkidm9pZCIgICAyCisgICAgfQorCisgICAgIyBUZXN0IGVh Y2ggb3ZlcmxvYWQgaW5zdGFuY2UgdHdpY2U6IG9uY2UgcXVvdGVkLCBvbmNl IHVucXVvdGVkCisgICAgc2V0IGNvbmRpdGlvbmFsMSAiaWYgKGEgPT0gMyki CisgICAgc2V0IGNvbmRpdGlvbmFsMiAiaWYgKEE6Om91dGVyOjpmdW5jICgp KSIKKyAgICBmb3JlYWNoIG92bGQgW2FycmF5IG5hbWVzIHRlc3RzXSB7CisJ c2V0IG1ldGhvZCAiJHtjbGFzc306OmZvbyAoJG92bGQpIGNvbnN0IgorCXNl dCByZXN1bHQgIkJyZWFrcG9pbnQgKFxbMC05XF0pLipmaWxlIC4qL292c3Jj aCR0ZXN0cygkb3ZsZCkuKiIKKwlnZGJfdGVzdCAiYnJlYWsgJG1ldGhvZCIg JHJlc3VsdAorCWdkYl90ZXN0ICJicmVhayAnJG1ldGhvZCciICRyZXN1bHQK KworCSMgQWxzbyB0ZXN0IHdpdGggYSBjb25kaXRpb25hbCB0YWNrZWQgb250 byB0aGUgZW5kLgorCWlmIHtbc3RyaW5nIGNvbXBhcmUgJG92bGQgInZvaWQi XSAhPSAwfSB7CisJICAgIGdkYl90ZXN0ICJicmVhayAkbWV0aG9kICRjb25k aXRpb25hbDEiICRyZXN1bHQKKwkgICAgZ2RiX3Rlc3QgImJyZWFrICckbWV0 aG9kJyAkY29uZGl0aW9uYWwxIiAkcmVzdWx0CisJICAgIGdkYl90ZXN0ICJi cmVhayAkbWV0aG9kICRjb25kaXRpb25hbDIiICRyZXN1bHQKKwkgICAgZ2Ri X3Rlc3QgImJyZWFrICckbWV0aG9kJyAkY29uZGl0aW9uYWwyIiAkcmVzdWx0 CisJfQorICAgIH0KK30KKworaWYgeyBbc2tpcF9jcGx1c190ZXN0c10gfSB7 IGNvbnRpbnVlIH0KKworIyBUZXN0IGZvciBjKysvMTE3MzQKK3NldCB0ZXN0 ZmlsZSAib3ZzcmNoIgorc2V0IGJpbmZpbGUgW2ZpbGUgam9pbiAkb2JqZGly ICRzdWJkaXIgJHRlc3RmaWxlXQorCitzZXQgc3JjZmlsZXMge30KK2ZvciB7 c2V0IGkgMX0geyRpIDwgNX0ge2luY3IgaX0geworICAgIGxhcHBlbmQgc3Jj ZmlsZXMgJHRlc3RmaWxlJGkuY2MKK30KKworaWYge1twcmVwYXJlX2Zvcl90 ZXN0aW5nICR0ZXN0ZmlsZSAkdGVzdGZpbGUgJHNyY2ZpbGVzIHtjKysgZGVi dWd9XX0geworICAgIHJldHVybiAtMQorfQorCitpZiB7IVtydW50b19tYWlu XX0geworICAgIHBlcnJvciAiY291bGRuJ3QgcnVuIHRvIGJyZWFrcG9pbnQi CisgICAgY29udGludWUKK30KKworIyBCcmVhayBpbiBBOjpzdG9wX2hlcmUg YW5kIHJ1biB0ZXN0cy4KK2lmIHtbZ2RiX2JyZWFrcG9pbnQgInN0b3BfaGVy ZSJdfSB7CisgICAgcGFzcyAiYnJlYWsgc3RvcF9oZXJlIgorfQorCitpZiB7 W2dkYl9icmVha3BvaW50ICInc3RvcF9oZXJlJyJdfSB7CisgICAgcGFzcyAi YnJlYWsgJ3N0b3BfaGVyZSciCit9CisKK2dkYl9jb250aW51ZV90b19icmVh a3BvaW50ICJzdG9wX2hlcmUiCit0ZXN0X2NsYXNzIG91dGVyCisKKyMgQnJl YWsgaW4gQTo6Qjo6c3RvcF9oZXJlX3RvbyBhbmQgcnVuIHRlc3RzLgoraWYg e1tnZGJfYnJlYWtwb2ludCAiQjo6c3RvcF9oZXJlX3RvbyJdfSB7CisgICAg cGFzcyAiYnJlYWsgQjo6c3RvcF9oZXJlX3RvbyIKK30KKworaWYge1tnZGJf YnJlYWtwb2ludCAiJ0I6OnN0b3BfaGVyZV90b28nIl19IHsKKyAgICBwYXNz ICJicmVhayAnQjo6c3RvcF9oZXJlX3RvbyciCit9CisKK2dkYl9jb250aW51 ZV90b19icmVha3BvaW50ICJzdG9wX2hlcmVfdG9vIgordGVzdF9jbGFzcyBp bm5lcgorCitnZGJfZXhpdAorcmV0dXJuIDAKSW5kZXg6IHRlc3RzdWl0ZS9n ZGIuY3Avb3ZzcmNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogdGVzdHN1aXRlL2dkYi5jcC9vdnNyY2guaApkaWZmIC1OIHRlc3RzdWl0 ZS9nZGIuY3Avb3ZzcmNoLmgKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAw OjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2RiLmNwL292c3JjaC5oCTI0 IEZlYiAyMDExIDIwOjM2OjM1IC0wMDAwCkBAIC0wLDAgKzEsMzkgQEAKKy8q IFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdn ZXIuCisKKyAgIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitu YW1lc3BhY2UgQQoreworICBjbGFzcyBvdXRlcgorICB7CisgIHB1YmxpYzoK KyAgICB2b2lkIGZvbyAodm9pZCkgY29uc3Q7CisgICAgdm9pZCBmb28gKGlu dCkgY29uc3Q7CisgICAgdm9pZCBmb28gKGNoYXIgKikgY29uc3Q7CisgICAg Ym9vbCBmdW5jICh2b2lkKSB7IHJldHVybiB0cnVlOyB9CisgIH07CisKKyAg bmFtZXNwYWNlIEIKKyAgeworICAgIGNsYXNzIGlubmVyCisgICAgeworICAg IHB1YmxpYzoKKyAgICAgIHZvaWQgZm9vICh2b2lkKSBjb25zdDsKKyAgICAg IHZvaWQgZm9vIChpbnQpIGNvbnN0OworICAgICAgdm9pZCBmb28gKGNoYXIg KikgY29uc3Q7CisgICAgfTsKKyAgfQorfQpJbmRleDogdGVzdHN1aXRlL2dk Yi5jcC9vdnNyY2gxLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IHRlc3RzdWl0ZS9nZGIuY3Avb3ZzcmNoMS5jYwpkaWZmIC1OIHRlc3Rz dWl0ZS9nZGIuY3Avb3ZzcmNoMS5jYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5 NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuY3Avb3ZzcmNo MS5jYwkyNCBGZWIgMjAxMSAyMDozNjozNSAtMDAwMApAQCAtMCwwICsxLDQx IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05V IGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAxMSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworI2luY2x1ZGUgIm92c3JjaC5oIgorCituYW1lc3BhY2UgQQorewor ICB2b2lkIHN0b3BfaGVyZSAodm9pZCkgeyB9CisKKyAgbmFtZXNwYWNlIEIK KyAgeworICAgIHZvaWQgc3RvcF9oZXJlX3RvbyAodm9pZCkgeyB9CisgIH0K K30KKwordXNpbmcgbmFtZXNwYWNlIEE7CisKK2ludAorbWFpbiAoKQorewor ICBvdXRlciAqcCA9IG5ldyBvdXRlcjsKKyAgc3RvcF9oZXJlICgpOworICBC OjpzdG9wX2hlcmVfdG9vICgpOworICBwLT5mb28gKCk7CisgIHJldHVybiAw OworfQorCkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmNwL292c3JjaDIuY2MKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5j cC9vdnNyY2gyLmNjCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5jcC9vdnNyY2gy LmNjCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor KysgdGVzdHN1aXRlL2dkYi5jcC9vdnNyY2gyLmNjCTI0IEZlYiAyMDExIDIw OjM2OjM1IC0wMDAwCkBAIC0wLDAgKzEsMjggQEAKKy8qIFRoaXMgdGVzdGNh c2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENv cHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAib3Zz cmNoLmgiCisKK3ZvaWQKK0E6Om91dGVyOjpmb28gKHZvaWQpIGNvbnN0Cit7 Cit9CisKK3ZvaWQKK0E6OkI6OmlubmVyOjpmb28gKHZvaWQpIGNvbnN0Cit7 Cit9CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmNwL292c3JjaDMuY2MKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5jcC9v dnNyY2gzLmNjCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5jcC9vdnNyY2gzLmNj Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg dGVzdHN1aXRlL2dkYi5jcC9vdnNyY2gzLmNjCTI0IEZlYiAyMDExIDIwOjM2 OjM1IC0wMDAwCkBAIC0wLDAgKzEsMjggQEAKKy8qIFRoaXMgdGVzdGNhc2Ug aXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisKKyAgIENvcHly aWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxv bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAib3ZzcmNo LmgiCisKK3ZvaWQKK0E6Om91dGVyOjpmb28gKGludCBhKSBjb25zdAorewor fQorCit2b2lkCitBOjpCOjppbm5lcjo6Zm9vIChpbnQgYSkgY29uc3QKK3sK K30KSW5kZXg6IHRlc3RzdWl0ZS9nZGIuY3Avb3ZzcmNoNC5jYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLmNwL292 c3JjaDQuY2MKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmNwL292c3JjaDQuY2MK LS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0 ZXN0c3VpdGUvZ2RiLmNwL292c3JjaDQuY2MJMjQgRmViIDIwMTEgMjA6MzY6 MzUgLTAwMDAKQEAgLTAsMCArMSwyOCBAQAorLyogVGhpcyB0ZXN0Y2FzZSBp cyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJp Z2h0IDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJvdnNyY2gu aCIKKwordm9pZAorQTo6b3V0ZXI6OmZvbyAoY2hhciAqYSkgY29uc3QKK3sK K30KKwordm9pZAorQTo6Qjo6aW5uZXI6OmZvbyAoY2hhciAqYSkgY29uc3QK K3sKK30K --------------030903010600050903010909--