From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: `message' not outputting the newline "atomically" Date: Wed, 3 Jul 2019 16:08:36 -0700 Organization: UCLA Computer Science Department Message-ID: <540324b5-fad3-ded0-5018-6abb494ce126@cs.ucla.edu> References: <07619925-e367-fb88-2dd8-27addb2e9052@grinta.net> <68b398b1-3790-b32f-535d-6ea2518f79b8@cs.ucla.edu> <83pnn1lkej.fsf@gnu.org> <83tvccjrpo.fsf@gnu.org> <83zhm3i285.fsf@gnu.org> <7a39d680-6234-1301-74e5-62d599f500f6@cs.ucla.edu> <838stfd0pp.fsf@gnu.org> <835zojd0fx.fsf@gnu.org> <834l43czz8.fsf@gnu.org> <5c979663-9ded-4273-11d1-483345053a6f@cs.ucla.edu> <831rz7cvoh.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------84B647F5FFDAEB5BAEDA6350" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="204136"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 Cc: larsi@gnus.org, daniele@grinta.net, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Jul 04 01:09:01 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hioN1-000qrc-5z for ged-emacs-devel@m.gmane.org; Thu, 04 Jul 2019 01:08:59 +0200 Original-Received: from localhost ([::1]:41760 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hioN0-0001B7-06 for ged-emacs-devel@m.gmane.org; Wed, 03 Jul 2019 19:08:58 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57309) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hioMo-0001B0-Hp for emacs-devel@gnu.org; Wed, 03 Jul 2019 19:08:48 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hioMm-00037Y-Ol for emacs-devel@gnu.org; Wed, 03 Jul 2019 19:08:46 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:59680) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hioMj-00032A-54; Wed, 03 Jul 2019 19:08:41 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id ED5BE160964; Wed, 3 Jul 2019 16:08:38 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 8hflJ7mCis3F; Wed, 3 Jul 2019 16:08:37 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 55419161C54; Wed, 3 Jul 2019 16:08:37 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id LbdMpGykG414; Wed, 3 Jul 2019 16:08:37 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 30D24160964; Wed, 3 Jul 2019 16:08:37 -0700 (PDT) Openpgp: preference=signencrypt Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9 Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2 Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+ KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBfgQTAQIAKAUCTIByZAIbAwUJEswDAAYLCQgHAwIG FQgCCQoLBBYCAwECH In-Reply-To: <831rz7cvoh.fsf@gnu.org> Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:238341 Archived-At: This is a multi-part message in MIME format. --------------84B647F5FFDAEB5BAEDA6350 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit >> char *p = "hello"; >> char *q = (char *) 1; >> fprintf (stderr, "p=%s q=%s\n", p, q); >> >> This dumps core on GNU/Linux without producing any output. > > This dumps core because the invalid pointer is dereferenced before > fprintf is called, right? No, the caller does not dereference the bad pointer. And on some platforms fprintf outputs the "hello" before dumping core. > I said "as much as possible", and I meant that. As the above example shows, it's quite possible to output more than what GNU/Linux fprintf does. So, if "as much as possible" is a hard requirement, Emacs must stop using fprintf to format diagnostics like the above. Which would be absurd and I'm not seriously proposing it. However, it is logically implied by the axiom that diagnostics must be unbuffered as much as possible. That axiom is therefore untenable as stated. > I don't see any > reasons to outlaw fprintf, just because some platforms buffer stderr, > or because Emacs might crash without even starting to print anything, > that'd be too unreasonable. I agree. Similarly, there is no reason to require Emacs code to use a single fprintf to output each diagnostic line. Instead, we should allow code like this: fprintf (stderr, "emacs debug ["); for (i = 0; i < 10; i++) fprintf (stderr, " %d", a[i]); fprintf (stderr, "]\n"); That is, there should not be a need to for code like this to use special output functions that are not used for ordinary diagnostics. > I don't want us to invent a whole new family of functions just to > avoid fprintf, like your patch did. I agree with this as well. My patch went to that length only because it was the best way I saw to fix the problem under the unreasonable constraint that the stderr stream cannot be line-buffered. There are other ways to fix the problem, such as avoiding stdio and using only 'write' for diagnostics, but these other ways are messier. As far as I know, nobody has suggested any patch to fix the problem other than the three-line patch I originally submitted, or the recent set of more-complicated patches. > these messages are important in production builds as well Of course they're important! However, the three-line change doesn't lose these messages in realistic scenarios involving current Emacs code. I proposed its ENABLE_DEBUG variant as a compromise to allay theoretical concerns that the three-line change might make debugging harder, not because conditionalizing on ENABLE_DEBUG would make a significant practical difference. >> I thought it was worth it, or I wouldn't have written the patches. 'message' is >> not the only place where Emacs issues diagnostics that can interleave, and it >> shouldn't be hard to fix the other places. > > What other places are those? Let's discuss them one by one, please. To help get that discussion started I am attaching a list of grep hits for some of these places in the current master source (commit 619592df9ed4d54a63f653bf6912ecc44f46dc59). This is only a partial list. Although there are lots more where this came from, coming up with a complete list would take quite a bit more time. --------------84B647F5FFDAEB5BAEDA6350 Content-Type: text/plain; charset=UTF-8; name="fprintf-list.out" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fprintf-list.out" YWxsb2MuYzo3MTkyOiAgZnByaW50ZiAoc3RkZXJyLCAiXHJcbiVzOiVkOiBFbWFjcyBmYXRh bCBlcnJvcjogYXNzZXJ0aW9uIGZhaWxlZDogJXNcclxuIiwKYmlkaS5jOjM1OTI6ICBmcHJp bnRmIChzdGRlcnIsICJUb3RhbCBvZiAgJSJwRCJkIHN0YXRlJXMgaW4gY2FjaGU6XG4iLApi aWRpLmM6MzU5OTogICAgZnByaW50ZiAoc3RkZXJyLCAiJSpjIiwgbmRpZ2l0cywgYmlkaV9j YWNoZVtpXS5jaCk7CmJpZGkuYzozNjAzOiAgICBmcHJpbnRmIChzdGRlcnIsICIlKmQiLCBu ZGlnaXRzLCBiaWRpX2NhY2hlW2ldLnJlc29sdmVkX2xldmVsKTsKYmlkaS5jOjM2MDc6ICAg IGZwcmludGYgKHN0ZGVyciwgIiUqInBEImQiLCBuZGlnaXRzLCBiaWRpX2NhY2hlW2ldLmNo YXJwb3MpOwpidWZmZXIuYzo0Nzg0OiAgICBmcHJpbnRmIChzdGRlcnIsICJtdW5tYXA6ICVz XG4iLCBlbWFjc19zdHJlcnJvciAoZXJybm8pKTsKYnVmZmVyLmM6NDgwMzoJZnByaW50ZiAo c3RkZXJyLCAibXVubWFwOiAlc1xuIiwgZW1hY3Nfc3RyZXJyb3IgKGVycm5vKSk7CmJ1ZmZl ci5jOjQ4MzI6CQlmcHJpbnRmIChzdGRlcnIsICJtdW5tYXA6ICVzXG4iLCBlbWFjc19zdHJl cnJvciAoZXJybm8pKTsKYnVmZmVyLmM6NDg3MDoJZnByaW50ZiAoc3RkZXJyLCAibW1hcDog JXNcbiIsIGVtYWNzX3N0cmVycm9yIChlcnJubykpOwpidWZmZXIuYzo1MzgxOiAgICAgIGZw cmludGYgKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgZGlyZWN0b3J5OiAlc1xuIiwKZGlzcG5l dy5jOjIyMzogICAgICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgcmVkaXNwbGF5X2hpc3Rv cnlbaV0udHJhY2UpOwpkaXNwbmV3LmM6NjE1NjoJICBmcHJpbnRmIChzdGRlcnIsICJEaXNw bGF5ICVzIHVuYXZhaWxhYmxlLCBzaW11bGF0aW5nIC1ud1xuIiwKZW1hY3MuYzoxMTk1OiAg ICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogQ2FuJ3QgY2hkaXIgdG8gJXM6ICVzXG4i LAplbWFjcy5jOjEzMjA6CSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogJXNcbiIs IGFyZ3ZbMF0sIHRlcm0sIGVycnN0cmluZyk7CmVtYWNzLmM6MTMyNToJICAgICAgZnByaW50 ZiAoc3RkZXJyLCAiJXM6ICVzOiBub3QgYSB0dHlcbiIsIGFyZ3ZbMF0sIHRlcm0pOwplbWFj cy5jOjEzMjg6CSAgZnByaW50ZiAoc3RkZXJyLCAiVXNpbmcgJXNcbiIsIHRlcm0pOwplbWFj cy5jOjE1NDk6ICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSBN Uy1XaW5kb3dzIGV2ZW50IGZvciBkYWVtb246ICVzXG4iLAplbWFjcy5jOjIzMzI6CQkgIGZw cmludGYgKHN0ZGVyciwgIk9wdGlvbiAnJXMnIG1hdGNoZWQgbXVsdGlwbGUgc3RhbmRhcmQg YXJndW1lbnRzXG4iLCBhcmd2W2Zyb21dKTsKZW1hY3MtbW9kdWxlLmM6MTMwNTogIHZmcHJp bnRmIChzdGRlcnIsIGZvcm1hdCwgYXJncyk7CmdtYWxsb2MuYzoyMDE1OiAgZnByaW50ZiAo c3RkZXJyLCAibWNoZWNrOiAlc1xuIiwgbXNnKTsKZ3RrdXRpbC5jOjgzMjogICAgZnByaW50 ZiAoc3RkZXJyLCAiWFggJXMtV0FSTklORyAqKjogJXNcbiIsIGxvZ19kb21haW4sIG1zZyk7 Cmd0a3V0aWwuYzo4OTc6CSAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gcGFyc2U6 ICclcydcbiIsIGdlb21fc3RyKTsKZ3RrdXRpbC5jOjI4NTM6ICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiYmFkIHR5cGUgaW4geGdfY3JlYXRlX3dpZGdldDogJXMsIGRvaW5nIG5vdGhpbmdc biIsCmxyZWFkLmM6NDcyNDogIGZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCB1c2UsIFNTREFU QSAoRU5DT0RFX1NZU1RFTSAoZGlybmFtZSkpLCBkaWFnbm9zdGljKTsKbXNkb3MuYzozODU5 OiAgZnByaW50ZiAoc3RkZXJyLCAiJXMgbm90IHlldCBpbXBsZW1lbnRlZFxyXG4iLCBiYWRm dW5jKTsKcGR1bXBlci5jOjMyOTogIGZwcmludGYgKHN0ZGVyciwgIiVzOiAiLCBsYWJlbCk7 CnBkdW1wZXIuYzozMzE6ICAgIGZwcmludGYgKHN0ZGVyciwgIiUwMngiLCAodW5zaWduZWQp IHhmaW5nZXJwcmludFtpXSk7CnByaW50LmM6ODU3OiAgICAgIGZwcmludGYgKHN0ZGVyciwg IiM8JXNfTElTUF9PQkpFQ1QgMHglMDgicEkieD5cclxuIiwKcmVnZXgtZW1hY3MuYzo0NDU6 ICBpZiAocmVnZXhfZW1hY3NfZGVidWcgPiAwKSBmcHJpbnRmIChzdGRlcnIsIF9fVkFfQVJH U19fKQpyZWdleC1lbWFjcy5jOjQ2MDogICAgICBmcHJpbnRmIChzdGRlcnIsICJ7JTAyeH0i LCB1Yyk7CnJlZ2V4LWVtYWNzLmM6NDg1OgkgICAgICBmcHJpbnRmIChzdGRlcnIsICItIik7 CnJlZ2V4LWVtYWNzLmM6NTE4OgkgIGZwcmludGYgKHN0ZGVyciwgIi9ub19vcCIpOwpyZWdl eC1lbWFjcy5jOjUyMjoJICBmcHJpbnRmIChzdGRlcnIsICIvc3VjY2VlZCIpOwpyZWdleC1l bWFjcy5jOjUyNzoJICBmcHJpbnRmIChzdGRlcnIsICIvZXhhY3RuLyVkIiwgbWNudCk7CnJl Z2V4LWVtYWNzLmM6NTMwOgkgICAgICBmcHJpbnRmIChzdGRlcnIsICIvIik7CnJlZ2V4LWVt YWNzLmM6NTM3OgkgIGZwcmludGYgKHN0ZGVyciwgIi9zdGFydF9tZW1vcnkvJWQiLCAqcCsr KTsKcmVnZXgtZW1hY3MuYzo1NDE6CSAgZnByaW50ZiAoc3RkZXJyLCAiL3N0b3BfbWVtb3J5 LyVkIiwgKnArKyk7CnJlZ2V4LWVtYWNzLmM6NTQ1OgkgIGZwcmludGYgKHN0ZGVyciwgIi9k dXBsaWNhdGUvJWQiLCAqcCsrKTsKcmVnZXgtZW1hY3MuYzo1NDk6CSAgZnByaW50ZiAoc3Rk ZXJyLCAiL2FueWNoYXIiKTsKcmVnZXgtZW1hY3MuYzo1NjA6CSAgICBmcHJpbnRmIChzdGRl cnIsICIvY2hhcnNldCBbJXMiLApyZWdleC1lbWFjcy5jOjU2NDoJICAgICAgZnByaW50ZiAo c3RkZXJyLCAiICFleHRlbmRzIHBhc3QgZW5kIG9mIHBhdHRlcm4hICIpOwpyZWdleC1lbWFj cy5jOjU3MzoJCSAgICAgIGZwcmludGYgKHN0ZGVyciwgIi0iKTsKcmVnZXgtZW1hY3MuYzo1 OTI6CSAgICBmcHJpbnRmIChzdGRlcnIsICJdIik7CnJlZ2V4LWVtYWNzLmM6NTk5OgkJZnBy aW50ZiAoc3RkZXJyLCAiaGFzLXJhbmdlLXRhYmxlIik7CnJlZ2V4LWVtYWNzLmM6NjEwOgkg IGZwcmludGYgKHN0ZGVyciwgIi9iZWdsaW5lIik7CnJlZ2V4LWVtYWNzLmM6NjE0OgkgIGZw cmludGYgKHN0ZGVyciwgIi9lbmRsaW5lIik7CnJlZ2V4LWVtYWNzLmM6NjE5OgkgIGZwcmlu dGYgKHN0ZGVyciwgIi9vbl9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFy dCk7CnJlZ2V4LWVtYWNzLmM6NjI0OgkgIGZwcmludGYgKHN0ZGVyciwgIi9vbl9mYWlsdXJl X2tlZXBfc3RyaW5nX2p1bXAgdG8gJXRkIiwKcmVnZXgtZW1hY3MuYzo2MzA6CSAgZnByaW50 ZiAoc3RkZXJyLCAiL29uX2ZhaWx1cmVfanVtcF9uYXN0eWxvb3AgdG8gJXRkIiwKcmVnZXgt ZW1hY3MuYzo2MzY6CSAgZnByaW50ZiAoc3RkZXJyLCAiL29uX2ZhaWx1cmVfanVtcF9sb29w IHRvICV0ZCIsCnJlZ2V4LWVtYWNzLmM6NjQyOgkgIGZwcmludGYgKHN0ZGVyciwgIi9vbl9m YWlsdXJlX2p1bXBfc21hcnQgdG8gJXRkIiwKcmVnZXgtZW1hY3MuYzo2NDg6CSAgZnByaW50 ZiAoc3RkZXJyLCAiL2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CnJlZ2V4LWVt YWNzLmM6NjU0OgkgIGZwcmludGYgKHN0ZGVyciwgIi9zdWNjZWVkX24gdG8gJXRkLCAlZCB0 aW1lcyIsCnJlZ2V4LWVtYWNzLmM6NjYxOgkgIGZwcmludGYgKHN0ZGVyciwgIi9qdW1wX24g dG8gJXRkLCAlZCB0aW1lcyIsCnJlZ2V4LWVtYWNzLmM6NjY4OgkgIGZwcmludGYgKHN0ZGVy ciwgIi9zZXRfbnVtYmVyX2F0IGxvY2F0aW9uICV0ZCB0byAlZCIsCnJlZ2V4LWVtYWNzLmM6 NjczOgkgIGZwcmludGYgKHN0ZGVyciwgIi93b3JkYm91bmQiKTsKcmVnZXgtZW1hY3MuYzo2 Nzc6CSAgZnByaW50ZiAoc3RkZXJyLCAiL25vdHdvcmRib3VuZCIpOwpyZWdleC1lbWFjcy5j OjY4MToJICBmcHJpbnRmIChzdGRlcnIsICIvd29yZGJlZyIpOwpyZWdleC1lbWFjcy5jOjY4 NToJICBmcHJpbnRmIChzdGRlcnIsICIvd29yZGVuZCIpOwpyZWdleC1lbWFjcy5jOjY4OToJ ICBmcHJpbnRmIChzdGRlcnIsICIvc3ltYmVnIik7CnJlZ2V4LWVtYWNzLmM6NjkzOgkgIGZw cmludGYgKHN0ZGVyciwgIi9zeW1lbmQiKTsKcmVnZXgtZW1hY3MuYzo2OTc6CSAgZnByaW50 ZiAoc3RkZXJyLCAiL3N5bnRheHNwZWMiKTsKcmVnZXgtZW1hY3MuYzo2OTk6CSAgZnByaW50 ZiAoc3RkZXJyLCAiLyVkIiwgbWNudCk7CnJlZ2V4LWVtYWNzLmM6NzAzOgkgIGZwcmludGYg KHN0ZGVyciwgIi9ub3RzeW50YXhzcGVjIik7CnJlZ2V4LWVtYWNzLmM6NzA1OgkgIGZwcmlu dGYgKHN0ZGVyciwgIi8lZCIsIG1jbnQpOwpyZWdleC1lbWFjcy5jOjcwOToJICBmcHJpbnRm IChzdGRlcnIsICIvYXRfZG90Iik7CnJlZ2V4LWVtYWNzLmM6NzEzOgkgIGZwcmludGYgKHN0 ZGVyciwgIi9jYXRlZ29yeXNwZWMiKTsKcmVnZXgtZW1hY3MuYzo3MTU6CSAgZnByaW50ZiAo c3RkZXJyLCAiLyVkIiwgbWNudCk7CnJlZ2V4LWVtYWNzLmM6NzE5OgkgIGZwcmludGYgKHN0 ZGVyciwgIi9ub3RjYXRlZ29yeXNwZWMiKTsKcmVnZXgtZW1hY3MuYzo3MjE6CSAgZnByaW50 ZiAoc3RkZXJyLCAiLyVkIiwgbWNudCk7CnJlZ2V4LWVtYWNzLmM6NzI1OgkgIGZwcmludGYg KHN0ZGVyciwgIi9iZWdidWYiKTsKcmVnZXgtZW1hY3MuYzo3Mjk6CSAgZnByaW50ZiAoc3Rk ZXJyLCAiL2VuZGJ1ZiIpOwpyZWdleC1lbWFjcy5jOjczMzoJICBmcHJpbnRmIChzdGRlcnIs ICI/JWQiLCAqKHAtMSkpOwpyZWdleC1lbWFjcy5jOjc1NDogICAgICBmcHJpbnRmIChzdGRl cnIsICJmYXN0bWFwOiAiKTsKcmVnZXgtZW1hY3MuYzo3NzE6ICAgIGZwcmludGYgKHN0ZGVy ciwgIihudWxsKSIpOwpzeXN0aHJlYWQuYzoxMjU6ICAgICAgZnByaW50ZiAoc3RkZXJyLCAi XG5wdGhyZWFkX211dGV4X2luaXQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IgKGVycm9yKSk7 CnN5c3RocmVhZC5jOjE1NTogICAgICBmcHJpbnRmIChzdGRlcnIsICJcbnB0aHJlYWRfY29u ZF9pbml0IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yIChlcnJvcikpOwp0ZXJtLmM6NDQwMTog IGZwcmludGYgKHN0ZGVyciwgImVtYWNzOiAiKTsKdGVybS5jOjQ0MDI6ICB2ZnByaW50ZiAo c3RkZXJyLCBzdHIsIGFwKTsKdW5leGFpeC5jOjIyODogICAgICBmcHJpbnRmIChzdGRlcnIs ICJ1bmV4ZWM6ICVseCBmbGFncyB3aGVyZSAleCBleHBlY3RlZCBpbiAlcyBzZWN0aW9uLlxu IiwgXAp1bmV4YWl4LmM6MjMyOiAgICAgIGZwcmludGYgKHN0ZGVyciwgInVuZXhlYzogZHVw bGljYXRlIHNlY3Rpb24gaGVhZGVyIGZvciBzZWN0aW9uICVzLlxuIiwgXAp1bmV4bWFjb3N4 LmM6MzA2OiAgZnByaW50ZiAoc3RkZXJyLCAidW5leGVjOiAiKTsKdW5leG1hY29zeC5jOjMw NzogIHZmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXApOwp4ZGlzcC5jOjEwODkzOgkgIHZm cHJpbnRmIChzdGRlcnIsIG0sIGFwKTsKeGRpc3AuYzoxMzY4MjogICAgZnByaW50ZiAoc3Rk ZXJyLCAiJXAgKCVzKTogJXNcbiIsCnhkaXNwLmM6MTk3Mzk6CSAgZnByaW50ZiAoc3RkZXJy LCAiJTNkOiAoJWQpICclcydcbiIsIHZwb3MsIHJvdy0+ZW5hYmxlZF9wLCBzKTsKeGZhY2Vz LmM6NDI2OglmcHJpbnRmIChzdGRlcnIsICIlM2Q6ICU1ZCIsIGksIGNvbG9yX2NvdW50W2ld KTsKeGZhY2VzLmM6NjQwNDogIGZwcmludGYgKHN0ZGVyciwgImZvcmVncm91bmQ6IDB4JWx4 ICglcylcbiIsCnhmYWNlcy5jOjY0MDc6ICBmcHJpbnRmIChzdGRlcnIsICJiYWNrZ3JvdW5k OiAweCVseCAoJXMpXG4iLAp4ZmFjZXMuYzo2NDExOiAgICBmcHJpbnRmIChzdGRlcnIsICJm b250X25hbWU6ICVzICglcylcbiIsCnhmYWNlcy5jOjY0MTg6ICBmcHJpbnRmIChzdGRlcnIs ICJ1bmRlcmxpbmU6ICVkICglcylcbiIsCnhmYWNlcy5jOjY0MzI6ICAgICAgZnByaW50ZiAo c3RkZXJyLCAiZm9udCBzZWxlY3Rpb24gb3JkZXI6ICIpOwp4ZmFjZXMuYzo2NDM0OglmcHJp bnRmIChzdGRlcnIsICIlZCAiLCBmb250X3NvcnRfb3JkZXJbaV0pOwp4ZmFjZXMuYzo2NDM3 OiAgICAgIGZwcmludGYgKHN0ZGVyciwgImFsdGVybmF0aXZlIGZvbnRzOiAiKTsKeGZucy5j OjIzODc6ICAgIGZwcmludGYgKHN0ZGVyciwgIlhJQyBGb250c2V0IGNyZWF0ZWQ6ICVzXG4i LCBuYW1lKTsKeGZucy5jOjIzOTA6ICAgICAgZnByaW50ZiAoc3RkZXJyLCAiWElDIEZvbnRz ZXQgZmFpbGVkOiAlc1xuIiwgbmFtZSk7CnhmbnMuYzoyMzkzOgkgIGZwcmludGYgKHN0ZGVy ciwgIiAgbWlzc2luZzogJXNcbiIsICptaXNzaW5nX2xpc3QpOwp4cmRiLmM6NTkyOiAgZnBy aW50ZiAoc3RkZXJyLCBtc2csIHByb2cpOwp4c21mbnMuYzo0MDc6ICAgICAgZnByaW50ZiAo c3RkZXJyLCAiRGlzYWJsaW5nIHNlc3Npb24gbWFuYWdlbWVudCBkdWUgdG8gcHdkIGVycm9y OiAlc1xuIiwKeHRlcm0uYzo5OTU3OiAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzXG5cCnh0 ZXJtLmM6OTk4MzogICAgICBmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgZXJyb3JfbXNnKTsK eHRlcm0uYzoxMjQ2ODogICAgICBmcHJpbnRmIChzdGRlcnIsICIlcy1XQVJOSU5HICoqOiAl c1xuIiwgbG9nX2RvbWFpbiwgbXNnKTsKbnNmb250Lm06NTQ1OglmcHJpbnRmIChzdGRlcnIs ICJuc2ZvbnQ6ICVzIGZvciBmb250c3BlYzpcbiAgICAiLApuc2ZvbnQubToxNDc1OiAgZnBy aW50ZiAoc3RkZXJyLCAiR2x5cGggc3RyaW5nIGxlbiA9ICVkIGF0ICglZCwgJWQpIG92ZXJo YW5nICglZCwgJWQpLCIKbnNmb250Lm06MTQ4MjogICAgICBmcHJpbnRmIChzdGRlcnIsICIl YyIsIGMpOwpuc21lbnUubToyMzk6ICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkVSUk9S OiBkaWQgbm90IGZpbmQgbGlzcCBtZW51IGZvciBzdWJtZW51ICclcycuXG4iLApuc3Rlcm0u bTo1MDM1OiAgICAgIGVsc2UgZnByaW50ZiAoc3RkZXJyLApuc3Rlcm0ubTo1MjI1OiAgICAg ICAgICBmcHJpbnRmIChzdGRlcnIsICJGYWlsZWQgdG8gY3JlYXRlIHBpcGU6ICVzXG4iLAo= --------------84B647F5FFDAEB5BAEDA6350--