From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Luke Lee Newsgroups: gmane.emacs.devel Subject: Re: Fwd: Update earlier posted hideif.el enhancements Date: Tue, 3 Dec 2013 12:33:54 +0800 Message-ID: References: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=047d7b6773d653ed9d04ec99d0ba X-Trace: ger.gmane.org 1386045280 4072 80.91.229.3 (3 Dec 2013 04:34:40 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 3 Dec 2013 04:34:40 +0000 (UTC) Cc: emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Dec 03 05:34:46 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Vnhh6-0000Ya-RP for ged-emacs-devel@m.gmane.org; Tue, 03 Dec 2013 05:34:45 +0100 Original-Received: from localhost ([::1]:40124 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vnhh6-0001pf-EC for ged-emacs-devel@m.gmane.org; Mon, 02 Dec 2013 23:34:44 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:56784) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vnhh1-0001pX-Hp for emacs-devel@gnu.org; Mon, 02 Dec 2013 23:34:40 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vnhh0-0005yq-89 for emacs-devel@gnu.org; Mon, 02 Dec 2013 23:34:39 -0500 Original-Received: from mail-pd0-x22e.google.com ([2607:f8b0:400e:c02::22e]:52018) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vnhgz-0005yb-NV for emacs-devel@gnu.org; Mon, 02 Dec 2013 23:34:38 -0500 Original-Received: by mail-pd0-f174.google.com with SMTP id y13so19309249pdi.5 for ; Mon, 02 Dec 2013 20:34:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=sBUj+zcqiD2YGN0W1wMfoHoqVSnFDB87gGP27523TGc=; b=pJCKQymzm5T8JlP1L8IgezY560+f1PRUvQ1uTLUSU2pTF2pn/SGWbJ+OtiuAu1TgHr QG34kj5zdRchmq+6Ae6T3RloYZQfylTUMc/Kj4RYlvZ0CULOMNxSnHajXcwwRoaaqDqz AgB8b6B46eQo1MeZ7tinFjmk8w1C8vgSk++ic3BdMbeBaWn1ymFvrcEH2PD2iIpxe9XX wz9lNzL0+XcGerdKFazd+rq/Yc/f1UPGvzRmrKpuOfK0RzL3zQXJcABnMZHIBDfXYtVx g/bFlz3mh312AvUCdcoby/OogOOFQR20gTWztjtzIi1N63uIiwNnkcd2oQ0QyRc2lUhB 8ayA== X-Received: by 10.68.91.3 with SMTP id ca3mr36022780pbb.20.1386045276145; Mon, 02 Dec 2013 20:34:36 -0800 (PST) Original-Received: by 10.70.17.226 with HTTP; Mon, 2 Dec 2013 20:33:54 -0800 (PST) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c02::22e X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 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-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:166029 Archived-At: --047d7b6773d653ed9d04ec99d0ba Content-Type: multipart/alternative; boundary=047d7b6773d653ed9a04ec99d0b8 --047d7b6773d653ed9a04ec99d0b8 Content-Type: text/plain; charset=ISO-8859-1 >> ;; inherit global values >> - (set (make-local-variable 'hide-ifdef-env) >> - (default-value 'hide-ifdef-env)) >> +;; (set (make-local-variable 'hide-ifdef-env) >> +;; (default-value 'hide-ifdef-env)) >> + (set 'hide-ifdef-env (default-value 'hide-ifdef-env)) > >I don't undertand this change. "(set ' ...)" is just a bad form of >(setq ...) so use `setq' instead. Umm, here I only comment out the "make-local-variable" for hide-ifdef-env. Otherwise the defined tokens works only for that buffer. I would like it to work for all currently openned buffers in a "project" based manner. The "set" form derived from the original code. And I think it follows the example help page of 'make-variable-buffer-local'. Is that help page out-dated? >Indeed, there's been no real development on it in recently. See my >comments below. Overall, I think it looks good and could be included in >hideif.el, but I'd appreciate if you could clean up a few things first >and split the change into a few chunks (this is a bit large to review as >one single chunk). IIUC one chunk would focus on extend the current >parser & evaluator to handle the full CPP syntax. >The remaining cleanups The remaining cleanups are done. The original code that I derived from contains a lot of ';;;' comments, I fixed most of them but left some since they looks like to be placed on purpose to become a separator there. To split the patch into some topic chunks is quite difficult now since it's originally derived from a lot of commits in my local branch. Even the core of my modification is rewritten twice. The first time I tried is to store the parsing tree for each defined symbol so that there is no need to reparse every time. However later I found it mandatory to restart from token level since the token expansion sometimes re-ordered the parse tree due to operator precedence. For example #define EXPR(a,b) a * b #define EXPR2 EXPR(c+d,e+f) The final result of EXPR2 will become c+d*e+f where d*e must be calculated first. If we keep the parsing tree it will become (c+d) * (e+f). Although good programs should not have such kind of errors but if we're implement hideif this way it will not help programmer to catch such kind of hidden C programming bugs early. Especially when a lot of operators mixed together with some parenthesis skipped. Therefore it's extremely time consuming to cherry-pick among all those changes and group them into several valid topic patches, sorry about that... Attached is the cleanup patch add-on to my previously posted patch. Thanks. -- Best regards, Luke Lee --047d7b6773d653ed9a04ec99d0b8 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
>> =A0 =A0 =A0= ;; inherit global values
>> - =A0 =A0 (set (make-local-variable 'hide-ifdef-env)
>> - =A0 =A0 =A0 =A0 =A0(de= fault-value 'hide-ifdef-env))
>> +;; =A0 (set (make-local-var= iable 'hide-ifdef-env)
>> + =A0 =A0 (set 'hide-ifdef-en= v (default-value 'hide-ifdef-env))
>
>I don't undertand this change. =A0"(set '= ;<foo> ...)" is just a bad form of
>(setq <foo> ...) so use `setq' instead= .

Umm, here I only comment out the "make-local-variabl= e" for hide-ifdef-env.
Otherwise the defined tokens works only for that buffer. I would like it= to
work for all currently openned buffer= s in a "project" based manner. The "set"
form derived from the original code. An= d I think it follows the example help
page of 'make-variable-buffer-loc= al'. Is that help page out-dated?

>= Indeed, there's been no real development on it in recently. =A0See my
>comments below. =A0Overall, I think it looks= good and could be included in
>hideif.e= l, but I'd appreciate if you could clean up a few things first
>and split the change into a few chunks (this is a bit large to review a= s
>one single chunk). =A0IIUC one chunk = would focus on extend the current
>parse= r & evaluator to handle the full CPP syntax.
>The remaining cleanups

The remaining cleanups are = done. The original code that I derived from=A0
contains a lot of ';;;' comments, I fixed most of them but left= some since
they looks like to be placed on purpose to becom= e a separator there.

To split the patch into some topic chunks is quite difficu= lt now since it's=A0
originally derived from a lot of commits in my l= ocal branch.=A0

Even the core of my modification is rewritten twice. The first ti= me I tried=A0
is to store the parsing tree for each defined sy= mbol so that there is no=A0
need to reparse= every time. However later I found it mandatory to restart=A0
from token level since the token expansion sometimes re-ordered the=A0
parse tree due to operator precedence. For exam= ple

#d= efine EXPR(a,b) =A0a * b
#define EXPR2 =A0 =A0 =A0EXPR(c+d,e+f)

The final resul= t of EXPR2 will become c+d*e+f where d*e must be=A0
calculated first. If we keep the parsing tree it will become (c+d)= * (e+f).=A0
Although good programs should not have such kind= of errors but if we're
implement hidei= f this way it will not help programmer to catch such kind of=A0
hidden C programming bugs early. Especially when a lot of operators=A0
mixed together with some parenthesis skipped.

Therefo= re it's extremely time consuming to cherry-pick among all those=A0
changes and group them into several valid topic = patches, sorry about that...

Attached is the clean= up patch add-on to my previously posted patch.=A0
Thanks.

--
Best regards,
Luke Lee

--047d7b6773d653ed9a04ec99d0b8-- --047d7b6773d653ed9d04ec99d0ba Content-Type: application/octet-stream; name="hideif-cleanup.patch" Content-Disposition: attachment; filename="hideif-cleanup.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hoqnjqq20 RnJvbSAwZmRiMmRmZmEwNmQyOTlkMmM3M2QxYTA3OWM0NGU0YzRmODdmZDhkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWtlIExlZSA8bHVrZS55eC5sZWVAZ21haWwuY29tPgpEYXRl OiBUdWUsIDMgRGVjIDIwMTMgMTI6MzE6MDQgKzA4MDAKU3ViamVjdDogW1BBVENIXSBTb21lIGNs ZWFudXBzIGZvciBoaWRlaWYuCgotLS0KIGxpc3AvcHJvZ21vZGVzL2hpZGVpZi5lbCB8IDIwMSAr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDk1IGluc2VydGlvbnMoKyksIDEwNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9s aXNwL3Byb2dtb2Rlcy9oaWRlaWYuZWwgYi9saXNwL3Byb2dtb2Rlcy9oaWRlaWYuZWwKaW5kZXgg Yjg5ZDQyZi4uZTVhMmEzZCAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvaGlkZWlmLmVsCisr KyBiL2xpc3AvcHJvZ21vZGVzL2hpZGVpZi5lbApAQCAtMTQyLDE0ICsxNDIsMTYgQEAKICAgOmdy b3VwICdoaWRlLWlmZGVmKQoKIChkZWZjdXN0b20gaGlkZS1pZmRlZi1leHBhbmQtcmUtaW5jbHVz aW9uLXByb3RlY3Rpb24gdAotICAiV2hlbiBoaWRpbmcgaGVhZGVyIGZpbGVzLCBhbHdheXMgZXhw YW5kIHRoZSByZS1pbmNsdXNpb24gcHJvdGVjdGluZyBpZmRlZnMuCi1Nb3N0IGhlYWRlciBmaWxl cyBhcmUgd3JhcHBlZCB3aXRoIGlmZGVmcyB0byBwcmV2ZW50IHJlLWluY2x1c2lvbjoKKyAgIldo ZW4gaGlkaW5nIGhlYWRlciBmaWxlcywgYWx3YXlzIGV4cGFuZCB0aGUgcmUtaW5jbHVzaW9uIHBy b3RlY3RlZAoraWZkZWZzLiBNb3N0IEMvQysrIGhlYWRlciBmaWxlcyBhcmUgd3JhcHBlZCB3aXRo IGlmZGVmcyB0byBwcmV2ZW50CityZS1pbmNsdXNpb24gb2YgdGhpcyBmb3JtCiAgICNpZmRlZiBf WFhYX0hFQURFUl9GSUxFX0lOQ0xVREVEXwogICAjZGVmaW5lIF9YWFhfSEVBREVSX0ZJTEVfSU5D TFVERURfCiAgIC4uLgogICAjZW5kaWYKLWhlbmNlIGlmIHdlIHRyeSB0byBoaWRlIGlmZGVmcywg aXQgd2lsbCBoaWRlIGV2ZXJ5dGhpbmcgd2hlbiB3ZSB0cmllZAotdGhlIHNlY29uZCB0aW1lIHNp bmNlIF9YWFhfSEVBREVSX0ZJTEVfSU5DTFVERURfIGFscmVhZHkgZGVmaW5lZC4iCitIZW5jZSwg aWYgd2UgdHJ5IHRvIGhpZGUgaWZkZWZzIGluIHRoZSBoZWFkZXIgZmlsZSwgaXQgd2lsbCBoaWRl CitldmVyeXRoaW5nIHdoZW4gd2UgdHJpZWQgdGhlIHNlY29uZCB0aW1lLHNpbmNlIF9YWFhfSEVB REVSX0ZJTEVfSU5DTFVERURfCitpcyBkZWZpbmVkIGF0IHRoZSBmaXJzdCB0aW1lIHRoYXQgd2Ug aGlkZSBpdC4iCiAgIDp0eXBlICdib29sZWFuCiAgIDpncm91cCAnaGlkZS1pZmRlZikKCkBAIC0z MjAsNyArMzIyLDcgQEAgU2V2ZXJhbCB2YXJpYWJsZXMgYWZmZWN0IGhvdyB0aGUgaGlkaW5nIGlz IGRvbmU6CiAgICh3aGlsZSAoPSAobG9nYW5kIDEgKHNraXAtY2hhcnMtYmFja3dhcmQgIlxcXFwi KSkgMSkKICAgICAoZW5kLW9mLWxpbmUgMikpKQoKLShkZWZ1biBtZXJnZS1pZmRlZi1yZWdpb24g KHN0YXJ0IGVuZCkKKyhkZWZ1biBoaWYtbWVyZ2UtaWZkZWYtcmVnaW9uIChzdGFydCBlbmQpCiAg IDs7IEdlbmVybmFsbHkgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIGl0c2VsZiByZWN1cnNpdmVs eSBzaW5jZSB0aGVyZSBzaG91bGQgb3JpZ2luYWxseQogICA7OyBleGlzdHMgbm8gdW4tbWVyZ2Vk IHJlZ2lvbnM7IGhvd2V2ZXIsIGlmIGEgcGFydCBvZiB0aGUgZmlsZSBpcyBoaWRkZW4gd2l0aCAn aGlkZS1pZmRlZi1saW5lcycKICAgOzsgYXMgbmlsIHdoaWxlIGFub3RoZXIgcGFydCB3aXRoICd0 LCB0aGlzIGNhc2UgaGFwcGVucy4KQEAgLTM0Niw3ICszNDgsNyBAQCB0b3RhbCBudW1iZXIgb2Yg b3ZlcmxheXMgY3JlYXRlZC4iCiAgICAgICAgICAgKHNldHEgYiAobWluIHN0YXJ0IChvdmVybGF5 LXN0YXJ0IG8pKQogICAgICAgICAgICAgICAgIGUgKG1heCBlbmQgKG92ZXJsYXktZW5kIG8pKSkK ICAgICAgICAgICAobW92ZS1vdmVybGF5IG8gYiBlKQotICAgICAgICAgIChtZXJnZS1pZmRlZi1y ZWdpb24gYiBlKQorICAgICAgICAgIChoaWYtbWVyZ2UtaWZkZWYtcmVnaW9uIGIgZSkKICAgICAg ICAgICAoc2V0cSBvYiBvKSkpCiAgICAgICA7OyBtZXJnZSBvdmVybGF5cyBhZnRlciAnZW5kJwog ICAgICAgKGRvbGlzdCAobyBlbmRvdnJzKQpAQCAtMzU0LDcgKzM1Niw3IEBAIHRvdGFsIG51bWJl ciBvZiBvdmVybGF5cyBjcmVhdGVkLiIKICAgICAgICAgICAoc2V0cSBiIChtaW4gc3RhcnQgKG92 ZXJsYXktc3RhcnQgbykpCiAgICAgICAgICAgICAgICAgZSAobWF4IGVuZCAob3ZlcmxheS1lbmQg bykpKQogICAgICAgICAgIChtb3ZlLW92ZXJsYXkgbyBiIGUpCi0gICAgICAgICAgKG1lcmdlLWlm ZGVmLXJlZ2lvbiBiIGUpCisgICAgICAgICAgKGhpZi1tZXJnZS1pZmRlZi1yZWdpb24gYiBlKQog ICAgICAgICAgIChzZXRmIG9lIG8pKSkKICAgICAgIDs7IGlmIGJvdGggJ3N0YXJ0JyAnZW5kJyBt ZXJnaW5nIGhhcHBlbnMsIG1lcmdlIGludG8gYmlnZ2VyIG9uZQogICAgICAgKHdoZW4gKGFuZCBv YiBvZSkKQEAgLTM2MiwxMSArMzY0LDExIEBAIHRvdGFsIG51bWJlciBvZiBvdmVybGF5cyBjcmVh dGVkLiIKICAgICAgICAgICAgICAgKGUgKG1heCAob3ZlcmxheS1lbmQgb2IpIChvdmVybGF5LWVu ZCBvZSkpKSkKICAgICAgICAgICAoZGVsZXRlLW92ZXJsYXkgb2UpCiAgICAgICAgICAgKG1vdmUt b3ZlcmxheSBvYiBiIGUpCi0gICAgICAgICAgKG1lcmdlLWlmZGVmLXJlZ2lvbiBiIGUpKSkKKyAg ICAgICAgICAoaGlmLW1lcmdlLWlmZGVmLXJlZ2lvbiBiIGUpKSkKICAgICAgIChvciBvYiBvZSkp KSkKCiAoZGVmdW4gaGlkZS1pZmRlZi1yZWdpb24taW50ZXJuYWwgKHN0YXJ0IGVuZCkKLSAgKHVu bGVzcyAobWVyZ2UtaWZkZWYtcmVnaW9uIHN0YXJ0IGVuZCkKKyAgKHVubGVzcyAoaGlmLW1lcmdl LWlmZGVmLXJlZ2lvbiBzdGFydCBlbmQpCiAgICAgKGxldCAoKG8gKG1ha2Utb3ZlcmxheSBzdGFy dCBlbmQpKSkKICAgICAgIChvdmVybGF5LXB1dCBvICdoaWRlLWlmZGVmIHQpCiAgICAgICAoaWYg aGlkZS1pZmRlZi1zaGFkb3cKQEAgLTQ1MSw3ICs0NTMsNiBAQCB0aGF0IGZvcm0gc2hvdWxkIGJl IGRpc3BsYXllZC4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFwo XFwuXFwuXFwuXFwpPyIgaGlmLXdoaXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcXCk/IiApKQot OzsoZGVmY29uc3QgaGlmLWhlYWRlci1yZWdleHAgIl4uKlxcLltoSF1cXChbaEhdXFx8W3hYXVt4 WF1cXHxbcFBdW3BQXVxcKT8iKQoKIDs7IFVzZWQgdG8gc3RvcmUgdGhlIGN1cnJlbnQgdG9rZW4g YW5kIHRoZSB3aG9sZSB0b2tlbiBsaXN0IGR1cmluZyBwYXJzaW5nLgogOzsgT25seSBib3VuZCBk eW5hbWljYWxseS4KQEAgLTU0MSwzNyArNTQyLDM5IEBAIHRoYXQgZm9ybSBzaG91bGQgYmUgZGlz cGxheWVkLiIpCiAgICAgICAgICAgICh0IChlcnJvciAiQmFkICNpZiBleHByZXNzaW9uOiAlcyIg KGJ1ZmZlci1zdHJpbmcpKSkpKSkpCiAgICAgKG5yZXZlcnNlIHRva2VuLWxpc3QpKSkKCi07Ozst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotOzs7IFRyYW5zbGF0ZSBDIHByZXByb2Nlc3NvciAjaWYgZXhwcmVzc2lvbnMgdXNp bmcgcmVjdXJzaXZlIGRlc2NlbnQuCi07OzsgVGhpcyBwYXJzZXIgaXMgbGltaXRlZCB0byB0aGUg b3BlcmF0b3JzICYmLCB8fCwgISwgYW5kICJkZWZpbmVkIi4KLTs7OyBBZGRlZCA9PSwgIT0sICss IGFuZCAtLiAgR2FyeSBPYmVyYnJ1bm5lciwgZ2FyeW9AYXZzLmNvbSwgOC85Lzk0Ci07OzsKLTs7 OyBJbXBsZW1lbnQgdGhlIEMgbGFuZ3VhZ2Ugb3BlcmF0b3IgcHJlY2VkZW5jZSB0YWJsZS4gQWRk IGFsbCB0aG9zZQotOzs7IG1pc3Npbmcgb3BlcmF0b3JzIHRoYXQgY291bGQgYmUgdXNlZCBpbiBt YWNyb3MuIEx1a2UgTGVlIDIwMTMtMDktMDQKLQotOzs7ICB8IE9wZXJhdG9yIFR5cGUgICAgICAg IHwgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFzc29jaWF0 aXZpdHkgfAotOzs7ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotOzs7ICB8IFByaW1h cnkgRXhwcmVzc2lvbiAgIHwgKCkgW10gLiAtPiBleHByKysgZXhwci0tICAgICAgICAgICAgICAg ICAgICB8IGxlZnQtdG8tcmlnaHQgfAotOzs7ICB8IFVuYXJ5IE9wZXJhdG9ycyAgICAgIHwgKiAm ICsgLSAhIH4gKytleHByIC0tZXhwciAodHlwZWNhc3QpIHNpemVvZiB8IHJpZ2h0LXRvLWxlZnQg fAotOzs7ICB8IEJpbmFyeSBPcGVyYXRvcnMgICAgIHwgKiAvICUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IGxlZnQtdG8tcmlnaHQgfAotOzs7ICB8ICAgICAgICAgICAg ICAgICAgICAgIHwgKyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgfAotOzs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgPj4gPDwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAotOzs7 ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgPCA+IDw9ID49ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAotOzs7ICB8ICAgICAgICAgICAgICAgICAg ICAgIHwgPT0gIT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgfAotOzs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgJiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAotOzs7ICB8ICAg ICAgICAgICAgICAgICAgICAgIHwgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgfAotOzs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwg fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg ICAgfAotOzs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgJiYgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAotOzs7ICB8ICAgICAgICAg ICAgICAgICAgICAgIHwgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgfAotOzs7ICB8IFRlcm5hcnkgT3BlcmF0b3IgICAgIHwgPzogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJpZ2h0LXRvLWxlZnQgfAot Ozs7IHh8IEFzc2lnbm1lbnQgT3BlcmF0b3JzIHwgPSArPSAtPSAqPSAvPSAlPSA+Pj0gPDw9ICY9 IF49ID0gICAgICAgICAgICB8IHJpZ2h0LXRvLWxlZnQgfAotOzs7ICB8IENvbW1hICAgICAgICAg ICAgICAgIHwgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxl ZnQtdG8tcmlnaHQgfAorOzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzs7IFRyYW5zbGF0ZSBDIHByZXByb2Nl c3NvciAjaWYgZXhwcmVzc2lvbnMgdXNpbmcgcmVjdXJzaXZlIGRlc2NlbnQuCis7OyBUaGlzIHBh cnNlciBpcyBsaW1pdGVkIHRvIHRoZSBvcGVyYXRvcnMgJiYsIHx8LCAhLCBhbmQgImRlZmluZWQi LgorOzsgQWRkZWQgPT0sICE9LCArLCBhbmQgLS4gIEdhcnkgT2JlcmJydW5uZXIsIGdhcnlvQGF2 cy5jb20sIDgvOS85NAorOzsKKzs7IEltcGxlbWVudCB0aGUgQyBsYW5ndWFnZSBvcGVyYXRvciBw cmVjZWRlbmNlIHRhYmxlLiBBZGQgYWxsIHRob3NlCis7OyBtaXNzaW5nIG9wZXJhdG9ycyB0aGF0 IGNvdWxkIGJlIHVzZWQgaW4gbWFjcm9zLiBMdWtlIExlZSAyMDEzLTA5LTA0CisKKzs7ICB8IE9w ZXJhdG9yIFR5cGUgICAgICAgIHwgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgIHwgQXNzb2Np YXRpdml0eSB8Cis7OyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworOzsgIHwgUHJpbWFyeSBFeHByZXNzaW9uICAg fCAoKSBbXSAuIC0+IGV4cHIrKyBleHByLS0gICAgfCBsZWZ0LXRvLXJpZ2h0IHwKKzs7ICB8IFVu YXJ5IE9wZXJhdG9ycyAgICAgIHwgKiAmICsgLSAhIH4gKytleHByIC0tZXhwciAgIHwgcmlnaHQt dG8tbGVmdCB8Cis7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8ICh0eXBlY2FzdCkgc2l6ZW9m ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorOzsgIHwgQmluYXJ5IE9wZXJhdG9ycyAgICAg fCAqIC8gJSAgICAgICAgICAgICAgICAgICAgICAgfCBsZWZ0LXRvLXJpZ2h0IHwKKzs7ICB8ICAg ICAgICAgICAgICAgICAgICAgIHwgKyAtICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICB8Cis7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8ID4+IDw8ICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorOzsgIHwgICAgICAgICAgICAgICAgICAgICAg fCA8ID4gPD0gPj0gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKzs7ICB8ICAg ICAgICAgICAgICAgICAgICAgIHwgPT0gIT0gICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICB8Cis7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8ICYgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorOzsgIHwgICAgICAgICAgICAgICAgICAgICAg fCBeICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKzs7ICB8ICAg ICAgICAgICAgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICB8Cis7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8ICYmICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorOzsgIHwgICAgICAgICAgICAgICAgICAgICAg fCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKzs7ICB8IFRl cm5hcnkgT3BlcmF0b3IgICAgIHwgPzogICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmlnaHQt dG8tbGVmdCB8Cis7OyB4fCBBc3NpZ25tZW50IE9wZXJhdG9ycyB8ID0gKz0gLT0gKj0gLz0gJT0g Pj49IDw8PSAmPSB8IHJpZ2h0LXRvLWxlZnQgfAorOzsgIHwgICAgICAgICAgICAgICAgICAgICAg fCBePSA9ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKzs7ICB8IENv bW1hICAgICAgICAgICAgICAgIHwgLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbGVmdC10 by1yaWdodCB8CgogKGRlZnN1YnN0IGhpZi1uZXh0dG9rZW4gKCkKICAgIlBvcCB0aGUgbmV4dCB0 b2tlbiBmcm9tIHRva2VuLWxpc3QgaW50byB0aGUgbGV0IHZhcmlhYmxlIFwiaGlmLXRva2VuXCIu IgogICAoc2V0cSBoaWYtdG9rZW4gKHBvcCBoaWYtdG9rZW4tbGlzdCkpKQoKLShkZWZzdWJzdCBp Zi12YWxpZC1pZGVudGlmaWVyIChpZCkKKyhkZWZzdWJzdCBoaWYtaWYtdmFsaWQtaWRlbnRpZmll ciAoaWQpCiAgIChub3QgKG9yIChudW1iZXJwIGlkKQogICAgICAgICAgICAoc3RyaW5ncCBpZCkp KSkKCkBAIC01OTAsMTkgKzU5MywyNyBAQCB0aGF0IGZvcm0gc2hvdWxkIGJlIGRpc3BsYXllZC4i KQogICAgICAgICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAgICAgIChzZXRxIHRv ayAoY2FkciB0b2tlbnMpKQogICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIChjYXIgdG9rZW5z KSAnaGlmLWxwYXJlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIChpZi12YWxp ZC1pZGVudGlmaWVyIHRvaykKKyAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIChoaWYt aWYtdmFsaWQtaWRlbnRpZmllciB0b2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZXEgKGNhZGRyIHRva2VucykgJ2hpZi1ycGFyZW4pKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzZXRxIHRva2VucyAoY2RkZHIgdG9rZW5zKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGVycm9yICJvcGVyYXRvciBcImRlZmluZWRcIiByZXF1aXJlcyBhbiBpZGVudGlmaWVy IikpCiAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgdG9rIChjYXIgdG9rZW5zKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRva2VucyAoY2RyIHRva2VucykpCi0gICAgICAgICAgICAg ICAgICAgICAgKHVubGVzcyAoaWYtdmFsaWQtaWRlbnRpZmllciB0b2spCisgICAgICAgICAgICAg ICAgICAgICAgKHVubGVzcyAoaGlmLWlmLXZhbGlkLWlkZW50aWZpZXIgdG9rKQogICAgICAgICAg ICAgICAgICAgICAgICAgKGVycm9yICJvcGVyYXRvciBcImRlZmluZWRcIiByZXF1aXJlcyBhbiBp ZGVudGlmaWVyIikpKQogICAgICAgICAgICAgICAgICAgICAobGlzdCAnaGlmLWRlZmluZWQgJ2hp Zi1scGFyZW4gdG9rICdoaWYtcnBhcmVuKSkKICAgICAgICAgICAgICAgICB0b2spKSkpKQogICAg IHJlc3VsdCkpCgotKGRlZnVuIGhpZi1leHBhbmQtdG9rZW4tbGlzdCAodG9rZW5zICZvcHRpb25h bCBtYWNyb25hbWUgcmVmbGlzdCkgOzsgcmVmZXJlbmNlIGxpc3QgdG8gcHJldmVudCBzZWxmLXJl ZmVyZW5jaW5nCisoZGVmdW4gaGlmLWZsYXR0ZW4gKGwpCisgICJGbGF0dGVuIGEgdHJlZSIKKyAg KGlmIChhbmQgbCAoYXRvbSBsKSkKKyAgICAgIChsaXN0IGwpCisgICAgKGlmIChjb25zcCBsKQor ICAgICAgICAobmNvbmMgKGhpZi1mbGF0dGVuIChjYXIgbCkpIChoaWYtZmxhdHRlbiAoY2RyIGwp KSkpKSkKKworKGRlZnVuIGhpZi1leHBhbmQtdG9rZW4tbGlzdCAodG9rZW5zICZvcHRpb25hbCBt YWNyb25hbWUgcmVmbGlzdCkKKyAgOzsgJ3JlZmxpc3QnIGlzIHRoZSByZWZlcmVuY2UgbGlzdCB0 byBwcmV2ZW50IHNlbGYtcmVmZXJlbmNpbmcKICAgIlBlcmZvcm0gZXhwYW5zaW9uIHRpbGwgZXZl cnl0aGluZyBleHBhbmRlZC4gTm8gc2VsZi1yZWZlcmVuY2UgZXhwYW5zaW9uLiIKICAgKGNhdGNo ICdzZWxmLXJlZmVyZW5jaW5nCiAgICAgKGxldCAoKGV4cGFuZGVkIG5pbCkKQEAgLTY1MSwxNCAr NjYyLDE1IEBAIHRoYXQgZm9ybSBzaG91bGQgYmUgZGlzcGxheWVkLiIpCiAgICAgICAgICAgICAg ICAgICAgOzsgbG9va3VwIHRvayByZXR1cm5zIGFuIGF0b20KICAgICAgICAgICAgICAgICAgICAo bGlzdCByZXApKSkKCi0gICAgICAgICAgICAgICAgOztbMjAxMy0xMC0yMiAxNjowNjoxMiArMDgw MF0gTXVzdCBrZWVwIHRoZSB0b2tlbiwgcmVtb3ZlaW5nIHRoaXMgdG9rZW4gbWlnaHQgcmVzdWx0 cyBpbiBhIGluY29tcGxldGUgZXhwcmVzc2lvbiB3aGljaCBjYW5ub3QgYmUgcGFyc2VkLgorICAg ICAgICAgICAgICAgIDs7WzIwMTMtMTAtMjIgMTY6MDY6MTIgKzA4MDBdIE11c3Qga2VlcCB0aGUg dG9rZW4sIHJlbW92ZWluZyB0aGlzIHRva2VuIG1pZ2h0IHJlc3VsdHMgaW4KKyAgICAgICAgICAg ICAgICA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBpbmNvbXBsZXRlIGV4cHJlc3Np b24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGZ1cnRoZXIuCiAgICAgICAgICAgICAgICAgOzsoKD0g MSAoaGlmLWRlZmluZWQgdG9rKSkgOzsgZGVmaW5lZCAoaGlmLWRlZmluZWQgdG9rKT0xLCBidXQg ZW1wdHkgKGhpZi1sb29rdXAgdG9rKT1uaWwsIHRodXMgcmVtb3ZlIHRoaXMgdG9rZW4KICAgICAg ICAgICAgICAgICA7OyAoc2V0cSByZW1haW5zIChkZWxldGUgdG9rIHJlbWFpbnMpKQogICAgICAg ICAgICAgICAgIDs7IG5pbCkKCiAgICAgICAgICAgICAgICAgKHQgOzsgdXN1YWwgSURzCiAgICAg ICAgICAgICAgICAgIChsaXN0IHRvaykpKSkpKQotICAgICAgKGZsYXR0ZW4gZXhwYW5kZWQpKSkp CisgICAgICAoaGlmLWZsYXR0ZW4gZXhwYW5kZWQpKSkpCgogKGRlZnVuIGhpZi1wYXJzZS1pZi1l eHAgKHRva2VuLWxpc3QgJm9wdGlvbmFsIG1hY3JvbmFtZSkKICAgIlBhcnNlIHRoZSBUT0tFTi1M SVNULiAgUmV0dXJuIHRyYW5zbGF0ZWQgbGlzdCBpbiBwcmVmaXggZm9ybS4iCkBAIC02NzAsMjIg KzY4Miw2IEBAIHRoYXQgZm9ybSBzaG91bGQgYmUgZGlzcGxheWVkLiIpCiAgICAgICAoaWYgaGlm LXRva2VuIDsgaXMgdGhlcmUgc3RpbGwgYSB0b2tlbj8KICAgICAgICAgICAoZXJyb3IgIkVycm9y OiB1bmV4cGVjdGVkIHRva2VuOiAlcyIgaGlmLXRva2VuKSkpKSkKCi07OzsKLTs7O1RvIG1hbnVh bGx5IHRlc3QgdGhlc2UgZnVuY3Rpb25zLCB0cnkgdGhlIGZvbGxvd2luZyBpbiBzY3JhdGNoIGJ1 ZmZlcjoKLTs7OwotOzs7KGhpZi1maW5kLWRlZmluZSAocG9pbnQpKSA7OyBmaW5kIG9ubHkgb25l ICNkZWZpbmUKLTs7OyhoaWYtYWRkLW5ldy1kZWZpbmVzKSA7OyBmaW5kIGFsbCAjZGVmaW5lcwot Ozs7Ci07OzsjZGVmaW5lIG1hY3JvICggYXJnMSAsIGFyZzIgLCBhcmczIC4uLiApIGFyZzEgKyBh cmcyICogYXJnMwotOzs7Ci07OzsoYXNzb2MgJ21hY3JvIGhpZGUtaWZkZWYtZW52KQotOzs7Ci07 OzsoaGlmLWNhbm9uaWNhbGl6ZS10b2tlbnMgaGlmLWlmeC1yZWdleHApCi07OzsoaGlmLWV4cGFu ZC10b2tlbi1saXN0IChoaWYtY2Fub25pY2FsaXplLXRva2VucyBoaWYtaWZ4LXJlZ2V4cCkpCi07 OzsoaGlmLWNhbm9uaWNhbGl6ZSBoaWYtaWZ4LXJlZ2V4cCkKLTs7OwotOzs7I2lmIG1hY3JvKCAo YSwyLDMpLCBiPDwxLCAoYyY3LGQpICkKLTs7OwoKIChkZWZ1biBoaWYtZXhwcmxpc3QgKCkKICAg IlBhcnNlIGFuIGV4cHJsaXN0OiBleHByIHsgJywnIGV4cHJ9IgpAQCAtOTc1LDEyICs5NzEsMTIg QEAgd2UgaWdub3JlIHRoZW0gYWxsIGhlcmUuIgogICAgICAsKGZvcm1hdCAiTGlrZSBgJXMnIGJ1 dCB0cmVhdCB0IGFuZCBuaWwgYXMgMSBhbmQgMC4iIGZ1bikKICAgICAgKCxmdW4gKGhpZi1tYXRo aWZ5IGEpIChoaWYtbWF0aGlmeSBiKSkpKQoKLShkZWZ1biBzaGlmdGxlZnQgKGEgYikKKyhkZWZ1 biBzaGlmdGxlZnQtaGlmIChhIGIpCiAgIChpZiAoPCBhIDApCiAgICAgICAoYXNoIGEgYikKICAg ICAobHNoIGEgYikpKQoKLShkZWZ1biBzaGlmdHJpZ2h0IChhIGIpCisoZGVmdW4gc2hpZnRyaWdo dC1oaWYgKGEgYikKICAgKGlmICg8IGEgMCkKICAgICAgIChhc2ggYSAoLSAwIGIpKQogICAgIChs c2ggYSAoLSAwIGIpKSkpCkBAIC0xMDAwLDggKzk5Niw4IEBAIHdlIGlnbm9yZSB0aGVtIGFsbCBo ZXJlLiIKIChkZWZhbGlhcyAnaGlmLWxvZ2lvciAgICAgICAgKGhpZi1tYXRoaWZ5LWJpbm9wIGxv Z2lvcikpCiAoZGVmYWxpYXMgJ2hpZi1sb2d4b3IgICAgICAgIChoaWYtbWF0aGlmeS1iaW5vcCBs b2d4b3IpKQogKGRlZmFsaWFzICdoaWYtbG9nYW5kICAgICAgICAoaGlmLW1hdGhpZnktYmlub3Ag bG9nYW5kKSkKLShkZWZhbGlhcyAnaGlmLXNoaWZ0bGVmdCAgICAgKGhpZi1tYXRoaWZ5LWJpbm9w IHNoaWZ0bGVmdCkpCi0oZGVmYWxpYXMgJ2hpZi1zaGlmdHJpZ2h0ICAgIChoaWYtbWF0aGlmeS1i aW5vcCBzaGlmdHJpZ2h0KSkKKyhkZWZhbGlhcyAnaGlmLXNoaWZ0bGVmdCAgICAgKGhpZi1tYXRo aWZ5LWJpbm9wIHNoaWZ0bGVmdC1oaWYpKQorKGRlZmFsaWFzICdoaWYtc2hpZnRyaWdodCAgICAo aGlmLW1hdGhpZnktYmlub3Agc2hpZnRyaWdodC1oaWYpKQoKCiAoZGVmdW4gaGlmLWNvbW1hICgm cmVzdCBleHByKQpAQCAtMTA0OSwxNCArMTA0NSw3IEBAIHdlIGlnbm9yZSB0aGVtIGFsbCBoZXJl LiIKICAgICAgICAgKGFwcGVuZCByZXN1bHQgKGxpc3QgcHJldikpCiAgICAgICByZXN1bHQpKSkK Ci0oZGVmdW4gZmxhdHRlbiAobCkKLSAgIkZsYXR0ZW4gYSB0cmVlIgotICAoaWYgKGFuZCBsIChh dG9tIGwpKQotICAgICAgKGxpc3QgbCkKLSAgICAoaWYgKGNvbnNwIGwpCi0gICAgICAgIChuY29u YyAoZmxhdHRlbiAoY2FyIGwpKSAoZmxhdHRlbiAoY2RyIGwpKSkpKSkKLQotKGRlZnVuIGRlbGlt aXQgKGwgYSkKKyhkZWZ1biBoaWYtZGVsaW1pdCAobCBhKQogICAiRGVsbWl0IGEgbGlzdCAnbCcg d2l0aCBkZWxpbWl0ZXIgYXRvbSAnZCciCiAgIChuY29uYyAobWFwY2FuIChsYW1iZGEgKGwpCiAg ICAgICAgICAgICAgICAgICAgKGxpc3QgbCBhKSkgIChidXRsYXN0IGwpKQpAQCAtMTEwOSwxMiAr MTA5OCwxMiBAQCB3ZSBpZ25vcmUgdGhlbSBhbGwgaGVyZS4iCiAgICAgICAgICAgICAgIDs7IFVu bGlrZSAnc3Vic3QnLCAnc3Vic3RpdHV0ZScgcmVwbGFjZSBvbmx5IHRoZSB0b3AgbGV2ZWwgaW5z dGVhZCBvZiB0aGUgd2hvbGUgdHJlZSwKICAgICAgICAgICAgICAgOzsgbW9yZSBpbXBvcnRhbnRs eSwgaXQncyBub3QgZGVzdHJ1Y3RpdmUuCiAgICAgICAgICAgICAgIChpZiAoYW5kIGV0YyAobnVs bCBmb3JtYWwtcGFybXMpKQotICAgICAgICAgICAgICAgICAgKHN1YnN0aXR1dGUgKGRlbGltaXQg YWN0dWFsLXBhcm1zICdoaWYtY29tbWEpIGZvcm1hbCBtYWNyby1ib2R5KQorICAgICAgICAgICAg ICAgICAgKHN1YnN0aXR1dGUgKGhpZi1kZWxpbWl0IGFjdHVhbC1wYXJtcyAnaGlmLWNvbW1hKSBm b3JtYWwgbWFjcm8tYm9keSkKICAgICAgICAgICAgICAgICAoc3Vic3RpdHV0ZSAoY2FyIGFjdHVh bC1wYXJtcykgZm9ybWFsIG1hY3JvLWJvZHkpKSkKICAgICAgICAgKHNldHEgYWN0dWFsLXBhcm1z IChjZHIgYWN0dWFsLXBhcm1zKSkpCgogICAgICAgOzsgUmVwbGFjZW1lbnQgY29tcGxldGVkLCBm bGF0dGVuIHRoZSB3aG9sZSB0b2tlbiBsaXN0LAotICAgICAgKHNldHEgbWFjcm8tYm9keSAoZmxh dHRlbiBtYWNyby1ib2R5KSkKKyAgICAgIChzZXRxIG1hY3JvLWJvZHkgKGhpZi1mbGF0dGVuIG1h Y3JvLWJvZHkpKQoKICAgICAgIDs7IFN0cmluZ2lmaWNhdGlvbiBhbmQgdG9rZW4gY29uY2F0ZW5h dGlvbiBoYXBwZW5zIGhlcmUKICAgICAgIChoaWYtdG9rZW4tY29uY2F0ZW5hdGlvbiAoaGlmLXRv a2VuLXN0cmluZ2lmaWNhdGlvbiBtYWNyby1ib2R5KSkpKSkKQEAgLTEzMjQsMTEgKzEzMTMsMTEg QEAgV2l0aCBhcmd1bWVudCwgZG8gdGhpcyB0aGF0IG1hbnkgdGltZXMuIgogOzs9PT0lJVNGJSUg aGlkZS1pZmRlZi1oaWRpbmcgKFN0YXJ0KSAgPT09CgoKLTs7OyBBIHJhbmdlIGlzIGEgc3RydWN0 dXJlIHdpdGggZm91ciBjb21wb25lbnRzOgotOzs7IFNUQVJUICAgICAgIFRoZSBzdGFydCBvZiB0 aGUgcmFuZ2UuIChiZWdpbm5pbmcgb2YgbGluZSkKLTs7OyBFTFNFICAgICAgICBUaGUgZWxzZSBt YXJrZXIgKGJlZ2lubmluZyBvZiBsaW5lKQotOzs7IEVORCAgICAgICAgIFRoZSBlbmQgb2YgdGhl IHJhbmdlLiAgKGJlZ2lubmluZyBvZiBsaW5lKQotOzs7IEVMSUYgICAgICAgIEEgc2VxdWVuY2Ug b2YgI2VsaWYgbWFya2VycyAoYmVnaW5uaW5nIG9mIGxpbmUpCis7OyBBIHJhbmdlIGlzIGEgc3Ry dWN0dXJlIHdpdGggZm91ciBjb21wb25lbnRzOgorOzsgU1RBUlQgICAgICAgVGhlIHN0YXJ0IG9m IHRoZSByYW5nZS4gKGJlZ2lubmluZyBvZiBsaW5lKQorOzsgRUxTRSAgICAgICAgVGhlIGVsc2Ug bWFya2VyIChiZWdpbm5pbmcgb2YgbGluZSkKKzs7IEVORCAgICAgICAgIFRoZSBlbmQgb2YgdGhl IHJhbmdlLiAgKGJlZ2lubmluZyBvZiBsaW5lKQorOzsgRUxJRiAgICAgICAgQSBzZXF1ZW5jZSBv ZiAjZWxpZiBtYXJrZXJzIChiZWdpbm5pbmcgb2YgbGluZSkKCiAoZGVmc3Vic3QgaGlmLW1ha2Ut cmFuZ2UgKHN0YXJ0IGVuZCAmb3B0aW9uYWwgZWxzZSBlbGlmKQogICAobGlzdCBzdGFydCBlbHNl IGVuZCBlbGlmKSkKQEAgLTEzMzksMTAgKzEzMjgsMTAgQEAgV2l0aCBhcmd1bWVudCwgZG8gdGhp cyB0aGF0IG1hbnkgdGltZXMuIgogKGRlZnN1YnN0IGhpZi1yYW5nZS1lbGlmIChyYW5nZSkgKGVs dCByYW5nZSAzKSkKCgotOzs7IEZpbmQtUmFuZ2UKLTs7OyBUaGUgd29ya2hvcnNlLCBpdCBkZWxp bWl0cyB0aGUgI2lmIHJlZ2lvbi4gIFJlYXNvbmFibHkgc2ltcGxlOgotOzs7IFNraXAgdW50aWwg YW4gI2Vsc2Ugb3IgI2VuZGlmIGlzIGZvdW5kLCByZW1lbWJlcmluZyBwb3NpdGlvbnMuICBJZgot Ozs7IGFuICNlbHNlIHdhcyBmb3VuZCwgc2tpcCBzb21lIG1vcmUsIGxvb2tpbmcgZm9yIHRoZSB0 cnVlICNlbmRpZi4KKzs7IEZpbmQtUmFuZ2UKKzs7IFRoZSB3b3JraG9yc2UsIGl0IGRlbGltaXRz IHRoZSAjaWYgcmVnaW9uLiAgUmVhc29uYWJseSBzaW1wbGU6Cis7OyBTa2lwIHVudGlsIGFuICNl bHNlIG9yICNlbmRpZiBpcyBmb3VuZCwgcmVtZW1iZXJpbmcgcG9zaXRpb25zLiAgSWYKKzs7IGFu ICNlbHNlIHdhcyBmb3VuZCwgc2tpcCBzb21lIG1vcmUsIGxvb2tpbmcgZm9yIHRoZSB0cnVlICNl bmRpZi4KCiAoZGVmdW4gaGlmLWZpbmQtcmFuZ2UgKCkKICAgIlJldHVybiBhIFJhbmdlIHN0cnVj dHVyZSBkZXNjcmliaW5nIHRoZSBjdXJyZW50ICNpZiByZWdpb24uCkBAIC0xMzgwLDcgKzEzNjks NyBAQCBQb2ludCBpcyBsZWZ0IHVuY2hhbmdlZC4iCiAgICAgICAoaGlmLW1ha2UtcmFuZ2Ugc3Rh cnQgZW5kIGVsc2UgZWxpZikpKSkKCgotOzs7IEEgYml0IHNsaW15LgorOzsgQSBiaXQgc2xpbXku CgogKGRlZnVuIGhpZi1oaWRlLWxpbmUgKHBvaW50KQogICAiSGlkZSB0aGUgbGluZSBjb250YWlu aW5nIHBvaW50LiAgRG9lcyBub3RoaW5nIGlmIGBoaWRlLWlmZGVmLWxpbmVzJyBpcyBuaWwuIgpA QCAtMTM5MSwzMSArMTM4MCwzMSBAQCBQb2ludCBpcyBsZWZ0IHVuY2hhbmdlZC4iCiAgICAgICAg KGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAocHJvZ24gKGhpZi1lbmQtb2YtbGluZSkgKHBvaW50 KSkpKSkpCgoKLTs7OyAgSGlmLVBvc3NpYmx5LUhpZGUKLTs7OyAgVGhlcmUgYXJlIGZvdXIgY2Fz ZXMuICBUaGUgI2lmWCBleHByZXNzaW9uIGlzICJ0YWtlbiIgaWYgaXQKLTs7OyAgdGhlIGhpZGUt aWZkZWYtZXZhbHVhdG9yIHJldHVybnMgVC4gIFByZXN1bWFibHksIHRoaXMgbWVhbnMgdGhlIGNv ZGUKLTs7OyAgaW5zaWRlIHRoZSAjaWZkZWYgd291bGQgYmUgaW5jbHVkZWQgd2hlbiB0aGUgcHJv Z3JhbSB3YXMKLTs7OyAgY29tcGlsZWQuCi07OzsKLTs7OyAgQ2FzZSAxOiAgI2lmWCB0YWtlbiwg YW5kIHRoZXJlJ3MgYW4gI2Vsc2UuCi07OzsgICAgIFRoZSAjZWxzZSBwYXJ0IG11c3QgYmUgaGlk ZGVuLiAgVGhlICNpZiAodGhlbikgcGFydCBtdXN0IGJlCi07OzsgICAgIHByb2Nlc3NlZCBmb3Ig bmVzdGVkICNpZlgncy4KLTs7OyAgQ2FzZSAyOiAgI2lmWCB0YWtlbiwgYW5kIHRoZXJlJ3Mgbm8g I2Vsc2UuCi07OzsgICAgIFRoZSAjaWYgcGFydCBtdXN0IGJlIHByb2Nlc3NlZCBmb3IgbmVzdGVk ICNpZlgncy4KLTs7OyAgQ2FzZSAzOiAgI2lmWCBub3QgdGFrZW4sIGFuZCB0aGVyZSdzIGFuICNl bGlmCi07OzsgICAgIFRoZSAjaWYgcGFydCBtdXN0IGJlIGhpZGRlbiwgYW5kIHRoZW4gZXZhbHVh dGUKLTs7OyAgICAgdGhlICNlbGlmIGNvbmRpdGlvbiBsaWtlIGEgbmV3ICNpZlguCi07OzsgIENh c2UgNDogICNpZlggbm90IHRha2VuLCBhbmQgdGhlcmUncyBqdXN0IGFuICNlbHNlLgotOzs7ICAg ICBUaGUgI2lmIHBhcnQgbXVzdCBiZSBoaWRkZW4uICBUaGUgI2Vsc2UgcGFydCBtdXN0IGJlIHBy b2Nlc3NlZAotOzs7ICAgICBmb3IgbmVzdGVkICNpZnMuCi07OzsgIENhc2UgNTogICNpZlggbm90 IHRha2VuLCBhbmQgdGhlcmUncyBubyAjZWxzZS4KLTs7OyAgICAgVGhlICNpZlggcGFydCBtdXN0 IGJlIGhpZGRlbi4KLTs7OwotOzs7ICBGdXJ0aGVyIHByb2Nlc3NpbmcgaXMgZG9uZSBieSBuYXJy b3dpbmcgdG8gdGhlIHJlbGV2YW50IHJlZ2lvbgotOzs7ICBhbmQganVzdCByZWN1cnNpdmVseSBj YWxsaW5nIGhpZGUtaWZkZWYtZ3V0cy4KLTs7OwotOzs7ICBXaGVuIGhpZi1wb3NzaWJseS1oaWRl IHJldHVybnMsIHBvaW50IGlzIGF0IHRoZSBlbmQgb2YgdGhlCi07OzsgIHBvc3NpYmx5LWhpZGRl biByYW5nZS4KKzs7ICBIaWYtUG9zc2libHktSGlkZQorOzsgIFRoZXJlIGFyZSBmb3VyIGNhc2Vz LiAgVGhlICNpZlggZXhwcmVzc2lvbiBpcyAidGFrZW4iIGlmIGl0Cis7OyAgdGhlIGhpZGUtaWZk ZWYtZXZhbHVhdG9yIHJldHVybnMgVC4gIFByZXN1bWFibHksIHRoaXMgbWVhbnMgdGhlIGNvZGUK Kzs7ICBpbnNpZGUgdGhlICNpZmRlZiB3b3VsZCBiZSBpbmNsdWRlZCB3aGVuIHRoZSBwcm9ncmFt IHdhcworOzsgIGNvbXBpbGVkLgorOzsKKzs7ICBDYXNlIDE6ICAjaWZYIHRha2VuLCBhbmQgdGhl cmUncyBhbiAjZWxzZS4KKzs7ICAgICBUaGUgI2Vsc2UgcGFydCBtdXN0IGJlIGhpZGRlbi4gIFRo ZSAjaWYgKHRoZW4pIHBhcnQgbXVzdCBiZQorOzsgICAgIHByb2Nlc3NlZCBmb3IgbmVzdGVkICNp Zlgncy4KKzs7ICBDYXNlIDI6ICAjaWZYIHRha2VuLCBhbmQgdGhlcmUncyBubyAjZWxzZS4KKzs7 ICAgICBUaGUgI2lmIHBhcnQgbXVzdCBiZSBwcm9jZXNzZWQgZm9yIG5lc3RlZCAjaWZYJ3MuCis7 OyAgQ2FzZSAzOiAgI2lmWCBub3QgdGFrZW4sIGFuZCB0aGVyZSdzIGFuICNlbGlmCis7OyAgICAg VGhlICNpZiBwYXJ0IG11c3QgYmUgaGlkZGVuLCBhbmQgdGhlbiBldmFsdWF0ZQorOzsgICAgIHRo ZSAjZWxpZiBjb25kaXRpb24gbGlrZSBhIG5ldyAjaWZYLgorOzsgIENhc2UgNDogICNpZlggbm90 IHRha2VuLCBhbmQgdGhlcmUncyBqdXN0IGFuICNlbHNlLgorOzsgICAgIFRoZSAjaWYgcGFydCBt dXN0IGJlIGhpZGRlbi4gIFRoZSAjZWxzZSBwYXJ0IG11c3QgYmUgcHJvY2Vzc2VkCis7OyAgICAg Zm9yIG5lc3RlZCAjaWZzLgorOzsgIENhc2UgNTogICNpZlggbm90IHRha2VuLCBhbmQgdGhlcmUn cyBubyAjZWxzZS4KKzs7ICAgICBUaGUgI2lmWCBwYXJ0IG11c3QgYmUgaGlkZGVuLgorOzsKKzs7 ICBGdXJ0aGVyIHByb2Nlc3NpbmcgaXMgZG9uZSBieSBuYXJyb3dpbmcgdG8gdGhlIHJlbGV2YW50 IHJlZ2lvbgorOzsgIGFuZCBqdXN0IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaGlkZS1pZmRlZi1ndXRz LgorOzsKKzs7ICBXaGVuIGhpZi1wb3NzaWJseS1oaWRlIHJldHVybnMsIHBvaW50IGlzIGF0IHRo ZSBlbmQgb2YgdGhlCis7OyAgcG9zc2libHktaGlkZGVuIHJhbmdlLgoKIChkZWZ2YXIgaGlmLXJl Y3Vyc2UtbGV2ZWwgMCkKCi0tCjEuOC4zLjI0Lmc2N2IwOTk4Cgo= --047d7b6773d653ed9d04ec99d0ba--