From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 962 invoked by alias); 11 Jan 2014 20:18:09 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 951 invoked by uid 89); 11 Jan 2014 20:18:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qa0-f51.google.com Received: from mail-qa0-f51.google.com (HELO mail-qa0-f51.google.com) (209.85.216.51) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Sat, 11 Jan 2014 20:18:05 +0000 Received: by mail-qa0-f51.google.com with SMTP id f11so966259qae.38 for ; Sat, 11 Jan 2014 12:18:03 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.224.32.133 with SMTP id c5mr21837049qad.54.1389471483257; Sat, 11 Jan 2014 12:18:03 -0800 (PST) Received: by 10.229.195.196 with HTTP; Sat, 11 Jan 2014 12:18:03 -0800 (PST) In-Reply-To: <87mwj34ikd.fsf@fleche.redhat.com> References: <87zjn47ref.fsf@fleche.redhat.com> <87mwj34ikd.fsf@fleche.redhat.com> Date: Sat, 11 Jan 2014 20:18:00 -0000 Message-ID: Subject: Re: [PATCH 5/5] Fix for D demangling in GDB From: Iain Buclaw To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=047d7b6776002f7eab04efb78a3d X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00308.txt.bz2 --047d7b6776002f7eab04efb78a3d Content-Type: text/plain; charset=ISO-8859-1 Content-length: 912 On 10 January 2014 21:45, Tom Tromey wrote: > > This should mention the Makefile.in change, like: > > * Makefile.in (SFILES): Add d-support.c. > (COMMON_OBS): Add d-support.o. > > ... and the d-lang.h change, even though it is trivial. > > Otherwise the patch is fine. > > Tom And patch to move functions to d-support.c. Updated from previous patch changes, and ChangeLog entries added. 2014-01-11 Iain Buclaw * Makefile.in (SFILES): Add d-support.c. (COMMON_OBS): Add d-support.o. * d-lang.h (d_parse_symbol): Add comment, now defined in d-support.c. * d-lang.c (parse_call_convention) (parse_attributes, parse_function_types) (parse_function_args, parse_type, parse_identifier) (call_convention_p, d_parse_symbol): Move functions to ... * d-support.c: ... New file. --- --047d7b6776002f7eab04efb78a3d Content-Type: text/x-diff; charset=US-ASCII; name="dlang-p5b.patch" Content-Disposition: attachment; filename="dlang-p5b.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hqbb8ydf0 Content-length: 45405 IGdkYi9DaGFuZ2VMb2cgICB8ICAxMSArCiBnZGIvTWFrZWZpbGUuaW4gfCAg IDMgKy0KIGdkYi9kLWxhbmcuYyAgICB8IDU5NyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2RiL2Qt bGFuZy5oICAgIHwgICAyICsKIGdkYi9kLXN1cHBvcnQuYyB8IDYyMSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA2MzYgaW5zZXJ0aW9ucygrKSwg NTk4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5p biBiL2dkYi9NYWtlZmlsZS5pbgppbmRleCA4MjRiMjZiLi5mNTU3YmZlIDEw MDY0NAotLS0gYS9nZGIvTWFrZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxl LmluCkBAIC03MjcsNyArNzI3LDcgQEAgU0ZJTEVTID0gYWRhLWV4cC55IGFk YS1sYW5nLmMgYWRhLXR5cGVwcmludC5jIGFkYS12YWxwcmludC5jIGFkYS10 YXNrcy5jIFwKIAljaGFyc2V0LmMgY2xlYW51cHMuYyBjbGktb3V0LmMgY29m ZnJlYWQuYyBjb2ZmLXBlLXJlYWQuYyBcCiAJY29tcGxhaW50cy5jIGNvbXBs ZXRlci5jIGNvbnRpbnVhdGlvbnMuYyBjb3JlZmlsZS5jIGNvcmVsb3cuYyBc CiAJY3AtYWJpLmMgY3Atc3VwcG9ydC5jIGNwLW5hbWVzcGFjZS5jIGNwLXZh bHByaW50LmMgXAotCWQtbGFuZy5jIGQtdmFscHJpbnQuYyBcCisJZC1sYW5n LmMgZC1zdXBwb3J0LmMgZC12YWxwcmludC5jIFwKIAljcC1uYW1lLXBhcnNl ci55IFwKIAlkYnhyZWFkLmMgZGVtYW5nbGUuYyBkaWN0aW9uYXJ5LmMgZGlz YXNtLmMgZG91Ymxlc3QuYyBkdW1teS1mcmFtZS5jIFwKIAlkd2FyZjJleHBy LmMgZHdhcmYybG9jLmMgZHdhcmYycmVhZC5jIGR3YXJmMi1mcmFtZS5jIFwK QEAgLTk0Nyw2ICs5NDcsNyBAQCBDT01NT05fT0JTID0gJChERVBGSUxFUykg JChDT05GSUdfT0JTKSAkKFlZT0JKKSBcCiAJaW5saW5lLWZyYW1lLm8gXAog CWdudS12Mi1hYmkubyBnbnUtdjMtYWJpLm8gY3AtYWJpLm8gY3Atc3VwcG9y dC5vIFwKIAljcC1uYW1lc3BhY2UubyBcCisJZC1zdXBwb3J0Lm8gXAogCXJl Z2dyb3Vwcy5vIHJlZ3NldC5vIFwKIAl0cmFkLWZyYW1lLm8gXAogCXRyYW1w LWZyYW1lLm8gXApkaWZmIC0tZ2l0IGEvZ2RiL2QtbGFuZy5jIGIvZ2RiL2Qt bGFuZy5jCmluZGV4IDljNWVlYWQuLmI3MjRiOTYgMTAwNjQ0Ci0tLSBhL2dk Yi9kLWxhbmcuYworKysgYi9nZGIvZC1sYW5nLmMKQEAgLTI2LDExICsyNiw2 IEBACiAjaW5jbHVkZSAicGFyc2VyLWRlZnMuaCIKICNpbmNsdWRlICJnZGJf b2JzdGFjay5oIgogCi0jaW5jbHVkZSAic2FmZS1jdHlwZS5oIgotCi1zdGF0 aWMgY29uc3QgY2hhciAqcGFyc2VfZnVuY3Rpb25fYXJncyAoc3RydWN0IG9i c3RhY2sgKiwgY29uc3QgY2hhciAqKTsKLXN0YXRpYyBjb25zdCBjaGFyICpw YXJzZV90eXBlIChzdHJ1Y3Qgb2JzdGFjayAqLCBjb25zdCBjaGFyICopOwot CiAvKiBUaGUgbmFtZSBvZiB0aGUgc3ltYm9sIHRvIHVzZSB0byBnZXQgdGhl IG5hbWUgb2YgdGhlIG1haW4gc3VicHJvZ3JhbS4gICovCiBzdGF0aWMgY29u c3QgY2hhciBEX01BSU5bXSA9ICJEIG1haW4iOwogCkBAIC01Miw1OTggKzQ3 LDYgQEAgZF9tYWluX25hbWUgKHZvaWQpCiAgIHJldHVybiBOVUxMOwogfQog Ci0vKiBEZW1hbmdsZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZyb20gTUFO R0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVNUEJVRi4KLSAgIFJldHVybiB0aGUg cmVtYWluaW5nIHN0cmluZyBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZmFpbHVy ZS4gICovCi0KLXN0YXRpYyBjb25zdCBjaGFyICoKLXBhcnNlX2NhbGxfY29u dmVudGlvbiAoc3RydWN0IG9ic3RhY2sgKnRlbXBidWYsIGNvbnN0IGNoYXIg Km1hbmdsZSkKLXsKLSAgaWYgKChtYW5nbGUgPT0gTlVMTCkgfHwgKCptYW5n bGUgPT0gJ1wwJykpCi0gICAgcmV0dXJuIG1hbmdsZTsKLQotICBzd2l0Y2gg KCptYW5nbGUpCi0gICAgewotICAgIGNhc2UgJ0YnOiAvKiAoRCkgKi8KLSAg ICAgIG1hbmdsZSsrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnVSc6IC8q IChDKSAqLwotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiZXh0ZXJuKEMpICIpOwotICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAnVyc6IC8qIChXaW5kb3dzKSAqLwotICAgICAgbWFuZ2xlKys7 Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZXh0ZXJuKFdp bmRvd3MpICIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnVic6IC8qIChQ YXNjYWwpICovCi0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICJleHRlcm4oUGFzY2FsKSAiKTsKLSAgICAgIGJy ZWFrOwotICAgIGNhc2UgJ1InOiAvKiAoQysrKSAqLwotICAgICAgbWFuZ2xl Kys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZXh0ZXJu KEMrKykgIik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg cmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gIHJldHVybiBtYW5nbGU7Ci19Ci0K LS8qIERlbWFuZ2xlIHRoZSBEIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgZnJvbSBN QU5HTEUgYW5kIGFwcGVuZCBpdCB0byBURU1QQlVGLgotICAgUmV0dXJuIHRo ZSByZW1haW5pbmcgc3RyaW5nIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBmYWls dXJlLiAgKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotcGFyc2VfYXR0cmli dXRlcyAoc3RydWN0IG9ic3RhY2sgKnRlbXBidWYsIGNvbnN0IGNoYXIgKm1h bmdsZSkKLXsKLSAgaWYgKChtYW5nbGUgPT0gTlVMTCkgfHwgKCptYW5nbGUg PT0gJ1wwJykpCi0gICAgcmV0dXJuIG1hbmdsZTsKLQotICB3aGlsZSAoKm1h bmdsZSA9PSAnTicpCi0gICAgewotICAgICAgbWFuZ2xlKys7Ci0gICAgICBz d2l0Y2ggKCptYW5nbGUpCi0JewotCWNhc2UgJ2EnOiAvKiBwdXJlICovCi0J ICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJw dXJlICIpOwotCSAgY29udGludWU7Ci0JY2FzZSAnYic6IC8qIG5vdGhyb3cg Ki8KLQkgIG1hbmdsZSsrOwotCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1 ZiwgIm5vdGhyb3cgIik7Ci0JICBjb250aW51ZTsKLQljYXNlICdjJzogLyog cmVmICovCi0JICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICJyZWYgIik7Ci0JICBjb250aW51ZTsKLQljYXNlICdkJzogLyog QHByb3BlcnR5ICovCi0JICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJAcHJvcGVydHkgIik7Ci0JICBjb250aW51ZTsKLQlj YXNlICdlJzogLyogQHRydXN0ZWQgKi8KLQkgIG1hbmdsZSsrOwotCSAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIkB0cnVzdGVkICIpOwotCSAgY29u dGludWU7Ci0JY2FzZSAnZic6IC8qIEBzYWZlICovCi0JICBtYW5nbGUrKzsK LQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJAc2FmZSAiKTsKLQkg IGNvbnRpbnVlOwotCWNhc2UgJ2cnOgotCWNhc2UgJ2gnOgotCSAgLyogaW5v dXQgcGFyYW1ldGVyIGlzIHJlcHJlc2VudGVkIGFzICdOZycuCi0JICAgICB2 ZWN0b3IgcGFyYW1ldGVyIGlzIHJlcHJlc2VudGVkIGFzICdOaCcuCi0JICAg ICBJZiB3ZSBzZWUgdGhpcywgdGhlbiB3ZSBrbm93IHdlJ3JlIHJlYWxseSBp biB0aGUKLQkgICAgIHBhcmFtZXRlciBsaXN0LiAgUmV3aW5kIGFuZCBicmVh ay4gICovCi0JICBtYW5nbGUtLTsKLQl9Ci0gICAgICBicmVhazsKLSAgICB9 Ci0gIHJldHVybiBtYW5nbGU7Ci19Ci0KLS8qIERlbWFuZ2xlIHRoZSBmdW5j dGlvbiB0eXBlIGZyb20gTUFOR0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVNUEJV Ri4KLSAgIFJldHVybiB0aGUgcmVtYWluaW5nIHN0cmluZyBvbiBzdWNjZXNz IG9yIE5VTEwgb24gZmFpbHVyZS4gICovCi0KLXN0YXRpYyBjb25zdCBjaGFy ICoKLXBhcnNlX2Z1bmN0aW9uX3R5cGUgKHN0cnVjdCBvYnN0YWNrICp0ZW1w YnVmLCBjb25zdCBjaGFyICptYW5nbGUpCi17Ci0gIHN0cnVjdCBvYnN0YWNr IG9iYXR0ciwgb2JhcmdzLCBvYnR5cGU7Ci0gIGNoYXIgKmF0dHIsICphcmdz LCAqdHlwZTsKLSAgc2l6ZV90IHN6YXR0ciwgc3phcmdzLCBzenR5cGU7Ci0K LSAgaWYgKChtYW5nbGUgPT0gTlVMTCkgfHwgKCptYW5nbGUgPT0gJ1wwJykp Ci0gICAgcmV0dXJuIG1hbmdsZTsKLQotICAvKiBUaGUgb3JkZXIgb2YgdGhl IG1hbmdsZWQgc3RyaW5nIGlzOgotICAgICBUeXBlRnVuY3Rpb24gOjoKLSAg ICAgICAgQ2FsbENvbnZlbnRpb24gRnVuY0F0dHJzIEFyZ3VtZW50cyBBcmdD bG9zZSBUeXBlCi0KLSAgICAgVGhlIGRlbWFuZ2xlZCBzdHJpbmcgaXMgcmUt b3JkZXJlZCBhczoKLSAgICAgICAgQ2FsbENvbnZlbnRpb24gVHlwZSBBcmd1 bWVudHMgRnVuY0F0dHJzCi0gICAqLwotICBvYnN0YWNrX2luaXQgKCZvYmF0 dHIpOwotICBvYnN0YWNrX2luaXQgKCZvYmFyZ3MpOwotICBvYnN0YWNrX2lu aXQgKCZvYnR5cGUpOwotCi0gIC8qIEZ1bmN0aW9uIGNhbGwgY29udmVudGlv bi4gICovCi0gIG1hbmdsZSA9IHBhcnNlX2NhbGxfY29udmVudGlvbiAodGVt cGJ1ZiwgbWFuZ2xlKTsKLQotICAvKiBGdW5jdGlvbiBhdHRyaWJ1dGVzLiAg Ki8KLSAgbWFuZ2xlID0gcGFyc2VfYXR0cmlidXRlcyAoJm9iYXR0ciwgbWFu Z2xlKTsKLSAgc3phdHRyID0gb2JzdGFja19vYmplY3Rfc2l6ZSAoJm9iYXR0 cik7Ci0gIGF0dHIgPSBvYnN0YWNrX2ZpbmlzaCAoJm9iYXR0cik7Ci0KLSAg LyogRnVuY3Rpb24gYXJndW1lbnRzLiAgKi8KLSAgbWFuZ2xlID0gcGFyc2Vf ZnVuY3Rpb25fYXJncyAoJm9iYXJncywgbWFuZ2xlKTsKLSAgc3phcmdzID0g b2JzdGFja19vYmplY3Rfc2l6ZSAoJm9iYXJncyk7Ci0gIGFyZ3MgPSBvYnN0 YWNrX2ZpbmlzaCAoJm9iYXJncyk7Ci0KLSAgLyogRnVuY3Rpb24gcmV0dXJu IHR5cGUuICAqLwotICBtYW5nbGUgPSBwYXJzZV90eXBlICgmb2J0eXBlLCBt YW5nbGUpOwotICBzenR5cGUgPSBvYnN0YWNrX29iamVjdF9zaXplICgmb2J0 eXBlKTsKLSAgdHlwZSA9IG9ic3RhY2tfZmluaXNoICgmb2J0eXBlKTsKLQot ICAvKiBBcHBlbmQgdG8gYnVmZmVyIGluIG9yZGVyLiAqLwotICBvYnN0YWNr X2dyb3cgKHRlbXBidWYsIHR5cGUsIHN6dHlwZSk7Ci0gIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICIoIik7Ci0gIG9ic3RhY2tfZ3JvdyAodGVtcGJ1 ZiwgYXJncywgc3phcmdzKTsKLSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1 ZiwgIikgIik7Ci0gIG9ic3RhY2tfZ3JvdyAodGVtcGJ1ZiwgYXR0ciwgc3ph dHRyKTsKLQotICBvYnN0YWNrX2ZyZWUgKCZvYmF0dHIsIE5VTEwpOwotICBv YnN0YWNrX2ZyZWUgKCZvYmFyZ3MsIE5VTEwpOwotICBvYnN0YWNrX2ZyZWUg KCZvYnR5cGUsIE5VTEwpOwotICByZXR1cm4gbWFuZ2xlOwotfQotCi0vKiBE ZW1hbmdsZSB0aGUgYXJndW1lbnQgbGlzdCBmcm9tIE1BTkdMRSBhbmQgYXBw ZW5kIGl0IHRvIFRFTVBCVUYuCi0gICBSZXR1cm4gdGhlIHJlbWFpbmluZyBz dHJpbmcgb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuICAqLwotCi1z dGF0aWMgY29uc3QgY2hhciAqCi1wYXJzZV9mdW5jdGlvbl9hcmdzIChzdHJ1 Y3Qgb2JzdGFjayAqdGVtcGJ1ZiwgY29uc3QgY2hhciAqbWFuZ2xlKQotewot ICBzaXplX3QgbiA9IDA7Ci0KLSAgd2hpbGUgKChtYW5nbGUgIT0gTlVMTCkg JiYgKCptYW5nbGUgIT0gJ1wwJykpCi0gICAgewotICAgICAgc3dpdGNoICgq bWFuZ2xlKQotCXsKLQljYXNlICdYJzogLyogKHZhcmlhZGljIFQgdC4uLikg c3R5bGUuICAqLwotCSAgbWFuZ2xlKys7Ci0JICBvYnN0YWNrX2dyb3dfc3Ry ICh0ZW1wYnVmLCAiLi4uIik7Ci0JICByZXR1cm4gbWFuZ2xlOwotCWNhc2Ug J1knOiAvKiAodmFyaWFkaWMgVCB0LCAuLi4pIHN0eWxlLiAgKi8KLQkgIG1h bmdsZSsrOwotCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIiwgLi4u Iik7Ci0JICByZXR1cm4gbWFuZ2xlOwotCWNhc2UgJ1onOiAvKiBOb3JtYWwg ZnVuY3Rpb24uICAqLwotCSAgbWFuZ2xlKys7Ci0JICByZXR1cm4gbWFuZ2xl OwotCX0KLQotICAgICAgaWYgKG4rKykKLQlvYnN0YWNrX2dyb3dfc3RyICh0 ZW1wYnVmLCAiLCAiKTsKLQotICAgICAgaWYgKCptYW5nbGUgPT0gJ00nKSAv KiBzY29wZShUKSAqLwotCXsKLQkgIG1hbmdsZSsrOwotCSAgb2JzdGFja19n cm93X3N0ciAodGVtcGJ1ZiwgInNjb3BlICIpOwotCX0KLQotICAgICAgc3dp dGNoICgqbWFuZ2xlKQotCXsKLQljYXNlICdKJzogLyogb3V0KFQpICovCi0J ICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJv dXQgIik7Ci0JICBicmVhazsKLQljYXNlICdLJzogLyogcmVmKFQpICovCi0J ICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJy ZWYgIik7Ci0JICBicmVhazsKLQljYXNlICdMJzogLyogbGF6eShUKSAqLwot CSAgbWFuZ2xlKys7Ci0JICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAi bGF6eSAiKTsKLQkgIGJyZWFrOwotCX0KLSAgICAgIG1hbmdsZSA9IHBhcnNl X3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7Ci0gICAgfQotICByZXR1cm4gbWFu Z2xlOwotfQotCi0vKiBEZW1hbmdsZSB0aGUgdHlwZSBmcm9tIE1BTkdMRSBh bmQgYXBwZW5kIGl0IHRvIFRFTVBCVUYuCi0gICBSZXR1cm4gdGhlIHJlbWFp bmluZyBzdHJpbmcgb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuICAq LwotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1wYXJzZV90eXBlIChzdHJ1Y3Qg b2JzdGFjayAqdGVtcGJ1ZiwgY29uc3QgY2hhciAqbWFuZ2xlKQotewotICBp ZiAoKG1hbmdsZSA9PSBOVUxMKSB8fCAoKm1hbmdsZSA9PSAnXDAnKSkKLSAg ICByZXR1cm4gbWFuZ2xlOwotCi0gIHN3aXRjaCAoKm1hbmdsZSkKLSAgICB7 Ci0gICAgY2FzZSAnTyc6IC8qIHNoYXJlZChUKSAqLwotICAgICAgbWFuZ2xl Kys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAic2hhcmVk KCIpOwotICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFu Z2xlKTsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIpIik7 Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ3gnOiAvKiBjb25z dChUKSAqLwotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiY29uc3QoIik7Ci0gICAgICBtYW5nbGUgPSBwYXJz ZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwotICAgICAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgIikiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0g ICAgY2FzZSAneSc6IC8qIGltbXV0YWJsZShUKSAqLwotICAgICAgbWFuZ2xl Kys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiaW1tdXRh YmxlKCIpOwotICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1Ziwg bWFuZ2xlKTsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIp Iik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ04nOgotICAg ICAgbWFuZ2xlKys7Ci0gICAgICBpZiAoKm1hbmdsZSA9PSAnZycpIC8qIHdp bGQoVCkgKi8KLQl7Ci0JICBtYW5nbGUrKzsKLQkgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJpbm91dCgiKTsKLQkgIG1hbmdsZSA9IHBhcnNlX3R5 cGUgKHRlbXBidWYsIG1hbmdsZSk7Ci0JICBvYnN0YWNrX2dyb3dfc3RyICh0 ZW1wYnVmLCAiKSIpOwotCSAgcmV0dXJuIG1hbmdsZTsKLQl9Ci0gICAgICBl bHNlIGlmICgqbWFuZ2xlID09ICdoJykgLyogdmVjdG9yKFQpICovCi0Jewot CSAgbWFuZ2xlKys7Ci0JICAvKiBUaGUgYmFzZXR5cGUgZm9yIHZlY3RvcnMg YXJlIGFsd2F5cyBzdGF0aWMgYXJyYXlzLiAgKi8KLQkgIGlmICgqbWFuZ2xl ICE9ICdHJykKLQkgICAgcmV0dXJuIE5VTEw7Ci0JICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiX192ZWN0b3IoIik7Ci0JICBtYW5nbGUgPSBwYXJz ZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwotCSAgb2JzdGFja19ncm93X3N0 ciAodGVtcGJ1ZiwgIikiKTsKLQkgIHJldHVybiBtYW5nbGU7Ci0JfQotICAg ICAgZWxzZQotCXJldHVybiBOVUxMOwotICAgIGNhc2UgJ0EnOiAvKiBkeW5h bWljIGFycmF5IChUW10pICovCi0gICAgICBtYW5nbGUrKzsKLSAgICAgIG1h bmdsZSA9IHBhcnNlX3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7Ci0gICAgICBv YnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiW10iKTsKLSAgICAgIHJldHVy biBtYW5nbGU7Ci0gICAgY2FzZSAnRyc6IC8qIHN0YXRpYyBhcnJheSAoVFtO XSkgKi8KLSAgICB7Ci0gICAgICBjb25zdCBjaGFyICpudW1wdHI7Ci0gICAg ICBzaXplX3QgbnVtID0gMDsKLSAgICAgIG1hbmdsZSsrOwotCi0gICAgICBu dW1wdHIgPSBtYW5nbGU7Ci0gICAgICB3aGlsZSAoSVNESUdJVCAoKm1hbmds ZSkpCi0JewotCSAgbnVtKys7Ci0JICBtYW5nbGUrKzsKLQl9Ci0gICAgICBt YW5nbGUgPSBwYXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwotICAgICAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIlsiKTsKLSAgICAgIG9ic3Rh Y2tfZ3JvdyAodGVtcGJ1ZiwgbnVtcHRyLCBudW0pOwotICAgICAgb2JzdGFj a19ncm93X3N0ciAodGVtcGJ1ZiwgIl0iKTsKLSAgICAgIHJldHVybiBtYW5n bGU7Ci0gICAgfQotICAgIGNhc2UgJ0gnOiAvKiBhc3NvY2lhdGl2ZSBhcnJh eSAoVFtUXSkgKi8KLSAgICB7Ci0gICAgICBzdHJ1Y3Qgb2JzdGFjayBvYnR5 cGU7Ci0gICAgICBjaGFyICp0eXBlOwotICAgICAgc2l6ZV90IHN6dHlwZTsK LSAgICAgIG1hbmdsZSsrOwotCi0gICAgICBvYnN0YWNrX2luaXQgKCZvYnR5 cGUpOwotICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAoJm9idHlwZSwgbWFu Z2xlKTsKLSAgICAgIHN6dHlwZSA9IG9ic3RhY2tfb2JqZWN0X3NpemUgKCZv YnR5cGUpOwotICAgICAgdHlwZSA9IG9ic3RhY2tfZmluaXNoICgmb2J0eXBl KTsKLQotICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1ZiwgbWFu Z2xlKTsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJbIik7 Ci0gICAgICBvYnN0YWNrX2dyb3cgKHRlbXBidWYsIHR5cGUsIHN6dHlwZSk7 Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiXSIpOwotCi0g ICAgICBvYnN0YWNrX2ZyZWUgKCZvYnR5cGUsIE5VTEwpOwotICAgICAgcmV0 dXJuIG1hbmdsZTsKLSAgICB9Ci0gICAgY2FzZSAnUCc6IC8qIHBvaW50ZXIg KFQqKSAqLwotICAgICAgbWFuZ2xlKys7Ci0gICAgICBtYW5nbGUgPSBwYXJz ZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwotICAgICAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgIioiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0g ICAgY2FzZSAnSSc6IC8qIGlkZW50IFQgKi8KLSAgICBjYXNlICdDJzogLyog Y2xhc3MgVCAqLwotICAgIGNhc2UgJ1MnOiAvKiBzdHJ1Y3QgVCAqLwotICAg IGNhc2UgJ0UnOiAvKiBlbnVtIFQgKi8KLSAgICBjYXNlICdUJzogLyogdHlw ZWRlZiBUICovCi0gICAgICBtYW5nbGUrKzsKLSAgICAgIHJldHVybiBkX3Bh cnNlX3N5bWJvbCAodGVtcGJ1ZiwgbWFuZ2xlKTsKLSAgICBjYXNlICdEJzog LyogZGVsZWdhdGUgVCAqLwotICAgICAgbWFuZ2xlKys7Ci0gICAgICBtYW5n bGUgPSBwYXJzZV9mdW5jdGlvbl90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwot ICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImRlbGVnYXRlIik7 Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ0InOiAvKiB0dXBs ZSBUICovCi0gICAgICAvKiBUT0RPOiBIYW5kbGUgdGhpcy4gICovCi0gICAg ICByZXR1cm4gTlVMTDsKLQotICAgIC8qIEZ1bmN0aW9uIHR5cGVzICovCi0g ICAgY2FzZSAnRic6IGNhc2UgJ1UnOiBjYXNlICdXJzoKLSAgICBjYXNlICdW JzogY2FzZSAnUic6Ci0gICAgICBtYW5nbGUgPSBwYXJzZV9mdW5jdGlvbl90 eXBlICh0ZW1wYnVmLCBtYW5nbGUpOwotICAgICAgb2JzdGFja19ncm93X3N0 ciAodGVtcGJ1ZiwgImZ1bmN0aW9uIik7Ci0gICAgICByZXR1cm4gbWFuZ2xl OwotCi0gICAgLyogQmFzaWMgdHlwZXMgKi8KLSAgICBjYXNlICduJzoKLSAg ICAgIG1hbmdsZSsrOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1 ZiwgIm5vbmUiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAn dic6Ci0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICJ2b2lkIik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAg IGNhc2UgJ2cnOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dy b3dfc3RyICh0ZW1wYnVmLCAiYnl0ZSIpOwotICAgICAgcmV0dXJuIG1hbmds ZTsKLSAgICBjYXNlICdoJzoKLSAgICAgIG1hbmdsZSsrOwotICAgICAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgInVieXRlIik7Ci0gICAgICByZXR1 cm4gbWFuZ2xlOwotICAgIGNhc2UgJ3MnOgotICAgICAgbWFuZ2xlKys7Ci0g ICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAic2hvcnQiKTsKLSAg ICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAndCc6Ci0gICAgICBtYW5n bGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJ1c2hv cnQiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAnaSc6Ci0g ICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBi dWYsICJpbnQiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAn ayc6Ci0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICJ1aW50Iik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAg IGNhc2UgJ2wnOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dy b3dfc3RyICh0ZW1wYnVmLCAibG9uZyIpOwotICAgICAgcmV0dXJuIG1hbmds ZTsKLSAgICBjYXNlICdtJzoKLSAgICAgIG1hbmdsZSsrOwotICAgICAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgInVsb25nIik7Ci0gICAgICByZXR1 cm4gbWFuZ2xlOwotICAgIGNhc2UgJ2YnOgotICAgICAgbWFuZ2xlKys7Ci0g ICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZmxvYXQiKTsKLSAg ICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAnZCc6Ci0gICAgICBtYW5n bGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJkb3Vi bGUiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAnZSc6Ci0g ICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBi dWYsICJyZWFsIik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotCi0gICAgLyog SW1hZ2luYXJ5IGFuZCBDb21wbGV4IHR5cGVzICovCi0gICAgY2FzZSAnbyc6 Ci0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICJpZmxvYXQiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAg Y2FzZSAncCc6Ci0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICJpZG91YmxlIik7Ci0gICAgICByZXR1cm4gbWFu Z2xlOwotICAgIGNhc2UgJ2onOgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBv YnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiaXJlYWwiKTsKLSAgICAgIHJl dHVybiBtYW5nbGU7Ci0gICAgY2FzZSAncSc6Ci0gICAgICBtYW5nbGUrKzsK LSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJjZmxvYXQiKTsK LSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAncic6Ci0gICAgICBt YW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJj ZG91YmxlIik7Ci0gICAgICByZXR1cm4gbWFuZ2xlOwotICAgIGNhc2UgJ2Mn OgotICAgICAgbWFuZ2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0 ZW1wYnVmLCAiY3JlYWwiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0KLSAg ICAvKiBPdGhlciB0eXBlcyAqLwotICAgIGNhc2UgJ2InOgotICAgICAgbWFu Z2xlKys7Ci0gICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiYm9v bCIpOwotICAgICAgcmV0dXJuIG1hbmdsZTsKLSAgICBjYXNlICdhJzoKLSAg ICAgIG1hbmdsZSsrOwotICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1 ZiwgImNoYXIiKTsKLSAgICAgIHJldHVybiBtYW5nbGU7Ci0gICAgY2FzZSAn dSc6Ci0gICAgICBtYW5nbGUrKzsKLSAgICAgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICJ3Y2hhciIpOwotICAgICAgcmV0dXJuIG1hbmdsZTsKLSAg ICBjYXNlICd3JzoKLSAgICAgIG1hbmdsZSsrOwotICAgICAgb2JzdGFja19n cm93X3N0ciAodGVtcGJ1ZiwgImRjaGFyIik7Ci0gICAgICByZXR1cm4gbWFu Z2xlOwotCi0gICAgZGVmYXVsdDogLyogdW5oYW5kbGVkICovCi0gICAgICBy ZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLS8qIEV4dHJhY3QgdGhlIGlkZW50 aWZpZXIgZnJvbSBNQU5HTEUgYW5kIGFwcGVuZCBpdCB0byBURU1QQlVGLgot ICAgUmV0dXJuIHRoZSByZW1haW5pbmcgc3RyaW5nIG9uIHN1Y2Nlc3Mgb3Ig TlVMTCBvbiBmYWlsdXJlLiAgKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKgot cGFyc2VfaWRlbnRpZmllciAoc3RydWN0IG9ic3RhY2sgKnRlbXBidWYsIGNv bnN0IGNoYXIgKm1hbmdsZSkKLXsKLSAgaWYgKChtYW5nbGUgPT0gTlVMTCkg fHwgKCptYW5nbGUgPT0gJ1wwJykpCi0gICAgcmV0dXJuIG1hbmdsZTsKLQot ICBpZiAoSVNESUdJVCAoKm1hbmdsZSkpCi0gICAgewotICAgICAgY2hhciAq ZW5kcHRyOwotICAgICAgbG9uZyBpID0gc3RydG9sIChtYW5nbGUsICZlbmRw dHIsIDEwKTsKLQotICAgICAgaWYgKGkgPD0gMCB8fCBzdHJsZW4gKGVuZHB0 cikgPCBpKQotCXJldHVybiBOVUxMOwotCi0gICAgICBtYW5nbGUgPSBlbmRw dHI7Ci0KLSAgICAgIC8qIE5vIHN1cHBvcnQgZm9yIGRlbWFuZ2xpbmcgdGVt cGxhdGVzLiAgKi8KLSAgICAgIGlmIChpID49IDUgJiYgc3RybmNtcCAobWFu Z2xlLCAiX19UIiwgMykgPT0gMCkKLQlyZXR1cm4gTlVMTDsKLQotICAgICAg aWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fY3RvciIsIGkpID09IDApCi0Jewot CSAgLyogQ29uc3RydWN0b3Igc3ltYm9sIGZvciBhIGNsYXNzL3N0cnVjdC4g ICovCi0JICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAidGhpcyIpOwot CSAgbWFuZ2xlICs9IGk7Ci0JICByZXR1cm4gbWFuZ2xlOwotCX0KLSAgICAg IGVsc2UgaWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fZHRvciIsIGkpID09IDAp Ci0JewotCSAgLyogRGVzdHJ1Y3RvciBzeW1ib2wgZm9yIGEgY2xhc3Mvc3Ry dWN0LiAgKi8KLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJ+dGhp cyIpOwotCSAgbWFuZ2xlICs9IGk7Ci0JICByZXR1cm4gbWFuZ2xlOwotCX0K LSAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fcG9zdGJsaXQi LCBpKSA9PSAwKQotCXsKLQkgIC8qIFBvc3RibGl0IHN5bWJvbCBmb3IgYSBz dHJ1Y3QuICAqLwotCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgInRo aXModGhpcykiKTsKLQkgIG1hbmdsZSArPSBpOwotCSAgcmV0dXJuIG1hbmds ZTsKLQl9Ci0gICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUsICJfX2lu aXRaIiwgaSsxKSA9PSAwKQotCXsKLQkgIC8qIFRoZSBzdGF0aWMgaW5pdGlh bGlzZXIgZm9yIGEgZ2l2ZW4gc3ltYm9sLiAgKi8KLQkgIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICJpbml0JCIpOwotCSAgbWFuZ2xlICs9IGkgKyAx OwotCSAgcmV0dXJuIG1hbmdsZTsKLQl9Ci0gICAgICBlbHNlIGlmIChzdHJu Y21wIChtYW5nbGUsICJfX0NsYXNzWiIsIGkrMSkgPT0gMCkKLQl7Ci0JICAv KiBUaGUgY2xhc3NpbmZvIHN5bWJvbCBmb3IgYSBnaXZlbiBjbGFzcy4gICov Ci0JICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiY2xhc3NpbmZvJCIp OwotCSAgbWFuZ2xlICs9IGkgKyAxOwotCSAgcmV0dXJuIG1hbmdsZTsKLQl9 Ci0gICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUsICJfX3Z0YmxaIiwg aSsxKSA9PSAwKQotCXsKLQkgIC8qIFRoZSB2dGFibGUgc3ltYm9sIGZvciBh IGdpdmVuIGNsYXNzLiAgKi8KLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBi dWYsICJ2dGJsJCIpOwotCSAgbWFuZ2xlICs9IGkgKyAxOwotCSAgcmV0dXJu IG1hbmdsZTsKLQl9Ci0gICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUs ICJfX0ludGVyZmFjZVoiLCBpKzEpID09IDApCi0JewotCSAgLyogVGhlIGlu dGVyZmFjZSBzeW1ib2wgZm9yIGEgZ2l2ZW4gY2xhc3MuICAqLwotCSAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImludGVyZmFjZSQiKTsKLQkgIG1h bmdsZSArPSBpICsgMTsKLQkgIHJldHVybiBtYW5nbGU7Ci0JfQotICAgICAg ZWxzZSBpZiAoc3RybmNtcCAobWFuZ2xlLCAiX19Nb2R1bGVJbmZvWiIsIGkr MSkgPT0gMCkKLQl7Ci0JICAvKiBUaGUgTW9kdWxlSW5mbyBzeW1ib2wgZm9y IGEgZ2l2ZW4gbW9kdWxlLiAgKi8KLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICJtb2R1bGVpbmZvJCIpOwotCSAgbWFuZ2xlICs9IGkgKyAxOwot CSAgcmV0dXJuIG1hbmdsZTsKLQl9Ci0gICAgICBvYnN0YWNrX2dyb3cgKHRl bXBidWYsIG1hbmdsZSwgaSk7Ci0gICAgICBtYW5nbGUgKz0gaTsKLSAgICB9 Ci0gIGVsc2UKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gbWFuZ2xl OwotfQotCi0vKiBUZXN0IHdoZXRoZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24g b2YgTUFOR0xFIGlzIHBvaW50aW5nIHRvIHRoZQotICAgYmVnaW5uaW5nIG9m IGEgbWFuZ2xlZCBmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdCwgd2hpY2ggc3Rh cnRzIHdpdGgKLSAgIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uICBSZXR1cm5z IDEgb24gc3VjY2VzcyBvciAwIG9uIGZhaWx1cmUuICAqLwotCi1zdGF0aWMg aW50Ci1jYWxsX2NvbnZlbnRpb25fcCAoY29uc3QgY2hhciAqbWFuZ2xlKQot ewotICBzaXplX3QgaTsKLQotICBpZiAoKG1hbmdsZSA9PSBOVUxMKSB8fCAo Km1hbmdsZSA9PSAnXDAnKSkKLSAgICByZXR1cm4gMDsKLQotICBzd2l0Y2gg KCptYW5nbGUpCi0gICAgewotICAgIGNhc2UgJ0YnOiBjYXNlICdVJzogY2Fz ZSAnVic6Ci0gICAgY2FzZSAnVyc6IGNhc2UgJ1InOgotICAgICAgcmV0dXJu IDE7Ci0KLSAgICBjYXNlICdNJzogLyogUHJlZml4IGZvciBmdW5jdGlvbnMg bmVlZGluZyAndGhpcycuICAqLwotICAgICAgaSA9IDE7Ci0gICAgICBpZiAo bWFuZ2xlW2ldID09ICd4JykKLQlpKys7Ci0KLSAgICAgIHN3aXRjaCAobWFu Z2xlW2ldKQotCXsKLQljYXNlICdGJzogY2FzZSAnVSc6IGNhc2UgJ1YnOgot CWNhc2UgJ1cnOiBjYXNlICdSJzoKLQkgIHJldHVybiAxOwotCX0KLQotICAg IGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLS8qIEV4 dHJhY3QgYW5kIGRlbWFuZ2xlIHRoZSBzeW1ib2wgaW4gTUFOR0xFIGFuZCBh cHBlbmQgaXQgdG8gVEVNUEJVRi4KLSAgIFJldHVybiB0aGUgcmVtYWluaW5n IHNpZ25hdHVyZSBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZmFpbHVyZS4gICov Ci0KLWNvbnN0IGNoYXIgKgotZF9wYXJzZV9zeW1ib2wgKHN0cnVjdCBvYnN0 YWNrICp0ZW1wYnVmLCBjb25zdCBjaGFyICptYW5nbGUpCi17Ci0gIHNpemVf dCBuID0gMDsKLSAgZG8KLSAgICB7Ci0gICAgICBpZiAobisrKQotCW9ic3Rh Y2tfZ3Jvd19zdHIgKHRlbXBidWYsICIuIik7Ci0KLSAgICAgIG1hbmdsZSA9 IHBhcnNlX2lkZW50aWZpZXIgKHRlbXBidWYsIG1hbmdsZSk7Ci0KLSAgICAg IGlmIChjYWxsX2NvbnZlbnRpb25fcCAobWFuZ2xlKSkKLQl7Ci0JICBjaGFy ICpzYXZlZDsKLQotCSAgLyogU2tpcCBvdmVyICd0aGlzJyBwYXJhbWV0ZXIu ICAqLwotCSAgaWYgKCptYW5nbGUgPT0gJ00nKQotCSAgICBtYW5nbGUgKz0g KG1hbmdsZVsxXSA9PSAneCcpID8gMiA6IDE7Ci0KLQkgIC8qIFNraXAgb3Zl ciBjYWxsaW5nIGNvbnZlbnRpb24gYW5kIGF0dHJpYnV0ZXMgaW4gcXVhbGlm aWVkIG5hbWUuICAqLwotCSAgc2F2ZWQgPSBvYnN0YWNrX25leHRfZnJlZSAo dGVtcGJ1Zik7Ci0JICBtYW5nbGUgPSBwYXJzZV9jYWxsX2NvbnZlbnRpb24g KHRlbXBidWYsIG1hbmdsZSk7Ci0JICBtYW5nbGUgPSBwYXJzZV9hdHRyaWJ1 dGVzICh0ZW1wYnVmLCBtYW5nbGUpOwotCSAgb2JzdGFja19uZXh0X2ZyZWUg KHRlbXBidWYpID0gc2F2ZWQ7Ci0KLQkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICIoIik7Ci0JICBtYW5nbGUgPSBwYXJzZV9mdW5jdGlvbl9hcmdz ICh0ZW1wYnVmLCBtYW5nbGUpOwotCSAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgIikiKTsKLQotCSAgLyogRGVtYW5nbGUgdGhlIGZ1bmN0aW9uIHJl dHVybiB0eXBlIGFzIGEga2luZCBvZiBzYW5pdHkgdGVzdC4gICovCi0JICBp ZiAoKG1hbmdsZSAhPSBOVUxMKSAmJiAhSVNESUdJVCAoKm1hbmdsZSkpCi0J ICAgIHsKLQkgICAgICBzYXZlZCA9IG9ic3RhY2tfbmV4dF9mcmVlICh0ZW1w YnVmKTsKLQkgICAgICBtYW5nbGUgPSBwYXJzZV90eXBlICh0ZW1wYnVmLCBt YW5nbGUpOwotCSAgICAgIG9ic3RhY2tfbmV4dF9mcmVlICh0ZW1wYnVmKSA9 IHNhdmVkOwotCSAgICB9Ci0JfQotICAgIH0KLSAgd2hpbGUgKChtYW5nbGUg IT0gTlVMTCkgJiYgSVNESUdJVCAoKm1hbmdsZSkpOwotCi0gIHJldHVybiBt YW5nbGU7Ci19Ci0KIC8qIEltcGxlbWVudHMgdGhlIGxhX2RlbWFuZ2xlIGxh bmd1YWdlX2RlZm4gcm91dGluZSBmb3IgbGFuZ3VhZ2UgRC4gICovCiAKIGNo YXIgKgpkaWZmIC0tZ2l0IGEvZ2RiL2QtbGFuZy5oIGIvZ2RiL2QtbGFuZy5o CmluZGV4IGExYjQ0NTYuLmNhOTEyNmIgMTAwNjQ0Ci0tLSBhL2dkYi9kLWxh bmcuaAorKysgYi9nZGIvZC1sYW5nLmgKQEAgLTYyLDYgKzYyLDggQEAgZXh0 ZXJuIGNoYXIgKmRfZGVtYW5nbGUgKGNvbnN0IGNoYXIgKm1hbmdsZWQsIGlu dCBvcHRpb25zKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBidWlsdGluX2Rf dHlwZSAqYnVpbHRpbl9kX3R5cGUgKHN0cnVjdCBnZGJhcmNoICopOwogCisv KiBEZWZpbmVkIGluIGQtc3VwcG9ydC5jICAqLworCiBleHRlcm4gY29uc3Qg Y2hhciAqZF9wYXJzZV9zeW1ib2wgKHN0cnVjdCBvYnN0YWNrICosIGNvbnN0 IGNoYXIgKik7CiAKIC8qIERlZmluZWQgaW4gZC12YWxwcmludC5jICAqLwpk aWZmIC0tZ2l0IGEvZ2RiL2Qtc3VwcG9ydC5jIGIvZ2RiL2Qtc3VwcG9ydC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjM5ODEK LS0tIC9kZXYvbnVsbAorKysgYi9nZGIvZC1zdXBwb3J0LmMKQEAgLTAsMCAr MSw2MjEgQEAKKy8qIEhlbHBlciByb3V0aW5lcyBmb3IgRCBzdXBwb3J0IGlu IEdEQi4KKworICAgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBH REIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRl ICJkZWZzLmgiCisjaW5jbHVkZSAiZC1sYW5nLmgiCisjaW5jbHVkZSAiZ2Ri X29ic3RhY2suaCIKKworI2luY2x1ZGUgInNhZmUtY3R5cGUuaCIKKworc3Rh dGljIGNvbnN0IGNoYXIgKnBhcnNlX2Z1bmN0aW9uX2FyZ3MgKHN0cnVjdCBv YnN0YWNrICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgY29uc3QgY2hhciAq cGFyc2VfdHlwZSAoc3RydWN0IG9ic3RhY2sgKiwgY29uc3QgY2hhciAqKTsK KworCisvKiBEZW1hbmdsZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZyb20g TUFOR0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVNUEJVRi4KKyAgIFJldHVybiB0 aGUgcmVtYWluaW5nIHN0cmluZyBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZmFp bHVyZS4gICovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3BhcnNlX2NhbGxf Y29udmVudGlvbiAoc3RydWN0IG9ic3RhY2sgKnRlbXBidWYsIGNvbnN0IGNo YXIgKm1hbmdsZSkKK3sKKyAgaWYgKChtYW5nbGUgPT0gTlVMTCkgfHwgKCpt YW5nbGUgPT0gJ1wwJykpCisgICAgcmV0dXJuIG1hbmdsZTsKKworICBzd2l0 Y2ggKCptYW5nbGUpCisgICAgeworICAgIGNhc2UgJ0YnOiAvKiAoRCkgKi8K KyAgICAgIG1hbmdsZSsrOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVSc6 IC8qIChDKSAqLworICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNrX2dy b3dfc3RyICh0ZW1wYnVmLCAiZXh0ZXJuKEMpICIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAnVyc6IC8qIChXaW5kb3dzKSAqLworICAgICAgbWFuZ2xl Kys7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZXh0ZXJu KFdpbmRvd3MpICIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVic6IC8q IChQYXNjYWwpICovCisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tf Z3Jvd19zdHIgKHRlbXBidWYsICJleHRlcm4oUGFzY2FsKSAiKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgJ1InOiAvKiAoQysrKSAqLworICAgICAgbWFu Z2xlKys7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZXh0 ZXJuKEMrKykgIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIHJldHVybiBtYW5nbGU7Cit9 CisKKy8qIERlbWFuZ2xlIHRoZSBEIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgZnJv bSBNQU5HTEUgYW5kIGFwcGVuZCBpdCB0byBURU1QQlVGLgorICAgUmV0dXJu IHRoZSByZW1haW5pbmcgc3RyaW5nIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBm YWlsdXJlLiAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKgorcGFyc2VfYXR0 cmlidXRlcyAoc3RydWN0IG9ic3RhY2sgKnRlbXBidWYsIGNvbnN0IGNoYXIg Km1hbmdsZSkKK3sKKyAgaWYgKChtYW5nbGUgPT0gTlVMTCkgfHwgKCptYW5n bGUgPT0gJ1wwJykpCisgICAgcmV0dXJuIG1hbmdsZTsKKworICB3aGlsZSAo Km1hbmdsZSA9PSAnTicpCisgICAgeworICAgICAgbWFuZ2xlKys7CisgICAg ICBzd2l0Y2ggKCptYW5nbGUpCisJeworCWNhc2UgJ2EnOiAvKiBwdXJlICov CisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICJwdXJlICIpOworCSAgY29udGludWU7CisJY2FzZSAnYic6IC8qIG5vdGhy b3cgKi8KKwkgIG1hbmdsZSsrOworCSAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgIm5vdGhyb3cgIik7CisJICBjb250aW51ZTsKKwljYXNlICdjJzog LyogcmVmICovCisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICJyZWYgIik7CisJICBjb250aW51ZTsKKwljYXNlICdkJzog LyogQHByb3BlcnR5ICovCisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICJAcHJvcGVydHkgIik7CisJICBjb250aW51ZTsK KwljYXNlICdlJzogLyogQHRydXN0ZWQgKi8KKwkgIG1hbmdsZSsrOworCSAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIkB0cnVzdGVkICIpOworCSAg Y29udGludWU7CisJY2FzZSAnZic6IC8qIEBzYWZlICovCisJICBtYW5nbGUr KzsKKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJAc2FmZSAiKTsK KwkgIGNvbnRpbnVlOworCWNhc2UgJ2cnOgorCWNhc2UgJ2gnOgorCSAgLyog aW5vdXQgcGFyYW1ldGVyIGlzIHJlcHJlc2VudGVkIGFzICdOZycuCisJICAg ICB2ZWN0b3IgcGFyYW1ldGVyIGlzIHJlcHJlc2VudGVkIGFzICdOaCcuCisJ ICAgICBJZiB3ZSBzZWUgdGhpcywgdGhlbiB3ZSBrbm93IHdlJ3JlIHJlYWxs eSBpbiB0aGUKKwkgICAgIHBhcmFtZXRlciBsaXN0LiAgUmV3aW5kIGFuZCBi cmVhay4gICovCisJICBtYW5nbGUtLTsKKwl9CisgICAgICBicmVhazsKKyAg ICB9CisgIHJldHVybiBtYW5nbGU7Cit9CisKKy8qIERlbWFuZ2xlIHRoZSBm dW5jdGlvbiB0eXBlIGZyb20gTUFOR0xFIGFuZCBhcHBlbmQgaXQgdG8gVEVN UEJVRi4KKyAgIFJldHVybiB0aGUgcmVtYWluaW5nIHN0cmluZyBvbiBzdWNj ZXNzIG9yIE5VTEwgb24gZmFpbHVyZS4gICovCisKK3N0YXRpYyBjb25zdCBj aGFyICoKK3BhcnNlX2Z1bmN0aW9uX3R5cGUgKHN0cnVjdCBvYnN0YWNrICp0 ZW1wYnVmLCBjb25zdCBjaGFyICptYW5nbGUpCit7CisgIHN0cnVjdCBvYnN0 YWNrIG9iYXR0ciwgb2JhcmdzLCBvYnR5cGU7CisgIGNoYXIgKmF0dHIsICph cmdzLCAqdHlwZTsKKyAgc2l6ZV90IHN6YXR0ciwgc3phcmdzLCBzenR5cGU7 CisKKyAgaWYgKChtYW5nbGUgPT0gTlVMTCkgfHwgKCptYW5nbGUgPT0gJ1ww JykpCisgICAgcmV0dXJuIG1hbmdsZTsKKworICAvKiBUaGUgb3JkZXIgb2Yg dGhlIG1hbmdsZWQgc3RyaW5nIGlzOgorICAgICBUeXBlRnVuY3Rpb24gOjoK KyAgICAgICAgQ2FsbENvbnZlbnRpb24gRnVuY0F0dHJzIEFyZ3VtZW50cyBB cmdDbG9zZSBUeXBlCisKKyAgICAgVGhlIGRlbWFuZ2xlZCBzdHJpbmcgaXMg cmUtb3JkZXJlZCBhczoKKyAgICAgICAgQ2FsbENvbnZlbnRpb24gVHlwZSBB cmd1bWVudHMgRnVuY0F0dHJzCisgICAqLworICBvYnN0YWNrX2luaXQgKCZv YmF0dHIpOworICBvYnN0YWNrX2luaXQgKCZvYmFyZ3MpOworICBvYnN0YWNr X2luaXQgKCZvYnR5cGUpOworCisgIC8qIEZ1bmN0aW9uIGNhbGwgY29udmVu dGlvbi4gICovCisgIG1hbmdsZSA9IHBhcnNlX2NhbGxfY29udmVudGlvbiAo dGVtcGJ1ZiwgbWFuZ2xlKTsKKworICAvKiBGdW5jdGlvbiBhdHRyaWJ1dGVz LiAgKi8KKyAgbWFuZ2xlID0gcGFyc2VfYXR0cmlidXRlcyAoJm9iYXR0ciwg bWFuZ2xlKTsKKyAgc3phdHRyID0gb2JzdGFja19vYmplY3Rfc2l6ZSAoJm9i YXR0cik7CisgIGF0dHIgPSBvYnN0YWNrX2ZpbmlzaCAoJm9iYXR0cik7CisK KyAgLyogRnVuY3Rpb24gYXJndW1lbnRzLiAgKi8KKyAgbWFuZ2xlID0gcGFy c2VfZnVuY3Rpb25fYXJncyAoJm9iYXJncywgbWFuZ2xlKTsKKyAgc3phcmdz ID0gb2JzdGFja19vYmplY3Rfc2l6ZSAoJm9iYXJncyk7CisgIGFyZ3MgPSBv YnN0YWNrX2ZpbmlzaCAoJm9iYXJncyk7CisKKyAgLyogRnVuY3Rpb24gcmV0 dXJuIHR5cGUuICAqLworICBtYW5nbGUgPSBwYXJzZV90eXBlICgmb2J0eXBl LCBtYW5nbGUpOworICBzenR5cGUgPSBvYnN0YWNrX29iamVjdF9zaXplICgm b2J0eXBlKTsKKyAgdHlwZSA9IG9ic3RhY2tfZmluaXNoICgmb2J0eXBlKTsK KworICAvKiBBcHBlbmQgdG8gYnVmZmVyIGluIG9yZGVyLiAqLworICBvYnN0 YWNrX2dyb3cgKHRlbXBidWYsIHR5cGUsIHN6dHlwZSk7CisgIG9ic3RhY2tf Z3Jvd19zdHIgKHRlbXBidWYsICIoIik7CisgIG9ic3RhY2tfZ3JvdyAodGVt cGJ1ZiwgYXJncywgc3phcmdzKTsKKyAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgIikgIik7CisgIG9ic3RhY2tfZ3JvdyAodGVtcGJ1ZiwgYXR0ciwg c3phdHRyKTsKKworICBvYnN0YWNrX2ZyZWUgKCZvYmF0dHIsIE5VTEwpOwor ICBvYnN0YWNrX2ZyZWUgKCZvYmFyZ3MsIE5VTEwpOworICBvYnN0YWNrX2Zy ZWUgKCZvYnR5cGUsIE5VTEwpOworICByZXR1cm4gbWFuZ2xlOworfQorCisv KiBEZW1hbmdsZSB0aGUgYXJndW1lbnQgbGlzdCBmcm9tIE1BTkdMRSBhbmQg YXBwZW5kIGl0IHRvIFRFTVBCVUYuCisgICBSZXR1cm4gdGhlIHJlbWFpbmlu ZyBzdHJpbmcgb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuICAqLwor CitzdGF0aWMgY29uc3QgY2hhciAqCitwYXJzZV9mdW5jdGlvbl9hcmdzIChz dHJ1Y3Qgb2JzdGFjayAqdGVtcGJ1ZiwgY29uc3QgY2hhciAqbWFuZ2xlKQor eworICBzaXplX3QgbiA9IDA7CisKKyAgd2hpbGUgKChtYW5nbGUgIT0gTlVM TCkgJiYgKCptYW5nbGUgIT0gJ1wwJykpCisgICAgeworICAgICAgc3dpdGNo ICgqbWFuZ2xlKQorCXsKKwljYXNlICdYJzogLyogKHZhcmlhZGljIFQgdC4u Likgc3R5bGUuICAqLworCSAgbWFuZ2xlKys7CisJICBvYnN0YWNrX2dyb3df c3RyICh0ZW1wYnVmLCAiLi4uIik7CisJICByZXR1cm4gbWFuZ2xlOworCWNh c2UgJ1knOiAvKiAodmFyaWFkaWMgVCB0LCAuLi4pIHN0eWxlLiAgKi8KKwkg IG1hbmdsZSsrOworCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIiwg Li4uIik7CisJICByZXR1cm4gbWFuZ2xlOworCWNhc2UgJ1onOiAvKiBOb3Jt YWwgZnVuY3Rpb24uICAqLworCSAgbWFuZ2xlKys7CisJICByZXR1cm4gbWFu Z2xlOworCX0KKworICAgICAgaWYgKG4rKykKKwlvYnN0YWNrX2dyb3dfc3Ry ICh0ZW1wYnVmLCAiLCAiKTsKKworICAgICAgaWYgKCptYW5nbGUgPT0gJ00n KSAvKiBzY29wZShUKSAqLworCXsKKwkgIG1hbmdsZSsrOworCSAgb2JzdGFj a19ncm93X3N0ciAodGVtcGJ1ZiwgInNjb3BlICIpOworCX0KKworICAgICAg c3dpdGNoICgqbWFuZ2xlKQorCXsKKwljYXNlICdKJzogLyogb3V0KFQpICov CisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICJvdXQgIik7CisJICBicmVhazsKKwljYXNlICdLJzogLyogcmVmKFQpICov CisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICJyZWYgIik7CisJICBicmVhazsKKwljYXNlICdMJzogLyogbGF6eShUKSAq LworCSAgbWFuZ2xlKys7CisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVm LCAibGF6eSAiKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIG1hbmdsZSA9IHBh cnNlX3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7CisgICAgfQorICByZXR1cm4g bWFuZ2xlOworfQorCisvKiBEZW1hbmdsZSB0aGUgdHlwZSBmcm9tIE1BTkdM RSBhbmQgYXBwZW5kIGl0IHRvIFRFTVBCVUYuCisgICBSZXR1cm4gdGhlIHJl bWFpbmluZyBzdHJpbmcgb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUu ICAqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitwYXJzZV90eXBlIChzdHJ1 Y3Qgb2JzdGFjayAqdGVtcGJ1ZiwgY29uc3QgY2hhciAqbWFuZ2xlKQorewor ICBpZiAoKG1hbmdsZSA9PSBOVUxMKSB8fCAoKm1hbmdsZSA9PSAnXDAnKSkK KyAgICByZXR1cm4gbWFuZ2xlOworCisgIHN3aXRjaCAoKm1hbmdsZSkKKyAg ICB7CisgICAgY2FzZSAnTyc6IC8qIHNoYXJlZChUKSAqLworICAgICAgbWFu Z2xlKys7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAic2hh cmVkKCIpOworICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1Ziwg bWFuZ2xlKTsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIp Iik7CisgICAgICByZXR1cm4gbWFuZ2xlOworICAgIGNhc2UgJ3gnOiAvKiBj b25zdChUKSAqLworICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNrX2dy b3dfc3RyICh0ZW1wYnVmLCAiY29uc3QoIik7CisgICAgICBtYW5nbGUgPSBw YXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOworICAgICAgb2JzdGFja19n cm93X3N0ciAodGVtcGJ1ZiwgIikiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7 CisgICAgY2FzZSAneSc6IC8qIGltbXV0YWJsZShUKSAqLworICAgICAgbWFu Z2xlKys7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiaW1t dXRhYmxlKCIpOworICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1 ZiwgbWFuZ2xlKTsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICIpIik7CisgICAgICByZXR1cm4gbWFuZ2xlOworICAgIGNhc2UgJ04nOgor ICAgICAgbWFuZ2xlKys7CisgICAgICBpZiAoKm1hbmdsZSA9PSAnZycpIC8q IHdpbGQoVCkgKi8KKwl7CisJICBtYW5nbGUrKzsKKwkgIG9ic3RhY2tfZ3Jv d19zdHIgKHRlbXBidWYsICJpbm91dCgiKTsKKwkgIG1hbmdsZSA9IHBhcnNl X3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7CisJICBvYnN0YWNrX2dyb3dfc3Ry ICh0ZW1wYnVmLCAiKSIpOworCSAgcmV0dXJuIG1hbmdsZTsKKwl9CisgICAg ICBlbHNlIGlmICgqbWFuZ2xlID09ICdoJykgLyogdmVjdG9yKFQpICovCisJ eworCSAgbWFuZ2xlKys7CisJICAvKiBUaGUgYmFzZXR5cGUgZm9yIHZlY3Rv cnMgYXJlIGFsd2F5cyBzdGF0aWMgYXJyYXlzLiAgKi8KKwkgIGlmICgqbWFu Z2xlICE9ICdHJykKKwkgICAgcmV0dXJuIE5VTEw7CisJICBvYnN0YWNrX2dy b3dfc3RyICh0ZW1wYnVmLCAiX192ZWN0b3IoIik7CisJICBtYW5nbGUgPSBw YXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOworCSAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgIikiKTsKKwkgIHJldHVybiBtYW5nbGU7CisJfQor ICAgICAgZWxzZQorCXJldHVybiBOVUxMOworICAgIGNhc2UgJ0EnOiAvKiBk eW5hbWljIGFycmF5IChUW10pICovCisgICAgICBtYW5nbGUrKzsKKyAgICAg IG1hbmdsZSA9IHBhcnNlX3R5cGUgKHRlbXBidWYsIG1hbmdsZSk7CisgICAg ICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiW10iKTsKKyAgICAgIHJl dHVybiBtYW5nbGU7CisgICAgY2FzZSAnRyc6IC8qIHN0YXRpYyBhcnJheSAo VFtOXSkgKi8KKyAgICB7CisgICAgICBjb25zdCBjaGFyICpudW1wdHI7Cisg ICAgICBzaXplX3QgbnVtID0gMDsKKyAgICAgIG1hbmdsZSsrOworCisgICAg ICBudW1wdHIgPSBtYW5nbGU7CisgICAgICB3aGlsZSAoSVNESUdJVCAoKm1h bmdsZSkpCisJeworCSAgbnVtKys7CisJICBtYW5nbGUrKzsKKwl9CisgICAg ICBtYW5nbGUgPSBwYXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOworICAg ICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIlsiKTsKKyAgICAgIG9i c3RhY2tfZ3JvdyAodGVtcGJ1ZiwgbnVtcHRyLCBudW0pOworICAgICAgb2Jz dGFja19ncm93X3N0ciAodGVtcGJ1ZiwgIl0iKTsKKyAgICAgIHJldHVybiBt YW5nbGU7CisgICAgfQorICAgIGNhc2UgJ0gnOiAvKiBhc3NvY2lhdGl2ZSBh cnJheSAoVFtUXSkgKi8KKyAgICB7CisgICAgICBzdHJ1Y3Qgb2JzdGFjayBv YnR5cGU7CisgICAgICBjaGFyICp0eXBlOworICAgICAgc2l6ZV90IHN6dHlw ZTsKKyAgICAgIG1hbmdsZSsrOworCisgICAgICBvYnN0YWNrX2luaXQgKCZv YnR5cGUpOworICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAoJm9idHlwZSwg bWFuZ2xlKTsKKyAgICAgIHN6dHlwZSA9IG9ic3RhY2tfb2JqZWN0X3NpemUg KCZvYnR5cGUpOworICAgICAgdHlwZSA9IG9ic3RhY2tfZmluaXNoICgmb2J0 eXBlKTsKKworICAgICAgbWFuZ2xlID0gcGFyc2VfdHlwZSAodGVtcGJ1Ziwg bWFuZ2xlKTsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJb Iik7CisgICAgICBvYnN0YWNrX2dyb3cgKHRlbXBidWYsIHR5cGUsIHN6dHlw ZSk7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiXSIpOwor CisgICAgICBvYnN0YWNrX2ZyZWUgKCZvYnR5cGUsIE5VTEwpOworICAgICAg cmV0dXJuIG1hbmdsZTsKKyAgICB9CisgICAgY2FzZSAnUCc6IC8qIHBvaW50 ZXIgKFQqKSAqLworICAgICAgbWFuZ2xlKys7CisgICAgICBtYW5nbGUgPSBw YXJzZV90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOworICAgICAgb2JzdGFja19n cm93X3N0ciAodGVtcGJ1ZiwgIioiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7 CisgICAgY2FzZSAnSSc6IC8qIGlkZW50IFQgKi8KKyAgICBjYXNlICdDJzog LyogY2xhc3MgVCAqLworICAgIGNhc2UgJ1MnOiAvKiBzdHJ1Y3QgVCAqLwor ICAgIGNhc2UgJ0UnOiAvKiBlbnVtIFQgKi8KKyAgICBjYXNlICdUJzogLyog dHlwZWRlZiBUICovCisgICAgICBtYW5nbGUrKzsKKyAgICAgIHJldHVybiBk X3BhcnNlX3N5bWJvbCAodGVtcGJ1ZiwgbWFuZ2xlKTsKKyAgICBjYXNlICdE JzogLyogZGVsZWdhdGUgVCAqLworICAgICAgbWFuZ2xlKys7CisgICAgICBt YW5nbGUgPSBwYXJzZV9mdW5jdGlvbl90eXBlICh0ZW1wYnVmLCBtYW5nbGUp OworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImRlbGVnYXRl Iik7CisgICAgICByZXR1cm4gbWFuZ2xlOworICAgIGNhc2UgJ0InOiAvKiB0 dXBsZSBUICovCisgICAgICAvKiBUT0RPOiBIYW5kbGUgdGhpcy4gICovCisg ICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIEZ1bmN0aW9uIHR5cGVzICov CisgICAgY2FzZSAnRic6IGNhc2UgJ1UnOiBjYXNlICdXJzoKKyAgICBjYXNl ICdWJzogY2FzZSAnUic6CisgICAgICBtYW5nbGUgPSBwYXJzZV9mdW5jdGlv bl90eXBlICh0ZW1wYnVmLCBtYW5nbGUpOworICAgICAgb2JzdGFja19ncm93 X3N0ciAodGVtcGJ1ZiwgImZ1bmN0aW9uIik7CisgICAgICByZXR1cm4gbWFu Z2xlOworCisgICAgLyogQmFzaWMgdHlwZXMgKi8KKyAgICBjYXNlICduJzoK KyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgIm5vbmUiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2Fz ZSAndic6CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJ2b2lkIik7CisgICAgICByZXR1cm4gbWFuZ2xlOwor ICAgIGNhc2UgJ2cnOgorICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNr X2dyb3dfc3RyICh0ZW1wYnVmLCAiYnl0ZSIpOworICAgICAgcmV0dXJuIG1h bmdsZTsKKyAgICBjYXNlICdoJzoKKyAgICAgIG1hbmdsZSsrOworICAgICAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgInVieXRlIik7CisgICAgICBy ZXR1cm4gbWFuZ2xlOworICAgIGNhc2UgJ3MnOgorICAgICAgbWFuZ2xlKys7 CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAic2hvcnQiKTsK KyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAndCc6CisgICAgICBt YW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJ1 c2hvcnQiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAnaSc6 CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICJpbnQiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2Fz ZSAnayc6CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJ1aW50Iik7CisgICAgICByZXR1cm4gbWFuZ2xlOwor ICAgIGNhc2UgJ2wnOgorICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNr X2dyb3dfc3RyICh0ZW1wYnVmLCAibG9uZyIpOworICAgICAgcmV0dXJuIG1h bmdsZTsKKyAgICBjYXNlICdtJzoKKyAgICAgIG1hbmdsZSsrOworICAgICAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgInVsb25nIik7CisgICAgICBy ZXR1cm4gbWFuZ2xlOworICAgIGNhc2UgJ2YnOgorICAgICAgbWFuZ2xlKys7 CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiZmxvYXQiKTsK KyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAnZCc6CisgICAgICBt YW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJk b3VibGUiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAnZSc6 CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICJyZWFsIik7CisgICAgICByZXR1cm4gbWFuZ2xlOworCisgICAg LyogSW1hZ2luYXJ5IGFuZCBDb21wbGV4IHR5cGVzICovCisgICAgY2FzZSAn byc6CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICJpZmxvYXQiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7Cisg ICAgY2FzZSAncCc6CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tf Z3Jvd19zdHIgKHRlbXBidWYsICJpZG91YmxlIik7CisgICAgICByZXR1cm4g bWFuZ2xlOworICAgIGNhc2UgJ2onOgorICAgICAgbWFuZ2xlKys7CisgICAg ICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiaXJlYWwiKTsKKyAgICAg IHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAncSc6CisgICAgICBtYW5nbGUr KzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJjZmxvYXQi KTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2FzZSAncic6CisgICAg ICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYs ICJjZG91YmxlIik7CisgICAgICByZXR1cm4gbWFuZ2xlOworICAgIGNhc2Ug J2MnOgorICAgICAgbWFuZ2xlKys7CisgICAgICBvYnN0YWNrX2dyb3dfc3Ry ICh0ZW1wYnVmLCAiY3JlYWwiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisK KyAgICAvKiBPdGhlciB0eXBlcyAqLworICAgIGNhc2UgJ2InOgorICAgICAg bWFuZ2xlKys7CisgICAgICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAi Ym9vbCIpOworICAgICAgcmV0dXJuIG1hbmdsZTsKKyAgICBjYXNlICdhJzoK KyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFja19ncm93X3N0ciAodGVt cGJ1ZiwgImNoYXIiKTsKKyAgICAgIHJldHVybiBtYW5nbGU7CisgICAgY2Fz ZSAndSc6CisgICAgICBtYW5nbGUrKzsKKyAgICAgIG9ic3RhY2tfZ3Jvd19z dHIgKHRlbXBidWYsICJ3Y2hhciIpOworICAgICAgcmV0dXJuIG1hbmdsZTsK KyAgICBjYXNlICd3JzoKKyAgICAgIG1hbmdsZSsrOworICAgICAgb2JzdGFj a19ncm93X3N0ciAodGVtcGJ1ZiwgImRjaGFyIik7CisgICAgICByZXR1cm4g bWFuZ2xlOworCisgICAgZGVmYXVsdDogLyogdW5oYW5kbGVkICovCisgICAg ICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8qIEV4dHJhY3QgdGhlIGlk ZW50aWZpZXIgZnJvbSBNQU5HTEUgYW5kIGFwcGVuZCBpdCB0byBURU1QQlVG LgorICAgUmV0dXJuIHRoZSByZW1haW5pbmcgc3RyaW5nIG9uIHN1Y2Nlc3Mg b3IgTlVMTCBvbiBmYWlsdXJlLiAgKi8KKworc3RhdGljIGNvbnN0IGNoYXIg KgorcGFyc2VfaWRlbnRpZmllciAoc3RydWN0IG9ic3RhY2sgKnRlbXBidWYs IGNvbnN0IGNoYXIgKm1hbmdsZSkKK3sKKyAgaWYgKChtYW5nbGUgPT0gTlVM TCkgfHwgKCptYW5nbGUgPT0gJ1wwJykpCisgICAgcmV0dXJuIG1hbmdsZTsK KworICBpZiAoSVNESUdJVCAoKm1hbmdsZSkpCisgICAgeworICAgICAgY2hh ciAqZW5kcHRyOworICAgICAgbG9uZyBpID0gc3RydG9sIChtYW5nbGUsICZl bmRwdHIsIDEwKTsKKworICAgICAgaWYgKGkgPD0gMCB8fCBzdHJsZW4gKGVu ZHB0cikgPCBpKQorCXJldHVybiBOVUxMOworCisgICAgICBtYW5nbGUgPSBl bmRwdHI7CisKKyAgICAgIC8qIE5vIHN1cHBvcnQgZm9yIGRlbWFuZ2xpbmcg dGVtcGxhdGVzLiAgKi8KKyAgICAgIGlmIChpID49IDUgJiYgc3RybmNtcCAo bWFuZ2xlLCAiX19UIiwgMykgPT0gMCkKKwlyZXR1cm4gTlVMTDsKKworICAg ICAgaWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fY3RvciIsIGkpID09IDApCisJ eworCSAgLyogQ29uc3RydWN0b3Igc3ltYm9sIGZvciBhIGNsYXNzL3N0cnVj dC4gICovCisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAidGhpcyIp OworCSAgbWFuZ2xlICs9IGk7CisJICByZXR1cm4gbWFuZ2xlOworCX0KKyAg ICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fZHRvciIsIGkpID09 IDApCisJeworCSAgLyogRGVzdHJ1Y3RvciBzeW1ib2wgZm9yIGEgY2xhc3Mv c3RydWN0LiAgKi8KKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICJ+ dGhpcyIpOworCSAgbWFuZ2xlICs9IGk7CisJICByZXR1cm4gbWFuZ2xlOwor CX0KKyAgICAgIGVsc2UgaWYgKHN0cm5jbXAgKG1hbmdsZSwgIl9fcG9zdGJs aXQiLCBpKSA9PSAwKQorCXsKKwkgIC8qIFBvc3RibGl0IHN5bWJvbCBmb3Ig YSBzdHJ1Y3QuICAqLworCSAgb2JzdGFja19ncm93X3N0ciAodGVtcGJ1Ziwg InRoaXModGhpcykiKTsKKwkgIG1hbmdsZSArPSBpOworCSAgcmV0dXJuIG1h bmdsZTsKKwl9CisgICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUsICJf X2luaXRaIiwgaSsxKSA9PSAwKQorCXsKKwkgIC8qIFRoZSBzdGF0aWMgaW5p dGlhbGlzZXIgZm9yIGEgZ2l2ZW4gc3ltYm9sLiAgKi8KKwkgIG9ic3RhY2tf Z3Jvd19zdHIgKHRlbXBidWYsICJpbml0JCIpOworCSAgbWFuZ2xlICs9IGkg KyAxOworCSAgcmV0dXJuIG1hbmdsZTsKKwl9CisgICAgICBlbHNlIGlmIChz dHJuY21wIChtYW5nbGUsICJfX0NsYXNzWiIsIGkrMSkgPT0gMCkKKwl7CisJ ICAvKiBUaGUgY2xhc3NpbmZvIHN5bWJvbCBmb3IgYSBnaXZlbiBjbGFzcy4g ICovCisJICBvYnN0YWNrX2dyb3dfc3RyICh0ZW1wYnVmLCAiY2xhc3NpbmZv JCIpOworCSAgbWFuZ2xlICs9IGkgKyAxOworCSAgcmV0dXJuIG1hbmdsZTsK Kwl9CisgICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5nbGUsICJfX3Z0Ymxa IiwgaSsxKSA9PSAwKQorCXsKKwkgIC8qIFRoZSB2dGFibGUgc3ltYm9sIGZv ciBhIGdpdmVuIGNsYXNzLiAgKi8KKwkgIG9ic3RhY2tfZ3Jvd19zdHIgKHRl bXBidWYsICJ2dGJsJCIpOworCSAgbWFuZ2xlICs9IGkgKyAxOworCSAgcmV0 dXJuIG1hbmdsZTsKKwl9CisgICAgICBlbHNlIGlmIChzdHJuY21wIChtYW5n bGUsICJfX0ludGVyZmFjZVoiLCBpKzEpID09IDApCisJeworCSAgLyogVGhl IGludGVyZmFjZSBzeW1ib2wgZm9yIGEgZ2l2ZW4gY2xhc3MuICAqLworCSAg b2JzdGFja19ncm93X3N0ciAodGVtcGJ1ZiwgImludGVyZmFjZSQiKTsKKwkg IG1hbmdsZSArPSBpICsgMTsKKwkgIHJldHVybiBtYW5nbGU7CisJfQorICAg ICAgZWxzZSBpZiAoc3RybmNtcCAobWFuZ2xlLCAiX19Nb2R1bGVJbmZvWiIs IGkrMSkgPT0gMCkKKwl7CisJICAvKiBUaGUgTW9kdWxlSW5mbyBzeW1ib2wg Zm9yIGEgZ2l2ZW4gbW9kdWxlLiAgKi8KKwkgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICJtb2R1bGVpbmZvJCIpOworCSAgbWFuZ2xlICs9IGkgKyAx OworCSAgcmV0dXJuIG1hbmdsZTsKKwl9CisgICAgICBvYnN0YWNrX2dyb3cg KHRlbXBidWYsIG1hbmdsZSwgaSk7CisgICAgICBtYW5nbGUgKz0gaTsKKyAg ICB9CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gbWFu Z2xlOworfQorCisvKiBUZXN0IHdoZXRoZXIgdGhlIGN1cnJlbnQgcG9zaXRp b24gb2YgTUFOR0xFIGlzIHBvaW50aW5nIHRvIHRoZQorICAgYmVnaW5uaW5n IG9mIGEgbWFuZ2xlZCBmdW5jdGlvbiBwYXJhbWV0ZXIgbGlzdCwgd2hpY2gg c3RhcnRzIHdpdGgKKyAgIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uICBSZXR1 cm5zIDEgb24gc3VjY2VzcyBvciAwIG9uIGZhaWx1cmUuICAqLworCitzdGF0 aWMgaW50CitjYWxsX2NvbnZlbnRpb25fcCAoY29uc3QgY2hhciAqbWFuZ2xl KQoreworICBzaXplX3QgaTsKKworICBpZiAoKG1hbmdsZSA9PSBOVUxMKSB8 fCAoKm1hbmdsZSA9PSAnXDAnKSkKKyAgICByZXR1cm4gMDsKKworICBzd2l0 Y2ggKCptYW5nbGUpCisgICAgeworICAgIGNhc2UgJ0YnOiBjYXNlICdVJzog Y2FzZSAnVic6CisgICAgY2FzZSAnVyc6IGNhc2UgJ1InOgorICAgICAgcmV0 dXJuIDE7CisKKyAgICBjYXNlICdNJzogLyogUHJlZml4IGZvciBmdW5jdGlv bnMgbmVlZGluZyAndGhpcycuICAqLworICAgICAgaSA9IDE7CisgICAgICBp ZiAobWFuZ2xlW2ldID09ICd4JykKKwlpKys7CisKKyAgICAgIHN3aXRjaCAo bWFuZ2xlW2ldKQorCXsKKwljYXNlICdGJzogY2FzZSAnVSc6IGNhc2UgJ1Yn OgorCWNhc2UgJ1cnOiBjYXNlICdSJzoKKwkgIHJldHVybiAxOworCX0KKwor ICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8q IEV4dHJhY3QgYW5kIGRlbWFuZ2xlIHRoZSBzeW1ib2wgaW4gTUFOR0xFIGFu ZCBhcHBlbmQgaXQgdG8gVEVNUEJVRi4KKyAgIFJldHVybiB0aGUgcmVtYWlu aW5nIHNpZ25hdHVyZSBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZmFpbHVyZS4g ICovCisKK2NvbnN0IGNoYXIgKgorZF9wYXJzZV9zeW1ib2wgKHN0cnVjdCBv YnN0YWNrICp0ZW1wYnVmLCBjb25zdCBjaGFyICptYW5nbGUpCit7CisgIHNp emVfdCBuID0gMDsKKyAgZG8KKyAgICB7CisgICAgICBpZiAobisrKQorCW9i c3RhY2tfZ3Jvd19zdHIgKHRlbXBidWYsICIuIik7CisKKyAgICAgIG1hbmds ZSA9IHBhcnNlX2lkZW50aWZpZXIgKHRlbXBidWYsIG1hbmdsZSk7CisKKyAg ICAgIGlmIChjYWxsX2NvbnZlbnRpb25fcCAobWFuZ2xlKSkKKwl7CisJICBj aGFyICpzYXZlZDsKKworCSAgLyogU2tpcCBvdmVyICd0aGlzJyBwYXJhbWV0 ZXIuICAqLworCSAgaWYgKCptYW5nbGUgPT0gJ00nKQorCSAgICBtYW5nbGUg Kz0gKG1hbmdsZVsxXSA9PSAneCcpID8gMiA6IDE7CisKKwkgIC8qIFNraXAg b3ZlciBjYWxsaW5nIGNvbnZlbnRpb24gYW5kIGF0dHJpYnV0ZXMgaW4gcXVh bGlmaWVkIG5hbWUuICAqLworCSAgc2F2ZWQgPSBvYnN0YWNrX25leHRfZnJl ZSAodGVtcGJ1Zik7CisJICBtYW5nbGUgPSBwYXJzZV9jYWxsX2NvbnZlbnRp b24gKHRlbXBidWYsIG1hbmdsZSk7CisJICBtYW5nbGUgPSBwYXJzZV9hdHRy aWJ1dGVzICh0ZW1wYnVmLCBtYW5nbGUpOworCSAgb2JzdGFja19uZXh0X2Zy ZWUgKHRlbXBidWYpID0gc2F2ZWQ7CisKKwkgIG9ic3RhY2tfZ3Jvd19zdHIg KHRlbXBidWYsICIoIik7CisJICBtYW5nbGUgPSBwYXJzZV9mdW5jdGlvbl9h cmdzICh0ZW1wYnVmLCBtYW5nbGUpOworCSAgb2JzdGFja19ncm93X3N0ciAo dGVtcGJ1ZiwgIikiKTsKKworCSAgLyogRGVtYW5nbGUgdGhlIGZ1bmN0aW9u IHJldHVybiB0eXBlIGFzIGEga2luZCBvZiBzYW5pdHkgdGVzdC4gICovCisJ ICBpZiAoKG1hbmdsZSAhPSBOVUxMKSAmJiAhSVNESUdJVCAoKm1hbmdsZSkp CisJICAgIHsKKwkgICAgICBzYXZlZCA9IG9ic3RhY2tfbmV4dF9mcmVlICh0 ZW1wYnVmKTsKKwkgICAgICBtYW5nbGUgPSBwYXJzZV90eXBlICh0ZW1wYnVm LCBtYW5nbGUpOworCSAgICAgIG9ic3RhY2tfbmV4dF9mcmVlICh0ZW1wYnVm KSA9IHNhdmVkOworCSAgICB9CisJfQorICAgIH0KKyAgd2hpbGUgKChtYW5n bGUgIT0gTlVMTCkgJiYgSVNESUdJVCAoKm1hbmdsZSkpOworCisgIHJldHVy biBtYW5nbGU7Cit9CisK --047d7b6776002f7eab04efb78a3d--