From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26773 invoked by alias); 29 Mar 2013 07:43:53 -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 26749 invoked by uid 89); 29 Mar 2013 07:43:42 -0000 X-Spam-SWARE-Status: No, score=-4.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_DB,TW_FW autolearn=ham version=3.3.1 Received: from mail-ob0-f172.google.com (HELO mail-ob0-f172.google.com) (209.85.214.172) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Fri, 29 Mar 2013 07:43:39 +0000 Received: by mail-ob0-f172.google.com with SMTP id tb18so227354obb.31 for ; Fri, 29 Mar 2013 00:43:37 -0700 (PDT) X-Received: by 10.182.72.5 with SMTP id z5mr564486obu.24.1364543017625; Fri, 29 Mar 2013 00:43:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.60.13.133 with HTTP; Fri, 29 Mar 2013 00:42:57 -0700 (PDT) In-Reply-To: <5154378D.60302@redhat.com> References: <514BF736.3070706@mentor.com> <514C3C85.4000704@codesourcery.com> <514EEBFF.8090705@redhat.com> <5154378D.60302@redhat.com> From: Hui Zhu Date: Fri, 29 Mar 2013 15:50:00 -0000 Message-ID: Subject: Re: [PATCH] Fix dprintf work not right if it is pending To: Keith Seitz Cc: Hui Zhu , gdb-patches ml Content-Type: multipart/mixed; boundary=f46d04478533d8ac7f04d90b6dff X-Virus-Found: No X-SW-Source: 2013-03/txt/msg01102.txt.bz2 --f46d04478533d8ac7f04d90b6dff Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1702 Hi Keith, Thanks for your review. On Thu, Mar 28, 2013 at 8:29 PM, Keith Seitz wrote: > On 03/25/2013 11:41 PM, Hui Zhu wrote: >> >> --- a/gdb/breakpoint.c >> +++ b/gdb/breakpoint.c >> @@ -12963,6 +12963,15 @@ bkpt_re_set (struct breakpoint *b) >> breakpoint_re_set_default (b); >> } >> >> +static void >> +dprintf_re_set (struct breakpoint *b) >> +{ > > > This function needs a comment, even if it just mentions that this function > is the re_set method for dprintf breakpoints. Fixed. > >> + breakpoint_re_set_default (b); >> + >> + if (b->extra_string != NULL) >> + update_dprintf_command_list (b); >> +} >> + > > > This will update the command list every time breakpoints are reset and could > be limited to only those needing updating. Is there perhaps a reason to > always do this? I think it need, because it need to generate different commands with different status for example: if (target_can_run_breakpoint_commands ()) printf_line = xstrprintf ("agent-printf %s", dprintf_args); > >> --- /dev/null >> +++ b/gdb/testsuite/gdb.base/dprintf-pending.c >> @@ -0,0 +1,31 @@ >> +/* This testcase is part of GDB, the GNU debugger. >> + >> + Copyright 2004-2013 Free Software Foundation, Inc. > > ^^^^^^^^^ > I think you meant only 2013. :-) Fixed. > >> --- /dev/null >> +++ b/gdb/testsuite/gdb.base/dprintf-pending.exp >> + >> +if [get_compiler_info] { >> + return -1 >> +} > > > Can you please add braces around the expression here? [Yeah, that's a nit, > but it is one of my Tcl pet peeves, and this is a new file. Time to stomp > out the old crud.] Fixed. Post the new version according to your comments. Best, Hui > > Keith --f46d04478533d8ac7f04d90b6dff Content-Type: text/plain; charset=US-ASCII; name="dprintf-pending.txt" Content-Disposition: attachment; filename="dprintf-pending.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hev1naf30 Content-length: 997 LS0tIGEvZ2RiL2JyZWFrcG9pbnQuYworKysgYi9nZGIvYnJlYWtwb2ludC5j CkBAIC0xMjk2Myw2ICsxMjk2MywxNyBAQCBia3B0X3JlX3NldCAoc3RydWN0 IGJyZWFrcG9pbnQgKmIpCiAgIGJyZWFrcG9pbnRfcmVfc2V0X2RlZmF1bHQg KGIpOwogfQogCisvKiBEcHJpbnRmIGJyZWFrcG9pbnRfb3BzIG1ldGhvZHMu ICAqLworCitzdGF0aWMgdm9pZAorZHByaW50Zl9yZV9zZXQgKHN0cnVjdCBi cmVha3BvaW50ICpiKQoreworICBicmVha3BvaW50X3JlX3NldF9kZWZhdWx0 IChiKTsKKworICBpZiAoYi0+ZXh0cmFfc3RyaW5nICE9IE5VTEwpCisgICAg dXBkYXRlX2RwcmludGZfY29tbWFuZF9saXN0IChiKTsKK30KKwogc3RhdGlj IGludAogYmtwdF9pbnNlcnRfbG9jYXRpb24gKHN0cnVjdCBicF9sb2NhdGlv biAqYmwpCiB7CkBAIC0xNjAwMSw3ICsxNjAxMiw3IEBAIGluaXRpYWxpemVf YnJlYWtwb2ludF9vcHMgKHZvaWQpCiAKICAgb3BzID0gJmRwcmludGZfYnJl YWtwb2ludF9vcHM7CiAgICpvcHMgPSBia3B0X2Jhc2VfYnJlYWtwb2ludF9v cHM7Ci0gIG9wcy0+cmVfc2V0ID0gYmtwdF9yZV9zZXQ7CisgIG9wcy0+cmVf c2V0ID0gZHByaW50Zl9yZV9zZXQ7CiAgIG9wcy0+cmVzb3VyY2VzX25lZWRl ZCA9IGJrcHRfcmVzb3VyY2VzX25lZWRlZDsKICAgb3BzLT5wcmludF9pdCA9 IGJrcHRfcHJpbnRfaXQ7CiAgIG9wcy0+cHJpbnRfbWVudGlvbiA9IGJrcHRf cHJpbnRfbWVudGlvbjsK --f46d04478533d8ac7f04d90b6dff Content-Type: text/plain; charset=US-ASCII; name="dprintf-pending-test.txt" Content-Disposition: attachment; filename="dprintf-pending-test.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hev1nafb1 Content-length: 7898 LS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9NYWtlZmlsZS5pbgorKysg Yi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL01ha2VmaWxlLmluCkBAIC0xMCw3 ICsxMCw4IEBAIEVYRUNVVEFCTEVTID0gYTItcnVuIGFkdmFuY2UgYWxsLXR5 cGVzIGEKIAljYWxsLXN0cnMgY2FsbGV4aXQgY2FsbGZ1bmNzIGNhbGxmd21h bGwgY2hhcnNldCBjaGVja3BvaW50IFwKIAljaG5nLXN5bXMgY29kZV9lbGlt MSBjb2RlX2VsaW0yIGNvbW1hbmRzIGNvbXBpbGVyIGNvbXBsZXggXAogCWNv bmRicmVhayBjb25zZWN1dGl2ZSBjb25zdHZhcnMgY29yZW1ha2VyIGN1cnNh bCBjdmV4cHIgXAotCWRieC10ZXN0IGRlbCBkaXNhc20tZW5kLWN1IGRpc3Bs YXkgZHVtcCBkdXAtc2VjdCBkdXAtc2VjdC5kZWJ1ZyBcCisJZGJ4LXRlc3Qg ZGVsIGRpc2FzbS1lbmQtY3UgZGlzcGxheSBkcHJpbnRmLXBlbmRpbmcgZHVt cCBkdXAtc2VjdCBcCisJZHVwLXNlY3QuZGVidWcgXAogCWR1cC1zZWN0LnN0 cmlwcGVkIGVuZGluZy1ydW4gZXhlY2QtcHJvZyBleHBhbmQtcHN5bXRhYnMg ZXhwcnMgXAogCWZpbGVpbyBmaW5kIGZpbmlzaCBmaXhzZWN0aW9uIGZsb2F0 IGZvbGwtZXhlYyBmb2xsLWZvcmsgZm9sbC12Zm9yayBcCiAJZnJhbWUtYXJn cyBmcmVlYnBjbWQgZnVsbG5hbWUgZnVuY2FyZ3MgZ2NvcmUgXApAQCAtNDQs NyArNDUsNyBAQCBFWEVDVVRBQkxFUyA9IGEyLXJ1biBhZHZhbmNlIGFsbC10 eXBlcyBhCiAJd2NoYXIgd2hhdGlzIHdoYXRpcy1leHAgY2F0Y2gtc3lzY2Fs bCBcCiAJcHIxMDE3OSBnbnVfdmVjdG9yCiAKLU1JU0NFTExBTkVPVVMgPSBj b3JlbW1hcC5kYXRhIC4uL2Zvb2Jhci5iYXogZml4c2VjdHNoci5zbCBcCitN SVNDRUxMQU5FT1VTID0gY29yZW1tYXAuZGF0YSBkcHJpbnRmLXBlbmRzaHIu c2wgLi4vZm9vYmFyLmJheiBmaXhzZWN0c2hyLnNsIFwKIAlwZW5kc2hyLnNs IHNocmVsb2MxLnNsIHNocmVsb2MyLnNsIHR3aWNlLXRtcC5jIFwKIAlzaHIx LnNsIHNocjIuc2wgc29saWJfc2wuc2wgc29saWIxLnNsIHNvbGliMi5zbCBc CiAJdW5sb2Fkc2hyLnNsIHVubG9hZHNocjIuc2wgd2F0Y2hwb2ludC1zb2xp Yi1zaHIuc2wgXAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUv Z2RiLmJhc2UvZHByaW50Zi1wZW5kaW5nLmMKQEAgLTAsMCArMSwzMSBAQAor LyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1 Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisK KyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgayA9IDA7CisKK2V4dGVybiB2 b2lkIHBlbmRmdW5jIChpbnQgeCk7CisKK2ludCBtYWluKCkKK3sKKyAgcGVu ZGZ1bmMgKDMpOyAvKiBicmVhayBtYWluIGhlcmUgKi8KKyAgcGVuZGZ1bmMg KDQpOworICBrID0gMTsKKyAgcGVuZGZ1bmMgKDMpOworICByZXR1cm4gMDsK K30KLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNl L2RwcmludGYtcGVuZGluZy5leHAKQEAgLTAsMCArMSw5MSBAQAorIyAgIENv cHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisKK2lmIHtbc2tpcF9zaGxpYl90ZXN0c119 IHsKKyAgICByZXR1cm4gMAorfQorCitzZXQgdGVzdGZpbGUgImRwcmludGYt cGVuZGluZyIKK3NldCBsaWJmaWxlICJkcHJpbnRmLXBlbmRzaHIiCitzZXQg c3JjZmlsZSAkdGVzdGZpbGUuYworc2V0IGxpYnNyYyAgJHNyY2Rpci8kc3Vi ZGlyLyRsaWJmaWxlLmMKK3NldCBiaW5maWxlICRvYmpkaXIvJHN1YmRpci8k dGVzdGZpbGUKK3NldCBsaWJfc2wgICRvYmpkaXIvJHN1YmRpci8kbGliZmls ZS5zbAorCitzZXQgbGliX29wdHMgIGRlYnVnCitzZXQgZXhlY19vcHRzIFts aXN0IGRlYnVnIHNobGliPSRsaWJfc2xdCisKK2lmIHsgW2dldF9jb21waWxl cl9pbmZvXSB9IHsKKyAgICByZXR1cm4gLTEKK30KKworaWYgeyBbZ2RiX2Nv bXBpbGVfc2hsaWIgJGxpYnNyYyAkbGliX3NsICRsaWJfb3B0c10gIT0gIiIK KyAgICAgfHwgW2dkYl9jb21waWxlICRzcmNkaXIvJHN1YmRpci8kc3JjZmls ZSAkYmluZmlsZSBleGVjdXRhYmxlICRleGVjX29wdHNdICE9ICIifSB7Cisg ICAgdW50ZXN0ZWQgIkNvdWxkIG5vdCBjb21waWxlIGVpdGhlciAkbGlic3Jj IG9yICRzcmNkaXIvJHN1YmRpci8kc3JjZmlsZS4iCisgICAgcmV0dXJuIC0x Cit9CisKKyMgU3RhcnQgd2l0aCBhIGZyZXNoIGdkYi4KKworZ2RiX2V4aXQK K2dkYl9zdGFydAorZ2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3Vi ZGlyCisKK2dkYl90ZXN0X211bHRpcGxlICJkcHJpbnRmIHBlbmRmdW5jMSwg XCJ4PSVkXFxuXCIsIHgiICJzZXQgcGVuZGluZyBkcHJpbnRmIiB7CisgICAg IC1yZSAiLipNYWtlIGRwcmludGYgcGVuZGluZy4qeSBvciBcXFxbblxcXF0u ICQiIHsKKwkgICAgZ2RiX3Rlc3QgInkiICJEcHJpbnRmLipwZW5kZnVuYzEu KnBlbmRpbmcuIiAic2V0IHBlbmRpbmcgZHByaW50ZiAod2l0aG91dCBzeW1i b2xzKSIKKyAgICAgfQorfQorCitnZGJfdGVzdCAiaW5mbyBicmVhayIgXAor ICAgICJOdW0gICAgIFR5cGVcWyBcXStEaXNwIEVuYiBBZGRyZXNzXFsgXF0r V2hhdC4qCitcWzAtOVxdK1xbXHQgXF0rZHByaW50Zi4qa2VlcCB5LipQRU5E SU5HLipwZW5kZnVuYzEuKiIgXAorInNpbmdsZSBwZW5kaW5nIGRwcmludGYg aW5mbyAod2l0aG91dCBzeW1ib2xzKSIKKworZ2RiX2xvYWQgJHtiaW5maWxl fQorZ2RiX2xvYWRfc2hsaWJzICRsaWJfc2wKKworZ2RiX3J1bl9jbWQKKwor Z2RiX3Rlc3QgIiIgIi4qeD0zLip4PTQuKng9My4qIiAicnVuIHRvIHJlc29s dmVkIGRwcmludGYgKHdpdGhvdXQgc3ltYm9scykiCisKKyMgUmVzdGFydCB3 aXRoIGEgZnJlc2ggZ2RiLgorCitnZGJfZXhpdAorZ2RiX3N0YXJ0CitnZGJf cmVpbml0aWFsaXplX2RpciAkc3JjZGlyLyRzdWJkaXIKKworZ2RiX2xvYWQg JHtiaW5maWxlfQorZ2RiX2xvYWRfc2hsaWJzICRsaWJfc2wKKworIworIyBU ZXN0IHNldHRpbmcsIHF1ZXJ5aW5nLCBhbmQgbW9kaWZ5aW5nIHBlbmRpbmcg YnJlYWtwb2ludHMKKyMKKworZ2RiX3Rlc3RfbXVsdGlwbGUgImRwcmludGYg cGVuZGZ1bmMxLCBcIng9JWRcXG5cIiwgeCIgInNldCBwZW5kaW5nIGRwcmlu dGYiIHsKKyAgICAgLXJlICIuKk1ha2UgZHByaW50ZiBwZW5kaW5nLip5IG9y IFxcXFtuXFxcXS4gJCIgeworCSAgICBnZGJfdGVzdCAieSIgIkRwcmludGYu KnBlbmRmdW5jMS4qcGVuZGluZy4iICJzZXQgcGVuZGluZyBkcHJpbnRmIgor ICAgICB9Cit9CisKK2dkYl90ZXN0ICJpbmZvIGJyZWFrIiBcCisgICAgIk51 bSAgICAgVHlwZVxbIFxdK0Rpc3AgRW5iIEFkZHJlc3NcWyBcXStXaGF0LioK K1xbMC05XF0rXFtcdCBcXStkcHJpbnRmLiprZWVwIHkuKlBFTkRJTkcuKnBl bmRmdW5jMS4qIiBcCisic2luZ2xlIHBlbmRpbmcgZHByaW50ZiBpbmZvICh3 aXRob3V0IHN5bWJvbHMpIgorCitnZGJfcnVuX2NtZAorCitnZGJfdGVzdCAi IiAiLip4PTMuKng9NC4qeD0zLioiICJydW4gdG8gcmVzb2x2ZWQgZHByaW50 ZiIKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNl L2RwcmludGYtcGVuZHNoci5jCkBAIC0wLDAgKzEsMjggQEAKKy8qIFRoaXMg dGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisK KyAgIENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVk ZSA8c3RkaW8uaD4KKwordm9pZCBwZW5kZnVuYzEgKGludCB4KQoreworICBp bnQgeSA9IHggKyA0OworfQorCit2b2lkIHBlbmRmdW5jIChpbnQgeCkKK3sK KyAgcGVuZGZ1bmMxICh4KTsKK30K --f46d04478533d8ac7f04d90b6dff--