From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Kyle M. Lee" Newsgroups: gmane.emacs.devel,gmane.emacs.pretest.bugs Subject: Re: 23.0.60; emacs hangs on WinXP with --disable-font-backend, and backtrace Date: Thu, 08 May 2008 23:28:03 +0800 Message-ID: <48231C03.2050201@gmail.com> References: <4821EE06.9040409@gmail.com> <48225056.7030100@gmail.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010105090008000604010704" X-Trace: ger.gmane.org 1210260571 29480 80.91.229.12 (8 May 2008 15:29:31 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 8 May 2008 15:29:31 +0000 (UTC) Cc: emacs-pretest-bug@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu May 08 17:30:04 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1Ju83r-0006vk-Ff for ged-emacs-devel@m.gmane.org; Thu, 08 May 2008 17:29:46 +0200 Original-Received: from localhost ([127.0.0.1]:40121 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ju837-0003OS-S6 for ged-emacs-devel@m.gmane.org; Thu, 08 May 2008 11:28:49 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ju82z-0003Nn-T2 for emacs-devel@gnu.org; Thu, 08 May 2008 11:28:42 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ju82x-0003ND-O9 for emacs-devel@gnu.org; Thu, 08 May 2008 11:28:41 -0400 Original-Received: from [199.232.76.173] (port=35558 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ju82x-0003NA-Fi for emacs-devel@gnu.org; Thu, 08 May 2008 11:28:39 -0400 Original-Received: from fencepost.gnu.org ([140.186.70.10]:53437) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Ju82w-0003Pz-B6 for emacs-devel@gnu.org; Thu, 08 May 2008 11:28:39 -0400 Original-Received: from mail.gnu.org ([199.232.76.166]:42145 helo=mx10.gnu.org) by fencepost.gnu.org with esmtp (Exim 4.67) (envelope-from ) id 1Ju82E-0001GM-H8 for emacs-pretest-bug@gnu.org; Thu, 08 May 2008 11:27:55 -0400 Original-Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1Ju82j-0003N1-NC for emacs-pretest-bug@gnu.org; Thu, 08 May 2008 11:28:37 -0400 Original-Received: from py-out-1112.google.com ([64.233.166.182]:18543) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Ju82h-0003MX-O1 for emacs-pretest-bug@gnu.org; Thu, 08 May 2008 11:28:24 -0400 Original-Received: by py-out-1112.google.com with SMTP id u52so647376pyb.1 for ; Thu, 08 May 2008 08:28:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:user-agent:mime-version:to:cc:subject:references:in-reply-to:x-enigmail-version:content-type; bh=bv/cNNU9QfVc4lDJxjobzsCx8bcpouTS02K4zR+tDJE=; b=CpIbyIvCmqYP9x29HY77LQVolz7mRddzNOxZEv11g0NHxnNZ/frl04XOC/nXAk1NaLEvp6jK9MgchMqRD2AGRXMi5RHAdsCvIbBQZ6dovXclHmpYnXcwWiEkCSRAYzgerrbU7kU2pfrA5LiBWWYN2dem7eDGaD3cNJlvBnwTrEE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject:references:in-reply-to:x-enigmail-version:content-type; b=HaPLesg/ZzWc1Xbzu1W+Dv9H2HO+TzuU7TD91xTdjitSl27Ze/Ct56ME2vlwMRpZi/scSCoMV4ZGCpNMv6PRhpjBVM5gEVs1zmRqbECj/taE6holp5yd+7XDcEwk6ogGrrKVKCTRgwYGt3h2nXFyg2y1lAcOfoi9P0vnt27LPb8= Original-Received: by 10.114.156.1 with SMTP id d1mr3181703wae.120.1210260500289; Thu, 08 May 2008 08:28:20 -0700 (PDT) Original-Received: from ?127.0.0.1? ( [121.34.61.54]) by mx.google.com with ESMTPS id m40sm7465085wag.50.2008.05.08.08.28.11 (version=SSLv3 cipher=RC4-MD5); Thu, 08 May 2008 08:28:19 -0700 (PDT) User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) In-Reply-To: X-Enigmail-Version: 0.95.6 X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) X-detected-kernel: by monty-python.gnu.org: Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:96789 gmane.emacs.pretest.bugs:22219 Archived-At: This is a multi-part message in MIME format. --------------010105090008000604010704 Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 8bit Eli Zaretskii дµÀ: > Are you saying that without tabbar.el it doesn't hang? If so, what is > tabbar.el? I don't see it in the CVS. Yes, it happened only when I loaded tabbar. The previous ntemacs23 long time ago would not hangs. I don't remember the exact date. (Maybe the one on the ntemacs.sf.net ?) I attached the tabbar.el file. That's not a part of cvs emacs now. > > I'm still fuzzy about the specific sequence of commands that causes > hanging. Could you please show a detailed list of commands you typed > to get Emacs hang? I have the following keybinding setting in .emacs file: (global-set-key [(control \`)] 'tabbar-forward-group) (global-set-key [(control tab)] 'tabbar-forward-tab) (global-set-key [(shift tab)] 'tabbar-backward-tab) The hanging is happened sometimes, when I used C-~ or C-TAB to switch buffer which has some chinese text. Seldom C-x b. > > There's no need to copy the binary, just go to the src directory and > type something like > > gdb ../bin/emacs.exe > > This assumes that you have run "make install" which placed the > emacs.exe binary in the bin subdirectory of the root of the Emacs > tree. I configured with --prefix arg, so the emacs.exe will be copied to another directory far way from this bin subdir. I will configure without it next time, and I can use this handy command line. :) And how can I go back to the gdb when emacs hanged ? I pressed C-x C-z and C-g serval times in emacs, and nothing happened. --------------010105090008000604010704 Content-Type: text/plain; name="tabbar.el" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="tabbar.el" Ozs7IFRhYmJhci5lbCAtLS0gRGlzcGxheSBhIHRhYiBiYXIgaW4gdGhlIGhlYWRlciBsaW5l Cgo7OyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUgRGF2aWQgUG9uY2UKCjs7IEF1 dGhvcjogRGF2aWQgUG9uY2UgPGRhdmlkQGRwb25jZS5jb20+Cjs7IE1haW50YWluZXI6IERh dmlkIFBvbmNlIDxkYXZpZEBkcG9uY2UuY29tPgo7OyBDcmVhdGVkOiAyNSBGZWJydWFyeSAy MDAzCjs7IEtleXdvcmRzOiBjb252ZW5pZW5jZQo7OyBSZXZpc2lvbjogJElkOiB0YWJiYXIu ZWwsdiAxLjY5IDIwMDYvMDYvMDggMDg6Mjc6MzkgcG9uY2VkIEV4cCAkCgooZGVmY29uc3Qg dGFiYmFyLXZlcnNpb24gIjIuMCIpCgo7OyBUaGlzIGZpbGUgaXMgbm90IHBhcnQgb2YgR05V IEVtYWNzLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgo7OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwo7OyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0Cjs7IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KCjs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKOzsgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQo7OyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl IHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCjs7IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgKOzsgRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgoKOzs7IENvbW1lbnRhcnk6Cjs7Cjs7 IFRoaXMgbGlicmFyeSBwcm92aWRlcyB0aGUgVGFiYmFyIGdsb2JhbCBtaW5vciBtb2RlIHRv IGRpc3BsYXkgYSB0YWIKOzsgYmFyIGluIHRoZSBoZWFkZXIgbGluZSBvZiBFbWFjcyAyMSBh bmQgbGF0ZXIgdmVyc2lvbnMuICBZb3UgY2FuIHVzZQo7OyB0aGUgbW91c2UgdG8gY2xpY2sg b24gYSB0YWIgYW5kIHNlbGVjdCBpdC4gIEFsc28sIHRocmVlIGJ1dHRvbnMgYXJlCjs7IGRp c3BsYXllZCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0YWIgYmFyIGluIHRoaXMgb3JkZXI6 IHRoZQo7OyAiaG9tZSIsICJzY3JvbGwgbGVmdCIsIGFuZCAic2Nyb2xsIHJpZ2h0IiBidXR0 b25zLiAgVGhlICJob21lIgo7OyBidXR0b24gaXMgYSBnZW5lcmFsIHB1cnBvc2UgYnV0dG9u IHVzZWQgdG8gY2hhbmdlIHNvbWV0aGluZyBvbiB0aGUKOzsgdGFiIGJhci4gIFRoZSBzY3Jv bGwgbGVmdCBhbmQgc2Nyb2xsIHJpZ2h0IGJ1dHRvbnMgYXJlIHVzZWQgdG8KOzsgc2Nyb2xs IHRhYnMgaG9yaXpvbnRhbGx5LiAgVGFicyBjYW4gYmUgZGl2aWRlZCB1cCBpbnRvIGdyb3Vw cyB0bwo7OyBtYWludGFpbiBzZXZlcmFsIHNldHMgb2YgdGFicyBhdCB0aGUgc2FtZSB0aW1l IChzZWUgYWxzbyB0aGUKOzsgY2hhcHRlciAiQ29yZSIgYmVsb3cgZm9yIG1vcmUgZGV0YWls cyBvbiB0YWIgZ3JvdXBpbmcpLiAgT25seSBvbmUKOzsgZ3JvdXAgaXMgZGlzcGxheWVkIG9u IHRoZSB0YWIgYmFyLCBhbmQgdGhlICJob21lIiBidXR0b24sIGZvcgo7OyBleGFtcGxlLCBj YW4gYmUgdXNlZCB0byBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgZ3JvdXBzLCB0 bwo7OyBzaG93IGRpZmZlcmVudCB0YWIgYmFycy4KOzsKOzsgSW4gYSBncmFwaGljIGVudmly b25tZW50LCB1c2luZyB0aGUgbW91c2UgaXMgcHJvYmFibHkgdGhlIHByZWZlcnJlZAo7OyB3 YXkgdG8gd29yayB3aXRoIHRoZSB0YWIgYmFyLiAgSG93ZXZlciwgeW91IGNhbiBhbHNvIHVz ZSB0aGUgdGFiCjs7IGJhciB3aGVuIEVtYWNzIGlzIHJ1bm5pbmcgb24gYSB0ZXJtaW5hbCwg c28gaXQgaXMgcG9zc2libGUgdG8gdXNlCjs7IGNvbW1hbmRzIHRvIHByZXNzIHNwZWNpYWwg YnV0dG9ucywgb3IgdG8gbmF2aWdhdGUgY3ljbGljYWxseQo7OyB0aHJvdWdoIHRhYnMuCjs7 Cjs7IFRoZXNlIGNvbW1hbmRzLCBhbmQgZGVmYXVsdCBrZXlib2FyZCBzaG9ydGN1dHMsIGFy ZSBwcm92aWRlZDoKOzsKOzsgYHRhYmJhci1tb2RlJwo7OyAgICAgVG9nZ2xlIHRoZSBUYWJi YXIgZ2xvYmFsIG1pbm9yIG1vZGUuICBXaGVuIGVuYWJsZWQgYSB0YWIgYmFyIGlzCjs7ICAg ICBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlciBsaW5lLgo7Owo7OyBgdGFiYmFyLWxvY2FsLW1v ZGUnICAgICAgICAgKEMtYyA8Qy1mMTA+KQo7OyAgICAgVG9nZ2xlIHRoZSBUYWJiYXItTG9j YWwgbWlub3IgbW9kZS4gIFByb3ZpZGVkIHRoZSBnbG9iYWwgbWlub3IKOzsgICAgIG1vZGUg aXMgdHVybmVkIG9uLCB0aGUgdGFiIGJhciBiZWNvbWVzIGxvY2FsIGluIHRoZSBjdXJyZW50 Cjs7ICAgICBidWZmZXIgd2hlbiB0aGUgbG9jYWwgbWlub3IgbW9kZSBpcyBlbmFibGVkLiAg VGhpcyBwZXJtaXRzIHRvCjs7ICAgICBzZWUgdGhlIHRhYiBiYXIgaW4gYSBidWZmZXIgd2hl cmUgdGhlIGhlYWRlciBsaW5lIGlzIGFscmVhZHkKOzsgICAgIHVzZWQgYnkgYW5vdGhlciBt b2RlIChsaWtlIGBJbmZvLW1vZGUnIGZvciBleGFtcGxlKS4KOzsKOzsgYHRhYmJhci1td2hl ZWwtbW9kZScKOzsgICAgIFRvZ2dsZSB0aGUgVGFiYmFyLU13aGVlbCBnbG9iYWwgbWlub3Ig bW9kZS4gIFdoZW4gZW5hYmxlZCB5b3UKOzsgICAgIGNhbiB1c2UgdGhlIG1vdXNlIHdoZWVs IHRvIG5hdmlnYXRlIHRocm91Z2ggdGFicyBvZiBncm91cHMuCjs7Cjs7IGB0YWJiYXItcHJl c3MtaG9tZScgICAgICAgICAoQy1jIDxDLWhvbWU+KQo7OyBgdGFiYmFyLXByZXNzLXNjcm9s bC1sZWZ0JyAgKEMtYyA8Qy1wcmlvcj4pCjs7IGB0YWJiYXItcHJlc3Mtc2Nyb2xsLXJpZ2h0 JyAoQy1jIDxDLW5leHQ+KQo7OyAgICAgU2ltdWxhdGUgYSBtb3VzZS0xIGNsaWNrIG9uIHJl c3BlY3RpdmVseSB0aGUgImhvbWUiLCAic2Nyb2xsCjs7ICAgICBsZWZ0IiwgYW5kICJzY3Jv bGwgcmlnaHQiIGJ1dHRvbnMuICBBIG51bWVyaWMgcHJlZml4IGFyZ3VtZW50Cjs7ICAgICB2 YWx1ZSBvZiAyLCBvciAzLCByZXNwZWN0aXZlbHkgc2ltdWxhdGVzIGEgbW91c2UtMiwgb3Ig bW91c2UtMwo7OyAgICAgY2xpY2suCjs7Cjs7IGB0YWJiYXItYmFja3dhcmQnICAgICAgICAg ICAoQy1jIDxDLWxlZnQ+KQo7OyBgdGFiYmFyLWZvcndhcmQnICAgICAgICAgICAgKEMtYyA8 Qy1yaWdodD4pCjs7ICAgICBBcmUgdGhlIGJhc2ljIGNvbW1hbmRzIHRvIG5hdmlnYXRlIGN5 Y2xpY2FsbHkgdGhyb3VnaCB0YWJzIG9yCjs7ICAgICBncm91cHMgb2YgdGFicy4gIFRoZSBj eWNsZSBpcyBjb250cm9sbGVkIGJ5IHRoZQo7OyAgICAgYHRhYmJhci1jeWNsZS1zY29wZScg b3B0aW9uLiAgVGhlIGRlZmF1bHQgaXMgdG8gbmF2aWdhdGUKOzsgICAgIHRocm91Z2ggYWxs IHRhYnMgYWNyb3NzIGFsbCBleGlzdGluZyBncm91cHMgb2YgdGFicy4gIFlvdSBjYW4KOzsg ICAgIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciB0byBuYXZpZ2F0ZSBvbmx5IHRocm91 Z2ggdGhlIHRhYnMKOzsgICAgIHZpc2libGUgb24gdGhlIHRhYiBiYXIsIG9yIHRocm91Z2gg Z3JvdXBzIG9mIHRhYnMgb25seS4gIE9yIHVzZQo7OyAgICAgdGhlIG1vcmUgc3BlY2lhbGl6 ZWQgY29tbWFuZHMgYmVsb3cuCjs7Cjs7IGB0YWJiYXItYmFja3dhcmQtdGFiJwo7OyBgdGFi YmFyLWZvcndhcmQtdGFiJwo7OyAgICAgTmF2aWdhdGUgdGhyb3VnaCB0aGUgdGFicyB2aXNp YmxlIG9uIHRoZSB0YWIgYmFyLgo7Owo7OyBgdGFiYmFyLWJhY2t3YXJkLWdyb3VwJyAgICAg KEMtYyA8Qy11cD4pCjs7IGB0YWJiYXItZm9yd2FyZC1ncm91cCcgICAgICAoQy1jIDxDLWRv d24+KQo7OyAgICAgTmF2aWdhdGUgdGhyb3VnaCBleGlzdGluZyBncm91cHMgb2YgdGFicy4K OzsKOzsKOzsgQ29yZQo7OyAtLS0tCjs7Cjs7IFRoZSBjb250ZW50IG9mIHRoZSB0YWIgYmFy IGlzIHJlcHJlc2VudGVkIGJ5IGFuIGludGVybmFsIGRhdGEKOzsgc3RydWN0dXJlOiBhIHRh YiBzZXQuICBBIHRhYiBzZXQgaXMgYSBjb2xsZWN0aW9uIChncm91cCkgb2YgdGFicywKOzsg aWRlbnRpZmllZCBieSBhbiB1bmlxdWUgbmFtZS4gIEluIGEgdGFiIHNldCwgYXQgYW55IHRp bWUsIG9uZSBhbmQKOzsgb25seSBvbmUgdGFiIGlzIGRlc2lnbmF0ZWQgYXMgc2VsZWN0ZWQg d2l0aGluIHRoZSB0YWIgc2V0Lgo7Owo7OyBBIHRhYiBpcyBhIHNpbXBsZSBkYXRhIHN0cnVj dHVyZSBnaXZpbmcgdGhlIHZhbHVlIG9mIHRoZSB0YWIsIGFuZCBhCjs7IHJlZmVyZW5jZSB0 byBpdHMgdGFiIHNldCBjb250YWluZXIuICBBIHRhYiB2YWx1ZSBjYW4gYmUgYW55IExpc3AK Ozsgb2JqZWN0LiAgRWFjaCB0YWIgb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVl Lgo7Owo7OyBBIHRhYiBzZXQgaXMgZGlzcGxheWVkIG9uIHRoZSB0YWIgYmFyIHRocm91Z2gg YSAidmlldyIgZGVmaW5lZCBieQo7OyB0aGUgaW5kZXggb2YgdGhlIGxlZnRtb3N0IHRhYiBz aG93bi4gIFRodXMsIGl0IGlzIHBvc3NpYmxlIHRvCjs7IHNjcm9sbCB0aGUgdGFiIGJhciBo b3Jpem9udGFsbHkgYnkgY2hhbmdpbmcgdGhlIHN0YXJ0IGluZGV4IG9mIHRoZQo7OyB0YWIg c2V0IHZpZXcuCjs7Cjs7IFRoZSB2aXN1YWwgcmVwcmVzZW50YXRpb24gb2YgYSB0YWIgYmFy IGlzIGEgbGlzdCBvZiB2YWxpZAo7OyBgaGVhZGVyLWxpbmUtZm9ybWF0JyB0ZW1wbGF0ZSBl bGVtZW50cywgb25lIGZvciBlYWNoIHNwZWNpYWwKOzsgYnV0dG9uLCBhbmQgZm9yIGVhY2gg dGFiIGZvdW5kIGludG8gYSB0YWIgc2V0ICJ2aWV3Ii4gIFdoZW4gdGhlCjs7IHZpc3VhbCBy ZXByZXNlbnRhdGlvbiBvZiBhIHRhYiBpcyByZXF1aXJlZCwgdGhlIGZ1bmN0aW9uIHNwZWNp ZmllZAo7OyBpbiB0aGUgdmFyaWFibGUgYHRhYmJhci10YWItbGFiZWwtZnVuY3Rpb24nIGlz IGNhbGxlZCB0byBvYnRhaW4gaXQuCjs7IFRoZSB2aXN1YWwgcmVwcmVzZW50YXRpb24gb2Yg YSBzcGVjaWFsIGJ1dHRvbiBpcyBvYnRhaW5lZCBieQo7OyBjYWxsaW5nIHRoZSBmdW5jdGlv biBzcGVjaWZpZWQgaW4gYHRhYmJhci1idXR0b24tbGFiZWwtZnVuY3Rpb24nLAo7OyB3aGlj aCBpcyBwYXNzZWQgYSBidXR0b24gbmFtZSBhbW9uZyBgaG9tZScsIGBzY3JvbGwtbGVmdCcs IG9yCjs7IGBzY3JvbGwtcmlnaHQnLiAgVGhlcmUgYXJlIGFsc28gb3B0aW9ucyBhbmQgZmFj ZXMgdG8gY3VzdG9taXplIHRoZQo7OyBhcHBlYXJhbmNlIG9mIGJ1dHRvbnMgYW5kIHRhYnMg KHNlZSB0aGUgY29kZSBmb3IgbW9yZSBkZXRhaWxzKS4KOzsKOzsgV2hlbiB0aGUgbW91c2Ug aXMgb3ZlciBhIHRhYiwgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBpbgo7OyBgdGFiYmFyLWhl bHAtb24tdGFiLWZ1bmN0aW9uJyBpcyBjYWxsZWQsIHdoaWNoIGlzIHBhc3NlZCB0aGUgdGFi Cjs7IGFuZCBzaG91bGQgcmV0dXJuIGEgaGVscCBzdHJpbmcgdG8gZGlzcGxheS4gIFdoZW4g YSB0YWIgaXMKOzsgc2VsZWN0ZWQsIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgaW4gYHRhYmJh ci1zZWxlY3QtdGFiLWZ1bmN0aW9uJyBpcwo7OyBjYWxsZWQsIHdoaWNoIGlzIHBhc3NlZCB0 aGUgdGFiIGFuZCB0aGUgZXZlbnQgcmVjZWl2ZWQuCjs7Cjs7IFNpbWlsYXJseSwgdG8gY29u dHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhlIHNwZWNpYWwgYnV0dG9ucywgdGhlCjs7IGZvbGxv d2luZyB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSwgZm9yIHJlc3BlY3RpdmVseSB0aGUgYGhv bWUnLAo7OyBgc2Nyb2xsLWxlZnQnIGFuZCBgc2Nyb2xsLXJpZ2h0JyB2YWx1ZSBvZiBgPGJ1 dHRvbj4nOgo7Owo7OyBgdGFiYmFyLTxidXR0b24+LWZ1bmN0aW9uJwo7OyAgICBGdW5jdGlv biBjYWxsZWQgd2hlbiA8YnV0dG9uPiBpcyBzZWxlY3RlZC4gIFRoZSBmdW5jdGlvbiBpcwo7 OyAgICBwYXNzZWQgdGhlIG1vdXNlIGV2ZW50IHJlY2VpdmVkLgo7Owo7OyBgdGFiYmFyLTxi dXR0b24+LWhlbHAtZnVuY3Rpb24nCjs7ICAgIEZ1bmN0aW9uIGNhbGxlZCB3aXRoIG5vIGFy Z3VtZW50cyB0byBvYnRhaW4gYSBoZWxwIHN0cmluZwo7OyAgICBkaXNwbGF5ZWQgd2hlbiB0 aGUgbW91c2UgaXMgb3ZlciA8YnV0dG9uPi4KOzsKOzsgVG8gaW5jcmVhc2UgcGVyZm9ybWFu Y2UsIGVhY2ggdGFiIHNldCBhdXRvbWF0aWNhbGx5IG1haW50YWlucyBpdHMKOzsgdmlzdWFs IHJlcHJlc2VudGF0aW9uIGluIGEgY2FjaGUuICBBcyBmYXIgYXMgcG9zc2libGUsIHRoZSBj YWNoZSBpcwo7OyB1c2VkIHRvIGRpc3BsYXkgdGhlIHRhYiBzZXQsIGFuZCByZWZyZXNoZWQg b25seSB3aGVuIG5lY2Vzc2FyeS4KOzsKOzsgU2V2ZXJhbCB0YWIgc2V0cyBjYW4gYmUgbWFp bnRhaW5lZCBhdCB0aGUgc2FtZSB0aW1lLiAgT25seSBvbmUgaXMKOzsgZGlzcGxheWVkIG9u IHRoZSB0YWIgYmFyLCBpdCBpcyBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbgo7 OyBzcGVjaWZpZWQgaW4gdGhlIHZhcmlhYmxlIGB0YWJiYXItY3VycmVudC10YWJzZXQtZnVu Y3Rpb24nLgo7Owo7OyBBIHNwZWNpYWwgdGFiIHNldCBpcyBtYWludGFpbmVkLCB0aGF0IGNv bnRhaW5zIHRoZSBsaXN0IG9mIHRoZQo7OyBjdXJyZW50bHkgc2VsZWN0ZWQgdGFicyBpbiB0 aGUgZXhpc3RpbmcgdGFiIHNldHMuICBUaGlzIHRhYiBzZXQgaXMKOzsgdXNlZnVsIHRvIHNo b3cgdGhlIGV4aXN0aW5nIHRhYiBzZXRzIGluIGEgdGFiIGJhciwgYW5kIHN3aXRjaAo7OyBi ZXR3ZWVuIHRoZW0gZWFzaWx5LiAgVGhlIGZ1bmN0aW9uIGB0YWJiYXItZ2V0LXRhYnNldHMt dGFic2V0Jwo7OyByZXR1cm5zIHRoaXMgc3BlY2lhbCB0YWIgc2V0Lgo7Owo7Owo7OyBCdWZm ZXIgdGFicwo7OyAtLS0tLS0tLS0tLQo7Owo7OyBUaGUgZGVmYXVsdCB0YWIgYmFyIGltcGxl bWVudGF0aW9uIHByb3ZpZGVkIGRpc3BsYXlzIGJ1ZmZlcnMgaW4KOzsgZGVkaWNhdGVkIHRh YnMuICBTZWxlY3RpbmcgYSB0YWIsIHN3aXRjaCAobW91c2UtMSksIG9yIHBvcAo7OyAobW91 c2UtMiksIHRvIHRoZSBidWZmZXIgaXQgY29udGFpbnMuCjs7Cjs7IFRoZSBsaXN0IG9mIGJ1 ZmZlcnMgcHV0IGluIHRhYnMgaXMgcHJvdmlkZWQgYnkgdGhlIGZ1bmN0aW9uCjs7IHNwZWNp ZmllZCBpbiB0aGUgdmFyaWFibGUgYHRhYmJhci1idWZmZXItbGlzdC1mdW5jdGlvbicuICBU aGUKOzsgZGVmYXVsdCBmdW5jdGlvbjogYHRhYmJhci1idWZmZXItbGlzdCcsIGV4Y2x1ZGVz IGJ1ZmZlcnMgd2hvc2UgbmFtZQo7OyBzdGFydHMgd2l0aCBhIHNwYWNlLCB3aGVuIHRoZXkg YXJlIG5vdCB2aXNpdGluZyBhIGZpbGUuCjs7Cjs7IEJ1ZmZlcnMgYXJlIG9yZ2FuaXplZCBp biBncm91cHMsIGVhY2ggb25lIHJlcHJlc2VudGVkIGJ5IGEgdGFiIHNldC4KOzsgQSBidWZm ZXIgY2FuIGhhdmUgbm8gZ3JvdXAsIG9yIGJlbG9uZyB0byBtb3JlIHRoYW4gb25lIGdyb3Vw LiAgVGhlCjs7IGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUgdmFyaWFibGUgYHRhYmJhci1i dWZmZXItZ3JvdXBzLWZ1bmN0aW9uJwo7OyBpcyBjYWxsZWQgZm9yIGVhY2ggYnVmZmVyIHRv IG9idGFpbiB0aGUgZ3JvdXBzIGl0IGJlbG9uZ3MgdG8uICBUaGUKOzsgZGVmYXVsdCBmdW5j dGlvbiBwcm92aWRlZDogYHRhYmJhci1idWZmZXItZ3JvdXBzJyBvcmdhbml6ZXMgYnVmZmVy cwo7OyBkZXBlbmRpbmcgb24gdGhlaXIgbWFqb3IgbW9kZSAoc2VlIHRoYXQgZnVuY3Rpb24g Zm9yIGRldGFpbHMpLgo7Owo7OyBUaGUgImhvbWUiIGJ1dHRvbiB0b2dnbGVzIGRpc3BsYXkg b2YgYnVmZmVyIGdyb3VwcyBvbiB0aGUgdGFiIGJhciwKOzsgYWxsb3dpbmcgdG8gZWFzaWx5 IHNob3cgYW5vdGhlciBidWZmZXIgZ3JvdXAgYnkgY2xpY2tpbmcgb24gdGhlCjs7IGFzc29j aWF0ZWQgdGFiLgo7Owo7OyBLbm93biBwcm9ibGVtczoKOzsKOzsgQnVnIGl0ZW0gIzg1ODMw NiBhdCA8aHR0cDovL3NmLm5ldC90cmFja2VyLz9ncm91cF9pZD03OTMwOT46Cjs7IHRhYmJh ci1tb2RlIGNyYXNoZXMgR05VIEVtYWNzIDIxLjMgb24gTVMtV2luZG93cyA5OC85NS4KOzsK Cjs7OyBIaXN0b3J5Ogo7OwoKOzs7IENvZGU6CgwKOzs7IE9wdGlvbnMKOzsKKGRlZmdyb3Vw IHRhYmJhciBuaWwKICAiRGlzcGxheSBhIHRhYiBiYXIgaW4gdGhlIGhlYWRlciBsaW5lLiIK ICA6Z3JvdXAgJ2NvbnZlbmllbmNlKQoKKGRlZmN1c3RvbSB0YWJiYXItY3ljbGUtc2NvcGUg bmlsCiAgIipTcGVjaWZ5IHRoZSBzY29wZSBvZiBjeWNsaWMgbmF2aWdhdGlvbiB0aHJvdWdo IHRhYnMuClRoZSBmb2xsb3dpbmcgc2NvcGVzIGFyZSBwb3NzaWJsZToKCi0gYHRhYnMnCiAg ICBOYXZpZ2F0ZSB0aHJvdWdoIHZpc2libGUgdGFicyBvbmx5LgotIGBncm91cHMnCiAgICBO YXZpZ2F0ZSB0aHJvdWdoIHRhYiBncm91cHMgb25seS4KLSBkZWZhdWx0CiAgICBOYXZpZ2F0 ZSB0aHJvdWdoIHZpc2libGUgdGFicywgdGhlbiB0aHJvdWdoIHRhYiBncm91cHMuIgogIDpn cm91cCAndGFiYmFyCiAgOnR5cGUgJyhjaG9pY2UgOnRhZyAiQ3ljbGUgdGhyb3VnaC4uLiIK ICAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiVmlzaWJsZSBUYWJzIE9ubHkiIHRhYnMp CiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIlRhYiBHcm91cHMgT25seSIgZ3JvdXBz KQogICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJWaXNpYmxlIFRhYnMgdGhlbiBUYWIg R3JvdXBzIiBuaWwpKSkKCihkZWZjdXN0b20gdGFiYmFyLWF1dG8tc2Nyb2xsLWZsYWcgdAog ICIqTm9uLW5pbCBtZWFucyB0byBhdXRvbWF0aWNhbGx5IHNjcm9sbCB0aGUgdGFiIGJhci4K VGhhdCBpcywgd2hlbiBhIHRhYiBpcyBzZWxlY3RlZCBvdXRzaWRlIG9mIHRoZSB0YWIgYmFy IHZpc2libGUgYXJlYSwKdGhlIHRhYiBiYXIgaXMgc2Nyb2xsZWQgaG9yaXpvbnRhbGx5IHNv IHRoZSBzZWxlY3RlZCB0YWIgYmVjb21lcwp2aXNpYmxlLiIKICA6Z3JvdXAgJ3RhYmJhcgog IDp0eXBlICdib29sZWFuKQoKKGRlZnZhciB0YWJiYXItaW5oaWJpdC1mdW5jdGlvbnMgJyh0 YWJiYXItZGVmYXVsdC1pbmhpYml0LWZ1bmN0aW9uKQogICJMaXN0IG9mIGZ1bmN0aW9ucyB0 byBiZSBjYWxsZWQgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHRhYiBiYXIuClRob3NlIGZ1bmN0 aW9ucyBhcmUgY2FsbGVkIG9uZSBieSBvbmUsIHdpdGggbm8gYXJndW1lbnRzLCB1bnRpbCBv bmUgb2YKdGhlbSByZXR1cm5zIGEgbm9uLW5pbCB2YWx1ZSwgYW5kIHRodXMsIHByZXZlbnRz IHRvIGRpc3BsYXkgdGhlIHRhYgpiYXIuIikKCihkZWZ2YXIgdGFiYmFyLWN1cnJlbnQtdGFi c2V0LWZ1bmN0aW9uIG5pbAogICJGdW5jdGlvbiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudCB0 byBvYnRhaW4gdGhlIGN1cnJlbnQgdGFiIHNldC4KVGhpcyBpcyB0aGUgdGFiIHNldCBkaXNw bGF5ZWQgb24gdGhlIHRhYiBiYXIuIikKCihkZWZ2YXIgdGFiYmFyLXRhYi1sYWJlbC1mdW5j dGlvbiBuaWwKICAiRnVuY3Rpb24gdGhhdCBvYnRhaW5zIGEgdGFiIGxhYmVsIGRpc3BsYXll ZCBvbiB0aGUgdGFiIGJhci4KVGhlIGZ1bmN0aW9uIGlzIHBhc3NlZCBhIHRhYiBhbmQgc2hv dWxkIHJldHVybiBhIHN0cmluZy4iKQoKKGRlZnZhciB0YWJiYXItc2VsZWN0LXRhYi1mdW5j dGlvbiBuaWwKICAiRnVuY3Rpb24gdGhhdCBzZWxlY3QgYSB0YWIuClRoZSBmdW5jdGlvbiBp cyBwYXNzZWQgYSBtb3VzZSBldmVudCBhbmQgYSB0YWIsIGFuZCBzaG91bGQgbWFrZSBpdCB0 aGUKc2VsZWN0ZWQgdGFiLiIpCgooZGVmdmFyIHRhYmJhci1oZWxwLW9uLXRhYi1mdW5jdGlv biBuaWwKICAiRnVuY3Rpb24gdG8gb2J0YWluIGEgaGVscCBzdHJpbmcgZm9yIGEgdGFiLgpU aGUgaGVscCBzdHJpbmcgaXMgZGlzcGxheWVkIHdoZW4gdGhlIG1vdXNlIGlzIG9udG8gdGhl IGJ1dHRvbi4gIFRoZQpmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHRhYiBhbmQgc2hvdWxkIHJl dHVybiBhIGhlbHAgc3RyaW5nIG9yIG5pbCBmb3IKbm9uZS4iKQoKKGRlZnZhciB0YWJiYXIt YnV0dG9uLWxhYmVsLWZ1bmN0aW9uIG5pbAogICJGdW5jdGlvbiB0aGF0IG9idGFpbnMgYSBi dXR0b24gbGFiZWwgZGlzcGxheWVkIG9uIHRoZSB0YWIgYmFyLgpUaGUgZnVuY3Rpb24gaXMg cGFzc2VkIGEgYnV0dG9uIG5hbWUgc2hvdWxkIHJldHVybiBhIHByb3BlcnRpemVkCnN0cmlu ZyB0byBkaXNwbGF5LiIpCgooZGVmdmFyIHRhYmJhci1ob21lLWZ1bmN0aW9uIG5pbAogICJG dW5jdGlvbiBjYWxsZWQgd2hlbiBjbGlja2luZyBvbiB0aGUgdGFiIGJhciBob21lIGJ1dHRv bi4KVGhlIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgbW91c2UgZXZlbnQgcmVjZWl2ZWQuIikK CihkZWZ2YXIgdGFiYmFyLWhvbWUtaGVscC1mdW5jdGlvbiBuaWwKICAiRnVuY3Rpb24gdG8g b2J0YWluIGEgaGVscCBzdHJpbmcgZm9yIHRoZSB0YWIgYmFyIGhvbWUgYnV0dG9uLgpUaGUg aGVscCBzdHJpbmcgaXMgZGlzcGxheWVkIHdoZW4gdGhlIG1vdXNlIGlzIG9udG8gdGhlIGJ1 dHRvbi4KVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4iKQoKKGRl ZnZhciB0YWJiYXItc2Nyb2xsLWxlZnQtZnVuY3Rpb24gJ3RhYmJhci1zY3JvbGwtbGVmdAog ICJGdW5jdGlvbiB0aGF0IHNjcm9sbHMgdGFicyBvbiBsZWZ0LgpUaGUgZnVuY3Rpb24gaXMg cGFzc2VkIHRoZSBtb3VzZSBldmVudCByZWNlaXZlZCB3aGVuIGNsaWNraW5nIG9uIHRoZQpz Y3JvbGwgbGVmdCBidXR0b24uICBJdCBzaG91bGQgc2Nyb2xsIHRoZSBjdXJyZW50IHRhYiBz ZXQuIikKCihkZWZ2YXIgdGFiYmFyLXNjcm9sbC1sZWZ0LWhlbHAtZnVuY3Rpb24gJ3RhYmJh ci1zY3JvbGwtbGVmdC1oZWxwCiAgIkZ1bmN0aW9uIHRvIG9idGFpbiBhIGhlbHAgc3RyaW5n IGZvciB0aGUgc2Nyb2xsIGxlZnQgYnV0dG9uLgpUaGUgaGVscCBzdHJpbmcgaXMgZGlzcGxh eWVkIHdoZW4gdGhlIG1vdXNlIGlzIG9udG8gdGhlIGJ1dHRvbi4KVGhlIGZ1bmN0aW9uIGlz IGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4iKQoKKGRlZnZhciB0YWJiYXItc2Nyb2xsLXJp Z2h0LWZ1bmN0aW9uICd0YWJiYXItc2Nyb2xsLXJpZ2h0CiAgIkZ1bmN0aW9uIHRoYXQgc2Ny b2xscyB0YWJzIG9uIHJpZ2h0LgpUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBtb3VzZSBl dmVudCByZWNlaXZlZCB3aGVuIGNsaWNraW5nIG9uIHRoZQpzY3JvbGwgcmlnaHQgYnV0dG9u LiAgSXQgc2hvdWxkIHNjcm9sbCB0aGUgY3VycmVudCB0YWIgc2V0LiIpCgooZGVmdmFyIHRh YmJhci1zY3JvbGwtcmlnaHQtaGVscC1mdW5jdGlvbiAndGFiYmFyLXNjcm9sbC1yaWdodC1o ZWxwCiAgIkZ1bmN0aW9uIHRvIG9idGFpbiBhIGhlbHAgc3RyaW5nIGZvciB0aGUgc2Nyb2xs IHJpZ2h0IGJ1dHRvbi4KVGhlIGhlbHAgc3RyaW5nIGlzIGRpc3BsYXllZCB3aGVuIHRoZSBt b3VzZSBpcyBvbnRvIHRoZSBidXR0b24uClRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBu byBhcmd1bWVudHMuIikKDAo7OzsgTWlzYy4KOzsKKGV2YWwtYW5kLWNvbXBpbGUKICAoZGVm YWxpYXMgJ3RhYmJhci1kaXNwbGF5LXVwZGF0ZQogICAgKGlmIChmYm91bmRwICdmb3JjZS13 aW5kb3ctdXBkYXRlKQogICAgICAgICMnKGxhbWJkYSAoKSAoZm9yY2Utd2luZG93LXVwZGF0 ZSAoc2VsZWN0ZWQtd2luZG93KSkpCiAgICAgICdmb3JjZS1tb2RlLWxpbmUtdXBkYXRlKSkp CgooZGVmc3Vic3QgdGFiYmFyLWNsaWNrLXAgKGV2ZW50KQogICJSZXR1cm4gbm9uLW5pbCBp ZiBFVkVOVCBpcyBhIG1vdXNlIGNsaWNrIGV2ZW50LiIKICAobWVtcSAnY2xpY2sgKGV2ZW50 LW1vZGlmaWVycyBldmVudCkpKQoKKGRlZnVuIHRhYmJhci1zaG9ydGVuIChzdHIgd2lkdGgp CiAgIlJldHVybiBhIHNob3J0ZW5lZCBzdHJpbmcgZnJvbSBTVFIgdGhhdCBmaXRzIGluIHRo ZSBnaXZlbiBkaXNwbGF5IFdJRFRILgpXSURUSCBpcyBzcGVjaWZpZWQgaW4gdGVybXMgb2Yg Y2hhcmFjdGVyIGRpc3BsYXkgd2lkdGggaW4gdGhlIGN1cnJlbnQKYnVmZmVyOyBzZWUgYWxz byBgY2hhci13aWR0aCcuICBJZiBTVFIgZGlzcGxheSB3aWR0aCBpcyBncmVhdGVyIHRoYW4K V0lEVEgsIFNUUiBpcyB0cnVuY2F0ZWQgYW5kIGFuIGVsbGlwc2lzIHN0cmluZyBcIi4uLlwi IGlzIGluc2VydGVkIGF0CmVuZCBvciBpbiB0aGUgbWlkZGxlIG9mIHRoZSByZXR1cm5lZCBz dHJpbmcsIGRlcGVuZGluZyBvbiBhdmFpbGFibGUKcm9vbS4iCiAgKGxldCogKChuICAobGVu Z3RoIHN0cikpCiAgICAgICAgIChzdyAoc3RyaW5nLXdpZHRoIHN0cikpCiAgICAgICAgIChl bCAiLi4uIikKICAgICAgICAgKGV3IChzdHJpbmctd2lkdGggZWwpKQogICAgICAgICAodyAg MCkKICAgICAgICAgKGkgIDApKQogICAgKGNvbmQKICAgICA7OyBTVFIgZml0IGluIFdJRFRI LCByZXR1cm4gaXQuCiAgICAgKCg8PSBzdyB3aWR0aCkKICAgICAgc3RyKQogICAgIDs7IFRo ZXJlIGlzbid0IGVub3VnaCByb29tIGZvciB0aGUgZWxsaXBzaXMsIFNUUiBpcyBqdXN0CiAg ICAgOzsgdHJ1bmNhdGVkIHRvIGZpdCBpbiBXSURUSC4KICAgICAoKDw9IHdpZHRoIGV3KQog ICAgICAod2hpbGUgKDwgdyB3aWR0aCkKICAgICAgICAoc2V0cSB3ICgrIHcgKGNoYXItd2lk dGggKGFyZWYgc3RyIGkpKSkKICAgICAgICAgICAgICBpICgxKyBpKSkpCiAgICAgIChzdWJz dHJpbmcgc3RyIDAgaSkpCiAgICAgOzsgVGhlcmUgaXNuJ3QgZW5vdWdoIHJvb20gdG8gaW5z ZXJ0IHRoZSBlbGxpcHNpcyBpbiB0aGUgbWlkZGxlCiAgICAgOzsgb2YgdGhlIHRydW5jYXRl ZCBzdHJpbmcsIHNvIHB1dCB0aGUgZWxsaXBzaXMgYXQgZW5kLgogICAgICgoemVyb3AgKHNl dHEgc3cgKC8gKC0gd2lkdGggZXcpIDIpKSkKICAgICAgKHNldHEgd2lkdGggKC0gd2lkdGgg ZXcpKQogICAgICAod2hpbGUgKDwgdyB3aWR0aCkKICAgICAgICAoc2V0cSB3ICgrIHcgKGNo YXItd2lkdGggKGFyZWYgc3RyIGkpKSkKICAgICAgICAgICAgICBpICgxKyBpKSkpCiAgICAg IChjb25jYXQgKHN1YnN0cmluZyBzdHIgMCBpKSBlbCkpCiAgICAgOzsgUHV0IHRoZSBlbGxp cHNpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nLgogICAgICh0CiAg ICAgICh3aGlsZSAoPCB3IHN3KQogICAgICAgIChzZXRxIHcgKCsgdyAoY2hhci13aWR0aCAo YXJlZiBzdHIgaSkpKQogICAgICAgICAgICAgIGkgKDErIGkpKSkKICAgICAgKHNldHEgdyAo KyB3IGV3KSkKICAgICAgKHdoaWxlICg8IHcgd2lkdGgpCiAgICAgICAgKHNldHEgbiAoMS0g bikKICAgICAgICAgICAgICB3ICgrIHcgKGNoYXItd2lkdGggKGFyZWYgc3RyIG4pKSkpKQog ICAgICAoY29uY2F0IChzdWJzdHJpbmcgc3RyIDAgaSkgZWwgKHN1YnN0cmluZyBzdHIgbikp KQogICAgICkpKQoMCjs7OyBUYWIgYW5kIHRhYiBzZXQKOzsKKGRlZnN1YnN0IHRhYmJhci1t YWtlLXRhYiAob2JqZWN0IHRhYnNldCkKICAiUmV0dXJuIGEgbmV3IHRhYiB3aXRoIHZhbHVl IE9CSkVDVC4KVEFCU0VUIGlzIHRoZSB0YWIgc2V0IHRoZSB0YWIgYmVsb25ncyB0by4iCiAg KGNvbnMgb2JqZWN0IHRhYnNldCkpCgooZGVmc3Vic3QgdGFiYmFyLXRhYi12YWx1ZSAodGFi KQogICJSZXR1cm4gdGhlIHZhbHVlIG9mIHRhYiBUQUIuIgogIChjYXIgdGFiKSkKCihkZWZz dWJzdCB0YWJiYXItdGFiLXRhYnNldCAodGFiKQogICJSZXR1cm4gdGhlIHRhYiBzZXQgVEFC IGJlbG9uZ3MgdG8uIgogIChjZHIgdGFiKSkKCihkZWZ2YXIgdGFiYmFyLXRhYnNldHMgbmls CiAgIlRoZSB0YWIgc2V0cyBzdG9yZS4iKQoKKGRlZnZhciB0YWJiYXItdGFic2V0cy10YWJz ZXQgbmlsCiAgIlRoZSBzcGVjaWFsIHRhYiBzZXQgb2YgZXhpc3RpbmcgdGFiIHNldHMuIikK CihkZWZ2YXIgdGFiYmFyLWN1cnJlbnQtdGFic2V0IG5pbAogICJUaGUgdGFiIHNldCBjdXJy ZW50bHkgZGlzcGxheWVkIG9uIHRoZSB0YWIgYmFyLiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZl ci1sb2NhbCAndGFiYmFyLWN1cnJlbnQtdGFic2V0KQoKKGRlZnZhciB0YWJiYXItaW5pdC1o b29rIG5pbAogICJIb29rIHJ1biBhZnRlciB0YWIgYmFyIGRhdGEgaGFzIGJlZW4gaW5pdGlh bGl6ZWQuCllvdSBzaG91bGQgdXNlIHRoaXMgaG9vayB0byBpbml0aWFsaXplIGRlcGVuZGVu dCBkYXRhLiIpCgooZGVmc3Vic3QgdGFiYmFyLWluaXQtdGFic2V0cy1zdG9yZSAoKQogICJJ bml0aWFsaXplIHRoZSB0YWIgc2V0IHN0b3JlLiIKICAoc2V0cSB0YWJiYXItdGFic2V0cyAo bWFrZS12ZWN0b3IgMzEgMCkKICAgICAgICB0YWJiYXItdGFic2V0cy10YWJzZXQgKG1ha2Ut c3ltYm9sICJ0YWJiYXItdGFic2V0cy10YWJzZXQiKSkKICAocHV0IHRhYmJhci10YWJzZXRz LXRhYnNldCAnc3RhcnQgMCkKICAocnVuLWhvb2tzICd0YWJiYXItaW5pdC1ob29rKSkKCihk ZWZ2YXIgdGFiYmFyLXF1aXQtaG9vayBuaWwKICAiSG9vayBydW4gYWZ0ZXIgdGFiIGJhciBk YXRhIGhhcyBiZWVuIGZyZWVkLgpZb3Ugc2hvdWxkIHVzZSB0aGlzIGhvb2sgdG8gcmVzZXQg ZGVwZW5kZW50IGRhdGEuIikKCihkZWZzdWJzdCB0YWJiYXItZnJlZS10YWJzZXRzLXN0b3Jl ICgpCiAgIkZyZWUgdGhlIHRhYiBzZXQgc3RvcmUuIgogIChzZXRxIHRhYmJhci10YWJzZXRz IG5pbAogICAgICAgIHRhYmJhci10YWJzZXRzLXRhYnNldCBuaWwpCiAgKHJ1bi1ob29rcyAn dGFiYmFyLXF1aXQtaG9vaykpCgo7OyBEZWZpbmUgYW4gImh5Z2llbmljIiBmdW5jdGlvbiBm cmVlIG9mIHNpZGUgZWZmZWN0IGJldHdlZW4gaXRzIGxvY2FsCjs7IHZhcmlhYmxlcyBhbmQg dGhvc2Ugb2YgdGhlIGNhbGxlZS4KKGV2YWwtYW5kLWNvbXBpbGUKICAoZGVmYWxpYXMgJ3Rh YmJhci1tYXAtdGFic2V0cwogICAgKGxldCAoKGZ1bmN0aW9uIChtYWtlLXN5bWJvbCAiZnVu Y3Rpb24iKSkKICAgICAgICAgIChyZXN1bHQgICAobWFrZS1zeW1ib2wgInJlc3VsdCIpKQog ICAgICAgICAgKHRhYnNldCAgIChtYWtlLXN5bWJvbCAidGFic2V0IikpKQogICAgICBgKGxh bWJkYSAoLGZ1bmN0aW9uKQogICAgICAgICAiQXBwbHkgRlVOQ1RJT04gdG8gZWFjaCB0YWIg c2V0LCBhbmQgbWFrZSBhIGxpc3Qgb2YgdGhlIHJlc3VsdHMuClRoZSByZXN1bHQgaXMgYSBs aXN0IGp1c3QgYXMgbG9uZyBhcyB0aGUgbnVtYmVyIG9mIGV4aXN0aW5nIHRhYiBzZXRzLiIK ICAgICAgICAgKGxldCAoLHJlc3VsdCkKICAgICAgICAgICAobWFwYXRvbXMKICAgICAgICAg ICAgIycobGFtYmRhICgsdGFic2V0KQogICAgICAgICAgICAgICAgKHB1c2ggKGZ1bmNhbGwg LGZ1bmN0aW9uICx0YWJzZXQpICxyZXN1bHQpKQogICAgICAgICAgICB0YWJiYXItdGFic2V0 cykKICAgICAgICAgICAscmVzdWx0KSkpKSkKCihkZWZ1biB0YWJiYXItbWFrZS10YWJzZXQg KG5hbWUgJnJlc3Qgb2JqZWN0cykKICAiTWFrZSBhIG5ldyB0YWIgc2V0IHdob3NlIG5hbWUg aXMgdGhlIHN0cmluZyBOQU1FLgpJdCBpcyBpbml0aWFsaXplZCB3aXRoIHRhYnMgYnVpbGQg ZnJvbSB0aGUgbGlzdCBvZiBPQkpFQ1RTLiIKICAobGV0KiAoKHRhYnNldCAoaW50ZXJuIG5h bWUgdGFiYmFyLXRhYnNldHMpKQogICAgICAgICAodGFicyAobWFwY2FyICMnKGxhbWJkYSAo b2JqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAodGFiYmFyLW1ha2UtdGFiIG9i amVjdCB0YWJzZXQpKQogICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMpKSkKICAgIChz ZXQgdGFic2V0IHRhYnMpCiAgICAocHV0IHRhYnNldCAnc2VsZWN0IChjYXIgdGFicykpCiAg ICAocHV0IHRhYnNldCAnc3RhcnQgMCkKICAgIHRhYnNldCkpCgooZGVmc3Vic3QgdGFiYmFy LWdldC10YWJzZXQgKG5hbWUpCiAgIlJldHVybiB0aGUgdGFiIHNldCB3aG9zZSBuYW1lIGlz IHRoZSBzdHJpbmcgTkFNRS4KUmV0dXJuIG5pbCBpZiBub3QgZm91bmQuIgogIChpbnRlcm4t c29mdCBuYW1lIHRhYmJhci10YWJzZXRzKSkKCihkZWZzdWJzdCB0YWJiYXItZGVsZXRlLXRh YnNldCAodGFic2V0KQogICJEZWxldGUgdGhlIHRhYiBzZXQgVEFCU0VULgpUaGF0IGlzLCBy ZW1vdmUgaXQgZnJvbSB0aGUgdGFiIHNldHMgc3RvcmUuIgogICh1bmludGVybiB0YWJzZXQg dGFiYmFyLXRhYnNldHMpKQoKKGRlZnN1YnN0IHRhYmJhci10YWJzICh0YWJzZXQpCiAgIlJl dHVybiB0aGUgbGlzdCBvZiB0YWJzIGluIFRBQlNFVC4iCiAgKHN5bWJvbC12YWx1ZSB0YWJz ZXQpKQoKKGRlZnN1YnN0IHRhYmJhci10YWItdmFsdWVzICh0YWJzZXQpCiAgIlJldHVybiB0 aGUgbGlzdCBvZiB0YWIgdmFsdWVzIGluIFRBQlNFVC4iCiAgKG1hcGNhciAndGFiYmFyLXRh Yi12YWx1ZSAodGFiYmFyLXRhYnMgdGFic2V0KSkpCgooZGVmc3Vic3QgdGFiYmFyLWdldC10 YWIgKG9iamVjdCB0YWJzZXQpCiAgIlNlYXJjaCBmb3IgYSB0YWIgd2l0aCB2YWx1ZSBPQkpF Q1QgaW4gVEFCU0VULgpSZXR1cm4gdGhlIHRhYiBmb3VuZCwgb3IgbmlsIGlmIG5vdCBmb3Vu ZC4iCiAgKGFzc29jIG9iamVjdCAodGFiYmFyLXRhYnMgdGFic2V0KSkpCgooZGVmc3Vic3Qg dGFiYmFyLW1lbWJlciAodGFiIHRhYnNldCkKICAiUmV0dXJuIG5vbi1uaWwgaWYgVEFCIGlz IGluIFRBQlNFVC4iCiAgKG9yIChlcSAodGFiYmFyLXRhYi10YWJzZXQgdGFiKSB0YWJzZXQp CiAgICAgIChtZW1xIHRhYiAodGFiYmFyLXRhYnMgdGFic2V0KSkpKQoKKGRlZnN1YnN0IHRh YmJhci10ZW1wbGF0ZSAodGFic2V0KQogICJSZXR1cm4gdGhlIGNhY2hlZCB2aXN1YWwgcmVw cmVzZW50YXRpb24gb2YgVEFCU0VULgpUaGF0IGlzLCBhIGBoZWFkZXItbGluZS1mb3JtYXQn IHRlbXBsYXRlLCBvciBuaWwgaWYgdGhlIGNhY2hlIGlzCmVtcHR5LiIKICAoZ2V0IHRhYnNl dCAndGVtcGxhdGUpKQoKKGRlZnN1YnN0IHRhYmJhci1zZXQtdGVtcGxhdGUgKHRhYnNldCB0 ZW1wbGF0ZSkKICAiU2V0IHRoZSBjYWNoZWQgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIFRB QlNFVCB0byBURU1QTEFURS4KVEVNUExBVEUgbXVzdCBiZSBhIHZhbGlkIGBoZWFkZXItbGlu ZS1mb3JtYXQnIHRlbXBsYXRlLCBvciBuaWwgdG8KY2xlYW51cCB0aGUgY2FjaGUuIgogIChw dXQgdGFic2V0ICd0ZW1wbGF0ZSB0ZW1wbGF0ZSkpCgooZGVmc3Vic3QgdGFiYmFyLXNlbGVj dGVkLXRhYiAodGFic2V0KQogICJSZXR1cm4gdGhlIHRhYiBzZWxlY3RlZCBpbiBUQUJTRVQu IgogIChnZXQgdGFic2V0ICdzZWxlY3QpKQoKKGRlZnN1YnN0IHRhYmJhci1zZWxlY3RlZC12 YWx1ZSAodGFic2V0KQogICJSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB0YWIgc2VsZWN0ZWQg aW4gVEFCU0VULiIKICAodGFiYmFyLXRhYi12YWx1ZSAodGFiYmFyLXNlbGVjdGVkLXRhYiB0 YWJzZXQpKSkKCihkZWZzdWJzdCB0YWJiYXItc2VsZWN0ZWQtcCAodGFiIHRhYnNldCkKICAi UmV0dXJuIG5vbi1uaWwgaWYgVEFCIGlzIHRoZSBzZWxlY3RlZCB0YWIgaW4gVEFCU0VULiIK ICAoZXEgdGFiICh0YWJiYXItc2VsZWN0ZWQtdGFiIHRhYnNldCkpKQoKKGRlZnZhciB0YWJi YXItLXRyYWNrLXNlbGVjdGVkIG5pbCkKCihkZWZzdWJzdCB0YWJiYXItc2VsZWN0LXRhYiAo dGFiIHRhYnNldCkKICAiTWFrZSBUQUIgdGhlIHNlbGVjdGVkIHRhYiBpbiBUQUJTRVQuCkRv ZXMgbm90aGluZyBpZiBUQUIgaXMgbm90IGZvdW5kIGluIFRBQlNFVC4KUmV0dXJuIFRBQiBp ZiBzZWxlY3RlZCwgbmlsIGlmIG5vdC4iCiAgKHdoZW4gKHRhYmJhci1tZW1iZXIgdGFiIHRh YnNldCkKICAgICh1bmxlc3MgKHRhYmJhci1zZWxlY3RlZC1wIHRhYiB0YWJzZXQpCiAgICAg ICh0YWJiYXItc2V0LXRlbXBsYXRlIHRhYnNldCBuaWwpCiAgICAgIChzZXRxIHRhYmJhci0t dHJhY2stc2VsZWN0ZWQgdGFiYmFyLWF1dG8tc2Nyb2xsLWZsYWcpKQogICAgKHB1dCB0YWJz ZXQgJ3NlbGVjdCB0YWIpKSkKCihkZWZzdWJzdCB0YWJiYXItc2VsZWN0LXRhYi12YWx1ZSAo b2JqZWN0IHRhYnNldCkKICAiTWFrZSB0aGUgdGFiIHdpdGggdmFsdWUgT0JKRUNULCB0aGUg c2VsZWN0ZWQgdGFiIGluIFRBQlNFVC4KRG9lcyBub3RoaW5nIGlmIGEgdGFiIHdpdGggdmFs dWUgT0JKRUNUIGlzIG5vdCBmb3VuZCBpbiBUQUJTRVQuClJldHVybiB0aGUgdGFiIHNlbGVj dGVkLCBvciBuaWwgaWYgbm90aGluZyB3YXMgc2VsZWN0ZWQuIgogICh0YWJiYXItc2VsZWN0 LXRhYiAodGFiYmFyLWdldC10YWIgb2JqZWN0IHRhYnNldCkgdGFic2V0KSkKCihkZWZzdWJz dCB0YWJiYXItc3RhcnQgKHRhYnNldCkKICAiUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZmly c3QgdmlzaWJsZSB0YWIgaW4gVEFCU0VULiIKICAoZ2V0IHRhYnNldCAnc3RhcnQpKQoKKGRl ZnN1YnN0IHRhYmJhci12aWV3ICh0YWJzZXQpCiAgIlJldHVybiB0aGUgbGlzdCBvZiB2aXNp YmxlIHRhYnMgaW4gVEFCU0VULgpUaGF0IGlzLCB0aGUgc3ViLWxpc3Qgb2YgdGFicyBzdGFy dGluZyBhdCB0aGUgZmlyc3QgdmlzaWJsZSBvbmUuIgogIChudGhjZHIgKHRhYmJhci1zdGFy dCB0YWJzZXQpICh0YWJiYXItdGFicyB0YWJzZXQpKSkKCihkZWZ1biB0YWJiYXItYWRkLXRh YiAodGFic2V0IG9iamVjdCAmb3B0aW9uYWwgYXBwZW5kKQogICJBZGQgdG8gVEFCU0VUIGEg dGFiIHdpdGggdmFsdWUgT0JKRUNUIGlmIHRoZXJlIGlzbid0IG9uZSB0aGVyZSB5ZXQuCklm IHRoZSB0YWIgaXMgYWRkZWQsIGl0IGlzIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl IHRhYiBsaXN0LAp1bmxlc3MgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IEFQUEVORCBpcyBub24t bmlsLCBpbiB3aGljaCBjYXNlIGl0IGlzCmFkZGVkIGF0IHRoZSBlbmQuIgogIChsZXQgKCh0 YWJzICh0YWJiYXItdGFicyB0YWJzZXQpKSkKICAgIChpZiAodGFiYmFyLWdldC10YWIgb2Jq ZWN0IHRhYnNldCkKICAgICAgICB0YWJzCiAgICAgIChsZXQgKCh0YWIgKHRhYmJhci1tYWtl LXRhYiBvYmplY3QgdGFic2V0KSkpCiAgICAgICAgKHRhYmJhci1zZXQtdGVtcGxhdGUgdGFi c2V0IG5pbCkKICAgICAgICAoc2V0IHRhYnNldCAoaWYgYXBwZW5kCiAgICAgICAgICAgICAg ICAgICAgICAgIChhcHBlbmQgdGFicyAobGlzdCB0YWIpKQogICAgICAgICAgICAgICAgICAg ICAgKGNvbnMgdGFiIHRhYnMpKSkpKSkpCgooZGVmdW4gdGFiYmFyLWRlbGV0ZS10YWIgKHRh YikKICAiUmVtb3ZlIFRBQiBmcm9tIGl0cyB0YWIgc2V0LiIKICAobGV0KiAoKHRhYnNldCAo dGFiYmFyLXRhYi10YWJzZXQgdGFiKSkKICAgICAgICAgKHRhYnMgICAodGFiYmFyLXRhYnMg dGFic2V0KSkKICAgICAgICAgKHNlbCAgICAoZXEgdGFiICh0YWJiYXItc2VsZWN0ZWQtdGFi IHRhYnNldCkpKQogICAgICAgICAobmV4dCAgIChhbmQgc2VsIChjZHIgKG1lbXEgdGFiIHRh YnMpKSkpKQogICAgKHRhYmJhci1zZXQtdGVtcGxhdGUgdGFic2V0IG5pbCkKICAgIChzZXRx IHRhYnMgKGRlbHEgdGFiIHRhYnMpKQogICAgOzsgV2hlbiB0aGUgc2VsZWN0ZWQgdGFiIGlz IGRlbGV0ZWQsIHNlbGVjdCB0aGUgbmV4dCBvbmUsIGlmCiAgICA7OyBhdmFpbGFibGUsIG9y IHRoZSBsYXN0IG9uZSBvdGhlcndpc2UuCiAgICAoYW5kIHNlbCAodGFiYmFyLXNlbGVjdC10 YWIgKGNhciAob3IgbmV4dCAobGFzdCB0YWJzKSkpIHRhYnNldCkpCiAgICAoc2V0IHRhYnNl dCB0YWJzKSkpCgooZGVmdW4gdGFiYmFyLXNjcm9sbCAodGFic2V0IGNvdW50KQogICJTY3Jv bGwgdGhlIHZpc2libGUgdGFicyBpbiBUQUJTRVQgb2YgQ09VTlQgdW5pdHMuCklmIENPVU5U IGlzIHBvc2l0aXZlIG1vdmUgdGhlIHZpZXcgb24gcmlnaHQuICBJZiBDT1VOVCBpcyBuZWdh dGl2ZSwKbW92ZSB0aGUgdmlldyBvbiBsZWZ0LiIKICAobGV0ICgoc3RhcnQgKG1pbiAobWF4 IDAgKCsgKHRhYmJhci1zdGFydCB0YWJzZXQpIGNvdW50KSkKICAgICAgICAgICAgICAgICAg ICAoMS0gKGxlbmd0aCAodGFiYmFyLXRhYnMgdGFic2V0KSkpKSkpCiAgICAod2hlbiAoLz0g c3RhcnQgKHRhYmJhci1zdGFydCB0YWJzZXQpKQogICAgICAodGFiYmFyLXNldC10ZW1wbGF0 ZSB0YWJzZXQgbmlsKQogICAgICAocHV0IHRhYnNldCAnc3RhcnQgc3RhcnQpKSkpCgooZGVm dW4gdGFiYmFyLXRhYi1uZXh0ICh0YWJzZXQgdGFiICZvcHRpb25hbCBiZWZvcmUpCiAgIlNl YXJjaCBpbiBUQUJTRVQgZm9yIHRoZSB0YWIgYWZ0ZXIgVEFCLgpJZiBvcHRpb25hbCBhcmd1 bWVudCBCRUZPUkUgaXMgbm9uLW5pbCwgc2VhcmNoIGZvciB0aGUgdGFiIGJlZm9yZQpUQUIu ICBSZXR1cm4gdGhlIHRhYiBmb3VuZCwgb3IgbmlsIG90aGVyd2lzZS4iCiAgKGxldCogKGxh c3QgKHRhYnMgKHRhYmJhci10YWJzIHRhYnNldCkpKQogICAgKHdoaWxlIChhbmQgdGFicyAo bm90IChlcSB0YWIgKGNhciB0YWJzKSkpKQogICAgICAoc2V0cSBsYXN0IChjYXIgdGFicykK ICAgICAgICAgICAgdGFicyAoY2RyIHRhYnMpKSkKICAgIChhbmQgdGFicyAoaWYgYmVmb3Jl IGxhc3QgKG50aCAxIHRhYnMpKSkpKQoKKGRlZnVuIHRhYmJhci1jdXJyZW50LXRhYnNldCAo Jm9wdGlvbmFsIHVwZGF0ZSkKICAiUmV0dXJuIHRoZSB0YWIgc2V0IGN1cnJlbnRseSBkaXNw bGF5ZWQgb24gdGhlIHRhYiBiYXIuCklmIG9wdGlvbmFsIGFyZ3VtZW50IFVQREFURSBpcyBu b24tbmlsLCBjYWxsIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24KYHRhYmJhci1jdXJyZW50 LXRhYnNldC1mdW5jdGlvbicgdG8gb2J0YWluIGl0LiAgT3RoZXJ3aXNlIHJldHVybiB0aGUK Y3VycmVudCBjYWNoZWQgY29weS4iCiAgKGFuZCB1cGRhdGUgdGFiYmFyLWN1cnJlbnQtdGFi c2V0LWZ1bmN0aW9uCiAgICAgICAoc2V0cSB0YWJiYXItY3VycmVudC10YWJzZXQKICAgICAg ICAgICAgIChmdW5jYWxsIHRhYmJhci1jdXJyZW50LXRhYnNldC1mdW5jdGlvbikpKQogIHRh YmJhci1jdXJyZW50LXRhYnNldCkKCihkZWZ1biB0YWJiYXItZ2V0LXRhYnNldHMtdGFic2V0 ICgpCiAgIlJldHVybiB0aGUgdGFiIHNldCBvZiBzZWxlY3RlZCB0YWJzIGluIGV4aXN0aW5n IHRhYiBzZXRzLiIKICAoc2V0IHRhYmJhci10YWJzZXRzLXRhYnNldCAodGFiYmFyLW1hcC10 YWJzZXRzICd0YWJiYXItc2VsZWN0ZWQtdGFiKSkKICAodGFiYmFyLXNjcm9sbCB0YWJiYXIt dGFic2V0cy10YWJzZXQgMCkKICAodGFiYmFyLXNldC10ZW1wbGF0ZSB0YWJiYXItdGFic2V0 cy10YWJzZXQgbmlsKQogIHRhYmJhci10YWJzZXRzLXRhYnNldCkKDAo7OzsgRmFjZXMKOzsK KGRlZmZhY2UgdGFiYmFyLWRlZmF1bHQKICAnKAogICAgOzsoKChjbGFzcyBjb2xvciBncmF5 c2NhbGUpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKICAgIDs7IDppbmhlcml0IHZhcmlhYmxlLXBp dGNoCiAgICA7OyA6aGVpZ2h0IDAuOAogICAgOzsgOmZvcmVncm91bmQgImdyYXk1MCIKICAg IDs7IDpiYWNrZ3JvdW5kICJncmV5NzUiCiAgICA7OyApCiAgICAoKChjbGFzcyBjb2xvciBn cmF5c2NhbGUpIChiYWNrZ3JvdW5kIGRhcmspKQogICAgIDppbmhlcml0IHZhcmlhYmxlLXBp dGNoCiAgICAgOmhlaWdodCAwLjgKICAgICA6Zm9yZWdyb3VuZCAiZ3JleTc1IgogICAgIDpi YWNrZ3JvdW5kICJncmF5NTAiCiAgICAgKQogICAgKCgoY2xhc3MgbW9ubykgKGJhY2tncm91 bmQgbGlnaHQpKQogICAgIDppbmhlcml0IHZhcmlhYmxlLXBpdGNoCiAgICAgOmhlaWdodCAw LjgKICAgICA6Zm9yZWdyb3VuZCAiYmxhY2siCiAgICAgOmJhY2tncm91bmQgIndoaXRlIgog ICAgICkKICAgICgoKGNsYXNzIG1vbm8pIChiYWNrZ3JvdW5kIGRhcmspKQogICAgIDppbmhl cml0IHZhcmlhYmxlLXBpdGNoCiAgICAgOmhlaWdodCAwLjgKICAgICA6Zm9yZWdyb3VuZCAi d2hpdGUiCiAgICAgOmJhY2tncm91bmQgImJsYWNrIgogICAgICkKICAgICh0CiAgICAgOmlu aGVyaXQgdmFyaWFibGUtcGl0Y2gKICAgICA6aGVpZ2h0IDAuOAogICAgIDpmb3JlZ3JvdW5k ICJncmF5NTAiCiAgICAgOmJhY2tncm91bmQgImdyYXk3NSIKICAgICApKQogICJEZWZhdWx0 IGZhY2UgdXNlZCBpbiB0aGUgdGFiIGJhci4iCiAgOmdyb3VwICd0YWJiYXIpCgooZGVmZmFj ZSB0YWJiYXItdW5zZWxlY3RlZAogICcoKHQKICAgICA6aW5oZXJpdCB0YWJiYXItZGVmYXVs dAogICAgIDpib3ggKDpsaW5lLXdpZHRoIDEgOmNvbG9yICJ3aGl0ZSIgOnN0eWxlIHJlbGVh c2VkLWJ1dHRvbikKICAgICApKQogICJGYWNlIHVzZWQgZm9yIHVuc2VsZWN0ZWQgdGFicy4i CiAgOmdyb3VwICd0YWJiYXIpCgooZGVmZmFjZSB0YWJiYXItc2VsZWN0ZWQKICAnKCh0CiAg ICAgOmluaGVyaXQgdGFiYmFyLWRlZmF1bHQKICAgICA6Ym94ICg6bGluZS13aWR0aCAxIDpj b2xvciAid2hpdGUiIDpzdHlsZSBwcmVzc2VkLWJ1dHRvbikKICAgICA6Zm9yZWdyb3VuZCAi Ymx1ZSIKICAgICApKQogICJGYWNlIHVzZWQgZm9yIHRoZSBzZWxlY3RlZCB0YWIuIgogIDpn cm91cCAndGFiYmFyKQoKKGRlZmZhY2UgdGFiYmFyLWhpZ2hsaWdodAogICcoKHQKICAgICA6 dW5kZXJsaW5lIHQKICAgICApKQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IGEgdGFiIGR1 cmluZyBtb3VzZS1vdmVycy4iCiAgOmdyb3VwICd0YWJiYXIpCgooZGVmZmFjZSB0YWJiYXIt c2VwYXJhdG9yCiAgJygodAogICAgIDppbmhlcml0IHRhYmJhci1kZWZhdWx0CiAgICAgOmhl aWdodCAwLjEKICAgICApKQogICJGYWNlIHVzZWQgZm9yIHNlcGFyYXRvcnMgYmV0d2VlbiB0 YWJzLiIKICA6Z3JvdXAgJ3RhYmJhcikKCihkZWZmYWNlIHRhYmJhci1idXR0b24KICAnKCh0 CiAgICAgOmluaGVyaXQgdGFiYmFyLWRlZmF1bHQKICAgICA6Ym94ICg6bGluZS13aWR0aCAx IDpjb2xvciAid2hpdGUiIDpzdHlsZSByZWxlYXNlZC1idXR0b24pCiAgICAgOmZvcmVncm91 bmQgImRhcmsgcmVkIgogICAgICkpCiAgIkZhY2UgdXNlZCBmb3IgdGFiIGJhciBidXR0b25z LiIKICA6Z3JvdXAgJ3RhYmJhcikKCihkZWZmYWNlIHRhYmJhci1idXR0b24taGlnaGxpZ2h0 CiAgJygodAogICAgIDppbmhlcml0IHRhYmJhci1kZWZhdWx0CiAgICAgKSkKICAiRmFjZSB1 c2VkIHRvIGhpZ2hsaWdodCBhIGJ1dHRvbiBkdXJpbmcgbW91c2Utb3ZlcnMuIgogIDpncm91 cCAndGFiYmFyKQoKKGRlZmN1c3RvbSB0YWJiYXItYmFja2dyb3VuZC1jb2xvciBuaWwKICAi KkJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRhYiBiYXIuCkJ5IGRlZmF1bHQsIHVzZSB0aGUg YmFja2dyb3VuZCBjb2xvciBzcGVjaWZpZWQgZm9yIHRoZQpgdGFiYmFyLWRlZmF1bHQnIGZh Y2UgKG9yIGluaGVyaXRlZCBmcm9tIGFub3RoZXIgZmFjZSksIG9yIHRoZQpiYWNrZ3JvdW5k IGNvbG9yIG9mIHRoZSBgZGVmYXVsdCcgZmFjZSBvdGhlcndpc2UuIgogIDpncm91cCAndGFi YmFyCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIkRlZmF1bHQiIG5pbCkKICAgICAg ICAgICAgICAgICAoY29sb3IpKSkKCihkZWZzdWJzdCB0YWJiYXItYmFja2dyb3VuZC1jb2xv ciAoKQogICJSZXR1cm4gdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRhYiBiYXIuIgog IChvciB0YWJiYXItYmFja2dyb3VuZC1jb2xvcgogICAgICAobGV0KiAoKGZhY2UgJ3RhYmJh ci1kZWZhdWx0KQogICAgICAgICAgICAgKGNvbG9yIChmYWNlLWJhY2tncm91bmQgZmFjZSkp KQogICAgICAgICh3aGlsZSAobnVsbCBjb2xvcikKICAgICAgICAgIChvciAoZmFjZXAgKHNl dHEgZmFjZSAoZmFjZS1hdHRyaWJ1dGUgZmFjZSA6aW5oZXJpdCkpKQogICAgICAgICAgICAg IChzZXRxIGZhY2UgJ2RlZmF1bHQpKQogICAgICAgICAgKHNldHEgY29sb3IgKGZhY2UtYmFj a2dyb3VuZCBmYWNlKSkpCiAgICAgICAgY29sb3IpKSkKDAo7OzsgQnV0dG9ucyBhbmQgc2Vw YXJhdG9yIGxvb2sgYW5kIGZlZWwKOzsKKGRlZmNvbnN0IHRhYmJhci1idXR0b24td2lkZ2V0 CiAgJyhjb25zCiAgICAoY29ucyA6dGFnICJFbmFibGVkIgogICAgICAgICAgKHN0cmluZykK ICAgICAgICAgIChyZXBlYXQgOnRhZyAiSW1hZ2UiCiAgICAgICAgICAgICAgICAgIDpleHRy YS1vZmZzZXQgMgogICAgICAgICAgICAgICAgICAocmVzdHJpY3RlZC1zZXhwIDp0YWcgIlNw ZWMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm1hdGNoLWFsdGVybmF0 aXZlcyAobGlzdHApKSkpCiAgICAoY29ucyA6dGFnICJEaXNhYmxlZCIKICAgICAgICAgIChz dHJpbmcpCiAgICAgICAgICAocmVwZWF0IDp0YWcgIkltYWdlIgogICAgICAgICAgICAgICAg ICA6ZXh0cmEtb2Zmc2V0IDIKICAgICAgICAgICAgICAgICAgKHJlc3RyaWN0ZWQtc2V4cCA6 dGFnICJTcGVjIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDptYXRjaC1h bHRlcm5hdGl2ZXMgKGxpc3RwKSkpKQogICAgKQogICJXaWRnZXQgZm9yIGVkaXRpbmcgYSB0 YWIgYmFyIGJ1dHRvbi4KQSBidXR0b24gaXMgc3BlY2lmaWVkIGFzIGEgcGFpciAoRU5BQkxF RC1CVVRUT04gLiBESVNBQkxFRC1CVVRUT04pLAp3aGVyZSBFTkFCTEVELUJVVFRPTiBhbmQg RElTQUJMRUQtQlVUVE9OIHNwZWNpZnkgdGhlIHZhbHVlIHVzZWQgd2hlbgp0aGUgYnV0dG9u IGlzIHJlc3BlY3RpdmVseSBlbmFibGVkIGFuZCBkaXNhYmxlZC4gIEVhY2ggYnV0dG9uIHZh bHVlIGlzCmEgcGFpciAoU1RSSU5HIC4gSU1BR0UpIHdoZXJlIFNUUklORyBpcyBhIHN0cmlu ZyB2YWx1ZSwgYW5kIElNQUdFIGEKbGlzdCBvZiBpbWFnZSBzcGVjaWZpY2F0aW9ucy4KSWYg SU1BR0UgaXMgbm9uLW5pbCwgdHJ5IHRvIHVzZSB0aGF0IGltYWdlLCBlbHNlIHVzZSBTVFJJ TkcuCklmIG9ubHkgdGhlIEVOQUJMRUQtQlVUVE9OIGltYWdlIGlzIHByb3ZpZGVkLCBhIERJ U0FCTEVELUJVVFRPTiBpbWFnZQppcyBkZXJpdmVkIGZyb20gaXQuIikKCjs7OyBIb21lIGJ1 dHRvbgo7OwooZGVmdmFyIHRhYmJhci1ob21lLWJ1dHRvbi12YWx1ZSBuaWwKICAiVmFsdWUg b2YgdGhlIGhvbWUgYnV0dG9uLiIpCgooZGVmY29uc3QgdGFiYmFyLWhvbWUtYnV0dG9uLWVu YWJsZWQtaW1hZ2UKICAnKCg6dHlwZSBwYm0gOmRhdGEgIlwKUDIgMTMgMTMgMjU1IDI1NSAy NTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAy NTUgMjU1IDI1NSAwCjYgMCAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAy NTUgOSAxMzAgOSAyNTUgMjU1IDI1NSAyNTUKMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjYg MTMwIDI2IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAwIDkgMjYKNDEgMTMwIDQxIDI2 IDkgMCAyNTUgMjU1IDI1NSAyNTUgNSAxNDUgMTQwIDEzNSAxMzAgMTI1IDEyMCAxMTUgNSAy NTUKMjU1IDI1NSAyNTUgMCA5IDI2IDQxIDEzMCA0MSAyNiA5IDAgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgMjU1IDI2IDEzMAoyNiAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgOSAxMzAgOSAyNTUgMjU1IDI1NSAyNTUgMjU1CjI1NSAyNTUgMjU1IDI1NSAy NTUgMCA2IDAgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoy NTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgMjU1CjI1NSAyNTUgMjU1CiIpKQogICJEZWZhdWx0IGltYWdlIGZvciB0aGUg ZW5hYmxlZCBob21lIGJ1dHRvbi4iKQoKKGRlZmNvbnN0IHRhYmJhci1ob21lLWJ1dHRvbi1k aXNhYmxlZC1pbWFnZQogICcoKDp0eXBlIHBibSA6ZGF0YSAiXApQMiAxMyAxMyAyNTUgMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoy NTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgMjU1CjI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAy NTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoyNTUgMjU1IDAgMCAx IDIgMyAyIDEgMCAwIDI1NSAyNTUgMjU1IDI1NSAwIDEzMiAxMjggMTIzIDExOSAxMTQgMTEw CjEwNiAwIDI1NSAyNTUgMjU1IDI1NSAwIDAgMSAyIDMgMiAxIDAgMCAyNTUgMjU1IDI1NSAy NTUgMjU1IDI1NSAyNTUKMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAy NTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1CjI1NSAyNTUgMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAy NTUKMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKIikpCiAgIkRlZmF1bHQg aW1hZ2UgZm9yIHRoZSBkaXNhYmxlZCBob21lIGJ1dHRvbi4iKQoKKGRlZmN1c3RvbSB0YWJi YXItaG9tZS1idXR0b24KICAoY29ucyAoY29ucyAiW29dIiB0YWJiYXItaG9tZS1idXR0b24t ZW5hYmxlZC1pbWFnZSkKICAgICAgICAoY29ucyAiW3hdIiB0YWJiYXItaG9tZS1idXR0b24t ZGlzYWJsZWQtaW1hZ2UpKQogICJUaGUgaG9tZSBidXR0b24uClRoZSB2YXJpYWJsZSBgdGFi YmFyLWJ1dHRvbi13aWRnZXQnIGdpdmVzIGRldGFpbHMgb24gdGhpcyB3aWRnZXQuIgogIDpn cm91cCAndGFiYmFyCiAgOnR5cGUgdGFiYmFyLWJ1dHRvbi13aWRnZXQKICA6c2V0ICcobGFt YmRhICh2YXJpYWJsZSB2YWx1ZSkKICAgICAgICAgIChjdXN0b20tc2V0LWRlZmF1bHQgdmFy aWFibGUgdmFsdWUpCiAgICAgICAgICA7OyBTY2hlZHVsZSByZWZyZXNoIG9mIGJ1dHRvbiB2 YWx1ZS4KICAgICAgICAgIChzZXRxIHRhYmJhci1ob21lLWJ1dHRvbi12YWx1ZSBuaWwpKSkK Cjs7OyBTY3JvbGwgbGVmdCBidXR0b24KOzsKKGRlZnZhciB0YWJiYXItc2Nyb2xsLWxlZnQt YnV0dG9uLXZhbHVlIG5pbAogICJWYWx1ZSBvZiB0aGUgc2Nyb2xsIGxlZnQgYnV0dG9uLiIp CgooZGVmY29uc3QgdGFiYmFyLXNjcm9sbC1sZWZ0LWJ1dHRvbi1lbmFibGVkLWltYWdlCiAg JygoOnR5cGUgcGJtIDpkYXRhICJcClAyIDEzIDEzIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1CjI1NSAyNTUgMjU1IDI1NSAy NTUgMjU1IDI1NSAyNTUgMTI4IDE2IDQ4IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoy NTUgMTQ0IDI4IDg2IDEyOCAwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDE2MCA0NCA5MiAx NTkgMTM1IDExMyAwCjI1NSAyNTUgMjU1IDI1NSAxNjAgNDQgOTcgMTY1IDE0NCAxMjkgMTIw IDExNyAwIDI1NSAyNTUgMTc2IDQ0IDk4IDE3NQoxNzQgMTQ2IDEyNyAxMjYgMTI3IDEyOCAw IDI1NSAyNTUgMCAxNjAgMTg0IDE1NiAxNDMgMTM2IDEzNCAxMzUgMTM3CjEzOCAwIDI1NSAy NTUgMTc2IDMyIDY3IDE0NCAxNDYgMTQ0IDE0NSAxNDYgMTQ4IDE0OSAwIDI1NSAyNTUgMjU1 IDI1NQoxNjAgNDIgNzUgMTQwIDE1NCAxNTggMTU5IDE2MCAwIDI1NSAyNTUgMjU1IDI1NSAy NTUgMjU1IDE2MCA0MCA3NCAxNTQKMTcwIDE3MSAwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1 IDI1NSAyNTUgMTYwIDQxIDgyIDE2MyAwIDI1NSAyNTUgMjU1CjI1NSAyNTUgMjU1IDI1NSAy NTUgMjU1IDI1NSAxNjAgMzIgNDggMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoy NTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoiKSkKICAiRGVmYXVsdCBpbWFnZSBmb3IgdGhlIGVu YWJsZWQgc2Nyb2xsIGxlZnQgYnV0dG9uLgpBIGRpc2FibGVkIGJ1dHRvbiBpbWFnZSB3aWxs IGJlIGF1dG9tYXRpY2FsbHkgYnVpbGQgZnJvbSBpdC4iKQoKKGRlZmN1c3RvbSB0YWJiYXIt c2Nyb2xsLWxlZnQtYnV0dG9uCiAgKGNvbnMgKGNvbnMgIiA8IiB0YWJiYXItc2Nyb2xsLWxl ZnQtYnV0dG9uLWVuYWJsZWQtaW1hZ2UpCiAgICAgICAgKGNvbnMgIiA9IiBuaWwpKQogICJU aGUgc2Nyb2xsIGxlZnQgYnV0dG9uLgpUaGUgdmFyaWFibGUgYHRhYmJhci1idXR0b24td2lk Z2V0JyBnaXZlcyBkZXRhaWxzIG9uIHRoaXMgd2lkZ2V0LiIKICA6Z3JvdXAgJ3RhYmJhcgog IDp0eXBlIHRhYmJhci1idXR0b24td2lkZ2V0CiAgOnNldCAnKGxhbWJkYSAodmFyaWFibGUg dmFsdWUpCiAgICAgICAgICAoY3VzdG9tLXNldC1kZWZhdWx0IHZhcmlhYmxlIHZhbHVlKQog ICAgICAgICAgOzsgU2NoZWR1bGUgcmVmcmVzaCBvZiBidXR0b24gdmFsdWUuCiAgICAgICAg ICAoc2V0cSB0YWJiYXItc2Nyb2xsLWxlZnQtYnV0dG9uLXZhbHVlIG5pbCkpKQoKOzs7IFNj cm9sbCByaWdodCBidXR0b24KOzsKKGRlZnZhciB0YWJiYXItc2Nyb2xsLXJpZ2h0LWJ1dHRv bi12YWx1ZSBuaWwKICAiVmFsdWUgb2YgdGhlIHNjcm9sbCByaWdodCBidXR0b24uIikKCihk ZWZjb25zdCB0YWJiYXItc2Nyb2xsLXJpZ2h0LWJ1dHRvbi1lbmFibGVkLWltYWdlCiAgJygo OnR5cGUgcGJtIDpkYXRhICJcClAyIDEzIDEzIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1 NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1CjQ4IDMyIDE2MCAyNTUgMjU1IDI1 NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgNDQgMTYxIDcxIDMyIDE2MCAyNTUKMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDM2IDE1NyAxNjMgMTQ1IDYyIDMyIDE2MCAyNTUg MjU1IDI1NSAyNTUKMjU1IDI1NSAzMCAxMjggMTMzIDEzNyAxNDIgMTI0IDUwIDMyIDE2MCAy NTUgMjU1IDI1NSAyNTUgMjkgMTIwIDEyMQoxMjQgMTI2IDEyNiAxMjQgMTA1IDQyIDMyIDE3 NiAyNTUgMjU1IDMxIDEyNiAxMjcgMTI4IDEyOCAxMjggMTI4IDEyNgoxMjQgODkgMzIgMjU1 IDI1NSAzMyAxMzQgMTM1IDEzNiAxMzcgMTM3IDEzOCAxMTkgNDkgMzIgMTc2IDI1NSAyNTUg MzQKMTQzIDE0NCAxNDUgMTQ2IDEyOCA1NCAzMiAxNjAgMjU1IDI1NSAyNTUgMjU1IDM2IDE1 MiAxNTMgMTM0IDU3IDMyIDE2MAoyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAzOCAxNDEgNjAg MzIgMTYwIDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoyNTUgNDggMzIgMTYwIDI1NSAy NTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NSAyNTUKMjU1 IDI1NSAyNTUgMjU1IDI1NSAyNTUgMjU1IDI1NQoiKSkKICAiRGVmYXVsdCBpbWFnZSBmb3Ig dGhlIGVuYWJsZWQgc2Nyb2xsIHJpZ2h0IGJ1dHRvbi4KQSBkaXNhYmxlZCBidXR0b24gaW1h Z2Ugd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGJ1aWxkIGZyb20gaXQuIikKCihkZWZjdXN0b20g dGFiYmFyLXNjcm9sbC1yaWdodC1idXR0b24KICAoY29ucyAoY29ucyAiID4iIHRhYmJhci1z Y3JvbGwtcmlnaHQtYnV0dG9uLWVuYWJsZWQtaW1hZ2UpCiAgICAgICAgKGNvbnMgIiA9IiBu aWwpKQogICJUaGUgc2Nyb2xsIHJpZ2h0IGJ1dHRvbi4KVGhlIHZhcmlhYmxlIGB0YWJiYXIt YnV0dG9uLXdpZGdldCcgZ2l2ZXMgZGV0YWlscyBvbiB0aGlzIHdpZGdldC4iCiAgOmdyb3Vw ICd0YWJiYXIKICA6dHlwZSB0YWJiYXItYnV0dG9uLXdpZGdldAogIDpzZXQgJyhsYW1iZGEg KHZhcmlhYmxlIHZhbHVlKQogICAgICAgICAgKGN1c3RvbS1zZXQtZGVmYXVsdCB2YXJpYWJs ZSB2YWx1ZSkKICAgICAgICAgIDs7IFNjaGVkdWxlIHJlZnJlc2ggb2YgYnV0dG9uIHZhbHVl LgogICAgICAgICAgKHNldHEgdGFiYmFyLXNjcm9sbC1yaWdodC1idXR0b24tdmFsdWUgbmls KSkpCgo7OzsgU2VwYXJhdG9yCjs7CihkZWZjb25zdCB0YWJiYXItc2VwYXJhdG9yLXdpZGdl dAogICcoY29ucyAoY2hvaWNlIChzdHJpbmcpCiAgICAgICAgICAgICAgICAgKG51bWJlciA6 dGFnICJTcGFjZSB3aWR0aCIgMC4yKSkKICAgICAgICAgKHJlcGVhdCA6dGFnICJJbWFnZSIK ICAgICAgICAgICAgICAgICA6ZXh0cmEtb2Zmc2V0IDIKICAgICAgICAgICAgICAgICAocmVz dHJpY3RlZC1zZXhwIDp0YWcgIlNwZWMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6bWF0Y2gtYWx0ZXJuYXRpdmVzIChsaXN0cCkpKSkKICAiV2lkZ2V0IGZvciBlZGl0 aW5nIGEgdGFiIGJhciBzZXBhcmF0b3IuCkEgc2VwYXJhdG9yIGlzIHNwZWNpZmllZCBhcyBh IHBhaXIgKFNUUklORy1PUi1XSURUSCAuIElNQUdFKSB3aGVyZQpTVFJJTkctT1ItV0lEVEgg aXMgYSBzdHJpbmcgdmFsdWUgb3IgYSBzcGFjZSB3aWR0aCwgYW5kIElNQUdFIGEgbGlzdApv ZiBpbWFnZSBzcGVjaWZpY2F0aW9ucy4KSWYgSU1BR0UgaXMgbm9uLW5pbCwgdHJ5IHRvIHVz ZSB0aGF0IGltYWdlLCBlbHNlIHVzZSBTVFJJTkctT1ItV0lEVEguClRoZSB2YWx1ZSAoXCJc IiksIG9yICgwKSBoaWRlIHNlcGFyYXRvcnMuIikKCihkZWZ2YXIgdGFiYmFyLXNlcGFyYXRv ci12YWx1ZSBuaWwKICAiVmFsdWUgb2YgdGhlIHNlcGFyYXRvciB1c2VkIGJldHdlZW4gdGFi cy4iKQoKKGRlZmN1c3RvbSB0YWJiYXItc2VwYXJhdG9yIChsaXN0IDAuMikKICAiU2VwYXJh dG9yIHVzZWQgYmV0d2VlbiB0YWJzLgpUaGUgdmFyaWFibGUgYHRhYmJhci1zZXBhcmF0b3It d2lkZ2V0JyBnaXZlcyBkZXRhaWxzIG9uIHRoaXMgd2lkZ2V0LiIKICA6Z3JvdXAgJ3RhYmJh cgogIDp0eXBlIHRhYmJhci1zZXBhcmF0b3Itd2lkZ2V0CiAgOnNldCAnKGxhbWJkYSAodmFy aWFibGUgdmFsdWUpCiAgICAgICAgICAoY3VzdG9tLXNldC1kZWZhdWx0IHZhcmlhYmxlIHZh bHVlKQogICAgICAgICAgOzsgU2NoZWR1bGUgcmVmcmVzaCBvZiBzZXBhcmF0b3IgdmFsdWUu CiAgICAgICAgICAoc2V0cSB0YWJiYXItc2VwYXJhdG9yLXZhbHVlIG5pbCkpKQoKOzs7IElt YWdlcwo7OwooZGVmY3VzdG9tIHRhYmJhci11c2UtaW1hZ2VzIHQKICAiKk5vbi1uaWwgbWVh bnMgdG8gdHJ5IHRvIHVzZSBpbWFnZXMgaW4gdGFiIGJhci4KVGhhdCBpcyBmb3IgYnV0dG9u cyBhbmQgc2VwYXJhdG9ycy4iCiAgOmdyb3VwICd0YWJiYXIKICA6dHlwZSAnYm9vbGVhbgog IDpzZXQgJyhsYW1iZGEgKHZhcmlhYmxlIHZhbHVlKQogICAgICAgICAgKGN1c3RvbS1zZXQt ZGVmYXVsdCB2YXJpYWJsZSB2YWx1ZSkKICAgICAgICAgIDs7IFNjaGVkdWxlIHJlZnJlc2gg b2YgYWxsIGJ1dHRvbnMgYW5kIHNlcGFyYXRvciB2YWx1ZXMuCiAgICAgICAgICAoc2V0cSB0 YWJiYXItc2VwYXJhdG9yLXZhbHVlIG5pbAogICAgICAgICAgICAgICAgdGFiYmFyLWhvbWUt YnV0dG9uLXZhbHVlIG5pbAogICAgICAgICAgICAgICAgdGFiYmFyLXNjcm9sbC1sZWZ0LWJ1 dHRvbi12YWx1ZSBuaWwKICAgICAgICAgICAgICAgIHRhYmJhci1zY3JvbGwtcmlnaHQtYnV0 dG9uLXZhbHVlIG5pbCkpKQoKKGRlZnN1YnN0IHRhYmJhci1maW5kLWltYWdlIChzcGVjcykK ICAiRmluZCBhbiBpbWFnZSwgY2hvb3Npbmcgb25lIG9mIGEgbGlzdCBvZiBpbWFnZSBzcGVj aWZpY2F0aW9ucy4KU1BFQ1MgaXMgYSBsaXN0IG9mIGltYWdlIHNwZWNpZmljYXRpb25zLiAg U2VlIGFsc28gYGZpbmQtaW1hZ2UnLiIKICAod2hlbiAoYW5kIHRhYmJhci11c2UtaW1hZ2Vz IChkaXNwbGF5LWltYWdlcy1wKSkKICAgIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgICAo ZmluZC1pbWFnZSBzcGVjcykKICAgICAgKGVycm9yIG5pbCkpKSkKCihkZWZzdWJzdCB0YWJi YXItZGlzYWJsZS1pbWFnZSAoaW1hZ2UpCiAgIkZyb20gSU1BR0UsIHJldHVybiBhIG5ldyBp bWFnZSB3aGljaCBsb29rcyBkaXNhYmxlZC4iCiAgKHNldHEgaW1hZ2UgKGNvcHktc2VxdWVu Y2UgaW1hZ2UpKQogIChzZXRjZHIgaW1hZ2UgKHBsaXN0LXB1dCAoY2RyIGltYWdlKSA6Y29u dmVyc2lvbiAnZGlzYWJsZWQpKQogIGltYWdlKQoKKGRlZnN1YnN0IHRhYmJhci1ub3JtYWxp emUtaW1hZ2UgKGltYWdlICZvcHRpb25hbCBtYXJnaW4pCiAgIk1ha2UgSU1BR0UgY2VudGVy ZWQgYW5kIHRyYW5zcGFyZW50LgpJZiBvcHRpb25hbCBNQVJHSU4gaXMgbm9uLW5pbCwgaXQg bXVzdCBiZSBhIG51bWJlciBvZiBwaXhlbHMgdG8gYWRkIGFzCmFuIGV4dHJhIG1hcmdpbiBh cm91bmQgdGhlIGltYWdlLiIKICAobGV0ICgocGxpc3QgKGNkciBpbWFnZSkpKQogICAgKG9y IChwbGlzdC1nZXQgcGxpc3QgOmFzY2VudCkKICAgICAgICAoc2V0cSBwbGlzdCAocGxpc3Qt cHV0IHBsaXN0IDphc2NlbnQgJ2NlbnRlcikpKQogICAgKG9yIChwbGlzdC1nZXQgcGxpc3Qg Om1hc2spCiAgICAgICAgKHNldHEgcGxpc3QgKHBsaXN0LXB1dCBwbGlzdCA6bWFzayAnKGhl dXJpc3RpYyB0KSkpKQogICAgKG9yIChub3QgKG5hdG51bXAgbWFyZ2luKSkKICAgICAgICAo cGxpc3QtZ2V0IHBsaXN0IDptYXJnaW4pCiAgICAgICAgKHBsaXN0LXB1dCBwbGlzdCA6bWFy Z2luIG1hcmdpbikpCiAgICAoc2V0Y2RyIGltYWdlIHBsaXN0KSkKICBpbWFnZSkKDAo7Ozsg QnV0dG9uIGtleW1hcHMgYW5kIGNhbGxiYWNrcwo7OwooZGVmdW4gdGFiYmFyLW1ha2UtbW91 c2Uta2V5bWFwIChjYWxsYmFjaykKICAiUmV0dXJuIGEga2V5bWFwIHRoYXQgY2FsbCBDQUxM QkFDSyBvbiBtb3VzZSBldmVudHMuCkNBTExCQUNLIGlzIHBhc3NlZCB0aGUgcmVjZWl2ZWQg bW91c2UgZXZlbnQuIgogIChsZXQgKChrZXltYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQog ICAgOzsgUGFzcyBtb3VzZS0xLCBtb3VzZS0yIGFuZCBtb3VzZS0zIGV2ZW50cyB0byBDQUxM QkFDSy4KICAgIChkZWZpbmUta2V5IGtleW1hcCBbaGVhZGVyLWxpbmUgZG93bi1tb3VzZS0x XSAnaWdub3JlKQogICAgKGRlZmluZS1rZXkga2V5bWFwIFtoZWFkZXItbGluZSBtb3VzZS0x XSBjYWxsYmFjaykKICAgIChkZWZpbmUta2V5IGtleW1hcCBbaGVhZGVyLWxpbmUgZG93bi1t b3VzZS0yXSAnaWdub3JlKQogICAgKGRlZmluZS1rZXkga2V5bWFwIFtoZWFkZXItbGluZSBt b3VzZS0yXSBjYWxsYmFjaykKICAgIChkZWZpbmUta2V5IGtleW1hcCBbaGVhZGVyLWxpbmUg ZG93bi1tb3VzZS0zXSAnaWdub3JlKQogICAgKGRlZmluZS1rZXkga2V5bWFwIFtoZWFkZXIt bGluZSBtb3VzZS0zXSBjYWxsYmFjaykKICAgIGtleW1hcCkpCgooZGVmc3Vic3QgdGFiYmFy LW1ha2UtbW91c2UtZXZlbnQgKCZvcHRpb25hbCB0eXBlKQogICJSZXR1cm4gYSBtb3VzZSBj bGljayBldmVudC4KT3B0aW9uYWwgYXJndW1lbnQgVFlQRSBpcyBhIG1vdXNlLWNsaWNrIGV2 ZW50IG9yIG9uZSBvZiB0aGUKc3ltYm9scyBgbW91c2UtMScsIGBtb3VzZS0yJyBvciBgbW91 c2UtMycuClRoZSBkZWZhdWx0IGlzIGBtb3VzZS0xJy4iCiAgKGlmICh0YWJiYXItY2xpY2st cCB0eXBlKQogICAgICB0eXBlCiAgICAobGlzdCAob3IgKG1lbXEgdHlwZSAnKG1vdXNlLTIg bW91c2UtMykpICdtb3VzZS0xKQogICAgICAgICAgKG9yIChldmVudC1zdGFydCBuaWwpIDs7 IEVtYWNzIDIxLjQKICAgICAgICAgICAgICAobGlzdCAoc2VsZWN0ZWQtd2luZG93KSAocG9p bnQpICcoMCAuIDApIDApKSkpKQoKOzs7IEJ1dHRvbnMKOzsKKGRlZmNvbnN0IHRhYmJhci1k ZWZhdWx0LWJ1dHRvbi1rZXltYXAKICAodGFiYmFyLW1ha2UtbW91c2Uta2V5bWFwICd0YWJi YXItc2VsZWN0LWJ1dHRvbi1jYWxsYmFjaykKICAiRGVmYXVsdCBrZXltYXAgb2YgYSBidXR0 b24uIikKCihkZWZ1biB0YWJiYXItaGVscC1vbi1idXR0b24gKHdpbmRvdyBvYmplY3QgcG9z aXRpb24pCiAgIlJldHVybiBhIGhlbHAgc3RyaW5nIG9yIG5pbCBmb3Igbm9uZSwgZm9yIHRo ZSBidXR0b24gdW5kZXIgdGhlIG1vdXNlLgpXSU5ET1cgaXMgdGhlIHdpbmRvdyBpbiB3aGlj aCB0aGUgaGVscCB3YXMgZm91bmQgKHVudXNlZCkuCk9CSkVDVCBpcyB0aGUgYnV0dG9uIGxh YmVsIHVuZGVyIHRoZSBtb3VzZS4KUE9TSVRJT04gaXMgdGhlIHBvc2l0aW9uIGluIHRoYXQg bGFiZWwuCkNhbGwgYHRhYmJhci1OQU1FLWhlbHAtZnVuY3Rpb24nIHdoZXJlIE5BTUUgaXMg dGhlIGJ1dHRvbiBuYW1lCmFzc29jaWF0ZWQgdG8gT0JKRUNULiIKICAobGV0KiAoKG5hbWUg KGdldC10ZXh0LXByb3BlcnR5IHBvc2l0aW9uICd0YWJiYXItYnV0dG9uIG9iamVjdCkpCiAg ICAgICAgIChmdW52YXIgKGFuZCBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJu LXNvZnQgKGZvcm1hdCAidGFiYmFyLSVzLWhlbHAtZnVuY3Rpb24iCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSkpKSkKICAgIChhbmQgKHN5bWJv bC12YWx1ZSBmdW52YXIpCiAgICAgICAgIChmdW5jYWxsIChzeW1ib2wtdmFsdWUgZnVudmFy KSkpKSkKCihkZWZzdWJzdCB0YWJiYXItY2xpY2stb24tYnV0dG9uIChuYW1lICZvcHRpb25h bCB0eXBlKQogICJIYW5kbGUgYSBtb3VzZSBjbGljayBldmVudCBvbiBidXR0b24gTkFNRS4K Q2FsbCBgdGFiYmFyLXNlbGVjdC1OQU1FLWZ1bmN0aW9uJyB3aXRoIHRoZSByZWNlaXZlZCwg b3Igc2ltdWxhdGVkCm1vdXNlIGNsaWNrIGV2ZW50LgpPcHRpb25hbCBhcmd1bWVudCBUWVBF IGlzIGEgbW91c2UgY2xpY2sgZXZlbnQgdHlwZSAoc2VlIHRoZSBmdW5jdGlvbgpgdGFiYmFy LW1ha2UtbW91c2UtZXZlbnQnIGZvciBkZXRhaWxzKS4iCiAgKGxldCAoKGZ1bnZhciAoaW50 ZXJuLXNvZnQgKGZvcm1hdCAidGFiYmFyLSVzLWZ1bmN0aW9uIiBuYW1lKSkpKQogICAgKHdo ZW4gKHN5bWJvbC12YWx1ZSBmdW52YXIpCiAgICAgIChmdW5jYWxsIChzeW1ib2wtdmFsdWUg ZnVudmFyKSAodGFiYmFyLW1ha2UtbW91c2UtZXZlbnQgdHlwZSkpCiAgICAgICh0YWJiYXIt ZGlzcGxheS11cGRhdGUpKSkpCgooZGVmdW4gdGFiYmFyLXNlbGVjdC1idXR0b24tY2FsbGJh Y2sgKGV2ZW50KQogICJIYW5kbGUgYSBtb3VzZSBFVkVOVCBvbiBhIGJ1dHRvbi4KUGFzcyBt b3VzZSBjbGljayBldmVudHMgb24gYSBidXR0b24gdG8gYHRhYmJhci1jbGljay1vbi1idXR0 b24nLiIKICAoaW50ZXJhY3RpdmUgIkBlIikKICAod2hlbiAodGFiYmFyLWNsaWNrLXAgZXZl bnQpCiAgICAobGV0ICgodGFyZ2V0IChwb3NuLXN0cmluZyAoZXZlbnQtc3RhcnQgZXZlbnQp KSkpCiAgICAgICh0YWJiYXItY2xpY2stb24tYnV0dG9uCiAgICAgICAoZ2V0LXRleHQtcHJv cGVydHkgKGNkciB0YXJnZXQpICd0YWJiYXItYnV0dG9uIChjYXIgdGFyZ2V0KSkKICAgICAg IGV2ZW50KSkpKQoKKGRlZnVuIHRhYmJhci1tYWtlLWJ1dHRvbi1rZXltYXAgKG5hbWUpCiAg IlJldHVybiBhIGtleW1hcCB0byBoYW5kbGUgbW91c2UgY2xpY2sgZXZlbnRzIG9uIGJ1dHRv biBOQU1FLiIKICAoaWYgKGZib3VuZHAgJ3Bvc24tc3RyaW5nKQogICAgICB0YWJiYXItZGVm YXVsdC1idXR0b24ta2V5bWFwCiAgICAobGV0ICgoZXZlbnQgKG1ha2Utc3ltYm9sICJldmVu dCIpKSkKICAgICAgKHRhYmJhci1tYWtlLW1vdXNlLWtleW1hcAogICAgICAgYChsYW1iZGEg KCxldmVudCkKICAgICAgICAgIChpbnRlcmFjdGl2ZSAiQGUiKQogICAgICAgICAgKGFuZCAo dGFiYmFyLWNsaWNrLXAgLGV2ZW50KQogICAgICAgICAgICAgICAodGFiYmFyLWNsaWNrLW9u LWJ1dHRvbiAnLG5hbWUgLGV2ZW50KSkpKSkpKQoKOzs7IEJ1dHRvbiBjYWxsYmFja3MKOzsK KGRlZnVuIHRhYmJhci1zY3JvbGwtbGVmdCAoZXZlbnQpCiAgIk9uIG1vdXNlIEVWRU5ULCBz Y3JvbGwgY3VycmVudCB0YWIgc2V0IG9uIGxlZnQuIgogICh3aGVuIChlcSAoZXZlbnQtYmFz aWMtdHlwZSBldmVudCkgJ21vdXNlLTEpCiAgICAodGFiYmFyLXNjcm9sbCAodGFiYmFyLWN1 cnJlbnQtdGFic2V0KSAtMSkpKQoKKGRlZnVuIHRhYmJhci1zY3JvbGwtbGVmdC1oZWxwICgp CiAgIkhlbHAgc3RyaW5nIHNob3duIHdoZW4gbW91c2UgaXMgb3ZlciB0aGUgc2Nyb2xsIGxl ZnQgYnV0dG9uLiIKICAibW91c2UtMTogc2Nyb2xsIHRhYnMgbGVmdC4iKQoKKGRlZnVuIHRh YmJhci1zY3JvbGwtcmlnaHQgKGV2ZW50KQogICJPbiBtb3VzZSBFVkVOVCwgc2Nyb2xsIGN1 cnJlbnQgdGFiIHNldCBvbiByaWdodC4iCiAgKHdoZW4gKGVxIChldmVudC1iYXNpYy10eXBl IGV2ZW50KSAnbW91c2UtMSkKICAgICh0YWJiYXItc2Nyb2xsICh0YWJiYXItY3VycmVudC10 YWJzZXQpIDEpKSkKCihkZWZ1biB0YWJiYXItc2Nyb2xsLXJpZ2h0LWhlbHAgKCkKICAiSGVs cCBzdHJpbmcgc2hvd24gd2hlbiBtb3VzZSBpcyBvdmVyIHRoZSBzY3JvbGwgcmlnaHQgYnV0 dG9uLiIKICAibW91c2UtMTogc2Nyb2xsIHRhYnMgcmlnaHQuIikKCjs7OyBUYWJzCjs7Cihk ZWZjb25zdCB0YWJiYXItZGVmYXVsdC10YWIta2V5bWFwCiAgKHRhYmJhci1tYWtlLW1vdXNl LWtleW1hcCAndGFiYmFyLXNlbGVjdC10YWItY2FsbGJhY2spCiAgIkRlZmF1bHQga2V5bWFw IG9mIGEgdGFiLiIpCgooZGVmdW4gdGFiYmFyLWhlbHAtb24tdGFiICh3aW5kb3cgb2JqZWN0 IHBvc2l0aW9uKQogICJSZXR1cm4gYSBoZWxwIHN0cmluZyBvciBuaWwgZm9yIG5vbmUsIGZv ciB0aGUgdGFiIHVuZGVyIHRoZSBtb3VzZS4KV0lORE9XIGlzIHRoZSB3aW5kb3cgaW4gd2hp Y2ggdGhlIGhlbHAgd2FzIGZvdW5kICh1bnVzZWQpLgpPQkpFQ1QgaXMgdGhlIHRhYiBsYWJl bCB1bmRlciB0aGUgbW91c2UuClBPU0lUSU9OIGlzIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGxh YmVsLgpDYWxsIGB0YWJiYXItaGVscC1vbi10YWItZnVuY3Rpb24nIHdpdGggdGhlIGFzc29j aWF0ZWQgdGFiLiIKICAod2hlbiB0YWJiYXItaGVscC1vbi10YWItZnVuY3Rpb24KICAgIChs ZXQgKCh0YWIgKGdldC10ZXh0LXByb3BlcnR5IHBvc2l0aW9uICd0YWJiYXItdGFiIG9iamVj dCkpKQogICAgICAoZnVuY2FsbCB0YWJiYXItaGVscC1vbi10YWItZnVuY3Rpb24gdGFiKSkp KQoKKGRlZnN1YnN0IHRhYmJhci1jbGljay1vbi10YWIgKHRhYiAmb3B0aW9uYWwgdHlwZSkK ICAiSGFuZGxlIGEgbW91c2UgY2xpY2sgZXZlbnQgb24gdGFiIFRBQi4KQ2FsbCBgdGFiYmFy LXNlbGVjdC10YWItZnVuY3Rpb24nIHdpdGggdGhlIHJlY2VpdmVkLCBvciBzaW11bGF0ZWQK bW91c2UgY2xpY2sgZXZlbnQsIGFuZCBUQUIuCk9wdGlvbmFsIGFyZ3VtZW50IFRZUEUgaXMg YSBtb3VzZSBjbGljayBldmVudCB0eXBlIChzZWUgdGhlIGZ1bmN0aW9uCmB0YWJiYXItbWFr ZS1tb3VzZS1ldmVudCcgZm9yIGRldGFpbHMpLiIKICAod2hlbiB0YWJiYXItc2VsZWN0LXRh Yi1mdW5jdGlvbgogICAgKGZ1bmNhbGwgdGFiYmFyLXNlbGVjdC10YWItZnVuY3Rpb24KICAg ICAgICAgICAgICh0YWJiYXItbWFrZS1tb3VzZS1ldmVudCB0eXBlKSB0YWIpCiAgICAodGFi YmFyLWRpc3BsYXktdXBkYXRlKSkpCgooZGVmdW4gdGFiYmFyLXNlbGVjdC10YWItY2FsbGJh Y2sgKGV2ZW50KQogICJIYW5kbGUgYSBtb3VzZSBFVkVOVCBvbiBhIHRhYi4KUGFzcyBtb3Vz ZSBjbGljayBldmVudHMgb24gYSB0YWIgdG8gYHRhYmJhci1jbGljay1vbi10YWInLiIKICAo aW50ZXJhY3RpdmUgIkBlIikKICAod2hlbiAodGFiYmFyLWNsaWNrLXAgZXZlbnQpCiAgICAo bGV0ICgodGFyZ2V0IChwb3NuLXN0cmluZyAoZXZlbnQtc3RhcnQgZXZlbnQpKSkpCiAgICAg ICh0YWJiYXItY2xpY2stb24tdGFiCiAgICAgICAoZ2V0LXRleHQtcHJvcGVydHkgKGNkciB0 YXJnZXQpICd0YWJiYXItdGFiIChjYXIgdGFyZ2V0KSkKICAgICAgIGV2ZW50KSkpKQoKKGRl ZnVuIHRhYmJhci1tYWtlLXRhYi1rZXltYXAgKHRhYikKICAiUmV0dXJuIGEga2V5bWFwIHRv IGhhbmRsZSBtb3VzZSBjbGljayBldmVudHMgb24gVEFCLiIKICAoaWYgKGZib3VuZHAgJ3Bv c24tc3RyaW5nKQogICAgICB0YWJiYXItZGVmYXVsdC10YWIta2V5bWFwCiAgICAobGV0ICgo ZXZlbnQgKG1ha2Utc3ltYm9sICJldmVudCIpKSkKICAgICAgKHRhYmJhci1tYWtlLW1vdXNl LWtleW1hcAogICAgICAgYChsYW1iZGEgKCxldmVudCkKICAgICAgICAgIChpbnRlcmFjdGl2 ZSAiQGUiKQogICAgICAgICAgKGFuZCAodGFiYmFyLWNsaWNrLXAgLGV2ZW50KQogICAgICAg ICAgICAgICAodGFiYmFyLWNsaWNrLW9uLXRhYiAnLHRhYiAsZXZlbnQpKSkpKSkpCgwKOzs7 IFRhYiBiYXIgY29uc3RydWN0aW9uCjs7CihkZWZ1biB0YWJiYXItYnV0dG9uLWxhYmVsIChu YW1lKQogICJSZXR1cm4gYSBsYWJlbCBmb3IgYnV0dG9uIE5BTUUuClRoYXQgaXMgYSBwYWly IChFTkFCTEVEIC4gRElTQUJMRUQpLCB3aGVyZSBFTkFCTEVEIGFuZCBESVNBQkxFRCBhcmUK cmVzcGVjdGl2ZWx5IHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBidXR0b24gd2hlbiBlbmFibGVk IGFuZCBkaXNhYmxlZC4KVGhleSBhcmUgcHJvcGVydGl6ZWQgc3RyaW5ncyB3aGljaCBjb3Vs ZCBkaXNwbGF5IGltYWdlcywgYXMgc3BlY2lmaWVkCmJ5IHRoZSB2YXJpYWJsZSBgdGFiYmFy LU5BTUUtYnV0dG9uJy4iCiAgKGxldCogKChidG4gKHN5bWJvbC12YWx1ZQogICAgICAgICAg ICAgICAoaW50ZXJuLXNvZnQgKGZvcm1hdCAidGFiYmFyLSVzLWJ1dHRvbiIgbmFtZSkpKSkK ICAgICAgICAgKG9uICAodGFiYmFyLWZpbmQtaW1hZ2UgKGNkYXIgYnRuKSkpCiAgICAgICAg IChvZmYgKGFuZCBvbiAodGFiYmFyLWZpbmQtaW1hZ2UgKGNkZHIgYnRuKSkpKSkKICAgICh3 aGVuIG9uCiAgICAgICh0YWJiYXItbm9ybWFsaXplLWltYWdlIG9uIDEpCiAgICAgIChpZiBv ZmYKICAgICAgICAgICh0YWJiYXItbm9ybWFsaXplLWltYWdlIG9mZiAxKQogICAgICAgIDs7 IElmIHRoZXJlIGlzIG5vIGRpc2FibGVkIGJ1dHRvbiBpbWFnZSwgZGVyaXZlIG9uZSBmcm9t IHRoZQogICAgICAgIDs7IGJ1dHRvbiBlbmFibGVkIGltYWdlLgogICAgICAgIChzZXRxIG9m ZiAodGFiYmFyLWRpc2FibGUtaW1hZ2Ugb24pKSkpCiAgICAoY29ucwogICAgIChwcm9wZXJ0 aXplIChvciAoY2FhciBidG4pICIgIikgJ2Rpc3BsYXkgb24pCiAgICAgKHByb3BlcnRpemUg KG9yIChjYWRyIGJ0bikgIiAiKSAnZGlzcGxheSBvZmYpKSkpCgooZGVmdW4gdGFiYmFyLWxp bmUtYnV0dG9uIChuYW1lKQogICJSZXR1cm4gdGhlIGRpc3BsYXkgcmVwcmVzZW50YXRpb24g b2YgYnV0dG9uIE5BTUUuClRoYXQgaXMsIGEgcHJvcGVydGl6ZWQgc3RyaW5nIHVzZWQgYXMg YW4gYGhlYWRlci1saW5lLWZvcm1hdCcgdGVtcGxhdGUKZWxlbWVudC4iCiAgKGxldCAoKGxh YmVsIChpZiB0YWJiYXItYnV0dG9uLWxhYmVsLWZ1bmN0aW9uCiAgICAgICAgICAgICAgICAg ICAoZnVuY2FsbCB0YWJiYXItYnV0dG9uLWxhYmVsLWZ1bmN0aW9uIG5hbWUpCiAgICAgICAg ICAgICAgICAgKGNvbnMgbmFtZSBuYW1lKSkpKQogICAgOzsgQ2FjaGUgdGhlIGRpc3BsYXkg dmFsdWUgb2YgdGhlIGVuYWJsZWQvZGlzYWJsZWQgYnV0dG9ucyBpbgogICAgOzsgdmFyaWFi bGVzIGB0YWJiYXItTkFNRS1idXR0b24tdmFsdWUnLgogICAgKHNldCAoaW50ZXJuIChmb3Jt YXQgInRhYmJhci0lcy1idXR0b24tdmFsdWUiICBuYW1lKSkKICAgICAgICAgKGNvbnMKICAg ICAgICAgIChwcm9wZXJ0aXplIChjYXIgbGFiZWwpCiAgICAgICAgICAgICAgICAgICAgICAn dGFiYmFyLWJ1dHRvbiBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAndGFiYmFy LWJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgJ21vdXNlLWZhY2UgJ3RhYmJhci1idXR0 b24taGlnaGxpZ2h0CiAgICAgICAgICAgICAgICAgICAgICAncG9pbnRlciAnaGFuZAogICAg ICAgICAgICAgICAgICAgICAgJ2xvY2FsLW1hcCAodGFiYmFyLW1ha2UtYnV0dG9uLWtleW1h cCBuYW1lKQogICAgICAgICAgICAgICAgICAgICAgJ2hlbHAtZWNobyAndGFiYmFyLWhlbHAt b24tYnV0dG9uKQogICAgICAgICAgKHByb3BlcnRpemUgKGNkciBsYWJlbCkKICAgICAgICAg ICAgICAgICAgICAgICdmYWNlICd0YWJiYXItYnV0dG9uCiAgICAgICAgICAgICAgICAgICAg ICAncG9pbnRlciAnYXJyb3cpKSkpKQoKKGRlZnVuIHRhYmJhci1saW5lLXNlcGFyYXRvciAo KQogICJSZXR1cm4gdGhlIGRpc3BsYXkgcmVwcmVzZW50YXRpb24gb2YgYSB0YWIgYmFyIHNl cGFyYXRvci4KVGhhdCBpcywgYSBwcm9wZXJ0aXplZCBzdHJpbmcgdXNlZCBhcyBhbiBgaGVh ZGVyLWxpbmUtZm9ybWF0JyB0ZW1wbGF0ZQplbGVtZW50LiIKICAobGV0ICgoaW1hZ2UgKHRh YmJhci1maW5kLWltYWdlIChjZHIgdGFiYmFyLXNlcGFyYXRvcikpKSkKICAgIDs7IENhY2hl IHRoZSBzZXBhcmF0b3IgZGlzcGxheSB2YWx1ZSBpbiB2YXJpYWJsZQogICAgOzsgYHRhYmJh ci1zZXBhcmF0b3ItdmFsdWUnLgogICAgKHNldHEgdGFiYmFyLXNlcGFyYXRvci12YWx1ZQog ICAgICAgICAgKGNvbmQKICAgICAgICAgICAoaW1hZ2UKICAgICAgICAgICAgKHByb3BlcnRp emUgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICd0YWJiYXItc2VwYXJhdG9y CiAgICAgICAgICAgICAgICAgICAgICAgICdwb2ludGVyICdhcnJvdwogICAgICAgICAgICAg ICAgICAgICAgICAnZGlzcGxheSAodGFiYmFyLW5vcm1hbGl6ZS1pbWFnZSBpbWFnZSkpKQog ICAgICAgICAgICgobnVtYmVycCAoY2FyIHRhYmJhci1zZXBhcmF0b3IpKQogICAgICAgICAg ICAocHJvcGVydGl6ZSAiICIKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgJ3RhYmJh ci1zZXBhcmF0b3IKICAgICAgICAgICAgICAgICAgICAgICAgJ3BvaW50ZXIgJ2Fycm93CiAg ICAgICAgICAgICAgICAgICAgICAgICdkaXNwbGF5IChsaXN0ICdzcGFjZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6d2lkdGggKGNhciB0YWJiYXItc2VwYXJh dG9yKSkpKQogICAgICAgICAgICgocHJvcGVydGl6ZSAob3IgKGNhciB0YWJiYXItc2VwYXJh dG9yKSAiICIpCiAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICd0YWJiYXItc2VwYXJh dG9yCiAgICAgICAgICAgICAgICAgICAgICAgICdwb2ludGVyICdhcnJvdykpKSkKICAgICkp CgooZGVmc3Vic3QgdGFiYmFyLWxpbmUtYnV0dG9ucyAodGFic2V0KQogICJSZXR1cm4gYSBs aXN0IG9mIHByb3BlcnRpemVkIHN0cmluZ3MgZm9yIHRhYiBiYXIgYnV0dG9ucy4KVEFCU0VU IGlzIHRoZSB0YWIgc2V0IHVzZWQgdG8gY2hvb3NlIHRoZSBhcHByb3ByaWF0ZSBidXR0b25z LiIKICAobGlzdAogICAoaWYgdGFiYmFyLWhvbWUtZnVuY3Rpb24KICAgICAgIChjYXIgdGFi YmFyLWhvbWUtYnV0dG9uLXZhbHVlKQogICAgIChjZHIgdGFiYmFyLWhvbWUtYnV0dG9uLXZh bHVlKSkKICAgKGlmICg+ICh0YWJiYXItc3RhcnQgdGFic2V0KSAwKQogICAgICAgKGNhciB0 YWJiYXItc2Nyb2xsLWxlZnQtYnV0dG9uLXZhbHVlKQogICAgIChjZHIgdGFiYmFyLXNjcm9s bC1sZWZ0LWJ1dHRvbi12YWx1ZSkpCiAgIChpZiAoPCAodGFiYmFyLXN0YXJ0IHRhYnNldCkK ICAgICAgICAgICgxLSAobGVuZ3RoICh0YWJiYXItdGFicyB0YWJzZXQpKSkpCiAgICAgICAo Y2FyIHRhYmJhci1zY3JvbGwtcmlnaHQtYnV0dG9uLXZhbHVlKQogICAgIChjZHIgdGFiYmFy LXNjcm9sbC1yaWdodC1idXR0b24tdmFsdWUpKQogICB0YWJiYXItc2VwYXJhdG9yLXZhbHVl KSkKCihkZWZzdWJzdCB0YWJiYXItbGluZS10YWIgKHRhYikKICAiUmV0dXJuIHRoZSBkaXNw bGF5IHJlcHJlc2VudGF0aW9uIG9mIHRhYiBUQUIuClRoYXQgaXMsIGEgcHJvcGVydGl6ZWQg c3RyaW5nIHVzZWQgYXMgYW4gYGhlYWRlci1saW5lLWZvcm1hdCcgdGVtcGxhdGUKZWxlbWVu dC4KQ2FsbCBgdGFiYmFyLXRhYi1sYWJlbC1mdW5jdGlvbicgdG8gb2J0YWluIGEgbGFiZWwg Zm9yIFRBQi4iCiAgKGNvbmNhdCAocHJvcGVydGl6ZQogICAgICAgICAgIChpZiB0YWJiYXIt dGFiLWxhYmVsLWZ1bmN0aW9uCiAgICAgICAgICAgICAgIChmdW5jYWxsIHRhYmJhci10YWIt bGFiZWwtZnVuY3Rpb24gdGFiKQogICAgICAgICAgICAgdGFiKQogICAgICAgICAgICd0YWJi YXItdGFiIHRhYgogICAgICAgICAgICdsb2NhbC1tYXAgKHRhYmJhci1tYWtlLXRhYi1rZXlt YXAgdGFiKQogICAgICAgICAgICdoZWxwLWVjaG8gJ3RhYmJhci1oZWxwLW9uLXRhYgogICAg ICAgICAgICdtb3VzZS1mYWNlICd0YWJiYXItaGlnaGxpZ2h0CiAgICAgICAgICAgJ2ZhY2Ug KGlmICh0YWJiYXItc2VsZWN0ZWQtcCB0YWIgKHRhYmJhci1jdXJyZW50LXRhYnNldCkpCiAg ICAgICAgICAgICAgICAgICAgICd0YWJiYXItc2VsZWN0ZWQKICAgICAgICAgICAgICAgICAg ICd0YWJiYXItdW5zZWxlY3RlZCkKICAgICAgICAgICAncG9pbnRlciAnaGFuZCkKICAgICAg ICAgIHRhYmJhci1zZXBhcmF0b3ItdmFsdWUpKQoKKGRlZnVuIHRhYmJhci1saW5lLWZvcm1h dCAodGFic2V0KQogICJSZXR1cm4gdGhlIGBoZWFkZXItbGluZS1mb3JtYXQnIHZhbHVlIHRv IGRpc3BsYXkgVEFCU0VULiIKICAobGV0KiAoKHNlbCAodGFiYmFyLXNlbGVjdGVkLXRhYiB0 YWJzZXQpKQogICAgICAgICAodGFicyAodGFiYmFyLXZpZXcgdGFic2V0KSkKICAgICAgICAg KHBhZGNvbG9yICh0YWJiYXItYmFja2dyb3VuZC1jb2xvcikpCiAgICAgICAgIGF0c2VsIGVs dHMpCiAgICA7OyBJbml0aWFsaXplIGJ1dHRvbnMgYW5kIHNlcGFyYXRvciB2YWx1ZXMuCiAg ICAob3IgdGFiYmFyLXNlcGFyYXRvci12YWx1ZQogICAgICAgICh0YWJiYXItbGluZS1zZXBh cmF0b3IpKQogICAgKG9yIHRhYmJhci1ob21lLWJ1dHRvbi12YWx1ZQogICAgICAgICh0YWJi YXItbGluZS1idXR0b24gJ2hvbWUpKQogICAgKG9yIHRhYmJhci1zY3JvbGwtbGVmdC1idXR0 b24tdmFsdWUKICAgICAgICAodGFiYmFyLWxpbmUtYnV0dG9uICdzY3JvbGwtbGVmdCkpCiAg ICAob3IgdGFiYmFyLXNjcm9sbC1yaWdodC1idXR0b24tdmFsdWUKICAgICAgICAodGFiYmFy LWxpbmUtYnV0dG9uICdzY3JvbGwtcmlnaHQpKQogICAgOzsgVHJhY2sgdGhlIHNlbGVjdGVk IHRhYiB0byBlbnN1cmUgaXQgaXMgYWx3YXlzIHZpc2libGUuCiAgICAod2hlbiB0YWJiYXIt LXRyYWNrLXNlbGVjdGVkCiAgICAgICh3aGlsZSAobm90IChtZW1xIHNlbCB0YWJzKSkKICAg ICAgICAodGFiYmFyLXNjcm9sbCB0YWJzZXQgLTEpCiAgICAgICAgKHNldHEgdGFicyAodGFi YmFyLXZpZXcgdGFic2V0KSkpCiAgICAgICh3aGlsZSAoYW5kIHRhYnMgKG5vdCBhdHNlbCkp CiAgICAgICAgKHNldHEgZWx0cyAgKGNvbnMgKHRhYmJhci1saW5lLXRhYiAoY2FyIHRhYnMp KSBlbHRzKQogICAgICAgICAgICAgIGF0c2VsIChlcSAoY2FyIHRhYnMpIHNlbCkKICAgICAg ICAgICAgICB0YWJzICAoY2RyIHRhYnMpKSkKICAgICAgKHNldHEgZWx0cyAobnJldmVyc2Ug ZWx0cykpCiAgICAgIDs7IEF0IHRoaXMgcG9pbnQgdGhlIHNlbGVjdGVkIHRhYiBpcyB0aGUg bGFzdCBlbHQgaW4gRUxUUy4KICAgICAgOzsgU2Nyb2xsIFRBQlNFVCBhbmQgRUxUUyB1bnRp bCB0aGUgc2VsZWN0ZWQgdGFiIGJlY29tZXMKICAgICAgOzsgdmlzaWJsZS4KICAgICAgKHdp dGgtdGVtcC1idWZmZXIKICAgICAgICAobGV0ICgodHJ1bmNhdGUtcGFydGlhbC13aWR0aC13 aW5kb3dzIG5pbCkKICAgICAgICAgICAgICAoaW5oaWJpdC1tb2RpZmljYXRpb24taG9va3Mg dCkKICAgICAgICAgICAgICBkZWFjdGl2YXRlLW1hcmsgOzsgUHJldmVudCBkZWFjdGl2YXRp b24gb2YgdGhlIG1hcmshCiAgICAgICAgICAgICAgc3RhcnQpCiAgICAgICAgICAoc2V0cSB0 cnVuY2F0ZS1saW5lcyBuaWwKICAgICAgICAgICAgICAgIGJ1ZmZlci11bmRvLWxpc3QgdCkK ICAgICAgICAgIChhcHBseSAnaW5zZXJ0ICh0YWJiYXItbGluZS1idXR0b25zIHRhYnNldCkp CiAgICAgICAgICAoc2V0cSBzdGFydCAocG9pbnQpKQogICAgICAgICAgKHdoaWxlIChhbmQg KGNkciBlbHRzKSA7OyBBbHdheXMgc2hvdyB0aGUgc2VsZWN0ZWQgdGFiIQogICAgICAgICAg ICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGUtcmVn aW9uIHN0YXJ0IChwb2ludC1tYXgpKQogICAgICAgICAgICAgICAgICAgICAgICAoZ290by1j aGFyIChwb2ludC1tYXgpKQogICAgICAgICAgICAgICAgICAgICAgICAoYXBwbHkgJ2luc2Vy dCBlbHRzKQogICAgICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4p KQogICAgICAgICAgICAgICAgICAgICAgICAoPiAodmVydGljYWwtbW90aW9uIDEpIDApKSkK ICAgICAgICAgICAgKHRhYmJhci1zY3JvbGwgdGFic2V0IDEpCiAgICAgICAgICAgIChzZXRx IGVsdHMgKGNkciBlbHRzKSkpKSkKICAgICAgKHNldHEgZWx0cyAobnJldmVyc2UgZWx0cykp CiAgICAgIChzZXRxIHRhYmJhci0tdHJhY2stc2VsZWN0ZWQgbmlsKSkKICAgIDs7IEZvcm1h dCByZW1haW5pbmcgdGFicy4KICAgICh3aGlsZSB0YWJzCiAgICAgIChzZXRxIGVsdHMgKGNv bnMgKHRhYmJhci1saW5lLXRhYiAoY2FyIHRhYnMpKSBlbHRzKQogICAgICAgICAgICB0YWJz IChjZHIgdGFicykpKQogICAgOzsgQ2FjaGUgYW5kIHJldHVybiB0aGUgbmV3IHRhYiBiYXIu CiAgICAodGFiYmFyLXNldC10ZW1wbGF0ZQogICAgIHRhYnNldAogICAgIChsaXN0ICh0YWJi YXItbGluZS1idXR0b25zIHRhYnNldCkKICAgICAgICAgICAobnJldmVyc2UgZWx0cykKICAg ICAgICAgICAocHJvcGVydGl6ZSAiJS0iCiAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2Ug KGxpc3QgOmJhY2tncm91bmQgcGFkY29sb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6Zm9yZWdyb3VuZCBwYWRjb2xvcikKICAgICAgICAgICAgICAgICAgICAgICAn cG9pbnRlciAnYXJyb3cpKSkKICAgICkpCgooZGVmdW4gdGFiYmFyLWxpbmUgKCkKICAiUmV0 dXJuIHRoZSBoZWFkZXIgbGluZSB0ZW1wbGF0ZXMgdGhhdCByZXByZXNlbnQgdGhlIHRhYiBi YXIuCkluaGliaXQgZGlzcGxheSBvZiB0aGUgdGFiIGJhciBpbiBjdXJyZW50IHdpbmRvdyBp ZiBhbnkgb2YgdGhlCmB0YWJiYXItaW5oaWJpdC1mdW5jdGlvbnMnIHJldHVybiBub24tbmls LiIKICAoY29uZAogICAoKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1zdWNjZXNzICd0YWJi YXItaW5oaWJpdC1mdW5jdGlvbnMpCiAgICA7OyBEb24ndCBzaG93IHRoZSB0YWIgYmFyLgog ICAgKHNldHEgaGVhZGVyLWxpbmUtZm9ybWF0IG5pbCkpCiAgICgodGFiYmFyLWN1cnJlbnQt dGFic2V0IHQpCiAgICA7OyBXaGVuIGF2YWlsYWJsZSwgdXNlIGEgY2FjaGVkIHRhYiBiYXIg dmFsdWUsIGVsc2UgcmVjb21wdXRlIGl0LgogICAgKG9yICh0YWJiYXItdGVtcGxhdGUgdGFi YmFyLWN1cnJlbnQtdGFic2V0KQogICAgICAgICh0YWJiYXItbGluZS1mb3JtYXQgdGFiYmFy LWN1cnJlbnQtdGFic2V0KSkpKSkKCihkZWZjb25zdCB0YWJiYXItaGVhZGVyLWxpbmUtZm9y bWF0ICcoOmV2YWwgKHRhYmJhci1saW5lKSkKICAiVGhlIHRhYiBiYXIgaGVhZGVyIGxpbmUg Zm9ybWF0LiIpCgooZGVmdW4gdGFiYmFyLWRlZmF1bHQtaW5oaWJpdC1mdW5jdGlvbiAoKQog ICJJbmhpYml0IGRpc3BsYXkgb2YgdGhlIHRhYiBiYXIgaW4gc3BlY2lmaWVkIHdpbmRvd3Mu ClRoYXQgaXMgZGVkaWNhdGVkIHdpbmRvd3MsIGFuZCBgY2hlY2tkb2MnIHN0YXR1cyB3aW5k b3dzLiIKICAob3IgKHdpbmRvdy1kZWRpY2F0ZWQtcCAoc2VsZWN0ZWQtd2luZG93KSkKICAg ICAgKG1lbWJlciAoYnVmZmVyLW5hbWUpCiAgICAgICAgICAgICAgKGxpc3QgIiAqQ2hlY2tk b2MgU3RhdHVzKiIKICAgICAgICAgICAgICAgICAgICAoaWYgKGJvdW5kcCAnaXNwZWxsLWNo b2ljZXMtYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICBpc3BlbGwtY2hvaWNlcy1i dWZmZXIKICAgICAgICAgICAgICAgICAgICAgICIqQ2hvaWNlcyoiKSkpKSkKDAo7OzsgQ3lj bGljIG5hdmlnYXRpb24gdGhyb3VnaCB0YWJzCjs7CihkZWZ1biB0YWJiYXItY3ljbGUgKCZv cHRpb25hbCBiYWNrd2FyZCB0eXBlKQogICJDeWNsZSB0byB0aGUgbmV4dCBhdmFpbGFibGUg dGFiLgpUaGUgc2NvcGUgb2YgdGhlIGN5Y2xpYyBuYXZpZ2F0aW9uIHRocm91Z2ggdGFicyBp cyBzcGVjaWZpZWQgYnkgdGhlCm9wdGlvbiBgdGFiYmFyLWN5Y2xlLXNjb3BlJy4KSWYgb3B0 aW9uYWwgYXJndW1lbnQgQkFDS1dBUkQgaXMgbm9uLW5pbCwgY3ljbGUgdG8gdGhlIHByZXZp b3VzIHRhYgppbnN0ZWFkLgpPcHRpb25hbCBhcmd1bWVudCBUWVBFIGlzIGEgbW91c2UgZXZl bnQgdHlwZSAoc2VlIHRoZSBmdW5jdGlvbgpgdGFiYmFyLW1ha2UtbW91c2UtZXZlbnQnIGZv ciBkZXRhaWxzKS4iCiAgKGxldCogKCh0YWJzZXQgKHRhYmJhci1jdXJyZW50LXRhYnNldCB0 KSkKICAgICAgICAgKHR0YWJzZXQgKHRhYmJhci1nZXQtdGFic2V0cy10YWJzZXQpKQogICAg ICAgICA7OyBJZiBuYXZpZ2F0aW9uIHRocm91Z2ggZ3JvdXBzIGlzIHJlcXVlc3RlZCwgYW5k IHRoZXJlIGlzCiAgICAgICAgIDs7IG9ubHkgb25lIGdyb3VwLCBuYXZpZ2F0ZSB0aHJvdWdo IHZpc2libGUgdGFicy4KICAgICAgICAgKGN5Y2xlIChpZiAoYW5kIChlcSB0YWJiYXItY3lj bGUtc2NvcGUgJ2dyb3VwcykKICAgICAgICAgICAgICAgICAgICAgICAgIChub3QgKGNkciAo dGFiYmFyLXRhYnMgdHRhYnNldCkpKSkKICAgICAgICAgICAgICAgICAgICAndGFicwogICAg ICAgICAgICAgICAgICB0YWJiYXItY3ljbGUtc2NvcGUpKQogICAgICAgICBzZWxlY3RlZCB0 YWIpCiAgICAod2hlbiB0YWJzZXQKICAgICAgKHNldHEgc2VsZWN0ZWQgKHRhYmJhci1zZWxl Y3RlZC10YWIgdGFic2V0KSkKICAgICAgKGNvbmQKICAgICAgIDs7IEN5Y2xlIHRocm91Z2gg dmlzaWJsZSB0YWJzIG9ubHkuCiAgICAgICAoKGVxIGN5Y2xlICd0YWJzKQogICAgICAgIChz ZXRxIHRhYiAodGFiYmFyLXRhYi1uZXh0IHRhYnNldCBzZWxlY3RlZCBiYWNrd2FyZCkpCiAg ICAgICAgOzsgV2hlbiB0aGVyZSBpcyBubyB0YWIgYWZ0ZXIvYmVmb3JlIHRoZSBzZWxlY3Rl ZCBvbmUsIGN5Y2xlCiAgICAgICAgOzsgdG8gdGhlIGZpcnN0L2xhc3QgdmlzaWJsZSB0YWIu CiAgICAgICAgKHVubGVzcyB0YWIKICAgICAgICAgIChzZXRxIHRhYnNldCAodGFiYmFyLXRh YnMgdGFic2V0KQogICAgICAgICAgICAgICAgdGFiIChjYXIgKGlmIGJhY2t3YXJkIChsYXN0 IHRhYnNldCkgdGFic2V0KSkpKQogICAgICAgICkKICAgICAgIDs7IEN5Y2xlIHRocm91Z2gg dGFiIGdyb3VwcyBvbmx5LgogICAgICAgKChlcSBjeWNsZSAnZ3JvdXBzKQogICAgICAgIChz ZXRxIHRhYiAodGFiYmFyLXRhYi1uZXh0IHR0YWJzZXQgc2VsZWN0ZWQgYmFja3dhcmQpKQog ICAgICAgIDs7IFdoZW4gdGhlcmUgaXMgbm8gZ3JvdXAgYWZ0ZXIvYmVmb3JlIHRoZSBzZWxl Y3RlZCBvbmUsIGN5Y2xlCiAgICAgICAgOzsgdG8gdGhlIGZpcnN0L2xhc3QgYXZhaWxhYmxl IGdyb3VwLgogICAgICAgICh1bmxlc3MgdGFiCiAgICAgICAgICAoc2V0cSB0YWJzZXQgKHRh YmJhci10YWJzIHR0YWJzZXQpCiAgICAgICAgICAgICAgICB0YWIgKGNhciAoaWYgYmFja3dh cmQgKGxhc3QgdGFic2V0KSB0YWJzZXQpKSkpCiAgICAgICAgKQogICAgICAgKHQKICAgICAg ICA7OyBDeWNsZSB0aHJvdWdoIHZpc2libGUgdGFicyB0aGVuIHRhYiBncm91cHMuCiAgICAg ICAgKHNldHEgdGFiICh0YWJiYXItdGFiLW5leHQgdGFic2V0IHNlbGVjdGVkIGJhY2t3YXJk KSkKICAgICAgICA7OyBXaGVuIHRoZXJlIGlzIG5vIHZpc2libGUgdGFiIGFmdGVyL2JlZm9y ZSB0aGUgc2VsZWN0ZWQgb25lLAogICAgICAgIDs7IGN5Y2xlIHRvIHRoZSBuZXh0L3ByZXZp b3VzIGF2YWlsYWJsZSBncm91cC4KICAgICAgICAodW5sZXNzIHRhYgogICAgICAgICAgKHNl dHEgdGFiICh0YWJiYXItdGFiLW5leHQgdHRhYnNldCBzZWxlY3RlZCBiYWNrd2FyZCkpCiAg ICAgICAgICA7OyBXaGVuIHRoZXJlIGlzIG5vIG5leHQvcHJldmlvdXMgZ3JvdXAsIGN5Y2xl IHRvIHRoZQogICAgICAgICAgOzsgZmlyc3QvbGFzdCBhdmFpbGFibGUgZ3JvdXAuCiAgICAg ICAgICAodW5sZXNzIHRhYgogICAgICAgICAgICAoc2V0cSB0YWJzZXQgKHRhYmJhci10YWJz IHR0YWJzZXQpCiAgICAgICAgICAgICAgICAgIHRhYiAoY2FyIChpZiBiYWNrd2FyZCAobGFz dCB0YWJzZXQpIHRhYnNldCkpKSkKICAgICAgICAgIDs7IFNlbGVjdCB0aGUgZmlyc3QvbGFz dCB2aXNpYmxlIHRhYiBvZiB0aGUgbmV3IGdyb3VwLgogICAgICAgICAgKHNldHEgdGFic2V0 ICh0YWJiYXItdGFicyAodGFiYmFyLXRhYi10YWJzZXQgdGFiKSkKICAgICAgICAgICAgICAg IHRhYiAoY2FyIChpZiBiYWNrd2FyZCAobGFzdCB0YWJzZXQpIHRhYnNldCkpKSkKICAgICAg ICApKQogICAgICAodGFiYmFyLWNsaWNrLW9uLXRhYiB0YWIgdHlwZSkpKSkKCjs7OyMjI2F1 dG9sb2FkCihkZWZ1biB0YWJiYXItYmFja3dhcmQgKCkKICAiU2VsZWN0IHRoZSBwcmV2aW91 cyBhdmFpbGFibGUgdGFiLgpEZXBlbmQgb24gdGhlIHNldHRpbmcgb2YgdGhlIG9wdGlvbiBg dGFiYmFyLWN5Y2xlLXNjb3BlJy4iCiAgKGludGVyYWN0aXZlKQogICh0YWJiYXItY3ljbGUg dCkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gdGFiYmFyLWZvcndhcmQgKCkKICAiU2VsZWN0 IHRoZSBuZXh0IGF2YWlsYWJsZSB0YWIuCkRlcGVuZCBvbiB0aGUgc2V0dGluZyBvZiB0aGUg b3B0aW9uIGB0YWJiYXItY3ljbGUtc2NvcGUnLiIKICAoaW50ZXJhY3RpdmUpCiAgKHRhYmJh ci1jeWNsZSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gdGFiYmFyLWJhY2t3YXJkLWdyb3Vw ICgpCiAgIkdvIHRvIHNlbGVjdGVkIHRhYiBpbiB0aGUgcHJldmlvdXMgYXZhaWxhYmxlIGdy b3VwLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKHRhYmJhci1jeWNsZS1zY29wZSAnZ3Jv dXBzKSkKICAgICh0YWJiYXItY3ljbGUgdCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHRh YmJhci1mb3J3YXJkLWdyb3VwICgpCiAgIkdvIHRvIHNlbGVjdGVkIHRhYiBpbiB0aGUgbmV4 dCBhdmFpbGFibGUgZ3JvdXAuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgodGFiYmFyLWN5 Y2xlLXNjb3BlICdncm91cHMpKQogICAgKHRhYmJhci1jeWNsZSkpKQoKOzs7IyMjYXV0b2xv YWQKKGRlZnVuIHRhYmJhci1iYWNrd2FyZC10YWIgKCkKICAiU2VsZWN0IHRoZSBwcmV2aW91 cyB2aXNpYmxlIHRhYi4iCiAgKGludGVyYWN0aXZlKQogIChsZXQgKCh0YWJiYXItY3ljbGUt c2NvcGUgJ3RhYnMpKQogICAgKHRhYmJhci1jeWNsZSB0KSkpCgo7OzsjIyNhdXRvbG9hZAoo ZGVmdW4gdGFiYmFyLWZvcndhcmQtdGFiICgpCiAgIlNlbGVjdCB0aGUgbmV4dCB2aXNpYmxl IHRhYi4iCiAgKGludGVyYWN0aXZlKQogIChsZXQgKCh0YWJiYXItY3ljbGUtc2NvcGUgJ3Rh YnMpKQogICAgKHRhYmJhci1jeWNsZSkpKQoMCjs7OyBCdXR0b24gcHJlc3MgY29tbWFuZHMK OzsKKGRlZnN1YnN0IHRhYmJhci0tbW91c2UgKG51bWJlcikKICAiUmV0dXJuIGEgbW91c2Ug YnV0dG9uIHN5bWJvbCBmcm9tIE5VTUJFUi4KVGhhdCBpcyBtb3VzZS0yLCBvciBtb3VzZS0z IHdoZW4gTlVNQkVSIGlzIHJlc3BlY3RpdmVseSAyLCBvciAzLgpSZXR1cm4gbW91c2UtMSBv dGhlcndpc2UuIgogIChjb25kICgoZXEgbnVtYmVyIDIpICdtb3VzZS0yKQogICAgICAgICgo ZXEgbnVtYmVyIDMpICdtb3VzZS0zKQogICAgICAgICgnbW91c2UtMSkpKQoKOzs7IyMjYXV0 b2xvYWQKKGRlZnVuIHRhYmJhci1wcmVzcy1ob21lICgmb3B0aW9uYWwgYXJnKQogICJQcmVz cyB0aGUgdGFiIGJhciBob21lIGJ1dHRvbi4KVGhhdCBpcywgc2ltdWxhdGUgYSBtb3VzZSBj bGljayBvbiB0aGF0IGJ1dHRvbi4KQSBudW1lcmljIHByZWZpeCBBUkcgdmFsdWUgb2YgMiwg b3IgMywgcmVzcGVjdGl2ZWx5IHNpbXVsYXRlcyBhCm1vdXNlLTIsIG9yIG1vdXNlLTMgY2xp Y2suICBUaGUgZGVmYXVsdCBpcyBhIG1vdXNlLTEgY2xpY2suIgogIChpbnRlcmFjdGl2ZSAi cCIpCiAgKHRhYmJhci1jbGljay1vbi1idXR0b24gJ2hvbWUgKHRhYmJhci0tbW91c2UgYXJn KSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gdGFiYmFyLXByZXNzLXNjcm9sbC1sZWZ0ICgm b3B0aW9uYWwgYXJnKQogICJQcmVzcyB0aGUgdGFiIGJhciBzY3JvbGwtbGVmdCBidXR0b24u ClRoYXQgaXMsIHNpbXVsYXRlIGEgbW91c2UgY2xpY2sgb24gdGhhdCBidXR0b24uCkEgbnVt ZXJpYyBwcmVmaXggQVJHIHZhbHVlIG9mIDIsIG9yIDMsIHJlc3BlY3RpdmVseSBzaW11bGF0 ZXMgYQptb3VzZS0yLCBvciBtb3VzZS0zIGNsaWNrLiAgVGhlIGRlZmF1bHQgaXMgYSBtb3Vz ZS0xIGNsaWNrLiIKICAoaW50ZXJhY3RpdmUgInAiKQogICh0YWJiYXItY2xpY2stb24tYnV0 dG9uICdzY3JvbGwtbGVmdCAodGFiYmFyLS1tb3VzZSBhcmcpKSkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biB0YWJiYXItcHJlc3Mtc2Nyb2xsLXJpZ2h0ICgmb3B0aW9uYWwgYXJnKQogICJQ cmVzcyB0aGUgdGFiIGJhciBzY3JvbGwtcmlnaHQgYnV0dG9uLgpUaGF0IGlzLCBzaW11bGF0 ZSBhIG1vdXNlIGNsaWNrIG9uIHRoYXQgYnV0dG9uLgpBIG51bWVyaWMgcHJlZml4IEFSRyB2 YWx1ZSBvZiAyLCBvciAzLCByZXNwZWN0aXZlbHkgc2ltdWxhdGVzIGEKbW91c2UtMiwgb3Ig bW91c2UtMyBjbGljay4gIFRoZSBkZWZhdWx0IGlzIGEgbW91c2UtMSBjbGljay4iCiAgKGlu dGVyYWN0aXZlICJwIikKICAodGFiYmFyLWNsaWNrLW9uLWJ1dHRvbiAnc2Nyb2xsLXJpZ2h0 ICh0YWJiYXItLW1vdXNlIGFyZykpKQoMCjs7OyBNb3VzZS13aGVlbCBzdXBwb3J0Cjs7Cihy ZXF1aXJlICdtd2hlZWwpCgo7OzsgQ29tcGF0aWJpbGl0eQo7OwooZGVmY29uc3QgdGFiYmFy LS1td2hlZWwtdXAtZXZlbnQKICAoc3ltYm9sLXZhbHVlIChpZiAoYm91bmRwICdtb3VzZS13 aGVlbC11cC1ldmVudCkKICAgICAgICAgICAgICAgICAgICAnbW91c2Utd2hlZWwtdXAtZXZl bnQKICAgICAgICAgICAgICAgICAgJ21vdXNlLXdoZWVsLXVwLWJ1dHRvbikpKQoKKGRlZmNv bnN0IHRhYmJhci0tbXdoZWVsLWRvd24tZXZlbnQKICAoc3ltYm9sLXZhbHVlIChpZiAoYm91 bmRwICdtb3VzZS13aGVlbC1kb3duLWV2ZW50KQogICAgICAgICAgICAgICAgICAgICdtb3Vz ZS13aGVlbC1kb3duLWV2ZW50CiAgICAgICAgICAgICAgICAgICdtb3VzZS13aGVlbC1kb3du LWJ1dHRvbikpKQoKKGRlZnN1YnN0IHRhYmJhci0tbXdoZWVsLWtleSAoZXZlbnQtdHlwZSkK ICAiUmV0dXJuIGEgbW91c2Ugd2hlZWwga2V5IHN5bWJvbCBmcm9tIEVWRU5ULVRZUEUuCldo ZW4gRVZFTlQtVFlQRSBpcyBhIHN5bWJvbCByZXR1cm4gaXQuCldoZW4gaXQgaXMgYSBidXR0 b24gbnVtYmVyLCByZXR1cm4gc3ltYm9sIGBtb3VzZS08RVZFTlQtVFlQRT4nLiIKICAoaWYg KHN5bWJvbHAgZXZlbnQtdHlwZSkKICAgICAgZXZlbnQtdHlwZQogICAgKGludGVybiAoZm9y bWF0ICJtb3VzZS0lcyIgZXZlbnQtdHlwZSkpKSkKCihkZWZzdWJzdCB0YWJiYXItLW13aGVl bC11cC1wIChldmVudCkKICAiUmV0dXJuIG5vbi1uaWwgaWYgRVZFTlQgaXMgYSBtb3VzZS13 aGVlbCB1cCBldmVudC4iCiAgKGxldCAoKHggKGV2ZW50LWJhc2ljLXR5cGUgZXZlbnQpKSkK ICAgIChpZiAoZXEgJ21vdXNlLXdoZWVsIHgpCiAgICAgICAgKDwgKGNhciAoY2RyIChjZHIg ZXZlbnQpKSkgMCkgICA7OyBFbWFjcyAyMS4zCiAgICAgIDs7IEVtYWNzID4gMjEuMwogICAg ICAoZXEgeCB0YWJiYXItLW13aGVlbC11cC1ldmVudCkpKSkKCjs7OyBCYXNpYyBjb21tYW5k cwo7Owo7OzsjIyNhdXRvbG9hZAooZGVmdW4gdGFiYmFyLW13aGVlbC1iYWNrd2FyZCAoZXZl bnQpCiAgIlNlbGVjdCB0aGUgcHJldmlvdXMgYXZhaWxhYmxlIHRhYi4KRVZFTlQgaXMgdGhl IG1vdXNlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgY29tbWFuZC4KTW91c2UtZW5hYmxl ZCBlcXVpdmFsZW50IG9mIHRoZSBjb21tYW5kIGB0YWJiYXItYmFja3dhcmQnLiIKICAoaW50 ZXJhY3RpdmUgIkBlIikKICAodGFiYmFyLWN5Y2xlIHQgZXZlbnQpKQoKOzs7IyMjYXV0b2xv YWQKKGRlZnVuIHRhYmJhci1td2hlZWwtZm9yd2FyZCAoZXZlbnQpCiAgIlNlbGVjdCB0aGUg bmV4dCBhdmFpbGFibGUgdGFiLgpFVkVOVCBpcyB0aGUgbW91c2UgZXZlbnQgdGhhdCB0cmln Z2VyZWQgdGhpcyBjb21tYW5kLgpNb3VzZS1lbmFibGVkIGVxdWl2YWxlbnQgb2YgdGhlIGNv bW1hbmQgYHRhYmJhci1mb3J3YXJkJy4iCiAgKGludGVyYWN0aXZlICJAZSIpCiAgKHRhYmJh ci1jeWNsZSBuaWwgZXZlbnQpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHRhYmJhci1td2hl ZWwtYmFja3dhcmQtZ3JvdXAgKGV2ZW50KQogICJHbyB0byBzZWxlY3RlZCB0YWIgaW4gdGhl IHByZXZpb3VzIGF2YWlsYWJsZSBncm91cC4KSWYgdGhlcmUgaXMgb25seSBvbmUgZ3JvdXAs IHNlbGVjdCB0aGUgcHJldmlvdXMgdmlzaWJsZSB0YWIuCkVWRU5UIGlzIHRoZSBtb3VzZSBl dmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNvbW1hbmQuCk1vdXNlLWVuYWJsZWQgZXF1aXZh bGVudCBvZiB0aGUgY29tbWFuZCBgdGFiYmFyLWJhY2t3YXJkLWdyb3VwJy4iCiAgKGludGVy YWN0aXZlICJAZSIpCiAgKGxldCAoKHRhYmJhci1jeWNsZS1zY29wZSAnZ3JvdXBzKSkKICAg ICh0YWJiYXItY3ljbGUgdCBldmVudCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHRhYmJh ci1td2hlZWwtZm9yd2FyZC1ncm91cCAoZXZlbnQpCiAgIkdvIHRvIHNlbGVjdGVkIHRhYiBp biB0aGUgbmV4dCBhdmFpbGFibGUgZ3JvdXAuCklmIHRoZXJlIGlzIG9ubHkgb25lIGdyb3Vw LCBzZWxlY3QgdGhlIG5leHQgdmlzaWJsZSB0YWIuCkVWRU5UIGlzIHRoZSBtb3VzZSBldmVu dCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNvbW1hbmQuCk1vdXNlLWVuYWJsZWQgZXF1aXZhbGVu dCBvZiB0aGUgY29tbWFuZCBgdGFiYmFyLWZvcndhcmQtZ3JvdXAnLiIKICAoaW50ZXJhY3Rp dmUgIkBlIikKICAobGV0ICgodGFiYmFyLWN5Y2xlLXNjb3BlICdncm91cHMpKQogICAgKHRh YmJhci1jeWNsZSBuaWwgZXZlbnQpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biB0YWJiYXIt bXdoZWVsLWJhY2t3YXJkLXRhYiAoZXZlbnQpCiAgIlNlbGVjdCB0aGUgcHJldmlvdXMgdmlz aWJsZSB0YWIuCkVWRU5UIGlzIHRoZSBtb3VzZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlz IGNvbW1hbmQuCk1vdXNlLWVuYWJsZWQgZXF1aXZhbGVudCBvZiB0aGUgY29tbWFuZCBgdGFi YmFyLWJhY2t3YXJkLXRhYicuIgogIChpbnRlcmFjdGl2ZSAiQGUiKQogIChsZXQgKCh0YWJi YXItY3ljbGUtc2NvcGUgJ3RhYnMpKQogICAgKHRhYmJhci1jeWNsZSB0IGV2ZW50KSkpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gdGFiYmFyLW13aGVlbC1mb3J3YXJkLXRhYiAoZXZlbnQp CiAgIlNlbGVjdCB0aGUgbmV4dCB2aXNpYmxlIHRhYi4KRVZFTlQgaXMgdGhlIG1vdXNlIGV2 ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgY29tbWFuZC4KTW91c2UtZW5hYmxlZCBlcXVpdmFs ZW50IG9mIHRoZSBjb21tYW5kIGB0YWJiYXItZm9yd2FyZC10YWInLiIKICAoaW50ZXJhY3Rp dmUgIkBlIikKICAobGV0ICgodGFiYmFyLWN5Y2xlLXNjb3BlICd0YWJzKSkKICAgICh0YWJi YXItY3ljbGUgbmlsIGV2ZW50KSkpCgo7OzsgV3JhcHBlcnMgd2hlbiB0aGVyZSBpcyBvbmx5 IG9uZSBnZW5lcmljIG1vdXNlLXdoZWVsIGV2ZW50Cjs7Cjs7OyMjI2F1dG9sb2FkCihkZWZ1 biB0YWJiYXItbXdoZWVsLXN3aXRjaC10YWIgKGV2ZW50KQogICJTZWxlY3QgdGhlIG5leHQg b3IgcHJldmlvdXMgdGFiIGFjY29yZGluZyB0byBFVkVOVC4iCiAgKGludGVyYWN0aXZlICJA ZSIpCiAgKGlmICh0YWJiYXItLW13aGVlbC11cC1wIGV2ZW50KQogICAgICAodGFiYmFyLW13 aGVlbC1mb3J3YXJkLXRhYiBldmVudCkKICAgICh0YWJiYXItbXdoZWVsLWJhY2t3YXJkLXRh YiBldmVudCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHRhYmJhci1td2hlZWwtc3dpdGNo LWdyb3VwIChldmVudCkKICAiU2VsZWN0IHRoZSBuZXh0IG9yIHByZXZpb3VzIGdyb3VwIG9m IHRhYnMgYWNjb3JkaW5nIHRvIEVWRU5ULiIKICAoaW50ZXJhY3RpdmUgIkBlIikKICAoaWYg KHRhYmJhci0tbXdoZWVsLXVwLXAgZXZlbnQpCiAgICAgICh0YWJiYXItbXdoZWVsLWZvcndh cmQtZ3JvdXAgZXZlbnQpCiAgICAodGFiYmFyLW13aGVlbC1iYWNrd2FyZC1ncm91cCBldmVu dCkpKQoMCjs7OyBNaW5vciBtb2Rlcwo7OwooZGVmc3Vic3QgdGFiYmFyLW1vZGUtb24tcCAo KQogICJSZXR1cm4gbm9uLW5pbCBpZiBUYWJiYXIgbW9kZSBpcyBvbi4iCiAgKGVxIChkZWZh dWx0LXZhbHVlICdoZWFkZXItbGluZS1mb3JtYXQpCiAgICAgIHRhYmJhci1oZWFkZXItbGlu ZS1mb3JtYXQpKQoKOzs7IFRhYmJhci1Mb2NhbCBtb2RlCjs7CihkZWZ2YXIgdGFiYmFyLS1s b2NhbC1obGYgbmlsKQoKOzs7IyMjYXV0b2xvYWQKKGRlZmluZS1taW5vci1tb2RlIHRhYmJh ci1sb2NhbC1tb2RlCiAgIlRvZ2dsZSBsb2NhbCBkaXNwbGF5IG9mIHRoZSB0YWIgYmFyLgpX aXRoIHByZWZpeCBhcmd1bWVudCBBUkcsIHR1cm4gb24gaWYgcG9zaXRpdmUsIG90aGVyd2lz ZSBvZmYuClJldHVybnMgbm9uLW5pbCBpZiB0aGUgbmV3IHN0YXRlIGlzIGVuYWJsZWQuCldo ZW4gdHVybmVkIG9uLCBpZiBhIGxvY2FsIGhlYWRlciBsaW5lIGlzIHNob3duLCBpdCBpcyBo aWRkZW4gdG8gc2hvdwp0aGUgdGFiIGJhci4gIFRoZSB0YWIgYmFyIGlzIGxvY2FsbHkgaGlk ZGVuIG90aGVyd2lzZS4gIFdoZW4gdHVybmVkCm9mZiwgaWYgYSBsb2NhbCBoZWFkZXIgbGlu ZSBpcyBoaWRkZW4gb3IgdGhlIHRhYiBiYXIgaXMgbG9jYWxseQpoaWRkZW4sIGl0IGlzIHNo b3duIGFnYWluLiAgU2lnbmFsIGFuIGVycm9yIGlmIFRhYmJhciBtb2RlIGlzIG9mZi4iCiAg Omdyb3VwICd0YWJiYXIKICA6Z2xvYmFsIG5pbAogICh1bmxlc3MgKHRhYmJhci1tb2RlLW9u LXApCiAgICAoZXJyb3IgIlRhYmJhciBtb2RlIG11c3QgYmUgZW5hYmxlZCIpKQo7OzsgT04K ICAoaWYgdGFiYmFyLWxvY2FsLW1vZGUKICAgICAgKGlmIChhbmQgKGxvY2FsLXZhcmlhYmxl LXAgJ2hlYWRlci1saW5lLWZvcm1hdCkKICAgICAgICAgICAgICAgaGVhZGVyLWxpbmUtZm9y bWF0KQogICAgICAgICAgOzsgQSBsb2NhbCBoZWFkZXIgbGluZSBleGlzdHMsIGhpZGUgaXQg dG8gc2hvdyB0aGUgdGFiIGJhci4KICAgICAgICAgIChwcm9nbgogICAgICAgICAgICA7OyBG YWlsIGluIGNhc2Ugb2YgYW4gaW5jb25zaXN0ZW5jeSBiZWNhdXNlIGFub3RoZXIgbG9jYWwK ICAgICAgICAgICAgOzsgaGVhZGVyIGxpbmUgaXMgYWxyZWFkeSBoaWRkZW4uCiAgICAgICAg ICAgICh3aGVuIChsb2NhbC12YXJpYWJsZS1wICd0YWJiYXItLWxvY2FsLWhsZikKICAgICAg ICAgICAgICAoZXJyb3IgIkFub3RoZXIgbG9jYWwgaGVhZGVyIGxpbmUgaXMgYWxyZWFkeSBo aWRkZW4iKSkKICAgICAgICAgICAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAndGFiYmFy LS1sb2NhbC1obGYpCiAgICAgICAgICAgICAgICAgaGVhZGVyLWxpbmUtZm9ybWF0KQogICAg ICAgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaGVhZGVyLWxpbmUtZm9ybWF0KSkKICAg ICAgICA7OyBPdGhlcndpc2UgaGlkZSB0aGUgdGFiIGJhciBpbiB0aGlzIGJ1ZmZlci4KICAg ICAgICAoc2V0cSBoZWFkZXItbGluZS1mb3JtYXQgbmlsKSkKOzs7IE9GRgogICAgKGlmIChs b2NhbC12YXJpYWJsZS1wICd0YWJiYXItLWxvY2FsLWhsZikKICAgICAgICA7OyBBIGxvY2Fs IGhlYWRlciBsaW5lIGlzIGhpZGRlbiwgc2hvdyBpdCBhZ2Fpbi4KICAgICAgICAocHJvZ24K ICAgICAgICAgIChzZXRxIGhlYWRlci1saW5lLWZvcm1hdCB0YWJiYXItLWxvY2FsLWhsZikK ICAgICAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICd0YWJiYXItLWxvY2FsLWhsZikpCiAg ICAgIDs7IFRoZSB0YWIgYmFyIGlzIGxvY2FsbHkgaGlkZGVuLCBzaG93IGl0IGFnYWluLgog ICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaGVhZGVyLWxpbmUtZm9ybWF0KSkpKQoMCjs7 OyBUYWJiYXIgbW9kZQo7OwooZGVmdmFyIHRhYmJhci1wcmVmaXgta2V5IFsoY29udHJvbCA/ YyldCiAgIlRoZSBjb21tb24gcHJlZml4IGtleSB1c2VkIGluIFRhYmJhciBtb2RlLiIpCgoo ZGVmdmFyIHRhYmJhci1wcmVmaXgtbWFwCiAgKGxldCAoKGttIChtYWtlLXNwYXJzZS1rZXlt YXApKSkKICAgIChkZWZpbmUta2V5IGttIFsoY29udHJvbCBob21lKV0gICd0YWJiYXItcHJl c3MtaG9tZSkKICAgIChkZWZpbmUta2V5IGttIFsoY29udHJvbCBsZWZ0KV0gICd0YWJiYXIt YmFja3dhcmQpCiAgICAoZGVmaW5lLWtleSBrbSBbKGNvbnRyb2wgcmlnaHQpXSAndGFiYmFy LWZvcndhcmQpCiAgICAoZGVmaW5lLWtleSBrbSBbKGNvbnRyb2wgdXApXSAgICAndGFiYmFy LWJhY2t3YXJkLWdyb3VwKQogICAgKGRlZmluZS1rZXkga20gWyhjb250cm9sIGRvd24pXSAg J3RhYmJhci1mb3J3YXJkLWdyb3VwKQogICAgKGRlZmluZS1rZXkga20gWyhjb250cm9sIHBy aW9yKV0gJ3RhYmJhci1wcmVzcy1zY3JvbGwtbGVmdCkKICAgIChkZWZpbmUta2V5IGttIFso Y29udHJvbCBuZXh0KV0gICd0YWJiYXItcHJlc3Mtc2Nyb2xsLXJpZ2h0KQogICAgKGRlZmlu ZS1rZXkga20gWyhjb250cm9sIGYxMCldICAgJ3RhYmJhci1sb2NhbC1tb2RlKQogICAga20p CiAgIlRoZSBrZXkgYmluZGluZ3MgcHJvdmlkZWQgaW4gVGFiYmFyIG1vZGUuIikKCihkZWZ2 YXIgdGFiYmFyLW1vZGUtbWFwCiAgKGxldCAoKGttIChtYWtlLXNwYXJzZS1rZXltYXApKSkK ICAgIChkZWZpbmUta2V5IGttIHRhYmJhci1wcmVmaXgta2V5IHRhYmJhci1wcmVmaXgtbWFw KQogICAga20pCiAgIktleW1hcCB0byB1c2UgaW4gIFRhYmJhciBtb2RlLiIpCgooZGVmdmFy IHRhYmJhci0tZ2xvYmFsLWhsZiBuaWwpCgo7OzsjIyNhdXRvbG9hZAooZGVmaW5lLW1pbm9y LW1vZGUgdGFiYmFyLW1vZGUKICAiVG9nZ2xlIGRpc3BsYXkgb2YgYSB0YWIgYmFyIGluIHRo ZSBoZWFkZXIgbGluZS4KV2l0aCBwcmVmaXggYXJndW1lbnQgQVJHLCB0dXJuIG9uIGlmIHBv c2l0aXZlLCBvdGhlcndpc2Ugb2ZmLgpSZXR1cm5zIG5vbi1uaWwgaWYgdGhlIG5ldyBzdGF0 ZSBpcyBlbmFibGVkLgoKXFx7dGFiYmFyLW1vZGUtbWFwfSIKICA6Z3JvdXAgJ3RhYmJhcgog IDpyZXF1aXJlICd0YWJiYXIKICA6Z2xvYmFsIHQKICA6a2V5bWFwIHRhYmJhci1tb2RlLW1h cAogIChpZiB0YWJiYXItbW9kZQo7OzsgT04KICAgICAgKHVubGVzcyAodGFiYmFyLW1vZGUt b24tcCkKICAgICAgICA7OyBTYXZlIGN1cnJlbnQgZGVmYXVsdCB2YWx1ZSBvZiBgaGVhZGVy LWxpbmUtZm9ybWF0Jy4KICAgICAgICAoc2V0cSB0YWJiYXItLWdsb2JhbC1obGYgKGRlZmF1 bHQtdmFsdWUgJ2hlYWRlci1saW5lLWZvcm1hdCkpCiAgICAgICAgKHRhYmJhci1pbml0LXRh YnNldHMtc3RvcmUpCiAgICAgICAgKHNldHEtZGVmYXVsdCBoZWFkZXItbGluZS1mb3JtYXQg dGFiYmFyLWhlYWRlci1saW5lLWZvcm1hdCkpCjs7OyBPRkYKICAgICh3aGVuICh0YWJiYXIt bW9kZS1vbi1wKQogICAgICA7OyBUdXJuIG9mZiBUYWJiYXItTG9jYWwgbW9kZSBnbG9iYWxs eS4KICAgICAgKG1hcGMgIycobGFtYmRhIChiKQogICAgICAgICAgICAgICAgKGNvbmRpdGlv bi1jYXNlIG5pbAogICAgICAgICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGIK ICAgICAgICAgICAgICAgICAgICAgIChhbmQgdGFiYmFyLWxvY2FsLW1vZGUKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHRhYmJhci1sb2NhbC1tb2RlIC0xKSkpCiAgICAgICAgICAg ICAgICAgIChlcnJvciBuaWwpKSkKICAgICAgICAgICAgKGJ1ZmZlci1saXN0KSkKICAgICAg OzsgUmVzdG9yZSBwcmV2aW91cyBgaGVhZGVyLWxpbmUtZm9ybWF0Jy4KICAgICAgKHNldHEt ZGVmYXVsdCBoZWFkZXItbGluZS1mb3JtYXQgdGFiYmFyLS1nbG9iYWwtaGxmKQogICAgICAo dGFiYmFyLWZyZWUtdGFic2V0cy1zdG9yZSkpCiAgICApKQoKOzs7IFRhYmJhci1Nd2hlZWwg bW9kZQo7OwooZGVmdmFyIHRhYmJhci1td2hlZWwtbW9kZS1tYXAKICAobGV0ICgoa20gKG1h a2Utc3BhcnNlLWtleW1hcCkpKQogICAgKGlmIChnZXQgJ21vdXNlLXdoZWVsICdldmVudC1z eW1ib2wtZWxlbWVudHMpCiAgICAgICAgOzsgVXNlIG9uZSBnZW5lcmljIG1vdXNlIHdoZWVs IGV2ZW50CiAgICAgICAgKGRlZmluZS1rZXkga20gW0EtbW91c2Utd2hlZWxdCiAgICAgICAg ICAndGFiYmFyLW13aGVlbC1zd2l0Y2gtZ3JvdXApCiAgICAgIDs7IFVzZSBzZXBhcmF0ZSB1 cC9kb3duIG1vdXNlIHdoZWVsIGV2ZW50cwogICAgICAobGV0ICgodXAgICAodGFiYmFyLS1t d2hlZWwta2V5IHRhYmJhci0tbXdoZWVsLXVwLWV2ZW50KSkKICAgICAgICAgICAgKGRvd24g KHRhYmJhci0tbXdoZWVsLWtleSB0YWJiYXItLW13aGVlbC1kb3duLWV2ZW50KSkpCiAgICAg ICAgKGRlZmluZS1rZXkga20gYFtoZWFkZXItbGluZSAsZG93bl0KICAgICAgICAgICd0YWJi YXItbXdoZWVsLWJhY2t3YXJkLWdyb3VwKQogICAgICAgIChkZWZpbmUta2V5IGttIGBbaGVh ZGVyLWxpbmUgLHVwXQogICAgICAgICAgJ3RhYmJhci1td2hlZWwtZm9yd2FyZC1ncm91cCkK ICAgICAgICAoZGVmaW5lLWtleSBrbSBgW2hlYWRlci1saW5lIChjb250cm9sICxkb3duKV0K ICAgICAgICAgICd0YWJiYXItbXdoZWVsLWJhY2t3YXJkLXRhYikKICAgICAgICAoZGVmaW5l LWtleSBrbSBgW2hlYWRlci1saW5lIChjb250cm9sICx1cCldCiAgICAgICAgICAndGFiYmFy LW13aGVlbC1mb3J3YXJkLXRhYikKICAgICAgICAoZGVmaW5lLWtleSBrbSBgW2hlYWRlci1s aW5lIChzaGlmdCAsZG93bildCiAgICAgICAgICAndGFiYmFyLW13aGVlbC1iYWNrd2FyZCkK ICAgICAgICAoZGVmaW5lLWtleSBrbSBgW2hlYWRlci1saW5lIChzaGlmdCAsdXApXQogICAg ICAgICAgJ3RhYmJhci1td2hlZWwtZm9yd2FyZCkKICAgICAgICApKQogICAga20pCiAgIktl eW1hcCB0byB1c2UgaW4gVGFiYmFyLU13aGVlbCBtb2RlLiIpCgo7OzsjIyNhdXRvbG9hZAoo ZGVmaW5lLW1pbm9yLW1vZGUgdGFiYmFyLW13aGVlbC1tb2RlCiAgIlRvZ2dsZSB1c2Ugb2Yg dGhlIG1vdXNlIHdoZWVsIHRvIG5hdmlnYXRlIHRocm91Z2ggdGFicyBvciBncm91cHMuCldp dGggcHJlZml4IGFyZ3VtZW50IEFSRywgdHVybiBvbiBpZiBwb3NpdGl2ZSwgb3RoZXJ3aXNl IG9mZi4KUmV0dXJucyBub24tbmlsIGlmIHRoZSBuZXcgc3RhdGUgaXMgZW5hYmxlZC4KClxc e3RhYmJhci1td2hlZWwtbW9kZS1tYXB9IgogIDpncm91cCAndGFiYmFyCiAgOnJlcXVpcmUg J3RhYmJhcgogIDpnbG9iYWwgdAogIDprZXltYXAgdGFiYmFyLW13aGVlbC1tb2RlLW1hcAog ICh3aGVuIHRhYmJhci1td2hlZWwtbW9kZQogICAgKHVubGVzcyAoYW5kIG1vdXNlLXdoZWVs LW1vZGUgdGFiYmFyLW1vZGUpCiAgICAgICh0YWJiYXItbXdoZWVsLW1vZGUgLTEpKSkpCgoo ZGVmdW4gdGFiYmFyLW13aGVlbC1mb2xsb3cgKCkKICAiVG9nZ2xlIFRhYmJhci1Nd2hlZWwg Zm9sbG93aW5nIFRhYmJhciBhbmQgTW91c2UtV2hlZWwgbW9kZXMuIgogICh0YWJiYXItbXdo ZWVsLW1vZGUgKGlmIChhbmQgbW91c2Utd2hlZWwtbW9kZSB0YWJiYXItbW9kZSkgMSAtMSkp KQoKKGFkZC1ob29rICd0YWJiYXItbW9kZS1ob29rICAgICAgJ3RhYmJhci1td2hlZWwtZm9s bG93KQooYWRkLWhvb2sgJ21vdXNlLXdoZWVsLW1vZGUtaG9vayAndGFiYmFyLW13aGVlbC1m b2xsb3cpCgwKOzs7IEJ1ZmZlciB0YWJzCjs7CihkZWZncm91cCB0YWJiYXItYnVmZmVyIG5p bAogICJEaXNwbGF5IGJ1ZmZlcnMgaW4gdGhlIHRhYiBiYXIuIgogIDpncm91cCAndGFiYmFy KQoKKGRlZmN1c3RvbSB0YWJiYXItYnVmZmVyLWhvbWUtYnV0dG9uCiAgKGNvbnMgKGNvbnMg IlsrXSIgdGFiYmFyLWhvbWUtYnV0dG9uLWVuYWJsZWQtaW1hZ2UpCiAgICAgICAgKGNvbnMg IlstXSIgdGFiYmFyLWhvbWUtYnV0dG9uLWRpc2FibGVkLWltYWdlKSkKICAiVGhlIGhvbWUg YnV0dG9uIGRpc3BsYXllZCB3aGVuIHNob3dpbmcgYnVmZmVyIHRhYnMuClRoZSBlbmFibGVk IGJ1dHRvbiB2YWx1ZSBpcyBkaXNwbGF5ZWQgd2hlbiBzaG93aW5nIHRhYnMgZm9yIGdyb3Vw cyBvZgpidWZmZXJzLCBhbmQgdGhlIGRpc2FibGVkIGJ1dHRvbiB2YWx1ZSBpcyBkaXNwbGF5 ZWQgd2hlbiBzaG93aW5nCmJ1ZmZlciB0YWJzLgpUaGUgdmFyaWFibGUgYHRhYmJhci1idXR0 b24td2lkZ2V0JyBnaXZlcyBkZXRhaWxzIG9uIHRoaXMgd2lkZ2V0LiIKICA6Z3JvdXAgJ3Rh YmJhci1idWZmZXIKICA6dHlwZSB0YWJiYXItYnV0dG9uLXdpZGdldAogIDpzZXQgJyhsYW1i ZGEgKHZhcmlhYmxlIHZhbHVlKQogICAgICAgICAgKGN1c3RvbS1zZXQtZGVmYXVsdCB2YXJp YWJsZSB2YWx1ZSkKICAgICAgICAgIDs7IFNjaGVkdWxlIHJlZnJlc2ggb2YgYnV0dG9uIHZh bHVlLgogICAgICAgICAgKHNldHEgdGFiYmFyLWhvbWUtYnV0dG9uLXZhbHVlIG5pbCkpKQoK KGRlZnZhciB0YWJiYXItYnVmZmVyLWxpc3QtZnVuY3Rpb24gJ3RhYmJhci1idWZmZXItbGlz dAogICJGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byBzaG93 IGluIHRhYnMuClRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzIGFu ZCBtdXN0IHJldHVybiBhIGxpc3Qgb2YKYnVmZmVycy4iKQoKKGRlZnZhciB0YWJiYXItYnVm ZmVyLWdyb3Vwcy1mdW5jdGlvbiAndGFiYmFyLWJ1ZmZlci1ncm91cHMKICAiRnVuY3Rpb24g dGhhdCBnaXZlcyB0aGUgZ3JvdXAgbmFtZXMgdGhlIGN1cnJlbnQgYnVmZmVyIGJlbG9uZ3Mg dG8uCkl0IG11c3QgcmV0dXJuIGEgbGlzdCBvZiBncm91cCBuYW1lcywgb3IgbmlsIGlmIHRo ZSBidWZmZXIgaGFzIG5vCmdyb3VwLiAgTm90aWNlIHRoYXQgaXQgaXMgYmV0dGVyIHRoYXQg YSBidWZmZXIgYmVsb25ncyB0byBvbmUgZ3JvdXAuIikKCihkZWZ1biB0YWJiYXItYnVmZmVy LWxpc3QgKCkKICAiUmV0dXJuIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8gc2hvdyBpbiB0YWJz LgpFeGNsdWRlIGJ1ZmZlcnMgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBhIHNwYWNlLCB3aGVu IHRoZXkgYXJlIG5vdAp2aXNpdGluZyBhIGZpbGUuICBUaGUgY3VycmVudCBidWZmZXIgaXMg YWx3YXlzIGluY2x1ZGVkLiIKICAoZGVscSBuaWwKICAgICAgICAobWFwY2FyICMnKGxhbWJk YSAoYikKICAgICAgICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgICAgICA7 OyBBbHdheXMgaW5jbHVkZSB0aGUgY3VycmVudCBidWZmZXIuCiAgICAgICAgICAgICAgICAg ICAgICgoZXEgKGN1cnJlbnQtYnVmZmVyKSBiKSBiKQogICAgICAgICAgICAgICAgICAgICAo KGJ1ZmZlci1maWxlLW5hbWUgYikgYikKICAgICAgICAgICAgICAgICAgICAgKChjaGFyLWVx dWFsID9cICAoYXJlZiAoYnVmZmVyLW5hbWUgYikgMCkpIG5pbCkKICAgICAgICAgICAgICAg ICAgICAgKChidWZmZXItbGl2ZS1wIGIpIGIpKSkKICAgICAgICAgICAgICAgIChidWZmZXIt bGlzdCkpKSkKCihkZWZ1biB0YWJiYXItYnVmZmVyLW1vZGUtZGVyaXZlZC1wIChtb2RlIHBh cmVudHMpCiAgIlJldHVybiBub24tbmlsIGlmIE1PREUgZGVyaXZlcyBmcm9tIGEgbW9kZSBp biBQQVJFTlRTLiIKICAobGV0IChkZXJpdmVkKQogICAgKHdoaWxlIChhbmQgKG5vdCBkZXJp dmVkKSBtb2RlKQogICAgICAoaWYgKG1lbXEgbW9kZSBwYXJlbnRzKQogICAgICAgICAgKHNl dHEgZGVyaXZlZCB0KQogICAgICAgIChzZXRxIG1vZGUgKGdldCBtb2RlICdkZXJpdmVkLW1v ZGUtcGFyZW50KSkpKQogICAgZGVyaXZlZCkpCgooZGVmdW4gdGFiYmFyLWJ1ZmZlci1ncm91 cHMgKCkKICAiUmV0dXJuIHRoZSBsaXN0IG9mIGdyb3VwIG5hbWVzIHRoZSBjdXJyZW50IGJ1 ZmZlciBiZWxvbmdzIHRvLgpSZXR1cm4gYSBsaXN0IG9mIG9uZSBlbGVtZW50IGJhc2VkIG9u IG1ham9yIG1vZGUuIgogIChsaXN0CiAgIChjb25kCiAgICAoKG9yIChnZXQtYnVmZmVyLXBy b2Nlc3MgKGN1cnJlbnQtYnVmZmVyKSkKICAgICAgICAgOzsgQ2hlY2sgaWYgdGhlIG1ham9y IG1vZGUgZGVyaXZlcyBmcm9tIGBjb21pbnQtbW9kZScgb3IKICAgICAgICAgOzsgYGNvbXBp bGF0aW9uLW1vZGUnLgogICAgICAgICAodGFiYmFyLWJ1ZmZlci1tb2RlLWRlcml2ZWQtcAog ICAgICAgICAgbWFqb3ItbW9kZSAnKGNvbWludC1tb2RlIGNvbXBpbGF0aW9uLW1vZGUpKSkK ICAgICAiUHJvY2VzcyIKICAgICApCiAgICAoKG1lbWJlciAoYnVmZmVyLW5hbWUpCiAgICAg ICAgICAgICAnKCIqc2NyYXRjaCoiICIqTWVzc2FnZXMqIikpCiAgICAgIkNvbW1vbiIKICAg ICApCiAgICAoKGVxIG1ham9yLW1vZGUgJ2RpcmVkLW1vZGUpCiAgICAgIkRpcmVkIgogICAg ICkKICAgICgobWVtcSBtYWpvci1tb2RlCiAgICAgICAgICAgJyhoZWxwLW1vZGUgYXByb3Bv cy1tb2RlIEluZm8tbW9kZSBNYW4tbW9kZSkpCiAgICAgIkhlbHAiCiAgICAgKQogICAgKCht ZW1xIG1ham9yLW1vZGUKICAgICAgICAgICAnKHJtYWlsLW1vZGUKICAgICAgICAgICAgIHJt YWlsLWVkaXQtbW9kZSB2bS1zdW1tYXJ5LW1vZGUgdm0tbW9kZSBtYWlsLW1vZGUKICAgICAg ICAgICAgIG1oLWxldHRlci1tb2RlIG1oLXNob3ctbW9kZSBtaC1mb2xkZXItbW9kZQogICAg ICAgICAgICAgZ251cy1zdW1tYXJ5LW1vZGUgbWVzc2FnZS1tb2RlIGdudXMtZ3JvdXAtbW9k ZQogICAgICAgICAgICAgZ251cy1hcnRpY2xlLW1vZGUgc2NvcmUtbW9kZSBnbnVzLWJyb3dz ZS1raWxsZWQtbW9kZSkpCiAgICAgIk1haWwiCiAgICAgKQogICAgKHQKICAgICA7OyBSZXR1 cm4gYG1vZGUtbmFtZScgaWYgbm90IGJsYW5rLCBgbWFqb3ItbW9kZScgb3RoZXJ3aXNlLgog ICAgIChpZiAoYW5kIChzdHJpbmdwIG1vZGUtbmFtZSkKICAgICAgICAgICAgICA7OyBUYWtl IGNhcmUgb2YgcHJlc2VydmluZyB0aGUgbWF0Y2gtZGF0YSBiZWNhdXNlIHRoaXMKICAgICAg ICAgICAgICA7OyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB1cGRhdGluZyB0aGUgaGVhZGVy IGxpbmUuCiAgICAgICAgICAgICAgKHNhdmUtbWF0Y2gtZGF0YSAoc3RyaW5nLW1hdGNoICJb XiBdIiBtb2RlLW5hbWUpKSkKICAgICAgICAgbW9kZS1uYW1lCiAgICAgICAoc3ltYm9sLW5h bWUgbWFqb3ItbW9kZSkpCiAgICAgKSkpKQoKOzs7IEdyb3VwIGJ1ZmZlcnMgaW4gdGFiIHNl dHMuCjs7CihkZWZ2YXIgdGFiYmFyLS1idWZmZXJzIG5pbCkKCihkZWZ1biB0YWJiYXItYnVm ZmVyLXVwZGF0ZS1ncm91cHMgKCkKICAiVXBkYXRlIHRhYiBzZXRzIGZyb20gZ3JvdXBzIG9m IGV4aXN0aW5nIGJ1ZmZlcnMuClJldHVybiB0aGUgdGhlIGZpcnN0IGdyb3VwIHdoZXJlIHRo ZSBjdXJyZW50IGJ1ZmZlciBpcy4iCiAgKGxldCAoKGJsIChzb3J0CiAgICAgICAgICAgICAo bWFwY2FyCiAgICAgICAgICAgICAgIycobGFtYmRhIChiKQogICAgICAgICAgICAgICAgICAo d2l0aC1jdXJyZW50LWJ1ZmZlciBiCiAgICAgICAgICAgICAgICAgICAgKGxpc3QgKGN1cnJl bnQtYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItbmFtZSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAoaWYgdGFiYmFyLWJ1ZmZlci1ncm91cHMtZnVuY3Rp b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgdGFiYmFyLWJ1ZmZl ci1ncm91cHMtZnVuY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCJDb21t b24iKSkpKSkKICAgICAgICAgICAgICAoYW5kIHRhYmJhci1idWZmZXItbGlzdC1mdW5jdGlv bgogICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgdGFiYmFyLWJ1ZmZlci1saXN0LWZ1bmN0 aW9uKSkpCiAgICAgICAgICAgICAjJyhsYW1iZGEgKGUxIGUyKQogICAgICAgICAgICAgICAg IChzdHJpbmctbGVzc3AgKG50aCAxIGUxKSAobnRoIDEgZTIpKSkpKSkKICAgIDs7IElmIHRo ZSBjYWNoZSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSB0YWIgc2V0cy4KICAgICh1bmxlc3Mg KGVxdWFsIGJsIHRhYmJhci0tYnVmZmVycykKICAgICAgOzsgQWRkIG5ldyBidWZmZXJzLCBv ciB1cGRhdGUgY2hhbmdlZCBvbmVzLgogICAgICAoZG9saXN0IChlIGJsKQogICAgICAgIChk b2xpc3QgKGcgKG50aCAyIGUpKQogICAgICAgICAgKGxldCAoKHRhYnNldCAodGFiYmFyLWdl dC10YWJzZXQgZykpKQogICAgICAgICAgICAoaWYgdGFic2V0CiAgICAgICAgICAgICAgICAo dW5sZXNzIChlcXVhbCBlIChhc3NxIChjYXIgZSkgdGFiYmFyLS1idWZmZXJzKSkKICAgICAg ICAgICAgICAgICAgOzsgVGhpcyBpcyBhIG5ldyBidWZmZXIsIG9yIGEgcHJldmlvdXNseSBl eGlzdGluZwogICAgICAgICAgICAgICAgICA7OyBidWZmZXIgdGhhdCBoYXMgYmVlbiByZW5h bWVkLCBvciBtb3ZlZCB0byBhbm90aGVyCiAgICAgICAgICAgICAgICAgIDs7IGdyb3VwLiAg VXBkYXRlIHRoZSB0YWIgc2V0LCBhbmQgdGhlIGRpc3BsYXkuCiAgICAgICAgICAgICAgICAg ICh0YWJiYXItYWRkLXRhYiB0YWJzZXQgKGNhciBlKSB0KQogICAgICAgICAgICAgICAgICAo dGFiYmFyLXNldC10ZW1wbGF0ZSB0YWJzZXQgbmlsKSkKICAgICAgICAgICAgICAodGFiYmFy LW1ha2UtdGFic2V0IGcgKGNhciBlKSkpKSkpCiAgICAgIDs7IFJlbW92ZSB0YWJzIGZvciBi dWZmZXJzIG5vdCBmb3VuZCBpbiBjYWNoZSBvciBtb3ZlZCB0byBvdGhlcgogICAgICA7OyBn cm91cHMsIGFuZCByZW1vdmUgZW1wdHkgdGFic2V0cy4KICAgICAgKG1hcGMgJ3RhYmJhci1k ZWxldGUtdGFic2V0CiAgICAgICAgICAgICh0YWJiYXItbWFwLXRhYnNldHMKICAgICAgICAg ICAgICMnKGxhbWJkYSAodGFic2V0KQogICAgICAgICAgICAgICAgIChkb2xpc3QgKHRhYiAo dGFiYmFyLXRhYnMgdGFic2V0KSkKICAgICAgICAgICAgICAgICAgIChsZXQgKChlIChhc3Nx ICh0YWJiYXItdGFiLXZhbHVlIHRhYikgYmwpKSkKICAgICAgICAgICAgICAgICAgICAgKG9y IChhbmQgZSAobWVtcSB0YWJzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobWFwY2FyICd0YWJiYXItZ2V0LXRhYnNldAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG50aCAyIGUpKSkpCiAgICAgICAgICAgICAgICAg ICAgICAgICAodGFiYmFyLWRlbGV0ZS10YWIgdGFiKSkpKQogICAgICAgICAgICAgICAgIDs7 IFJldHVybiBlbXB0eSB0YWIgc2V0cwogICAgICAgICAgICAgICAgICh1bmxlc3MgKHRhYmJh ci10YWJzIHRhYnNldCkKICAgICAgICAgICAgICAgICAgIHRhYnNldCkpKSkKICAgICAgOzsg VGhlIG5ldyBjYWNoZSBiZWNvbWVzIHRoZSBjdXJyZW50IG9uZS4KICAgICAgKHNldHEgdGFi YmFyLS1idWZmZXJzIGJsKSkpCiAgOzsgUmV0dXJuIHRoZSBmaXJzdCBncm91cCB0aGUgY3Vy cmVudCBidWZmZXIgYmVsb25ncyB0by4KICAoY2FyIChudGggMiAoYXNzcSAoY3VycmVudC1i dWZmZXIpIHRhYmJhci0tYnVmZmVycykpKSkKDAo7OzsgVGFiIGJhciBjYWxsYmFja3MKOzsK KGRlZnZhciB0YWJiYXItLWJ1ZmZlci1zaG93LWdyb3VwcyBuaWwpCgooZGVmc3Vic3QgdGFi YmFyLWJ1ZmZlci1zaG93LWdyb3VwcyAoZmxhZykKICAiU2V0IGRpc3BsYXkgb2YgdGFicyBm b3IgZ3JvdXBzIG9mIGJ1ZmZlcnMgdG8gRkxBRy4iCiAgKHNldHEgdGFiYmFyLS1idWZmZXIt c2hvdy1ncm91cHMgZmxhZwogICAgICAgIDs7IFJlZGlzcGxheSB0aGUgaG9tZSBidXR0b24u CiAgICAgICAgdGFiYmFyLWhvbWUtYnV0dG9uLXZhbHVlIG5pbCkpCgooZGVmdW4gdGFiYmFy LWJ1ZmZlci10YWJzICgpCiAgIlJldHVybiB0aGUgYnVmZmVycyB0byBkaXNwbGF5IG9uIHRo ZSB0YWIgYmFyLCBpbiBhIHRhYiBzZXQuIgogIChsZXQgKCh0YWJzZXQgKHRhYmJhci1nZXQt dGFic2V0ICh0YWJiYXItYnVmZmVyLXVwZGF0ZS1ncm91cHMpKSkpCiAgICAodGFiYmFyLXNl bGVjdC10YWItdmFsdWUgKGN1cnJlbnQtYnVmZmVyKSB0YWJzZXQpCiAgICAod2hlbiB0YWJi YXItLWJ1ZmZlci1zaG93LWdyb3VwcwogICAgICAoc2V0cSB0YWJzZXQgKHRhYmJhci1nZXQt dGFic2V0cy10YWJzZXQpKQogICAgICAodGFiYmFyLXNlbGVjdC10YWItdmFsdWUgKGN1cnJl bnQtYnVmZmVyKSB0YWJzZXQpKQogICAgdGFic2V0KSkKCihkZWZ1biB0YWJiYXItYnVmZmVy LWJ1dHRvbi1sYWJlbCAobmFtZSkKICAiUmV0dXJuIGEgbGFiZWwgZm9yIGJ1dHRvbiBOQU1F LgpUaGF0IGlzIGEgcGFpciAoRU5BQkxFRCAuIERJU0FCTEVEKSwgd2hlcmUgRU5BQkxFRCBh bmQgRElTQUJMRUQgYXJlCnJlc3BlY3RpdmVseSB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgYnV0 dG9uIHdoZW4gZW5hYmxlZCBhbmQgZGlzYWJsZWQuClRoZXkgYXJlIHByb3BlcnRpemVkIHN0 cmluZ3Mgd2hpY2ggY291bGQgZGlzcGxheSBpbWFnZXMsIGFzIHNwZWNpZmllZApieSB0aGUg dmFyaWFibGUgYHRhYmJhci1idXR0b24tbGFiZWwnLgpXaGVuIE5BTUUgaXMgJ2hvbWUsIHJl dHVybiBhIGRpZmZlcmVudCBFTkFCTEVEIGJ1dHRvbiBpZiBzaG93aW5nIHRhYnMKb3IgZ3Jv dXBzLiAgQ2FsbCB0aGUgZnVuY3Rpb24gYHRhYmJhci1idXR0b24tbGFiZWwnIG90aGVyd2lz ZS4iCiAgKGxldCAoKGxhYiAodGFiYmFyLWJ1dHRvbi1sYWJlbCBuYW1lKSkpCiAgICAod2hl biAoZXEgbmFtZSAnaG9tZSkKICAgICAgKGxldCogKChidG4gdGFiYmFyLWJ1ZmZlci1ob21l LWJ1dHRvbikKICAgICAgICAgICAgIChvbiAgKHRhYmJhci1maW5kLWltYWdlIChjZGFyIGJ0 bikpKQogICAgICAgICAgICAgKG9mZiAodGFiYmFyLWZpbmQtaW1hZ2UgKGNkZHIgYnRuKSkp KQogICAgICAgIDs7IFdoZW4gYHRhYmJhci1idWZmZXItaG9tZS1idXR0b24nIGRvZXMgbm90 IHByb3ZpZGUgYSB2YWx1ZSwKICAgICAgICA7OyBkZWZhdWx0IHRvIHRoZSBlbmFibGVkIHZh bHVlIG9mIGB0YWJiYXItaG9tZS1idXR0b24nLgogICAgICAgIChpZiBvbgogICAgICAgICAg ICAodGFiYmFyLW5vcm1hbGl6ZS1pbWFnZSBvbiAxKQogICAgICAgICAgKHNldHEgb24gKGdl dC10ZXh0LXByb3BlcnR5IDAgJ2Rpc3BsYXkgKGNhciBsYWIpKSkpCiAgICAgICAgKGlmIG9m ZgogICAgICAgICAgICAodGFiYmFyLW5vcm1hbGl6ZS1pbWFnZSBvZmYgMSkKICAgICAgICAg IChzZXRxIG9mZiAoZ2V0LXRleHQtcHJvcGVydHkgMCAnZGlzcGxheSAoY2FyIGxhYikpKSkK ICAgICAgICAoc2V0Y2FyIGxhYgogICAgICAgICAgICAgICAgKGlmIHRhYmJhci0tYnVmZmVy LXNob3ctZ3JvdXBzCiAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKG9yIChjYWFy IGJ0bikgKGNhciBsYWIpKSAnZGlzcGxheSBvbikKICAgICAgICAgICAgICAgICAgKHByb3Bl cnRpemUgKG9yIChjYWRyIGJ0bikgKGNhciBsYWIpKSAnZGlzcGxheSBvZmYpKSkKICAgICAg ICApKQogICAgbGFiKSkKCihkZWZ1biB0YWJiYXItYnVmZmVyLXRhYi1sYWJlbCAodGFiKQog ICJSZXR1cm4gYSBsYWJlbCBmb3IgVEFCLgpUaGF0IGlzLCBhIHN0cmluZyB1c2VkIHRvIHJl cHJlc2VudCBpdCBvbiB0aGUgdGFiIGJhci4iCiAgKGxldCAoKGxhYmVsICAoaWYgdGFiYmFy LS1idWZmZXItc2hvdy1ncm91cHMKICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJbJXNd IiAodGFiYmFyLXRhYi10YWJzZXQgdGFiKSkKICAgICAgICAgICAgICAgICAgKGZvcm1hdCAi JXMiICh0YWJiYXItdGFiLXZhbHVlIHRhYikpKSkpCiAgICA7OyBVbmxlc3MgdGhlIHRhYiBi YXIgYXV0byBzY3JvbGxzIHRvIGtlZXAgdGhlIHNlbGVjdGVkIHRhYgogICAgOzsgdmlzaWJs ZSwgc2hvcnRlbiB0aGUgdGFiIGxhYmVsIHRvIGtlZXAgYXMgbWFueSB0YWJzIGFzIHBvc3Np YmxlCiAgICA7OyBpbiB0aGUgdmlzaWJsZSBhcmVhIG9mIHRoZSB0YWIgYmFyLgogICAgKGlm IHRhYmJhci1hdXRvLXNjcm9sbC1mbGFnCiAgICAgICAgbGFiZWwKICAgICAgKHRhYmJhci1z aG9ydGVuCiAgICAgICBsYWJlbCAobWF4IDEgKC8gKHdpbmRvdy13aWR0aCkKICAgICAgICAg ICAgICAgICAgICAgICAobGVuZ3RoICh0YWJiYXItdmlldwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh0YWJiYXItY3VycmVudC10YWJzZXQpKSkpKSkpKSkKCihkZWZ1biB0 YWJiYXItYnVmZmVyLWhlbHAtb24tdGFiICh0YWIpCiAgIlJldHVybiB0aGUgaGVscCBzdHJp bmcgc2hvd24gd2hlbiBtb3VzZSBpcyBvbnRvIFRBQi4iCiAgKGlmIHRhYmJhci0tYnVmZmVy LXNob3ctZ3JvdXBzCiAgICAgIChsZXQqICgodGFic2V0ICh0YWJiYXItdGFiLXRhYnNldCB0 YWIpKQogICAgICAgICAgICAgKHRhYiAodGFiYmFyLXNlbGVjdGVkLXRhYiB0YWJzZXQpKSkK ICAgICAgICAoZm9ybWF0ICJtb3VzZS0xOiBzd2l0Y2ggdG8gYnVmZmVyICVTIGluIGdyb3Vw IFslc10iCiAgICAgICAgICAgICAgICAoYnVmZmVyLW5hbWUgKHRhYmJhci10YWItdmFsdWUg dGFiKSkgdGFic2V0KSkKICAgIChmb3JtYXQgIm1vdXNlLTE6IHN3aXRjaCB0byBidWZmZXIg JVNcblwKbW91c2UtMjogcG9wIHRvIGJ1ZmZlciwgbW91c2UtMzogZGVsZXRlIG90aGVyIHdp bmRvd3MiCiAgICAgICAgICAgIChidWZmZXItbmFtZSAodGFiYmFyLXRhYi12YWx1ZSB0YWIp KSkKICAgICkpCgooZGVmdW4gdGFiYmFyLWJ1ZmZlci1zZWxlY3QtdGFiIChldmVudCB0YWIp CiAgIk9uIG1vdXNlIEVWRU5ULCBzZWxlY3QgVEFCLiIKICAobGV0ICgobW91c2UtYnV0dG9u IChldmVudC1iYXNpYy10eXBlIGV2ZW50KSkKICAgICAgICAoYnVmZmVyICh0YWJiYXItdGFi LXZhbHVlIHRhYikpKQogICAgKGNvbmQKICAgICAoKGVxIG1vdXNlLWJ1dHRvbiAnbW91c2Ut MikKICAgICAgKHBvcC10by1idWZmZXIgYnVmZmVyIHQpKQogICAgICgoZXEgbW91c2UtYnV0 dG9uICdtb3VzZS0zKQogICAgICAoZGVsZXRlLW90aGVyLXdpbmRvd3MpKQogICAgICh0CiAg ICAgIChzd2l0Y2gtdG8tYnVmZmVyIGJ1ZmZlcikpKQogICAgOzsgRG9uJ3Qgc2hvdyBncm91 cHMuCiAgICAodGFiYmFyLWJ1ZmZlci1zaG93LWdyb3VwcyBuaWwpCiAgICApKQoKKGRlZnVu IHRhYmJhci1idWZmZXItY2xpY2stb24taG9tZSAoZXZlbnQpCiAgIkhhbmRsZSBhIG1vdXNl IGNsaWNrIEVWRU5UIG9uIHRoZSB0YWIgYmFyIGhvbWUgYnV0dG9uLgptb3VzZS0xLCB0b2dn bGUgdGhlIGRpc3BsYXkgb2YgdGFicyBmb3IgZ3JvdXBzIG9mIGJ1ZmZlcnMuCm1vdXNlLTMs IGNsb3NlIHRoZSBjdXJyZW50IGJ1ZmZlci4iCiAgKGxldCAoKG1vdXNlLWJ1dHRvbiAoZXZl bnQtYmFzaWMtdHlwZSBldmVudCkpKQogICAgKGNvbmQKICAgICAoKGVxIG1vdXNlLWJ1dHRv biAnbW91c2UtMSkKICAgICAgKHRhYmJhci1idWZmZXItc2hvdy1ncm91cHMgKG5vdCB0YWJi YXItLWJ1ZmZlci1zaG93LWdyb3VwcykpKQogICAgICgoZXEgbW91c2UtYnV0dG9uICdtb3Vz ZS0zKQogICAgICAoa2lsbC1idWZmZXIgbmlsKSkKICAgICApKSkKCihkZWZ1biB0YWJiYXIt YnVmZmVyLWhlbHAtb24taG9tZSAoKQogICJSZXR1cm4gdGhlIGhlbHAgc3RyaW5nIHNob3du IHdoZW4gbW91c2UgaXMgb250byB0aGUgdG9nZ2xlIGJ1dHRvbi4iCiAgKGNvbmNhdAogICAo aWYgdGFiYmFyLS1idWZmZXItc2hvdy1ncm91cHMKICAgICAgICJtb3VzZS0xOiBzaG93IGJ1 ZmZlcnMgaW4gc2VsZWN0ZWQgZ3JvdXAiCiAgICAgIm1vdXNlLTE6IHNob3cgZ3JvdXBzIG9m IGJ1ZmZlcnMiKQogICAiLCBtb3VzZS0zOiBjbG9zZSBjdXJyZW50IGJ1ZmZlciIpKQoKKGRl ZnVuIHRhYmJhci1idWZmZXItdHJhY2sta2lsbGVkICgpCiAgIkhvb2sgcnVuIGp1c3QgYmVm b3JlIGFjdHVhbGx5IGtpbGxpbmcgYSBidWZmZXIuCkluIFRhYmJhciBtb2RlLCB0cnkgdG8g c3dpdGNoIHRvIGEgYnVmZmVyIGluIHRoZSBjdXJyZW50IHRhYiBiYXIsCmFmdGVyIHRoZSBj dXJyZW50IGJ1ZmZlciBoYXMgYmVlbiBraWxsZWQuICBUcnkgZmlyc3QgdGhlIGJ1ZmZlciBp biB0YWIKYWZ0ZXIgdGhlIGN1cnJlbnQgb25lLCB0aGVuIHRoZSBidWZmZXIgaW4gdGFiIGJl Zm9yZS4gIE9uIHN1Y2Nlc3MsIHB1dAp0aGUgc2libGluZyBidWZmZXIgaW4gZnJvbnQgb2Yg dGhlIGJ1ZmZlciBsaXN0LCBzbyBpdCB3aWxsIGJlIHNlbGVjdGVkCmZpcnN0LiIKICAoYW5k IChlcSBoZWFkZXItbGluZS1mb3JtYXQgdGFiYmFyLWhlYWRlci1saW5lLWZvcm1hdCkKICAg ICAgIChlcSB0YWJiYXItY3VycmVudC10YWJzZXQtZnVuY3Rpb24gJ3RhYmJhci1idWZmZXIt dGFicykKICAgICAgIChlcSAoY3VycmVudC1idWZmZXIpICh3aW5kb3ctYnVmZmVyIChzZWxl Y3RlZC13aW5kb3cpKSkKICAgICAgIChsZXQgKChibCAodGFiYmFyLXRhYi12YWx1ZXMgKHRh YmJhci1jdXJyZW50LXRhYnNldCkpKQogICAgICAgICAgICAgKGIgIChjdXJyZW50LWJ1ZmZl cikpCiAgICAgICAgICAgICBmb3VuZCBzaWJsaW5nKQogICAgICAgICAod2hpbGUgKGFuZCBi bCAobm90IGZvdW5kKSkKICAgICAgICAgICAoaWYgKGVxIGIgKGNhciBibCkpCiAgICAgICAg ICAgICAgIChzZXRxIGZvdW5kIHQpCiAgICAgICAgICAgICAoc2V0cSBzaWJsaW5nIChjYXIg YmwpKSkKICAgICAgICAgICAoc2V0cSBibCAoY2RyIGJsKSkpCiAgICAgICAgICh3aGVuIChh bmQgKHNldHEgc2libGluZyAob3IgKGNhciBibCkgc2libGluZykpCiAgICAgICAgICAgICAg ICAgICAgKGJ1ZmZlci1saXZlLXAgc2libGluZykpCiAgICAgICAgICAgOzsgTW92ZSBzaWJs aW5nIGJ1ZmZlciBpbiBmcm9udCBvZiB0aGUgYnVmZmVyIGxpc3QuCiAgICAgICAgICAgKHNh dmUtY3VycmVudC1idWZmZXIKICAgICAgICAgICAgIChzd2l0Y2gtdG8tYnVmZmVyIHNpYmxp bmcpKSkpKSkKDAo7OzsgVGFiIGJhciBidWZmZXIgc2V0dXAKOzsKKGRlZnVuIHRhYmJhci1i dWZmZXItaW5pdCAoKQogICJJbml0aWFsaXplIHRhYiBiYXIgYnVmZmVyIGRhdGEuClJ1biBh cyBgdGFiYmFyLWluaXQtaG9vaycuIgogIChzZXRxIHRhYmJhci0tYnVmZmVycyBuaWwKICAg ICAgICB0YWJiYXItLWJ1ZmZlci1zaG93LWdyb3VwcyBuaWwKICAgICAgICB0YWJiYXItY3Vy cmVudC10YWJzZXQtZnVuY3Rpb24gJ3RhYmJhci1idWZmZXItdGFicwogICAgICAgIHRhYmJh ci10YWItbGFiZWwtZnVuY3Rpb24gJ3RhYmJhci1idWZmZXItdGFiLWxhYmVsCiAgICAgICAg dGFiYmFyLXNlbGVjdC10YWItZnVuY3Rpb24gJ3RhYmJhci1idWZmZXItc2VsZWN0LXRhYgog ICAgICAgIHRhYmJhci1oZWxwLW9uLXRhYi1mdW5jdGlvbiAndGFiYmFyLWJ1ZmZlci1oZWxw LW9uLXRhYgogICAgICAgIHRhYmJhci1idXR0b24tbGFiZWwtZnVuY3Rpb24gJ3RhYmJhci1i dWZmZXItYnV0dG9uLWxhYmVsCiAgICAgICAgdGFiYmFyLWhvbWUtZnVuY3Rpb24gJ3RhYmJh ci1idWZmZXItY2xpY2stb24taG9tZQogICAgICAgIHRhYmJhci1ob21lLWhlbHAtZnVuY3Rp b24gJ3RhYmJhci1idWZmZXItaGVscC1vbi1ob21lCiAgICAgICAgKQogIChhZGQtaG9vayAn a2lsbC1idWZmZXItaG9vayAndGFiYmFyLWJ1ZmZlci10cmFjay1raWxsZWQpKQoKKGRlZnVu IHRhYmJhci1idWZmZXItcXVpdCAoKQogICJRdWl0IHRhYiBiYXIgYnVmZmVyLgpSdW4gYXMg YHRhYmJhci1xdWl0LWhvb2snLiIKICAoc2V0cSB0YWJiYXItLWJ1ZmZlcnMgbmlsCiAgICAg ICAgdGFiYmFyLS1idWZmZXItc2hvdy1ncm91cHMgbmlsCiAgICAgICAgdGFiYmFyLWN1cnJl bnQtdGFic2V0LWZ1bmN0aW9uIG5pbAogICAgICAgIHRhYmJhci10YWItbGFiZWwtZnVuY3Rp b24gbmlsCiAgICAgICAgdGFiYmFyLXNlbGVjdC10YWItZnVuY3Rpb24gbmlsCiAgICAgICAg dGFiYmFyLWhlbHAtb24tdGFiLWZ1bmN0aW9uIG5pbAogICAgICAgIHRhYmJhci1idXR0b24t bGFiZWwtZnVuY3Rpb24gbmlsCiAgICAgICAgdGFiYmFyLWhvbWUtZnVuY3Rpb24gbmlsCiAg ICAgICAgdGFiYmFyLWhvbWUtaGVscC1mdW5jdGlvbiBuaWwKICAgICAgICApCiAgKHJlbW92 ZS1ob29rICdraWxsLWJ1ZmZlci1ob29rICd0YWJiYXItYnVmZmVyLXRyYWNrLWtpbGxlZCkp CgooYWRkLWhvb2sgJ3RhYmJhci1pbml0LWhvb2sgJ3RhYmJhci1idWZmZXItaW5pdCkKKGFk ZC1ob29rICd0YWJiYXItcXVpdC1ob29rICd0YWJiYXItYnVmZmVyLXF1aXQpCgoocHJvdmlk ZSAndGFiYmFyKQoKKHJ1bi1ob29rcyAndGFiYmFyLWxvYWQtaG9vaykKDAo7OzsgdGFiYmFy LmVsIGVuZHMgaGVyZQo= --------------010105090008000604010704--