From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Julian Graham Newsgroups: gmane.lisp.guile.devel Subject: More explicit support for Unicode title case Date: Mon, 21 Dec 2009 09:02:43 -0500 Message-ID: <2bc5f8210912210602l5caba56ahb50381f666a59737@mail.gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d7842320e821047b3d8b73 X-Trace: ger.gmane.org 1261404228 9781 80.91.229.12 (21 Dec 2009 14:03:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 21 Dec 2009 14:03:48 +0000 (UTC) To: guile-devel Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Mon Dec 21 15:03:38 2009 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1NMirH-0002Tj-97 for guile-devel@m.gmane.org; Mon, 21 Dec 2009 15:03:36 +0100 Original-Received: from localhost ([127.0.0.1]:46645 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NMirG-0002xX-IL for guile-devel@m.gmane.org; Mon, 21 Dec 2009 09:03:34 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NMir6-0002xG-1Q for guile-devel@gnu.org; Mon, 21 Dec 2009 09:03:24 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NMir1-0002wO-MN for guile-devel@gnu.org; Mon, 21 Dec 2009 09:03:23 -0500 Original-Received: from [199.232.76.173] (port=48157 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NMir1-0002wB-EW for guile-devel@gnu.org; Mon, 21 Dec 2009 09:03:19 -0500 Original-Received: from mail-ew0-f209.google.com ([209.85.219.209]:50969) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NMir0-00040t-DP for guile-devel@gnu.org; Mon, 21 Dec 2009 09:03:19 -0500 Original-Received: by ewy1 with SMTP id 1so6325747ewy.8 for ; Mon, 21 Dec 2009 06:03:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=nqnF4x8fWZdrl1xjpsFEn+6348W/4GAJkKudTAdx41g=; b=C0/sgOErcYDVaImJCULfkZ8Ff7eC+0saVOgC0o7tk2v8BU5C1vTQVvcyqYDdCkV6pf nDW0sX5Caw7rcfKeFqdgS81CMpUcbzPEYFYxKyYPKQ0VvhHri5XJRJBApSVEZ2pLbzEo 0YvzSRcW7Xkb+C08JfSTueFETTRfpoFkMu91A= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=H3yAGfqRQt+EaVcBL+0J3uvb86K238NrWMl+GT1PiiPk11obBX83wUIzaqXVnOioVs gApzcD4iLJljtfZt+SxjjToczvNWuddAfPcHlTXjRv7AUjjtPJtLppf4lbktU51Bypfv efpT+LH9i9jWP7UkMh2QdDazUpCUvqmqNPD40= Original-Received: by 10.216.93.69 with SMTP id k47mr2317673wef.179.1261404164253; Mon, 21 Dec 2009 06:02:44 -0800 (PST) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:9783 Archived-At: --0016e6d7842320e821047b3d8b73 Content-Type: text/plain; charset=ISO-8859-1 Hi all, I was doing some auditing of Guile's support for the functionality required by the R6RS "Standard Libraries" specification, and I noticed that Guile's character and string APIs are missing support for title-cased Unicode characters [0]. ...So I added it. Find attached a patch (including documentation and unit tests) that adds title case-related functions as appropriate to the areas of the system that deal with character case. In particular, the core character API, SRFI-13, and i18n are affected. Can someone do a quick review on the patch, and, provided there are no issues, commit it -- or let me know and I'll do it myself? (I've gotten a significantly more confident with git over the past few months.) Thanks, Julian [0] - http://www.unicode.org/versions/Unicode5.0.0/ch05.pdf#G21180 --0016e6d7842320e821047b3d8b73 Content-Type: text/x-patch; charset=US-ASCII; name="0001-Improved-support-for-Unicode-title-case-in-Guile-s-s.patch" Content-Disposition: attachment; filename="0001-Improved-support-for-Unicode-title-case-in-Guile-s-s.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g3haxz820 RnJvbSA4MjA1MmExMGRhNDBhNmQ4MTRhYjMwYTk0NDg1OWM4M2JiNmZlNjhlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdWxpYW4gR3JhaGFtIDxqdWxpYW4uZ3JhaGFtQGF5YS55YWxl LmVkdT4KRGF0ZTogTW9uLCAyMSBEZWMgMjAwOSAwODo0Njo0OSAtMDUwMApTdWJqZWN0OiBbUEFU Q0hdIEltcHJvdmVkIHN1cHBvcnQgZm9yIFVuaWNvZGUgdGl0bGUgY2FzZSBpbiBHdWlsZSdzIHN0 cmluZyBhbmQgY2hhcmFjdGVyIEFQSXMuCgoqIGRvYy9yZWYvYXBpLWRhdGEudGV4aSAoQ2hhcmFj dGVycyk6IERvY3VtZW50YXRpb24gZm9yIGBjaGFyLXRpdGxlLWNhc2U/JyBhbmQgYGNoYXItdGl0 bGVjYXNlJy4KKiBkb2MvcmVmL2FwaS1pMThuLnRleGkgKENoYXJhY3RlciBDYXNlIE1hcHBpbmcp OiBEb2N1bWVudGF0aW9uIGZvciBgY2hhci1sb2NhbGUtdGl0bGVjYXNlJyBhbmQgYHN0cmluZy1s b2NhbGUtdGl0bGVjYXNlJy4KCiogbGliZ3VpbGUvY2hhcnMuYywgbGliZ3VpbGUvY2hhcnMuaCAo c2NtX2NoYXJfdGl0bGVfY2FzZV9wLCBzY21fY2hhcl90aXRsZWNhc2UsIHNjbV9jX3RpdGxlY2Fz ZSk6IE5ldyBmdW5jdGlvbnMuCgoqIGxpYmd1aWxlL2kxOG4uYywgbGliZ3VpbGUvaTE4bi5oIChj aHJfdG9fY2FzZSwgc2NtX2NoYXJfbG9jYWxlX3RpdGxlY2FzZSwgc3RyX3RvX2Nhc2UsIHNjbV9z dHJpbmdfbG9jYWxlX3RpdGxlY2FzZSk6IE5ldyBmdW5jdGlvbnMuCiogbGliZ3VpbGUvaTE4bi5j IChzY21fY2hhcl9sb2NhbGVfZG93bmNhc2UsIHNjbV9jaGFyX2xvY2FsZV91cGNhc2UsIHNjbV9z dHJpbmdfbG9jYWxlX2Rvd25jYXNlLCBzY21fc3RyaW5nX2xvY2FsZV91cGNhc2UpOiBSZWZhY3Rv ciB0byBzaGFyZSBjb2RlIHZpYSBjaHJfdG9fY2FzZSBhbmQgc3RyX3RvX2Nhc2UsIGFzIGFwcHJv cHJpYXRlLgoqIG1vZHVsZS9pY2UtOS9pMThuLnNjbSAoY2hhci1sb2NhbGUtdGl0bGUtY2FzZSwg c3RyaW5nLWxvY2FsZS10aXRsZWNhc2UpOiBOZXcgZnVuY3Rpb25zLgoKKiBsaWJndWlsZS9zcmZp LTEzLmMgKHN0cmluZ190aXRsZWNhc2VfeCk6IFVzZSB1Y190b3RpdGxlIGluc3RlYWQgb2YgdWNf dG91cHBlci4KCiogdGVzdC1zdWl0ZS90ZXN0cy9jaGFycy50ZXN0OiBUZXN0cyBmb3IgYGNoYXIt dGl0bGUtY2FzZT8nIGFuZCBgY2hhci10aXRsZWNhc2UnLgoqIHRlc3Qtc3VpdGUvdGVzdHMvaTE4 bi50ZXN0OiBUZXN0cyBmb3IgYGNoYXItbG9jYWxlLXRpdGxlY2FzZScgYW5kIGBzdHJpbmctbG9j YWxlLXRpdGxlY2FzZScuCiogdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTEzLnRlc3Q6IFRlc3RzIGZv ciBgc3RyaW5nLXRpdGxlY2FzZScuCi0tLQogZG9jL3JlZi9hcGktZGF0YS50ZXhpICAgICAgICAg fCAgIDEzICsrKwogZG9jL3JlZi9hcGktaTE4bi50ZXhpICAgICAgICAgfCAgIDEyICsrCiBsaWJn dWlsZS9jaGFycy5jICAgICAgICAgICAgICB8ICAgMjQgKysrKwogbGliZ3VpbGUvY2hhcnMuaCAg ICAgICAgICAgICAgfCAgICAzICsKIGxpYmd1aWxlL2kxOG4uYyAgICAgICAgICAgICAgIHwgIDIz OCArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogbGliZ3VpbGUvaTE4 bi5oICAgICAgICAgICAgICAgfCAgICAyICsKIGxpYmd1aWxlL3NyZmktMTMuYyAgICAgICAgICAg IHwgICAgMiArLQogbW9kdWxlL2ljZS05L2kxOG4uc2NtICAgICAgICAgfCAgICA0ICstCiB0ZXN0 LXN1aXRlL3Rlc3RzL2NoYXJzLnRlc3QgICB8ICAgMTMgKystCiB0ZXN0LXN1aXRlL3Rlc3RzL2kx OG4udGVzdCAgICB8ICAgMTMgKysrCiB0ZXN0LXN1aXRlL3Rlc3RzL3NyZmktMTMudGVzdCB8ICAg MTkgKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgMjQyIGluc2VydGlvbnMoKyksIDEwMSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2MvcmVmL2FwaS1kYXRhLnRleGkgYi9kb2MvcmVmL2FwaS1k YXRhLnRleGkKaW5kZXggODFmNDRkZS4uZTViZGE5NyAxMDA3NTUKLS0tIGEvZG9jL3JlZi9hcGkt ZGF0YS50ZXhpCisrKyBiL2RvYy9yZWYvYXBpLWRhdGEudGV4aQpAQCAtMTg2OSw2ICsxODY5LDEy IEBAIFJldHVybiBAY29kZXsjdH0gaWZmIEB2YXJ7Y2hyfSBpcyB1cHBlcmNhc2UsIGVsc2UgQGNv ZGV7I2Z9LgogUmV0dXJuIEBjb2RleyN0fSBpZmYgQHZhcntjaHJ9IGlzIGxvd2VyY2FzZSwgZWxz ZSBAY29kZXsjZn0uCiBAZW5kIGRlZmZuCiAKK0BybmluZGV4IGNoYXItdGl0bGUtY2FzZT8KK0Bk ZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gY2hhci10aXRsZS1jYXNlPyBjaHIKK0BkZWZmbngge0Mg RnVuY3Rpb259IHNjbV9jaGFyX3RpdGxlX2Nhc2VfcCAoY2hyKQorUmV0dXJuIEBjb2RleyN0fSBp ZmYgQHZhcntjaHJ9IGlzIHRpdGxlY2FzZSwgZWxzZSBAY29kZXsjZn0uCitAZW5kIGRlZmZuCisK IEBkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gY2hhci1pcy1ib3RoPyBjaHIKIEBkZWZmbngge0Mg RnVuY3Rpb259IHNjbV9jaGFyX2lzX2JvdGhfcCAoY2hyKQogUmV0dXJuIEBjb2RleyN0fSBpZmYg QHZhcntjaHJ9IGlzIGVpdGhlciB1cHBlcmNhc2Ugb3IgbG93ZXJjYXNlLCBlbHNlCkBAIC0xOTAx LDYgKzE5MDcsMTMgQEAgUmV0dXJuIHRoZSB1cHBlcmNhc2UgY2hhcmFjdGVyIHZlcnNpb24gb2Yg QHZhcntjaHJ9LgogUmV0dXJuIHRoZSBsb3dlcmNhc2UgY2hhcmFjdGVyIHZlcnNpb24gb2YgQHZh cntjaHJ9LgogQGVuZCBkZWZmbgogCitAcm5pbmRleCBjaGFyLXRpdGxlY2FzZQorQGRlZmZuIHtT Y2hlbWUgUHJvY2VkdXJlfSBjaGFyLXRpdGxlY2FzZSBjaHIKK0BkZWZmbngge0MgRnVuY3Rpb259 IHNjbV9jaGFyX3RpdGxlY2FzZSAoY2hyKQorUmV0dXJuIHRoZSB0aXRsZWNhc2UgY2hhcmFjdGVy IHZlcnNpb24gb2YgQHZhcntjaHJ9IGlmIG9uZSBleGlzdHM7CitvdGhlcndpc2UgcmV0dXJuIHRo ZSB1cHBlcmNhc2UgdmVyc2lvbi4KK0BlbmQgZGVmZm4KKwogQG5vZGUgQ2hhcmFjdGVyIFNldHMK IEBzdWJzZWN0aW9uIENoYXJhY3RlciBTZXRzCiAKZGlmZiAtLWdpdCBhL2RvYy9yZWYvYXBpLWkx OG4udGV4aSBiL2RvYy9yZWYvYXBpLWkxOG4udGV4aQppbmRleCBlZTc2NTQ0Li5iODJhM2EyIDEw MDY0NAotLS0gYS9kb2MvcmVmL2FwaS1pMThuLnRleGkKKysrIGIvZG9jL3JlZi9hcGktaTE4bi50 ZXhpCkBAIC0xOTcsNiArMTk3LDEyIEBAIFJldHVybiB0aGUgdXBwZXJjYXNlIGNoYXJhY3RlciB0 aGF0IGNvcnJlc3BvbmRzIHRvIEB2YXJ7Y2hyfSBhY2NvcmRpbmcKIHRvIGVpdGhlciBAdmFye2xv Y2FsZX0gb3IgdGhlIGN1cnJlbnQgbG9jYWxlLgogQGVuZCBkZWZmbgogCitAZGVmZm4ge1NjaGVt ZSBQcm9jZWR1cmV9IGNoYXItbG9jYWxlLXRpdGxlY2FzZSBjaHIgW2xvY2FsZV0KK0BkZWZmbngg e0MgRnVuY3Rpb259IHNjbV9jaGFyX2xvY2FsZV90aXRsZWNhc2UgKGNociwgbG9jYWxlKQorUmV0 dXJuIHRoZSB0aXRsZWNhc2UgY2hhcmFjdGVyIHRoYXQgY29ycmVzcG9uZHMgdG8gQHZhcntjaHJ9 IGFjY29yZGluZwordG8gZWl0aGVyIEB2YXJ7bG9jYWxlfSBvciB0aGUgY3VycmVudCBsb2NhbGUu CitAZW5kIGRlZmZuCisKIEBkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0gc3RyaW5nLWxvY2FsZS11 cGNhc2Ugc3RyIFtsb2NhbGVdCiBAZGVmZm54IHtDIEZ1bmN0aW9ufSBzY21fc3RyaW5nX2xvY2Fs ZV91cGNhc2UgKHN0ciwgbG9jYWxlKQogUmV0dXJuIGEgbmV3IHN0cmluZyB0aGF0IGlzIHRoZSB1 cHBlcmNhc2UgdmVyc2lvbiBvZiBAdmFye3N0cn0KQEAgLTIwOSw2ICsyMTUsMTIgQEAgUmV0dXJu IGEgbmV3IHN0cmluZyB0aGF0IGlzIHRoZSBkb3duLWNhc2UgdmVyc2lvbiBvZiBAdmFye3N0cn0K IGFjY29yZGluZyB0byBlaXRoZXIgQHZhcntsb2NhbGV9IG9yIHRoZSBjdXJyZW50IGxvY2FsZS4K IEBlbmQgZGVmZm4KIAorQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBzdHJpbmctbG9jYWxlLXRp dGxlY2FzZSBzdHIgW2xvY2FsZV0KK0BkZWZmbngge0MgRnVuY3Rpb259IHNjbV9zdHJpbmdfbG9j YWxlX3RpdGxlY2FzZSAoc3RyLCBsb2NhbGUpCitSZXR1cm4gYSBuZXcgc3RyaW5nIHRoYXQgaXMg dGhlIHRpdGxlY2FzZSB2ZXJzaW9uIG9mIEB2YXJ7c3RyfQorYWNjb3JkaW5nIHRvIGVpdGhlciBA dmFye2xvY2FsZX0gb3IgdGhlIGN1cnJlbnQgbG9jYWxlLgorQGVuZCBkZWZmbgorCiBOb3RlIHRo YXQgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gR3VpbGUgaGFzIG5vIG5vdGlvbiBvZgog bXVsdGlieXRlIGNoYXJhY3RlcnMgYW5kIGluIGEgbXVsdGlieXRlIGxvY2FsZSBjaGFyYWN0ZXJz IG1heSBub3QgYmUKIGNvbnZlcnRlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9saWJndWlsZS9j aGFycy5jIGIvbGliZ3VpbGUvY2hhcnMuYwppbmRleCA2OGU2ZGMxLi4yNDVlMjg5IDEwMDY0NAot LS0gYS9saWJndWlsZS9jaGFycy5jCisrKyBiL2xpYmd1aWxlL2NoYXJzLmMKQEAgLTM5MSw2ICsz OTEsMTQgQEAgU0NNX0RFRklORSAoc2NtX2NoYXJfbG93ZXJfY2FzZV9wLCAiY2hhci1sb3dlci1j YXNlPyIsIDEsIDAsIDAsCiB9CiAjdW5kZWYgRlVOQ19OQU1FCiAKK1NDTV9ERUZJTkUgKHNjbV9j aGFyX3RpdGxlX2Nhc2VfcCwgImNoYXItdGl0bGUtY2FzZT8iLCAxLCAwLCAwLAorCSAgIChTQ00g Y2hyKSwKKwkgICAgIlJldHVybiBAY29kZXsjdH0gaWZmIEB2YXJ7Y2hyfSBpcyB0aXRsZWNhc2Us IGVsc2UgQGNvZGV7I2Z9LlxuIikKKyNkZWZpbmUgRlVOQ19OQU1FIHNfc2NtX2NoYXJfdGl0bGVf Y2FzZV9wCit7CisgIHJldHVybiBzY21fY2hhcl9zZXRfY29udGFpbnNfcCAoc2NtX2NoYXJfc2V0 X3RpdGxlX2Nhc2UsIGNocik7Cit9CisjdW5kZWYgRlVOQ19OQU1FCiAKIFNDTV9ERUZJTkUgKHNj bV9jaGFyX2lzX2JvdGhfcCwgImNoYXItaXMtYm90aD8iLCAxLCAwLCAwLCAKICAgICAgICAgICAg IChTQ00gY2hyKSwKQEAgLTQ1OCw2ICs0NjYsMTYgQEAgU0NNX0RFRklORSAoc2NtX2NoYXJfZG93 bmNhc2UsICJjaGFyLWRvd25jYXNlIiwgMSwgMCwgMCwKIH0KICN1bmRlZiBGVU5DX05BTUUKIAor U0NNX0RFRklORSAoc2NtX2NoYXJfdGl0bGVjYXNlLCAiY2hhci10aXRsZWNhc2UiLCAxLCAwLCAw LAorCSAgIChTQ00gY2hyKSwKKwkgICAgIlJldHVybiB0aGUgdGl0bGVjYXNlIGNoYXJhY3RlciB2 ZXJzaW9uIG9mIEB2YXJ7Y2hyfS4iKQorI2RlZmluZSBGVU5DX05BTUUgc19zY21fY2hhcl90aXRs ZWNhc2UKK3sKKyAgU0NNX1ZBTElEQVRFX0NIQVIgKDEsIGNocik7CisgIHJldHVybiBTQ01fTUFL RV9DSEFSIChzY21fY190aXRsZWNhc2UgKFNDTV9DSEFSKGNocikpKTsKK30KKyN1bmRlZiBGVU5D X05BTUUKKwogDAogCiAKQEAgLTQ4MCw2ICs0OTgsMTIgQEAgc2NtX2NfZG93bmNhc2UgKHNjbV90 X3djaGFyIGMpCiAgIHJldHVybiB1Y190b2xvd2VyICgoaW50KSBjKTsKIH0KIAorc2NtX3Rfd2No YXIKK3NjbV9jX3RpdGxlY2FzZSAoc2NtX3Rfd2NoYXIgYykKK3sKKyAgcmV0dXJuIHVjX3RvdGl0 bGUgKChpbnQpIGMpOworfQorCiAMCiAKIC8qIFRoZXJlIGFyZSBhIGZldyBzZXRzIG9mIGNoYXJh Y3RlciBuYW1lczogUjVSUywgR3VpbGUKZGlmZiAtLWdpdCBhL2xpYmd1aWxlL2NoYXJzLmggYi9s aWJndWlsZS9jaGFycy5oCmluZGV4IDA0ZWI5ZjAuLmY0ZjIzOTAgMTAwNjQ0Ci0tLSBhL2xpYmd1 aWxlL2NoYXJzLmgKKysrIGIvbGliZ3VpbGUvY2hhcnMuaApAQCAtNzUsMTMgKzc1LDE2IEBAIFND TV9BUEkgU0NNIHNjbV9jaGFyX251bWVyaWNfcCAoU0NNIGNocik7CiBTQ01fQVBJIFNDTSBzY21f Y2hhcl93aGl0ZXNwYWNlX3AgKFNDTSBjaHIpOwogU0NNX0FQSSBTQ00gc2NtX2NoYXJfdXBwZXJf Y2FzZV9wIChTQ00gY2hyKTsKIFNDTV9BUEkgU0NNIHNjbV9jaGFyX2xvd2VyX2Nhc2VfcCAoU0NN IGNocik7CitTQ01fQVBJIFNDTSBzY21fY2hhcl90aXRsZV9jYXNlX3AgKFNDTSBjaHIpOwogU0NN X0FQSSBTQ00gc2NtX2NoYXJfaXNfYm90aF9wIChTQ00gY2hyKTsKIFNDTV9BUEkgU0NNIHNjbV9j aGFyX3RvX2ludGVnZXIgKFNDTSBjaHIpOwogU0NNX0FQSSBTQ00gc2NtX2ludGVnZXJfdG9fY2hh ciAoU0NNIG4pOwogU0NNX0FQSSBTQ00gc2NtX2NoYXJfdXBjYXNlIChTQ00gY2hyKTsKIFNDTV9B UEkgU0NNIHNjbV9jaGFyX2Rvd25jYXNlIChTQ00gY2hyKTsKK1NDTV9BUEkgU0NNIHNjbV9jaGFy X3RpdGxlY2FzZSAoU0NNIGNocik7CiBTQ01fQVBJIHNjbV90X3djaGFyIHNjbV9jX3VwY2FzZSAo c2NtX3Rfd2NoYXIgYyk7CiBTQ01fQVBJIHNjbV90X3djaGFyIHNjbV9jX2Rvd25jYXNlIChzY21f dF93Y2hhciBjKTsKK1NDTV9BUEkgc2NtX3Rfd2NoYXIgc2NtX2NfdGl0bGVjYXNlIChzY21fdF93 Y2hhciBjKTsKIFNDTV9JTlRFUk5BTCBjb25zdCBjaGFyICpzY21faV9jaGFybmFtZSAoU0NNIGNo cik7CiBTQ01fSU5URVJOQUwgU0NNIHNjbV9pX2NoYXJuYW1lX3RvX2NoYXIgKGNvbnN0IGNoYXIg KmNoYXJuYW1lLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IGNoYXJuYW1lX2xlbik7CmRpZmYgLS1naXQgYS9saWJndWlsZS9pMThuLmMgYi9saWJndWls ZS9pMThuLmMKaW5kZXggM2E2Y2IwNi4uYjY4OWNhZiAxMDA2NDQKLS0tIGEvbGliZ3VpbGUvaTE4 bi5jCisrKyBiL2xpYmd1aWxlL2kxOG4uYwpAQCAtMTA5OCwyMiArMTA5OCwxNyBAQCB1MzJfbG9j YWxlX3RvY2FzZSAoY29uc3Qgc2NtX3RfdWludDMyICpjX3MxLCBzaXplX3QgbGVuLAogfQogCiAK LQotU0NNX0RFRklORSAoc2NtX2NoYXJfbG9jYWxlX2Rvd25jYXNlLCAiY2hhci1sb2NhbGUtZG93 bmNhc2UiLCAxLCAxLCAwLAotCSAgICAoU0NNIGNociwgU0NNIGxvY2FsZSksCi0JICAgICJSZXR1 cm4gdGhlIGxvd2VyY2FzZSBjaGFyYWN0ZXIgdGhhdCBjb3JyZXNwb25kcyB0byBAdmFye2Nocn0g IgotCSAgICAiYWNjb3JkaW5nIHRvIGVpdGhlciBAdmFye2xvY2FsZX0gb3IgdGhlIGN1cnJlbnQg bG9jYWxlLiIpCi0jZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9jaGFyX2xvY2FsZV9kb3duY2FzZQor c3RhdGljIFNDTQorY2hyX3RvX2Nhc2UgKFNDTSBjaHIsIHNjbV90X2xvY2FsZSBjX2xvY2FsZSwg CisJICAgICBzY21fdF91aW50MzIgKigqZnVuYykgKGNvbnN0IHNjbV90X3VpbnQzMiAqLCBzaXpl X3QsIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgdW5pbm9ybV90LCBzY21fdF91aW50MzIgKiwgc2l6 ZV90ICopLAorCSAgICAgaW50ICplcnIpCiB7CiAgIGludCByZXQ7Ci0gIHNjbV90X2xvY2FsZSBj X2xvY2FsZTsKICAgc2NtX3Rfd2NoYXIgKmJ1ZjsKLSAgc2NtX3RfdWludDMyICpkb3duYnVmOwot ICBzaXplX3QgZG93bmxlbjsKLSAgU0NNIHN0ciwgZG93bmNoYXI7Ci0KLSAgU0NNX1ZBTElEQVRF X0NIQVIgKDEsIGNocik7Ci0gIFNDTV9WQUxJREFURV9PUFRJT05BTF9MT0NBTEVfQ09QWSAoMiwg bG9jYWxlLCBjX2xvY2FsZSk7CisgIHNjbV90X3VpbnQzMiAqY29udmJ1ZjsKKyAgc2l6ZV90IGNv bnZsZW47CisgIFNDTSBzdHIsIGNvbnZjaGFyOwogCiAgIHN0ciA9IHNjbV9pX21ha2Vfd2lkZV9z dHJpbmcgKDEsICZidWYpOwogICBidWZbMF0gPSBTQ01fQ0hBUiAoY2hyKTsKQEAgLTExMjEsMjYg KzExMTYsNDkgQEAgU0NNX0RFRklORSAoc2NtX2NoYXJfbG9jYWxlX2Rvd25jYXNlLCAiY2hhci1s b2NhbGUtZG93bmNhc2UiLCAxLCAxLCAwLAogICBpZiAoY19sb2NhbGUgIT0gTlVMTCkKICAgICBS VU5fSU5fTE9DQUxFX1NFQ1RJT04gKGNfbG9jYWxlLCByZXQgPQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgdTMyX2xvY2FsZV90b2Nhc2UgKChzY21fdF91aW50MzIgKikgYnVmLCAxLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3duYnVmLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb3dubGVuLCB1MzJf dG9sb3dlcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZjb252YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZjb252bGVuLCBmdW5jKSk7CiAgIGVsc2UKICAgICByZXQgPQotICAgICAgdTMyX2xvY2FsZV90 b2Nhc2UgKChzY21fdF91aW50MzIgKikgYnVmLCAxLCAmZG93bmJ1ZiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAmZG93bmxlbiwgdTMyX3RvbG93ZXIpOworICAgICAgdTMyX2xvY2FsZV90b2Nh c2UgKChzY21fdF91aW50MzIgKikgYnVmLCAxLCAmY29udmJ1ZiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAmY29udmxlbiwgZnVuYyk7CiAKICAgaWYgKFNDTV9VTkxJS0VMWSAocmV0ICE9IDAp KQogICAgIHsKLSAgICAgIGVycm5vID0gcmV0OwotICAgICAgc2NtX3N5c2Vycm9yIChGVU5DX05B TUUpOworICAgICAgKmVyciA9IHJldDsKKyAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICBp ZiAoZG93bmxlbiA9PSAxKQotICAgIGRvd25jaGFyID0gU0NNX01BS0VfQ0hBUiAoKHNjbV90X3dj aGFyKSBkb3duYnVmWzBdKTsKKyAgaWYgKGNvbnZsZW4gPT0gMSkKKyAgICBjb252Y2hhciA9IFND TV9NQUtFX0NIQVIgKChzY21fdF93Y2hhcikgY29udmJ1ZlswXSk7CiAgIGVsc2UKLSAgICBkb3du Y2hhciA9IGNocjsKLSAgZnJlZSAoZG93bmJ1Zik7CisgICAgY29udmNoYXIgPSBjaHI7CisgIGZy ZWUgKGNvbnZidWYpOworCisgIHJldHVybiBjb252Y2hhcjsKK30KKworU0NNX0RFRklORSAoc2Nt X2NoYXJfbG9jYWxlX2Rvd25jYXNlLCAiY2hhci1sb2NhbGUtZG93bmNhc2UiLCAxLCAxLCAwLAor CSAgICAoU0NNIGNociwgU0NNIGxvY2FsZSksCisJICAgICJSZXR1cm4gdGhlIGxvd2VyY2FzZSBj aGFyYWN0ZXIgdGhhdCBjb3JyZXNwb25kcyB0byBAdmFye2Nocn0gIgorCSAgICAiYWNjb3JkaW5n IHRvIGVpdGhlciBAdmFye2xvY2FsZX0gb3IgdGhlIGN1cnJlbnQgbG9jYWxlLiIpCisjZGVmaW5l IEZVTkNfTkFNRSBzX3NjbV9jaGFyX2xvY2FsZV9kb3duY2FzZQoreworICBzY21fdF9sb2NhbGUg Y19sb2NhbGU7CisgIFNDTSByZXQ7CisgIGludCBlcnIgPSAwOworICAKKyAgU0NNX1ZBTElEQVRF X0NIQVIgKDEsIGNocik7CisgIFNDTV9WQUxJREFURV9PUFRJT05BTF9MT0NBTEVfQ09QWSAoMiwg bG9jYWxlLCBjX2xvY2FsZSk7CiAKLSAgcmV0dXJuIGRvd25jaGFyOworICByZXQgPSBjaHJfdG9f Y2FzZSAoY2hyLCBjX2xvY2FsZSwgdTMyX3RvbG93ZXIsICZlcnIpOworCisgIGlmIChlcnIgIT0g MCkKKyAgICB7CisgICAgICBlcnJubyA9IGVycjsKKyAgICAgIHNjbV9zeXNlcnJvciAoRlVOQ19O QU1FKTsKKyAgICB9CisgIHJldHVybiByZXQ7CiB9CiAjdW5kZWYgRlVOQ19OQU1FCiAKQEAgLTEx NTAsNTkgKzExNjgsNjAgQEAgU0NNX0RFRklORSAoc2NtX2NoYXJfbG9jYWxlX3VwY2FzZSwgImNo YXItbG9jYWxlLXVwY2FzZSIsIDEsIDEsIDAsCiAJICAgICJhY2NvcmRpbmcgdG8gZWl0aGVyIEB2 YXJ7bG9jYWxlfSBvciB0aGUgY3VycmVudCBsb2NhbGUuIikKICNkZWZpbmUgRlVOQ19OQU1FIHNf c2NtX2NoYXJfbG9jYWxlX3VwY2FzZQogewotICBpbnQgcmV0OwogICBzY21fdF9sb2NhbGUgY19s b2NhbGU7Ci0gIHNjbV90X3djaGFyICpidWY7Ci0gIHNjbV90X3VpbnQzMiAqdXBidWY7Ci0gIHNp emVfdCB1cGxlbjsKLSAgU0NNIHN0ciwgdXBjaGFyOworICBTQ00gcmV0OworICBpbnQgZXJyID0g MDsKIAogICBTQ01fVkFMSURBVEVfQ0hBUiAoMSwgY2hyKTsKICAgU0NNX1ZBTElEQVRFX09QVElP TkFMX0xPQ0FMRV9DT1BZICgyLCBsb2NhbGUsIGNfbG9jYWxlKTsKIAotICBzdHIgPSBzY21faV9t YWtlX3dpZGVfc3RyaW5nICgxLCAmYnVmKTsKLSAgYnVmWzBdID0gU0NNX0NIQVIgKGNocik7Cisg IHJldCA9IGNocl90b19jYXNlIChjaHIsIGNfbG9jYWxlLCB1MzJfdG91cHBlciwgJmVycik7CiAK LSAgaWYgKGNfbG9jYWxlICE9IE5VTEwpCi0gICAgUlVOX0lOX0xPQ0FMRV9TRUNUSU9OIChjX2xv Y2FsZSwgcmV0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMl9sb2NhbGVfdG9jYXNl ICgoc2NtX3RfdWludDMyICopIGJ1ZiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdXBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnVwbGVuLCB1MzJfdG91cHBlcikpOwotICBlbHNlCi0gICAgcmV0ID0K LSAgICAgIHUzMl9sb2NhbGVfdG9jYXNlICgoc2NtX3RfdWludDMyICopIGJ1ZiwgMSwgJnVwYnVm LAotICAgICAgICAgICAgICAgICAgICAgICAgICZ1cGxlbiwgdTMyX3RvdXBwZXIpOworICBpZiAo ZXJyICE9IDApCisgICAgeworICAgICAgZXJybm8gPSBlcnI7CisgICAgICBzY21fc3lzZXJyb3Ig KEZVTkNfTkFNRSk7CisgICAgfQorICByZXR1cm4gcmV0OyAgCit9CisjdW5kZWYgRlVOQ19OQU1F CiAKLSAgaWYgKFNDTV9VTkxJS0VMWSAocmV0ICE9IDApKQorU0NNX0RFRklORSAoc2NtX2NoYXJf bG9jYWxlX3RpdGxlY2FzZSwgImNoYXItbG9jYWxlLXRpdGxlY2FzZSIsIDEsIDEsIDAsCisJICAg IChTQ00gY2hyLCBTQ00gbG9jYWxlKSwKKwkgICAgIlJldHVybiB0aGUgdGl0bGVjYXNlIGNoYXJh Y3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIEB2YXJ7Y2hyfSAiCisJICAgICJhY2NvcmRpbmcgdG8g ZWl0aGVyIEB2YXJ7bG9jYWxlfSBvciB0aGUgY3VycmVudCBsb2NhbGUuIikKKyNkZWZpbmUgRlVO Q19OQU1FIHNfc2NtX2NoYXJfbG9jYWxlX3RpdGxlY2FzZQoreworICBzY21fdF9sb2NhbGUgY19s b2NhbGU7CisgIFNDTSByZXQ7CisgIGludCBlcnIgPSAwOworCisgIFNDTV9WQUxJREFURV9DSEFS ICgxLCBjaHIpOworICBTQ01fVkFMSURBVEVfT1BUSU9OQUxfTE9DQUxFX0NPUFkgKDIsIGxvY2Fs ZSwgY19sb2NhbGUpOworCisgIHJldCA9IGNocl90b19jYXNlIChjaHIsIGNfbG9jYWxlLCB1MzJf dG90aXRsZSwgJmVycik7CisKKyAgaWYgKGVyciAhPSAwKQogICAgIHsKLSAgICAgIGVycm5vID0g cmV0OworICAgICAgZXJybm8gPSBlcnI7CiAgICAgICBzY21fc3lzZXJyb3IgKEZVTkNfTkFNRSk7 CiAgICAgfQotICBpZiAodXBsZW4gPT0gMSkKLSAgICB1cGNoYXIgPSBTQ01fTUFLRV9DSEFSICgo c2NtX3Rfd2NoYXIpIHVwYnVmWzBdKTsKLSAgZWxzZQotICAgIHVwY2hhciA9IGNocjsKLSAgZnJl ZSAodXBidWYpOwotICByZXR1cm4gdXBjaGFyOworICByZXR1cm4gcmV0OyAgCiB9CiAjdW5kZWYg RlVOQ19OQU1FCiAKLVNDTV9ERUZJTkUgKHNjbV9zdHJpbmdfbG9jYWxlX3VwY2FzZSwgInN0cmlu Zy1sb2NhbGUtdXBjYXNlIiwgMSwgMSwgMCwKLQkgICAgKFNDTSBzdHIsIFNDTSBsb2NhbGUpLAot CSAgICAiUmV0dXJuIGEgbmV3IHN0cmluZyB0aGF0IGlzIHRoZSB1cHBlcmNhc2UgdmVyc2lvbiBv ZiAiCi0JICAgICJAdmFye3N0cn0gYWNjb3JkaW5nIHRvIGVpdGhlciBAdmFye2xvY2FsZX0gb3Ig dGhlIGN1cnJlbnQgIgotCSAgICAibG9jYWxlLiIpCi0jZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9z dHJpbmdfbG9jYWxlX3VwY2FzZQorc3RhdGljIFNDTQorc3RyX3RvX2Nhc2UgKFNDTSBzdHIsIHNj bV90X2xvY2FsZSBjX2xvY2FsZSwKKwkgICAgIHNjbV90X3VpbnQzMiAqKCpmdW5jKSAoY29uc3Qg c2NtX3RfdWludDMyICosIHNpemVfdCwgY29uc3QgY2hhciAqLAorCQkJCSAgICB1bmlub3JtX3Qs IHNjbV90X3VpbnQzMiAqLCBzaXplX3QgKiksCisJICAgICBpbnQgKmVycikKIHsKICAgc2NtX3Rf d2NoYXIgKmNfc3RyLCAqY19idWY7Ci0gIHNjbV90X3VpbnQzMiAqY191cHN0cjsKLSAgc2l6ZV90 IGxlbiwgdXBsZW47CisgIHNjbV90X3VpbnQzMiAqY19jb252c3RyOworICBzaXplX3QgbGVuLCBj b252bGVuOwogICBpbnQgcmV0OwotICBzY21fdF9sb2NhbGUgY19sb2NhbGU7Ci0gIFNDTSB1cHN0 cjsKKyAgU0NNIGNvbnZzdHI7CiAKLSAgU0NNX1ZBTElEQVRFX1NUUklORyAoMSwgc3RyKTsKLSAg U0NNX1ZBTElEQVRFX09QVElPTkFMX0xPQ0FMRV9DT1BZICgyLCBsb2NhbGUsIGNfbG9jYWxlKTsK ICAgbGVuID0gc2NtX2lfc3RyaW5nX2xlbmd0aCAoc3RyKTsKICAgaWYgKGxlbiA9PSAwKQogICAg IHJldHVybiBzY21fbnVsbHN0cjsKQEAgLTEyMTEsMjggKzEyMzAsNTIgQEAgU0NNX0RFRklORSAo c2NtX3N0cmluZ19sb2NhbGVfdXBjYXNlLCAic3RyaW5nLWxvY2FsZS11cGNhc2UiLCAxLCAxLCAw LAogICBpZiAoY19sb2NhbGUpCiAgICAgUlVOX0lOX0xPQ0FMRV9TRUNUSU9OIChjX2xvY2FsZSwg cmV0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMl9sb2NhbGVfdG9jYXNlICgoc2Nt X3RfdWludDMyICopIGNfc3RyLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmNfdXBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnVwbGVuLCB1MzJfdG91cHBlcikpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjX2NvbnZzdHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZsZW4sIGZ1bmMpKTsKICAgZWxzZQog ICAgIHJldCA9CiAgICAgICB1MzJfbG9jYWxlX3RvY2FzZSAoKHNjbV90X3VpbnQzMiAqKSBjX3N0 ciwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICZjX3Vwc3RyLCAmdXBsZW4sIHUzMl90 b3VwcGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAmY19jb252c3RyLCAmY29udmxlbiwg ZnVuYyk7CiAKICAgc2NtX3JlbWVtYmVyX3VwdG9faGVyZSAoc3RyKTsKIAogICBpZiAoU0NNX1VO TElLRUxZIChyZXQgIT0gMCkpCiAgICAgewotICAgICAgZXJybm8gPSByZXQ7Ci0gICAgICBzY21f c3lzZXJyb3IgKEZVTkNfTkFNRSk7CisgICAgICAqZXJyID0gcmV0OworICAgICAgcmV0dXJuIE5V TEw7CiAgICAgfQogCi0gIHVwc3RyID0gc2NtX2lfbWFrZV93aWRlX3N0cmluZyAodXBsZW4sICZj X2J1Zik7Ci0gIG1lbWNweSAoY19idWYsIGNfdXBzdHIsIHVwbGVuICogc2l6ZW9mIChzY21fdF93 Y2hhcikpOwotICBmcmVlIChjX3Vwc3RyKTsKKyAgY29udnN0ciA9IHNjbV9pX21ha2Vfd2lkZV9z dHJpbmcgKGNvbnZsZW4sICZjX2J1Zik7CisgIG1lbWNweSAoY19idWYsIGNfY29udnN0ciwgY29u dmxlbiAqIHNpemVvZiAoc2NtX3Rfd2NoYXIpKTsKKyAgZnJlZSAoY19jb252c3RyKTsKIAotICBz Y21faV90cnlfbmFycm93X3N0cmluZyAodXBzdHIpOworICBzY21faV90cnlfbmFycm93X3N0cmlu ZyAoY29udnN0cik7CiAKLSAgcmV0dXJuIHVwc3RyOworICByZXR1cm4gY29udnN0cjsKK30KKwor U0NNX0RFRklORSAoc2NtX3N0cmluZ19sb2NhbGVfdXBjYXNlLCAic3RyaW5nLWxvY2FsZS11cGNh c2UiLCAxLCAxLCAwLAorCSAgICAoU0NNIHN0ciwgU0NNIGxvY2FsZSksCisJICAgICJSZXR1cm4g YSBuZXcgc3RyaW5nIHRoYXQgaXMgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIG9mICIKKwkgICAgIkB2 YXJ7c3RyfSBhY2NvcmRpbmcgdG8gZWl0aGVyIEB2YXJ7bG9jYWxlfSBvciB0aGUgY3VycmVudCAi CisJICAgICJsb2NhbGUuIikKKyNkZWZpbmUgRlVOQ19OQU1FIHNfc2NtX3N0cmluZ19sb2NhbGVf dXBjYXNlCit7CisgIHNjbV90X2xvY2FsZSBjX2xvY2FsZTsKKyAgU0NNIHJldDsKKyAgaW50IGVy ciA9IDA7CisKKyAgU0NNX1ZBTElEQVRFX1NUUklORyAoMSwgc3RyKTsKKyAgU0NNX1ZBTElEQVRF X09QVElPTkFMX0xPQ0FMRV9DT1BZICgyLCBsb2NhbGUsIGNfbG9jYWxlKTsKKworICByZXQgPSBz dHJfdG9fY2FzZSAoc3RyLCBjX2xvY2FsZSwgdTMyX3RvdXBwZXIsICZlcnIpOworICAKKyAgaWYg KGVyciAhPSAwKQorICAgIHsKKyAgICAgIGVycm5vID0gZXJyOworICAgICAgc2NtX3N5c2Vycm9y IChGVU5DX05BTUUpOworICAgIH0KKyAgcmV0dXJuIHJldDsKIH0KICN1bmRlZiBGVU5DX05BTUUK IApAQCAtMTI0Myw0NSArMTI4Niw0NiBAQCBTQ01fREVGSU5FIChzY21fc3RyaW5nX2xvY2FsZV9k b3duY2FzZSwgInN0cmluZy1sb2NhbGUtZG93bmNhc2UiLCAxLCAxLCAwLAogCSAgICAibG9jYWxl LiIpCiAjZGVmaW5lIEZVTkNfTkFNRSBzX3NjbV9zdHJpbmdfbG9jYWxlX2Rvd25jYXNlCiB7Ci0g IHNjbV90X3djaGFyICpjX3N0ciwgKmNfYnVmOwotICBzY21fdF91aW50MzIgKmNfZG93bnN0cjsK LSAgc2l6ZV90IGxlbiwgZG93bmxlbjsKLSAgaW50IHJldDsKICAgc2NtX3RfbG9jYWxlIGNfbG9j YWxlOwotICBTQ00gZG93bnN0cjsKKyAgU0NNIHJldDsKKyAgaW50IGVyciA9IDA7CiAKICAgU0NN X1ZBTElEQVRFX1NUUklORyAoMSwgc3RyKTsKICAgU0NNX1ZBTElEQVRFX09QVElPTkFMX0xPQ0FM RV9DT1BZICgyLCBsb2NhbGUsIGNfbG9jYWxlKTsKLSAgbGVuID0gc2NtX2lfc3RyaW5nX2xlbmd0 aCAoc3RyKTsKLSAgaWYgKGxlbiA9PSAwKQotICAgIHJldHVybiBzY21fbnVsbHN0cjsKLSAgU0NN X1NUUklOR19UT19VMzJfQlVGIChzdHIsIGNfc3RyKTsKIAotICBpZiAoY19sb2NhbGUpCi0gICAg UlVOX0lOX0xPQ0FMRV9TRUNUSU9OIChjX2xvY2FsZSwgcmV0ID0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUzMl9sb2NhbGVfdG9jYXNlICgoc2NtX3RfdWludDMyICopIGNfc3RyLCBsZW4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNfZG93bnN0 ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG93bmxl biwgdTMyX3RvbG93ZXIpKTsKLSAgZWxzZQotICAgIHJldCA9Ci0gICAgICB1MzJfbG9jYWxlX3Rv Y2FzZSAoKHNjbV90X3VpbnQzMiAqKSBjX3N0ciwgbGVuLAotICAgICAgICAgICAgICAgICAgICAg ICAgICZjX2Rvd25zdHIsICZkb3dubGVuLCB1MzJfdG9sb3dlcik7CisgIHJldCA9IHN0cl90b19j YXNlIChzdHIsIGNfbG9jYWxlLCB1MzJfdG9sb3dlciwgJmVycik7CiAKLSAgc2NtX3JlbWVtYmVy X3VwdG9faGVyZSAoc3RyKTsKLQotICBpZiAoU0NNX1VOTElLRUxZIChyZXQgIT0gMCkpCisgIGlm IChlcnIgIT0gMCkKICAgICB7Ci0gICAgICBlcnJubyA9IHJldDsKKyAgICAgIGVycm5vID0gZXJy OwogICAgICAgc2NtX3N5c2Vycm9yIChGVU5DX05BTUUpOwogICAgIH0KKyAgcmV0dXJuIHJldDsK K30KKyN1bmRlZiBGVU5DX05BTUUKKworU0NNX0RFRklORSAoc2NtX3N0cmluZ19sb2NhbGVfdGl0 bGVjYXNlLCAic3RyaW5nLWxvY2FsZS10aXRsZWNhc2UiLCAxLCAxLCAwLAorCSAgICAoU0NNIHN0 ciwgU0NNIGxvY2FsZSksCisJICAgICJSZXR1cm4gYSBuZXcgc3RyaW5nIHRoYXQgaXMgdGhlIHRp dGxlLWNhc2UgdmVyc2lvbiBvZiAiCisJICAgICJAdmFye3N0cn0gYWNjb3JkaW5nIHRvIGVpdGhl ciBAdmFye2xvY2FsZX0gb3IgdGhlIGN1cnJlbnQgIgorCSAgICAibG9jYWxlLiIpCisjZGVmaW5l IEZVTkNfTkFNRSBzX3NjbV9zdHJpbmdfbG9jYWxlX3RpdGxlY2FzZQoreworICBzY21fdF9sb2Nh bGUgY19sb2NhbGU7CisgIFNDTSByZXQ7CisgIGludCBlcnIgPSAwOwogCi0gIGRvd25zdHIgPSBz Y21faV9tYWtlX3dpZGVfc3RyaW5nIChkb3dubGVuLCAmY19idWYpOwotICBtZW1jcHkgKGNfYnVm LCBjX2Rvd25zdHIsIGRvd25sZW4gKiBzaXplb2YgKHNjbV90X3djaGFyKSk7Ci0gIGZyZWUgKGNf ZG93bnN0cik7CisgIFNDTV9WQUxJREFURV9TVFJJTkcgKDEsIHN0cik7CisgIFNDTV9WQUxJREFU RV9PUFRJT05BTF9MT0NBTEVfQ09QWSAoMiwgbG9jYWxlLCBjX2xvY2FsZSk7CiAKLSAgc2NtX2lf dHJ5X25hcnJvd19zdHJpbmcgKGRvd25zdHIpOworICByZXQgPSBzdHJfdG9fY2FzZSAoc3RyLCBj X2xvY2FsZSwgdTMyX3RvdGl0bGUsICZlcnIpOwogCi0gIHJldHVybiBkb3duc3RyOworICBpZiAo ZXJyICE9IDApCisgICAgeworICAgICAgZXJybm8gPSBlcnI7CisgICAgICBzY21fc3lzZXJyb3Ig KEZVTkNfTkFNRSk7CisgICAgfQorICByZXR1cm4gcmV0OwogfQogI3VuZGVmIEZVTkNfTkFNRQog CmRpZmYgLS1naXQgYS9saWJndWlsZS9pMThuLmggYi9saWJndWlsZS9pMThuLmgKaW5kZXggMTYw NDVlYi4uYzI3OTJhYyAxMDA2NDQKLS0tIGEvbGliZ3VpbGUvaTE4bi5oCisrKyBiL2xpYmd1aWxl L2kxOG4uaApAQCAtMzgsOCArMzgsMTAgQEAgU0NNX0FQSSBTQ00gc2NtX2NoYXJfbG9jYWxlX2Np X2d0IChTQ00gYzEsIFNDTSBjMiwgU0NNIGxvY2FsZSk7CiBTQ01fQVBJIFNDTSBzY21fY2hhcl9s b2NhbGVfY2lfZXEgKFNDTSBjMSwgU0NNIGMyLCBTQ00gbG9jYWxlKTsKIFNDTV9BUEkgU0NNIHNj bV9jaGFyX2xvY2FsZV91cGNhc2UgKFNDTSBjaHIsIFNDTSBsb2NhbGUpOwogU0NNX0FQSSBTQ00g c2NtX2NoYXJfbG9jYWxlX2Rvd25jYXNlIChTQ00gY2hyLCBTQ00gbG9jYWxlKTsKK1NDTV9BUEkg U0NNIHNjbV9jaGFyX2xvY2FsZV90aXRsZWNhc2UgKFNDTSBjaHIsIFNDTSBsb2NhbGUpOwogU0NN X0FQSSBTQ00gc2NtX3N0cmluZ19sb2NhbGVfdXBjYXNlIChTQ00gY2hyLCBTQ00gbG9jYWxlKTsK IFNDTV9BUEkgU0NNIHNjbV9zdHJpbmdfbG9jYWxlX2Rvd25jYXNlIChTQ00gY2hyLCBTQ00gbG9j YWxlKTsKK1NDTV9BUEkgU0NNIHNjbV9zdHJpbmdfbG9jYWxlX3RpdGxlY2FzZSAoU0NNIGNociwg U0NNIGxvY2FsZSk7CiBTQ01fQVBJIFNDTSBzY21fbG9jYWxlX3N0cmluZ190b19pbnRlZ2VyIChT Q00gc3RyLCBTQ00gYmFzZSwgU0NNIGxvY2FsZSk7CiBTQ01fQVBJIFNDTSBzY21fbG9jYWxlX3N0 cmluZ190b19pbmV4YWN0IChTQ00gc3RyLCBTQ00gbG9jYWxlKTsKIApkaWZmIC0tZ2l0IGEvbGli Z3VpbGUvc3JmaS0xMy5jIGIvbGliZ3VpbGUvc3JmaS0xMy5jCmluZGV4IGNmMmFiZmMuLmM0ZTg1 NzEgMTAwNjQ0Ci0tLSBhL2xpYmd1aWxlL3NyZmktMTMuYworKysgYi9saWJndWlsZS9zcmZpLTEz LmMKQEAgLTIxOTgsNyArMjE5OCw3IEBAIHN0cmluZ190aXRsZWNhc2VfeCAoU0NNIHN0ciwgc2l6 ZV90IHN0YXJ0LCBzaXplX3QgZW5kKQogCXsKIAkgIGlmICghaW5fd29yZCkKIAkgICAgewotCSAg ICAgIHNjbV9pX3N0cmluZ19zZXRfeCAoc3RyLCBpLCB1Y190b3VwcGVyIChTQ01fQ0hBUiAoY2gp KSk7CisJICAgICAgc2NtX2lfc3RyaW5nX3NldF94IChzdHIsIGksIHVjX3RvdGl0bGUgKFNDTV9D SEFSIChjaCkpKTsKIAkgICAgICBpbl93b3JkID0gMTsKIAkgICAgfQogCSAgZWxzZQpkaWZmIC0t Z2l0IGEvbW9kdWxlL2ljZS05L2kxOG4uc2NtIGIvbW9kdWxlL2ljZS05L2kxOG4uc2NtCmluZGV4 IGU2M2VjNzQuLjUyZDdjYjQgMTAwNjQ0Ci0tLSBhL21vZHVsZS9pY2UtOS9pMThuLnNjbQorKysg Yi9tb2R1bGUvaWNlLTkvaTE4bi5zY20KQEAgLTQyLDggKzQyLDggQEAKICAgICAgICAgICAgY2hh ci1sb2NhbGUtY2k8PyBjaGFyLWxvY2FsZS1jaT4/IGNoYXItbG9jYWxlLWNpPT8KIAogICAgICAg ICAgICA7OyBjaGFyYWN0ZXIgbWFwcGluZwotICAgICAgICAgICBjaGFyLWxvY2FsZS1kb3duY2Fz ZSBjaGFyLWxvY2FsZS11cGNhc2UKLSAgICAgICAgICAgc3RyaW5nLWxvY2FsZS1kb3duY2FzZSBz dHJpbmctbG9jYWxlLXVwY2FzZQorICAgICAgICAgICBjaGFyLWxvY2FsZS1kb3duY2FzZSBjaGFy LWxvY2FsZS11cGNhc2UgY2hhci1sb2NhbGUtdGl0bGVjYXNlCisgICAgICAgICAgIHN0cmluZy1s b2NhbGUtZG93bmNhc2Ugc3RyaW5nLWxvY2FsZS11cGNhc2Ugc3RyaW5nLWxvY2FsZS10aXRsZWNh c2UKIAogICAgICAgICAgICA7OyByZWFkaW5nIG51bWJlcnMKICAgICAgICAgICAgbG9jYWxlLXN0 cmluZy0+aW50ZWdlciBsb2NhbGUtc3RyaW5nLT5pbmV4YWN0CmRpZmYgLS1naXQgYS90ZXN0LXN1 aXRlL3Rlc3RzL2NoYXJzLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL2NoYXJzLnRlc3QKaW5kZXgg NjdlNzJhNi4uMDE5NDkwMyAxMDA2NDQKLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy9jaGFycy50ZXN0 CisrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvY2hhcnMudGVzdApAQCAtMjA0LDYgKzIwNCwxMyBAQAog ICAgICAgICAgICAobm90IChjaGFyLWxvd2VyLWNhc2U/ICNcMSkpCiAgICAgICAgICAgIChub3Qg KGNoYXItbG93ZXItY2FzZT8gI1wrKSkpKQogCisgICAgKHBhc3MtaWYgImNoYXItdGl0bGUtY2Fz ZT8iCisgICAgICAoYW5kIChjaGFyLXRpdGxlLWNhc2U/ICNcNzYyKQorCSAgIChub3QgKGNoYXIt dGl0bGUtY2FzZT8gI1xBKSkKKwkgICAobm90IChjaGFyLXRpdGxlLWNhc2U/ICNcYSkpCisJICAg KG5vdCAoY2hhci10aXRsZS1jYXNlPyAjXDEpKQorCSAgIChub3QgKGNoYXItdGl0bGUtY2FzZT8g I1wrKSkpKQorCiAgICAgKHBhc3MtaWYgImNoYXItaXMtYm90aD8gd29ya3MiCiAgICAgICAoYW5k CiAgICAgICAgKG5vdCAoY2hhci1pcy1ib3RoPyAjXD8pKQpAQCAtMjQ1LDcgKzI1MiwxMSBAQAog ICAgICAgKGVxdj8gKGNoYXItdXBjYXNlICNcYSkgI1xBKSkKIAogICAgIChwYXNzLWlmICJjaGFy LWRvd25jYXNlIgotICAgICAgKGVxdj8gKGNoYXItZG93bmNhc2UgI1xBKSAjXGEpKSkKKyAgICAg IChlcXY/IChjaGFyLWRvd25jYXNlICNcQSkgI1xhKSkKKworICAgIChwYXNzLWlmICJjaGFyLXRp dGxlY2FzZSIKKyAgICAgIChhbmQgKGVxdj8gKGNoYXItdGl0bGVjYXNlICNcYSkgI1xBKQorICAg ICAgICAgICAoZXF2PyAoY2hhci10aXRsZWNhc2UgI1w3NjMpICNcNzYyKSkpKQogCiAgICh3aXRo LXRlc3QtcHJlZml4ICJjaGFybmFtZXMiCiAKZGlmZiAtLWdpdCBhL3Rlc3Qtc3VpdGUvdGVzdHMv aTE4bi50ZXN0IGIvdGVzdC1zdWl0ZS90ZXN0cy9pMThuLnRlc3QKaW5kZXggODk5MjRiNi4uYjI0 MzFkZCAxMDA2NDQKLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy9pMThuLnRlc3QKKysrIGIvdGVzdC1z dWl0ZS90ZXN0cy9pMThuLnRlc3QKQEAgLTIwMiw2ICsyMDIsMTQgQEAKICAgICAoYW5kIChlcT8g I1xaIChjaGFyLWxvY2FsZS11cGNhc2UgI1x6KSkKICAgICAgICAgIChlcT8gI1xaIChjaGFyLWxv Y2FsZS11cGNhc2UgI1x6IChtYWtlLWxvY2FsZSBMQ19BTEwgIkMiKSkpKSkKIAorICAocGFzcy1p ZiAiY2hhci1sb2NhbGUtdGl0bGVjYXNlIgorICAgIChhbmQgKGVxPyAjXFQgKGNoYXItbG9jYWxl LXRpdGxlY2FzZSAjXHQpKQorCSAoZXE/ICNcVCAoY2hhci1sb2NhbGUtdGl0bGVjYXNlICNcdCAo bWFrZS1sb2NhbGUgTENfQUxMICJDIikpKSkpCisKKyAgKHBhc3MtaWYgImNoYXItbG9jYWxlLXRp dGxlY2FzZS1EeiIKKyAgICAoYW5kIChlcT8gI1w3NjIgKGNoYXItbG9jYWxlLXRpdGxlY2FzZSAj XDc2MykpCisJIChlcT8gI1w3NjIgKGNoYXItbG9jYWxlLXRpdGxlY2FzZSAjXDc2MyAobWFrZS1s b2NhbGUgTENfQUxMICJDIikpKSkpCisKICAgKHBhc3MtaWYgImNoYXItbG9jYWxlLXVwY2FzZSBU dXJraXNoIgogICAgICh1bmRlci10dXJraXNoLXV0ZjgtbG9jYWxlLW9yLXVucmVzb2x2ZWQKICAg ICAgKGxhbWJkYSAoKQpAQCAtMjI5LDYgKzIzNywxMSBAQAogICAgIChhbmQgKHN0cmluZz0/ICJa IiAoc3RyaW5nLWxvY2FsZS11cGNhc2UgInoiKSkKICAgICAgICAgIChzdHJpbmc9PyAiWiIgKHN0 cmluZy1sb2NhbGUtdXBjYXNlICJ6IiAobWFrZS1sb2NhbGUgTENfQUxMICJDIikpKSkpCiAKKyAg KHBhc3MtaWYgInN0cmluZy1sb2NhbGUtdGl0bGVjYXNlIgorICAgIChhbmQgKHN0cmluZz0/ICJU dCIgKHN0cmluZy1sb2NhbGUtdGl0bGVjYXNlICJ0dCIpKQorCSAoc3RyaW5nPT8gIlR0IiAoc3Ry aW5nLWxvY2FsZS10aXRsZWNhc2UgCisJCQkgInR0IiAobWFrZS1sb2NhbGUgTENfQUxMICJDIikp KSkpCisKICAgKHBhc3MtaWYgInN0cmluZy1sb2NhbGUtdXBjYXNlIFR1cmtpc2giCiAgICAgKHVu ZGVyLXR1cmtpc2gtdXRmOC1sb2NhbGUtb3ItdW5yZXNvbHZlZAogICAgICAobGFtYmRhICgpCmRp ZmYgLS1naXQgYS90ZXN0LXN1aXRlL3Rlc3RzL3NyZmktMTMudGVzdCBiL3Rlc3Qtc3VpdGUvdGVz dHMvc3JmaS0xMy50ZXN0CmluZGV4IDBkMmZmNTkuLjY4NjQyODcgMTAwNjQ0Ci0tLSBhL3Rlc3Qt c3VpdGUvdGVzdHMvc3JmaS0xMy50ZXN0CisrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xMy50 ZXN0CkBAIC0xNDgsNiArMTQ4LDI1IEBACiAgICAgICAoc3RyaW5nLWFueSBjaGFyLXVwcGVyLWNh c2U/ICJhYkNERSIgMSA0KSkpKQogCiA7OzsKKzs7OyBzdHJpbmctdGl0bGVjYXNlCis7OzsKKwor KHdpdGgtdGVzdC1wcmVmaXggInN0cmluZy10aXRsZWNhc2UiCisKKyAgKHBhc3MtaWYgImFsbC1s b3dlciIgCisgICAgKHN0cmluZz0/ICJGb28iIChzdHJpbmctdGl0bGVjYXNlICJmb28iKSkpCisK KyAgKHBhc3MtaWYgImFsbC11cHBlciIKKyAgICAoc3RyaW5nPT8gIkZvbyIgKHN0cmluZy10aXRs ZWNhc2UgIkZPTyIpKSkKKworICAocGFzcy1pZiAidHdvLXdvcmRzIgorICAgIChzdHJpbmc9PyAi SGVsbG8sIFdvcmxkISIgKHN0cmluZy10aXRsZWNhc2UgImhlbGxvLCB3b3JsZCEiKSkpCisKKyAg KHBhc3MtaWYgInRpdGxlY2FzZS1jaGFyYWN0ZXJzIgorICAgIChzdHJpbmc9PyAobGlzdC0+c3Ry aW5nICcoI1w3NjIpKSAKKwkgICAgICAoc3RyaW5nLXRpdGxlY2FzZSAobGlzdC0+c3RyaW5nICco I1w3NjMpKSkpKSkKKworOzs7CiA7Ozsgc3RyaW5nLWFwcGVuZC9zaGFyZWQKIDs7OwogCi0tIAox LjYuMy4zCgo= --0016e6d7842320e821047b3d8b73--