From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Bad Blue Bull Newsgroups: gmane.emacs.bugs Subject: bug#32281: shr.el align support patch Date: Tue, 07 Aug 2018 03:51:52 +0300 Message-ID: <4760541533603112@sas1-890ba5c2334a.qloud-c.yandex.net> References: <6177421532613989@iva7-bd007c44f58e.qloud-c.yandex.net> <87wot4xl3g.fsf@gmail.com> <83bmafsf3l.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----==--bound.476055.sas1-890ba5c2334a.qloud-c.yandex.net" X-Trace: blaine.gmane.org 1533603025 28989 195.159.176.226 (7 Aug 2018 00:50:25 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 7 Aug 2018 00:50:25 +0000 (UTC) Cc: "32281@debbugs.gnu.org" <32281@debbugs.gnu.org> To: Eli Zaretskii , Noam Postavsky Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Aug 07 02:50:21 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fmqCZ-0007P2-5z for geb-bug-gnu-emacs@m.gmane.org; Tue, 07 Aug 2018 02:50:20 +0200 Original-Received: from localhost ([::1]:36795 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fmqEf-0001Bs-UJ for geb-bug-gnu-emacs@m.gmane.org; Mon, 06 Aug 2018 20:52:29 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46824) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fmqEN-0001Bm-CP for bug-gnu-emacs@gnu.org; Mon, 06 Aug 2018 20:52:19 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fmqEF-0008MW-6X for bug-gnu-emacs@gnu.org; Mon, 06 Aug 2018 20:52:11 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:38016) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fmqEE-0008MH-Pw for bug-gnu-emacs@gnu.org; Mon, 06 Aug 2018 20:52:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fmqEE-00005E-EY for bug-gnu-emacs@gnu.org; Mon, 06 Aug 2018 20:52:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Bad Blue Bull Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 07 Aug 2018 00:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 32281 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 32281-submit@debbugs.gnu.org id=B32281.1533603121309 (code B ref 32281); Tue, 07 Aug 2018 00:52:02 +0000 Original-Received: (at 32281) by debbugs.gnu.org; 7 Aug 2018 00:52:01 +0000 Original-Received: from localhost ([127.0.0.1]:43035 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fmqED-00004u-KC for submit@debbugs.gnu.org; Mon, 06 Aug 2018 20:52:01 -0400 Original-Received: from forward104j.mail.yandex.net ([5.45.198.247]:43209) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fmqEC-0008WH-9e for 32281@debbugs.gnu.org; Mon, 06 Aug 2018 20:52:01 -0400 Original-Received: from mxback7j.mail.yandex.net (mxback7j.mail.yandex.net [IPv6:2a02:6b8:0:1619::110]) by forward104j.mail.yandex.net (Yandex) with ESMTP id 9184147EF4; Tue, 7 Aug 2018 03:51:53 +0300 (MSK) Original-Received: from localhost (localhost [::1]) by mxback7j.mail.yandex.net (nwsmtp/Yandex) with ESMTP id RRrs5QF2bw-pqgqt9XA; Tue, 07 Aug 2018 03:51:53 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1533603113; bh=lbMvAO7clz2JdgjIRyoosIWhWR9Aifvt8AuR4EdS6mM=; h=From:To:Cc:In-Reply-To:References:Subject:Date:Message-Id; b=rOHTr4NLFXwxCoZujk+IlTmZiLPEGwnspOr7Z2mYMjt4qq0BC5xqyEPIxSoZyFZQE h50Fd2OM+HH6aF5vThh15ueU3cxnPV5q/RPV8wnu0h6XPljMm/DJd44uc2FeBcqeyx sGTWcJNf/UHzOR0mpJXVCK4sXVwcxHeZnD1KPedQ= Authentication-Results: mxback7j.mail.yandex.net; dkim=pass header.i=@yandex.ru Original-Received: by sas1-890ba5c2334a.qloud-c.yandex.net with HTTP; Tue, 07 Aug 2018 03:51:52 +0300 In-Reply-To: <83bmafsf3l.fsf@gnu.org> X-Mailer: Yamail [ http://yandex.ru ] 5.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:149300 Archived-At: ------==--bound.476055.sas1-890ba5c2334a.qloud-c.yandex.net Content-Transfer-Encoding: base64 Content-Type: text/html; charset=utf-8 PGRpdj5PS2F5LCBJJ3ZlIHRyaW1tZWQgdGhlIHNvdXJjZSBhbmQgcmV2ZXJ0ZWQgZGVmYXVsdCB2 YWx1ZSBvZiBzaHItdXNlLWZvbnRzIHRvIHQuPC9kaXY+PGRpdj7CoDwvZGl2PjxkaXY+MDYuMDgu MjAxOCwgMTg6MTQsICJFbGkgWmFyZXRza2lpIiAmbHQ7ZWxpekBnbnUub3JnJmd0Ozo8L2Rpdj48 YmxvY2txdW90ZT48ZGl2PlRoZSBmaXJzdCBsaW5lIG9mIHRoZSBkb2Mgc3RyaW5nIHNob3VsZCBu b3QgYmUgbG9uZ2VyIHRoYW4gNzg8YnIgLz5jaGFyYWN0ZXJzLCBhbmQgc2hvdWxkIGJlIGEgY29t cGxldGUgc2VudGVuY2UuPC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+PGJyIC8+SSBkb24ndCBrbm93 IHdoYXQgZG8geW91IG1lYW4gb2YgImNvbXBsZXRlIHNlbnRlbmNlIiwgZG9jcyBzYXkgaXQgbXVz dCBzdGFydCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIgYW5kIGVuZCB3aXRoIGEgcGVyaW9kLjwvZGl2 PjxkaXY+Rmlyc3Qgc2VudGVuY2Ugbm93IGZpbGxzIDIgbGluZXMgSSBrbm93IGl0J3Mgbm90IGdv b2QgZm9yIGFwcm9wb3MsIEkgY2FuIGVkaXQgaXQgYWdhaW4gaWYgbmVlZGVkLjwvZGl2PjxibG9j a3F1b3RlIHR5cGU9ImNpdGUiPjxwPsKgPC9wPjwvYmxvY2txdW90ZT48YmxvY2txdW90ZT48ZGl2 PldoeSBkaWQgeW91IGRlY2lkZSB0byB1c2UgdSsyMDI4IGFuZCB1KzIwMjkgZm9yIHRoZXNlIHB1 cnBvc2VzPyBFbWFjczxiciAvPmRvZXNuJ3QgeWV0IHN1cHBvcnQgdGhlc2UgY2hhcmFjdGVycyBh cyBVbmljb2RlIGludGVuZGVkLCBzbyB1c2luZzxiciAvPnRoZW0gbWlnaHQgaGF2ZSB1bmV4cGVj dGVkIGVmZmVjdHMsIGFuZCBtaWdodCBwcm9kdWNlIGRpZmZlcmVudCBlZmZlY3Q8YnIgLz5pZiB3 ZSBzdGFydCBzdXBwb3J0aW5nIHRoZW0gaW4gdGhlIGZ1dHVyZS48L2Rpdj48L2Jsb2NrcXVvdGU+ PGRpdj48YnIgLz5JIG5lZWQgdG8gdXNlIGEgY2hhcmFjdGVyIHRvIG1hcmsgcGxhY2VzIHdoZXJl IGxpbmVzIG11c3QgYmUgc3BsaXQgKHNwZWNpZmllZCBieSAmbHQ7YnImZ3Q7IHRhZ3MgYW5kIGVu ZCBvZiBsaXN0IGl0ZW1zKSwgYWxzbyBhIGNoYXJhY3RlciB0byBtYXJrIGVuZCBvZiBhIHBhcmFn cmFwaCB0byBiZSBmaWxsZWQgKGEgbWFyayBjYW4gYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlIGJ1 dCBkb2NzIHdhcm4gYWdhaW5zdCBpdCkuIFRoZXNlIGNoYXJzIHdpbGwgYmUgcmVtb3ZlZCB3aGVu IGEgcGFyYWdyYXBoIGdldHMgZmlsbGVkLCBJIGRvbid0IHNlZSB0aGVtIGNhdXNlIGFueSB0cm91 YmxlIGluIHRoZSBmdXR1cmUgYW5kIHRob3NlIHZhbHVlcyBjYW4gZWFzaWx5IGJlIGFsdGVyZWQg dG8gZGlmZmlyZW50IG9uZXMgaWYgaXQgaGFwcGVucy48L2Rpdj48YmxvY2txdW90ZSB0eXBlPSJj aXRlIj48cD48YnIgLz48YnIgLz7CoDwvcD48L2Jsb2NrcXVvdGU+ ------==--bound.476055.sas1-890ba5c2334a.qloud-c.yandex.net Content-Disposition: attachment; filename="shr.el.diff" Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name="shr.el.diff" LS0tIHNoci1vbGQuZWwJMjAxOC0wNy0yMSAwMzozNzowOC4yOTk1MDY0MzAgKzAzMDAKKysrIHNo ci5lbAkyMDE4LTA4LTA3IDAzOjE0OjAwLjY3NzU2MzIwMiArMDMwMApAQCAtMjkyLDYgKzI5Miw1 MiBAQAogICAgICh3aGVuIHNoci13YXJuaW5nCiAgICAgICAobWVzc2FnZSAiJXMiIHNoci13YXJu aW5nKSkpKQogCisoZGVmdW4gc2hyLWZpbGwtcGFyYWdyYXBoLXdpdGgtYnJlYWtzICgmb3B0aW9u YWwganVzdGlmeSBicmUtZGVsIGJyZS1yZWdleHApCisgICJGaWxsIHBhcmFncmFwaCBhdCBvciBh ZnRlciBwb2ludCwgYnJlYWtpbmcgbGluZXMgYXQgcG9zaXRpb25zCittYXRjaGluZyByZWdleHAg YXJndW1lbnQgQlJFLVJFR0VYUC4KKworSWYgSlVTVElGWSBpcyBub24tbmlsIGp1c3RpZnkgYXMg d2VsbC4KKworRGVsZXRlIG1hdGNoZWQgdGV4dCBpZiBCUkUtREVMIGlzIG5vbiBuaWwuCisKK0JS RS1SRUdFWFAgbXVzdCBiZSBhIHJlZ2V4cCB0aGF0IGRldGVybWluZXMgcG9zaXRpb25zIHdoZXJl IHRvCiticmVhayBsaW5lcywgZGVmYXVsdCB2YWx1ZSBpcyBcXHgyMDI4LiIKKyAgKHVubGVzcyBi cmUtcmVnZXhwIChzZXRxIGJyZS1yZWdleHAgIlx4MjAyOCIpKQorICAoc2V0cSBicmUtcmVnZXhw IChjb25jYXQgYnJlLXJlZ2V4cCAiXFx8XHgyMDI5IikpCisgIChzYXZlLWV4Y3Vyc2lvbgorICAg KGxldCAoKGxpbmUtYmVnaW4pIChwYXJhZ3JhcGgtZW5kKSkKKwkgKGZvcndhcmQtcGFyYWdyYXBo KQorCSAoaW5zZXJ0ICJceDIwMjkiKSA7IHVzZSBceDIwMjkgKHVuaWNvZGUgcGFyYWdyYXBoIHNl cGFyYXRvcikgdG8gbWFyayBlbmQKKwkJCQkJICAgOyBvZiBhIHBhcmFncmFwaAorCSAoYmFja3dh cmQtcGFyYWdyYXBoKQorCSAoc2V0cSBsaW5lLWJlZ2luIChwb2ludCkpCisJICh3aGlsZSAobm90 IHBhcmFncmFwaC1lbmQpCisJCQkocmUtc2VhcmNoLWZvcndhcmQgYnJlLXJlZ2V4cCkKKwkJCShp ZiAoZXF1YWwgKG1hdGNoLXN0cmluZyAwKSAiXHgyMDI5IikgKHNldHEgcGFyYWdyYXBoLWVuZCB0 KSkKKwkJCQkJCQkJCQk7IGVuZCBvZiBwYXJhZ3JhcGggcmVhY2hlZAorCQkJKGlmIChvciBicmUt ZGVsIHBhcmFncmFwaC1lbmQpIChyZXBsYWNlLW1hdGNoICIiKSkKKwkJCSh1bmxlc3MgKGVxdWFs IChjaGFyLWFmdGVyKSA/XG4pIChpbnNlcnQgIlxuIikpCisJCQkJCQkJCQkJOyBJIGRvbid0IGtu b3cgd2h5IGJ1dCB0d28gYWRqYWNlbnQgXG4KKwkJCQkJCQkJCQk7IGxlYXZlIGFuIGVtcHR5IGxp bmUgYWZ0ZXIgZmlsbAorCQkJKGZpbGwtcmVnaW9uLWFzLXBhcmFncmFwaCBsaW5lLWJlZ2luICgt IChwb2ludCkgMSkKKwkJCWp1c3RpZnkpCisJCQkoc2V0cSBsaW5lLWJlZ2luIChwb2ludCkpKQor CSAoZGVsZXRlLWNoYXIgLTEpKSkpCisKKyhkZWZ1biBzaHItZmlsbC1wYXJhZ3JhcGggKGRvbSkK KyAgIkZpbGwgcGFyYWdyYXBoIgorICAod2hlbiAobm90IHNoci11c2UtZm9udHMpIDtmaWxsLXBh cmFncmFwaCBpcyB1c2VmdWwgb25seSB3aXRoIG1vbm9zcGFjZQorCQkJCQkJCTtmb250cworIAko c2hyLWZpbGwtcGFyYWdyYXBoLXdpdGgtYnJlYWtzCisJICgobGFtYmRhICh4KQorCQkoY29uZAor IAkJICAoKGVxdWFsIHggInJpZ2h0IikgJ3JpZ2h0KQorIAkJICAoKGVxdWFsIHggImNlbnRlciIp ICdjZW50ZXIpCisgCQkgICgoZXF1YWwgeCAibGVmdCIpICdsZWZ0KSkpCisgCSAgKGNkciAoYXNz cSAnYWxpZ24gKGRvbS1hdHRyaWJ1dGVzIGRvbSkpKSkgOyBqdXN0aWZ5CisJIHBhcmFtZXRlciB0 IDsgYnJlLWRlbCB0CisJICkpKQorCiAoZGVmdW4gc2hyLS1yZW1vdmUtYmxhbmstbGluZXMtYXQt dGhlLWVuZCAoc3RhcnQgZW5kKQogICAoc2F2ZS1yZXN0cmljdGlvbgogICAgIChzYXZlLWV4Y3Vy c2lvbgpAQCAtMTE5MSw2ICsxMjM3LDcgQEAKIChkZWZ1biBzaHItaGVhZGluZyAoZG9tICZyZXN0 IHR5cGVzKQogICAoc2hyLWVuc3VyZS1wYXJhZ3JhcGgpCiAgIChhcHBseSAjJ3Noci1mb250aXpl LWRvbSBkb20gdHlwZXMpCisgIChzaHItZmlsbC1wYXJhZ3JhcGggZG9tKQogICAoc2hyLWVuc3Vy ZS1wYXJhZ3JhcGgpKQogCiAoZGVmdW4gc2hyLXVybGlmeSAoc3RhcnQgdXJsICZvcHRpb25hbCB0 aXRsZSkKQEAgLTEzNTQsNiArMTQwMSw3IEBACiAoZGVmdW4gc2hyLXRhZy1wIChkb20pCiAgIChz aHItZW5zdXJlLXBhcmFncmFwaCkKICAgKHNoci1nZW5lcmljIGRvbSkKKyAgKHNoci1maWxsLXBh cmFncmFwaCBkb20pCiAgIChzaHItZW5zdXJlLXBhcmFncmFwaCkpCiAKIChkZWZ1biBzaHItdGFn LWRpdiAoZG9tKQpAQCAtMTc0MiwxMiArMTc5MCwxNCBAQAogICA7OyBwYXJhZ3JhcGguCiAgICh1 bmxlc3MgKGJvbHApCiAgICAgKGluc2VydCAiXG4iKSkKKyAgKHNoci1maWxsLXBhcmFncmFwaCBk b20pCiAgIChzaHItZW5zdXJlLXBhcmFncmFwaCkpCiAKIChkZWZ1biBzaHItdGFnLW9sIChkb20p CiAgIChzaHItZW5zdXJlLXBhcmFncmFwaCkKICAgKGxldCAoKHNoci1saXN0LW1vZGUgMSkpCiAg ICAgKHNoci1nZW5lcmljIGRvbSkpCisgIChzaHItZmlsbC1wYXJhZ3JhcGggZG9tKQogICAoc2hy LWVuc3VyZS1wYXJhZ3JhcGgpKQogCiAoZGVmdW4gc2hyLXRhZy1saSAoZG9tKQpAQCAtMTc3MCw2 ICsxODIwLDcgQEAKIAkocHV0LXRleHQtcHJvcGVydHkgc3RhcnQgKDErIHN0YXJ0KSAnc2hyLXBy ZWZpeC1sZW5ndGggKGxlbmd0aCBidWxsZXQpKQogCShzaHItZ2VuZXJpYyBkb20pKSkpCiAgICh1 bmxlc3MgKGJvbHApCisJKHVubGVzcyBzaHItdXNlLWZvbnRzIChpbnNlcnQgIlx4MjAyOCIpKSA7 IGluc2VydCBhIGxpbmUgc2VwYXJhdG9yCiAgICAgKGluc2VydCAiXG4iKSkpCiAKIChkZWZ1biBz aHItbWFyay1maWxsIChzdGFydCkKQEAgLTE3ODUsNyArMTgzNiw4IEBACiAJICAgICAob3IgKG5v dCAoYm9scCkpCiAJCSAoYW5kICg+ICgtIChwb2ludCkgMikgKHBvaW50LW1pbikpCiAJCSAgICAg IChub3QgKD0gKGNoYXItYWZ0ZXIgKC0gKHBvaW50KSAyKSkgP1xuKSkpKSkKLSAgICAoaW5zZXJ0 ICJcbiIpKQorCSh1bmxlc3Mgc2hyLXVzZS1mb250cyAoaW5zZXJ0ICJceDIwMjgiKSkgOyBpbnNl cnQgYSBsaW5lIHNlcGFyYXRvcgorCShpbnNlcnQgIlxuIikpCiAgIChzaHItZ2VuZXJpYyBkb20p KQogCiAoZGVmdW4gc2hyLXRhZy1zcGFuIChkb20pCg== ------==--bound.476055.sas1-890ba5c2334a.qloud-c.yandex.net Content-Disposition: attachment; filename="shr.el" Content-Transfer-Encoding: base64 Content-Type: text/x-lisp; name="shr.el" Ozs7IHNoci5lbCAtLS0gU2ltcGxlIEhUTUwgUmVuZGVyZXIgLSotIGxleGljYWwtYmluZGluZzog dCAtKi0KCjs7IENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgoKOzsgQXV0aG9yOiBMYXJzIE1hZ25lIEluZ2VicmlndHNlbiA8bGFyc2lAZ251cy5v cmc+Cjs7IEtleXdvcmRzOiBodG1sCgo7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3Mu Cgo7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFs b25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KCjs7OyBDb21tZW50YXJ5OgoKOzsgVGhpcyBwYWNrYWdlIHRha2VzIGEgSFRNTCBw YXJzZSB0cmVlIChhcyBwcm92aWRlZCBieQo7OyBsaWJ4bWwtcGFyc2UtaHRtbC1yZWdpb24pIGFu ZCByZW5kZXJzIGl0IGluIHRoZSBjdXJyZW50IGJ1ZmZlci4gIEl0Cjs7IGRvZXMgbm90IGRvIENT UywgSmF2YVNjcmlwdCBvciBhbnl0aGluZyBhZHZhbmNlZDogSXQncyBnZWFyZWQKOzsgdG93YXJk cyByZW5kZXJpbmcgdHlwaWNhbCBzaG9ydCBzbmlwcGV0cyBvZiBIVE1MLCBsaWtlIHdoYXQgeW91 J2QKOzsgZmluZCBpbiBIVE1MIGVtYWlsIGFuZCB0aGUgbGlrZS4KCjs7OyBDb2RlOgoKKHJlcXVp cmUgJ2NsLWxpYikKKGV2YWwtd2hlbi1jb21waWxlIChyZXF1aXJlICd1cmwpKSAgICAgIDtGb3Ig dXJsLWZpbGVuYW1lJ3Mgc2V0ZiBoYW5kbGVyLgoocmVxdWlyZSAnYnJvd3NlLXVybCkKKGV2YWwt d2hlbi1jb21waWxlIChyZXF1aXJlICdzdWJyLXgpKQoocmVxdWlyZSAnZG9tKQoocmVxdWlyZSAn c2VxKQoocmVxdWlyZSAnc3ZnKQoocmVxdWlyZSAnaW1hZ2UpCihyZXF1aXJlICdwdW55KQoocmVx dWlyZSAndGV4dC1wcm9wZXJ0eS1zZWFyY2gpCgooZGVmZ3JvdXAgc2hyIG5pbAogICJTaW1wbGUg SFRNTCBSZW5kZXJlciIKICA6dmVyc2lvbiAiMjUuMSIKICA6Z3JvdXAgJ3dlYikKCihkZWZjdXN0 b20gc2hyLW1heC1pbWFnZS1wcm9wb3J0aW9uIDAuOQogICJIb3cgYmlnIHBpY3R1cmVzIGRpc3Bs YXllZCBhcmUgaW4gcmVsYXRpb24gdG8gdGhlIHdpbmRvdyB0aGV5J3JlIGluLgpBIHZhbHVlIG9m IDAuNyBtZWFucyB0aGF0IHRoZXkgYXJlIGFsbG93ZWQgdG8gdGFrZSB1cCA3MCUgb2YgdGhlCndp ZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHdpbmRvdy4gIElmIHRoZXkgYXJlIGxhcmdlciB0aGFuIHRo aXMsCmFuZCBFbWFjcyBzdXBwb3J0cyBpdCwgdGhlbiB0aGUgaW1hZ2VzIHdpbGwgYmUgcmVzY2Fs ZWQgZG93biB0bwpmaXQgdGhlc2UgY3JpdGVyaWEuIgogIDp2ZXJzaW9uICIyNC4xIgogIDpncm91 cCAnc2hyCiAgOnR5cGUgJ2Zsb2F0KQoKKGRlZmN1c3RvbSBzaHItYmxvY2tlZC1pbWFnZXMgbmls CiAgIkltYWdlcyB0aGF0IGhhdmUgVVJMcyBtYXRjaGluZyB0aGlzIHJlZ2V4cCB3aWxsIGJlIGJs b2NrZWQuIgogIDp2ZXJzaW9uICIyNC4xIgogIDpncm91cCAnc2hyCiAgOnR5cGUgJyhjaG9pY2Ug KGNvbnN0IG5pbCkgcmVnZXhwKSkKCihkZWZjdXN0b20gc2hyLXVzZS1mb250cyB0CiAgIklmIG5v bi1uaWwsIHVzZSBwcm9wb3J0aW9uYWwgZm9udHMgZm9yIHRleHQuIgogIDp2ZXJzaW9uICIyNS4x IgogIDpncm91cCAnc2hyCiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9tIHNoci11c2UtY29s b3JzIHQKICAiSWYgbm9uLW5pbCwgcmVzcGVjdCBjb2xvciBzcGVjaWZpY2F0aW9ucyBpbiB0aGUg SFRNTC4iCiAgOnZlcnNpb24gIjI2LjEiCiAgOmdyb3VwICdzaHIKICA6dHlwZSAnYm9vbGVhbikK CihkZWZjdXN0b20gc2hyLXRhYmxlLWhvcml6b250YWwtbGluZSBuaWwKICAiQ2hhcmFjdGVyIHVz ZWQgdG8gZHJhdyBob3Jpem9udGFsIHRhYmxlIGxpbmVzLgpJZiBuaWwsIGRvbid0IGRyYXcgaG9y aXpvbnRhbCB0YWJsZSBsaW5lcy4iCiAgOmdyb3VwICdzaHIKICA6dHlwZSAnKGNob2ljZSAoY29u c3QgbmlsKSBjaGFyYWN0ZXIpKQoKKGRlZmN1c3RvbSBzaHItdGFibGUtdmVydGljYWwtbGluZSA/ XHMKICAiQ2hhcmFjdGVyIHVzZWQgdG8gZHJhdyB2ZXJ0aWNhbCB0YWJsZSBsaW5lcy4iCiAgOmdy b3VwICdzaHIKICA6dHlwZSAnY2hhcmFjdGVyKQoKKGRlZmN1c3RvbSBzaHItdGFibGUtY29ybmVy ID9ccwogICJDaGFyYWN0ZXIgdXNlZCB0byBkcmF3IHRhYmxlIGNvcm5lcnMuIgogIDpncm91cCAn c2hyCiAgOnR5cGUgJ2NoYXJhY3RlcikKCihkZWZjdXN0b20gc2hyLWhyLWxpbmUgPy0KICAiQ2hh cmFjdGVyIHVzZWQgdG8gZHJhdyBociBsaW5lcy4iCiAgOmdyb3VwICdzaHIKICA6dHlwZSAnY2hh cmFjdGVyKQoKKGRlZmN1c3RvbSBzaHItd2lkdGggbmlsCiAgIkZyYW1lIHdpZHRoIHRvIHVzZSBm b3IgcmVuZGVyaW5nLgpNYXkgZWl0aGVyIGJlIGFuIGludGVnZXIgc3BlY2lmeWluZyBhIGZpeGVk IHdpZHRoIGluIGNoYXJhY3RlcnMsCm9yIG5pbCwgbWVhbmluZyB0aGF0IHRoZSBmdWxsIHdpZHRo IG9mIHRoZSB3aW5kb3cgc2hvdWxkIGJlIHVzZWQuCklmIGBzaHItdXNlLWZvbnRzJyBpcyBzZXQs IHRoZSBtZWFuIGNoYXJhY3RlciB3aWR0aCBpcyB1c2VkIHRvCmNvbXB1dGUgdGhlIHBpeGVsIHdp ZHRoLCB3aGljaCBpcyB1c2VkIGluc3RlYWQuIgogIDp2ZXJzaW9uICIyNS4xIgogIDp0eXBlICco Y2hvaWNlIChpbnRlZ2VyIDp0YWcgIkZpeGVkIHdpZHRoIGluIGNoYXJhY3RlcnMiKQoJCSAoY29u c3QgICA6dGFnICJVc2UgdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3ciIG5pbCkpCiAgOmdyb3VwICdz aHIpCgooZGVmY3VzdG9tIHNoci1idWxsZXQgIiogIgogICJCdWxsZXQgdXNlZCBmb3IgdW5vcmRl cmVkIGxpc3RzLgpBbHRlcm5hdGl2ZSBzdWdnZXN0aW9ucyBhcmU6Ci0gXCIgIFwiCi0gXCIgIFwi IgogIDp2ZXJzaW9uICIyNC40IgogIDp0eXBlICdzdHJpbmcKICA6Z3JvdXAgJ3NocikKCihkZWZj dXN0b20gc2hyLWV4dGVybmFsLWJyb3dzZXIgJ2Jyb3dzZS11cmwtZGVmYXVsdC1icm93c2VyCiAg IkZ1bmN0aW9uIHVzZWQgdG8gbGF1bmNoIGFuIGV4dGVybmFsIGJyb3dzZXIuIgogIDp2ZXJzaW9u ICIyNC40IgogIDpncm91cCAnc2hyCiAgOnR5cGUgJ2Z1bmN0aW9uKQoKKGRlZmN1c3RvbSBzaHIt aW1hZ2UtYW5pbWF0ZSB0CiAgIk5vbiBuaWwgbWVhbnMgdGhhdCBpbWFnZXMgdGhhdCBjYW4gYmUg YW5pbWF0ZWQgd2lsbCBiZS4iCiAgOnZlcnNpb24gIjI0LjQiCiAgOmdyb3VwICdzaHIKICA6dHlw ZSAnYm9vbGVhbikKCihkZWZ2YXIgc2hyLWNvbnRlbnQtZnVuY3Rpb24gbmlsCiAgIklmIGJvdW5k LCB0aGlzIHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gdGhlIGNvbnRlbnQu ClRoaXMgaXMgdXNlZCBmb3IgY2lkOiBVUkxzLCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3 aXRoIHRoZQpjaWQ6IFVSTCBhcyB0aGUgYXJndW1lbnQuIikKCihkZWZ2YXIgc2hyLXB1dC1pbWFn ZS1mdW5jdGlvbiAnc2hyLXB1dC1pbWFnZQogICJGdW5jdGlvbiBjYWxsZWQgdG8gcHV0IGltYWdl IGFuZCBhbHQgc3RyaW5nLiIpCgooZGVmZmFjZSBzaHItc3RyaWtlLXRocm91Z2ggJygodCA6c3Ry aWtlLXRocm91Z2ggdCkpCiAgIkZhY2UgZm9yIDxzPiBlbGVtZW50cy4iCiAgOnZlcnNpb24gIjI0 LjEiCiAgOmdyb3VwICdzaHIpCgooZGVmZmFjZSBzaHItbGluawogICcoKHQgOmluaGVyaXQgbGlu aykpCiAgIkZhY2UgZm9yIGxpbmsgZWxlbWVudHMuIgogIDp2ZXJzaW9uICIyNC4xIgogIDpncm91 cCAnc2hyKQoKKGRlZmZhY2Ugc2hyLXNlbGVjdGVkLWxpbmsKICAnKCh0IDppbmhlcml0IHNoci1s aW5rIDpiYWNrZ3JvdW5kICJyZWQiKSkKICAiRmFjZSBmb3IgbGluayBlbGVtZW50cy4iCiAgOnZl cnNpb24gIjI3LjEiCiAgOmdyb3VwICdzaHIpCgooZGVmdmFyIHNoci1pbmhpYml0LWltYWdlcyBu aWwKICAiSWYgbm9uLW5pbCwgaW5oaWJpdCBsb2FkaW5nIGltYWdlcy4iKQoKKGRlZnZhciBzaHIt ZXh0ZXJuYWwtcmVuZGVyaW5nLWZ1bmN0aW9ucyBuaWwKICAiQWxpc3Qgb2YgdGFnL2Z1bmN0aW9u IHBhaXJzIHVzZWQgdG8gYWx0ZXIgaG93IHNociByZW5kZXJzIGNlcnRhaW4gdGFncy4KRm9yIGlu c3RhbmNlLCBld3cgdXNlcyB0aGlzIHRvIGFsdGVyIHJlbmRlcmluZyBvZiB0aXRsZSwgZm9ybXMK YW5kIG90aGVyIHRoaW5nczoKXCgodGl0bGUgLiBld3ctdGFnLXRpdGxlKQogKGZvcm0gLiBld3ct dGFnLWZvcm0pCiAuLi4pIikKCjs7OyBJbnRlcm5hbCB2YXJpYWJsZXMuCgooZGVmdmFyIHNoci1m b2xkaW5nLW1vZGUgbmlsKQooZGVmdmFyIHNoci1zdGFydCBuaWwpCihkZWZ2YXIgc2hyLWluZGVu dGF0aW9uIDApCihkZWZ2YXIgc2hyLWludGVybmFsLXdpZHRoIG5pbCkKKGRlZnZhciBzaHItbGlz dC1tb2RlIG5pbCkKKGRlZnZhciBzaHItY29udGVudC1jYWNoZSBuaWwpCihkZWZ2YXIgc2hyLWtp bnNva3Utc2hvcnRlbiBuaWwpCihkZWZ2YXIgc2hyLXRhYmxlLWRlcHRoIDApCihkZWZ2YXIgc2hy LXN0eWxlc2hlZXQgbmlsKQooZGVmdmFyIHNoci1iYXNlIG5pbCkKKGRlZnZhciBzaHItZGVwdGgg MCkKKGRlZnZhciBzaHItd2FybmluZyBuaWwpCihkZWZ2YXIgc2hyLWlnbm9yZS1jYWNoZSBuaWwp CihkZWZ2YXIgc2hyLXRhcmdldC1pZCBuaWwpCihkZWZ2YXIgc2hyLXRhYmxlLXNlcGFyYXRvci1s ZW5ndGggMSkKKGRlZnZhciBzaHItdGFibGUtc2VwYXJhdG9yLXBpeGVsLXdpZHRoIDApCihkZWZ2 YXIgc2hyLXRhYmxlLWlkIG5pbCkKKGRlZnZhciBzaHItY3VycmVudC1mb250IG5pbCkKKGRlZnZh ciBzaHItaW50ZXJuYWwtYnVsbGV0IG5pbCkKCihkZWZ2YXIgc2hyLW1hcAogIChsZXQgKChtYXAg KG1ha2Utc3BhcnNlLWtleW1hcCkpKQogICAgKGRlZmluZS1rZXkgbWFwICJhIiAnc2hyLXNob3ct YWx0LXRleHQpCiAgICAoZGVmaW5lLWtleSBtYXAgImkiICdzaHItYnJvd3NlLWltYWdlKQogICAg KGRlZmluZS1rZXkgbWFwICJ6IiAnc2hyLXpvb20taW1hZ2UpCiAgICAoZGVmaW5lLWtleSBtYXAg Wz9cdF0gJ3Noci1uZXh0LWxpbmspCiAgICAoZGVmaW5lLWtleSBtYXAgWz9cTS1cdF0gJ3Noci1w cmV2aW91cy1saW5rKQogICAgKGRlZmluZS1rZXkgbWFwIFtmb2xsb3ctbGlua10gJ21vdXNlLWZh Y2UpCiAgICAoZGVmaW5lLWtleSBtYXAgW21vdXNlLTJdICdzaHItYnJvd3NlLXVybCkKICAgIChk ZWZpbmUta2V5IG1hcCAiSSIgJ3Noci1pbnNlcnQtaW1hZ2UpCiAgICAoZGVmaW5lLWtleSBtYXAg InciICdzaHItbWF5YmUtcHJvYmUtYW5kLWNvcHktdXJsKQogICAgKGRlZmluZS1rZXkgbWFwICJ1 IiAnc2hyLW1heWJlLXByb2JlLWFuZC1jb3B5LXVybCkKICAgIChkZWZpbmUta2V5IG1hcCAidiIg J3Noci1icm93c2UtdXJsKQogICAgKGRlZmluZS1rZXkgbWFwICJPIiAnc2hyLXNhdmUtY29udGVu dHMpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxyIiAnc2hyLWJyb3dzZS11cmwpCiAgICBtYXApKQoK KGRlZnZhciBzaHItaW1hZ2UtbWFwCiAgKGxldCAoKG1hcCAoY29weS1rZXltYXAgc2hyLW1hcCkp KQogICAgKHdoZW4gKGJvdW5kcCAnaW1hZ2UtbWFwKQogICAgICAoc2V0LWtleW1hcC1wYXJlbnQg bWFwIGltYWdlLW1hcCkpCiAgICBtYXApKQoKOzsgUHVibGljIGZ1bmN0aW9ucyBhbmQgY29tbWFu ZHMuCihkZWNsYXJlLWZ1bmN0aW9uIGxpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbiAieG1sLmMiCgkJ ICAoc3RhcnQgZW5kICZvcHRpb25hbCBiYXNlLXVybCBkaXNjYXJkLWNvbW1lbnRzKSkKCihkZWZ1 biBzaHItcmVuZGVyLWJ1ZmZlciAoYnVmZmVyKQogICJEaXNwbGF5IHRoZSBIVE1MIHJlbmRlcmlu ZyBvZiB0aGUgY3VycmVudCBidWZmZXIuIgogIChpbnRlcmFjdGl2ZSAobGlzdCAoY3VycmVudC1i dWZmZXIpKSkKICAob3IgKGZib3VuZHAgJ2xpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbikKICAgICAg KGVycm9yICJUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIEVtYWNzIHRvIGJlIGNvbXBpbGVkIHdpdGgg bGlieG1sMiIpKQogIChwb3AtdG8tYnVmZmVyICIqaHRtbCoiKQogIChlcmFzZS1idWZmZXIpCiAg KHNoci1pbnNlcnQtZG9jdW1lbnQKICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCiAgICAg KGxpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKQogIChn b3RvLWNoYXIgKHBvaW50LW1pbikpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHNoci1yZW5kZXIt cmVnaW9uIChiZWdpbiBlbmQgJm9wdGlvbmFsIGJ1ZmZlcikKICAiRGlzcGxheSB0aGUgSFRNTCBy ZW5kZXJpbmcgb2YgdGhlIHJlZ2lvbiBiZXR3ZWVuIEJFR0lOIGFuZCBFTkQuIgogIChpbnRlcmFj dGl2ZSAiciIpCiAgKHVubGVzcyAoZmJvdW5kcCAnbGlieG1sLXBhcnNlLWh0bWwtcmVnaW9uKQog ICAgKGVycm9yICJUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIEVtYWNzIHRvIGJlIGNvbXBpbGVkIHdp dGggbGlieG1sMiIpKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciBidWZmZXIgKGN1cnJlbnQt YnVmZmVyKSkKICAgIChsZXQgKChkb20gKGxpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbiBiZWdpbiBl bmQpKSkKICAgICAgKGRlbGV0ZS1yZWdpb24gYmVnaW4gZW5kKQogICAgICAoZ290by1jaGFyIGJl Z2luKQogICAgICAoc2hyLWluc2VydC1kb2N1bWVudCBkb20pKSkpCgooZGVmdW4gc2hyLS1oYXZl LW9uZS1mcmluZ2UtcCAoKQogICJSZXR1cm4gbm9uLW5pbCBpZiB3ZSBrbm93IGF0IGxlYXN0IG9u ZSBvZiB0aGUgZnJpbmdlcyBoYXMgbm9uLXplcm8gd2lkdGguIgogIChhbmQgKGZib3VuZHAgJ2Zy aW5nZS1jb2x1bW5zKQogICAgICAgKG9yIChub3QgKHplcm9wIChmcmluZ2UtY29sdW1ucyAncmln aHQpKSkKICAgICAgICAgICAobm90ICh6ZXJvcCAoZnJpbmdlLWNvbHVtbnMgJ2xlZnQpKSkpKSkK Cjs7OyMjI2F1dG9sb2FkCihkZWZ1biBzaHItaW5zZXJ0LWRvY3VtZW50IChkb20pCiAgIlJlbmRl ciB0aGUgcGFyc2VkIGRvY3VtZW50IERPTSBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlci4KRE9NIHNo b3VsZCBiZSBhIHBhcnNlIHRyZWUgYXMgZ2VuZXJhdGVkIGJ5CmBsaWJ4bWwtcGFyc2UtaHRtbC1y ZWdpb24nIG9yIHNpbWlsYXIuIgogIChzZXRxIHNoci1jb250ZW50LWNhY2hlIG5pbCkKICAobGV0 ICgoc3RhcnQgKHBvaW50KSkKCShzaHItc3RhcnQgbmlsKQoJKHNoci1iYXNlIG5pbCkKCShzaHIt ZGVwdGggMCkKCShzaHItdGFibGUtaWQgMCkKCShzaHItd2FybmluZyBuaWwpCgkoc2hyLXRhYmxl LXNlcGFyYXRvci1waXhlbC13aWR0aCAoc2hyLXN0cmluZy1waXhlbC13aWR0aCAiLSIpKQoJKHNo ci1pbnRlcm5hbC1idWxsZXQgKGNvbnMgc2hyLWJ1bGxldAoJCQkJICAgKHNoci1zdHJpbmctcGl4 ZWwtd2lkdGggc2hyLWJ1bGxldCkpKQoJKHNoci1pbnRlcm5hbC13aWR0aCAob3IgKGFuZCBzaHIt d2lkdGgKCQkJCSAgICAgKGlmIChub3Qgc2hyLXVzZS1mb250cykKCQkJCQkgc2hyLXdpZHRoCgkJ CQkgICAgICAgKCogc2hyLXdpZHRoIChmcmFtZS1jaGFyLXdpZHRoKSkpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDs7IFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBhdmFpbGFibGUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyB3aWR0aCBmb3Igd2hlbiB0aGUgdXNlciBk aXNhYmxlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHRoZSBmcmluZ2VzLCB3 aGljaCB3aWxsIGNhdXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGRp c3BsYXkgZW5naW5lIHVzdXJwIG9uZSBjb2x1bW4gZm9yCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOzsgdGhlIGNvbnRpbnVhdGlvbiBnbHlwaC4KCQkJCShpZiAobm90IHNoci11c2Ut Zm9udHMpCgkJCQkgICAgKC0gKHdpbmRvdy1ib2R5LXdpZHRoKSAxCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIChudWxsIHNoci13aWR0aCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAoc2hyLS1oYXZlLW9u ZS1mcmluZ2UtcCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKQoJCQkJICAoLSAo d2luZG93LWJvZHktd2lkdGggbmlsIHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKiAyIChmcmFtZS1jaGFyLXdpZHRoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiAoYW5kIChudWxsIHNoci13aWR0aCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKHNoci0taGF2ZS1vbmUtZnJpbmdlLXApKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAoZnJhbWUtY2hhci13 aWR0aCkgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSkpCiAgICAgICAgKG1heC1zcGVjcGRs LXNpemUgbWF4LXNwZWNwZGwtc2l6ZSkKICAgICAgICBiaWRpLWRpc3BsYXktcmVvcmRlcmluZykK ICAgIDs7IElmIHRoZSB3aW5kb3cgd2FzIGhzY3JvbGxlZCBmb3Igc29tZSByZWFzb24sIHNoci1m aWxsLWxpbmVzCiAgICA7OyBiZWxvdyB3aWxsIG1pc2JlaGF2ZSwgYmVjYXVzZSBpdCBzaWxlbnRs eSBhc3N1bWVzIHRoYXQgaXQKICAgIDs7IHN0YXJ0cyB3aXRoIGEgbm9uLWhzY3JvbGxlZCB3aW5k b3cgKHZlcnRpY2FsLW1vdGlvbiB3aWxsIG1vdmUKICAgIDs7IHRvIGEgd3JvbmcgcGxhY2Ugb3Ro ZXJ3aXNlKS4KICAgIChzZXQtd2luZG93LWhzY3JvbGwgbmlsIDApCiAgICAoc2hyLWRlc2NlbmQg ZG9tKQogICAgKHNoci1maWxsLWxpbmVzIHN0YXJ0IChwb2ludCkpCiAgICAoc2hyLS1yZW1vdmUt YmxhbmstbGluZXMtYXQtdGhlLWVuZCBzdGFydCAocG9pbnQpKQogICAgKHdoZW4gc2hyLXdhcm5p bmcKICAgICAgKG1lc3NhZ2UgIiVzIiBzaHItd2FybmluZykpKSkKCihkZWZ1biBzaHItZmlsbC1w YXJhZ3JhcGgtd2l0aC1icmVha3MgKCZvcHRpb25hbCBqdXN0aWZ5IGJyZS1kZWwgYnJlLXJlZ2V4 cCkKICAiRmlsbCBwYXJhZ3JhcGggYXQgb3IgYWZ0ZXIgcG9pbnQsIGJyZWFraW5nIGxpbmVzIGF0 IHBvc2l0aW9ucwptYXRjaGluZyByZWdleHAgYXJndW1lbnQgQlJFLVJFR0VYUC4KCklmIEpVU1RJ RlkgaXMgbm9uLW5pbCBqdXN0aWZ5IGFzIHdlbGwuCgpEZWxldGUgbWF0Y2hlZCB0ZXh0IGlmIEJS RS1ERUwgaXMgbm9uIG5pbC4KCkJSRS1SRUdFWFAgbXVzdCBiZSBhIHJlZ2V4cCB0aGF0IGRldGVy bWluZXMgcG9zaXRpb25zIHdoZXJlIHRvCmJyZWFrIGxpbmVzLCBkZWZhdWx0IHZhbHVlIGlzIFxc eDIwMjguIgogICh1bmxlc3MgYnJlLXJlZ2V4cCAoc2V0cSBicmUtcmVnZXhwICJceDIwMjgiKSkK ICAoc2V0cSBicmUtcmVnZXhwIChjb25jYXQgYnJlLXJlZ2V4cCAiXFx8XHgyMDI5IikpCiAgKHNh dmUtZXhjdXJzaW9uCiAgIChsZXQgKChsaW5lLWJlZ2luKSAocGFyYWdyYXBoLWVuZCkpCgkgKGZv cndhcmQtcGFyYWdyYXBoKQoJIChpbnNlcnQgIlx4MjAyOSIpIDsgdXNlIFx4MjAyOSAodW5pY29k ZSBwYXJhZ3JhcGggc2VwYXJhdG9yKSB0byBtYXJrIGVuZAoJCQkJCSAgIDsgb2YgYSBwYXJhZ3Jh cGgKCSAoYmFja3dhcmQtcGFyYWdyYXBoKQoJIChzZXRxIGxpbmUtYmVnaW4gKHBvaW50KSkKCSAo d2hpbGUgKG5vdCBwYXJhZ3JhcGgtZW5kKQoJCQkocmUtc2VhcmNoLWZvcndhcmQgYnJlLXJlZ2V4 cCkKCQkJKGlmIChlcXVhbCAobWF0Y2gtc3RyaW5nIDApICJceDIwMjkiKSAoc2V0cSBwYXJhZ3Jh cGgtZW5kIHQpKQoJCQkJCQkJCQkJOyBlbmQgb2YgcGFyYWdyYXBoIHJlYWNoZWQKCQkJKGlmIChv ciBicmUtZGVsIHBhcmFncmFwaC1lbmQpIChyZXBsYWNlLW1hdGNoICIiKSkKCQkJKHVubGVzcyAo ZXF1YWwgKGNoYXItYWZ0ZXIpID9cbikgKGluc2VydCAiXG4iKSkKCQkJCQkJCQkJCTsgSSBkb24n dCBrbm93IHdoeSBidXQgdHdvIGFkamFjZW50IFxuCgkJCQkJCQkJCQk7IGxlYXZlIGFuIGVtcHR5 IGxpbmUgYWZ0ZXIgZmlsbAoJCQkoZmlsbC1yZWdpb24tYXMtcGFyYWdyYXBoIGxpbmUtYmVnaW4g KC0gKHBvaW50KSAxKQoJCQlqdXN0aWZ5KQoJCQkoc2V0cSBsaW5lLWJlZ2luIChwb2ludCkpKQoJ IChkZWxldGUtY2hhciAtMSkpKSkKCihkZWZ1biBzaHItZmlsbC1wYXJhZ3JhcGggKGRvbSkKICAi RmlsbCBwYXJhZ3JhcGgiCiAgKHdoZW4gKG5vdCBzaHItdXNlLWZvbnRzKSA7ZmlsbC1wYXJhZ3Jh cGggaXMgdXNlZnVsIG9ubHkgd2l0aCBtb25vc3BhY2UKCQkJCQkJCTtmb250cwogCShzaHItZmls bC1wYXJhZ3JhcGgtd2l0aC1icmVha3MKCSAoKGxhbWJkYSAoeCkKCQkoY29uZAogCQkgICgoZXF1 YWwgeCAicmlnaHQiKSAncmlnaHQpCiAJCSAgKChlcXVhbCB4ICJjZW50ZXIiKSAnY2VudGVyKQog CQkgICgoZXF1YWwgeCAibGVmdCIpICdsZWZ0KSkpCiAJICAoY2RyIChhc3NxICdhbGlnbiAoZG9t LWF0dHJpYnV0ZXMgZG9tKSkpKSA7IGp1c3RpZnkKCSBwYXJhbWV0ZXIgdCA7IGJyZS1kZWwgdAoJ ICkpKQoKKGRlZnVuIHNoci0tcmVtb3ZlLWJsYW5rLWxpbmVzLWF0LXRoZS1lbmQgKHN0YXJ0IGVu ZCkKICAoc2F2ZS1yZXN0cmljdGlvbgogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChuYXJyb3ct dG8tcmVnaW9uIHN0YXJ0IGVuZCkKICAgICAgKGdvdG8tY2hhciBlbmQpCiAgICAgICh3aGVuIChh bmQgKHJlLXNlYXJjaC1iYWNrd2FyZCAiW14gXG5dIiBuaWwgdCkKICAgICAgICAgICAgICAgICAo bm90IChlb2JwKSkpCiAgICAgICAgKGZvcndhcmQtbGluZSAxKQogICAgICAgIChkZWxldGUtcmVn aW9uIChwb2ludCkgKHBvaW50LW1heCkpKSkpKQoKKGRlZnVuIHNoci11cmwtYXQtcG9pbnQgKGlt YWdlLXVybCkKICAiUmV0dXJuIHRoZSBVUkwgdW5kZXIgcG9pbnQgYXMgYSBzdHJpbmcuCklmIElN QUdFLVVSTCBpcyBub24tbmlsLCBvciB0aGVyZSBpcyBubyBsaW5rIHVuZGVyIHBvaW50LCBidXQK dGhlcmUgaXMgYW4gaW1hZ2UgdW5kZXIgcG9pbnQgdGhlbiBjb3B5IHRoZSBVUkwgb2YgdGhlIGlt YWdlCnVuZGVyIHBvaW50IGluc3RlYWQuIgogIChpZiBpbWFnZS11cmwKICAgICAgKGdldC10ZXh0 LXByb3BlcnR5IChwb2ludCkgJ2ltYWdlLXVybCkKICAgIChvciAoZ2V0LXRleHQtcHJvcGVydHkg KHBvaW50KSAnc2hyLXVybCkKICAgICAgICAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnaW1h Z2UtdXJsKSkpKQoKKGRlZnVuIHNoci1jb3B5LXVybCAodXJsKQogICJDb3B5IHRoZSBVUkwgdW5k ZXIgcG9pbnQgdG8gdGhlIGtpbGwgcmluZy4KSWYgSU1BR0UtVVJMICh0aGUgcHJlZml4KSBpcyBu b24tbmlsLCBvciB0aGVyZSBpcyBubyBsaW5rIHVuZGVyCnBvaW50LCBidXQgdGhlcmUgaXMgYW4g aW1hZ2UgdW5kZXIgcG9pbnQgdGhlbiBjb3B5IHRoZSBVUkwgb2YgdGhlCmltYWdlIHVuZGVyIHBv aW50IGluc3RlYWQuIgogIChpbnRlcmFjdGl2ZSAobGlzdCAoc2hyLXVybC1hdC1wb2ludCBjdXJy ZW50LXByZWZpeC1hcmcpKSkKICAoaWYgKG5vdCB1cmwpCiAgICAgIChtZXNzYWdlICJObyBVUkwg dW5kZXIgcG9pbnQiKQogICAgKHNldHEgdXJsICh1cmwtZW5jb2RlLXVybCB1cmwpKQogICAgKGtp bGwtbmV3IHVybCkKICAgIChtZXNzYWdlICJDb3BpZWQgJXMiIHVybCkpKQoKKGRlZnVuIHNoci1w cm9iZS11cmwgKHVybCBjb250KQogICJQYXNzIFVSTCdzIHJlZGlyZWN0IGRlc3RpbmF0aW9uIHRv IENPTlQsIGlmIGl0IGhhcyBvbmUuCkNPTlQgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2Ygb25lIGFy Z3VtZW50LCB0aGUgcmVkaXJlY3QKZGVzdGluYXRpb24gVVJMLiAgSWYgVVJMIGlzIG5vdCByZWRp cmVjdGVkLCB0aGVuIENPTlQgaXMgbmV2ZXIKY2FsbGVkLiIKICAoaW50ZXJhY3RpdmUgIlAiKQog ICh1cmwtcmV0cmlldmUKICAgdXJsIChsYW1iZGEgKGEpCiAgICAgICAgIChwY2FzZSBhCiAgICAg ICAgICAgKGAoOnJlZGlyZWN0ICxkZXN0aW5hdGlvbiAuICxfKQogICAgICAgICAgICA7OyBSZW1v dmUgY29tbW9uIHRyYWNraW5nIGp1bmsgZnJvbSB0aGUgVVJMLgogICAgICAgICAgICAoZnVuY2Fs bCBjb250IChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIi51dG1fLioiICIiIGRlc3RpbmF0aW9uKSkpKSkKICAgbmlsIHQpKQoKKGRlZnVuIHNoci1w cm9iZS1hbmQtY29weS11cmwgKHVybCkKICAiQ29weSB0aGUgVVJMIHVuZGVyIHBvaW50IHRvIHRo ZSBraWxsIHJpbmcuCkxpa2UgYHNoci1jb3B5LXVybCcsIGJ1dCBhZGRpdGlvbmFsbHkgZmV0Y2gg VVJMIGFuZCB1c2UgaXRzCnJlZGlyZWN0aW9uIGRlc3RpbmF0aW9uIGlmIGl0IGhhcyBvbmUuIgog IChpbnRlcmFjdGl2ZSAobGlzdCAoc2hyLXVybC1hdC1wb2ludCBjdXJyZW50LXByZWZpeC1hcmcp KSkKICAoaWYgdXJsIChzaHItcHJvYmUtdXJsIHVybCAjJ3Noci1jb3B5LXVybCkKICAgIChzaHIt Y29weS11cmwgdXJsKSkpCgooZGVmdW4gc2hyLW1heWJlLXByb2JlLWFuZC1jb3B5LXVybCAodXJs KQogICJDb3B5IHRoZSBVUkwgdW5kZXIgcG9pbnQgdG8gdGhlIGtpbGwgcmluZy4KSWYgdGhlIFVS TCBpcyBhbHJlYWR5IGF0IHRoZSBmcm9udCBvZiB0aGUga2lsbCByaW5nIGFjdCBsaWtlCmBzaHIt cHJvYmUtYW5kLWNvcHktdXJsJywgb3RoZXJ3aXNlIGxpa2UgYHNoci1jb3B5LXVybCcuIgogIChp bnRlcmFjdGl2ZSAobGlzdCAoc2hyLXVybC1hdC1wb2ludCBjdXJyZW50LXByZWZpeC1hcmcpKSkK ICAoaWYgKGVxdWFsIHVybCAoY2FyIGtpbGwtcmluZykpCiAgICAgIChzaHItcHJvYmUtYW5kLWNv cHktdXJsIHVybCkKICAgIChzaHItY29weS11cmwgdXJsKSkpCgooZGVmdW4gc2hyLS1jdXJyZW50 LWxpbmstcmVnaW9uICgpCiAgKGxldCAoKGN1cnJlbnQgKGdldC10ZXh0LXByb3BlcnR5IChwb2lu dCkgJ3Noci11cmwpKQogICAgICAgIHN0YXJ0KQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIDs7 IEdvIHRvIHRoZSBiZWdpbm5pbmcuCiAgICAgICh3aGlsZSAoYW5kIChub3QgKGJvYnApKQoJCSAg KGVxdWFsIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdzaHItdXJsKSBjdXJyZW50KSkKICAg ICAgICAoZm9yd2FyZC1jaGFyIC0xKSkKICAgICAgKHVubGVzcyAoZXF1YWwgKGdldC10ZXh0LXBy b3BlcnR5IChwb2ludCkgJ3Noci11cmwpIGN1cnJlbnQpCiAgICAgICAgKGZvcndhcmQtY2hhciAx KSkKICAgICAgKHNldHEgc3RhcnQgKHBvaW50KSkKICAgICAgOzsgR28gdG8gdGhlIGVuZC4KICAg ICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgICAgIChlcXVhbCAoZ2V0 LXRleHQtcHJvcGVydHkgKHBvaW50KSAnc2hyLXVybCkgY3VycmVudCkpCiAgICAgICAgKGZvcndh cmQtY2hhciAxKSkKICAgICAgKGxpc3Qgc3RhcnQgKHBvaW50KSkpKSkKCihkZWZ1biBzaHItLWJs aW5rLWxpbmsgKCkKICAobGV0KiAoKHJlZ2lvbiAoc2hyLS1jdXJyZW50LWxpbmstcmVnaW9uKSkK ICAgICAgICAgKG92ZXJsYXkgKG1ha2Utb3ZlcmxheSAoY2FyIHJlZ2lvbikgKGNhZHIgcmVnaW9u KSkpKQogICAgKG92ZXJsYXktcHV0IG92ZXJsYXkgJ2ZhY2UgJ3Noci1zZWxlY3RlZC1saW5rKQog ICAgKHJ1bi1hdC10aW1lIDEgbmlsIChsYW1iZGEgKCkKICAgICAgICAgICAgICAgICAgICAgICAg IChkZWxldGUtb3ZlcmxheSBvdmVybGF5KSkpKSkKCihkZWZ1biBzaHItbmV4dC1saW5rICgpCiAg IlNraXAgdG8gdGhlIG5leHQgbGluay4iCiAgKGludGVyYWN0aXZlKQogIChsZXQgKChtYXRjaCAo dGV4dC1wcm9wZXJ0eS1zZWFyY2gtZm9yd2FyZCAnc2hyLXVybCBuaWwgbmlsIHQpKSkKICAgIChp ZiAobm90IG1hdGNoKQogICAgICAgIChtZXNzYWdlICJObyBuZXh0IGxpbmsiKQogICAgICAoZ290 by1jaGFyIChwcm9wLW1hdGNoLWJlZ2lubmluZyBtYXRjaCkpCiAgICAgIChtZXNzYWdlICIlcyIg KGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2hlbHAtZWNobykpKSkpCgooZGVmdW4gc2hyLXBy ZXZpb3VzLWxpbmsgKCkKICAiU2tpcCB0byB0aGUgcHJldmlvdXMgbGluay4iCiAgKGludGVyYWN0 aXZlKQogIChpZiAobm90ICh0ZXh0LXByb3BlcnR5LXNlYXJjaC1iYWNrd2FyZCAnc2hyLXVybCBu aWwgbmlsIHQpKQogICAgICAobWVzc2FnZSAiTm8gcHJldmlvdXMgbGluayIpCiAgICAobWVzc2Fn ZSAiJXMiIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdoZWxwLWVjaG8pKSkpCgooZGVmdW4g c2hyLXNob3ctYWx0LXRleHQgKCkKICAiU2hvdyB0aGUgQUxUIHRleHQgb2YgdGhlIGltYWdlIHVu ZGVyIHBvaW50LiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKHRleHQgKGdldC10ZXh0LXByb3Bl cnR5IChwb2ludCkgJ3Noci1hbHQpKSkKICAgIChpZiAobm90IHRleHQpCgkobWVzc2FnZSAiTm8g aW1hZ2UgdW5kZXIgcG9pbnQiKQogICAgICAobWVzc2FnZSAiJXMiIChzaHItZmlsbC10ZXh0IHRl eHQpKSkpKQoKKGRlZnVuIHNoci1icm93c2UtaW1hZ2UgKCZvcHRpb25hbCBjb3B5LXVybCkKICAi QnJvd3NlIHRoZSBpbWFnZSB1bmRlciBwb2ludC4KSWYgQ09QWS1VUkwgKHRoZSBwcmVmaXggaWYg Y2FsbGVkIGludGVyYWN0aXZlbHkpIGlzIG5vbi1uaWwsIGNvcHkKdGhlIFVSTCBvZiB0aGUgaW1h Z2UgdG8gdGhlIGtpbGwgYnVmZmVyIGluc3RlYWQuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGxl dCAoKHVybCAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnaW1hZ2UtdXJsKSkpCiAgICAoY29u ZAogICAgICgobm90IHVybCkKICAgICAgKG1lc3NhZ2UgIk5vIGltYWdlIHVuZGVyIHBvaW50Iikp CiAgICAgKGNvcHktdXJsCiAgICAgICh3aXRoLXRlbXAtYnVmZmVyCgkoaW5zZXJ0IHVybCkKCShj b3B5LXJlZ2lvbi1hcy1raWxsIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJKG1lc3NhZ2UgIkNv cGllZCAlcyIgdXJsKSkpCiAgICAgKHQKICAgICAgKG1lc3NhZ2UgIkJyb3dzaW5nICVzLi4uIiB1 cmwpCiAgICAgIChicm93c2UtdXJsIHVybCkpKSkpCgooZGVmdW4gc2hyLWluc2VydC1pbWFnZSAo KQogICJJbnNlcnQgdGhlIGltYWdlIHVuZGVyIHBvaW50IGludG8gdGhlIGJ1ZmZlci4iCiAgKGlu dGVyYWN0aXZlKQogIChsZXQgKCh1cmwgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ2ltYWdl LXVybCkpKQogICAgKGlmIChub3QgdXJsKQoJKG1lc3NhZ2UgIk5vIGltYWdlIHVuZGVyIHBvaW50 IikKICAgICAgKG1lc3NhZ2UgIkluc2VydGluZyAlcy4uLiIgdXJsKQogICAgICAodXJsLXJldHJp ZXZlIHVybCAnc2hyLWltYWdlLWZldGNoZWQKCQkgICAgKGxpc3QgKGN1cnJlbnQtYnVmZmVyKSAo MS0gKHBvaW50KSkgKHBvaW50LW1hcmtlcikpCgkJICAgIHQgdCkpKSkKCihkZWZ1biBzaHItem9v bS1pbWFnZSAoKQogICJUb2dnbGUgdGhlIGltYWdlIHNpemUuClRoZSBzaXplIHdpbGwgYmUgcm90 YXRlZCBiZXR3ZWVuIHRoZSBkZWZhdWx0IHNpemUsIHRoZSBvcmlnaW5hbApzaXplLCBhbmQgZnVs bC1idWZmZXIgc2l6ZS4iCiAgKGludGVyYWN0aXZlKQogIChsZXQgKCh1cmwgKGdldC10ZXh0LXBy b3BlcnR5IChwb2ludCkgJ2ltYWdlLXVybCkpCgkoc2l6ZSAoZ2V0LXRleHQtcHJvcGVydHkgKHBv aW50KSAnaW1hZ2Utc2l6ZSkpCgkoYnVmZmVyLXJlYWQtb25seSBuaWwpKQogICAgKGlmIChub3Qg dXJsKQoJKG1lc3NhZ2UgIk5vIGltYWdlIHVuZGVyIHBvaW50IikKICAgICAgOzsgRGVsZXRlIHRo ZSBvbGQgcGljdHVyZS4KICAgICAgKHdoaWxlIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdp bWFnZS11cmwpCgkoZm9yd2FyZC1jaGFyIC0xKSkKICAgICAgKGZvcndhcmQtY2hhciAxKQogICAg ICAobGV0ICgoc3RhcnQgKHBvaW50KSkpCgkod2hpbGUgKGdldC10ZXh0LXByb3BlcnR5IChwb2lu dCkgJ2ltYWdlLXVybCkKCSAgKGZvcndhcmQtY2hhciAxKSkKCShmb3J3YXJkLWNoYXIgLTEpCgko cHV0LXRleHQtcHJvcGVydHkgc3RhcnQgKHBvaW50KSAnZGlzcGxheSBuaWwpCgkod2hlbiAoPiAo LSAocG9pbnQpIHN0YXJ0KSAyKQoJICAoZGVsZXRlLXJlZ2lvbiBzdGFydCAoMS0gKHBvaW50KSkp KSkKICAgICAgKG1lc3NhZ2UgIkluc2VydGluZyAlcy4uLiIgdXJsKQogICAgICAodXJsLXJldHJp ZXZlIHVybCAnc2hyLWltYWdlLWZldGNoZWQKCQkgICAgKGxpc3QgKGN1cnJlbnQtYnVmZmVyKSAo MS0gKHBvaW50KSkgKHBvaW50LW1hcmtlcikKCQkJICAobGlzdCAoY29ucyAnc2l6ZQoJCQkJICAg ICAgKGNvbmQgKChvciAoZXEgc2l6ZSAnZGVmYXVsdCkKCQkJCQkJIChudWxsIHNpemUpKQoJCQkJ CSAgICAgJ29yaWdpbmFsKQoJCQkJCSAgICAoKGVxIHNpemUgJ29yaWdpbmFsKQoJCQkJCSAgICAg J2Z1bGwpCgkJCQkJICAgICgoZXEgc2l6ZSAnZnVsbCkKCQkJCQkgICAgICdkZWZhdWx0KSkpKSkK CQkgICAgdCkpKSkKCjs7OyBVdGlsaXR5IGZ1bmN0aW9ucy4KCihkZWZzdWJzdCBzaHItZ2VuZXJp YyAoZG9tKQogIChkb2xpc3QgKHN1YiAoZG9tLWNoaWxkcmVuIGRvbSkpCiAgICAoaWYgKHN0cmlu Z3Agc3ViKQoJKHNoci1pbnNlcnQgc3ViKQogICAgICAoc2hyLWRlc2NlbmQgc3ViKSkpKQoKKGRl ZnVuIHNoci1pbmRpcmVjdC1jYWxsICh0YWctbmFtZSBkb20gJnJlc3QgYXJncykKICAobGV0ICgo ZnVuY3Rpb24gKGludGVybiAoY29uY2F0ICJzaHItdGFnLSIgKHN5bWJvbC1uYW1lIHRhZy1uYW1l KSkgb2JhcnJheSkpCgk7OyBBbGxvdyBvdGhlciBwYWNrYWdlcyB0byBvdmVycmlkZSAob3IgcHJv dmlkZSkgcmVuZGVyaW5nCgk7OyBvZiBlbGVtZW50cy4KCShleHRlcm5hbCAoY2RyIChhc3NxIHRh Zy1uYW1lIHNoci1leHRlcm5hbC1yZW5kZXJpbmctZnVuY3Rpb25zKSkpKQogICAgKGNvbmQgKGV4 dGVybmFsCgkgICAoYXBwbHkgZXh0ZXJuYWwgZG9tIGFyZ3MpKQoJICAoKGZib3VuZHAgZnVuY3Rp b24pCgkgICAoYXBwbHkgZnVuY3Rpb24gZG9tIGFyZ3MpKQoJICAodAoJICAgKGFwcGx5ICdzaHIt Z2VuZXJpYyBkb20gYXJncykpKSkpCgooZGVmdW4gc2hyLWRlc2NlbmQgKGRvbSkKICAobGV0ICgo ZnVuY3Rpb24KICAgICAgICAgKGludGVybiAoY29uY2F0ICJzaHItdGFnLSIgKHN5bWJvbC1uYW1l IChkb20tdGFnIGRvbSkpKSBvYmFycmF5KSkKICAgICAgICA7OyBBbGxvdyBvdGhlciBwYWNrYWdl cyB0byBvdmVycmlkZSAob3IgcHJvdmlkZSkgcmVuZGVyaW5nCiAgICAgICAgOzsgb2YgZWxlbWVu dHMuCiAgICAgICAgKGV4dGVybmFsIChjZHIgKGFzc3EgKGRvbS10YWcgZG9tKSBzaHItZXh0ZXJu YWwtcmVuZGVyaW5nLWZ1bmN0aW9ucykpKQoJKHN0eWxlIChkb20tYXR0ciBkb20gJ3N0eWxlKSkK CShzaHItc3R5bGVzaGVldCBzaHItc3R5bGVzaGVldCkKCShzaHItZGVwdGggKDErIHNoci1kZXB0 aCkpCgkoc3RhcnQgKHBvaW50KSkpCiAgICA7OyBzaHIgdXNlcyBtYW55IGZyYW1lcyBwZXIgbmVz dGVkIG5vZGUuCiAgICAoaWYgKGFuZCAoPiBzaHItZGVwdGggKC8gbWF4LXNwZWNwZGwtc2l6ZSAx NSkpCiAgICAgICAgICAgICAobm90IChhbmQgKHktb3Itbi1wICJUb28gZGVlcGx5IG5lc3RlZCB0 byByZW5kZXIgcHJvcGVybHk7IGluY3JlYXNlIGBtYXgtc3BlY3BkbC1zaXplJz8iKQogICAgICAg ICAgICAgICAgICAgICAgIChzZXRxIG1heC1zcGVjcGRsLXNpemUgKCogbWF4LXNwZWNwZGwtc2l6 ZSAyKSkpKSkKICAgICAgICAoc2V0cSBzaHItd2FybmluZwogICAgICAgICAgICAgICJOb3QgcmVu ZGVyaW5nIHRoZSBjb21wbGV0ZSBwYWdlIGJlY2F1c2Ugb2YgdG9vLWRlZXAgbmVzdGluZyIpCiAg ICAgICh3aGVuIHN0eWxlCgkoaWYgKHN0cmluZy1tYXRjaCAiY29sb3JcXHxkaXNwbGF5XFx8Ym9y ZGVyLWNvbGxhcHNlIiBzdHlsZSkKCSAgICAoc2V0cSBzaHItc3R5bGVzaGVldCAobmNvbmMgKHNo ci1wYXJzZS1zdHlsZSBzdHlsZSkKCQkJCQlzaHItc3R5bGVzaGVldCkpCgkgIChzZXRxIHN0eWxl IG5pbCkpKQogICAgICA7OyBJZiB3ZSBoYXZlIGEgZGlzcGxheTpub25lLCB0aGVuIGp1c3QgaWdu b3JlIHRoaXMgcGFydCBvZiB0aGUgRE9NLgogICAgICAodW5sZXNzIChlcXVhbCAoY2RyIChhc3Nx ICdkaXNwbGF5IHNoci1zdHlsZXNoZWV0KSkgIm5vbmUiKQogICAgICAgIDs7IFdlIGRvbid0IHVz ZSBzaHItaW5kaXJlY3QtY2FsbCBoZXJlLCBzaW5jZSBzaHItZGVzY2VuZCBpcwogICAgICAgIDs7 IHRoZSBjZW50cmFsIGJpdCBvZiBzaHIuZWwsIGFuZCBzaG91bGQgYmUgYXMgZmFzdCBhcwogICAg ICAgIDs7IHBvc3NpYmxlLiAgSGF2aW5nIG9uZSBtb3JlIGxldmVsIG9mIGluZGlyZWN0aW9uIHdp dGggaXRzCiAgICAgICAgOzsgbmVnYXRpdmUgZWZmZWN0IG9uIHBlcmZvcm1hbmNlIGlzIGRlZW1l ZCB1bmp1c3RpZmllZCBpbgogICAgICAgIDs7IHRoaXMgY2FzZS4KICAgICAgICAoY29uZCAoZXh0 ZXJuYWwKICAgICAgICAgICAgICAgKGZ1bmNhbGwgZXh0ZXJuYWwgZG9tKSkKICAgICAgICAgICAg ICAoKGZib3VuZHAgZnVuY3Rpb24pCiAgICAgICAgICAgICAgIChmdW5jYWxsIGZ1bmN0aW9uIGRv bSkpCiAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgKHNoci1nZW5lcmljIGRvbSkpKQoJ KHdoZW4gKGFuZCBzaHItdGFyZ2V0LWlkCgkJICAgKGVxdWFsIChkb20tYXR0ciBkb20gJ2lkKSBz aHItdGFyZ2V0LWlkKSkKCSAgOzsgSWYgdGhlIGVsZW1lbnQgd2FzIGVtcHR5LCB3ZSBkb24ndCBo YXZlIGFueXRoaW5nIHRvIHB1dCB0aGUKCSAgOzsgYW5jaG9yIG9uLiAgU28ganVzdCBpbnNlcnQg YSBkdW1teSBjaGFyYWN0ZXIuCgkgICh3aGVuICg9IHN0YXJ0IChwb2ludCkpCgkgICAgKGluc2Vy dCAiKiIpKQoJICAocHV0LXRleHQtcHJvcGVydHkgc3RhcnQgKDErIHN0YXJ0KSAnc2hyLXRhcmdl dC1pZCBzaHItdGFyZ2V0LWlkKSkKCTs7IElmIHN0eWxlIGlzIHNldCwgdGhlbiB0aGlzIG5vZGUg aGFzIHNldCB0aGUgY29sb3IuCgkod2hlbiBzdHlsZQoJICAoc2hyLWNvbG9yaXplLXJlZ2lvbgoJ ICAgc3RhcnQgKHBvaW50KQoJICAgKGNkciAoYXNzcSAnY29sb3Igc2hyLXN0eWxlc2hlZXQpKQoJ ICAgKGNkciAoYXNzcSAnYmFja2dyb3VuZC1jb2xvciBzaHItc3R5bGVzaGVldCkpKSkpKSkpCgoo ZGVmdW4gc2hyLWZpbGwtdGV4dCAodGV4dCkKICAoaWYgKHplcm9wIChsZW5ndGggdGV4dCkpCiAg ICAgIHRleHQKICAgICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgIChsZXQgKChzaHItaW5kZW50YXRp b24gMCkKCSAgICAoc2hyLXN0YXJ0IG5pbCkKCSAgICAoc2hyLWludGVybmFsLXdpZHRoICgtICh3 aW5kb3ctYm9keS13aWR0aCBuaWwgdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKiAyIChmcmFtZS1jaGFyLXdpZHRoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7OyBBZGp1c3QgdGhlIHdpbmRvdyB3aWR0aCBmb3Igd2hlbgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDs7IHRoZSB1c2VyIGRpc2FibGVzIHRoZSBmcmluZ2VzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHdoaWNoIGNhdXNlcyB0aGUgZGlzcGxh eSBlbmdpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyB0byB1c3VycCBv bmUgY29sdW1uIGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBj b250aW51YXRpb24gZ2x5cGguCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlm IChhbmQgKG51bGwgc2hyLXdpZHRoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChub3QgKHNoci0taGF2ZS1vbmUtZnJpbmdlLXApKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCogKGZyYW1lLWNoYXItd2lkdGgpIDIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkpKQoJKHNoci1pbnNlcnQgdGV4dCkKCShz aHItZmlsbC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkKCShidWZmZXItc3RyaW5nKSkp KSkKCihkZWZpbmUtaW5saW5lIHNoci1jaGFyLWJyZWFrYWJsZS1wIChjaGFyKQogICJSZXR1cm4g bm9uLW5pbCBpZiBhIGxpbmUgY2FuIGJlIGJyb2tlbiBiZWZvcmUgYW5kIGFmdGVyIENIQVIuIgog IChpbmxpbmUtcXVvdGUgKGFyZWYgZmlsbC1maW5kLWJyZWFrLXBvaW50LWZ1bmN0aW9uLXRhYmxl ICxjaGFyKSkpCihkZWZpbmUtaW5saW5lIHNoci1jaGFyLW5vc3BhY2UtcCAoY2hhcikKICAiUmV0 dXJuIG5vbi1uaWwgaWYgbm8gc3BhY2UgaXMgcmVxdWlyZWQgYmVmb3JlIGFuZCBhZnRlciBDSEFS LiIKICAoaW5saW5lLXF1b3RlIChhcmVmIGZpbGwtbm9zcGFjZS1iZXR3ZWVuLXdvcmRzLXRhYmxl ICxjaGFyKSkpCgo7OyBLSU5TT0tVIGlzIGEgSmFwYW5lc2Ugd29yZCBtZWFuaW5nIGEgcnVsZSB0 aGF0IHNob3VsZCBub3QgYmUgdmlvbGF0ZWQuCjs7IEluIEVtYWNzLCBpdCBpcyBhIHRlcm0gdXNl ZCBmb3IgY2hhcmFjdGVycywgZS5nLiBwdW5jdHVhdGlvbiBtYXJrcywKOzsgcGFyZW50aGVzZXMs IGFuZCBzbyBvbiwgdGhhdCBzaG91bGQgbm90IGJlIHBsYWNlZCBpbiB0aGUgYmVnaW5uaW5nCjs7 IG9mIGEgbGluZSBvciB0aGUgZW5kIG9mIGEgbGluZS4KKGRlZmluZS1pbmxpbmUgc2hyLWNoYXIt a2luc29rdS1ib2wtcCAoY2hhcikKICAiUmV0dXJuIG5vbi1uaWwgaWYgYSBsaW5lIG91Z2h0IG5v dCB0byBiZWdpbiB3aXRoIENIQVIuIgogIChpbmxpbmUtbGV0ZXZhbHMgKGNoYXIpCiAgICAoaW5s aW5lLXF1b3RlIChhbmQgKG5vdCAoZXEgLGNoYXIgPycpKQogICAgICAgICAgICAgICAgICAgICAg IChhcmVmIChjaGFyLWNhdGVnb3J5LXNldCAsY2hhcikgPz4pKSkpKQooZGVmaW5lLWlubGluZSBz aHItY2hhci1raW5zb2t1LWVvbC1wIChjaGFyKQogICJSZXR1cm4gbm9uLW5pbCBpZiBhIGxpbmUg b3VnaHQgbm90IHRvIGVuZCB3aXRoIENIQVIuIgogIChpbmxpbmUtcXVvdGUgKGFyZWYgKGNoYXIt Y2F0ZWdvcnktc2V0ICxjaGFyKSA/PCkpKQoodW5sZXNzIChzaHItY2hhci1raW5zb2t1LWJvbC1w IChtYWtlLWNoYXIgJ2phcGFuZXNlLWppc3gwMjA4IDMzIDM1KSkKICAobG9hZCAia2luc29rdSIg bmlsIHQpKQoKKGRlZnVuIHNoci1waXhlbC1jb2x1bW4gKCkKICAoaWYgKG5vdCBzaHItdXNlLWZv bnRzKQogICAgICAoY3VycmVudC1jb2x1bW4pCiAgICAoaWYgKG5vdCAoZ2V0LWJ1ZmZlci13aW5k b3cgKGN1cnJlbnQtYnVmZmVyKSkpCgkoc2F2ZS13aW5kb3ctZXhjdXJzaW9uCiAgICAgICAgICA7 OyBBdm9pZCBlcnJvcnMgaWYgdGhlIHNlbGVjdGVkIHdpbmRvdyBpcyBhIGRlZGljYXRlZCBvbmUs CiAgICAgICAgICA7OyBhbmQgdGhleSBqdXN0IHdhbnQgdG8gaW5zZXJ0IGEgZG9jdW1lbnQgaW50 byBpdC4KICAgICAgICAgIChzZXQtd2luZG93LWRlZGljYXRlZC1wIG5pbCBuaWwpCgkgIChzZXQt d2luZG93LWJ1ZmZlciBuaWwgKGN1cnJlbnQtYnVmZmVyKSkKCSAgKGNhciAod2luZG93LXRleHQt cGl4ZWwtc2l6ZSBuaWwgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAocG9pbnQpKSkpCiAgICAg IChjYXIgKHdpbmRvdy10ZXh0LXBpeGVsLXNpemUgbmlsIChsaW5lLWJlZ2lubmluZy1wb3NpdGlv bikgKHBvaW50KSkpKSkpCgooZGVmdW4gc2hyLXBpeGVsLXJlZ2lvbiAoKQogICgtIChzaHItcGl4 ZWwtY29sdW1uKQogICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgKGdvdG8tY2hhciAobWFyaykp CiAgICAgICAoc2hyLXBpeGVsLWNvbHVtbikpKSkKCihkZWZ1biBzaHItc3RyaW5nLXBpeGVsLXdp ZHRoIChzdHJpbmcpCiAgKGlmIChub3Qgc2hyLXVzZS1mb250cykKICAgICAgKGxlbmd0aCBzdHJp bmcpCiAgICA7OyBTYXZlIGFuZCByZXN0b3JlIHBvaW50IGFjcm9zcyB3aXRoLXRlbXAtYnVmZmVy LCBzaW5jZQogICAgOzsgc2hyLXBpeGVsLWNvbHVtbiB1c2VzIHNhdmUtd2luZG93LWV4Y3Vyc2lv biwgd2hpY2ggY2FuIHJlc2V0CiAgICA7OyBwb2ludCB0byAxLgogICAgKGxldCAoKHB0IChwb2lu dCkpKQogICAgICAocHJvZzEKCSAgKHdpdGgtdGVtcC1idWZmZXIKCSAgICAoaW5zZXJ0IHN0cmlu ZykKCSAgICAoc2hyLXBpeGVsLWNvbHVtbikpCgkoZ290by1jaGFyIHB0KSkpKSkKCihkZWZzdWJz dCBzaHItLXRyYW5zbGF0ZS1pbnNlcnRpb24tY2hhcnMgKCkKICA7OyBSZW1vdmUgc29mdCBoeXBo ZW5zLgogIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgKHdoaWxlIChzZWFyY2gtZm9yd2FyZCAi wq0iIG5pbCB0KQogICAgKHJlcGxhY2UtbWF0Y2ggIiIgdCB0KSkKICA7OyBUcmFuc2xhdGUgbm9u LWJyZWFraW5nIHNwYWNlcyBpbnRvIHJlYWwgc3BhY2VzLgogIChnb3RvLWNoYXIgKHBvaW50LW1p bikpCiAgKHdoaWxlIChzZWFyY2gtZm9yd2FyZCAiwqAiIG5pbCB0KQogICAgKHJlcGxhY2UtbWF0 Y2ggIiAiIHQgdCkpKQoKKGRlZnVuIHNoci1pbnNlcnQgKHRleHQpCiAgKHdoZW4gKGFuZCAobm90 IChib2xwKSkKCSAgICAgKGdldC10ZXh0LXByb3BlcnR5ICgxLSAocG9pbnQpKSAnaW1hZ2UtdXJs KSkKICAgIChpbnNlcnQgIlxuIikpCiAgKGNvbmQKICAgKChlcSBzaHItZm9sZGluZy1tb2RlICdu b25lKQogICAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQogICAgICAoaW5zZXJ0IHRleHQpCiAgICAg IChzYXZlLXJlc3RyaWN0aW9uCgkobmFycm93LXRvLXJlZ2lvbiBzdGFydCAocG9pbnQpKQogICAg ICAgIChzaHItLXRyYW5zbGF0ZS1pbnNlcnRpb24tY2hhcnMpCgkoZ290by1jaGFyIChwb2ludC1t YXgpKSkpKQogICAodAogICAgKGxldCAoKGZvbnQtc3RhcnQgKHBvaW50KSkpCiAgICAgICh3aGVu IChhbmQgKHN0cmluZy1tYXRjaCAiXFxgWyBcdFxuXHJdIiB0ZXh0KQoJCSAobm90IChib2xwKSkK CQkgKG5vdCAoZXEgKGNoYXItYWZ0ZXIgKDEtIChwb2ludCkpKSA/ICkpKQoJKGluc2VydCAiICIp KQogICAgICAobGV0ICgoc3RhcnQgKHBvaW50KSkKCSAgICAoYm9scCAoYm9scCkpKQoJKGluc2Vy dCB0ZXh0KQoJKHNhdmUtcmVzdHJpY3Rpb24KCSAgKG5hcnJvdy10by1yZWdpb24gc3RhcnQgKHBv aW50KSkKCSAgKGdvdG8tY2hhciBzdGFydCkKCSAgKHdoZW4gKGxvb2tpbmctYXQgIlsgXHRcblxy XSsiKQoJICAgIChyZXBsYWNlLW1hdGNoICIiIHQgdCkpCgkgICh3aGlsZSAocmUtc2VhcmNoLWZv cndhcmQgIlsgXHRcblxyXSsiIG5pbCB0KQoJICAgIChyZXBsYWNlLW1hdGNoICIgIiB0IHQpKQog ICAgICAgICAgKHNoci0tdHJhbnNsYXRlLWluc2VydGlvbi1jaGFycykKCSAgKGdvdG8tY2hhciAo cG9pbnQtbWF4KSkpCgk7OyBXZSBtYXkgaGF2ZSByZW1vdmVkIGV2ZXJ5dGhpbmcgd2UgaW5zZXJ0 ZWQgaWYgaXQgd2FzIGp1c3QKCTs7IHNwYWNlcy4KCSh1bmxlc3MgKD0gZm9udC1zdGFydCAocG9p bnQpKQoJICA7OyBNYXJrIGFsbCBsaW5lcyB0aGF0IHNob3VsZCBwb3NzaWJseSBiZSBmb2xkZWQg YWZ0ZXJ3YXJkcy4KCSAgKHdoZW4gYm9scAoJICAgIChzaHItbWFyay1maWxsIHN0YXJ0KSkKCSAg KHdoZW4gc2hyLXVzZS1mb250cwoJICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBmb250LXN0YXJ0IChw b2ludCkKCQkJICAgICAgICdmYWNlCgkJCSAgICAgICAob3Igc2hyLWN1cnJlbnQtZm9udCAndmFy aWFibGUtcGl0Y2gpKSkpKSkpKSkKCihkZWZ1biBzaHItZmlsbC1saW5lcyAoc3RhcnQgZW5kKQog IChpZiAoPD0gc2hyLWludGVybmFsLXdpZHRoIDApCiAgICAgIG5pbAogICAgKHNhdmUtcmVzdHJp Y3Rpb24KICAgICAgKG5hcnJvdy10by1yZWdpb24gc3RhcnQgZW5kKQogICAgICAoZ290by1jaGFy IHN0YXJ0KQogICAgICAod2hlbiAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnc2hyLWluZGVu dGF0aW9uKQoJKHNoci1maWxsLWxpbmUpKQogICAgICAod2hpbGUgKHNldHEgc3RhcnQgKG5leHQt c2luZ2xlLXByb3BlcnR5LWNoYW5nZSBzdGFydCAnc2hyLWluZGVudGF0aW9uKSkKCShnb3RvLWNo YXIgc3RhcnQpCgkod2hlbiAoYm9scCkKCSAgKHNoci1maWxsLWxpbmUpKSkKICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkpKSkKCihkZWZ1biBzaHItdmVydGljYWwtbW90aW9uIChjb2x1bW4p CiAgKGlmIChub3Qgc2hyLXVzZS1mb250cykKICAgICAgKG1vdmUtdG8tY29sdW1uIGNvbHVtbikK ICAgICh1bmxlc3MgKGVvbHApCiAgICAgIChmb3J3YXJkLWNoYXIgMSkpCiAgICAodmVydGljYWwt bW90aW9uIChjb25zICgvIGNvbHVtbiAoZnJhbWUtY2hhci13aWR0aCkpIDApKQogICAgKHVubGVz cyAoZW9scCkKICAgICAgKGZvcndhcmQtY2hhciAxKSkpKQoKKGRlZnVuIHNoci1maWxsLWxpbmUg KCkKICAobGV0ICgoc2hyLWluZGVudGF0aW9uIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdz aHItaW5kZW50YXRpb24pKQoJKGNvbnRpbnVhdGlvbiAoZ2V0LXRleHQtcHJvcGVydHkKCQkgICAg ICAgKHBvaW50KSAnc2hyLWNvbnRpbnVhdGlvbi1pbmRlbnRhdGlvbikpCglzdGFydCkKICAgIChw dXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICgxKyAocG9pbnQpKSAnc2hyLWluZGVudGF0aW9uIG5p bCkKICAgIChsZXQgKChmYWNlIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdmYWNlKSkKCSAg KGJhY2tncm91bmQtc3RhcnQgKHBvaW50KSkpCiAgICAgIChzaHItaW5kZW50KQogICAgICAod2hl biBmYWNlCgkocHV0LXRleHQtcHJvcGVydHkgYmFja2dyb3VuZC1zdGFydCAocG9pbnQpICdmYWNl CgkJCSAgIGAsKHNoci1mYWNlLWJhY2tncm91bmQgZmFjZSkpKSkKICAgIChzZXRxIHN0YXJ0IChw b2ludCkpCiAgICAoc2V0cSBzaHItaW5kZW50YXRpb24gKG9yIGNvbnRpbnVhdGlvbiBzaHItaW5k ZW50YXRpb24pKQogICAgOzsgSWYgd2UgaGF2ZSBhbiBpbmRlbnRhdGlvbiB0aGF0J3Mgd2lkZXIg dGhhbiB0aGUgd2lkdGggd2UncmUKICAgIDs7IHRyeWluZyB0byBmaWxsIHRvLCB0aGVuIGp1c3Qg Z2l2ZSB1cCBhbmQgZG9uJ3QgZG8gYW55IGZpbGxpbmcuCiAgICAod2hlbiAoPCBzaHItaW5kZW50 YXRpb24gc2hyLWludGVybmFsLXdpZHRoKQogICAgICAoc2hyLXZlcnRpY2FsLW1vdGlvbiBzaHIt aW50ZXJuYWwtd2lkdGgpCiAgICAgICh3aGVuIChsb29raW5nLWF0ICIgJCIpCiAgICAgICAgKGRl bGV0ZS1yZWdpb24gKHBvaW50KSAobGluZS1lbmQtcG9zaXRpb24pKSkKICAgICAgKHdoaWxlIChu b3QgKGVvbHApKQogICAgICAgIDs7IFdlIGhhdmUgdG8gZG8gc29tZSBmb2xkaW5nLiAgRmlyc3Qg ZmluZCB0aGUgZmlyc3QKICAgICAgICA7OyBwcmV2aW91cyBwb2ludCBzdWl0YWJsZSBmb3IgZm9s ZGluZy4KICAgICAgICAoaWYgKG9yIChub3QgKHNoci1maW5kLWZpbGwtcG9pbnQgKGxpbmUtYmVn aW5uaW5nLXBvc2l0aW9uKSkpCgkgICAgICAgICg9IChwb2ludCkgc3RhcnQpKQoJICAgIDs7IFdl IGhhZCB1bmJyZWFrYWJsZSB0ZXh0IChmb3IgdGhpcyB3aWR0aCksIHNvIGp1c3QgZ28gdG8KCSAg ICA7OyB0aGUgZmlyc3Qgc3BhY2UgYW5kIGNhcnJ5IG9uLgoJICAgIChwcm9nbgoJICAgICAgKGJl Z2lubmluZy1vZi1saW5lKQoJICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiICIpCgkgICAgICAo c2VhcmNoLWZvcndhcmQgIiAiIChsaW5lLWVuZC1wb3NpdGlvbikgJ21vdmUpKSkKICAgICAgICA7 OyBTdWNjZXNzOyBjb250aW51ZS4KICAgICAgICAod2hlbiAoPSAocHJlY2VkaW5nLWNoYXIpID9c cykKCSAgKGRlbGV0ZS1jaGFyIC0xKSkKICAgICAgICAobGV0ICgoZ2FwLXN0YXJ0IChwb2ludCkp KQoJICAoaW5zZXJ0ICJcbiIpCgkgIChzaHItaW5kZW50KQogICAgICAgICAgKHdoZW4gKGFuZCAo PiAoMS0gZ2FwLXN0YXJ0KSAocG9pbnQtbWluKSkKICAgICAgICAgICAgICAgICAgICAgOzsgVGhl IGxpbmsgb24gYm90aCBzaWRlcyBvZiB0aGUgbmV3bGluZSBhcmUgdGhlCiAgICAgICAgICAgICAg ICAgICAgIDs7IHNhbWUuLi4KICAgICAgICAgICAgICAgICAgICAgKGVxdWFsIChnZXQtdGV4dC1w cm9wZXJ0eSAocG9pbnQpICdzaHItdXJsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdl dC10ZXh0LXByb3BlcnR5ICgxLSBnYXAtc3RhcnQpICdzaHItdXJsKSkpCiAgICAgICAgICAgIDs7 IC4uLiBzbyB3ZSBqb2luIHRoZSB0d28gYml0cyBpbnRvIG9uZSBsaW5rIGxvZ2ljYWxseSwgYnV0 CiAgICAgICAgICAgIDs7IG5vdCB2aXN1YWxseS4gIFRoaXMgbWFrZXMgbmF2aWdhdGlvbiBiZXR3 ZWVuIGxpbmtzIHdvcmsKICAgICAgICAgICAgOzsgd2VsbCwgYnV0IGF2b2lkcyB1bmRlcnNjb3Jl cyBiZWZvcmUgdGhlIGxpbmsgb24gdGhlIG5leHQKICAgICAgICAgICAgOzsgbGluZSB3aGVuIGlu ZGVudGVkLgogICAgICAgICAgICAobGV0ICgocHJvcHMgKGNvcHktc2VxdWVuY2UgKHRleHQtcHJv cGVydGllcy1hdCAocG9pbnQpKSkpKQogICAgICAgICAgICAgIDs7IFdlIGRvbid0IHdhbnQgdG8g dXNlIHRoZSBmYWNlcyBvbiB0aGUgaW5kZW50YXRpb24sIGJlY2F1c2UKICAgICAgICAgICAgICA7 OyB0aGF0J3MgdWdseS4KICAgICAgICAgICAgICAoc2V0cSBwcm9wcyAocGxpc3QtcHV0IHByb3Bz ICdmYWNlIG5pbCkpCgkgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyBnYXAtc3RhcnQgKHBvaW50 KSBwcm9wcykpKSkKICAgICAgICAoc2V0cSBzdGFydCAocG9pbnQpKQogICAgICAgIChzaHItdmVy dGljYWwtbW90aW9uIHNoci1pbnRlcm5hbC13aWR0aCkKICAgICAgICAod2hlbiAobG9va2luZy1h dCAiICQiKQoJICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChsaW5lLWVuZC1wb3NpdGlvbikpKSkp KSkKCihkZWZ1biBzaHItZmluZC1maWxsLXBvaW50IChzdGFydCkKICAobGV0ICgoYnAgKHBvaW50 KSkKCShlbmQgKHBvaW50KSkKCWZhaWxlZCkKICAgICh3aGlsZSAobm90IChvciAoc2V0cSBmYWls ZWQgKDw9IChwb2ludCkgc3RhcnQpKQoJCSAgICAoZXEgKHByZWNlZGluZy1jaGFyKSA/ICkKCQkg ICAgKGVxIChmb2xsb3dpbmctY2hhcikgPyApCgkJICAgIChzaHItY2hhci1icmVha2FibGUtcCAo cHJlY2VkaW5nLWNoYXIpKQoJCSAgICAoc2hyLWNoYXItYnJlYWthYmxlLXAgKGZvbGxvd2luZy1j aGFyKSkKCQkgICAgKGFuZCAoc2hyLWNoYXIta2luc29rdS1ib2wtcCAocHJlY2VkaW5nLWNoYXIp KQoJCQkgKHNoci1jaGFyLWJyZWFrYWJsZS1wIChmb2xsb3dpbmctY2hhcikpCgkJCSAobm90IChz aHItY2hhci1raW5zb2t1LWJvbC1wIChmb2xsb3dpbmctY2hhcikpKSkKCQkgICAgKHNoci1jaGFy LWtpbnNva3UtZW9sLXAgKGZvbGxvd2luZy1jaGFyKSkKCQkgICAgKGJvbHApKSkKICAgICAgKGJh Y2t3YXJkLWNoYXIgMSkpCiAgICAoaWYgZmFpbGVkCgk7OyBUaGVyZSdzIG5vIGJyZWFrYWJsZSBw b2ludCwgc28gd2UgZ2l2ZSBpdCB1cC4KCShsZXQgKGZvdW5kKQoJICAoZ290by1jaGFyIGJwKQog ICAgICAgICAgOzsgRG9uJ3Qgb3ZlcmZsb3cgdGhlIHdpbmRvdyBlZGdlLCBldmVuIGlmCiAgICAg ICAgICA7OyBzaHIta2luc29rdS1zaG9ydGVuIGlzIG5pbC4KCSAgKHVubGVzcyAob3Igc2hyLWtp bnNva3Utc2hvcnRlbiAobnVsbCBzaHItd2lkdGgpKQoJICAgICh3aGlsZSAoc2V0cSBmb3VuZCAo cmUtc2VhcmNoLWZvcndhcmQKCQkJCSJcXChcXGM+XFwpXFx8IFxcfFxcYzxcXHxcXGN8IgoJCQkJ KGxpbmUtZW5kLXBvc2l0aW9uKSAnbW92ZSkpKQoJICAgIChpZiAoYW5kIGZvdW5kCgkJICAgICAo bm90IChtYXRjaC1iZWdpbm5pbmcgMSkpKQoJCShnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAw KSkpKSkKICAgICAgKG9yCiAgICAgICAoZW9scCkKICAgICAgIDs7IERvbid0IHB1dCBraW5zb2t1 LWJvbCBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLAogICAgICAgOzsgb3Ig a2luc29rdS1lb2wgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIGEgbGluZS4KICAgICAgIChjb25k CiAgICAgICAgOzsgRG9uJ3Qgb3ZlcmZsb3cgdGhlIHdpbmRvdyBlZGdlLCBldmVuIGlmIHNoci1r aW5zb2t1LXNob3J0ZW4KICAgICAgICA7OyBpcyBuaWwuCgkoKG9yIHNoci1raW5zb2t1LXNob3J0 ZW4gKG51bGwgc2hyLXdpZHRoKSkKCSAod2hpbGUgKGFuZCAobm90IChtZW1xIChwcmVjZWRpbmct Y2hhcikgKGxpc3QgP1xDLUAgP1xuID8gKSkpCgkJICAgICAob3IgKHNoci1jaGFyLWtpbnNva3Ut ZW9sLXAgKHByZWNlZGluZy1jaGFyKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChzaHItY2hh ci1raW5zb2t1LWJvbC1wIChmb2xsb3dpbmctY2hhcikpKSkKCSAgIChiYWNrd2FyZC1jaGFyIDEp KQoJICh3aGVuIChzZXRxIGZhaWxlZCAoPD0gKHBvaW50KSBzdGFydCkpCgkgICA7OyBUaGVyZSdz IG5vIGJyZWFrYWJsZSBwb2ludCB0aGF0IGRvZXNuJ3QgdmlvbGF0ZSBraW5zb2t1LAoJICAgOzsg c28gd2UgbG9vayBmb3IgdGhlIHNlY29uZCBiZXN0IHBvc2l0aW9uLgoJICAgKHdoaWxlIChhbmQg KHByb2duCgkJCSAoZm9yd2FyZC1jaGFyIDEpCgkJCSAoPD0gKHBvaW50KSBlbmQpKQoJCSAgICAg ICAocHJvZ24KCQkJIChzZXRxIGJwIChwb2ludCkpCgkJCSAoc2hyLWNoYXIta2luc29rdS1lb2wt cCAoZm9sbG93aW5nLWNoYXIpKSkpKQoJICAgKGdvdG8tY2hhciBicCkpKQoJKChzaHItY2hhci1r aW5zb2t1LWVvbC1wIChwcmVjZWRpbmctY2hhcikpCgkgOzsgRmluZCBiYWNrd2FyZCB0aGUgcG9p bnQgd2hlcmUga2luc29rdS1lb2wgY2hhcmFjdGVycyBiZWdpbi4KCSAobGV0ICgoY291bnQgNCkp CgkgICAod2hpbGUKCSAgICAgICAocHJvZ24KCQkgKGJhY2t3YXJkLWNoYXIgMSkKCQkgKGFuZCAo PiAoc2V0cSBjb3VudCAoMS0gY291bnQpKSAwKQoJCSAgICAgIChub3QgKG1lbXEgKHByZWNlZGlu Zy1jaGFyKSAobGlzdCA/XEMtQCA/XG4gPyApKSkKCQkgICAgICAob3IgKHNoci1jaGFyLWtpbnNv a3UtZW9sLXAgKHByZWNlZGluZy1jaGFyKSkKCQkJICAoc2hyLWNoYXIta2luc29rdS1ib2wtcCAo Zm9sbG93aW5nLWNoYXIpKSkpKSkpCgkgKHdoZW4gKHNldHEgZmFpbGVkICg8PSAocG9pbnQpIHN0 YXJ0KSkKCSAgIDs7IFRoZXJlJ3Mgbm8gYnJlYWthYmxlIHBvaW50IHRoYXQgZG9lc24ndCB2aW9s YXRlIGtpbnNva3UsCgkgICA7OyBzbyB3ZSBnbyB0byB0aGUgc2Vjb25kIGJlc3QgcG9zaXRpb24u CgkgICAoaWYgKGxvb2tpbmctYXQgIlxcKFxcYzwrXFwpXFxjPCIpCgkgICAgICAgKGdvdG8tY2hh ciAobWF0Y2gtZW5kIDEpKQoJICAgICAoZm9yd2FyZC1jaGFyIDEpKSkpCgkoKHNoci1jaGFyLWtp bnNva3UtYm9sLXAgKGZvbGxvd2luZy1jaGFyKSkKCSA7OyBGaW5kIGZvcndhcmQgdGhlIHBvaW50 IHdoZXJlIGtpbnNva3UtYm9sIGNoYXJhY3RlcnMgZW5kLgoJIChsZXQgKChjb3VudCA0KSkKCSAg ICh3aGlsZSAocHJvZ24KCQkgICAgKGZvcndhcmQtY2hhciAxKQoJCSAgICAoYW5kICg+PSAoc2V0 cSBjb3VudCAoMS0gY291bnQpKSAwKQoJCQkgKHNoci1jaGFyLWtpbnNva3UtYm9sLXAgKGZvbGxv d2luZy1jaGFyKSkKCQkJIChzaHItY2hhci1icmVha2FibGUtcCAoZm9sbG93aW5nLWNoYXIpKSkp KSkpKQogICAgICAgKHdoZW4gKGVxIChmb2xsb3dpbmctY2hhcikgPyApCgkgKGZvcndhcmQtY2hh ciAxKSkpKQogICAgKG5vdCBmYWlsZWQpKSkKCihkZWZ1biBzaHItcGFyc2UtYmFzZSAodXJsKQog IDs7IEFsd2F5cyBjaG9wIG9mZiBhbmNob3JzLgogICh3aGVuIChzdHJpbmctbWF0Y2ggIiMuKiIg dXJsKQogICAgKHNldHEgdXJsIChzdWJzdHJpbmcgdXJsIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkp KQogIDs7IE5COiA8YmFzZSBocmVmPSIiID4gVVJJIG1heSBpdHNlbGYgYmUgcmVsYXRpdmUgdG8g dGhlIGRvY3VtZW50IHMgVVJJCiAgKHNldHEgdXJsIChzaHItZXhwYW5kLXVybCB1cmwpKQogIChs ZXQqICgocGFyc2VkICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgdXJsKSkKCSAobG9jYWwgKHVybC1m aWxlbmFtZSBwYXJzZWQpKSkKICAgIChzZXRmICh1cmwtZmlsZW5hbWUgcGFyc2VkKSAiIikKICAg IDs7IENob3Agb2ZmIHRoZSBiaXQgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2guCiAgICAod2hlbiAoc3Ry aW5nLW1hdGNoICJcXGBcXCguKi9cXClbXi9dK1xcJyIgbG9jYWwpCiAgICAgIChzZXRxIGxvY2Fs IChtYXRjaC1zdHJpbmcgMSBsb2NhbCkpKQogICAgOzsgQWx3YXlzIG1ha2UgdGhlIGxvY2FsIGJp dCBlbmQgd2l0aCBhIHNsYXNoLgogICAgKHdoZW4gKGFuZCAobm90ICh6ZXJvcCAobGVuZ3RoIGxv Y2FsKSkpCgkgICAgICAgKG5vdCAoZXEgKGFyZWYgbG9jYWwgKDEtIChsZW5ndGggbG9jYWwpKSkg Py8pKSkKICAgICAgKHNldHEgbG9jYWwgKGNvbmNhdCBsb2NhbCAiLyIpKSkKICAgIChsaXN0ICh1 cmwtcmVjcmVhdGUtdXJsIHBhcnNlZCkKCSAgbG9jYWwKCSAgKHVybC10eXBlIHBhcnNlZCkKCSAg dXJsKSkpCgooYXV0b2xvYWQgJ3VybC1leHBhbmQtZmlsZS1uYW1lICJ1cmwtZXhwYW5kIikKCjs7 IEZJWE1FIFRoaXMgbmVlZHMgc29tZSB0ZXN0cyB3cml0aW5nLgo7OyBEb2VzIGl0IGV2ZW4gbmVl ZCB0byBleGlzdCwgZ2l2ZW4gdGhhdCB1cmwtZXhwYW5kLWZpbGUtbmFtZSBkb2VzPwooZGVmdW4g c2hyLWV4cGFuZC11cmwgKHVybCAmb3B0aW9uYWwgYmFzZSkKICAoc2V0cSBiYXNlCgkoaWYgYmFz ZQoJICAgIDs7IHNoci1wYXJzZS1iYXNlIHNob3VsZCBuZXZlciBjYWxsIHRoaXMgd2l0aCBub24t bmlsIGJhc2UhCgkgICAgKHNoci1wYXJzZS1iYXNlIGJhc2UpCgkgIDs7IEJvdW5kIGJ5IHRoZSBw YXJzZXIuCgkgIHNoci1iYXNlKSkKICAod2hlbiAoemVyb3AgKGxlbmd0aCB1cmwpKQogICAgKHNl dHEgdXJsIG5pbCkpCiAgOzsgU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlCiAgKGFuZCB1cmwgKHN0 cmluZy1tYXRjaCAiXFxgXFxzLSsiIHVybCkKICAgICAgIChzZXRxIHVybCAoc3Vic3RyaW5nIHVy bCAobWF0Y2gtZW5kIDApKSkpCiAgKGNvbmQgKCh6ZXJvcCAobGVuZ3RoIHVybCkpCiAgICAgICAg IChudGggMyBiYXNlKSkKICAgICAgICAoKG9yIChub3QgYmFzZSkKCSAgICAgKHN0cmluZy1tYXRj aCAiXFxgW2Etel0qOiIgdXJsKSkKCSA7OyBBYnNvbHV0ZSBvciBlbXB0eSBVUkkKCSB1cmwpCgko KGVxIChhcmVmIHVybCAwKSA/LykKCSAoaWYgKGFuZCAoPiAobGVuZ3RoIHVybCkgMSkKCQkgIChl cSAoYXJlZiB1cmwgMSkgPy8pKQoJICAgICA7OyAvL2hvc3QuLi47IGp1c3QgdXNlIHRoZSBwcm90 b2NvbAoJICAgICAoY29uY2F0IChudGggMiBiYXNlKSAiOiIgdXJsKQoJICAgOzsgSnVzdCB1c2Ug dGhlIGhvc3QgbmFtZSBwYXJ0LgoJICAgKGNvbmNhdCAoY2FyIGJhc2UpIHVybCkpKQoJKChlcSAo YXJlZiB1cmwgMCkgPyMpCgkgOzsgQSBsaW5rIHRvIGFuIGFuY2hvci4KCSAoY29uY2F0IChudGgg MyBiYXNlKSB1cmwpKQoJKHQKCSA7OyBUb3RhbGx5IHJlbGF0aXZlLgoJICh1cmwtZXhwYW5kLWZp bGUtbmFtZSB1cmwgKGNvbmNhdCAoY2FyIGJhc2UpIChjYWRyIGJhc2UpKSkpKSkKCihkZWZ1biBz aHItZW5zdXJlLW5ld2xpbmUgKCkKICAodW5sZXNzIChib2JwKQogICAgKGxldCAoKHByZWZpeCAo Z2V0LXRleHQtcHJvcGVydHkgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKQoJCQkJICAgICAnc2hy LXByZWZpeC1sZW5ndGgpKSkKICAgICAgKHVubGVzcyAob3IgKHplcm9wIChjdXJyZW50LWNvbHVt bikpCiAgICAgICAgICAgICAgICAgIChhbmQgcHJlZml4CiAgICAgICAgICAgICAgICAgICAgICAg KD0gcHJlZml4ICgtIChwb2ludCkgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkpKSkKICAgICAg ICAoaW5zZXJ0ICJcbiIpKSkpKQoKKGRlZnVuIHNoci1lbnN1cmUtcGFyYWdyYXBoICgpCiAgKHVu bGVzcyAoYm9icCkKICAgIChsZXQgKChwcmVmaXggKGdldC10ZXh0LXByb3BlcnR5IChsaW5lLWJl Z2lubmluZy1wb3NpdGlvbikKCQkJCSAgICAgJ3Noci1wcmVmaXgtbGVuZ3RoKSkpCiAgICAgIChj b25kCiAgICAgICAoKGFuZCAoYm9scCkKCSAgICAgKHNhdmUtZXhjdXJzaW9uCgkgICAgICAgKGZv cndhcmQtbGluZSAtMSkKCSAgICAgICAobG9va2luZy1hdCAiICokIikpKQoJOzsgV2UncmUgYWxy ZWFkeSBhdCBhIG5ldyBwYXJhZ3JhcGg7IGRvIG5vdGhpbmcuCgkpCiAgICAgICAoKGFuZCBwcmVm aXgKCSAgICAgKD0gcHJlZml4ICgtIChwb2ludCkgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkp KQoJOzsgRG8gbm90aGluZzsgd2UncmUgYXQgdGhlIHN0YXJ0IG9mIGEgPGxpPi4KCSkKICAgICAg ICgoc2F2ZS1leGN1cnNpb24KCSAgKGJlZ2lubmluZy1vZi1saW5lKQoJICA7OyBJZiB0aGUgY3Vy cmVudCBsaW5lIGlzIHRvdGFsbHkgYmxhbmssIGFuZCBkb2Vzbid0IGV2ZW4KCSAgOzsgaGF2ZSBh bnkgZmFjZSBwcm9wZXJ0aWVzIHNldCwgdGhlbiBkZWxldGUgdGhlIGJsYW5rCgkgIDs7IHNwYWNl LgoJICAoYW5kIChsb29raW5nLWF0ICIgKiQiKQoJICAgICAgIChub3QgKGdldC10ZXh0LXByb3Bl cnR5IChwb2ludCkgJ2ZhY2UpKQoJICAgICAgIChub3QgKD0gKG5leHQtc2luZ2xlLXByb3BlcnR5 LWNoYW5nZSAocG9pbnQpICdmYWNlIG5pbAoJCQkJCQkgICAgKGxpbmUtZW5kLXBvc2l0aW9uKSkK CQkgICAgICAgKGxpbmUtZW5kLXBvc2l0aW9uKSkpKSkKCShkZWxldGUtcmVnaW9uIChtYXRjaC1i ZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpCiAgICAgICA7OyBXZSBoYXZlIGEgc2luZ2xlIGJs YW5rIGxpbmUuCiAgICAgICAoKGFuZCAoZW9scCkgKGJvbHApKQogICAgICAgIChpbnNlcnQgIlxu IikpCiAgICAgICA7OyBJbnNlcnQgbmV3IHBhcmFncmFwaC4KICAgICAgICh0CgkoaW5zZXJ0ICJc blxuIikpKSkpKQoKKGRlZnVuIHNoci1pbmRlbnQgKCkKICAod2hlbiAoPiBzaHItaW5kZW50YXRp b24gMCkKICAgIChpbnNlcnQKICAgICAoaWYgKG5vdCBzaHItdXNlLWZvbnRzKQoJIChtYWtlLXN0 cmluZyBzaHItaW5kZW50YXRpb24gP1xzKQogICAgICAgKHByb3BlcnRpemUgIiAiCgkJICAgJ2Rp c3BsYXkKCQkgICBgKHNwYWNlIDp3aWR0aCAoLHNoci1pbmRlbnRhdGlvbikpKSkpKSkKCihkZWZ1 biBzaHItZm9udGl6ZS1kb20gKGRvbSAmcmVzdCB0eXBlcykKICAobGV0ICgoc3RhcnQgKHBvaW50 KSkpCiAgICAoc2hyLWdlbmVyaWMgZG9tKQogICAgKGRvbGlzdCAodHlwZSB0eXBlcykKICAgICAg KHNoci1hZGQtZm9udCBzdGFydCAocG9pbnQpIHR5cGUpKSkpCgo7OyBBZGQgZmFjZSB0byB0aGUg cmVnaW9uLCBidXQgYXZvaWQgcHV0dGluZyB0aGUgZm9udCBwcm9wZXJ0aWVzIG9uCjs7IGJsYW5r IHRleHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLCBhbmQgdGhlIG5ld2xpbmUgYXQgdGhlIGVu ZCwgdG8KOzsgYXZvaWQgdWdsaW5lc3MuCihkZWZ1biBzaHItYWRkLWZvbnQgKHN0YXJ0IGVuZCB0 eXBlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGdvdG8tY2hhciBzdGFydCkKICAgICh3aGlsZSAo PCAocG9pbnQpIGVuZCkKICAgICAgKHdoZW4gKGJvbHApCiAgICAgICAgKHNraXAtY2hhcnMtZm9y d2FyZCAiICIpKQogICAgICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSAocG9pbnQpIChtaW4gKGxp bmUtZW5kLXBvc2l0aW9uKSBlbmQpIHR5cGUgdCkKICAgICAgKGlmICg8IChsaW5lLWVuZC1wb3Np dGlvbikgZW5kKQogICAgICAgICAgKGZvcndhcmQtbGluZSAxKQogICAgICAgIChnb3RvLWNoYXIg ZW5kKSkpKSkKCihkZWZ1biBzaHItbW91c2UtYnJvd3NlLXVybCAoZXYpCiAgIkJyb3dzZSB0aGUg VVJMIHVuZGVyIHRoZSBtb3VzZSBjdXJzb3IuIgogIChpbnRlcmFjdGl2ZSAiZSIpCiAgKG1vdXNl LXNldC1wb2ludCBldikKICAoc2hyLWJyb3dzZS11cmwpKQoKKGRlZnVuIHNoci1icm93c2UtdXJs ICgmb3B0aW9uYWwgZXh0ZXJuYWwgbW91c2UtZXZlbnQpCiAgIkJyb3dzZSB0aGUgVVJMIGF0IHBv aW50IHVzaW5nIGBicm93c2UtdXJsJy4KSWYgRVhURVJOQUwgaXMgbm9uLW5pbCAoaW50ZXJhY3Rp dmVseSwgdGhlIHByZWZpeCBhcmd1bWVudCksIGJyb3dzZQp0aGUgVVJMIHVzaW5nIGBzaHItZXh0 ZXJuYWwtYnJvd3NlcicuCklmIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBhIG1vdXNlIGNs aWNrLCBpdCB3aWxsIGJyb3dzZSB0aGUgVVJMCmF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2xpY2su ICBPcHRpb25hbCBhcmd1bWVudCBNT1VTRS1FVkVOVCBkZXNjcmliZXMKdGhlIG1vdXNlIGNsaWNr IGV2ZW50LiIKICAoaW50ZXJhY3RpdmUgKGxpc3QgY3VycmVudC1wcmVmaXgtYXJnIGxhc3Qtbm9u bWVudS1ldmVudCkpCiAgKG1vdXNlLXNldC1wb2ludCBtb3VzZS1ldmVudCkKICAobGV0ICgodXJs IChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdzaHItdXJsKSkpCiAgICAoY29uZAogICAgICgo bm90IHVybCkKICAgICAgKG1lc3NhZ2UgIk5vIGxpbmsgdW5kZXIgcG9pbnQiKSkKICAgICAoKHN0 cmluZy1tYXRjaCAiXm1haWx0bzoiIHVybCkKICAgICAgKGJyb3dzZS11cmwtbWFpbCB1cmwpKQog ICAgICh0CiAgICAgIChpZiBleHRlcm5hbAogICAgICAgICAgKHByb2duCgkgICAgKGZ1bmNhbGwg c2hyLWV4dGVybmFsLWJyb3dzZXIgdXJsKQogICAgICAgICAgICAoc2hyLS1ibGluay1saW5rKSkK CShicm93c2UtdXJsIHVybCkpKSkpKQoKKGRlZnVuIHNoci1zYXZlLWNvbnRlbnRzIChkaXJlY3Rv cnkpCiAgIlNhdmUgdGhlIGNvbnRlbnRzIGZyb20gVVJMIGluIGEgZmlsZS4iCiAgKGludGVyYWN0 aXZlICJEU2F2ZSBjb250ZW50cyBvZiBVUkwgdG8gZGlyZWN0b3J5OiAiKQogIChsZXQgKCh1cmwg KGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgJ3Noci11cmwpKSkKICAgIChpZiAobm90IHVybCkK CShtZXNzYWdlICJObyBsaW5rIHVuZGVyIHBvaW50IikKICAgICAgKHVybC1yZXRyaWV2ZSAoc2hy LWVuY29kZS11cmwgdXJsKQoJCSAgICAnc2hyLXN0b3JlLWNvbnRlbnRzIChsaXN0IHVybCBkaXJl Y3RvcnkpCgkJICAgIG5pbCB0KSkpKQoKKGRlZnVuIHNoci1zdG9yZS1jb250ZW50cyAoc3RhdHVz IHVybCBkaXJlY3RvcnkpCiAgKHVubGVzcyAocGxpc3QtZ2V0IHN0YXR1cyA6ZXJyb3IpCiAgICAo d2hlbiAob3IgKHNlYXJjaC1mb3J3YXJkICJcblxuIiBuaWwgdCkKCSAgICAgIChzZWFyY2gtZm9y d2FyZCAiXHJcblxyXG4iIG5pbCB0KSkKICAgICAgKHdyaXRlLXJlZ2lvbiAocG9pbnQpIChwb2lu dC1tYXgpCgkJICAgIChleHBhbmQtZmlsZS1uYW1lIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IHVy bCkKCQkJCSAgICAgIGRpcmVjdG9yeSkpKSkpCgooZGVmdW4gc2hyLWltYWdlLWZldGNoZWQgKHN0 YXR1cyBidWZmZXIgc3RhcnQgZW5kICZvcHRpb25hbCBmbGFncykKICAobGV0ICgoaW1hZ2UtYnVm ZmVyIChjdXJyZW50LWJ1ZmZlcikpKQogICAgKHdoZW4gKGFuZCAoYnVmZmVyLW5hbWUgYnVmZmVy KQoJICAgICAgIChub3QgKHBsaXN0LWdldCBzdGF0dXMgOmVycm9yKSkpCiAgICAgICh1cmwtc3Rv cmUtaW4tY2FjaGUgaW1hZ2UtYnVmZmVyKQogICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQog ICAgICAod2hlbiAob3IgKHNlYXJjaC1mb3J3YXJkICJcblxuIiBuaWwgdCkKCQkoc2VhcmNoLWZv cndhcmQgIlxyXG5cclxuIiBuaWwgdCkpCgkobGV0ICgoZGF0YSAoc2hyLXBhcnNlLWltYWdlLWRh dGEpKSkKCSAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCgkgICAgKHNhdmUtZXhjdXJzaW9u CgkgICAgICAoc2F2ZS1yZXN0cmljdGlvbgoJCSh3aWRlbikKCQkobGV0ICgoYWx0IChidWZmZXIt c3Vic3RyaW5nIHN0YXJ0IGVuZCkpCgkJICAgICAgKHByb3BlcnRpZXMgKHRleHQtcHJvcGVydGll cy1hdCBzdGFydCkpCgkJICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpKQoJCSAgKGRlbGV0ZS1y ZWdpb24gc3RhcnQgZW5kKQoJCSAgKGdvdG8tY2hhciBzdGFydCkKCQkgIChmdW5jYWxsIHNoci1w dXQtaW1hZ2UtZnVuY3Rpb24gZGF0YSBhbHQgZmxhZ3MpCgkJICAod2hpbGUgcHJvcGVydGllcwoJ CSAgICAobGV0ICgodHlwZSAocG9wIHByb3BlcnRpZXMpKQoJCQkgICh2YWx1ZSAocG9wIHByb3Bl cnRpZXMpKSkKCQkgICAgICAodW5sZXNzIChtZW1xIHR5cGUgJyhkaXNwbGF5IGltYWdlLXNpemUp KQoJCQkocHV0LXRleHQtcHJvcGVydHkgc3RhcnQgKHBvaW50KSB0eXBlIHZhbHVlKSkpKSkpKSkp KSkKICAgIChraWxsLWJ1ZmZlciBpbWFnZS1idWZmZXIpKSkKCihkZWZ1biBzaHItaW1hZ2UtZnJv bS1kYXRhIChkYXRhKQogICJSZXR1cm4gYW4gaW1hZ2UgZnJvbSB0aGUgZGF0YTogVVJJIGNvbnRl bnQgREFUQS4iCiAgKHdoZW4gKHN0cmluZy1tYXRjaAoJICJcXChcXChbXi87LF0rXFwoL1teOyxd K1xcKT9cXClcXCg7W147LF0rXFwpKlxcKT8sXFwoLipcXCkiCgkgZGF0YSkKICAgIChsZXQgKChw YXJhbSAobWF0Y2gtc3RyaW5nIDQgZGF0YSkpCgkgIChwYXlsb2FkICh1cmwtdW5oZXgtc3RyaW5n IChtYXRjaC1zdHJpbmcgNSBkYXRhKSkpKQogICAgICAod2hlbiAoYW5kIHBhcmFtCiAgICAgICAg ICAgICAgICAgKHN0cmluZy1tYXRjaCAiXi4qXFwoO1sgXHRdKmJhc2U2NFxcKSQiIHBhcmFtKSkK CShzZXRxIHBheWxvYWQgKGlnbm9yZS1lcnJvcnMKICAgICAgICAgICAgICAgICAgICAgICAgKGJh c2U2NC1kZWNvZGUtc3RyaW5nIHBheWxvYWQpKSkpCiAgICAgIHBheWxvYWQpKSkKCjs7IEJlaGlu ZCBkaXNwbGF5LWdyYXBoaWMtcCB0ZXN0LgooZGVjbGFyZS1mdW5jdGlvbiBpbWFnZS1zaXplICJp bWFnZS5jIiAoc3BlYyAmb3B0aW9uYWwgcGl4ZWxzIGZyYW1lKSkKKGRlY2xhcmUtZnVuY3Rpb24g aW1hZ2UtYW5pbWF0ZSAiaW1hZ2UiIChpbWFnZSAmb3B0aW9uYWwgaW5kZXggbGltaXQpKQoKKGRl ZnVuIHNoci1wdXQtaW1hZ2UgKHNwZWMgYWx0ICZvcHRpb25hbCBmbGFncykKICAiSW5zZXJ0IGlt YWdlIFNQRUMgd2l0aCBhIHN0cmluZyBBTFQuICBSZXR1cm4gaW1hZ2UuClNQRUMgaXMgZWl0aGVy IGFuIGltYWdlIGRhdGEgYmxvYiwgb3IgYSBsaXN0IHdoZXJlIHRoZSBmaXJzdAplbGVtZW50IGlz IHRoZSBkYXRhIGJsb2IgYW5kIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgY29udGVudC10eXBl LiIKICAoaWYgKGRpc3BsYXktZ3JhcGhpYy1wKQogICAgICAobGV0KiAoKHNpemUgKGNkciAoYXNz cSAnc2l6ZSBmbGFncykpKQoJICAgICAoZGF0YSAoaWYgKGNvbnNwIHNwZWMpCgkJICAgICAgIChj YXIgc3BlYykKCQkgICAgIHNwZWMpKQoJICAgICAoY29udGVudC10eXBlIChhbmQgKGNvbnNwIHNw ZWMpCgkJCQkoY2FkciBzcGVjKSkpCgkgICAgIChzdGFydCAocG9pbnQpKQoJICAgICAoaW1hZ2Ug KGNvbmQKCQkgICAgICgoZXEgc2l6ZSAnb3JpZ2luYWwpCgkJICAgICAgKGNyZWF0ZS1pbWFnZSBk YXRhIG5pbCB0IDphc2NlbnQgMTAwCgkJCQkgICAgOmZvcm1hdCBjb250ZW50LXR5cGUpKQoJCSAg ICAgKChlcSBjb250ZW50LXR5cGUgJ2ltYWdlL3N2Zyt4bWwpCgkJICAgICAgKGNyZWF0ZS1pbWFn ZSBkYXRhICdzdmcgdCA6YXNjZW50IDEwMCkpCgkJICAgICAoKGVxIHNpemUgJ2Z1bGwpCgkJICAg ICAgKGlnbm9yZS1lcnJvcnMKCQkJKHNoci1yZXNjYWxlLWltYWdlIGRhdGEgY29udGVudC10eXBl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGxpc3QtZ2V0IGZs YWdzIDp3aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw bGlzdC1nZXQgZmxhZ3MgOmhlaWdodCkpKSkKCQkgICAgICh0CgkJICAgICAgKGlnbm9yZS1lcnJv cnMKCQkJKHNoci1yZXNjYWxlLWltYWdlIGRhdGEgY29udGVudC10eXBlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGxpc3QtZ2V0IGZsYWdzIDp3aWR0aCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbGlzdC1nZXQgZmxhZ3Mg OmhlaWdodCkpKSkpKSkKICAgICAgICAod2hlbiBpbWFnZQoJICA7OyBXaGVuIGluc2VydGluZyBi aWctaXNoIHBpY3R1cmVzLCBwdXQgdGhlbSBhdCB0aGUKCSAgOzsgYmVnaW5uaW5nIG9mIHRoZSBs aW5lLgoJICAod2hlbiAoYW5kICg+IChjdXJyZW50LWNvbHVtbikgMCkKCQkgICAgICg+IChjYXIg KGltYWdlLXNpemUgaW1hZ2UgdCkpIDQwMCkpCgkgICAgKGluc2VydCAiXG4iKSkKCSAgKGlmIChl cSBzaXplICdvcmlnaW5hbCkKCSAgICAgIChpbnNlcnQtc2xpY2VkLWltYWdlIGltYWdlIChvciBh bHQgIioiKSBuaWwgMjAgMSkKCSAgICAoaW5zZXJ0LWltYWdlIGltYWdlIChvciBhbHQgIioiKSkp CgkgIChwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAocG9pbnQpICdpbWFnZS1zaXplIHNpemUpCgkg ICh3aGVuIChhbmQgc2hyLWltYWdlLWFuaW1hdGUKICAgICAgICAgICAgICAgICAgICAgKGNvbmQg KChmYm91bmRwICdpbWFnZS1tdWx0aS1mcmFtZS1wKQoJCSAgICAgICA7OyBPbmx5IGFuaW1hdGUg bXVsdGktZnJhbWUgdGhpbmdzIHRoYXQgc3BlY2lmeSBhCgkJICAgICAgIDs7IGRlbGF5OyBlZyBh bmltYXRlZCBnaWZzIGFzIG9wcG9zZWQgdG8KCQkgICAgICAgOzsgbXVsdGktcGFnZSB0aWZmcy4g IEZJWE1FPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciAoaW1hZ2UtbXVsdGktZnJh bWUtcCBpbWFnZSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZib3VuZHAgJ2ltYWdl LWFuaW1hdGVkLXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2UtYW5pbWF0ZWQt cCBpbWFnZSkpKSkKICAgICAgICAgICAgKGltYWdlLWFuaW1hdGUgaW1hZ2UgbmlsIDYwKSkpCglp bWFnZSkKICAgIChpbnNlcnQgKG9yIGFsdCAiIikpKSkKCihkZWZ1biBzaHItcmVzY2FsZS1pbWFn ZSAoZGF0YSBjb250ZW50LXR5cGUgd2lkdGggaGVpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmb3B0aW9uYWwgbWF4LXdpZHRoIG1heC1oZWlnaHQpCiAgIlJlc2NhbGUgREFUQSwg aWYgdG9vIGJpZywgdG8gZml0IHRoZSBjdXJyZW50IGJ1ZmZlci4KV0lEVEggYW5kIEhFSUdIVCBh cmUgdGhlIHNpemVzIGdpdmVuIGluIHRoZSBIVE1MIGRhdGEsIGlmIGFueS4KClRoZSBzaXplIG9m IHRoZSBkaXNwbGF5ZWQgaW1hZ2Ugd2lsbCBub3QgZXhjZWVkCk1BWC1XSURUSC9NQVgtSEVJR0hU LiAgSWYgbm90IGdpdmVuLCB1c2UgdGhlIGN1cnJlbnQgd2luZG93CndpZHRoL2hlaWdodCBpbnN0 ZWFkLiIKICAoaWYgKG9yIChub3QgKGZib3VuZHAgJ2ltYWdlbWFnaWNrLXR5cGVzKSkKICAgICAg ICAgIChub3QgKGdldC1idWZmZXItd2luZG93IChjdXJyZW50LWJ1ZmZlcikpKSkKICAgICAgKGNy ZWF0ZS1pbWFnZSBkYXRhIG5pbCB0IDphc2NlbnQgMTAwKQogICAgKGxldCogKChlZGdlcyAod2lu ZG93LWluc2lkZS1waXhlbC1lZGdlcwogICAgICAgICAgICAgICAgICAgKGdldC1idWZmZXItd2lu ZG93IChjdXJyZW50LWJ1ZmZlcikpKSkKICAgICAgICAgICAobWF4LXdpZHRoICh0cnVuY2F0ZSAo KiBzaHItbWF4LWltYWdlLXByb3BvcnRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAob3IgbWF4LXdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgtIChudGggMiBlZGdlcykgKG50aCAwIGVkZ2VzKSkpKSkpCiAgICAgICAgICAgKG1heC1oZWln aHQgKHRydW5jYXRlICgqIHNoci1tYXgtaW1hZ2UtcHJvcG9ydGlvbgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAob3IgbWF4LWhlaWdodAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKC0gKG50aCAzIGVkZ2VzKSAobnRoIDEgZWRnZXMpKSkpKSkKICAg ICAgICAgICAoc2NhbGluZyAoaW1hZ2UtY29tcHV0ZS1zY2FsaW5nLWZhY3RvciBpbWFnZS1zY2Fs aW5nLWZhY3RvcikpKQogICAgICAod2hlbiAob3IgKGFuZCB3aWR0aAogICAgICAgICAgICAgICAg ICAgICAoPiB3aWR0aCBtYXgtd2lkdGgpKQogICAgICAgICAgICAgICAgKGFuZCBoZWlnaHQKICAg ICAgICAgICAgICAgICAgICAgKD4gaGVpZ2h0IG1heC1oZWlnaHQpKSkKICAgICAgICAoc2V0cSB3 aWR0aCBuaWwKICAgICAgICAgICAgICBoZWlnaHQgbmlsKSkKICAgICAgKGlmIChhbmQgd2lkdGgg aGVpZ2h0CiAgICAgICAgICAgICAgICg8ICgqIHdpZHRoIHNjYWxpbmcpIG1heC13aWR0aCkKICAg ICAgICAgICAgICAgKDwgKCogaGVpZ2h0IHNjYWxpbmcpIG1heC1oZWlnaHQpKQogICAgICAgICAg KGNyZWF0ZS1pbWFnZQogICAgICAgICAgIGRhdGEgJ2ltYWdlbWFnaWNrIHQKICAgICAgICAgICA6 YXNjZW50IDEwMAogICAgICAgICAgIDp3aWR0aCB3aWR0aAogICAgICAgICAgIDpoZWlnaHQgaGVp Z2h0CiAgICAgICAgICAgOmZvcm1hdCBjb250ZW50LXR5cGUpCiAgICAgICAgKGNyZWF0ZS1pbWFn ZQogICAgICAgICBkYXRhICdpbWFnZW1hZ2ljayB0CiAgICAgICAgIDphc2NlbnQgMTAwCiAgICAg ICAgIDptYXgtd2lkdGggbWF4LXdpZHRoCiAgICAgICAgIDptYXgtaGVpZ2h0IG1heC1oZWlnaHQK ICAgICAgICAgOmZvcm1hdCBjb250ZW50LXR5cGUpKSkpKQoKOzsgdXJsLWNhY2hlLWV4dHJhY3Qg YXV0b2xvYWRzIHVybC1jYWNoZS4KKGRlY2xhcmUtZnVuY3Rpb24gdXJsLWNhY2hlLWNyZWF0ZS1m aWxlbmFtZSAidXJsLWNhY2hlIiAodXJsKSkKKGF1dG9sb2FkICdtbS1kaXNhYmxlLW11bHRpYnl0 ZSAibW0tdXRpbCIpCihhdXRvbG9hZCAnYnJvd3NlLXVybC1tYWlsICJicm93c2UtdXJsIikKCihk ZWZ1biBzaHItZ2V0LWltYWdlLWRhdGEgKHVybCkKICAiR2V0IGltYWdlIGRhdGEgZm9yIFVSTC4K UmV0dXJuIGEgc3RyaW5nIHdpdGggaW1hZ2UgZGF0YS4iCiAgKHdpdGgtdGVtcC1idWZmZXIKICAg IChtbS1kaXNhYmxlLW11bHRpYnl0ZSkKICAgICh3aGVuIChpZ25vcmUtZXJyb3JzCgkgICAgKHVy bC1jYWNoZS1leHRyYWN0ICh1cmwtY2FjaGUtY3JlYXRlLWZpbGVuYW1lIChzaHItZW5jb2RlLXVy bCB1cmwpKSkKCSAgICB0KQogICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIlxyP1xuXHI/ XG4iIG5pbCB0KQoJKHNoci1wYXJzZS1pbWFnZS1kYXRhKSkpKSkKCihkZWNsYXJlLWZ1bmN0aW9u IGxpYnhtbC1wYXJzZS14bWwtcmVnaW9uICJ4bWwuYyIKCQkgIChzdGFydCBlbmQgJm9wdGlvbmFs IGJhc2UtdXJsIGRpc2NhcmQtY29tbWVudHMpKQoKKGRlZnVuIHNoci1wYXJzZS1pbWFnZS1kYXRh ICgpCiAgKGxldCAoKGRhdGEgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAocG9pbnQtbWF4KSkp CgkoY29udGVudC10eXBlCgkgKHNhdmUtZXhjdXJzaW9uCgkgICAoc2F2ZS1yZXN0cmljdGlvbgoJ ICAgICAobmFycm93LXRvLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQpKQoJICAgICAobGV0ICgo Y29udGVudC10eXBlIChtYWlsLWZldGNoLWZpZWxkICJjb250ZW50LXR5cGUiKSkpCgkgICAgICAg KGFuZCBjb250ZW50LXR5cGUKCQkgICAgOzsgUmVtb3ZlIGFueSBjb21tZW50cyBpbiB0aGUgdHlw ZSBzdHJpbmcuCgkJICAgIChpbnRlcm4gKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiOy4qIiAi IiBjb250ZW50LXR5cGUpCgkJCSAgICBvYmFycmF5KSkpKSkpKQogICAgOzsgU1ZHIGltYWdlcyBt YXkgY29udGFpbiByZWZlcmVuY2VzIHRvIGZ1cnRoZXIgaW1hZ2VzIHRoYXQgd2UgbWF5CiAgICA7 OyB3YW50IHRvIGJsb2NrLiAgU28gc3BlY2lhbC1jYXNlIHRoZXNlIGJ5IHBhcnNpbmcgdGhlIFhN TCBkYXRhCiAgICA7OyBhbmQgcmVtb3ZlIGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGJsb2Nr ZWQgYml0LgogICAgKHdoZW4gKGFuZCBzaHItYmxvY2tlZC1pbWFnZXMKICAgICAgICAgICAgICAg KGVxIGNvbnRlbnQtdHlwZSAnaW1hZ2Uvc3ZnK3htbCkpCiAgICAgIChzZXRxIGRhdGEKICAgICAg ICAgICAgOzsgTm90ZSB0aGF0IGxpYnhtbDIgZG9lc24ndCBwYXJzZSBldmVyeXRoaW5nIHBlcmZl Y3RseSwKICAgICAgICAgICAgOzsgc28gZ2xpdGNoZXMgbWF5IG9jY3VyIGR1cmluZyB0aGlzIHRy YW5zZm9ybWF0aW9uLgoJICAgIChzaHItZG9tLXRvLXhtbAoJICAgICAobGlieG1sLXBhcnNlLXht bC1yZWdpb24gKHBvaW50KSAocG9pbnQtbWF4KSkpKSkKICAgIChsaXN0IGRhdGEgY29udGVudC10 eXBlKSkpCgooZGVmdW4gc2hyLWltYWdlLWRpc3BsYXllciAoY29udGVudC1mdW5jdGlvbikKICAi UmV0dXJuIGEgZnVuY3Rpb24gdG8gZGlzcGxheSBhbiBpbWFnZS4KQ09OVEVOVC1GVU5DVElPTiBp cyBhIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGFuIGltYWdlIGZvciBhIGNpZCB1cmwgdGhhdAppcyBh biBhcmd1bWVudC4gIFRoZSBmdW5jdGlvbiB0byBiZSByZXR1cm5lZCB0YWtlcyB0aHJlZSBhcmd1 bWVudHMgVVJMLApTVEFSVCwgYW5kIEVORC4gIE5vdGUgdGhhdCBTVEFSVCBhbmQgRU5EIHNob3Vs ZCBiZSBtYXJrZXJzLiIKICBgKGxhbWJkYSAodXJsIHN0YXJ0IGVuZCkKICAgICAod2hlbiB1cmwK ICAgICAgIChpZiAoc3RyaW5nLW1hdGNoICJcXGBjaWQ6IiB1cmwpCgkgICAsKHdoZW4gY29udGVu dC1mdW5jdGlvbgoJICAgICAgYChsZXQgKChpbWFnZSAoZnVuY2FsbCAsY29udGVudC1mdW5jdGlv bgoJCQkJICAgICAoc3Vic3RyaW5nIHVybCAobWF0Y2gtZW5kIDApKSkpKQoJCSAod2hlbiBpbWFn ZQoJCSAgIChnb3RvLWNoYXIgc3RhcnQpCgkJICAgKGZ1bmNhbGwgc2hyLXB1dC1pbWFnZS1mdW5j dGlvbgoJCQkgICAgaW1hZ2UgKGJ1ZmZlci1zdWJzdHJpbmcgc3RhcnQgZW5kKSkKCQkgICAoZGVs ZXRlLXJlZ2lvbiAocG9pbnQpIGVuZCkpKSkKCSAodXJsLXJldHJpZXZlIHVybCAnc2hyLWltYWdl LWZldGNoZWQKCQkgICAgICAgKGxpc3QgKGN1cnJlbnQtYnVmZmVyKSBzdGFydCBlbmQpCgkJICAg ICAgIHQgdCkpKSkpCgooZGVmdW4gc2hyLWhlYWRpbmcgKGRvbSAmcmVzdCB0eXBlcykKICAoc2hy LWVuc3VyZS1wYXJhZ3JhcGgpCiAgKGFwcGx5ICMnc2hyLWZvbnRpemUtZG9tIGRvbSB0eXBlcykK ICAoc2hyLWZpbGwtcGFyYWdyYXBoIGRvbSkKICAoc2hyLWVuc3VyZS1wYXJhZ3JhcGgpKQoKKGRl ZnVuIHNoci11cmxpZnkgKHN0YXJ0IHVybCAmb3B0aW9uYWwgdGl0bGUpCiAgKHNoci1hZGQtZm9u dCBzdGFydCAocG9pbnQpICdzaHItbGluaykKICAoYWRkLXRleHQtcHJvcGVydGllcwogICBzdGFy dCAocG9pbnQpCiAgIChsaXN0ICdzaHItdXJsIHVybAoJICdoZWxwLWVjaG8gKGxldCAoKHBhcnNl ZCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKG9yIChpZ25vcmUtZXJyb3JzCgkJCQkgICAgICAgICAoZGVjb2RlLWNvZGluZy1zdHJpbmcK CQkJCSAgICAgICAgICAodXJsLXVuaGV4LXN0cmluZyB1cmwpCgkJCQkgICAgICAgICAgJ3V0Zi04 IHQpKQoJCQkJICAgICAgIHVybCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGlyaSkKICAg ICAgICAgICAgICAgICAgICAgIDs7IElmIHdlIGhhdmUgYW4gSUROQSBkb21haW4sIHRoZW4gc2hv dyB0aGUKICAgICAgICAgICAgICAgICAgICAgIDs7IGRlY29kZWQgdmVyc2lvbiBpbiB0aGUgbW91 c2VvdmVyIHRvIGxldCB0aGUKICAgICAgICAgICAgICAgICAgICAgIDs7IHVzZXIga25vdyB0aGF0 IHRoZXJlJ3Mgc29tZXRoaW5nIHBvc3NpYmx5CiAgICAgICAgICAgICAgICAgICAgICA7OyBmaXNo eS4KICAgICAgICAgICAgICAgICAgICAgICh3aGVuICh1cmwtaG9zdCBwYXJzZWQpCiAgICAgICAg ICAgICAgICAgICAgICAgIChzZXRmICh1cmwtaG9zdCBwYXJzZWQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChwdW55LWVuY29kZS1kb21haW4gKHVybC1ob3N0IHBhcnNlZCkpKSkKICAg ICAgICAgICAgICAgICAgICAgIChzZXRxIGlyaSAodXJsLXJlY3JlYXRlLXVybCBwYXJzZWQpKQoJ CSAgICAgIChpZiB0aXRsZQogICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIiVzICgl cykiIGlyaSB0aXRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgaXJpKSkKCSAnZm9sbG93LWxp bmsgdAoJICdtb3VzZS1mYWNlICdoaWdobGlnaHQpKQogIDs7IERvbid0IG92ZXJ3cml0ZSBhbnkg a2V5bWFwcyB0aGF0IGFyZSBhbHJlYWR5IGluIHRoZSBidWZmZXIgKGkuZS4sCiAgOzsgaW1hZ2Ug a2V5bWFwcykuCiAgKHdoaWxlIChhbmQgc3RhcnQKICAgICAgICAgICAgICAoPCBzdGFydCAocG9p bnQpKSkKICAgIChsZXQgKChuZXh0IChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2Ugc3RhcnQg J2tleW1hcCBuaWwgKHBvaW50KSkpKQogICAgICAoaWYgKGdldC10ZXh0LXByb3BlcnR5IHN0YXJ0 ICdrZXltYXApCiAgICAgICAgICAoc2V0cSBzdGFydCBuZXh0KQogICAgICAgIChwdXQtdGV4dC1w cm9wZXJ0eSBzdGFydCAob3IgbmV4dCAocG9pbnQpKSAna2V5bWFwIHNoci1tYXApKSkpKQoKKGRl ZnVuIHNoci1lbmNvZGUtdXJsICh1cmwpCiAgIkVuY29kZSBVUkwuIgogIChicm93c2UtdXJsLXVy bC1lbmNvZGUtY2hhcnMgdXJsICJbKSQgXSIpKQoKKGF1dG9sb2FkICdzaHItY29sb3ItdmlzaWJs ZSAic2hyLWNvbG9yIikKKGF1dG9sb2FkICdzaHItY29sb3ItPmhleGFkZWNpbWFsICJzaHItY29s b3IiKQoKKGRlZnVuIHNoci1jb2xvci1jaGVjayAoZmcgYmcpCiAgIkNoZWNrIHRoYXQgRkcgaXMg dmlzaWJsZSBvbiBCRy4KUmV0dXJucyAoZmcgYmcpIHdpdGggY29ycmVjdGVkIHZhbHVlcy4KUmV0 dXJucyBuaWwgaWYgdGhlIGNvbG9ycyB0aGF0IHdvdWxkIGJlIHVzZWQgYXJlIHRoZSBkZWZhdWx0 Cm9uZXMsIGluIGNhc2UgZmcgYW5kIGJnIGFyZSBuaWwuIgogICh3aGVuIChvciBmZyBiZykKICAg IChsZXQgKChmaXhlZCAoY29uZCAoKG51bGwgZmcpICdmZykKICAgICAgICAgICAgICAgICAgICAg ICAoKG51bGwgYmcpICdiZykpKSkKICAgICAgOzsgQ29udmVydCBjb2xvcnMgdG8gaGV4YWRlY2lt YWwsIG9yIHNldCB0aGVtIHRvIGRlZmF1bHQuCiAgICAgIChsZXQgKChmZyAob3IgKHNoci1jb2xv ci0+aGV4YWRlY2ltYWwgZmcpCiAgICAgICAgICAgICAgICAgICAgKGZyYW1lLXBhcmFtZXRlciBu aWwgJ2ZvcmVncm91bmQtY29sb3IpKSkKICAgICAgICAgICAgKGJnIChvciAoc2hyLWNvbG9yLT5o ZXhhZGVjaW1hbCBiZykKICAgICAgICAgICAgICAgICAgICAoZnJhbWUtcGFyYW1ldGVyIG5pbCAn YmFja2dyb3VuZC1jb2xvcikpKSkKICAgICAgICAoY29uZCAoKGVxIGZpeGVkICdiZykKICAgICAg ICAgICAgICAgOzsgT25seSByZXR1cm4gdGhlIG5ldyBmZwogICAgICAgICAgICAgICAobGlzdCBu aWwgKGNhZHIgKHNoci1jb2xvci12aXNpYmxlIGJnIGZnIHQpKSkpCiAgICAgICAgICAgICAgKChl cSBmaXhlZCAnZmcpCiAgICAgICAgICAgICAgIDs7IEludmVydCBhcmdzIGFuZCByZXN1bHRzIGFu ZCByZXR1cm4gb25seSB0aGUgbmV3IGJnCiAgICAgICAgICAgICAgIChsaXN0IChjYWRyIChzaHIt Y29sb3ItdmlzaWJsZSBmZyBiZyB0KSkgbmlsKSkKICAgICAgICAgICAgICAodAogICAgICAgICAg ICAgICAoc2hyLWNvbG9yLXZpc2libGUgYmcgZmcpKSkpKSkpCgooZGVmdW4gc2hyLWNvbG9yaXpl LXJlZ2lvbiAoc3RhcnQgZW5kIGZnICZvcHRpb25hbCBiZykKICAod2hlbiAoYW5kIHNoci11c2Ut Y29sb3JzCiAgICAgICAgICAgICAob3IgZmcgYmcpCiAgICAgICAgICAgICAoPj0gKGRpc3BsYXkt Y29sb3ItY2VsbHMpIDg4KSkKICAgIChsZXQgKChuZXctY29sb3JzIChzaHItY29sb3ItY2hlY2sg ZmcgYmcpKSkKICAgICAgKHdoZW4gbmV3LWNvbG9ycwoJKHdoZW4gZmcKCSAgKGFkZC1mYWNlLXRl eHQtcHJvcGVydHkgc3RhcnQgZW5kCgkJCQkgIChsaXN0IDpmb3JlZ3JvdW5kIChjYWRyIG5ldy1j b2xvcnMpKQoJCQkJICB0KSkKCSh3aGVuIGJnCgkgIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5IHN0 YXJ0IGVuZAoJCQkJICAobGlzdCA6YmFja2dyb3VuZCAoY2FyIG5ldy1jb2xvcnMpKQoJCQkJICB0 KSkpCiAgICAgIG5ldy1jb2xvcnMpKSkKCjs7OyBUYWctc3BlY2lmaWMgcmVuZGVyaW5nIHJ1bGVz LgoKKGRlZnVuIHNoci10YWctaHRtbCAoZG9tKQogIChsZXQgKChkaXIgKGRvbS1hdHRyIGRvbSAn ZGlyKSkpCiAgICAoY29uZAogICAgICgoZXF1YWwgZGlyICJsdHIiKQogICAgICAoc2V0cSBiaWRp LXBhcmFncmFwaC1kaXJlY3Rpb24gJ2xlZnQtdG8tcmlnaHQpKQogICAgICgoZXF1YWwgZGlyICJy dGwiKQogICAgICAoc2V0cSBiaWRpLXBhcmFncmFwaC1kaXJlY3Rpb24gJ3JpZ2h0LXRvLWxlZnQp KQogICAgICgoZXF1YWwgZGlyICJhdXRvIikKICAgICAgKHNldHEgYmlkaS1wYXJhZ3JhcGgtZGly ZWN0aW9uIG5pbCkpKSkKICAoc2hyLWdlbmVyaWMgZG9tKSkKCihkZWZ1biBzaHItdGFnLWJvZHkg KGRvbSkKICAobGV0KiAoKHN0YXJ0IChwb2ludCkpCgkgKGZnY29sb3IgKG9yIChkb20tYXR0ciBk b20gJ2ZnY29sb3IpIChkb20tYXR0ciBkb20gJ3RleHQpKSkKCSAoYmdjb2xvciAoZG9tLWF0dHIg ZG9tICdiZ2NvbG9yKSkKCSAoc2hyLXN0eWxlc2hlZXQgKGxpc3QgKGNvbnMgJ2NvbG9yIGZnY29s b3IpCgkJCSAgICAgICAoY29ucyAnYmFja2dyb3VuZC1jb2xvciBiZ2NvbG9yKSkpKQogICAgKHNo ci1nZW5lcmljIGRvbSkKICAgIChzaHItY29sb3JpemUtcmVnaW9uIHN0YXJ0IChwb2ludCkgZmdj b2xvciBiZ2NvbG9yKSkpCgooZGVmdW4gc2hyLXRhZy1zdHlsZSAoX2RvbSkKICApCgooZGVmdW4g c2hyLXRhZy1zY3JpcHQgKF9kb20pCiAgKQoKKGRlZnVuIHNoci10YWctY29tbWVudCAoX2RvbSkK ICApCgooZGVmdW4gc2hyLWRvbS10by14bWwgKGRvbSkKICAod2l0aC10ZW1wLWJ1ZmZlcgogICAg KHNoci1kb20tcHJpbnQgZG9tKQogICAgKGJ1ZmZlci1zdHJpbmcpKSkKCihkZWZ1biBzaHItZG9t LXByaW50IChkb20pCiAgIkNvbnZlcnQgRE9NIGludG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUg eG1sIHJlcHJlc2VudGF0aW9uLiIKICAoaW5zZXJ0IChmb3JtYXQgIjwlcyIgKGRvbS10YWcgZG9t KSkpCiAgKGRvbGlzdCAoYXR0ciAoZG9tLWF0dHJpYnV0ZXMgZG9tKSkKICAgIDs7IElnbm9yZSBh dHRyaWJ1dGVzIHRoYXQgc3RhcnQgd2l0aCBhIGNvbG9uIGJlY2F1c2UgdGhleSBhcmUKICAgIDs7 IHByaXZhdGUgZWxlbWVudHMuCiAgICAodW5sZXNzICg9IChhcmVmIChmb3JtYXQgIiVzIiAoY2Fy IGF0dHIpKSAwKSA/OikKICAgICAgKGluc2VydCAoZm9ybWF0ICIgJXM9XCIlc1wiIiAoY2FyIGF0 dHIpIChjZHIgYXR0cikpKSkpCiAgKGluc2VydCAiPiIpCiAgKGxldCAodXJsKQogICAgKGRvbGlz dCAoZWxlbSAoZG9tLWNoaWxkcmVuIGRvbSkpCiAgICAgIChjb25kCiAgICAgICAoKHN0cmluZ3Ag ZWxlbSkKCShpbnNlcnQgZWxlbSkpCiAgICAgICAoKGVxIChkb20tdGFnIGVsZW0pICdjb21tZW50 KQoJKQogICAgICAgKChvciAobm90IChlcSAoZG9tLXRhZyBlbGVtKSAnaW1hZ2UpKQoJICAgIDs7 IEZpbHRlciBvdXQgYmxvY2tlZCBlbGVtZW50cyBpbnNpZGUgdGhlIFNWRyBpbWFnZS4KCSAgICAo bm90IChzZXRxIHVybCAoZG9tLWF0dHIgZWxlbSAnOnhsaW5rOmhyZWYpKSkKCSAgICAobm90IHNo ci1ibG9ja2VkLWltYWdlcykKCSAgICAobm90IChzdHJpbmctbWF0Y2ggc2hyLWJsb2NrZWQtaW1h Z2VzIHVybCkpKQoJKGluc2VydCAiICIpCgkoc2hyLWRvbS1wcmludCBlbGVtKSkpKSkKICAoaW5z ZXJ0IChmb3JtYXQgIjwvJXM+IiAoZG9tLXRhZyBkb20pKSkpCgooZGVmdW4gc2hyLXRhZy1zdmcg KGRvbSkKICAod2hlbiAoYW5kIChpbWFnZS10eXBlLWF2YWlsYWJsZS1wICdzdmcpCgkgICAgIChu b3Qgc2hyLWluaGliaXQtaW1hZ2VzKQogICAgICAgICAgICAgKGRvbS1hdHRyIGRvbSAnd2lkdGgp CiAgICAgICAgICAgICAoZG9tLWF0dHIgZG9tICdoZWlnaHQpKQogICAgKGZ1bmNhbGwgc2hyLXB1 dC1pbWFnZS1mdW5jdGlvbiAobGlzdCAoc2hyLWRvbS10by14bWwgZG9tKSAnaW1hZ2Uvc3ZnK3ht bCkKCSAgICAgIlNWRyBJbWFnZSIpKSkKCihkZWZ1biBzaHItdGFnLXN1cCAoZG9tKQogIChsZXQg KChzdGFydCAocG9pbnQpKSkKICAgIChzaHItZ2VuZXJpYyBkb20pCiAgICAocHV0LXRleHQtcHJv cGVydHkgc3RhcnQgKHBvaW50KSAnZGlzcGxheSAnKHJhaXNlIDAuNSkpKSkKCihkZWZ1biBzaHIt dGFnLXN1YiAoZG9tKQogIChsZXQgKChzdGFydCAocG9pbnQpKSkKICAgIChzaHItZ2VuZXJpYyBk b20pCiAgICAocHV0LXRleHQtcHJvcGVydHkgc3RhcnQgKHBvaW50KSAnZGlzcGxheSAnKHJhaXNl IC0wLjUpKSkpCgooZGVmdW4gc2hyLXRhZy1wIChkb20pCiAgKHNoci1lbnN1cmUtcGFyYWdyYXBo KQogIChzaHItZ2VuZXJpYyBkb20pCiAgKHNoci1maWxsLXBhcmFncmFwaCBkb20pCiAgKHNoci1l bnN1cmUtcGFyYWdyYXBoKSkKCihkZWZ1biBzaHItdGFnLWRpdiAoZG9tKQogIChsZXQgKChkaXNw bGF5IChjZHIgKGFzc3EgJ2Rpc3BsYXkgc2hyLXN0eWxlc2hlZXQpKSkpCiAgICAoaWYgKG9yIChl cXVhbCBkaXNwbGF5ICJpbmxpbmUiKQogICAgICAgICAgICAoZXF1YWwgZGlzcGxheSAiaW5saW5l LWJsb2NrIikpCiAgICAgICAgKHNoci1nZW5lcmljIGRvbSkKICAgICAgKHNoci1lbnN1cmUtbmV3 bGluZSkKICAgICAgKHNoci1nZW5lcmljIGRvbSkKICAgICAgKHNoci1lbnN1cmUtbmV3bGluZSkp KSkKCihkZWZ1biBzaHItdGFnLXMgKGRvbSkKICAoc2hyLWZvbnRpemUtZG9tIGRvbSAnc2hyLXN0 cmlrZS10aHJvdWdoKSkKCihkZWZ1biBzaHItdGFnLWIgKGRvbSkKICAoc2hyLWZvbnRpemUtZG9t IGRvbSAnYm9sZCkpCgooZGVmdW4gc2hyLXRhZy1pIChkb20pCiAgKHNoci1mb250aXplLWRvbSBk b20gJ2l0YWxpYykpCgooZGVmdW4gc2hyLXRhZy1lbSAoZG9tKQogIChzaHItZm9udGl6ZS1kb20g ZG9tICdpdGFsaWMpKQoKKGRlZnVuIHNoci10YWctc3Ryb25nIChkb20pCiAgKHNoci1mb250aXpl LWRvbSBkb20gJ2JvbGQpKQoKKGRlZnVuIHNoci10YWctdSAoZG9tKQogIChzaHItZm9udGl6ZS1k b20gZG9tICd1bmRlcmxpbmUpKQoKKGRlZnVuIHNoci10YWctdHQgKGRvbSkKICAobGV0ICgoc2hy LWN1cnJlbnQtZm9udCAnZGVmYXVsdCkpCiAgICAoc2hyLWdlbmVyaWMgZG9tKSkpCgooZGVmdW4g c2hyLXRhZy1pbnMgKGNvbnQpCiAgKGxldCogKChzdGFydCAocG9pbnQpKQogICAgICAgICAoY29s b3IgImdyZWVuIikKICAgICAgICAgKHNoci1zdHlsZXNoZWV0IChuY29uYyAobGlzdCAoY29ucyAn Y29sb3IgY29sb3IpKQoJCQkJc2hyLXN0eWxlc2hlZXQpKSkKICAgIChzaHItZ2VuZXJpYyBjb250 KQogICAgKHNoci1jb2xvcml6ZS1yZWdpb24gc3RhcnQgKHBvaW50KSBjb2xvcgogICAgICAgICAg ICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnYmFja2dyb3VuZC1jb2xvciBzaHItc3R5bGVzaGVl dCkpKSkpCgooZGVmdW4gc2hyLXRhZy1kZWwgKGNvbnQpCiAgKGxldCogKChzdGFydCAocG9pbnQp KQogICAgICAgICAoY29sb3IgInJlZCIpCiAgICAgICAgIChzaHItc3R5bGVzaGVldCAobmNvbmMg KGxpc3QgKGNvbnMgJ2NvbG9yIGNvbG9yKSkKCQkJCXNoci1zdHlsZXNoZWV0KSkpCiAgICAoc2hy LWZvbnRpemUtZG9tIGNvbnQgJ3Noci1zdHJpa2UtdGhyb3VnaCkKICAgIChzaHItY29sb3JpemUt cmVnaW9uIHN0YXJ0IChwb2ludCkgY29sb3IKICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIg KGFzc3EgJ2JhY2tncm91bmQtY29sb3Igc2hyLXN0eWxlc2hlZXQpKSkpKQoKKGRlZnVuIHNoci1w YXJzZS1zdHlsZSAoc3R5bGUpCiAgKHdoZW4gc3R5bGUKICAgIChzYXZlLW1hdGNoLWRhdGEKICAg ICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXG4iIHN0eWxlKQogICAgICAgIChzZXRxIHN0eWxlIChy ZXBsYWNlLW1hdGNoICIgIiB0IHQgc3R5bGUpKSkpCiAgICAobGV0ICgocGxpc3QgbmlsKSkKICAg ICAgKGRvbGlzdCAoZWxlbSAoc3BsaXQtc3RyaW5nIHN0eWxlICI7IikpCgkod2hlbiBlbGVtCgkg IChzZXRxIGVsZW0gKHNwbGl0LXN0cmluZyBlbGVtICI6IikpCgkgICh3aGVuIChhbmQgKGNhciBl bGVtKQoJCSAgICAgKGNhZHIgZWxlbSkpCgkgICAgKGxldCAoKG5hbWUgKHJlcGxhY2UtcmVnZXhw LWluLXN0cmluZyAiXiArXFx8ICskIiAiIiAoY2FyIGVsZW0pKSkKCQkgICh2YWx1ZSAocmVwbGFj ZS1yZWdleHAtaW4tc3RyaW5nICJeICtcXHwgKyQiICIiIChjYWRyIGVsZW0pKSkpCgkgICAgICAo d2hlbiAoc3RyaW5nLW1hdGNoICIgKiFpbXBvcnRhbnRcXCciIHZhbHVlKQoJCShzZXRxIHZhbHVl IChzdWJzdHJpbmcgdmFsdWUgMCAobWF0Y2gtYmVnaW5uaW5nIDApKSkpCgkgICAgICAodW5sZXNz IChlcXVhbCB2YWx1ZSAiaW5oZXJpdCIpCgkJKHB1c2ggKGNvbnMgKGludGVybiBuYW1lIG9iYXJy YXkpCgkJCSAgICB2YWx1ZSkKCQkgICAgICBwbGlzdCkpKSkpKQogICAgICBwbGlzdCkpKQoKKGRl ZnVuIHNoci10YWctYmFzZSAoZG9tKQogICh3aGVuLWxldCogKChiYXNlIChkb20tYXR0ciBkb20g J2hyZWYpKSkKICAgIChzZXRxIHNoci1iYXNlIChzaHItcGFyc2UtYmFzZSBiYXNlKSkpCiAgKHNo ci1nZW5lcmljIGRvbSkpCgooZGVmdW4gc2hyLXRhZy1hIChkb20pCiAgKGxldCAoKHVybCAoZG9t LWF0dHIgZG9tICdocmVmKSkKICAgICAgICAodGl0bGUgKGRvbS1hdHRyIGRvbSAndGl0bGUpKQoJ KHN0YXJ0IChwb2ludCkpCglzaHItc3RhcnQpCiAgICAoc2hyLWdlbmVyaWMgZG9tKQogICAgKHdo ZW4gKGFuZCBzaHItdGFyZ2V0LWlkCgkgICAgICAgKGVxdWFsIChkb20tYXR0ciBkb20gJ25hbWUp IHNoci10YXJnZXQtaWQpKQogICAgICA7OyBXZSBoYXZlIGEgemVyby1sZW5ndGggPGEgbmFtZT0i Zm9vIj4gZWxlbWVudCwgc28ganVzdAogICAgICA7OyBpbnNlcnQuLi4gIHNvbWV0aGluZy4KICAg ICAgKHdoZW4gKD0gc3RhcnQgKHBvaW50KSkKCShzaHItZW5zdXJlLW5ld2xpbmUpCgkoaW5zZXJ0 ICIgIikpCiAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAoMSsgc3RhcnQpICdzaHItdGFy Z2V0LWlkIHNoci10YXJnZXQtaWQpKQogICAgKHdoZW4gdXJsCiAgICAgIChzaHItdXJsaWZ5IChv ciBzaHItc3RhcnQgc3RhcnQpIChzaHItZXhwYW5kLXVybCB1cmwpIHRpdGxlKSkpKQoKKGRlZnVu IHNoci10YWctb2JqZWN0IChkb20pCiAgKHVubGVzcyBzaHItaW5oaWJpdC1pbWFnZXMKICAgIChs ZXQgKChzdGFydCAocG9pbnQpKQoJICB1cmwgbXVsdGltZWRpYSBpbWFnZSkKICAgICAgKHdoZW4t bGV0KiAoKHR5cGUgKGRvbS1hdHRyIGRvbSAndHlwZSkpKQoJKHdoZW4gKHN0cmluZy1tYXRjaCAi XFxgaW1hZ2Uvc3ZnIiB0eXBlKQoJICAoc2V0cSB1cmwgKGRvbS1hdHRyIGRvbSAnZGF0YSkKCQlp bWFnZSB0KSkpCiAgICAgIChkb2xpc3QgKGNoaWxkIChkb20tbm9uLXRleHQtY2hpbGRyZW4gZG9t KSkKCShjb25kCgkgKChlcSAoZG9tLXRhZyBjaGlsZCkgJ2VtYmVkKQoJICAoc2V0cSB1cmwgKG9y IHVybCAoZG9tLWF0dHIgY2hpbGQgJ3NyYykpCgkJbXVsdGltZWRpYSB0KSkKCSAoKGFuZCAoZXEg KGRvbS10YWcgY2hpbGQpICdwYXJhbSkKCSAgICAgICAoZXF1YWwgKGRvbS1hdHRyIGNoaWxkICdu YW1lKSAibW92aWUiKSkKCSAgKHNldHEgdXJsIChvciB1cmwgKGRvbS1hdHRyIGNoaWxkICd2YWx1 ZSkpCgkJbXVsdGltZWRpYSB0KSkpKQogICAgICAod2hlbiB1cmwKCShjb25kCgkgKGltYWdlCgkg IChzaHItaW5kaXJlY3QtY2FsbCAnaW1nIGRvbSB1cmwpCgkgIChzZXRxIGRvbSBuaWwpKQoJICht dWx0aW1lZGlhCgkgIChzaHItaW5zZXJ0ICIgW211bHRpbWVkaWFdICIpCgkgIChzaHItdXJsaWZ5 IHN0YXJ0IChzaHItZXhwYW5kLXVybCB1cmwpKSkpKQogICAgICAod2hlbiBkb20KCShzaHItZ2Vu ZXJpYyBkb20pKSkpKQoKKGRlZmN1c3RvbSBzaHItcHJlZmVyLW1lZGlhLXR5cGUtYWxpc3QgJygo IndlYm0iIC4gMS4wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgi b2d2IiAgLiAxLjApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJv Z2ciICAuIDEuMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm9w dXMiIC4gMS4wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZmxh YyIgLiAwLjkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3YXYi ICAuIDAuNSkpCiAgIlByZWZlcmVuY2VzIGZvciBtZWRpYSB0eXBlcy4KVGhlIGtleSBlbGVtZW50 IHNob3VsZCBiZSBhIHJlZ2V4cCBtYXRjaGVkIGFnYWluc3QgdGhlIHR5cGUgb2YgdGhlIHNvdXJj ZSBvcgp1cmwgaWYgbm8gdHlwZSBpcyBzcGVjaWZpZWQuICBUaGUgdmFsdWUgc2hvdWxkIGJlIGEg ZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0bwoxLjAuICBNZWRpYSBlbGVtZW50cyB3aXRoIGhpZ2hl ciB2YWx1ZSBhcmUgcHJlZmVycmVkLiIKICA6dmVyc2lvbiAiMjQuNCIKICA6Z3JvdXAgJ3Nocgog IDp0eXBlICcoYWxpc3QgOmtleS10eXBlIHJlZ2V4cCA6dmFsdWUtdHlwZSBmbG9hdCkpCgooZGVm dW4gc2hyLS1nZXQtbWVkaWEtcHJlZiAoZWxlbSkKICAiRGV0ZXJtaW5lIHRoZSBwcmVmZXJlbmNl IGZvciBFTEVNLgpUaGUgcHJlZmVyZW5jZSBpcyBhIGZsb2F0IGRldGVybWluZWQgZnJvbSBgc2hy LXByZWZlci1tZWRpYS10eXBlJy4iCiAgKGxldCAoKHR5cGUgKGRvbS1hdHRyIGVsZW0gJ3R5cGUp KQogICAgICAgIChwIDAuMCkpCiAgICAodW5sZXNzIHR5cGUKICAgICAgKHNldHEgdHlwZSAoZG9t LWF0dHIgZWxlbSAnc3JjKSkpCiAgICAod2hlbiB0eXBlCiAgICAgIChkb2xpc3QgKHByZWYgc2hy LXByZWZlci1tZWRpYS10eXBlLWFsaXN0KQogICAgICAgICh3aGVuIChhbmQKICAgICAgICAgICAg ICAgKD4gKGNkciBwcmVmKSBwKQogICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgKGNhciBw cmVmKSB0eXBlKSkKICAgICAgICAgIChzZXRxIHAgKGNkciBwcmVmKSkpKSkKICAgIHApKQoKKGRl ZnVuIHNoci0tZXh0cmFjdC1iZXN0LXNvdXJjZSAoZG9tICZvcHRpb25hbCB1cmwgcHJlZikKICAi RXh0cmFjdCB0aGUgYmVzdCBgOnNyYycgcHJvcGVydHkgZnJvbSA8c291cmNlPiBibG9ja3MgaW4g RE9NLiIKICAoc2V0cSBwcmVmIChvciBwcmVmIC0xLjApKQogIChsZXQgKG5ldy1wcmVmKQogICAg KGRvbGlzdCAoZWxlbSAoZG9tLW5vbi10ZXh0LWNoaWxkcmVuIGRvbSkpCiAgICAgICh3aGVuIChh bmQgKGVxIChkb20tdGFnIGVsZW0pICdzb3VyY2UpCgkJICg8IHByZWYKCQkgICAgKHNldHEgbmV3 LXByZWYKCQkJICAoc2hyLS1nZXQtbWVkaWEtcHJlZiBlbGVtKSkpKQoJKHNldHEgcHJlZiBuZXct cHJlZgoJICAgICAgdXJsIChkb20tYXR0ciBlbGVtICdzcmMpKQogICAgICAgIDs7IGxpYnhtbCdz IGh0bWwgcGFyc2VyIGlzbid0IEhUTUw1IGNvbXBsaWFudCBhbmQgbm9uIHRlcm1pbmF0ZWQKICAg ICAgICA7OyBzb3VyY2UgdGFncyBtaWdodCBlbmQgdXAgYXMgY2hpbGRyZW4uICBTbyByZWN1cnNp b24gaXQgaXMuLi4KICAgICAgICAoZG9saXN0IChjaGlsZCAoZG9tLW5vbi10ZXh0LWNoaWxkcmVu IGVsZW0pKQogICAgICAgICAgKHdoZW4gKGVxIChkb20tdGFnIGNoaWxkKSAnc291cmNlKQogICAg ICAgICAgICAobGV0ICgocmV0IChzaHItLWV4dHJhY3QtYmVzdC1zb3VyY2UgKGxpc3QgY2hpbGQp IHVybCBwcmVmKSkpCiAgICAgICAgICAgICAgKHdoZW4gKDwgcHJlZiAoY2RyIHJldCkpCiAgICAg ICAgICAgICAgICAoc2V0cSB1cmwgKGNhciByZXQpCiAgICAgICAgICAgICAgICAgICAgICBwcmVm IChjZHIgcmV0KSkpKSkpKSkpCiAgKGNvbnMgdXJsIHByZWYpKQoKKGRlZnVuIHNoci10YWctdmlk ZW8gKGRvbSkKICAobGV0ICgoaW1hZ2UgKGRvbS1hdHRyIGRvbSAncG9zdGVyKSkKICAgICAgICAo dXJsIChkb20tYXR0ciBkb20gJ3NyYykpCiAgICAgICAgKHN0YXJ0IChwb2ludCkpKQogICAgKHVu bGVzcyB1cmwKICAgICAgKHNldHEgdXJsIChjYXIgKHNoci0tZXh0cmFjdC1iZXN0LXNvdXJjZSBk b20pKSkpCiAgICAoaWYgKD4gKGxlbmd0aCBpbWFnZSkgMCkKCShzaHItaW5kaXJlY3QtY2FsbCAn aW1nIG5pbCBpbWFnZSkKICAgICAgKHNoci1pbnNlcnQgIiBbdmlkZW9dICIpKQogICAgKHNoci11 cmxpZnkgc3RhcnQgKHNoci1leHBhbmQtdXJsIHVybCkpKSkKCihkZWZ1biBzaHItdGFnLWF1ZGlv IChkb20pCiAgKGxldCAoKHVybCAoZG9tLWF0dHIgZG9tICdzcmMpKQogICAgICAgIChzdGFydCAo cG9pbnQpKSkKICAgICh1bmxlc3MgdXJsCiAgICAgIChzZXRxIHVybCAoY2FyIChzaHItLWV4dHJh Y3QtYmVzdC1zb3VyY2UgZG9tKSkpKQogICAgKHNoci1pbnNlcnQgIiBbYXVkaW9dICIpCiAgICAo c2hyLXVybGlmeSBzdGFydCAoc2hyLWV4cGFuZC11cmwgdXJsKSkpKQoKKGRlZnVuIHNoci10YWct aW1nIChkb20gJm9wdGlvbmFsIHVybCkKICAod2hlbiAob3IgdXJsCgkgICAgKGFuZCBkb20KCQkg KG9yICg+IChsZW5ndGggKGRvbS1hdHRyIGRvbSAnc3JjKSkgMCkKICAgICAgICAgICAgICAgICAg ICAgKD4gKGxlbmd0aCAoZG9tLWF0dHIgZG9tICdzcmNzZXQpKSAwKSkpKQogICAgKHdoZW4gKD4g KGN1cnJlbnQtY29sdW1uKSAwKQogICAgICAoaW5zZXJ0ICJcbiIpKQogICAgKGxldCAoKGFsdCAo ZG9tLWF0dHIgZG9tICdhbHQpKQogICAgICAgICAgKHdpZHRoIChzaHItc3RyaW5nLW51bWJlciAo ZG9tLWF0dHIgZG9tICd3aWR0aCkpKQogICAgICAgICAgKGhlaWdodCAoc2hyLXN0cmluZy1udW1i ZXIgKGRvbS1hdHRyIGRvbSAnaGVpZ2h0KSkpCgkgICh1cmwgKHNoci1leHBhbmQtdXJsIChvciB1 cmwgKHNoci0tcHJlZmVycmVkLWltYWdlIGRvbSkpKSkpCiAgICAgIChsZXQgKChzdGFydCAocG9p bnQtbWFya2VyKSkpCgkod2hlbiAoemVyb3AgKGxlbmd0aCBhbHQpKQoJICAoc2V0cSBhbHQgIioi KSkKCShjb25kCiAgICAgICAgICgobnVsbCB1cmwpCiAgICAgICAgICA7OyBBZnRlciBmdXJ0aGVy IGV4cGFuc2lvbiwgdGhlcmUgdHVybmVkIG91dCB0byBiZSBubyB2YWxpZAogICAgICAgICAgOzsg c3JjIGluIHRoZSBpbWcgYWZ0ZXIgYWxsLgogICAgICAgICAgKQoJICgob3IgKG1lbWJlciAoZG9t LWF0dHIgZG9tICdoZWlnaHQpICcoIjAiICIxIikpCgkgICAgICAobWVtYmVyIChkb20tYXR0ciBk b20gJ3dpZHRoKSAnKCIwIiAiMSIpKSkKCSAgOzsgSWdub3JlIHplcm8tc2l6ZWQgb3Igc2luZ2xl LXBpeGVsIGltYWdlcy4KCSAgKQoJICgoYW5kIChub3Qgc2hyLWluaGliaXQtaW1hZ2VzKQoJICAg ICAgIChzdHJpbmctbWF0Y2ggIlxcYGRhdGE6IiB1cmwpKQoJICAobGV0ICgoaW1hZ2UgKHNoci1p bWFnZS1mcm9tLWRhdGEgKHN1YnN0cmluZyB1cmwgKG1hdGNoLWVuZCAwKSkpKSkKCSAgICAoaWYg aW1hZ2UKCQkoZnVuY2FsbCBzaHItcHV0LWltYWdlLWZ1bmN0aW9uIGltYWdlIGFsdAogICAgICAg ICAgICAgICAgICAgICAgICAgKGxpc3QgOndpZHRoIHdpZHRoIDpoZWlnaHQgaGVpZ2h0KSkKCSAg ICAgIChpbnNlcnQgYWx0KSkpKQoJICgoYW5kIChub3Qgc2hyLWluaGliaXQtaW1hZ2VzKQoJICAg ICAgIChzdHJpbmctbWF0Y2ggIlxcYGNpZDoiIHVybCkpCgkgIChsZXQgKCh1cmwgKHN1YnN0cmlu ZyB1cmwgKG1hdGNoLWVuZCAwKSkpCgkJaW1hZ2UpCgkgICAgKGlmIChvciAobm90IHNoci1jb250 ZW50LWZ1bmN0aW9uKQoJCSAgICAobm90IChzZXRxIGltYWdlIChmdW5jYWxsIHNoci1jb250ZW50 LWZ1bmN0aW9uIHVybCkpKSkKCQkoaW5zZXJ0IGFsdCkKCSAgICAgIChmdW5jYWxsIHNoci1wdXQt aW1hZ2UtZnVuY3Rpb24gaW1hZ2UgYWx0CiAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgOndp ZHRoIHdpZHRoIDpoZWlnaHQgaGVpZ2h0KSkpKSkKCSAoKG9yIHNoci1pbmhpYml0LWltYWdlcwoJ ICAgICAgKGFuZCBzaHItYmxvY2tlZC1pbWFnZXMKCQkgICAoc3RyaW5nLW1hdGNoIHNoci1ibG9j a2VkLWltYWdlcyB1cmwpKSkKCSAgKHNldHEgc2hyLXN0YXJ0IChwb2ludCkpCiAgICAgICAgICAo c2hyLWluc2VydCBhbHQpKQoJICgoYW5kIChub3Qgc2hyLWlnbm9yZS1jYWNoZSkKCSAgICAgICAo dXJsLWlzLWNhY2hlZCAoc2hyLWVuY29kZS11cmwgdXJsKSkpCgkgIChmdW5jYWxsIHNoci1wdXQt aW1hZ2UtZnVuY3Rpb24gKHNoci1nZXQtaW1hZ2UtZGF0YSB1cmwpIGFsdAogICAgICAgICAgICAg ICAgICAgKGxpc3QgOndpZHRoIHdpZHRoIDpoZWlnaHQgaGVpZ2h0KSkpCgkgKHQKCSAgKHdoZW4g KGFuZCBzaHItaWdub3JlLWNhY2hlCgkJICAgICAodXJsLWlzLWNhY2hlZCAoc2hyLWVuY29kZS11 cmwgdXJsKSkpCgkgICAgKGxldCAoKGZpbGUgKHVybC1jYWNoZS1jcmVhdGUtZmlsZW5hbWUgKHNo ci1lbmNvZGUtdXJsIHVybCkpKSkKCSAgICAgICh3aGVuIChmaWxlLWV4aXN0cy1wIGZpbGUpCgkJ KGRlbGV0ZS1maWxlIGZpbGUpKSkpCiAgICAgICAgICAod2hlbiAoaW1hZ2UtdHlwZS1hdmFpbGFi bGUtcCAnc3ZnKQogICAgICAgICAgICAoaW5zZXJ0LWltYWdlCiAgICAgICAgICAgICAoc2hyLW1h a2UtcGxhY2Vob2xkZXItaW1hZ2UgZG9tKQogICAgICAgICAgICAgKG9yIGFsdCAiIikpKQogICAg ICAgICAgKGluc2VydCAiICIpCgkgICh1cmwtcXVldWUtcmV0cmlldmUKCSAgIChzaHItZW5jb2Rl LXVybCB1cmwpICdzaHItaW1hZ2UtZmV0Y2hlZAoJICAgKGxpc3QgKGN1cnJlbnQtYnVmZmVyKSBz dGFydCAoc2V0LW1hcmtlciAobWFrZS1tYXJrZXIpIChwb2ludCkpCiAgICAgICAgICAgICAgICAg KGxpc3QgOndpZHRoIHdpZHRoIDpoZWlnaHQgaGVpZ2h0KSkKCSAgIHQgdCkpKQoJKHdoZW4gKHpl cm9wIHNoci10YWJsZS1kZXB0aCkgOzsgV2UgYXJlIG5vdCBpbiBhIHRhYmxlLgoJICAocHV0LXRl eHQtcHJvcGVydHkgc3RhcnQgKHBvaW50KSAna2V5bWFwIHNoci1pbWFnZS1tYXApCgkgIChwdXQt dGV4dC1wcm9wZXJ0eSBzdGFydCAocG9pbnQpICdzaHItYWx0IGFsdCkKCSAgKHB1dC10ZXh0LXBy b3BlcnR5IHN0YXJ0IChwb2ludCkgJ2ltYWdlLXVybCB1cmwpCgkgIChwdXQtdGV4dC1wcm9wZXJ0 eSBzdGFydCAocG9pbnQpICdpbWFnZS1kaXNwbGF5ZXIKCQkJICAgICAoc2hyLWltYWdlLWRpc3Bs YXllciBzaHItY29udGVudC1mdW5jdGlvbikpCgkgIChwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAo cG9pbnQpICdoZWxwLWVjaG8KCQkJICAgICAoc2hyLWZpbGwtdGV4dAoJCQkgICAgICAob3IgKGRv bS1hdHRyIGRvbSAndGl0bGUpIGFsdCkpKSkpKSkpCgooZGVmdW4gc2hyLS1wcmVmZXJyZWQtaW1h Z2UgKGRvbSkKICAobGV0ICgoc3Jjc2V0IChkb20tYXR0ciBkb20gJ3NyY3NldCkpCiAgICAgICAg KGZyYW1lLXdpZHRoIChmcmFtZS1waXhlbC13aWR0aCkpCiAgICAgICAgKHdpZHRoIChzdHJpbmct dG8tbnVtYmVyIChvciAoZG9tLWF0dHIgZG9tICd3aWR0aCkgIjEwMCIpKSkKICAgICAgICBjYW5k aWRhdGUpCiAgICAod2hlbiAoPiAobGVuZ3RoIHNyY3NldCkgMCkKICAgICAgOzsgc3Jjc2V0IGNv bnNpc3Qgb2YgYSBzZXJpZXMgb2YgVVJML3NpemUgc3BlY2lmaWNhdGlvbnMKICAgICAgOzsgc2Vw YXJhdGVkIGJ5IHRoZSAiLCAiIHN0cmluZy4KICAgICAgKHNldHEgc3Jjc2V0CiAgICAgICAgICAg IChzb3J0IChtYXBjYXIKICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGVsZW0pCiAgICAgICAg ICAgICAgICAgICAgIChsZXQgKChzcGVjIChzcGxpdC1zdHJpbmcgZWxlbSAiW1x0XG5cciBdKyIp KSkKICAgICAgICAgICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgICAgICAgICAo KD0gKGxlbmd0aCBzcGVjKSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgOzsgTWFrZSBzdXJl IGl0J3Mgd2VsbCBmb3JtZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAoY2FyIHNw ZWMpIDApKQogICAgICAgICAgICAgICAgICAgICAgICAoKHN0cmluZy1tYXRjaCAiXFwoWzAtOV0r XFwpeFxcJyIgKGNhZHIgc3BlYykpCiAgICAgICAgICAgICAgICAgICAgICAgICA7OyBJZiB3ZSBo YXZlIGFuICJ4IiBmb3JtLCB0aGVuIHVzZSB0aGUgd2lkdGgKICAgICAgICAgICAgICAgICAgICAg ICAgIDs7IHNwZWMgdG8gY29tcHV0ZSB0aGUgcmVhbCB3aWR0aC4KICAgICAgICAgICAgICAgICAg ICAgICAgIChsaXN0IChjYXIgc3BlYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq IHdpZHRoIChzdHJpbmctdG8tbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKG1hdGNoLXN0cmluZyAxIChjYWRyIHNwZWMpKSkpKSkKICAgICAgICAgICAgICAg ICAgICAgICAgKHQKICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IChjYXIgc3BlYykKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctdG8tbnVtYmVyIChjYWRyIHNwZWMp KSkpKSkpCiAgICAgICAgICAgICAgICAgICAoc3BsaXQtc3RyaW5nIChyZXBsYWNlLXJlZ2V4cC1p bi1zdHJpbmcKCQkJCSAgIlxcYFtcdFxuXHIgXStcXHxbXHRcblxyIF0rXFwnIiAiIiBzcmNzZXQp CgkJCQkgIltcdFxuXHIgXSosW1x0XG5cciBdKiIpKQogICAgICAgICAgICAgICAgICAobGFtYmRh IChlMSBlMikKICAgICAgICAgICAgICAgICAgICAoPiAoY2FkciBlMSkgKGNhZHIgZTIpKSkpKQog ICAgICA7OyBDaG9vc2UgdGhlIHNtYWxsZXN0IHBpY3R1cmUgdGhhdCdzIGJpZ2dlciB0aGFuIHRo ZSBjdXJyZW50CiAgICAgIDs7IGZyYW1lLgogICAgICAoc2V0cSBjYW5kaWRhdGUgKGNhYXIgc3Jj c2V0KSkKICAgICAgKHdoaWxlIChhbmQgc3Jjc2V0CiAgICAgICAgICAgICAgICAgICg+IChjYWRy IChjYXIgc3Jjc2V0KSkgZnJhbWUtd2lkdGgpKQogICAgICAgIChzZXRxIGNhbmRpZGF0ZSAoY2Fh ciBzcmNzZXQpKQogICAgICAgIChwb3Agc3Jjc2V0KSkpCiAgICAob3IgY2FuZGlkYXRlIChkb20t YXR0ciBkb20gJ3NyYykpKSkKCihkZWZ1biBzaHItc3RyaW5nLW51bWJlciAoc3RyaW5nKQogIChp ZiAobnVsbCBzdHJpbmcpCiAgICAgIG5pbAogICAgKHNldHEgc3RyaW5nIChyZXBsYWNlLXJlZ2V4 cC1pbi1zdHJpbmcgIlteMC05XSIgIiIgc3RyaW5nKSkKICAgIChpZiAoemVyb3AgKGxlbmd0aCBz dHJpbmcpKQogICAgICAgIG5pbAogICAgICAoc3RyaW5nLXRvLW51bWJlciBzdHJpbmcpKSkpCgoo ZGVmdW4gc2hyLW1ha2UtcGxhY2Vob2xkZXItaW1hZ2UgKGRvbSkKICAobGV0KiAoKGVkZ2VzIChh bmQKICAgICAgICAgICAgICAgICAoZ2V0LWJ1ZmZlci13aW5kb3cgKGN1cnJlbnQtYnVmZmVyKSkK ICAgICAgICAgICAgICAgICAod2luZG93LWluc2lkZS1waXhlbC1lZGdlcwogICAgICAgICAgICAg ICAgICAoZ2V0LWJ1ZmZlci13aW5kb3cgKGN1cnJlbnQtYnVmZmVyKSkpKSkKICAgICAgICAgKHNj YWxpbmcgKGltYWdlLWNvbXB1dGUtc2NhbGluZy1mYWN0b3IgaW1hZ2Utc2NhbGluZy1mYWN0b3Ip KQogICAgICAgICAod2lkdGggKHRydW5jYXRlCiAgICAgICAgICAgICAgICAgKCogKG9yIChzaHIt c3RyaW5nLW51bWJlciAoZG9tLWF0dHIgZG9tICd3aWR0aCkpIDEwMCkKICAgICAgICAgICAgICAg ICAgICBzY2FsaW5nKSkpCiAgICAgICAgIChoZWlnaHQgKHRydW5jYXRlCiAgICAgICAgICAgICAg ICAgICgqIChvciAoc2hyLXN0cmluZy1udW1iZXIgKGRvbS1hdHRyIGRvbSAnaGVpZ2h0KSkgMTAw KQogICAgICAgICAgICAgICAgICAgICBzY2FsaW5nKSkpCiAgICAgICAgIChtYXgtd2lkdGgKICAg ICAgICAgIChhbmQgZWRnZXMKICAgICAgICAgICAgICAgKHRydW5jYXRlICgqIHNoci1tYXgtaW1h Z2UtcHJvcG9ydGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKG50aCAyIGVkZ2Vz KSAobnRoIDAgZWRnZXMpKSkpKSkKICAgICAgICAgKG1heC1oZWlnaHQgKGFuZCBlZGdlcwogICAg ICAgICAgICAgICAgICAgICAgICAgICh0cnVuY2F0ZSAoKiBzaHItbWF4LWltYWdlLXByb3BvcnRp b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKG50aCAzIGVkZ2Vz KSAobnRoIDEgZWRnZXMpKSkpKSkKICAgICAgICAgc3ZnKQogICAgKHdoZW4gKGFuZCBtYXgtd2lk dGgKICAgICAgICAgICAgICAgKD4gd2lkdGggbWF4LXdpZHRoKSkKICAgICAgKHNldHEgaGVpZ2h0 ICh0cnVuY2F0ZSAoKiAoLyAoZmxvYXQgbWF4LXdpZHRoKSB3aWR0aCkgaGVpZ2h0KSkKICAgICAg ICAgICAgd2lkdGggbWF4LXdpZHRoKSkKICAgICh3aGVuIChhbmQgbWF4LWhlaWdodAogICAgICAg ICAgICAgICAoPiBoZWlnaHQgbWF4LWhlaWdodCkpCiAgICAgIChzZXRxIHdpZHRoICh0cnVuY2F0 ZSAoKiAoLyAoZmxvYXQgbWF4LWhlaWdodCkgaGVpZ2h0KSB3aWR0aCkpCiAgICAgICAgICAgIGhl aWdodCBtYXgtaGVpZ2h0KSkKICAgIChzZXRxIHN2ZyAoc3ZnLWNyZWF0ZSB3aWR0aCBoZWlnaHQp KQogICAgKHN2Zy1ncmFkaWVudCBzdmcgImJhY2tncm91bmQiICdsaW5lYXIgJygoMCAuICIjYjBi MGIwIikgKDEwMCAuICIjODA4MDgwIikpKQogICAgKHN2Zy1yZWN0YW5nbGUgc3ZnIDAgMCB3aWR0 aCBoZWlnaHQgOmdyYWRpZW50ICJiYWNrZ3JvdW5kIgogICAgICAgICAgICAgICAgICAgOnN0cm9r ZS13aWR0aCAyIDpzdHJva2UtY29sb3IgImJsYWNrIikKICAgIChsZXQgKChpbWFnZSAoc3ZnLWlt YWdlIHN2ZykpKQogICAgICAoc2V0ZiAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOmFzY2VudCkgMTAw KQogICAgICBpbWFnZSkpKQoKKGRlZnVuIHNoci10YWctcHJlIChkb20pCiAgKGxldCAoKHNoci1m b2xkaW5nLW1vZGUgJ25vbmUpCgkoc2hyLWN1cnJlbnQtZm9udCAnZGVmYXVsdCkpCiAgICAoc2hy LWVuc3VyZS1uZXdsaW5lKQogICAgKHNoci1nZW5lcmljIGRvbSkKICAgIChzaHItZW5zdXJlLW5l d2xpbmUpKSkKCihkZWZ1biBzaHItdGFnLWJsb2NrcXVvdGUgKGRvbSkKICAoc2hyLWVuc3VyZS1w YXJhZ3JhcGgpCiAgKGxldCAoKHN0YXJ0IChwb2ludCkpCgkoc2hyLWluZGVudGF0aW9uICgrIHNo ci1pbmRlbnRhdGlvbgoJCQkgICAgKCogNCBzaHItdGFibGUtc2VwYXJhdG9yLXBpeGVsLXdpZHRo KSkpKQogICAgKHNoci1nZW5lcmljIGRvbSkKICAgIChzaHItZW5zdXJlLXBhcmFncmFwaCkKICAg IChzaHItbWFyay1maWxsIHN0YXJ0KSkpCgooZGVmdW4gc2hyLXRhZy1kbCAoZG9tKQogIChzaHIt ZW5zdXJlLXBhcmFncmFwaCkKICAoc2hyLWdlbmVyaWMgZG9tKQogIChzaHItZW5zdXJlLXBhcmFn cmFwaCkpCgooZGVmdW4gc2hyLXRhZy1kdCAoZG9tKQogIChzaHItZW5zdXJlLW5ld2xpbmUpCiAg KHNoci1nZW5lcmljIGRvbSkKICAoc2hyLWVuc3VyZS1uZXdsaW5lKSkKCihkZWZ1biBzaHItdGFn LWRkIChkb20pCiAgKHNoci1lbnN1cmUtbmV3bGluZSkKICAobGV0ICgoc2hyLWluZGVudGF0aW9u ICgrIHNoci1pbmRlbnRhdGlvbgoJCQkgICAgKCogNCBzaHItdGFibGUtc2VwYXJhdG9yLXBpeGVs LXdpZHRoKSkpKQogICAgKHNoci1nZW5lcmljIGRvbSkpKQoKKGRlZnVuIHNoci10YWctdWwgKGRv bSkKICAoc2hyLWVuc3VyZS1wYXJhZ3JhcGgpCiAgKGxldCAoKHNoci1saXN0LW1vZGUgJ3VsKSkK ICAgIChzaHItZ2VuZXJpYyBkb20pKQogIDs7IElmIHdlIGVuZCBvbiBhbiBlbXB0eSA8bGk+LCB0 aGVuIG1ha2Ugc3VyZSB3ZSByZWFsbHkgZW5kIG9uIGEgbmV3CiAgOzsgcGFyYWdyYXBoLgogICh1 bmxlc3MgKGJvbHApCiAgICAoaW5zZXJ0ICJcbiIpKQogIChzaHItZmlsbC1wYXJhZ3JhcGggZG9t KQogIChzaHItZW5zdXJlLXBhcmFncmFwaCkpCgooZGVmdW4gc2hyLXRhZy1vbCAoZG9tKQogIChz aHItZW5zdXJlLXBhcmFncmFwaCkKICAobGV0ICgoc2hyLWxpc3QtbW9kZSAxKSkKICAgIChzaHIt Z2VuZXJpYyBkb20pKQogIChzaHItZmlsbC1wYXJhZ3JhcGggZG9tKQogIChzaHItZW5zdXJlLXBh cmFncmFwaCkpCgooZGVmdW4gc2hyLXRhZy1saSAoZG9tKQogIChzaHItZW5zdXJlLW5ld2xpbmUp CiAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQogICAgKGxldCogKChidWxsZXQKCSAgICAoaWYgKG51 bWJlcnAgc2hyLWxpc3QtbW9kZSkKCQkocHJvZzEKCQkgICAgKGZvcm1hdCAiJWQgIiBzaHItbGlz dC1tb2RlKQoJCSAgKHNldHEgc2hyLWxpc3QtbW9kZSAoMSsgc2hyLWxpc3QtbW9kZSkpKQoJICAg ICAgKGNhciBzaHItaW50ZXJuYWwtYnVsbGV0KSkpCgkgICAod2lkdGggKGlmIChudW1iZXJwIHNo ci1saXN0LW1vZGUpCgkJICAgICAgKHNoci1zdHJpbmctcGl4ZWwtd2lkdGggYnVsbGV0KQoJCSAg ICAoY2RyIHNoci1pbnRlcm5hbC1idWxsZXQpKSkpCiAgICAgIChpbnNlcnQgYnVsbGV0KQogICAg ICAoc2hyLW1hcmstZmlsbCBzdGFydCkKICAgICAgKGxldCAoKHNoci1pbmRlbnRhdGlvbiAoKyBz aHItaW5kZW50YXRpb24gd2lkdGgpKSkKCShwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAoMSsgc3Rh cnQpCgkJCSAgICdzaHItY29udGludWF0aW9uLWluZGVudGF0aW9uIHNoci1pbmRlbnRhdGlvbikK CShwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAoMSsgc3RhcnQpICdzaHItcHJlZml4LWxlbmd0aCAo bGVuZ3RoIGJ1bGxldCkpCgkoc2hyLWdlbmVyaWMgZG9tKSkpKQogICh1bmxlc3MgKGJvbHApCgko dW5sZXNzIHNoci11c2UtZm9udHMgKGluc2VydCAiXHgyMDI4IikpIDsgaW5zZXJ0IGEgbGluZSBz ZXBhcmF0b3IKICAgIChpbnNlcnQgIlxuIikpKQoKKGRlZnVuIHNoci1tYXJrLWZpbGwgKHN0YXJ0 KQogIDs7IFdlIG1heSBub3QgaGF2ZSBpbnNlcnRlZCBhbnkgdGV4dCB0byBmaWxsLgogICh1bmxl c3MgKD0gc3RhcnQgKHBvaW50KSkKICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCAoMSsgc3Rh cnQpCgkJICAgICAgICdzaHItaW5kZW50YXRpb24gc2hyLWluZGVudGF0aW9uKSkpCgooZGVmdW4g c2hyLXRhZy1iciAoZG9tKQogICh3aGVuIChhbmQgKG5vdCAoYm9icCkpCgkgICAgIDs7IE9ubHkg YWRkIGEgbmV3bGluZSBpZiB3ZSBicmVhayB0aGUgY3VycmVudCBsaW5lLCBvcgoJICAgICA7OyB0 aGUgcHJldmlvdXMgbGluZSBpc24ndCBhIGJsYW5rIGxpbmUuCgkgICAgIChvciAobm90IChib2xw KSkKCQkgKGFuZCAoPiAoLSAocG9pbnQpIDIpIChwb2ludC1taW4pKQoJCSAgICAgIChub3QgKD0g KGNoYXItYWZ0ZXIgKC0gKHBvaW50KSAyKSkgP1xuKSkpKSkKCSh1bmxlc3Mgc2hyLXVzZS1mb250 cyAoaW5zZXJ0ICJceDIwMjgiKSkgOyBpbnNlcnQgYSBsaW5lIHNlcGFyYXRvcgoJKGluc2VydCAi XG4iKSkKICAoc2hyLWdlbmVyaWMgZG9tKSkKCihkZWZ1biBzaHItdGFnLXNwYW4gKGRvbSkKICAo c2hyLWdlbmVyaWMgZG9tKSkKCihkZWZ1biBzaHItdGFnLWgxIChkb20pCiAgKHNoci1oZWFkaW5n IGRvbSAoaWYgc2hyLXVzZS1mb250cwoJCSAgICAgICAnKHZhcmlhYmxlLXBpdGNoICg6aGVpZ2h0 IDEuMyA6d2VpZ2h0IGJvbGQpKQoJCSAgICAgJ2JvbGQpKSkKCihkZWZ1biBzaHItdGFnLWgyIChk b20pCiAgKHNoci1oZWFkaW5nIGRvbSAnYm9sZCkpCgooZGVmdW4gc2hyLXRhZy1oMyAoZG9tKQog IChzaHItaGVhZGluZyBkb20gJ2l0YWxpYykpCgooZGVmdW4gc2hyLXRhZy1oNCAoZG9tKQogIChz aHItaGVhZGluZyBkb20pKQoKKGRlZnVuIHNoci10YWctaDUgKGRvbSkKICAoc2hyLWhlYWRpbmcg ZG9tKSkKCihkZWZ1biBzaHItdGFnLWg2IChkb20pCiAgKHNoci1oZWFkaW5nIGRvbSkpCgooZGVm dW4gc2hyLXRhZy1ociAoX2RvbSkKICAoc2hyLWVuc3VyZS1uZXdsaW5lKQogIChpbnNlcnQgKG1h a2Utc3RyaW5nIChpZiAobm90IHNoci11c2UtZm9udHMpCgkJCSAgIHNoci1pbnRlcm5hbC13aWR0 aAoJCQkgKDErICgvIHNoci1pbnRlcm5hbC13aWR0aAoJCQkJc2hyLXRhYmxlLXNlcGFyYXRvci1w aXhlbC13aWR0aCkpKQoJCSAgICAgICBzaHItaHItbGluZSkKCSAgIlxuIikpCgooZGVmdW4gc2hy LXRhZy10aXRsZSAoZG9tKQogIChzaHItaGVhZGluZyBkb20gJ2JvbGQgJ3VuZGVybGluZSkpCgoo ZGVmdW4gc2hyLXRhZy1mb250IChkb20pCiAgKGxldCogKChzdGFydCAocG9pbnQpKQogICAgICAg ICAoY29sb3IgKGRvbS1hdHRyIGRvbSAnY29sb3IpKQogICAgICAgICAoc2hyLXN0eWxlc2hlZXQg KG5jb25jIChsaXN0IChjb25zICdjb2xvciBjb2xvcikpCgkJCQlzaHItc3R5bGVzaGVldCkpKQog ICAgKHNoci1nZW5lcmljIGRvbSkKICAgICh3aGVuIGNvbG9yCiAgICAgIChzaHItY29sb3JpemUt cmVnaW9uIHN0YXJ0IChwb2ludCkgY29sb3IKCQkJICAgKGNkciAoYXNzcSAnYmFja2dyb3VuZC1j b2xvciBzaHItc3R5bGVzaGVldCkpKSkpKQoKKGRlZnVuIHNoci10YWctYmRvIChkb20pCiAgKGxl dCogKChkaXJlY3Rpb24gKGRvbS1hdHRyIGRvbSAnZGlyKSkKICAgICAgICAgKGNoYXIgKGNvbmQK ICAgICAgICAgICAgICAgICgoZXF1YWwgZGlyZWN0aW9uICJsdHIiKQogICAgICAgICAgICAgICAg ID9cTntMRUZULVRPLVJJR0hUIE9WRVJSSURFfSkKICAgICAgICAgICAgICAgICgoZXF1YWwgZGly ZWN0aW9uICJydGwiKQogICAgICAgICAgICAgICAgID9cTntSSUdIVC1UTy1MRUZUIE9WRVJSSURF fSkpKSkKICAgICh3aGVuIGNoYXIKICAgICAgKGluc2VydCA/XE57RklSU1QgU1RST05HIElTT0xB VEV9IGNoYXIpKQogICAgKHNoci1nZW5lcmljIGRvbSkKICAgICh3aGVuIGNoYXIKICAgICAgKGlu c2VydCA/XE57UE9QIERJUkVDVElPTkFMIEZPUk1BVFRJTkd9ID9cTntQT1AgRElSRUNUSU9OQUwg SVNPTEFURX0pKSkpCgooZGVmdW4gc2hyLXRhZy1iZGkgKGRvbSkKICAoaW5zZXJ0ID9cTntGSVJT VCBTVFJPTkcgSVNPTEFURX0pCiAgKHNoci1nZW5lcmljIGRvbSkKICAoaW5zZXJ0ID9cTntQT1Ag RElSRUNUSU9OQUwgSVNPTEFURX0pKQoKOzs7IFRhYmxlIHJlbmRlcmluZyBhbGdvcml0aG0uCgo7 OyBUYWJsZSByZW5kZXJpbmcgaXMgdGhlIG9ubHkgY29tcGxpY2F0ZWQgdGhpbmcgaGVyZS4gIFdl IGRvIHRoaXMgYnkKOzsgZmlyc3QgY291bnRpbmcgaG93IG1hbnkgVERzIHRoZXJlIGFyZSBpbiBl YWNoIFRSLCBhbmQgcmVnaXN0ZXJpbmcKOzsgaG93IHdpZGUgdGhleSB0aGluayB0aGV5IHNob3Vs ZCBiZSAoIndpZHRoPTQ1JSIsIGV0YykuICBUaGVuIHdlCjs7IHJlbmRlciBlYWNoIFREIHNlcGFy YXRlbHkgKHRoaXMgaXMgZG9uZSBpbiB0ZW1wb3JhcnkgYnVmZmVycywgc28KOzsgdGhhdCB3ZSBj YW4gdXNlIGFsbCB0aGUgcmVuZGVyaW5nIG1hY2hpbmVyeSBhcyBpZiB3ZSB3ZXJlIGluIHRoZQo7 OyBtYWluIGJ1ZmZlcikuICBOb3cgd2Uga25vdyBob3cgbXVjaCBzcGFjZSBlYWNoIFREIHJlYWxs eSB0YWtlcywgc28KOzsgd2UgdGhlbiByZW5kZXIgZXZlcnl0aGluZyBhZ2FpbiB3aXRoIHRoZSBu ZXcgd2lkdGhzLCBhbmQgZmluYWxseQo7OyBpbnNlcnQgYWxsIHRoZXNlIGJveGVzIGludG8gdGhl IG1haW4gYnVmZmVyLgooZGVmdW4gc2hyLXRhZy10YWJsZS0xIChkb20pCiAgKHNldHEgZG9tIChv ciAoZG9tLWNoaWxkLWJ5LXRhZyBkb20gJ3Rib2R5KSBkb20pKQogIChsZXQqICgoc2hyLWluaGli aXQtaW1hZ2VzIHQpCgkgKHNoci10YWJsZS1kZXB0aCAoMSsgc2hyLXRhYmxlLWRlcHRoKSkKCSAo c2hyLWtpbnNva3Utc2hvcnRlbiB0KQoJIDs7IEZpbmQgYWxsIHN1Z2dlc3RlZCB3aWR0aHMuCgkg KGNvbHVtbnMgKHNoci1jb2x1bW4tc3BlY3MgZG9tKSkKCSA7OyBDb21wdXRlIGhvdyBtYW55IHBp eGVscyB3aWRlIGVhY2ggVEQgc2hvdWxkIGJlLgoJIChzdWdnZXN0ZWQtd2lkdGhzIChzaHItcHJv LXJhdGUtY29sdW1ucyBjb2x1bW5zKSkKCSA7OyBEbyBhICJ0ZXN0IHJlbmRlcmluZyIgdG8gc2Vl IGhvdyBiaWcgZWFjaCBURCBpcyAodGhpcyBjYW4KCSA7OyBiZSBzbWFsbGVyIChpZiB0aGVyZSdz IGxpdHRsZSB0ZXh0KSBvciBiaWdnZXIgKGlmIHRoZXJlJ3MKCSA7OyB1bmJyZWFrYWJsZSB0ZXh0 KS4KCSAoZWxlbXMgKG9yIChkb20tYXR0ciBkb20gJ3Noci1zdWdnZXN0ZWQtd2lkdGhzKQoJCSAg ICAoc2hyLW1ha2UtdGFibGUgZG9tIHN1Z2dlc3RlZC13aWR0aHMgbmlsCgkJCQkgICAgJ3Noci1z dWdnZXN0ZWQtd2lkdGhzKSkpCgkgKHNrZXRjaCAoY2wtbG9vcCBmb3IgbGluZSBpbiBlbGVtcwoJ CSAgICAgICAgICBjb2xsZWN0IChtYXBjYXIgIydjYXIgbGluZSkpKQoJIChuYXR1cmFsIChjbC1s b29wIGZvciBsaW5lIGluIGVsZW1zCgkJCSAgIGNvbGxlY3QgKG1hcGNhciAjJ2NkciBsaW5lKSkp CgkgKHNrZXRjaC13aWR0aHMgKHNoci10YWJsZS13aWR0aHMgc2tldGNoIG5hdHVyYWwgc3VnZ2Vz dGVkLXdpZHRocykpKQogICAgOzsgVGhpcyBwcm9iYWJseSB3b24ndCB3b3JrIHZlcnkgd2VsbC4K ICAgICh3aGVuICg+ICgrIChjbC1sb29wIGZvciB3aWR0aCBhY3Jvc3Mgc2tldGNoLXdpZHRocwoJ CSAgICAgICAgIHN1bW1pbmcgKDErIHdpZHRoKSkKCQlzaHItaW5kZW50YXRpb24gc2hyLXRhYmxl LXNlcGFyYXRvci1waXhlbC13aWR0aCkKCSAgICAgKGZyYW1lLXdpZHRoKSkKICAgICAgKHNldHEg dHJ1bmNhdGUtbGluZXMgdCkpCiAgICA7OyBUaGVuIHJlbmRlciB0aGUgdGFibGUgYWdhaW4gd2l0 aCB0aGVzZSBuZXcgImhhcmQiIHdpZHRocy4KICAgIChzaHItaW5zZXJ0LXRhYmxlIChzaHItbWFr ZS10YWJsZSBkb20gc2tldGNoLXdpZHRocyB0KSBza2V0Y2gtd2lkdGhzKSkpCgooZGVmdW4gc2hy LXRhYmxlLWJvZHkgKGRvbSkKICAobGV0ICgodGJvZGllcyAoc2VxLWZpbHRlciAobGFtYmRhIChj aGlsZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcSAoZG9tLXRhZyBjaGlsZCkg J3Rib2R5KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9tLW5vbi10ZXh0LWNoaWxk cmVuIGRvbSkpKSkKICAgIChjb25kCiAgICAgKChudWxsIHRib2RpZXMpCiAgICAgIGRvbSkKICAg ICAoKD0gKGxlbmd0aCB0Ym9kaWVzKSAxKQogICAgICAoY2FyIHRib2RpZXMpKQogICAgICh0CiAg ICAgIDs7IFRhYmxlIHdpdGggbXVsdGlwbGUgdGJvZGllcy4gIENvbnZlcnQgaW50byBhIHNpbmds ZSB0Ym9keS4KICAgICAgYCh0Ym9keSBuaWwgLEAoY2wtcmVkdWNlICdhcHBlbmQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChtYXBjYXIgJ2RvbS1ub24tdGV4dC1jaGlsZHJlbiB0Ym9k aWVzKSkpKSkpKQoKKGRlZnVuIHNoci10YWctdGFibGUgKGRvbSkKICAoc2hyLWVuc3VyZS1wYXJh Z3JhcGgpCiAgKGxldCogKChjYXB0aW9uIChkb20tY2hpbGRyZW4gKGRvbS1jaGlsZC1ieS10YWcg ZG9tICdjYXB0aW9uKSkpCgkgKGhlYWRlciAoZG9tLW5vbi10ZXh0LWNoaWxkcmVuIChkb20tY2hp bGQtYnktdGFnIGRvbSAndGhlYWQpKSkKCSAoYm9keSAoZG9tLW5vbi10ZXh0LWNoaWxkcmVuIChz aHItdGFibGUtYm9keSBkb20pKSkKCSAoZm9vdGVyIChkb20tbm9uLXRleHQtY2hpbGRyZW4gKGRv bS1jaGlsZC1ieS10YWcgZG9tICd0Zm9vdCkpKQogICAgICAgICAoYmdjb2xvciAoZG9tLWF0dHIg ZG9tICdiZ2NvbG9yKSkKCSAoc3RhcnQgKHBvaW50KSkKCSAoc2hyLXN0eWxlc2hlZXQgKG5jb25j IChsaXN0IChjb25zICdiYWNrZ3JvdW5kLWNvbG9yIGJnY29sb3IpKQoJCQkJc2hyLXN0eWxlc2hl ZXQpKQoJIChuaGVhZGVyIChpZiBoZWFkZXIgKHNoci1tYXgtY29sdW1ucyBoZWFkZXIpKSkKCSAo bmJvZHkgKGlmIGJvZHkgKHNoci1tYXgtY29sdW1ucyBib2R5KSAwKSkKCSAobmZvb3RlciAoaWYg Zm9vdGVyIChzaHItbWF4LWNvbHVtbnMgZm9vdGVyKSkpKQogICAgKGlmIChhbmQgKG5vdCBjYXB0 aW9uKQoJICAgICAobm90IGhlYWRlcikKCSAgICAgKG5vdCAoZG9tLWNoaWxkLWJ5LXRhZyBkb20g J3Rib2R5KSkKCSAgICAgKG5vdCAoZG9tLWNoaWxkLWJ5LXRhZyBkb20gJ3RyKSkKCSAgICAgKG5v dCBmb290ZXIpKQoJOzsgVGhlIHRhYmxlIGlzIHRvdGFsbHkgaW52YWxpZCBhbmQganVzdCBjb250 YWlucyByYW5kb20ganVuay4KCTs7IFRyeSB0byBvdXRwdXQgaXQgYW55d2F5LgoJKHNoci1nZW5l cmljIGRvbSkKICAgICAgOzsgSXQncyBhIHJlYWwgdGFibGUsIHNvIHJlbmRlciBpdC4KICAgICAg KGlmIChkb20tYXR0ciBkb20gJ3Noci1maXhlZC10YWJsZSkKCSAgKHNoci10YWctdGFibGUtMSBk b20pCgk7OyBPbmx5IGZpeCB1cCB0aGUgdGFibGUgb25jZS4KCShsZXQgKCh0YWJsZQoJICAgICAg IChuY29uYwoJCShsaXN0ICd0YWJsZSBuaWwpCgkJKGlmIGNhcHRpb24gYCgodHIgbmlsICh0ZCBu aWwgLEBjYXB0aW9uKSkpKQoJCShjb25kCgkJIChoZWFkZXIKCQkgIChpZiBmb290ZXIKCQkgICAg ICA7OyBoZWFkZXIgKyBib2R5ICsgZm9vdGVyCgkJICAgICAgKGlmICg9IG5oZWFkZXIgbmJvZHkp CgkJCSAgKGlmICg9IG5ib2R5IG5mb290ZXIpCgkJCSAgICAgIGAoKHRyIG5pbCAodGQgbmlsICh0 YWJsZSBuaWwKCQkJCQkJICAgICAgICh0Ym9keSBuaWwgLEBoZWFkZXIKCQkJCQkJCSAgICAgICxA Ym9keSAsQGZvb3RlcikpKSkpCgkJCSAgICAobmNvbmMgYCgodHIgbmlsICh0ZCBuaWwgKHRhYmxl IG5pbAoJCQkJCQkJICAgICh0Ym9keSBuaWwgLEBoZWFkZXIKCQkJCQkJCQkgICAsQGJvZHkpKSkp KQoJCQkJICAgKGlmICg9IG5mb290ZXIgMSkKCQkJCSAgICAgICBmb290ZXIKCQkJCSAgICAgYCgo dHIgbmlsICh0ZCBuaWwgKHRhYmxlCgkJCQkJCQluaWwgKHRib2R5CgkJCQkJCQkgICAgIG5pbCAs QGZvb3RlcikpKSkpKSkpCgkJCShuY29uYyBgKCh0ciBuaWwgKHRkIG5pbCAodGFibGUgbmlsICh0 Ym9keQoJCQkJCQkJICAgICBuaWwgLEBoZWFkZXIpKSkpKQoJCQkgICAgICAgKGlmICg9IG5ib2R5 IG5mb290ZXIpCgkJCQkgICBgKCh0ciBuaWwgKHRkIG5pbCAodGFibGUKCQkJCQkJICAgICAgbmls ICh0Ym9keSBuaWwgLEBib2R5CgkJCQkJCQkJICxAZm9vdGVyKSkpKSkKCQkJCSAobmNvbmMgYCgo dHIgbmlsICh0ZCBuaWwgKHRhYmxlCgkJCQkJCQkgICBuaWwgKHRib2R5IG5pbAoJCQkJCQkJCSAg ICAgICxAYm9keSkpKSkpCgkJCQkJKGlmICg9IG5mb290ZXIgMSkKCQkJCQkgICAgZm9vdGVyCgkJ CQkJICBgKCh0ciBuaWwgKHRkIG5pbCAodGFibGUKCQkJCQkJCSAgICAgbmlsCgkJCQkJCQkgICAg ICh0Ym9keQoJCQkJCQkJICAgICAgbmlsCgkJCQkJCQkgICAgICAsQGZvb3RlcikpKSkpKSkpKSkK CQkgICAgOzsgaGVhZGVyICsgYm9keQoJCSAgICAoaWYgKD0gbmhlYWRlciBuYm9keSkKCQkJYCgo dHIgbmlsICh0ZCBuaWwgKHRhYmxlIG5pbCAodGJvZHkgbmlsICxAaGVhZGVyCgkJCQkJCQkgICAg LEBib2R5KSkpKSkKCQkgICAgICAoaWYgKD0gbmhlYWRlciAxKQoJCQkgIGAoLEBoZWFkZXIgKHRy IG5pbCAodGQgbmlsICh0YWJsZQoJCQkJCQkgICAgICBuaWwgKHRib2R5IG5pbCAsQGJvZHkpKSkp KQoJCQlgKCh0ciBuaWwgKHRkIG5pbCAodGFibGUgbmlsICh0Ym9keSBuaWwgLEBoZWFkZXIpKSkp CgkJCSAgKHRyIG5pbCAodGQgbmlsICh0YWJsZSBuaWwgKHRib2R5IG5pbCAsQGJvZHkpKSkpKSkp KSkKCQkgKGZvb3RlcgoJCSAgOzsgYm9keSArIGZvb3RlcgoJCSAgKGlmICg9IG5ib2R5IG5mb290 ZXIpCgkJICAgICAgYCgodHIgbmlsICh0ZCBuaWwgKHRhYmxlCgkJCQkJIG5pbCAodGJvZHkgbmls ICxAYm9keSAsQGZvb3RlcikpKSkpCgkJICAgIChuY29uYyBgKCh0ciBuaWwgKHRkIG5pbCAodGFi bGUgbmlsICh0Ym9keSBuaWwgLEBib2R5KSkpKSkKCQkJICAgKGlmICg9IG5mb290ZXIgMSkKCQkJ ICAgICAgIGZvb3RlcgoJCQkgICAgIGAoKHRyIG5pbCAodGQgbmlsICh0YWJsZQoJCQkJCQluaWwg KHRib2R5IG5pbCAsQGZvb3RlcikpKSkpKSkpKQoJCSAoY2FwdGlvbgoJCSAgYCgodHIgbmlsICh0 ZCBuaWwgKHRhYmxlIG5pbCAodGJvZHkgbmlsICxAYm9keSkpKSkpKQoJCSAoYm9keSkpKSkpCgkg IChkb20tc2V0LWF0dHJpYnV0ZSB0YWJsZSAnc2hyLWZpeGVkLXRhYmxlIHQpCgkgIChzZXRjZHIg ZG9tIChjZHIgdGFibGUpKQoJICAoc2hyLXRhZy10YWJsZS0xIGRvbSkpKSkKICAgICh3aGVuIGJn Y29sb3IKICAgICAgKHNoci1jb2xvcml6ZS1yZWdpb24gc3RhcnQgKHBvaW50KSAoY2RyIChhc3Nx ICdjb2xvciBzaHItc3R5bGVzaGVldCkpCgkJCSAgIGJnY29sb3IpKQogICAgOzsgRmluYWxseSwg aW5zZXJ0IGFsbCB0aGUgaW1hZ2VzIGFmdGVyIHRoZSB0YWJsZS4gIFRoZSBFbWFjcyBidWZmZXIK ICAgIDs7IG1vZGVsIGlzbid0IHN0cm9uZyBlbm91Z2ggdG8gYWxsb3cgdXMgdG8gcHV0IHRoZSBp bWFnZXMgYWN0dWFsbHkKICAgIDs7IGludG8gdGhlIHRhYmxlcy4gIEl0IGluc2VydHMgYWxzbyBu b24tdGQvdGggb2JqZWN0cy4KICAgICh3aGVuICh6ZXJvcCBzaHItdGFibGUtZGVwdGgpCiAgICAg IChzYXZlLWV4Y3Vyc2lvbgoJKHNoci1leHBhbmQtYWxpZ25tZW50cyBzdGFydCAocG9pbnQpKSkK ICAgICAgKGxldCAoKHN0cmluZ3MgKHNoci1jb2xsZWN0LWV4dHJhLXN0cmluZ3MtaW4tdGFibGUg ZG9tKSkpCgkod2hlbiBzdHJpbmdzCgkgIChzYXZlLXJlc3RyaWN0aW9uCgkgICAgKG5hcnJvdy10 by1yZWdpb24gKHBvaW50KSAocG9pbnQpKQoJICAgIChpbnNlcnQgKG1hcGNvbmNhdCAjJ2lkZW50 aXR5IHN0cmluZ3MgIlxuIikpCgkgICAgKHNoci1maWxsLWxpbmVzIChwb2ludC1taW4pIChwb2lu dC1tYXgpKSkpKSkpKQoKKGRlZnVuIHNoci1jb2xsZWN0LWV4dHJhLXN0cmluZ3MtaW4tdGFibGUg KGRvbSAmb3B0aW9uYWwgZmxhZ3MpCiAgIlJldHVybiBleHRyYSBzdHJpbmdzIGluIERPTSBvZiB3 aGljaCB0aGUgcm9vdCBpcyBhIHRhYmxlIGNsYXVzZS4KUmVuZGVyIDxpbWc+cyBhbmQgPG9iamVj dD5zLCBhbmQgc3RyaW5ncyBhbmQgY2hpbGQgPHRhYmxlPnMgb2Ygd2hpY2gKdGhlIHBhcmVudCA8 dGQ+IG9yIDx0aD4gaXMgbGFja2luZy4gIEZMQUdTIGlzIGEgY29ucyBvZiB0d28gYm9vbGVhbgpm bGFncyB0aGF0IGNvbnRyb2wgd2hldGhlciB0byBjb2xsZWN0IG9yIHJlbmRlciBvYmplY3RzLiIK ICA7OyBUaGlzIGZ1bmN0aW9uIHJ1bnMgcmVjdXJzaXZlbHkgYW5kIGNvbGxlY3RzIHN0cmluZ3Mg aWYgdGhlIGNkciBvZgogIDs7IEZMQUdTIGlzIG5pbCBhbmQgdGhlIGNhciBpcyBub3QgbmlsLCBh bmQgaXQgcmVuZGVycyBhbHNvIGNoaWxkCiAgOzsgPHRhYmxlPnMgaWYgdGhlIGNkciBpcyBuaWwu ICBOb3RlOiBGTEFHUyBtYXkgYmUgbmlsLCBub3QgYSBjb25zLgogIDs7IEZMQUdTIGJlY29tZXMg KHQgLiBuaWwpIGlmIGEgPHRyPiBjbGF1c2UgaXMgZm91bmQgaW4gdGhlIGNoaWxkcmVuCiAgOzsg b2YgRE9NLCBhbmQgYmVjb21lcyAodCAuIHQpIGlmIGEgPHRkPiBvciBhIDx0aD4gY2xhdXNlIGlz IGZvdW5kCiAgOzsgYW5kIHRoZSBjYXIgaXMgdCB0aGVuLiAgV2hlbiBhIDx0YWJsZT4gY2xhdXNl IGlzIGZvdW5kLCBGTEFHUwogIDs7IGJlY29tZXMgbmlsIGlmIHRoZSBjZHIgaXMgdCB0aGVuLiAg QnV0IGlmIEZMQUdTIGlzICh0IC4gbmlsKSB0aGVuLAogIDs7IGl0IHJlbmRlcnMgdGhlIDx0YWJs ZT4uCiAgKGNsLWxvb3AgZm9yIGNoaWxkIGluIChkb20tY2hpbGRyZW4gZG9tKSB3aXRoIHJlY3Vy c2Ugd2l0aCB0YWcKCSAgIGRvIChzZXRxIHJlY3Vyc2UgbmlsKQoJICAgaWYgKHN0cmluZ3AgY2hp bGQpCgkgICAgIHVubGVzcyAob3IgKG5vdCAoY2FyIGZsYWdzKSkgKGNkciBmbGFncykpCgkgICAg ICAgd2hlbiAoc3RyaW5nLW1hdGNoICJcXCg/OlteXHRcblxyIF0rW1x0XG5cciBdK1xcKSpbXlx0 XG5cciBdKyIKCQkJCSAgY2hpbGQpCgkJIGNvbGxlY3QgKG1hdGNoLXN0cmluZyAwIGNoaWxkKQoJ ICAgICAgIGVuZCBlbmQKCSAgIGVsc2UgaWYgKGNvbnNwIGNoaWxkKQoJICAgICBkbyAoc2V0cSB0 YWcgKGRvbS10YWcgY2hpbGQpKSBhbmQKCSAgICAgdW5sZXNzIChtZW1xIHRhZyAnKGNvbW1lbnQg c3R5bGUpKQoJICAgICAgIGlmIChlcSB0YWcgJ2ltZykKCQkgZG8gKHNoci1pbmRpcmVjdC1jYWxs ICdpbWcgY2hpbGQpCgkgICAgICAgZWxzZSBpZiAoZXEgdGFnICdvYmplY3QpCgkJIGRvIChzaHIt aW5kaXJlY3QtY2FsbCAnb2JqZWN0IGNoaWxkKQoJICAgICAgIGVsc2UKCQkgZG8gKHNldHEgcmVj dXJzZSB0KSBhbmQKCQkgaWYgKGVxIHRhZyAndHIpCgkJICAgZG8gKHNldHEgZmxhZ3MgJyh0IC4g bmlsKSkKCQkgZWxzZSBpZiAobWVtcSB0YWcgJyh0ZCB0aCkpCgkJICAgd2hlbiAoY2FyIGZsYWdz KQoJCSAgICAgZG8gKHNldHEgZmxhZ3MgJyh0IC4gdCkpCgkJICAgZW5kCgkJIGVsc2UgaWYgKGVx IHRhZyAndGFibGUpCgkJICAgaWYgKGNkciBmbGFncykKCQkgICAgIGRvIChzZXRxIGZsYWdzIG5p bCkKCQkgICBlbHNlIGlmIChjYXIgZmxhZ3MpCgkJICAgICBkbyAoc2V0cSByZWN1cnNlIG5pbCkK CQkJKHNoci1pbmRpcmVjdC1jYWxsICd0YWJsZSBjaGlsZCkKCQkgICBlbmQgZW5kIGVuZCBlbmQg ZW5kIGVuZCBlbmQgZW5kIGVuZCBlbmQKCSAgIHdoZW4gcmVjdXJzZQoJICAgICBhcHBlbmQgKHNo ci1jb2xsZWN0LWV4dHJhLXN0cmluZ3MtaW4tdGFibGUgY2hpbGQgZmxhZ3MpKSkKCihkZWZ1biBz aHItaW5zZXJ0LXRhYmxlICh0YWJsZSB3aWR0aHMpCiAgKGxldCogKChjb2xsYXBzZSAoZXF1YWwg KGNkciAoYXNzcSAnYm9yZGVyLWNvbGxhcHNlIHNoci1zdHlsZXNoZWV0KSkKCQkJICAiY29sbGFw c2UiKSkKCSAoc2hyLXRhYmxlLXNlcGFyYXRvci1sZW5ndGggKGlmIGNvbGxhcHNlIDAgMSkpCgkg KHNoci10YWJsZS12ZXJ0aWNhbC1saW5lIChpZiBjb2xsYXBzZSAiIiBzaHItdGFibGUtdmVydGlj YWwtbGluZSkpCgkgKHN0YXJ0IChwb2ludCkpKQogICAgKHNldHEgc2hyLXRhYmxlLWlkICgxKyBz aHItdGFibGUtaWQpKQogICAgKHVubGVzcyBjb2xsYXBzZQogICAgICAoc2hyLWluc2VydC10YWJs ZS1ydWxlciB3aWR0aHMpKQogICAgKGRvbGlzdCAocm93IHRhYmxlKQogICAgICAobGV0ICgoc3Rh cnQgKHBvaW50KSkKCSAgICAoYWxpZ24gMCkKCSAgICAoY29sdW1uLW51bWJlciAwKQoJICAgICho ZWlnaHQgKGxldCAoKG1heCAwKSkKCQkgICAgICAoZG9saXN0IChjb2x1bW4gcm93KQoJCQkoc2V0 cSBtYXggKG1heCBtYXggKG50aCAyIGNvbHVtbikpKSkKCQkgICAgICBtYXgpKSkKCShkb3RpbWVz IChfIChtYXggaGVpZ2h0IDEpKQoJICAoc2hyLWluZGVudCkKCSAgKGluc2VydCBzaHItdGFibGUt dmVydGljYWwtbGluZSAiXG4iKSkKCShkb2xpc3QgKGNvbHVtbiByb3cpCgkgICh3aGVuICg+IChu dGggMiBjb2x1bW4pIC0xKQoJICAgIChnb3RvLWNoYXIgc3RhcnQpCgkgICAgOzsgU3VtIHVwIGFs bCB0aGUgd2lkdGhzIGZyb20gdGhlIGNvbHVtbi4gIChUaGVyZSBtYXkgYmUKCSAgICA7OyBtb3Jl IHRoYW4gb25lIGlmIHRoaXMgaXMgYSAiY29sc3BhbiIgY29sdW1uLikKCSAgICAoZG90aW1lcyAo XyAobnRoIDQgY29sdW1uKSkKCSAgICAgIDs7IFRoZSBjb2xzcGFuIGRpcmVjdGl2ZSBtYXkgYmUg d3JvbmcgYW5kIHRoZXJlIG1heSBub3QgYmUKCSAgICAgIDs7IHRoYXQgbnVtYmVyIG9mIGNvbHVt bnMuCgkgICAgICAod2hlbiAoPD0gY29sdW1uLW51bWJlciAoMS0gKGxlbmd0aCB3aWR0aHMpKSkK CQkoc2V0cSBhbGlnbiAoKyBhbGlnbgoJCQkgICAgICAgKGFyZWYgd2lkdGhzIGNvbHVtbi1udW1i ZXIpCgkJCSAgICAgICAoKiAyIHNoci10YWJsZS1zZXBhcmF0b3ItcGl4ZWwtd2lkdGgpKSkpCgkg ICAgICAoc2V0cSBjb2x1bW4tbnVtYmVyICgxKyBjb2x1bW4tbnVtYmVyKSkpCgkgICAgKGxldCAo KGxpbmVzIChudGggMyBjb2x1bW4pKQoJCSAgKHBpeGVsLWFsaWduIChpZiAobm90IHNoci11c2Ut Zm9udHMpCgkJCQkgICAoKiBhbGlnbiAoZnJhbWUtY2hhci13aWR0aCkpCgkJCQkgYWxpZ24pKSkK CSAgICAgIChkb2xpc3QgKGxpbmUgbGluZXMpCgkJKGVuZC1vZi1saW5lKQoJCShsZXQgKChzdGFy dCAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgKGJhY2tncm91bmQgKGFuZCAoPiAobGVu Z3RoIGxpbmUpIDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaHIt ZmFjZS1iYWNrZ3JvdW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Z2V0LXRleHQtcHJvcGVydHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoMS0gKGxlbmd0aCBsaW5lKSkgJ2ZhY2UgbGluZSkpKSkKICAgICAgICAgICAgICAgICAgICAg IChzcGFjZSAocHJvcGVydGl6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXkgYChzcGFjZSA6YWxpZ24tdG8gKCxw aXhlbC1hbGlnbikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaHItdGFibGUtaW5k ZW50IHNoci10YWJsZS1pZCkpKQogICAgICAgICAgICAgICAgICAod2hlbiBiYWNrZ3JvdW5kCiAg ICAgICAgICAgICAgICAgICAgKHNldHEgc3BhY2UgKHByb3BlcnRpemUgc3BhY2UgJ2ZhY2UgYmFj a2dyb3VuZCkpKQoJCSAgKGluc2VydCBsaW5lIHNwYWNlIHNoci10YWJsZS12ZXJ0aWNhbC1saW5l KQoJCSAgKHNoci1jb2xvcml6ZS1yZWdpb24KCQkgICBzdGFydCAoMS0gKHBvaW50KSkgKG50aCA1 IGNvbHVtbikgKG50aCA2IGNvbHVtbikpKQoJCShmb3J3YXJkLWxpbmUgMSkpCgkgICAgICA7OyBB ZGQgYmxhbmsgbGluZXMgYXQgcGFkZGluZyBhdCB0aGUgYm90dG9tIG9mIHRoZSBURCwKCSAgICAg IDs7IHBvc3NpYmx5LgoJICAgICAgKGRvdGltZXMgKF8gKC0gaGVpZ2h0IChsZW5ndGggbGluZXMp KSkKCQkoZW5kLW9mLWxpbmUpCgkJKGxldCAoKHN0YXJ0IChwb2ludCkpKQoJCSAgKGluc2VydCAo cHJvcGVydGl6ZSAiICIKCQkJCSAgICAgICdkaXNwbGF5IGAoc3BhY2UgOmFsaWduLXRvICgscGl4 ZWwtYWxpZ24pKQoJCQkJICAgICAgJ3Noci10YWJsZS1pbmRlbnQgc2hyLXRhYmxlLWlkKQoJCQkg IHNoci10YWJsZS12ZXJ0aWNhbC1saW5lKQoJCSAgKHNoci1jb2xvcml6ZS1yZWdpb24KCQkgICBz dGFydCAoMS0gKHBvaW50KSkgKG50aCA1IGNvbHVtbikgKG50aCA2IGNvbHVtbikpKQoJCShmb3J3 YXJkLWxpbmUgMSkpKSkpKQogICAgICAodW5sZXNzIGNvbGxhcHNlCgkoc2hyLWluc2VydC10YWJs ZS1ydWxlciB3aWR0aHMpKSkKICAgICh1bmxlc3MgKD0gc3RhcnQgKHBvaW50KSkKICAgICAgKHB1 dC10ZXh0LXByb3BlcnR5IHN0YXJ0ICgxKyBzdGFydCkgJ3Noci10YWJsZS1pZCBzaHItdGFibGUt aWQpKSkpCgooZGVmdW4gc2hyLWZhY2UtYmFja2dyb3VuZCAoZmFjZSkKICAoYW5kIChjb25zcCBm YWNlKQogICAgICAgKG9yIChhbmQgKHBsaXN0LWdldCBmYWNlIDpiYWNrZ3JvdW5kKQogICAgICAg ICAgICAgICAgKGxpc3QgOmJhY2tncm91bmQgKHBsaXN0LWdldCBmYWNlIDpiYWNrZ3JvdW5kKSkp CiAgICAgICAgICAgKGxldCAoKGJhY2tncm91bmQgbmlsKSkKICAgICAgICAgICAgIChkb2xpc3Qg KGVsZW0gZmFjZSkKICAgICAgICAgICAgICAgKHdoZW4gKGFuZCAoY29uc3AgZWxlbSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAoZXEgKGNhciBlbGVtKSA6YmFja2dyb3VuZCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAobm90IGJhY2tncm91bmQpKQogICAgICAgICAgICAgICAgIChzZXRx IGJhY2tncm91bmQgKGNhZHIgZWxlbSkpKSkKICAgICAgICAgICAgIChhbmQgYmFja2dyb3VuZAog ICAgICAgICAgICAgICAgICAobGlzdCA6YmFja2dyb3VuZCBiYWNrZ3JvdW5kKSkpKSkpCgooZGVm dW4gc2hyLWV4cGFuZC1hbGlnbm1lbnRzIChzdGFydCBlbmQpCiAgKHdoaWxlICg8IChzZXRxIHN0 YXJ0IChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UKCQkJIHN0YXJ0ICdzaHItdGFibGUtaWQg bmlsIGVuZCkpCgkgICAgZW5kKQogICAgKGdvdG8tY2hhciBzdGFydCkKICAgIChsZXQqICgoc2hy LXVzZS1mb250cyB0KQoJICAgKGlkIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdzaHItdGFi bGUtaWQpKQoJICAgKGJhc2UgKHNoci1waXhlbC1jb2x1bW4pKQoJICAgZWxlbSkKICAgICAgKHdo ZW4gaWQKCShzYXZlLWV4Y3Vyc2lvbgoJICAod2hpbGUgKHNldHEgZWxlbSAodGV4dC1wcm9wZXJ0 eS1hbnkKCQkJICAgICAocG9pbnQpIGVuZCAnc2hyLXRhYmxlLWluZGVudCBpZCkpCgkgICAgKGdv dG8tY2hhciBlbGVtKQoJICAgIChsZXQgKChhbGlnbiAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50 KSAnZGlzcGxheSkpKQoJICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IChwb2ludCkgKDErIChwb2lu dCkpICdkaXNwbGF5CgkJCQkgYChzcGFjZSA6YWxpZ24tdG8gKCwoKyAoY2FyIChudGggMiBhbGln bikpCgkJCQkJCQliYXNlKSkpKSkKCSAgICAoZm9yd2FyZC1jaGFyIDEpKSkpKQogICAgKHNldHEg c3RhcnQgKDErIHN0YXJ0KSkpKQoKKGRlZnVuIHNoci1pbnNlcnQtdGFibGUtcnVsZXIgKHdpZHRo cykKICAod2hlbiBzaHItdGFibGUtaG9yaXpvbnRhbC1saW5lCiAgICAod2hlbiAoYW5kIChib2xw KQoJICAgICAgICg+IHNoci1pbmRlbnRhdGlvbiAwKSkKICAgICAgKHNoci1pbmRlbnQpKQogICAg KGluc2VydCBzaHItdGFibGUtY29ybmVyKQogICAgKGxldCAoKHRvdGFsLXdpZHRoIDApKQogICAg ICAoZG90aW1lcyAoaSAobGVuZ3RoIHdpZHRocykpCgkoc2V0cSB0b3RhbC13aWR0aCAoKyB0b3Rh bC13aWR0aCAoYXJlZiB3aWR0aHMgaSkKCQkJICAgICAoKiBzaHItdGFibGUtc2VwYXJhdG9yLXBp eGVsLXdpZHRoIDIpKSkKCShpbnNlcnQgKG1ha2Utc3RyaW5nICgxKyAoLyAoYXJlZiB3aWR0aHMg aSkKCQkJCSAgICBzaHItdGFibGUtc2VwYXJhdG9yLXBpeGVsLXdpZHRoKSkKCQkJICAgICBzaHIt dGFibGUtaG9yaXpvbnRhbC1saW5lKQoJCShwcm9wZXJ0aXplICIgIgoJCQkgICAgJ2Rpc3BsYXkg YChzcGFjZSA6YWxpZ24tdG8gKCx0b3RhbC13aWR0aCkpCgkJCSAgICAnc2hyLXRhYmxlLWluZGVu dCBzaHItdGFibGUtaWQpCgkJc2hyLXRhYmxlLWNvcm5lcikpKQogICAgKGluc2VydCAiXG4iKSkp CgooZGVmdW4gc2hyLXRhYmxlLXdpZHRocyAodGFibGUgbmF0dXJhbC10YWJsZSBzdWdnZXN0ZWQt d2lkdGhzKQogIChsZXQqICgobGVuZ3RoIChsZW5ndGggc3VnZ2VzdGVkLXdpZHRocykpCgkgKHdp ZHRocyAobWFrZS12ZWN0b3IgbGVuZ3RoIDApKQoJIChuYXR1cmFsLXdpZHRocyAobWFrZS12ZWN0 b3IgbGVuZ3RoIDApKSkKICAgIChkb2xpc3QgKHJvdyB0YWJsZSkKICAgICAgKGxldCAoKGkgMCkp CgkoZG9saXN0IChjb2x1bW4gcm93KQoJICAoYXNldCB3aWR0aHMgaSAobWF4IChhcmVmIHdpZHRo cyBpKSBjb2x1bW4pKQoJICAoc2V0cSBpICgxKyBpKSkpKSkKICAgIChkb2xpc3QgKHJvdyBuYXR1 cmFsLXRhYmxlKQogICAgICAobGV0ICgoaSAwKSkKCShkb2xpc3QgKGNvbHVtbiByb3cpCgkgIChh c2V0IG5hdHVyYWwtd2lkdGhzIGkgKG1heCAoYXJlZiBuYXR1cmFsLXdpZHRocyBpKSBjb2x1bW4p KQoJICAoc2V0cSBpICgxKyBpKSkpKSkKICAgIChsZXQgKChleHRyYSAoLSAoYXBwbHkgJysgKGFw cGVuZCBzdWdnZXN0ZWQtd2lkdGhzIG5pbCkpCgkJICAgIChhcHBseSAnKyAoYXBwZW5kIHdpZHRo cyBuaWwpKQoJCSAgICAoKiBzaHItdGFibGUtc2VwYXJhdG9yLXBpeGVsLXdpZHRoICgxKyAobGVu Z3RoIHdpZHRocykpKSkpCgkgIChleHBhbmRlZC1jb2x1bW5zIDApKQogICAgICA7OyBXZSBoYXZl IGV4dHJhLCB1bnVzZWQgc3BhY2UsIHNvIGRpdmlkZSB0aGlzIHNwYWNlIGFtb25nc3QgdGhlCiAg ICAgIDs7IGNvbHVtbnMuCiAgICAgICh3aGVuICg+IGV4dHJhIDApCgk7OyBJZiB0aGUgbmF0dXJh bCB3aWR0aCBpcyB3aWRlciB0aGFuIHRoZSByZW5kZXJlZCB3aWR0aCwgd2UKCTs7IHdhbnQgdG8g YWxsb3cgdGhlIGNvbHVtbiB0byBleHBhbmQuCgkoZG90aW1lcyAoaSBsZW5ndGgpCgkgICh3aGVu ICg+IChhcmVmIG5hdHVyYWwtd2lkdGhzIGkpIChhcmVmIHdpZHRocyBpKSkKCSAgICAoc2V0cSBl eHBhbmRlZC1jb2x1bW5zICgxKyBleHBhbmRlZC1jb2x1bW5zKSkpKQoJKGRvdGltZXMgKGkgbGVu Z3RoKQoJICAod2hlbiAoPiAoYXJlZiBuYXR1cmFsLXdpZHRocyBpKSAoYXJlZiB3aWR0aHMgaSkp CgkgICAgKGFzZXQgd2lkdGhzIGkgKG1pbgoJCQkgICAgKGFyZWYgbmF0dXJhbC13aWR0aHMgaSkK CQkJICAgICgrICgvIGV4dHJhIGV4cGFuZGVkLWNvbHVtbnMpCgkJCSAgICAgICAoYXJlZiB3aWR0 aHMgaSkpKSkpKSkpCiAgICB3aWR0aHMpKQoKKGRlZnVuIHNoci1tYWtlLXRhYmxlIChkb20gd2lk dGhzICZvcHRpb25hbCBmaWxsIHN0b3JhZ2UtYXR0cmlidXRlKQogIChvciAoY2FkciAoYXNzb2Mg KGxpc3QgZG9tIHdpZHRocyBmaWxsKSBzaHItY29udGVudC1jYWNoZSkpCiAgICAgIChsZXQgKChk YXRhIChzaHItbWFrZS10YWJsZS0xIGRvbSB3aWR0aHMgZmlsbCkpKQoJKHB1c2ggKGxpc3QgKGxp c3QgZG9tIHdpZHRocyBmaWxsKSBkYXRhKQoJICAgICAgc2hyLWNvbnRlbnQtY2FjaGUpCgkod2hl biBzdG9yYWdlLWF0dHJpYnV0ZQoJICAoZG9tLXNldC1hdHRyaWJ1dGUgZG9tIHN0b3JhZ2UtYXR0 cmlidXRlIGRhdGEpKQoJZGF0YSkpKQoKKGRlZnVuIHNoci1tYWtlLXRhYmxlLTEgKGRvbSB3aWR0 aHMgJm9wdGlvbmFsIGZpbGwpCiAgKGxldCAoKHRycyBuaWwpCgkocm93c3BhbnMgKG1ha2UtdmVj dG9yIChsZW5ndGggd2lkdGhzKSAwKSkKCShjb2xzcGFuLXJlbWFpbmluZyAwKQoJY29sc3Bhbi13 aWR0aCBjb2xzcGFuLWNvdW50Cgl3aWR0aCBjb2xzcGFuKQogICAgKGRvbGlzdCAocm93IChkb20t bm9uLXRleHQtY2hpbGRyZW4gZG9tKSkKICAgICAgKHdoZW4gKGVxIChkb20tdGFnIHJvdykgJ3Ry KQoJKGxldCAoKHRkcyBuaWwpCgkgICAgICAoY29sdW1ucyAoZG9tLW5vbi10ZXh0LWNoaWxkcmVu IHJvdykpCgkgICAgICAoaSAwKQoJICAgICAgKHdpZHRoLWNvbHVtbiAwKQoJICAgICAgY29sdW1u KQoJICAod2hpbGUgKDwgaSAobGVuZ3RoIHdpZHRocykpCgkgICAgOzsgSWYgd2UgcHJldmlvdXNs eSBoYWQgYSByb3dzcGFuIGRlZmluaXRpb24sIHRoZW4gdGhhdAoJICAgIDs7IG1lYW5zIHRoYXQg d2Ugbm93IGhhdmUgYSAibWlzc2luZyIgdGQvdGggZWxlbWVudCBoZXJlLgoJICAgIDs7IFNvIGp1 c3QgaW5zZXJ0IGEgZHVtbXksIGVtcHR5IG9uZSB0byAoc29ydCBvZikgZW11bGF0ZQoJICAgIDs7 IHJvd3NwYW4uCgkgICAgKHNldHEgY29sdW1uCgkJICAoaWYgKHplcm9wIChhcmVmIHJvd3NwYW5z IGkpKQoJCSAgICAgIChwb3AgY29sdW1ucykKCQkgICAgKGFzZXQgcm93c3BhbnMgaSAoMS0gKGFy ZWYgcm93c3BhbnMgaSkpKQoJCSAgICAnKHRkKSkpCgkgICAgKHdoZW4gKGFuZCAobm90IChzdHJp bmdwIGNvbHVtbikpCgkJICAgICAgIChvciAobWVtcSAoZG9tLXRhZyBjb2x1bW4pICcodGQgdGgp KQoJCQkgICAobm90IGNvbHVtbikpKQoJICAgICAgKHdoZW4tbGV0KiAoKHNwYW4gKGRvbS1hdHRy IGNvbHVtbiAncm93c3BhbikpKQoJCShhc2V0IHJvd3NwYW5zIGkgKCsgKGFyZWYgcm93c3BhbnMg aSkKCQkJCSAgICAoMS0gKHN0cmluZy10by1udW1iZXIgc3BhbikpKSkpCgkgICAgICA7OyBTYW5p dHkgY2hlY2sgZm9yIGludmFsaWQgY29sdW1uLXNwYW5zLgoJICAgICAgKHdoZW4gKD49IHdpZHRo LWNvbHVtbiAobGVuZ3RoIHdpZHRocykpCgkJKHNldHEgd2lkdGgtY29sdW1uIDApKQoJICAgICAg KHNldHEgd2lkdGgKCQkgICAgKGlmIGNvbHVtbgoJCQkoYXJlZiB3aWR0aHMgd2lkdGgtY29sdW1u KQoJCSAgICAgICgqIDEwIHNoci10YWJsZS1zZXBhcmF0b3ItcGl4ZWwtd2lkdGgpKSkKCSAgICAg ICh3aGVuIChzZXRxIGNvbHNwYW4gKGRvbS1hdHRyIGNvbHVtbiAnY29sc3BhbikpCgkJKHNldHEg Y29sc3BhbiAobWluIChzdHJpbmctdG8tbnVtYmVyIGNvbHNwYW4pCgkJCQkgICA7OyBUaGUgY29s c3BhbiBtYXkgYmUgd3JvbmcsIHNvCgkJCQkgICA7OyB0cnVuY2F0ZSBpdCB0byB0aGUgbGVuZ3Ro IG9mIHRoZQoJCQkJICAgOzsgcmVtYWluaW5nIGNvbHVtbnMuCgkJCQkgICAoLSAobGVuZ3RoIHdp ZHRocykgaSkpKQoJCShkb3RpbWVzIChqICgxLSBjb2xzcGFuKSkKCQkgIChzZXRxIHdpZHRoCgkJ CShpZiAoPiAoKyBpIDEgaikgKDEtIChsZW5ndGggd2lkdGhzKSkpCgkJCSAgICA7OyBJZiB3ZSBo YXZlIGEgY29sc3BhbiBzcGVjIHRoYXQncyBsb25nZXIKCQkJICAgIDs7IHRoYW4gdGhlIHRhYmxl IGlzIHdpZGUsIGp1c3QgdXNlIHRoZSBsYXN0CgkJCSAgICA7OyB3aWR0aCBhcyB0aGUgd2lkdGgu CgkJCSAgICAoYXJlZiB3aWR0aHMgKDEtIChsZW5ndGggd2lkdGhzKSkpCgkJCSAgOzsgU3VtIHVw IHRoZSB3aWR0aHMgb2YgdGhlIGNvbHVtbnMgd2UncmUKCQkJICA7OyBzcGFubmluZy4KCQkJICAo KyB3aWR0aAoJCQkgICAgIHNoci10YWJsZS1zZXBhcmF0b3ItbGVuZ3RoCgkJCSAgICAgKGFyZWYg d2lkdGhzICgrIGkgMSBqKSkpKSkpCgkJKHNldHEgd2lkdGgtY29sdW1uICgrIHdpZHRoLWNvbHVt biAoMS0gY29sc3BhbikpCgkJICAgICAgY29sc3Bhbi1jb3VudCBjb2xzcGFuCgkJICAgICAgY29s c3Bhbi1yZW1haW5pbmcgY29sc3BhbikpCgkgICAgICAod2hlbiBjb2x1bW4KCQkobGV0ICgoZGF0 YSAoc2hyLXJlbmRlci10ZCBjb2x1bW4gd2lkdGggZmlsbCkpKQoJCSAgKGlmIChhbmQgKG5vdCBm aWxsKQoJCQkgICAoPiBjb2xzcGFuLXJlbWFpbmluZyAwKSkKCQkgICAgICAocHJvZ24KCQkJKHNl dHEgY29sc3Bhbi13aWR0aCAoY2FyIGRhdGEpKQoJCQkobGV0ICgodGhpcy13aWR0aCAoLyBjb2xz cGFuLXdpZHRoIGNvbHNwYW4tY291bnQpKSkKCQkJICAocHVzaCAoY29ucyB0aGlzLXdpZHRoIChj YWRyIGRhdGEpKSB0ZHMpCgkJCSAgKHNldHEgY29sc3Bhbi1yZW1haW5pbmcgKDEtIGNvbHNwYW4t cmVtYWluaW5nKSkpKQoJCSAgICAoaWYgKG5vdCBmaWxsKQoJCQkocHVzaCAoY29ucyAoY2FyIGRh dGEpIChjYWRyIGRhdGEpKSB0ZHMpCgkJICAgICAgKHB1c2ggZGF0YSB0ZHMpKSkpKQoJICAgICAg KHdoZW4gKGFuZCBjb2xzcGFuCgkJCSAoPiBjb2xzcGFuIDEpKQoJCShkb3RpbWVzIChfICgxLSBj b2xzcGFuKSkKCQkgIChzZXRxIGkgKDErIGkpKQoJCSAgKHB1c2gKCQkgICAoaWYgZmlsbAoJCSAg ICAgICAobGlzdCAwIDAgLTEgbmlsIDEgbmlsIG5pbCkKCQkgICAgICcoMCAuIDApKQoJCSAgIHRk cykpKQoJICAgICAgKHNldHEgaSAoMSsgaSkKCQkgICAgd2lkdGgtY29sdW1uICgxKyB3aWR0aC1j b2x1bW4pKSkpCgkgIChwdXNoIChucmV2ZXJzZSB0ZHMpIHRycykpKSkKICAgIChucmV2ZXJzZSB0 cnMpKSkKCihkZWZ1biBzaHItcGl4ZWwtYnVmZmVyLXdpZHRoICgpCiAgKGlmIChub3Qgc2hyLXVz ZS1mb250cykKICAgICAgKHNhdmUtZXhjdXJzaW9uCgkoZ290by1jaGFyIChwb2ludC1taW4pKQoJ KGxldCAoKG1heCAwKSkKCSAgKHdoaWxlIChub3QgKGVvYnApKQoJICAgIChlbmQtb2YtbGluZSkK CSAgICAoc2V0cSBtYXggKG1heCBtYXggKGN1cnJlbnQtY29sdW1uKSkpCgkgICAgKGZvcndhcmQt bGluZSAxKSkKCSAgbWF4KSkKICAgIChpZiAoZ2V0LWJ1ZmZlci13aW5kb3cpCgkoY2FyICh3aW5k b3ctdGV4dC1waXhlbC1zaXplIG5pbCAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCiAgICAgIChz YXZlLXdpbmRvdy1leGN1cnNpb24KICAgICAgICA7OyBBdm9pZCBlcnJvcnMgaWYgdGhlIHNlbGVj dGVkIHdpbmRvdyBpcyBhIGRlZGljYXRlZCBvbmUsCiAgICAgICAgOzsgYW5kIHRoZXkganVzdCB3 YW50IHRvIGluc2VydCBhIGRvY3VtZW50IGludG8gaXQuCiAgICAgICAgKHNldC13aW5kb3ctZGVk aWNhdGVkLXAgbmlsIG5pbCkKCShzZXQtd2luZG93LWJ1ZmZlciBuaWwgKGN1cnJlbnQtYnVmZmVy KSkKCShjYXIgKHdpbmRvdy10ZXh0LXBpeGVsLXNpemUgbmlsIChwb2ludC1taW4pIChwb2ludC1t YXgpKSkpKSkpCgooZGVmdW4gc2hyLXJlbmRlci10ZCAoZG9tIHdpZHRoIGZpbGwpCiAgKGxldCAo KGNhY2hlIChpbnRlcm4gKGZvcm1hdCAic2hyLXRkLWNhY2hlLSVzLSVzIiB3aWR0aCBmaWxsKSkp KQogICAgKG9yIChkb20tYXR0ciBkb20gY2FjaGUpCgkoYW5kIGZpbGwKCSAgICAgKGxldCAocmVz dWx0KQoJICAgICAgIChkb2xpc3QgKGF0dHIgKGRvbS1hdHRyaWJ1dGVzIGRvbSkpCgkJIChsZXQg KChuYW1lIChzeW1ib2wtbmFtZSAoY2FyIGF0dHIpKSkpCgkJICAgKHdoZW4gKHN0cmluZy1tYXRj aCAic2hyLXRkLWNhY2hlLVxcKFswLTldK1xcKS1uaWwiIG5hbWUpCgkJICAgICAobGV0ICgoY2Fj aGUtd2lkdGggKHN0cmluZy10by1udW1iZXIKCQkJCQkgKG1hdGNoLXN0cmluZyAxIG5hbWUpKSkp CgkJICAgICAgICh3aGVuIChhbmQgKD49IGNhY2hlLXdpZHRoIHdpZHRoKQoJCQkJICAoPD0gKGNh ciAoY2RyIGF0dHIpKSB3aWR0aCkpCgkJCSAoc2V0cSByZXN1bHQgKGNkciBhdHRyKSkpKSkpKQoJ ICAgICAgIHJlc3VsdCkpCgkobGV0KiAoKHB0IChwb2ludCkpCiAgICAgICAgICAgICAgIChyZXN1 bHQgKHNoci1yZW5kZXItdGQtMSBkb20gd2lkdGggZmlsbCkpKQoJICAoZG9tLXNldC1hdHRyaWJ1 dGUgZG9tIGNhY2hlIHJlc3VsdCkKICAgICAgICAgIChnb3RvLWNoYXIgcHQpCgkgIHJlc3VsdCkp KSkKCihkZWZ1biBzaHItcmVuZGVyLXRkLTEgKGRvbSB3aWR0aCBmaWxsKQogICh3aXRoLXRlbXAt YnVmZmVyCiAgICAobGV0ICgoYmdjb2xvciAoZG9tLWF0dHIgZG9tICdiZ2NvbG9yKSkKCSAgKGZn Y29sb3IgKGRvbS1hdHRyIGRvbSAnZmdjb2xvcikpCgkgIChzdHlsZSAoZG9tLWF0dHIgZG9tICdz dHlsZSkpCgkgIChzaHItc3R5bGVzaGVldCBzaHItc3R5bGVzaGVldCkKCSAgKG1heC13aWR0aCAw KQoJICBuYXR1cmFsLXdpZHRoKQogICAgICAod2hlbiBzdHlsZQoJKHNldHEgc3R5bGUgKGFuZCAo c3RyaW5nLW1hdGNoICJjb2xvciIgc3R5bGUpCgkJCSAoc2hyLXBhcnNlLXN0eWxlIHN0eWxlKSkp KQogICAgICAod2hlbiBiZ2NvbG9yCgkoc2V0cSBzdHlsZSAobmNvbmMgKGxpc3QgKGNvbnMgJ2Jh Y2tncm91bmQtY29sb3IgYmdjb2xvcikpCgkJCSAgIHN0eWxlKSkpCiAgICAgICh3aGVuIGZnY29s b3IKCShzZXRxIHN0eWxlIChuY29uYyAobGlzdCAoY29ucyAnY29sb3IgZmdjb2xvcikpIHN0eWxl KSkpCiAgICAgICh3aGVuIHN0eWxlCgkoc2V0cSBzaHItc3R5bGVzaGVldCAoYXBwZW5kIHN0eWxl IHNoci1zdHlsZXNoZWV0KSkpCiAgICAgIChsZXQgKChzaHItaW50ZXJuYWwtd2lkdGggd2lkdGgp CgkgICAgKHNoci1pbmRlbnRhdGlvbiAwKSkKCShzaHItZGVzY2VuZCBkb20pKQogICAgICAoc2F2 ZS13aW5kb3ctZXhjdXJzaW9uCiAgICAgICAgOzsgQXZvaWQgZXJyb3JzIGlmIHRoZSBzZWxlY3Rl ZCB3aW5kb3cgaXMgYSBkZWRpY2F0ZWQgb25lLAogICAgICAgIDs7IGFuZCB0aGV5IGp1c3Qgd2Fu dCB0byBpbnNlcnQgYSBkb2N1bWVudCBpbnRvIGl0LgogICAgICAgIChzZXQtd2luZG93LWRlZGlj YXRlZC1wIG5pbCBuaWwpCgkoc2V0LXdpbmRvdy1idWZmZXIgbmlsIChjdXJyZW50LWJ1ZmZlcikp CgkodW5sZXNzIGZpbGwKCSAgKHNldHEgbmF0dXJhbC13aWR0aAoJCShvciAoZG9tLWF0dHIgZG9t ICdzaHItdGQtY2FjaGUtbmF0dXJhbCkKCQkgICAgKGxldCAoKG5hdHVyYWwgKG1heCAoc2hyLXBp eGVsLWJ1ZmZlci13aWR0aCkKCQkJCQkoc2hyLWRvbS1tYXgtbmF0dXJhbC13aWR0aCBkb20gMCkp KSkKCQkgICAgICAoZG9tLXNldC1hdHRyaWJ1dGUgZG9tICdzaHItdGQtY2FjaGUtbmF0dXJhbCBu YXR1cmFsKQoJCSAgICAgIG5hdHVyYWwpKSkpCgkoaWYgKGFuZCBuYXR1cmFsLXdpZHRoCgkJICg8 PSBuYXR1cmFsLXdpZHRoIHdpZHRoKSkKCSAgICAoc2V0cSBtYXgtd2lkdGggbmF0dXJhbC13aWR0 aCkKCSAgKGxldCAoKHNoci1pbnRlcm5hbC13aWR0aCB3aWR0aCkpCgkgICAgKHNoci1maWxsLWxp bmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAgIChzZXRxIG1heC13aWR0aCAoc2hyLXBp eGVsLWJ1ZmZlci13aWR0aCkpKSkpCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCiAgICAg IDs7IERlbGV0ZSBwYWRkaW5nIGF0IHRoZSBib3R0b20gb2YgdGhlIFREcy4KICAgICAgKGRlbGV0 ZS1yZWdpb24KICAgICAgIChwb2ludCkKICAgICAgIChwcm9nbgoJIChza2lwLWNoYXJzLWJhY2t3 YXJkICIgXHRcbiIpCgkgKGVuZC1vZi1saW5lKQoJIChwb2ludCkpKQogICAgICAoZ290by1jaGFy IChwb2ludC1taW4pKQogICAgICAobGlzdCBtYXgtd2lkdGgKCSAgICBuYXR1cmFsLXdpZHRoCgkg ICAgKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAgIChzcGxpdC1zdHJp bmcgKGJ1ZmZlci1zdHJpbmcpICJcbiIpCgkgICAgKGlmIChkb20tYXR0ciBkb20gJ2NvbHNwYW4p CgkJKHN0cmluZy10by1udW1iZXIgKGRvbS1hdHRyIGRvbSAnY29sc3BhbikpCgkgICAgICAxKQoJ ICAgIChjZHIgKGFzc3EgJ2NvbG9yIHNoci1zdHlsZXNoZWV0KSkKCSAgICAoY2RyIChhc3NxICdi YWNrZ3JvdW5kLWNvbG9yIHNoci1zdHlsZXNoZWV0KSkpKSkpCgooZGVmdW4gc2hyLWRvbS1tYXgt bmF0dXJhbC13aWR0aCAoZG9tIG1heCkKICAoaWYgKGVxIChkb20tdGFnIGRvbSkgJ3RhYmxlKQog ICAgICAobWF4IG1heCAob3IKCQkoY2wtbG9vcAogICAgICAgICAgICAgICAgIGZvciBsaW5lIGlu IChkb20tYXR0ciBkb20gJ3Noci1zdWdnZXN0ZWQtd2lkdGhzKQoJCSBtYXhpbWl6ZSAoKwoJCQkg ICBzaHItdGFibGUtc2VwYXJhdG9yLWxlbmd0aAoJCQkgICAoY2wtbG9vcCBmb3IgZWxlbSBpbiBs aW5lCgkJCQkgICAgc3VtbWluZwoJCQkJICAgICgrIChjZHIgZWxlbSkKCQkJCSAgICAgICAoKiAy IHNoci10YWJsZS1zZXBhcmF0b3ItbGVuZ3RoKSkpKSkKCQkwKSkKICAgIChkb2xpc3QgKGNoaWxk IChkb20tY2hpbGRyZW4gZG9tKSkKICAgICAgKHVubGVzcyAoc3RyaW5ncCBjaGlsZCkKCShzZXRx IG1heCAobWF4IChzaHItZG9tLW1heC1uYXR1cmFsLXdpZHRoIGNoaWxkIG1heCkpKSkpCiAgICBt YXgpKQoKKGRlZnVuIHNoci1idWZmZXItd2lkdGggKCkKICAoZ290by1jaGFyIChwb2ludC1taW4p KQogIChsZXQgKChtYXggMCkpCiAgICAod2hpbGUgKG5vdCAoZW9icCkpCiAgICAgIChlbmQtb2Yt bGluZSkKICAgICAgKHNldHEgbWF4IChtYXggbWF4IChjdXJyZW50LWNvbHVtbikpKQogICAgICAo Zm9yd2FyZC1saW5lIDEpKQogICAgbWF4KSkKCihkZWZ1biBzaHItcHJvLXJhdGUtY29sdW1ucyAo Y29sdW1ucykKICAobGV0ICgodG90YWwtcGVyY2VudGFnZSAwKQoJKHdpZHRocyAobWFrZS12ZWN0 b3IgKGxlbmd0aCBjb2x1bW5zKSAwKSkpCiAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvbHVtbnMp KQogICAgICAoc2V0cSB0b3RhbC1wZXJjZW50YWdlICgrIHRvdGFsLXBlcmNlbnRhZ2UgKGFyZWYg Y29sdW1ucyBpKSkpKQogICAgKHNldHEgdG90YWwtcGVyY2VudGFnZSAoLyAxLjAgdG90YWwtcGVy Y2VudGFnZSkpCiAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvbHVtbnMpKQogICAgICAoYXNldCB3 aWR0aHMgaSAobWF4ICh0cnVuY2F0ZSAoKiAoYXJlZiBjb2x1bW5zIGkpCgkJCQkgICAgICAgdG90 YWwtcGVyY2VudGFnZQoJCQkJICAgICAgICgtIHNoci1pbnRlcm5hbC13aWR0aAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAoMSsgKGxlbmd0aCBjb2x1bW5zKSkK CQkJCQkgICAgIHNoci10YWJsZS1zZXBhcmF0b3ItcGl4ZWwtd2lkdGgpKSkpCgkJCSAgMTApKSkK ICAgIHdpZHRocykpCgo7OyBSZXR1cm4gYSBzdW1tYXJ5IG9mIHRoZSBudW1iZXIgYW5kIHNoYXBl IG9mIHRoZSBURHMgaW4gdGhlIHRhYmxlLgooZGVmdW4gc2hyLWNvbHVtbi1zcGVjcyAoZG9tKQog IChsZXQgKChjb2x1bW5zIChtYWtlLXZlY3RvciAoc2hyLW1heC1jb2x1bW5zIGRvbSkgMSkpKQog ICAgKGRvbGlzdCAocm93IChkb20tbm9uLXRleHQtY2hpbGRyZW4gZG9tKSkKICAgICAgKHdoZW4g KGVxIChkb20tdGFnIHJvdykgJ3RyKQoJKGxldCAoKGkgMCkpCgkgIChkb2xpc3QgKGNvbHVtbiAo ZG9tLW5vbi10ZXh0LWNoaWxkcmVuIHJvdykpCgkgICAgKHdoZW4gKG1lbXEgKGRvbS10YWcgY29s dW1uKSAnKHRkIHRoKSkKCSAgICAgIChsZXQgKCh3aWR0aCAoZG9tLWF0dHIgY29sdW1uICd3aWR0 aCkpKQoJCSh3aGVuIChhbmQgd2lkdGgKCQkJICAgKHN0cmluZy1tYXRjaCAiXFwoWzAtOV0rXFwp JSIgd2lkdGgpCgkJCSAgIChub3QgKHplcm9wIChzZXRxIHdpZHRoIChzdHJpbmctdG8tbnVtYmVy CgkJCQkJCSAgICAobWF0Y2gtc3RyaW5nIDEgd2lkdGgpKSkpKSkKCQkgIChhc2V0IGNvbHVtbnMg aSAoLyB3aWR0aCAxMDAuMCkpKSkKCSAgICAgIChzZXRxIGkgKDErIGkpKSkpKSkpCiAgICBjb2x1 bW5zKSkKCihkZWZ1biBzaHItY291bnQgKGRvbSBlbGVtKQogIChsZXQgKChpIDApKQogICAgKGRv bGlzdCAoc3ViIChkb20tY2hpbGRyZW4gZG9tKSkKICAgICAgKHdoZW4gKGFuZCAobm90IChzdHJp bmdwIHN1YikpCgkJIChlcSAoZG9tLXRhZyBzdWIpIGVsZW0pKQoJKHNldHEgaSAoMSsgaSkpKSkK ICAgIGkpKQoKKGRlZnVuIHNoci1tYXgtY29sdW1ucyAoZG9tKQogIChsZXQgKChtYXggMCkpCiAg ICAoZG9saXN0IChyb3cgKGRvbS1jaGlsZHJlbiBkb20pKQogICAgICAod2hlbiAoYW5kIChub3Qg KHN0cmluZ3Agcm93KSkKCQkgKGVxIChkb20tdGFnIHJvdykgJ3RyKSkKCShzZXRxIG1heCAobWF4 IG1heCAoKyAoc2hyLWNvdW50IHJvdyAndGQpCgkJCSAgICAgIChzaHItY291bnQgcm93ICd0aCkp KSkpKQogICAgbWF4KSkKCihwcm92aWRlICdzaHIpCgo7Ozsgc2hyLmVsIGVuZHMgaGVyZQo= ------==--bound.476055.sas1-890ba5c2334a.qloud-c.yandex.net--