From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 12BCD3858402 for ; Wed, 31 Jan 2024 02:45:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 12BCD3858402 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 12BCD3858402 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706669150; cv=none; b=VzZR6qOm+SXyudwqGgCqL9Ccpc7psW70HxW8amylVk+56JNsYxqVHUwAjceOWZ1v6pslJWcZI6pNL60ECCIh76ZpAn+goR4mRZstM19Ya4mhfsLx4TZxM/JHJEOZ9sWB/MvRNnVpc5O1KdogzQVg+IZHo4fpYFRA6ne57ewyKE0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706669150; c=relaxed/simple; bh=pMXdOunf/lh1+FJ8E7FfBF42pBTefOqaVqoHBOGiPoY=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=TE1x/qMbaSPYjGY1kkGDDSdONg2hxXTxI4Jh/Dx9fpfhtlqXV+Fev73SWwXZiBv8o/s08G+WVZkQLftrURXEToD7Gw77L7oiDsoiWFpVUPztcL0JnFnJ90lfsWOkzBII/ckLRDiYl1NP/YKc/0p+ba+FRTfVQNJ9HUPGHRjRep4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1706669147; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=oL7kduIErmorH9oK7TMWahtZ6IlK5NaBMeaDY3eFE5A=; b=S+F7PF+nASwFAPSA2jGhJjQlu3e6nz8+3Kyb653gTgwrnts5hOyQoMSDPN8O1WUyol2grb myzFGh8WUvmohtv/AuD5gn0Mee1DLsOjYlHg1drSeTS9aZG97rzXjljSVR5nL08u0gt8Y6 RkNSH93wAMKgnoE2CT5m9lME3B4lLgQ= Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-104-x40UpavjNNqHKwQZBK5VKg-1; Tue, 30 Jan 2024 21:45:45 -0500 X-MC-Unique: x40UpavjNNqHKwQZBK5VKg-1 Received: by mail-lf1-f72.google.com with SMTP id 2adb3069b0e04-511149fb8ccso194519e87.0 for ; Tue, 30 Jan 2024 18:45:45 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706669143; x=1707273943; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7TBEu8U7iOHMo88TlYvOH3R0FQmd/oJbQrOlB6DX4Ho=; b=EDbpyG+6erzjkXr5AFTzlmVH4aQbu/zXmcm8xHwRAEme8/0hOqdHoQRCV9aDKZdD/j FmxJRLNyLHoBEWcMYw5EV0Q63aLJ42sPNM+bxLXHE3oRhQM12MEtinj9sbYaxNB7EGJX /vdYhAjXrxmnCCzauHVWXj6q6uSuGWpN4u1R4aWFQPWWPmJXUEZORh/K4mFpd/jyr+qL fk9mOP7wnx8jtxfcXD1lUsMGvrcYBbq4uhAlTzrpc0vHwme6MZ8+Ekd2+DFi9CFbqxJ3 FSpR8QFcj370BxtwhFXH/SE84xTgHl+JIcJ1dHch48gWCBq2rpREjk8q7QAcLIpuaIMn PNGw== X-Gm-Message-State: AOJu0YyJnS4DS9NU7BtlJXAfzWRHNXBuDjjeHfcFEfE1B3vX1HUQiApE Yuj1EzDFnv5hrSNQ80TDRd07qrgKAQGmTB0LauNbq/+HOgCd1rnMBQhOoY9ExQtlJWk8D6+olZA nRYoR8y+A2GIXG807OP+y7W9br0E1N8dGb6RPvm9uYAzvNFYpNRH65C+qr7h3k+XLDui0V0b7+m NtaOBa7PD88gxGEV6vI4JfLWFncb9zyvA6l06azrjFUrg5/Bg= X-Received: by 2002:a05:6512:40d:b0:50e:bc4f:19d3 with SMTP id u13-20020a056512040d00b0050ebc4f19d3mr69916lfk.25.1706669143546; Tue, 30 Jan 2024 18:45:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IG70q/AuNUAPgrxEbmUrQBvVbDBqTfCh2AJ+dz4jMjIA7AxgvbXCD8ZRcOeQt0+ZI/qO8SAnIdvcYy7jjFhPSE= X-Received: by 2002:a05:6512:40d:b0:50e:bc4f:19d3 with SMTP id u13-20020a056512040d00b0050ebc4f19d3mr69912lfk.25.1706669143181; Tue, 30 Jan 2024 18:45:43 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Di Chen Date: Wed, 31 Jan 2024 10:45:31 +0800 Message-ID: Subject: Re: [PATCH] PR29997: Fix the symbol aliases search failure when symbol version is missing To: Aaron Merey Cc: systemtap@sourceware.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="0000000000000782b6061034e084" X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000000782b6061034e084 Content-Type: multipart/alternative; boundary="0000000000000782b5061034e082" --0000000000000782b5061034e082 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Aaron, Re-submitted with: 1) Indentation improvement. 2) Remove the wildcard handling in "iterate_single_function". 3) Add examples in the commit message. On Thu, Jan 18, 2024 at 8:15=E2=80=AFAM Aaron Merey wro= te: > Hi Di, > > Thanks for the patch. > > On Tue, Dec 19, 2023 at 9:56=E2=80=AFPM Di Chen wrote: > > > > Hey Aaron, > > > > I have added the wildcard handling for the PR29997. > > > > From 0c95ce19272d6e13abf6f41c4ae29b6aa925ca20 Mon Sep 17 00:00:00 2001 > > From: Di Chen > > Date: Sun, 5 Nov 2023 11:23:50 +0800 > > Subject: [PATCH] PR29997: Fix the symbol aliases search failure when > symbol > > version is missing > > > > After calling module_info::update_symtab, function aliases will be > > populated. Then the updated symtab will be used for symbol searching. > > > > For the _IO_new_fopen familty with the aliases: > > > > $ eu-readelf -s /lib64/libc.so.6 | grep 0000000000077440 > > 247: 0000000000077440 14 FUNC WEAK DEFAULT 16 fopen6= 4@ > @GLIBC_2.2.5 > > 1014: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 fopen@ > @GLIBC_2.2.5 > > 1028: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 > _IO_fopen@@GLIBC_2.2.5 > > 1556: 0000000000077440 14 FUNC LOCAL DEFAULT 16 > _IO_fopen64 > > 3471: 0000000000077440 14 FUNC LOCAL DEFAULT 16 > __new_fopen > > 4765: 0000000000077440 14 FUNC LOCAL DEFAULT 16 > _IO_new_fopen > > 5110: 0000000000077440 14 FUNC WEAK DEFAULT 16 fopen64 > > 7198: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 fopen@ > @GLIBC_2.2.5 > > 7433: 0000000000077440 14 FUNC GLOBAL DEFAULT 16 > _IO_fopen@@GLIBC_2.2.5 > > > > a) fopen@@GLIBC_2.2.5 exists in the updated symtab > > b) fopen does not exist in the updated symtab > > > > This PR is to add a version info padding when symbol cannot be found in > > the updated symtab. > > > > Signed-off-by: Di Chen > > --- > > dwflpp.cxx | 44 +++++++++++++++++++++++++++++++++++++++++++- > > 1 file changed, 43 insertions(+), 1 deletion(-) > > > > diff --git a/dwflpp.cxx b/dwflpp.cxx > > index 9fccca0a9..044b0ca97 100644 > > --- a/dwflpp.cxx > > +++ b/dwflpp.cxx > > @@ -1055,6 +1055,15 @@ dwflpp::iterate_over_functions(int > (*callback)(Dwarf_Die*, void*), > > } > > > > auto range =3D v->equal_range(function); > > + // version padding if the symbol is not found > > + if (range.first =3D=3D range.second) > > + { > > + std::string function_with_ver =3D function + "@"; > > + for (auto it =3D v->begin(); it !=3D v->end(); ++it) > > + if (it->first.find(function_with_ver) =3D=3D 0) > > + function_with_ver =3D it->first; > > + range =3D v->equal_range(function_with_ver); > > + } > > Just a nit but there should be another 2 spaces of indentation for the > lines between these braces. > > > if (range.first !=3D range.second) > > { > > for (auto it =3D range.first; it !=3D range.second; ++it) > > @@ -1098,7 +1107,10 @@ dwflpp::iterate_over_functions(int > (*callback)(Dwarf_Die*, void*), > > if (pending_interrupts) return DWARF_CB_ABORT; > > const string& func_name =3D it->first; > > Dwarf_Die& die =3D it->second; > > - if (function_name_matches_pattern (func_name, function)) > > + > > + // version padding if the pattern is not matched > > + if ((function_name_matches_pattern (func_name, function)) || > > + (function_name_matches_pattern (func_name, function + > "@*"))) > > Nice, this fixes the issue where names containing wildcards and version > info aren't found. > > > { > > if (sess.verbose > 4) > > clog << _F("function cache %s:%s match %s vs %s", > module_name.c_str(), > > @@ -1141,6 +1153,15 @@ dwflpp::iterate_single_function(int > (*callback)(Dwarf_Die*, void*), > > } > > > > auto range =3D v->equal_range(function); > > + // version padding if the symbol is not found > > + if (range.first =3D=3D range.second) > > + { > > + std::string function_with_ver =3D function + "@"; > > + for (auto it =3D v->begin(); it !=3D v->end(); ++it) > > + if (it->first.find(function_with_ver) =3D=3D 0) > > + function_with_ver =3D it->first; > > + range =3D v->equal_range(function_with_ver); > > + } > > if (range.first !=3D range.second) > > { > > for (auto it =3D range.first; it !=3D range.second; ++it) > > @@ -1158,6 +1179,27 @@ dwflpp::iterate_single_function(int > (*callback)(Dwarf_Die*, void*), > > if (rc !=3D DWARF_CB_OK) break; > > } > > } > > + else if (name_has_wildcard (function)) > > + { > > + for (auto it =3D v->begin(); it !=3D v->end(); ++it) > > + { > > + if (pending_interrupts) return DWARF_CB_ABORT; > > + const string& func_name =3D it->first; > > + Dwarf_Die& die =3D it->second; > > + > > + // version padding if the pattern is not matched > > + if ((function_name_matches_pattern (func_name, function)) || > > + (function_name_matches_pattern (func_name, function + > "@*"))) > > + { > > + if (sess.verbose > 4) > > + clog << _F("function cache %s:%s match %s vs %s", > module_name.c_str(), > > + cu_name().c_str(), func_name.c_str(), > function.c_str()) << endl; > > + > > + rc =3D (*callback)(& die, data); > > + if (rc !=3D DWARF_CB_OK) break; > > + } > > + } > > + } > > Do we need to include wildcard handling here? Since this function didn't > originally include any wildcard handling, I'd assume that searches for > names with wildcards would always go through dwflpp::iterate_over_functio= ns > instead. > > > > > // undo the focus_on_cu > > this->cu =3D NULL; > > -- > > 2.41.0 > > I was also thinking about whether we should include "@" handling for > mangled C++ names as well in dwflpp::iterate_over_functions. I > experimented with trying to list probe points with mangled function names > that include version info. eu-readelf shows some mangled names with > "@" in the stap binary. However it looks like these names > never appear among the linkage_names from dwarf_linkage_name that are > searched for a match. > > For example, "_ZSt24__throw_out_of_range_fmtPKcz@GLIBCXX_3.4.20" is > list by eu-readelf in my locally built stap binary but it doesn't > appear in a dump of linkage_names search during `stap -L > > 'process("/usr/local/bin/stap").function("_ZSt24__throw_out_of_range_fmtP= Kcz")'`. > > This might be a bug or possibly a limitation of dwarf_linkage_name. > However this goes beyond the scope of your patch so it's ok to not > address this in your patch. > > Aaron > ~ > > --0000000000000782b5061034e082-- --0000000000000782b6061034e084 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-PR29997-Fix-the-symbol-aliases-search-failure-when-s.patch" Content-Disposition: attachment; filename="0001-PR29997-Fix-the-symbol-aliases-search-failure-when-s.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls16oiy40 RnJvbSBjMTQ2MmE1YjkwNGQxYWZmMDQ0ZDc2ZmM4Yzk3MTdhMjQzYmIxODJl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEaSBDaGVuIDxkaWNo ZW5AcmVkaGF0LmNvbT4KRGF0ZTogV2VkLCAzMSBKYW4gMjAyNCAxMDoyNToz NSArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFBSMjk5OTc6IEZpeCB0aGUgc3lt Ym9sIGFsaWFzZXMgc2VhcmNoIGZhaWx1cmUgd2hlbiBzeW1ib2wKIHZlcnNp b24gaXMgbWlzc2luZwoKQWZ0ZXIgY2FsbGluZyBtb2R1bGVfaW5mbzo6dXBk YXRlX3N5bXRhYiwgZnVuY3Rpb24gYWxpYXNlcyB3aWxsIGJlCnBvcHVsYXRl ZC4gVGhlbiB0aGUgdXBkYXRlZCBzeW10YWIgd2lsbCBiZSB1c2VkIGZvciBz eW1ib2wgc2VhcmNoaW5nLgoKRm9yIHRoZSBfSU9fbmV3X2ZvcGVuIGZhbWls eSB3aXRoIHRoZSBhbGlhc2VzOgoKICAkIGV1LXJlYWRlbGYgLXMgL2xpYjY0 L2xpYmMuc28uNiAgfCBncmVwIDAwMDAwMDAwMDAwNzc0NDAKICAgIDI0Nzog MDAwMDAwMDAwMDA3NzQ0MCAgICAgMTQgRlVOQyAgICBXRUFLICAgREVGQVVM VCAgICAgICAxNiBmb3BlbjY0QEBHTElCQ18yLjIuNQogICAxMDE0OiAwMDAw MDAwMDAwMDc3NDQwICAgICAxNCBGVU5DICAgIEdMT0JBTCBERUZBVUxUICAg ICAgIDE2IGZvcGVuQEBHTElCQ18yLjIuNQogICAxMDI4OiAwMDAwMDAwMDAw MDc3NDQwICAgICAxNCBGVU5DICAgIEdMT0JBTCBERUZBVUxUICAgICAgIDE2 IF9JT19mb3BlbkBAR0xJQkNfMi4yLjUKICAgMTU1NjogMDAwMDAwMDAwMDA3 NzQ0MCAgICAgMTQgRlVOQyAgICBMT0NBTCAgREVGQVVMVCAgICAgICAxNiBf SU9fZm9wZW42NAogICAzNDcxOiAwMDAwMDAwMDAwMDc3NDQwICAgICAxNCBG VU5DICAgIExPQ0FMICBERUZBVUxUICAgICAgIDE2IF9fbmV3X2ZvcGVuCiAg IDQ3NjU6IDAwMDAwMDAwMDAwNzc0NDAgICAgIDE0IEZVTkMgICAgTE9DQUwg IERFRkFVTFQgICAgICAgMTYgX0lPX25ld19mb3BlbgogICA1MTEwOiAwMDAw MDAwMDAwMDc3NDQwICAgICAxNCBGVU5DICAgIFdFQUsgICBERUZBVUxUICAg ICAgIDE2IGZvcGVuNjQKICAgNzE5ODogMDAwMDAwMDAwMDA3NzQ0MCAgICAg MTQgRlVOQyAgICBHTE9CQUwgREVGQVVMVCAgICAgICAxNiBmb3BlbkBAR0xJ QkNfMi4yLjUKICAgNzQzMzogMDAwMDAwMDAwMDA3NzQ0MCAgICAgMTQgRlVO QyAgICBHTE9CQUwgREVGQVVMVCAgICAgICAxNiBfSU9fZm9wZW5AQEdMSUJD XzIuMi41CgogIGEpIGZvcGVuQEBHTElCQ18yLjIuNSBleGlzdHMgaW4gdGhl IHVwZGF0ZWQgc3ltdGFiCiAgYikgZm9wZW4gZG9lcyBub3QgZXhpc3QgaW4g dGhlIHVwZGF0ZWQgc3ltdGFiCgpUaGlzIFBSIGlzIHRvIGFkZCBhIHZlcnNp b24gaW5mbyBwYWRkaW5nIHdoZW4gc3ltYm9sIGNhbm5vdCBiZSBmb3VuZCBp bgp0aGUgdXBkYXRlZCBzeW10YWIsIHNvIHN5c3RlbWFwIGNhbiBzdXBwb3J0 IHNlYXJjaGluZyBzeW1ib2wgYWxpYXNlcyBsaWtlCnRoaXM6CgogICQgc3Rh cCAtTCAncHJvY2VzcygiL2xpYjY0L2xpYmMuc28uNiIpLmZ1bmN0aW9uKCJm b3BlbiIpJwogICMgQW5kIHdpdGggd2lsZGNhcmQsIGxpa2UgdGhpcwogICQg c3RhcCAtTCAncHJvY2VzcygiL2xpYjY0L2xpYmMuc28uNiIpLmZ1bmN0aW9u KCJmbyplbiIpJwoKU2lnbmVkLW9mZi1ieTogRGkgQ2hlbiA8ZGljaGVuQHJl ZGhhdC5jb20+Ci0tLQogZHdmbHBwLmN4eCB8IDIzICsrKysrKysrKysrKysr KysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2R3ZmxwcC5jeHggYi9kd2Zs cHAuY3h4CmluZGV4IDlmY2NjYTBhOS4uMjZlOTE0NGNkIDEwMDY0NAotLS0g YS9kd2ZscHAuY3h4CisrKyBiL2R3ZmxwcC5jeHgKQEAgLTEwNTUsNiArMTA1 NSwxNSBAQCBkd2ZscHA6Oml0ZXJhdGVfb3Zlcl9mdW5jdGlvbnM8dm9pZD4o aW50ICgqY2FsbGJhY2spKER3YXJmX0RpZSosIHZvaWQqKSwKICAgICB9CiAK ICAgYXV0byByYW5nZSA9IHYtPmVxdWFsX3JhbmdlKGZ1bmN0aW9uKTsKKyAg Ly8gdmVyc2lvbiBwYWRkaW5nIGlmIHRoZSBzeW1ib2wgaXMgbm90IGZvdW5k CisgIGlmIChyYW5nZS5maXJzdCA9PSByYW5nZS5zZWNvbmQpCisgICAgewor ICAgICAgc3RkOjpzdHJpbmcgZnVuY3Rpb25fd2l0aF92ZXIgPSBmdW5jdGlv biArICJAIjsKKyAgICAgIGZvciAoYXV0byBpdCA9IHYtPmJlZ2luKCk7IGl0 ICE9IHYtPmVuZCgpOyArK2l0KQorICAgICAgICBpZiAoaXQtPmZpcnN0LmZp bmQoZnVuY3Rpb25fd2l0aF92ZXIpID09IDApCisgICAgICAgICAgZnVuY3Rp b25fd2l0aF92ZXIgPSBpdC0+Zmlyc3Q7CisgICAgICByYW5nZSA9IHYtPmVx dWFsX3JhbmdlKGZ1bmN0aW9uX3dpdGhfdmVyKTsKKyAgICB9CiAgIGlmIChy YW5nZS5maXJzdCAhPSByYW5nZS5zZWNvbmQpCiAgICAgewogICAgICAgZm9y IChhdXRvIGl0ID0gcmFuZ2UuZmlyc3Q7IGl0ICE9IHJhbmdlLnNlY29uZDsg KytpdCkKQEAgLTEwOTgsNyArMTEwNywxMCBAQCBkd2ZscHA6Oml0ZXJhdGVf b3Zlcl9mdW5jdGlvbnM8dm9pZD4oaW50ICgqY2FsbGJhY2spKER3YXJmX0Rp ZSosIHZvaWQqKSwKICAgICAgICAgICBpZiAocGVuZGluZ19pbnRlcnJ1cHRz KSByZXR1cm4gRFdBUkZfQ0JfQUJPUlQ7CiAgICAgICAgICAgY29uc3Qgc3Ry aW5nJiBmdW5jX25hbWUgPSBpdC0+Zmlyc3Q7CiAgICAgICAgICAgRHdhcmZf RGllJiBkaWUgPSBpdC0+c2Vjb25kOwotICAgICAgICAgIGlmIChmdW5jdGlv bl9uYW1lX21hdGNoZXNfcGF0dGVybiAoZnVuY19uYW1lLCBmdW5jdGlvbikp CisKKyAgICAgICAgICAvLyB2ZXJzaW9uIHBhZGRpbmcgaWYgdGhlIHBhdHRl cm4gaXMgbm90IG1hdGNoZWQKKyAgICAgICAgICBpZiAoKGZ1bmN0aW9uX25h bWVfbWF0Y2hlc19wYXR0ZXJuIChmdW5jX25hbWUsIGZ1bmN0aW9uKSkgfHwK KyAgICAgICAgICAgICAgKGZ1bmN0aW9uX25hbWVfbWF0Y2hlc19wYXR0ZXJu IChmdW5jX25hbWUsIGZ1bmN0aW9uICsgIkAqIikpKQogICAgICAgICAgICAg ewogICAgICAgICAgICAgICBpZiAoc2Vzcy52ZXJib3NlID4gNCkKICAgICAg ICAgICAgICAgICBjbG9nIDw8IF9GKCJmdW5jdGlvbiBjYWNoZSAlczolcyBt YXRjaCAlcyB2cyAlcyIsIG1vZHVsZV9uYW1lLmNfc3RyKCksCkBAIC0xMTQx LDYgKzExNTMsMTUgQEAgZHdmbHBwOjppdGVyYXRlX3NpbmdsZV9mdW5jdGlv bjx2b2lkPihpbnQgKCpjYWxsYmFjaykoRHdhcmZfRGllKiwgdm9pZCopLAog ICAgIH0KIAogICBhdXRvIHJhbmdlID0gdi0+ZXF1YWxfcmFuZ2UoZnVuY3Rp b24pOworICAvLyB2ZXJzaW9uIHBhZGRpbmcgaWYgdGhlIHN5bWJvbCBpcyBu b3QgZm91bmQKKyAgaWYgKHJhbmdlLmZpcnN0ID09IHJhbmdlLnNlY29uZCkK KyAgICB7CisgICAgICBzdGQ6OnN0cmluZyBmdW5jdGlvbl93aXRoX3ZlciA9 IGZ1bmN0aW9uICsgIkAiOworICAgICAgZm9yIChhdXRvIGl0ID0gdi0+YmVn aW4oKTsgaXQgIT0gdi0+ZW5kKCk7ICsraXQpCisgICAgICAgIGlmIChpdC0+ Zmlyc3QuZmluZChmdW5jdGlvbl93aXRoX3ZlcikgPT0gMCkKKyAgICAgICAg ICBmdW5jdGlvbl93aXRoX3ZlciA9IGl0LT5maXJzdDsKKyAgICAgIHJhbmdl ID0gdi0+ZXF1YWxfcmFuZ2UoZnVuY3Rpb25fd2l0aF92ZXIpOworICAgIH0K ICAgaWYgKHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCkKICAgICB7CiAg ICAgICBmb3IgKGF1dG8gaXQgPSByYW5nZS5maXJzdDsgaXQgIT0gcmFuZ2Uu c2Vjb25kOyArK2l0KQotLSAKMi40MS4wCgo= --0000000000000782b6061034e084--