From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2FC91C41604 for ; Wed, 7 Oct 2020 18:04:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A9DB121707 for ; Wed, 7 Oct 2020 18:04:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728305AbgJGSEs (ORCPT ); Wed, 7 Oct 2020 14:04:48 -0400 Received: from smtprelay0147.hostedemail.com ([216.40.44.147]:50856 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727085AbgJGSEr (ORCPT ); Wed, 7 Oct 2020 14:04:47 -0400 Received: from filter.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay03.hostedemail.com (Postfix) with ESMTP id 9CEBD837F24A; Wed, 7 Oct 2020 18:04:44 +0000 (UTC) X-Session-Marker: 6A6F6540706572636865732E636F6D X-HE-Tag: bread98_2507b7a271d1 X-Filterd-Recvd-Size: 13413 Received: from XPS-9350.home (unknown [47.151.133.149]) (Authenticated sender: joe@perches.com) by omf05.hostedemail.com (Postfix) with ESMTPA; Wed, 7 Oct 2020 18:04:43 +0000 (UTC) Message-ID: Subject: Re: [PATCH -next] mm: Use sysfs_emit functions not sprintf From: Joe Perches To: Jason Gunthorpe Cc: linux-rdma , linux-kernel Date: Wed, 07 Oct 2020 11:04:42 -0700 In-Reply-To: <20201007125330.GO5177@ziepe.ca> References: <8a0d4fc9a4e372b125249b186689f247312d4387.camel@perches.com> <202010070014.76AA763CE@keescook> <20201007125330.GO5177@ziepe.ca> Content-Type: multipart/mixed; boundary="=-mi8zbEP98B9wkzS2GwtS" User-Agent: Evolution 3.36.4-0ubuntu1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-mi8zbEP98B9wkzS2GwtS Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit On Wed, 2020-10-07 at 09:53 -0300, Jason Gunthorpe wrote: > On Wed, Oct 07, 2020 at 12:16:01AM -0700, Kees Cook wrote: > > On Tue, Oct 06, 2020 at 09:28:17AM -0700, Joe Perches wrote: > > > Convert the various uses of sprintf/snprintf/scnprintf to > > > format sysfs output to sysfs_emit and sysfs_emit_at to make > > > clear the output is sysfs related and to avoid any possible > > > buffer overrun of the PAGE_SIZE buffer. > > > > > > Done with cocci scripts and some typing. > > > > Can you include the cocci script in the commit log? It might be nicer to > > split the "manual" changes from the cocci changes, as that makes review > > much easier too. > > > > Regardless, yes, I'm a fan of switching these all around to > > sysfs_emit*(). :) > > Yah, +1, I'd welcome patches for drivers/infiniband as well next cycle The script to change _show(struct device *, ...) function uses of sprintf to sysfs_emit is attached. The cocci script is coarse and doesn't find nor change all the possible variants of the sprintf uses in these functions. It could be run using: $ spatch --in-place -sp-file sysfs_emit.cocci drivers/infiniband/ Against next-20201007 it produces: $ git diff --shortstat drivers/infiniband 25 files changed, 322 insertions(+), 303 deletions(-) Because it touches a lot of drivers, the 'cc' list is pretty large for the diff. Given the size of the cc list, unless there's a single acceptable patch, I will not submit individual patches as I really dislike the back and forth of this sub-maintainer will but this sub-maintainer will not apply a patch. Doug Ledford (supporter:INFINIBAND SUBSYSTEM) Jason Gunthorpe (supporter:INFINIBAND SUBSYSTEM) Selvin Xavier (supporter:BROADCOM NETXTREME-E ROCE DRIVER) Devesh Sharma (supporter:BROADCOM NETXTREME-E ROCE DRIVER) Somnath Kotur (supporter:BROADCOM NETXTREME-E ROCE DRIVER) Sriharsha Basavapatna (supporter:BROADCOM NETXTREME-E ROCE DRIVER) Naresh Kumar PBS (supporter:BROADCOM NETXTREME-E ROCE DRIVER) Potnuri Bharat Teja (supporter:CXGB4 IWARP RNIC DRIVER (IW_CXGB4)) Mike Marciniszyn (supporter:HFI1 DRIVER) Dennis Dalessandro (supporter:HFI1 DRIVER) Faisal Latif (supporter:INTEL RDMA RNIC DRIVER) Shiraz Saleem (supporter:INTEL RDMA RNIC DRIVER) Yishai Hadas (supporter:MELLANOX MLX4 IB driver) Leon Romanovsky (supporter:MELLANOX MLX5 IB driver) Michal Kalderon (supporter:QLOGIC QL4xxx RDMA DRIVER) Ariel Elior (supporter:QLOGIC QL4xxx RDMA DRIVER) Christian Benvenuti (supporter:CISCO VIC LOW LATENCY NIC DRIVER) Nelson Escobar (supporter:CISCO VIC LOW LATENCY NIC DRIVER) Parvi Kaustubhi (supporter:CISCO VIC LOW LATENCY NIC DRIVER) Adit Ranadive (maintainer:VMWARE PVRDMA DRIVER) VMware PV-Drivers (maintainer:VMWARE PVRDMA DRIVER) Zhu Yanjun (supporter:SOFT-ROCE DRIVER (rxe)) Danil Kipnis (maintainer:RTRS TRANSPORT DRIVERS) Jack Wang (maintainer:RTRS TRANSPORT DRIVERS) Bart Van Assche (supporter:SCSI RDMA PROTOCOL (SRP) INITIATOR) linux-rdma@vger.kernel.org (open list:INFINIBAND SUBSYSTEM) linux-kernel@vger.kernel.org (open list) --=-mi8zbEP98B9wkzS2GwtS Content-Disposition: attachment; filename="sysfs_emit.cocci" Content-Type: text/plain; name="sysfs_emit.cocci"; charset="ISO-8859-1" Content-Transfer-Encoding: base64 QEAKLy9pZGVudGlmaWVyIGRfc2hvdyA9fiAiXi4qc2hvdy4qJCI7CmlkZW50aWZpZXIgZF9zaG93 OwppZGVudGlmaWVyIGFyZzEsIGFyZzIsIGFyZzM7CkBACnNzaXplX3QgZF9zaG93KHN0cnVjdCBk ZXZpY2UgKgotCWFyZzEKKwlkZXYKCSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKgotCWFyZzIK KwlhdHRyCgksIGNoYXIgKgotCWFyZzMKKwlidWYKCSkKewoJPC4uLgooCi0JYXJnMQorCWRldgp8 Ci0JYXJnMgorCWF0dHIKfAotCWFyZzMKKwlidWYKKQoJLi4uPgp9CgpAQAovL2lkZW50aWZpZXIg ZF9zaG93ID1+ICJeLipzaG93LiokIjsKaWRlbnRpZmllciBkX3Nob3c7CmlkZW50aWZpZXIgZGV2 LCBhdHRyLCBidWY7CkBACgpzc2l6ZV90IGRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKCTwuLi4KCXJldHVybgotCXNw cmludGYoYnVmLAorCXN5c2ZzX2VtaXQoYnVmLAoJLi4uKTsKCS4uLj4KfQoKQEAKLy9pZGVudGlm aWVyIGRfc2hvdyA9fiAiXi4qc2hvdy4qJCI7CmlkZW50aWZpZXIgZF9zaG93OwppZGVudGlmaWVy IGRldiwgYXR0ciwgYnVmOwpAQAoKc3NpemVfdCBkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7Cgk8Li4uCglyZXR1cm4K LQlzbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwlzeXNmc19lbWl0KGJ1ZiwKCS4uLik7CgkuLi4+ Cn0KCkBACi8vaWRlbnRpZmllciBkX3Nob3cgPX4gIl4uKnNob3cuKiQiOwppZGVudGlmaWVyIGRf c2hvdzsKaWRlbnRpZmllciBkZXYsIGF0dHIsIGJ1ZjsKQEAKCnNzaXplX3QgZF9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK ewoJPC4uLgoJcmV0dXJuCi0Jc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCXN5c2ZzX2VtaXQo YnVmLAoJLi4uKTsKCS4uLj4KfQoKQEAKLy9pZGVudGlmaWVyIGRfc2hvdyA9fiAiXi4qc2hvdy4q JCI7CmlkZW50aWZpZXIgZF9zaG93OwppZGVudGlmaWVyIGRldiwgYXR0ciwgYnVmOwpleHByZXNz aW9uIGNocjsKQEAKCnNzaXplX3QgZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJPC4uLgoJcmV0dXJuCi0Jc3RyY3B5 KGJ1ZiwgY2hyKTsKKwlzeXNmc19lbWl0KGJ1ZiwgY2hyKTsKCS4uLj4KfQoKQEAKLy9pZGVudGlm aWVyIGRfc2hvdyA9fiAiXi4qc2hvdy4qJCI7CmlkZW50aWZpZXIgZF9zaG93OwppZGVudGlmaWVy IGRldiwgYXR0ciwgYnVmOwppZGVudGlmaWVyIGxlbjsKQEAKCnNzaXplX3QgZF9zaG93KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikK ewoJPC4uLgoJbGVuID0KLQlzcHJpbnRmKGJ1ZiwKKwlzeXNmc19lbWl0KGJ1ZiwKCS4uLik7Cgku Li4+CglyZXR1cm4gbGVuOwp9CgpAQAovL2lkZW50aWZpZXIgZF9zaG93ID1+ICJeLipzaG93Liok IjsKaWRlbnRpZmllciBkX3Nob3c7CmlkZW50aWZpZXIgZGV2LCBhdHRyLCBidWY7CmlkZW50aWZp ZXIgbGVuOwpAQAoKc3NpemVfdCBkX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7Cgk8Li4uCglsZW4gPQotCXNucHJpbnRm KGJ1ZiwgUEFHRV9TSVpFLAorCXN5c2ZzX2VtaXQoYnVmLAoJLi4uKTsKCS4uLj4KCXJldHVybiBs ZW47Cn0KCkBACi8vaWRlbnRpZmllciBkX3Nob3cgPX4gIl4uKnNob3cuKiQiOwppZGVudGlmaWVy IGRfc2hvdzsKaWRlbnRpZmllciBkZXYsIGF0dHIsIGJ1ZjsKaWRlbnRpZmllciBsZW47CkBACgpz c2l6ZV90IGRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRl ICphdHRyLCBjaGFyICpidWYpCnsKCTwuLi4KCWxlbiA9Ci0Jc2NucHJpbnRmKGJ1ZiwgUEFHRV9T SVpFLAorCXN5c2ZzX2VtaXQoYnVmLAoJLi4uKTsKCS4uLj4KCXJldHVybiBsZW47Cn0KCkBACi8v aWRlbnRpZmllciBkX3Nob3cgPX4gIl4uKnNob3cuKiQiOwppZGVudGlmaWVyIGRfc2hvdzsKaWRl bnRpZmllciBkZXYsIGF0dHIsIGJ1ZjsKaWRlbnRpZmllciBsZW47CkBACgpzc2l6ZV90IGRfc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpCnsKCTwuLi4KLQlsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0g bGVuLAorCWxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZiwgbGVuLAoJLi4uKTsKCS4uLj4KCXJldHVy biBsZW47Cn0KCkBACi8vaWRlbnRpZmllciBkX3Nob3cgPX4gIl4uKnNob3cuKiQiOwppZGVudGlm aWVyIGRfc2hvdzsKaWRlbnRpZmllciBkZXYsIGF0dHIsIGJ1ZjsKZXhwcmVzc2lvbiBjaHI7CkBA Cgpzc2l6ZV90IGRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCnsKLQlzdHJjcHkoYnVmLCBjaHIpOwotCXJldHVybiBzdHJs ZW4oYnVmKTsKKwlyZXR1cm4gc3lzZnNfZW1pdChidWYsIGNocik7Cn0KCkBACmlkZW50aWZpZXIg a19zaG93ID1+ICJeLipzaG93LiokIjsKaWRlbnRpZmllciBhcmcxLCBhcmcyLCBhcmczOwpAQApz c2l6ZV90IGtfc2hvdyhzdHJ1Y3Qga29iamVjdCAqCi0JYXJnMQorCWtvYmoKCSwgc3RydWN0IGtv YmpfYXR0cmlidXRlICoKLQlhcmcyCisJYXR0cgoJLCBjaGFyICoKLQlhcmczCisJYnVmCgkpCnsK CS4uLgooCi0JYXJnMQorCWtvYmoKfAotCWFyZzIKKwlhdHRyCnwKLQlhcmczCisJYnVmCikKCS4u Lgp9CgpAQAppZGVudGlmaWVyIGtfc2hvdyA9fiAiXi4qc2hvdy4qJCI7CmlkZW50aWZpZXIga29i aiwgYXR0ciwgYnVmOwpAQAoKc3NpemVfdCBrX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0 cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7Cgk8Li4uCglyZXR1cm4KLQlz cHJpbnRmKGJ1ZiwKKwlzeXNmc19lbWl0KGJ1ZiwKCS4uLik7CgkuLi4+Cn0KCkBACmlkZW50aWZp ZXIga19zaG93ID1+ICJeLipzaG93LiokIjsKaWRlbnRpZmllciBrb2JqLCBhdHRyLCBidWY7CkBA Cgpzc2l6ZV90IGtfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCnsKCTwuLi4KCXJldHVybgotCXNucHJpbnRmKGJ1ZiwgUEFH RV9TSVpFLAorCXN5c2ZzX2VtaXQoYnVmLAoJLi4uKTsKCS4uLj4KfQoKQEAKaWRlbnRpZmllciBr X3Nob3cgPX4gIl4uKnNob3cuKiQiOwppZGVudGlmaWVyIGtvYmosIGF0dHIsIGJ1ZjsKQEAKCnNz aXplX3Qga19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKewoJPC4uLgoJcmV0dXJuCi0Jc2NucHJpbnRmKGJ1ZiwgUEFHRV9T SVpFLAorCXN5c2ZzX2VtaXQoYnVmLAoJLi4uKTsKCS4uLj4KfQoKQEAKaWRlbnRpZmllciBrX3No b3cgPX4gIl4uKnNob3cuKiQiOwppZGVudGlmaWVyIGtvYmosIGF0dHIsIGJ1ZjsKZXhwcmVzc2lv biBjaHI7CkBACgpzc2l6ZV90IGtfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtv YmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKCTwuLi4KCXJldHVybgotCXN0cmNweShi dWYsIGNocik7CisJc3lzZnNfZW1pdChidWYsIGNocik7CgkuLi4+Cn0KCkBACmlkZW50aWZpZXIg a19zaG93ID1+ICJeLipzaG93LiokIjsKaWRlbnRpZmllciBrb2JqLCBhdHRyLCBidWY7CmlkZW50 aWZpZXIgbGVuOwpAQAoKc3NpemVfdCBrX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVj dCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7Cgk8Li4uCglsZW4gPQotCXNwcmlu dGYoYnVmLAorCXN5c2ZzX2VtaXQoYnVmLAoJLi4uKTsKCS4uLj4KCXJldHVybiBsZW47Cn0KCkBA CmlkZW50aWZpZXIga19zaG93ID1+ICJeLipzaG93LiokIjsKaWRlbnRpZmllciBrb2JqLCBhdHRy LCBidWY7CmlkZW50aWZpZXIgbGVuOwpAQAoKc3NpemVfdCBrX3Nob3coc3RydWN0IGtvYmplY3Qg KmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQp7Cgk8Li4uCgls ZW4gPQotCXNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCXN5c2ZzX2VtaXQoYnVmLAoJLi4uKTsK CS4uLj4KCXJldHVybiBsZW47Cn0KCkBACmlkZW50aWZpZXIga19zaG93ID1+ICJeLipzaG93Liok IjsKaWRlbnRpZmllciBrb2JqLCBhdHRyLCBidWY7CmlkZW50aWZpZXIgbGVuOwpAQAoKc3NpemVf dCBrX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0 ciwgY2hhciAqYnVmKQp7Cgk8Li4uCglsZW4gPQotCXNjbnByaW50ZihidWYsIFBBR0VfU0laRSwK KwlzeXNmc19lbWl0KGJ1ZiwKCS4uLik7CgkuLi4+CglyZXR1cm4gbGVuOwp9CgpAQAppZGVudGlm aWVyIGtfc2hvdyA9fiAiXi4qc2hvdy4qJCI7CmlkZW50aWZpZXIga29iaiwgYXR0ciwgYnVmOwpp ZGVudGlmaWVyIGxlbjsKQEAKCnNzaXplX3Qga19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBz dHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKewoJPC4uLgotCWxlbiArPSBz Y25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJbGVuICs9IHN5c2ZzX2VtaXRf YXQoYnVmLCBsZW4sCgkuLi4pOwoJLi4uPgoJcmV0dXJuIGxlbjsKfQoKQEAKaWRlbnRpZmllciBr X3Nob3cgPX4gIl4uKnNob3cuKiQiOwppZGVudGlmaWVyIGtvYmosIGF0dHIsIGJ1ZjsKZXhwcmVz c2lvbiBjaHI7CkBACgpzc2l6ZV90IGtfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0 IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCnsKLQlzdHJjcHkoYnVmLCBjaHIpOwot CXJldHVybiBzdHJsZW4oYnVmKTsKKwlyZXR1cm4gc3lzZnNfZW1pdChidWYsIGNocik7Cn0KCi8v IFJlbmFtZSB0aGUgc3lzZnNfZW1pdCBhc3NpZ25lZCB2YXJpYWJsZXMgbm90IG5hbWVkIGxlbiBh bmQgbm90IGFscmVhZHkgaW50Ci8vIGFuZCBzZXQgdGhlIG5hbWUgdG8gbGVuIGFuZCB0eXBlIHRv IGludAoKQG5vdF9pbnRfbm90X2xlbiBleGlzdHNACnR5cGUgVCAhPSBpbnQ7CmlkZW50aWZpZXIg eCAhPSBsZW47CnBvc2l0aW9uIHA7CmlkZW50aWZpZXIgc3lzZnMgPX4gIl5zeXNmc19lbWl0Liok IjsKYXNzaWdubWVudCBvcGVyYXRvciBhb3A7CkBACgpUIHhAcDsKLi4uCnggYW9wIHN5c2ZzKC4u LikKLi4uCgpAQAp0eXBlIG5vdF9pbnRfbm90X2xlbi5UOwppZGVudGlmaWVyIG5vdF9pbnRfbm90 X2xlbi54Owpwb3NpdGlvbiBub3RfaW50X25vdF9sZW4ucDsKQEAKCi0gVCB4QHA7CisgaW50IGxl bjsKICA8Li4uCi0geAorIGxlbgogIC4uLj4KCi8vIFJlbmFtZSB0aGUgYWxyZWFkeSBpbnQgc3lz ZnNfZW1pdCBhc3NpZ25lZCB2YXJpYWJsZXMgbm90IG5hbWVkIGxlbgovLyBhbmQgc2V0IHRoZSBu YW1lIHRvIGxlbgoKQGludF9ub3RfbGVuIGV4aXN0c0AKdHlwZSBUID0gaW50OwppZGVudGlmaWVy IHggIT0gbGVuOwpwb3NpdGlvbiBwOwppZGVudGlmaWVyIHN5c2ZzID1+ICJec3lzZnNfZW1pdC4q JCI7CmFzc2lnbm1lbnQgb3BlcmF0b3IgYW9wOwpAQAoKVCB4QHA7Ci4uLgp4IGFvcCBzeXNmcygu Li4pCi4uLgoKQEAKdHlwZSBpbnRfbm90X2xlbi5UOwppZGVudGlmaWVyIGludF9ub3RfbGVuLng7 CnBvc2l0aW9uIGludF9ub3RfbGVuLnA7CkBACgotIFQgeEBwOworIGludCBsZW47CiAgPC4uLgot IHgKKyBsZW4KICAuLi4+CgovLyBSZW5hbWUgdGhlIG5vbi1pbnQgaW50IHN5c2ZzX2VtaXQgYXNz aWduZWQgdmFyaWFibGVzIG5hbWVkIGxlbgovLyBhbmQgc2V0IHRoZSB0eXBlIHRvIGludAoKQG5v dF9pbnRfaGFzX2xlbiBleGlzdHNACnR5cGUgVCAhPSBpbnQ7CmlkZW50aWZpZXIgeCA9IGxlbjsK cG9zaXRpb24gcDsKaWRlbnRpZmllciBzeXNmcyA9fiAiXnN5c2ZzX2VtaXQuKiQiOwphc3NpZ25t ZW50IG9wZXJhdG9yIGFvcDsKQEAKClQgeEBwOwouLi4KeCBhb3Agc3lzZnMoLi4uKQouLi4KCkBA CnR5cGUgbm90X2ludF9oYXNfbGVuLlQ7CmlkZW50aWZpZXIgbm90X2ludF9oYXNfbGVuLng7CnBv c2l0aW9uIG5vdF9pbnRfaGFzX2xlbi5wOwpAQAoKLSBUIHhAcDsKKyBpbnQgbGVuOwo= --=-mi8zbEP98B9wkzS2GwtS--