From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: mail@daniel-mendler.de Newsgroups: gmane.emacs.bugs Subject: bug#46326: 27.1.50; Excessive memory allocations with minibuffer-with-setup-hook Date: Fri, 05 Feb 2021 16:20:13 +0100 Message-ID: <4aab2ef892b1df213ca67210021bcd47@mendler.net> References: <62c490ed0d8d24d8b259ac1ba55ea79e@mendler.net> <83eehuppx6.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_8eacb995e016baed37890613fffd2ad6" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="30506"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Roundcube Webmail/1.2-git Cc: 46326@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Feb 05 19:23:36 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l85lX-0007eh-16 for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 05 Feb 2021 19:23:35 +0100 Original-Received: from localhost ([::1]:47614 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l85lW-0006Nn-0X for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 05 Feb 2021 13:23:34 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48428) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l84aQ-0006r2-Q0 for bug-gnu-emacs@gnu.org; Fri, 05 Feb 2021 12:08:04 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:33071) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1l84aQ-0007Gp-G8 for bug-gnu-emacs@gnu.org; Fri, 05 Feb 2021 12:08:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1l84aQ-0007QN-9H for bug-gnu-emacs@gnu.org; Fri, 05 Feb 2021 12:08:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: mail@daniel-mendler.de Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 05 Feb 2021 17:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 46326 X-GNU-PR-Package: emacs Original-Received: via spool by 46326-submit@debbugs.gnu.org id=B46326.161254483628468 (code B ref 46326); Fri, 05 Feb 2021 17:08:02 +0000 Original-Received: (at 46326) by debbugs.gnu.org; 5 Feb 2021 17:07:16 +0000 Original-Received: from localhost ([127.0.0.1]:44613 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1l84Zg-0007P5-75 for submit@debbugs.gnu.org; Fri, 05 Feb 2021 12:07:16 -0500 Original-Received: from server.qxqx.de ([178.63.65.180]:38704 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1l82uB-0004n4-3T for 46326@debbugs.gnu.org; Fri, 05 Feb 2021 10:20:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Message-ID:References:In-Reply-To:Subject:Cc:To:From:Date:Content-Type:MIME-Version; bh=taxZuz8kqvX5SnDeUBof7LV4NuEyGDVN1MB6eMRqthY=; b=UHyybuDyMBpLwdwetGpMsLPiSvep0ydiSaPawh6HTxNj2btcvuzcNr0DmBQ82W6tJj8UkcmDBr8By8n3Qcko6N2pAR1TcJr575MXkFNkN4uHdsXTnHpIYK1d6O/TbCVvhsd5UMEwdE5V7pod9mN8vFSAjlaALSofANpC1z69R2M=; In-Reply-To: <83eehuppx6.fsf@gnu.org> X-Sender: mail@daniel-mendler.de X-Mailman-Approved-At: Fri, 05 Feb 2021 12:07:15 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:199397 Archived-At: --=_8eacb995e016baed37890613fffd2ad6 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hello Eli, thank you for your prompt answer! > Please show information about the memory consumption. (The so-called > "memory profile" doesn't actually measure memory consumption at all, > it just uses memory allocation calls as a poor-man's profiling > signal.) Yes, I am aware. I am not saying that live memory is the problem, but the excessive amount of allocations is a problem, which creates unnecessary garbage collector pauses. Therefore I can also not show you a profile of the memory consumption, since it is not relevant. > Please show a recipe starting from "emacs -Q" where a lot of memory is > being consumed, and please show how much memory does the recipe > consume. Also, I presume invoking "M-x garbage-collect RET" doesn't > release that memory? If so, please show the return value of > garbage-collect. I hope it is not asking too much to load a single elisp file (consult.el)? The package file has no further dependencies besides Emacs. Then I can give you the following reproducible. The only difference between the two files is that in one case minibuffer-with-setup-hook is used and in the other case consult--minibuffer-with-setup-hook is used. I appended the two files. The hashes correspond to the git commit hashes in case you want to pull the files from the git repository. ;; excessive allocations - using minibuffer-with-setup-hook (load "consult-2a197310923a732033bdb757b20c6f90cfad784a.el") ;; no suspicious allocations - using consult--minibuffer-with-setup-hook ;;(load "consult-27e055e7c75e2148449e7b0be4d464b03c36a1bd.el") (profiler-start 'mem) (dotimes (count 100) (run-at-time 0 nil (lambda () (message "%s" count) (setq unread-command-events '(?\C-g)))) (condition-case _ (consult-buffer) (quit))) (profiler-stop) (profiler-report) >> See the issue https://github.com/minad/consult/issues/193 for >> reference. > > I don't see any memory information in that discussion. I guess you > thought the memory profiler somehow shows memory consumption, but it > doesn't. The profile in the issue shows the memory allocation profile. I think you refer to my comment https://github.com/minad/consult/issues/193#issuecomment-770416491, where I stated my confusion, since the creator of the issue talked about "memory usage". I was only wondering what the profiler actually measures and I looked into the profiler code to confirm that it indeed measures allocations. > What exactly caused you to run the profiler? is the code slow or > something? If so, the problem may be something other than memory > consumption. Yes, it is slow. Add-hook performs unnecessary allocations causing pauses. After replacing the minibuffer-with-setup-hook default implementation with my workaround the memory allocations went away and the command is much faster. The add-hook calls do not appear in the memory profile anymore. See the comment https://github.com/minad/consult/issues/193#issuecomment-770650405. 56,846,572 89% - consult-buffer 56,846,572 89% - consult--buffer 56,846,572 89% - consult--multi 53,076,020 83% - consult--read 53,076,020 83% - apply 53,076,020 83% - # 53,076,020 83% - consult--with-async-1 53,076,020 83% - # 53,076,020 83% - consult--with-preview-1 53,074,964 83% - # 53,074,964 83% - completing-read 53,074,964 83% - selectrum-completing-read 5,530,436 8% + selectrum-read 70,240 0% + consult--multi-candidates 4,360 0% consult--multi-predicate 1,056 0% + consult--multi-preprocess Daniel Mendler --=_8eacb995e016baed37890613fffd2ad6 Content-Transfer-Encoding: base64 Content-Type: text/plain; name=consult-2a197310923a732033bdb757b20c6f90cfad784a.el Content-Disposition: attachment; filename=consult-2a197310923a732033bdb757b20c6f90cfad784a.el; size=141407 Ozs7IGNvbnN1bHQuZWwgLS0tIENvbnN1bHRpbmcgY29tcGxldGluZy1yZWFkIC0qLSBsZXhpY2Fs LWJpbmRpbmc6IHQgLSotCgo7OyBBdXRob3I6IERhbmllbCBNZW5kbGVyLCBDb25zdWx0IGFuZCBT ZWxlY3RydW0gY29udHJpYnV0b3JzCjs7IE1haW50YWluZXI6IERhbmllbCBNZW5kbGVyCjs7IENy ZWF0ZWQ6IDIwMjAKOzsgTGljZW5zZTogR1BMLTMuMC1vci1sYXRlcgo7OyBWZXJzaW9uOiAwLjMK OzsgUGFja2FnZS1SZXF1aXJlczogKChlbWFjcyAiMjYuMSIpKQo7OyBIb21lcGFnZTogaHR0cHM6 Ly9naXRodWIuY29tL21pbmFkL2NvbnN1bHQKCjs7IFRoaXMgZmlsZSBpcyBub3QgcGFydCBvZiBH TlUgRW1hY3MuCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBDb25zdWx0IGlt cGxlbWVudHMgYSBzZXQgb2YgYGNvbnN1bHQtPHRoaW5nPicgY29tbWFuZHMgd2hpY2ggdXNlCjs7 IGBjb21wbGV0aW5nLXJlYWQnIHRvIHNlbGVjdCBmcm9tIGEgbGlzdCBvZiBjYW5kaWRhdGVzLiBD b25zdWx0Cjs7IHByb3ZpZGVzIGFuIGVuaGFuY2VkIGJ1ZmZlciBzd2l0Y2hlciBgY29uc3VsdC1i dWZmZXInIGFuZCBtYW55Cjs7IHNlYXJjaCBhbmQgbmF2aWdhdGlvbiBjb21tYW5kcyBsaWtlIGBj b25zdWx0LWltZW51JyBhbmQKOzsgYGNvbnN1bHQtbGluZScuIFNlYXJjaGluZyB0aHJvdWdoIG11 bHRpcGxlIGZpbGVzIGlzIHN1cHBvcnRlZCBieQo7OyB0aGUgcG93ZXJmdWwgYXN5bmNocm9ub3Vz IGBjb25zdWx0LWdyZXAnIGNvbW1hbmQuIE1hbnkgQ29uc3VsdAo7OyBjb21tYW5kcyBhbGxvdyBw cmV2aWV3aW5nIGNhbmRpZGF0ZXMgLSBpZiBhIGNhbmRpZGF0ZSBpcyBzZWxlY3RlZAo7OyBpbiB0 aGUgY29tcGxldGlvbiB2aWV3LCB0aGUgYnVmZmVyIHNob3dzIHRoZSBjYW5kaWRhdGUgaW1tZWRp YXRlbHkuCgo7OyBUaGUgQ29uc3VsdCBjb21tYW5kcyBhcmUgY29tcGF0aWJsZSB3aXRoIGNvbXBs ZXRpb24gc3lzdGVtcyBiYXNlZAo7OyBvbiB0aGUgRW1hY3MgYGNvbXBsZXRpbmctcmVhZCcgQVBJ LCBub3RhYmx5IHRoZSBkZWZhdWx0IGNvbXBsZXRpb24KOzsgc3lzdGVtLCBJY29tcGxldGUsIFNl bGVjdHJ1bSBhbmQgRW1iYXJrLgoKOzsgQ29uc3VsdCBoYXMgYmVlbiBpbnNwaXJlZCBieSBDb3Vu c2VsLiBTb21lIG9mIHRoZSBDb25zdWx0IGNvbW1hbmRzCjs7IG9yaWdpbmF0ZWQgaW4gdGhlIFNl bGVjdHJ1bSB3aWtpLiBTZWUgdGhlIFJFQURNRSBmb3IgYSBmdWxsIGxpc3Qgb2YKOzsgY29udHJp YnV0b3JzLgoKOzs7IENvZGU6CgooZXZhbC13aGVuLWNvbXBpbGUKICAocmVxdWlyZSAnY2wtbGli KQogIChyZXF1aXJlICdzdWJyLXgpKQoocmVxdWlyZSAnYm9va21hcmspCihyZXF1aXJlICdjb21w aWxlKQoocmVxdWlyZSAnaW1lbnUpCihyZXF1aXJlICdrbWFjcm8pCihyZXF1aXJlICdvdXRsaW5l KQoocmVxdWlyZSAncmVjZW50ZikKKHJlcXVpcmUgJ3JpbmcpCihyZXF1aXJlICdzZXEpCgooZGVm Z3JvdXAgY29uc3VsdCBuaWwKICAiQ29uc3VsdGluZyBgY29tcGxldGluZy1yZWFkJy4iCiAgOmdy b3VwICdjb252ZW5pZW5jZQogIDpwcmVmaXggImNvbnN1bHQtIikKCjs7OzsgQ3VzdG9taXphdGlv bgoKKGRlZmN1c3RvbSBjb25zdWx0LW5hcnJvdy1rZXkgbmlsCiAgIlByZWZpeCBrZXkgZm9yIG5h cnJvd2luZyBkdXJpbmcgY29tcGxldGlvbi4KCkdvb2QgY2hvaWNlcyBmb3IgdGhpcyBrZXkgYXJl IChrYmQgXCI8XCIpIG9yIChrYmQgXCJDLStcIikgZm9yIGV4YW1wbGUuCgpUaGUga2V5IG11c3Qg YmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVzZW50 YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0b3Ig c3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC13aWRlbi1rZXkgbmlsCiAg IktleSB1c2VkIGZvciB3aWRlbmluZyBkdXJpbmcgY29tcGxldGlvbi4KCklmIHRoaXMga2V5IGlz IHVuc2V0LCBkZWZhdWx0cyB0byAnY29uc3VsdC1uYXJyb3cta2V5IFNQQycuCgpUaGUga2V5IG11 c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVz ZW50YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0 b3Igc3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC1wcm9qZWN0LXJvb3Qt ZnVuY3Rpb24gbmlsCiAgIkZ1bmN0aW9uIHdoaWNoIHJldHVybnMgcHJvamVjdCByb290IGRpcmVj dG9yeS4KClRoZSByb290IGRpcmVjdG9yeSBpcyB1c2VkIGJ5IGBjb25zdWx0LWJ1ZmZlcicgYW5k IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnKGNob2ljZSBmdW5jdGlvbiAoY29uc3QgbmlsKSkp CgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtcmVmcmVzaC1kZWxheSAwLjI1CiAgIlJlZnJlc2hp bmcgZGVsYXkgb2YgdGhlIGNvbXBsZXRpb24gdWkgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4K ClRoZSBjb21wbGV0aW9uIHVpIGlzIG9ubHkgdXBkYXRlZCBldmVyeSBgY29uc3VsdC1hc3luYy1y ZWZyZXNoLWRlbGF5JwpzZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8gYXN5bmNocm9ub3VzIGNvbW1h bmRzIGxpa2UgZm9yIGV4YW1wbGUKYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdmbG9hdCkKCihk ZWZjdXN0b20gY29uc3VsdC1hc3luYy1pbnB1dC10aHJvdHRsZSAwLjUKICAiSW5wdXQgdGhyb3R0 bGUgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4KClRoZSBhc3luY2hyb25vdXMgcHJvY2VzcyBp cyBzdGFydGVkIG9ubHkgZXZlcnkKYGNvbnN1bHQtYXN5bmMtaW5wdXQtdGhyb3R0bGUnIHNlY29u ZHMuIFRoaXMgYXBwbGllcyB0byBhc3luY2hyb25vdXMKY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0 LWdyZXAnLiIKICA6dHlwZSAnZmxvYXQpCgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtaW5wdXQt ZGVib3VuY2UgMC4yNQogICJJbnB1dCBkZWJvdW5jZSBmb3IgYXN5bmNocm9ub3VzIGNvbW1hbmRz LgoKVGhlIGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHN0YXJ0ZWQgb25seSB3aGVuIHRoZXJlIGhh cyBub3QgYmVlbiBuZXcKaW5wdXQgZm9yIGBjb25zdWx0LWFzeW5jLWlucHV0LWRlYm91bmNlJyBz ZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8KYXN5bmNocm9ub3VzIGNvbW1hbmRzLCBlLmcuLCBgY29u c3VsdC1ncmVwJy4iCiAgOnR5cGUgJ2Zsb2F0KQoKKGRlZmN1c3RvbSBjb25zdWx0LWFzeW5jLW1p bi1pbnB1dCAzCiAgIk1pbmltdW0gbnVtYmVyIG9mIGxldHRlcnMgbmVlZGVkLCBiZWZvcmUgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaXMgY2FsbGVkLgoKVGhpcyBhcHBsaWVzIHRvIGFzeW5jaHJvbm91 cyBjb21tYW5kcywgZS5nLiwgYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRl ZmN1c3RvbSBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQgIiMiCiAgIkRlZmF1bHQgYXN5bmMg aW5wdXQgc2VwYXJhdG9yIHVzZWQgZm9yIHNwbGl0dGluZy4KCkNhbiBhbHNvIGJlIG5pbCBpbiBv cmRlciB0byBub3QgYXV0b21hdGljYWxseSBpbnNlcnQgYSBzZXBhcmF0b3IuIFRoaXMKYXBwbGll cyB0byBhc3luY2hyb25vdXMgY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0LWdyZXAnLiIKICA6dHlw ZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LW1vZGUtaGlzdG9yaWVzCiAgJygoZXNoZWxs LW1vZGUgLiBlc2hlbGwtaGlzdG9yeS1yaW5nKQogICAgKGNvbWludC1tb2RlIC4gY29taW50LWlu cHV0LXJpbmcpCiAgICAodGVybS1tb2RlICAgLiB0ZXJtLWlucHV0LXJpbmcpKQogICJBbGlzdCBv ZiAobW9kZSAuIGhpc3RvcnkpIHBhaXJzIG9mIG1vZGUgaGlzdG9yaWVzLgpUaGUgaGlzdG9yaWVz IGNhbiBiZSByaW5ncyBvciBsaXN0cy4iCiAgOnR5cGUgJyhsaXN0IChjb25zIHN5bWJvbCBzeW1i b2wpKSkKCihkZWZjdXN0b20gY29uc3VsdC10aGVtZXMgbmlsCiAgIkxpc3Qgb2YgdGhlbWVzIHRv IGJlIHByZXNlbnRlZCBmb3Igc2VsZWN0aW9uLgpuaWwgc2hvd3MgYWxsIGBjdXN0b20tYXZhaWxh YmxlLXRoZW1lcycuIgogIDp0eXBlICcocmVwZWF0IHN5bWJvbCkpCgooZGVmY3VzdG9tIGNvbnN1 bHQtYWZ0ZXItanVtcC1ob29rICcocmVjZW50ZXIpCiAgIkZ1bmN0aW9uIGNhbGxlZCBhZnRlciBq dW1waW5nIHRvIGEgbG9jYXRpb24uCgpDb21tb25seSB1c2VkIGZ1bmN0aW9ucyBmb3IgdGhpcyBo b29rIGFyZSBgcmVjZW50ZXInIGFuZApgcmVwb3NpdGlvbi13aW5kb3cnLgoKVGhpcyBpcyBjYWxs ZWQgZHVyaW5nIHByZXZpZXcgYW5kIGZvciB0aGUganVtcCBhZnRlciBzZWxlY3Rpb24uCllvdSBt YXkgd2FudCB0byBhZGQgYSBmdW5jdGlvbiB3aGljaCBwdWxzZXMgdGhlIGN1cnJlbnQgbGluZSwg ZS5nLiwKYHhyZWYtcHVsc2UtbW9tZW50YXJpbHknLiIKICA6dHlwZSAnaG9vaykKCihkZWZjdXN0 b20gY29uc3VsdC1saW5lLXBvaW50LXBsYWNlbWVudCAnbWF0Y2gtYmVnaW5uaW5nCiAgIldoZXJl IHRvIGxlYXZlIHBvaW50IGFmdGVyIGBjb25zdWx0LWxpbmUnIGp1bXBzIHRvIGEgbWF0Y2guIgog IDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhlIGxpbmUiIGxpbmUt YmVnaW5uaW5nKQogICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhl IG1hdGNoIiBtYXRjaC1iZWdpbm5pbmcpCiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkVu ZCBvZiB0aGUgbWF0Y2giIG1hdGNoLWVuZCkpKQoKKGRlZmN1c3RvbSBjb25zdWx0LWxpbmUtbnVt YmVycy13aWRlbiB0CiAgIlNob3cgYWJzb2x1dGUgbGluZSBudW1iZXJzIHdoZW4gbmFycm93aW5n IGlzIGFjdGl2ZS4KClNlZSBhbHNvIGBkaXNwbGF5LWxpbmUtbnVtYmVycy13aWRlbicuIgogIDp0 eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzIHQKICAi U2hvdyBsaW5lIG51bWJlcnMgZm9yIGBjb25zdWx0LWdvdG8tbGluZScuIgogIDp0eXBlICdib29s ZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWZvbnRpZnktbWF4LXNpemUgMTA0ODU3NgogICJCdWZm ZXJzIGxhcmdlciB0aGFuIHRoaXMgYnl0ZSBsaW1pdCBhcmUgbm90IGZvbnRpZmllZC4KClRoaXMg aXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgYSBsYXJnZSBzdGFydHVwIHRpbWUKZm9y IG5hdmlnYXRpb24gY29tbWFuZHMgbGlrZSBgY29uc3VsdC1saW5lJy4iCiAgOnR5cGUgJ2ludGVn ZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtbmFycm93CiAgJygoZW1hY3MtbGlzcC1tb2Rl IC4gKCg/ZiAuICJGdW5jdGlvbnMiKQogICAgICAgICAgICAgICAgICAgICAgICAoP20gLiAiTWFj cm9zIikKICAgICAgICAgICAgICAgICAgICAgICAgKD9wIC4gIlBhY2thZ2VzIikKICAgICAgICAg ICAgICAgICAgICAgICAgKD90IC4gIlR5cGVzIikKICAgICAgICAgICAgICAgICAgICAgICAgKD92 IC4gIlZhcmlhYmxlcyIpKSkpCiAgIk5hcnJvd2luZyBrZXlzIHVzZWQgYnkgYGNvbnN1bHQtaW1l bnUnLiIKICA6dHlwZSAnYWxpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtdG9wbGV2ZWwK ICAnKChlbWFjcy1saXNwLW1vZGUgLiAiRnVuY3Rpb25zIikpCiAgIkNhdGVnb3J5IG9mIHRvcGxl dmVsIGl0ZW1zLCB1c2VkIGJ5IGBjb25zdWx0LWltZW51Jy4KClRoZSBpbWVudSByZXByZXNlbnRh dGlvbiBwcm92aWRlZCBieSB0aGUgYmFja2VuZCB1c3VhbGx5IHB1dHMKZnVuY3Rpb25zIGRpcmVj dGx5IGF0IHRoZSB0b3BsZXZlbC4gYGNvbnN1bHQtaW1lbnUnIG1vdmVzIHRoZW0gaW5zdGVhZAp1 bmRlciB0aGUgY2F0ZWdvcnkgc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUuIgogIDp0eXBlICdh bGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1idWZmZXItZmlsdGVyCiAgJygiXiAiKQogICJGaWx0 ZXIgcmVnZXhwcyBmb3IgYGNvbnN1bHQtYnVmZmVyJy4KClRoZSBkZWZhdWx0IHNldHRpbmcgaXMg dG8gZmlsdGVyIG9ubHkgZXBoZW1lcmFsIGJ1ZmZlciBuYW1lcyBiZWdpbm5pbmcKd2l0aCBhIHNw YWNlIGNoYXJhY3Rlci4iCiAgOnR5cGUgJyhyZXBlYXQgcmVnZXhwKSkKCihkZWZjdXN0b20gY29u c3VsdC1idWZmZXItc291cmNlcwogICcoY29uc3VsdC0tc291cmNlLWhpZGRlbi1idWZmZXIKICAg IGNvbnN1bHQtLXNvdXJjZS1idWZmZXIKICAgIGNvbnN1bHQtLXNvdXJjZS1maWxlCiAgICBjb25z dWx0LS1zb3VyY2UtYm9va21hcmsKICAgIGNvbnN1bHQtLXNvdXJjZS1wcm9qZWN0LWJ1ZmZlcgog ICAgY29uc3VsdC0tc291cmNlLXByb2plY3QtZmlsZSkKICAiU291cmNlcyB1c2VkIGJ5IGBjb25z dWx0LWJ1ZmZlcicuCgpTZWUgYGNvbnN1bHQtLW11bHRpJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0 aGUgc291cmNlIHZhbHVlcy4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtbW9k ZS1jb21tYW5kLWZpbHRlcgogICcoOzsgRmlsdGVyIGNvbW1hbmRzCiAgICAiLW1vZGUkIiAiLS0i CiAgICA7OyBGaWx0ZXIgd2hvbGUgZmVhdHVyZXMKICAgIHNpbXBsZSBtd2hlZWwgdGltZSBzby1s b25nIHJlY2VudGYpCiAgIkZpbHRlciBjb21tYW5kcyBmb3IgYGNvbnN1bHQtbW9kZS1jb21tYW5k Jy4iCiAgOnR5cGUgJyhyZXBlYXQgKGNob2ljZSBzeW1ib2wgcmVnZXhwKSkpCgooZGVmY3VzdG9t IGNvbnN1bHQtZ2l0LWdyZXAtY29tbWFuZAogICJnaXQgLS1uby1wYWdlciBncmVwIC0tbnVsbCAt LWNvbG9yPWFsd2F5cyAtLWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1saW5lLW51bWJlciAtSSAtZSBB UkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ2l0LWdyZXAsIHNlZSBgY29u c3VsdC1naXQtZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZ3Jl cC1jb21tYW5kCiAgImdyZXAgLS1udWxsIC0tbGluZS1idWZmZXJlZCAtLWNvbG9yPWFsd2F5cyAt LWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1leGNsdWRlLWRpcj0uZ2l0IC0tbGluZS1udW1iZXIgLUkg LXIgLiAtZSBBUkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ3JlcCwgc2Vl IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LXJp cGdyZXAtY29tbWFuZAogICJyZyAtLW51bGwgLS1saW5lLWJ1ZmZlcmVkIC0tY29sb3I9YWx3YXlz IC0tbWF4LWNvbHVtbnM9NTAwXAogICAtLW5vLWhlYWRpbmcgLS1saW5lLW51bWJlciAuIC1lIEFS RyBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciByaXBncmVwLCBzZWUgYGNvbnN1 bHQtcmlwZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZmluZC1j b21tYW5kCiAgImZpbmQgLiAtbm90ICggLXdob2xlbmFtZSAqLy4qIC1wcnVuZSApIC1pcGF0aCAq QVJHKiBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciBmaW5kLCBzZWUgYGNvbnN1 bHQtZmluZCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtbG9jYXRlLWNv bW1hbmQKICAibG9jYXRlIC0taWdub3JlLWNhc2UgLS1leGlzdGluZyAtLXJlZ2V4cCBBUkcgT1BU UyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgbG9jYXRlLCBzZWUgYGNvbnN1bHQtbG9j YXRlJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29uc3VsdC1tYW4tY29tbWFuZAog ICJtYW4gLWsgQVJHIE9QVFMiCiAgIkNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIG1hbiBhcHJv cG9zLCBzZWUgYGNvbnN1bHQtbWFuJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29u c3VsdC1wcmV2aWV3LWtleSAnYW55CiAgIlByZXZpZXcgdHJpZ2dlciBrZXlzLCBjYW4gYmUgbmls LCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtleXMuIgogIDp0eXBlICcoY2hvaWNl IChjb25zdCBhbnkpIChjb25zdCBuaWwpIHZlY3RvciBzdHJpbmcgKHJlcGVhdCAoY2hvaWNlIHZl Y3RvciBzdHJpbmcpKSkpCgooZGVmY3VzdG9tIGNvbnN1bHQtcHJldmlldy1tYXgtc2l6ZSAxMDQ4 NTc2MAogICJGaWxlcyBsYXJnZXIgdGhhbiB0aGlzIGJ5dGUgbGltaXQgYXJlIG5vdCBwcmV2aWV3 ZWQuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRlZmN1c3RvbSBjb25zdWx0LXByZXZpZXctbWF4LWNv dW50IDEwCiAgIk51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9wZW4gYXQgb25jZSBkdXJpbmcgcHJl dmlldy4iCiAgOnR5cGUgJ2ludGVnZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtcmVnaXN0ZXItbmFy cm93CiAgYCgoP24gIk51bWJlciIgLCMnbnVtYmVycCkKICAgICg/cyAiU3RyaW5nIiAsIydzdHJp bmdwKQogICAgKD9yICJSZWN0YW5nbGUiICwobGFtYmRhICh4KSAoc3RyaW5ncCAoY2FyLXNhZmUg eCkpKSkKICAgIDs7IGZyYW1lc2V0LXJlZ2lzdGVyLXAgYW5kIGttYWNyby1yZWdpc3Rlci1wIGV4 aXN0cyBzaW5jZSAyNy4xCiAgICAoP2YgIkZyYW1lc2V0IiAsKGxhbWJkYSAoeCkgKGVxICh0eXBl LW9mIHgpICdmcmFtZXNldC1yZWdpc3RlcikpKQogICAgKD9rICJLbWFjcm8iICwobGFtYmRhICh4 KSAoZXEgKHR5cGUtb2YgeCkgJ2ttYWNyby1yZWdpc3RlcikpKQogICAgKD9wICJQb2ludCIgLChs YW1iZGEgKHgpIChvciAobWFya2VycCB4KSAoZXEgKGNhci1zYWZlIHgpICdmaWxlLXF1ZXJ5KSkp KQogICAgKD93ICJXaW5kb3ciICwobGFtYmRhICh4KSAod2luZG93LWNvbmZpZ3VyYXRpb24tcCAo Y2FyLXNhZmUgeCkpKSkpCiAgIlJlZ2lzdGVyIG5hcnJvd2luZyBjb25maWd1cmF0aW9uLgoKRWFj aCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0aGUgZm9ybSAnKGNoYXIgbmFtZSBwcmVk aWNhdGUpLiIKICA6dHlwZSAnbGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1ib29rbWFyay1uYXJy b3cKICBgKCg/ZiAiRmlsZSIgIydib29rbWFyay1kZWZhdWx0LWhhbmRsZXIpCiAgICAoP2ggIkhl bHAiICMnaGVscC1ib29rbWFyay1qdW1wKQogICAgKD9pICJJbmZvIiAjJ0luZm8tYm9va21hcmst anVtcCkKICAgICg/cCAiUGljdHVyZSIgIydpbWFnZS1ib29rbWFyay1qdW1wKQogICAgKD9kICJE b2N2aWV3IiAjJ2RvYy12aWV3LWJvb2ttYXJrLWp1bXApCiAgICAoP20gIk1hbiIgIydNYW4tYm9v a21hcmstanVtcCkKICAgICg/dyAiV29tYW4iICMnd29tYW4tYm9va21hcmstanVtcCkKICAgICg/ ZyAiR251cyIgIydnbnVzLXN1bW1hcnktYm9va21hcmstanVtcCkpCiAgIkJvb2ttYXJrIG5hcnJv d2luZyBjb25maWd1cmF0aW9uLgoKRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0 aGUgZm9ybSAnKGNoYXIgbmFtZSBoYW5kbGVyKS4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9t IGNvbnN1bHQtY29uZmlnIG5pbAogICJDb21tYW5kIGNvbmZpZ3VyYXRpb24gYWxpc3RzLCB3aGlj aCBhbGxvd3MgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24uCgpUaGUgb3B0aW9ucyBzZXQgaGVy ZSB3aWxsIGJlIHBhc3NlZCB0byBgY29uc3VsdC0tcmVhZCcsIHdoZW4gY2FsbGVkCmZyb20gdGhl IGNvcnJlc3BvbmRpbmcgY29tbWFuZC4gTm90ZSB0aGF0IHRoZSBvcHRpb25zIGRlcGVuZCBvbiB0 aGUKcHJpdmF0ZSBgY29uc3VsdC0tcmVhZCcgQVBJIGFuZCBzaG91bGQgbm90IGJlIGNvbnNpZGVy ZWQgYXMgc3RhYmxlIGFzCnRoZSBwdWJsaWMgQVBJLiIKICA6dHlwZSAnKGxpc3QgKGNvbnMgc3lt Ym9sIHBsaXN0KSkpCgo7Ozs7IEZhY2VzCgooZGVmZ3JvdXAgY29uc3VsdC1mYWNlcyBuaWwKICAi RmFjZXMgdXNlZCBieSBDb25zdWx0LiIKICA6Z3JvdXAgJ2NvbnN1bHQKICA6Z3JvdXAgJ2ZhY2Vz KQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWxpbmUKICAnKCh0IDppbmhlcml0IHJlZ2lvbikp CiAgIkZhY2UgdXNlZCB0byBmb3IgbGluZSBwcmV2aWV3cy4iKQoKKGRlZmZhY2UgY29uc3VsdC1w cmV2aWV3LW1hdGNoCiAgJygodCA6aW5oZXJpdCBtYXRjaCkpCiAgIkZhY2UgdXNlZCB0byBmb3Ig bWF0Y2ggcHJldmlld3MgaW4gYGNvbnN1bHQtZ3JlcCcuIikKCihkZWZmYWNlIGNvbnN1bHQtcHJl dmlldy1jdXJzb3IKICAnKCh0IDppbmhlcml0IGNvbnN1bHQtcHJldmlldy1tYXRjaCkpCiAgIkZh Y2UgdXNlZCB0byBmb3IgY3Vyc29yIHByZXZpZXdzIGFuZCBtYXJrcyBpbiBgY29uc3VsdC1tYXJr Jy4iKQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWVycm9yCiAgJygodCA6aW5oZXJpdCBpc2Vh cmNoLWZhaWwpKQogICJGYWNlIHVzZWQgdG8gZm9yIGN1cnNvciBwcmV2aWV3cyBhbmQgbWFya3Mg aW4gYGNvbnN1bHQtZXJyb3InLiIpCgooZGVmZmFjZSBjb25zdWx0LXByZXZpZXcteWFuawogICco KHQgOmluaGVyaXQgY29uc3VsdC1wcmV2aWV3LWxpbmUpKQogICJGYWNlIHVzZWQgdG8gZm9yIHlh bmsgcHJldmlld3MgaW4gYGNvbnN1bHQteWFuaycuIikKCihkZWZmYWNlIGNvbnN1bHQtbmFycm93 LWluZGljYXRvcgogICcoKHQgOmluaGVyaXQgd2FybmluZykpCiAgIkZhY2UgdXNlZCBmb3IgdGhl IG5hcnJvd2luZyBpbmRpY2F0b3IuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5bmMtcnVubmluZwog ICcoKHQgOmluaGVyaXQgY29uc3VsdC1uYXJyb3ctaW5kaWNhdG9yKSkKICAiRmFjZSB1c2VkIGlm IGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHJ1bm5pbmcuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5 bmMtZmluaXNoZWQKICAnKCh0IDppbmhlcml0IHN1Y2Nlc3MpKQogICJGYWNlIHVzZWQgaWYgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaGFzIGZpbmlzaGVkLiIpCgooZGVmZmFjZSBjb25zdWx0LWFzeW5j LWZhaWxlZAogICcoKHQgOmluaGVyaXQgZXJyb3IpKQogICJGYWNlIHVzZWQgaWYgYXN5bmNocm9u b3VzIHByb2Nlc3MgaGFzIGZhaWxlZC4iKQoKKGRlZmZhY2UgY29uc3VsdC1hc3luYy1zcGxpdAog ICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLW5lZ2F0aW9uLWNoYXItZmFjZSkpCiAgIkZhY2UgdXNl ZCB0byBoaWdobGlnaHQgcHVuY3R1YXRpb24gY2hhcmFjdGVyLiIpCgooZGVmZmFjZSBjb25zdWx0 LWhlbHAKICAnKCh0IDppbmhlcml0IHNoYWRvdykpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQg aGVscCwgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXItc3RvcmUnLiIpCgooZGVmZmFjZSBjb25z dWx0LWtleQogICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCiAgIkZhY2Ug dXNlZCB0byBoaWdobGlnaHQga2V5cywgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXInLiIpCgoo ZGVmZmFjZSBjb25zdWx0LWltZW51LXByZWZpeAogICcoKHQgOmluaGVyaXQgY29uc3VsdC1rZXkp KQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IGltZW51IHByZWZpeCBpbiBgY29uc3VsdC1pbWVu dScuIikKCihkZWZmYWNlIGNvbnN1bHQtbGluZS1udW1iZXIKICAnKCh0IDppbmhlcml0IGNvbnN1 bHQta2V5KSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBsb2NhdGlvbiBsaW5lIGluIGBjb25z dWx0LWdsb2JhbC1tYXJrJy4iKQoKKGRlZmZhY2UgY29uc3VsdC1maWxlCiAgJygodCA6aW5oZXJp dCBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdo dCBmaWxlcyBpbiBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWJvb2ttYXJr CiAgJygodCA6aW5oZXJpdCBmb250LWxvY2stY29uc3RhbnQtZmFjZSkpCiAgIkZhY2UgdXNlZCB0 byBoaWdobGlnaHQgYm9va21hcmtzIGluIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZmYWNlIGNv bnN1bHQtYnVmZmVyCiAgJygodCkpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQgYnVmZmVycyBp biBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWxpbmUtbnVtYmVyLXByZWZp eAogICcoKHQgOmluaGVyaXQgbGluZS1udW1iZXIpKQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0 IGxpbmUgbnVtYmVycyBpbiBzZWxlY3Rpb25zLiIpCgo7OyBmYWNlIGRlZmluaXRpb24gdGFrZW4g ZnJvbSBFbWJhcmsKKGRlZmZhY2UgY29uc3VsdC16ZWJyYQogICcoKGRlZmF1bHQgOmV4dGVuZCB0 KQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkp CiAgICAgOmJhY2tncm91bmQgIiNlZmVmZWYiKQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKICAgICA6YmFja2dyb3VuZCAiIzI0MjQyNCIpKQog ICJGYWNlIHRvIGhpZ2hsaWdodCBhbHRlcm5hdGluZyByb3dzIGluIGBjb25zdWx0LXJlZ2lzdGVy LXdpbmRvdycuIikKCjs7OzsgSGlzdG9yeSB2YXJpYWJsZXMKCihkZWZ2YXIgY29uc3VsdC0ta2Vl cC1saW5lcy1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0LS1lcnJvci1oaXN0b3J5IG5pbCkK KGRlZnZhciBjb25zdWx0LS1ncmVwLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWZpbmQt aGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbWFuLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNv bnN1bHQtLWxpbmUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tYXByb3Bvcy1oaXN0b3J5 IG5pbCkKKGRlZnZhciBjb25zdWx0LS10aGVtZS1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0 LS1taW5vci1tb2RlLW1lbnUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbW9kZS1jb21t YW5kLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWttYWNyby1oaXN0b3J5IG5pbCkKKGRl ZnZhciBjb25zdWx0LS1idWZmZXItaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0taW1lbnUt aGlzdG9yeSBuaWwpCgo7Ozs7IEludGVybmFsIHZhcmlhYmxlcwoKKGRlZnZhciBjb25zdWx0LS1j YWNoZSBuaWwKICAiQ2FjaGVkIGRhdGEgcG9wdWxhdGVkIGJ5IGBjb25zdWx0LS1kZWZpbmUtY2Fj aGUnLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWhvb2sKICAobGlzdCAj J2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1maWx0ZXIpCiAgIk9idGFpbiBtYXRjaCBmdW5j dGlvbiBmcm9tIGNvbXBsZXRpb24gc3lzdGVtLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRp b24tY2FuZGlkYXRlLWhvb2sKICAobGlzdCAjJ2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1j YW5kaWRhdGUpCiAgIkdldCBjYW5kaWRhdGUgZnJvbSBjb21wbGV0aW9uIHN5c3RlbS4iKQoKKGRl ZnZhciBjb25zdWx0LS1jb21wbGV0aW9uLXJlZnJlc2gtaG9vayBuaWwKICAiUmVmcmVzaCBjb21w bGV0aW9uIHN5c3RlbS4iKQoKKGRlZnZhci1sb2NhbCBjb25zdWx0LS1wcmV2aWV3LWZ1bmN0aW9u IG5pbAogICJNaW5pYnVmZmVyLWxvY2FsIHZhcmlhYmxlIHdoaWNoIGV4cG9zZXMgdGhlIGN1cnJl bnQgcHJldmlldyBmdW5jdGlvbi4KVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJ5IGN1c3Rv bSBjb21wbGV0aW9uIHN5c3RlbXMgZnJvbSBvdXRzaWRlIHRoZSBtaW5pYnVmZmVyLgpUaGUgcHJl dmlldyBmdW5jdGlvbiBleHBlY3RzIHR3byBhcmd1bWVudHMsIHRoZSBjdXJyZW50IGlucHV0IHN0 cmluZyBhbmQgdGhlIGNhbmRpZGF0ZSBzdHJpbmcuIikKCihkZWZjb25zdCBjb25zdWx0LS10b2Z1 LWNoYXIgI3gxMDAwMDAKICAiU3BlY2lhbCBjaGFyYWN0ZXIgdXNlZCB0byBlbmNvZGUgbGluZSBw cmVmaXhlcyBmb3IgZGlzYW1iaWd1YXRpb24uCldlIHVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9m IHRoZSBwcml2YXRlIHVuaWNvZGUgcGxhbmUgYi4iKQoKKGRlZmNvbnN0IGNvbnN1bHQtLXRvZnUt cmFuZ2UgI3hGRkZFCiAgIlNwZWNpYWwgY2hhcmFjdGVyIHJhbmdlLgpTaXplIG9mIHByaXZhdGUg dW5pY29kZSBwbGFuZSBiLiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdyBuaWwKICAi Q3VycmVudCBuYXJyb3dpbmcga2V5LiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdy1w cmVmaXhlcyBuaWwKICAiTmFycm93aW5nIHByZWZpeGVzIG9mIHRoZSBjdXJyZW50IGNvbXBsZXRp b24uIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZSBuaWwKICAiTmFy cm93aW5nIHByZWRpY2F0ZSBvZiB0aGUgY3VycmVudCBjb21wbGV0aW9uLiIpCgooZGVmdmFyLWxv Y2FsIGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5IG5pbAogICJOYXJyb3dpbmcgaW5kaWNhdG9yIG92 ZXJsYXkuIikKCihkZWZ2YXIgY29uc3VsdC0tZ2MtdGhyZXNob2xkIDY3MTA4ODY0CiAgIkxhcmdl IGdjIHRocmVzaG9sZCBmb3IgdGVtcG9yYXJ5IGluY3JlYXNlLiIpCgooZGVmdmFyIGNvbnN1bHQt LWdjLXBlcmNlbnRhZ2UgMC41CiAgIkxhcmdlIGdjIHBlcmNlbnRhZ2UgZm9yIHRlbXBvcmFyeSBp bmNyZWFzZS4iKQoKKGRlZnZhciBjb25zdWx0LS1hc3luYy1sb2cKICAiICpjb25zdWx0LWFzeW5j LWxvZyoiCiAgIkJ1ZmZlciBmb3IgYXN5bmMgbG9nZ2luZyBvdXRwdXQgdXNlZCBieSBgY29uc3Vs dC0tYXN5bmMtcHJvY2VzcycuIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0taW1lbnUtY2FjaGUg bmlsCiAgIkJ1ZmZlciBsb2NhbCBjYWNoZWQgaW1lbnUuIikKCihkZWZjb25zdCBjb25zdWx0LS1n cmVwLXJlZ2V4cCAiXFwoW15cMFxuXStcXClcMFxcKFteOlwwXStcXClbOlwwXSIKICAiUmVnZXhw IHVzZWQgdG8gbWF0Y2ggZmlsZSBhbmQgbGluZSBvZiBncmVwIG91dHB1dC4iKQoKKGRlZmNvbnN0 IGNvbnN1bHQtLWdyZXAtbWF0Y2gtcmVnZXhwICJcZVxcW1swLTk7XSttXFwoLio/XFwpXGVcXFtb MC05O10qbSIKICAiUmVnZXhwIHVzZWQgdG8gZmluZCBtYXRjaGVzIGluIGdyZXAgb3V0cHV0LiIp CgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzIG5pbAogICJPdmVy bGF5cyB1c2VkIGJ5IGBjb25zdWx0LWZvY3VzLWxpbmVzJy4iKQoKOzs7OyBIZWxwZXIgZnVuY3Rp b25zIGFuZCBtYWNyb3MKCihkZWZtYWNybyBjb25zdWx0LS1kZWZpbmUtY2FjaGUgKG5hbWUgJnJl c3QgYm9keSkKICAiRGVmaW5lIGNhY2hlZCB2YWx1ZSB3aXRoIE5BTUUgYW5kIEJPRFkuIgogIChk ZWNsYXJlIChpbmRlbnQgMSkpCiAgYChkZWZ1biAsbmFtZSAoKQogICAgIChvciAoYWxpc3QtZ2V0 ICcsbmFtZSBjb25zdWx0LS1jYWNoZSkKICAgICAgICAgKHNldGYgKGFsaXN0LWdldCAnLG5hbWUg Y29uc3VsdC0tY2FjaGUpCiAgICAgICAgICAgICAgICwobWFjcm9leHAtcHJvZ24gYm9keSkpKSkp CgooZGVmc3Vic3QgY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIgKGNhdGVnb3J5IGhpZ2hsaWdo dCkKICAiUmV0dXJuIGZpbHRlciBmdW5jdGlvbiB1c2VkIGJ5IGNvbXBsZXRpb24gc3lzdGVtLgoK Q0FURUdPUlkgaXMgdGhlIGNvbXBsZXRpb24gY2F0ZWdvcnkuCkhJR0hMSUdIVCBtdXN0IGJlIHQg aWYgaGlnaGxpZ2h0aW5nIGlzIG5lZWRlZC4iCiAgKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1z dWNjZXNzICdjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1ob29rIGNhdGVnb3J5IGhpZ2hsaWdo dCkpCgooZGVmdW4gY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXItY29tcGxlbWVudCAoY2F0ZWdv cnkpCiAgIlJldHVybiBjb21wbGVtZW50IG9mIHRoZSBmaWx0ZXIgZnVuY3Rpb24gdXNlZCBieSB0 aGUgY29tcGxldGlvbiBzeXN0ZW0uCgpDQVRFR09SWSBpcyB0aGUgY29tcGxldGlvbiBjYXRlZ29y eS4iCiAgKGxldCAoKGZpbHRlciAoY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIgY2F0ZWdvcnkg bmlsKSkpCiAgICAobGFtYmRhIChpbnB1dCBjYW5kcykKICAgICAgKGxldCAoKGh0IChjb25zdWx0 LS1zdHJpbmctaGFzaCAoZnVuY2FsbCBmaWx0ZXIgaW5wdXQgY2FuZHMpKSkpCiAgICAgICAgKHNl cS1yZW1vdmUgKGxhbWJkYSAoeCkgKGdldGhhc2ggeCBodCkpIGNhbmRzKSkpKSkKCihkZWZ1biBj b25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1kaXNwYXRjaCAoY2F0ZWdvcnkgaGlnaGxpZ2h0KQog ICJSZXR1cm4gZGlzcGF0Y2hpbmcgZmlsdGVyIGZ1bmN0aW9uLgoKRWl0aGVyIGRpc3BhdGNoIHRv IGBjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlcicgb3IgdG8KYGNvbnN1bHQtLWNvbXBsZXRpb24t ZmlsdGVyLWNvbXBsZW1lbnQnLgpDQVRFR09SWSBpcyB0aGUgY29tcGxldGlvbiBjYXRlZ29yeS4K SElHSExJR0hUIG11c3QgYmUgdCBpZiBoaWdobGlnaHRpbmcgaXMgbmVlZGVkLiIKICAobGV0ICgo ZmlsdGVyIChjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlciBjYXRlZ29yeSBoaWdobGlnaHQpKQog ICAgICAgIChmaWx0ZXItbm90IChjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1jb21wbGVtZW50 IGNhdGVnb3J5KSkpCiAgICAobGFtYmRhIChpbnB1dCBjYW5kcykKICAgICAgKGNvbmQKICAgICAg ICgoc3RyaW5nLW1hdGNoLXAgIl4hPyA/JCIgaW5wdXQpIGNhbmRzKSA7OyBlbXB0eSBpbnB1dAog ICAgICAgKChzdHJpbmctcHJlZml4LXAgIiEgIiBpbnB1dCkgKGZ1bmNhbGwgZmlsdGVyLW5vdCAo c3Vic3RyaW5nIGlucHV0IDIpIGNhbmRzKSkKICAgICAgICh0IChmdW5jYWxsIGZpbHRlciBpbnB1 dCBjYW5kcykpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLWVhY2gtbGluZSAoYmVnIGVuZCAmcmVz dCBib2R5KQogICJJdGVyYXRlIG92ZXIgZWFjaCBsaW5lLgoKVGhlIGxpbmUgYmVnaW5uaW5nL2Vu ZGluZyBCRUcvRU5EIGlzIGJvdW5kIGluIEJPRFkuIgogIChkZWNsYXJlIChpbmRlbnQgMikpCiAg KGxldCAoKG1heCAobWFrZS1zeW1ib2wgIm1heCIpKSkKICAgIGAoc2F2ZS1leGN1cnNpb24KICAg ICAgIChsZXQgKCgsYmVnIChwb2ludC1taW4pKSAoLG1heCAocG9pbnQtbWF4KSkgZW5kKQogICAg ICAgICAod2hpbGUgKDwgLGJlZyAsbWF4KQogICAgICAgICAgIChnb3RvLWNoYXIgLGJlZykKICAg ICAgICAgICAoc2V0cSAsZW5kIChsaW5lLWVuZC1wb3NpdGlvbikpCiAgICAgICAgICAgLEBib2R5 CiAgICAgICAgICAgKHNldHEgLGJlZyAoMSsgLGVuZCkpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1z dHJpbmctaGFzaCAoc3RyaW5ncykKICAiQ3JlYXRlIGhhc2h0YWJsZSBmcm9tIFNUUklOR1MuIgog IChsZXQgKChodCAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXF1YWwgOnNpemUgKGxlbmd0aCBz dHJpbmdzKSkpKQogICAgKGRvbGlzdCAoc3RyIHN0cmluZ3MpCiAgICAgIChwdXRoYXNoIHN0ciB0 IGh0KSkKICAgIGh0KSkKCihkZWZtYWNybyBjb25zdWx0LS1sb2NhbC1sZXQgKGJpbmRzICZyZXN0 IGJvZHkpCiAgIkJ1ZmZlciBsb2NhbCBsZXQgQklORFMgb2YgZHluYW1pYyB2YXJpYWJsZXMgaW4g Qk9EWS4iCiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICAobGV0ICgoYnVmZmVyIChtYWtlLXN5bWJv bCAiYnVmZmVyIikpCiAgICAgICAgKGxvY2FsIChtYXBjYXIgKGxhbWJkYSAoeCkgKGNvbnMgKG1h a2Utc3ltYm9sICJsb2NhbCIpIChjYXIgeCkpKSBiaW5kcykpKQogICAgYChsZXQgKCgsYnVmZmVy IChjdXJyZW50LWJ1ZmZlcikpCiAgICAgICAgICAgLEAobWFwY2FyIChsYW1iZGEgKHgpIGAoLChj YXIgeCkgKGxvY2FsLXZhcmlhYmxlLXAgJywoY2RyIHgpKSkpIGxvY2FsKSkKICAgICAgICh1bndp bmQtcHJvdGVjdAogICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgLEAobWFwY2FyIChsYW1i ZGEgKHgpIGAobWFrZS1sb2NhbC12YXJpYWJsZSAnLChjYXIgeCkpKSBiaW5kcykKICAgICAgICAg ICAgIChsZXQgKCxAYmluZHMpCiAgICAgICAgICAgICAgICxAYm9keSkpCiAgICAgICAgICh3aGVu IChidWZmZXItbGl2ZS1wICxidWZmZXIpCiAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIg LGJ1ZmZlcgogICAgICAgICAgICAgLEAobWFwY2FyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAg ICAgICAgICAgICBgKHVubGVzcyAsKGNhciB4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg KGtpbGwtbG9jYWwtdmFyaWFibGUgJywoY2RyIHgpKSkpCiAgICAgICAgICAgICAgICAgICAgICAg bG9jYWwpKSkpKSkpCgooZGVmdW4gY29uc3VsdC0tcmVnZXhwLWZpbHRlciAocmVnZXhwcykKICAi Q3JlYXRlIGZpbHRlciByZWdleHAgZnJvbSBSRUdFWFBTLiIKICAoc3RyaW5nLWpvaW4gKG1hcGNh ciAobGFtYmRhICh4KSAoY29uY2F0ICJcXCg/OiIgeCAiXFwpIikpIHJlZ2V4cHMpICJcXHwiKSkK CihkZWZ1biBjb25zdWx0LS1mb250LWxvY2sgKHN0cikKICAiQXBwbHkgYGZvbnQtbG9jaycgZmFj ZXMgaW4gU1RSLCBjb3B5IHRoZW0gdG8gYGZhY2UnLiIKICAobGV0ICgocG9zIDApIChsZW4gKGxl bmd0aCBzdHIpKSkKICAgICh3aGlsZSAoPCBwb3MgbGVuKQogICAgICAobGV0KiAoKGZhY2UgKGdl dC10ZXh0LXByb3BlcnR5IHBvcyAnZm9udC1sb2NrLWZhY2Ugc3RyKSkKICAgICAgICAgICAgIChl bmQgKG9yICh0ZXh0LXByb3BlcnR5LW5vdC1hbGwgcG9zIGxlbiAnZm9udC1sb2NrLWZhY2UgZmFj ZSBzdHIpIGxlbikpKQogICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBwb3MgZW5kICdmYWNlIGZh Y2Ugc3RyKQogICAgICAgIChzZXRxIHBvcyBlbmQpKSkKICAgIHN0cikpCgooZGVmdW4gY29uc3Vs dC0tZm9ybWF0LWRpcmVjdG9yeS1wcm9tcHQgKHByb21wdCBkaXIpCiAgIkZvcm1hdCBQUk9NUFQs IGV4cGFuZCBkaXJlY3RvcnkgRElSIGFuZCByZXR1cm4gdGhlbSBhcyBhIHBhaXIuIgogIChzYXZl LW1hdGNoLWRhdGEKICAgIChsZXQgKChlZGlyIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IChleHBh bmQtZmlsZS1uYW1lIGRpcikpKQogICAgICAgICAgKGRkaXIgKGZpbGUtbmFtZS1hcy1kaXJlY3Rv cnkgKGV4cGFuZC1maWxlLW5hbWUgZGVmYXVsdC1kaXJlY3RvcnkpKSkpCiAgICAgIChjb25zCiAg ICAgICAoaWYgKHN0cmluZz0gZGRpciBlZGlyKQogICAgICAgICAgIChjb25jYXQgcHJvbXB0ICI6 ICIpCiAgICAgICAgIChsZXQgKChhZGlyIChhYmJyZXZpYXRlLWZpbGUtbmFtZSBlZGlyKSkpCiAg ICAgICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIi9cXChbXi9dK1xcKS9cXChbXi9dK1xcKS8kIiBh ZGlyKQogICAgICAgICAgICAgICAoZm9ybWF0ICIlcyBpbiDigKYvJXMvJXMvOiAiIHByb21wdAog ICAgICAgICAgICAgICAgICAgICAgIChtYXRjaC1zdHJpbmcgMSBhZGlyKSAobWF0Y2gtc3RyaW5n IDIgYWRpcikpCiAgICAgICAgICAgICAoZm9ybWF0ICIlcyBpbiAlczogIiBwcm9tcHQgYWRpcikp KSkKICAgICAgIGVkaXIpKSkpCgooZGVmdW4gY29uc3VsdC0tZGlyZWN0b3J5LXByb21wdCAocHJv bXB0IGRpcikKICAiUmV0dXJuIHByb21wdCBhbmQgZGlyZWN0b3J5LgoKUFJPTVBUIGlzIHRoZSBw cm9tcHQgcHJlZml4LiBUaGUgZGlyZWN0b3J5CmlzIGFwcGVuZGVkIHRvIHRoZSBwcm9tcHQgcHJl Zml4LiBGb3IgcHJvamVjdHMKb25seSB0aGUgcHJvamVjdCBuYW1lIGlzIHNob3duLiBUaGUgYGRl ZmF1bHQtZGlyZWN0b3J5JwppcyBub3Qgc2hvd24uIE90aGVyIGRpcmVjdG9yaWVzIGFyZSBhYmJy ZXZpYXRlZCBhbmQKb25seSB0aGUgbGFzdCB0d28gcGF0aCBjb21wb25lbnRzIGFyZSBzaG93bi4K CklmIERJUiBpcyBhIHN0cmluZywgaXQgaXMgcmV0dXJuZWQuCklmIERJUiBpcyBhIHRydWUgdmFs dWUsIHRoZSB1c2VyIGlzIGFza2VkLgpUaGVuIHRoZSBgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVu Y3Rpb24nIGlzIHRyaWVkLgpPdGhlcndpc2UgdGhlIGBkZWZhdWx0LWRpcmVjdG9yeScgaXMgcmV0 dXJuZWQuIgogIChjb25kCiAgICgoc3RyaW5ncCBkaXIpIChjb25zdWx0LS1mb3JtYXQtZGlyZWN0 b3J5LXByb21wdCBwcm9tcHQgZGlyKSkKICAgKGRpciAoY29uc3VsdC0tZm9ybWF0LWRpcmVjdG9y eS1wcm9tcHQgcHJvbXB0IChyZWFkLWRpcmVjdG9yeS1uYW1lICJEaXJlY3Rvcnk6ICIgbmlsIG5p bCB0KSkpCiAgICgod2hlbi1sZXQgKHJvb3QgKGFuZCBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5j dGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgY29uc3VsdC1wcm9qZWN0LXJv b3QtZnVuY3Rpb24pKSkKICAgICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAgIChpZiAoc3RyaW5n LW1hdGNoICIvXFwoW14vXStcXCkvJCIgcm9vdCkKICAgICAgICAgICAgKGNvbnMgKGZvcm1hdCAi JXMgaW4gcHJvamVjdCAlczogIiBwcm9tcHQgKG1hdGNoLXN0cmluZyAxIHJvb3QpKSByb290KQog ICAgICAgICAgKGNvbnN1bHQtLWZvcm1hdC1kaXJlY3RvcnktcHJvbXB0IHByb21wdCByb290KSkp KSkKICAgKHQgKGNvbnN1bHQtLWZvcm1hdC1kaXJlY3RvcnktcHJvbXB0IHByb21wdCBkZWZhdWx0 LWRpcmVjdG9yeSkpKSkKCihkZWZzdWJzdCBjb25zdWx0LS1zdHJpcC1hbnNpLWVzY2FwZSAoc3Ry KQogICJTdHJpcCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSBTVFIuIgogIChyZXBsYWNlLXJl Z2V4cC1pbi1zdHJpbmcgIlxlXFxbWzAtOTtdKlttS10iICIiIHN0cikpCgooZGVmc3Vic3QgY29u c3VsdC0tZm9ybWF0LWxvY2F0aW9uIChmaWxlIGxpbmUpCiAgIkZvcm1hdCBsb2NhdGlvbiBzdHJp bmcgJ0ZJTEU6TElORTonLiIKICAoY29uY2F0CiAgIChwcm9wZXJ0aXplIGZpbGUgJ2ZhY2UgJ2Nv bnN1bHQtZmlsZSkgIjoiCiAgIChwcm9wZXJ0aXplIChudW1iZXItdG8tc3RyaW5nIGxpbmUpICdm YWNlICdjb25zdWx0LWxpbmUtbnVtYmVyKSAiOiIpKQoKKGRlZnVuIGNvbnN1bHQtLWxpbmUtcG9z aXRpb24gKGxpbmUpCiAgIkNvbXB1dGUgY2hhcmFjdGVyIHBvc2l0aW9uIGZyb20gTElORSBudW1i ZXIuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgKHdoZW4g Y29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4KICAgICAgICAod2lkZW4pKQogICAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQogICAgICAoZm9yd2FyZC1saW5lICgtIGxpbmUgMSkpCiAgICAgIChw b2ludCkpKSkKCihkZWZtYWNybyBjb25zdWx0LS1vdmVybGF5IChiZWcgZW5kICZyZXN0IHByb3Bz KQogICJNYWtlIGNvbnN1bHQgb3ZlcmxheSBiZXR3ZWVuIEJFRyBhbmQgRU5EIHdpdGggUFJPUFMu IgogIChsZXQgKChvdiAobWFrZS1zeW1ib2wgIm92IikpCiAgICAgICAgKHB1dHMpKQogICAgKHdo aWxlIHByb3BzCiAgICAgIChwdXNoIGAob3ZlcmxheS1wdXQgLG92ICwoY2FyIHByb3BzKSAsKGNh ZHIgcHJvcHMpKSBwdXRzKQogICAgICAoc2V0cSBwcm9wcyAoY2RkciBwcm9wcykpKQogICAgYChs ZXQgKCgsb3YgKG1ha2Utb3ZlcmxheSAsYmVnICxlbmQpKSkKICAgICAgICxAcHV0cwogICAgICAg LG92KSkpCgooZGVmdW4gY29uc3VsdC0tcmVtb3ZlLWR1cHMgKGxpc3QgJm9wdGlvbmFsIGtleSkK ICAiUmVtb3ZlIGR1cGxpY2F0ZSBzdHJpbmdzIGZyb20gTElTVC4gS2VlcCBmaXJzdCBvY2N1cnJl bmNlIG9mIGEga2V5LgoKS0VZIGlzIHRoZSBrZXkgZnVuY3Rpb24uIgogIChsZXQgKChodCAobWFr ZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXF1YWwgOnNpemUgKGxlbmd0aCBsaXN0KSkpCiAgICAgICAg KGFjY3VtKQogICAgICAgIChrZXkgKG9yIGtleSAjJ2lkZW50aXR5KSkpCiAgICAoZG9saXN0IChl bnRyeSBsaXN0IChucmV2ZXJzZSBhY2N1bSkpCiAgICAgIChsZXQgKChrIChmdW5jYWxsIGtleSBl bnRyeSkpKQogICAgICAgICh1bmxlc3MgKGdldGhhc2ggayBodCkKICAgICAgICAgIChwdXRoYXNo IGsgdCBodCkKICAgICAgICAgIChwdXNoIGVudHJ5IGFjY3VtKSkpKSkpCgooZGVmc3Vic3QgY29u c3VsdC0taW4tcmFuZ2UtcCAocG9zKQogICJSZXR1cm4gdCBpZiBwb3NpdGlvbiBQT1MgbGllcyBp biByYW5nZSBgcG9pbnQtbWluJyB0byBgcG9pbnQtbWF4Jy4iCiAgKDw9IChwb2ludC1taW4pIHBv cyAocG9pbnQtbWF4KSkpCgooZGVmdW4gY29uc3VsdC0tZ2V0LWFubm90YXRpb24gKGNhbmQpCiAg IlJldHVybiAnY29uc3VsdC0tYW5ub3RhdGlvbiBwcm9wZXJ0eSBmcm9tIENBTkQuIgogIChnZXQt dGV4dC1wcm9wZXJ0eSAwICdjb25zdWx0LS1hbm5vdGF0aW9uIGNhbmQpKQoKKGRlZnVuIGNvbnN1 bHQtLWxvb2t1cC1lbGVtIChfIGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIENBTkQgaW4gQ0FO RElEQVRFUyBhbGlzdCwgcmV0dXJuIGVsZW1lbnQuIgogIChhc3NvYyBjYW5kIGNhbmRpZGF0ZXMp KQoKKGRlZnVuIGNvbnN1bHQtLWxvb2t1cC1jZHIgKF8gY2FuZGlkYXRlcyBjYW5kKQogICJMb29r dXAgQ0FORCBpbiBDQU5ESURBVEVTIGFsaXN0LCByZXR1cm4gY2RyIG9mIGVsZW1lbnQuIgogIChj ZHIgKGFzc29jIGNhbmQgY2FuZGlkYXRlcykpKQoKKGRlZnVuIGNvbnN1bHQtLWxvb2t1cC1jYWRy IChfIGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIENBTkQgaW4gQ0FORElEQVRFUyBhbGlzdCwg cmV0dXJuIGNhZHIgb2YgZWxlbWVudC4iCiAgKGNhZHIgKGFzc29jIGNhbmQgY2FuZGlkYXRlcykp KQoKKGRlZnVuIGNvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbiAoXyBjYW5kaWRhdGVzIGNhbmQpCiAg Ikxvb2t1cCBDQU5EIGluIENBTkRJREFURVMgbGlzdCBvZiAnY29uc3VsdC1sb2NhdGlvbiBjYXRl Z29yeSwgcmV0dXJuIHRoZSBtYXJrZXIuIgogICh3aGVuLWxldCAoZm91bmQgKG1lbWJlciBjYW5k IGNhbmRpZGF0ZXMpKQogICAgKGNhciAoZ2V0LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC1sb2Nh dGlvbiAoY2FyIGZvdW5kKSkpKSkKCihkZWZ1biBjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlciAo KQogICJSYWlzZSBhbiBlcnJvciBpZiBleGVjdXRlZCBmcm9tIHRoZSBtaW5pYnVmZmVyLiIKICAo d2hlbiAobWluaWJ1ZmZlcnApCiAgICAodXNlci1lcnJvciAiYCVzJyBjYWxsZWQgaW5zaWRlIHRo ZSBtaW5pYnVmZmVyIiB0aGlzLWNvbW1hbmQpKSkKCihkZWZ1biBjb25zdWx0LS1yZXF1aXJlLW1p bmlidWZmZXIgKCkKICAiUmFpc2UgYW4gZXJyb3IgaWYgZXhlY3V0ZWQgb3V0c2lkZSB0aGUgbWlu aWJ1ZmZlci4iCiAgKHVubGVzcyAobWluaWJ1ZmZlcnApCiAgICAodXNlci1lcnJvciAiYCVzJyBt dXN0IGJlIGNhbGxlZCBpbnNpZGUgdGhlIG1pbmlidWZmZXIiIHRoaXMtY29tbWFuZCkpKQoKKGRl ZnVuIGNvbnN1bHQtLWZvbnRpZnktYWxsICgpCiAgIkVuc3VyZSB0aGF0IHRoZSB3aG9sZSBidWZm ZXIgaXMgZm9udGlmaWVkLiIKICA7OyBGb250LWxvY2tpbmcgaXMgbGF6eSwgaS5lLiwgaWYgYSBs aW5lIGhhcyBub3QgYmVlbiBsb29rZWQgYXQgeWV0LCB0aGUgbGluZQogIDs7IGlzIG5vdCBmb250 LWxvY2tlZC4gV2Ugd291bGQgb2JzZXJ2ZSB0aGlzIGlmIGNvbnN1bHRpbmcgYW4gdW5mb250aWZp ZWQKICA7OyBsaW5lLiBUaGVyZWZvcmUgd2UgaGF2ZSB0byBlbmZvcmNlIGZvbnQtbG9ja2luZyBu b3csIHdoaWNoIGlzIHNsb3cuIEluCiAgOzsgb3JkZXIgdG8gcHJldmVudCBpcyBoYW5nLXVwIHdl IGNoZWNrIHRoZSBidWZmZXIgc2l6ZSBhZ2FpbnN0CiAgOzsgYGNvbnN1bHQtZm9udGlmeS1tYXgt c2l6ZScuCiAgKHdoZW4gKGFuZCBqaXQtbG9jay1tb2RlICg8IChidWZmZXItc2l6ZSkgY29uc3Vs dC1mb250aWZ5LW1heC1zaXplKSkKICAgIChqaXQtbG9jay1mb250aWZ5LW5vdykpKQoKKGRlZnN1 YnN0IGNvbnN1bHQtLWZvbnRpZnktcmVnaW9uIChzdGFydCBlbmQpCiAgIkVuc3VyZSB0aGF0IHJl Z2lvbiBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQgaXMgZm9udGlmaWVkLiIKICAod2hlbiBqaXQtbG9j ay1tb2RlCiAgICAoaml0LWxvY2stZm9udGlmeS1ub3cgc3RhcnQgZW5kKSkpCgooZGVmdW4gY29u c3VsdC0tZGVmaW5lLWtleSAobWFwIGtleSBjbWQgZGVzYykKICAiQmluZCBDTUQgdG8gS0VZIGlu IE1BUCBhbmQgYWRkIHdoaWNoLWtleSBkZXNjcmlwdGlvbiBERVNDLiIKICAoZGVmaW5lLWtleSBt YXAga2V5IGNtZCkKICA7OyBUaGUgd2hpY2gta2V5IGRlc2NyaXB0aW9uIGlzIHBvdGVudGlhbGx5 IGZyYWdpbGUgaWYgc29tZXRoaW5nIGlzIGNoYW5nZWQgb24gdGhlIHNpZGUKICA7OyBvZiB3aGlj aC1rZXkuIEtlZXAgYW4gZXllIG9uIHRoYXQuIEFuIGFsdGVybmF0aXZlIG1vcmUgc3RhbmRhcmQt Y29tcGxpYW50IG1ldGhvZAogIDs7IHdvdWxkIGJlIHRvIHVzZSBgbWVudS1pdGVtJywgYnV0IHRo aXMgaXMgdW5mb3J0dW5hdGVseSBub3QgeWV0IHN1cHBvcnRlZCBieSB3aGljaC1rZXkKICA7OyBh bmQgYGRlc2NyaWJlLWJ1ZmZlci1iaW5kaW5ncycuCiAgOzsgU2VlIGh0dHBzOi8vZ2l0aHViLmNv bS9qdXN0YnVyL2VtYWNzLXdoaWNoLWtleS9pc3N1ZXMvMTc3CiAgKGxldCAoKGlkeCAoLSAobGVu Z3RoIGtleSkgMSkpKQogICAgKGRlZmluZS1rZXkgbWFwICh2Y29uY2F0IChzZXEtdGFrZSBrZXkg aWR4KSAodmVjdG9yICd3aGljaC1rZXkgKGVsdCBrZXkgaWR4KSkpCiAgICAgIGAod2hpY2gta2V5 ICgsKGNvcHktc2VxdWVuY2UgZGVzYykpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXdpdGgtaW5j cmVhc2VkLWdjICgmcmVzdCBib2R5KQogICJUZW1wb3JhcmlseSBpbmNyZWFzZSB0aGUgZ2MgbGlt aXQgaW4gQk9EWSB0byBvcHRpbWl6ZSBmb3IgdGhyb3VnaHB1dC4iCiAgYChsZXQqICgob3Zlcndy aXRlICg+IGNvbnN1bHQtLWdjLXRocmVzaG9sZCBnYy1jb25zLXRocmVzaG9sZCkpCiAgICAgICAg ICAoZ2MtY29ucy10aHJlc2hvbGQgKGlmIG92ZXJ3cml0ZSBjb25zdWx0LS1nYy10aHJlc2hvbGQg Z2MtY29ucy10aHJlc2hvbGQpKQogICAgICAgICAgKGdjLWNvbnMtcGVyY2VudGFnZSAoaWYgb3Zl cndyaXRlIGNvbnN1bHQtLWdjLXBlcmNlbnRhZ2UgZ2MtY29ucy1wZXJjZW50YWdlKSkpCiAgICAg LEBib2R5KSkKCihkZWZ1biBjb25zdWx0LS1jb3VudC1saW5lcyAocG9zKQogICJNb3ZlIHRvIHBv c2l0aW9uIFBPUyBhbmQgcmV0dXJuIG51bWJlciBvZiBsaW5lcy4iCiAgKGxldCAoKGxpbmUgMCkp CiAgICAod2hpbGUgKDwgKHBvaW50KSBwb3MpCiAgICAgIChmb3J3YXJkLWxpbmUpCiAgICAgICh3 aGVuICg8PSAocG9pbnQpIHBvcykKICAgICAgICAoc2V0cSBsaW5lICgxKyBsaW5lKSkpKQogICAg KGdvdG8tY2hhciBwb3MpCiAgICBsaW5lKSkKCjs7IFdlIG11c3QgZGlzYW1iaWd1YXRlIHRoZSBs aW5lcyBieSBhZGRpbmcgYSBwcmVmaXggc3VjaCB0aGF0IHR3byBsaW5lcyB3aXRoCjs7IHRoZSBz YW1lIHRleHQgY2FuIGJlIGRpc3Rpbmd1aXNoZWQuIEluIG9yZGVyIHRvIGF2b2lkIG1hdGNoaW5n IHRoZSBsaW5lCjs7IG51bWJlciwgc3VjaCB0aGF0IHRoZSB1c2VyIGNhbiBzZWFyY2ggZm9yIG51 bWJlcnMgd2l0aCBgY29uc3VsdC1saW5lJywgd2UKOzsgZW5jb2RlIHRoZSBsaW5lIG51bWJlciBh cyB1bmljb2RlIGNoYXJhY3RlcnMgaW4gdGhlIHN1cHBsZW1lbnRhcnkgcHJpdmF0ZSB1c2UKOzsg cGxhbmUgYi4gQnkgZG9pbmcgdGhhdCwgaXQgaXMgdW5saWtlbHkgdGhhdCBhY2NpZGVudGlhbCBt YXRjaGluZyBvY2N1cnMuCihkZWZzdWJzdCBjb25zdWx0LS1lbmNvZGUtbG9jYXRpb24gKG1hcmtl cikKICAiR2VuZXJhdGUgdW5pcXVlIHN0cmluZyBmb3IgTUFSS0VSLgpESVNQTEFZIGlzIHRoZSBz dHJpbmcgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIHRoZSB1bmlxdWUgc3RyaW5nLiIKICAobGV0ICgo c3RyICIiKSAobiBtYXJrZXIpKQogICAgKHdoaWxlIChwcm9nbgogICAgICAgICAgICAgKHNldHEg c3RyIChjb25jYXQgc3RyIChjaGFyLXRvLXN0cmluZyAoKyBjb25zdWx0LS10b2Z1LWNoYXIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCUgbiBj b25zdWx0LS10b2Z1LXJhbmdlKSkpKSkKICAgICAgICAgICAgIChhbmQgKD49IG4gY29uc3VsdC0t dG9mdS1yYW5nZSkgKHNldHEgbiAoLyBuIGNvbnN1bHQtLXRvZnUtcmFuZ2UpKSkpKQogICAgc3Ry KSkKCihkZWZzdWJzdCBjb25zdWx0LS1saW5lLW51bWJlci1wcmVmaXggKG1hcmtlciBsaW5lIHdp ZHRoKQogICJGb3JtYXQgTElORSBudW1iZXIgcHJlZml4IG51bWJlciB3aXRoIHBhZGRpbmcuCgpN QVJLRVIgYW5kIExJTkUgYXJlIGFkZGVkIGFzICdjb25zdWx0LWxvY2F0aW9uIHRleHQgcHJvcGVy dHkuCldJRFRIIGlzIHRoZSBsaW5lIG51bWJlciB3aWR0aC4iCiAgKGxldCogKCh1bmlxdWUtc3Ry IChjb25zdWx0LS1lbmNvZGUtbG9jYXRpb24gbWFya2VyKSkKICAgICAgICAgKGxpbmUtc3RyIChu dW1iZXItdG8tc3RyaW5nIGxpbmUpKQogICAgICAgICAocHJlZml4LXN0ciAoY29uY2F0CiAgICAg ICAgICAgICAgICAgICAgICAobWFrZS1zdHJpbmcgKC0gd2lkdGggKGxlbmd0aCBsaW5lLXN0cikp IDMyKQogICAgICAgICAgICAgICAgICAgICAgbGluZS1zdHIKICAgICAgICAgICAgICAgICAgICAg ICIgIikpKQogICAgKHB1dC10ZXh0LXByb3BlcnR5IDAgKGxlbmd0aCBwcmVmaXgtc3RyKSAnZmFj ZSAnY29uc3VsdC1saW5lLW51bWJlci1wcmVmaXggcHJlZml4LXN0cikKICAgIChhZGQtdGV4dC1w cm9wZXJ0aWVzIDAgKGxlbmd0aCB1bmlxdWUtc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAg YChkaXNwbGF5ICxwcmVmaXgtc3RyIGNvbnN1bHQtbG9jYXRpb24gKCxtYXJrZXIgLiAsbGluZSkp CiAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUtc3RyKQogICAgdW5pcXVlLXN0cikpCgoo ZGVmdW4gY29uc3VsdC0tYWRkLWxpbmUtbnVtYmVyIChtYXgtbGluZSBjYW5kaWRhdGVzKQogICJB ZGQgbGluZSBudW1iZXJzIHRvIHVuZm9ybWF0dGVkIENBTkRJREFURVMgYXMgcHJlZml4LgpUaGUg TUFYLUxJTkUgaXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgd2lkdGguClNpbmNlIHRoZSBsaW5l IG51bWJlciBpcyBwYXJ0IG9mIHRoZSBjYW5kaWRhdGUgaXQgd2lsbCBiZSBtYXRjaGVkLW9uIGR1 cmluZyBjb21wbGV0aW9uLiIKICAobGV0ICgod2lkdGggKGxlbmd0aCAobnVtYmVyLXRvLXN0cmlu ZyBtYXgtbGluZSkpKSkKICAgIChtYXBjYXIgKHBjYXNlLWxhbWJkYSAoYCgsbWFya2VyICxsaW5l ICxzdHIpKQogICAgICAgICAgICAgIChjb25jYXQKICAgICAgICAgICAgICAgKGNvbnN1bHQtLWxp bmUtbnVtYmVyLXByZWZpeCBtYXJrZXIgbGluZSB3aWR0aCkKICAgICAgICAgICAgICAgc3RyKSkK ICAgICAgICAgICAgY2FuZGlkYXRlcykpKQoKKGRlZnN1YnN0IGNvbnN1bHQtLXJlZ2lvbi13aXRo LWN1cnNvciAoYmVnaW4gZW5kIG1hcmtlcikKICAiUmV0dXJuIHJlZ2lvbiBzdHJpbmcgd2l0aCBh IG1hcmtpbmcgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4KCkJFR0lOIGlzIHRoZSBiZWdpbiBwb3Np dGlvbi4KRU5EIGlzIHRoZSBlbmQgcG9zaXRpb24uCk1BUktFUiBpcyB0aGUgY3Vyc29yIHBvc2l0 aW9uLiIKICAobGV0ICgoc3RyIChidWZmZXItc3Vic3RyaW5nIGJlZ2luIGVuZCkpKQogICAgKGlm ICg+PSBtYXJrZXIgZW5kKQogICAgICAgIChjb25jYXQgc3RyIChwcm9wZXJ0aXplICIgIiAnZmFj ZSAnY29uc3VsdC1wcmV2aWV3LWN1cnNvcikpCiAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAoLSBt YXJrZXIgYmVnaW4pICgtICgxKyBtYXJrZXIpIGJlZ2luKQogICAgICAgICAgICAgICAgICAgICAg ICAgJ2ZhY2UgJ2NvbnN1bHQtcHJldmlldy1jdXJzb3Igc3RyKQogICAgICBzdHIpKSkKCihkZWZz dWJzdCBjb25zdWx0LS1saW5lLXdpdGgtY3Vyc29yIChtYXJrZXIpCiAgIlJldHVybiBjdXJyZW50 IGxpbmUgd2hlcmUgdGhlIGN1cnNvciBNQVJLRVIgaXMgaGlnaGxpZ2h0ZWQuIgogIChjb25zdWx0 LS1yZWdpb24td2l0aC1jdXJzb3IKICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKQogICAobGlu ZS1lbmQtcG9zaXRpb24pCiAgIG1hcmtlcikpCgooZGVmdW4gY29uc3VsdC0tbWVyZ2UtY29uZmln IChhcmdzKQogICJNZXJnZSBgY29uc3VsdC1jb25maWcnIHBsaXN0cyBpbnRvIHRoZSBrZXl3b3Jk IGFyZ3VtZW50cyBvZiBBUkdTLiIKICAoaWYtbGV0IChjb25maWcgKGFsaXN0LWdldCB0aGlzLWNv bW1hbmQgY29uc3VsdC1jb25maWcpKQogICAgICAoYXBwZW5kIChzZXEtdGFrZS13aGlsZSAobGFt YmRhICh4KSAobm90IChrZXl3b3JkcCB4KSkpIGFyZ3MpIGNvbmZpZwogICAgICAgICAgICAgIChz ZXEtY29weSAoc2VxLWRyb3Atd2hpbGUgKGxhbWJkYSAoeCkgKG5vdCAoa2V5d29yZHAgeCkpKSBh cmdzKSkpCiAgICBhcmdzKSkKCjs7OzsgUHJldmlldyBzdXBwb3J0CgooZGVmdW4gY29uc3VsdC0t a2lsbC1jbGVhbi1idWZmZXIgKGJ1ZikKICAiS2lsbCBCVUYgaWYgaXQgaGFzIG5vdCBiZWVuIG1v ZGlmaWVkLiIKICAodW5sZXNzIChvciAoZXEgYnVmIChjdXJyZW50LWJ1ZmZlcikpIChidWZmZXIt bW9kaWZpZWQtcCBidWYpKQogICAgKGtpbGwtYnVmZmVyIGJ1ZikpKQoKKGRlZnVuIGNvbnN1bHQt LWZpbGUtcHJldmlldy1zZXR1cCAoKQogICJSZXR1cm4gYSBmdW5jdGlvbiB0byBvcGVuIGZpbGVz IHRlbXBvcmFyaWx5LiIKICAobGV0KiAoKG5ldy1idWZmZXJzKQogICAgICAgICAocmVjZW50Zi1z aG91bGQtcmVzdG9yZSByZWNlbnRmLW1vZGUpCiAgICAgICAgIChyZWNlbnRmLXNhdmVkLWxpc3Qg KHdoZW4gcmVjZW50Zi1zaG91bGQtcmVzdG9yZSAoY29weS1zZXF1ZW5jZSByZWNlbnRmLWxpc3Qp KSkpCiAgICAobGFtYmRhICgmb3B0aW9uYWwgbmFtZSkKICAgICAgKGlmIChub3QgbmFtZSkKICAg ICAgICAgICh3aGVuIHJlY2VudGYtc2hvdWxkLXJlc3RvcmUKICAgICAgICAgICAgKHNldHEgcmVj ZW50Zi1saXN0IHJlY2VudGYtc2F2ZWQtbGlzdCkKICAgICAgICAgICAgKHdoZW4gKG1lbWJlciAo Y3VycmVudC1idWZmZXIpIG5ldy1idWZmZXJzKQogICAgICAgICAgICAgIChyZWNlbnRmLWFkZC1m aWxlIChidWZmZXItZmlsZS1uYW1lIChjdXJyZW50LWJ1ZmZlcikpKSkpCiAgICAgICAgKG9yIChn ZXQtZmlsZS1idWZmZXIgbmFtZSkKICAgICAgICAgICAgKHdoZW4tbGV0IChhdHRycyAoZmlsZS1h dHRyaWJ1dGVzIG5hbWUpKQogICAgICAgICAgICAgIChpZiAoPiAoZmlsZS1hdHRyaWJ1dGUtc2l6 ZSBhdHRycykgY29uc3VsdC1wcmV2aWV3LW1heC1zaXplKQogICAgICAgICAgICAgICAgICAoYW5k IChtaW5pYnVmZmVyLW1lc3NhZ2UgIkZpbGUgYCVzJyB0b28gbGFyZ2UgZm9yIHByZXZpZXciIG5h bWUpIG5pbCkKICAgICAgICAgICAgICAgIChsZXQgKChidWYgKGZpbmQtZmlsZS1ub3NlbGVjdCBu YW1lICdub3dhcm4pKSkKICAgICAgICAgICAgICAgICAgKHB1c2ggYnVmIG5ldy1idWZmZXJzKQog ICAgICAgICAgICAgICAgICA7OyBPbmx5IGtlZXAgYSBmZXcgYnVmZmVycyBhbGl2ZQogICAgICAg ICAgICAgICAgICAod2hpbGUgKD4gKGxlbmd0aCBuZXctYnVmZmVycykgY29uc3VsdC1wcmV2aWV3 LW1heC1jb3VudCkKICAgICAgICAgICAgICAgICAgICAoY29uc3VsdC0ta2lsbC1jbGVhbi1idWZm ZXIgKGNhciAobGFzdCBuZXctYnVmZmVycykpKQogICAgICAgICAgICAgICAgICAgIChzZXRxIG5l dy1idWZmZXJzIChuYnV0bGFzdCBuZXctYnVmZmVycykpKQogICAgICAgICAgICAgICAgICBidWYp KSkpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXdpdGgtZmlsZS1wcmV2aWV3IChhcmdzICZyZXN0 IGJvZHkpCiAgIlByb3ZpZGUgYSBmdW5jdGlvbiB0byBvcGVuIGZpbGVzIHRlbXBvcmFyaWx5LgpU aGUgZmlsZXMgYXJlIGNsb3NlZCBhdXRvbWF0aWNhbGx5IGluIHRoZSBlbmQuCgpBUkdTIGlzIHRo ZSBvcGVuIGZ1bmN0aW9uIGFyZ3VtZW50IGZvciBCT0RZLiIKICAoZGVjbGFyZSAoaW5kZW50IDEp KQogIGAobGV0ICgoLEBhcmdzIChjb25zdWx0LS1maWxlLXByZXZpZXctc2V0dXApKSkKICAgICAo dW53aW5kLXByb3RlY3QKICAgICAgICAgLChtYWNyb2V4cC1wcm9nbiBib2R5KQogICAgICAgKGZ1 bmNhbGwgLEBhcmdzKSkpKQoKOzsgRGVyaXZlZCBmcm9tIGN0cmxmLCBvcmlnaW5hbGx5IGlzZWFy Y2gKKGRlZnVuIGNvbnN1bHQtLWludmlzaWJsZS1zaG93ICgmb3B0aW9uYWwgcGVybWFuZW50bHkp CiAgIkRpc2FibGUgYW55IG92ZXJsYXlzIHRoYXQgYXJlIGN1cnJlbnRseSBoaWRpbmcgcG9pbnQu ClBFUk1BTkVOVExZIG5vbi1uaWwgbWVhbnMgdGhlIG92ZXJsYXlzIHdpbGwgbm90IGJlIHJlc3Rv cmVkIGxhdGVyLiIKICAobGV0ICgob3BlbmVkKSkKICAgIChkb2xpc3QgKG92IChvdmVybGF5cy1p biAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pIChsaW5lLWVuZC1wb3NpdGlvbikpIG9wZW5lZCkK ICAgICAgKHdoZW4gKGFuZCAoaW52aXNpYmxlLXAgKG92ZXJsYXktZ2V0IG92ICdpbnZpc2libGUp KQogICAgICAgICAgICAgICAgIChvdmVybGF5LWdldCBvdiAnaXNlYXJjaC1vcGVuLWludmlzaWJs ZSkpCiAgICAgICAgKGlmIHBlcm1hbmVudGx5CiAgICAgICAgICAgIChmdW5jYWxsIChvdmVybGF5 LWdldCBvdiAnaXNlYXJjaC1vcGVuLWludmlzaWJsZSkgb3YpCiAgICAgICAgICAocHVzaCAoY29u cyBvdiAob3ZlcmxheS1nZXQgb3YgJ2ludmlzaWJsZSkpIG9wZW5lZCkKICAgICAgICAgIChpZi1s ZXQgKGZ1bmMgKG92ZXJsYXktZ2V0IG92ICdpc2VhcmNoLW9wZW4taW52aXNpYmxlLXRlbXBvcmFy eSkpCiAgICAgICAgICAgICAgKGZ1bmNhbGwgZnVuYyBuaWwpCiAgICAgICAgICAgIChvdmVybGF5 LXB1dCBvdiAnaW52aXNpYmxlIG5pbCkpKSkpKSkKCjs7IERlcml2ZWQgZnJvbSBjdHJsZiwgb3Jp Z2luYWxseSBpc2VhcmNoCihkZWZ1biBjb25zdWx0LS1pbnZpc2libGUtcmVzdG9yZSAob3Zlcmxh eXMpCiAgIlJlc3RvcmUgYW55IG9wZW5lZCBPVkVSTEFZUyB0aGF0IHdlcmUgcHJldmlvdXNseSBk aXNhYmxlZC4iCiAgKGRvbGlzdCAob3Ygb3ZlcmxheXMpCiAgICAoaWYtbGV0IChmdW5jIChvdmVy bGF5LWdldCAoY2FyIG92KSAnaXNlYXJjaC1vcGVuLWludmlzaWJsZS10ZW1wb3JhcnkpKQogICAg ICAgIChmdW5jYWxsIGZ1bmMgdCkKICAgICAgKG92ZXJsYXktcHV0IChjYXIgb3YpICdpbnZpc2li bGUgKGNkciBvdikpKSkpCgooZGVmdW4gY29uc3VsdC0tanVtcC0xIChwb3MpCiAgIkdvIHRvIFBP UyBhbmQgcmVjZW50ZXIuIgogIChjb25kCiAgICgoYW5kIChtYXJrZXJwIHBvcykgKG5vdCAoYnVm ZmVyLWxpdmUtcCAobWFya2VyLWJ1ZmZlciBwb3MpKSkpCiAgICA7OyBPbmx5IHByaW50IGEgbWVz c2FnZSwgbm8gZXJyb3IgaW4gb3JkZXIgdG8gbm90IG1lc3MKICAgIDs7IHdpdGggdGhlIG1pbmli dWZmZXIgdXBkYXRlIGhvb2suCiAgICAobWVzc2FnZSAiQnVmZmVyIGlzIGRlYWQiKSkKICAgKHQK ICAgIDs7IFN3aXRjaCB0byBidWZmZXIgaWYgaXQgaXMgbm90IHZpc2libGUKICAgICh3aGVuIChh bmQgKG1hcmtlcnAgcG9zKSAobm90IChlcSAoY3VycmVudC1idWZmZXIpIChtYXJrZXItYnVmZmVy IHBvcykpKSkKICAgICAgKHN3aXRjaC10by1idWZmZXIgKG1hcmtlci1idWZmZXIgcG9zKSkpCiAg ICA7OyBXaWRlbiBpZiB3ZSBjYW5ub3QganVtcCB0byB0aGUgcG9zaXRpb24gKGlkZWEgZnJvbSBm bHljaGVjay1qdW1wLXRvLWVycm9yKQogICAgKHVubGVzcyAoPSAoZ290by1jaGFyIHBvcykgKHBv aW50KSkKICAgICAgKHdpZGVuKQogICAgICAoZ290by1jaGFyIHBvcykpCiAgICAocnVuLWhvb2tz ICdjb25zdWx0LWFmdGVyLWp1bXAtaG9vaykpKSkKCihkZWZ1biBjb25zdWx0LS1qdW1wIChwb3Mp CiAgIlB1c2ggY3VycmVudCBwb3NpdGlvbiB0byBtYXJrIHJpbmcsIGdvIHRvIFBPUyBhbmQgcmVj ZW50ZXIuIgogICh3aGVuIHBvcwogICAgOzsgV2hlbiB0aGUgbWFya2VyIGlzIGluIHRoZSBzYW1l IGJ1ZmZlciwKICAgIDs7IHJlY29yZCBwcmV2aW91cyBsb2NhdGlvbiBzdWNoIHRoYXQgdGhlIHVz ZXIgY2FuIGp1bXAgYmFjayBxdWlja2x5LgogICAgKHVubGVzcyAoYW5kIChtYXJrZXJwIHBvcykg KG5vdCAoZXEgKGN1cnJlbnQtYnVmZmVyKSAobWFya2VyLWJ1ZmZlciBwb3MpKSkpCiAgICAgIChw dXNoLW1hcmsgKHBvaW50KSB0KSkKICAgIChjb25zdWx0LS1qdW1wLTEgcG9zKQogICAgKGNvbnN1 bHQtLWludmlzaWJsZS1zaG93IHQpKQogIG5pbCkKCjs7IE1hdGNoZWQgc3RyaW5ncyBhcmUgbm90 IGhpZ2hsaWdodGVkIGFzIG9mIG5vdy4KOzsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taW5hZC9j b25zdWx0L2lzc3Vlcy83CihkZWZ1biBjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uICgmb3B0aW9u YWwgZmFjZSkKICAiVGhlIHByZXZpZXcgZnVuY3Rpb24gdXNlZCBpZiBzZWxlY3RpbmcgZnJvbSBh IGxpc3Qgb2YgY2FuZGlkYXRlIHBvc2l0aW9ucy4KVGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFz IHRoZSBgOnByZXZpZXcnIGFyZ3VtZW50IG9mIGBjb25zdWx0LS1yZWFkJy4KRkFDRSBpcyB0aGUg Y3Vyc29yIGZhY2UuIgogIChsZXQgKChvdmVybGF5cykKICAgICAgICAoaW52aXNpYmxlKQogICAg ICAgIChmYWNlIChvciBmYWNlICdjb25zdWx0LXByZXZpZXctY3Vyc29yKSkKICAgICAgICAoc2F2 ZWQtbWluIChwb2ludC1taW4tbWFya2VyKSkKICAgICAgICAoc2F2ZWQtbWF4IChwb2ludC1tYXgt bWFya2VyKSkKICAgICAgICAoc2F2ZWQtcG9zIChwb2ludC1tYXJrZXIpKSkKICAgIChsYW1iZGEg KGNhbmQgcmVzdG9yZSkKICAgICAgKGNvbnN1bHQtLWludmlzaWJsZS1yZXN0b3JlIGludmlzaWJs ZSkKICAgICAgKG1hcGMgIydkZWxldGUtb3ZlcmxheSBvdmVybGF5cykKICAgICAgKGNvbmQKICAg ICAgIChyZXN0b3JlCiAgICAgICAgKGlmIChub3QgKGJ1ZmZlci1saXZlLXAgKG1hcmtlci1idWZm ZXIgc2F2ZWQtcG9zKSkpCiAgICAgICAgICAgIChtZXNzYWdlICJCdWZmZXIgaXMgZGVhZCIpCiAg ICAgICAgICAobmFycm93LXRvLXJlZ2lvbiBzYXZlZC1taW4gc2F2ZWQtbWF4KQogICAgICAgICAg KGdvdG8tY2hhciBzYXZlZC1wb3MpKSkKICAgICAgIDs7IEp1bXAgdG8gcG9zaXRpb24KICAgICAg IChjYW5kCiAgICAgICAgKGNvbnN1bHQtLWp1bXAtMSBjYW5kKQogICAgICAgIChzZXRxIGludmlz aWJsZSAoY29uc3VsdC0taW52aXNpYmxlLXNob3cpKQogICAgICAgIChsZXQgKChwb3MgKHBvaW50 KSkpCiAgICAgICAgICAoc2V0cSBvdmVybGF5cwogICAgICAgICAgICAgICAgKGxpc3QgKGNvbnN1 bHQtLW92ZXJsYXkgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxpbmUtZW5kLXBvc2l0aW9uKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2UgJ2NvbnN1bHQtcHJldmlldy1saW5lKQogICAg ICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLW92ZXJsYXkgcG9zICgxKyBwb3MpICdmYWNlIGZh Y2UpKSkpKQogICAgICAgOzsgSWYgcG9zaXRpb24gY2Fubm90IGJlIHByZXZpZXdlZCwgcmV0dXJu IHRvIHNhdmVkIHBvc2l0aW9uCiAgICAgICAodCAoY29uc3VsdC0tanVtcC0xIHNhdmVkLXBvcykp KSkpKQoKKGRlZnVuIGNvbnN1bHQtLXdpdGgtcHJldmlldy0xIChwcmV2aWV3LWtleSBwcmV2aWV3 IHRyYW5zZm9ybSBjYW5kaWRhdGUgZnVuKQogICJBZGQgcHJldmlldyBzdXBwb3J0IGZvciBGVU4u CgpTZWUgY29uc3VsdC0td2l0aC1wcmV2aWV3IGZvciB0aGUgYXJndW1lbnRzIFBSRVZJRVctS0VZ LCBQUkVWSUVXLCBUUkFOU0ZPUk0gYW5kIENBTkRJREFURS4iCiAgKGxldCAoKGlucHV0ICIiKSAo c2VsZWN0ZWQpKQogICAgKG1pbmlidWZmZXItd2l0aC1zZXR1cC1ob29rCiAgICAgICAgKGlmIChh bmQgcHJldmlldyBwcmV2aWV3LWtleSkKICAgICAgICAgICAgKGxhbWJkYSAoKQogICAgICAgICAg ICAgIChzZXRxIGNvbnN1bHQtLXByZXZpZXctZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAo bGV0ICgobGFzdC1wcmV2aWV3KSkKICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGlucCBj YW5kKQogICAgICAgICAgICAgICAgICAgICAgICAoY2wtYXNzZXJ0ICh3aW5kb3ctbWluaWJ1ZmZl ci1wKSkKICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoZXF1YWwgbGFzdC1wcmV2aWV3 IGNhbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IChv ciAobWluaWJ1ZmZlci1zZWxlY3RlZC13aW5kb3cpIChuZXh0LXdpbmRvdykpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZnVuY2FsbCBwcmV2aWV3IChmdW5jYWxsIHRyYW5zZm9ybSBpbnAg Y2FuZCkgbmlsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBsYXN0LXByZXZpZXcg Y2FuZCkpKSkpCiAgICAgICAgICAgICAgKGxldCAoKHBvc3QtY29tbWFuZC1zeW0gKG1ha2Utc3lt Ym9sICJjb25zdWx0LS1wcmV2aWV3LXBvc3QtY29tbWFuZCIpKSkKICAgICAgICAgICAgICAgIChm c2V0IHBvc3QtY29tbWFuZC1zeW0KICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKICAg ICAgICAgICAgICAgICAgICAgICAgKHNldHEgaW5wdXQgKG1pbmlidWZmZXItY29udGVudHMtbm8t cHJvcGVydGllcykpCiAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuIChvciAoZXEgcHJldmll dy1rZXkgJ2FueSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChrZXlz ICh0aGlzLXNpbmdsZS1jb21tYW5kLWtleXMpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHNlcS1maW5kIChsYW1iZGEgKHgpIChlcXVhbCAodmNvbmNhdCB4KSBrZXlzKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAobGlzdHAg cHJldmlldy1rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJldmlldy1rZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxpc3QgcHJldmlldy1rZXkpKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICh3aGVuLWxldCAoY2FuZCAoZnVuY2FsbCBjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGZ1bmNhbGwgY29uc3VsdC0tcHJldmlldy1mdW5jdGlvbiBpbnB1dCBjYW5kKSkp KSkKICAgICAgICAgICAgICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgcG9zdC1jb21t YW5kLXN5bSBuaWwgdCkpKQogICAgICAgICAgKGxhbWJkYSAoKQogICAgICAgICAgICAobGV0ICgo cG9zdC1jb21tYW5kLXN5bSAobWFrZS1zeW1ib2wgImNvbnN1bHQtLXByZXZpZXctcG9zdC1jb21t YW5kIikpKQogICAgICAgICAgICAgIChmc2V0IHBvc3QtY29tbWFuZC1zeW0gKGxhbWJkYSAoKSAo c2V0cSBpbnB1dCAobWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0aWVzKSkpKQogICAgICAg ICAgICAgIChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgcG9zdC1jb21tYW5kLXN5bSBuaWwg dCkpKSkKICAgICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICAoY29ucyAoc2V0cSBzZWxlY3Rl ZCAod2hlbi1sZXQgKHJlc3VsdCAoZnVuY2FsbCBmdW4pKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZnVuY2FsbCB0cmFuc2Zvcm0gaW5wdXQgcmVzdWx0KSkpCiAgICAgICAgICAg ICAgICBpbnB1dCkKICAgICAgICA7OyBJZiB0aGVyZSBpcyBhIHByZXZpZXcgZnVuY3Rpb24sIGFs d2F5cyBjYWxsIHJlc3RvcmUhCiAgICAgICAgOzsgVGhlIHByZXZpZXcgZnVuY3Rpb24gc2hvdWxk IGJlIHNlZW4gYXMgYSBzdGF0ZWZ1bCBvYmplY3QsCiAgICAgICAgOzsgYW5kIHdlIGNhbGwgdGhl IGRlc3RydWN0b3IgaGVyZS4KICAgICAgICAod2hlbiBwcmV2aWV3CiAgICAgICAgICAoZnVuY2Fs bCBwcmV2aWV3IHNlbGVjdGVkIHQpKSkpKSkKCihkZWZtYWNybyBjb25zdWx0LS13aXRoLXByZXZp ZXcgKHByZXZpZXcta2V5IHByZXZpZXcgdHJhbnNmb3JtIGNhbmRpZGF0ZSAmcmVzdCBib2R5KQog ICJBZGQgcHJldmlldyBzdXBwb3J0IHRvIEJPRFkuCgpQUkVWSUVXIGlzIHRoZSBwcmV2aWV3IGZ1 bmN0aW9uLgpUUkFOU0ZPUk0gaXMgdGhlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uLgpDQU5ESURB VEUgaXMgdGhlIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgY3VycmVudCBjYW5kaWRhdGUuClBSRVZJ RVctS0VZIGFyZSB0aGUga2V5cyB3aGljaCB0cmlnZ2VycyB0aGUgcHJldmlldy4KClRoZSBwcmV2 aWV3IGZ1bmN0aW9uIHRha2VzIHR3byBhcmd1bWVudHMsIHRoZSBzZWxlY3RlZCBjYW5kaWRhdGUg YW5kIGEgcmVzdG9yZQpmbGFnLiBJdCBpcyBjYWxsZWQgZXZlcnkgdGltZSB3aXRoIHJlc3RvcmU9 bmlsIGFmdGVyIGEgcHJldmlldy1rZXkga2V5cHJlc3MsIGFzCmxvbmcgYXMgYSBuZXcgY2FuZGlk YXRlIGlzIHNlbGVjdGVkLiBGaW5hbGx5IHRoZSBwcmV2aWV3IGZ1bmN0aW9uIGlzIGNhbGxlZCBp bgphbnkgY2FzZSB3aXRoIHJlc3RvcmU9dCBldmVuIGlmIG5vIHByZXZpZXcgaGFzIGFjdHVhbGx5 IHRha2VuIHBsYWNlLiBUaGUKY2FuZGlkYXRlIGFyZ3VtZW50IGNhbiBiZSBuaWwgaWYgdGhlIHNl bGVjdGlvbiBoYXMgYmVlbiBhYm9ydGVkLiIKICAoZGVjbGFyZSAoaW5kZW50IDQpKQogIGAoY29u c3VsdC0td2l0aC1wcmV2aWV3LTEgLHByZXZpZXcta2V5ICxwcmV2aWV3ICx0cmFuc2Zvcm0gLGNh bmRpZGF0ZSAobGFtYmRhICgpICxAYm9keSkpKQoKOzs7OyBOYXJyb3dpbmcgc3VwcG9ydAoKKGRl ZnVuIGNvbnN1bHQtLXdpZGVuLWtleSAoKQogICJSZXR1cm4gd2lkZW5pbmcga2V5LCBpZiBgY29u c3VsdC13aWRlbi1rZXknIGlzIG5vdCBzZXQsIGRlZmF1bHQgdG8gJ2NvbnN1bHQtbmFycm93LWtl eSBTUEMnLiIKICAob3IgY29uc3VsdC13aWRlbi1rZXkgKGFuZCBjb25zdWx0LW5hcnJvdy1rZXkg KHZjb25jYXQgY29uc3VsdC1uYXJyb3cta2V5ICIgIikpKSkKCihkZWZ1biBjb25zdWx0LW5hcnJv dyAoa2V5KQogICJOYXJyb3cgY3VycmVudCBjb21wbGV0aW9uIHdpdGggS0VZLgoKVGhpcyBjb21t YW5kIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgbmFycm93aW5nIHN5c3RlbSBvZiBgY29uc3Vs dC0tcmVhZCcuIgogIChpbnRlcmFjdGl2ZQogICAobGlzdCAodW5sZXNzIChlcXVhbCAodGhpcy1z aW5nbGUtY29tbWFuZC1rZXlzKSAoY29uc3VsdC0td2lkZW4ta2V5KSkKICAgICAgICAgICBsYXN0 LWNvbW1hbmQtZXZlbnQpKSkKICAoY29uc3VsdC0tcmVxdWlyZS1taW5pYnVmZmVyKQogIChzZXRx IGNvbnN1bHQtLW5hcnJvdyBrZXkpCiAgKHdoZW4gY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZQog ICAgKHNldHEgbWluaWJ1ZmZlci1jb21wbGV0aW9uLXByZWRpY2F0ZSAoYW5kIGNvbnN1bHQtLW5h cnJvdyBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlKSkpCiAgKHdoZW4gY29uc3VsdC0tbmFycm93 LW92ZXJsYXkKICAgIChkZWxldGUtb3ZlcmxheSBjb25zdWx0LS1uYXJyb3ctb3ZlcmxheSkpCiAg KHdoZW4gY29uc3VsdC0tbmFycm93CiAgICAoc2V0cSBjb25zdWx0LS1uYXJyb3ctb3ZlcmxheQog ICAgICAgICAgKGNvbnN1bHQtLW92ZXJsYXkKICAgICAgICAgICAoLSAobWluaWJ1ZmZlci1wcm9t cHQtZW5kKSAxKSAobWluaWJ1ZmZlci1wcm9tcHQtZW5kKQogICAgICAgICAgICdiZWZvcmUtc3Ry aW5nCiAgICAgICAgICAgKHByb3BlcnRpemUgKGZvcm1hdCAiIFslc10iIChjZHIgKGFzc29jIGtl eSBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMpKSkKICAgICAgICAgICAgICAgICAgICAgICAnZmFj ZSAnY29uc3VsdC1uYXJyb3ctaW5kaWNhdG9yKSkpKQogIChydW4taG9va3MgJ2NvbnN1bHQtLWNv bXBsZXRpb24tcmVmcmVzaC1ob29rKSkKCihkZWZjb25zdCBjb25zdWx0LS1uYXJyb3ctZGVsZXRl CiAgYChtZW51LWl0ZW0KICAgICIiIG5pbCA6ZmlsdGVyCiAgICAsKGxhbWJkYSAoJm9wdGlvbmFs IF8pCiAgICAgICAod2hlbiAoc3RyaW5nPSAobWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0 aWVzKSAiIikKICAgICAgICAgKGNvbnN1bHQtbmFycm93IG5pbCkKICAgICAgICAgIydpZ25vcmUp KSkpCgooZGVmY29uc3QgY29uc3VsdC0tbmFycm93LXNwYWNlCiAgYChtZW51LWl0ZW0KICAgICIi IG5pbCA6ZmlsdGVyCiAgICAsKGxhbWJkYSAoJm9wdGlvbmFsIF8pCiAgICAgICAobGV0ICgoc3Ry IChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXByb3BlcnRpZXMpKSkKICAgICAgICAgKHdoZW4tbGV0 IChwYWlyIChvciAoYW5kICg9IDEgKGxlbmd0aCBzdHIpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGFzc29jIChhcmVmIHN0ciAwKSBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKHN0cmluZz0gc3RyICIiKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc29jIDMyIGNvbnN1bHQtLW5hcnJvdy1w cmVmaXhlcykpKSkKICAgICAgICAgICAoZGVsZXRlLW1pbmlidWZmZXItY29udGVudHMpCiAgICAg ICAgICAgKGNvbnN1bHQtbmFycm93IChjYXIgcGFpcikpCiAgICAgICAgICAgIydpZ25vcmUpKSkp KQoKKGRlZnVuIGNvbnN1bHQtbmFycm93LWhlbHAgKCkKICAiUHJpbnQgbmFycm93aW5nIGhlbHAg YXMgYSBgbWluaWJ1ZmZlci1tZXNzYWdlJy4KClRoaXMgY29tbWFuZCBjYW4gYmUgYm91bmQgdG8g YSBrZXkgaW4gYGNvbnN1bHQtbmFycm93LW1hcCcsCnRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBj b21tYW5kcyB3aXRoIG5hcnJvd2luZy4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1yZXF1 aXJlLW1pbmlidWZmZXIpCiAgKGxldCAoKG1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0IDEwMDAw MDApKQogICAgKG1pbmlidWZmZXItbWVzc2FnZQogICAgIChzdHJpbmctam9pbgogICAgICAobWFw Y2FyIChsYW1iZGEgKHgpIChjb25jYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Bl cnRpemUgKGNoYXItdG8tc3RyaW5nIChjYXIgeCkpICdmYWNlICdjb25zdWx0LWtleSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9w ZXJ0aXplIChjZHIgeCkgJ2ZhY2UgJ2NvbnN1bHQtaGVscCkpKQogICAgICAgICAgICAgIChzZXEt ZmlsdGVyIChsYW1iZGEgKHgpICgvPSAoY2FyIHgpIDMyKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMpKQogICAgICAiICIpKSkpCgooZGVmdW4gY29u c3VsdC0tbmFycm93LXNldHVwIChzZXR0aW5ncyBtYXApCiAgIlNldHVwIG5hcnJvd2luZyB3aXRo IFNFVFRJTkdTIGFuZCBrZXltYXAgTUFQLiIKICAoaWYgKGZ1bmN0aW9ucCAoY2FyIHNldHRpbmdz KSkKICAgICAgKHNldHEgY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZSAoY2FyIHNldHRpbmdzKQog ICAgICAgICAgICBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMgKGNkciBzZXR0aW5ncykpCiAgICAo c2V0cSBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlIG5pbAogICAgICAgICAgY29uc3VsdC0tbmFy cm93LXByZWZpeGVzIHNldHRpbmdzKSkKICAod2hlbiBjb25zdWx0LW5hcnJvdy1rZXkKICAgIChk b2xpc3QgKHBhaXIgY29uc3VsdC0tbmFycm93LXByZWZpeGVzKQogICAgICAod2hlbiAoLz0gKGNh ciBwYWlyKSAzMikKICAgICAgICAoY29uc3VsdC0tZGVmaW5lLWtleSBtYXAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAodmNvbmNhdCBjb25zdWx0LW5hcnJvdy1rZXkgKHZlY3RvciAoY2Fy IHBhaXIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ2NvbnN1bHQtbmFycm93IChj ZHIgcGFpcikpKSkpCiAgKHdoZW4tbGV0ICh3aWRlbiAoY29uc3VsdC0td2lkZW4ta2V5KSkKICAg IChjb25zdWx0LS1kZWZpbmUta2V5IG1hcCB3aWRlbiAjJ2NvbnN1bHQtbmFycm93ICJBbGwiKSkp Cgo7Ozs7IEFzeW5jIHN1cHBvcnQKCihkZWZ1biBjb25zdWx0LS13aXRoLWFzeW5jLTEgKGFzeW5j IGZ1bikKICAiU2V0dXAgQVNZTkMgZm9yIEZVTi4iCiAgKGlmIChub3QgKGZ1bmN0aW9ucCBhc3lu YykpIChmdW5jYWxsIGZ1biAobGFtYmRhIChfKSBhc3luYykpCiAgICAobWluaWJ1ZmZlci13aXRo LXNldHVwLWhvb2sKICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAoZnVuY2FsbCBhc3luYyAn c2V0dXApCiAgICAgICAgICA7OyBQdXNoIGlucHV0IHN0cmluZyB0byByZXF1ZXN0IHJlZnJlc2gu CiAgICAgICAgICA7OyBXZSB1c2UgYSBzeW1ib2wgaW4gb3JkZXIgdG8gYXZvaWQgYWRkaW5nIGxh bWJkYXMgdG8gdGhlIGhvb2sgdmFyaWFibGUuCiAgICAgICAgICAobGV0ICgoc3ltIChtYWtlLXN5 bWJvbCAiY29uc3VsdC0tYXN5bmMtYWZ0ZXItY2hhbmdlIikpKQogICAgICAgICAgICAoZnNldCBz eW0gKGxhbWJkYSAoJnJlc3QgXykgKGZ1bmNhbGwgYXN5bmMgKG1pbmlidWZmZXItY29udGVudHMt bm8tcHJvcGVydGllcykpKSkKICAgICAgICAgICAgKHJ1bi1hdC10aW1lIDAgbmlsIHN5bSkKICAg ICAgICAgICAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIHN5bSBuaWwgdCkpKQog ICAgICAodW53aW5kLXByb3RlY3QKICAgICAgICAgIChmdW5jYWxsIGZ1biBhc3luYykKICAgICAg ICAoZnVuY2FsbCBhc3luYyAnZGVzdHJveSkpKSkpCgooZGVmbWFjcm8gY29uc3VsdC0td2l0aC1h c3luYyAoYXN5bmMgJnJlc3QgYm9keSkKICAiU2V0dXAgQVNZTkMgZm9yIEJPRFkuIgogIChkZWNs YXJlIChpbmRlbnQgMSkpCiAgYChjb25zdWx0LS13aXRoLWFzeW5jLTEgLEAoY2RyIGFzeW5jKSAo bGFtYmRhICgsKGNhciBhc3luYykpICxAYm9keSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXNp bmsgKCkKICAiQ3JlYXRlIEFTWU5DIHNpbmsgZnVuY3Rpb24uCgpUaGUgYXN5bmMgZnVuY3Rpb24g c2hvdWxkIGFjY2VwdCBhIHNpbmdsZSBhY3Rpb24gYXJndW1lbnQuCk9ubHkgZm9yIHRoZSAnc2V0 dXAgYWN0aW9uLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIGNhbGwKb3JpZ2luYXRlcyBmcm9t IHRoZSBtaW5pYnVmZmVyLiBGb3IgdGhlIG90aGVyIGFjdGlvbnMgbm8KYXNzdW1wdGlvbnMgY2Fu IGJlIG1hZGUuCkRlcGVuZGluZyBvbiB0aGUgYXJndW1lbnQsIHRoZSBjYWxsZXIgY29udGV4dCBk aWZmZXIuCgonc2V0dXAgICBTZXR1cCB0aGUgaW50ZXJuYWwgc3RhdGUuCidkZXN0cm95IERlc3Ry b3kgdGhlIGludGVybmFsIHN0YXRlLgonZmx1c2ggICBGbHVzaCB0aGUgbGlzdCBvZiBjYW5kaWRh dGVzLgoncmVmcmVzaCBSZXF1ZXN0IFVJIHJlZnJlc2guCidnZXQgICAgIEdldCB0aGUgbGlzdCBv ZiBjYW5kaWRhdGVzLgpMaXN0ICAgICBBcHBlbmQgdGhlIGxpc3QgdG8gdGhlIGxpc3Qgb2YgY2Fu ZGlkYXRlcy4KU3RyaW5nICAgVGhlIGlucHV0IHN0cmluZywgY2FsbGVkIHdoZW4gdGhlIHVzZXIg ZW50ZXJzIHNvbWV0aGluZy4iCiAgKGxldCAoKGNhbmRpZGF0ZXMpKQogICAgKGxhbWJkYSAoYWN0 aW9uKQogICAgICAocGNhc2UtZXhoYXVzdGl2ZSBhY3Rpb24KICAgICAgICAoKG9yIChwcmVkIHN0 cmluZ3ApICdzZXR1cCAnZGVzdHJveSkgbmlsKQogICAgICAgICgnZmx1c2ggKHNldHEgY2FuZGlk YXRlcyBuaWwpKQogICAgICAgICgnZ2V0IGNhbmRpZGF0ZXMpCiAgICAgICAgKCdyZWZyZXNoCiAg ICAgICAgICh3aGVuLWxldCAod2luIChhY3RpdmUtbWluaWJ1ZmZlci13aW5kb3cpKQogICAgICAg ICAgICh3aXRoLXNlbGVjdGVkLXdpbmRvdyB3aW4KICAgICAgICAgICAgIChydW4taG9va3MgJ2Nv bnN1bHQtLWNvbXBsZXRpb24tcmVmcmVzaC1ob29rKSkpKQogICAgICAgICgocHJlZCBsaXN0cCkg KHNldHEgY2FuZGlkYXRlcyAobmNvbmMgY2FuZGlkYXRlcyBhY3Rpb24pKSkpKSkpCgooZGVmdW4g Y29uc3VsdC0tYXN5bmMtc3BsaXQtc3RyaW5nIChzdHIpCiAgIlNwbGl0IFNUUiBpbiBhc3luYyBp bnB1dCBhbmQgZmlsdGVyaW5nIHBhcnQuCklmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYSBwdW5j dHVhdGlvbiBjaGFyYWN0ZXIgaXQgZGV0ZXJtaW5lcwp0aGUgc2VwYXJhdG9yLiBFeGFtcGxlczog XCIvYXN5bmMvZmlsdGVyXCIsIFwiI2FzeW5jI2ZpbHRlclwiLiIKICAoaWYgKHN0cmluZy1tYXRj aC1wICJeW1s6cHVuY3Q6XV0iIHN0cikKICAgICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAgIChs ZXQgKChxIChyZWdleHAtcXVvdGUgKHN1YnN0cmluZyBzdHIgMCAxKSkpKQogICAgICAgICAgKHN0 cmluZy1tYXRjaCAoY29uY2F0ICJeIiBxICJcXChbXiIgcSAiXSpcXCkiIHEgIj8iKSBzdHIpCiAg ICAgICAgICAoY29ucyAobWF0Y2gtc3RyaW5nIDEgc3RyKSAobWF0Y2gtZW5kIDApKSkpCiAgICAo Y29ucyBzdHIgKGxlbmd0aCBzdHIpKSkpCgooZGVmbWFjcm8gY29uc3VsdC0tYXN5bmMtc3BsaXQt d3JhcCAoc3VmZml4KQogICJDcmVhdGUgY29tcGxldGlvbiBzdHlsZSBmdW5jdGlvbiB3aXRoIG5h bWUgU1VGRklYLiIKICAobGV0ICgobmFtZSAoaW50ZXJuIChmb3JtYXQgImNvbnN1bHQtLWFzeW5j LXNwbGl0LSVzIiBzdWZmaXgpKSkpCiAgICBgKHByb2duCiAgICAgICAoZGVmdW4gLG5hbWUgKHN0 ciB0YWJsZSBwcmVkIHBvaW50ICZvcHRpb25hbCBtZXRhZGF0YSkKICAgICAgICAgKGxldCAoKGNv bXBsZXRpb24tc3R5bGVzIChjZHIgY29tcGxldGlvbi1zdHlsZXMpKQogICAgICAgICAgICAgICAo cG9zIChjZHIgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXN0cmluZyBzdHIpKSkpCiAgICAgICAgICAg KCwoaW50ZXJuIChmb3JtYXQgImNvbXBsZXRpb24tJXMiIHN1ZmZpeCkpCiAgICAgICAgICAgIChz dWJzdHJpbmcgc3RyIHBvcykgdGFibGUgcHJlZCAoLSBwb2ludCBwb3MpIG1ldGFkYXRhKSkpCiAg ICAgICAnLG5hbWUpKSkKCihkZWZ1biBjb25zdWx0LS1hc3luYy1zcGxpdC1zZXR1cCAoKQogICJT ZXR1cCBgY29uc3VsdC0tYXN5bmMtc3BsaXQnIGNvbXBsZXRpb24gc3R5bGVzLiIKICAoc2V0cS1s b2NhbCBjb21wbGV0aW9uLXN0eWxlcy1hbGlzdAogICAgICAgICAgICAgIChjb25zIChsaXN0ICdj b25zdWx0LS1hc3luYy1zcGxpdAogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1h c3luYy1zcGxpdC13cmFwIHRyeS1jb21wbGV0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdWx0LS1hc3luYy1zcGxpdC13cmFwIGFsbC1jb21wbGV0aW9ucykgIiIpCiAgICAgICAg ICAgICAgICAgICAgY29tcGxldGlvbi1zdHlsZXMtYWxpc3QpKQogIChzZXRxLWxvY2FsIGNvbXBs ZXRpb24tc3R5bGVzCiAgICAgICAgICAgICAgKGNvbnMgJ2NvbnN1bHQtLWFzeW5jLXNwbGl0IGNv bXBsZXRpb24tc3R5bGVzKSkpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtc3BsaXQgKGFzeW5jKQog ICJDcmVhdGUgYXN5bmMgZnVuY3Rpb24sIHdoaWNoIHNwbGl0cyB0aGUgaW5wdXQgc3RyaW5nLgoK VGhlIGlucHV0IHN0cmluZyBpcyBzcGxpdCBhdCB0aGUgZmlyc3QgY29tbWEuIFRoZSBwYXJ0IGJl Zm9yZQp0aGUgY29tbWEgaXMgcGFzc2VkIHRvIEFTWU5DLCB0aGUgc2Vjb25kIHBhcnQgaXMgdXNl ZCBmb3IgZmlsdGVyaW5nLiIKICAobGFtYmRhIChhY3Rpb24pCiAgICAocGNhc2UgYWN0aW9uCiAg ICAgICgnc2V0dXAKICAgICAgIChjb25zdWx0LS1hc3luYy1zcGxpdC1zZXR1cCkKICAgICAgIChm dW5jYWxsIGFzeW5jICdzZXR1cCkpCiAgICAgICgocHJlZCBzdHJpbmdwKQogICAgICAgKGxldCog KChwYWlyIChjb25zdWx0LS1hc3luYy1zcGxpdC1zdHJpbmcgYWN0aW9uKSkKICAgICAgICAgICAg ICAoaW5wdXQtbGVuIChsZW5ndGggYWN0aW9uKSkKICAgICAgICAgICAgICAoYXN5bmMtc3RyIChj YXIgcGFpcikpCiAgICAgICAgICAgICAgKGFzeW5jLWxlbiAobGVuZ3RoIGFzeW5jLXN0cikpCiAg ICAgICAgICAgICAgKGVuZCAobWluaWJ1ZmZlci1wcm9tcHQtZW5kKSkpCiAgICAgICAgIDs7IEhp Z2hsaWdodCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzCiAgICAgICAgIChyZW1vdmUtbGlzdC1vZi10 ZXh0LXByb3BlcnRpZXMgZW5kICgrIGVuZCBpbnB1dC1sZW4pICcoZmFjZSkpCiAgICAgICAgICh3 aGVuICg+IGlucHV0LWxlbiBhc3luYy1sZW4pCiAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5 IGVuZCAoMSsgZW5kKSAnZmFjZSAnY29uc3VsdC1hc3luYy1zcGxpdCkKICAgICAgICAgICAod2hl biAoPiBpbnB1dC1sZW4gKDErIGFzeW5jLWxlbikpCiAgICAgICAgICAgICAocHV0LXRleHQtcHJv cGVydHkgKCsgMSBlbmQgYXN5bmMtbGVuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgrIDIgZW5kIGFzeW5jLWxlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFj ZSAnY29uc3VsdC1hc3luYy1zcGxpdCkpKQogICAgICAgICAoZnVuY2FsbCBhc3luYwogICAgICAg ICAgICAgICAgICA7OyBQYXNzIHRocm91Z2ggaWYgZm9yY2VkIGJ5IHR3byBwdW5jdHVhdGlvbiBj aGFyYWN0ZXJzCiAgICAgICAgICAgICAgICAgIDs7IG9yIGlmIHRoZSBpbnB1dCBpcyBsb25nIGVu b3VnaCEKICAgICAgICAgICAgICAgICAgKGlmIChvciAoPj0gaW5wdXQtbGVuICgrIDIgYXN5bmMt bGVuKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAoPj0gYXN5bmMtbGVuIGNvbnN1bHQtYXN5 bmMtbWluLWlucHV0KSkKICAgICAgICAgICAgICAgICAgICAgIGFzeW5jLXN0cgogICAgICAgICAg ICAgICAgICAgIDs7IFByZXRlbmQgdGhhdCB0aGVyZSBpcyBubyBpbnB1dAogICAgICAgICAgICAg ICAgICAgICIiKSkpKQogICAgICAoXyAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpKQoKKGRlZnVu IGNvbnN1bHQtLWFzeW5jLWxvZyAoZm9ybWF0dGVkICZyZXN0IGFyZ3MpCiAgIkxvZyBGT1JNQVRU RUQgQVJHUyB0byBgY29uc3VsdC0tYXN5bmMtbG9nJy4iCiAgKHdpdGgtY3VycmVudC1idWZmZXIg KGdldC1idWZmZXItY3JlYXRlIGNvbnN1bHQtLWFzeW5jLWxvZykKICAgIChnb3RvLWNoYXIgKHBv aW50LW1heCkpCiAgICAoaW5zZXJ0IChhcHBseSAjJ2Zvcm1hdCBmb3JtYXR0ZWQgYXJncykpKSkK CihkZWZ1biBjb25zdWx0LS1hc3luYy1wcm9jZXNzIChhc3luYyBjbWQpCiAgIkNyZWF0ZSBwcm9j ZXNzIHNvdXJjZSBhc3luYyBmdW5jdGlvbi4KCkFTWU5DIGlzIHRoZSBhc3luYyBmdW5jdGlvbiB3 aGljaCByZWNlaXZlcyB0aGUgY2FuZGlkYXRlcy4KQ01EIGlzIHRoZSBjb21tYW5kIGFyZ3VtZW50 IGxpc3QuIgogIChsZXQgKChwcm9jKSAobGFzdC1hcmdzKSAoaW5kaWNhdG9yKSkKICAgIChsYW1i ZGEgKGFjdGlvbikKICAgICAgKHBjYXNlIGFjdGlvbgogICAgICAgICgiIiA7OyBJZiBubyBpbnB1 dCBpcyBwcm92aWRlZCBraWxsIGN1cnJlbnQgcHJvY2VzcwogICAgICAgICAoaWdub3JlLWVycm9y cyAoZGVsZXRlLXByb2Nlc3MgcHJvYykpCiAgICAgICAgIChzZXRxIGxhc3QtYXJncyBuaWwpKQog ICAgICAgICgocHJlZCBzdHJpbmdwKQogICAgICAgICAobGV0ICgoYXJncyAoZnVuY2FsbCBjbWQg YWN0aW9uKSkKICAgICAgICAgICAgICAgKGZsdXNoIHQpCiAgICAgICAgICAgICAgIChyZXN0ICIi KSkKICAgICAgICAgICAodW5sZXNzIChlcXVhbCBhcmdzIGxhc3QtYXJncykKICAgICAgICAgICAg IChzZXRxIGxhc3QtYXJncyBhcmdzKQogICAgICAgICAgICAgKGlnbm9yZS1lcnJvcnMgKGRlbGV0 ZS1wcm9jZXNzIHByb2MpKQogICAgICAgICAgICAgKHdoZW4gYXJncwogICAgICAgICAgICAgICAo b3ZlcmxheS1wdXQgaW5kaWNhdG9yICdkaXNwbGF5IChwcm9wZXJ0aXplICIqIiAnZmFjZSAnY29u c3VsdC1hc3luYy1ydW5uaW5nKSkKICAgICAgICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWxvZyAi Y29uc3VsdC0tYXN5bmMtcHJvY2VzcyBzdGFydGVkICVTXG4iIGFyZ3MpCiAgICAgICAgICAgICAg IChzZXRxCiAgICAgICAgICAgICAgICBwcm9jCiAgICAgICAgICAgICAgICAobWFrZS1wcm9jZXNz CiAgICAgICAgICAgICAgICAgOmNvbm5lY3Rpb24tdHlwZSAncGlwZQogICAgICAgICAgICAgICAg IDpuYW1lIChjYXIgYXJncykKICAgICAgICAgICAgICAgICA6c3RkZXJyIGNvbnN1bHQtLWFzeW5j LWxvZwogICAgICAgICAgICAgICAgIDpub3F1ZXJ5IHQKICAgICAgICAgICAgICAgICA6Y29tbWFu ZCBhcmdzCiAgICAgICAgICAgICAgICAgOmZpbHRlcgogICAgICAgICAgICAgICAgIChsYW1iZGEg KF8gb3V0KQogICAgICAgICAgICAgICAgICAgKHdoZW4gZmx1c2gKICAgICAgICAgICAgICAgICAg ICAgKHNldHEgZmx1c2ggbmlsKQogICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhc3luYyAn Zmx1c2gpKQogICAgICAgICAgICAgICAgICAgKGxldCAoKGxpbmVzIChzcGxpdC1zdHJpbmcgb3V0 ICJcbiIpKSkKICAgICAgICAgICAgICAgICAgICAgKGlmIChub3QgKGNkciBsaW5lcykpCiAgICAg ICAgICAgICAgICAgICAgICAgICAoc2V0cSByZXN0IChjb25jYXQgcmVzdCAoY2FyIGxpbmVzKSkp CiAgICAgICAgICAgICAgICAgICAgICAgKHNldGNhciBsaW5lcyAoY29uY2F0IHJlc3QgKGNhciBs aW5lcykpKQogICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlc3QgKGNhciAobGFzdCBsaW5l cykpKQogICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGFzeW5jIChuYnV0bGFzdCBsaW5l cykpKSkpCiAgICAgICAgICAgICAgICAgOnNlbnRpbmVsCiAgICAgICAgICAgICAgICAgKGxhbWJk YSAoXyBldmVudCkKICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1hc3luYy1sb2cgImNvbnN1 bHQtLWFzeW5jLXByb2Nlc3Mgc2VudGluZWw6ICVzXG4iIGV2ZW50KQogICAgICAgICAgICAgICAg ICAgKHdoZW4gZmx1c2gKICAgICAgICAgICAgICAgICAgICAgKHNldHEgZmx1c2ggbmlsKQogICAg ICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhc3luYyAnZmx1c2gpKQogICAgICAgICAgICAgICAg ICAgKG92ZXJsYXktcHV0IGluZGljYXRvciAnZGlzcGxheQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5n LXByZWZpeC1wICJraWxsZWQiIGV2ZW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHByb3BlcnRpemUgIjsiICdmYWNlICdjb25zdWx0LWFzeW5jLWZhaWxlZCkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoc3RyaW5nLXByZWZpeC1wICJmaW5pc2hlZCIgZXZl bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAiOiIgJ2Zh Y2UgJ2NvbnN1bHQtYXN5bmMtZmluaXNoZWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodCAocHJvcGVydGl6ZSAiISIgJ2ZhY2UgJ2NvbnN1bHQtYXN5bmMtZmFpbGVkKSkpKQog ICAgICAgICAgICAgICAgICAgKHdoZW4gKGFuZCAoc3RyaW5nLXByZWZpeC1wICJmaW5pc2hlZCIg ZXZlbnQpIChub3QgKHN0cmluZz0gcmVzdCAiIikpKQogICAgICAgICAgICAgICAgICAgICAoZnVu Y2FsbCBhc3luYyAobGlzdCByZXN0KSkpKSkpKSkpKQogICAgICAgICgnZGVzdHJveQogICAgICAg ICAoaWdub3JlLWVycm9ycyAoZGVsZXRlLXByb2Nlc3MgcHJvYykpCiAgICAgICAgIChkZWxldGUt b3ZlcmxheSBpbmRpY2F0b3IpCiAgICAgICAgIChmdW5jYWxsIGFzeW5jICdkZXN0cm95KSkKICAg ICAgICAoJ3NldHVwCiAgICAgICAgIChzZXRxIGluZGljYXRvciAobWFrZS1vdmVybGF5ICgtICht aW5pYnVmZmVyLXByb21wdC1lbmQpIDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgtIChtaW5pYnVmZmVyLXByb21wdC1lbmQpIDEpKSkKICAgICAgICAgKGZ1bmNhbGwg YXN5bmMgJ3NldHVwKSkKICAgICAgICAoXyAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpKSkKCihk ZWZ1biBjb25zdWx0LS1hc3luYy10aHJvdHRsZSAoYXN5bmMgJm9wdGlvbmFsIHRocm90dGxlIGRl Ym91bmNlKQogICJDcmVhdGUgYXN5bmMgZnVuY3Rpb24gZnJvbSBBU1lOQyB3aGljaCB0aHJvdHRs ZXMgaW5wdXQuCgpUaGUgVEhST1RUTEUgZGVsYXkgZGVmYXVsdHMgdG8gYGNvbnN1bHQtYXN5bmMt aW5wdXQtdGhyb3R0bGUnLgpUaGUgREVCT1VOQ0UgZGVsYXkgZGVmYXVsdHMgdG8gYGNvbnN1bHQt YXN5bmMtaW5wdXQtZGVib3VuY2UnLiIKICAobGV0KiAoKHRocm90dGxlIChvciB0aHJvdHRsZSBj b25zdWx0LWFzeW5jLWlucHV0LXRocm90dGxlKSkKICAgICAgICAgKGRlYm91bmNlIChvciBkZWJv dW5jZSBjb25zdWx0LWFzeW5jLWlucHV0LWRlYm91bmNlKSkKICAgICAgICAgKGlucHV0ICIiKQog ICAgICAgICAodW5sb2NrZWQgdCkKICAgICAgICAgKHRocm90dGxlLXRpbWVyKQogICAgICAgICAo ZGVib3VuY2UtdGltZXIpKQogICAgKGxhbWJkYSAoYWN0aW9uKQogICAgICAocGNhc2UgYWN0aW9u CiAgICAgICAgKCdzZXR1cAogICAgICAgICAoZnVuY2FsbCBhc3luYyAnc2V0dXApCiAgICAgICAg IChzZXRxIHRocm90dGxlLXRpbWVyIChydW4tYXQtdGltZSB0aHJvdHRsZSB0aHJvdHRsZSAobGFt YmRhICgpIChzZXRxIHVubG9ja2VkIHQpKSkpKQogICAgICAgICgocHJlZCBzdHJpbmdwKQogICAg ICAgICAod2hlbiBkZWJvdW5jZS10aW1lcgogICAgICAgICAgIChjYW5jZWwtdGltZXIgZGVib3Vu Y2UtdGltZXIpKQogICAgICAgICAodW5sZXNzIChzdHJpbmc9IGFjdGlvbiBpbnB1dCkKICAgICAg ICAgICAoZnVuY2FsbCBhc3luYyAoc2V0cSBpbnB1dCAiIikpIDs7IGNhbmNlbCBydW5uaW5nIHBy b2Nlc3MKICAgICAgICAgICAodW5sZXNzIChzdHJpbmc9IGFjdGlvbiAiIikKICAgICAgICAgICAg IChzZXRxIGRlYm91bmNlLXRpbWVyIChydW4tYXQtdGltZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgrIGRlYm91bmNlIChpZiB1bmxvY2tlZCAwIHRocm90dGxlKSkgbmlsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoZnVuY2FsbCBhc3lu YyAoc2V0cSB1bmxvY2tlZCBuaWwgaW5wdXQgYWN0aW9uKSkpKSkpKSkKICAgICAgICAoJ2Rlc3Ry b3kKICAgICAgICAgKGNhbmNlbC10aW1lciB0aHJvdHRsZS10aW1lcikKICAgICAgICAgKHdoZW4g ZGVib3VuY2UtdGltZXIKICAgICAgICAgICAoY2FuY2VsLXRpbWVyIGRlYm91bmNlLXRpbWVyKSkK ICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgJ2Rlc3Ryb3kpKQogICAgICAgIChfIChmdW5jYWxsIGFz eW5jIGFjdGlvbikpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXJlZnJlc2gtaW1tZWRpYXRl IChhc3luYykKICAiQ3JlYXRlIGFzeW5jIGZ1bmN0aW9uIGZyb20gQVNZTkMsIHdoaWNoIHJlZnJl c2hlcyB0aGUgZGlzcGxheS4KClRoZSByZWZyZXNoIGhhcHBlbnMgaW1tZWRpYXRlbHkgd2hlbiBj YW5kaWRhdGVzIGFyZSBwdXNoZWQuIgogIChsYW1iZGEgKGFjdGlvbikKICAgIChwY2FzZSBhY3Rp b24KICAgICAgKChvciAocHJlZCBsaXN0cCkgKHByZWQgc3RyaW5ncCkgJ2ZsdXNoKQogICAgICAg KHByb2cxIChmdW5jYWxsIGFzeW5jIGFjdGlvbikKICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgJ3Jl ZnJlc2gpKSkKICAgICAgKF8gKGZ1bmNhbGwgYXN5bmMgYWN0aW9uKSkpKSkKCihkZWZ1biBjb25z dWx0LS1hc3luYy1yZWZyZXNoLXRpbWVyIChhc3luYyAmb3B0aW9uYWwgZGVsYXkpCiAgIkNyZWF0 ZSBhc3luYyBmdW5jdGlvbiBmcm9tIEFTWU5DLCB3aGljaCByZWZyZXNoZXMgdGhlIGRpc3BsYXku CgpUaGUgcmVmcmVzaCBoYXBwZW5zIGFmdGVyIGEgREVMQVksIGRlZmF1bHRpbmcgdG8gYGNvbnN1 bHQtYXN5bmMtcmVmcmVzaC1kZWxheScuIgogIChsZXQgKCh0aW1lcikgKHJlZnJlc2ggdCkgKGRl bGF5IChvciBkZWxheSBjb25zdWx0LWFzeW5jLXJlZnJlc2gtZGVsYXkpKSkKICAgIChsYW1iZGEg KGFjdGlvbikKICAgICAgKHBjYXNlIGFjdGlvbgogICAgICAgICgob3IgKHByZWQgbGlzdHApIChw cmVkIHN0cmluZ3ApICdyZWZyZXNoICdmbHVzaCkKICAgICAgICAgKHNldHEgcmVmcmVzaCB0KSkK ICAgICAgICAoJ2Rlc3Ryb3kgKGNhbmNlbC10aW1lciB0aW1lcikpCiAgICAgICAgKCdzZXR1cAog ICAgICAgICAoc2V0cSB0aW1lciAocnVuLWF0LXRpbWUKICAgICAgICAgICAgICAgICAgICAgIGRl bGF5IGRlbGF5CiAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAgICAg ICAgICAgICAgICh3aGVuIHJlZnJlc2gKICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBy ZWZyZXNoIG5pbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBhc3luYyAncmVm cmVzaCkpKSkpKSkKICAgICAgKGZ1bmNhbGwgYXN5bmMgYWN0aW9uKSkpKQoKKGRlZm1hY3JvIGNv bnN1bHQtLWFzeW5jLXRyYW5zZm9ybSAoYXN5bmMgJnJlc3QgdHJhbnNmb3JtKQogICJVc2UgRlVO IHRvIFRSQU5TRk9STSBjYW5kaWRhdGVzIG9mIEFTWU5DLiIKICAobGV0ICgoYXN5bmMtdmFyICht YWtlLXN5bWJvbCAiYXN5bmMiKSkKICAgICAgICAoYWN0aW9uLXZhciAobWFrZS1zeW1ib2wgImFj dGlvbiIpKSkKICAgIGAobGV0ICgoLGFzeW5jLXZhciAsYXN5bmMpKQogICAgICAgKGxhbWJkYSAo LGFjdGlvbi12YXIpCiAgICAgICAgIChmdW5jYWxsICxhc3luYy12YXIgKGlmIChsaXN0cCAsYWN0 aW9uLXZhcikgKCxAdHJhbnNmb3JtICxhY3Rpb24tdmFyKSAsYWN0aW9uLXZhcikpKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLWFzeW5jLW1hcCAoYXN5bmMgZnVuKQogICJNYXAgY2FuZGlkYXRlcyBvZiBB U1lOQyBieSBGVU4uIgogIChjb25zdWx0LS1hc3luYy10cmFuc2Zvcm0gYXN5bmMgbWFwY2FyIGZ1 bikpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtZmlsdGVyIChhc3luYyBmdW4pCiAgIkZpbHRlciBj YW5kaWRhdGVzIG9mIEFTWU5DIGJ5IEZVTi4iCiAgKGNvbnN1bHQtLWFzeW5jLXRyYW5zZm9ybSBh c3luYyBzZXEtZmlsdGVyIGZ1bikpCgooZGVmdW4gY29uc3VsdC0tY29tbWFuZC1hcmdzIChjbWQp CiAgIlNwbGl0IGNvbW1hbmQgYXJndW1lbnRzIGFuZCBhcHBlbmQgdG8gQ01ELiIKICAoc2V0cSBj bWQgKHNwbGl0LXN0cmluZy1hbmQtdW5xdW90ZSBjbWQpKQogIChsYW1iZGEgKGlucHV0KQogICAg KHNhdmUtbWF0Y2gtZGF0YQogICAgICAobGV0ICgob3B0cykpCiAgICAgICAgKHdoZW4gKHN0cmlu Zy1tYXRjaCAiICstLVxcKCArXFx8JFxcKSIgaW5wdXQpCiAgICAgICAgICA7OyBzcGxpdC1zdHJp bmctYW5kLXVucXVvdGUgbW9kaWZpZXMgdGhlIG1hdGNoIGRhdGEKICAgICAgICAgIDs7IGFuZCBm YWlscyBpZiB0aGUgcXVvdGVzIGFyZSBpbnZhbGlkLiBJZ25vcmUgaXQuCiAgICAgICAgICAoc2V0 cSBvcHRzIChzdWJzdHJpbmcgaW5wdXQgKG1hdGNoLWVuZCAwKSkKICAgICAgICAgICAgICAgIGlu cHV0IChzdWJzdHJpbmcgaW5wdXQgMCAobWF0Y2gtYmVnaW5uaW5nIDApKQogICAgICAgICAgICAg ICAgb3B0cyAoaWdub3JlLWVycm9ycyAoc3BsaXQtc3RyaW5nLWFuZC11bnF1b3RlIG9wdHMpKSkp CiAgICAgICAgKG1hcGNhbiAobGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAoaWYgKHN0cmlu Zz0geCAiT1BUUyIpCiAgICAgICAgICAgICAgICAgICAgICBvcHRzCiAgICAgICAgICAgICAgICAg ICAgKGxpc3QgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiQVJHIiBpbnB1dCB4ICdmaXhlZGNh c2UgJ2xpdGVyYWwpKSkpCiAgICAgICAgICAgICAgICBjbWQpKSkpKQoKKGRlZm1hY3JvIGNvbnN1 bHQtLWFzeW5jLWNvbW1hbmQgKGNtZCAmcmVzdCB0cmFuc2Zvcm1zKQogICJBc3luY2hyb25vdXMg Q01EIHBpcGVsaW5lIHdpdGggVFJBTlNGT1JNUy4iCiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICBg KHRocmVhZC1maXJzdCAoY29uc3VsdC0tYXN5bmMtc2luaykKICAgICAoY29uc3VsdC0tYXN5bmMt cmVmcmVzaC10aW1lcikKICAgICAsQHRyYW5zZm9ybXMKICAgICAoY29uc3VsdC0tYXN5bmMtcHJv Y2VzcyAoY29uc3VsdC0tY29tbWFuZC1hcmdzICxjbWQpKQogICAgIChjb25zdWx0LS1hc3luYy10 aHJvdHRsZSkKICAgICAoY29uc3VsdC0tYXN5bmMtc3BsaXQpKSkKCjs7OzsgU3BlY2lhbCBrZXlt YXBzCgooZGVmdmFyIGNvbnN1bHQtYXN5bmMtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApCiAgIktl eW1hcCBhZGRlZCBmb3IgY29tbWFuZHMgd2l0aCBhc3luY2hyb25vdXMgY2FuZGlkYXRlcy4iKQoK KGRlZnZhciBjb25zdWx0LXByZXZpZXctbWFwIChtYWtlLXNwYXJzZS1rZXltYXApCiAgIktleW1h cCBhZGRlZCBmb3IgY29tbWFuZHMgd2l0aCBwcmV2aWV3LiIpCgooZGVmdmFyIGNvbnN1bHQtbmFy cm93LW1hcAogIChsZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQogICAgKGRlZmluZS1r ZXkgbWFwICIgIiBjb25zdWx0LS1uYXJyb3ctc3BhY2UpCiAgICAoZGVmaW5lLWtleSBtYXAgWzEy N10gY29uc3VsdC0tbmFycm93LWRlbGV0ZSkKICAgIG1hcCkKICAiTmFycm93aW5nIGtleW1hcCB3 aGljaCBpcyBhZGRlZCB0byB0aGUgbG9jYWwgbWluaWJ1ZmZlciBtYXAuCk5vdGUgdGhhdCBgY29u c3VsdC1uYXJyb3cta2V5JyBhbmQgYGNvbnN1bHQtd2lkZW4ta2V5JyBhcmUgYm91bmQgZHluYW1p Y2FsbHkuIikKCjs7OzsgSW50ZXJuYWwgQVBJOiBjb25zdWx0LS1yZWFkCgooZGVmdW4gY29uc3Vs dC0tYWRkLWhpc3RvcnkgKGl0ZW1zKQogICJBZGQgSVRFTVMgdG8gdGhlIG1pbmlidWZmZXIgaGlz dG9yeSB2aWEgYG1pbmlidWZmZXItZGVmYXVsdC1hZGQtZnVuY3Rpb24nLiIKICAoc2V0cS1sb2Nh bCBtaW5pYnVmZmVyLWRlZmF1bHQtYWRkLWZ1bmN0aW9uCiAgICAgICAgICAgICAgKGxhbWJkYSAo KQogICAgICAgICAgICAgICAgKGNvbnN1bHQtLXJlbW92ZS1kdXBzCiAgICAgICAgICAgICAgICAg KGFwcGVuZAogICAgICAgICAgICAgICAgICA7OyB0aGUgZGVmYXVsdHMgYXJlIGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIGZ1dHVyZSBoaXN0b3J5CiAgICAgICAgICAgICAgICAgIChpZiAobGlzdHAg bWluaWJ1ZmZlci1kZWZhdWx0KQogICAgICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1kZWZh dWx0CiAgICAgICAgICAgICAgICAgICAgKGxpc3QgbWluaWJ1ZmZlci1kZWZhdWx0KSkKICAgICAg ICAgICAgICAgICAgOzsgdGhlbiBvdXIgY3VzdG9tIGl0ZW1zCiAgICAgICAgICAgICAgICAgIChk ZWxldGUgIiIgKGRlbHEgbmlsIChpZiAobGlzdHAgaXRlbXMpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpdGVtcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsaXN0IGl0ZW1zKSkpKQogICAgICAgICAgICAgICAgICA7OyB0aGVuIGFs bCB0aGUgY29tcGxldGlvbnMKICAgICAgICAgICAgICAgICAgKGFsbC1jb21wbGV0aW9ucyAiIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZmZXItY29tcGxldGlvbi10 YWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZmZXItY29tcGxl dGlvbi1wcmVkaWNhdGUpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1zZXR1cC1rZXltYXAgKGtleW1h cCBhc3luYyBuYXJyb3cgcHJldmlldy1rZXkpCiAgIlNldHVwIG1pbmlidWZmZXIga2V5bWFwLgoK S0VZTUFQIGlzIGEgY29tbWFuZC1zcGVjaWZpYyBLRVlNQVAuCkFTWU5DIG11c3QgYmUgdCBmb3Ig YXN5bmMuCk5BUlJPVyBhcmUgdGhlIG5hcnJvdyBzZXR0aW5ncy4KUFJFVklFVy1LRVkgaXMgdGhl IHByZXZpZXcga2V5LiIKICAobGV0ICgob2xkLW1hcCAoY3VycmVudC1sb2NhbC1tYXApKQogICAg ICAgIChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpKQoKICAgIDs7IEFzeW5jIGtleXMgb3Zlcndy aXRpbmcgc29tZSB1bnVzYWJsZSBkZWZhdWx0cyBmb3IgdGhlIGRlZmF1bHQgY29tcGxldGlvbgog ICAgKHdoZW4gYXN5bmMKICAgICAgKHdoZW4gKGVxIChsb29rdXAta2V5IG9sZC1tYXAgIiAiKSAj J21pbmlidWZmZXItY29tcGxldGUtd29yZCkKICAgICAgICAoZGVmaW5lLWtleSBtYXAgIiAiICMn c2VsZi1pbnNlcnQtY29tbWFuZCkpCiAgICAgICh3aGVuIChlcSAobG9va3VwLWtleSBvbGQtbWFw ICJcdCIpICMnbWluaWJ1ZmZlci1jb21wbGV0ZSkKICAgICAgICAoZGVmaW5lLWtleSBtYXAgIlx0 IiAjJ21pbmlidWZmZXItY29tcGxldGlvbi1oZWxwKSkpCgogICAgOzsgQWRkIG5hcnJvdyBrZXlz CiAgICAod2hlbiBuYXJyb3cKICAgICAgKGNvbnN1bHQtLW5hcnJvdy1zZXR1cCBuYXJyb3cgbWFw KSkKCiAgICA7OyBQcmV2aWV3IHRyaWdnZXIga2V5cwogICAgKHdoZW4gKGFuZCBwcmV2aWV3LWtl eSAobm90IChlcSBwcmV2aWV3LWtleSAnYW55KSkpCiAgICAgIChsZXQgKChwcmV2aWV3LWtleSAo aWYgKGxpc3RwIHByZXZpZXcta2V5KSBwcmV2aWV3LWtleSAobGlzdCBwcmV2aWV3LWtleSkpKSkK ICAgICAgICAoZG9saXN0IChrZXkgcHJldmlldy1rZXkpCiAgICAgICAgICAodW5sZXNzIChsb29r dXAta2V5IG9sZC1tYXAga2V5KQogICAgICAgICAgICAoZGVmaW5lLWtleSBtYXAga2V5ICMnaWdu b3JlKSkpKSkKCiAgICA7OyBQdXQgdGhlIGtleW1hcCB0b2dldGhlcgogICAgKHVzZS1sb2NhbC1t YXAKICAgICAobWFrZS1jb21wb3NlZC1rZXltYXAKICAgICAgKGRlbHEgbmlsIChsaXN0IGtleW1h cAogICAgICAgICAgICAgICAgICAgICAgKGFuZCBhc3luYyBjb25zdWx0LWFzeW5jLW1hcCkKICAg ICAgICAgICAgICAgICAgICAgIChhbmQgbmFycm93IGNvbnN1bHQtbmFycm93LW1hcCkKICAgICAg ICAgICAgICAgICAgICAgIChhbmQgcHJldmlldy1rZXkgY29uc3VsdC1wcmV2aWV3LW1hcCkKICAg ICAgICAgICAgICAgICAgICAgIG1hcCkpCiAgICAgIG9sZC1tYXApKSkpCgooZGVmdW4gY29uc3Vs dC0tZnJ5LXRoZS10b2Z1cyAoJnJlc3QgXykKICAiRnJ5IHRoZSB0b2Z1cyBpbiB0aGUgbWluaWJ1 ZmZlci4iCiAgKGxldCogKChtaW4gKG1pbmlidWZmZXItcHJvbXB0LWVuZCkpCiAgICAgICAgICht YXggKHBvaW50LW1heCkpCiAgICAgICAgIChwb3MgbWluKQogICAgICAgICAoY21pbiBjb25zdWx0 LS10b2Z1LWNoYXIpCiAgICAgICAgIChjbWF4ICgtICgrIGNvbnN1bHQtLXRvZnUtY2hhciBjb25z dWx0LS10b2Z1LXJhbmdlKSAxKSkpCiAgICAod2hpbGUgKGFuZCAoPCBwb3MgbWF4KSAoPD0gY21p biAoY2hhci1hZnRlciBwb3MpIGNtYXgpKQogICAgICAoc2V0cSBwb3MgKDErIHBvcykpKQogICAg KHdoZW4gKD4gcG9zIG1pbikKICAgICAgKHJlbW92ZS1saXN0LW9mLXRleHQtcHJvcGVydGllcyBt aW4gcG9zICcoZGlzcGxheSkpCiAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBtaW4gcG9zICdpbnZp c2libGUgdCkpKSkKCihjbC1kZWZ1biBjb25zdWx0LS1yZWFkLXNldHVwIChfcHJvbXB0IGNhbmRp ZGF0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSBrZXltYXAg YWRkLWhpc3RvcnkgbmFycm93IHByZXZpZXcta2V5ICZhbGxvdy1vdGhlci1rZXlzKQogICJNaW5p YnVmZmVyIHNldHVwIGZvciBgY29uc3VsdC0tcmVhZCcuCgpTZWUgYGNvbnN1bHQtLXJlYWQnIGZv ciB0aGUgQ0FORElEQVRFUywgS0VZTUFQLCBBREQtSElTVE9SWSwgTkFSUk9XIGFuZCBQUkVWSUVX LUtFWSBhcmd1bWVudHMuIgogIChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAjJ2Nv bnN1bHQtLWZyeS10aGUtdG9mdXMgbmlsIHQpCiAgKGNvbnN1bHQtLXNldHVwLWtleW1hcCBrZXlt YXAgKGZ1bmN0aW9ucCBjYW5kaWRhdGVzKSBuYXJyb3cgcHJldmlldy1rZXkpCiAgKGNvbnN1bHQt LWFkZC1oaXN0b3J5IGFkZC1oaXN0b3J5KSkKCihkZWZtYWNybyBjb25zdWx0LS1yZWFkLWRlZmF1 bHRzICgmcmVzdCBkZWZhdWx0KQogICJTZXQgREVGQVVMVCBvcHRpb25zLiIKICAobWFjcm9leHAt cHJvZ24KICAgKG1hcGNhcgogICAgKHBjYXNlLWxhbWJkYSAoYCgsa2V5ICx2YWwpKQogICAgICBg KHVubGVzcyAocGxpc3QtbWVtYmVyIG9wdGlvbnMgLChpbnRlcm4gKGZvcm1hdCAiOiVzIiBrZXkp KSkKICAgICAgICAgKHNldHEgb3B0aW9ucyAocGxpc3QtcHV0IG9wdGlvbnMgLChpbnRlcm4gKGZv cm1hdCAiOiVzIiBrZXkpKSAoc2V0cSAsa2V5ICx2YWwpKSkpKQogICAgZGVmYXVsdCkpKQoKKGNs LWRlZnVuIGNvbnN1bHQtLXJlYWQgKHByb21wdCBjYW5kaWRhdGVzICZyZXN0IG9wdGlvbnMgJmtl eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZSByZXF1aXJlLW1hdGNo IGhpc3RvcnkgZGVmYXVsdCBrZXltYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXRlZ29yeSBpbml0aWFsIG5hcnJvdyBhZGQtaGlzdG9yeSBhbm5vdGF0ZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByZXZpZXcgcHJldmlldy1rZXkgc29ydCBkZWZhdWx0LXRvcCBs b29rdXApCiAgIkVuaGFuY2VkIGNvbXBsZXRpbmcgcmVhZCBmdW5jdGlvbi4KCkFyZ3VtZW50czoK ClBST01QVCBpcyB0aGUgc3RyaW5nIHRvIHByb21wdCB3aXRoLgpDQU5ESURBVEVTIGlzIHRoZSBj YW5kaWRhdGUgbGlzdCBvciBhbGlzdC4KCktleXdvcmQgT1BUSU9OUzoKClBSRURJQ0FURSBpcyBh IGZpbHRlciBmdW5jdGlvbiBmb3IgdGhlIGNhbmRpZGF0ZXMuClJFUVVJUkUtTUFUQ0ggZXF1YWxz IHQgbWVhbnMgdGhhdCBhbiBleGFjdCBtYXRjaCBpcyByZXF1aXJlZC4KSElTVE9SWSBpcyB0aGUg c3ltYm9sIG9mIHRoZSBoaXN0b3J5IHZhcmlhYmxlLgpERUZBVUxUIGlzIHRoZSBkZWZhdWx0IHNl bGVjdGVkIHZhbHVlLgpBREQtSElTVE9SWSBpcyBhIGxpc3Qgb2YgaXRlbXMgdG8gYWRkIHRvIHRo ZSBoaXN0b3J5LgpDQVRFR09SWSBpcyB0aGUgY29tcGxldGlvbiBjYXRlZ29yeS4KU09SVCBzaG91 bGQgYmUgc2V0IHRvIG5pbCBpZiB0aGUgY2FuZGlkYXRlcyBhcmUgYWxyZWFkeSBzb3J0ZWQuCkxP T0tVUCBpcyBhIGZ1bmN0aW9uIHdoaWNoIGlzIGFwcGxpZWQgdG8gdGhlIHJlc3VsdC4KQU5OT1RB VEUgaXMgdGhlIGFubm90YXRpb24gZnVuY3Rpb24uCklOSVRJQUwgaXMgaW5pdGlhbCBpbnB1dC4K REVGQVVMVC1UT1AgbXVzdCBiZSBuaWwgaWYgdGhlIGRlZmF1bHQgY2FuZGlkYXRlIHNob3VsZCBu b3QgYmUgbW92ZWQgdG8gdGhlIHRvcC4KUFJFVklFVyBpcyBhIHByZXZpZXcgZnVuY3Rpb24sIHNl ZSBgY29uc3VsdC0td2l0aC1wcmV2aWV3Jy4KUFJFVklFVy1LRVkgYXJlIHRoZSBwcmV2aWV3IGtl eXMgKG5pbCwgJ2FueSwgYSBzaW5nbGUga2V5IG9yIGEgbGlzdCBvZiBrZXlzKS4KTkFSUk9XIGlz IGFuIGFsaXN0IG9mIG5hcnJvd2luZyBwcmVmaXggc3RyaW5ncyBhbmQgZGVzY3JpcHRpb24uCktF WU1BUCBpcyBhIGNvbW1hbmQtc3BlY2lmaWMga2V5bWFwLiIKICA7OyBzdXBwb3J0ZWQgdHlwZXMK ICAoY2wtYXNzZXJ0IChvciAoZnVuY3Rpb25wIGNhbmRpZGF0ZXMpICAgICA7OyBhc3luYyB0YWJs ZQogICAgICAgICAgICAgICAgIChub3QgY2FuZGlkYXRlcykgICAgICAgICAgIDs7IG5pbCwgZW1w dHkgbGlzdAogICAgICAgICAgICAgICAgIChvYmFycmF5cCBjYW5kaWRhdGVzKSAgICAgIDs7IG9i YXJyYXkKICAgICAgICAgICAgICAgICAoc3RyaW5ncCAoY2FyIGNhbmRpZGF0ZXMpKSA7OyBzdHJp bmcgbGlzdAogICAgICAgICAgICAgICAgIChzeW1ib2xwIChjYXIgY2FuZGlkYXRlcykpIDs7IHN5 bWJvbCBsaXN0CiAgICAgICAgICAgICAgICAgKGNvbnNwIChjYXIgY2FuZGlkYXRlcykpKSkgOzsg YWxpc3QKICAoaWdub3JlIGRlZmF1bHQtdG9wIG5hcnJvdyBhZGQtaGlzdG9yeSBrZXltYXApCiAg KGNvbnN1bHQtLXJlYWQtZGVmYXVsdHMKICAgKHByZXZpZXcta2V5IGNvbnN1bHQtcHJldmlldy1r ZXkpCiAgIChzb3J0IHQpCiAgIChkZWZhdWx0LXRvcCB0KQogICAobG9va3VwIChsYW1iZGEgKF9p bnB1dCBfY2FuZHMgeCkgeCkpKQogIChtaW5pYnVmZmVyLXdpdGgtc2V0dXAtaG9vawogICAgICAo OmFwcGVuZCAobGFtYmRhICgpIChhcHBseSAjJ2NvbnN1bHQtLXJlYWQtc2V0dXAgcHJvbXB0IGNh bmRpZGF0ZXMgb3B0aW9ucykpKQogICAgKGNvbnN1bHQtLXdpdGgtYXN5bmMgKGFzeW5jIGNhbmRp ZGF0ZXMpCiAgICAgIDs7IE5PVEU6IERvIG5vdCB1bm5lY2Vzc2FyaWx5IGxldC1iaW5kIHRoZSBs YW1iZGFzIHRvIGF2b2lkCiAgICAgIDs7IG92ZXJjYXB0dXJpbmcgaW4gdGhlIGludGVycHJldGVy LiBUaGlzIHdpbGwgbWFrZSBjbG9zdXJlcyBhbmQgdGhlCiAgICAgIDs7IGxhbWJkYSBzdHJpbmcg cmVwcmVzZW50YXRpb24gbGFyZ2VyLCB3aGljaCBtYWtlcyBkZWJ1Z2dpbmcgbXVjaCB3b3JzZS4K ICAgICAgOzsgRm9ydHVuYXRlbHkgdGhlIG92ZXJjYXB0dXJpbmcgcHJvYmxlbSBkb2VzIG5vdCBh ZmZlY3QgdGhlIGJ5dGVjb2RlCiAgICAgIDs7IGludGVycHJldGVyIHdoaWNoIGRvZXMgYSBwcm9w ZXIgc2NvcGUgYW5hbHlpcy4KICAgICAgKGxldCAoKHJlc3VsdAogICAgICAgICAgICAgKGNvbnN1 bHQtLXdpdGgtcHJldmlldyBwcmV2aWV3LWtleSBwcmV2aWV3CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsYW1iZGEgKGlucHV0IGNhbmQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgbG9va3VwIGlucHV0IChmdW5jYWxsIGFzeW5jICdn ZXQpIGNhbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwbHktcGFy dGlhbGx5ICMncnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uc3VsdC0tY29tcGxldGlv bi1jYW5kaWRhdGUtaG9vaykKICAgICAgICAgICAgICAgKGNvbXBsZXRpbmctcmVhZCBwcm9tcHQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChzdHIgcHJlZCBhY3Rpb24p CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIGFjdGlvbiAnbWV0YWRh dGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYChtZXRhZGF0YQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLEAod2hlbiBhbm5vdGF0ZSBgKChh bm5vdGF0aW9uLWZ1bmN0aW9uIC4gLGFubm90YXRlKSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAsQCh3aGVuIGNhdGVnb3J5IGAoKGNhdGVnb3J5IC4gLGNhdGVnb3J5 KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQCh1bmxlc3Mgc29y dCAnKChjeWNsZS1zb3J0LWZ1bmN0aW9uIC4gaWRlbnRpdHkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5LXNvcnQtZnVuY3Rp b24gLiBpZGVudGl0eSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bXBsZXRlLXdpdGgtYWN0aW9uIGFjdGlvbiAoZnVuY2FsbCBhc3luYyAnZ2V0KSBzdHIgcHJlZCkp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZSByZXF1aXJlLW1hdGNo IGluaXRpYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN5bWJvbHAgaGlz dG9yeSkgaGlzdG9yeSAoY2FkciBoaXN0b3J5KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZWZhdWx0KSkpKQogICAgICAgIChwY2FzZS1leGhhdXN0aXZlIGhpc3RvcnkKICAgICAg ICAgIChgKDppbnB1dCAsdmFyKQogICAgICAgICAgIChzZXQgdmFyIChjZHIgKHN5bWJvbC12YWx1 ZSB2YXIpKSkKICAgICAgICAgICAoYWRkLXRvLWhpc3RvcnkgdmFyIChjZHIgcmVzdWx0KSkpCiAg ICAgICAgICAoKHByZWQgc3ltYm9scCkpKQogICAgICAgIChjYXIgcmVzdWx0KSkpKSkKCihhZHZp Y2UtYWRkICMnY29uc3VsdC0tcmVhZCA6ZmlsdGVyLWFyZ3MgIydjb25zdWx0LS1tZXJnZS1jb25m aWcpCgo7Ozs7IEludGVybmFsIEFQSTogY29uc3VsdC0tbXVsdGkKCihkZWZzdWJzdCBjb25zdWx0 LS1tdWx0aS1zb3VyY2UgKHNvdXJjZXMgY2FuZCkKICAiTG9va3VwIHNvdXJjZSBmb3IgQ0FORCBm cm9tIFNPVVJDRVMgbGlzdC4iCiAgKG50aCAoLSAoYXJlZiBjYW5kIDApIGNvbnN1bHQtLXRvZnUt Y2hhcikgc291cmNlcykpCgooZGVmdW4gY29uc3VsdC0tbXVsdGktcHJlZGljYXRlIChzb3VyY2Vz KQogICJSZXR1cm4gcHJlZGljYXRlIGZ1bmN0aW9uIHVzZWQgYnkgYGNvbnN1bHQtLW11bHRpJyB3 aXRoIFNPVVJDRVMuIgogIChsYW1iZGEgKGNhbmQpCiAgICAobGV0KiAoKG5hcnJvdyAocGxpc3Qt Z2V0IChjb25zdWx0LS1tdWx0aS1zb3VyY2Ugc291cmNlcyBjYW5kKSA6bmFycm93KSkKICAgICAg ICAgICAodHlwZSAob3IgKGNhci1zYWZlIG5hcnJvdykgbmFycm93IC0xKSkpCiAgICAgIChpZiAo ZXEgY29uc3VsdC0tbmFycm93IDMyKSA7OyBuYXJyb3dlZCB0byBoaWRkZW4gY2FuZGlkYXRlcwog ICAgICAgICAgKD0gdHlwZSAzMikKICAgICAgICAoYW5kCiAgICAgICAgICgvPSB0eXBlIDMyKSA7 OyBub24taGlkZGVuIGNhbmRpZGF0ZXMKICAgICAgICAgKG9yIChub3QgY29uc3VsdC0tbmFycm93 KSAoPSB0eXBlIGNvbnN1bHQtLW5hcnJvdykpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1tdWx0aS1u YXJyb3cgKHNvdXJjZXMpCiAgIlJldHVybiBuYXJyb3cgbGlzdCB1c2VkIGJ5IGBjb25zdWx0LS1t dWx0aScgd2l0aCBTT1VSQ0VTLiIKICAoZGVscSBuaWwgKG1hcGNhciAobGFtYmRhIChzcmMpCiAg ICAgICAgICAgICAgICAgICAgICAobGV0ICgobmFycm93IChwbGlzdC1nZXQgc3JjIDpuYXJyb3cp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgKHBsaXN0LWdldCBzcmMgOm5hbWUp KSkKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgICAg ICgoY29uc3AgbmFycm93KSBuYXJyb3cpCiAgICAgICAgICAgICAgICAgICAgICAgICAoKGFuZCBu YXJyb3cgbmFtZSkgKGNvbnMgbmFycm93IG5hbWUpKSkpKQogICAgICAgICAgICAgICAgICAgIHNv dXJjZXMpKSkKCihkZWZ1biBjb25zdWx0LS1tdWx0aS1hbm5vdGF0ZSAoc291cmNlcyBtYXgtbGVu KQogICJSZXR1cm4gYW5ub3RhdGlvbiBmdW5jdGlvbiB1c2VkIGJ5IGBjb25zdWx0LS1tdWx0aScg d2l0aCBTT1VSQ0VTLgoKTUFYLUxFTiBpcyB0aGUgbWF4aW11bSBjYW5kaWRhdGUgbGVuZ3RoLiIK ICAobGFtYmRhIChjYW5kKQogICAgKGxldCogKChzcmMgKGNvbnN1bHQtLW11bHRpLXNvdXJjZSBz b3VyY2VzIGNhbmQpKQogICAgICAgICAgIChhbm5vdGF0ZSAocGxpc3QtZ2V0IHNyYyA6YW5ub3Rh dGUpKQogICAgICAgICAgIChhbm4gKGlmIGFubm90YXRlCiAgICAgICAgICAgICAgICAgICAgKGZ1 bmNhbGwgYW5ub3RhdGUgKGNkciAoZ2V0LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC1tdWx0aSBj YW5kKSkpCiAgICAgICAgICAgICAgICAgIChwbGlzdC1nZXQgc3JjIDpuYW1lKSkpKQogICAgICAo d2hlbiBhbm4KICAgICAgICAoY29uY2F0IChwcm9wZXJ0aXplICIgIiAnZGlzcGxheSBgKHNwYWNl IDphbGlnbi10byAoKyBsZWZ0ICxtYXgtbGVuKSkpIGFubikpKSkpCgooZGVmdW4gY29uc3VsdC0t bXVsdGktbG9va3VwIChzb3VyY2VzKQogICJMb29rdXAgZnVuY3Rpb24gdXNlZCBieSBgY29uc3Vs dC0tbXVsdGknIHdpdGggU09VUkNFUy4iCiAgKGxhbWJkYSAoXyBjYW5kaWRhdGVzIGNhbmQpCiAg ICAoaWYtbGV0IChmb3VuZCAobWVtYmVyIGNhbmQgY2FuZGlkYXRlcykpCiAgICAgICAgKGNvbnMg KGNkciAoZ2V0LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC1tdWx0aSAoY2FyIGZvdW5kKSkpCiAg ICAgICAgICAgICAgKGNvbnN1bHQtLW11bHRpLXNvdXJjZSBzb3VyY2VzIGNhbmQpKQogICAgICAo dW5sZXNzIChzdHJpbmctYmxhbmstcCBjYW5kKQogICAgICAgIChsaXN0IGNhbmQpKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLW11bHRpLWNhbmRpZGF0ZXMgKHNvdXJjZXMpCiAgIlJldHVybiBjYW5kaWRh dGVzIGZyb20gU09VUkNFUyBmb3IgYGNvbnN1bHQtLW11bHRpJy4iCiAgKGxldCAoKGlkeCAwKSAo bWF4LWxlbiAwKSAoY2FuZGlkYXRlcykpCiAgICAoZG9saXN0IChzcmMgc291cmNlcyAoY29ucyAo KyAzIG1heC1sZW4pIChucmV2ZXJzZSBjYW5kaWRhdGVzKSkpCiAgICAgIChsZXQqICgoZmFjZSAo cGxpc3QtZ2V0IHNyYyA6ZmFjZSkpCiAgICAgICAgICAgICAoY2F0IChwbGlzdC1nZXQgc3JjIDpj YXRlZ29yeSkpCiAgICAgICAgICAgICAoaXRlbXMgKHBsaXN0LWdldCBzcmMgOml0ZW1zKSkKICAg ICAgICAgICAgIChpdGVtcyAoaWYgKGZ1bmN0aW9ucCBpdGVtcykgKGZ1bmNhbGwgaXRlbXMpIGl0 ZW1zKSkpCiAgICAgICAgKGRvbGlzdCAoaXRlbSBpdGVtcykKICAgICAgICAgIChsZXQqICgoY2Fu ZCAoY29uY2F0IChjaGFyLXRvLXN0cmluZyAoKyBjb25zdWx0LS10b2Z1LWNoYXIgaWR4KSkgaXRl bSkpCiAgICAgICAgICAgICAgICAgKGxlbiAobGVuZ3RoIGNhbmQpKSkKICAgICAgICAgICAgKGFk ZC10ZXh0LXByb3BlcnRpZXMgMCAxIChsaXN0ICdpbnZpc2libGUgdCAnY29uc3VsdC1tdWx0aSAo Y29ucyBjYXQgaXRlbSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmQpCiAg ICAgICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSAxIGxlbiAnZmFjZSBmYWNlIGNhbmQpCiAgICAg ICAgICAgICh3aGVuICg+IGxlbiBtYXgtbGVuKSAoc2V0cSBtYXgtbGVuIGxlbikpCiAgICAgICAg ICAgIChwdXNoIGNhbmQgY2FuZGlkYXRlcykpKSkKICAgICAgKHNldHEgaWR4ICgxKyBpZHgpKSkp KQoKKGRlZnVuIGNvbnN1bHQtLW11bHRpLXByZXByb2Nlc3MgKHNvdXJjZXMpCiAgIlByZXByb2Nl c3MgU09VUkNFUywgZmlsdGVyIGJ5IHByZWRpY2F0ZS4iCiAgKHNlcS1maWx0ZXIgKGxhbWJkYSAo c3JjKQogICAgICAgICAgICAgICAgKGlmLWxldCAocHJlZCAocGxpc3QtZ2V0IHNyYyA6cHJlZGlj YXRlKSkKICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBwcmVkKQogICAgICAgICAgICAgICAg ICB0KSkKICAgICAgICAgICAgICAobWFwY2FyIChsYW1iZGEgKHNyYykKICAgICAgICAgICAgICAg ICAgICAgICAgKGlmIChzeW1ib2xwIHNyYykgKHN5bWJvbC12YWx1ZSBzcmMpIHNyYykpCiAgICAg ICAgICAgICAgICAgICAgICBzb3VyY2VzKSkpCgooZGVmdW4gY29uc3VsdC0tbXVsdGkgKHByb21w dCBzb3VyY2VzICZyZXN0IG9wdGlvbnMpCiAgIlNlbGVjdCBmcm9tIGNhbmRpZGF0ZXMgdGFrZW4g ZnJvbSBhIGxpc3Qgb2YgU09VUkNFUy4KClBST01QVCBpcyB0aGUgbWluaWJ1ZmZlciBwcm9tcHQu Ck9QVElPTlMgaXMgdGhlIHBsaXN0IG9mIG9wdGlvbnMgcGFzc2VkIHRvIGBjb25zdWx0LS1yZWFk Jy4KClRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzZWxlY3RlZCBjYW5kaWRhdGUgaW4gdGhlIGZv cm0gKGNvbnMgY2FuZGlkYXRlCnNvdXJjZS12YWx1ZSkuIFRoZSBzb3VyY2VzIG9mIHRoZSBzb3Vy Y2UgbGlzdCBjYW4gZWl0aGVyIGJlIHN5bWJvbHMgb2Ygc291cmNlCnZhcmlhYmxlcyBvciBzb3Vy Y2UgdmFsdWVzLiBTb3VyY2UgdmFsdWVzIG11c3QgYmUgcGxpc3RzIHdpdGggdGhlIGZvbGxvd2lu ZwpmaWVsZHM6CgpSZXF1aXJlZCBzb3VyY2UgZmllbGRzOgoqIDpjYXRlZ29yeSAtIENvbXBsZXRp b24gY2F0ZWdvcnkuCiogOml0ZW1zIC0gTGlzdCBvZiBjYW5kaWRhdGUgc3RyaW5ncyBvciBmdW5j dGlvbiByZXR1cm5pbmcgbGlzdCBvZiBzdHJpbmdzLgoKT3B0aW9uYWwgc291cmNlIGZpZWxkczoK KiA6bmFtZSAtIE5hbWUgb2YgdGhlIHNvdXJjZSwgdXNlZCBmb3IgbmFycm93aW5nIGFuZCBhbm5v dGF0aW9uLgoqIDpuYXJyb3cgLSBOYXJyb3dpbmcgY2hhcmFjdGVyIG9yIChjaGFyYWN0ZXIgLiBz dHJpbmcpIHBhaXIuCiogOnByZWRpY2F0ZSAtIEZ1bmN0aW9uIHdoaWNoIG11c3QgcmV0dXJuIHQg aWYgdGhlIHNvdXJjZSBpcyBlbmFibGVkLgoqIDpmYWNlIC0gRmFjZSB1c2VkIGZvciBoaWdobGln aHRpbmcgdGhlIGNhbmRpZGF0ZXMuCiogOmFubm90YXRlIC0gQW5ub3RhdGlvbiBmdW5jdGlvbiBj YWxsZWQgZm9yIGVhY2ggY2FuZGlkYXRlLCByZXR1cm5zIHN0cmluZy4KKiA6aGlzdG9yeSAtIE5h bWUgb2YgaGlzdG9yeSB2YXJpYWJsZSB0byBhZGQgc2VsZWN0ZWQgY2FuZGlkYXRlLgoqIEFyYml0 cmFyeSBvdGhlciBmaWVsZHMgc3BlY2lmaWMgdG8geW91ciB1c2UgY2FzZS4iCiAgKGxldCogKChz b3VyY2VzIChjb25zdWx0LS1tdWx0aS1wcmVwcm9jZXNzIHNvdXJjZXMpKQogICAgICAgICAoY2Fu ZGlkYXRlcwogICAgICAgICAgKGNvbnN1bHQtLXdpdGgtaW5jcmVhc2VkLWdjCiAgICAgICAgICAg KGxldCAoKGNvbnN1bHQtLWNhY2hlKSkKICAgICAgICAgICAgIChjb25zdWx0LS1tdWx0aS1jYW5k aWRhdGVzIHNvdXJjZXMpKSkpCiAgICAgICAgIChzZWxlY3RlZCAoYXBwbHkgIydjb25zdWx0LS1y ZWFkIHByb21wdAogICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgY2FuZGlkYXRlcykKICAg ICAgICAgICAgICAgICAgICAgICAgICA6Y2F0ZWdvcnkgICdjb25zdWx0LW11bHRpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgOnByZWRpY2F0ZSAoY29uc3VsdC0tbXVsdGktcHJlZGljYXRlIHNv dXJjZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOm5hcnJvdyAgICAoY29uc3VsdC0tbXVs dGktbmFycm93IHNvdXJjZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOmFubm90YXRlICAo Y29uc3VsdC0tbXVsdGktYW5ub3RhdGUgc291cmNlcyAoY2FyIGNhbmRpZGF0ZXMpKQogICAgICAg ICAgICAgICAgICAgICAgICAgIDpsb29rdXAgICAgKGNvbnN1bHQtLW11bHRpLWxvb2t1cCBzb3Vy Y2VzKQogICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMpKSkKICAgICh3aGVuLWxldCAo aGlzdG9yeSAocGxpc3QtZ2V0IChjZHIgc2VsZWN0ZWQpIDpoaXN0b3J5KSkKICAgICAgKGFkZC10 by1oaXN0b3J5IGhpc3RvcnkgKGNhciBzZWxlY3RlZCkpKQogICAgc2VsZWN0ZWQpKQoKOzs7OyBJ bnRlcm5hbCBBUEk6IGNvbnN1bHQtLXByb21wdAoKKGNsLWRlZnVuIGNvbnN1bHQtLXByb21wdCAo cHJvbXB0ICZrZXkgaGlzdG9yeSBhZGQtaGlzdG9yeSBpbml0aWFsIGRlZmF1bHQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtleW1hcCBwcmV2aWV3IChwcmV2aWV3LWtleSBjb25z dWx0LXByZXZpZXcta2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYW5z Zm9ybSAobGFtYmRhIChfIHgpIHgpKSkKICAiUmVhZCBmcm9tIG1pbmlidWZmZXIuCgpQUk9NUFQg aXMgdGhlIHN0cmluZyB0byBwcm9tcHQgd2l0aC4KVFJBTlNGT1JNIGlzIGEgZnVuY3Rpb24gd2hp Y2ggaXMgYXBwbGllZCB0byB0aGUgY3VycmVudCBpbnB1dCBzdHJpbmcuCkhJU1RPUlkgaXMgdGhl IHN5bWJvbCBvZiB0aGUgaGlzdG9yeSB2YXJpYWJsZS4KSU5JVElBTCBpcyBpbml0aWFsIGlucHV0 LgpERUZBVUxUIGlzIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHZhbHVlLgpBREQtSElTVE9SWSBpcyBh IGxpc3Qgb2YgaXRlbXMgdG8gYWRkIHRvIHRoZSBoaXN0b3J5LgpQUkVWSUVXIGlzIGEgcHJldmll dyBmdW5jdGlvbiwgc2VlIGBjb25zdWx0LS13aXRoLXByZXZpZXcnLgpQUkVWSUVXLUtFWSBhcmUg dGhlIHByZXZpZXcga2V5cyAobmlsLCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtl eXMpLgpLRVlNQVAgaXMgYSBjb21tYW5kLXNwZWNpZmljIGtleW1hcC4iCiAgKG1pbmlidWZmZXIt d2l0aC1zZXR1cC1ob29rCiAgICAgICg6YXBwZW5kIChsYW1iZGEgKCkKICAgICAgICAgICAgICAg ICAoY29uc3VsdC0tc2V0dXAta2V5bWFwIGtleW1hcCBuaWwgbmlsIHByZXZpZXcta2V5KQogICAg ICAgICAgICAgICAgIChjb25zdWx0LS1hZGQtaGlzdG9yeSBhZGQtaGlzdG9yeSkpKQogICAgKGNv bnN1bHQtLXdpdGgtcHJldmlldyBwcmV2aWV3LWtleSBwcmV2aWV3IHRyYW5zZm9ybSAjJ21pbmli dWZmZXItY29udGVudHMtbm8tcHJvcGVydGllcwogICAgICAocmVhZC1mcm9tLW1pbmlidWZmZXIg cHJvbXB0IGluaXRpYWwgbmlsIG5pbCBoaXN0b3J5IGRlZmF1bHQpKSkpCgooYWR2aWNlLWFkZCAj J2NvbnN1bHQtLXByb21wdCA6ZmlsdGVyLWFyZ3MgIydjb25zdWx0LS1tZXJnZS1jb25maWcpCgo7 Ozs7IENvbW1hbmRzCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW11bHRpLW9jY3VyCgo7OyBzZWUg aHR0cHM6Ly9naXRodWIuY29tL3JheG9kNTAyL3NlbGVjdHJ1bS9pc3N1ZXMvMjI2Cjs7OyMjI2F1 dG9sb2FkCihkZWZ1biBjb25zdWx0LW11bHRpLW9jY3VyIChidWZzIHJlZ2V4cCAmb3B0aW9uYWwg bmxpbmVzKQogICJJbXByb3ZlZCB2ZXJzaW9uIG9mIGBtdWx0aS1vY2N1cicgYmFzZWQgb24gYGNv bXBsZXRpbmctcmVhZC1tdWx0aXBsZScuCgpTZWUgYG11bHRpLW9jY3VyJyBmb3IgdGhlIG1lYW5p bmcgb2YgdGhlIGFyZ3VtZW50cyBCVUZTLCBSRUdFWFAgYW5kIE5MSU5FUy4iCiAgKGludGVyYWN0 aXZlIChjb25zCiAgICAgICAgICAgICAgICAobWFwY2FyICMnZ2V0LWJ1ZmZlcgogICAgICAgICAg ICAgICAgICAgICAgICAoY29tcGxldGluZy1yZWFkLW11bHRpcGxlICJCdWZmZXI6ICIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ2ludGVybmFsLWNv bXBsZXRlLWJ1ZmZlcikpCiAgICAgICAgICAgICAgICAob2NjdXItcmVhZC1wcmltYXJ5LWFyZ3Mp KSkKICAob2NjdXItMSByZWdleHAgbmxpbmVzIGJ1ZnMpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1vdXRsaW5lCgooZGVmdW4gY29uc3VsdC0tb3V0bGluZS1jYW5kaWRhdGVzICgpCiAgIlJldHVy biBhbGlzdCBvZiBvdXRsaW5lIGhlYWRpbmdzIGFuZCBwb3NpdGlvbnMuIgogIChjb25zdWx0LS1m b3JiaWQtbWluaWJ1ZmZlcikKICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAgKGxldCogKChsaW5l IChsaW5lLW51bWJlci1hdC1wb3MgKHBvaW50LW1pbikgY29uc3VsdC1saW5lLW51bWJlcnMtd2lk ZW4pKQogICAgICAgICAoaGVhZGluZy1yZWdleHAgKGNvbmNhdCAiXlxcKD86IiBvdXRsaW5lLXJl Z2V4cCAiXFwpIikpCiAgICAgICAgIChjYW5kaWRhdGVzKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgog ICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAod2hpbGUgKHNhdmUtZXhjdXJzaW9u IChyZS1zZWFyY2gtZm9yd2FyZCBoZWFkaW5nLXJlZ2V4cCBuaWwgdCkpCiAgICAgICAgKHNldHEg bGluZSAoKyBsaW5lIChjb25zdWx0LS1jb3VudC1saW5lcyAobWF0Y2gtYmVnaW5uaW5nIDApKSkp CiAgICAgICAgKHB1c2ggKGxpc3QgKHBvaW50LW1hcmtlcikgbGluZQogICAgICAgICAgICAgICAg ICAgIChidWZmZXItc3Vic3RyaW5nIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5k LXBvc2l0aW9uKSkpCiAgICAgICAgICAgICAgY2FuZGlkYXRlcykKICAgICAgICAodW5sZXNzIChl b2JwKSAoZm9yd2FyZC1jaGFyIDEpKSkpCiAgICAodW5sZXNzIGNhbmRpZGF0ZXMKICAgICAgKHVz ZXItZXJyb3IgIk5vIGhlYWRpbmdzIikpCiAgICAoY29uc3VsdC0tYWRkLWxpbmUtbnVtYmVyIGxp bmUgKG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3Vs dC1vdXRsaW5lICgpCiAgIkp1bXAgdG8gYW4gb3V0bGluZSBoZWFkaW5nLCBvYnRhaW5lZCBieSBt YXRjaGluZyBhZ2FpbnN0IGBvdXRsaW5lLXJlZ2V4cCcuCgpUaGlzIGNvbW1hbmQgc3VwcG9ydHMg Y2FuZGlkYXRlIHByZXZpZXcuClRoZSBzeW1ib2wgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1 dHVyZSBoaXN0b3J5LiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWp1bXAKICAgKGNvbnN1 bHQtLXJlYWQKICAgICJHbyB0byBoZWFkaW5nOiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFz ZWQtZ2MgKGNvbnN1bHQtLW91dGxpbmUtY2FuZGlkYXRlcykpCiAgICA6Y2F0ZWdvcnkgJ2NvbnN1 bHQtbG9jYXRpb24KICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgOmxvb2t1 cCAjJ2NvbnN1bHQtLWxpbmUtbWF0Y2gKICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWxp bmUtaGlzdG9yeSkKICAgIDphZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkKICAg IDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKSkpKQoKOzs7OzsgQ29tbWFuZDog Y29uc3VsdC1lcnJvcgoKKGRlZnVuIGNvbnN1bHQtLWVycm9yLWNhbmRpZGF0ZXMgKCkKICAiUmV0 dXJuIGFsaXN0IG9mIGVycm9ycyBhbmQgcG9zaXRpb25zLiIKICAobGV0ICgoY2FuZGlkYXRlcykK ICAgICAgICAocG9zIChwb2ludC1taW4pKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAod2hp bGUgKHNldHEgcG9zIChjb21waWxhdGlvbi1uZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgcG9z ICdjb21waWxhdGlvbi1tZXNzYWdlKSkKICAgICAgICAod2hlbi1sZXQqICgobXNnIChnZXQtdGV4 dC1wcm9wZXJ0eSBwb3MgJ2NvbXBpbGF0aW9uLW1lc3NhZ2UpKQogICAgICAgICAgICAgICAgICAg IChsb2MgKGNvbXBpbGF0aW9uLS1tZXNzYWdlLT5sb2MgbXNnKSkpCiAgICAgICAgICAoZ290by1j aGFyIHBvcykKICAgICAgICAgIChwdXNoIChsaXN0CiAgICAgICAgICAgICAgICAgKGNvbnN1bHQt LWZvbnQtbG9jayAoYnVmZmVyLXN1YnN0cmluZyBwb3MgKGxpbmUtZW5kLXBvc2l0aW9uKSkpCiAg ICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIKICAgICAgICAgICAgICAgICAgICAg OzsgdGFrZW4gZnJvbSBjb21waWxlLmVsCiAgICAgICAgICAgICAgICAgICAgIChhcHBseSAjJ2Nv bXBpbGF0aW9uLWZpbmQtZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50LW1h cmtlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWFyIChjb21waWxhdGlvbi0tbG9j LT5maWxlLXN0cnVjdCBsb2MpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhZGFyIChj b21waWxhdGlvbi0tbG9jLT5maWxlLXN0cnVjdCBsb2MpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbXBpbGF0aW9uLS1maWxlLXN0cnVjdC0+Zm9ybWF0cwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb21waWxhdGlvbi0tbG9jLT5maWxlLXN0cnVjdCBsb2MpKSkKICAgICAg ICAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAgICAgICAgICAgICAgICAgICA7 OyBsb2NhdGlvbiBtaWdodCBiZSBpbnZhbGlkIGJ5IG5vdwogICAgICAgICAgICAgICAgICAgKGln bm9yZS1lcnJvcnMKICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAoLSAoY29tcGls YXRpb24tLWxvYy0+bGluZSBsb2MpIDEpKQogICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1j aGFyIChjb21waWxhdGlvbi0tbG9jLT5jb2wgbG9jKSkpCiAgICAgICAgICAgICAgICAgICAocG9p bnQtbWFya2VyKSkKICAgICAgICAgICAgICAgICAocGNhc2UgKGNvbXBpbGF0aW9uLS1tZXNzYWdl LT50eXBlIG1zZykKICAgICAgICAgICAgICAgICAgICgwID9pKQogICAgICAgICAgICAgICAgICAg KDEgP3cpCiAgICAgICAgICAgICAgICAgICAoXyA/ZSkpKQogICAgICAgICAgICAgICAgY2FuZGlk YXRlcykpKSkKICAgIChucmV2ZXJzZSBjYW5kaWRhdGVzKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVm dW4gY29uc3VsdC1lcnJvciAoKQogICJKdW1wIHRvIGEgY29tcGlsYXRpb24gZXJyb3IgaW4gdGhl IGN1cnJlbnQgYnVmZmVyLgoKVGhpcyBjb21tYW5kIHdvcmtzIGluIGNvbXBpbGF0aW9uIGJ1ZmZl cnMgYW5kIGdyZXAgYnVmZmVycy4KVGhlIGNvbW1hbmQgc3VwcG9ydHMgcHJldmlldyBvZiB0aGUg Y3VycmVudGx5IHNlbGVjdGVkIGVycm9yLiIKICAoaW50ZXJhY3RpdmUpCiAgKHVubGVzcyAoY29t cGlsYXRpb24tYnVmZmVyLXAgKGN1cnJlbnQtYnVmZmVyKSkKICAgICh1c2VyLWVycm9yICJOb3Qg YSBjb21waWxhdGlvbiBidWZmZXIiKSkKICAoY29uc3VsdC0tanVtcAogICAoY29uc3VsdC0tcmVh ZAogICAgIkdvIHRvIGVycm9yOiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2MgKGNv bnN1bHQtLWVycm9yLWNhbmRpZGF0ZXMpKQogICAgOmNhdGVnb3J5ICdjb25zdWx0LWVycm9yCiAg ICA6c29ydCBuaWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpsb29rdXAgIydjb25zdWx0LS1s b29rdXAtY2FkcgogICAgOm5hcnJvdyBgKCwobGFtYmRhIChjYW5kKSAoPSAoY2FkZHIgY2FuZCkg Y29uc3VsdC0tbmFycm93KSkKICAgICAgICAgICAgICAoP2UgLiAiRXJyb3IiKQogICAgICAgICAg ICAgICg/dyAuICJXYXJuaW5nIikKICAgICAgICAgICAgICAoP2kgLiAiSW5mbyIpKQogICAgOmhp c3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tZXJyb3ItaGlzdG9yeSkKICAgIDpwcmV2aWV3CiAgICAo Y29uc3VsdC0tcHJldmlldy1wb3NpdGlvbiAnY29uc3VsdC1wcmV2aWV3LWVycm9yKSkpKQoKOzs7 OzsgQ29tbWFuZDogY29uc3VsdC1tYXJrCgooZGVmdW4gY29uc3VsdC0tbWFyay1jYW5kaWRhdGVz ICgpCiAgIlJldHVybiBhbGlzdCBvZiBsaW5lcyBjb250YWluaW5nIG1hcmtlcnMuClRoZSBhbGlz dCBjb250YWlucyAoc3RyaW5nIC4gcG9zaXRpb24pIHBhaXJzLiIKICAoY29uc3VsdC0tZm9yYmlk LW1pbmlidWZmZXIpCiAgKHVubGVzcyAobWFya2VyLXBvc2l0aW9uIChtYXJrLW1hcmtlcikpCiAg ICAodXNlci1lcnJvciAiTm8gbWFya3MiKSkKICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAgKGxl dCogKChtYXgtbGluZSAwKQogICAgICAgICAoY2FuZGlkYXRlcykpCiAgICAoc2F2ZS1leGN1cnNp b24KICAgICAgKGRvbGlzdCAobWFya2VyIChjb25zIChtYXJrLW1hcmtlcikgbWFyay1yaW5nKSkK ICAgICAgICAobGV0ICgocG9zIChtYXJrZXItcG9zaXRpb24gbWFya2VyKSkpCiAgICAgICAgICAo d2hlbiAoY29uc3VsdC0taW4tcmFuZ2UtcCBwb3MpCiAgICAgICAgICAgIChnb3RvLWNoYXIgcG9z KQogICAgICAgICAgICA7OyBgbGluZS1udW1iZXItYXQtcG9zJyBpcyBhIHZlcnkgc2xvdyBmdW5j dGlvbiwgd2hpY2ggc2hvdWxkIGJlIHJlcGxhY2VkIGV2ZXJ5d2hlcmUuCiAgICAgICAgICAgIDs7 IEhvd2V2ZXIgaW4gdGhpcyBjYXNlIHRoZSBzbG93IGxpbmUtbnVtYmVyLWF0LXBvcyBkb2VzIG5v dCBodXJ0IG11Y2gsIHNpbmNlCiAgICAgICAgICAgIDs7IHRoZSBtYXJrIHJpbmcgaXMgdXN1YWxs eSBzbWFsbCBzaW5jZSBpdCBpcyBsaW1pdGVkIGJ5IGBtYXJrLXJpbmctbWF4Jy4KICAgICAgICAg ICAgKGxldCAoKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyBwb3MgY29uc3VsdC1saW5lLW51bWJl cnMtd2lkZW4pKSkKICAgICAgICAgICAgICAoc2V0cSBtYXgtbGluZSAobWF4IGxpbmUgbWF4LWxp bmUpKQogICAgICAgICAgICAgIChwdXNoIChsaXN0IG1hcmtlciBsaW5lIChjb25zdWx0LS1saW5l LXdpdGgtY3Vyc29yIG1hcmtlcikpCiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcykpKSkp KQogICAgKG5yZXZlcnNlIChjb25zdWx0LS1yZW1vdmUtZHVwcyAoY29uc3VsdC0tYWRkLWxpbmUt bnVtYmVyIG1heC1saW5lIGNhbmRpZGF0ZXMpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNv bnN1bHQtbWFyayAoKQogICJKdW1wIHRvIGEgbWFya2VyIGluIHRoZSBidWZmZXItbG9jYWwgYG1h cmstcmluZycuCgpUaGUgY29tbWFuZCBzdXBwb3J0cyBwcmV2aWV3IG9mIHRoZSBjdXJyZW50bHkg c2VsZWN0ZWQgbWFya2VyIHBvc2l0aW9uLgpUaGUgc3ltYm9sIGF0IHBvaW50IGlzIGFkZGVkIHRv IHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1qdW1wCiAg IChjb25zdWx0LS1yZWFkCiAgICAiR28gdG8gbWFyazogIgogICAgKGNvbnN1bHQtLXdpdGgtaW5j cmVhc2VkLWdjIChjb25zdWx0LS1tYXJrLWNhbmRpZGF0ZXMpKQogICAgOmNhdGVnb3J5ICdjb25z dWx0LWxvY2F0aW9uCiAgICA6c29ydCBuaWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpsb29r dXAgIydjb25zdWx0LS1sb29rdXAtbG9jYXRpb24KICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1 bHQtLWxpbmUtaGlzdG9yeSkKICAgIDphZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJv bCkKICAgIDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKSkpKQoKOzs7OzsgQ29t bWFuZDogY29uc3VsdC1nbG9iYWwtbWFyawoKKGRlZnVuIGNvbnN1bHQtLWdsb2JhbC1tYXJrLWNh bmRpZGF0ZXMgKCkKICAiUmV0dXJuIGFsaXN0IG9mIGxpbmVzIGNvbnRhaW5pbmcgbWFya2Vycy4K ClRoZSBhbGlzdCBjb250YWlucyAoc3RyaW5nIC4gcG9zaXRpb24pIHBhaXJzLiIKICAoY29uc3Vs dC0tZm9yYmlkLW1pbmlidWZmZXIpCiAgKGxldCAoKGNhbmRpZGF0ZXMpKQogICAgKHNhdmUtZXhj dXJzaW9uCiAgICAgIChkb2xpc3QgKG1hcmtlciBnbG9iYWwtbWFyay1yaW5nKQogICAgICAgIChs ZXQgKChwb3MgKG1hcmtlci1wb3NpdGlvbiBtYXJrZXIpKQogICAgICAgICAgICAgIChidWYgKG1h cmtlci1idWZmZXIgbWFya2VyKSkpCiAgICAgICAgICAod2hlbiAoYW5kIHBvcyAoYnVmZmVyLWxp dmUtcCBidWYpIChub3QgKG1pbmlidWZmZXJwIGJ1ZikpKQogICAgICAgICAgICAod2l0aC1jdXJy ZW50LWJ1ZmZlciBidWYKICAgICAgICAgICAgICAod2hlbiAoY29uc3VsdC0taW4tcmFuZ2UtcCBw b3MpCiAgICAgICAgICAgICAgICAoZ290by1jaGFyIHBvcykKICAgICAgICAgICAgICAgIDs7IGBs aW5lLW51bWJlci1hdC1wb3MnIGlzIHNsb3csIHNlZSBjb21tZW50IGluIGBjb25zdWx0LS1tYXJr LWNhbmRpZGF0ZXMnLgogICAgICAgICAgICAgICAgKGxldCogKChsaW5lIChsaW5lLW51bWJlci1h dC1wb3MgcG9zIGNvbnN1bHQtbGluZS1udW1iZXJzLXdpZGVuKSkKICAgICAgICAgICAgICAgICAg ICAgICAoYmVnaW4gKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkKICAgICAgICAgICAgICAgICAg ICAgICAoZW5kIChsaW5lLWVuZC1wb3NpdGlvbikpCiAgICAgICAgICAgICAgICAgICAgICAgKGxv YyAoY29uc3VsdC0tZm9ybWF0LWxvY2F0aW9uIChidWZmZXItbmFtZSBidWYpIGxpbmUpKSkKICAg ICAgICAgICAgICAgICAgKGNvbnN1bHQtLWZvbnRpZnktcmVnaW9uIGJlZ2luIGVuZCkKICAgICAg ICAgICAgICAgICAgKHB1c2ggKGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Bl cnRpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0IChwcm9wZXJ0aXplIChjb25z dWx0LS1lbmNvZGUtbG9jYXRpb24gbWFya2VyKSAnaW52aXNpYmxlIHQpIGxvYykKICAgICAgICAg ICAgICAgICAgICAgICAgICAnY29uc3VsdC1sb2NhdGlvbiAoY29ucyBtYXJrZXIgbGluZSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3VsdC0tcmVnaW9uLXdpdGgtY3Vyc29yIGJlZ2lu IGVuZCBtYXJrZXIpKQogICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzKSkpKSkpKSkK ICAgICh1bmxlc3MgY2FuZGlkYXRlcwogICAgICAodXNlci1lcnJvciAiTm8gZ2xvYmFsIG1hcmtz IikpCiAgICAobnJldmVyc2UgKGNvbnN1bHQtLXJlbW92ZS1kdXBzIGNhbmRpZGF0ZXMpKSkpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1nbG9iYWwtbWFyayAoKQogICJKdW1wIHRvIGEg bWFya2VyIGluIGBnbG9iYWwtbWFyay1yaW5nJy4KClRoZSBjb21tYW5kIHN1cHBvcnRzIHByZXZp ZXcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtYXJrZXIgcG9zaXRpb24uClRoZSBzeW1ib2wg YXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1dHVyZSBoaXN0b3J5LiIKICAoaW50ZXJhY3RpdmUp CiAgKGNvbnN1bHQtLWp1bXAKICAgKGNvbnN1bHQtLXJlYWQKICAgICJHbyB0byBnbG9iYWwgbWFy azogIgogICAgKGNvbnN1bHQtLXdpdGgtaW5jcmVhc2VkLWdjIChjb25zdWx0LS1nbG9iYWwtbWFy ay1jYW5kaWRhdGVzKSkKICAgIDs7IFdoaWxlIGBjb25zdWx0LWdsb2JhbC1tYXJrJyBmb3JtYXRz IHRoZSBjYW5kaWRhdGVzIGluIGdyZXAtbGlrZQogICAgOzsgc3R5bGUsIHdlIGFyZSBzdGlsbCBu b3QgdXNpbmcgdGhlICd4cmVmLWxvY2F0aW9uIGNhdGVnb3J5LAogICAgOzsgc2luY2UgdGhlIGxv Y2F0aW9ucyBhcmUgZm9ybWF0dGVkIHVzaW5nIGFiYnJldmlhdGVkIGJ1ZmZlcgogICAgOzsgbmFt ZXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhzLiBJZiB0aGUgJ3hyZWYtbG9jYXRpb24gY2F0ZWdvcnkK ICAgIDs7IHdvdWxkIGJlIHVzZWQsIEVtYmFyayB3b3VsZCBlbWJhcmstZXhwb3J0IHRvIGEgYnJv a2VuIGdyZXAtbW9kZQogICAgOzsgYnVmZmVyLiBCeSB1c2luZyB0aGUgJ2NvbnN1bHQtbG9jYXRp b24gY2F0ZWdvcnksIEVtYmFyayB3aWxsCiAgICA7OyBleHBvcnQgdG8gYW4gb2NjdXIgYnVmZmVy IGluc3RlYWQhIFNlZSBhbHNvCiAgICA7OyBodHRwczovL2dpdGh1Yi5jb20vbWluYWQvY29uc3Vs dC9pc3N1ZXMvMTA3LgogICAgOmNhdGVnb3J5ICdjb25zdWx0LWxvY2F0aW9uCiAgICA6c29ydCBu aWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpsb29rdXAgIydjb25zdWx0LS1sb29rdXAtbG9j YXRpb24KICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWxpbmUtaGlzdG9yeSkKICAgIDph ZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkKICAgIDpwcmV2aWV3IChjb25zdWx0 LS1wcmV2aWV3LXBvc2l0aW9uKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1saW5lCgooZGVm dW4gY29uc3VsdC0tbGluZS1jYW5kaWRhdGVzICgpCiAgIlJldHVybiBhbGlzdCBvZiBsaW5lcyBh bmQgcG9zaXRpb25zLiIKICAoY29uc3VsdC0tZm9yYmlkLW1pbmlidWZmZXIpCiAgKGNvbnN1bHQt LWZvbnRpZnktYWxsKQogIChsZXQqICgoZGVmYXVsdC1jYW5kKQogICAgICAgICAoY2FuZGlkYXRl cykKICAgICAgICAgKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyAocG9pbnQtbWluKSBjb25zdWx0 LWxpbmUtbnVtYmVycy13aWRlbikpCiAgICAgICAgIChjdXJyLWxpbmUgKGxpbmUtbnVtYmVyLWF0 LXBvcyAocG9pbnQpIGNvbnN1bHQtbGluZS1udW1iZXJzLXdpZGVuKSkKICAgICAgICAgKGxpbmUt d2lkdGggKGxlbmd0aCAobnVtYmVyLXRvLXN0cmluZyAobGluZS1udW1iZXItYXQtcG9zCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXgpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bHQtbGlu ZS1udW1iZXJzLXdpZGVuKSkpKQogICAgICAgICAoZGVmYXVsdC1jYW5kLWRpc3QgbW9zdC1wb3Np dGl2ZS1maXhudW0pKQogICAgKGNvbnN1bHQtLWVhY2gtbGluZSBiZWcgZW5kCiAgICAgIChsZXQg KChzdHIgKGJ1ZmZlci1zdWJzdHJpbmcgYmVnIGVuZCkpKQogICAgICAgICh1bmxlc3MgKHN0cmlu Zy1ibGFuay1wIHN0cikKICAgICAgICAgIChsZXQgKChjYW5kIChjb25jYXQKICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3VsdC0tbGluZS1udW1iZXItcHJlZml4IChwb2ludC1tYXJrZXIpIGxp bmUgbGluZS13aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICBzdHIpKQogICAgICAgICAgICAg ICAgKGRpc3QgKGFicyAoLSBjdXJyLWxpbmUgbGluZSkpKSkKICAgICAgICAgICAgKHdoZW4gKDwg ZGlzdCBkZWZhdWx0LWNhbmQtZGlzdCkKICAgICAgICAgICAgICAoc2V0cSBkZWZhdWx0LWNhbmQg Y2FuZAogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtY2FuZC1kaXN0IGRpc3QpKQogICAgICAg ICAgICAocHVzaCBjYW5kIGNhbmRpZGF0ZXMpKSkKICAgICAgICAoc2V0cSBsaW5lICgxKyBsaW5l KSkpKQogICAgKHVubGVzcyBjYW5kaWRhdGVzCiAgICAgICh1c2VyLWVycm9yICJObyBsaW5lcyIp KQogICAgKGNvbnMgZGVmYXVsdC1jYW5kIChucmV2ZXJzZSBjYW5kaWRhdGVzKSkpKQoKKGRlZnVu IGNvbnN1bHQtLWxpbmUtbWF0Y2ggKGlucHV0IGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIHBv c2l0aW9uIG9mIG1hdGNoLgoKSU5QVVQgaXMgdGhlIGlucHV0IHN0cmluZyBlbnRlcmVkIGJ5IHRo ZSB1c2VyLgpDQU5ESURBVEVTIGlzIHRoZSBsaW5lIGNhbmRpZGF0ZXMgYWxpc3QuCkNBTkQgaXMg dGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjYW5kaWRhdGUuIgogICh3aGVuLWxldCAocG9zIChjb25z dWx0LS1sb29rdXAtbG9jYXRpb24gaW5wdXQgY2FuZGlkYXRlcyBjYW5kKSkKICAgIChpZiAob3Ig KHN0cmluZy1ibGFuay1wIGlucHV0KQogICAgICAgICAgICAoZXEgY29uc3VsdC1saW5lLXBvaW50 LXBsYWNlbWVudCAnbGluZS1iZWdpbm5pbmcpKQogICAgICAgIHBvcwogICAgICA7OyBTdHJpcCB1 bmlxdWUgbGluZSBudW1iZXIgcHJlZml4CiAgICAgIChsZXQgKChpIDApCiAgICAgICAgICAgIChu IChsZW5ndGggY2FuZCkpCiAgICAgICAgICAgIChjbWluIGNvbnN1bHQtLXRvZnUtY2hhcikKICAg ICAgICAgICAgKGNtYXggKC0gKCsgY29uc3VsdC0tdG9mdS1jaGFyIGNvbnN1bHQtLXRvZnUtcmFu Z2UpIDEpKSkKICAgICAgICAod2hpbGUgKGFuZCAoPCBpIG4pICg8PSBjbWluIChhcmVmIGNhbmQg aSkgY21heCkpCiAgICAgICAgICAoc2V0cSBpICgxKyBpKSkpCiAgICAgICAgKHdoZW4gKD4gaSAw KQogICAgICAgICAgKHNldHEgY2FuZCAoc3Vic3RyaW5nIGNhbmQgaSkpKSkKICAgICAgKGxldCAo KGJlZyAwKQogICAgICAgICAgICAoZW5kIChsZW5ndGggY2FuZCkpCiAgICAgICAgICAgIDs7IFVz ZSBjb25zdWx0LWxvY2F0aW9uIGNvbXBsZXRpb24gY2F0ZWdvcnkgd2hlbiBmaWx0ZXJpbmcgbGlu ZXMKICAgICAgICAgICAgKGZpbHRlciAoY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIgJ2NvbnN1 bHQtbG9jYXRpb24gbmlsKSkpCiAgICAgICAgOzsgRmluZCBtYXRjaCBlbmQgcG9zaXRpb24sIHJl bW92ZSBjaGFyYWN0ZXJzIGZyb20gbGluZSBlbmQgdW50aWwKICAgICAgICA7OyBtYXRjaGluZyBm YWlscwogICAgICAgIChsZXQgKChzdGVwIDE2KSkKICAgICAgICAgICh3aGlsZSAoPiBzdGVwIDAp CiAgICAgICAgICAgICh3aGlsZSAoYW5kICg+ICgtIGVuZCBzdGVwKSAwKQogICAgICAgICAgICAg ICAgICAgICAgICAoZnVuY2FsbCBmaWx0ZXIgaW5wdXQgKGxpc3QgKHN1YnN0cmluZyBjYW5kIDAg KC0gZW5kIHN0ZXApKSkpKQogICAgICAgICAgICAgIChzZXRxIGVuZCAoLSBlbmQgc3RlcCkpKQog ICAgICAgICAgICAoc2V0cSBzdGVwICgvIHN0ZXAgMikpKSkKICAgICAgICA7OyBGaW5kIG1hdGNo IGJlZ2lubmluZyBwb3NpdGlvbiwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSBsaW5lIGJlZ2lubmlu ZwogICAgICAgIDs7IHVudGlsIG1hdGNoaW5nIGZhaWxzCiAgICAgICAgKHdoZW4gKGVxIGNvbnN1 bHQtbGluZS1wb2ludC1wbGFjZW1lbnQgJ21hdGNoLWJlZ2lubmluZykKICAgICAgICAgIChsZXQg KChzdGVwIDE2KSkKICAgICAgICAgICAgKHdoaWxlICg+IHN0ZXAgMCkKICAgICAgICAgICAgICAo d2hpbGUgKGFuZCAoPCAoKyBiZWcgc3RlcCkgZW5kKQogICAgICAgICAgICAgICAgICAgICAgICAg IChmdW5jYWxsIGZpbHRlciBpbnB1dCAobGlzdCAoc3Vic3RyaW5nIGNhbmQgKCsgYmVnIHN0ZXAp IGVuZCkpKSkKICAgICAgICAgICAgICAgIChzZXRxIGJlZyAoKyBiZWcgc3RlcCkpKQogICAgICAg ICAgICAgIChzZXRxIHN0ZXAgKC8gc3RlcCAyKSkpCiAgICAgICAgICAgIChzZXRxIGVuZCBiZWcp KSkKICAgICAgICA7OyBNYXJrZXIgY2FuIGJlIGRlYWQKICAgICAgICAoaWdub3JlLWVycm9ycyAo KyBwb3MgZW5kKSkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1saW5lICgmb3B0 aW9uYWwgaW5pdGlhbCkKICAiU2VhcmNoIGZvciBhIG1hdGNoaW5nIGxpbmUgYW5kIGp1bXAgdG8g dGhlIGxpbmUgYmVnaW5uaW5nLgoKVGhlIGRlZmF1bHQgY2FuZGlkYXRlIGlzIGEgbm9uLWVtcHR5 IGxpbmUgY2xvc2VzdCB0byBwb2ludC4KVGhpcyBjb21tYW5kIG9iZXlzIG5hcnJvd2luZy4gT3B0 aW9uYWxseSBJTklUSUFMIGlucHV0IGNhbiBiZSBwcm92aWRlZC4KVGhlIHN5bWJvbCBhdCBwb2lu dCBhbmQgdGhlIGxhc3QgYGlzZWFyY2gtc3RyaW5nJyBpcyBhZGRlZCB0byB0aGUgZnV0dXJlIGhp c3RvcnkuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgoY2FuZGlkYXRlcyAoY29uc3VsdC0td2l0 aC1pbmNyZWFzZWQtZ2MgKGNvbnN1bHQtLWxpbmUtY2FuZGlkYXRlcykpKSkKICAgIChjb25zdWx0 LS1qdW1wCiAgICAgKGNvbnN1bHQtLXJlYWQKICAgICAgIkdvIHRvIGxpbmU6ICIgKGNkciBjYW5k aWRhdGVzKQogICAgICA6Y2F0ZWdvcnkgJ2NvbnN1bHQtbG9jYXRpb24KICAgICAgOnNvcnQgbmls CiAgICAgIDpkZWZhdWx0LXRvcCBuaWwKICAgICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgICA7OyBB bHdheXMgYWRkIGxhc3QgaXNlYXJjaCBzdHJpbmcgdG8gZnV0dXJlIGhpc3RvcnkKICAgICAgOmFk ZC1oaXN0b3J5IChsaXN0ICh0aGluZy1hdC1wb2ludCAnc3ltYm9sKSBpc2VhcmNoLXN0cmluZykK ICAgICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbGluZS1oaXN0b3J5KQogICAgICA6bG9v a3VwICMnY29uc3VsdC0tbGluZS1tYXRjaAogICAgICA6ZGVmYXVsdCAoY2FyIGNhbmRpZGF0ZXMp CiAgICAgIDs7IEFkZCBpc2VhcmNoLXN0cmluZyBhcyBpbml0aWFsIGlucHV0IGlmIHN0YXJ0aW5n IGZyb20gaXNlYXJjaAogICAgICA6aW5pdGlhbCAob3IgaW5pdGlhbCAoYW5kIGlzZWFyY2gtbW9k ZSBpc2VhcmNoLXN0cmluZykpCiAgICAgIDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0 aW9uKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQta2VlcC1saW5lcwoKKGRlZnN1YnN0IGNv bnN1bHQtLWtlZXAtbGluZXMtcmVwbGFjZSAoY29udGVudCAmb3B0aW9uYWwgcG9zKQogICJSZXBs YWNlIGJ1ZmZlciBjb250ZW50IHdpdGggQ09OVEVOVCBhbmQgbW92ZSBwb2ludCB0byBQT1MuIgog IChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQogIChpbnNlcnQgY29udGVu dCkKICAoZ290by1jaGFyIChvciBwb3MgKHBvaW50LW1pbikpKSkKCihkZWZ1biBjb25zdWx0LS1r ZWVwLWxpbmVzLXN0YXRlIChmaWx0ZXIpCiAgIlN0YXRlIGZ1bmN0aW9uIGZvciBgY29uc3VsdC1r ZWVwLWxpbmVzJyB3aXRoIEZJTFRFUiBmdW5jdGlvbi4iCiAgKGxldCAoKGxpbmVzKQogICAgICAg IChidWZmZXItb3JpZyAoY3VycmVudC1idWZmZXIpKQogICAgICAgIChmb250LWxvY2stb3JpZyBm b250LWxvY2stbW9kZSkKICAgICAgICAocG9pbnQtb3JpZyAocG9pbnQpKQogICAgICAgIChjb250 ZW50LW9yaWcgKGJ1ZmZlci1zdHJpbmcpKQogICAgICAgIChsYXN0LWlucHV0KSkKICAgIChjb25z dWx0LS1lYWNoLWxpbmUgYmVnIGVuZAogICAgICAocHVzaCAoYnVmZmVyLXN1YnN0cmluZyBiZWcg ZW5kKSBsaW5lcykpCiAgICAoc2V0cSBsaW5lcyAobnJldmVyc2UgbGluZXMpKQogICAgKGxhbWJk YSAoaW5wdXQgcmVzdG9yZSkKICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyLW9yaWcK ICAgICAgICA7OyBSZXN0b3JpbmcgY29udGVudCBhbmQgcG9pbnQgcG9zaXRpb24KICAgICAgICAo d2hlbiAoYW5kIHJlc3RvcmUgbGFzdC1pbnB1dCkKICAgICAgICAgIDs7IE5vIHVuZG8gcmVjb3Jk aW5nLCBtb2RpZmljYXRpb24gaG9va3MsIGJ1ZmZlciBtb2RpZmllZC1zdGF0dXMKICAgICAgICAg ICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zIChjb25zdWx0LS1rZWVwLWxpbmVzLXJlcGxhY2Ug Y29udGVudC1vcmlnIHBvaW50LW9yaWcpKSkKICAgICAgICA7OyBDb21taXR0aW5nIG9yIG5ldyBp bnB1dCBwcm92aWRlZCAtPiBVcGRhdGUKICAgICAgICAod2hlbiAoYW5kIGlucHV0IDs7IElucHV0 IGhhcyBiZWVuIHBvdmlkZWQKICAgICAgICAgICAgICAgICAgIChvcgogICAgICAgICAgICAgICAg ICAgIDs7IENvbW1pdHRpbmcsIGJ1dCBub3Qgd2l0aCBlbXB0eSBpbnB1dAogICAgICAgICAgICAg ICAgICAgIChhbmQgcmVzdG9yZSAobm90IChzdHJpbmctbWF0Y2gtcCAiXiE/ID8kIiBpbnB1dCkp KQogICAgICAgICAgICAgICAgICAgIDs7IElucHV0IGhhcyBjaGFuZ2VkCiAgICAgICAgICAgICAg ICAgICAgKG5vdCAoZXF1YWwgaW5wdXQgbGFzdC1pbnB1dCkpKSkKICAgICAgICAgIChsZXQgKChm aWx0ZXJlZC1jb250ZW50CiAgICAgICAgICAgICAgICAgKGlmIChzdHJpbmctbWF0Y2gtcCAiXiE/ ID8kIiBpbnB1dCkKICAgICAgICAgICAgICAgICAgICAgOzsgU3BlY2lhbCBjYXNlIHRoZSBlbXB0 eSBpbnB1dCBmb3IgcGVyZm9ybWFuY2UuCiAgICAgICAgICAgICAgICAgICAgIDs7IE90aGVyd2lz ZSBpdCBjb3VsZCBoYXBwZW4gdGhhdCB0aGUgbWluaWJ1ZmZlciBpcyBlbXB0eSwKICAgICAgICAg ICAgICAgICAgICAgOzsgYnV0IHRoZSBidWZmZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQuCiAgICAg ICAgICAgICAgICAgICAgIGNvbnRlbnQtb3JpZwogICAgICAgICAgICAgICAgICAgKGlmIHJlc3Rv cmUKICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWpvaW4gKGZ1bmNhbGwgZmlsdGVyIGlu cHV0IGxpbmVzKSAiXG4iKQogICAgICAgICAgICAgICAgICAgICAod2hpbGUtbm8taW5wdXQKICAg ICAgICAgICAgICAgICAgICAgICA7OyBIZWF2eSBjb21wdXRhdGlvbiBpcyBpbnRlcnJ1cHRpYmxl IGlmICpub3QqIGNvbW1pdHRpbmchCiAgICAgICAgICAgICAgICAgICAgICAgOzsgQWxsb2NhdGUg bmV3IHN0cmluZyBjYW5kaWRhdGVzIHNpbmNlIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBtdXRhdGVz IQogICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctam9pbiAoZnVuY2FsbCBmaWx0ZXIgaW5w dXQgKG1hcGNhciAjJ2NvcHktc2VxdWVuY2UgbGluZXMpKSAiXG4iKSkpKSkpCiAgICAgICAgICAg ICh3aGVuIChzdHJpbmdwIGZpbHRlcmVkLWNvbnRlbnQpCiAgICAgICAgICAgICAgKHdoZW4gZm9u dC1sb2NrLW1vZGUgKGZvbnQtbG9jay1tb2RlIC0xKSkKICAgICAgICAgICAgICAoaWYgcmVzdG9y ZQogICAgICAgICAgICAgICAgICAoYXRvbWljLWNoYW5nZS1ncm91cAogICAgICAgICAgICAgICAg ICAgIDs7IERpc2FibGUgbW9kaWZpY2F0aW9uIGhvb2tzIGZvciBwZXJmb3JtYW5jZQogICAgICAg ICAgICAgICAgICAgIChsZXQgKChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKICAgICAg ICAgICAgICAgICAgICAgIChjb25zdWx0LS1rZWVwLWxpbmVzLXJlcGxhY2UgZmlsdGVyZWQtY29u dGVudCkpKQogICAgICAgICAgICAgICAgOzsgTm8gdW5kbyByZWNvcmRpbmcsIG1vZGlmaWNhdGlv biBob29rcywgYnVmZmVyIG1vZGlmaWVkLXN0YXR1cwogICAgICAgICAgICAgICAgKHdpdGgtc2ls ZW50LW1vZGlmaWNhdGlvbnMKICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWtlZXAtbGluZXMt cmVwbGFjZSBmaWx0ZXJlZC1jb250ZW50KQogICAgICAgICAgICAgICAgICAoc2V0cSBsYXN0LWlu cHV0IGlucHV0KSkpKSkpCiAgICAgICAgOzsgUmVzdG9yZSBmb250LWxvY2sKICAgICAgICAod2hl biAoYW5kIHJlc3RvcmUgZm9udC1sb2NrLW9yaWcgKG5vdCBmb250LWxvY2stbW9kZSkpCiAgICAg ICAgICAoZm9udC1sb2NrLW1vZGUpKSkpKSkKCihkZWZ1biBjb25zdWx0LWtlZXAtbGluZXMgKCZv cHRpb25hbCBmaWx0ZXIgaW5pdGlhbCkKICAiU2VsZWN0IGEgc3Vic2V0IG9mIHRoZSBsaW5lcyBp biB0aGUgY3VycmVudCBidWZmZXIgd2l0aCBsaXZlIHByZXZpZXcuCgpUaGUgbGluZXMgc2VsZWN0 ZWQgYXJlIHRob3NlIHRoYXQgbWF0Y2ggdGhlIG1pbmlidWZmZXIgaW5wdXQuClRoaXMgY29tbWFu ZCBvYmV5cyBuYXJyb3dpbmcuCkZJTFRFUiBpcyB0aGUgZmlsdGVyIGZ1bmN0aW9uLgpJTklUSUFM IGlzIHRoZSBpbml0aWFsIGlucHV0LiIKICA7OyBVc2UgY29uc3VsdC1sb2NhdGlvbiBjb21wbGV0 aW9uIGNhdGVnb3J5IHdoZW4gZmlsdGVyaW5nIGxpbmVzCiAgKGludGVyYWN0aXZlIChsaXN0IChj b25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1kaXNwYXRjaCAnY29uc3VsdC1sb2NhdGlvbiAnaGln aGxpZ2h0KSkpCiAgKGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQogIChiYXJmLWlmLWJ1ZmZl ci1yZWFkLW9ubHkpCiAgKGNvbnN1bHQtLXdpdGgtaW5jcmVhc2VkLWdjCiAgIChjb25zdWx0LS1m b250aWZ5LWFsbCkKICAgKGNvbnN1bHQtLXByb21wdAogICAgIktlZXAgbGluZXM6ICIKICAgIDpp bml0aWFsIGluaXRpYWwKICAgIDpoaXN0b3J5ICdjb25zdWx0LS1rZWVwLWxpbmVzLWhpc3RvcnkK ICAgIDpwcmV2aWV3IChjb25zdWx0LS1rZWVwLWxpbmVzLXN0YXRlIGZpbHRlcikpKSkKCjs7Ozs7 IENvbW1hbmQ6IGNvbnN1bHQtZm9jdXMtbGluZXMKCihkZWZ1biBjb25zdWx0LS1mb2N1cy1saW5l cy1zdGF0ZSAoZmlsdGVyKQogICJTdGF0ZSBmdW5jdGlvbiBmb3IgYGNvbnN1bHQtZm9jdXMtbGlu ZXMnIHdpdGggRklMVEVSIGZ1bmN0aW9uLiIKICAobGV0ICgobGluZXMpIChvdmVybGF5cykgKGxh c3QtaW5wdXQpKQogICAgKGNvbnN1bHQtLWVhY2gtbGluZSBiZWcgZW5kCiAgICAgIChwdXNoIChi dWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpIGxpbmVzKQogICAgICAocHVzaCAobWFrZS1vdmVybGF5 IGJlZyAoMSsgZW5kKSkgb3ZlcmxheXMpKQogICAgKGxhbWJkYSAoaW5wdXQgcmVzdG9yZSkKICAg ICAgOzsgTmV3IGlucHV0IHByb3ZpZGVkIC0+IFVwZGF0ZQogICAgICAod2hlbiAoYW5kIGlucHV0 IChub3QgKGVxdWFsIGlucHV0IGxhc3QtaW5wdXQpKSkKICAgICAgICAoaWYgKHN0cmluZy1tYXRj aC1wICJeIT8gPyQiIGlucHV0KQogICAgICAgICAgICA7OyBTcGVjaWFsIGNhc2UgdGhlIGVtcHR5 IGlucHV0IGZvciBwZXJmb3JtYW5jZS4KICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAg KGRvbGlzdCAob3Ygb3ZlcmxheXMpCiAgICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2lu dmlzaWJsZSBuaWwpKQogICAgICAgICAgICAgIChzZXRxIGxhc3QtaW5wdXQgaW5wdXQpKQogICAg ICAgICAgKGxldCogKChub3QgKHN0cmluZy1wcmVmaXgtcCAiISAiIGlucHV0KSkKICAgICAgICAg ICAgICAgICAoc3RyaXBwZWQgKHN0cmluZy1yZW1vdmUtcHJlZml4ICIhICIgaW5wdXQpKQogICAg ICAgICAgICAgICAgIDs7IEhlYXZ5IGNvbXB1dGF0aW9uIGlzIGludGVycnVwdGlibGUgaWYgKm5v dCogY29tbWl0dGluZyEKICAgICAgICAgICAgICAgICAoaHQgKGlmIHJlc3RvcmUKICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25zdWx0LS1zdHJpbmctaGFzaCAoZnVuY2FsbCBmaWx0ZXIgc3Ry aXBwZWQgbGluZXMpKQogICAgICAgICAgICAgICAgICAgICAgICh3aGlsZS1uby1pbnB1dAogICAg ICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLXN0cmluZy1oYXNoIChmdW5jYWxsIGZpbHRl ciBzdHJpcHBlZCBsaW5lcykpKSkpKQogICAgICAgICAgICAod2hlbiAoaGFzaC10YWJsZS1wIGh0 KQogICAgICAgICAgICAgIChsZXQgKChvdiBvdmVybGF5cykgKGxpIGxpbmVzKSkKICAgICAgICAg ICAgICAgICh3aGlsZSBvdgogICAgICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgKGNhciBvdikg J2ludmlzaWJsZSAoZXEgbm90IChnZXRoYXNoIChjYXIgbGkpIGh0KSkpCiAgICAgICAgICAgICAg ICAgIChzZXRxIGxpIChjZHIgbGkpIG92IChjZHIgb3YpKSkpCiAgICAgICAgICAgICAgKHNldHEg bGFzdC1pbnB1dCBpbnB1dCkpKSkpCiAgICAgIDs7IFN1Y2Vzc2Z1bGx5IHRlcm1pbmF0ZWQgLT4g UmVtZW1iZXIgaW52aXNpYmxlIG92ZXJsYXlzCiAgICAgICh3aGVuIChhbmQgaW5wdXQgcmVzdG9y ZSkKICAgICAgICAoZG9saXN0IChvdiBvdmVybGF5cykKICAgICAgICAgIChpZiAob3ZlcmxheS1n ZXQgb3YgJ2ludmlzaWJsZSkKICAgICAgICAgICAgICAocHVzaCBvdiBjb25zdWx0LS1mb2N1cy1s aW5lcy1vdmVybGF5cykKICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG92KSkpCiAgICAgICAg KHNldHEgb3ZlcmxheXMgbmlsKSkKICAgICAgOzsgV2hlbiB0ZXJtaW5hdGluZyAtPiBEZXN0cm95 IHJlbWFpbmluZyBvdmVybGF5cwogICAgICAod2hlbiByZXN0b3JlCiAgICAgICAgKG1hcGMgIydk ZWxldGUtb3ZlcmxheSBvdmVybGF5cykpKSkpCgooZGVmdW4gY29uc3VsdC1mb2N1cy1saW5lcyAo Jm9wdGlvbmFsIHNob3cgZmlsdGVyIGluaXRpYWwpCiAgIkhpZGUgb3Igc2hvdyBsaW5lcyBhY2Nv cmRpbmcgdG8gRklMVEVSIGZ1bmN0aW9uLgoKT3B0aW9uYWxseSBJTklUSUFMIGlucHV0IGNhbiBi ZSBwcm92aWRlZC4KU0hPVyBtdXN0IGJlIHQgaW4gb3JkZXIgdG8gc2hvdyB0aGUgaGlkZGVuIGxp bmVzLiIKICAoaW50ZXJhY3RpdmUKICAgOzsgVXNlIGNvbnN1bHQtbG9jYXRpb24gY29tcGxldGlv biBjYXRlZ29yeSB3aGVuIGZpbHRlcmluZyBsaW5lcwogICAobGlzdCBjdXJyZW50LXByZWZpeC1h cmcgKGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyICdjb25zdWx0LWxvY2F0aW9uIG5pbCkpKQog IChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAoaWYgc2hvdwogICAgICAocHJvZ24KICAg ICAgICAobWFwYyAjJ2RlbGV0ZS1vdmVybGF5IGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlz KQogICAgICAgIChzZXRxIGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzIG5pbCkpCiAgICAo Y29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2MKICAgICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAg ICAgKGNvbnN1bHQtLXByb21wdAogICAgICAiRm9jdXMgb24gbGluZXM6ICIKICAgICAgOmluaXRp YWwgaW5pdGlhbAogICAgICA6aGlzdG9yeSAnY29uc3VsdC0ta2VlcC1saW5lcy1oaXN0b3J5CiAg ICAgIDpwcmV2aWV3IChjb25zdWx0LS1mb2N1cy1saW5lcy1zdGF0ZSBmaWx0ZXIpKSkpKQoKOzs7 OzsgQ29tbWFuZDogY29uc3VsdC1nb3RvLWxpbmUKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25z dWx0LWdvdG8tbGluZSAoKQogICJSZWFkIGxpbmUgbnVtYmVyIGFuZCBqdW1wIHRvIHRoZSBsaW5l IHdpdGggcHJldmlldy4KClRoZSBjb21tYW5kIHJlc3BlY3RzIG5hcnJvd2luZyBhbmQgdGhlIHNl dHRpbmdzCmBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzJyBhbmQgYGNvbnN1bHQtbGluZS1udW1i ZXJzLXdpZGVuJy4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZl cikKICAoY29uc3VsdC0tbG9jYWwtbGV0ICgoZGlzcGxheS1saW5lLW51bWJlcnMgY29uc3VsdC1n b3RvLWxpbmUtbnVtYmVycykKICAgICAgICAgICAgICAgICAgICAgICAoZGlzcGxheS1saW5lLW51 bWJlcnMtd2lkZW4gY29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4pKQogICAgKHdoaWxlIChsZXQg KChyZXQgKGNvbnN1bHQtLXByb21wdAogICAgICAgICAgICAgICAgICAgICAgICJHbyB0byBsaW5l OiAiCiAgICAgICAgICAgICAgICAgICAgICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9z aXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgOnRyYW5zZm9ybQogICAgICAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKF8gc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0 ICgobGluZSAoYW5kIHN0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzdHJpbmctbWF0Y2gtcCAiXltbOmRpZ2l0Ol1dKyQiIHN0cikKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLXRvLW51bWJlciBzdHIp KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcyAoYW5kIGxpbmUgKGNv bnN1bHQtLWxpbmUtcG9zaXRpb24gbGluZSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg KGFuZCAoY29uc3VsdC0taW4tcmFuZ2UtcCBwb3MpIHBvcykpKSkpKQogICAgICAgICAgICAgKGlm LWxldCAocG9zIChjYXIgcmV0KSkKICAgICAgICAgICAgICAgICAoY29uc3VsdC0tanVtcCBwb3Mp CiAgICAgICAgICAgICAgIChtaW5pYnVmZmVyLW1lc3NhZ2UgKGlmIChzdHJpbmctbWF0Y2gtcCAi XltbOmRpZ2l0Ol1dKyQiIChjZHIgcmV0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkxpbmUgbnVtYmVyIG91dCBvZiByYW5nZS4iCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxlYXNlIGVudGVyIGEgbnVtYmVyLiIpKQogICAgICAgICAgICAg ICB0KSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtcmVjZW50LWZpbGUKCihkZWZ1biBjb25z dWx0LS1yZWNlbnQtZmlsZS1yZWFkICgpCiAgIlJlYWQgcmVjZW50IGZpbGUgdmlhIGBjb21wbGV0 aW5nLXJlYWQnLiIKICAoY29uc3VsdC0tcmVhZAogICAiRmluZCByZWNlbnQgZmlsZTogIgogICAo b3IgKG1hcGNhciAjJ2FiYnJldmlhdGUtZmlsZS1uYW1lIHJlY2VudGYtbGlzdCkKICAgICAgICh1 c2VyLWVycm9yICJObyByZWNlbnQgZmlsZXMiKSkKICAgOnNvcnQgbmlsCiAgIDpyZXF1aXJlLW1h dGNoIHQKICAgOmNhdGVnb3J5ICdmaWxlCiAgIDpoaXN0b3J5ICdmaWxlLW5hbWUtaGlzdG9yeSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWNlbnQtZmlsZSAoKQogICJGaW5kIHJl Y2VudCB1c2luZyBgY29tcGxldGluZy1yZWFkJy4iCiAgKGludGVyYWN0aXZlKQogIChmaW5kLWZp bGUgKGNvbnN1bHQtLXJlY2VudC1maWxlLXJlYWQpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBj b25zdWx0LXJlY2VudC1maWxlLW90aGVyLWZyYW1lICgpCiAgIkZpbmQgcmVjZW50IHVzaW5nIGBj b21wbGV0aW5nLXJlYWQnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGZpbmQtZmlsZS1vdGhlci1mcmFt ZSAoY29uc3VsdC0tcmVjZW50LWZpbGUtcmVhZCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNv bnN1bHQtcmVjZW50LWZpbGUtb3RoZXItd2luZG93ICgpCiAgIkZpbmQgcmVjZW50IHVzaW5nIGBj b21wbGV0aW5nLXJlYWQnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGZpbmQtZmlsZS1vdGhlci13aW5k b3cgKGNvbnN1bHQtLXJlY2VudC1maWxlLXJlYWQpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQt ZmlsZS1leHRlcm5hbGx5Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1maWxlLWV4dGVy bmFsbHkgKGZpbGUpCiAgIk9wZW4gRklMRSBleHRlcm5hbGx5IHVzaW5nIHRoZSBkZWZhdWx0IGFw cGxpY2F0aW9uIG9mIHRoZSBzeXN0ZW0uIgogIChpbnRlcmFjdGl2ZSAiZk9wZW4gZXh0ZXJuYWxs eTogIikKICAoaWYgKGFuZCAoZXEgc3lzdGVtLXR5cGUgJ3dpbmRvd3MtbnQpCiAgICAgICAgICAg KGZib3VuZHAgJ3czMi1zaGVsbC1leGVjdXRlKSkKICAgICAgKHczMi1zaGVsbC1leGVjdXRlICJv cGVuIiBmaWxlKQogICAgKGNhbGwtcHJvY2VzcyAocGNhc2Ugc3lzdGVtLXR5cGUKICAgICAgICAg ICAgICAgICAgICAoJ2RhcndpbiAib3BlbiIpCiAgICAgICAgICAgICAgICAgICAgKCdjeWd3aW4g ImN5Z3N0YXJ0IikKICAgICAgICAgICAgICAgICAgICAoXyAieGRnLW9wZW4iKSkKICAgICAgICAg ICAgICAgICAgbmlsIDAgbmlsCiAgICAgICAgICAgICAgICAgIChleHBhbmQtZmlsZS1uYW1lIGZp bGUpKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWNvbXBsZXRpb24taW4tcmVnaW9uCgo7OyBV c2UgbWluaWJ1ZmZlciBjb21wbGV0aW9uIGFzIHRoZSBVSSBmb3IgY29tcGxldGlvbi1hdC1wb2lu dAo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1jb21wbGV0aW9uLWluLXJlZ2lvbiAoc3Rh cnQgZW5kIGNvbGxlY3Rpb24gJm9wdGlvbmFsIHByZWRpY2F0ZSkKICAiUHJvbXB0IGZvciBjb21w bGV0aW9uIG9mIHJlZ2lvbiBpbiB0aGUgbWluaWJ1ZmZlciBpZiBub24tdW5pcXVlLgoKVGhlIGZ1 bmN0aW9uIGlzIGNhbGxlZCB3aXRoIDQgYXJndW1lbnRzOiBTVEFSVCBFTkQgQ09MTEVDVElPTiBQ UkVESUNBVEUuClRoZSBhcmd1bWVudHMgYW5kIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBhcmUgYXMg c3BlY2lmaWVkIGZvcgpgY29tcGxldGlvbi1pbi1yZWdpb24nLiBVc2UgYXMgYSB2YWx1ZSBmb3Ig YGNvbXBsZXRpb24taW4tcmVnaW9uLWZ1bmN0aW9uJy4iCiAgKGxldCogKChpbml0aWFsIChidWZm ZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgc3RhcnQgZW5kKSkKICAgICAgICAgKGxpbWl0IChj YXIgKGNvbXBsZXRpb24tYm91bmRhcmllcyBpbml0aWFsIGNvbGxlY3Rpb24gcHJlZGljYXRlICIi KSkpCiAgICAgICAgIChtZXRhZGF0YSAoY29tcGxldGlvbi1tZXRhZGF0YSBpbml0aWFsIGNvbGxl Y3Rpb24gcHJlZGljYXRlKSkKICAgICAgICAgKGNhdGVnb3J5IChjb21wbGV0aW9uLW1ldGFkYXRh LWdldCBtZXRhZGF0YSAnY2F0ZWdvcnkpKQogICAgICAgICAoYWxsIChjb21wbGV0aW9uLWFsbC1j b21wbGV0aW9ucyBpbml0aWFsIGNvbGxlY3Rpb24gcHJlZGljYXRlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsZW5ndGggaW5pdGlhbCkpKQogICAgICAgICAoZXhp dC1zdGF0dXMgJ2ZpbmlzaGVkKQogICAgICAgICAoY29tcGxldGlvbgogICAgICAgICAgKGNvbmQK ICAgICAgICAgICAoKGF0b20gYWxsKSBuaWwpCiAgICAgICAgICAgKChhbmQgKGNvbnNwIGFsbCkg KGF0b20gKGNkciBhbGwpKSkKICAgICAgICAgICAgKHNldHEgZXhpdC1zdGF0dXMgJ3NvbGUpCiAg ICAgICAgICAgIChjb25jYXQgKHN1YnN0cmluZyBpbml0aWFsIDAgbGltaXQpIChjYXIgYWxsKSkp CiAgICAgICAgICAgKHQgKGxldCAoKGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkpCiAg ICAgICAgICAgICAgICAoaWYgKGVxIGNhdGVnb3J5ICdmaWxlKQogICAgICAgICAgICAgICAgICAg IDs7IFdoZW4gY29tcGxldGluZyBmaWxlcyB3aXRoIGNvbnN1bHQtY29tcGxldGlvbi1pbi1yZWdp b24sIHRoZSBwb2ludCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICA7OyBtaW5pYnVmZmVyIGdl dHMgcGxhY2VkIGluaXRpYWxseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsYXN0IHBhdGggY29t cG9uZW50LgogICAgICAgICAgICAgICAgICAgIDs7IEJ5IHVzaW5nIHRoZSBmaWxlbmFtZSBhcyBE SVIgYXJndW1lbnQgKHNlY29uZCBhcmd1bWVudCBvZiByZWFkLWZpbGUtbmFtZSksIGl0CiAgICAg ICAgICAgICAgICAgICAgOzsgc3RhcnRzIGF0IHRoZSBlbmQgb2YgbWluaWJ1ZmZlciBjb250ZW50 cywgYXMgZm9yIG90aGVyIHR5cGVzIG9mIGNvbXBsZXRpb24uCiAgICAgICAgICAgICAgICAgICAg OzsgSG93ZXZlciB0aGlzIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBzaW5jZSBpbml0aWFsIGRvZXMg bm90IG9ubHkgY29udGFpbiB0aGUKICAgICAgICAgICAgICAgICAgICA7OyBkaXJlY3RvcnksIGJ1 dCBhbHNvIHRoZSBmaWxlbmFtZS4KICAgICAgICAgICAgICAgICAgICAocmVhZC1maWxlLW5hbWUK ICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXRpb246ICIgaW5pdGlhbCBpbml0aWFsIHQgbmls IHByZWRpY2F0ZSkKICAgICAgICAgICAgICAgICAgKGNvbXBsZXRpbmctcmVhZAogICAgICAgICAg ICAgICAgICAgIkNvbXBsZXRpb246ICIgY29sbGVjdGlvbiBwcmVkaWNhdGUgdCBpbml0aWFsKSkp KSkpKQogICAgKGlmIChudWxsIGNvbXBsZXRpb24pCiAgICAgICAgKHByb2duIChtZXNzYWdlICJO byBjb21wbGV0aW9uIikgbmlsKQogICAgICAoZGVsZXRlLXJlZ2lvbiBzdGFydCBlbmQpCiAgICAg IChpbnNlcnQgKHN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGNvbXBsZXRpb24pKQogICAgICAod2hl bi1sZXQgKGV4aXQgKHBsaXN0LWdldCBjb21wbGV0aW9uLWV4dHJhLXByb3BlcnRpZXMgOmV4aXQt ZnVuY3Rpb24pKQogICAgICAgIChmdW5jYWxsIGV4aXQgY29tcGxldGlvbiBleGl0LXN0YXR1cykp CiAgICAgIHQpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtbW9kZS1jb21tYW5kCgooZGVmdW4g Y29uc3VsdC0tbW9kZS1uYW1lIChtb2RlKQogICJSZXR1cm4gbmFtZSBwYXJ0IG9mIE1PREUuIgog IChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKICAgImdsb2JhbC1cXCguKlxcKS1tb2RlIiAiXFwx IgogICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCiAgICAiXFwoLWdsb2JhbFxcKT8tbW9kZSQi ICIiCiAgICAoaWYgKGVxIG1vZGUgJ2MtbW9kZSkKICAgICAgICAiY2MiCiAgICAgIChzeW1ib2wt bmFtZSBtb2RlKSkKICAgICdmaXhlZGNhc2UpCiAgICdmaXhlZGNhc2UpKQoKKGRlZnVuIGNvbnN1 bHQtLW1vZGUtY29tbWFuZC1jYW5kaWRhdGVzIChtb2RlcykKICAiRXh0cmFjdCBjb21tYW5kcyBm cm9tIE1PREVTLgoKVGhlIGxpc3Qgb2YgZmVhdHVyZXMgaXMgc2VhcmNoZWQgZm9yIGZpbGVzIGJl bG9uZ2luZyB0byB0aGUgbW9kZXMuCkZyb20gdGhlc2UgZmlsZXMsIHRoZSBjb21tYW5kcyBhcmUg ZXh0cmFjdGVkLiIKICAobGV0KiAoKGNvbW1hbmQtZmlsdGVyIChjb25zdWx0LS1yZWdleHAtZmls dGVyIChzZXEtZmlsdGVyICMnc3RyaW5ncCBjb25zdWx0LW1vZGUtY29tbWFuZC1maWx0ZXIpKSkK ICAgICAgICAgKGZlYXR1cmUtZmlsdGVyIChzZXEtZmlsdGVyICMnc3ltYm9scCBjb25zdWx0LW1v ZGUtY29tbWFuZC1maWx0ZXIpKQogICAgICAgICAobWlub3ItaGFzaCAoY29uc3VsdC0tc3RyaW5n LWhhc2ggbWlub3ItbW9kZS1saXN0KSkKICAgICAgICAgKG1pbm9yLWxvY2FsLW1vZGVzIChzZXEt ZmlsdGVyIChsYW1iZGEgKG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChhbmQgKGdldGhhc2ggbSBtaW5vci1oYXNoKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb2NhbC12YXJpYWJsZS1pZi1zZXQtcCBtKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlcykpCiAgICAgICAgIChtaW5v ci1nbG9iYWwtbW9kZXMgKHNlcS1maWx0ZXIgKGxhbWJkYSAobSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGdldGhhc2ggbSBtaW5vci1oYXNoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm90IChsb2NhbC12 YXJpYWJsZS1pZi1zZXQtcCBtKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1vZGVzKSkKICAgICAgICAgKG1ham9yLW1vZGVzIChzZXEtcmVtb3ZlIChsYW1iZGEg KG0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRoYXNoIG0gbWlub3It aGFzaCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlcykpCiAgICAgICAg IChtYWpvci1wYXRocy1oYXNoIChjb25zdWx0LS1zdHJpbmctaGFzaCAobWFwY2FyICMnc3ltYm9s LWZpbGUgbWFqb3ItbW9kZXMpKSkKICAgICAgICAgKG1pbm9yLWxvY2FsLXBhdGhzLWhhc2ggKGNv bnN1bHQtLXN0cmluZy1oYXNoIChtYXBjYXIgIydzeW1ib2wtZmlsZSBtaW5vci1sb2NhbC1tb2Rl cykpKQogICAgICAgICAobWlub3ItZ2xvYmFsLXBhdGhzLWhhc2ggKGNvbnN1bHQtLXN0cmluZy1o YXNoIChtYXBjYXIgIydzeW1ib2wtZmlsZSBtaW5vci1nbG9iYWwtbW9kZXMpKSkKICAgICAgICAg KG1ham9yLW5hbWUtcmVnZXhwIChyZWdleHAtb3B0IChtYXBjYXIgIydjb25zdWx0LS1tb2RlLW5h bWUgbWFqb3ItbW9kZXMpKSkKICAgICAgICAgKG1pbm9yLWxvY2FsLW5hbWUtcmVnZXhwIChyZWdl eHAtb3B0IChtYXBjYXIgIydjb25zdWx0LS1tb2RlLW5hbWUgbWlub3ItbG9jYWwtbW9kZXMpKSkK ICAgICAgICAgKG1pbm9yLWdsb2JhbC1uYW1lLXJlZ2V4cCAocmVnZXhwLW9wdCAobWFwY2FyICMn Y29uc3VsdC0tbW9kZS1uYW1lIG1pbm9yLWdsb2JhbC1tb2RlcykpKQogICAgICAgICAoY29tbWFu ZHMpKQogICAgKGRvbGlzdCAoZmVhdHVyZSBsb2FkLWhpc3RvcnkgY29tbWFuZHMpCiAgICAgICh3 aGVuLWxldCAobmFtZSAoYWxpc3QtZ2V0ICdwcm92aWRlIGZlYXR1cmUpKQogICAgICAgIChsZXQq ICgocGF0aCAoY2FyIGZlYXR1cmUpKQogICAgICAgICAgICAgICAoZmlsZSAoZmlsZS1uYW1lLW5v bmRpcmVjdG9yeSBwYXRoKSkKICAgICAgICAgICAgICAgKGtleSAoY29uZAogICAgICAgICAgICAg ICAgICAgICAoKG1lbXEgbmFtZSBmZWF0dXJlLWZpbHRlcikgbmlsKQogICAgICAgICAgICAgICAg ICAgICAoKG9yIChnZXRoYXNoIHBhdGggbWFqb3ItcGF0aHMtaGFzaCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgbWFqb3ItbmFtZS1yZWdleHAgZmlsZSkpCiAgICAg ICAgICAgICAgICAgICAgICA/bSkKICAgICAgICAgICAgICAgICAgICAgKChvciAoZ2V0aGFzaCBw YXRoIG1pbm9yLWxvY2FsLXBhdGhzLWhhc2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0 cmluZy1tYXRjaC1wIG1pbm9yLWxvY2FsLW5hbWUtcmVnZXhwIGZpbGUpKQogICAgICAgICAgICAg ICAgICAgICAgP2wpCiAgICAgICAgICAgICAgICAgICAgICgob3IgKGdldGhhc2ggcGF0aCBtaW5v ci1nbG9iYWwtcGF0aHMtaGFzaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLW1h dGNoLXAgbWlub3ItZ2xvYmFsLW5hbWUtcmVnZXhwIGZpbGUpKQogICAgICAgICAgICAgICAgICAg ICAgP2cpKSkpCiAgICAgICAgICAod2hlbiBrZXkKICAgICAgICAgICAgKGRvbGlzdCAoY21kIChj ZHIgZmVhdHVyZSkpCiAgICAgICAgICAgICAgKHdoZW4gKGFuZCAoY29uc3AgY21kKQogICAgICAg ICAgICAgICAgICAgICAgICAgKGVxIChjYXIgY21kKSAnZGVmdW4pCiAgICAgICAgICAgICAgICAg ICAgICAgICAoY29tbWFuZHAgKGNkciBjbWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgKG5v dCAoc3RyaW5nLW1hdGNoLXAgY29tbWFuZC1maWx0ZXIgKHN5bWJvbC1uYW1lIChjZHIgY21kKSkp KQogICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCAoZ2V0IChjZHIgY21kKSAnYnl0ZS1vYnNv bGV0ZS1pbmZvKSkpCiAgICAgICAgICAgICAgICAocHVzaCAoY29ucyAoY2RyIGNtZCkga2V5KSBj b21tYW5kcykpKSkpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbW9kZS1jb21t YW5kICgmcmVzdCBtb2RlcykKICAiUnVuIGEgY29tbWFuZCBmcm9tIGFueSBvZiB0aGUgZ2l2ZW4g TU9ERVMuCgpJZiBubyBNT0RFUyBhcmUgc3BlY2lmaWVkLCB1c2UgY3VycmVudGx5IGFjdGl2ZSBt YWpvciBhbmQgbWlub3IgbW9kZXMuIgogIChpbnRlcmFjdGl2ZSkKICAodW5sZXNzIG1vZGVzCiAg ICAoc2V0cSBtb2RlcyAoY29ucyBtYWpvci1tb2RlCiAgICAgICAgICAgICAgICAgICAgICAoc2Vx LWZpbHRlciAobGFtYmRhIChtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YW5kIChib3VuZHAgbSkgKHN5bWJvbC12YWx1ZSBtKSkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtaW5vci1tb2RlLWxpc3QpKSkpCiAgKGNvbW1hbmQtZXhlY3V0ZQogICAoaW50 ZXJuCiAgICAoY29uc3VsdC0tcmVhZAogICAgICJNb2RlIGNvbW1hbmQ6ICIKICAgICAoY29uc3Vs dC0tbW9kZS1jb21tYW5kLWNhbmRpZGF0ZXMgbW9kZXMpCiAgICAgOnByZWRpY2F0ZQogICAgIChs YW1iZGEgKGNhbmQpCiAgICAgICAoaWYgY29uc3VsdC0tbmFycm93CiAgICAgICAgICAgKD0gKGNk ciBjYW5kKSBjb25zdWx0LS1uYXJyb3cpCiAgICAgICAgICgvPSAoY2RyIGNhbmQpID9nKSkpCiAg ICAgOm5hcnJvdyAnKCg/bSAuICJNYWpvciIpCiAgICAgICAgICAgICAgICg/bCAuICJMb2NhbCBN aW5vciIpCiAgICAgICAgICAgICAgICg/ZyAuICJHbG9iYWwgTWlub3IiKSkKICAgICA6cmVxdWly ZS1tYXRjaCB0CiAgICAgOmhpc3RvcnkgJ2NvbnN1bHQtLW1vZGUtY29tbWFuZC1oaXN0b3J5CiAg ICAgOmNhdGVnb3J5ICdjb21tYW5kKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC15YW5rCgoo ZGVmdW4gY29uc3VsdC0teWFuay1yZWFkICgpCiAgIk9wZW4ga2lsbCByaW5nIG1lbnUgYW5kIHJl dHVybiBzZWxlY3RlZCB0ZXh0LiIKICAoY29uc3VsdC0tcmVhZAogICAiWWFuayB0ZXh0OiAiCiAg IChjb25zdWx0LS1yZW1vdmUtZHVwcyBraWxsLXJpbmcpCiAgIDpoaXN0b3J5IHQgOzsgZGlzYWJs ZSBoaXN0b3J5CiAgIDpzb3J0IG5pbAogICA6Y2F0ZWdvcnkgJ2NvbnN1bHQteWFuawogICA6cmVx dWlyZS1tYXRjaCB0CiAgIDpwcmV2aWV3CiAgIDs7IElmIHByZXZpb3VzIGNvbW1hbmQgaXMgeWFu aywgaGlkZSBwcmV2aW91c2x5IHlhbmtlZCB0ZXh0CiAgIChsZXQqICgob3YpIChwdCAocG9pbnQp KSAobWsgKG9yIChhbmQgKGVxIGxhc3QtY29tbWFuZCAneWFuaykgKG1hcmsgdCkpIHB0KSkpCiAg ICAgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICAgKGlmIHJlc3RvcmUKICAgICAgICAgICAo d2hlbiBvdiAoZGVsZXRlLW92ZXJsYXkgb3YpKQogICAgICAgICAodW5sZXNzIG92IChzZXRxIG92 IChjb25zdWx0LS1vdmVybGF5IChtaW4gcHQgbWspIChtYXggcHQgbWspICdpbnZpc2libGUgdCkp KQogICAgICAgICA7OyBVc2UgYGFkZC1mYWNlLXRleHQtcHJvcGVydHknIG9uIGEgY29weSBvZiAi Y2FuZCBpbiBvcmRlciB0byBtZXJnZSBmYWNlIHByb3BlcnRpZXMKICAgICAgICAgKHNldHEgY2Fu ZCAoY29weS1zZXF1ZW5jZSBjYW5kKSkKICAgICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkg MCAobGVuZ3RoIGNhbmQpICdjb25zdWx0LXByZXZpZXcteWFuayB0IGNhbmQpCiAgICAgICAgIDs7 IFVzZSB0aGUgYGJlZm9yZS1zdHJpbmcnIHByb3BlcnR5IHNpbmNlIHRoZSBvdmVybGF5IG1pZ2h0 IGJlIGVtcHR5LgogICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2JlZm9yZS1zdHJpbmcgY2FuZCkp KSkpKQoKOzsgSW5zZXJ0IHNlbGVjdGVkIHRleHQuCjs7IEFkYXB0ZWQgZnJvbSB0aGUgRW1hY3Mg eWFuayBmdW5jdGlvbi4KOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQteWFuayAoKQogICJT ZWxlY3QgdGV4dCBmcm9tIHRoZSBraWxsIHJpbmcgYW5kIGluc2VydCBpdC4iCiAgKGludGVyYWN0 aXZlKQogIChsZXQgKCh0ZXh0IChjb25zdWx0LS15YW5rLXJlYWQpKSkKICAgIChzZXRxIHlhbmst d2luZG93LXN0YXJ0ICh3aW5kb3ctc3RhcnQpKQogICAgKHB1c2gtbWFyaykKICAgIChpbnNlcnQt Zm9yLXlhbmsgdGV4dCkKICAgIChzZXRxIHRoaXMtY29tbWFuZCAneWFuaykKICAgIG5pbCkpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC15YW5rLXBvcCAoJm9wdGlvbmFsIGFyZykKICAi SWYgdGhlcmUgaXMgYSByZWNlbnQgeWFuayBhY3QgbGlrZSBgeWFuay1wb3AnLgoKT3RoZXJ3aXNl IHNlbGVjdCB0ZXh0IGZyb20gdGhlIGtpbGwgcmluZyBhbmQgaW5zZXJ0IGl0LgpTZWUgYHlhbmst cG9wJyBmb3IgdGhlIG1lYW5pbmcgb2YgQVJHLiIKICAoaW50ZXJhY3RpdmUgIipwIikKICAoaWYg KGVxIGxhc3QtY29tbWFuZCAneWFuaykKICAgICAgKHlhbmstcG9wIChvciBhcmcgMSkpCiAgICAo Y29uc3VsdC15YW5rKSkpCgo7OyBSZXBsYWNlIGp1c3QteWFua2VkIHRleHQgd2l0aCBzZWxlY3Rl ZCB0ZXh0Lgo7OyBBZGFwdGVkIGZyb20gdGhlIEVtYWNzIHlhbmstcG9wIGZ1bmN0aW9uLgo7Ozsj IyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC15YW5rLXJlcGxhY2UgKCkKICAiU2VsZWN0IHRleHQg ZnJvbSB0aGUga2lsbCByaW5nLgoKSWYgdGhlcmUgd2FzIG5vIHJlY2VudCB5YW5rLCBpbnNlcnQg dGhlIHRleHQuCk90aGVyd2lzZSByZXBsYWNlIHRoZSBqdXN0LXlhbmtlZCB0ZXh0IHdpdGggdGhl IHNlbGVjdGVkIHRleHQuIgogIChpbnRlcmFjdGl2ZSkKICAoaWYgKG5vdCAoZXEgbGFzdC1jb21t YW5kICd5YW5rKSkKICAgICAgKGNvbnN1bHQteWFuaykKICAgIChsZXQgKCh0ZXh0IChjb25zdWx0 LS15YW5rLXJlYWQpKQogICAgICAgICAgKGluaGliaXQtcmVhZC1vbmx5IHQpCiAgICAgICAgICAo cHQgKHBvaW50KSkKICAgICAgICAgIChtayAobWFyayB0KSkpCiAgICAgIChzZXRxIHRoaXMtY29t bWFuZCAneWFuaykKICAgICAgKGZ1bmNhbGwgKG9yIHlhbmstdW5kby1mdW5jdGlvbiAnZGVsZXRl LXJlZ2lvbikgKG1pbiBwdCBtaykgKG1heCBwdCBtaykpCiAgICAgIChzZXRxIHlhbmstdW5kby1m dW5jdGlvbiBuaWwpCiAgICAgIChzZXQtbWFya2VyIChtYXJrLW1hcmtlcikgcHQgKGN1cnJlbnQt YnVmZmVyKSkKICAgICAgKGluc2VydC1mb3IteWFuayB0ZXh0KQogICAgICAoc2V0LXdpbmRvdy1z dGFydCAoc2VsZWN0ZWQtd2luZG93KSB5YW5rLXdpbmRvdy1zdGFydCB0KQogICAgICAoaWYgKDwg cHQgbWspCiAgICAgICAgICAoZ290by1jaGFyIChwcm9nMSAobWFyayB0KQogICAgICAgICAgICAg ICAgICAgICAgIChzZXQtbWFya2VyIChtYXJrLW1hcmtlcikgKHBvaW50KSAoY3VycmVudC1idWZm ZXIpKSkpKSkpCiAgbmlsKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1yZWdpc3RlcgoKOzs7IyMj YXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0ZXItd2luZG93IChidWZmZXIgJm9wdGlvbmFs IHNob3ctZW1wdHkpCiAgIkVuaGFuY2VkIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGByZWdpc3Rl ci1wcmV2aWV3Jy4KCkJVRkZFUiBpcyB0aGUgd2luZG93IGJ1ZmZlci4KU0hPVy1FTVBUWSBtdXN0 IGJlIHQgaWYgdGhlIHdpbmRvdyBzaG91bGQgYmUgc2hvd24gZm9yIGFuIGVtcHR5IHJlZ2lzdGVy IGxpc3QuIgogIChsZXQgKChyZWdzIChzZXEtZmlsdGVyICMnY2RyIHJlZ2lzdGVyLWFsaXN0KSkp CiAgICAod2hlbiAob3Igc2hvdy1lbXB0eSByZWdzKQogICAgICAod2l0aC1jdXJyZW50LWJ1ZmZl ci13aW5kb3cgYnVmZmVyCiAgICAgICAgICAoY29ucyAnZGlzcGxheS1idWZmZXItYmVsb3ctc2Vs ZWN0ZWQKICAgICAgICAgICAgICAgICcoKHdpbmRvdy1oZWlnaHQgLiBmaXQtd2luZG93LXRvLWJ1 ZmZlcikKCSAgICAgICAgICAocHJlc2VydmUtc2l6ZSAuIChuaWwgLiB0KSkpKQogICAgICAgICAg bmlsCiAgICAgICAgKHNldHEtbG9jYWwgY3Vyc29yLWluLW5vbi1zZWxlY3RlZC13aW5kb3dzIG5p bCkKICAgICAgICAoc2V0cS1sb2NhbCBtb2RlLWxpbmUtZm9ybWF0IG5pbCkKICAgICAgICAoc2V0 cS1sb2NhbCB3aW5kb3ctbWluLWhlaWdodCAxKQogICAgICAgIChzZXEtZG8taW5kZXhlZAogICAg ICAgICAobGFtYmRhIChyZWcgaWR4KQogICAgICAgICAgIChsZXQgKChiZWcgKHBvaW50KSkpCiAg ICAgICAgICAgICAoaW5zZXJ0IChmdW5jYWxsIHJlZ2lzdGVyLXByZXZpZXctZnVuY3Rpb24gcmVn KSkKICAgICAgICAgICAgICh3aGVuICgvPSAwICglIGlkeCAyKSkKICAgICAgICAgICAgICAgKGNv bnN1bHQtLW92ZXJsYXkgYmVnIChwb2ludCkgJ2ZhY2UgJ2NvbnN1bHQtemVicmEpKSkpCiAgICAg ICAgIChzZXEtc29ydCAjJ2Nhci1sZXNzLXRoYW4tY2FyIHJlZ3MpKSkpKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LXJlZ2lzdGVyLWZvcm1hdCAocmVnKQogICJFbmhhbmNlZCBwcmV2 aWV3IG9mIHJlZ2lzdGVyIFJFRy4KClRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYHJlZ2lz dGVyLXByZXZpZXctZnVuY3Rpb24nLiIKICAoYXBwbHkgIydjb25jYXQKICAgICAgICAgKG1hcGNh ciAobGFtYmRhIChzKSAoY29uY2F0ICh0cnVuY2F0ZS1zdHJpbmctdG8td2lkdGggcyAxMDAgMCBu aWwgIuKApiIpICJcbiIpKQogICAgICAgICAgICAgICAgIChzcGxpdC1zdHJpbmcgKGNvbnN1bHQt LXJlZ2lzdGVyLWZvcm1hdCByZWcpICJcbiIpKSkpCgooZGVmdW4gY29uc3VsdC0tcmVnaXN0ZXIt Zm9ybWF0IChyZWcpCiAgIkZvcm1hdCByZWdpc3RlciBSRUcgZm9yIHByZXZpZXcuIgogIChwY2Fz ZS1sZXQgKChgKCxrZXkgLiAsdmFsKSByZWcpKQogICAgKGxldCogKChrZXktc3RyIChzaW5nbGUt a2V5LWRlc2NyaXB0aW9uIGtleSkpCiAgICAgICAgICAgKGZtdCAoZm9ybWF0ICIlJS0lZHMgIiAo bWF4IDMgKGxlbmd0aCBrZXktc3RyKSkpKSkKICAgICAgKGNvbmNhdAogICAgICAgKGZvcm1hdCBm bXQgKHByb3BlcnRpemUga2V5LXN0ciAnZmFjZSAnY29uc3VsdC1rZXkpKQogICAgICAgOzsgU3Bl Y2lhbCBwcmludGluZyBmb3IgY2VydGFpbiByZWdpc3RlciB0eXBlcwogICAgICAgKGNvbmQKICAg ICAgICA7OyBEaXNwbGF5IGZ1bGwgc3RyaW5nCiAgICAgICAgKChvciAoc3RyaW5ncCB2YWwpIChz dHJpbmdwIChjYXItc2FmZSB2YWwpKSkKICAgICAgICAgKHdoZW4gKGNvbnNwIHZhbCkKICAgICAg ICAgICAoc2V0cSB2YWwgKG1hcGNvbmNhdCAjJ2lkZW50aXR5IHZhbCAiXG4iKSkpCiAgICAgICAg IChtYXBjb25jYXQgIydpZGVudGl0eQogICAgICAgICAgICAgICAgICAgIChzZXEtdGFrZSAoc3Bs aXQtc3RyaW5nIChzdHJpbmctdHJpbSB2YWwpICJcbiIpIDMpCiAgICAgICAgICAgICAgICAgICAg KGZvcm1hdCBmbXQgIlxuIikpKQogICAgICAgIDs7IERpc3BsYXkgJ2ZpbGUtcXVlcnkKICAgICAg ICAoKGVxIChjYXItc2FmZSB2YWwpICdmaWxlLXF1ZXJ5KQogICAgICAgICAoZm9ybWF0ICIlcyBh dCBwb3NpdGlvbiAlZCIKICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSAoYWJicmV2aWF0ZS1m aWxlLW5hbWUgKGNhZHIgdmFsKSkgJ2ZhY2UgJ2NvbnN1bHQtZmlsZSkKICAgICAgICAgICAgICAg ICAoY2FkZHIgdmFsKSkpCiAgICAgICAgOzsgRGlzcGxheSBmdWxsIGxpbmUgb2YgYnVmZmVyCiAg ICAgICAgKChhbmQgKG1hcmtlcnAgdmFsKSAoYnVmZmVyLWxpdmUtcCAobWFya2VyLWJ1ZmZlciB2 YWwpKSkKICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKG1hcmtlci1idWZmZXIgdmFsKQog ICAgICAgICAgIChzYXZlLXJlc3RyaWN0aW9uCiAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24K ICAgICAgICAgICAgICAgKHdpZGVuKQogICAgICAgICAgICAgICAoZ290by1jaGFyIHZhbCkKICAg ICAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAgICAgKGNvbnN1bHQtLWZvcm1hdC1sb2Nh dGlvbiAoYnVmZmVyLW5hbWUpIChsaW5lLW51bWJlci1hdC1wb3MpKQogICAgICAgICAgICAgICAg KGNvbnN1bHQtLWxpbmUtd2l0aC1jdXJzb3IgdmFsKSkpKSkpCiAgICAgICAgOzsgRGVmYXVsdCBw cmludGluZyBmb3IgdGhlIG90aGVyIHR5cGVzCiAgICAgICAgKHQgKHJlZ2lzdGVyLWRlc2NyaWJl LW9uZWxpbmUga2V5KSkpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLXJlZ2lzdGVyLWFsaXN0ICgpCiAg IlJldHVybiByZWdpc3RlciBsaXN0IG9yIHJhaXNlIGFuIGVycm9yIGlmIHRoZSBsaXN0IGlzIGVt cHR5LiIKICA7OyBTb21ldGltZXMsIHJlZ2lzdGVycyBhcmUgbWFkZSB3aXRob3V0IGEgYGNkcicu CiAgOzsgU3VjaCByZWdpc3RlcnMgZG9uJ3QgZG8gYW55dGhpbmcsIGFuZCBjYW4gYmUgaWdub3Jl ZC4KICAob3IgKHNlcS1maWx0ZXIgIydjZHIgcmVnaXN0ZXItYWxpc3QpICh1c2VyLWVycm9yICJB bGwgcmVnaXN0ZXJzIGFyZSBlbXB0eSIpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0 LXJlZ2lzdGVyICgmb3B0aW9uYWwgYXJnKQogICJMb2FkIHJlZ2lzdGVyIGFuZCBlaXRoZXIganVt cCB0byBsb2NhdGlvbiBvciBpbnNlcnQgdGhlIHN0b3JlZCB0ZXh0LgoKVGhpcyBjb21tYW5kIGlz IHVzZWZ1bCB0byBzZWFyY2ggdGhlIHJlZ2lzdGVyIGNvbnRlbnRzLiBGb3IgcXVpY2sgYWNjZXNz IHRvCnJlZ2lzdGVycyBpdCBpcyBzdGlsbCByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHJlZ2lzdGVy IGZ1bmN0aW9ucwpgY29uc3VsdC1yZWdpc3Rlci1sb2FkJyBhbmQgYGNvbnN1bHQtcmVnaXN0ZXIt c3RvcmUnIG9yIHRoZSBidWlsdC1pbiBidWlsdC1pbgpyZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25z LiBUaGUgY29tbWFuZCBzdXBwb3J0cyBuYXJyb3dpbmcsIHNlZQpgY29uc3VsdC1yZWdpc3Rlci1u YXJyb3cnLiBNYXJrZXIgcG9zaXRpb25zIGFyZSBwcmV2aWV3ZWQuIFNlZQpganVtcC10by1yZWdp c3RlcicgYW5kIGBpbnNlcnQtcmVnaXN0ZXInIGZvciB0aGUgbWVhbmluZyBvZiBBUkcuIgogIChp bnRlcmFjdGl2ZSAiUCIpCiAgKGNvbnN1bHQtcmVnaXN0ZXItbG9hZAogICAoY29uc3VsdC0tcmVh ZAogICAgIlJlZ2lzdGVyOiAiCiAgICAobWFwY2FyIChsYW1iZGEgKHJlZykgKGNvbnMgKGNvbnN1 bHQtLXJlZ2lzdGVyLWZvcm1hdCByZWcpIChjYXIgcmVnKSkpCiAgICAgICAgICAgIChzb3J0IChj b25zdWx0LS1yZWdpc3Rlci1hbGlzdCkgIydjYXItbGVzcy10aGFuLWNhcikpCiAgICA6Y2F0ZWdv cnkgJ2NvbnN1bHQtcmVnaXN0ZXIKICAgIDpwcmV2aWV3CiAgICAobGV0ICgocHJldmlldyAoY29u c3VsdC0tcHJldmlldy1wb3NpdGlvbikpKQogICAgICAobGFtYmRhIChjYW5kIHJlc3RvcmUpCiAg ICAgICAgKGZ1bmNhbGwgcHJldmlldwogICAgICAgICAgICAgICAgIDs7IFByZXZpZXcgbWFya2Vy cwogICAgICAgICAgICAgICAgICh3aGVuLWxldCAocmVnIChnZXQtcmVnaXN0ZXIgY2FuZCkpCiAg ICAgICAgICAgICAgICAgICAoYW5kIChtYXJrZXJwIHJlZykgcmVnKSkKICAgICAgICAgICAgICAg ICByZXN0b3JlKSkpCiAgICA6bmFycm93CiAgICAoY29ucwogICAgIChsYW1iZGEgKGNhbmQpCiAg ICAgICAobGV0ICgocmVnIChnZXQtcmVnaXN0ZXIgKGNkciBjYW5kKSkpKQogICAgICAgICAoc2Vx LWZpbmQgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAgKGFuZAogICAgICAgICAgICAg ICAgICAgICAgKD0gKGNhciB4KSBjb25zdWx0LS1uYXJyb3cpCiAgICAgICAgICAgICAgICAgICAg ICAoZnVuY2FsbCAoY2FkZHIgeCkgcmVnKSkpCiAgICAgICAgICAgICAgICAgICBjb25zdWx0LXJl Z2lzdGVyLW5hcnJvdykpKQogICAgIChtYXBjYXIgKHBjYXNlLWxhbWJkYSAoYCgseCAseSAsXykp IChjb25zIHggeSkpCiAgICAgICAgICAgICBjb25zdWx0LXJlZ2lzdGVyLW5hcnJvdykpCiAgICA6 c29ydCBuaWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDpoaXN0b3J5IHQgOzsgZGlzYWJsZSBo aXN0b3J5CiAgICA6bG9va3VwICMnY29uc3VsdC0tbG9va3VwLWNkcikKICAgYXJnKSkKCjs7OyMj I2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXJlZ2lzdGVyLWxvYWQgKHJlZyAmb3B0aW9uYWwgYXJn KQogICJEbyB3aGF0IEkgbWVhbiB3aXRoIGEgUkVHLgoKRm9yIGEgd2luZG93IGNvbmZpZ3VyYXRp b24sIHJlc3RvcmUgaXQuIEZvciBhIG51bWJlciBvciB0ZXh0LCBpbnNlcnQgaXQuIEZvciBhCmxv Y2F0aW9uLCBqdW1wIHRvIGl0LiBTZWUgYGp1bXAtdG8tcmVnaXN0ZXInIGFuZCBgaW5zZXJ0LXJl Z2lzdGVyJyBmb3IgdGhlCm1lYW5pbmcgb2YgQVJHLiIKICAoaW50ZXJhY3RpdmUKICAgKGxpc3QK ICAgIChhbmQgKGNvbnN1bHQtLXJlZ2lzdGVyLWFsaXN0KQogICAgICAgICAocmVnaXN0ZXItcmVh ZC13aXRoLXByZXZpZXcgIkxvYWQgcmVnaXN0ZXI6ICIpKQogICAgY3VycmVudC1wcmVmaXgtYXJn KSkKICAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgIChqdW1wLXRvLXJlZ2lzdGVyIHJlZyBhcmcp CiAgICAodXNlci1lcnJvciAoaW5zZXJ0LXJlZ2lzdGVyIHJlZyBhcmcpKSkpCgooZGVmdW4gY29u c3VsdC0tcmVnaXN0ZXItYWN0aW9uIChhY3Rpb24tbGlzdCkKICAiUmVhZCByZWdpc3RlciBrZXkg YW5kIGV4ZWN1dGUgYWN0aW9uIGZyb20gQUNUSU9OLUxJU1QuCgpUaGlzIGZ1bmN0aW9uIGlzIGRl cml2ZWQgZnJvbSBgcmVnaXN0ZXItcmVhZC13aXRoLXByZXZpZXcnLiIKICAobGV0KiAoKGJ1ZmZl ciAiKlJlZ2lzdGVyIFByZXZpZXcqIikKICAgICAgICAgKHByZWZpeCAoY2FyIGFjdGlvbi1saXN0 KSkKICAgICAgICAgKGFjdGlvbi1saXN0IChjZHIgYWN0aW9uLWxpc3QpKQogICAgICAgICAoYWN0 aW9uIChjYXIgKG50aCAwIGFjdGlvbi1saXN0KSkpCiAgICAgICAgIChyZWcpCiAgICAgICAgIChw cmV2aWV3CiAgICAgICAgICAobGFtYmRhICgpCgkgICAgKHVubGVzcyAoZ2V0LWJ1ZmZlci13aW5k b3cgYnVmZmVyKQoJICAgICAgKHJlZ2lzdGVyLXByZXZpZXcgYnVmZmVyICdzaG93LWVtcHR5KQog ICAgICAgICAgICAgICh3aGVuLWxldCAod2luIChnZXQtYnVmZmVyLXdpbmRvdyBidWZmZXIpKQog ICAgICAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IHdpbgogICAgICAgICAgICAgICAg ICAobGV0ICgoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCiAgICAgICAgICAgICAgICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkKICAgICAgICAgICAgICAgICAgICAoaW5zZXJ0CiAgICAgICAgICAg ICAgICAgICAgIChwcm9wZXJ0aXplIChjb25jYXQgcHJlZml4ICI6ICAiKSAnZmFjZSAnY29uc3Vs dC1oZWxwKQogICAgICAgICAgICAgICAgICAgICAobWFwY29uY2F0CiAgICAgICAgICAgICAgICAg ICAgICAobGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0IChwcm9wZXJ0 aXplIChmb3JtYXQgIk0tJWMiIChjYXIgeCkpICdmYWNlICdjb25zdWx0LWtleSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiICIgKHByb3BlcnRpemUgKGNhZHIgeCkgJ2ZhY2UgJ2Nv bnN1bHQtaGVscCkpKQogICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLWxpc3QgIiAgIikpCiAg ICAgICAgICAgICAgICAgICAgKGZpdC13aW5kb3ctdG8tYnVmZmVyKSkpKSkpKQoJICh0aW1lciAo d2hlbiAobnVtYmVycCByZWdpc3Rlci1wcmV2aWV3LWRlbGF5KQoJICAgICAgICAgIChydW4td2l0 aC10aW1lciByZWdpc3Rlci1wcmV2aWV3LWRlbGF5IG5pbCBwcmV2aWV3KSkpCgkgKGhlbHAtY2hh cnMgKHNlcS1yZW1vdmUgIydnZXQtcmVnaXN0ZXIgKGNvbnMgaGVscC1jaGFyIGhlbHAtZXZlbnQt bGlzdCkpKSkKICAgICh1bndpbmQtcHJvdGVjdAogICAgICAgICh3aGlsZSAobm90IHJlZykKCSAg KHdoaWxlIChtZW1xIChyZWFkLWtleSAocHJvcGVydGl6ZSAoY2FkZHIgKGFzc3EgYWN0aW9uIGFj dGlvbi1saXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2ZhY2UgJ21pbmlidWZmZXItcHJvbXB0KSkKCQkgICAgICAgaGVscC1jaGFycykKICAgICAgICAg ICAgKGZ1bmNhbGwgcHJldmlldykpCiAgICAgICAgICAoY29uZAogICAgICAgICAgICgob3IgKGVx ID9cQy1nIGxhc3QtaW5wdXQtZXZlbnQpCiAgICAgICAgICAgICAgICAoZXEgJ2VzY2FwZSBsYXN0 LWlucHV0LWV2ZW50KQogICAgICAgICAgICAgICAgKGVxID9cQy1cWyBsYXN0LWlucHV0LWV2ZW50 KSkKICAgICAgICAgICAgKGtleWJvYXJkLXF1aXQpKQogICAgICAgICAgICgoYW5kIChudW1iZXJw IGxhc3QtaW5wdXQtZXZlbnQpIChhc3NxIChsb2d4b3IgI3g4MDAwMDAwIGxhc3QtaW5wdXQtZXZl bnQpIGFjdGlvbi1saXN0KSkKICAgICAgICAgICAgKHNldHEgYWN0aW9uIChsb2d4b3IgI3g4MDAw MDAwIGxhc3QtaW5wdXQtZXZlbnQpKSkKCSAgICgoY2hhcmFjdGVycCBsYXN0LWlucHV0LWV2ZW50 KQogICAgICAgICAgICAoc2V0cSByZWcgbGFzdC1pbnB1dC1ldmVudCkpCiAgICAgICAgICAgKHQg KGVycm9yICJOb24tY2hhcmFjdGVyIGlucHV0LWV2ZW50IikpKSkKICAgICAgKHdoZW4gKHRpbWVy cCB0aW1lcikKICAgICAgICAoY2FuY2VsLXRpbWVyIHRpbWVyKSkKICAgICAgKGxldCAoKHcgKGdl dC1idWZmZXItd2luZG93IGJ1ZmZlcikpKQogICAgICAgICh3aGVuICh3aW5kb3ctbGl2ZS1wIHcp CiAgICAgICAgICAoZGVsZXRlLXdpbmRvdyB3KSkpCiAgICAgICh3aGVuIChnZXQtYnVmZmVyIGJ1 ZmZlcikKICAgICAgICAoa2lsbC1idWZmZXIgYnVmZmVyKSkpCiAgICAod2hlbiByZWcKICAgICAg KGZ1bmNhbGwgKGNhZGRkciAoYXNzcSBhY3Rpb24gYWN0aW9uLWxpc3QpKSByZWcpKSkpCgo7Ozsj IyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWdpc3Rlci1zdG9yZSAoYXJnKQogICJTdG9yZSBy ZWdpc3RlciBkZXBlbmRlbnQgb24gY3VycmVudCBjb250ZXh0LCBzaG93aW5nIGFuIGFjdGlvbiBt ZW51LgoKV2l0aCBhbiBhY3RpdmUgcmVnaW9uLCBzdG9yZS9hcHBlbmQvcHJlcGVuZCB0aGUgY29u dGVudHMsIG9wdGlvbmFsbHkgZGVsZXRpbmcKdGhlIHJlZ2lvbiB3aGVuIGEgcHJlZml4IEFSRyBp cyBnaXZlbi4gV2l0aCBhIG51bWVyaWMgcHJlZml4IEFSRywgc3RvcmUvYWRkIHRoZQpudW1iZXIu IE90aGVyd2lzZSBzdG9yZSBwb2ludCwgZnJhbWVzZXQsIHdpbmRvdyBvciBrbWFjcm8uIgogIChp bnRlcmFjdGl2ZSAiUCIpCiAgKGNvbnN1bHQtLXJlZ2lzdGVyLWFjdGlvbgogICAoY29uZAogICAg KCh1c2UtcmVnaW9uLXApCiAgICAgKGxldCAoKGJlZyAocmVnaW9uLWJlZ2lubmluZykpCiAgICAg ICAgICAgKGVuZCAocmVnaW9uLWVuZCkpKQogICAgICAgYCgiUmVnaW9uIgogICAgICAgICAoP2Mg ImNvcHkiICJDb3B5IHJlZ2lvbiB0byByZWdpc3RlcjogIiAsKGxhbWJkYSAocikgKGNvcHktdG8t cmVnaXN0ZXIgciBiZWcgZW5kIGFyZyB0KSkpCiAgICAgICAgICg/YSAiYXBwZW5kIiAiQXBwZW5k IHJlZ2lvbiB0byByZWdpc3RlcjogIiAsKGxhbWJkYSAocikgKGFwcGVuZC10by1yZWdpc3RlciBy IGJlZyBlbmQgYXJnKSkpCiAgICAgICAgICg/cCAicHJlcGVuZCIgIlByZXBlbmQgcmVnaW9uIHRv IHJlZ2lzdGVyOiAiICwobGFtYmRhIChyKSAocHJlcGVuZC10by1yZWdpc3RlciByIGJlZyBlbmQg YXJnKSkpKSkpCiAgICAoKG51bWJlcnAgYXJnKQogICAgIGAoLChmb3JtYXQgIk51bWJlciAlcyIg YXJnKQogICAgICAgKD9zICJzdG9yZSIgLChmb3JtYXQgIlN0b3JlICVzIGluIHJlZ2lzdGVyOiAi IGFyZykgLChsYW1iZGEgKHIpIChudW1iZXItdG8tcmVnaXN0ZXIgYXJnIHIpKSkKICAgICAgICg/ YSAiYWRkIiAsKGZvcm1hdCAiQWRkICVzIHRvIHJlZ2lzdGVyOiAiIGFyZykgLChsYW1iZGEgKHIp IChpbmNyZW1lbnQtcmVnaXN0ZXIgYXJnIHIpKSkpKQogICAgKHQKICAgICBgKCJTdG9yZSIKICAg ICAgICg/cCAicG9pbnQiICJQb2ludCB0byByZWdpc3RlcjogIiAsIydwb2ludC10by1yZWdpc3Rl cikKICAgICAgICg/ZiAiZnJhbWVzZXQiICJGcmFtZXNldCB0byByZWdpc3RlcjogIiAsIydmcmFt ZXNldC10by1yZWdpc3RlcikKICAgICAgICg/dyAid2luZG93IiAiV2luZG93IHRvIHJlZ2lzdGVy OiAiICwjJ3dpbmRvdy1jb25maWd1cmF0aW9uLXRvLXJlZ2lzdGVyKQogICAgICAgLEAoYW5kIGxh c3Qta2JkLW1hY3JvIGAoKD9rICJrbWFjcm8iICJLbWFjcm8gdG8gcmVnaXN0ZXI6ICIgLCMna21h Y3JvLXRvLXJlZ2lzdGVyKSkpKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtYm9va21hcmsK Cjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWJvb2ttYXJrIChuYW1lKQogICJJZiBib29r bWFyayBOQU1FIGV4aXN0cywgb3BlbiBpdCwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBib29rbWFy ayB3aXRoIE5BTUUuCgpUaGUgY29tbWFuZCBzdXBwb3J0cyBwcmV2aWV3IG9mIGZpbGUgYm9va21h cmtzIGFuZCBuYXJyb3dpbmcuIFNlZSB0aGUKdmFyaWFibGUgYGNvbnN1bHQtYm9va21hcmstbmFy cm93JyBmb3IgdGhlIG5hcnJvd2luZyBjb25maWd1cmF0aW9uLiIKICAoaW50ZXJhY3RpdmUKICAg KGxpc3QKICAgIChjb25zdWx0LS13aXRoLWZpbGUtcHJldmlldyAob3BlbikKICAgICAgKGNvbnN1 bHQtLXJlYWQKICAgICAgICJCb29rbWFyazogIgogICAgICAgKGJvb2ttYXJrLWFsbC1uYW1lcykK ICAgICAgIDs7IEFkZCBkZWZhdWx0IG5hbWVzIHRvIGZ1dHVyZSBoaXN0b3J5LgogICAgICAgOzsg SWdub3JlIGVycm9ycyBzdWNoIHRoYXQgYGNvbnN1bHQtYm9va21hcmsnIGNhbiBiZSB1c2VkIGlu CiAgICAgICA7OyBidWZmZXJzIHdoaWNoIGFyZSBub3QgYmFja2VkIGJ5IGEgZmlsZS4KICAgICAg IDphZGQtaGlzdG9yeSAoaWdub3JlLWVycm9ycyAoYm9va21hcmstcHJvcC1nZXQgKGJvb2ttYXJr LW1ha2UtcmVjb3JkKSAnZGVmYXVsdHMpKQogICAgICAgOm5hcnJvdwogICAgICAgKGNvbnMKICAg ICAgICAobGFtYmRhIChjYW5kKQogICAgICAgICAgKGlmLWxldCAoKG4gY29uc3VsdC0tbmFycm93 KQogICAgICAgICAgICAgICAgICAgKGJtIChib29rbWFyay1nZXQtYm9va21hcmstcmVjb3JkCiAg ICAgICAgICAgICAgICAgICAgICAgIChhc3NvYyBjYW5kIGJvb2ttYXJrLWFsaXN0KSkpKQogICAg ICAgICAgICAgIChlcSBuIChjYWRkciAoYWxpc3QtZ2V0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAob3IgKGFsaXN0LWdldCAnaGFuZGxlciBibSkgIydib29rbWFyay1kZWZhdWx0LWhhbmRs ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdWx0LWJvb2ttYXJrLW5hcnJvdykp KQogICAgICAgICAgICB0KSkKICAgICAgICAobWFwY2FyIChwY2FzZS1sYW1iZGEgKGAoLHggLHkg LF8pKSAoY29ucyB4IHkpKQogICAgICAgICAgICAgICAgY29uc3VsdC1ib29rbWFyay1uYXJyb3cp KQogICAgICAgOnByZXZpZXcKICAgICAgIChsZXQgKChwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3 LXBvc2l0aW9uKSkpCiAgICAgICAgIChsYW1iZGEgKGNhbmQgcmVzdG9yZSkKICAgICAgICAgICAo ZnVuY2FsbAogICAgICAgICAgICBwcmV2aWV3CiAgICAgICAgICAgICh3aGVuLWxldCAoYm0gKGJv b2ttYXJrLWdldC1ib29rbWFyay1yZWNvcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFz c29jIGNhbmQgYm9va21hcmstYWxpc3QpKSkKICAgICAgICAgICAgICAoaWYtbGV0KiAoKGZpbGUg KGFsaXN0LWdldCAnZmlsZW5hbWUgYm0pKQogICAgICAgICAgICAgICAgICAgICAgICAocG9zIChh bGlzdC1nZXQgJ3Bvc2l0aW9uIGJtKSkKICAgICAgICAgICAgICAgICAgICAgICAgOzsgT25seSBw cmV2aWV3IGJvb2ttYXJrcyB3aXRob3V0IGEgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAg ICA7OyBha2EgYGJvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcichCiAgICAgICAgICAgICAgICAgICAg ICAgIChidWYgKGFuZCAobm90IChhbGlzdC1nZXQgJ2hhbmRsZXIgYm0pKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgb3BlbiBmaWxlKSkpKQogICAgICAgICAgICAg ICAgICAoc2V0LW1hcmtlciAobWFrZS1tYXJrZXIpIHBvcyBidWYpCiAgICAgICAgICAgICAgICAo dW5sZXNzIHJlc3RvcmUgKG1pbmlidWZmZXItbWVzc2FnZSAiTm8gcHJldmlldyBmb3Igc3BlY2lh bCBib29rbWFyayIpKQogICAgICAgICAgICAgICAgbmlsKSkKICAgICAgICAgICAgcmVzdG9yZSkp KQogICAgICAgOmhpc3RvcnkgJ2Jvb2ttYXJrLWhpc3RvcnkKICAgICAgIDpjYXRlZ29yeSAnYm9v a21hcmspKSkpCiAgKGJvb2ttYXJrLW1heWJlLWxvYWQtZGVmYXVsdC1maWxlKQogIChpZiAoYXNz b2MgbmFtZSBib29rbWFyay1hbGlzdCkKICAgICAgKGJvb2ttYXJrLWp1bXAgbmFtZSkKICAgIChi b29rbWFyay1zZXQgbmFtZSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1hcHJvcG9zCgo7Ozsj IyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1hcHJvcG9zICgpCiAgIlNlbGVjdCBwYXR0ZXJuIGFu ZCBjYWxsIGBhcHJvcG9zJy4KClRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjb21wbGV0aW9uIGlz IHRoZSBzeW1ib2wgYXQgcG9pbnQuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgocGF0dGVybgog ICAgICAgICAoY29uc3VsdC0tcmVhZAogICAgICAgICAgIkFwcm9wb3M6ICIKICAgICAgICAgIG9i YXJyYXkKICAgICAgICAgIDpwcmVkaWNhdGUgKGxhbWJkYSAoeCkgKG9yIChmYm91bmRwIHgpIChi b3VuZHAgeCkgKGZhY2VwIHgpIChzeW1ib2wtcGxpc3QgeCkpKQogICAgICAgICAgOmhpc3Rvcnkg J2NvbnN1bHQtLWFwcm9wb3MtaGlzdG9yeQogICAgICAgICAgOmNhdGVnb3J5ICdzeW1ib2wKICAg ICAgICAgIDpkZWZhdWx0ICh0aGluZy1hdC1wb2ludCAnc3ltYm9sKSkpKQogICAgKHdoZW4gKHN0 cmluZz0gcGF0dGVybiAiIikKICAgICAgKHVzZXItZXJyb3IgIk5vIHBhdHRlcm4gZ2l2ZW4iKSkK ICAgIChhcHJvcG9zIHBhdHRlcm4pKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtY29tcGxleC1j b21tYW5kCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1jb21wbGV4LWNvbW1hbmQgKCkK ICAiU2VsZWN0IGFuZCBldmFsdWF0ZSBjb21tYW5kIGZyb20gdGhlIGNvbW1hbmQgaGlzdG9yeS4K ClRoaXMgY29tbWFuZCBjYW4gYWN0IGFzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgYHJlcGVh dC1jb21wbGV4LWNvbW1hbmQnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCogKChoaXN0b3J5IChv ciAoY29uc3VsdC0tcmVtb3ZlLWR1cHMgKG1hcGNhciAjJ3ByaW4xLXRvLXN0cmluZyBjb21tYW5k LWhpc3RvcnkpKQogICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IgIlRoZXJlIGFyZSBu byBwcmV2aW91cyBjb21wbGV4IGNvbW1hbmRzIikpKQogICAgICAgICAoY21kIChyZWFkIChjb25z dWx0LS1yZWFkCiAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kOiAiIGhpc3RvcnkKICAgICAg ICAgICAgICAgICAgICAgOmRlZmF1bHQgKGNhciBoaXN0b3J5KQogICAgICAgICAgICAgICAgICAg ICA6c29ydCBuaWwKICAgICAgICAgICAgICAgICAgICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhp c3RvcnkKICAgICAgICAgICAgICAgICAgICAgOmNhdGVnb3J5ICdleHByZXNzaW9uKSkpKQogICAg OzsgVGFrZW4gZnJvbSBgcmVwZWF0LWNvbXBsZXgtY29tbWFuZCcKICAgIChhZGQtdG8taGlzdG9y eSAnY29tbWFuZC1oaXN0b3J5IGNtZCkKICAgIChhcHBseSAjJ2Z1bmNhbGwtaW50ZXJhY3RpdmVs eQoJICAgKGNhciBjbWQpCgkgICAobWFwY2FyIChsYW1iZGEgKGUpIChldmFsIGUgdCkpIChjZHIg Y21kKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtaGlzdG9yeQoKKGRlZnVuIGNvbnN1bHQt LWN1cnJlbnQtaGlzdG9yeSAoKQogICJSZXR1cm4gdGhlIGhpc3RvcnkgcmVsZXZhbnQgdG8gdGhl IGN1cnJlbnQgYnVmZmVyLgoKSWYgdGhlIG1pbmlidWZmZXIgaXMgYWN0aXZlLCByZXR1cm5zIHRo ZSBtaW5pYnVmZmVyIGhpc3RvcnksCm90aGVyd2lzZSB0aGUgaGlzdG9yeSBjb3JyZXNwb25kaW5n IHRvIHRoZSBtb2RlIGlzIHJldHVybmVkLgpUaGVyZSBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgYHJl cGVhdC1jb21wbGV4LWNvbW1hbmQnLApmb3Igd2hpY2ggdGhlIGNvbW1hbmQgaGlzdG9yeSBpcyB1 c2VkLiIKICAoY29uZAogICA7OyBJZiBwcmVzc2luZyAiQy14IE0tOiIsIGkuZS4sIGByZXBlYXQt Y29tcGxleC1jb21tYW5kJywKICAgOzsgd2UgYXJlIGluc3RlYWQgcXVlcnlpbmcgdGhlIGBjb21t YW5kLWhpc3RvcnknIGFuZCBnZXQgYSBmdWxsIHMtZXhwcmVzc2lvbi4KICAgOzsgQWx0ZXJuYXRp dmVseSB5b3UgbWlnaHQgd2FudCB0byB1c2UgYGNvbnN1bHQtY29tcGxleC1jb21tYW5kJywKICAg Ozsgd2hpY2ggY2FuIGFsc28gYmUgYm91bmQgdG8gIkMteCBNLToiIQogICAoKGVxIGxhc3QtY29t bWFuZCAncmVwZWF0LWNvbXBsZXgtY29tbWFuZCkKICAgIChtYXBjYXIgIydwcmluMS10by1zdHJp bmcgY29tbWFuZC1oaXN0b3J5KSkKICAgOzsgSW4gdGhlIG1pbmlidWZmZXIgd2UgdXNlIHRoZSBj dXJyZW50IG1pbmlidWZmZXIgaGlzdG9yeSwKICAgOzsgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQg Ynkgc2V0dGluZyBgbWluaWJ1ZmZlci1oaXN0b3J5LXZhcmlhYmxlJy4KICAgKChtaW5pYnVmZmVy cCkKICAgIChpZiAoZXEgbWluaWJ1ZmZlci1oaXN0b3J5LXZhcmlhYmxlIHQpCiAgICAgICAgKHVz ZXItZXJyb3IgIk1pbmlidWZmZXIgaGlzdG9yeSBpcyBkaXNhYmxlZCBmb3IgYCVzJyIgdGhpcy1j b21tYW5kKQogICAgICAoc3ltYm9sLXZhbHVlIG1pbmlidWZmZXItaGlzdG9yeS12YXJpYWJsZSkp KSA7OyAobWluaWJ1ZmZlci1oaXN0b3J5LXZhbHVlKSBpcyBFbWFjcyAyNyBvbmx5CiAgIDs7IE90 aGVyd2lzZSB3ZSB1c2UgYSBtb2RlLXNwZWNpZmljIGhpc3RvcnksIHNlZSBgY29uc3VsdC1tb2Rl LWhpc3RvcmllcycuCiAgICh0ICh3aGVuLWxldCAoaGlzdG9yeQogICAgICAgICAgICAgICAgIChv ciAoc2VxLWZpbmQgKGxhbWJkYSAocmluZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGFuZCAoZGVyaXZlZC1tb2RlLXAgKGNhciByaW5nKSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoYm91bmRwIChjZHIgcmluZykpKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN1bHQtbW9kZS1oaXN0b3JpZXMpCiAgICAgICAgICAgICAgICAgICAg ICh1c2VyLWVycm9yCiAgICAgICAgICAgICAgICAgICAgICAiTm8gaGlzdG9yeSBjb25maWd1cmVk IGZvciBgJXMnLCBzZWUgYGNvbnN1bHQtbW9kZS1oaXN0b3JpZXMnIgogICAgICAgICAgICAgICAg ICAgICAgbWFqb3ItbW9kZSkpKQogICAgICAgIChzeW1ib2wtdmFsdWUgKGNkciBoaXN0b3J5KSkp KSkpCgo7OyBUaGlzIGNvbW1hbmQgaGFzIGJlZW4gYWRvcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHVi LmNvbS9vYW50b2xpbi9jb21wbGV0aW5nLWhpc3RvcnkvLgo7OzsjIyNhdXRvbG9hZAooZGVmdW4g Y29uc3VsdC1oaXN0b3J5ICgmb3B0aW9uYWwgaGlzdG9yeSkKICAiSW5zZXJ0IHN0cmluZyBmcm9t IEhJU1RPUlkgb2YgY3VycmVudCBidWZmZXIuCgpJbiBvcmRlciB0byBzZWxlY3QgZnJvbSBhIHNw ZWNpZmljIEhJU1RPUlksIHBhc3MgdGhlIGhpc3RvcnkgdmFyaWFibGUgYXMgYXJndW1lbnQuIgog IChpbnRlcmFjdGl2ZSkKICAobGV0ICgoc3RyIChjb25zdWx0LS1sb2NhbC1sZXQgKChlbmFibGUt cmVjdXJzaXZlLW1pbmlidWZmZXJzIHQpKQogICAgICAgICAgICAgICAoY29uc3VsdC0tcmVhZAog ICAgICAgICAgICAgICAgIkhpc3Rvcnk6ICIKICAgICAgICAgICAgICAgIChsZXQgKChoaXN0b3J5 IChvciBoaXN0b3J5IChjb25zdWx0LS1jdXJyZW50LWhpc3RvcnkpKSkpCiAgICAgICAgICAgICAg ICAgIChvciAoY29uc3VsdC0tcmVtb3ZlLWR1cHMgKGlmIChyaW5nLXAgaGlzdG9yeSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpbmctZWxlbWVudHMg aGlzdG9yeSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhp c3RvcnkpKQogICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IgIkhpc3RvcnkgaXMgZW1w dHkiKSkpCiAgICAgICAgICAgICAgICA6aGlzdG9yeSB0IDs7IGRpc2FibGUgaGlzdG9yeQogICAg ICAgICAgICAgICAgOmNhdGVnb3J5IDs7IFJlcG9ydCBjb21tYW5kIGNhdGVnb3J5IGZvciBNLXgg aGlzdG9yeQogICAgICAgICAgICAgICAgKGFuZCAobWluaWJ1ZmZlcnApCiAgICAgICAgICAgICAg ICAgICAgIChlcSBtaW5pYnVmZmVyLWhpc3RvcnktdmFyaWFibGUgJ2V4dGVuZGVkLWNvbW1hbmQt aGlzdG9yeSkKICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQpCiAgICAgICAgICAgICAgICA6 c29ydCBuaWwpKSkpCiAgICAod2hlbiAobWluaWJ1ZmZlcnApCiAgICAgIChkZWxldGUtbWluaWJ1 ZmZlci1jb250ZW50cykpCiAgICAoaW5zZXJ0IChzdWJzdHJpbmctbm8tcHJvcGVydGllcyBzdHIp KSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWlzZWFyY2gKCihkZWZ1biBjb25zdWx0LWlzZWFy Y2gtZm9yd2FyZCAoJm9wdGlvbmFsIHJldmVyc2UpCiAgIkNvbnRpbnVlIGlzZWFyY2ggZm9yd2Fy ZCBvcHRpb25hbGx5IGluIFJFVkVSU0UuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tcmVx dWlyZS1taW5pYnVmZmVyKQogIChzZXRxIGlzZWFyY2gtbmV3LWZvcndhcmQgKG5vdCByZXZlcnNl KSBpc2VhcmNoLW5ldy1ub25pbmNyZW1lbnRhbCBuaWwpCiAgKGZ1bmNhbGwgKG9yIChjb21tYW5k LXJlbWFwcGluZyAjJ2V4aXQtbWluaWJ1ZmZlcikgIydleGl0LW1pbmlidWZmZXIpKSkKCihkZWZ1 biBjb25zdWx0LWlzZWFyY2gtcmV2ZXJzZSAoJm9wdGlvbmFsIHJldmVyc2UpCiAgIkNvbnRpbnVl IGlzZWFyY2ggYmFja3dhcmQgb3B0aW9uYWxseSBpbiBSRVZFUlNFLiIKICAoaW50ZXJhY3RpdmUp CiAgKGNvbnN1bHQtaXNlYXJjaC1mb3J3YXJkIChub3QgcmV2ZXJzZSkpKQoKKGRlZnZhciBjb25z dWx0LWlzZWFyY2gtbWFwCiAgKGxldCAoKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAo ZGVmaW5lLWtleSBtYXAgIlxDLXMiICMnY29uc3VsdC1pc2VhcmNoLWZvcndhcmQpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLXIiICMnY29uc3VsdC1pc2VhcmNoLXJldmVyc2UpCiAgICBtYXApCiAg IkFkZGl0aW9uYWwga2V5bWFwIHVzZWQgYnkgYGNvbnN1bHQtaXNlYXJjaCcuIikKCihkZWZ1biBj b25zdWx0LS1pc2VhcmNoLWNhbmRpZGF0ZXMgKG5hcnJvdykKICAiUmV0dXJuIGlzZWFyY2ggaGlz dG9yeSBjYW5kaWRhdGVzIGNhdGVnb3JpemVkIGJ5IE5BUlJPVy4iCiAgOzsgTk9URTogRG8gbm90 IHRocm93IGFuIGVycm9yIG9uIGVtcHR5IGhpc3RvcnksCiAgOzsgaW4gb3JkZXIgdG8gYWxsb3cg c3RhcnRpbmcgYSBzZWFyY2guCiAgOzsgV2UgZG8gbm90IDpyZXF1aXJlLW1hdGNoIGhlcmUhCiAg KGxldCogKChoaXN0b3J5IChpZiAoZXEgdCBzZWFyY2gtZGVmYXVsdC1tb2RlKQogICAgICAgICAg ICAgICAgICAgICAgKGFwcGVuZCByZWdleHAtc2VhcmNoLXJpbmcgc2VhcmNoLXJpbmcpCiAgICAg ICAgICAgICAgICAgICAgKGFwcGVuZCBzZWFyY2gtcmluZyByZWdleHAtc2VhcmNoLXJpbmcpKSkK ICAgICAgICAgKG1heC1sZW4gKGlmIGhpc3RvcnkKICAgICAgICAgICAgICAgICAgICAgICgrIDQg KGFwcGx5ICMnbWF4IChtYXBjYXIgIydsZW5ndGggaGlzdG9yeSkpKQogICAgICAgICAgICAgICAg ICAgIDApKSkKICAgIChjb25zdWx0LS1yZW1vdmUtZHVwcwogICAgIChtYXBjYXIKICAgICAgKGxh bWJkYSAoY2FuZCkKICAgICAgICA7OyBFbWFjcyAyNy4xIHVzZXMgc2V0dGluZ3Mgb24gdGhlIHNl YXJjaCBzdHJpbmcsIHdlIGNhbiB1c2UgdGhhdCBmb3IgbmFycm93aW5nLgogICAgICAgIChsZXQq ICgocHJvcHMgKHBsaXN0LW1lbWJlciAodGV4dC1wcm9wZXJ0aWVzLWF0IDAgY2FuZCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uKSkK ICAgICAgICAgICAgICAgKHR5cGUgKHBjYXNlIChjYWRyIHByb3BzKQogICAgICAgICAgICAgICAg ICAgICAgICgoYW5kICduaWwgKGd1YXJkIChub3QgcHJvcHMpKSkgP3IpCiAgICAgICAgICAgICAg ICAgICAgICAgKCduaWwgICAgICAgICAgICAgICAgICAgICAgICAgICA/bCkKICAgICAgICAgICAg ICAgICAgICAgICAoJ3dvcmQtc2VhcmNoLXJlZ2V4cCAgICAgICAgICAgID93KQogICAgICAgICAg ICAgICAgICAgICAgICgnaXNlYXJjaC1zeW1ib2wtcmVnZXhwICAgICAgICAgP3MpCiAgICAgICAg ICAgICAgICAgICAgICAgKCdjaGFyLWZvbGQtdG8tcmVnZXhwICAgICAgICAgICA/YykKICAgICAg ICAgICAgICAgICAgICAgICAoXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID91KSkpKQog ICAgICAgICAgKGNvbmNhdCAocHJvcGVydGl6ZQogICAgICAgICAgICAgICAgICAgOzsgRGlzYW1i aWd1YXRlIGhpc3RvcnkgaXRlbXMuIFRoZSBzYW1lIHN0cmluZyBjb3VsZAogICAgICAgICAgICAg ICAgICAgOzsgb2NjdXIgd2l0aCBkaWZmZXJlbnQgc2VhcmNoIHR5cGVzLgogICAgICAgICAgICAg ICAgICAgKGNoYXItdG8tc3RyaW5nICgrIGNvbnN1bHQtLXRvZnUtY2hhciB0eXBlKSkKICAgICAg ICAgICAgICAgICAgICdpbnZpc2libGUgdAogICAgICAgICAgICAgICAgICAgJ2NvbnN1bHQtLWFu bm90YXRpb24KICAgICAgICAgICAgICAgICAgIChjb25jYXQgKG1ha2Utc3RyaW5nICgtIG1heC1s ZW4gKGxlbmd0aCBjYW5kKSkgMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGlzdC1n ZXQgdHlwZSBuYXJyb3cpKSkKICAgICAgICAgICAgICAgICAgY2FuZCkpKQogICAgICBoaXN0b3J5 KSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtaXNlYXJjaCAoKQogICJSZWFkIGEg c2VhcmNoIHN0cmluZyB3aXRoIGNvbXBsZXRpb24gZnJvbSBoaXN0b3J5LgoKVGhpcyByZXBsYWNl cyB0aGUgY3VycmVudCBzZWFyY2ggc3RyaW5nIGlmIElzZWFyY2ggaXMgYWN0aXZlLCBhbmQKc3Rh cnRzIGEgbmV3IElzZWFyY2ggc2Vzc2lvbiBvdGhlcndpc2UuIgogIChpbnRlcmFjdGl2ZSkKICAo Y29uc3VsdC0tZm9yYmlkLW1pbmlidWZmZXIpCiAgKGxldCAoKGlzZWFyY2gtbWVzc2FnZS1mdW5j dGlvbiAnaWdub3JlKSA7OyBBdm9pZCBmbGlja2VyIGluIGVjaG8gYXJlYQogICAgICAgIChpbmhp Yml0LXJlZGlzcGxheSB0KSAgICAgICAgICAgICAgOzsgQXZvaWQgZmxpY2tlciBpbiBtb2RlIGxp bmUKICAgICAgICAobmFycm93ICcoKD9jIC4gIkNoYXIiKQogICAgICAgICAgICAgICAgICAoP3Ug LiAiQ3VzdG9tIikKICAgICAgICAgICAgICAgICAgKD9sIC4gIkxpdGVyYWwiKQogICAgICAgICAg ICAgICAgICAoP3IgLiAiUmVnZXhwIikKICAgICAgICAgICAgICAgICAgKD9zIC4gIlN5bWJvbCIp CiAgICAgICAgICAgICAgICAgICg/dyAuICJXb3JkIikpKSkKICAgICh1bmxlc3MgaXNlYXJjaC1t b2RlIChpc2VhcmNoLW1vZGUgdCkpCiAgICAod2l0aC1pc2VhcmNoLXN1c3BlbmRlZAogICAgIChz ZXRxIGlzZWFyY2gtbmV3LXN0cmluZwogICAgICAgICAgIChjb25zdWx0LS1yZWFkCiAgICAgICAg ICAgICJJLXNlYXJjaDogIgogICAgICAgICAgICAoY29uc3VsdC0taXNlYXJjaC1jYW5kaWRhdGVz IG5hcnJvdykKICAgICAgICAgICAgOmNhdGVnb3J5ICdjb25zdWx0LWlzZWFyY2gKICAgICAgICAg ICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhpc3RvcnkKICAgICAgICAgICAgOnNvcnQgbmlsCiAg ICAgICAgICAgIDphbm5vdGF0ZSAjJ2NvbnN1bHQtLWdldC1hbm5vdGF0aW9uCiAgICAgICAgICAg IDppbml0aWFsIGlzZWFyY2gtc3RyaW5nCiAgICAgICAgICAgIDprZXltYXAgY29uc3VsdC1pc2Vh cmNoLW1hcAogICAgICAgICAgICA6bG9va3VwCiAgICAgICAgICAgIChsYW1iZGEgKF8gY2FuZGlk YXRlcyBzdHIpCiAgICAgICAgICAgICAgKGlmLWxldCAoY2FuZCAoY2FyIChtZW1iZXIgc3RyIGNh bmRpZGF0ZXMpKSkgKHN1YnN0cmluZyBjYW5kIDEpIHN0cikpCiAgICAgICAgICAgIDpwcmV2aWV3 CiAgICAgICAgICAgIChsYW1iZGEgKGNhbmQgcmVzdG9yZSkKICAgICAgICAgICAgICAodW5sZXNz IHJlc3RvcmUKICAgICAgICAgICAgICAgIChzZXRxIGlzZWFyY2gtc3RyaW5nIGNhbmQpCiAgICAg ICAgICAgICAgICA7OyBFbWFjcyAyNy4xIHVzZXMgcHJvcGVydGllcyBvbiB0aGUgc2VhcmNoIHN0 cmluZyB0byBzdG9yZSBzZXR0aW5ncwogICAgICAgICAgICAgICAgKHdoZW4gKGZib3VuZHAgJ2lz ZWFyY2gtdXBkYXRlLWZyb20tc3RyaW5nLXByb3BlcnRpZXMpCiAgICAgICAgICAgICAgICAgIChp c2VhcmNoLXVwZGF0ZS1mcm9tLXN0cmluZy1wcm9wZXJ0aWVzIGNhbmQpKQogICAgICAgICAgICAg ICAgKGlzZWFyY2gtdXBkYXRlKSkpCiAgICAgICAgICAgIDpuYXJyb3cKICAgICAgICAgICAgKGNv bnMKICAgICAgICAgICAgIChsYW1iZGEgKGNhbmQpIChlcSAoLSAoYXJlZiBjYW5kIDApIGNvbnN1 bHQtLXRvZnUtY2hhcikgY29uc3VsdC0tbmFycm93KSkKICAgICAgICAgICAgIG5hcnJvdykpCiAg ICAgICAgICAgaXNlYXJjaC1uZXctbWVzc2FnZQogICAgICAgICAgIChtYXBjb25jYXQgJ2lzZWFy Y2gtdGV4dC1jaGFyLWRlc2NyaXB0aW9uIGlzZWFyY2gtbmV3LXN0cmluZyAiIikpKQogICAgOzsg U2V0dGluZyBgaXNlYXJjaC1yZWdleHAnIGV0YyBvbmx5IHdvcmtzIG91dHNpZGUgb2YgYHdpdGgt aXNlYXJjaC1zdXNwZW5kZWQnLgogICAgKHVubGVzcyAocGxpc3QtbWVtYmVyICh0ZXh0LXByb3Bl cnRpZXMtYXQgMCBpc2VhcmNoLXN0cmluZykgJ2lzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uKQogICAg ICAoc2V0cSBpc2VhcmNoLXJlZ2V4cCB0CiAgICAgICAgICAgIGlzZWFyY2gtcmVnZXhwLWZ1bmN0 aW9uIG5pbCkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtbWlub3ItbW9kZS1tZW51CgooZGVm dW4gY29uc3VsdC0tbWlub3ItbW9kZS1jYW5kaWRhdGVzICgpCiAgIlJldHVybiBsaXN0IG9mIG1p bm9yLW1vZGUgY2FuZGlkYXRlIHN0cmluZ3MuIgogIChtYXBjYXIKICAgKHBjYXNlLWxhbWJkYSAo YCgsbmFtZSAuICxzeW0pKQogICAgIChsaXN0IG5hbWUgc3ltCiAgICAgICAgICAgKGNvbmNhdAog ICAgICAgICAgICAoaWYgKGxvY2FsLXZhcmlhYmxlLWlmLXNldC1wIHN5bSkgImwiICJnIikKICAg ICAgICAgICAgKGlmIChhbmQgKGJvdW5kcCBzeW0pIChzeW1ib2wtdmFsdWUgc3ltKSkgImkiICJv IikpKSkKICAgKGFwcGVuZAogICAgOzsgYWNjb3JkaW5nIHRvIGRlc2NyaWJlLW1pbm9yLW1vZGUt Y29tcGxldGlvbi10YWJsZS1mb3Itc3ltYm9sCiAgICA7OyB0aGUgbWlub3ItbW9kZS1saXN0IGNv bnRhaW5zICphbGwqIG1pbm9yIG1vZGVzCiAgICAobWFwY2FyIChsYW1iZGEgKHN5bSkgKGNvbnMg KHN5bWJvbC1uYW1lIHN5bSkgc3ltKSkgbWlub3ItbW9kZS1saXN0KQogICAgOzsgdGFrZSB0aGUg bGlnaHRlcnMgZnJvbSBtaW5vci1tb2RlLWFsaXN0CiAgICAoZGVscSBuaWwKICAgICAgICAgICht YXBjYXIgKHBjYXNlLWxhbWJkYSAoYCgsc3ltICxsaWdodGVyKSkKICAgICAgICAgICAgICAgICAg ICAod2hlbiAoYW5kIGxpZ2h0ZXIgKG5vdCAoZXF1YWwgIiIgbGlnaHRlcikpKQogICAgICAgICAg ICAgICAgICAgICAgKHNldHEgbGlnaHRlciAoc3RyaW5nLXRyaW0gKGZvcm1hdC1tb2RlLWxpbmUg bGlnaHRlcikpKQogICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAoc3RyaW5nLWJsYW5rLXAg bGlnaHRlcikKICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgbGlnaHRlciBzeW0pKSkpCiAg ICAgICAgICAgICAgICAgIG1pbm9yLW1vZGUtYWxpc3QpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRl ZnVuIGNvbnN1bHQtbWlub3ItbW9kZS1tZW51ICgpCiAgIkVuYWJsZSBvciBkaXNhYmxlIG1pbm9y IG1vZGUuCgpUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIGBtaW5vci1tb2RlLW1lbnUtZnJvbS1p bmRpY2F0b3InLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNhbGwtaW50ZXJhY3RpdmVseQogICAoY29u c3VsdC0tcmVhZAogICAgIk1pbm9yIG1vZGU6ICIKICAgIChjb25zdWx0LS1taW5vci1tb2RlLWNh bmRpZGF0ZXMpCiAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICA6Y2F0ZWdvcnkgJ21pbm9yLW1vZGUK ICAgIDpuYXJyb3cgYCgsKGxhbWJkYSAoY2FuZCkgKHNlcS1wb3NpdGlvbiAoY2FkZHIgY2FuZCkg Y29uc3VsdC0tbmFycm93KSkKICAgICAgICAgICAgICAoP2wgLiAiTG9jYWwiKQogICAgICAgICAg ICAgICg/ZyAuICJHbG9iYWwiKQogICAgICAgICAgICAgICg/aSAuICJPbiIpCiAgICAgICAgICAg ICAgKD9vIC4gIk9mZiIpKQogICAgOmxvb2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1jYWRyCiAgICA6 aGlzdG9yeSAnY29uc3VsdC0tbWlub3ItbW9kZS1tZW51LWhpc3RvcnkpKSkKCjs7Ozs7IENvbW1h bmQ6IGNvbnN1bHQtdGhlbWUKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXRoZW1lICh0 aGVtZSkKICAiRGlzYWJsZSBjdXJyZW50IHRoZW1lcyBhbmQgZW5hYmxlIFRIRU1FIGZyb20gYGNv bnN1bHQtdGhlbWVzJy4KClRoZSBjb21tYW5kIHN1cHBvcnRzIHByZXZpZXdpbmcgdGhlIGN1cnJl bnRseSBzZWxlY3RlZCB0aGVtZS4iCiAgKGludGVyYWN0aXZlCiAgIChsaXN0CiAgICAobGV0ICgo YXZhaWwtdGhlbWVzIChzZXEtZmlsdGVyIChsYW1iZGEgKHgpIChvciAobm90IGNvbnN1bHQtdGhl bWVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG1lbXEgeCBjb25zdWx0LXRoZW1lcykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29ucyBuaWwgKGN1c3RvbS1hdmFpbGFibGUtdGhlbWVzKSkpKQogICAgICAgICAgKHNh dmVkLXRoZW1lIChjYXIgY3VzdG9tLWVuYWJsZWQtdGhlbWVzKSkpCiAgICAgIChjb25zdWx0LS1y ZWFkCiAgICAgICAiVGhlbWU6ICIKICAgICAgIChtYXBjYXIgKGxhbWJkYSAoeCkgKG9yIHggJ2Rl ZmF1bHQpKSBhdmFpbC10aGVtZXMpCiAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICA6Y2F0 ZWdvcnkgJ3RoZW1lCiAgICAgICA6aGlzdG9yeSAnY29uc3VsdC0tdGhlbWUtaGlzdG9yeQogICAg ICAgOmxvb2t1cCAobGFtYmRhIChfaW5wdXQgX2NhbmRzIHgpCiAgICAgICAgICAgICAgICAgKGFu ZCB4IChub3QgKHN0cmluZz0geCAiZGVmYXVsdCIpKSAoaW50ZXJuLXNvZnQgeCkpKQogICAgICAg OnByZXZpZXcgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICAgICAgICAgICAgICAoY29uZAog ICAgICAgICAgICAgICAgICAgKChhbmQgcmVzdG9yZSAobm90IGNhbmQpKSAoY29uc3VsdC10aGVt ZSBzYXZlZC10aGVtZSkpCiAgICAgICAgICAgICAgICAgICAoKG1lbXEgY2FuZCBhdmFpbC10aGVt ZXMpIChjb25zdWx0LXRoZW1lIGNhbmQpKSkpCiAgICAgICA6ZGVmYXVsdCAoc3ltYm9sLW5hbWUg KG9yIHNhdmVkLXRoZW1lICdkZWZhdWx0KSkpKSkpCiAgKHVubGVzcyAoZXEgdGhlbWUgKGNhciBj dXN0b20tZW5hYmxlZC10aGVtZXMpKQogICAgKG1hcGMgIydkaXNhYmxlLXRoZW1lIGN1c3RvbS1l bmFibGVkLXRoZW1lcykKICAgICh3aGVuIHRoZW1lCiAgICAgIChpZiAoY3VzdG9tLXRoZW1lLXAg dGhlbWUpCiAgICAgICAgICAoZW5hYmxlLXRoZW1lIHRoZW1lKQogICAgICAgIChsb2FkLXRoZW1l IHRoZW1lIDpuby1jb25maXJtKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtYnVmZmVyCgoo Y29uc3VsdC0tZGVmaW5lLWNhY2hlIGNvbnN1bHQtLWNhY2hlZC1idWZmZXJzCiAgKGFwcGVuZCAo ZGVscSAoY3VycmVudC1idWZmZXIpIChidWZmZXItbGlzdCkpIChsaXN0IChjdXJyZW50LWJ1ZmZl cikpKSkKCihjb25zdWx0LS1kZWZpbmUtY2FjaGUgY29uc3VsdC0tY2FjaGVkLWJ1ZmZlci1uYW1l cwogIChtYXBjYXIgIydidWZmZXItbmFtZSAoY29uc3VsdC0tY2FjaGVkLWJ1ZmZlcnMpKSkKCihj b25zdWx0LS1kZWZpbmUtY2FjaGUgY29uc3VsdC0tY2FjaGVkLWJ1ZmZlci1maWxlLWhhc2gKICAo Y29uc3VsdC0tc3RyaW5nLWhhc2ggKGRlbHEgbmlsIChtYXBjYXIgIydidWZmZXItZmlsZS1uYW1l IChjb25zdWx0LS1jYWNoZWQtYnVmZmVycykpKSkpCgooZGVmdW4gY29uc3VsdC0tb3Blbi1maWxl IChmaWxlIGRpc3BsYXkpCiAgIk9wZW4gRklMRSB2aWEgRElTUExBWSBmdW5jdGlvbi4iCiAgKHBj YXNlLWV4aGF1c3RpdmUgZGlzcGxheQogICAgKCdzd2l0Y2gtdG8tYnVmZmVyIChmaW5kLWZpbGUg ZmlsZSkpCiAgICAoJ3N3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IChmaW5kLWZpbGUtb3Ro ZXItd2luZG93IGZpbGUpKQogICAgKCdzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLWZyYW1lIChmaW5k LWZpbGUtb3RoZXItZnJhbWUgZmlsZSkpKSkKCihkZWZ1biBjb25zdWx0LS1vcGVuLWJ1ZmZlciAo YnVmZmVyIGRpc3BsYXkpCiAgIk9wZW4gQlVGRkVSIHZpYSBESVNQTEFZIGZ1bmN0aW9uLiIKICAo ZnVuY2FsbCBkaXNwbGF5IGJ1ZmZlcikpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1ib29rbWFy awogIGAoOm5hbWUgICAgICJCb29rbWFyayIKICAgIDpuYXJyb3cgICA/bQogICAgOmNhdGVnb3J5 IGJvb2ttYXJrCiAgICA6ZmFjZSAgICAgY29uc3VsdC1ib29rbWFyawogICAgOmhpc3RvcnkgIGJv b2ttYXJrLWhpc3RvcnkKICAgIDppdGVtcyAgICAsIydib29rbWFyay1hbGwtbmFtZXMKICAgIDpv cGVuICAgICAsIydib29rbWFyay1qdW1wKQogICJCb29rbWFyayBjYW5kaWRhdGUgc291cmNlIGZv ciBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1wcm9qZWN0LWJ1 ZmZlcgogIGAoOm5hbWUgICAgICAiUHJvamVjdCBCdWZmZXIiCiAgICA6bmFycm93ICAgICg/cCAu ICJQcm9qZWN0IikKICAgIDpjYXRlZ29yeSAgYnVmZmVyCiAgICA6ZmFjZSAgICAgIGNvbnN1bHQt YnVmZmVyCiAgICA6aGlzdG9yeSAgIGJ1ZmZlci1uYW1lLWhpc3RvcnkKICAgIDpvcGVuICAgICAg LCMnY29uc3VsdC0tb3Blbi1idWZmZXIKICAgIDpwcmVkaWNhdGUgLChsYW1iZGEgKCkgY29uc3Vs dC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24pCiAgICA6aXRlbXMKICAgICwobGFtYmRhICgpCiAgICAg ICAod2hlbi1sZXQgKHJvb3QgKGZ1bmNhbGwgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24p KQogICAgICAgICAobWFwY2FyICMnYnVmZmVyLW5hbWUKICAgICAgICAgICAgICAgICAoc2VxLWZp bHRlciAobGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0 IChmaWxlIChidWZmZXItZmlsZS1uYW1lIHgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nLXByZWZpeC1wIHJvb3QgZmlsZSkpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdWx0LS1jYWNoZWQtYnVmZmVycykpKSkpKQogICJQcm9qZWN0IGJ1ZmZlciBj YW5kaWRhdGUgc291cmNlIGZvciBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQt LXNvdXJjZS1wcm9qZWN0LWZpbGUKICBgKDpuYW1lICAgICAgIlByb2plY3QgRmlsZSIKICAgIDpu YXJyb3cgICAgKD9wIC4gIlByb2plY3QiKQogICAgOmNhdGVnb3J5ICBmaWxlCiAgICA6ZmFjZSAg ICAgIGNvbnN1bHQtZmlsZQogICAgOmhpc3RvcnkgICBmaWxlLW5hbWUtaGlzdG9yeQogICAgOm9w ZW4gICAgICAsIydjb25zdWx0LS1vcGVuLWZpbGUKICAgIDpwcmVkaWNhdGUgLChsYW1iZGEgKCkg Y29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24pCiAgICA6aXRlbXMKICAgICwobGFtYmRhICgp CiAgICAgICh3aGVuLWxldCAocm9vdCAoZnVuY2FsbCBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5j dGlvbikpCiAgICAgICAgKGxldCAoKGxlbiAobGVuZ3RoIHJvb3QpKQogICAgICAgICAgICAgIChp bnYtcm9vdCAocHJvcGVydGl6ZSByb290ICdpbnZpc2libGUgdCkpCiAgICAgICAgICAgICAgKGh0 IChjb25zdWx0LS1jYWNoZWQtYnVmZmVyLWZpbGUtaGFzaCkpKQogICAgICAgICAgKG1hcGNhciAo bGFtYmRhICh4KQogICAgICAgICAgICAgICAgICAgIChjb25jYXQgaW52LXJvb3QgKHN1YnN0cmlu ZyB4IGxlbikpKQogICAgICAgICAgICAgICAgICAoc2VxLWZpbHRlciAobGFtYmRhICh4KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKG5vdCAoZ2V0aGFzaCB4IGh0KSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcHJlZml4LXAgcm9vdCB4 KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VudGYtbGlzdCkpKSkpKQogICJQ cm9qZWN0IGZpbGUgY2FuZGlkYXRlIHNvdXJjZSBmb3IgYGNvbnN1bHQtYnVmZmVyJy4iKQoKKGRl ZnZhciBjb25zdWx0LS1zb3VyY2UtaGlkZGVuLWJ1ZmZlcgogIGAoOm5hbWUgICAgICJIaWRkZW4g QnVmZmVyIgogICAgOm5hcnJvdyAgIDMyCiAgICA6Y2F0ZWdvcnkgYnVmZmVyCiAgICA6ZmFjZSAg ICAgY29uc3VsdC1idWZmZXIKICAgIDpoaXN0b3J5ICBidWZmZXItbmFtZS1oaXN0b3J5CiAgICA6 b3BlbiAgICAgLCMnY29uc3VsdC0tb3Blbi1idWZmZXIKICAgIDppdGVtcwogICAgLChsYW1iZGEg KCkKICAgICAgIChsZXQgKChmaWx0ZXIgKGNvbnN1bHQtLXJlZ2V4cC1maWx0ZXIgY29uc3VsdC1i dWZmZXItZmlsdGVyKSkpCiAgICAgICAgIChzZXEtZmlsdGVyIChsYW1iZGEgKHgpIChzdHJpbmct bWF0Y2gtcCBmaWx0ZXIgeCkpCiAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1jYWNoZWQt YnVmZmVyLW5hbWVzKSkpKSkKICAiSGlkZGVuIGJ1ZmZlciBjYW5kaWRhdGUgc291cmNlIGZvciBg Y29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1idWZmZXIKICBgKDpu YW1lICAgICAiQnVmZmVyIgogICAgOm5hcnJvdyAgID9iCiAgICA6Y2F0ZWdvcnkgYnVmZmVyCiAg ICA6ZmFjZSAgICAgY29uc3VsdC1idWZmZXIKICAgIDpoaXN0b3J5ICBidWZmZXItbmFtZS1oaXN0 b3J5CiAgICA6b3BlbiAgICAgLCMnY29uc3VsdC0tb3Blbi1idWZmZXIKICAgIDppdGVtcwogICAg LChsYW1iZGEgKCkKICAgICAgIChsZXQgKChmaWx0ZXIgKGNvbnN1bHQtLXJlZ2V4cC1maWx0ZXIg Y29uc3VsdC1idWZmZXItZmlsdGVyKSkpCiAgICAgICAgIChzZXEtcmVtb3ZlIChsYW1iZGEgKHgp IChzdHJpbmctbWF0Y2gtcCBmaWx0ZXIgeCkpCiAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0 LS1jYWNoZWQtYnVmZmVyLW5hbWVzKSkpKSkKICAiQnVmZmVyIGNhbmRpZGF0ZSBzb3VyY2UgZm9y IGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ2YXIgY29uc3VsdC0tc291cmNlLWZpbGUKICBgKDpu YW1lICAgICAiRmlsZSIKICAgIDpuYXJyb3cgICA/ZgogICAgOmNhdGVnb3J5IGZpbGUKICAgIDpm YWNlICAgICBjb25zdWx0LWZpbGUKICAgIDpoaXN0b3J5ICBmaWxlLW5hbWUtaGlzdG9yeQogICAg Om9wZW4gICAgICwjJ2NvbnN1bHQtLW9wZW4tZmlsZQogICAgOml0ZW1zCiAgICAsKGxhbWJkYSAo KQogICAgICAgKGxldCAoKGh0IChjb25zdWx0LS1jYWNoZWQtYnVmZmVyLWZpbGUtaGFzaCkpKQog ICAgICAgICAoc2VxLXJlbW92ZSAobGFtYmRhICh4KSAoZ2V0aGFzaCB4IGh0KSkgcmVjZW50Zi1s aXN0KSkpKQogICJSZWNlbnQgZmlsZSBjYW5kaWRhdGUgc291cmNlIGZvciBgY29uc3VsdC1idWZm ZXInLiIpCgooZGVmdW4gY29uc3VsdC0tYnVmZmVyIChkaXNwbGF5KQogICJCYWNrZW5kIGltcGxl bWVudGF0aW9uIG9mIGBjb25zdWx0LWJ1ZmZlcicgd2l0aCBESVNQTEFZIGZ1bmN0aW9uLiIKICAo Y29uc3VsdC0tbXVsdGkKICAgIlN3aXRjaCB0bzogIgogICBjb25zdWx0LWJ1ZmZlci1zb3VyY2Vz CiAgIDpoaXN0b3J5ICdjb25zdWx0LS1idWZmZXItaGlzdG9yeQogICA6c29ydCBuaWwKICAgOnBy ZXZpZXcKICAgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICh3aGVuIGNhbmQKICAgICAgIChs ZXQgKChuYW1lIChjYXIgY2FuZCkpCiAgICAgICAgICAgICAoYWN0aW9uIChvciAocGxpc3QtZ2V0 IChjZHIgY2FuZCkgOm9wZW4pICMnY29uc3VsdC0tb3Blbi1idWZmZXIpKSkKICAgICAgICAgKGNv bmQKICAgICAgICAgIChyZXN0b3JlIChmdW5jYWxsIGFjdGlvbiBuYW1lIGRpc3BsYXkpKQogICAg ICAgICAgOzsgSW4gb3JkZXIgdG8gYXZvaWQgc2xvd25lc3MgYW5kIHVubmVjZXNzYXJ5IGNvbXBs ZXhpdHksIHdlCiAgICAgICAgICA7OyBvbmx5IHByZXZpZXcgYnVmZmVycy4gTG9hZGluZyByZWNl bnQgZmlsZXMsIGJvb2ttYXJrcyBvcgogICAgICAgICAgOzsgdmlld3MgY2FuIHJlc3VsdCBpbiBl eHBlbnNpdmUgb3BlcmF0aW9ucy4KICAgICAgICAgICgoYW5kIChlcSBhY3Rpb24gIydjb25zdWx0 LS1vcGVuLWJ1ZmZlcikKICAgICAgICAgICAgICAgIChvciAoZXEgZGlzcGxheSAjJ3N3aXRjaC10 by1idWZmZXIpCiAgICAgICAgICAgICAgICAgICAgKGVxIGRpc3BsYXkgIydzd2l0Y2gtdG8tYnVm ZmVyLW90aGVyLXdpbmRvdykpCiAgICAgICAgICAgICAgICAoZ2V0LWJ1ZmZlciBuYW1lKSkKICAg ICAgICAgICAoZnVuY2FsbCBkaXNwbGF5IG5hbWUgJ25vcmVjb3JkKSkpKSkpKSkKCjs7OyMjI2F1 dG9sb2FkCihkZWZ1biBjb25zdWx0LWJ1ZmZlciAoKQogICJFbmhhbmNlZCBgc3dpdGNoLXRvLWJ1 ZmZlcicgY29tbWFuZCB3aXRoIHN1cHBvcnQgZm9yIHZpcnR1YWwgYnVmZmVycy4KClRoZSBjb21t YW5kIHN1cHBvcnRzIHJlY2VudCBmaWxlcywgYm9va21hcmtzLCB2aWV3cyBhbmQgcHJvamVjdCBm aWxlcyBhcyB2aXJ0dWFsCmJ1ZmZlcnMuIEJ1ZmZlcnMgYXJlIHByZXZpZXdlZC4gRnVydGhlcm1v cmUgbmFycm93aW5nIHRvIGJ1ZmZlcnMgKGIpLCBmaWxlcyAoZiksCmJvb2ttYXJrcyAobSkgYW5k IHByb2plY3QgZmlsZXMgKHApIGlzIHN1cHBvcnRlZCB2aWEgdGhlIGNvcnJlc3BvbmRpbmcga2V5 cy4gSW4Kb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBwcm9qZWN0LXNwZWNpZmljIGZpbGVzIGFuZCBi dWZmZXJzLCB0aGUKYGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uJyBpcyB1c2VkLiBTZWUg YGNvbnN1bHQtYnVmZmVyLXNvdXJjZXMnIGFuZApgY29uc3VsdC0tbXVsdGknIGZvciB0aGUgY29u ZmlndXJhdGlvbiBvZiB0aGUgdmlydHVhbCBidWZmZXIgc291cmNlcy4iCiAgKGludGVyYWN0aXZl KQogIChjb25zdWx0LS1idWZmZXIgIydzd2l0Y2gtdG8tYnVmZmVyKSkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBjb25zdWx0LWJ1ZmZlci1vdGhlci13aW5kb3cgKCkKICAiVmFyaWFudCBvZiBgY29u c3VsdC1idWZmZXInIHdoaWNoIG9wZW5zIGluIG90aGVyIHdpbmRvdy4iCiAgKGludGVyYWN0aXZl KQogIChjb25zdWx0LS1idWZmZXIgIydzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdykpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1idWZmZXItb3RoZXItZnJhbWUgKCkKICAiVmFy aWFudCBvZiBgY29uc3VsdC1idWZmZXInIHdoaWNoIG9wZW5zIGluIG90aGVyIGZyYW1lLiIKICAo aW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWJ1ZmZlciAjJ3N3aXRjaC10by1idWZmZXItb3RoZXIt ZnJhbWUpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1rbWFjcm8KCihkZWZ1biBjb25zdWx0LS1r bWFjcm8tY2FuZGlkYXRlcyAoKQogICJSZXR1cm4gYWxpc3Qgb2Yga21hY3JvcyBhbmQgaW5kaWNl cy4iCiAgKHRocmVhZC1sYXN0CiAgICAgIDs7IExpc3Qgb2YgbWFjcm9zCiAgICAgIChhcHBlbmQg KHdoZW4gbGFzdC1rYmQtbWFjcm8KICAgICAgICAgICAgICAgIGAoKCxsYXN0LWtiZC1tYWNybyAs a21hY3JvLWNvdW50ZXIgLGttYWNyby1jb3VudGVyLWZvcm1hdCkpKQogICAgICAgICAgICAgIGtt YWNyby1yaW5nKQogICAgOzsgQWRkIGluZGljZXMKICAgIChzZXEtbWFwLWluZGV4ZWQgIydjb25z KQogICAgOzsgRmlsdGVyIG1vdXNlIGNsaWNrcwogICAgKHNlcS1yZW1vdmUgKGxhbWJkYSAoeCkg KHNlcS1zb21lICMnbW91c2UtZXZlbnQtcCAoY2FhciB4KSkpKQogICAgOzsgRm9ybWF0IG1hY3Jv cwogICAgKG1hcGNhciAocGNhc2UtbGFtYmRhIChgKCgsa2V5cyAsY291bnRlciAsZm9ybWF0KSAu ICxpbmRleCkpCiAgICAgICAgICAgICAgKHByb3BlcnRpemUKICAgICAgICAgICAgICAgKGZvcm1h dC1rYmQtbWFjcm8ga2V5cyAxKQogICAgICAgICAgICAgICAnY29uc3VsdC0ta21hY3JvLWluZGV4 IGluZGV4CiAgICAgICAgICAgICAgICdjb25zdWx0LS1hbm5vdGF0aW9uCiAgICAgICAgICAgICAg IDs7IElmIHRoZSBjb3VudGVyIGlzIDAgYW5kIHRoZSBjb3VudGVyIGZvcm1hdCBpcyBpdHMgZGVm YXVsdCwKICAgICAgICAgICAgICAgOzsgdGhlbiB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoYXQg dGhlIGNvdW50ZXIgaXNuJ3QgYWN0dWFsbHkKICAgICAgICAgICAgICAgOzsgYmVpbmcgdXNlZC4g IFRoaXMgY2FuIG9ubHkgYmUgd3Jvbmcgd2hlbiBhIHVzZXIKICAgICAgICAgICAgICAgOzsgaW50 ZW50aW9uYWxseSBzdGFydHMgdGhlIGNvdW50ZXIgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIGFuZAog ICAgICAgICAgICAgICA7OyB0aGVuIGluY3JlbWVudHMgaXQgdG8gMC4KICAgICAgICAgICAgICAg KGNvbmQKICAgICAgICAgICAgICAgICgobm90IChzdHJpbmc9IGZvcm1hdCAiJWQiKSkgOzsgc2hv dyBjb3VudGVyIGZvciBub24tZGVmYXVsdCBmb3JtYXQKICAgICAgICAgICAgICAgICAoZm9ybWF0 ICIgKGNvdW50ZXI9JWQsIGZvcm1hdD0lcykgIiBjb3VudGVyIGZvcm1hdCkpCiAgICAgICAgICAg ICAgICAoKC89IGNvdW50ZXIgMCkgOzsgc2hvdyBjb3VudGVyIGlmIG5vbi16ZXJvCiAgICAgICAg ICAgICAgICAgKGZvcm1hdCAiIChjb3VudGVyPSVkKSIgY291bnRlcikpKSkpKQogICAgKGNvbnN1 bHQtLXJlbW92ZS1kdXBzKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1rbWFjcm8g KGFyZykKICAiUnVuIGEgY2hvc2VuIGtleWJvYXJkIG1hY3JvLgoKV2l0aCBwcmVmaXggQVJHLCBy dW4gdGhlIG1hY3JvIHRoYXQgbWFueSB0aW1lcy4KTWFjcm9zIGNvbnRhaW5pbmcgbW91c2UgY2xp Y2tzIGFyZSBvbWl0dGVkLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChsZXQgKChzZWxlY3RlZCAo Y29uc3VsdC0tcmVhZAogICAgICAgICAgICAgICAgICAgIktleWJvYXJkIG1hY3JvOiAiCiAgICAg ICAgICAgICAgICAgICAob3IgKGNvbnN1bHQtLWttYWNyby1jYW5kaWRhdGVzKQogICAgICAgICAg ICAgICAgICAgICAgICh1c2VyLWVycm9yICJObyBrZXlib2FyZCBtYWNyb3MgZGVmaW5lZCIpKQog ICAgICAgICAgICAgICAgICAgOmNhdGVnb3J5ICdjb25zdWx0LWttYWNybwogICAgICAgICAgICAg ICAgICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgICAgICAgICAgICAgICAgOnNvcnQgbmlsCiAgICAg ICAgICAgICAgICAgICA6aGlzdG9yeSAnY29uc3VsdC0ta21hY3JvLWhpc3RvcnkKICAgICAgICAg ICAgICAgICAgIDphbm5vdGF0ZSAjJ2NvbnN1bHQtLWdldC1hbm5vdGF0aW9uCiAgICAgICAgICAg ICAgICAgICA6bG9va3VwCiAgICAgICAgICAgICAgICAgICAobGFtYmRhIChfIGNhbmRpZGF0ZXMg Y2FuZCkKICAgICAgICAgICAgICAgICAgICAgKGdldC10ZXh0LXByb3BlcnR5IDAgJ2NvbnN1bHQt LWttYWNyby1pbmRleAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNh ciAobWVtYmVyIGNhbmQgY2FuZGlkYXRlcykpKSkpKSkKICAgIChpZiAoPSAwIHNlbGVjdGVkKQog ICAgICAgIDs7IElmIHRoZSBmaXJzdCBlbGVtZW50IGhhcyBiZWVuIHNlbGVjdGVkLCBqdXN0IHJ1 biB0aGUgbGFzdCBtYWNyby4KICAgICAgICAoa21hY3JvLWNhbGwtbWFjcm8gKG9yIGFyZyAxKSB0 IG5pbCkKICAgICAgOzsgT3RoZXJ3aXNlLCBydW4gYSBrbWFjcm8gZnJvbSB0aGUgcmluZy4KICAg ICAgKGxldCogKChzZWxlY3RlZCAoLSBzZWxlY3RlZCAxKSkKICAgICAgICAgICAgIChrbWFjcm8g KG50aCBzZWxlY3RlZCBrbWFjcm8tcmluZykpCiAgICAgICAgICAgICA7OyBUZW1wb3JhcmlseSBj aGFuZ2UgdGhlIHZhcmlhYmxlcyB0byByZXRyaWV2ZSB0aGUgY29ycmVjdAogICAgICAgICAgICAg Ozsgc2V0dGluZ3MuICBNYWlubHksIHdlIHdhbnQgdGhlIG1hY3JvIGNvdW50ZXIgdG8gcGVyc2lz dCwgd2hpY2gKICAgICAgICAgICAgIDs7IGF1dG9tYXRpY2FsbHkgaGFwcGVucyB3aGVuIGN5Y2xp bmcgdGhlIHJpbmcuCiAgICAgICAgICAgICAobGFzdC1rYmQtbWFjcm8gKGNhciBrbWFjcm8pKQog ICAgICAgICAgICAgKGttYWNyby1jb3VudGVyIChjYWRyIGttYWNybykpCiAgICAgICAgICAgICAo a21hY3JvLWNvdW50ZXItZm9ybWF0IChjYWRkciBrbWFjcm8pKSkKICAgICAgICAoa21hY3JvLWNh bGwtbWFjcm8gKG9yIGFyZyAxKSB0KQogICAgICAgIDs7IE9uY2UgZG9uZSwgcHV0IHVwZGF0ZWQg dmFyaWFibGVzIGJhY2sgaW50byB0aGUgcmluZy4KICAgICAgICAoc2V0ZiAobnRoIHNlbGVjdGVk IGttYWNyby1yaW5nKQogICAgICAgICAgICAgIChsaXN0IGxhc3Qta2JkLW1hY3JvCiAgICAgICAg ICAgICAgICAgICAga21hY3JvLWNvdW50ZXIKICAgICAgICAgICAgICAgICAgICBrbWFjcm8tY291 bnRlci1mb3JtYXQpKSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtaW1lbnUKCihkZWZ1biBj b25zdWx0LS1pbWVudS1zcGVjaWFsIChfbmFtZSBwb3MgYnVmIG5hbWUgZm4gJnJlc3QgYXJncykK ICAiV3JhcHBlciBmdW5jdGlvbiBmb3Igc3BlY2lhbCBpbWVudSBpdGVtcy4KClBPUyBpcyB0aGUg cG9zaXRpb24uCkJVRiBpcyB0aGUgYnVmZmVyLgpOQU1FIGlzIHRoZSBpdGVtIG5hbWUuCkZOIGlz IHRoZSBvcmlnaW5hbCBzcGVjaWFsIGl0ZW0gZnVuY3Rpb24uCkFSR1MgYXJlIHRoZSBhcmd1bWVu dHMgdG8gdGhlIHNwZWNpYWwgaXRlbSBmdW5jdGlvbi4iCiAgKHN3aXRjaC10by1idWZmZXIgYnVm KQogIChhcHBseSBmbiBuYW1lIHBvcyBhcmdzKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1mbGF0 dGVuIChwcmVmaXggbGlzdCkKICAiRmxhdHRlbiBpbWVudSBMSVNULgpQcmVwZW5kIFBSRUZJWCBp biBmcm9udCBvZiBhbGwgaXRlbXMuIgogIChtYXBjYW4KICAgKGxhbWJkYSAoaXRlbSkKICAgICAo aWYgKGltZW51LS1zdWJhbGlzdC1wIGl0ZW0pCiAgICAgICAgIChjb25zdWx0LS1pbWVudS1mbGF0 dGVuCiAgICAgICAgICAoY29uY2F0IHByZWZpeCAoYW5kIHByZWZpeCAiLyIpIChjYXIgaXRlbSkp CiAgICAgICAgICAoY2RyIGl0ZW0pKQogICAgICAgKGxldCAoKGtleSAoY29uY2F0CiAgICAgICAg ICAgICAgICAgICAoYW5kIHByZWZpeCAoY29uY2F0IChwcm9wZXJ0aXplIHByZWZpeCAnZmFjZSAn Y29uc3VsdC1pbWVudS1wcmVmaXgpICIgIikpCiAgICAgICAgICAgICAgICAgICAoY2FyIGl0ZW0p KSkKICAgICAgICAgICAgIChwYXlsb2FkIChjZHIgaXRlbSkpKQogICAgICAgICAobGlzdCAoY29u cyBrZXkKICAgICAgICAgICAgICAgICAgICAgKHBjYXNlIHBheWxvYWQKICAgICAgICAgICAgICAg ICAgICAgICA7OyBTaW1wbGUgbWFya2VyIGl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAoKHBy ZWQgbWFya2VycCkgcGF5bG9hZCkKICAgICAgICAgICAgICAgICAgICAgICA7OyBTaW1wbGUgaW50 ZWdlciBpdGVtCiAgICAgICAgICAgICAgICAgICAgICAgKChwcmVkIGludGVnZXJwKSAoY29weS1t YXJrZXIgcGF5bG9hZCkpCiAgICAgICAgICAgICAgICAgICAgICAgOzsgU2VtYW50aWMgdXNlcyBv dmVybGF5IGZvciBwb3NpdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAoKHByZWQgb3Zlcmxh eXApIChjb3B5LW1hcmtlciAob3ZlcmxheS1zdGFydCBwYXlsb2FkKSkpCiAgICAgICAgICAgICAg ICAgICAgICAgOzsgV3JhcCBzcGVjaWFsIGl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAoYCgs cG9zICxmbiAuICxhcmdzKQogICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kCiAgICAgICAg ICAgICAgICAgICAgICAgICAobGlzdCBwb3MgIydjb25zdWx0LS1pbWVudS1zcGVjaWFsIChjdXJy ZW50LWJ1ZmZlcikgKGNhciBpdGVtKSBmbikKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Mp KQogICAgICAgICAgICAgICAgICAgICAgIChfIChlcnJvciAiVW5rbm93biBpbWVudSBpdGVtOiAl UyIgaXRlbSkpKSkpKSkpCiAgIGxpc3QpKQoKKGRlZnVuIGNvbnN1bHQtLWltZW51LWNvbXB1dGUg KCkKICAiQ29tcHV0ZSBpbWVudSBjYW5kaWRhdGVzLiIKICAoY29uc3VsdC0tZm9yYmlkLW1pbmli dWZmZXIpCiAgKGxldCogKChpbWVudS1hdXRvLXJlc2NhbiB0KQogICAgICAgICAoaW1lbnUtdXNl LW1hcmtlcnMgdCkKICAgICAgICAgKGl0ZW1zIChpbWVudS0tbWFrZS1pbmRleC1hbGlzdCB0KSkp CiAgICAoc2V0cSBpdGVtcyAocmVtb3ZlIGltZW51LS1yZXNjYW4taXRlbSBpdGVtcykpCiAgICA7 OyBGaXggdG9wbGV2ZWwgaXRlbXMsIGUuZy4sIGVtYWNzLWxpc3AtbW9kZSB0b3BsZXZlbCBpdGVt cyBhcmUgZnVuY3Rpb25zCiAgICAod2hlbi1sZXQgKHRvcGxldmVsIChjZHIgKHNlcS1maW5kIChs YW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlcml2 ZWQtbW9kZS1wIChjYXIgeCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdWx0LWltZW51LXRvcGxldmVsKSkpCiAgICAgIChsZXQgKCh0b3BzIChzZXEtcmVtb3Zl IChsYW1iZGEgKHgpIChsaXN0cCAoY2RyIHgpKSkgaXRlbXMpKQogICAgICAgICAgICAocmVzdCAo c2VxLWZpbHRlciAobGFtYmRhICh4KSAobGlzdHAgKGNkciB4KSkpIGl0ZW1zKSkpCiAgICAgICAg KHNldHEgaXRlbXMgKGFwcGVuZCByZXN0IChhbmQgdG9wcyAobGlzdCAoY29ucyB0b3BsZXZlbCB0 b3BzKSkpKSkpKQogICAgKGNvbnN1bHQtLWltZW51LWZsYXR0ZW4gbmlsIGl0ZW1zKSkpCgooZGVm dW4gY29uc3VsdC0taW1lbnUtaXRlbXMgKCkKICAiUmV0dXJuIGNhY2hlZCBpbWVudSBjYW5kaWRh dGVzLiIKICAodW5sZXNzIChlcXVhbCAoY2FyIGNvbnN1bHQtLWltZW51LWNhY2hlKSAoYnVmZmVy LW1vZGlmaWVkLXRpY2spKQogICAgKHNldHEgY29uc3VsdC0taW1lbnUtY2FjaGUgKGNvbnMgKGJ1 ZmZlci1tb2RpZmllZC10aWNrKSAoY29uc3VsdC0taW1lbnUtY29tcHV0ZSkpKSkKICAoY2RyIGNv bnN1bHQtLWltZW51LWNhY2hlKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1hbGwtaXRlbXMgKGJ1 ZmZlcnMpCiAgIlJldHVybiBhbGwgaW1lbnUgaXRlbXMgZnJvbSBlYWNoIEJVRkZFUlMuIgogIChz ZXEtbWFwY2F0IChsYW1iZGEgKGJ1ZikgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmIChjb25zdWx0 LS1pbWVudS1pdGVtcykpKSBidWZmZXJzKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1wcm9qZWN0 LWJ1ZmZlcnMgKCkKICAiUmV0dXJuIHByb2plY3QgYnVmZmVycyB3aXRoIHRoZSBzYW1lIGBtYWpv ci1tb2RlJyBhcyB0aGUgY3VycmVudCBidWZmZXIuIgogIChpZi1sZXQgKHJvb3QgKGFuZCBjb25z dWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbiAoZnVuY2FsbCBjb25zdWx0LXByb2plY3Qtcm9vdC1m dW5jdGlvbikpKQogICAgICAoc2VxLWZpbHRlciAobGFtYmRhIChidWYpCiAgICAgICAgICAgICAg ICAgICAgKHdoZW4tbGV0IChmaWxlIChidWZmZXItZmlsZS1uYW1lIGJ1ZikpCiAgICAgICAgICAg ICAgICAgICAgICAoYW5kIChlcSAoYnVmZmVyLWxvY2FsLXZhbHVlICdtYWpvci1tb2RlIGJ1Zikg bWFqb3ItbW9kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1wcmVmaXgtcCBy b290IGZpbGUpKSkpCiAgICAgICAgICAgICAgICAgIChidWZmZXItbGlzdCkpCiAgICAobGlzdCAo Y3VycmVudC1idWZmZXIpKSkpCgooZGVmdW4gY29uc3VsdC0taW1lbnUtanVtcCAoaXRlbSkKICAi SnVtcCB0byBpbWVudSBJVEVNIHZpYSBgY29uc3VsdC0tanVtcCcuCgpJbiBjb250cmFzdCB0byB0 aGUgYnVpbHRpbiBgaW1lbnUnIGp1bXAgZnVuY3Rpb24sCnRoaXMgZnVuY3Rpb24gY2FuIGp1bXAg YWNyb3NzIGJ1ZmZlcnMuIgogIChwY2FzZSBpdGVtCiAgICAoYCgsbmFtZSAscG9zICxmbiAuICxh cmdzKSAoYXBwbHkgZm4gbmFtZSBwb3MgYXJncykpCiAgICAoYCgsXyAuICxwb3MpIChjb25zdWx0 LS1qdW1wIHBvcykpCiAgICAoXyAoZXJyb3IgIlVua25vd24gaW1lbnUgaXRlbTogJVMiIGl0ZW0p KSkpCgooZGVmdW4gY29uc3VsdC0taW1lbnUgKGl0ZW1zKQogICJDaG9vc2UgZnJvbSBpbWVudSBJ VEVNUyB3aXRoIHByZXZpZXcuCgpUaGUgc3ltYm9sIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBm dXR1cmUgaGlzdG9yeS4iCiAgKGNvbnN1bHQtLWltZW51LWp1bXAKICAgKGNvbnN1bHQtLXJlYWQK ICAgICJHbyB0byBpdGVtOiAiCiAgICAob3IgaXRlbXMgKHVzZXItZXJyb3IgIkltZW51IGlzIGVt cHR5IikpCiAgICA6cHJldmlldwogICAgKGxldCAoKHByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXct cG9zaXRpb24pKSkKICAgICAgKGxhbWJkYSAoY2FuZCByZXN0b3JlKQogICAgICAgIDs7IE9ubHkg cHJldmlldyBzaW1wbGUgbWVudSBpdGVtcyB3aGljaCBhcmUgbWFya2VycywKICAgICAgICA7OyBp biBvcmRlciB0byBhdm9pZCBhbnkgYmFkIHNpZGUgZWZmZWN0cy4KICAgICAgICAoZnVuY2FsbCBw cmV2aWV3IChhbmQgKG1hcmtlcnAgKGNkciBjYW5kKSkgKGNkciBjYW5kKSkgcmVzdG9yZSkpKQog ICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgOm5hcnJvdwogICAgKGxldCAoKG5hcnJvdyAoY2RyIChz ZXEtZmluZCAobGFtYmRhICh4KSAoZGVyaXZlZC1tb2RlLXAgKGNhciB4KSkpIGNvbnN1bHQtaW1l bnUtbmFycm93KSkpKQogICAgICAoY29ucyAobGFtYmRhIChjYW5kKQogICAgICAgICAgICAgICh3 aGVuLWxldCAobiAoY2RyIChhc3NvYyBjb25zdWx0LS1uYXJyb3cgbmFycm93KSkpCiAgICAgICAg ICAgICAgICAobGV0KiAoKGMgKGNhciBjYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAobCAo bGVuZ3RoIG4pKSkKICAgICAgICAgICAgICAgICAgKGFuZCAoPiAobGVuZ3RoIGMpIGwpCiAgICAg ICAgICAgICAgICAgICAgICAgKGVxIHQgKGNvbXBhcmUtc3RyaW5ncyBuIDAgbCBjIDAgbCkpCiAg ICAgICAgICAgICAgICAgICAgICAgKD0gKGFyZWYgYyBsKSAzMikpKSkpCiAgICAgICAgICAgIG5h cnJvdykpCiAgICA6Y2F0ZWdvcnkgJ2ltZW51CiAgICA6bG9va3VwICMnY29uc3VsdC0tbG9va3Vw LWVsZW0KICAgIDpoaXN0b3J5ICdjb25zdWx0LS1pbWVudS1oaXN0b3J5CiAgICA6YWRkLWhpc3Rv cnkgKHRoaW5nLWF0LXBvaW50ICdzeW1ib2wpCiAgICA6c29ydCBuaWwpKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LWltZW51ICgpCiAgIkNob29zZSBpdGVtIGZyb20gZmxhdHRlbmVk IGBpbWVudScgdXNpbmcgYGNvbXBsZXRpbmctcmVhZCcgd2l0aCBwcmV2aWV3LgoKVGhlIGNvbW1h bmQgc3VwcG9ydHMgcHJldmlldyBhbmQgbmFycm93aW5nLiBTZWUgdGhlIHZhcmlhYmxlCmBjb25z dWx0LWltZW51LW5hcnJvdycsIHdoaWNoIGNvbmZpZ3VyZXMgdGhlIG5hcnJvd2luZy4KClNlZSBh bHNvIGBjb25zdWx0LXByb2plY3QtaW1lbnUnLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQt LWltZW51IChjb25zdWx0LS1pbWVudS1pdGVtcykpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNv bnN1bHQtcHJvamVjdC1pbWVudSAoKQogICJDaG9vc2UgaXRlbSBmcm9tIHRoZSBpbWVudXMgb2Yg YWxsIGJ1ZmZlcnMgZnJvbSB0aGUgc2FtZSBwcm9qZWN0LgoKSW4gb3JkZXIgdG8gZGV0ZXJtaW5l IHRoZSBidWZmZXJzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBwcm9qZWN0LCB0aGUKYGNvbnN1bHQt cHJvamVjdC1yb290LWZ1bmN0aW9uJyBpcyB1c2VkLiBPbmx5IHRoZSBidWZmZXJzIHdpdGggdGhl CnNhbWUgbWFqb3IgbW9kZSBhcyB0aGUgY3VycmVudCBidWZmZXIgYXJlIHVzZWQuIFNlZSBhbHNv CmBjb25zdWx0LWltZW51JyBmb3IgbW9yZSBkZXRhaWxzLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNv bnN1bHQtLWltZW51IChjb25zdWx0LS1pbWVudS1hbGwtaXRlbXMgKGNvbnN1bHQtLWltZW51LXBy b2plY3QtYnVmZmVycykpKSkKCihkZWZ1biBjb25zdWx0LS1ncmVwLW1hdGNoZXMgKGxpbmVzKQog ICJGaW5kIGdyZXAgbWF0Y2ggZm9yIFJFR0VYUCBpbiBMSU5FUy4iCiAgKGxldCAoKGNhbmRpZGF0 ZXMpKQogICAgKHNhdmUtbWF0Y2gtZGF0YQogICAgICAoZG9saXN0IChzdHIgbGluZXMpCiAgICAg ICAgKHdoZW4gKHN0cmluZy1tYXRjaCBjb25zdWx0LS1ncmVwLXJlZ2V4cCBzdHIpCiAgICAgICAg ICAobGV0KiAoKGZpbGUgKGV4cGFuZC1maWxlLW5hbWUgKGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNj YXBlIChtYXRjaC1zdHJpbmcgMSBzdHIpKSkpCiAgICAgICAgICAgICAgICAgKGxpbmUgKHN0cmlu Zy10by1udW1iZXIgKGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNjYXBlIChtYXRjaC1zdHJpbmcgMiBz dHIpKSkpCiAgICAgICAgICAgICAgICAgKHN0ciAoc3Vic3RyaW5nIHN0ciAobWF0Y2gtZW5kIDAp KSkKICAgICAgICAgICAgICAgICAobG9jIChjb25zdWx0LS1mb3JtYXQtbG9jYXRpb24gKHN0cmlu Zy1yZW1vdmUtcHJlZml4IGRlZmF1bHQtZGlyZWN0b3J5IGZpbGUpIGxpbmUpKQogICAgICAgICAg ICAgICAgIChwb3MpKQogICAgICAgICAgICAod2hpbGUgKHN0cmluZy1tYXRjaCBjb25zdWx0LS1n cmVwLW1hdGNoLXJlZ2V4cCBzdHIpCiAgICAgICAgICAgICAgKHVubGVzcyBwb3MKICAgICAgICAg ICAgICAgIChzZXRxIHBvcyAobWF0Y2gtYmVnaW5uaW5nIDApKSkKICAgICAgICAgICAgICAoc2V0 cSBzdHIgKGNvbmNhdCAoc3Vic3RyaW5nIHN0ciAwIChtYXRjaC1iZWdpbm5pbmcgMCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKG1hdGNoLXN0cmluZyAxIHN0 cikgJ2ZhY2UgJ2NvbnN1bHQtcHJldmlldy1tYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3Vic3RyaW5nIHN0ciAobWF0Y2gtZW5kIDApKSkpKQogICAgICAgICAgICAoc2V0 cSBzdHIgKGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNjYXBlIHN0cikpCiAgICAgICAgICAgIChwdXNo IChsaXN0IChjb25jYXQgbG9jIHN0cikgZmlsZSBsaW5lIChvciBwb3MgMCkpIGNhbmRpZGF0ZXMp KSkpKQogICAgKG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQt Z3JlcAoKKGRlZnVuIGNvbnN1bHQtLWdyZXAtbWFya2VyIChvcGVuKQogICJHcmVwIGNhbmRpZGF0 ZSB0byBtYXJrZXIuCgpPUEVOIGlzIHRoZSBmdW5jdGlvbiB0byBvcGVuIG5ldyBmaWxlcy4iCiAg KGxhbWJkYSAoX2lucHV0IGNhbmRpZGF0ZXMgY2FuZCkKICAgICh3aGVuLWxldCogKChsb2MgKGNk ciAoYXNzb2MgY2FuZCBjYW5kaWRhdGVzKSkpCiAgICAgICAgICAgICAgICAoYnVmIChmdW5jYWxs IG9wZW4gKGNhciBsb2MpKSkpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAgICAg IChzYXZlLXJlc3RyaWN0aW9uCiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAg KHdpZGVuKQogICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgICAgICAgICA7 OyBMb2NhdGlvbiBkYXRhIG1pZ2h0IGJlIGludmFsaWQgYnkgbm93IQogICAgICAgICAgICAoaWdu b3JlLWVycm9ycwogICAgICAgICAgICAgIChmb3J3YXJkLWxpbmUgKC0gKGNhZHIgbG9jKSAxKSkK ICAgICAgICAgICAgICAoZm9yd2FyZC1jaGFyIChjYWRkciBsb2MpKSkKICAgICAgICAgICAgKHBv aW50LW1hcmtlcikpKSkpKSkKCihkZWZ1biBjb25zdWx0LS1ncmVwIChwcm9tcHQgY21kIGRpciBp bml0aWFsKQogICJSdW4gZ3JlcCBDTUQgaW4gRElSIHdpdGggSU5JVElBTCBpbnB1dC4KClBST01Q VCBpcyB0aGUgcHJvbXB0IHN0cmluZy4KVGhlIHN5bWJvbCBhdCBwb2ludCBpcyBhZGRlZCB0byB0 aGUgZnV0dXJlIGhpc3RvcnkuIgogIChsZXQqICgocHJvbXB0LWRpciAoY29uc3VsdC0tZGlyZWN0 b3J5LXByb21wdCBwcm9tcHQgZGlyKSkKICAgICAgICAgKGRlZmF1bHQtZGlyZWN0b3J5IChjZHIg cHJvbXB0LWRpcikpKQogICAgKGNvbnN1bHQtLXdpdGgtZmlsZS1wcmV2aWV3IChvcGVuKQogICAg ICAoY29uc3VsdC0tanVtcAogICAgICAgKGNvbnN1bHQtLXJlYWQKICAgICAgICAoY2FyIHByb21w dC1kaXIpCiAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWNvbW1hbmQgY21kCiAgICAgICAgICAoY29u c3VsdC0tYXN5bmMtdHJhbnNmb3JtIGNvbnN1bHQtLWdyZXAtbWF0Y2hlcykpCiAgICAgICAgOmxv b2t1cCAoY29uc3VsdC0tZ3JlcC1tYXJrZXIgb3BlbikKICAgICAgICA6cHJldmlldyAoY29uc3Vs dC0tcHJldmlldy1wb3NpdGlvbikKICAgICAgICA6aW5pdGlhbCAoY29uY2F0IGNvbnN1bHQtYXN5 bmMtZGVmYXVsdC1zcGxpdCBpbml0aWFsKQogICAgICAgIDphZGQtaGlzdG9yeSAoY29uY2F0IGNv bnN1bHQtYXN5bmMtZGVmYXVsdC1zcGxpdCAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkpCiAgICAg ICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgICAgIDpjYXRlZ29yeSAneHJlZi1sb2NhdGlvbgogICAg ICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWdyZXAtaGlzdG9yeSkKICAgICAgICA6c29y dCBuaWwpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtZ3JlcCAoJm9wdGlvbmFs IGRpciBpbml0aWFsKQogICJTZWFyY2ggZm9yIHJlZ2V4cCB3aXRoIGdyZXAgaW4gRElSIHdpdGgg SU5JVElBTCBpbnB1dC4KClRoZSBpbnB1dCBzdHJpbmcgaXMgc3BsaXQsIHRoZSBmaXJzdCBwYXJ0 IG9mIHRoZSBzdHJpbmcgaXMgcGFzc2VkIHRvCnRoZSBhc3luY2hyb25vdXMgZ3JlcCBwcm9jZXNz IGFuZCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHN0cmluZyBpcwpwYXNzZWQgdG8gdGhlIGNvbXBs ZXRpb24tc3R5bGUgZmlsdGVyaW5nLiBUaGUgaW5wdXQgc3RyaW5nIGlzIHNwbGl0IGF0CmEgcHVu Y3R1YXRpb24gY2hhcmFjdGVyLCB3aGljaCBpcyBnaXZlbiBhcyB0aGUgZmlyc3QgY2hhcmFjdGVy IG9mIHRoZQppbnB1dCBzdHJpbmcuIFRoZSBmb3JtYXQgaXMgc2ltaWxhciB0byBQZXJsLXN0eWxl IHJlZ3VsYXIgZXhwcmVzc2lvbnMsCmUuZy4sIC9yZWdleHAvLiBGdXJ0aGVybW9yZSBjb21tYW5k IGxpbmUgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIHRvCmdyZXAsIHNwZWNpZmllZCBiZWhpbmQgLS0u CgpFeGFtcGxlOiAjYXN5bmMtcmVnZXhwIC0tIGdyZXAtb3B0cyNmaWx0ZXItc3RyaW5nCgpUaGUg c3ltYm9sIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4gSWYgYGNvbnN1 bHQtZ3JlcCcKaXMgY2FsbGVkIGludGVyYWN0aXZlbHkgd2l0aCBhIHByZWZpeCBhcmd1bWVudCwg dGhlIHVzZXIgY2FuIHNwZWNpZnkKdGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggaW4uIEJ5IGRlZmF1 bHQgdGhlIHByb2plY3QgZGlyZWN0b3J5IGlzIHVzZWQKaWYgYGNvbnN1bHQtcHJvamVjdC1yb290 LWZ1bmN0aW9uJyBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIG5vbi1uaWwuCk90aGVyd2lzZSB0aGUg YGRlZmF1bHQtZGlyZWN0b3J5JyBpcyBzZWFyY2hlZC4iCiAgKGludGVyYWN0aXZlICJQIikKICAo Y29uc3VsdC0tZ3JlcCAiR3JlcCIgY29uc3VsdC1ncmVwLWNvbW1hbmQgZGlyIGluaXRpYWwpKQoK Ozs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtZ2l0LWdyZXAgKCZvcHRpb25hbCBkaXIgaW5p dGlhbCkKICAiU2VhcmNoIGZvciByZWdleHAgd2l0aCBncmVwIGluIERJUiB3aXRoIElOSVRJQUwg aW5wdXQuCgpTZWUgYGNvbnN1bHQtZ3JlcCcgZm9yIG1vcmUgZGV0YWlscy4iCiAgKGludGVyYWN0 aXZlICJQIikKICAoY29uc3VsdC0tZ3JlcCAiR2l0LWdyZXAiIGNvbnN1bHQtZ2l0LWdyZXAtY29t bWFuZCBkaXIgaW5pdGlhbCkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yaXBncmVw ICgmb3B0aW9uYWwgZGlyIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhwIHdpdGggcmcgaW4g RElSIHdpdGggSU5JVElBTCBpbnB1dC4KClNlZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRh aWxzLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChjb25zdWx0LS1ncmVwICJSaXBncmVwIiBjb25z dWx0LXJpcGdyZXAtY29tbWFuZCBkaXIgaW5pdGlhbCkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0 LWZpbmQKCihkZWZ1biBjb25zdWx0LS1maW5kIChwcm9tcHQgY21kIGluaXRpYWwpCiAgIlJ1biBm aW5kIENNRCBpbiBjdXJyZW50IGRpcmVjdG9yeSB3aXRoIElOSVRJQUwgaW5wdXQuCgpQUk9NUFQg aXMgdGhlIHByb21wdC4KQ01EIGlzIHRoZSBmaW5kIGFyZ3VtZW50IHN0cmluZy4KVGhlIGZpbGVu YW1lIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGZpbmQtZmls ZQogICAoY29uc3VsdC0tcmVhZAogICAgcHJvbXB0CiAgICAoY29uc3VsdC0tYXN5bmMtY29tbWFu ZCBjbWQKICAgICAgKGNvbnN1bHQtLWFzeW5jLW1hcCAobGFtYmRhICh4KSAoc3RyaW5nLXJlbW92 ZS1wcmVmaXggIi4vIiB4KSkpKQogICAgOnNvcnQgbmlsCiAgICA6cmVxdWlyZS1tYXRjaCB0CiAg ICA6aW5pdGlhbCAoY29uY2F0IGNvbnN1bHQtYXN5bmMtZGVmYXVsdC1zcGxpdCBpbml0aWFsKQog ICAgOmFkZC1oaXN0b3J5IChjb25jYXQgY29uc3VsdC1hc3luYy1kZWZhdWx0LXNwbGl0ICh0aGlu Zy1hdC1wb2ludCAnZmlsZW5hbWUpKQogICAgOmNhdGVnb3J5ICdmaWxlCiAgICA6aGlzdG9yeSAn KDppbnB1dCBjb25zdWx0LS1maW5kLWhpc3RvcnkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4g Y29uc3VsdC1maW5kICgmb3B0aW9uYWwgZGlyIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhw IHdpdGggZmluZCBpbiBESVIgd2l0aCBJTklUSUFMIGlucHV0LgoKVGhlIGZpbmQgcHJvY2VzcyBp cyBzdGFydGVkIGFzeW5jaHJvbm91c2x5LCBzaW1pbGFyIHRvIGBjb25zdWx0LWdyZXAnLgpTZWUg YGNvbnN1bHQtZ3JlcCcgZm9yIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgdGhlIGFzeW5jaHJvbm91 cyBzZWFyY2guIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGxldCogKChwcm9tcHQtZGlyIChjb25z dWx0LS1kaXJlY3RvcnktcHJvbXB0ICJGaW5kIiBkaXIpKQogICAgICAgICAoZGVmYXVsdC1kaXJl Y3RvcnkgKGNkciBwcm9tcHQtZGlyKSkpCiAgICAoY29uc3VsdC0tZmluZCAoY2FyIHByb21wdC1k aXIpIGNvbnN1bHQtZmluZC1jb21tYW5kIGluaXRpYWwpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1 biBjb25zdWx0LWxvY2F0ZSAoJm9wdGlvbmFsIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhw IHdpdGggbG9jYXRlIHdpdGggSU5JVElBTCBpbnB1dC4KClRoZSBsb2NhdGUgcHJvY2VzcyBpcyBz dGFydGVkIGFzeW5jaHJvbm91c2x5LCBzaW1pbGFyIHRvIGBjb25zdWx0LWdyZXAnLgpTZWUgYGNv bnN1bHQtZ3JlcCcgZm9yIG1vcmUgZGV0YWlscyByZWdhcmRpbmcgdGhlIGFzeW5jaHJvbm91cyBz ZWFyY2guIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tZmluZCAiTG9jYXRlOiAiIGNvbnN1 bHQtbG9jYXRlLWNvbW1hbmQgaW5pdGlhbCkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW1hbgoK KGRlZnVuIGNvbnN1bHQtLW1hbi1mb3JtYXQgKGxpbmVzKQogICJGb3JtYXQgbWFuIGNhbmRpZGF0 ZXMgZnJvbSBMSU5FUy4iCiAgKGxldCAoKGNhbmRpZGF0ZXMpKQogICAgKHNhdmUtbWF0Y2gtZGF0 YQogICAgICAoZG9saXN0IChzdHIgbGluZXMpCiAgICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCAi XlxcKC4qP1xcKSArLSArXFwoLipcXCkkIiBzdHIpCiAgICAgICAgICAobGV0ICgobmFtZSAobWF0 Y2gtc3RyaW5nIDEgc3RyKSkKICAgICAgICAgICAgICAgIChkZXNjIChtYXRjaC1zdHJpbmcgMiBz dHIpKSkKICAgICAgICAgICAgKHB1c2ggKGNvbnMKICAgICAgICAgICAgICAgICAgIChmb3JtYXQg IiUtMzBzICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZSBuYW1lICdm YWNlICdjb25zdWx0LWtleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYykKICAgICAg ICAgICAgICAgICAgIG5hbWUpCiAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMpKSkpKQogICAg KG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LW1h biAoJm9wdGlvbmFsIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVnZXhwIHdpdGggbWFuIHdpdGgg SU5JVElBTCBpbnB1dC4KClRoZSBtYW4gcHJvY2VzcyBpcyBzdGFydGVkIGFzeW5jaHJvbm91c2x5 LCBzaW1pbGFyIHRvIGBjb25zdWx0LWdyZXAnLgpTZWUgYGNvbnN1bHQtZ3JlcCcgZm9yIG1vcmUg ZGV0YWlscyByZWdhcmRpbmcgdGhlIGFzeW5jaHJvbm91cyBzZWFyY2guIgogIChpbnRlcmFjdGl2 ZSkKICAobWFuIChjb25zdWx0LS1yZWFkCiAgICAgICAgIk1hbnVhbCBlbnRyeTogIgogICAgICAg IChjb25zdWx0LS1hc3luYy1jb21tYW5kIGNvbnN1bHQtbWFuLWNvbW1hbmQKICAgICAgICAgIChj b25zdWx0LS1hc3luYy10cmFuc2Zvcm0gY29uc3VsdC0tbWFuLWZvcm1hdCkpCiAgICAgICAgOnJl cXVpcmUtbWF0Y2ggdAogICAgICAgIDpsb29rdXAgIydjb25zdWx0LS1sb29rdXAtY2RyCiAgICAg ICAgOmluaXRpYWwgKGNvbmNhdCBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQgaW5pdGlhbCkK ICAgICAgICA6YWRkLWhpc3RvcnkgKGNvbmNhdCBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQg KHRoaW5nLWF0LXBvaW50ICdzeW1ib2wpKQogICAgICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1 bHQtLW1hbi1oaXN0b3J5KSkpKQoKOzs7OyBJbnRlZ3JhdGlvbiB3aXRoIHRoZSBkZWZhdWx0IGNv bXBsZXRpb24gc3lzdGVtCgooZGVmdW4gY29uc3VsdC0tZGVmYXVsdC1jb21wbGV0aW9uLWNhbmRp ZGF0ZSAoKQogICJSZXR1cm4gY3VycmVudCBjYW5kaWRhdGUgZnJvbSBkZWZhdWx0IGNvbXBsZXRp b24gc3lzdGVtLiIKICAod2hlbiAoYW5kIChub3QgaWNvbXBsZXRlLW1vZGUpIChlcSBjb21wbGV0 aW5nLXJlYWQtZnVuY3Rpb24gIydjb21wbGV0aW5nLXJlYWQtZGVmYXVsdCkpCiAgICAobGV0ICgo Y2FuZCAobWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0aWVzKSkpCiAgICAgICh3aGVuICh0 ZXN0LWNvbXBsZXRpb24gY2FuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZm ZXItY29tcGxldGlvbi10YWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmlidWZm ZXItY29tcGxldGlvbi1wcmVkaWNhdGUpCiAgICAgICAgY2FuZCkpKSkKCihkZWZ1biBjb25zdWx0 LS1kZWZhdWx0LWNvbXBsZXRpb24tZmlsdGVyIChjYXRlZ29yeSBfaGlnaGxpZ2h0KQogICJSZXR1 cm4gZGVmYXVsdCBmaWx0ZXIgZnVuY3Rpb24gZ2l2ZW4gdGhlIGNvbXBsZXRpb24gQ0FURUdPUlku CgpUaGUgY29tcGxldGlvbiBjYXRlZ29yeSBpcyB1c2VkIHRvIGZpbmQgdGhlIGNvbXBsZXRpb24g c3R5bGUgdmlhCmBjb21wbGV0aW9uLWNhdGVnb3J5LWRlZmF1bHRzJyBhbmQgYGNvbXBsZXRpb24t Y2F0ZWdvcnktb3ZlcnJpZGVzJy4iCiAgKGxhbWJkYSAoc3RyIGNhbmRzKQogICAgOzsgY29tcGxl dGlvbi1hbGwtY29tcGxldGlvbnMgcmV0dXJucyBhbiBpbXByb3BlciBsaXN0CiAgICA7OyB3aGVy ZSB0aGUgbGFzdCBsaW5rIGlzIG5vdCBuZWNlc3NhcmlseSBuaWwuIEZpeCB0aGlzIQogICAgKG5j b25jIChjb21wbGV0aW9uLWFsbC1jb21wbGV0aW9ucwogICAgICAgICAgICBzdHIgY2FuZHMgbmls IChsZW5ndGggc3RyKQogICAgICAgICAgICBgKG1ldGFkYXRhIChjYXRlZ29yeSAuICxjYXRlZ29y eSkpKQogICAgICAgICAgIG5pbCkpKQoKOzsgQW5ub3VuY2Ugbm93IHRoYXQgY29uc3VsdCBoYXMg YmVlbiBsb2FkZWQKKHByb3ZpZGUgJ2NvbnN1bHQpCgo7Ozs7IEludGVncmF0aW9uIHdpdGggb3Ro ZXIgY29tcGxldGlvbiBzeXN0ZW1zCgood2l0aC1ldmFsLWFmdGVyLWxvYWQgJ2ljb21wbGV0ZSAo cmVxdWlyZSAnY29uc3VsdC1pY29tcGxldGUpKQood2l0aC1ldmFsLWFmdGVyLWxvYWQgJ3NlbGVj dHJ1bSAocmVxdWlyZSAnY29uc3VsdC1zZWxlY3RydW0pKQoKOzsgTG9jYWwgVmFyaWFibGVzOgo7 OyBvdXRsaW5lLXJlZ2V4cDogIjs7OzsqIFxcfChkZWZcXCh1blxcfGN1c3RvbVxcfHZhclxcKSBj b25zdWx0LVthLXpdIgo7OyBFbmQ6Cjs7OyBjb25zdWx0LmVsIGVuZHMgaGVyZQo= --=_8eacb995e016baed37890613fffd2ad6 Content-Transfer-Encoding: base64 Content-Type: text/plain; name=consult-27e055e7c75e2148449e7b0be4d464b03c36a1bd.el Content-Disposition: attachment; filename=consult-27e055e7c75e2148449e7b0be4d464b03c36a1bd.el; size=142288 Ozs7IGNvbnN1bHQuZWwgLS0tIENvbnN1bHRpbmcgY29tcGxldGluZy1yZWFkIC0qLSBsZXhpY2Fs LWJpbmRpbmc6IHQgLSotCgo7OyBBdXRob3I6IERhbmllbCBNZW5kbGVyLCBDb25zdWx0IGFuZCBT ZWxlY3RydW0gY29udHJpYnV0b3JzCjs7IE1haW50YWluZXI6IERhbmllbCBNZW5kbGVyCjs7IENy ZWF0ZWQ6IDIwMjAKOzsgTGljZW5zZTogR1BMLTMuMC1vci1sYXRlcgo7OyBWZXJzaW9uOiAwLjMK OzsgUGFja2FnZS1SZXF1aXJlczogKChlbWFjcyAiMjYuMSIpKQo7OyBIb21lcGFnZTogaHR0cHM6 Ly9naXRodWIuY29tL21pbmFkL2NvbnN1bHQKCjs7IFRoaXMgZmlsZSBpcyBub3QgcGFydCBvZiBH TlUgRW1hY3MuCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7 IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7 IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBDb25zdWx0IGlt cGxlbWVudHMgYSBzZXQgb2YgYGNvbnN1bHQtPHRoaW5nPicgY29tbWFuZHMgd2hpY2ggdXNlCjs7 IGBjb21wbGV0aW5nLXJlYWQnIHRvIHNlbGVjdCBmcm9tIGEgbGlzdCBvZiBjYW5kaWRhdGVzLiBD b25zdWx0Cjs7IHByb3ZpZGVzIGFuIGVuaGFuY2VkIGJ1ZmZlciBzd2l0Y2hlciBgY29uc3VsdC1i dWZmZXInIGFuZCBtYW55Cjs7IHNlYXJjaCBhbmQgbmF2aWdhdGlvbiBjb21tYW5kcyBsaWtlIGBj b25zdWx0LWltZW51JyBhbmQKOzsgYGNvbnN1bHQtbGluZScuIFNlYXJjaGluZyB0aHJvdWdoIG11 bHRpcGxlIGZpbGVzIGlzIHN1cHBvcnRlZCBieQo7OyB0aGUgcG93ZXJmdWwgYXN5bmNocm9ub3Vz IGBjb25zdWx0LWdyZXAnIGNvbW1hbmQuIE1hbnkgQ29uc3VsdAo7OyBjb21tYW5kcyBhbGxvdyBw cmV2aWV3aW5nIGNhbmRpZGF0ZXMgLSBpZiBhIGNhbmRpZGF0ZSBpcyBzZWxlY3RlZAo7OyBpbiB0 aGUgY29tcGxldGlvbiB2aWV3LCB0aGUgYnVmZmVyIHNob3dzIHRoZSBjYW5kaWRhdGUgaW1tZWRp YXRlbHkuCgo7OyBUaGUgQ29uc3VsdCBjb21tYW5kcyBhcmUgY29tcGF0aWJsZSB3aXRoIGNvbXBs ZXRpb24gc3lzdGVtcyBiYXNlZAo7OyBvbiB0aGUgRW1hY3MgYGNvbXBsZXRpbmctcmVhZCcgQVBJ LCBub3RhYmx5IHRoZSBkZWZhdWx0IGNvbXBsZXRpb24KOzsgc3lzdGVtLCBJY29tcGxldGUsIFNl bGVjdHJ1bSBhbmQgRW1iYXJrLgoKOzsgQ29uc3VsdCBoYXMgYmVlbiBpbnNwaXJlZCBieSBDb3Vu c2VsLiBTb21lIG9mIHRoZSBDb25zdWx0IGNvbW1hbmRzCjs7IG9yaWdpbmF0ZWQgaW4gdGhlIFNl bGVjdHJ1bSB3aWtpLiBTZWUgdGhlIFJFQURNRSBmb3IgYSBmdWxsIGxpc3Qgb2YKOzsgY29udHJp YnV0b3JzLgoKOzs7IENvZGU6CgooZXZhbC13aGVuLWNvbXBpbGUKICAocmVxdWlyZSAnY2wtbGli KQogIChyZXF1aXJlICdzdWJyLXgpKQoocmVxdWlyZSAnYm9va21hcmspCihyZXF1aXJlICdjb21w aWxlKQoocmVxdWlyZSAnaW1lbnUpCihyZXF1aXJlICdrbWFjcm8pCihyZXF1aXJlICdvdXRsaW5l KQoocmVxdWlyZSAncmVjZW50ZikKKHJlcXVpcmUgJ3JpbmcpCihyZXF1aXJlICdzZXEpCgooZGVm Z3JvdXAgY29uc3VsdCBuaWwKICAiQ29uc3VsdGluZyBgY29tcGxldGluZy1yZWFkJy4iCiAgOmdy b3VwICdjb252ZW5pZW5jZQogIDpwcmVmaXggImNvbnN1bHQtIikKCjs7OzsgQ3VzdG9taXphdGlv bgoKKGRlZmN1c3RvbSBjb25zdWx0LW5hcnJvdy1rZXkgbmlsCiAgIlByZWZpeCBrZXkgZm9yIG5h cnJvd2luZyBkdXJpbmcgY29tcGxldGlvbi4KCkdvb2QgY2hvaWNlcyBmb3IgdGhpcyBrZXkgYXJl IChrYmQgXCI8XCIpIG9yIChrYmQgXCJDLStcIikgZm9yIGV4YW1wbGUuCgpUaGUga2V5IG11c3Qg YmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVzZW50 YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0b3Ig c3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC13aWRlbi1rZXkgbmlsCiAg IktleSB1c2VkIGZvciB3aWRlbmluZyBkdXJpbmcgY29tcGxldGlvbi4KCklmIHRoaXMga2V5IGlz IHVuc2V0LCBkZWZhdWx0cyB0byAnY29uc3VsdC1uYXJyb3cta2V5IFNQQycuCgpUaGUga2V5IG11 c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgdmVjdG9yLgpUaGlzIGlzIHRoZSBrZXkgcmVwcmVz ZW50YXRpb24gYWNjZXB0ZWQgYnkgYGRlZmluZS1rZXknLiIKICA6dHlwZSAnKGNob2ljZSB2ZWN0 b3Igc3RyaW5nIChjb25zdCBuaWwpKSkKCihkZWZjdXN0b20gY29uc3VsdC1wcm9qZWN0LXJvb3Qt ZnVuY3Rpb24gbmlsCiAgIkZ1bmN0aW9uIHdoaWNoIHJldHVybnMgcHJvamVjdCByb290IGRpcmVj dG9yeS4KClRoZSByb290IGRpcmVjdG9yeSBpcyB1c2VkIGJ5IGBjb25zdWx0LWJ1ZmZlcicgYW5k IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnKGNob2ljZSBmdW5jdGlvbiAoY29uc3QgbmlsKSkp CgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtcmVmcmVzaC1kZWxheSAwLjI1CiAgIlJlZnJlc2hp bmcgZGVsYXkgb2YgdGhlIGNvbXBsZXRpb24gdWkgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4K ClRoZSBjb21wbGV0aW9uIHVpIGlzIG9ubHkgdXBkYXRlZCBldmVyeSBgY29uc3VsdC1hc3luYy1y ZWZyZXNoLWRlbGF5JwpzZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8gYXN5bmNocm9ub3VzIGNvbW1h bmRzIGxpa2UgZm9yIGV4YW1wbGUKYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdmbG9hdCkKCihk ZWZjdXN0b20gY29uc3VsdC1hc3luYy1pbnB1dC10aHJvdHRsZSAwLjUKICAiSW5wdXQgdGhyb3R0 bGUgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kcy4KClRoZSBhc3luY2hyb25vdXMgcHJvY2VzcyBp cyBzdGFydGVkIG9ubHkgZXZlcnkKYGNvbnN1bHQtYXN5bmMtaW5wdXQtdGhyb3R0bGUnIHNlY29u ZHMuIFRoaXMgYXBwbGllcyB0byBhc3luY2hyb25vdXMKY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0 LWdyZXAnLiIKICA6dHlwZSAnZmxvYXQpCgooZGVmY3VzdG9tIGNvbnN1bHQtYXN5bmMtaW5wdXQt ZGVib3VuY2UgMC4yNQogICJJbnB1dCBkZWJvdW5jZSBmb3IgYXN5bmNocm9ub3VzIGNvbW1hbmRz LgoKVGhlIGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHN0YXJ0ZWQgb25seSB3aGVuIHRoZXJlIGhh cyBub3QgYmVlbiBuZXcKaW5wdXQgZm9yIGBjb25zdWx0LWFzeW5jLWlucHV0LWRlYm91bmNlJyBz ZWNvbmRzLiBUaGlzIGFwcGxpZXMgdG8KYXN5bmNocm9ub3VzIGNvbW1hbmRzLCBlLmcuLCBgY29u c3VsdC1ncmVwJy4iCiAgOnR5cGUgJ2Zsb2F0KQoKKGRlZmN1c3RvbSBjb25zdWx0LWFzeW5jLW1p bi1pbnB1dCAzCiAgIk1pbmltdW0gbnVtYmVyIG9mIGxldHRlcnMgbmVlZGVkLCBiZWZvcmUgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaXMgY2FsbGVkLgoKVGhpcyBhcHBsaWVzIHRvIGFzeW5jaHJvbm91 cyBjb21tYW5kcywgZS5nLiwgYGNvbnN1bHQtZ3JlcCcuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRl ZmN1c3RvbSBjb25zdWx0LWFzeW5jLWRlZmF1bHQtc3BsaXQgIiMiCiAgIkRlZmF1bHQgYXN5bmMg aW5wdXQgc2VwYXJhdG9yIHVzZWQgZm9yIHNwbGl0dGluZy4KCkNhbiBhbHNvIGJlIG5pbCBpbiBv cmRlciB0byBub3QgYXV0b21hdGljYWxseSBpbnNlcnQgYSBzZXBhcmF0b3IuIFRoaXMKYXBwbGll cyB0byBhc3luY2hyb25vdXMgY29tbWFuZHMsIGUuZy4sIGBjb25zdWx0LWdyZXAnLiIKICA6dHlw ZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LW1vZGUtaGlzdG9yaWVzCiAgJygoZXNoZWxs LW1vZGUgLiBlc2hlbGwtaGlzdG9yeS1yaW5nKQogICAgKGNvbWludC1tb2RlIC4gY29taW50LWlu cHV0LXJpbmcpCiAgICAodGVybS1tb2RlICAgLiB0ZXJtLWlucHV0LXJpbmcpKQogICJBbGlzdCBv ZiAobW9kZSAuIGhpc3RvcnkpIHBhaXJzIG9mIG1vZGUgaGlzdG9yaWVzLgpUaGUgaGlzdG9yaWVz IGNhbiBiZSByaW5ncyBvciBsaXN0cy4iCiAgOnR5cGUgJyhsaXN0IChjb25zIHN5bWJvbCBzeW1i b2wpKSkKCihkZWZjdXN0b20gY29uc3VsdC10aGVtZXMgbmlsCiAgIkxpc3Qgb2YgdGhlbWVzIHRv IGJlIHByZXNlbnRlZCBmb3Igc2VsZWN0aW9uLgpuaWwgc2hvd3MgYWxsIGBjdXN0b20tYXZhaWxh YmxlLXRoZW1lcycuIgogIDp0eXBlICcocmVwZWF0IHN5bWJvbCkpCgooZGVmY3VzdG9tIGNvbnN1 bHQtYWZ0ZXItanVtcC1ob29rICcocmVjZW50ZXIpCiAgIkZ1bmN0aW9uIGNhbGxlZCBhZnRlciBq dW1waW5nIHRvIGEgbG9jYXRpb24uCgpDb21tb25seSB1c2VkIGZ1bmN0aW9ucyBmb3IgdGhpcyBo b29rIGFyZSBgcmVjZW50ZXInIGFuZApgcmVwb3NpdGlvbi13aW5kb3cnLgoKVGhpcyBpcyBjYWxs ZWQgZHVyaW5nIHByZXZpZXcgYW5kIGZvciB0aGUganVtcCBhZnRlciBzZWxlY3Rpb24uCllvdSBt YXkgd2FudCB0byBhZGQgYSBmdW5jdGlvbiB3aGljaCBwdWxzZXMgdGhlIGN1cnJlbnQgbGluZSwg ZS5nLiwKYHhyZWYtcHVsc2UtbW9tZW50YXJpbHknLiIKICA6dHlwZSAnaG9vaykKCihkZWZjdXN0 b20gY29uc3VsdC1saW5lLXBvaW50LXBsYWNlbWVudCAnbWF0Y2gtYmVnaW5uaW5nCiAgIldoZXJl IHRvIGxlYXZlIHBvaW50IGFmdGVyIGBjb25zdWx0LWxpbmUnIGp1bXBzIHRvIGEgbWF0Y2guIgog IDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhlIGxpbmUiIGxpbmUt YmVnaW5uaW5nKQogICAgICAgICAgICAgICAgIChjb25zdCA6dGFnICJCZWdpbm5pbmcgb2YgdGhl IG1hdGNoIiBtYXRjaC1iZWdpbm5pbmcpCiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkVu ZCBvZiB0aGUgbWF0Y2giIG1hdGNoLWVuZCkpKQoKKGRlZmN1c3RvbSBjb25zdWx0LWxpbmUtbnVt YmVycy13aWRlbiB0CiAgIlNob3cgYWJzb2x1dGUgbGluZSBudW1iZXJzIHdoZW4gbmFycm93aW5n IGlzIGFjdGl2ZS4KClNlZSBhbHNvIGBkaXNwbGF5LWxpbmUtbnVtYmVycy13aWRlbicuIgogIDp0 eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzIHQKICAi U2hvdyBsaW5lIG51bWJlcnMgZm9yIGBjb25zdWx0LWdvdG8tbGluZScuIgogIDp0eXBlICdib29s ZWFuKQoKKGRlZmN1c3RvbSBjb25zdWx0LWZvbnRpZnktbWF4LXNpemUgMTA0ODU3NgogICJCdWZm ZXJzIGxhcmdlciB0aGFuIHRoaXMgYnl0ZSBsaW1pdCBhcmUgbm90IGZvbnRpZmllZC4KClRoaXMg aXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgYSBsYXJnZSBzdGFydHVwIHRpbWUKZm9y IG5hdmlnYXRpb24gY29tbWFuZHMgbGlrZSBgY29uc3VsdC1saW5lJy4iCiAgOnR5cGUgJ2ludGVn ZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtbmFycm93CiAgJygoZW1hY3MtbGlzcC1tb2Rl IC4gKCg/ZiAuICJGdW5jdGlvbnMiKQogICAgICAgICAgICAgICAgICAgICAgICAoP20gLiAiTWFj cm9zIikKICAgICAgICAgICAgICAgICAgICAgICAgKD9wIC4gIlBhY2thZ2VzIikKICAgICAgICAg ICAgICAgICAgICAgICAgKD90IC4gIlR5cGVzIikKICAgICAgICAgICAgICAgICAgICAgICAgKD92 IC4gIlZhcmlhYmxlcyIpKSkpCiAgIk5hcnJvd2luZyBrZXlzIHVzZWQgYnkgYGNvbnN1bHQtaW1l bnUnLiIKICA6dHlwZSAnYWxpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtaW1lbnUtdG9wbGV2ZWwK ICAnKChlbWFjcy1saXNwLW1vZGUgLiAiRnVuY3Rpb25zIikpCiAgIkNhdGVnb3J5IG9mIHRvcGxl dmVsIGl0ZW1zLCB1c2VkIGJ5IGBjb25zdWx0LWltZW51Jy4KClRoZSBpbWVudSByZXByZXNlbnRh dGlvbiBwcm92aWRlZCBieSB0aGUgYmFja2VuZCB1c3VhbGx5IHB1dHMKZnVuY3Rpb25zIGRpcmVj dGx5IGF0IHRoZSB0b3BsZXZlbC4gYGNvbnN1bHQtaW1lbnUnIG1vdmVzIHRoZW0gaW5zdGVhZAp1 bmRlciB0aGUgY2F0ZWdvcnkgc3BlY2lmaWVkIGJ5IHRoaXMgdmFyaWFibGUuIgogIDp0eXBlICdh bGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1idWZmZXItZmlsdGVyCiAgJygiXiAiKQogICJGaWx0 ZXIgcmVnZXhwcyBmb3IgYGNvbnN1bHQtYnVmZmVyJy4KClRoZSBkZWZhdWx0IHNldHRpbmcgaXMg dG8gZmlsdGVyIG9ubHkgZXBoZW1lcmFsIGJ1ZmZlciBuYW1lcyBiZWdpbm5pbmcKd2l0aCBhIHNw YWNlIGNoYXJhY3Rlci4iCiAgOnR5cGUgJyhyZXBlYXQgcmVnZXhwKSkKCihkZWZjdXN0b20gY29u c3VsdC1idWZmZXItc291cmNlcwogICcoY29uc3VsdC0tc291cmNlLWhpZGRlbi1idWZmZXIKICAg IGNvbnN1bHQtLXNvdXJjZS1idWZmZXIKICAgIGNvbnN1bHQtLXNvdXJjZS1maWxlCiAgICBjb25z dWx0LS1zb3VyY2UtYm9va21hcmsKICAgIGNvbnN1bHQtLXNvdXJjZS1wcm9qZWN0LWJ1ZmZlcgog ICAgY29uc3VsdC0tc291cmNlLXByb2plY3QtZmlsZSkKICAiU291cmNlcyB1c2VkIGJ5IGBjb25z dWx0LWJ1ZmZlcicuCgpTZWUgYGNvbnN1bHQtLW11bHRpJyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0 aGUgc291cmNlIHZhbHVlcy4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9tIGNvbnN1bHQtbW9k ZS1jb21tYW5kLWZpbHRlcgogICcoOzsgRmlsdGVyIGNvbW1hbmRzCiAgICAiLW1vZGUkIiAiLS0i CiAgICA7OyBGaWx0ZXIgd2hvbGUgZmVhdHVyZXMKICAgIHNpbXBsZSBtd2hlZWwgdGltZSBzby1s b25nIHJlY2VudGYpCiAgIkZpbHRlciBjb21tYW5kcyBmb3IgYGNvbnN1bHQtbW9kZS1jb21tYW5k Jy4iCiAgOnR5cGUgJyhyZXBlYXQgKGNob2ljZSBzeW1ib2wgcmVnZXhwKSkpCgooZGVmY3VzdG9t IGNvbnN1bHQtZ2l0LWdyZXAtY29tbWFuZAogICJnaXQgLS1uby1wYWdlciBncmVwIC0tbnVsbCAt LWNvbG9yPWFsd2F5cyAtLWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1saW5lLW51bWJlciAtSSAtZSBB UkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ2l0LWdyZXAsIHNlZSBgY29u c3VsdC1naXQtZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZ3Jl cC1jb21tYW5kCiAgImdyZXAgLS1udWxsIC0tbGluZS1idWZmZXJlZCAtLWNvbG9yPWFsd2F5cyAt LWV4dGVuZGVkLXJlZ2V4cFwKICAgLS1leGNsdWRlLWRpcj0uZ2l0IC0tbGluZS1udW1iZXIgLUkg LXIgLiAtZSBBUkcgT1BUUyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgZ3JlcCwgc2Vl IGBjb25zdWx0LWdyZXAnLiIKICA6dHlwZSAnc3RyaW5nKQoKKGRlZmN1c3RvbSBjb25zdWx0LXJp cGdyZXAtY29tbWFuZAogICJyZyAtLW51bGwgLS1saW5lLWJ1ZmZlcmVkIC0tY29sb3I9YWx3YXlz IC0tbWF4LWNvbHVtbnM9NTAwXAogICAtLW5vLWhlYWRpbmcgLS1saW5lLW51bWJlciAuIC1lIEFS RyBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciByaXBncmVwLCBzZWUgYGNvbnN1 bHQtcmlwZ3JlcCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtZmluZC1j b21tYW5kCiAgImZpbmQgLiAtbm90ICggLXdob2xlbmFtZSAqLy4qIC1wcnVuZSApIC1pcGF0aCAq QVJHKiBPUFRTIgogICJDb21tYW5kIGxpbmUgYXJndW1lbnRzIGZvciBmaW5kLCBzZWUgYGNvbnN1 bHQtZmluZCcuIgogIDp0eXBlICdzdHJpbmcpCgooZGVmY3VzdG9tIGNvbnN1bHQtbG9jYXRlLWNv bW1hbmQKICAibG9jYXRlIC0taWdub3JlLWNhc2UgLS1leGlzdGluZyAtLXJlZ2V4cCBBUkcgT1BU UyIKICAiQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgbG9jYXRlLCBzZWUgYGNvbnN1bHQtbG9j YXRlJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29uc3VsdC1tYW4tY29tbWFuZAog ICJtYW4gLWsgQVJHIE9QVFMiCiAgIkNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIG1hbiBhcHJv cG9zLCBzZWUgYGNvbnN1bHQtbWFuJy4iCiAgOnR5cGUgJ3N0cmluZykKCihkZWZjdXN0b20gY29u c3VsdC1wcmV2aWV3LWtleSAnYW55CiAgIlByZXZpZXcgdHJpZ2dlciBrZXlzLCBjYW4gYmUgbmls LCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtleXMuIgogIDp0eXBlICcoY2hvaWNl IChjb25zdCBhbnkpIChjb25zdCBuaWwpIHZlY3RvciBzdHJpbmcgKHJlcGVhdCAoY2hvaWNlIHZl Y3RvciBzdHJpbmcpKSkpCgooZGVmY3VzdG9tIGNvbnN1bHQtcHJldmlldy1tYXgtc2l6ZSAxMDQ4 NTc2MAogICJGaWxlcyBsYXJnZXIgdGhhbiB0aGlzIGJ5dGUgbGltaXQgYXJlIG5vdCBwcmV2aWV3 ZWQuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRlZmN1c3RvbSBjb25zdWx0LXByZXZpZXctbWF4LWNv dW50IDEwCiAgIk51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9wZW4gYXQgb25jZSBkdXJpbmcgcHJl dmlldy4iCiAgOnR5cGUgJ2ludGVnZXIpCgooZGVmY3VzdG9tIGNvbnN1bHQtcmVnaXN0ZXItbmFy cm93CiAgYCgoP24gIk51bWJlciIgLCMnbnVtYmVycCkKICAgICg/cyAiU3RyaW5nIiAsIydzdHJp bmdwKQogICAgKD9yICJSZWN0YW5nbGUiICwobGFtYmRhICh4KSAoc3RyaW5ncCAoY2FyLXNhZmUg eCkpKSkKICAgIDs7IGZyYW1lc2V0LXJlZ2lzdGVyLXAgYW5kIGttYWNyby1yZWdpc3Rlci1wIGV4 aXN0cyBzaW5jZSAyNy4xCiAgICAoP2YgIkZyYW1lc2V0IiAsKGxhbWJkYSAoeCkgKGVxICh0eXBl LW9mIHgpICdmcmFtZXNldC1yZWdpc3RlcikpKQogICAgKD9rICJLbWFjcm8iICwobGFtYmRhICh4 KSAoZXEgKHR5cGUtb2YgeCkgJ2ttYWNyby1yZWdpc3RlcikpKQogICAgKD9wICJQb2ludCIgLChs YW1iZGEgKHgpIChvciAobWFya2VycCB4KSAoZXEgKGNhci1zYWZlIHgpICdmaWxlLXF1ZXJ5KSkp KQogICAgKD93ICJXaW5kb3ciICwobGFtYmRhICh4KSAod2luZG93LWNvbmZpZ3VyYXRpb24tcCAo Y2FyLXNhZmUgeCkpKSkpCiAgIlJlZ2lzdGVyIG5hcnJvd2luZyBjb25maWd1cmF0aW9uLgoKRWFj aCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0aGUgZm9ybSAnKGNoYXIgbmFtZSBwcmVk aWNhdGUpLiIKICA6dHlwZSAnbGlzdCkKCihkZWZjdXN0b20gY29uc3VsdC1ib29rbWFyay1uYXJy b3cKICBgKCg/ZiAiRmlsZSIgIydib29rbWFyay1kZWZhdWx0LWhhbmRsZXIpCiAgICAoP2ggIkhl bHAiICMnaGVscC1ib29rbWFyay1qdW1wKQogICAgKD9pICJJbmZvIiAjJ0luZm8tYm9va21hcmst anVtcCkKICAgICg/cCAiUGljdHVyZSIgIydpbWFnZS1ib29rbWFyay1qdW1wKQogICAgKD9kICJE b2N2aWV3IiAjJ2RvYy12aWV3LWJvb2ttYXJrLWp1bXApCiAgICAoP20gIk1hbiIgIydNYW4tYm9v a21hcmstanVtcCkKICAgICg/dyAiV29tYW4iICMnd29tYW4tYm9va21hcmstanVtcCkKICAgICg/ ZyAiR251cyIgIydnbnVzLXN1bW1hcnktYm9va21hcmstanVtcCkpCiAgIkJvb2ttYXJrIG5hcnJv d2luZyBjb25maWd1cmF0aW9uLgoKRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IG11c3QgaGF2ZSB0 aGUgZm9ybSAnKGNoYXIgbmFtZSBoYW5kbGVyKS4iCiAgOnR5cGUgJ2xpc3QpCgooZGVmY3VzdG9t IGNvbnN1bHQtY29uZmlnIG5pbAogICJDb21tYW5kIGNvbmZpZ3VyYXRpb24gYWxpc3RzLCB3aGlj aCBhbGxvd3MgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24uCgpUaGUgb3B0aW9ucyBzZXQgaGVy ZSB3aWxsIGJlIHBhc3NlZCB0byBgY29uc3VsdC0tcmVhZCcsIHdoZW4gY2FsbGVkCmZyb20gdGhl IGNvcnJlc3BvbmRpbmcgY29tbWFuZC4gTm90ZSB0aGF0IHRoZSBvcHRpb25zIGRlcGVuZCBvbiB0 aGUKcHJpdmF0ZSBgY29uc3VsdC0tcmVhZCcgQVBJIGFuZCBzaG91bGQgbm90IGJlIGNvbnNpZGVy ZWQgYXMgc3RhYmxlIGFzCnRoZSBwdWJsaWMgQVBJLiIKICA6dHlwZSAnKGxpc3QgKGNvbnMgc3lt Ym9sIHBsaXN0KSkpCgo7Ozs7IEZhY2VzCgooZGVmZ3JvdXAgY29uc3VsdC1mYWNlcyBuaWwKICAi RmFjZXMgdXNlZCBieSBDb25zdWx0LiIKICA6Z3JvdXAgJ2NvbnN1bHQKICA6Z3JvdXAgJ2ZhY2Vz KQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWxpbmUKICAnKCh0IDppbmhlcml0IHJlZ2lvbikp CiAgIkZhY2UgdXNlZCB0byBmb3IgbGluZSBwcmV2aWV3cy4iKQoKKGRlZmZhY2UgY29uc3VsdC1w cmV2aWV3LW1hdGNoCiAgJygodCA6aW5oZXJpdCBtYXRjaCkpCiAgIkZhY2UgdXNlZCB0byBmb3Ig bWF0Y2ggcHJldmlld3MgaW4gYGNvbnN1bHQtZ3JlcCcuIikKCihkZWZmYWNlIGNvbnN1bHQtcHJl dmlldy1jdXJzb3IKICAnKCh0IDppbmhlcml0IGNvbnN1bHQtcHJldmlldy1tYXRjaCkpCiAgIkZh Y2UgdXNlZCB0byBmb3IgY3Vyc29yIHByZXZpZXdzIGFuZCBtYXJrcyBpbiBgY29uc3VsdC1tYXJr Jy4iKQoKKGRlZmZhY2UgY29uc3VsdC1wcmV2aWV3LWVycm9yCiAgJygodCA6aW5oZXJpdCBpc2Vh cmNoLWZhaWwpKQogICJGYWNlIHVzZWQgdG8gZm9yIGN1cnNvciBwcmV2aWV3cyBhbmQgbWFya3Mg aW4gYGNvbnN1bHQtZXJyb3InLiIpCgooZGVmZmFjZSBjb25zdWx0LXByZXZpZXcteWFuawogICco KHQgOmluaGVyaXQgY29uc3VsdC1wcmV2aWV3LWxpbmUpKQogICJGYWNlIHVzZWQgdG8gZm9yIHlh bmsgcHJldmlld3MgaW4gYGNvbnN1bHQteWFuaycuIikKCihkZWZmYWNlIGNvbnN1bHQtbmFycm93 LWluZGljYXRvcgogICcoKHQgOmluaGVyaXQgd2FybmluZykpCiAgIkZhY2UgdXNlZCBmb3IgdGhl IG5hcnJvd2luZyBpbmRpY2F0b3IuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5bmMtcnVubmluZwog ICcoKHQgOmluaGVyaXQgY29uc3VsdC1uYXJyb3ctaW5kaWNhdG9yKSkKICAiRmFjZSB1c2VkIGlm IGFzeW5jaHJvbm91cyBwcm9jZXNzIGlzIHJ1bm5pbmcuIikKCihkZWZmYWNlIGNvbnN1bHQtYXN5 bmMtZmluaXNoZWQKICAnKCh0IDppbmhlcml0IHN1Y2Nlc3MpKQogICJGYWNlIHVzZWQgaWYgYXN5 bmNocm9ub3VzIHByb2Nlc3MgaGFzIGZpbmlzaGVkLiIpCgooZGVmZmFjZSBjb25zdWx0LWFzeW5j LWZhaWxlZAogICcoKHQgOmluaGVyaXQgZXJyb3IpKQogICJGYWNlIHVzZWQgaWYgYXN5bmNocm9u b3VzIHByb2Nlc3MgaGFzIGZhaWxlZC4iKQoKKGRlZmZhY2UgY29uc3VsdC1hc3luYy1zcGxpdAog ICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLW5lZ2F0aW9uLWNoYXItZmFjZSkpCiAgIkZhY2UgdXNl ZCB0byBoaWdobGlnaHQgcHVuY3R1YXRpb24gY2hhcmFjdGVyLiIpCgooZGVmZmFjZSBjb25zdWx0 LWhlbHAKICAnKCh0IDppbmhlcml0IHNoYWRvdykpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQg aGVscCwgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXItc3RvcmUnLiIpCgooZGVmZmFjZSBjb25z dWx0LWtleQogICcoKHQgOmluaGVyaXQgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkpCiAgIkZhY2Ug dXNlZCB0byBoaWdobGlnaHQga2V5cywgZS5nLiwgaW4gYGNvbnN1bHQtcmVnaXN0ZXInLiIpCgoo ZGVmZmFjZSBjb25zdWx0LWltZW51LXByZWZpeAogICcoKHQgOmluaGVyaXQgY29uc3VsdC1rZXkp KQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0IGltZW51IHByZWZpeCBpbiBgY29uc3VsdC1pbWVu dScuIikKCihkZWZmYWNlIGNvbnN1bHQtbGluZS1udW1iZXIKICAnKCh0IDppbmhlcml0IGNvbnN1 bHQta2V5KSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBsb2NhdGlvbiBsaW5lIGluIGBjb25z dWx0LWdsb2JhbC1tYXJrJy4iKQoKKGRlZmZhY2UgY29uc3VsdC1maWxlCiAgJygodCA6aW5oZXJp dCBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSkKICAiRmFjZSB1c2VkIHRvIGhpZ2hsaWdo dCBmaWxlcyBpbiBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWJvb2ttYXJr CiAgJygodCA6aW5oZXJpdCBmb250LWxvY2stY29uc3RhbnQtZmFjZSkpCiAgIkZhY2UgdXNlZCB0 byBoaWdobGlnaHQgYm9va21hcmtzIGluIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZmYWNlIGNv bnN1bHQtYnVmZmVyCiAgJygodCkpCiAgIkZhY2UgdXNlZCB0byBoaWdobGlnaHQgYnVmZmVycyBp biBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmZmFjZSBjb25zdWx0LWxpbmUtbnVtYmVyLXByZWZp eAogICcoKHQgOmluaGVyaXQgbGluZS1udW1iZXIpKQogICJGYWNlIHVzZWQgdG8gaGlnaGxpZ2h0 IGxpbmUgbnVtYmVycyBpbiBzZWxlY3Rpb25zLiIpCgo7OyBmYWNlIGRlZmluaXRpb24gdGFrZW4g ZnJvbSBFbWJhcmsKKGRlZmZhY2UgY29uc3VsdC16ZWJyYQogICcoKGRlZmF1bHQgOmV4dGVuZCB0 KQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFja2dyb3VuZCBsaWdodCkp CiAgICAgOmJhY2tncm91bmQgIiNlZmVmZWYiKQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDg4KSAoYmFja2dyb3VuZCBkYXJrKSkKICAgICA6YmFja2dyb3VuZCAiIzI0MjQyNCIpKQog ICJGYWNlIHRvIGhpZ2hsaWdodCBhbHRlcm5hdGluZyByb3dzIGluIGBjb25zdWx0LXJlZ2lzdGVy LXdpbmRvdycuIikKCjs7OzsgSGlzdG9yeSB2YXJpYWJsZXMKCihkZWZ2YXIgY29uc3VsdC0ta2Vl cC1saW5lcy1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0LS1lcnJvci1oaXN0b3J5IG5pbCkK KGRlZnZhciBjb25zdWx0LS1ncmVwLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWZpbmQt aGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbWFuLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNv bnN1bHQtLWxpbmUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tYXByb3Bvcy1oaXN0b3J5 IG5pbCkKKGRlZnZhciBjb25zdWx0LS10aGVtZS1oaXN0b3J5IG5pbCkKKGRlZnZhciBjb25zdWx0 LS1taW5vci1tb2RlLW1lbnUtaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0tbW9kZS1jb21t YW5kLWhpc3RvcnkgbmlsKQooZGVmdmFyIGNvbnN1bHQtLWttYWNyby1oaXN0b3J5IG5pbCkKKGRl ZnZhciBjb25zdWx0LS1idWZmZXItaGlzdG9yeSBuaWwpCihkZWZ2YXIgY29uc3VsdC0taW1lbnUt aGlzdG9yeSBuaWwpCgo7Ozs7IEludGVybmFsIHZhcmlhYmxlcwoKKGRlZnZhciBjb25zdWx0LS1j YWNoZSBuaWwKICAiQ2FjaGVkIGRhdGEgcG9wdWxhdGVkIGJ5IGBjb25zdWx0LS1kZWZpbmUtY2Fj aGUnLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWhvb2sKICAobGlzdCAj J2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1maWx0ZXIpCiAgIk9idGFpbiBtYXRjaCBmdW5j dGlvbiBmcm9tIGNvbXBsZXRpb24gc3lzdGVtLiIpCgooZGVmdmFyIGNvbnN1bHQtLWNvbXBsZXRp b24tY2FuZGlkYXRlLWhvb2sKICAobGlzdCAjJ2NvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1j YW5kaWRhdGUpCiAgIkdldCBjYW5kaWRhdGUgZnJvbSBjb21wbGV0aW9uIHN5c3RlbS4iKQoKKGRl ZnZhciBjb25zdWx0LS1jb21wbGV0aW9uLXJlZnJlc2gtaG9vayBuaWwKICAiUmVmcmVzaCBjb21w bGV0aW9uIHN5c3RlbS4iKQoKKGRlZnZhci1sb2NhbCBjb25zdWx0LS1wcmV2aWV3LWZ1bmN0aW9u IG5pbAogICJNaW5pYnVmZmVyLWxvY2FsIHZhcmlhYmxlIHdoaWNoIGV4cG9zZXMgdGhlIGN1cnJl bnQgcHJldmlldyBmdW5jdGlvbi4KVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGJ5IGN1c3Rv bSBjb21wbGV0aW9uIHN5c3RlbXMgZnJvbSBvdXRzaWRlIHRoZSBtaW5pYnVmZmVyLgpUaGUgcHJl dmlldyBmdW5jdGlvbiBleHBlY3RzIHR3byBhcmd1bWVudHMsIHRoZSBjdXJyZW50IGlucHV0IHN0 cmluZyBhbmQgdGhlIGNhbmRpZGF0ZSBzdHJpbmcuIikKCihkZWZjb25zdCBjb25zdWx0LS10b2Z1 LWNoYXIgI3gxMDAwMDAKICAiU3BlY2lhbCBjaGFyYWN0ZXIgdXNlZCB0byBlbmNvZGUgbGluZSBw cmVmaXhlcyBmb3IgZGlzYW1iaWd1YXRpb24uCldlIHVzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9m IHRoZSBwcml2YXRlIHVuaWNvZGUgcGxhbmUgYi4iKQoKKGRlZmNvbnN0IGNvbnN1bHQtLXRvZnUt cmFuZ2UgI3hGRkZFCiAgIlNwZWNpYWwgY2hhcmFjdGVyIHJhbmdlLgpTaXplIG9mIHByaXZhdGUg dW5pY29kZSBwbGFuZSBiLiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdyBuaWwKICAi Q3VycmVudCBuYXJyb3dpbmcga2V5LiIpCgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLW5hcnJvdy1w cmVmaXhlcyBuaWwKICAiTmFycm93aW5nIHByZWZpeGVzIG9mIHRoZSBjdXJyZW50IGNvbXBsZXRp b24uIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0tbmFycm93LXByZWRpY2F0ZSBuaWwKICAiTmFy cm93aW5nIHByZWRpY2F0ZSBvZiB0aGUgY3VycmVudCBjb21wbGV0aW9uLiIpCgooZGVmdmFyLWxv Y2FsIGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5IG5pbAogICJOYXJyb3dpbmcgaW5kaWNhdG9yIG92 ZXJsYXkuIikKCihkZWZ2YXIgY29uc3VsdC0tZ2MtdGhyZXNob2xkIDY3MTA4ODY0CiAgIkxhcmdl IGdjIHRocmVzaG9sZCBmb3IgdGVtcG9yYXJ5IGluY3JlYXNlLiIpCgooZGVmdmFyIGNvbnN1bHQt LWdjLXBlcmNlbnRhZ2UgMC41CiAgIkxhcmdlIGdjIHBlcmNlbnRhZ2UgZm9yIHRlbXBvcmFyeSBp bmNyZWFzZS4iKQoKKGRlZnZhciBjb25zdWx0LS1hc3luYy1sb2cKICAiICpjb25zdWx0LWFzeW5j LWxvZyoiCiAgIkJ1ZmZlciBmb3IgYXN5bmMgbG9nZ2luZyBvdXRwdXQgdXNlZCBieSBgY29uc3Vs dC0tYXN5bmMtcHJvY2VzcycuIikKCihkZWZ2YXItbG9jYWwgY29uc3VsdC0taW1lbnUtY2FjaGUg bmlsCiAgIkJ1ZmZlciBsb2NhbCBjYWNoZWQgaW1lbnUuIikKCihkZWZjb25zdCBjb25zdWx0LS1n cmVwLXJlZ2V4cCAiXFwoW15cMFxuXStcXClcMFxcKFteOlwwXStcXClbOlwwXSIKICAiUmVnZXhw IHVzZWQgdG8gbWF0Y2ggZmlsZSBhbmQgbGluZSBvZiBncmVwIG91dHB1dC4iKQoKKGRlZmNvbnN0 IGNvbnN1bHQtLWdyZXAtbWF0Y2gtcmVnZXhwICJcZVxcW1swLTk7XSttXFwoLio/XFwpXGVcXFtb MC05O10qbSIKICAiUmVnZXhwIHVzZWQgdG8gZmluZCBtYXRjaGVzIGluIGdyZXAgb3V0cHV0LiIp CgooZGVmdmFyLWxvY2FsIGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzIG5pbAogICJPdmVy bGF5cyB1c2VkIGJ5IGBjb25zdWx0LWZvY3VzLWxpbmVzJy4iKQoKOzs7OyBIZWxwZXIgZnVuY3Rp b25zIGFuZCBtYWNyb3MKCihkZWZtYWNybyBjb25zdWx0LS1taW5pYnVmZmVyLXdpdGgtc2V0dXAt aG9vayAoZnVuICZyZXN0IGJvZHkpCiAgIlZhcmlhbnQgb2YgYG1pbmlidWZmZXItd2l0aC1zZXR1 cC1ob29rJyB1c2luZyBhIHN5bWJvbCBhbmQgYGZzZXQnLgoKVGhpcyBtYWNybyBpcyBvbmx5IG5l ZWRlZCB0byBwcmV2ZW50IG1lbW9yeSBsZWFraW5nIGlzc3VlcyB3aXRoCnRoZSB1cHN0cmVhbSBg bWluaWJ1ZmZlci13aXRoLXNldHVwLWhvb2snIG1hY3JvLgpGVU4gaXMgdGhlIGhvb2sgZnVuY3Rp b24gYW5kIEJPRFkgb3BlbnMgdGhlIG1pbmlidWZmZXIuIgogIChkZWNsYXJlIChpbmRlbnQgMSkg KGRlYnVnIHQpKQogIChsZXQgKChob29rIChtYWtlLXN5bWJvbCAiaG9vayIpKQogICAgICAgIChh cHBlbmQpKQogICAgKHdoZW4gKGVxIChjYXItc2FmZSBmdW4pIDphcHBlbmQpCiAgICAgIChzZXRx IGFwcGVuZCAnKHQpIGZ1biAoY2FkciBmdW4pKSkKICAgIGAobGV0ICgoLGhvb2sgKG1ha2Utc3lt Ym9sICJjb25zdWx0LS1taW5pYnVmZmVyLXNldHVwIikpKQogICAgICAgKGZzZXQgLGhvb2sgKGxh bWJkYSAoKQogICAgICAgICAgICAgICAgICAgICAocmVtb3ZlLWhvb2sgJ21pbmlidWZmZXItc2V0 dXAtaG9vayAsaG9vaykKICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgLGZ1bikpKQogICAg ICAgKHVud2luZC1wcm90ZWN0CiAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAoYWRkLWhv b2sgJ21pbmlidWZmZXItc2V0dXAtaG9vayAsaG9vayAsQGFwcGVuZCkKICAgICAgICAgICAgICxA Ym9keSkKICAgICAgICAgKHJlbW92ZS1ob29rICdtaW5pYnVmZmVyLXNldHVwLWhvb2sgLGhvb2sp KSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLWRlZmluZS1jYWNoZSAobmFtZSAmcmVzdCBib2R5KQog ICJEZWZpbmUgY2FjaGVkIHZhbHVlIHdpdGggTkFNRSBhbmQgQk9EWS4iCiAgKGRlY2xhcmUgKGlu ZGVudCAxKSkKICBgKGRlZnVuICxuYW1lICgpCiAgICAgKG9yIChhbGlzdC1nZXQgJyxuYW1lIGNv bnN1bHQtLWNhY2hlKQogICAgICAgICAoc2V0ZiAoYWxpc3QtZ2V0ICcsbmFtZSBjb25zdWx0LS1j YWNoZSkKICAgICAgICAgICAgICAgLChtYWNyb2V4cC1wcm9nbiBib2R5KSkpKSkKCihkZWZzdWJz dCBjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlciAoY2F0ZWdvcnkgaGlnaGxpZ2h0KQogICJSZXR1 cm4gZmlsdGVyIGZ1bmN0aW9uIHVzZWQgYnkgY29tcGxldGlvbiBzeXN0ZW0uCgpDQVRFR09SWSBp cyB0aGUgY29tcGxldGlvbiBjYXRlZ29yeS4KSElHSExJR0hUIG11c3QgYmUgdCBpZiBoaWdobGln aHRpbmcgaXMgbmVlZGVkLiIKICAocnVuLWhvb2std2l0aC1hcmdzLXVudGlsLXN1Y2Nlc3MgJ2Nv bnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWhvb2sgY2F0ZWdvcnkgaGlnaGxpZ2h0KSkKCihkZWZ1 biBjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlci1jb21wbGVtZW50IChjYXRlZ29yeSkKICAiUmV0 dXJuIGNvbXBsZW1lbnQgb2YgdGhlIGZpbHRlciBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBjb21wbGV0 aW9uIHN5c3RlbS4KCkNBVEVHT1JZIGlzIHRoZSBjb21wbGV0aW9uIGNhdGVnb3J5LiIKICAobGV0 ICgoZmlsdGVyIChjb25zdWx0LS1jb21wbGV0aW9uLWZpbHRlciBjYXRlZ29yeSBuaWwpKSkKICAg IChsYW1iZGEgKGlucHV0IGNhbmRzKQogICAgICAobGV0ICgoaHQgKGNvbnN1bHQtLXN0cmluZy1o YXNoIChmdW5jYWxsIGZpbHRlciBpbnB1dCBjYW5kcykpKSkKICAgICAgICAoc2VxLXJlbW92ZSAo bGFtYmRhICh4KSAoZ2V0aGFzaCB4IGh0KSkgY2FuZHMpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWNv bXBsZXRpb24tZmlsdGVyLWRpc3BhdGNoIChjYXRlZ29yeSBoaWdobGlnaHQpCiAgIlJldHVybiBk aXNwYXRjaGluZyBmaWx0ZXIgZnVuY3Rpb24uCgpFaXRoZXIgZGlzcGF0Y2ggdG8gYGNvbnN1bHQt LWNvbXBsZXRpb24tZmlsdGVyJyBvciB0bwpgY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXItY29t cGxlbWVudCcuCkNBVEVHT1JZIGlzIHRoZSBjb21wbGV0aW9uIGNhdGVnb3J5LgpISUdITElHSFQg bXVzdCBiZSB0IGlmIGhpZ2hsaWdodGluZyBpcyBuZWVkZWQuIgogIChsZXQgKChmaWx0ZXIgKGNv bnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyIGNhdGVnb3J5IGhpZ2hsaWdodCkpCiAgICAgICAgKGZp bHRlci1ub3QgKGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWNvbXBsZW1lbnQgY2F0ZWdvcnkp KSkKICAgIChsYW1iZGEgKGlucHV0IGNhbmRzKQogICAgICAoY29uZAogICAgICAgKChzdHJpbmct bWF0Y2gtcCAiXiE/ID8kIiBpbnB1dCkgY2FuZHMpIDs7IGVtcHR5IGlucHV0CiAgICAgICAoKHN0 cmluZy1wcmVmaXgtcCAiISAiIGlucHV0KSAoZnVuY2FsbCBmaWx0ZXItbm90IChzdWJzdHJpbmcg aW5wdXQgMikgY2FuZHMpKQogICAgICAgKHQgKGZ1bmNhbGwgZmlsdGVyIGlucHV0IGNhbmRzKSkp KSkpCgooZGVmbWFjcm8gY29uc3VsdC0tZWFjaC1saW5lIChiZWcgZW5kICZyZXN0IGJvZHkpCiAg Ikl0ZXJhdGUgb3ZlciBlYWNoIGxpbmUuCgpUaGUgbGluZSBiZWdpbm5pbmcvZW5kaW5nIEJFRy9F TkQgaXMgYm91bmQgaW4gQk9EWS4iCiAgKGRlY2xhcmUgKGluZGVudCAyKSkKICAobGV0ICgobWF4 IChtYWtlLXN5bWJvbCAibWF4IikpKQogICAgYChzYXZlLWV4Y3Vyc2lvbgogICAgICAgKGxldCAo KCxiZWcgKHBvaW50LW1pbikpICgsbWF4IChwb2ludC1tYXgpKSBlbmQpCiAgICAgICAgICh3aGls ZSAoPCAsYmVnICxtYXgpCiAgICAgICAgICAgKGdvdG8tY2hhciAsYmVnKQogICAgICAgICAgIChz ZXRxICxlbmQgKGxpbmUtZW5kLXBvc2l0aW9uKSkKICAgICAgICAgICAsQGJvZHkKICAgICAgICAg ICAoc2V0cSAsYmVnICgxKyAsZW5kKSkpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLXN0cmluZy1oYXNo IChzdHJpbmdzKQogICJDcmVhdGUgaGFzaHRhYmxlIGZyb20gU1RSSU5HUy4iCiAgKGxldCAoKGh0 IChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCA6c2l6ZSAobGVuZ3RoIHN0cmluZ3MpKSkp CiAgICAoZG9saXN0IChzdHIgc3RyaW5ncykKICAgICAgKHB1dGhhc2ggc3RyIHQgaHQpKQogICAg aHQpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLWxvY2FsLWxldCAoYmluZHMgJnJlc3QgYm9keSkKICAi QnVmZmVyIGxvY2FsIGxldCBCSU5EUyBvZiBkeW5hbWljIHZhcmlhYmxlcyBpbiBCT0RZLiIKICAo ZGVjbGFyZSAoaW5kZW50IDEpKQogIChsZXQgKChidWZmZXIgKG1ha2Utc3ltYm9sICJidWZmZXIi KSkKICAgICAgICAobG9jYWwgKG1hcGNhciAobGFtYmRhICh4KSAoY29ucyAobWFrZS1zeW1ib2wg ImxvY2FsIikgKGNhciB4KSkpIGJpbmRzKSkpCiAgICBgKGxldCAoKCxidWZmZXIgKGN1cnJlbnQt YnVmZmVyKSkKICAgICAgICAgICAsQChtYXBjYXIgKGxhbWJkYSAoeCkgYCgsKGNhciB4KSAobG9j YWwtdmFyaWFibGUtcCAnLChjZHIgeCkpKSkgbG9jYWwpKQogICAgICAgKHVud2luZC1wcm90ZWN0 CiAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAsQChtYXBjYXIgKGxhbWJkYSAoeCkgYCht YWtlLWxvY2FsLXZhcmlhYmxlICcsKGNhciB4KSkpIGJpbmRzKQogICAgICAgICAgICAgKGxldCAo LEBiaW5kcykKICAgICAgICAgICAgICAgLEBib2R5KSkKICAgICAgICAgKHdoZW4gKGJ1ZmZlci1s aXZlLXAgLGJ1ZmZlcikKICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAsYnVmZmVyCiAg ICAgICAgICAgICAsQChtYXBjYXIgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAgICAg IGAodW5sZXNzICwoY2FyIHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2lsbC1sb2Nh bC12YXJpYWJsZSAnLChjZHIgeCkpKSkKICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCkpKSkp KSkKCihkZWZ1biBjb25zdWx0LS1yZWdleHAtZmlsdGVyIChyZWdleHBzKQogICJDcmVhdGUgZmls dGVyIHJlZ2V4cCBmcm9tIFJFR0VYUFMuIgogIChzdHJpbmctam9pbiAobWFwY2FyIChsYW1iZGEg KHgpIChjb25jYXQgIlxcKD86IiB4ICJcXCkiKSkgcmVnZXhwcykgIlxcfCIpKQoKKGRlZnVuIGNv bnN1bHQtLWZvbnQtbG9jayAoc3RyKQogICJBcHBseSBgZm9udC1sb2NrJyBmYWNlcyBpbiBTVFIs IGNvcHkgdGhlbSB0byBgZmFjZScuIgogIChsZXQgKChwb3MgMCkgKGxlbiAobGVuZ3RoIHN0cikp KQogICAgKHdoaWxlICg8IHBvcyBsZW4pCiAgICAgIChsZXQqICgoZmFjZSAoZ2V0LXRleHQtcHJv cGVydHkgcG9zICdmb250LWxvY2stZmFjZSBzdHIpKQogICAgICAgICAgICAgKGVuZCAob3IgKHRl eHQtcHJvcGVydHktbm90LWFsbCBwb3MgbGVuICdmb250LWxvY2stZmFjZSBmYWNlIHN0cikgbGVu KSkpCiAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IHBvcyBlbmQgJ2ZhY2UgZmFjZSBzdHIpCiAg ICAgICAgKHNldHEgcG9zIGVuZCkpKQogICAgc3RyKSkKCihkZWZ1biBjb25zdWx0LS1mb3JtYXQt ZGlyZWN0b3J5LXByb21wdCAocHJvbXB0IGRpcikKICAiRm9ybWF0IFBST01QVCwgZXhwYW5kIGRp cmVjdG9yeSBESVIgYW5kIHJldHVybiB0aGVtIGFzIGEgcGFpci4iCiAgKHNhdmUtbWF0Y2gtZGF0 YQogICAgKGxldCAoKGVkaXIgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgKGV4cGFuZC1maWxlLW5h bWUgZGlyKSkpCiAgICAgICAgICAoZGRpciAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSAoZXhwYW5k LWZpbGUtbmFtZSBkZWZhdWx0LWRpcmVjdG9yeSkpKSkKICAgICAgKGNvbnMKICAgICAgIChpZiAo c3RyaW5nPSBkZGlyIGVkaXIpCiAgICAgICAgICAgKGNvbmNhdCBwcm9tcHQgIjogIikKICAgICAg ICAgKGxldCAoKGFkaXIgKGFiYnJldmlhdGUtZmlsZS1uYW1lIGVkaXIpKSkKICAgICAgICAgICAo aWYgKHN0cmluZy1tYXRjaCAiL1xcKFteL10rXFwpL1xcKFteL10rXFwpLyQiIGFkaXIpCiAgICAg ICAgICAgICAgIChmb3JtYXQgIiVzIGluIOKApi8lcy8lcy86ICIgcHJvbXB0CiAgICAgICAgICAg ICAgICAgICAgICAgKG1hdGNoLXN0cmluZyAxIGFkaXIpIChtYXRjaC1zdHJpbmcgMiBhZGlyKSkK ICAgICAgICAgICAgIChmb3JtYXQgIiVzIGluICVzOiAiIHByb21wdCBhZGlyKSkpKQogICAgICAg ZWRpcikpKSkKCihkZWZ1biBjb25zdWx0LS1kaXJlY3RvcnktcHJvbXB0IChwcm9tcHQgZGlyKQog ICJSZXR1cm4gcHJvbXB0IGFuZCBkaXJlY3RvcnkuCgpQUk9NUFQgaXMgdGhlIHByb21wdCBwcmVm aXguIFRoZSBkaXJlY3RvcnkKaXMgYXBwZW5kZWQgdG8gdGhlIHByb21wdCBwcmVmaXguIEZvciBw cm9qZWN0cwpvbmx5IHRoZSBwcm9qZWN0IG5hbWUgaXMgc2hvd24uIFRoZSBgZGVmYXVsdC1kaXJl Y3RvcnknCmlzIG5vdCBzaG93bi4gT3RoZXIgZGlyZWN0b3JpZXMgYXJlIGFiYnJldmlhdGVkIGFu ZApvbmx5IHRoZSBsYXN0IHR3byBwYXRoIGNvbXBvbmVudHMgYXJlIHNob3duLgoKSWYgRElSIGlz IGEgc3RyaW5nLCBpdCBpcyByZXR1cm5lZC4KSWYgRElSIGlzIGEgdHJ1ZSB2YWx1ZSwgdGhlIHVz ZXIgaXMgYXNrZWQuClRoZW4gdGhlIGBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbicgaXMg dHJpZWQuCk90aGVyd2lzZSB0aGUgYGRlZmF1bHQtZGlyZWN0b3J5JyBpcyByZXR1cm5lZC4iCiAg KGNvbmQKICAgKChzdHJpbmdwIGRpcikgKGNvbnN1bHQtLWZvcm1hdC1kaXJlY3RvcnktcHJvbXB0 IHByb21wdCBkaXIpKQogICAoZGlyIChjb25zdWx0LS1mb3JtYXQtZGlyZWN0b3J5LXByb21wdCBw cm9tcHQgKHJlYWQtZGlyZWN0b3J5LW5hbWUgIkRpcmVjdG9yeTogIiBuaWwgbmlsIHQpKSkKICAg KCh3aGVuLWxldCAocm9vdCAoYW5kIGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uCiAgICAg ICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlv bikpKQogICAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIi9c XChbXi9dK1xcKS8kIiByb290KQogICAgICAgICAgICAoY29ucyAoZm9ybWF0ICIlcyBpbiBwcm9q ZWN0ICVzOiAiIHByb21wdCAobWF0Y2gtc3RyaW5nIDEgcm9vdCkpIHJvb3QpCiAgICAgICAgICAo Y29uc3VsdC0tZm9ybWF0LWRpcmVjdG9yeS1wcm9tcHQgcHJvbXB0IHJvb3QpKSkpKQogICAodCAo Y29uc3VsdC0tZm9ybWF0LWRpcmVjdG9yeS1wcm9tcHQgcHJvbXB0IGRlZmF1bHQtZGlyZWN0b3J5 KSkpKQoKKGRlZnN1YnN0IGNvbnN1bHQtLXN0cmlwLWFuc2ktZXNjYXBlIChzdHIpCiAgIlN0cmlw IEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBmcm9tIFNUUi4iCiAgKHJlcGxhY2UtcmVnZXhwLWluLXN0 cmluZyAiXGVcXFtbMC05O10qW21LXSIgIiIgc3RyKSkKCihkZWZzdWJzdCBjb25zdWx0LS1mb3Jt YXQtbG9jYXRpb24gKGZpbGUgbGluZSkKICAiRm9ybWF0IGxvY2F0aW9uIHN0cmluZyAnRklMRTpM SU5FOicuIgogIChjb25jYXQKICAgKHByb3BlcnRpemUgZmlsZSAnZmFjZSAnY29uc3VsdC1maWxl KSAiOiIKICAgKHByb3BlcnRpemUgKG51bWJlci10by1zdHJpbmcgbGluZSkgJ2ZhY2UgJ2NvbnN1 bHQtbGluZS1udW1iZXIpICI6IikpCgooZGVmdW4gY29uc3VsdC0tbGluZS1wb3NpdGlvbiAobGlu ZSkKICAiQ29tcHV0ZSBjaGFyYWN0ZXIgcG9zaXRpb24gZnJvbSBMSU5FIG51bWJlci4iCiAgKHNh dmUtZXhjdXJzaW9uCiAgICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAod2hlbiBjb25zdWx0LWxp bmUtbnVtYmVycy13aWRlbgogICAgICAgICh3aWRlbikpCiAgICAgIChnb3RvLWNoYXIgKHBvaW50 LW1pbikpCiAgICAgIChmb3J3YXJkLWxpbmUgKC0gbGluZSAxKSkKICAgICAgKHBvaW50KSkpKQoK KGRlZm1hY3JvIGNvbnN1bHQtLW92ZXJsYXkgKGJlZyBlbmQgJnJlc3QgcHJvcHMpCiAgIk1ha2Ug Y29uc3VsdCBvdmVybGF5IGJldHdlZW4gQkVHIGFuZCBFTkQgd2l0aCBQUk9QUy4iCiAgKGxldCAo KG92IChtYWtlLXN5bWJvbCAib3YiKSkKICAgICAgICAocHV0cykpCiAgICAod2hpbGUgcHJvcHMK ICAgICAgKHB1c2ggYChvdmVybGF5LXB1dCAsb3YgLChjYXIgcHJvcHMpICwoY2FkciBwcm9wcykp IHB1dHMpCiAgICAgIChzZXRxIHByb3BzIChjZGRyIHByb3BzKSkpCiAgICBgKGxldCAoKCxvdiAo bWFrZS1vdmVybGF5ICxiZWcgLGVuZCkpKQogICAgICAgLEBwdXRzCiAgICAgICAsb3YpKSkKCihk ZWZ1biBjb25zdWx0LS1yZW1vdmUtZHVwcyAobGlzdCAmb3B0aW9uYWwga2V5KQogICJSZW1vdmUg ZHVwbGljYXRlIHN0cmluZ3MgZnJvbSBMSVNULiBLZWVwIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBr ZXkuCgpLRVkgaXMgdGhlIGtleSBmdW5jdGlvbi4iCiAgKGxldCAoKGh0IChtYWtlLWhhc2gtdGFi bGUgOnRlc3QgIydlcXVhbCA6c2l6ZSAobGVuZ3RoIGxpc3QpKSkKICAgICAgICAoYWNjdW0pCiAg ICAgICAgKGtleSAob3Iga2V5ICMnaWRlbnRpdHkpKSkKICAgIChkb2xpc3QgKGVudHJ5IGxpc3Qg KG5yZXZlcnNlIGFjY3VtKSkKICAgICAgKGxldCAoKGsgKGZ1bmNhbGwga2V5IGVudHJ5KSkpCiAg ICAgICAgKHVubGVzcyAoZ2V0aGFzaCBrIGh0KQogICAgICAgICAgKHB1dGhhc2ggayB0IGh0KQog ICAgICAgICAgKHB1c2ggZW50cnkgYWNjdW0pKSkpKSkKCihkZWZzdWJzdCBjb25zdWx0LS1pbi1y YW5nZS1wIChwb3MpCiAgIlJldHVybiB0IGlmIHBvc2l0aW9uIFBPUyBsaWVzIGluIHJhbmdlIGBw b2ludC1taW4nIHRvIGBwb2ludC1tYXgnLiIKICAoPD0gKHBvaW50LW1pbikgcG9zIChwb2ludC1t YXgpKSkKCihkZWZ1biBjb25zdWx0LS1nZXQtYW5ub3RhdGlvbiAoY2FuZCkKICAiUmV0dXJuICdj b25zdWx0LS1hbm5vdGF0aW9uIHByb3BlcnR5IGZyb20gQ0FORC4iCiAgKGdldC10ZXh0LXByb3Bl cnR5IDAgJ2NvbnN1bHQtLWFubm90YXRpb24gY2FuZCkpCgooZGVmdW4gY29uc3VsdC0tbG9va3Vw LWVsZW0gKF8gY2FuZGlkYXRlcyBjYW5kKQogICJMb29rdXAgQ0FORCBpbiBDQU5ESURBVEVTIGFs aXN0LCByZXR1cm4gZWxlbWVudC4iCiAgKGFzc29jIGNhbmQgY2FuZGlkYXRlcykpCgooZGVmdW4g Y29uc3VsdC0tbG9va3VwLWNkciAoXyBjYW5kaWRhdGVzIGNhbmQpCiAgIkxvb2t1cCBDQU5EIGlu IENBTkRJREFURVMgYWxpc3QsIHJldHVybiBjZHIgb2YgZWxlbWVudC4iCiAgKGNkciAoYXNzb2Mg Y2FuZCBjYW5kaWRhdGVzKSkpCgooZGVmdW4gY29uc3VsdC0tbG9va3VwLWNhZHIgKF8gY2FuZGlk YXRlcyBjYW5kKQogICJMb29rdXAgQ0FORCBpbiBDQU5ESURBVEVTIGFsaXN0LCByZXR1cm4gY2Fk ciBvZiBlbGVtZW50LiIKICAoY2FkciAoYXNzb2MgY2FuZCBjYW5kaWRhdGVzKSkpCgooZGVmdW4g Y29uc3VsdC0tbG9va3VwLWxvY2F0aW9uIChfIGNhbmRpZGF0ZXMgY2FuZCkKICAiTG9va3VwIENB TkQgaW4gQ0FORElEQVRFUyBsaXN0IG9mICdjb25zdWx0LWxvY2F0aW9uIGNhdGVnb3J5LCByZXR1 cm4gdGhlIG1hcmtlci4iCiAgKHdoZW4tbGV0IChmb3VuZCAobWVtYmVyIGNhbmQgY2FuZGlkYXRl cykpCiAgICAoY2FyIChnZXQtdGV4dC1wcm9wZXJ0eSAwICdjb25zdWx0LWxvY2F0aW9uIChjYXIg Zm91bmQpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyICgpCiAgIlJhaXNl IGFuIGVycm9yIGlmIGV4ZWN1dGVkIGZyb20gdGhlIG1pbmlidWZmZXIuIgogICh3aGVuIChtaW5p YnVmZmVycCkKICAgICh1c2VyLWVycm9yICJgJXMnIGNhbGxlZCBpbnNpZGUgdGhlIG1pbmlidWZm ZXIiIHRoaXMtY29tbWFuZCkpKQoKKGRlZnVuIGNvbnN1bHQtLXJlcXVpcmUtbWluaWJ1ZmZlciAo KQogICJSYWlzZSBhbiBlcnJvciBpZiBleGVjdXRlZCBvdXRzaWRlIHRoZSBtaW5pYnVmZmVyLiIK ICAodW5sZXNzIChtaW5pYnVmZmVycCkKICAgICh1c2VyLWVycm9yICJgJXMnIG11c3QgYmUgY2Fs bGVkIGluc2lkZSB0aGUgbWluaWJ1ZmZlciIgdGhpcy1jb21tYW5kKSkpCgooZGVmdW4gY29uc3Vs dC0tZm9udGlmeS1hbGwgKCkKICAiRW5zdXJlIHRoYXQgdGhlIHdob2xlIGJ1ZmZlciBpcyBmb250 aWZpZWQuIgogIDs7IEZvbnQtbG9ja2luZyBpcyBsYXp5LCBpLmUuLCBpZiBhIGxpbmUgaGFzIG5v dCBiZWVuIGxvb2tlZCBhdCB5ZXQsIHRoZSBsaW5lCiAgOzsgaXMgbm90IGZvbnQtbG9ja2VkLiBX ZSB3b3VsZCBvYnNlcnZlIHRoaXMgaWYgY29uc3VsdGluZyBhbiB1bmZvbnRpZmllZAogIDs7IGxp bmUuIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGVuZm9yY2UgZm9udC1sb2NraW5nIG5vdywgd2hpY2gg aXMgc2xvdy4gSW4KICA7OyBvcmRlciB0byBwcmV2ZW50IGlzIGhhbmctdXAgd2UgY2hlY2sgdGhl IGJ1ZmZlciBzaXplIGFnYWluc3QKICA7OyBgY29uc3VsdC1mb250aWZ5LW1heC1zaXplJy4KICAo d2hlbiAoYW5kIGppdC1sb2NrLW1vZGUgKDwgKGJ1ZmZlci1zaXplKSBjb25zdWx0LWZvbnRpZnkt bWF4LXNpemUpKQogICAgKGppdC1sb2NrLWZvbnRpZnktbm93KSkpCgooZGVmc3Vic3QgY29uc3Vs dC0tZm9udGlmeS1yZWdpb24gKHN0YXJ0IGVuZCkKICAiRW5zdXJlIHRoYXQgcmVnaW9uIGJldHdl ZW4gU1RBUlQgYW5kIEVORCBpcyBmb250aWZpZWQuIgogICh3aGVuIGppdC1sb2NrLW1vZGUKICAg IChqaXQtbG9jay1mb250aWZ5LW5vdyBzdGFydCBlbmQpKSkKCihkZWZ1biBjb25zdWx0LS1kZWZp bmUta2V5IChtYXAga2V5IGNtZCBkZXNjKQogICJCaW5kIENNRCB0byBLRVkgaW4gTUFQIGFuZCBh ZGQgd2hpY2gta2V5IGRlc2NyaXB0aW9uIERFU0MuIgogIChkZWZpbmUta2V5IG1hcCBrZXkgY21k KQogIDs7IFRoZSB3aGljaC1rZXkgZGVzY3JpcHRpb24gaXMgcG90ZW50aWFsbHkgZnJhZ2lsZSBp ZiBzb21ldGhpbmcgaXMgY2hhbmdlZCBvbiB0aGUgc2lkZQogIDs7IG9mIHdoaWNoLWtleS4gS2Vl cCBhbiBleWUgb24gdGhhdC4gQW4gYWx0ZXJuYXRpdmUgbW9yZSBzdGFuZGFyZC1jb21wbGlhbnQg bWV0aG9kCiAgOzsgd291bGQgYmUgdG8gdXNlIGBtZW51LWl0ZW0nLCBidXQgdGhpcyBpcyB1bmZv cnR1bmF0ZWx5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHdoaWNoLWtleQogIDs7IGFuZCBgZGVzY3Jp YmUtYnVmZmVyLWJpbmRpbmdzJy4KICA7OyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RidXIv ZW1hY3Mtd2hpY2gta2V5L2lzc3Vlcy8xNzcKICAobGV0ICgoaWR4ICgtIChsZW5ndGgga2V5KSAx KSkpCiAgICAoZGVmaW5lLWtleSBtYXAgKHZjb25jYXQgKHNlcS10YWtlIGtleSBpZHgpICh2ZWN0 b3IgJ3doaWNoLWtleSAoZWx0IGtleSBpZHgpKSkKICAgICAgYCh3aGljaC1rZXkgKCwoY29weS1z ZXF1ZW5jZSBkZXNjKSkpKSkpCgooZGVmbWFjcm8gY29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2Mg KCZyZXN0IGJvZHkpCiAgIlRlbXBvcmFyaWx5IGluY3JlYXNlIHRoZSBnYyBsaW1pdCBpbiBCT0RZ IHRvIG9wdGltaXplIGZvciB0aHJvdWdocHV0LiIKICBgKGxldCogKChvdmVyd3JpdGUgKD4gY29u c3VsdC0tZ2MtdGhyZXNob2xkIGdjLWNvbnMtdGhyZXNob2xkKSkKICAgICAgICAgIChnYy1jb25z LXRocmVzaG9sZCAoaWYgb3ZlcndyaXRlIGNvbnN1bHQtLWdjLXRocmVzaG9sZCBnYy1jb25zLXRo cmVzaG9sZCkpCiAgICAgICAgICAoZ2MtY29ucy1wZXJjZW50YWdlIChpZiBvdmVyd3JpdGUgY29u c3VsdC0tZ2MtcGVyY2VudGFnZSBnYy1jb25zLXBlcmNlbnRhZ2UpKSkKICAgICAsQGJvZHkpKQoK KGRlZnVuIGNvbnN1bHQtLWNvdW50LWxpbmVzIChwb3MpCiAgIk1vdmUgdG8gcG9zaXRpb24gUE9T IGFuZCByZXR1cm4gbnVtYmVyIG9mIGxpbmVzLiIKICAobGV0ICgobGluZSAwKSkKICAgICh3aGls ZSAoPCAocG9pbnQpIHBvcykKICAgICAgKGZvcndhcmQtbGluZSkKICAgICAgKHdoZW4gKDw9IChw b2ludCkgcG9zKQogICAgICAgIChzZXRxIGxpbmUgKDErIGxpbmUpKSkpCiAgICAoZ290by1jaGFy IHBvcykKICAgIGxpbmUpKQoKOzsgV2UgbXVzdCBkaXNhbWJpZ3VhdGUgdGhlIGxpbmVzIGJ5IGFk ZGluZyBhIHByZWZpeCBzdWNoIHRoYXQgdHdvIGxpbmVzIHdpdGgKOzsgdGhlIHNhbWUgdGV4dCBj YW4gYmUgZGlzdGluZ3Vpc2hlZC4gSW4gb3JkZXIgdG8gYXZvaWQgbWF0Y2hpbmcgdGhlIGxpbmUK OzsgbnVtYmVyLCBzdWNoIHRoYXQgdGhlIHVzZXIgY2FuIHNlYXJjaCBmb3IgbnVtYmVycyB3aXRo IGBjb25zdWx0LWxpbmUnLCB3ZQo7OyBlbmNvZGUgdGhlIGxpbmUgbnVtYmVyIGFzIHVuaWNvZGUg Y2hhcmFjdGVycyBpbiB0aGUgc3VwcGxlbWVudGFyeSBwcml2YXRlIHVzZQo7OyBwbGFuZSBiLiBC eSBkb2luZyB0aGF0LCBpdCBpcyB1bmxpa2VseSB0aGF0IGFjY2lkZW50aWFsIG1hdGNoaW5nIG9j Y3Vycy4KKGRlZnN1YnN0IGNvbnN1bHQtLWVuY29kZS1sb2NhdGlvbiAobWFya2VyKQogICJHZW5l cmF0ZSB1bmlxdWUgc3RyaW5nIGZvciBNQVJLRVIuCkRJU1BMQVkgaXMgdGhlIHN0cmluZyB0byBk aXNwbGF5IGluc3RlYWQgb2YgdGhlIHVuaXF1ZSBzdHJpbmcuIgogIChsZXQgKChzdHIgIiIpIChu IG1hcmtlcikpCiAgICAod2hpbGUgKHByb2duCiAgICAgICAgICAgICAoc2V0cSBzdHIgKGNvbmNh dCBzdHIgKGNoYXItdG8tc3RyaW5nICgrIGNvbnN1bHQtLXRvZnUtY2hhcgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJSBuIGNvbnN1bHQtLXRv ZnUtcmFuZ2UpKSkpKQogICAgICAgICAgICAgKGFuZCAoPj0gbiBjb25zdWx0LS10b2Z1LXJhbmdl KSAoc2V0cSBuICgvIG4gY29uc3VsdC0tdG9mdS1yYW5nZSkpKSkpCiAgICBzdHIpKQoKKGRlZnN1 YnN0IGNvbnN1bHQtLWxpbmUtbnVtYmVyLXByZWZpeCAobWFya2VyIGxpbmUgd2lkdGgpCiAgIkZv cm1hdCBMSU5FIG51bWJlciBwcmVmaXggbnVtYmVyIHdpdGggcGFkZGluZy4KCk1BUktFUiBhbmQg TElORSBhcmUgYWRkZWQgYXMgJ2NvbnN1bHQtbG9jYXRpb24gdGV4dCBwcm9wZXJ0eS4KV0lEVEgg aXMgdGhlIGxpbmUgbnVtYmVyIHdpZHRoLiIKICAobGV0KiAoKHVuaXF1ZS1zdHIgKGNvbnN1bHQt LWVuY29kZS1sb2NhdGlvbiBtYXJrZXIpKQogICAgICAgICAobGluZS1zdHIgKG51bWJlci10by1z dHJpbmcgbGluZSkpCiAgICAgICAgIChwcmVmaXgtc3RyIChjb25jYXQKICAgICAgICAgICAgICAg ICAgICAgIChtYWtlLXN0cmluZyAoLSB3aWR0aCAobGVuZ3RoIGxpbmUtc3RyKSkgMzIpCiAgICAg ICAgICAgICAgICAgICAgICBsaW5lLXN0cgogICAgICAgICAgICAgICAgICAgICAgIiAiKSkpCiAg ICAocHV0LXRleHQtcHJvcGVydHkgMCAobGVuZ3RoIHByZWZpeC1zdHIpICdmYWNlICdjb25zdWx0 LWxpbmUtbnVtYmVyLXByZWZpeCBwcmVmaXgtc3RyKQogICAgKGFkZC10ZXh0LXByb3BlcnRpZXMg MCAobGVuZ3RoIHVuaXF1ZS1zdHIpCiAgICAgICAgICAgICAgICAgICAgICAgICBgKGRpc3BsYXkg LHByZWZpeC1zdHIgY29uc3VsdC1sb2NhdGlvbiAoLG1hcmtlciAuICxsaW5lKSkKICAgICAgICAg ICAgICAgICAgICAgICAgIHVuaXF1ZS1zdHIpCiAgICB1bmlxdWUtc3RyKSkKCihkZWZ1biBjb25z dWx0LS1hZGQtbGluZS1udW1iZXIgKG1heC1saW5lIGNhbmRpZGF0ZXMpCiAgIkFkZCBsaW5lIG51 bWJlcnMgdG8gdW5mb3JtYXR0ZWQgQ0FORElEQVRFUyBhcyBwcmVmaXguClRoZSBNQVgtTElORSBp cyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSB3aWR0aC4KU2luY2UgdGhlIGxpbmUgbnVtYmVyIGlz IHBhcnQgb2YgdGhlIGNhbmRpZGF0ZSBpdCB3aWxsIGJlIG1hdGNoZWQtb24gZHVyaW5nIGNvbXBs ZXRpb24uIgogIChsZXQgKCh3aWR0aCAobGVuZ3RoIChudW1iZXItdG8tc3RyaW5nIG1heC1saW5l KSkpKQogICAgKG1hcGNhciAocGNhc2UtbGFtYmRhIChgKCxtYXJrZXIgLGxpbmUgLHN0cikpCiAg ICAgICAgICAgICAgKGNvbmNhdAogICAgICAgICAgICAgICAoY29uc3VsdC0tbGluZS1udW1iZXIt cHJlZml4IG1hcmtlciBsaW5lIHdpZHRoKQogICAgICAgICAgICAgICBzdHIpKQogICAgICAgICAg ICBjYW5kaWRhdGVzKSkpCgooZGVmc3Vic3QgY29uc3VsdC0tcmVnaW9uLXdpdGgtY3Vyc29yIChi ZWdpbiBlbmQgbWFya2VyKQogICJSZXR1cm4gcmVnaW9uIHN0cmluZyB3aXRoIGEgbWFya2luZyBh dCB0aGUgY3Vyc29yIHBvc2l0aW9uLgoKQkVHSU4gaXMgdGhlIGJlZ2luIHBvc2l0aW9uLgpFTkQg aXMgdGhlIGVuZCBwb3NpdGlvbi4KTUFSS0VSIGlzIHRoZSBjdXJzb3IgcG9zaXRpb24uIgogIChs ZXQgKChzdHIgKGJ1ZmZlci1zdWJzdHJpbmcgYmVnaW4gZW5kKSkpCiAgICAoaWYgKD49IG1hcmtl ciBlbmQpCiAgICAgICAgKGNvbmNhdCBzdHIgKHByb3BlcnRpemUgIiAiICdmYWNlICdjb25zdWx0 LXByZXZpZXctY3Vyc29yKSkKICAgICAgKHB1dC10ZXh0LXByb3BlcnR5ICgtIG1hcmtlciBiZWdp bikgKC0gKDErIG1hcmtlcikgYmVnaW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAn Y29uc3VsdC1wcmV2aWV3LWN1cnNvciBzdHIpCiAgICAgIHN0cikpKQoKKGRlZnN1YnN0IGNvbnN1 bHQtLWxpbmUtd2l0aC1jdXJzb3IgKG1hcmtlcikKICAiUmV0dXJuIGN1cnJlbnQgbGluZSB3aGVy ZSB0aGUgY3Vyc29yIE1BUktFUiBpcyBoaWdobGlnaHRlZC4iCiAgKGNvbnN1bHQtLXJlZ2lvbi13 aXRoLWN1cnNvcgogICAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pCiAgIChsaW5lLWVuZC1wb3Np dGlvbikKICAgbWFya2VyKSkKCihkZWZ1biBjb25zdWx0LS1tZXJnZS1jb25maWcgKGFyZ3MpCiAg Ik1lcmdlIGBjb25zdWx0LWNvbmZpZycgcGxpc3RzIGludG8gdGhlIGtleXdvcmQgYXJndW1lbnRz IG9mIEFSR1MuIgogIChpZi1sZXQgKGNvbmZpZyAoYWxpc3QtZ2V0IHRoaXMtY29tbWFuZCBjb25z dWx0LWNvbmZpZykpCiAgICAgIChhcHBlbmQgKHNlcS10YWtlLXdoaWxlIChsYW1iZGEgKHgpIChu b3QgKGtleXdvcmRwIHgpKSkgYXJncykgY29uZmlnCiAgICAgICAgICAgICAgKHNlcS1jb3B5IChz ZXEtZHJvcC13aGlsZSAobGFtYmRhICh4KSAobm90IChrZXl3b3JkcCB4KSkpIGFyZ3MpKSkKICAg IGFyZ3MpKQoKOzs7OyBQcmV2aWV3IHN1cHBvcnQKCihkZWZ1biBjb25zdWx0LS1raWxsLWNsZWFu LWJ1ZmZlciAoYnVmKQogICJLaWxsIEJVRiBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQuIgog ICh1bmxlc3MgKG9yIChlcSBidWYgKGN1cnJlbnQtYnVmZmVyKSkgKGJ1ZmZlci1tb2RpZmllZC1w IGJ1ZikpCiAgICAoa2lsbC1idWZmZXIgYnVmKSkpCgooZGVmdW4gY29uc3VsdC0tZmlsZS1wcmV2 aWV3LXNldHVwICgpCiAgIlJldHVybiBhIGZ1bmN0aW9uIHRvIG9wZW4gZmlsZXMgdGVtcG9yYXJp bHkuIgogIChsZXQqICgobmV3LWJ1ZmZlcnMpCiAgICAgICAgIChyZWNlbnRmLXNob3VsZC1yZXN0 b3JlIHJlY2VudGYtbW9kZSkKICAgICAgICAgKHJlY2VudGYtc2F2ZWQtbGlzdCAod2hlbiByZWNl bnRmLXNob3VsZC1yZXN0b3JlIChjb3B5LXNlcXVlbmNlIHJlY2VudGYtbGlzdCkpKSkKICAgIChs YW1iZGEgKCZvcHRpb25hbCBuYW1lKQogICAgICAoaWYgKG5vdCBuYW1lKQogICAgICAgICAgKHdo ZW4gcmVjZW50Zi1zaG91bGQtcmVzdG9yZQogICAgICAgICAgICAoc2V0cSByZWNlbnRmLWxpc3Qg cmVjZW50Zi1zYXZlZC1saXN0KQogICAgICAgICAgICAod2hlbiAobWVtYmVyIChjdXJyZW50LWJ1 ZmZlcikgbmV3LWJ1ZmZlcnMpCiAgICAgICAgICAgICAgKHJlY2VudGYtYWRkLWZpbGUgKGJ1ZmZl ci1maWxlLW5hbWUgKGN1cnJlbnQtYnVmZmVyKSkpKSkKICAgICAgICAob3IgKGdldC1maWxlLWJ1 ZmZlciBuYW1lKQogICAgICAgICAgICAod2hlbi1sZXQgKGF0dHJzIChmaWxlLWF0dHJpYnV0ZXMg bmFtZSkpCiAgICAgICAgICAgICAgKGlmICg+IChmaWxlLWF0dHJpYnV0ZS1zaXplIGF0dHJzKSBj b25zdWx0LXByZXZpZXctbWF4LXNpemUpCiAgICAgICAgICAgICAgICAgIChhbmQgKG1pbmlidWZm ZXItbWVzc2FnZSAiRmlsZSBgJXMnIHRvbyBsYXJnZSBmb3IgcHJldmlldyIgbmFtZSkgbmlsKQog ICAgICAgICAgICAgICAgKGxldCAoKGJ1ZiAoZmluZC1maWxlLW5vc2VsZWN0IG5hbWUgJ25vd2Fy bikpKQogICAgICAgICAgICAgICAgICAocHVzaCBidWYgbmV3LWJ1ZmZlcnMpCiAgICAgICAgICAg ICAgICAgIDs7IE9ubHkga2VlcCBhIGZldyBidWZmZXJzIGFsaXZlCiAgICAgICAgICAgICAgICAg ICh3aGlsZSAoPiAobGVuZ3RoIG5ldy1idWZmZXJzKSBjb25zdWx0LXByZXZpZXctbWF4LWNvdW50 KQogICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1raWxsLWNsZWFuLWJ1ZmZlciAoY2FyIChs YXN0IG5ldy1idWZmZXJzKSkpCiAgICAgICAgICAgICAgICAgICAgKHNldHEgbmV3LWJ1ZmZlcnMg KG5idXRsYXN0IG5ldy1idWZmZXJzKSkpCiAgICAgICAgICAgICAgICAgIGJ1ZikpKSkpKSkpCgoo ZGVmbWFjcm8gY29uc3VsdC0td2l0aC1maWxlLXByZXZpZXcgKGFyZ3MgJnJlc3QgYm9keSkKICAi UHJvdmlkZSBhIGZ1bmN0aW9uIHRvIG9wZW4gZmlsZXMgdGVtcG9yYXJpbHkuClRoZSBmaWxlcyBh cmUgY2xvc2VkIGF1dG9tYXRpY2FsbHkgaW4gdGhlIGVuZC4KCkFSR1MgaXMgdGhlIG9wZW4gZnVu Y3Rpb24gYXJndW1lbnQgZm9yIEJPRFkuIgogIChkZWNsYXJlIChpbmRlbnQgMSkpCiAgYChsZXQg KCgsQGFyZ3MgKGNvbnN1bHQtLWZpbGUtcHJldmlldy1zZXR1cCkpKQogICAgICh1bndpbmQtcHJv dGVjdAogICAgICAgICAsKG1hY3JvZXhwLXByb2duIGJvZHkpCiAgICAgICAoZnVuY2FsbCAsQGFy Z3MpKSkpCgo7OyBEZXJpdmVkIGZyb20gY3RybGYsIG9yaWdpbmFsbHkgaXNlYXJjaAooZGVmdW4g Y29uc3VsdC0taW52aXNpYmxlLXNob3cgKCZvcHRpb25hbCBwZXJtYW5lbnRseSkKICAiRGlzYWJs ZSBhbnkgb3ZlcmxheXMgdGhhdCBhcmUgY3VycmVudGx5IGhpZGluZyBwb2ludC4KUEVSTUFORU5U TFkgbm9uLW5pbCBtZWFucyB0aGUgb3ZlcmxheXMgd2lsbCBub3QgYmUgcmVzdG9yZWQgbGF0ZXIu IgogIChsZXQgKChvcGVuZWQpKQogICAgKGRvbGlzdCAob3YgKG92ZXJsYXlzLWluIChsaW5lLWJl Z2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5kLXBvc2l0aW9uKSkgb3BlbmVkKQogICAgICAod2hl biAoYW5kIChpbnZpc2libGUtcCAob3ZlcmxheS1nZXQgb3YgJ2ludmlzaWJsZSkpCiAgICAgICAg ICAgICAgICAgKG92ZXJsYXktZ2V0IG92ICdpc2VhcmNoLW9wZW4taW52aXNpYmxlKSkKICAgICAg ICAoaWYgcGVybWFuZW50bHkKICAgICAgICAgICAgKGZ1bmNhbGwgKG92ZXJsYXktZ2V0IG92ICdp c2VhcmNoLW9wZW4taW52aXNpYmxlKSBvdikKICAgICAgICAgIChwdXNoIChjb25zIG92IChvdmVy bGF5LWdldCBvdiAnaW52aXNpYmxlKSkgb3BlbmVkKQogICAgICAgICAgKGlmLWxldCAoZnVuYyAo b3ZlcmxheS1nZXQgb3YgJ2lzZWFyY2gtb3Blbi1pbnZpc2libGUtdGVtcG9yYXJ5KSkKICAgICAg ICAgICAgICAoZnVuY2FsbCBmdW5jIG5pbCkKICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92ICdp bnZpc2libGUgbmlsKSkpKSkpKQoKOzsgRGVyaXZlZCBmcm9tIGN0cmxmLCBvcmlnaW5hbGx5IGlz ZWFyY2gKKGRlZnVuIGNvbnN1bHQtLWludmlzaWJsZS1yZXN0b3JlIChvdmVybGF5cykKICAiUmVz dG9yZSBhbnkgb3BlbmVkIE9WRVJMQVlTIHRoYXQgd2VyZSBwcmV2aW91c2x5IGRpc2FibGVkLiIK ICAoZG9saXN0IChvdiBvdmVybGF5cykKICAgIChpZi1sZXQgKGZ1bmMgKG92ZXJsYXktZ2V0IChj YXIgb3YpICdpc2VhcmNoLW9wZW4taW52aXNpYmxlLXRlbXBvcmFyeSkpCiAgICAgICAgKGZ1bmNh bGwgZnVuYyB0KQogICAgICAob3ZlcmxheS1wdXQgKGNhciBvdikgJ2ludmlzaWJsZSAoY2RyIG92 KSkpKSkKCihkZWZ1biBjb25zdWx0LS1qdW1wLTEgKHBvcykKICAiR28gdG8gUE9TIGFuZCByZWNl bnRlci4iCiAgKGNvbmQKICAgKChhbmQgKG1hcmtlcnAgcG9zKSAobm90IChidWZmZXItbGl2ZS1w IChtYXJrZXItYnVmZmVyIHBvcykpKSkKICAgIDs7IE9ubHkgcHJpbnQgYSBtZXNzYWdlLCBubyBl cnJvciBpbiBvcmRlciB0byBub3QgbWVzcwogICAgOzsgd2l0aCB0aGUgbWluaWJ1ZmZlciB1cGRh dGUgaG9vay4KICAgIChtZXNzYWdlICJCdWZmZXIgaXMgZGVhZCIpKQogICAodAogICAgOzsgU3dp dGNoIHRvIGJ1ZmZlciBpZiBpdCBpcyBub3QgdmlzaWJsZQogICAgKHdoZW4gKGFuZCAobWFya2Vy cCBwb3MpIChub3QgKGVxIChjdXJyZW50LWJ1ZmZlcikgKG1hcmtlci1idWZmZXIgcG9zKSkpKQog ICAgICAoc3dpdGNoLXRvLWJ1ZmZlciAobWFya2VyLWJ1ZmZlciBwb3MpKSkKICAgIDs7IFdpZGVu IGlmIHdlIGNhbm5vdCBqdW1wIHRvIHRoZSBwb3NpdGlvbiAoaWRlYSBmcm9tIGZseWNoZWNrLWp1 bXAtdG8tZXJyb3IpCiAgICAodW5sZXNzICg9IChnb3RvLWNoYXIgcG9zKSAocG9pbnQpKQogICAg ICAod2lkZW4pCiAgICAgIChnb3RvLWNoYXIgcG9zKSkKICAgIChydW4taG9va3MgJ2NvbnN1bHQt YWZ0ZXItanVtcC1ob29rKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWp1bXAgKHBvcykKICAiUHVzaCBj dXJyZW50IHBvc2l0aW9uIHRvIG1hcmsgcmluZywgZ28gdG8gUE9TIGFuZCByZWNlbnRlci4iCiAg KHdoZW4gcG9zCiAgICA7OyBXaGVuIHRoZSBtYXJrZXIgaXMgaW4gdGhlIHNhbWUgYnVmZmVyLAog ICAgOzsgcmVjb3JkIHByZXZpb3VzIGxvY2F0aW9uIHN1Y2ggdGhhdCB0aGUgdXNlciBjYW4ganVt cCBiYWNrIHF1aWNrbHkuCiAgICAodW5sZXNzIChhbmQgKG1hcmtlcnAgcG9zKSAobm90IChlcSAo Y3VycmVudC1idWZmZXIpIChtYXJrZXItYnVmZmVyIHBvcykpKSkKICAgICAgKHB1c2gtbWFyayAo cG9pbnQpIHQpKQogICAgKGNvbnN1bHQtLWp1bXAtMSBwb3MpCiAgICAoY29uc3VsdC0taW52aXNp YmxlLXNob3cgdCkpCiAgbmlsKQoKOzsgTWF0Y2hlZCBzdHJpbmdzIGFyZSBub3QgaGlnaGxpZ2h0 ZWQgYXMgb2Ygbm93Lgo7OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pbmFkL2NvbnN1bHQvaXNz dWVzLzcKKGRlZnVuIGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24gKCZvcHRpb25hbCBmYWNlKQog ICJUaGUgcHJldmlldyBmdW5jdGlvbiB1c2VkIGlmIHNlbGVjdGluZyBmcm9tIGEgbGlzdCBvZiBj YW5kaWRhdGUgcG9zaXRpb25zLgpUaGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgdGhlIGA6cHJl dmlldycgYXJndW1lbnQgb2YgYGNvbnN1bHQtLXJlYWQnLgpGQUNFIGlzIHRoZSBjdXJzb3IgZmFj ZS4iCiAgKGxldCAoKG92ZXJsYXlzKQogICAgICAgIChpbnZpc2libGUpCiAgICAgICAgKGZhY2Ug KG9yIGZhY2UgJ2NvbnN1bHQtcHJldmlldy1jdXJzb3IpKQogICAgICAgIChzYXZlZC1taW4gKHBv aW50LW1pbi1tYXJrZXIpKQogICAgICAgIChzYXZlZC1tYXggKHBvaW50LW1heC1tYXJrZXIpKQog ICAgICAgIChzYXZlZC1wb3MgKHBvaW50LW1hcmtlcikpKQogICAgKGxhbWJkYSAoY2FuZCByZXN0 b3JlKQogICAgICAoY29uc3VsdC0taW52aXNpYmxlLXJlc3RvcmUgaW52aXNpYmxlKQogICAgICAo bWFwYyAjJ2RlbGV0ZS1vdmVybGF5IG92ZXJsYXlzKQogICAgICAoY29uZAogICAgICAgKHJlc3Rv cmUKICAgICAgICAoaWYgKG5vdCAoYnVmZmVyLWxpdmUtcCAobWFya2VyLWJ1ZmZlciBzYXZlZC1w b3MpKSkKICAgICAgICAgICAgKG1lc3NhZ2UgIkJ1ZmZlciBpcyBkZWFkIikKICAgICAgICAgIChu YXJyb3ctdG8tcmVnaW9uIHNhdmVkLW1pbiBzYXZlZC1tYXgpCiAgICAgICAgICAoZ290by1jaGFy IHNhdmVkLXBvcykpKQogICAgICAgOzsgSnVtcCB0byBwb3NpdGlvbgogICAgICAgKGNhbmQKICAg ICAgICAoY29uc3VsdC0tanVtcC0xIGNhbmQpCiAgICAgICAgKHNldHEgaW52aXNpYmxlIChjb25z dWx0LS1pbnZpc2libGUtc2hvdykpCiAgICAgICAgKGxldCAoKHBvcyAocG9pbnQpKSkKICAgICAg ICAgIChzZXRxIG92ZXJsYXlzCiAgICAgICAgICAgICAgICAobGlzdCAoY29uc3VsdC0tb3Zlcmxh eSAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobGluZS1lbmQtcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZmFjZSAnY29uc3VsdC1wcmV2aWV3LWxpbmUpCiAgICAgICAgICAgICAg ICAgICAgICAoY29uc3VsdC0tb3ZlcmxheSBwb3MgKDErIHBvcykgJ2ZhY2UgZmFjZSkpKSkpCiAg ICAgICA7OyBJZiBwb3NpdGlvbiBjYW5ub3QgYmUgcHJldmlld2VkLCByZXR1cm4gdG8gc2F2ZWQg cG9zaXRpb24KICAgICAgICh0IChjb25zdWx0LS1qdW1wLTEgc2F2ZWQtcG9zKSkpKSkpCgooZGVm dW4gY29uc3VsdC0td2l0aC1wcmV2aWV3LTEgKHByZXZpZXcta2V5IHByZXZpZXcgdHJhbnNmb3Jt IGNhbmRpZGF0ZSBmdW4pCiAgIkFkZCBwcmV2aWV3IHN1cHBvcnQgZm9yIEZVTi4KClNlZSBjb25z dWx0LS13aXRoLXByZXZpZXcgZm9yIHRoZSBhcmd1bWVudHMgUFJFVklFVy1LRVksIFBSRVZJRVcs IFRSQU5TRk9STSBhbmQgQ0FORElEQVRFLiIKICAobGV0ICgoaW5wdXQgIiIpIChzZWxlY3RlZCkp CiAgICAoY29uc3VsdC0tbWluaWJ1ZmZlci13aXRoLXNldHVwLWhvb2sKICAgICAgICAoaWYgKGFu ZCBwcmV2aWV3IHByZXZpZXcta2V5KQogICAgICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAg ICAgKHNldHEgY29uc3VsdC0tcHJldmlldy1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAgIChs ZXQgKChsYXN0LXByZXZpZXcpKQogICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoaW5wIGNh bmQpCiAgICAgICAgICAgICAgICAgICAgICAgIChjbC1hc3NlcnQgKHdpbmRvdy1taW5pYnVmZmVy LXApKQogICAgICAgICAgICAgICAgICAgICAgICAodW5sZXNzIChlcXVhbCBsYXN0LXByZXZpZXcg Y2FuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgKG9y IChtaW5pYnVmZmVyLXNlbGVjdGVkLXdpbmRvdykgKG5leHQtd2luZG93KSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmdW5jYWxsIHByZXZpZXcgKGZ1bmNhbGwgdHJhbnNmb3JtIGlucCBj YW5kKSBuaWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGxhc3QtcHJldmlldyBj YW5kKSkpKSkKICAgICAgICAgICAgICAobGV0ICgocG9zdC1jb21tYW5kLXN5bSAobWFrZS1zeW1i b2wgImNvbnN1bHQtLXByZXZpZXctcG9zdC1jb21tYW5kIikpKQogICAgICAgICAgICAgICAgKGZz ZXQgcG9zdC1jb21tYW5kLXN5bQogICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKQogICAg ICAgICAgICAgICAgICAgICAgICAoc2V0cSBpbnB1dCAobWluaWJ1ZmZlci1jb250ZW50cy1uby1w cm9wZXJ0aWVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gKG9yIChlcSBwcmV2aWV3 LWtleSAnYW55KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxldCAoKGtleXMg KHRoaXMtc2luZ2xlLWNvbW1hbmQta2V5cykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2VxLWZpbmQgKGxhbWJkYSAoeCkgKGVxdWFsICh2Y29uY2F0IHgpIGtleXMpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChsaXN0cCBw cmV2aWV3LWtleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcmV2aWV3LWtleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGlzdCBwcmV2aWV3LWtleSkpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg KHdoZW4tbGV0IChjYW5kIChmdW5jYWxsIGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZnVuY2FsbCBjb25zdWx0LS1wcmV2aWV3LWZ1bmN0aW9uIGlucHV0IGNhbmQpKSkp KQogICAgICAgICAgICAgICAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayBwb3N0LWNvbW1h bmQtc3ltIG5pbCB0KSkpCiAgICAgICAgICAobGFtYmRhICgpCiAgICAgICAgICAgIChsZXQgKChw b3N0LWNvbW1hbmQtc3ltIChtYWtlLXN5bWJvbCAiY29uc3VsdC0tcHJldmlldy1wb3N0LWNvbW1h bmQiKSkpCiAgICAgICAgICAgICAgKGZzZXQgcG9zdC1jb21tYW5kLXN5bSAobGFtYmRhICgpIChz ZXRxIGlucHV0IChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXByb3BlcnRpZXMpKSkpCiAgICAgICAg ICAgICAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9vayBwb3N0LWNvbW1hbmQtc3ltIG5pbCB0 KSkpKQogICAgICAodW53aW5kLXByb3RlY3QKICAgICAgICAgIChjb25zIChzZXRxIHNlbGVjdGVk ICh3aGVuLWxldCAocmVzdWx0IChmdW5jYWxsIGZ1bikpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChmdW5jYWxsIHRyYW5zZm9ybSBpbnB1dCByZXN1bHQpKSkKICAgICAgICAgICAg ICAgIGlucHV0KQogICAgICAgIDs7IElmIHRoZXJlIGlzIGEgcHJldmlldyBmdW5jdGlvbiwgYWx3 YXlzIGNhbGwgcmVzdG9yZSEKICAgICAgICA7OyBUaGUgcHJldmlldyBmdW5jdGlvbiBzaG91bGQg YmUgc2VlbiBhcyBhIHN0YXRlZnVsIG9iamVjdCwKICAgICAgICA7OyBhbmQgd2UgY2FsbCB0aGUg ZGVzdHJ1Y3RvciBoZXJlLgogICAgICAgICh3aGVuIHByZXZpZXcKICAgICAgICAgIChmdW5jYWxs IHByZXZpZXcgc2VsZWN0ZWQgdCkpKSkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXdpdGgtcHJldmll dyAocHJldmlldy1rZXkgcHJldmlldyB0cmFuc2Zvcm0gY2FuZGlkYXRlICZyZXN0IGJvZHkpCiAg IkFkZCBwcmV2aWV3IHN1cHBvcnQgdG8gQk9EWS4KClBSRVZJRVcgaXMgdGhlIHByZXZpZXcgZnVu Y3Rpb24uClRSQU5TRk9STSBpcyB0aGUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24uCkNBTkRJREFU RSBpcyB0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBjdXJyZW50IGNhbmRpZGF0ZS4KUFJFVklF Vy1LRVkgYXJlIHRoZSBrZXlzIHdoaWNoIHRyaWdnZXJzIHRoZSBwcmV2aWV3LgoKVGhlIHByZXZp ZXcgZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cywgdGhlIHNlbGVjdGVkIGNhbmRpZGF0ZSBh bmQgYSByZXN0b3JlCmZsYWcuIEl0IGlzIGNhbGxlZCBldmVyeSB0aW1lIHdpdGggcmVzdG9yZT1u aWwgYWZ0ZXIgYSBwcmV2aWV3LWtleSBrZXlwcmVzcywgYXMKbG9uZyBhcyBhIG5ldyBjYW5kaWRh dGUgaXMgc2VsZWN0ZWQuIEZpbmFsbHkgdGhlIHByZXZpZXcgZnVuY3Rpb24gaXMgY2FsbGVkIGlu CmFueSBjYXNlIHdpdGggcmVzdG9yZT10IGV2ZW4gaWYgbm8gcHJldmlldyBoYXMgYWN0dWFsbHkg dGFrZW4gcGxhY2UuIFRoZQpjYW5kaWRhdGUgYXJndW1lbnQgY2FuIGJlIG5pbCBpZiB0aGUgc2Vs ZWN0aW9uIGhhcyBiZWVuIGFib3J0ZWQuIgogIChkZWNsYXJlIChpbmRlbnQgNCkpCiAgYChjb25z dWx0LS13aXRoLXByZXZpZXctMSAscHJldmlldy1rZXkgLHByZXZpZXcgLHRyYW5zZm9ybSAsY2Fu ZGlkYXRlIChsYW1iZGEgKCkgLEBib2R5KSkpCgo7Ozs7IE5hcnJvd2luZyBzdXBwb3J0CgooZGVm dW4gY29uc3VsdC0td2lkZW4ta2V5ICgpCiAgIlJldHVybiB3aWRlbmluZyBrZXksIGlmIGBjb25z dWx0LXdpZGVuLWtleScgaXMgbm90IHNldCwgZGVmYXVsdCB0byAnY29uc3VsdC1uYXJyb3cta2V5 IFNQQycuIgogIChvciBjb25zdWx0LXdpZGVuLWtleSAoYW5kIGNvbnN1bHQtbmFycm93LWtleSAo dmNvbmNhdCBjb25zdWx0LW5hcnJvdy1rZXkgIiAiKSkpKQoKKGRlZnVuIGNvbnN1bHQtbmFycm93 IChrZXkpCiAgIk5hcnJvdyBjdXJyZW50IGNvbXBsZXRpb24gd2l0aCBLRVkuCgpUaGlzIGNvbW1h bmQgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBuYXJyb3dpbmcgc3lzdGVtIG9mIGBjb25zdWx0 LS1yZWFkJy4iCiAgKGludGVyYWN0aXZlCiAgIChsaXN0ICh1bmxlc3MgKGVxdWFsICh0aGlzLXNp bmdsZS1jb21tYW5kLWtleXMpIChjb25zdWx0LS13aWRlbi1rZXkpKQogICAgICAgICAgIGxhc3Qt Y29tbWFuZC1ldmVudCkpKQogIChjb25zdWx0LS1yZXF1aXJlLW1pbmlidWZmZXIpCiAgKHNldHEg Y29uc3VsdC0tbmFycm93IGtleSkKICAod2hlbiBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlCiAg ICAoc2V0cSBtaW5pYnVmZmVyLWNvbXBsZXRpb24tcHJlZGljYXRlIChhbmQgY29uc3VsdC0tbmFy cm93IGNvbnN1bHQtLW5hcnJvdy1wcmVkaWNhdGUpKSkKICAod2hlbiBjb25zdWx0LS1uYXJyb3ct b3ZlcmxheQogICAgKGRlbGV0ZS1vdmVybGF5IGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5KSkKICAo d2hlbiBjb25zdWx0LS1uYXJyb3cKICAgIChzZXRxIGNvbnN1bHQtLW5hcnJvdy1vdmVybGF5CiAg ICAgICAgICAoY29uc3VsdC0tb3ZlcmxheQogICAgICAgICAgICgtIChtaW5pYnVmZmVyLXByb21w dC1lbmQpIDEpIChtaW5pYnVmZmVyLXByb21wdC1lbmQpCiAgICAgICAgICAgJ2JlZm9yZS1zdHJp bmcKICAgICAgICAgICAocHJvcGVydGl6ZSAoZm9ybWF0ICIgWyVzXSIgKGNkciAoYXNzb2Mga2V5 IGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcykpKQogICAgICAgICAgICAgICAgICAgICAgICdmYWNl ICdjb25zdWx0LW5hcnJvdy1pbmRpY2F0b3IpKSkpCiAgKHJ1bi1ob29rcyAnY29uc3VsdC0tY29t cGxldGlvbi1yZWZyZXNoLWhvb2spKQoKKGRlZmNvbnN0IGNvbnN1bHQtLW5hcnJvdy1kZWxldGUK ICBgKG1lbnUtaXRlbQogICAgIiIgbmlsIDpmaWx0ZXIKICAgICwobGFtYmRhICgmb3B0aW9uYWwg XykKICAgICAgICh3aGVuIChzdHJpbmc9IChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXByb3BlcnRp ZXMpICIiKQogICAgICAgICAoY29uc3VsdC1uYXJyb3cgbmlsKQogICAgICAgICAjJ2lnbm9yZSkp KSkKCihkZWZjb25zdCBjb25zdWx0LS1uYXJyb3ctc3BhY2UKICBgKG1lbnUtaXRlbQogICAgIiIg bmlsIDpmaWx0ZXIKICAgICwobGFtYmRhICgmb3B0aW9uYWwgXykKICAgICAgIChsZXQgKChzdHIg KG1pbmlidWZmZXItY29udGVudHMtbm8tcHJvcGVydGllcykpKQogICAgICAgICAod2hlbi1sZXQg KHBhaXIgKG9yIChhbmQgKD0gMSAobGVuZ3RoIHN0cikpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYXNzb2MgKGFyZWYgc3RyIDApIGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcykp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nPSBzdHIgIiIpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXNzb2MgMzIgY29uc3VsdC0tbmFycm93LXBy ZWZpeGVzKSkpKQogICAgICAgICAgIChkZWxldGUtbWluaWJ1ZmZlci1jb250ZW50cykKICAgICAg ICAgICAoY29uc3VsdC1uYXJyb3cgKGNhciBwYWlyKSkKICAgICAgICAgICAjJ2lnbm9yZSkpKSkp CgooZGVmdW4gY29uc3VsdC1uYXJyb3ctaGVscCAoKQogICJQcmludCBuYXJyb3dpbmcgaGVscCBh cyBhIGBtaW5pYnVmZmVyLW1lc3NhZ2UnLgoKVGhpcyBjb21tYW5kIGNhbiBiZSBib3VuZCB0byBh IGtleSBpbiBgY29uc3VsdC1uYXJyb3ctbWFwJywKdG8gbWFrZSBpdCBhdmFpbGFibGUgZm9yIGNv bW1hbmRzIHdpdGggbmFycm93aW5nLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLXJlcXVp cmUtbWluaWJ1ZmZlcikKICAobGV0ICgobWluaWJ1ZmZlci1tZXNzYWdlLXRpbWVvdXQgMTAwMDAw MCkpCiAgICAobWluaWJ1ZmZlci1tZXNzYWdlCiAgICAgKHN0cmluZy1qb2luCiAgICAgIChtYXBj YXIgKGxhbWJkYSAoeCkgKGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVy dGl6ZSAoY2hhci10by1zdHJpbmcgKGNhciB4KSkgJ2ZhY2UgJ2NvbnN1bHQta2V5KQogICAgICAg ICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb3Bl cnRpemUgKGNkciB4KSAnZmFjZSAnY29uc3VsdC1oZWxwKSkpCiAgICAgICAgICAgICAgKHNlcS1m aWx0ZXIgKGxhbWJkYSAoeCkgKC89IChjYXIgeCkgMzIpKQogICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcykpCiAgICAgICIgIikpKSkKCihkZWZ1biBjb25z dWx0LS1uYXJyb3ctc2V0dXAgKHNldHRpbmdzIG1hcCkKICAiU2V0dXAgbmFycm93aW5nIHdpdGgg U0VUVElOR1MgYW5kIGtleW1hcCBNQVAuIgogIChpZiAoZnVuY3Rpb25wIChjYXIgc2V0dGluZ3Mp KQogICAgICAoc2V0cSBjb25zdWx0LS1uYXJyb3ctcHJlZGljYXRlIChjYXIgc2V0dGluZ3MpCiAg ICAgICAgICAgIGNvbnN1bHQtLW5hcnJvdy1wcmVmaXhlcyAoY2RyIHNldHRpbmdzKSkKICAgIChz ZXRxIGNvbnN1bHQtLW5hcnJvdy1wcmVkaWNhdGUgbmlsCiAgICAgICAgICBjb25zdWx0LS1uYXJy b3ctcHJlZml4ZXMgc2V0dGluZ3MpKQogICh3aGVuIGNvbnN1bHQtbmFycm93LWtleQogICAgKGRv bGlzdCAocGFpciBjb25zdWx0LS1uYXJyb3ctcHJlZml4ZXMpCiAgICAgICh3aGVuICgvPSAoY2Fy IHBhaXIpIDMyKQogICAgICAgIChjb25zdWx0LS1kZWZpbmUta2V5IG1hcAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh2Y29uY2F0IGNvbnN1bHQtbmFycm93LWtleSAodmVjdG9yIChjYXIg cGFpcikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMnY29uc3VsdC1uYXJyb3cgKGNk ciBwYWlyKSkpKSkKICAod2hlbi1sZXQgKHdpZGVuIChjb25zdWx0LS13aWRlbi1rZXkpKQogICAg KGNvbnN1bHQtLWRlZmluZS1rZXkgbWFwIHdpZGVuICMnY29uc3VsdC1uYXJyb3cgIkFsbCIpKSkK Cjs7OzsgQXN5bmMgc3VwcG9ydAoKKGRlZnVuIGNvbnN1bHQtLXdpdGgtYXN5bmMtMSAoYXN5bmMg ZnVuKQogICJTZXR1cCBBU1lOQyBmb3IgRlVOLiIKICAoaWYgKG5vdCAoZnVuY3Rpb25wIGFzeW5j KSkgKGZ1bmNhbGwgZnVuIChsYW1iZGEgKF8pIGFzeW5jKSkKICAgIChjb25zdWx0LS1taW5pYnVm ZmVyLXdpdGgtc2V0dXAtaG9vawogICAgICAgIChsYW1iZGEgKCkKICAgICAgICAgIChmdW5jYWxs IGFzeW5jICdzZXR1cCkKICAgICAgICAgIDs7IFB1c2ggaW5wdXQgc3RyaW5nIHRvIHJlcXVlc3Qg cmVmcmVzaC4KICAgICAgICAgIDs7IFdlIHVzZSBhIHN5bWJvbCBpbiBvcmRlciB0byBhdm9pZCBh ZGRpbmcgbGFtYmRhcyB0byB0aGUgaG9vayB2YXJpYWJsZS4KICAgICAgICAgIChsZXQgKChzeW0g KG1ha2Utc3ltYm9sICJjb25zdWx0LS1hc3luYy1hZnRlci1jaGFuZ2UiKSkpCiAgICAgICAgICAg IChmc2V0IHN5bSAobGFtYmRhICgmcmVzdCBfKSAoZnVuY2FsbCBhc3luYyAobWluaWJ1ZmZlci1j b250ZW50cy1uby1wcm9wZXJ0aWVzKSkpKQogICAgICAgICAgICAocnVuLWF0LXRpbWUgMCBuaWwg c3ltKQogICAgICAgICAgICAoYWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgc3ltIG5p bCB0KSkpCiAgICAgICh1bndpbmQtcHJvdGVjdAogICAgICAgICAgKGZ1bmNhbGwgZnVuIGFzeW5j KQogICAgICAgIChmdW5jYWxsIGFzeW5jICdkZXN0cm95KSkpKSkKCihkZWZtYWNybyBjb25zdWx0 LS13aXRoLWFzeW5jIChhc3luYyAmcmVzdCBib2R5KQogICJTZXR1cCBBU1lOQyBmb3IgQk9EWS4i CiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICBgKGNvbnN1bHQtLXdpdGgtYXN5bmMtMSAsQChjZHIg YXN5bmMpIChsYW1iZGEgKCwoY2FyIGFzeW5jKSkgLEBib2R5KSkpCgooZGVmdW4gY29uc3VsdC0t YXN5bmMtc2luayAoKQogICJDcmVhdGUgQVNZTkMgc2luayBmdW5jdGlvbi4KClRoZSBhc3luYyBm dW5jdGlvbiBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIGFjdGlvbiBhcmd1bWVudC4KT25seSBmb3Ig dGhlICdzZXR1cCBhY3Rpb24sIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGUgY2FsbApvcmlnaW5h dGVzIGZyb20gdGhlIG1pbmlidWZmZXIuIEZvciB0aGUgb3RoZXIgYWN0aW9ucyBubwphc3N1bXB0 aW9ucyBjYW4gYmUgbWFkZS4KRGVwZW5kaW5nIG9uIHRoZSBhcmd1bWVudCwgdGhlIGNhbGxlciBj b250ZXh0IGRpZmZlci4KCidzZXR1cCAgIFNldHVwIHRoZSBpbnRlcm5hbCBzdGF0ZS4KJ2Rlc3Ry b3kgRGVzdHJveSB0aGUgaW50ZXJuYWwgc3RhdGUuCidmbHVzaCAgIEZsdXNoIHRoZSBsaXN0IG9m IGNhbmRpZGF0ZXMuCidyZWZyZXNoIFJlcXVlc3QgVUkgcmVmcmVzaC4KJ2dldCAgICAgR2V0IHRo ZSBsaXN0IG9mIGNhbmRpZGF0ZXMuCkxpc3QgICAgIEFwcGVuZCB0aGUgbGlzdCB0byB0aGUgbGlz dCBvZiBjYW5kaWRhdGVzLgpTdHJpbmcgICBUaGUgaW5wdXQgc3RyaW5nLCBjYWxsZWQgd2hlbiB0 aGUgdXNlciBlbnRlcnMgc29tZXRoaW5nLiIKICAobGV0ICgoY2FuZGlkYXRlcykpCiAgICAobGFt YmRhIChhY3Rpb24pCiAgICAgIChwY2FzZS1leGhhdXN0aXZlIGFjdGlvbgogICAgICAgICgob3Ig KHByZWQgc3RyaW5ncCkgJ3NldHVwICdkZXN0cm95KSBuaWwpCiAgICAgICAgKCdmbHVzaCAoc2V0 cSBjYW5kaWRhdGVzIG5pbCkpCiAgICAgICAgKCdnZXQgY2FuZGlkYXRlcykKICAgICAgICAoJ3Jl ZnJlc2gKICAgICAgICAgKHdoZW4tbGV0ICh3aW4gKGFjdGl2ZS1taW5pYnVmZmVyLXdpbmRvdykp CiAgICAgICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IHdpbgogICAgICAgICAgICAgKHJ1bi1o b29rcyAnY29uc3VsdC0tY29tcGxldGlvbi1yZWZyZXNoLWhvb2spKSkpCiAgICAgICAgKChwcmVk IGxpc3RwKSAoc2V0cSBjYW5kaWRhdGVzIChuY29uYyBjYW5kaWRhdGVzIGFjdGlvbikpKSkpKSkK CihkZWZ1biBjb25zdWx0LS1hc3luYy1zcGxpdC1zdHJpbmcgKHN0cikKICAiU3BsaXQgU1RSIGlu IGFzeW5jIGlucHV0IGFuZCBmaWx0ZXJpbmcgcGFydC4KSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBp cyBhIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBpdCBkZXRlcm1pbmVzCnRoZSBzZXBhcmF0b3IuIEV4 YW1wbGVzOiBcIi9hc3luYy9maWx0ZXJcIiwgXCIjYXN5bmMjZmlsdGVyXCIuIgogIChpZiAoc3Ry aW5nLW1hdGNoLXAgIl5bWzpwdW5jdDpdXSIgc3RyKQogICAgICAoc2F2ZS1tYXRjaC1kYXRhCiAg ICAgICAgKGxldCAoKHEgKHJlZ2V4cC1xdW90ZSAoc3Vic3RyaW5nIHN0ciAwIDEpKSkpCiAgICAg ICAgICAoc3RyaW5nLW1hdGNoIChjb25jYXQgIl4iIHEgIlxcKFteIiBxICJdKlxcKSIgcSAiPyIp IHN0cikKICAgICAgICAgIChjb25zIChtYXRjaC1zdHJpbmcgMSBzdHIpIChtYXRjaC1lbmQgMCkp KSkKICAgIChjb25zIHN0ciAobGVuZ3RoIHN0cikpKSkKCihkZWZtYWNybyBjb25zdWx0LS1hc3lu Yy1zcGxpdC13cmFwIChzdWZmaXgpCiAgIkNyZWF0ZSBjb21wbGV0aW9uIHN0eWxlIGZ1bmN0aW9u IHdpdGggbmFtZSBTVUZGSVguIgogIChsZXQgKChuYW1lIChpbnRlcm4gKGZvcm1hdCAiY29uc3Vs dC0tYXN5bmMtc3BsaXQtJXMiIHN1ZmZpeCkpKSkKICAgIGAocHJvZ24KICAgICAgIChkZWZ1biAs bmFtZSAoc3RyIHRhYmxlIHByZWQgcG9pbnQgJm9wdGlvbmFsIG1ldGFkYXRhKQogICAgICAgICAo bGV0ICgoY29tcGxldGlvbi1zdHlsZXMgKGNkciBjb21wbGV0aW9uLXN0eWxlcykpCiAgICAgICAg ICAgICAgIChwb3MgKGNkciAoY29uc3VsdC0tYXN5bmMtc3BsaXQtc3RyaW5nIHN0cikpKSkKICAg ICAgICAgICAoLChpbnRlcm4gKGZvcm1hdCAiY29tcGxldGlvbi0lcyIgc3VmZml4KSkKICAgICAg ICAgICAgKHN1YnN0cmluZyBzdHIgcG9zKSB0YWJsZSBwcmVkICgtIHBvaW50IHBvcykgbWV0YWRh dGEpKSkKICAgICAgICcsbmFtZSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXNwbGl0LXNldHVw ICgpCiAgIlNldHVwIGBjb25zdWx0LS1hc3luYy1zcGxpdCcgY29tcGxldGlvbiBzdHlsZXMuIgog IChzZXRxLWxvY2FsIGNvbXBsZXRpb24tc3R5bGVzLWFsaXN0CiAgICAgICAgICAgICAgKGNvbnMg KGxpc3QgJ2NvbnN1bHQtLWFzeW5jLXNwbGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv bnN1bHQtLWFzeW5jLXNwbGl0LXdyYXAgdHJ5LWNvbXBsZXRpb24pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXdyYXAgYWxsLWNvbXBsZXRpb25zKSAiIikK ICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uLXN0eWxlcy1hbGlzdCkpCiAgKHNldHEtbG9j YWwgY29tcGxldGlvbi1zdHlsZXMKICAgICAgICAgICAgICAoY29ucyAnY29uc3VsdC0tYXN5bmMt c3BsaXQgY29tcGxldGlvbi1zdHlsZXMpKSkKCihkZWZ1biBjb25zdWx0LS1hc3luYy1zcGxpdCAo YXN5bmMpCiAgIkNyZWF0ZSBhc3luYyBmdW5jdGlvbiwgd2hpY2ggc3BsaXRzIHRoZSBpbnB1dCBz dHJpbmcuCgpUaGUgaW5wdXQgc3RyaW5nIGlzIHNwbGl0IGF0IHRoZSBmaXJzdCBjb21tYS4gVGhl IHBhcnQgYmVmb3JlCnRoZSBjb21tYSBpcyBwYXNzZWQgdG8gQVNZTkMsIHRoZSBzZWNvbmQgcGFy dCBpcyB1c2VkIGZvciBmaWx0ZXJpbmcuIgogIChsYW1iZGEgKGFjdGlvbikKICAgIChwY2FzZSBh Y3Rpb24KICAgICAgKCdzZXR1cAogICAgICAgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXNldHVwKQog ICAgICAgKGZ1bmNhbGwgYXN5bmMgJ3NldHVwKSkKICAgICAgKChwcmVkIHN0cmluZ3ApCiAgICAg ICAobGV0KiAoKHBhaXIgKGNvbnN1bHQtLWFzeW5jLXNwbGl0LXN0cmluZyBhY3Rpb24pKQogICAg ICAgICAgICAgIChpbnB1dC1sZW4gKGxlbmd0aCBhY3Rpb24pKQogICAgICAgICAgICAgIChhc3lu Yy1zdHIgKGNhciBwYWlyKSkKICAgICAgICAgICAgICAoYXN5bmMtbGVuIChsZW5ndGggYXN5bmMt c3RyKSkKICAgICAgICAgICAgICAoZW5kIChtaW5pYnVmZmVyLXByb21wdC1lbmQpKSkKICAgICAg ICAgOzsgSGlnaGxpZ2h0IHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKICAgICAgICAgKHJlbW92ZS1s aXN0LW9mLXRleHQtcHJvcGVydGllcyBlbmQgKCsgZW5kIGlucHV0LWxlbikgJyhmYWNlKSkKICAg ICAgICAgKHdoZW4gKD4gaW5wdXQtbGVuIGFzeW5jLWxlbikKICAgICAgICAgICAocHV0LXRleHQt cHJvcGVydHkgZW5kICgxKyBlbmQpICdmYWNlICdjb25zdWx0LWFzeW5jLXNwbGl0KQogICAgICAg ICAgICh3aGVuICg+IGlucHV0LWxlbiAoMSsgYXN5bmMtbGVuKSkKICAgICAgICAgICAgIChwdXQt dGV4dC1wcm9wZXJ0eSAoKyAxIGVuZCBhc3luYy1sZW4pCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKCsgMiBlbmQgYXN5bmMtbGVuKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdmYWNlICdjb25zdWx0LWFzeW5jLXNwbGl0KSkpCiAgICAgICAgIChmdW5jYWxsIGFzeW5j CiAgICAgICAgICAgICAgICAgIDs7IFBhc3MgdGhyb3VnaCBpZiBmb3JjZWQgYnkgdHdvIHB1bmN0 dWF0aW9uIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICAgOzsgb3IgaWYgdGhlIGlucHV0IGlz IGxvbmcgZW5vdWdoIQogICAgICAgICAgICAgICAgICAoaWYgKG9yICg+PSBpbnB1dC1sZW4gKCsg MiBhc3luYy1sZW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICg+PSBhc3luYy1sZW4gY29u c3VsdC1hc3luYy1taW4taW5wdXQpKQogICAgICAgICAgICAgICAgICAgICAgYXN5bmMtc3RyCiAg ICAgICAgICAgICAgICAgICAgOzsgUHJldGVuZCB0aGF0IHRoZXJlIGlzIG5vIGlucHV0CiAgICAg ICAgICAgICAgICAgICAgIiIpKSkpCiAgICAgIChfIChmdW5jYWxsIGFzeW5jIGFjdGlvbikpKSkp CgooZGVmdW4gY29uc3VsdC0tYXN5bmMtbG9nIChmb3JtYXR0ZWQgJnJlc3QgYXJncykKICAiTG9n IEZPUk1BVFRFRCBBUkdTIHRvIGBjb25zdWx0LS1hc3luYy1sb2cnLiIKICAod2l0aC1jdXJyZW50 LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgY29uc3VsdC0tYXN5bmMtbG9nKQogICAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkKICAgIChpbnNlcnQgKGFwcGx5ICMnZm9ybWF0IGZvcm1hdHRlZCBh cmdzKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXByb2Nlc3MgKGFzeW5jIGNtZCkKICAiQ3Jl YXRlIHByb2Nlc3Mgc291cmNlIGFzeW5jIGZ1bmN0aW9uLgoKQVNZTkMgaXMgdGhlIGFzeW5jIGZ1 bmN0aW9uIHdoaWNoIHJlY2VpdmVzIHRoZSBjYW5kaWRhdGVzLgpDTUQgaXMgdGhlIGNvbW1hbmQg YXJndW1lbnQgbGlzdC4iCiAgKGxldCAoKHByb2MpIChsYXN0LWFyZ3MpIChpbmRpY2F0b3IpKQog ICAgKGxhbWJkYSAoYWN0aW9uKQogICAgICAocGNhc2UgYWN0aW9uCiAgICAgICAgKCIiIDs7IElm IG5vIGlucHV0IGlzIHByb3ZpZGVkIGtpbGwgY3VycmVudCBwcm9jZXNzCiAgICAgICAgIChpZ25v cmUtZXJyb3JzIChkZWxldGUtcHJvY2VzcyBwcm9jKSkKICAgICAgICAgKHNldHEgbGFzdC1hcmdz IG5pbCkpCiAgICAgICAgKChwcmVkIHN0cmluZ3ApCiAgICAgICAgIChsZXQgKChhcmdzIChmdW5j YWxsIGNtZCBhY3Rpb24pKQogICAgICAgICAgICAgICAoZmx1c2ggdCkKICAgICAgICAgICAgICAg KHJlc3QgIiIpKQogICAgICAgICAgICh1bmxlc3MgKGVxdWFsIGFyZ3MgbGFzdC1hcmdzKQogICAg ICAgICAgICAgKHNldHEgbGFzdC1hcmdzIGFyZ3MpCiAgICAgICAgICAgICAoaWdub3JlLWVycm9y cyAoZGVsZXRlLXByb2Nlc3MgcHJvYykpCiAgICAgICAgICAgICAod2hlbiBhcmdzCiAgICAgICAg ICAgICAgIChvdmVybGF5LXB1dCBpbmRpY2F0b3IgJ2Rpc3BsYXkgKHByb3BlcnRpemUgIioiICdm YWNlICdjb25zdWx0LWFzeW5jLXJ1bm5pbmcpKQogICAgICAgICAgICAgICAoY29uc3VsdC0tYXN5 bmMtbG9nICJjb25zdWx0LS1hc3luYy1wcm9jZXNzIHN0YXJ0ZWQgJVNcbiIgYXJncykKICAgICAg ICAgICAgICAgKHNldHEKICAgICAgICAgICAgICAgIHByb2MKICAgICAgICAgICAgICAgIChtYWtl LXByb2Nlc3MKICAgICAgICAgICAgICAgICA6Y29ubmVjdGlvbi10eXBlICdwaXBlCiAgICAgICAg ICAgICAgICAgOm5hbWUgKGNhciBhcmdzKQogICAgICAgICAgICAgICAgIDpzdGRlcnIgY29uc3Vs dC0tYXN5bmMtbG9nCiAgICAgICAgICAgICAgICAgOm5vcXVlcnkgdAogICAgICAgICAgICAgICAg IDpjb21tYW5kIGFyZ3MKICAgICAgICAgICAgICAgICA6ZmlsdGVyCiAgICAgICAgICAgICAgICAg KGxhbWJkYSAoXyBvdXQpCiAgICAgICAgICAgICAgICAgICAod2hlbiBmbHVzaAogICAgICAgICAg ICAgICAgICAgICAoc2V0cSBmbHVzaCBuaWwpCiAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxs IGFzeW5jICdmbHVzaCkpCiAgICAgICAgICAgICAgICAgICAobGV0ICgobGluZXMgKHNwbGl0LXN0 cmluZyBvdXQgIlxuIikpKQogICAgICAgICAgICAgICAgICAgICAoaWYgKG5vdCAoY2RyIGxpbmVz KSkKICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlc3QgKGNvbmNhdCByZXN0IChjYXIg bGluZXMpKSkKICAgICAgICAgICAgICAgICAgICAgICAoc2V0Y2FyIGxpbmVzIChjb25jYXQgcmVz dCAoY2FyIGxpbmVzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgcmVzdCAoY2FyIChs YXN0IGxpbmVzKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgKG5idXRs YXN0IGxpbmVzKSkpKSkKICAgICAgICAgICAgICAgICA6c2VudGluZWwKICAgICAgICAgICAgICAg ICAobGFtYmRhIChfIGV2ZW50KQogICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWxv ZyAiY29uc3VsdC0tYXN5bmMtcHJvY2VzcyBzZW50aW5lbDogJXNcbiIgZXZlbnQpCiAgICAgICAg ICAgICAgICAgICAod2hlbiBmbHVzaAogICAgICAgICAgICAgICAgICAgICAoc2V0cSBmbHVzaCBu aWwpCiAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGFzeW5jICdmbHVzaCkpCiAgICAgICAg ICAgICAgICAgICAob3ZlcmxheS1wdXQgaW5kaWNhdG9yICdkaXNwbGF5CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KChzdHJpbmctcHJlZml4LXAgImtpbGxlZCIgZXZlbnQpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocHJvcGVydGl6ZSAiOyIgJ2ZhY2UgJ2NvbnN1bHQtYXN5bmMtZmFpbGVkKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdHJpbmctcHJlZml4LXAgImZpbmlz aGVkIiBldmVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9wZXJ0aXpl ICI6IiAnZmFjZSAnY29uc3VsdC1hc3luYy1maW5pc2hlZCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh0IChwcm9wZXJ0aXplICIhIiAnZmFjZSAnY29uc3VsdC1hc3luYy1mYWls ZWQpKSkpCiAgICAgICAgICAgICAgICAgICAod2hlbiAoYW5kIChzdHJpbmctcHJlZml4LXAgImZp bmlzaGVkIiBldmVudCkgKG5vdCAoc3RyaW5nPSByZXN0ICIiKSkpCiAgICAgICAgICAgICAgICAg ICAgIChmdW5jYWxsIGFzeW5jIChsaXN0IHJlc3QpKSkpKSkpKSkpCiAgICAgICAgKCdkZXN0cm95 CiAgICAgICAgIChpZ25vcmUtZXJyb3JzIChkZWxldGUtcHJvY2VzcyBwcm9jKSkKICAgICAgICAg KGRlbGV0ZS1vdmVybGF5IGluZGljYXRvcikKICAgICAgICAgKGZ1bmNhbGwgYXN5bmMgJ2Rlc3Ry b3kpKQogICAgICAgICgnc2V0dXAKICAgICAgICAgKHNldHEgaW5kaWNhdG9yIChtYWtlLW92ZXJs YXkgKC0gKG1pbmlidWZmZXItcHJvbXB0LWVuZCkgMikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKC0gKG1pbmlidWZmZXItcHJvbXB0LWVuZCkgMSkpKQogICAgICAgICAo ZnVuY2FsbCBhc3luYyAnc2V0dXApKQogICAgICAgIChfIChmdW5jYWxsIGFzeW5jIGFjdGlvbikp KSkpKQoKKGRlZnVuIGNvbnN1bHQtLWFzeW5jLXRocm90dGxlIChhc3luYyAmb3B0aW9uYWwgdGhy b3R0bGUgZGVib3VuY2UpCiAgIkNyZWF0ZSBhc3luYyBmdW5jdGlvbiBmcm9tIEFTWU5DIHdoaWNo IHRocm90dGxlcyBpbnB1dC4KClRoZSBUSFJPVFRMRSBkZWxheSBkZWZhdWx0cyB0byBgY29uc3Vs dC1hc3luYy1pbnB1dC10aHJvdHRsZScuClRoZSBERUJPVU5DRSBkZWxheSBkZWZhdWx0cyB0byBg Y29uc3VsdC1hc3luYy1pbnB1dC1kZWJvdW5jZScuIgogIChsZXQqICgodGhyb3R0bGUgKG9yIHRo cm90dGxlIGNvbnN1bHQtYXN5bmMtaW5wdXQtdGhyb3R0bGUpKQogICAgICAgICAoZGVib3VuY2Ug KG9yIGRlYm91bmNlIGNvbnN1bHQtYXN5bmMtaW5wdXQtZGVib3VuY2UpKQogICAgICAgICAoaW5w dXQgIiIpCiAgICAgICAgICh1bmxvY2tlZCB0KQogICAgICAgICAodGhyb3R0bGUtdGltZXIpCiAg ICAgICAgIChkZWJvdW5jZS10aW1lcikpCiAgICAobGFtYmRhIChhY3Rpb24pCiAgICAgIChwY2Fz ZSBhY3Rpb24KICAgICAgICAoJ3NldHVwCiAgICAgICAgIChmdW5jYWxsIGFzeW5jICdzZXR1cCkK ICAgICAgICAgKHNldHEgdGhyb3R0bGUtdGltZXIgKHJ1bi1hdC10aW1lIHRocm90dGxlIHRocm90 dGxlIChsYW1iZGEgKCkgKHNldHEgdW5sb2NrZWQgdCkpKSkpCiAgICAgICAgKChwcmVkIHN0cmlu Z3ApCiAgICAgICAgICh3aGVuIGRlYm91bmNlLXRpbWVyCiAgICAgICAgICAgKGNhbmNlbC10aW1l ciBkZWJvdW5jZS10aW1lcikpCiAgICAgICAgICh1bmxlc3MgKHN0cmluZz0gYWN0aW9uIGlucHV0 KQogICAgICAgICAgIChmdW5jYWxsIGFzeW5jIChzZXRxIGlucHV0ICIiKSkgOzsgY2FuY2VsIHJ1 bm5pbmcgcHJvY2VzcwogICAgICAgICAgICh1bmxlc3MgKHN0cmluZz0gYWN0aW9uICIiKQogICAg ICAgICAgICAgKHNldHEgZGVib3VuY2UtdGltZXIgKHJ1bi1hdC10aW1lCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCsgZGVib3VuY2UgKGlmIHVubG9ja2VkIDAgdGhyb3R0bGUp KSBuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpIChmdW5j YWxsIGFzeW5jIChzZXRxIHVubG9ja2VkIG5pbCBpbnB1dCBhY3Rpb24pKSkpKSkpKQogICAgICAg ICgnZGVzdHJveQogICAgICAgICAoY2FuY2VsLXRpbWVyIHRocm90dGxlLXRpbWVyKQogICAgICAg ICAod2hlbiBkZWJvdW5jZS10aW1lcgogICAgICAgICAgIChjYW5jZWwtdGltZXIgZGVib3VuY2Ut dGltZXIpKQogICAgICAgICAoZnVuY2FsbCBhc3luYyAnZGVzdHJveSkpCiAgICAgICAgKF8gKGZ1 bmNhbGwgYXN5bmMgYWN0aW9uKSkpKSkpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtcmVmcmVzaC1p bW1lZGlhdGUgKGFzeW5jKQogICJDcmVhdGUgYXN5bmMgZnVuY3Rpb24gZnJvbSBBU1lOQywgd2hp Y2ggcmVmcmVzaGVzIHRoZSBkaXNwbGF5LgoKVGhlIHJlZnJlc2ggaGFwcGVucyBpbW1lZGlhdGVs eSB3aGVuIGNhbmRpZGF0ZXMgYXJlIHB1c2hlZC4iCiAgKGxhbWJkYSAoYWN0aW9uKQogICAgKHBj YXNlIGFjdGlvbgogICAgICAoKG9yIChwcmVkIGxpc3RwKSAocHJlZCBzdHJpbmdwKSAnZmx1c2gp CiAgICAgICAocHJvZzEgKGZ1bmNhbGwgYXN5bmMgYWN0aW9uKQogICAgICAgICAoZnVuY2FsbCBh c3luYyAncmVmcmVzaCkpKQogICAgICAoXyAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLWFzeW5jLXJlZnJlc2gtdGltZXIgKGFzeW5jICZvcHRpb25hbCBkZWxheSkK ICAiQ3JlYXRlIGFzeW5jIGZ1bmN0aW9uIGZyb20gQVNZTkMsIHdoaWNoIHJlZnJlc2hlcyB0aGUg ZGlzcGxheS4KClRoZSByZWZyZXNoIGhhcHBlbnMgYWZ0ZXIgYSBERUxBWSwgZGVmYXVsdGluZyB0 byBgY29uc3VsdC1hc3luYy1yZWZyZXNoLWRlbGF5Jy4iCiAgKGxldCAoKHRpbWVyKSAocmVmcmVz aCB0KSAoZGVsYXkgKG9yIGRlbGF5IGNvbnN1bHQtYXN5bmMtcmVmcmVzaC1kZWxheSkpKQogICAg KGxhbWJkYSAoYWN0aW9uKQogICAgICAocGNhc2UgYWN0aW9uCiAgICAgICAgKChvciAocHJlZCBs aXN0cCkgKHByZWQgc3RyaW5ncCkgJ3JlZnJlc2ggJ2ZsdXNoKQogICAgICAgICAoc2V0cSByZWZy ZXNoIHQpKQogICAgICAgICgnZGVzdHJveSAoY2FuY2VsLXRpbWVyIHRpbWVyKSkKICAgICAgICAo J3NldHVwCiAgICAgICAgIChzZXRxIHRpbWVyIChydW4tYXQtdGltZQogICAgICAgICAgICAgICAg ICAgICAgZGVsYXkgZGVsYXkKICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKICAgICAg ICAgICAgICAgICAgICAgICAgKHdoZW4gcmVmcmVzaAogICAgICAgICAgICAgICAgICAgICAgICAg IChzZXRxIHJlZnJlc2ggbmlsKQogICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGFz eW5jICdyZWZyZXNoKSkpKSkpKQogICAgICAoZnVuY2FsbCBhc3luYyBhY3Rpb24pKSkpCgooZGVm bWFjcm8gY29uc3VsdC0tYXN5bmMtdHJhbnNmb3JtIChhc3luYyAmcmVzdCB0cmFuc2Zvcm0pCiAg IlVzZSBGVU4gdG8gVFJBTlNGT1JNIGNhbmRpZGF0ZXMgb2YgQVNZTkMuIgogIChsZXQgKChhc3lu Yy12YXIgKG1ha2Utc3ltYm9sICJhc3luYyIpKQogICAgICAgIChhY3Rpb24tdmFyIChtYWtlLXN5 bWJvbCAiYWN0aW9uIikpKQogICAgYChsZXQgKCgsYXN5bmMtdmFyICxhc3luYykpCiAgICAgICAo bGFtYmRhICgsYWN0aW9uLXZhcikKICAgICAgICAgKGZ1bmNhbGwgLGFzeW5jLXZhciAoaWYgKGxp c3RwICxhY3Rpb24tdmFyKSAoLEB0cmFuc2Zvcm0gLGFjdGlvbi12YXIpICxhY3Rpb24tdmFyKSkp KSkpCgooZGVmdW4gY29uc3VsdC0tYXN5bmMtbWFwIChhc3luYyBmdW4pCiAgIk1hcCBjYW5kaWRh dGVzIG9mIEFTWU5DIGJ5IEZVTi4iCiAgKGNvbnN1bHQtLWFzeW5jLXRyYW5zZm9ybSBhc3luYyBt YXBjYXIgZnVuKSkKCihkZWZ1biBjb25zdWx0LS1hc3luYy1maWx0ZXIgKGFzeW5jIGZ1bikKICAi RmlsdGVyIGNhbmRpZGF0ZXMgb2YgQVNZTkMgYnkgRlVOLiIKICAoY29uc3VsdC0tYXN5bmMtdHJh bnNmb3JtIGFzeW5jIHNlcS1maWx0ZXIgZnVuKSkKCihkZWZ1biBjb25zdWx0LS1jb21tYW5kLWFy Z3MgKGNtZCkKICAiU3BsaXQgY29tbWFuZCBhcmd1bWVudHMgYW5kIGFwcGVuZCB0byBDTUQuIgog IChzZXRxIGNtZCAoc3BsaXQtc3RyaW5nLWFuZC11bnF1b3RlIGNtZCkpCiAgKGxhbWJkYSAoaW5w dXQpCiAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAgIChsZXQgKChvcHRzKSkKICAgICAgICAod2hl biAoc3RyaW5nLW1hdGNoICIgKy0tXFwoICtcXHwkXFwpIiBpbnB1dCkKICAgICAgICAgIDs7IHNw bGl0LXN0cmluZy1hbmQtdW5xdW90ZSBtb2RpZmllcyB0aGUgbWF0Y2ggZGF0YQogICAgICAgICAg OzsgYW5kIGZhaWxzIGlmIHRoZSBxdW90ZXMgYXJlIGludmFsaWQuIElnbm9yZSBpdC4KICAgICAg ICAgIChzZXRxIG9wdHMgKHN1YnN0cmluZyBpbnB1dCAobWF0Y2gtZW5kIDApKQogICAgICAgICAg ICAgICAgaW5wdXQgKHN1YnN0cmluZyBpbnB1dCAwIChtYXRjaC1iZWdpbm5pbmcgMCkpCiAgICAg ICAgICAgICAgICBvcHRzIChpZ25vcmUtZXJyb3JzIChzcGxpdC1zdHJpbmctYW5kLXVucXVvdGUg b3B0cykpKSkKICAgICAgICAobWFwY2FuIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgIChp ZiAoc3RyaW5nPSB4ICJPUFRTIikKICAgICAgICAgICAgICAgICAgICAgIG9wdHMKICAgICAgICAg ICAgICAgICAgICAobGlzdCAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICJBUkciIGlucHV0IHgg J2ZpeGVkY2FzZSAnbGl0ZXJhbCkpKSkKICAgICAgICAgICAgICAgIGNtZCkpKSkpCgooZGVmbWFj cm8gY29uc3VsdC0tYXN5bmMtY29tbWFuZCAoY21kICZyZXN0IHRyYW5zZm9ybXMpCiAgIkFzeW5j aHJvbm91cyBDTUQgcGlwZWxpbmUgd2l0aCBUUkFOU0ZPUk1TLiIKICAoZGVjbGFyZSAoaW5kZW50 IDEpKQogIGAodGhyZWFkLWZpcnN0IChjb25zdWx0LS1hc3luYy1zaW5rKQogICAgIChjb25zdWx0 LS1hc3luYy1yZWZyZXNoLXRpbWVyKQogICAgICxAdHJhbnNmb3JtcwogICAgIChjb25zdWx0LS1h c3luYy1wcm9jZXNzIChjb25zdWx0LS1jb21tYW5kLWFyZ3MgLGNtZCkpCiAgICAgKGNvbnN1bHQt LWFzeW5jLXRocm90dGxlKQogICAgIChjb25zdWx0LS1hc3luYy1zcGxpdCkpKQoKOzs7OyBTcGVj aWFsIGtleW1hcHMKCihkZWZ2YXIgY29uc3VsdC1hc3luYy1tYXAgKG1ha2Utc3BhcnNlLWtleW1h cCkKICAiS2V5bWFwIGFkZGVkIGZvciBjb21tYW5kcyB3aXRoIGFzeW5jaHJvbm91cyBjYW5kaWRh dGVzLiIpCgooZGVmdmFyIGNvbnN1bHQtcHJldmlldy1tYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkK ICAiS2V5bWFwIGFkZGVkIGZvciBjb21tYW5kcyB3aXRoIHByZXZpZXcuIikKCihkZWZ2YXIgY29u c3VsdC1uYXJyb3ctbWFwCiAgKGxldCAoKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAo ZGVmaW5lLWtleSBtYXAgIiAiIGNvbnN1bHQtLW5hcnJvdy1zcGFjZSkKICAgIChkZWZpbmUta2V5 IG1hcCBbMTI3XSBjb25zdWx0LS1uYXJyb3ctZGVsZXRlKQogICAgbWFwKQogICJOYXJyb3dpbmcg a2V5bWFwIHdoaWNoIGlzIGFkZGVkIHRvIHRoZSBsb2NhbCBtaW5pYnVmZmVyIG1hcC4KTm90ZSB0 aGF0IGBjb25zdWx0LW5hcnJvdy1rZXknIGFuZCBgY29uc3VsdC13aWRlbi1rZXknIGFyZSBib3Vu ZCBkeW5hbWljYWxseS4iKQoKOzs7OyBJbnRlcm5hbCBBUEk6IGNvbnN1bHQtLXJlYWQKCihkZWZ1 biBjb25zdWx0LS1hZGQtaGlzdG9yeSAoaXRlbXMpCiAgIkFkZCBJVEVNUyB0byB0aGUgbWluaWJ1 ZmZlciBoaXN0b3J5IHZpYSBgbWluaWJ1ZmZlci1kZWZhdWx0LWFkZC1mdW5jdGlvbicuIgogIChz ZXRxLWxvY2FsIG1pbmlidWZmZXItZGVmYXVsdC1hZGQtZnVuY3Rpb24KICAgICAgICAgICAgICAo bGFtYmRhICgpCiAgICAgICAgICAgICAgICAoY29uc3VsdC0tcmVtb3ZlLWR1cHMKICAgICAgICAg ICAgICAgICAoYXBwZW5kCiAgICAgICAgICAgICAgICAgIDs7IHRoZSBkZWZhdWx0cyBhcmUgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgZnV0dXJlIGhpc3RvcnkKICAgICAgICAgICAgICAgICAgKGlm IChsaXN0cCBtaW5pYnVmZmVyLWRlZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgICBtaW5pYnVm ZmVyLWRlZmF1bHQKICAgICAgICAgICAgICAgICAgICAobGlzdCBtaW5pYnVmZmVyLWRlZmF1bHQp KQogICAgICAgICAgICAgICAgICA7OyB0aGVuIG91ciBjdXN0b20gaXRlbXMKICAgICAgICAgICAg ICAgICAgKGRlbGV0ZSAiIiAoZGVscSBuaWwgKGlmIChsaXN0cCBpdGVtcykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxpc3QgaXRlbXMpKSkpCiAgICAgICAgICAgICAgICAgIDs7 IHRoZW4gYWxsIHRoZSBjb21wbGV0aW9ucwogICAgICAgICAgICAgICAgICAoYWxsLWNvbXBsZXRp b25zICIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1jb21w bGV0aW9uLXRhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZl ci1jb21wbGV0aW9uLXByZWRpY2F0ZSkpKSkpKQoKKGRlZnVuIGNvbnN1bHQtLXNldHVwLWtleW1h cCAoa2V5bWFwIGFzeW5jIG5hcnJvdyBwcmV2aWV3LWtleSkKICAiU2V0dXAgbWluaWJ1ZmZlciBr ZXltYXAuCgpLRVlNQVAgaXMgYSBjb21tYW5kLXNwZWNpZmljIEtFWU1BUC4KQVNZTkMgbXVzdCBi ZSB0IGZvciBhc3luYy4KTkFSUk9XIGFyZSB0aGUgbmFycm93IHNldHRpbmdzLgpQUkVWSUVXLUtF WSBpcyB0aGUgcHJldmlldyBrZXkuIgogIChsZXQgKChvbGQtbWFwIChjdXJyZW50LWxvY2FsLW1h cCkpCiAgICAgICAgKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCgogICAgOzsgQXN5bmMga2V5 cyBvdmVyd3JpdGluZyBzb21lIHVudXNhYmxlIGRlZmF1bHRzIGZvciB0aGUgZGVmYXVsdCBjb21w bGV0aW9uCiAgICAod2hlbiBhc3luYwogICAgICAod2hlbiAoZXEgKGxvb2t1cC1rZXkgb2xkLW1h cCAiICIpICMnbWluaWJ1ZmZlci1jb21wbGV0ZS13b3JkKQogICAgICAgIChkZWZpbmUta2V5IG1h cCAiICIgIydzZWxmLWluc2VydC1jb21tYW5kKSkKICAgICAgKHdoZW4gKGVxIChsb29rdXAta2V5 IG9sZC1tYXAgIlx0IikgIydtaW5pYnVmZmVyLWNvbXBsZXRlKQogICAgICAgIChkZWZpbmUta2V5 IG1hcCAiXHQiICMnbWluaWJ1ZmZlci1jb21wbGV0aW9uLWhlbHApKSkKCiAgICA7OyBBZGQgbmFy cm93IGtleXMKICAgICh3aGVuIG5hcnJvdwogICAgICAoY29uc3VsdC0tbmFycm93LXNldHVwIG5h cnJvdyBtYXApKQoKICAgIDs7IFByZXZpZXcgdHJpZ2dlciBrZXlzCiAgICAod2hlbiAoYW5kIHBy ZXZpZXcta2V5IChub3QgKGVxIHByZXZpZXcta2V5ICdhbnkpKSkKICAgICAgKGxldCAoKHByZXZp ZXcta2V5IChpZiAobGlzdHAgcHJldmlldy1rZXkpIHByZXZpZXcta2V5IChsaXN0IHByZXZpZXct a2V5KSkpKQogICAgICAgIChkb2xpc3QgKGtleSBwcmV2aWV3LWtleSkKICAgICAgICAgICh1bmxl c3MgKGxvb2t1cC1rZXkgb2xkLW1hcCBrZXkpCiAgICAgICAgICAgIChkZWZpbmUta2V5IG1hcCBr ZXkgIydpZ25vcmUpKSkpKQoKICAgIDs7IFB1dCB0aGUga2V5bWFwIHRvZ2V0aGVyCiAgICAodXNl LWxvY2FsLW1hcAogICAgIChtYWtlLWNvbXBvc2VkLWtleW1hcAogICAgICAoZGVscSBuaWwgKGxp c3Qga2V5bWFwCiAgICAgICAgICAgICAgICAgICAgICAoYW5kIGFzeW5jIGNvbnN1bHQtYXN5bmMt bWFwKQogICAgICAgICAgICAgICAgICAgICAgKGFuZCBuYXJyb3cgY29uc3VsdC1uYXJyb3ctbWFw KQogICAgICAgICAgICAgICAgICAgICAgKGFuZCBwcmV2aWV3LWtleSBjb25zdWx0LXByZXZpZXct bWFwKQogICAgICAgICAgICAgICAgICAgICAgbWFwKSkKICAgICAgb2xkLW1hcCkpKSkKCihkZWZ1 biBjb25zdWx0LS1mcnktdGhlLXRvZnVzICgmcmVzdCBfKQogICJGcnkgdGhlIHRvZnVzIGluIHRo ZSBtaW5pYnVmZmVyLiIKICAobGV0KiAoKG1pbiAobWluaWJ1ZmZlci1wcm9tcHQtZW5kKSkKICAg ICAgICAgKG1heCAocG9pbnQtbWF4KSkKICAgICAgICAgKHBvcyBtaW4pCiAgICAgICAgIChjbWlu IGNvbnN1bHQtLXRvZnUtY2hhcikKICAgICAgICAgKGNtYXggKC0gKCsgY29uc3VsdC0tdG9mdS1j aGFyIGNvbnN1bHQtLXRvZnUtcmFuZ2UpIDEpKSkKICAgICh3aGlsZSAoYW5kICg8IHBvcyBtYXgp ICg8PSBjbWluIChjaGFyLWFmdGVyIHBvcykgY21heCkpCiAgICAgIChzZXRxIHBvcyAoMSsgcG9z KSkpCiAgICAod2hlbiAoPiBwb3MgbWluKQogICAgICAocmVtb3ZlLWxpc3Qtb2YtdGV4dC1wcm9w ZXJ0aWVzIG1pbiBwb3MgJyhkaXNwbGF5KSkKICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IG1pbiBw b3MgJ2ludmlzaWJsZSB0KSkpKQoKKGNsLWRlZnVuIGNvbnN1bHQtLXJlYWQtc2V0dXAgKF9wcm9t cHQgY2FuZGlkYXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5 IGtleW1hcCBhZGQtaGlzdG9yeSBuYXJyb3cgcHJldmlldy1rZXkgJmFsbG93LW90aGVyLWtleXMp CiAgIk1pbmlidWZmZXIgc2V0dXAgZm9yIGBjb25zdWx0LS1yZWFkJy4KClNlZSBgY29uc3VsdC0t cmVhZCcgZm9yIHRoZSBDQU5ESURBVEVTLCBLRVlNQVAsIEFERC1ISVNUT1JZLCBOQVJST1cgYW5k IFBSRVZJRVctS0VZIGFyZ3VtZW50cy4iCiAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rp b25zICMnY29uc3VsdC0tZnJ5LXRoZS10b2Z1cyBuaWwgdCkKICAoY29uc3VsdC0tc2V0dXAta2V5 bWFwIGtleW1hcCAoZnVuY3Rpb25wIGNhbmRpZGF0ZXMpIG5hcnJvdyBwcmV2aWV3LWtleSkKICAo Y29uc3VsdC0tYWRkLWhpc3RvcnkgYWRkLWhpc3RvcnkpKQoKKGRlZm1hY3JvIGNvbnN1bHQtLXJl YWQtZGVmYXVsdHMgKCZyZXN0IGRlZmF1bHQpCiAgIlNldCBERUZBVUxUIG9wdGlvbnMuIgogICht YWNyb2V4cC1wcm9nbgogICAobWFwY2FyCiAgICAocGNhc2UtbGFtYmRhIChgKCxrZXkgLHZhbCkp CiAgICAgIGAodW5sZXNzIChwbGlzdC1tZW1iZXIgb3B0aW9ucyAsKGludGVybiAoZm9ybWF0ICI6 JXMiIGtleSkpKQogICAgICAgICAoc2V0cSBvcHRpb25zIChwbGlzdC1wdXQgb3B0aW9ucyAsKGlu dGVybiAoZm9ybWF0ICI6JXMiIGtleSkpIChzZXRxICxrZXkgLHZhbCkpKSkpCiAgICBkZWZhdWx0 KSkpCgooY2wtZGVmdW4gY29uc3VsdC0tcmVhZCAocHJvbXB0IGNhbmRpZGF0ZXMgJnJlc3Qgb3B0 aW9ucyAma2V5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlIHJlcXVp cmUtbWF0Y2ggaGlzdG9yeSBkZWZhdWx0IGtleW1hcAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhdGVnb3J5IGluaXRpYWwgbmFycm93IGFkZC1oaXN0b3J5IGFubm90YXRlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlldyBwcmV2aWV3LWtleSBzb3J0IGRlZmF1 bHQtdG9wIGxvb2t1cCkKICAiRW5oYW5jZWQgY29tcGxldGluZyByZWFkIGZ1bmN0aW9uLgoKQXJn dW1lbnRzOgoKUFJPTVBUIGlzIHRoZSBzdHJpbmcgdG8gcHJvbXB0IHdpdGguCkNBTkRJREFURVMg aXMgdGhlIGNhbmRpZGF0ZSBsaXN0IG9yIGFsaXN0LgoKS2V5d29yZCBPUFRJT05TOgoKUFJFRElD QVRFIGlzIGEgZmlsdGVyIGZ1bmN0aW9uIGZvciB0aGUgY2FuZGlkYXRlcy4KUkVRVUlSRS1NQVRD SCBlcXVhbHMgdCBtZWFucyB0aGF0IGFuIGV4YWN0IG1hdGNoIGlzIHJlcXVpcmVkLgpISVNUT1JZ IGlzIHRoZSBzeW1ib2wgb2YgdGhlIGhpc3RvcnkgdmFyaWFibGUuCkRFRkFVTFQgaXMgdGhlIGRl ZmF1bHQgc2VsZWN0ZWQgdmFsdWUuCkFERC1ISVNUT1JZIGlzIGEgbGlzdCBvZiBpdGVtcyB0byBh ZGQgdG8gdGhlIGhpc3RvcnkuCkNBVEVHT1JZIGlzIHRoZSBjb21wbGV0aW9uIGNhdGVnb3J5LgpT T1JUIHNob3VsZCBiZSBzZXQgdG8gbmlsIGlmIHRoZSBjYW5kaWRhdGVzIGFyZSBhbHJlYWR5IHNv cnRlZC4KTE9PS1VQIGlzIGEgZnVuY3Rpb24gd2hpY2ggaXMgYXBwbGllZCB0byB0aGUgcmVzdWx0 LgpBTk5PVEFURSBpcyB0aGUgYW5ub3RhdGlvbiBmdW5jdGlvbi4KSU5JVElBTCBpcyBpbml0aWFs IGlucHV0LgpERUZBVUxULVRPUCBtdXN0IGJlIG5pbCBpZiB0aGUgZGVmYXVsdCBjYW5kaWRhdGUg c2hvdWxkIG5vdCBiZSBtb3ZlZCB0byB0aGUgdG9wLgpQUkVWSUVXIGlzIGEgcHJldmlldyBmdW5j dGlvbiwgc2VlIGBjb25zdWx0LS13aXRoLXByZXZpZXcnLgpQUkVWSUVXLUtFWSBhcmUgdGhlIHBy ZXZpZXcga2V5cyAobmlsLCAnYW55LCBhIHNpbmdsZSBrZXkgb3IgYSBsaXN0IG9mIGtleXMpLgpO QVJST1cgaXMgYW4gYWxpc3Qgb2YgbmFycm93aW5nIHByZWZpeCBzdHJpbmdzIGFuZCBkZXNjcmlw dGlvbi4KS0VZTUFQIGlzIGEgY29tbWFuZC1zcGVjaWZpYyBrZXltYXAuIgogIDs7IHN1cHBvcnRl ZCB0eXBlcwogIChjbC1hc3NlcnQgKG9yIChmdW5jdGlvbnAgY2FuZGlkYXRlcykgICAgIDs7IGFz eW5jIHRhYmxlCiAgICAgICAgICAgICAgICAgKG5vdCBjYW5kaWRhdGVzKSAgICAgICAgICAgOzsg bmlsLCBlbXB0eSBsaXN0CiAgICAgICAgICAgICAgICAgKG9iYXJyYXlwIGNhbmRpZGF0ZXMpICAg ICAgOzsgb2JhcnJheQogICAgICAgICAgICAgICAgIChzdHJpbmdwIChjYXIgY2FuZGlkYXRlcykp IDs7IHN0cmluZyBsaXN0CiAgICAgICAgICAgICAgICAgKHN5bWJvbHAgKGNhciBjYW5kaWRhdGVz KSkgOzsgc3ltYm9sIGxpc3QKICAgICAgICAgICAgICAgICAoY29uc3AgKGNhciBjYW5kaWRhdGVz KSkpKSA7OyBhbGlzdAogIChpZ25vcmUgZGVmYXVsdC10b3AgbmFycm93IGFkZC1oaXN0b3J5IGtl eW1hcCkKICAoY29uc3VsdC0tcmVhZC1kZWZhdWx0cwogICAocHJldmlldy1rZXkgY29uc3VsdC1w cmV2aWV3LWtleSkKICAgKHNvcnQgdCkKICAgKGRlZmF1bHQtdG9wIHQpCiAgIChsb29rdXAgKGxh bWJkYSAoX2lucHV0IF9jYW5kcyB4KSB4KSkpCiAgKGNvbnN1bHQtLW1pbmlidWZmZXItd2l0aC1z ZXR1cC1ob29rCiAgICAgICg6YXBwZW5kIChsYW1iZGEgKCkgKGFwcGx5ICMnY29uc3VsdC0tcmVh ZC1zZXR1cCBwcm9tcHQgY2FuZGlkYXRlcyBvcHRpb25zKSkpCiAgICAoY29uc3VsdC0td2l0aC1h c3luYyAoYXN5bmMgY2FuZGlkYXRlcykKICAgICAgOzsgTk9URTogRG8gbm90IHVubmVjZXNzYXJp bHkgbGV0LWJpbmQgdGhlIGxhbWJkYXMgdG8gYXZvaWQKICAgICAgOzsgb3ZlcmNhcHR1cmluZyBp biB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgd2lsbCBtYWtlIGNsb3N1cmVzIGFuZCB0aGUKICAgICAg OzsgbGFtYmRhIHN0cmluZyByZXByZXNlbnRhdGlvbiBsYXJnZXIsIHdoaWNoIG1ha2VzIGRlYnVn Z2luZyBtdWNoIHdvcnNlLgogICAgICA7OyBGb3J0dW5hdGVseSB0aGUgb3ZlcmNhcHR1cmluZyBw cm9ibGVtIGRvZXMgbm90IGFmZmVjdCB0aGUgYnl0ZWNvZGUKICAgICAgOzsgaW50ZXJwcmV0ZXIg d2hpY2ggZG9lcyBhIHByb3BlciBzY29wZSBhbmFseWlzLgogICAgICAobGV0ICgocmVzdWx0CiAg ICAgICAgICAgICAoY29uc3VsdC0td2l0aC1wcmV2aWV3IHByZXZpZXcta2V5IHByZXZpZXcKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoaW5wdXQgY2FuZCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBsb29rdXAgaW5wdXQg KGZ1bmNhbGwgYXN5bmMgJ2dldCkgY2FuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChhcHBseS1wYXJ0aWFsbHkgIydydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3VjY2Vz cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdj b25zdWx0LS1jb21wbGV0aW9uLWNhbmRpZGF0ZS1ob29rKQogICAgICAgICAgICAgICAoY29tcGxl dGluZy1yZWFkIHByb21wdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEg KHN0ciBwcmVkIGFjdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAo ZXEgYWN0aW9uICdtZXRhZGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBgKG1ldGFkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQCh3 aGVuIGFubm90YXRlIGAoKGFubm90YXRpb24tZnVuY3Rpb24gLiAsYW5ub3RhdGUpKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxAKHdoZW4gY2F0ZWdvcnkgYCgoY2F0 ZWdvcnkgLiAsY2F0ZWdvcnkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICxAKHVubGVzcyBzb3J0ICcoKGN5Y2xlLXNvcnQtZnVuY3Rpb24gLiBpZGVudGl0eSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRp c3BsYXktc29ydC1mdW5jdGlvbiAuIGlkZW50aXR5KSkpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29tcGxldGUtd2l0aC1hY3Rpb24gYWN0aW9uIChmdW5jYWxsIGFzeW5j ICdnZXQpIHN0ciBwcmVkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGlj YXRlIHJlcXVpcmUtbWF0Y2ggaW5pdGlhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpZiAoc3ltYm9scCBoaXN0b3J5KSBoaXN0b3J5IChjYWRyIGhpc3RvcnkpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQpKSkpCiAgICAgICAgKHBjYXNlLWV4aGF1c3Rp dmUgaGlzdG9yeQogICAgICAgICAgKGAoOmlucHV0ICx2YXIpCiAgICAgICAgICAgKHNldCB2YXIg KGNkciAoc3ltYm9sLXZhbHVlIHZhcikpKQogICAgICAgICAgIChhZGQtdG8taGlzdG9yeSB2YXIg KGNkciByZXN1bHQpKSkKICAgICAgICAgICgocHJlZCBzeW1ib2xwKSkpCiAgICAgICAgKGNhciBy ZXN1bHQpKSkpKQoKKGFkdmljZS1hZGQgIydjb25zdWx0LS1yZWFkIDpmaWx0ZXItYXJncyAjJ2Nv bnN1bHQtLW1lcmdlLWNvbmZpZykKCjs7OzsgSW50ZXJuYWwgQVBJOiBjb25zdWx0LS1tdWx0aQoK KGRlZnN1YnN0IGNvbnN1bHQtLW11bHRpLXNvdXJjZSAoc291cmNlcyBjYW5kKQogICJMb29rdXAg c291cmNlIGZvciBDQU5EIGZyb20gU09VUkNFUyBsaXN0LiIKICAobnRoICgtIChhcmVmIGNhbmQg MCkgY29uc3VsdC0tdG9mdS1jaGFyKSBzb3VyY2VzKSkKCihkZWZ1biBjb25zdWx0LS1tdWx0aS1w cmVkaWNhdGUgKHNvdXJjZXMpCiAgIlJldHVybiBwcmVkaWNhdGUgZnVuY3Rpb24gdXNlZCBieSBg Y29uc3VsdC0tbXVsdGknIHdpdGggU09VUkNFUy4iCiAgKGxhbWJkYSAoY2FuZCkKICAgIChsZXQq ICgobmFycm93IChwbGlzdC1nZXQgKGNvbnN1bHQtLW11bHRpLXNvdXJjZSBzb3VyY2VzIGNhbmQp IDpuYXJyb3cpKQogICAgICAgICAgICh0eXBlIChvciAoY2FyLXNhZmUgbmFycm93KSBuYXJyb3cg LTEpKSkKICAgICAgKGlmIChlcSBjb25zdWx0LS1uYXJyb3cgMzIpIDs7IG5hcnJvd2VkIHRvIGhp ZGRlbiBjYW5kaWRhdGVzCiAgICAgICAgICAoPSB0eXBlIDMyKQogICAgICAgIChhbmQKICAgICAg ICAgKC89IHR5cGUgMzIpIDs7IG5vbi1oaWRkZW4gY2FuZGlkYXRlcwogICAgICAgICAob3IgKG5v dCBjb25zdWx0LS1uYXJyb3cpICg9IHR5cGUgY29uc3VsdC0tbmFycm93KSkpKSkpKQoKKGRlZnVu IGNvbnN1bHQtLW11bHRpLW5hcnJvdyAoc291cmNlcykKICAiUmV0dXJuIG5hcnJvdyBsaXN0IHVz ZWQgYnkgYGNvbnN1bHQtLW11bHRpJyB3aXRoIFNPVVJDRVMuIgogIChkZWxxIG5pbCAobWFwY2Fy IChsYW1iZGEgKHNyYykKICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChuYXJyb3cgKHBsaXN0 LWdldCBzcmMgOm5hcnJvdykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSAocGxp c3QtZ2V0IHNyYyA6bmFtZSkpKQogICAgICAgICAgICAgICAgICAgICAgICAoY29uZAogICAgICAg ICAgICAgICAgICAgICAgICAgKChjb25zcCBuYXJyb3cpIG5hcnJvdykKICAgICAgICAgICAgICAg ICAgICAgICAgICgoYW5kIG5hcnJvdyBuYW1lKSAoY29ucyBuYXJyb3cgbmFtZSkpKSkpCiAgICAg ICAgICAgICAgICAgICAgc291cmNlcykpKQoKKGRlZnVuIGNvbnN1bHQtLW11bHRpLWFubm90YXRl IChzb3VyY2VzIG1heC1sZW4pCiAgIlJldHVybiBhbm5vdGF0aW9uIGZ1bmN0aW9uIHVzZWQgYnkg YGNvbnN1bHQtLW11bHRpJyB3aXRoIFNPVVJDRVMuCgpNQVgtTEVOIGlzIHRoZSBtYXhpbXVtIGNh bmRpZGF0ZSBsZW5ndGguIgogIChsYW1iZGEgKGNhbmQpCiAgICAobGV0KiAoKHNyYyAoY29uc3Vs dC0tbXVsdGktc291cmNlIHNvdXJjZXMgY2FuZCkpCiAgICAgICAgICAgKGFubm90YXRlIChwbGlz dC1nZXQgc3JjIDphbm5vdGF0ZSkpCiAgICAgICAgICAgKGFubiAoaWYgYW5ub3RhdGUKICAgICAg ICAgICAgICAgICAgICAoZnVuY2FsbCBhbm5vdGF0ZSAoY2RyIChnZXQtdGV4dC1wcm9wZXJ0eSAw ICdjb25zdWx0LW11bHRpIGNhbmQpKSkKICAgICAgICAgICAgICAgICAgKHBsaXN0LWdldCBzcmMg Om5hbWUpKSkpCiAgICAgICh3aGVuIGFubgogICAgICAgIChjb25jYXQgKHByb3BlcnRpemUgIiAi ICdkaXNwbGF5IGAoc3BhY2UgOmFsaWduLXRvICgrIGxlZnQgLG1heC1sZW4pKSkgYW5uKSkpKSkK CihkZWZ1biBjb25zdWx0LS1tdWx0aS1sb29rdXAgKHNvdXJjZXMpCiAgIkxvb2t1cCBmdW5jdGlv biB1c2VkIGJ5IGBjb25zdWx0LS1tdWx0aScgd2l0aCBTT1VSQ0VTLiIKICAobGFtYmRhIChfIGNh bmRpZGF0ZXMgY2FuZCkKICAgIChpZi1sZXQgKGZvdW5kIChtZW1iZXIgY2FuZCBjYW5kaWRhdGVz KSkKICAgICAgICAoY29ucyAoY2RyIChnZXQtdGV4dC1wcm9wZXJ0eSAwICdjb25zdWx0LW11bHRp IChjYXIgZm91bmQpKSkKICAgICAgICAgICAgICAoY29uc3VsdC0tbXVsdGktc291cmNlIHNvdXJj ZXMgY2FuZCkpCiAgICAgICh1bmxlc3MgKHN0cmluZy1ibGFuay1wIGNhbmQpCiAgICAgICAgKGxp c3QgY2FuZCkpKSkpCgooZGVmdW4gY29uc3VsdC0tbXVsdGktY2FuZGlkYXRlcyAoc291cmNlcykK ICAiUmV0dXJuIGNhbmRpZGF0ZXMgZnJvbSBTT1VSQ0VTIGZvciBgY29uc3VsdC0tbXVsdGknLiIK ICAobGV0ICgoaWR4IDApIChtYXgtbGVuIDApIChjYW5kaWRhdGVzKSkKICAgIChkb2xpc3QgKHNy YyBzb3VyY2VzIChjb25zICgrIDMgbWF4LWxlbikgKG5yZXZlcnNlIGNhbmRpZGF0ZXMpKSkKICAg ICAgKGxldCogKChmYWNlIChwbGlzdC1nZXQgc3JjIDpmYWNlKSkKICAgICAgICAgICAgIChjYXQg KHBsaXN0LWdldCBzcmMgOmNhdGVnb3J5KSkKICAgICAgICAgICAgIChpdGVtcyAocGxpc3QtZ2V0 IHNyYyA6aXRlbXMpKQogICAgICAgICAgICAgKGl0ZW1zIChpZiAoZnVuY3Rpb25wIGl0ZW1zKSAo ZnVuY2FsbCBpdGVtcykgaXRlbXMpKSkKICAgICAgICAoZG9saXN0IChpdGVtIGl0ZW1zKQogICAg ICAgICAgKGxldCogKChjYW5kIChjb25jYXQgKGNoYXItdG8tc3RyaW5nICgrIGNvbnN1bHQtLXRv ZnUtY2hhciBpZHgpKSBpdGVtKSkKICAgICAgICAgICAgICAgICAobGVuIChsZW5ndGggY2FuZCkp KQogICAgICAgICAgICAoYWRkLXRleHQtcHJvcGVydGllcyAwIDEgKGxpc3QgJ2ludmlzaWJsZSB0 ICdjb25zdWx0LW11bHRpIChjb25zIGNhdCBpdGVtKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FuZCkKICAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IDEgbGVuICdmYWNl IGZhY2UgY2FuZCkKICAgICAgICAgICAgKHdoZW4gKD4gbGVuIG1heC1sZW4pIChzZXRxIG1heC1s ZW4gbGVuKSkKICAgICAgICAgICAgKHB1c2ggY2FuZCBjYW5kaWRhdGVzKSkpKQogICAgICAoc2V0 cSBpZHggKDErIGlkeCkpKSkpCgooZGVmdW4gY29uc3VsdC0tbXVsdGktcHJlcHJvY2VzcyAoc291 cmNlcykKICAiUHJlcHJvY2VzcyBTT1VSQ0VTLCBmaWx0ZXIgYnkgcHJlZGljYXRlLiIKICAoc2Vx LWZpbHRlciAobGFtYmRhIChzcmMpCiAgICAgICAgICAgICAgICAoaWYtbGV0IChwcmVkIChwbGlz dC1nZXQgc3JjIDpwcmVkaWNhdGUpKQogICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIHByZWQp CiAgICAgICAgICAgICAgICAgIHQpKQogICAgICAgICAgICAgIChtYXBjYXIgKGxhbWJkYSAoc3Jj KQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN5bWJvbHAgc3JjKSAoc3ltYm9sLXZhbHVl IHNyYykgc3JjKSkKICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMpKSkKCihkZWZ1biBjb25z dWx0LS1tdWx0aSAocHJvbXB0IHNvdXJjZXMgJnJlc3Qgb3B0aW9ucykKICAiU2VsZWN0IGZyb20g Y2FuZGlkYXRlcyB0YWtlbiBmcm9tIGEgbGlzdCBvZiBTT1VSQ0VTLgoKUFJPTVBUIGlzIHRoZSBt aW5pYnVmZmVyIHByb21wdC4KT1BUSU9OUyBpcyB0aGUgcGxpc3Qgb2Ygb3B0aW9ucyBwYXNzZWQg dG8gYGNvbnN1bHQtLXJlYWQnLgoKVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNlbGVjdGVkIGNh bmRpZGF0ZSBpbiB0aGUgZm9ybSAoY29ucyBjYW5kaWRhdGUKc291cmNlLXZhbHVlKS4gVGhlIHNv dXJjZXMgb2YgdGhlIHNvdXJjZSBsaXN0IGNhbiBlaXRoZXIgYmUgc3ltYm9scyBvZiBzb3VyY2UK dmFyaWFibGVzIG9yIHNvdXJjZSB2YWx1ZXMuIFNvdXJjZSB2YWx1ZXMgbXVzdCBiZSBwbGlzdHMg d2l0aCB0aGUgZm9sbG93aW5nCmZpZWxkczoKClJlcXVpcmVkIHNvdXJjZSBmaWVsZHM6CiogOmNh dGVnb3J5IC0gQ29tcGxldGlvbiBjYXRlZ29yeS4KKiA6aXRlbXMgLSBMaXN0IG9mIGNhbmRpZGF0 ZSBzdHJpbmdzIG9yIGZ1bmN0aW9uIHJldHVybmluZyBsaXN0IG9mIHN0cmluZ3MuCgpPcHRpb25h bCBzb3VyY2UgZmllbGRzOgoqIDpuYW1lIC0gTmFtZSBvZiB0aGUgc291cmNlLCB1c2VkIGZvciBu YXJyb3dpbmcgYW5kIGFubm90YXRpb24uCiogOm5hcnJvdyAtIE5hcnJvd2luZyBjaGFyYWN0ZXIg b3IgKGNoYXJhY3RlciAuIHN0cmluZykgcGFpci4KKiA6cHJlZGljYXRlIC0gRnVuY3Rpb24gd2hp Y2ggbXVzdCByZXR1cm4gdCBpZiB0aGUgc291cmNlIGlzIGVuYWJsZWQuCiogOmZhY2UgLSBGYWNl IHVzZWQgZm9yIGhpZ2hsaWdodGluZyB0aGUgY2FuZGlkYXRlcy4KKiA6YW5ub3RhdGUgLSBBbm5v dGF0aW9uIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCBjYW5kaWRhdGUsIHJldHVybnMgc3RyaW5n LgoqIDpoaXN0b3J5IC0gTmFtZSBvZiBoaXN0b3J5IHZhcmlhYmxlIHRvIGFkZCBzZWxlY3RlZCBj YW5kaWRhdGUuCiogQXJiaXRyYXJ5IG90aGVyIGZpZWxkcyBzcGVjaWZpYyB0byB5b3VyIHVzZSBj YXNlLiIKICAobGV0KiAoKHNvdXJjZXMgKGNvbnN1bHQtLW11bHRpLXByZXByb2Nlc3Mgc291cmNl cykpCiAgICAgICAgIChjYW5kaWRhdGVzCiAgICAgICAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFz ZWQtZ2MKICAgICAgICAgICAobGV0ICgoY29uc3VsdC0tY2FjaGUpKQogICAgICAgICAgICAgKGNv bnN1bHQtLW11bHRpLWNhbmRpZGF0ZXMgc291cmNlcykpKSkKICAgICAgICAgKHNlbGVjdGVkIChh cHBseSAjJ2NvbnN1bHQtLXJlYWQgcHJvbXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNk ciBjYW5kaWRhdGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgIDpjYXRlZ29yeSAgJ2NvbnN1 bHQtbXVsdGkKICAgICAgICAgICAgICAgICAgICAgICAgICA6cHJlZGljYXRlIChjb25zdWx0LS1t dWx0aS1wcmVkaWNhdGUgc291cmNlcykKICAgICAgICAgICAgICAgICAgICAgICAgICA6bmFycm93 ICAgIChjb25zdWx0LS1tdWx0aS1uYXJyb3cgc291cmNlcykKICAgICAgICAgICAgICAgICAgICAg ICAgICA6YW5ub3RhdGUgIChjb25zdWx0LS1tdWx0aS1hbm5vdGF0ZSBzb3VyY2VzIChjYXIgY2Fu ZGlkYXRlcykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOmxvb2t1cCAgICAoY29uc3VsdC0t bXVsdGktbG9va3VwIHNvdXJjZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucykp KQogICAgKHdoZW4tbGV0IChoaXN0b3J5IChwbGlzdC1nZXQgKGNkciBzZWxlY3RlZCkgOmhpc3Rv cnkpKQogICAgICAoYWRkLXRvLWhpc3RvcnkgaGlzdG9yeSAoY2FyIHNlbGVjdGVkKSkpCiAgICBz ZWxlY3RlZCkpCgo7Ozs7IEludGVybmFsIEFQSTogY29uc3VsdC0tcHJvbXB0CgooY2wtZGVmdW4g Y29uc3VsdC0tcHJvbXB0IChwcm9tcHQgJmtleSBoaXN0b3J5IGFkZC1oaXN0b3J5IGluaXRpYWwg ZGVmYXVsdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bWFwIHByZXZpZXcg KHByZXZpZXcta2V5IGNvbnN1bHQtcHJldmlldy1rZXkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodHJhbnNmb3JtIChsYW1iZGEgKF8geCkgeCkpKQogICJSZWFkIGZyb20gbWlu aWJ1ZmZlci4KClBST01QVCBpcyB0aGUgc3RyaW5nIHRvIHByb21wdCB3aXRoLgpUUkFOU0ZPUk0g aXMgYSBmdW5jdGlvbiB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGlucHV0IHN0cmlu Zy4KSElTVE9SWSBpcyB0aGUgc3ltYm9sIG9mIHRoZSBoaXN0b3J5IHZhcmlhYmxlLgpJTklUSUFM IGlzIGluaXRpYWwgaW5wdXQuCkRFRkFVTFQgaXMgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgdmFsdWUu CkFERC1ISVNUT1JZIGlzIGEgbGlzdCBvZiBpdGVtcyB0byBhZGQgdG8gdGhlIGhpc3RvcnkuClBS RVZJRVcgaXMgYSBwcmV2aWV3IGZ1bmN0aW9uLCBzZWUgYGNvbnN1bHQtLXdpdGgtcHJldmlldycu ClBSRVZJRVctS0VZIGFyZSB0aGUgcHJldmlldyBrZXlzIChuaWwsICdhbnksIGEgc2luZ2xlIGtl eSBvciBhIGxpc3Qgb2Yga2V5cykuCktFWU1BUCBpcyBhIGNvbW1hbmQtc3BlY2lmaWMga2V5bWFw LiIKICAoY29uc3VsdC0tbWluaWJ1ZmZlci13aXRoLXNldHVwLWhvb2sKICAgICAgKDphcHBlbmQg KGxhbWJkYSAoKQogICAgICAgICAgICAgICAgIChjb25zdWx0LS1zZXR1cC1rZXltYXAga2V5bWFw IG5pbCBuaWwgcHJldmlldy1rZXkpCiAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWFkZC1oaXN0 b3J5IGFkZC1oaXN0b3J5KSkpCiAgICAoY29uc3VsdC0td2l0aC1wcmV2aWV3IHByZXZpZXcta2V5 IHByZXZpZXcgdHJhbnNmb3JtICMnbWluaWJ1ZmZlci1jb250ZW50cy1uby1wcm9wZXJ0aWVzCiAg ICAgIChyZWFkLWZyb20tbWluaWJ1ZmZlciBwcm9tcHQgaW5pdGlhbCBuaWwgbmlsIGhpc3Rvcnkg ZGVmYXVsdCkpKSkKCihhZHZpY2UtYWRkICMnY29uc3VsdC0tcHJvbXB0IDpmaWx0ZXItYXJncyAj J2NvbnN1bHQtLW1lcmdlLWNvbmZpZykKCjs7OzsgQ29tbWFuZHMKCjs7Ozs7IENvbW1hbmQ6IGNv bnN1bHQtbXVsdGktb2NjdXIKCjs7IHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmF4b2Q1MDIvc2Vs ZWN0cnVtL2lzc3Vlcy8yMjYKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbXVsdGktb2Nj dXIgKGJ1ZnMgcmVnZXhwICZvcHRpb25hbCBubGluZXMpCiAgIkltcHJvdmVkIHZlcnNpb24gb2Yg YG11bHRpLW9jY3VyJyBiYXNlZCBvbiBgY29tcGxldGluZy1yZWFkLW11bHRpcGxlJy4KClNlZSBg bXVsdGktb2NjdXInIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgYXJndW1lbnRzIEJVRlMsIFJFR0VY UCBhbmQgTkxJTkVTLiIKICAoaW50ZXJhY3RpdmUgKGNvbnMKICAgICAgICAgICAgICAgIChtYXBj YXIgIydnZXQtYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0aW5nLXJlYWQt bXVsdGlwbGUgIkJ1ZmZlcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMnaW50ZXJuYWwtY29tcGxldGUtYnVmZmVyKSkKICAgICAgICAgICAgICAg IChvY2N1ci1yZWFkLXByaW1hcnktYXJncykpKQogIChvY2N1ci0xIHJlZ2V4cCBubGluZXMgYnVm cykpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW91dGxpbmUKCihkZWZ1biBjb25zdWx0LS1vdXRs aW5lLWNhbmRpZGF0ZXMgKCkKICAiUmV0dXJuIGFsaXN0IG9mIG91dGxpbmUgaGVhZGluZ3MgYW5k IHBvc2l0aW9ucy4iCiAgKGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQogIChjb25zdWx0LS1m b250aWZ5LWFsbCkKICAobGV0KiAoKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyAocG9pbnQtbWlu KSBjb25zdWx0LWxpbmUtbnVtYmVycy13aWRlbikpCiAgICAgICAgIChoZWFkaW5nLXJlZ2V4cCAo Y29uY2F0ICJeXFwoPzoiIG91dGxpbmUtcmVnZXhwICJcXCkiKSkKICAgICAgICAgKGNhbmRpZGF0 ZXMpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiAg ICAgICh3aGlsZSAoc2F2ZS1leGN1cnNpb24gKHJlLXNlYXJjaC1mb3J3YXJkIGhlYWRpbmctcmVn ZXhwIG5pbCB0KSkKICAgICAgICAoc2V0cSBsaW5lICgrIGxpbmUgKGNvbnN1bHQtLWNvdW50LWxp bmVzIChtYXRjaC1iZWdpbm5pbmcgMCkpKSkKICAgICAgICAocHVzaCAobGlzdCAocG9pbnQtbWFy a2VyKSBsaW5lCiAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKGxpbmUtYmVn aW5uaW5nLXBvc2l0aW9uKSAobGluZS1lbmQtcG9zaXRpb24pKSkKICAgICAgICAgICAgICBjYW5k aWRhdGVzKQogICAgICAgICh1bmxlc3MgKGVvYnApIChmb3J3YXJkLWNoYXIgMSkpKSkKICAgICh1 bmxlc3MgY2FuZGlkYXRlcwogICAgICAodXNlci1lcnJvciAiTm8gaGVhZGluZ3MiKSkKICAgIChj b25zdWx0LS1hZGQtbGluZS1udW1iZXIgbGluZSAobnJldmVyc2UgY2FuZGlkYXRlcykpKSkKCjs7 OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LW91dGxpbmUgKCkKICAiSnVtcCB0byBhbiBvdXRs aW5lIGhlYWRpbmcsIG9idGFpbmVkIGJ5IG1hdGNoaW5nIGFnYWluc3QgYG91dGxpbmUtcmVnZXhw Jy4KClRoaXMgY29tbWFuZCBzdXBwb3J0cyBjYW5kaWRhdGUgcHJldmlldy4KVGhlIHN5bWJvbCBh dCBwb2ludCBpcyBhZGRlZCB0byB0aGUgZnV0dXJlIGhpc3RvcnkuIgogIChpbnRlcmFjdGl2ZSkK ICAoY29uc3VsdC0tanVtcAogICAoY29uc3VsdC0tcmVhZAogICAgIkdvIHRvIGhlYWRpbmc6ICIK ICAgIChjb25zdWx0LS13aXRoLWluY3JlYXNlZC1nYyAoY29uc3VsdC0tb3V0bGluZS1jYW5kaWRh dGVzKSkKICAgIDpjYXRlZ29yeSAnY29uc3VsdC1sb2NhdGlvbgogICAgOnNvcnQgbmlsCiAgICA6 cmVxdWlyZS1tYXRjaCB0CiAgICA6bG9va3VwICMnY29uc3VsdC0tbGluZS1tYXRjaAogICAgOmhp c3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbGluZS1oaXN0b3J5KQogICAgOmFkZC1oaXN0b3J5ICh0 aGluZy1hdC1wb2ludCAnc3ltYm9sKQogICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9z aXRpb24pKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWVycm9yCgooZGVmdW4gY29uc3VsdC0t ZXJyb3ItY2FuZGlkYXRlcyAoKQogICJSZXR1cm4gYWxpc3Qgb2YgZXJyb3JzIGFuZCBwb3NpdGlv bnMuIgogIChsZXQgKChjYW5kaWRhdGVzKQogICAgICAgIChwb3MgKHBvaW50LW1pbikpKQogICAg KHNhdmUtZXhjdXJzaW9uCiAgICAgICh3aGlsZSAoc2V0cSBwb3MgKGNvbXBpbGF0aW9uLW5leHQt c2luZ2xlLXByb3BlcnR5LWNoYW5nZSBwb3MgJ2NvbXBpbGF0aW9uLW1lc3NhZ2UpKQogICAgICAg ICh3aGVuLWxldCogKChtc2cgKGdldC10ZXh0LXByb3BlcnR5IHBvcyAnY29tcGlsYXRpb24tbWVz c2FnZSkpCiAgICAgICAgICAgICAgICAgICAgKGxvYyAoY29tcGlsYXRpb24tLW1lc3NhZ2UtPmxv YyBtc2cpKSkKICAgICAgICAgIChnb3RvLWNoYXIgcG9zKQogICAgICAgICAgKHB1c2ggKGxpc3QK ICAgICAgICAgICAgICAgICAoY29uc3VsdC0tZm9udC1sb2NrIChidWZmZXItc3Vic3RyaW5nIHBv cyAobGluZS1lbmQtcG9zaXRpb24pKSkKICAgICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1 ZmZlcgogICAgICAgICAgICAgICAgICAgICA7OyB0YWtlbiBmcm9tIGNvbXBpbGUuZWwKICAgICAg ICAgICAgICAgICAgICAgKGFwcGx5ICMnY29tcGlsYXRpb24tZmluZC1maWxlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocG9pbnQtbWFya2VyKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNhYXIgKGNvbXBpbGF0aW9uLS1sb2MtPmZpbGUtc3RydWN0IGxvYykpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY2FkYXIgKGNvbXBpbGF0aW9uLS1sb2MtPmZpbGUtc3RydWN0IGxv YykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcGlsYXRpb24tLWZpbGUtc3RydWN0 LT5mb3JtYXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXBpbGF0aW9uLS1sb2Mt PmZpbGUtc3RydWN0IGxvYykpKQogICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKICAgICAgICAgICAgICAgICAgIDs7IGxvY2F0aW9uIG1pZ2h0IGJlIGludmFsaWQgYnkg bm93CiAgICAgICAgICAgICAgICAgICAoaWdub3JlLWVycm9ycwogICAgICAgICAgICAgICAgICAg ICAoZm9yd2FyZC1saW5lICgtIChjb21waWxhdGlvbi0tbG9jLT5saW5lIGxvYykgMSkpCiAgICAg ICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgKGNvbXBpbGF0aW9uLS1sb2MtPmNvbCBsb2Mp KSkKICAgICAgICAgICAgICAgICAgIChwb2ludC1tYXJrZXIpKQogICAgICAgICAgICAgICAgIChw Y2FzZSAoY29tcGlsYXRpb24tLW1lc3NhZ2UtPnR5cGUgbXNnKQogICAgICAgICAgICAgICAgICAg KDAgP2kpCiAgICAgICAgICAgICAgICAgICAoMSA/dykKICAgICAgICAgICAgICAgICAgIChfID9l KSkpCiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzKSkpKQogICAgKG5yZXZlcnNlIGNhbmRpZGF0 ZXMpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWVycm9yICgpCiAgIkp1bXAgdG8g YSBjb21waWxhdGlvbiBlcnJvciBpbiB0aGUgY3VycmVudCBidWZmZXIuCgpUaGlzIGNvbW1hbmQg d29ya3MgaW4gY29tcGlsYXRpb24gYnVmZmVycyBhbmQgZ3JlcCBidWZmZXJzLgpUaGUgY29tbWFu ZCBzdXBwb3J0cyBwcmV2aWV3IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZXJyb3IuIgogIChp bnRlcmFjdGl2ZSkKICAodW5sZXNzIChjb21waWxhdGlvbi1idWZmZXItcCAoY3VycmVudC1idWZm ZXIpKQogICAgKHVzZXItZXJyb3IgIk5vdCBhIGNvbXBpbGF0aW9uIGJ1ZmZlciIpKQogIChjb25z dWx0LS1qdW1wCiAgIChjb25zdWx0LS1yZWFkCiAgICAiR28gdG8gZXJyb3I6ICIKICAgIChjb25z dWx0LS13aXRoLWluY3JlYXNlZC1nYyAoY29uc3VsdC0tZXJyb3ItY2FuZGlkYXRlcykpCiAgICA6 Y2F0ZWdvcnkgJ2NvbnN1bHQtZXJyb3IKICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2gg dAogICAgOmxvb2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1jYWRyCiAgICA6bmFycm93IGAoLChsYW1i ZGEgKGNhbmQpICg9IChjYWRkciBjYW5kKSBjb25zdWx0LS1uYXJyb3cpKQogICAgICAgICAgICAg ICg/ZSAuICJFcnJvciIpCiAgICAgICAgICAgICAgKD93IC4gIldhcm5pbmciKQogICAgICAgICAg ICAgICg/aSAuICJJbmZvIikpCiAgICA6aGlzdG9yeSAnKDppbnB1dCBjb25zdWx0LS1lcnJvci1o aXN0b3J5KQogICAgOnByZXZpZXcKICAgIChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uICdjb25z dWx0LXByZXZpZXctZXJyb3IpKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LW1hcmsKCihkZWZ1 biBjb25zdWx0LS1tYXJrLWNhbmRpZGF0ZXMgKCkKICAiUmV0dXJuIGFsaXN0IG9mIGxpbmVzIGNv bnRhaW5pbmcgbWFya2Vycy4KVGhlIGFsaXN0IGNvbnRhaW5zIChzdHJpbmcgLiBwb3NpdGlvbikg cGFpcnMuIgogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAodW5sZXNzIChtYXJrZXIt cG9zaXRpb24gKG1hcmstbWFya2VyKSkKICAgICh1c2VyLWVycm9yICJObyBtYXJrcyIpKQogIChj b25zdWx0LS1mb250aWZ5LWFsbCkKICAobGV0KiAoKG1heC1saW5lIDApCiAgICAgICAgIChjYW5k aWRhdGVzKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAoZG9saXN0IChtYXJrZXIgKGNvbnMg KG1hcmstbWFya2VyKSBtYXJrLXJpbmcpKQogICAgICAgIChsZXQgKChwb3MgKG1hcmtlci1wb3Np dGlvbiBtYXJrZXIpKSkKICAgICAgICAgICh3aGVuIChjb25zdWx0LS1pbi1yYW5nZS1wIHBvcykK ICAgICAgICAgICAgKGdvdG8tY2hhciBwb3MpCiAgICAgICAgICAgIDs7IGBsaW5lLW51bWJlci1h dC1wb3MnIGlzIGEgdmVyeSBzbG93IGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgYmUgcmVwbGFjZWQg ZXZlcnl3aGVyZS4KICAgICAgICAgICAgOzsgSG93ZXZlciBpbiB0aGlzIGNhc2UgdGhlIHNsb3cg bGluZS1udW1iZXItYXQtcG9zIGRvZXMgbm90IGh1cnQgbXVjaCwgc2luY2UKICAgICAgICAgICAg OzsgdGhlIG1hcmsgcmluZyBpcyB1c3VhbGx5IHNtYWxsIHNpbmNlIGl0IGlzIGxpbWl0ZWQgYnkg YG1hcmstcmluZy1tYXgnLgogICAgICAgICAgICAobGV0ICgobGluZSAobGluZS1udW1iZXItYXQt cG9zIHBvcyBjb25zdWx0LWxpbmUtbnVtYmVycy13aWRlbikpKQogICAgICAgICAgICAgIChzZXRx IG1heC1saW5lIChtYXggbGluZSBtYXgtbGluZSkpCiAgICAgICAgICAgICAgKHB1c2ggKGxpc3Qg bWFya2VyIGxpbmUgKGNvbnN1bHQtLWxpbmUtd2l0aC1jdXJzb3IgbWFya2VyKSkKICAgICAgICAg ICAgICAgICAgICBjYW5kaWRhdGVzKSkpKSkpCiAgICAobnJldmVyc2UgKGNvbnN1bHQtLXJlbW92 ZS1kdXBzIChjb25zdWx0LS1hZGQtbGluZS1udW1iZXIgbWF4LWxpbmUgY2FuZGlkYXRlcykpKSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1tYXJrICgpCiAgIkp1bXAgdG8gYSBtYXJr ZXIgaW4gdGhlIGJ1ZmZlci1sb2NhbCBgbWFyay1yaW5nJy4KClRoZSBjb21tYW5kIHN1cHBvcnRz IHByZXZpZXcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtYXJrZXIgcG9zaXRpb24uClRoZSBz eW1ib2wgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1dHVyZSBoaXN0b3J5LiIKICAoaW50ZXJh Y3RpdmUpCiAgKGNvbnN1bHQtLWp1bXAKICAgKGNvbnN1bHQtLXJlYWQKICAgICJHbyB0byBtYXJr OiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFzZWQtZ2MgKGNvbnN1bHQtLW1hcmstY2FuZGlk YXRlcykpCiAgICA6Y2F0ZWdvcnkgJ2NvbnN1bHQtbG9jYXRpb24KICAgIDpzb3J0IG5pbAogICAg OnJlcXVpcmUtbWF0Y2ggdAogICAgOmxvb2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbgog ICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbGluZS1oaXN0b3J5KQogICAgOmFkZC1oaXN0 b3J5ICh0aGluZy1hdC1wb2ludCAnc3ltYm9sKQogICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZp ZXctcG9zaXRpb24pKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWdsb2JhbC1tYXJrCgooZGVm dW4gY29uc3VsdC0tZ2xvYmFsLW1hcmstY2FuZGlkYXRlcyAoKQogICJSZXR1cm4gYWxpc3Qgb2Yg bGluZXMgY29udGFpbmluZyBtYXJrZXJzLgoKVGhlIGFsaXN0IGNvbnRhaW5zIChzdHJpbmcgLiBw b3NpdGlvbikgcGFpcnMuIgogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAobGV0ICgo Y2FuZGlkYXRlcykpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGRvbGlzdCAobWFya2VyIGds b2JhbC1tYXJrLXJpbmcpCiAgICAgICAgKGxldCAoKHBvcyAobWFya2VyLXBvc2l0aW9uIG1hcmtl cikpCiAgICAgICAgICAgICAgKGJ1ZiAobWFya2VyLWJ1ZmZlciBtYXJrZXIpKSkKICAgICAgICAg ICh3aGVuIChhbmQgcG9zIChidWZmZXItbGl2ZS1wIGJ1ZikgKG5vdCAobWluaWJ1ZmZlcnAgYnVm KSkpCiAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZgogICAgICAgICAgICAgICh3 aGVuIChjb25zdWx0LS1pbi1yYW5nZS1wIHBvcykKICAgICAgICAgICAgICAgIChnb3RvLWNoYXIg cG9zKQogICAgICAgICAgICAgICAgOzsgYGxpbmUtbnVtYmVyLWF0LXBvcycgaXMgc2xvdywgc2Vl IGNvbW1lbnQgaW4gYGNvbnN1bHQtLW1hcmstY2FuZGlkYXRlcycuCiAgICAgICAgICAgICAgICAo bGV0KiAoKGxpbmUgKGxpbmUtbnVtYmVyLWF0LXBvcyBwb3MgY29uc3VsdC1saW5lLW51bWJlcnMt d2lkZW4pKQogICAgICAgICAgICAgICAgICAgICAgIChiZWdpbiAobGluZS1iZWdpbm5pbmctcG9z aXRpb24pKQogICAgICAgICAgICAgICAgICAgICAgIChlbmQgKGxpbmUtZW5kLXBvc2l0aW9uKSkK ICAgICAgICAgICAgICAgICAgICAgICAobG9jIChjb25zdWx0LS1mb3JtYXQtbG9jYXRpb24gKGJ1 ZmZlci1uYW1lIGJ1ZikgbGluZSkpKQogICAgICAgICAgICAgICAgICAoY29uc3VsdC0tZm9udGlm eS1yZWdpb24gYmVnaW4gZW5kKQogICAgICAgICAgICAgICAgICAocHVzaCAoY29uY2F0CiAgICAg ICAgICAgICAgICAgICAgICAgICAocHJvcGVydGl6ZQogICAgICAgICAgICAgICAgICAgICAgICAg IChjb25jYXQgKHByb3BlcnRpemUgKGNvbnN1bHQtLWVuY29kZS1sb2NhdGlvbiBtYXJrZXIpICdp bnZpc2libGUgdCkgbG9jKQogICAgICAgICAgICAgICAgICAgICAgICAgICdjb25zdWx0LWxvY2F0 aW9uIChjb25zIG1hcmtlciBsaW5lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0 LS1yZWdpb24td2l0aC1jdXJzb3IgYmVnaW4gZW5kIG1hcmtlcikpCiAgICAgICAgICAgICAgICAg ICAgICAgIGNhbmRpZGF0ZXMpKSkpKSkpKQogICAgKHVubGVzcyBjYW5kaWRhdGVzCiAgICAgICh1 c2VyLWVycm9yICJObyBnbG9iYWwgbWFya3MiKSkKICAgIChucmV2ZXJzZSAoY29uc3VsdC0tcmVt b3ZlLWR1cHMgY2FuZGlkYXRlcykpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWds b2JhbC1tYXJrICgpCiAgIkp1bXAgdG8gYSBtYXJrZXIgaW4gYGdsb2JhbC1tYXJrLXJpbmcnLgoK VGhlIGNvbW1hbmQgc3VwcG9ydHMgcHJldmlldyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG1h cmtlciBwb3NpdGlvbi4KVGhlIHN5bWJvbCBhdCBwb2ludCBpcyBhZGRlZCB0byB0aGUgZnV0dXJl IGhpc3RvcnkuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tanVtcAogICAoY29uc3VsdC0t cmVhZAogICAgIkdvIHRvIGdsb2JhbCBtYXJrOiAiCiAgICAoY29uc3VsdC0td2l0aC1pbmNyZWFz ZWQtZ2MgKGNvbnN1bHQtLWdsb2JhbC1tYXJrLWNhbmRpZGF0ZXMpKQogICAgOzsgV2hpbGUgYGNv bnN1bHQtZ2xvYmFsLW1hcmsnIGZvcm1hdHMgdGhlIGNhbmRpZGF0ZXMgaW4gZ3JlcC1saWtlCiAg ICA7OyBzdHlsZSwgd2UgYXJlIHN0aWxsIG5vdCB1c2luZyB0aGUgJ3hyZWYtbG9jYXRpb24gY2F0 ZWdvcnksCiAgICA7OyBzaW5jZSB0aGUgbG9jYXRpb25zIGFyZSBmb3JtYXR0ZWQgdXNpbmcgYWJi cmV2aWF0ZWQgYnVmZmVyCiAgICA7OyBuYW1lcyBpbnN0ZWFkIG9mIGZpbGUgcGF0aHMuIElmIHRo ZSAneHJlZi1sb2NhdGlvbiBjYXRlZ29yeQogICAgOzsgd291bGQgYmUgdXNlZCwgRW1iYXJrIHdv dWxkIGVtYmFyay1leHBvcnQgdG8gYSBicm9rZW4gZ3JlcC1tb2RlCiAgICA7OyBidWZmZXIuIEJ5 IHVzaW5nIHRoZSAnY29uc3VsdC1sb2NhdGlvbiBjYXRlZ29yeSwgRW1iYXJrIHdpbGwKICAgIDs7 IGV4cG9ydCB0byBhbiBvY2N1ciBidWZmZXIgaW5zdGVhZCEgU2VlIGFsc28KICAgIDs7IGh0dHBz Oi8vZ2l0aHViLmNvbS9taW5hZC9jb25zdWx0L2lzc3Vlcy8xMDcuCiAgICA6Y2F0ZWdvcnkgJ2Nv bnN1bHQtbG9jYXRpb24KICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2ggdAogICAgOmxv b2t1cCAjJ2NvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbgogICAgOmhpc3RvcnkgJyg6aW5wdXQgY29u c3VsdC0tbGluZS1oaXN0b3J5KQogICAgOmFkZC1oaXN0b3J5ICh0aGluZy1hdC1wb2ludCAnc3lt Ym9sKQogICAgOnByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24pKSkpCgo7Ozs7OyBD b21tYW5kOiBjb25zdWx0LWxpbmUKCihkZWZ1biBjb25zdWx0LS1saW5lLWNhbmRpZGF0ZXMgKCkK ICAiUmV0dXJuIGFsaXN0IG9mIGxpbmVzIGFuZCBwb3NpdGlvbnMuIgogIChjb25zdWx0LS1mb3Ji aWQtbWluaWJ1ZmZlcikKICAoY29uc3VsdC0tZm9udGlmeS1hbGwpCiAgKGxldCogKChkZWZhdWx0 LWNhbmQpCiAgICAgICAgIChjYW5kaWRhdGVzKQogICAgICAgICAobGluZSAobGluZS1udW1iZXIt YXQtcG9zIChwb2ludC1taW4pIGNvbnN1bHQtbGluZS1udW1iZXJzLXdpZGVuKSkKICAgICAgICAg KGN1cnItbGluZSAobGluZS1udW1iZXItYXQtcG9zIChwb2ludCkgY29uc3VsdC1saW5lLW51bWJl cnMtd2lkZW4pKQogICAgICAgICAobGluZS13aWR0aCAobGVuZ3RoIChudW1iZXItdG8tc3RyaW5n IChsaW5lLW51bWJlci1hdC1wb3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBvaW50LW1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4pKSkpCiAgICAgICAgIChk ZWZhdWx0LWNhbmQtZGlzdCBtb3N0LXBvc2l0aXZlLWZpeG51bSkpCiAgICAoY29uc3VsdC0tZWFj aC1saW5lIGJlZyBlbmQKICAgICAgKGxldCAoKHN0ciAoYnVmZmVyLXN1YnN0cmluZyBiZWcgZW5k KSkpCiAgICAgICAgKHVubGVzcyAoc3RyaW5nLWJsYW5rLXAgc3RyKQogICAgICAgICAgKGxldCAo KGNhbmQgKGNvbmNhdAogICAgICAgICAgICAgICAgICAgICAgIChjb25zdWx0LS1saW5lLW51bWJl ci1wcmVmaXggKHBvaW50LW1hcmtlcikgbGluZSBsaW5lLXdpZHRoKQogICAgICAgICAgICAgICAg ICAgICAgIHN0cikpCiAgICAgICAgICAgICAgICAoZGlzdCAoYWJzICgtIGN1cnItbGluZSBsaW5l KSkpKQogICAgICAgICAgICAod2hlbiAoPCBkaXN0IGRlZmF1bHQtY2FuZC1kaXN0KQogICAgICAg ICAgICAgIChzZXRxIGRlZmF1bHQtY2FuZCBjYW5kCiAgICAgICAgICAgICAgICAgICAgZGVmYXVs dC1jYW5kLWRpc3QgZGlzdCkpCiAgICAgICAgICAgIChwdXNoIGNhbmQgY2FuZGlkYXRlcykpKQog ICAgICAgIChzZXRxIGxpbmUgKDErIGxpbmUpKSkpCiAgICAodW5sZXNzIGNhbmRpZGF0ZXMKICAg ICAgKHVzZXItZXJyb3IgIk5vIGxpbmVzIikpCiAgICAoY29ucyBkZWZhdWx0LWNhbmQgKG5yZXZl cnNlIGNhbmRpZGF0ZXMpKSkpCgooZGVmdW4gY29uc3VsdC0tbGluZS1tYXRjaCAoaW5wdXQgY2Fu ZGlkYXRlcyBjYW5kKQogICJMb29rdXAgcG9zaXRpb24gb2YgbWF0Y2guCgpJTlBVVCBpcyB0aGUg aW5wdXQgc3RyaW5nIGVudGVyZWQgYnkgdGhlIHVzZXIuCkNBTkRJREFURVMgaXMgdGhlIGxpbmUg Y2FuZGlkYXRlcyBhbGlzdC4KQ0FORCBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbmRpZGF0 ZS4iCiAgKHdoZW4tbGV0IChwb3MgKGNvbnN1bHQtLWxvb2t1cC1sb2NhdGlvbiBpbnB1dCBjYW5k aWRhdGVzIGNhbmQpKQogICAgKGlmIChvciAoc3RyaW5nLWJsYW5rLXAgaW5wdXQpCiAgICAgICAg ICAgIChlcSBjb25zdWx0LWxpbmUtcG9pbnQtcGxhY2VtZW50ICdsaW5lLWJlZ2lubmluZykpCiAg ICAgICAgcG9zCiAgICAgIDs7IFN0cmlwIHVuaXF1ZSBsaW5lIG51bWJlciBwcmVmaXgKICAgICAg KGxldCAoKGkgMCkKICAgICAgICAgICAgKG4gKGxlbmd0aCBjYW5kKSkKICAgICAgICAgICAgKGNt aW4gY29uc3VsdC0tdG9mdS1jaGFyKQogICAgICAgICAgICAoY21heCAoLSAoKyBjb25zdWx0LS10 b2Z1LWNoYXIgY29uc3VsdC0tdG9mdS1yYW5nZSkgMSkpKQogICAgICAgICh3aGlsZSAoYW5kICg8 IGkgbikgKDw9IGNtaW4gKGFyZWYgY2FuZCBpKSBjbWF4KSkKICAgICAgICAgIChzZXRxIGkgKDEr IGkpKSkKICAgICAgICAod2hlbiAoPiBpIDApCiAgICAgICAgICAoc2V0cSBjYW5kIChzdWJzdHJp bmcgY2FuZCBpKSkpKQogICAgICAobGV0ICgoYmVnIDApCiAgICAgICAgICAgIChlbmQgKGxlbmd0 aCBjYW5kKSkKICAgICAgICAgICAgOzsgVXNlIGNvbnN1bHQtbG9jYXRpb24gY29tcGxldGlvbiBj YXRlZ29yeSB3aGVuIGZpbHRlcmluZyBsaW5lcwogICAgICAgICAgICAoZmlsdGVyIChjb25zdWx0 LS1jb21wbGV0aW9uLWZpbHRlciAnY29uc3VsdC1sb2NhdGlvbiBuaWwpKSkKICAgICAgICA7OyBG aW5kIG1hdGNoIGVuZCBwb3NpdGlvbiwgcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSBsaW5lIGVuZCB1 bnRpbAogICAgICAgIDs7IG1hdGNoaW5nIGZhaWxzCiAgICAgICAgKGxldCAoKHN0ZXAgMTYpKQog ICAgICAgICAgKHdoaWxlICg+IHN0ZXAgMCkKICAgICAgICAgICAgKHdoaWxlIChhbmQgKD4gKC0g ZW5kIHN0ZXApIDApCiAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGZpbHRlciBpbnB1 dCAobGlzdCAoc3Vic3RyaW5nIGNhbmQgMCAoLSBlbmQgc3RlcCkpKSkpCiAgICAgICAgICAgICAg KHNldHEgZW5kICgtIGVuZCBzdGVwKSkpCiAgICAgICAgICAgIChzZXRxIHN0ZXAgKC8gc3RlcCAy KSkpKQogICAgICAgIDs7IEZpbmQgbWF0Y2ggYmVnaW5uaW5nIHBvc2l0aW9uLCByZW1vdmUgY2hh cmFjdGVycyBmcm9tIGxpbmUgYmVnaW5uaW5nCiAgICAgICAgOzsgdW50aWwgbWF0Y2hpbmcgZmFp bHMKICAgICAgICAod2hlbiAoZXEgY29uc3VsdC1saW5lLXBvaW50LXBsYWNlbWVudCAnbWF0Y2gt YmVnaW5uaW5nKQogICAgICAgICAgKGxldCAoKHN0ZXAgMTYpKQogICAgICAgICAgICAod2hpbGUg KD4gc3RlcCAwKQogICAgICAgICAgICAgICh3aGlsZSAoYW5kICg8ICgrIGJlZyBzdGVwKSBlbmQp CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgZmlsdGVyIGlucHV0IChsaXN0IChz dWJzdHJpbmcgY2FuZCAoKyBiZWcgc3RlcCkgZW5kKSkpKQogICAgICAgICAgICAgICAgKHNldHEg YmVnICgrIGJlZyBzdGVwKSkpCiAgICAgICAgICAgICAgKHNldHEgc3RlcCAoLyBzdGVwIDIpKSkK ICAgICAgICAgICAgKHNldHEgZW5kIGJlZykpKQogICAgICAgIDs7IE1hcmtlciBjYW4gYmUgZGVh ZAogICAgICAgIChpZ25vcmUtZXJyb3JzICgrIHBvcyBlbmQpKSkpKSkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBjb25zdWx0LWxpbmUgKCZvcHRpb25hbCBpbml0aWFsKQogICJTZWFyY2ggZm9yIGEg bWF0Y2hpbmcgbGluZSBhbmQganVtcCB0byB0aGUgbGluZSBiZWdpbm5pbmcuCgpUaGUgZGVmYXVs dCBjYW5kaWRhdGUgaXMgYSBub24tZW1wdHkgbGluZSBjbG9zZXN0IHRvIHBvaW50LgpUaGlzIGNv bW1hbmQgb2JleXMgbmFycm93aW5nLiBPcHRpb25hbGx5IElOSVRJQUwgaW5wdXQgY2FuIGJlIHBy b3ZpZGVkLgpUaGUgc3ltYm9sIGF0IHBvaW50IGFuZCB0aGUgbGFzdCBgaXNlYXJjaC1zdHJpbmcn IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGludGVyYWN0aXZlKQogIChsZXQg KChjYW5kaWRhdGVzIChjb25zdWx0LS13aXRoLWluY3JlYXNlZC1nYyAoY29uc3VsdC0tbGluZS1j YW5kaWRhdGVzKSkpKQogICAgKGNvbnN1bHQtLWp1bXAKICAgICAoY29uc3VsdC0tcmVhZAogICAg ICAiR28gdG8gbGluZTogIiAoY2RyIGNhbmRpZGF0ZXMpCiAgICAgIDpjYXRlZ29yeSAnY29uc3Vs dC1sb2NhdGlvbgogICAgICA6c29ydCBuaWwKICAgICAgOmRlZmF1bHQtdG9wIG5pbAogICAgICA6 cmVxdWlyZS1tYXRjaCB0CiAgICAgIDs7IEFsd2F5cyBhZGQgbGFzdCBpc2VhcmNoIHN0cmluZyB0 byBmdXR1cmUgaGlzdG9yeQogICAgICA6YWRkLWhpc3RvcnkgKGxpc3QgKHRoaW5nLWF0LXBvaW50 ICdzeW1ib2wpIGlzZWFyY2gtc3RyaW5nKQogICAgICA6aGlzdG9yeSAnKDppbnB1dCBjb25zdWx0 LS1saW5lLWhpc3RvcnkpCiAgICAgIDpsb29rdXAgIydjb25zdWx0LS1saW5lLW1hdGNoCiAgICAg IDpkZWZhdWx0IChjYXIgY2FuZGlkYXRlcykKICAgICAgOzsgQWRkIGlzZWFyY2gtc3RyaW5nIGFz IGluaXRpYWwgaW5wdXQgaWYgc3RhcnRpbmcgZnJvbSBpc2VhcmNoCiAgICAgIDppbml0aWFsIChv ciBpbml0aWFsIChhbmQgaXNlYXJjaC1tb2RlIGlzZWFyY2gtc3RyaW5nKSkKICAgICAgOnByZXZp ZXcgKGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24pKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1rZWVwLWxpbmVzCgooZGVmc3Vic3QgY29uc3VsdC0ta2VlcC1saW5lcy1yZXBsYWNlIChjb250 ZW50ICZvcHRpb25hbCBwb3MpCiAgIlJlcGxhY2UgYnVmZmVyIGNvbnRlbnQgd2l0aCBDT05URU5U IGFuZCBtb3ZlIHBvaW50IHRvIFBPUy4iCiAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBv aW50LW1heCkpCiAgKGluc2VydCBjb250ZW50KQogIChnb3RvLWNoYXIgKG9yIHBvcyAocG9pbnQt bWluKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWtlZXAtbGluZXMtc3RhdGUgKGZpbHRlcikKICAiU3Rh dGUgZnVuY3Rpb24gZm9yIGBjb25zdWx0LWtlZXAtbGluZXMnIHdpdGggRklMVEVSIGZ1bmN0aW9u LiIKICAobGV0ICgobGluZXMpCiAgICAgICAgKGJ1ZmZlci1vcmlnIChjdXJyZW50LWJ1ZmZlcikp CiAgICAgICAgKGZvbnQtbG9jay1vcmlnIGZvbnQtbG9jay1tb2RlKQogICAgICAgIChwb2ludC1v cmlnIChwb2ludCkpCiAgICAgICAgKGNvbnRlbnQtb3JpZyAoYnVmZmVyLXN0cmluZykpCiAgICAg ICAgKGxhc3QtaW5wdXQpKQogICAgKGNvbnN1bHQtLWVhY2gtbGluZSBiZWcgZW5kCiAgICAgIChw dXNoIChidWZmZXItc3Vic3RyaW5nIGJlZyBlbmQpIGxpbmVzKSkKICAgIChzZXRxIGxpbmVzIChu cmV2ZXJzZSBsaW5lcykpCiAgICAobGFtYmRhIChpbnB1dCByZXN0b3JlKQogICAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWZmZXItb3JpZwogICAgICAgIDs7IFJlc3RvcmluZyBjb250ZW50IGFu ZCBwb2ludCBwb3NpdGlvbgogICAgICAgICh3aGVuIChhbmQgcmVzdG9yZSBsYXN0LWlucHV0KQog ICAgICAgICAgOzsgTm8gdW5kbyByZWNvcmRpbmcsIG1vZGlmaWNhdGlvbiBob29rcywgYnVmZmVy IG1vZGlmaWVkLXN0YXR1cwogICAgICAgICAgKHdpdGgtc2lsZW50LW1vZGlmaWNhdGlvbnMgKGNv bnN1bHQtLWtlZXAtbGluZXMtcmVwbGFjZSBjb250ZW50LW9yaWcgcG9pbnQtb3JpZykpKQogICAg ICAgIDs7IENvbW1pdHRpbmcgb3IgbmV3IGlucHV0IHByb3ZpZGVkIC0+IFVwZGF0ZQogICAgICAg ICh3aGVuIChhbmQgaW5wdXQgOzsgSW5wdXQgaGFzIGJlZW4gcG92aWRlZAogICAgICAgICAgICAg ICAgICAgKG9yCiAgICAgICAgICAgICAgICAgICAgOzsgQ29tbWl0dGluZywgYnV0IG5vdCB3aXRo IGVtcHR5IGlucHV0CiAgICAgICAgICAgICAgICAgICAgKGFuZCByZXN0b3JlIChub3QgKHN0cmlu Zy1tYXRjaC1wICJeIT8gPyQiIGlucHV0KSkpCiAgICAgICAgICAgICAgICAgICAgOzsgSW5wdXQg aGFzIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICAobm90IChlcXVhbCBpbnB1dCBsYXN0LWlu cHV0KSkpKQogICAgICAgICAgKGxldCAoKGZpbHRlcmVkLWNvbnRlbnQKICAgICAgICAgICAgICAg ICAoaWYgKHN0cmluZy1tYXRjaC1wICJeIT8gPyQiIGlucHV0KQogICAgICAgICAgICAgICAgICAg ICA7OyBTcGVjaWFsIGNhc2UgdGhlIGVtcHR5IGlucHV0IGZvciBwZXJmb3JtYW5jZS4KICAgICAg ICAgICAgICAgICAgICAgOzsgT3RoZXJ3aXNlIGl0IGNvdWxkIGhhcHBlbiB0aGF0IHRoZSBtaW5p YnVmZmVyIGlzIGVtcHR5LAogICAgICAgICAgICAgICAgICAgICA7OyBidXQgdGhlIGJ1ZmZlciBo YXMgbm90IGJlZW4gdXBkYXRlZC4KICAgICAgICAgICAgICAgICAgICAgY29udGVudC1vcmlnCiAg ICAgICAgICAgICAgICAgICAoaWYgcmVzdG9yZQogICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctam9pbiAoZnVuY2FsbCBmaWx0ZXIgaW5wdXQgbGluZXMpICJcbiIpCiAgICAgICAgICAgICAg ICAgICAgICh3aGlsZS1uby1pbnB1dAogICAgICAgICAgICAgICAgICAgICAgIDs7IEhlYXZ5IGNv bXB1dGF0aW9uIGlzIGludGVycnVwdGlibGUgaWYgKm5vdCogY29tbWl0dGluZyEKICAgICAgICAg ICAgICAgICAgICAgICA7OyBBbGxvY2F0ZSBuZXcgc3RyaW5nIGNhbmRpZGF0ZXMgc2luY2UgdGhl IG1hdGNoaW5nIGZ1bmN0aW9uIG11dGF0ZXMhCiAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zy1qb2luIChmdW5jYWxsIGZpbHRlciBpbnB1dCAobWFwY2FyICMnY29weS1zZXF1ZW5jZSBsaW5l cykpICJcbiIpKSkpKSkKICAgICAgICAgICAgKHdoZW4gKHN0cmluZ3AgZmlsdGVyZWQtY29udGVu dCkKICAgICAgICAgICAgICAod2hlbiBmb250LWxvY2stbW9kZSAoZm9udC1sb2NrLW1vZGUgLTEp KQogICAgICAgICAgICAgIChpZiByZXN0b3JlCiAgICAgICAgICAgICAgICAgIChhdG9taWMtY2hh bmdlLWdyb3VwCiAgICAgICAgICAgICAgICAgICAgOzsgRGlzYWJsZSBtb2RpZmljYXRpb24gaG9v a3MgZm9yIHBlcmZvcm1hbmNlCiAgICAgICAgICAgICAgICAgICAgKGxldCAoKGluaGliaXQtbW9k aWZpY2F0aW9uLWhvb2tzIHQpKQogICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWtlZXAt bGluZXMtcmVwbGFjZSBmaWx0ZXJlZC1jb250ZW50KSkpCiAgICAgICAgICAgICAgICA7OyBObyB1 bmRvIHJlY29yZGluZywgbW9kaWZpY2F0aW9uIGhvb2tzLCBidWZmZXIgbW9kaWZpZWQtc3RhdHVz CiAgICAgICAgICAgICAgICAod2l0aC1zaWxlbnQtbW9kaWZpY2F0aW9ucwogICAgICAgICAgICAg ICAgICAoY29uc3VsdC0ta2VlcC1saW5lcy1yZXBsYWNlIGZpbHRlcmVkLWNvbnRlbnQpCiAgICAg ICAgICAgICAgICAgIChzZXRxIGxhc3QtaW5wdXQgaW5wdXQpKSkpKSkKICAgICAgICA7OyBSZXN0 b3JlIGZvbnQtbG9jawogICAgICAgICh3aGVuIChhbmQgcmVzdG9yZSBmb250LWxvY2stb3JpZyAo bm90IGZvbnQtbG9jay1tb2RlKSkKICAgICAgICAgIChmb250LWxvY2stbW9kZSkpKSkpKQoKKGRl ZnVuIGNvbnN1bHQta2VlcC1saW5lcyAoJm9wdGlvbmFsIGZpbHRlciBpbml0aWFsKQogICJTZWxl Y3QgYSBzdWJzZXQgb2YgdGhlIGxpbmVzIGluIHRoZSBjdXJyZW50IGJ1ZmZlciB3aXRoIGxpdmUg cHJldmlldy4KClRoZSBsaW5lcyBzZWxlY3RlZCBhcmUgdGhvc2UgdGhhdCBtYXRjaCB0aGUgbWlu aWJ1ZmZlciBpbnB1dC4KVGhpcyBjb21tYW5kIG9iZXlzIG5hcnJvd2luZy4KRklMVEVSIGlzIHRo ZSBmaWx0ZXIgZnVuY3Rpb24uCklOSVRJQUwgaXMgdGhlIGluaXRpYWwgaW5wdXQuIgogIDs7IFVz ZSBjb25zdWx0LWxvY2F0aW9uIGNvbXBsZXRpb24gY2F0ZWdvcnkgd2hlbiBmaWx0ZXJpbmcgbGlu ZXMKICAoaW50ZXJhY3RpdmUgKGxpc3QgKGNvbnN1bHQtLWNvbXBsZXRpb24tZmlsdGVyLWRpc3Bh dGNoICdjb25zdWx0LWxvY2F0aW9uICdoaWdobGlnaHQpKSkKICAoY29uc3VsdC0tZm9yYmlkLW1p bmlidWZmZXIpCiAgKGJhcmYtaWYtYnVmZmVyLXJlYWQtb25seSkKICAoY29uc3VsdC0td2l0aC1p bmNyZWFzZWQtZ2MKICAgKGNvbnN1bHQtLWZvbnRpZnktYWxsKQogICAoY29uc3VsdC0tcHJvbXB0 CiAgICAiS2VlcCBsaW5lczogIgogICAgOmluaXRpYWwgaW5pdGlhbAogICAgOmhpc3RvcnkgJ2Nv bnN1bHQtLWtlZXAtbGluZXMtaGlzdG9yeQogICAgOnByZXZpZXcgKGNvbnN1bHQtLWtlZXAtbGlu ZXMtc3RhdGUgZmlsdGVyKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1mb2N1cy1saW5lcwoK KGRlZnVuIGNvbnN1bHQtLWZvY3VzLWxpbmVzLXN0YXRlIChmaWx0ZXIpCiAgIlN0YXRlIGZ1bmN0 aW9uIGZvciBgY29uc3VsdC1mb2N1cy1saW5lcycgd2l0aCBGSUxURVIgZnVuY3Rpb24uIgogIChs ZXQgKChsaW5lcykgKG92ZXJsYXlzKSAobGFzdC1pbnB1dCkpCiAgICAoY29uc3VsdC0tZWFjaC1s aW5lIGJlZyBlbmQKICAgICAgKHB1c2ggKGJ1ZmZlci1zdWJzdHJpbmcgYmVnIGVuZCkgbGluZXMp CiAgICAgIChwdXNoIChtYWtlLW92ZXJsYXkgYmVnICgxKyBlbmQpKSBvdmVybGF5cykpCiAgICAo bGFtYmRhIChpbnB1dCByZXN0b3JlKQogICAgICA7OyBOZXcgaW5wdXQgcHJvdmlkZWQgLT4gVXBk YXRlCiAgICAgICh3aGVuIChhbmQgaW5wdXQgKG5vdCAoZXF1YWwgaW5wdXQgbGFzdC1pbnB1dCkp KQogICAgICAgIChpZiAoc3RyaW5nLW1hdGNoLXAgIl4hPyA/JCIgaW5wdXQpCiAgICAgICAgICAg IDs7IFNwZWNpYWwgY2FzZSB0aGUgZW1wdHkgaW5wdXQgZm9yIHBlcmZvcm1hbmNlLgogICAgICAg ICAgICAocHJvZ24KICAgICAgICAgICAgICAoZG9saXN0IChvdiBvdmVybGF5cykKICAgICAgICAg ICAgICAgIChvdmVybGF5LXB1dCBvdiAnaW52aXNpYmxlIG5pbCkpCiAgICAgICAgICAgICAgKHNl dHEgbGFzdC1pbnB1dCBpbnB1dCkpCiAgICAgICAgICAobGV0KiAoKG5vdCAoc3RyaW5nLXByZWZp eC1wICIhICIgaW5wdXQpKQogICAgICAgICAgICAgICAgIChzdHJpcHBlZCAoc3RyaW5nLXJlbW92 ZS1wcmVmaXggIiEgIiBpbnB1dCkpCiAgICAgICAgICAgICAgICAgOzsgSGVhdnkgY29tcHV0YXRp b24gaXMgaW50ZXJydXB0aWJsZSBpZiAqbm90KiBjb21taXR0aW5nIQogICAgICAgICAgICAgICAg IChodCAoaWYgcmVzdG9yZQogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLXN0cmlu Zy1oYXNoIChmdW5jYWxsIGZpbHRlciBzdHJpcHBlZCBsaW5lcykpCiAgICAgICAgICAgICAgICAg ICAgICAgKHdoaWxlLW5vLWlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3VsdC0t c3RyaW5nLWhhc2ggKGZ1bmNhbGwgZmlsdGVyIHN0cmlwcGVkIGxpbmVzKSkpKSkpCiAgICAgICAg ICAgICh3aGVuIChoYXNoLXRhYmxlLXAgaHQpCiAgICAgICAgICAgICAgKGxldCAoKG92IG92ZXJs YXlzKSAobGkgbGluZXMpKQogICAgICAgICAgICAgICAgKHdoaWxlIG92CiAgICAgICAgICAgICAg ICAgIChvdmVybGF5LXB1dCAoY2FyIG92KSAnaW52aXNpYmxlIChlcSBub3QgKGdldGhhc2ggKGNh ciBsaSkgaHQpKSkKICAgICAgICAgICAgICAgICAgKHNldHEgbGkgKGNkciBsaSkgb3YgKGNkciBv dikpKSkKICAgICAgICAgICAgICAoc2V0cSBsYXN0LWlucHV0IGlucHV0KSkpKSkKICAgICAgOzsg U3VjZXNzZnVsbHkgdGVybWluYXRlZCAtPiBSZW1lbWJlciBpbnZpc2libGUgb3ZlcmxheXMKICAg ICAgKHdoZW4gKGFuZCBpbnB1dCByZXN0b3JlKQogICAgICAgIChkb2xpc3QgKG92IG92ZXJsYXlz KQogICAgICAgICAgKGlmIChvdmVybGF5LWdldCBvdiAnaW52aXNpYmxlKQogICAgICAgICAgICAg IChwdXNoIG92IGNvbnN1bHQtLWZvY3VzLWxpbmVzLW92ZXJsYXlzKQogICAgICAgICAgICAoZGVs ZXRlLW92ZXJsYXkgb3YpKSkKICAgICAgICAoc2V0cSBvdmVybGF5cyBuaWwpKQogICAgICA7OyBX aGVuIHRlcm1pbmF0aW5nIC0+IERlc3Ryb3kgcmVtYWluaW5nIG92ZXJsYXlzCiAgICAgICh3aGVu IHJlc3RvcmUKICAgICAgICAobWFwYyAjJ2RlbGV0ZS1vdmVybGF5IG92ZXJsYXlzKSkpKSkKCihk ZWZ1biBjb25zdWx0LWZvY3VzLWxpbmVzICgmb3B0aW9uYWwgc2hvdyBmaWx0ZXIgaW5pdGlhbCkK ICAiSGlkZSBvciBzaG93IGxpbmVzIGFjY29yZGluZyB0byBGSUxURVIgZnVuY3Rpb24uCgpPcHRp b25hbGx5IElOSVRJQUwgaW5wdXQgY2FuIGJlIHByb3ZpZGVkLgpTSE9XIG11c3QgYmUgdCBpbiBv cmRlciB0byBzaG93IHRoZSBoaWRkZW4gbGluZXMuIgogIChpbnRlcmFjdGl2ZQogICA7OyBVc2Ug Y29uc3VsdC1sb2NhdGlvbiBjb21wbGV0aW9uIGNhdGVnb3J5IHdoZW4gZmlsdGVyaW5nIGxpbmVz CiAgIChsaXN0IGN1cnJlbnQtcHJlZml4LWFyZyAoY29uc3VsdC0tY29tcGxldGlvbi1maWx0ZXIg J2NvbnN1bHQtbG9jYXRpb24gbmlsKSkpCiAgKGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQog IChpZiBzaG93CiAgICAgIChwcm9nbgogICAgICAgIChtYXBjICMnZGVsZXRlLW92ZXJsYXkgY29u c3VsdC0tZm9jdXMtbGluZXMtb3ZlcmxheXMpCiAgICAgICAgKHNldHEgY29uc3VsdC0tZm9jdXMt bGluZXMtb3ZlcmxheXMgbmlsKSkKICAgIChjb25zdWx0LS13aXRoLWluY3JlYXNlZC1nYwogICAg IChjb25zdWx0LS1mb250aWZ5LWFsbCkKICAgICAoY29uc3VsdC0tcHJvbXB0CiAgICAgICJGb2N1 cyBvbiBsaW5lczogIgogICAgICA6aW5pdGlhbCBpbml0aWFsCiAgICAgIDpoaXN0b3J5ICdjb25z dWx0LS1rZWVwLWxpbmVzLWhpc3RvcnkKICAgICAgOnByZXZpZXcgKGNvbnN1bHQtLWZvY3VzLWxp bmVzLXN0YXRlIGZpbHRlcikpKSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0LWdvdG8tbGluZQoK Ozs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtZ290by1saW5lICgpCiAgIlJlYWQgbGluZSBu dW1iZXIgYW5kIGp1bXAgdG8gdGhlIGxpbmUgd2l0aCBwcmV2aWV3LgoKVGhlIGNvbW1hbmQgcmVz cGVjdHMgbmFycm93aW5nIGFuZCB0aGUgc2V0dGluZ3MKYGNvbnN1bHQtZ290by1saW5lLW51bWJl cnMnIGFuZCBgY29uc3VsdC1saW5lLW51bWJlcnMtd2lkZW4nLiIKICAoaW50ZXJhY3RpdmUpCiAg KGNvbnN1bHQtLWZvcmJpZC1taW5pYnVmZmVyKQogIChjb25zdWx0LS1sb2NhbC1sZXQgKChkaXNw bGF5LWxpbmUtbnVtYmVycyBjb25zdWx0LWdvdG8tbGluZS1udW1iZXJzKQogICAgICAgICAgICAg ICAgICAgICAgIChkaXNwbGF5LWxpbmUtbnVtYmVycy13aWRlbiBjb25zdWx0LWxpbmUtbnVtYmVy cy13aWRlbikpCiAgICAod2hpbGUgKGxldCAoKHJldCAoY29uc3VsdC0tcHJvbXB0CiAgICAgICAg ICAgICAgICAgICAgICAgIkdvIHRvIGxpbmU6ICIKICAgICAgICAgICAgICAgICAgICAgICA6cHJl dmlldyAoY29uc3VsdC0tcHJldmlldy1wb3NpdGlvbikKICAgICAgICAgICAgICAgICAgICAgICA6 dHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoXyBzdHIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAod2hlbi1sZXQgKChsaW5lIChhbmQgc3RyCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaC1wICJeW1s6ZGln aXQ6XV0rJCIgc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzdHJpbmctdG8tbnVtYmVyIHN0cikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocG9zIChhbmQgbGluZSAoY29uc3VsdC0tbGluZS1wb3NpdGlvbiBsaW5lKSkpKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChjb25zdWx0LS1pbi1yYW5nZS1wIHBvcykg cG9zKSkpKSkpCiAgICAgICAgICAgICAoaWYtbGV0IChwb3MgKGNhciByZXQpKQogICAgICAgICAg ICAgICAgIChjb25zdWx0LS1qdW1wIHBvcykKICAgICAgICAgICAgICAgKG1pbmlidWZmZXItbWVz c2FnZSAoaWYgKHN0cmluZy1tYXRjaC1wICJeW1s6ZGlnaXQ6XV0rJCIgKGNkciByZXQpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGluZSBudW1iZXIgb3V0IG9mIHJh bmdlLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgZW50ZXIg YSBudW1iZXIuIikpCiAgICAgICAgICAgICAgIHQpKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1yZWNlbnQtZmlsZQoKKGRlZnVuIGNvbnN1bHQtLXJlY2VudC1maWxlLXJlYWQgKCkKICAiUmVh ZCByZWNlbnQgZmlsZSB2aWEgYGNvbXBsZXRpbmctcmVhZCcuIgogIChjb25zdWx0LS1yZWFkCiAg ICJGaW5kIHJlY2VudCBmaWxlOiAiCiAgIChvciAobWFwY2FyICMnYWJicmV2aWF0ZS1maWxlLW5h bWUgcmVjZW50Zi1saXN0KQogICAgICAgKHVzZXItZXJyb3IgIk5vIHJlY2VudCBmaWxlcyIpKQog ICA6c29ydCBuaWwKICAgOnJlcXVpcmUtbWF0Y2ggdAogICA6Y2F0ZWdvcnkgJ2ZpbGUKICAgOmhp c3RvcnkgJ2ZpbGUtbmFtZS1oaXN0b3J5KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0 LXJlY2VudC1maWxlICgpCiAgIkZpbmQgcmVjZW50IHVzaW5nIGBjb21wbGV0aW5nLXJlYWQnLiIK ICAoaW50ZXJhY3RpdmUpCiAgKGZpbmQtZmlsZSAoY29uc3VsdC0tcmVjZW50LWZpbGUtcmVhZCkp KQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVjZW50LWZpbGUtb3RoZXItZnJhbWUg KCkKICAiRmluZCByZWNlbnQgdXNpbmcgYGNvbXBsZXRpbmctcmVhZCcuIgogIChpbnRlcmFjdGl2 ZSkKICAoZmluZC1maWxlLW90aGVyLWZyYW1lIChjb25zdWx0LS1yZWNlbnQtZmlsZS1yZWFkKSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWNlbnQtZmlsZS1vdGhlci13aW5kb3cg KCkKICAiRmluZCByZWNlbnQgdXNpbmcgYGNvbXBsZXRpbmctcmVhZCcuIgogIChpbnRlcmFjdGl2 ZSkKICAoZmluZC1maWxlLW90aGVyLXdpbmRvdyAoY29uc3VsdC0tcmVjZW50LWZpbGUtcmVhZCkp KQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1maWxlLWV4dGVybmFsbHkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBjb25zdWx0LWZpbGUtZXh0ZXJuYWxseSAoZmlsZSkKICAiT3BlbiBGSUxFIGV4dGVy bmFsbHkgdXNpbmcgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gb2YgdGhlIHN5c3RlbS4iCiAgKGlu dGVyYWN0aXZlICJmT3BlbiBleHRlcm5hbGx5OiAiKQogIChpZiAoYW5kIChlcSBzeXN0ZW0tdHlw ZSAnd2luZG93cy1udCkKICAgICAgICAgICAoZmJvdW5kcCAndzMyLXNoZWxsLWV4ZWN1dGUpKQog ICAgICAodzMyLXNoZWxsLWV4ZWN1dGUgIm9wZW4iIGZpbGUpCiAgICAoY2FsbC1wcm9jZXNzIChw Y2FzZSBzeXN0ZW0tdHlwZQogICAgICAgICAgICAgICAgICAgICgnZGFyd2luICJvcGVuIikKICAg ICAgICAgICAgICAgICAgICAoJ2N5Z3dpbiAiY3lnc3RhcnQiKQogICAgICAgICAgICAgICAgICAg IChfICJ4ZGctb3BlbiIpKQogICAgICAgICAgICAgICAgICBuaWwgMCBuaWwKICAgICAgICAgICAg ICAgICAgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSkpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQt Y29tcGxldGlvbi1pbi1yZWdpb24KCjs7IFVzZSBtaW5pYnVmZmVyIGNvbXBsZXRpb24gYXMgdGhl IFVJIGZvciBjb21wbGV0aW9uLWF0LXBvaW50Cjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0 LWNvbXBsZXRpb24taW4tcmVnaW9uIChzdGFydCBlbmQgY29sbGVjdGlvbiAmb3B0aW9uYWwgcHJl ZGljYXRlKQogICJQcm9tcHQgZm9yIGNvbXBsZXRpb24gb2YgcmVnaW9uIGluIHRoZSBtaW5pYnVm ZmVyIGlmIG5vbi11bmlxdWUuCgpUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggNCBhcmd1bWVu dHM6IFNUQVJUIEVORCBDT0xMRUNUSU9OIFBSRURJQ0FURS4KVGhlIGFyZ3VtZW50cyBhbmQgZXhw ZWN0ZWQgcmV0dXJuIHZhbHVlIGFyZSBhcyBzcGVjaWZpZWQgZm9yCmBjb21wbGV0aW9uLWluLXJl Z2lvbicuIFVzZSBhcyBhIHZhbHVlIGZvciBgY29tcGxldGlvbi1pbi1yZWdpb24tZnVuY3Rpb24n LiIKICAobGV0KiAoKGluaXRpYWwgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBzdGFy dCBlbmQpKQogICAgICAgICAobGltaXQgKGNhciAoY29tcGxldGlvbi1ib3VuZGFyaWVzIGluaXRp YWwgY29sbGVjdGlvbiBwcmVkaWNhdGUgIiIpKSkKICAgICAgICAgKG1ldGFkYXRhIChjb21wbGV0 aW9uLW1ldGFkYXRhIGluaXRpYWwgY29sbGVjdGlvbiBwcmVkaWNhdGUpKQogICAgICAgICAoY2F0 ZWdvcnkgKGNvbXBsZXRpb24tbWV0YWRhdGEtZ2V0IG1ldGFkYXRhICdjYXRlZ29yeSkpCiAgICAg ICAgIChhbGwgKGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25zIGluaXRpYWwgY29sbGVjdGlvbiBw cmVkaWNhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbmd0 aCBpbml0aWFsKSkpCiAgICAgICAgIChleGl0LXN0YXR1cyAnZmluaXNoZWQpCiAgICAgICAgIChj b21wbGV0aW9uCiAgICAgICAgICAoY29uZAogICAgICAgICAgICgoYXRvbSBhbGwpIG5pbCkKICAg ICAgICAgICAoKGFuZCAoY29uc3AgYWxsKSAoYXRvbSAoY2RyIGFsbCkpKQogICAgICAgICAgICAo c2V0cSBleGl0LXN0YXR1cyAnc29sZSkKICAgICAgICAgICAgKGNvbmNhdCAoc3Vic3RyaW5nIGlu aXRpYWwgMCBsaW1pdCkgKGNhciBhbGwpKSkKICAgICAgICAgICAodCAobGV0ICgoZW5hYmxlLXJl Y3Vyc2l2ZS1taW5pYnVmZmVycyB0KSkKICAgICAgICAgICAgICAgIChpZiAoZXEgY2F0ZWdvcnkg J2ZpbGUpCiAgICAgICAgICAgICAgICAgICAgOzsgV2hlbiBjb21wbGV0aW5nIGZpbGVzIHdpdGgg Y29uc3VsdC1jb21wbGV0aW9uLWluLXJlZ2lvbiwgdGhlIHBvaW50IGluIHRoZQogICAgICAgICAg ICAgICAgICAgIDs7IG1pbmlidWZmZXIgZ2V0cyBwbGFjZWQgaW5pdGlhbGx5IGF0IHRoZSBiZWdp bm5pbmcgb2YgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQuCiAgICAgICAgICAgICAgICAgICAgOzsg QnkgdXNpbmcgdGhlIGZpbGVuYW1lIGFzIERJUiBhcmd1bWVudCAoc2Vjb25kIGFyZ3VtZW50IG9m IHJlYWQtZmlsZS1uYW1lKSwgaXQKICAgICAgICAgICAgICAgICAgICA7OyBzdGFydHMgYXQgdGhl IGVuZCBvZiBtaW5pYnVmZmVyIGNvbnRlbnRzLCBhcyBmb3Igb3RoZXIgdHlwZXMgb2YgY29tcGxl dGlvbi4KICAgICAgICAgICAgICAgICAgICA7OyBIb3dldmVyIHRoaXMgaXMgdW5kZWZpbmVkIGJl aGF2aW9yIHNpbmNlIGluaXRpYWwgZG9lcyBub3Qgb25seSBjb250YWluIHRoZQogICAgICAgICAg ICAgICAgICAgIDs7IGRpcmVjdG9yeSwgYnV0IGFsc28gdGhlIGZpbGVuYW1lLgogICAgICAgICAg ICAgICAgICAgIChyZWFkLWZpbGUtbmFtZQogICAgICAgICAgICAgICAgICAgICAiQ29tcGxldGlv bjogIiBpbml0aWFsIGluaXRpYWwgdCBuaWwgcHJlZGljYXRlKQogICAgICAgICAgICAgICAgICAo Y29tcGxldGluZy1yZWFkCiAgICAgICAgICAgICAgICAgICAiQ29tcGxldGlvbjogIiBjb2xsZWN0 aW9uIHByZWRpY2F0ZSB0IGluaXRpYWwpKSkpKSkpCiAgICAoaWYgKG51bGwgY29tcGxldGlvbikK ICAgICAgICAocHJvZ24gKG1lc3NhZ2UgIk5vIGNvbXBsZXRpb24iKSBuaWwpCiAgICAgIChkZWxl dGUtcmVnaW9uIHN0YXJ0IGVuZCkKICAgICAgKGluc2VydCAoc3Vic3RyaW5nLW5vLXByb3BlcnRp ZXMgY29tcGxldGlvbikpCiAgICAgICh3aGVuLWxldCAoZXhpdCAocGxpc3QtZ2V0IGNvbXBsZXRp b24tZXh0cmEtcHJvcGVydGllcyA6ZXhpdC1mdW5jdGlvbikpCiAgICAgICAgKGZ1bmNhbGwgZXhp dCBjb21wbGV0aW9uIGV4aXQtc3RhdHVzKSkKICAgICAgdCkpKQoKOzs7OzsgQ29tbWFuZDogY29u c3VsdC1tb2RlLWNvbW1hbmQKCihkZWZ1biBjb25zdWx0LS1tb2RlLW5hbWUgKG1vZGUpCiAgIlJl dHVybiBuYW1lIHBhcnQgb2YgTU9ERS4iCiAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwogICAi Z2xvYmFsLVxcKC4qXFwpLW1vZGUiICJcXDEiCiAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcK ICAgICJcXCgtZ2xvYmFsXFwpPy1tb2RlJCIgIiIKICAgIChpZiAoZXEgbW9kZSAnYy1tb2RlKQog ICAgICAgICJjYyIKICAgICAgKHN5bWJvbC1uYW1lIG1vZGUpKQogICAgJ2ZpeGVkY2FzZSkKICAg J2ZpeGVkY2FzZSkpCgooZGVmdW4gY29uc3VsdC0tbW9kZS1jb21tYW5kLWNhbmRpZGF0ZXMgKG1v ZGVzKQogICJFeHRyYWN0IGNvbW1hbmRzIGZyb20gTU9ERVMuCgpUaGUgbGlzdCBvZiBmZWF0dXJl cyBpcyBzZWFyY2hlZCBmb3IgZmlsZXMgYmVsb25naW5nIHRvIHRoZSBtb2Rlcy4KRnJvbSB0aGVz ZSBmaWxlcywgdGhlIGNvbW1hbmRzIGFyZSBleHRyYWN0ZWQuIgogIChsZXQqICgoY29tbWFuZC1m aWx0ZXIgKGNvbnN1bHQtLXJlZ2V4cC1maWx0ZXIgKHNlcS1maWx0ZXIgIydzdHJpbmdwIGNvbnN1 bHQtbW9kZS1jb21tYW5kLWZpbHRlcikpKQogICAgICAgICAoZmVhdHVyZS1maWx0ZXIgKHNlcS1m aWx0ZXIgIydzeW1ib2xwIGNvbnN1bHQtbW9kZS1jb21tYW5kLWZpbHRlcikpCiAgICAgICAgICht aW5vci1oYXNoIChjb25zdWx0LS1zdHJpbmctaGFzaCBtaW5vci1tb2RlLWxpc3QpKQogICAgICAg ICAobWlub3ItbG9jYWwtbW9kZXMgKHNlcS1maWx0ZXIgKGxhbWJkYSAobSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoZ2V0aGFzaCBtIG1pbm9yLWhhc2gp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLXZh cmlhYmxlLWlmLXNldC1wIG0pKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1vZGVzKSkKICAgICAgICAgKG1pbm9yLWdsb2JhbC1tb2RlcyAoc2VxLWZpbHRlciAobGFt YmRhIChtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAo Z2V0aGFzaCBtIG1pbm9yLWhhc2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChub3QgKGxvY2FsLXZhcmlhYmxlLWlmLXNldC1wIG0pKSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXMpKQogICAgICAgICAobWFqb3It bW9kZXMgKHNlcS1yZW1vdmUgKGxhbWJkYSAobSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGdldGhhc2ggbSBtaW5vci1oYXNoKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1vZGVzKSkKICAgICAgICAgKG1ham9yLXBhdGhzLWhhc2ggKGNvbnN1bHQtLXN0 cmluZy1oYXNoIChtYXBjYXIgIydzeW1ib2wtZmlsZSBtYWpvci1tb2RlcykpKQogICAgICAgICAo bWlub3ItbG9jYWwtcGF0aHMtaGFzaCAoY29uc3VsdC0tc3RyaW5nLWhhc2ggKG1hcGNhciAjJ3N5 bWJvbC1maWxlIG1pbm9yLWxvY2FsLW1vZGVzKSkpCiAgICAgICAgIChtaW5vci1nbG9iYWwtcGF0 aHMtaGFzaCAoY29uc3VsdC0tc3RyaW5nLWhhc2ggKG1hcGNhciAjJ3N5bWJvbC1maWxlIG1pbm9y LWdsb2JhbC1tb2RlcykpKQogICAgICAgICAobWFqb3ItbmFtZS1yZWdleHAgKHJlZ2V4cC1vcHQg KG1hcGNhciAjJ2NvbnN1bHQtLW1vZGUtbmFtZSBtYWpvci1tb2RlcykpKQogICAgICAgICAobWlu b3ItbG9jYWwtbmFtZS1yZWdleHAgKHJlZ2V4cC1vcHQgKG1hcGNhciAjJ2NvbnN1bHQtLW1vZGUt bmFtZSBtaW5vci1sb2NhbC1tb2RlcykpKQogICAgICAgICAobWlub3ItZ2xvYmFsLW5hbWUtcmVn ZXhwIChyZWdleHAtb3B0IChtYXBjYXIgIydjb25zdWx0LS1tb2RlLW5hbWUgbWlub3ItZ2xvYmFs LW1vZGVzKSkpCiAgICAgICAgIChjb21tYW5kcykpCiAgICAoZG9saXN0IChmZWF0dXJlIGxvYWQt aGlzdG9yeSBjb21tYW5kcykKICAgICAgKHdoZW4tbGV0IChuYW1lIChhbGlzdC1nZXQgJ3Byb3Zp ZGUgZmVhdHVyZSkpCiAgICAgICAgKGxldCogKChwYXRoIChjYXIgZmVhdHVyZSkpCiAgICAgICAg ICAgICAgIChmaWxlIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IHBhdGgpKQogICAgICAgICAgICAg ICAoa2V5IChjb25kCiAgICAgICAgICAgICAgICAgICAgICgobWVtcSBuYW1lIGZlYXR1cmUtZmls dGVyKSBuaWwpCiAgICAgICAgICAgICAgICAgICAgICgob3IgKGdldGhhc2ggcGF0aCBtYWpvci1w YXRocy1oYXNoKQogICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2gtcCBtYWpv ci1uYW1lLXJlZ2V4cCBmaWxlKSkKICAgICAgICAgICAgICAgICAgICAgID9tKQogICAgICAgICAg ICAgICAgICAgICAoKG9yIChnZXRoYXNoIHBhdGggbWlub3ItbG9jYWwtcGF0aHMtaGFzaCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgbWlub3ItbG9jYWwtbmFtZS1y ZWdleHAgZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgICA/bCkKICAgICAgICAgICAgICAgICAg ICAgKChvciAoZ2V0aGFzaCBwYXRoIG1pbm9yLWdsb2JhbC1wYXRocy1oYXNoKQogICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2gtcCBtaW5vci1nbG9iYWwtbmFtZS1yZWdleHAg ZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgICA/ZykpKSkKICAgICAgICAgICh3aGVuIGtleQog ICAgICAgICAgICAoZG9saXN0IChjbWQgKGNkciBmZWF0dXJlKSkKICAgICAgICAgICAgICAod2hl biAoYW5kIChjb25zcCBjbWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGNhciBjbWQp ICdkZWZ1bikKICAgICAgICAgICAgICAgICAgICAgICAgIChjb21tYW5kcCAoY2RyIGNtZCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAobm90IChzdHJpbmctbWF0Y2gtcCBjb21tYW5kLWZpbHRl ciAoc3ltYm9sLW5hbWUgKGNkciBjbWQpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAobm90 IChnZXQgKGNkciBjbWQpICdieXRlLW9ic29sZXRlLWluZm8pKSkKICAgICAgICAgICAgICAgIChw dXNoIChjb25zIChjZHIgY21kKSBrZXkpIGNvbW1hbmRzKSkpKSkpKSkpCgo7OzsjIyNhdXRvbG9h ZAooZGVmdW4gY29uc3VsdC1tb2RlLWNvbW1hbmQgKCZyZXN0IG1vZGVzKQogICJSdW4gYSBjb21t YW5kIGZyb20gYW55IG9mIHRoZSBnaXZlbiBNT0RFUy4KCklmIG5vIE1PREVTIGFyZSBzcGVjaWZp ZWQsIHVzZSBjdXJyZW50bHkgYWN0aXZlIG1ham9yIGFuZCBtaW5vciBtb2Rlcy4iCiAgKGludGVy YWN0aXZlKQogICh1bmxlc3MgbW9kZXMKICAgIChzZXRxIG1vZGVzIChjb25zIG1ham9yLW1vZGUK ICAgICAgICAgICAgICAgICAgICAgIChzZXEtZmlsdGVyIChsYW1iZGEgKG0pCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGJvdW5kcCBtKSAoc3ltYm9sLXZhbHVlIG0p KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yLW1vZGUtbGlzdCkpKSkK ICAoY29tbWFuZC1leGVjdXRlCiAgIChpbnRlcm4KICAgIChjb25zdWx0LS1yZWFkCiAgICAgIk1v ZGUgY29tbWFuZDogIgogICAgIChjb25zdWx0LS1tb2RlLWNvbW1hbmQtY2FuZGlkYXRlcyBtb2Rl cykKICAgICA6cHJlZGljYXRlCiAgICAgKGxhbWJkYSAoY2FuZCkKICAgICAgIChpZiBjb25zdWx0 LS1uYXJyb3cKICAgICAgICAgICAoPSAoY2RyIGNhbmQpIGNvbnN1bHQtLW5hcnJvdykKICAgICAg ICAgKC89IChjZHIgY2FuZCkgP2cpKSkKICAgICA6bmFycm93ICcoKD9tIC4gIk1ham9yIikKICAg ICAgICAgICAgICAgKD9sIC4gIkxvY2FsIE1pbm9yIikKICAgICAgICAgICAgICAgKD9nIC4gIkds b2JhbCBNaW5vciIpKQogICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgICA6aGlzdG9yeSAnY29uc3Vs dC0tbW9kZS1jb21tYW5kLWhpc3RvcnkKICAgICA6Y2F0ZWdvcnkgJ2NvbW1hbmQpKSkpCgo7Ozs7 OyBDb21tYW5kOiBjb25zdWx0LXlhbmsKCihkZWZ1biBjb25zdWx0LS15YW5rLXJlYWQgKCkKICAi T3BlbiBraWxsIHJpbmcgbWVudSBhbmQgcmV0dXJuIHNlbGVjdGVkIHRleHQuIgogIChjb25zdWx0 LS1yZWFkCiAgICJZYW5rIHRleHQ6ICIKICAgKGNvbnN1bHQtLXJlbW92ZS1kdXBzIGtpbGwtcmlu ZykKICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhpc3RvcnkKICAgOnNvcnQgbmlsCiAgIDpjYXRl Z29yeSAnY29uc3VsdC15YW5rCiAgIDpyZXF1aXJlLW1hdGNoIHQKICAgOnByZXZpZXcKICAgOzsg SWYgcHJldmlvdXMgY29tbWFuZCBpcyB5YW5rLCBoaWRlIHByZXZpb3VzbHkgeWFua2VkIHRleHQK ICAgKGxldCogKChvdikgKHB0IChwb2ludCkpIChtayAob3IgKGFuZCAoZXEgbGFzdC1jb21tYW5k ICd5YW5rKSAobWFyayB0KSkgcHQpKSkKICAgICAobGFtYmRhIChjYW5kIHJlc3RvcmUpCiAgICAg ICAoaWYgcmVzdG9yZQogICAgICAgICAgICh3aGVuIG92IChkZWxldGUtb3ZlcmxheSBvdikpCiAg ICAgICAgICh1bmxlc3Mgb3YgKHNldHEgb3YgKGNvbnN1bHQtLW92ZXJsYXkgKG1pbiBwdCBtaykg KG1heCBwdCBtaykgJ2ludmlzaWJsZSB0KSkpCiAgICAgICAgIDs7IFVzZSBgYWRkLWZhY2UtdGV4 dC1wcm9wZXJ0eScgb24gYSBjb3B5IG9mICJjYW5kIGluIG9yZGVyIHRvIG1lcmdlIGZhY2UgcHJv cGVydGllcwogICAgICAgICAoc2V0cSBjYW5kIChjb3B5LXNlcXVlbmNlIGNhbmQpKQogICAgICAg ICAoYWRkLWZhY2UtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggY2FuZCkgJ2NvbnN1bHQtcHJldmll dy15YW5rIHQgY2FuZCkKICAgICAgICAgOzsgVXNlIHRoZSBgYmVmb3JlLXN0cmluZycgcHJvcGVy dHkgc2luY2UgdGhlIG92ZXJsYXkgbWlnaHQgYmUgZW1wdHkuCiAgICAgICAgIChvdmVybGF5LXB1 dCBvdiAnYmVmb3JlLXN0cmluZyBjYW5kKSkpKSkpCgo7OyBJbnNlcnQgc2VsZWN0ZWQgdGV4dC4K OzsgQWRhcHRlZCBmcm9tIHRoZSBFbWFjcyB5YW5rIGZ1bmN0aW9uLgo7OzsjIyNhdXRvbG9hZAoo ZGVmdW4gY29uc3VsdC15YW5rICgpCiAgIlNlbGVjdCB0ZXh0IGZyb20gdGhlIGtpbGwgcmluZyBh bmQgaW5zZXJ0IGl0LiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKHRleHQgKGNvbnN1bHQtLXlh bmstcmVhZCkpKQogICAgKHNldHEgeWFuay13aW5kb3ctc3RhcnQgKHdpbmRvdy1zdGFydCkpCiAg ICAocHVzaC1tYXJrKQogICAgKGluc2VydC1mb3IteWFuayB0ZXh0KQogICAgKHNldHEgdGhpcy1j b21tYW5kICd5YW5rKQogICAgbmlsKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXlh bmstcG9wICgmb3B0aW9uYWwgYXJnKQogICJJZiB0aGVyZSBpcyBhIHJlY2VudCB5YW5rIGFjdCBs aWtlIGB5YW5rLXBvcCcuCgpPdGhlcndpc2Ugc2VsZWN0IHRleHQgZnJvbSB0aGUga2lsbCByaW5n IGFuZCBpbnNlcnQgaXQuClNlZSBgeWFuay1wb3AnIGZvciB0aGUgbWVhbmluZyBvZiBBUkcuIgog IChpbnRlcmFjdGl2ZSAiKnAiKQogIChpZiAoZXEgbGFzdC1jb21tYW5kICd5YW5rKQogICAgICAo eWFuay1wb3AgKG9yIGFyZyAxKSkKICAgIChjb25zdWx0LXlhbmspKSkKCjs7IFJlcGxhY2UganVz dC15YW5rZWQgdGV4dCB3aXRoIHNlbGVjdGVkIHRleHQuCjs7IEFkYXB0ZWQgZnJvbSB0aGUgRW1h Y3MgeWFuay1wb3AgZnVuY3Rpb24uCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXlhbmst cmVwbGFjZSAoKQogICJTZWxlY3QgdGV4dCBmcm9tIHRoZSBraWxsIHJpbmcuCgpJZiB0aGVyZSB3 YXMgbm8gcmVjZW50IHlhbmssIGluc2VydCB0aGUgdGV4dC4KT3RoZXJ3aXNlIHJlcGxhY2UgdGhl IGp1c3QteWFua2VkIHRleHQgd2l0aCB0aGUgc2VsZWN0ZWQgdGV4dC4iCiAgKGludGVyYWN0aXZl KQogIChpZiAobm90IChlcSBsYXN0LWNvbW1hbmQgJ3lhbmspKQogICAgICAoY29uc3VsdC15YW5r KQogICAgKGxldCAoKHRleHQgKGNvbnN1bHQtLXlhbmstcmVhZCkpCiAgICAgICAgICAoaW5oaWJp dC1yZWFkLW9ubHkgdCkKICAgICAgICAgIChwdCAocG9pbnQpKQogICAgICAgICAgKG1rIChtYXJr IHQpKSkKICAgICAgKHNldHEgdGhpcy1jb21tYW5kICd5YW5rKQogICAgICAoZnVuY2FsbCAob3Ig eWFuay11bmRvLWZ1bmN0aW9uICdkZWxldGUtcmVnaW9uKSAobWluIHB0IG1rKSAobWF4IHB0IG1r KSkKICAgICAgKHNldHEgeWFuay11bmRvLWZ1bmN0aW9uIG5pbCkKICAgICAgKHNldC1tYXJrZXIg KG1hcmstbWFya2VyKSBwdCAoY3VycmVudC1idWZmZXIpKQogICAgICAoaW5zZXJ0LWZvci15YW5r IHRleHQpCiAgICAgIChzZXQtd2luZG93LXN0YXJ0IChzZWxlY3RlZC13aW5kb3cpIHlhbmstd2lu ZG93LXN0YXJ0IHQpCiAgICAgIChpZiAoPCBwdCBtaykKICAgICAgICAgIChnb3RvLWNoYXIgKHBy b2cxIChtYXJrIHQpCiAgICAgICAgICAgICAgICAgICAgICAgKHNldC1tYXJrZXIgKG1hcmstbWFy a2VyKSAocG9pbnQpIChjdXJyZW50LWJ1ZmZlcikpKSkpKSkKICBuaWwpCgo7Ozs7OyBDb21tYW5k OiBjb25zdWx0LXJlZ2lzdGVyCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1yZWdpc3Rl ci13aW5kb3cgKGJ1ZmZlciAmb3B0aW9uYWwgc2hvdy1lbXB0eSkKICAiRW5oYW5jZWQgZHJvcC1p biByZXBsYWNlbWVudCBmb3IgYHJlZ2lzdGVyLXByZXZpZXcnLgoKQlVGRkVSIGlzIHRoZSB3aW5k b3cgYnVmZmVyLgpTSE9XLUVNUFRZIG11c3QgYmUgdCBpZiB0aGUgd2luZG93IHNob3VsZCBiZSBz aG93biBmb3IgYW4gZW1wdHkgcmVnaXN0ZXIgbGlzdC4iCiAgKGxldCAoKHJlZ3MgKHNlcS1maWx0 ZXIgIydjZHIgcmVnaXN0ZXItYWxpc3QpKSkKICAgICh3aGVuIChvciBzaG93LWVtcHR5IHJlZ3Mp CiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyLXdpbmRvdyBidWZmZXIKICAgICAgICAgIChjb25z ICdkaXNwbGF5LWJ1ZmZlci1iZWxvdy1zZWxlY3RlZAogICAgICAgICAgICAgICAgJygod2luZG93 LWhlaWdodCAuIGZpdC13aW5kb3ctdG8tYnVmZmVyKQoJICAgICAgICAgIChwcmVzZXJ2ZS1zaXpl IC4gKG5pbCAuIHQpKSkpCiAgICAgICAgICBuaWwKICAgICAgICAoc2V0cS1sb2NhbCBjdXJzb3It aW4tbm9uLXNlbGVjdGVkLXdpbmRvd3MgbmlsKQogICAgICAgIChzZXRxLWxvY2FsIG1vZGUtbGlu ZS1mb3JtYXQgbmlsKQogICAgICAgIChzZXRxLWxvY2FsIHdpbmRvdy1taW4taGVpZ2h0IDEpCiAg ICAgICAgKHNlcS1kby1pbmRleGVkCiAgICAgICAgIChsYW1iZGEgKHJlZyBpZHgpCiAgICAgICAg ICAgKGxldCAoKGJlZyAocG9pbnQpKSkKICAgICAgICAgICAgIChpbnNlcnQgKGZ1bmNhbGwgcmVn aXN0ZXItcHJldmlldy1mdW5jdGlvbiByZWcpKQogICAgICAgICAgICAgKHdoZW4gKC89IDAgKCUg aWR4IDIpKQogICAgICAgICAgICAgICAoY29uc3VsdC0tb3ZlcmxheSBiZWcgKHBvaW50KSAnZmFj ZSAnY29uc3VsdC16ZWJyYSkpKSkKICAgICAgICAgKHNlcS1zb3J0ICMnY2FyLWxlc3MtdGhhbi1j YXIgcmVncykpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0ZXItZm9y bWF0IChyZWcpCiAgIkVuaGFuY2VkIHByZXZpZXcgb2YgcmVnaXN0ZXIgUkVHLgoKVGhpcyBmdW5j dGlvbiBjYW4gYmUgdXNlZCBhcyBgcmVnaXN0ZXItcHJldmlldy1mdW5jdGlvbicuIgogIChhcHBs eSAjJ2NvbmNhdAogICAgICAgICAobWFwY2FyIChsYW1iZGEgKHMpIChjb25jYXQgKHRydW5jYXRl LXN0cmluZy10by13aWR0aCBzIDEwMCAwIG5pbCAi4oCmIikgIlxuIikpCiAgICAgICAgICAgICAg ICAgKHNwbGl0LXN0cmluZyAoY29uc3VsdC0tcmVnaXN0ZXItZm9ybWF0IHJlZykgIlxuIikpKSkK CihkZWZ1biBjb25zdWx0LS1yZWdpc3Rlci1mb3JtYXQgKHJlZykKICAiRm9ybWF0IHJlZ2lzdGVy IFJFRyBmb3IgcHJldmlldy4iCiAgKHBjYXNlLWxldCAoKGAoLGtleSAuICx2YWwpIHJlZykpCiAg ICAobGV0KiAoKGtleS1zdHIgKHNpbmdsZS1rZXktZGVzY3JpcHRpb24ga2V5KSkKICAgICAgICAg ICAoZm10IChmb3JtYXQgIiUlLSVkcyAiIChtYXggMyAobGVuZ3RoIGtleS1zdHIpKSkpKQogICAg ICAoY29uY2F0CiAgICAgICAoZm9ybWF0IGZtdCAocHJvcGVydGl6ZSBrZXktc3RyICdmYWNlICdj b25zdWx0LWtleSkpCiAgICAgICA7OyBTcGVjaWFsIHByaW50aW5nIGZvciBjZXJ0YWluIHJlZ2lz dGVyIHR5cGVzCiAgICAgICAoY29uZAogICAgICAgIDs7IERpc3BsYXkgZnVsbCBzdHJpbmcKICAg ICAgICAoKG9yIChzdHJpbmdwIHZhbCkgKHN0cmluZ3AgKGNhci1zYWZlIHZhbCkpKQogICAgICAg ICAod2hlbiAoY29uc3AgdmFsKQogICAgICAgICAgIChzZXRxIHZhbCAobWFwY29uY2F0ICMnaWRl bnRpdHkgdmFsICJcbiIpKSkKICAgICAgICAgKG1hcGNvbmNhdCAjJ2lkZW50aXR5CiAgICAgICAg ICAgICAgICAgICAgKHNlcS10YWtlIChzcGxpdC1zdHJpbmcgKHN0cmluZy10cmltIHZhbCkgIlxu IikgMykKICAgICAgICAgICAgICAgICAgICAoZm9ybWF0IGZtdCAiXG4iKSkpCiAgICAgICAgOzsg RGlzcGxheSAnZmlsZS1xdWVyeQogICAgICAgICgoZXEgKGNhci1zYWZlIHZhbCkgJ2ZpbGUtcXVl cnkpCiAgICAgICAgIChmb3JtYXQgIiVzIGF0IHBvc2l0aW9uICVkIgogICAgICAgICAgICAgICAg IChwcm9wZXJ0aXplIChhYmJyZXZpYXRlLWZpbGUtbmFtZSAoY2FkciB2YWwpKSAnZmFjZSAnY29u c3VsdC1maWxlKQogICAgICAgICAgICAgICAgIChjYWRkciB2YWwpKSkKICAgICAgICA7OyBEaXNw bGF5IGZ1bGwgbGluZSBvZiBidWZmZXIKICAgICAgICAoKGFuZCAobWFya2VycCB2YWwpIChidWZm ZXItbGl2ZS1wIChtYXJrZXItYnVmZmVyIHZhbCkpKQogICAgICAgICAod2l0aC1jdXJyZW50LWJ1 ZmZlciAobWFya2VyLWJ1ZmZlciB2YWwpCiAgICAgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KICAg ICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAod2lkZW4pCiAgICAgICAg ICAgICAgIChnb3RvLWNoYXIgdmFsKQogICAgICAgICAgICAgICAoY29uY2F0CiAgICAgICAgICAg ICAgICAoY29uc3VsdC0tZm9ybWF0LWxvY2F0aW9uIChidWZmZXItbmFtZSkgKGxpbmUtbnVtYmVy LWF0LXBvcykpCiAgICAgICAgICAgICAgICAoY29uc3VsdC0tbGluZS13aXRoLWN1cnNvciB2YWwp KSkpKSkKICAgICAgICA7OyBEZWZhdWx0IHByaW50aW5nIGZvciB0aGUgb3RoZXIgdHlwZXMKICAg ICAgICAodCAocmVnaXN0ZXItZGVzY3JpYmUtb25lbGluZSBrZXkpKSkpKSkpCgooZGVmdW4gY29u c3VsdC0tcmVnaXN0ZXItYWxpc3QgKCkKICAiUmV0dXJuIHJlZ2lzdGVyIGxpc3Qgb3IgcmFpc2Ug YW4gZXJyb3IgaWYgdGhlIGxpc3QgaXMgZW1wdHkuIgogIDs7IFNvbWV0aW1lcywgcmVnaXN0ZXJz IGFyZSBtYWRlIHdpdGhvdXQgYSBgY2RyJy4KICA7OyBTdWNoIHJlZ2lzdGVycyBkb24ndCBkbyBh bnl0aGluZywgYW5kIGNhbiBiZSBpZ25vcmVkLgogIChvciAoc2VxLWZpbHRlciAjJ2NkciByZWdp c3Rlci1hbGlzdCkgKHVzZXItZXJyb3IgIkFsbCByZWdpc3RlcnMgYXJlIGVtcHR5IikpKQoKOzs7 IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0ZXIgKCZvcHRpb25hbCBhcmcpCiAgIkxv YWQgcmVnaXN0ZXIgYW5kIGVpdGhlciBqdW1wIHRvIGxvY2F0aW9uIG9yIGluc2VydCB0aGUgc3Rv cmVkIHRleHQuCgpUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIHRvIHNlYXJjaCB0aGUgcmVnaXN0ZXIg Y29udGVudHMuIEZvciBxdWljayBhY2Nlc3MgdG8KcmVnaXN0ZXJzIGl0IGlzIHN0aWxsIHJlY29t bWVuZGVkIHRvIHVzZSB0aGUgcmVnaXN0ZXIgZnVuY3Rpb25zCmBjb25zdWx0LXJlZ2lzdGVyLWxv YWQnIGFuZCBgY29uc3VsdC1yZWdpc3Rlci1zdG9yZScgb3IgdGhlIGJ1aWx0LWluIGJ1aWx0LWlu CnJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMuIFRoZSBjb21tYW5kIHN1cHBvcnRzIG5hcnJvd2lu Zywgc2VlCmBjb25zdWx0LXJlZ2lzdGVyLW5hcnJvdycuIE1hcmtlciBwb3NpdGlvbnMgYXJlIHBy ZXZpZXdlZC4gU2VlCmBqdW1wLXRvLXJlZ2lzdGVyJyBhbmQgYGluc2VydC1yZWdpc3RlcicgZm9y IHRoZSBtZWFuaW5nIG9mIEFSRy4iCiAgKGludGVyYWN0aXZlICJQIikKICAoY29uc3VsdC1yZWdp c3Rlci1sb2FkCiAgIChjb25zdWx0LS1yZWFkCiAgICAiUmVnaXN0ZXI6ICIKICAgIChtYXBjYXIg KGxhbWJkYSAocmVnKSAoY29ucyAoY29uc3VsdC0tcmVnaXN0ZXItZm9ybWF0IHJlZykgKGNhciBy ZWcpKSkKICAgICAgICAgICAgKHNvcnQgKGNvbnN1bHQtLXJlZ2lzdGVyLWFsaXN0KSAjJ2Nhci1s ZXNzLXRoYW4tY2FyKSkKICAgIDpjYXRlZ29yeSAnY29uc3VsdC1yZWdpc3RlcgogICAgOnByZXZp ZXcKICAgIChsZXQgKChwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKSkpCiAgICAg IChsYW1iZGEgKGNhbmQgcmVzdG9yZSkKICAgICAgICAoZnVuY2FsbCBwcmV2aWV3CiAgICAgICAg ICAgICAgICAgOzsgUHJldmlldyBtYXJrZXJzCiAgICAgICAgICAgICAgICAgKHdoZW4tbGV0IChy ZWcgKGdldC1yZWdpc3RlciBjYW5kKSkKICAgICAgICAgICAgICAgICAgIChhbmQgKG1hcmtlcnAg cmVnKSByZWcpKQogICAgICAgICAgICAgICAgIHJlc3RvcmUpKSkKICAgIDpuYXJyb3cKICAgIChj b25zCiAgICAgKGxhbWJkYSAoY2FuZCkKICAgICAgIChsZXQgKChyZWcgKGdldC1yZWdpc3RlciAo Y2RyIGNhbmQpKSkpCiAgICAgICAgIChzZXEtZmluZCAobGFtYmRhICh4KQogICAgICAgICAgICAg ICAgICAgICAoYW5kCiAgICAgICAgICAgICAgICAgICAgICAoPSAoY2FyIHgpIGNvbnN1bHQtLW5h cnJvdykKICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIChjYWRkciB4KSByZWcpKSkKICAg ICAgICAgICAgICAgICAgIGNvbnN1bHQtcmVnaXN0ZXItbmFycm93KSkpCiAgICAgKG1hcGNhciAo cGNhc2UtbGFtYmRhIChgKCx4ICx5ICxfKSkgKGNvbnMgeCB5KSkKICAgICAgICAgICAgIGNvbnN1 bHQtcmVnaXN0ZXItbmFycm93KSkKICAgIDpzb3J0IG5pbAogICAgOnJlcXVpcmUtbWF0Y2ggdAog ICAgOmhpc3RvcnkgdCA7OyBkaXNhYmxlIGhpc3RvcnkKICAgIDpsb29rdXAgIydjb25zdWx0LS1s b29rdXAtY2RyKQogICBhcmcpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtcmVnaXN0 ZXItbG9hZCAocmVnICZvcHRpb25hbCBhcmcpCiAgIkRvIHdoYXQgSSBtZWFuIHdpdGggYSBSRUcu CgpGb3IgYSB3aW5kb3cgY29uZmlndXJhdGlvbiwgcmVzdG9yZSBpdC4gRm9yIGEgbnVtYmVyIG9y IHRleHQsIGluc2VydCBpdC4gRm9yIGEKbG9jYXRpb24sIGp1bXAgdG8gaXQuIFNlZSBganVtcC10 by1yZWdpc3RlcicgYW5kIGBpbnNlcnQtcmVnaXN0ZXInIGZvciB0aGUKbWVhbmluZyBvZiBBUkcu IgogIChpbnRlcmFjdGl2ZQogICAobGlzdAogICAgKGFuZCAoY29uc3VsdC0tcmVnaXN0ZXItYWxp c3QpCiAgICAgICAgIChyZWdpc3Rlci1yZWFkLXdpdGgtcHJldmlldyAiTG9hZCByZWdpc3Rlcjog IikpCiAgICBjdXJyZW50LXByZWZpeC1hcmcpKQogIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAg KGp1bXAtdG8tcmVnaXN0ZXIgcmVnIGFyZykKICAgICh1c2VyLWVycm9yIChpbnNlcnQtcmVnaXN0 ZXIgcmVnIGFyZykpKSkKCihkZWZ1biBjb25zdWx0LS1yZWdpc3Rlci1hY3Rpb24gKGFjdGlvbi1s aXN0KQogICJSZWFkIHJlZ2lzdGVyIGtleSBhbmQgZXhlY3V0ZSBhY3Rpb24gZnJvbSBBQ1RJT04t TElTVC4KClRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIGByZWdpc3Rlci1yZWFkLXdpdGgt cHJldmlldycuIgogIChsZXQqICgoYnVmZmVyICIqUmVnaXN0ZXIgUHJldmlldyoiKQogICAgICAg ICAocHJlZml4IChjYXIgYWN0aW9uLWxpc3QpKQogICAgICAgICAoYWN0aW9uLWxpc3QgKGNkciBh Y3Rpb24tbGlzdCkpCiAgICAgICAgIChhY3Rpb24gKGNhciAobnRoIDAgYWN0aW9uLWxpc3QpKSkK ICAgICAgICAgKHJlZykKICAgICAgICAgKHByZXZpZXcKICAgICAgICAgIChsYW1iZGEgKCkKCSAg ICAodW5sZXNzIChnZXQtYnVmZmVyLXdpbmRvdyBidWZmZXIpCgkgICAgICAocmVnaXN0ZXItcHJl dmlldyBidWZmZXIgJ3Nob3ctZW1wdHkpCiAgICAgICAgICAgICAgKHdoZW4tbGV0ICh3aW4gKGdl dC1idWZmZXItd2luZG93IGJ1ZmZlcikpCiAgICAgICAgICAgICAgICAod2l0aC1zZWxlY3RlZC13 aW5kb3cgd2luCiAgICAgICAgICAgICAgICAgIChsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KSkK ICAgICAgICAgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1tYXgpKQogICAgICAgICAgICAg ICAgICAgIChpbnNlcnQKICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKGNvbmNhdCBw cmVmaXggIjogICIpICdmYWNlICdjb25zdWx0LWhlbHApCiAgICAgICAgICAgICAgICAgICAgICht YXBjb25jYXQKICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAg ICAgICAgICAgIChjb25jYXQgKHByb3BlcnRpemUgKGZvcm1hdCAiTS0lYyIgKGNhciB4KSkgJ2Zh Y2UgJ2NvbnN1bHQta2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiAocHJv cGVydGl6ZSAoY2FkciB4KSAnZmFjZSAnY29uc3VsdC1oZWxwKSkpCiAgICAgICAgICAgICAgICAg ICAgICBhY3Rpb24tbGlzdCAiICAiKSkKICAgICAgICAgICAgICAgICAgICAoZml0LXdpbmRvdy10 by1idWZmZXIpKSkpKSkpCgkgKHRpbWVyICh3aGVuIChudW1iZXJwIHJlZ2lzdGVyLXByZXZpZXct ZGVsYXkpCgkgICAgICAgICAgKHJ1bi13aXRoLXRpbWVyIHJlZ2lzdGVyLXByZXZpZXctZGVsYXkg bmlsIHByZXZpZXcpKSkKCSAoaGVscC1jaGFycyAoc2VxLXJlbW92ZSAjJ2dldC1yZWdpc3RlciAo Y29ucyBoZWxwLWNoYXIgaGVscC1ldmVudC1saXN0KSkpKQogICAgKHVud2luZC1wcm90ZWN0CiAg ICAgICAgKHdoaWxlIChub3QgcmVnKQoJICAod2hpbGUgKG1lbXEgKHJlYWQta2V5IChwcm9wZXJ0 aXplIChjYWRkciAoYXNzcSBhY3Rpb24gYWN0aW9uLWxpc3QpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFjZSAnbWluaWJ1ZmZlci1wcm9tcHQpKQoJCSAg ICAgICBoZWxwLWNoYXJzKQogICAgICAgICAgICAoZnVuY2FsbCBwcmV2aWV3KSkKICAgICAgICAg IChjb25kCiAgICAgICAgICAgKChvciAoZXEgP1xDLWcgbGFzdC1pbnB1dC1ldmVudCkKICAgICAg ICAgICAgICAgIChlcSAnZXNjYXBlIGxhc3QtaW5wdXQtZXZlbnQpCiAgICAgICAgICAgICAgICAo ZXEgP1xDLVxbIGxhc3QtaW5wdXQtZXZlbnQpKQogICAgICAgICAgICAoa2V5Ym9hcmQtcXVpdCkp CiAgICAgICAgICAgKChhbmQgKG51bWJlcnAgbGFzdC1pbnB1dC1ldmVudCkgKGFzc3EgKGxvZ3hv ciAjeDgwMDAwMDAgbGFzdC1pbnB1dC1ldmVudCkgYWN0aW9uLWxpc3QpKQogICAgICAgICAgICAo c2V0cSBhY3Rpb24gKGxvZ3hvciAjeDgwMDAwMDAgbGFzdC1pbnB1dC1ldmVudCkpKQoJICAgKChj aGFyYWN0ZXJwIGxhc3QtaW5wdXQtZXZlbnQpCiAgICAgICAgICAgIChzZXRxIHJlZyBsYXN0LWlu cHV0LWV2ZW50KSkKICAgICAgICAgICAodCAoZXJyb3IgIk5vbi1jaGFyYWN0ZXIgaW5wdXQtZXZl bnQiKSkpKQogICAgICAod2hlbiAodGltZXJwIHRpbWVyKQogICAgICAgIChjYW5jZWwtdGltZXIg dGltZXIpKQogICAgICAobGV0ICgodyAoZ2V0LWJ1ZmZlci13aW5kb3cgYnVmZmVyKSkpCiAgICAg ICAgKHdoZW4gKHdpbmRvdy1saXZlLXAgdykKICAgICAgICAgIChkZWxldGUtd2luZG93IHcpKSkK ICAgICAgKHdoZW4gKGdldC1idWZmZXIgYnVmZmVyKQogICAgICAgIChraWxsLWJ1ZmZlciBidWZm ZXIpKSkKICAgICh3aGVuIHJlZwogICAgICAoZnVuY2FsbCAoY2FkZGRyIChhc3NxIGFjdGlvbiBh Y3Rpb24tbGlzdCkpIHJlZykpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LXJlZ2lz dGVyLXN0b3JlIChhcmcpCiAgIlN0b3JlIHJlZ2lzdGVyIGRlcGVuZGVudCBvbiBjdXJyZW50IGNv bnRleHQsIHNob3dpbmcgYW4gYWN0aW9uIG1lbnUuCgpXaXRoIGFuIGFjdGl2ZSByZWdpb24sIHN0 b3JlL2FwcGVuZC9wcmVwZW5kIHRoZSBjb250ZW50cywgb3B0aW9uYWxseSBkZWxldGluZwp0aGUg cmVnaW9uIHdoZW4gYSBwcmVmaXggQVJHIGlzIGdpdmVuLiBXaXRoIGEgbnVtZXJpYyBwcmVmaXgg QVJHLCBzdG9yZS9hZGQgdGhlCm51bWJlci4gT3RoZXJ3aXNlIHN0b3JlIHBvaW50LCBmcmFtZXNl dCwgd2luZG93IG9yIGttYWNyby4iCiAgKGludGVyYWN0aXZlICJQIikKICAoY29uc3VsdC0tcmVn aXN0ZXItYWN0aW9uCiAgIChjb25kCiAgICAoKHVzZS1yZWdpb24tcCkKICAgICAobGV0ICgoYmVn IChyZWdpb24tYmVnaW5uaW5nKSkKICAgICAgICAgICAoZW5kIChyZWdpb24tZW5kKSkpCiAgICAg ICBgKCJSZWdpb24iCiAgICAgICAgICg/YyAiY29weSIgIkNvcHkgcmVnaW9uIHRvIHJlZ2lzdGVy OiAiICwobGFtYmRhIChyKSAoY29weS10by1yZWdpc3RlciByIGJlZyBlbmQgYXJnIHQpKSkKICAg ICAgICAgKD9hICJhcHBlbmQiICJBcHBlbmQgcmVnaW9uIHRvIHJlZ2lzdGVyOiAiICwobGFtYmRh IChyKSAoYXBwZW5kLXRvLXJlZ2lzdGVyIHIgYmVnIGVuZCBhcmcpKSkKICAgICAgICAgKD9wICJw cmVwZW5kIiAiUHJlcGVuZCByZWdpb24gdG8gcmVnaXN0ZXI6ICIgLChsYW1iZGEgKHIpIChwcmVw ZW5kLXRvLXJlZ2lzdGVyIHIgYmVnIGVuZCBhcmcpKSkpKSkKICAgICgobnVtYmVycCBhcmcpCiAg ICAgYCgsKGZvcm1hdCAiTnVtYmVyICVzIiBhcmcpCiAgICAgICAoP3MgInN0b3JlIiAsKGZvcm1h dCAiU3RvcmUgJXMgaW4gcmVnaXN0ZXI6ICIgYXJnKSAsKGxhbWJkYSAocikgKG51bWJlci10by1y ZWdpc3RlciBhcmcgcikpKQogICAgICAgKD9hICJhZGQiICwoZm9ybWF0ICJBZGQgJXMgdG8gcmVn aXN0ZXI6ICIgYXJnKSAsKGxhbWJkYSAocikgKGluY3JlbWVudC1yZWdpc3RlciBhcmcgcikpKSkp CiAgICAodAogICAgIGAoIlN0b3JlIgogICAgICAgKD9wICJwb2ludCIgIlBvaW50IHRvIHJlZ2lz dGVyOiAiICwjJ3BvaW50LXRvLXJlZ2lzdGVyKQogICAgICAgKD9mICJmcmFtZXNldCIgIkZyYW1l c2V0IHRvIHJlZ2lzdGVyOiAiICwjJ2ZyYW1lc2V0LXRvLXJlZ2lzdGVyKQogICAgICAgKD93ICJ3 aW5kb3ciICJXaW5kb3cgdG8gcmVnaXN0ZXI6ICIgLCMnd2luZG93LWNvbmZpZ3VyYXRpb24tdG8t cmVnaXN0ZXIpCiAgICAgICAsQChhbmQgbGFzdC1rYmQtbWFjcm8gYCgoP2sgImttYWNybyIgIktt YWNybyB0byByZWdpc3RlcjogIiAsIydrbWFjcm8tdG8tcmVnaXN0ZXIpKSkpKSkpKQoKOzs7Ozsg Q29tbWFuZDogY29uc3VsdC1ib29rbWFyawoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQt Ym9va21hcmsgKG5hbWUpCiAgIklmIGJvb2ttYXJrIE5BTUUgZXhpc3RzLCBvcGVuIGl0LCBvdGhl cndpc2UgY3JlYXRlIGEgbmV3IGJvb2ttYXJrIHdpdGggTkFNRS4KClRoZSBjb21tYW5kIHN1cHBv cnRzIHByZXZpZXcgb2YgZmlsZSBib29rbWFya3MgYW5kIG5hcnJvd2luZy4gU2VlIHRoZQp2YXJp YWJsZSBgY29uc3VsdC1ib29rbWFyay1uYXJyb3cnIGZvciB0aGUgbmFycm93aW5nIGNvbmZpZ3Vy YXRpb24uIgogIChpbnRlcmFjdGl2ZQogICAobGlzdAogICAgKGNvbnN1bHQtLXdpdGgtZmlsZS1w cmV2aWV3IChvcGVuKQogICAgICAoY29uc3VsdC0tcmVhZAogICAgICAgIkJvb2ttYXJrOiAiCiAg ICAgICAoYm9va21hcmstYWxsLW5hbWVzKQogICAgICAgOzsgQWRkIGRlZmF1bHQgbmFtZXMgdG8g ZnV0dXJlIGhpc3RvcnkuCiAgICAgICA7OyBJZ25vcmUgZXJyb3JzIHN1Y2ggdGhhdCBgY29uc3Vs dC1ib29rbWFyaycgY2FuIGJlIHVzZWQgaW4KICAgICAgIDs7IGJ1ZmZlcnMgd2hpY2ggYXJlIG5v dCBiYWNrZWQgYnkgYSBmaWxlLgogICAgICAgOmFkZC1oaXN0b3J5IChpZ25vcmUtZXJyb3JzIChi b29rbWFyay1wcm9wLWdldCAoYm9va21hcmstbWFrZS1yZWNvcmQpICdkZWZhdWx0cykpCiAgICAg ICA6bmFycm93CiAgICAgICAoY29ucwogICAgICAgIChsYW1iZGEgKGNhbmQpCiAgICAgICAgICAo aWYtbGV0ICgobiBjb25zdWx0LS1uYXJyb3cpCiAgICAgICAgICAgICAgICAgICAoYm0gKGJvb2tt YXJrLWdldC1ib29rbWFyay1yZWNvcmQKICAgICAgICAgICAgICAgICAgICAgICAgKGFzc29jIGNh bmQgYm9va21hcmstYWxpc3QpKSkpCiAgICAgICAgICAgICAgKGVxIG4gKGNhZGRyIChhbGlzdC1n ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAoYWxpc3QtZ2V0ICdoYW5kbGVyIGJt KSAjJ2Jvb2ttYXJrLWRlZmF1bHQtaGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN1bHQtYm9va21hcmstbmFycm93KSkpCiAgICAgICAgICAgIHQpKQogICAgICAgIChtYXBj YXIgKHBjYXNlLWxhbWJkYSAoYCgseCAseSAsXykpIChjb25zIHggeSkpCiAgICAgICAgICAgICAg ICBjb25zdWx0LWJvb2ttYXJrLW5hcnJvdykpCiAgICAgICA6cHJldmlldwogICAgICAgKGxldCAo KHByZXZpZXcgKGNvbnN1bHQtLXByZXZpZXctcG9zaXRpb24pKSkKICAgICAgICAgKGxhbWJkYSAo Y2FuZCByZXN0b3JlKQogICAgICAgICAgIChmdW5jYWxsCiAgICAgICAgICAgIHByZXZpZXcKICAg ICAgICAgICAgKHdoZW4tbGV0IChibSAoYm9va21hcmstZ2V0LWJvb2ttYXJrLXJlY29yZAogICAg ICAgICAgICAgICAgICAgICAgICAgICAoYXNzb2MgY2FuZCBib29rbWFyay1hbGlzdCkpKQogICAg ICAgICAgICAgIChpZi1sZXQqICgoZmlsZSAoYWxpc3QtZ2V0ICdmaWxlbmFtZSBibSkpCiAgICAg ICAgICAgICAgICAgICAgICAgIChwb3MgKGFsaXN0LWdldCAncG9zaXRpb24gYm0pKQogICAgICAg ICAgICAgICAgICAgICAgICA7OyBPbmx5IHByZXZpZXcgYm9va21hcmtzIHdpdGhvdXQgYSBoYW5k bGVyCiAgICAgICAgICAgICAgICAgICAgICAgIDs7IGFrYSBgYm9va21hcmstZGVmYXVsdC1oYW5k bGVyJyEKICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZiAoYW5kIChub3QgKGFsaXN0LWdldCAn aGFuZGxlciBibSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCBv cGVuIGZpbGUpKSkpCiAgICAgICAgICAgICAgICAgIChzZXQtbWFya2VyIChtYWtlLW1hcmtlcikg cG9zIGJ1ZikKICAgICAgICAgICAgICAgICh1bmxlc3MgcmVzdG9yZSAobWluaWJ1ZmZlci1tZXNz YWdlICJObyBwcmV2aWV3IGZvciBzcGVjaWFsIGJvb2ttYXJrIikpCiAgICAgICAgICAgICAgICBu aWwpKQogICAgICAgICAgICByZXN0b3JlKSkpCiAgICAgICA6aGlzdG9yeSAnYm9va21hcmstaGlz dG9yeQogICAgICAgOmNhdGVnb3J5ICdib29rbWFyaykpKSkKICAoYm9va21hcmstbWF5YmUtbG9h ZC1kZWZhdWx0LWZpbGUpCiAgKGlmIChhc3NvYyBuYW1lIGJvb2ttYXJrLWFsaXN0KQogICAgICAo Ym9va21hcmstanVtcCBuYW1lKQogICAgKGJvb2ttYXJrLXNldCBuYW1lKSkpCgo7Ozs7OyBDb21t YW5kOiBjb25zdWx0LWFwcm9wb3MKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWFwcm9w b3MgKCkKICAiU2VsZWN0IHBhdHRlcm4gYW5kIGNhbGwgYGFwcm9wb3MnLgoKVGhlIGRlZmF1bHQg dmFsdWUgb2YgdGhlIGNvbXBsZXRpb24gaXMgdGhlIHN5bWJvbCBhdCBwb2ludC4iCiAgKGludGVy YWN0aXZlKQogIChsZXQgKChwYXR0ZXJuCiAgICAgICAgIChjb25zdWx0LS1yZWFkCiAgICAgICAg ICAiQXByb3BvczogIgogICAgICAgICAgb2JhcnJheQogICAgICAgICAgOnByZWRpY2F0ZSAobGFt YmRhICh4KSAob3IgKGZib3VuZHAgeCkgKGJvdW5kcCB4KSAoZmFjZXAgeCkgKHN5bWJvbC1wbGlz dCB4KSkpCiAgICAgICAgICA6aGlzdG9yeSAnY29uc3VsdC0tYXByb3Bvcy1oaXN0b3J5CiAgICAg ICAgICA6Y2F0ZWdvcnkgJ3N5bWJvbAogICAgICAgICAgOmRlZmF1bHQgKHRoaW5nLWF0LXBvaW50 ICdzeW1ib2wpKSkpCiAgICAod2hlbiAoc3RyaW5nPSBwYXR0ZXJuICIiKQogICAgICAodXNlci1l cnJvciAiTm8gcGF0dGVybiBnaXZlbiIpKQogICAgKGFwcm9wb3MgcGF0dGVybikpKQoKOzs7Ozsg Q29tbWFuZDogY29uc3VsdC1jb21wbGV4LWNvbW1hbmQKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBj b25zdWx0LWNvbXBsZXgtY29tbWFuZCAoKQogICJTZWxlY3QgYW5kIGV2YWx1YXRlIGNvbW1hbmQg ZnJvbSB0aGUgY29tbWFuZCBoaXN0b3J5LgoKVGhpcyBjb21tYW5kIGNhbiBhY3QgYXMgYSBkcm9w LWluIHJlcGxhY2VtZW50IGZvciBgcmVwZWF0LWNvbXBsZXgtY29tbWFuZCcuIgogIChpbnRlcmFj dGl2ZSkKICAobGV0KiAoKGhpc3RvcnkgKG9yIChjb25zdWx0LS1yZW1vdmUtZHVwcyAobWFwY2Fy ICMncHJpbjEtdG8tc3RyaW5nIGNvbW1hbmQtaGlzdG9yeSkpCiAgICAgICAgICAgICAgICAgICAg ICAodXNlci1lcnJvciAiVGhlcmUgYXJlIG5vIHByZXZpb3VzIGNvbXBsZXggY29tbWFuZHMiKSkp CiAgICAgICAgIChjbWQgKHJlYWQgKGNvbnN1bHQtLXJlYWQKICAgICAgICAgICAgICAgICAgICAg IkNvbW1hbmQ6ICIgaGlzdG9yeQogICAgICAgICAgICAgICAgICAgICA6ZGVmYXVsdCAoY2FyIGhp c3RvcnkpCiAgICAgICAgICAgICAgICAgICAgIDpzb3J0IG5pbAogICAgICAgICAgICAgICAgICAg ICA6aGlzdG9yeSB0IDs7IGRpc2FibGUgaGlzdG9yeQogICAgICAgICAgICAgICAgICAgICA6Y2F0 ZWdvcnkgJ2V4cHJlc3Npb24pKSkpCiAgICA7OyBUYWtlbiBmcm9tIGByZXBlYXQtY29tcGxleC1j b21tYW5kJwogICAgKGFkZC10by1oaXN0b3J5ICdjb21tYW5kLWhpc3RvcnkgY21kKQogICAgKGFw cGx5ICMnZnVuY2FsbC1pbnRlcmFjdGl2ZWx5CgkgICAoY2FyIGNtZCkKCSAgIChtYXBjYXIgKGxh bWJkYSAoZSkgKGV2YWwgZSB0KSkgKGNkciBjbWQpKSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3Vs dC1oaXN0b3J5CgooZGVmdW4gY29uc3VsdC0tY3VycmVudC1oaXN0b3J5ICgpCiAgIlJldHVybiB0 aGUgaGlzdG9yeSByZWxldmFudCB0byB0aGUgY3VycmVudCBidWZmZXIuCgpJZiB0aGUgbWluaWJ1 ZmZlciBpcyBhY3RpdmUsIHJldHVybnMgdGhlIG1pbmlidWZmZXIgaGlzdG9yeSwKb3RoZXJ3aXNl IHRoZSBoaXN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgaXMgcmV0dXJuZWQuClRoZXJl IGlzIGEgc3BlY2lhbCBjYXNlIGZvciBgcmVwZWF0LWNvbXBsZXgtY29tbWFuZCcsCmZvciB3aGlj aCB0aGUgY29tbWFuZCBoaXN0b3J5IGlzIHVzZWQuIgogIChjb25kCiAgIDs7IElmIHByZXNzaW5n ICJDLXggTS06IiwgaS5lLiwgYHJlcGVhdC1jb21wbGV4LWNvbW1hbmQnLAogICA7OyB3ZSBhcmUg aW5zdGVhZCBxdWVyeWluZyB0aGUgYGNvbW1hbmQtaGlzdG9yeScgYW5kIGdldCBhIGZ1bGwgcy1l eHByZXNzaW9uLgogICA7OyBBbHRlcm5hdGl2ZWx5IHlvdSBtaWdodCB3YW50IHRvIHVzZSBgY29u c3VsdC1jb21wbGV4LWNvbW1hbmQnLAogICA7OyB3aGljaCBjYW4gYWxzbyBiZSBib3VuZCB0byAi Qy14IE0tOiIhCiAgICgoZXEgbGFzdC1jb21tYW5kICdyZXBlYXQtY29tcGxleC1jb21tYW5kKQog ICAgKG1hcGNhciAjJ3ByaW4xLXRvLXN0cmluZyBjb21tYW5kLWhpc3RvcnkpKQogICA7OyBJbiB0 aGUgbWluaWJ1ZmZlciB3ZSB1c2UgdGhlIGN1cnJlbnQgbWluaWJ1ZmZlciBoaXN0b3J5LAogICA7 OyB3aGljaCBjYW4gYmUgY29uZmlndXJlZCBieSBzZXR0aW5nIGBtaW5pYnVmZmVyLWhpc3Rvcnkt dmFyaWFibGUnLgogICAoKG1pbmlidWZmZXJwKQogICAgKGlmIChlcSBtaW5pYnVmZmVyLWhpc3Rv cnktdmFyaWFibGUgdCkKICAgICAgICAodXNlci1lcnJvciAiTWluaWJ1ZmZlciBoaXN0b3J5IGlz IGRpc2FibGVkIGZvciBgJXMnIiB0aGlzLWNvbW1hbmQpCiAgICAgIChzeW1ib2wtdmFsdWUgbWlu aWJ1ZmZlci1oaXN0b3J5LXZhcmlhYmxlKSkpIDs7IChtaW5pYnVmZmVyLWhpc3RvcnktdmFsdWUp IGlzIEVtYWNzIDI3IG9ubHkKICAgOzsgT3RoZXJ3aXNlIHdlIHVzZSBhIG1vZGUtc3BlY2lmaWMg aGlzdG9yeSwgc2VlIGBjb25zdWx0LW1vZGUtaGlzdG9yaWVzJy4KICAgKHQgKHdoZW4tbGV0ICho aXN0b3J5CiAgICAgICAgICAgICAgICAgKG9yIChzZXEtZmluZCAobGFtYmRhIChyaW5nKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5kIChkZXJpdmVkLW1vZGUtcCAoY2FyIHJp bmcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChib3VuZHAgKGNkciBy aW5nKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VsdC1tb2RlLWhpc3Rv cmllcykKICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IKICAgICAgICAgICAgICAgICAg ICAgICJObyBoaXN0b3J5IGNvbmZpZ3VyZWQgZm9yIGAlcycsIHNlZSBgY29uc3VsdC1tb2RlLWhp c3RvcmllcyciCiAgICAgICAgICAgICAgICAgICAgICBtYWpvci1tb2RlKSkpCiAgICAgICAgKHN5 bWJvbC12YWx1ZSAoY2RyIGhpc3RvcnkpKSkpKSkKCjs7IFRoaXMgY29tbWFuZCBoYXMgYmVlbiBh ZG9wdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL29hbnRvbGluL2NvbXBsZXRpbmctaGlzdG9y eS8uCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWhpc3RvcnkgKCZvcHRpb25hbCBoaXN0 b3J5KQogICJJbnNlcnQgc3RyaW5nIGZyb20gSElTVE9SWSBvZiBjdXJyZW50IGJ1ZmZlci4KCklu IG9yZGVyIHRvIHNlbGVjdCBmcm9tIGEgc3BlY2lmaWMgSElTVE9SWSwgcGFzcyB0aGUgaGlzdG9y eSB2YXJpYWJsZSBhcyBhcmd1bWVudC4iCiAgKGludGVyYWN0aXZlKQogIChsZXQgKChzdHIgKGNv bnN1bHQtLWxvY2FsLWxldCAoKGVuYWJsZS1yZWN1cnNpdmUtbWluaWJ1ZmZlcnMgdCkpCiAgICAg ICAgICAgICAgIChjb25zdWx0LS1yZWFkCiAgICAgICAgICAgICAgICAiSGlzdG9yeTogIgogICAg ICAgICAgICAgICAgKGxldCAoKGhpc3RvcnkgKG9yIGhpc3RvcnkgKGNvbnN1bHQtLWN1cnJlbnQt aGlzdG9yeSkpKSkKICAgICAgICAgICAgICAgICAgKG9yIChjb25zdWx0LS1yZW1vdmUtZHVwcyAo aWYgKHJpbmctcCBoaXN0b3J5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocmluZy1lbGVtZW50cyBoaXN0b3J5KQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeSkpCiAgICAgICAgICAgICAgICAgICAgICAo dXNlci1lcnJvciAiSGlzdG9yeSBpcyBlbXB0eSIpKSkKICAgICAgICAgICAgICAgIDpoaXN0b3J5 IHQgOzsgZGlzYWJsZSBoaXN0b3J5CiAgICAgICAgICAgICAgICA6Y2F0ZWdvcnkgOzsgUmVwb3J0 IGNvbW1hbmQgY2F0ZWdvcnkgZm9yIE0teCBoaXN0b3J5CiAgICAgICAgICAgICAgICAoYW5kICht aW5pYnVmZmVycCkKICAgICAgICAgICAgICAgICAgICAgKGVxIG1pbmlidWZmZXItaGlzdG9yeS12 YXJpYWJsZSAnZXh0ZW5kZWQtY29tbWFuZC1oaXN0b3J5KQogICAgICAgICAgICAgICAgICAgICAn Y29tbWFuZCkKICAgICAgICAgICAgICAgIDpzb3J0IG5pbCkpKSkKICAgICh3aGVuIChtaW5pYnVm ZmVycCkKICAgICAgKGRlbGV0ZS1taW5pYnVmZmVyLWNvbnRlbnRzKSkKICAgIChpbnNlcnQgKHN1 YnN0cmluZy1uby1wcm9wZXJ0aWVzIHN0cikpKSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtaXNl YXJjaAoKKGRlZnVuIGNvbnN1bHQtaXNlYXJjaC1mb3J3YXJkICgmb3B0aW9uYWwgcmV2ZXJzZSkK ICAiQ29udGludWUgaXNlYXJjaCBmb3J3YXJkIG9wdGlvbmFsbHkgaW4gUkVWRVJTRS4iCiAgKGlu dGVyYWN0aXZlKQogIChjb25zdWx0LS1yZXF1aXJlLW1pbmlidWZmZXIpCiAgKHNldHEgaXNlYXJj aC1uZXctZm9yd2FyZCAobm90IHJldmVyc2UpIGlzZWFyY2gtbmV3LW5vbmluY3JlbWVudGFsIG5p bCkKICAoZnVuY2FsbCAob3IgKGNvbW1hbmQtcmVtYXBwaW5nICMnZXhpdC1taW5pYnVmZmVyKSAj J2V4aXQtbWluaWJ1ZmZlcikpKQoKKGRlZnVuIGNvbnN1bHQtaXNlYXJjaC1yZXZlcnNlICgmb3B0 aW9uYWwgcmV2ZXJzZSkKICAiQ29udGludWUgaXNlYXJjaCBiYWNrd2FyZCBvcHRpb25hbGx5IGlu IFJFVkVSU0UuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC1pc2VhcmNoLWZvcndhcmQgKG5v dCByZXZlcnNlKSkpCgooZGVmdmFyIGNvbnN1bHQtaXNlYXJjaC1tYXAKICAobGV0ICgobWFwICht YWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCAiXEMtcyIgIydjb25zdWx0 LWlzZWFyY2gtZm9yd2FyZCkKICAgIChkZWZpbmUta2V5IG1hcCAiXEMtciIgIydjb25zdWx0LWlz ZWFyY2gtcmV2ZXJzZSkKICAgIG1hcCkKICAiQWRkaXRpb25hbCBrZXltYXAgdXNlZCBieSBgY29u c3VsdC1pc2VhcmNoJy4iKQoKKGRlZnVuIGNvbnN1bHQtLWlzZWFyY2gtY2FuZGlkYXRlcyAobmFy cm93KQogICJSZXR1cm4gaXNlYXJjaCBoaXN0b3J5IGNhbmRpZGF0ZXMgY2F0ZWdvcml6ZWQgYnkg TkFSUk9XLiIKICA7OyBOT1RFOiBEbyBub3QgdGhyb3cgYW4gZXJyb3Igb24gZW1wdHkgaGlzdG9y eSwKICA7OyBpbiBvcmRlciB0byBhbGxvdyBzdGFydGluZyBhIHNlYXJjaC4KICA7OyBXZSBkbyBu b3QgOnJlcXVpcmUtbWF0Y2ggaGVyZSEKICAobGV0KiAoKGhpc3RvcnkgKGlmIChlcSB0IHNlYXJj aC1kZWZhdWx0LW1vZGUpCiAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIHJlZ2V4cC1zZWFy Y2gtcmluZyBzZWFyY2gtcmluZykKICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIHNlYXJjaC1y aW5nIHJlZ2V4cC1zZWFyY2gtcmluZykpKQogICAgICAgICAobWF4LWxlbiAoaWYgaGlzdG9yeQog ICAgICAgICAgICAgICAgICAgICAgKCsgNCAoYXBwbHkgIydtYXggKG1hcGNhciAjJ2xlbmd0aCBo aXN0b3J5KSkpCiAgICAgICAgICAgICAgICAgICAgMCkpKQogICAgKGNvbnN1bHQtLXJlbW92ZS1k dXBzCiAgICAgKG1hcGNhcgogICAgICAobGFtYmRhIChjYW5kKQogICAgICAgIDs7IEVtYWNzIDI3 LjEgdXNlcyBzZXR0aW5ncyBvbiB0aGUgc2VhcmNoIHN0cmluZywgd2UgY2FuIHVzZSB0aGF0IGZv ciBuYXJyb3dpbmcuCiAgICAgICAgKGxldCogKChwcm9wcyAocGxpc3QtbWVtYmVyICh0ZXh0LXBy b3BlcnRpZXMtYXQgMCBjYW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn aXNlYXJjaC1yZWdleHAtZnVuY3Rpb24pKQogICAgICAgICAgICAgICAodHlwZSAocGNhc2UgKGNh ZHIgcHJvcHMpCiAgICAgICAgICAgICAgICAgICAgICAgKChhbmQgJ25pbCAoZ3VhcmQgKG5vdCBw cm9wcykpKSA/cikKICAgICAgICAgICAgICAgICAgICAgICAoJ25pbCAgICAgICAgICAgICAgICAg ICAgICAgICAgID9sKQogICAgICAgICAgICAgICAgICAgICAgICgnd29yZC1zZWFyY2gtcmVnZXhw ICAgICAgICAgICAgP3cpCiAgICAgICAgICAgICAgICAgICAgICAgKCdpc2VhcmNoLXN5bWJvbC1y ZWdleHAgICAgICAgICA/cykKICAgICAgICAgICAgICAgICAgICAgICAoJ2NoYXItZm9sZC10by1y ZWdleHAgICAgICAgICAgID9jKQogICAgICAgICAgICAgICAgICAgICAgIChfICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgP3UpKSkpCiAgICAgICAgICAoY29uY2F0IChwcm9wZXJ0aXplCiAg ICAgICAgICAgICAgICAgICA7OyBEaXNhbWJpZ3VhdGUgaGlzdG9yeSBpdGVtcy4gVGhlIHNhbWUg c3RyaW5nIGNvdWxkCiAgICAgICAgICAgICAgICAgICA7OyBvY2N1ciB3aXRoIGRpZmZlcmVudCBz ZWFyY2ggdHlwZXMuCiAgICAgICAgICAgICAgICAgICAoY2hhci10by1zdHJpbmcgKCsgY29uc3Vs dC0tdG9mdS1jaGFyIHR5cGUpKQogICAgICAgICAgICAgICAgICAgJ2ludmlzaWJsZSB0CiAgICAg ICAgICAgICAgICAgICAnY29uc3VsdC0tYW5ub3RhdGlvbgogICAgICAgICAgICAgICAgICAgKGNv bmNhdCAobWFrZS1zdHJpbmcgKC0gbWF4LWxlbiAobGVuZ3RoIGNhbmQpKSAzMikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGFsaXN0LWdldCB0eXBlIG5hcnJvdykpKQogICAgICAgICAgICAg ICAgICBjYW5kKSkpCiAgICAgIGhpc3RvcnkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29u c3VsdC1pc2VhcmNoICgpCiAgIlJlYWQgYSBzZWFyY2ggc3RyaW5nIHdpdGggY29tcGxldGlvbiBm cm9tIGhpc3RvcnkuCgpUaGlzIHJlcGxhY2VzIHRoZSBjdXJyZW50IHNlYXJjaCBzdHJpbmcgaWYg SXNlYXJjaCBpcyBhY3RpdmUsIGFuZApzdGFydHMgYSBuZXcgSXNlYXJjaCBzZXNzaW9uIG90aGVy d2lzZS4iCiAgKGludGVyYWN0aXZlKQogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAo bGV0ICgoaXNlYXJjaC1tZXNzYWdlLWZ1bmN0aW9uICdpZ25vcmUpIDs7IEF2b2lkIGZsaWNrZXIg aW4gZWNobyBhcmVhCiAgICAgICAgKGluaGliaXQtcmVkaXNwbGF5IHQpICAgICAgICAgICAgICA7 OyBBdm9pZCBmbGlja2VyIGluIG1vZGUgbGluZQogICAgICAgIChuYXJyb3cgJygoP2MgLiAiQ2hh ciIpCiAgICAgICAgICAgICAgICAgICg/dSAuICJDdXN0b20iKQogICAgICAgICAgICAgICAgICAo P2wgLiAiTGl0ZXJhbCIpCiAgICAgICAgICAgICAgICAgICg/ciAuICJSZWdleHAiKQogICAgICAg ICAgICAgICAgICAoP3MgLiAiU3ltYm9sIikKICAgICAgICAgICAgICAgICAgKD93IC4gIldvcmQi KSkpKQogICAgKHVubGVzcyBpc2VhcmNoLW1vZGUgKGlzZWFyY2gtbW9kZSB0KSkKICAgICh3aXRo LWlzZWFyY2gtc3VzcGVuZGVkCiAgICAgKHNldHEgaXNlYXJjaC1uZXctc3RyaW5nCiAgICAgICAg ICAgKGNvbnN1bHQtLXJlYWQKICAgICAgICAgICAgIkktc2VhcmNoOiAiCiAgICAgICAgICAgIChj b25zdWx0LS1pc2VhcmNoLWNhbmRpZGF0ZXMgbmFycm93KQogICAgICAgICAgICA6Y2F0ZWdvcnkg J2NvbnN1bHQtaXNlYXJjaAogICAgICAgICAgICA6aGlzdG9yeSB0IDs7IGRpc2FibGUgaGlzdG9y eQogICAgICAgICAgICA6c29ydCBuaWwKICAgICAgICAgICAgOmFubm90YXRlICMnY29uc3VsdC0t Z2V0LWFubm90YXRpb24KICAgICAgICAgICAgOmluaXRpYWwgaXNlYXJjaC1zdHJpbmcKICAgICAg ICAgICAgOmtleW1hcCBjb25zdWx0LWlzZWFyY2gtbWFwCiAgICAgICAgICAgIDpsb29rdXAKICAg ICAgICAgICAgKGxhbWJkYSAoXyBjYW5kaWRhdGVzIHN0cikKICAgICAgICAgICAgICAoaWYtbGV0 IChjYW5kIChjYXIgKG1lbWJlciBzdHIgY2FuZGlkYXRlcykpKSAoc3Vic3RyaW5nIGNhbmQgMSkg c3RyKSkKICAgICAgICAgICAgOnByZXZpZXcKICAgICAgICAgICAgKGxhbWJkYSAoY2FuZCByZXN0 b3JlKQogICAgICAgICAgICAgICh1bmxlc3MgcmVzdG9yZQogICAgICAgICAgICAgICAgKHNldHEg aXNlYXJjaC1zdHJpbmcgY2FuZCkKICAgICAgICAgICAgICAgIDs7IEVtYWNzIDI3LjEgdXNlcyBw cm9wZXJ0aWVzIG9uIHRoZSBzZWFyY2ggc3RyaW5nIHRvIHN0b3JlIHNldHRpbmdzCiAgICAgICAg ICAgICAgICAod2hlbiAoZmJvdW5kcCAnaXNlYXJjaC11cGRhdGUtZnJvbS1zdHJpbmctcHJvcGVy dGllcykKICAgICAgICAgICAgICAgICAgKGlzZWFyY2gtdXBkYXRlLWZyb20tc3RyaW5nLXByb3Bl cnRpZXMgY2FuZCkpCiAgICAgICAgICAgICAgICAoaXNlYXJjaC11cGRhdGUpKSkKICAgICAgICAg ICAgOm5hcnJvdwogICAgICAgICAgICAoY29ucwogICAgICAgICAgICAgKGxhbWJkYSAoY2FuZCkg KGVxICgtIChhcmVmIGNhbmQgMCkgY29uc3VsdC0tdG9mdS1jaGFyKSBjb25zdWx0LS1uYXJyb3cp KQogICAgICAgICAgICAgbmFycm93KSkKICAgICAgICAgICBpc2VhcmNoLW5ldy1tZXNzYWdlCiAg ICAgICAgICAgKG1hcGNvbmNhdCAnaXNlYXJjaC10ZXh0LWNoYXItZGVzY3JpcHRpb24gaXNlYXJj aC1uZXctc3RyaW5nICIiKSkpCiAgICA7OyBTZXR0aW5nIGBpc2VhcmNoLXJlZ2V4cCcgZXRjIG9u bHkgd29ya3Mgb3V0c2lkZSBvZiBgd2l0aC1pc2VhcmNoLXN1c3BlbmRlZCcuCiAgICAodW5sZXNz IChwbGlzdC1tZW1iZXIgKHRleHQtcHJvcGVydGllcy1hdCAwIGlzZWFyY2gtc3RyaW5nKSAnaXNl YXJjaC1yZWdleHAtZnVuY3Rpb24pCiAgICAgIChzZXRxIGlzZWFyY2gtcmVnZXhwIHQKICAgICAg ICAgICAgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gbmlsKSkpKQoKOzs7OzsgQ29tbWFuZDogY29u c3VsdC1taW5vci1tb2RlLW1lbnUKCihkZWZ1biBjb25zdWx0LS1taW5vci1tb2RlLWNhbmRpZGF0 ZXMgKCkKICAiUmV0dXJuIGxpc3Qgb2YgbWlub3ItbW9kZSBjYW5kaWRhdGUgc3RyaW5ncy4iCiAg KG1hcGNhcgogICAocGNhc2UtbGFtYmRhIChgKCxuYW1lIC4gLHN5bSkpCiAgICAgKGxpc3QgbmFt ZSBzeW0KICAgICAgICAgICAoY29uY2F0CiAgICAgICAgICAgIChpZiAobG9jYWwtdmFyaWFibGUt aWYtc2V0LXAgc3ltKSAibCIgImciKQogICAgICAgICAgICAoaWYgKGFuZCAoYm91bmRwIHN5bSkg KHN5bWJvbC12YWx1ZSBzeW0pKSAiaSIgIm8iKSkpKQogICAoYXBwZW5kCiAgICA7OyBhY2NvcmRp bmcgdG8gZGVzY3JpYmUtbWlub3ItbW9kZS1jb21wbGV0aW9uLXRhYmxlLWZvci1zeW1ib2wKICAg IDs7IHRoZSBtaW5vci1tb2RlLWxpc3QgY29udGFpbnMgKmFsbCogbWlub3IgbW9kZXMKICAgICht YXBjYXIgKGxhbWJkYSAoc3ltKSAoY29ucyAoc3ltYm9sLW5hbWUgc3ltKSBzeW0pKSBtaW5vci1t b2RlLWxpc3QpCiAgICA7OyB0YWtlIHRoZSBsaWdodGVycyBmcm9tIG1pbm9yLW1vZGUtYWxpc3QK ICAgIChkZWxxIG5pbAogICAgICAgICAgKG1hcGNhciAocGNhc2UtbGFtYmRhIChgKCxzeW0gLGxp Z2h0ZXIpKQogICAgICAgICAgICAgICAgICAgICh3aGVuIChhbmQgbGlnaHRlciAobm90IChlcXVh bCAiIiBsaWdodGVyKSkpCiAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBsaWdodGVyIChzdHJp bmctdHJpbSAoZm9ybWF0LW1vZGUtbGluZSBsaWdodGVyKSkpCiAgICAgICAgICAgICAgICAgICAg ICAodW5sZXNzIChzdHJpbmctYmxhbmstcCBsaWdodGVyKQogICAgICAgICAgICAgICAgICAgICAg ICAoY29ucyBsaWdodGVyIHN5bSkpKSkKICAgICAgICAgICAgICAgICAgbWlub3ItbW9kZS1hbGlz dCkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1taW5vci1tb2RlLW1lbnUgKCkK ICAiRW5hYmxlIG9yIGRpc2FibGUgbWlub3IgbW9kZS4KClRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUg dG8gYG1pbm9yLW1vZGUtbWVudS1mcm9tLWluZGljYXRvcicuIgogIChpbnRlcmFjdGl2ZSkKICAo Y2FsbC1pbnRlcmFjdGl2ZWx5CiAgIChjb25zdWx0LS1yZWFkCiAgICAiTWlub3IgbW9kZTogIgog ICAgKGNvbnN1bHQtLW1pbm9yLW1vZGUtY2FuZGlkYXRlcykKICAgIDpyZXF1aXJlLW1hdGNoIHQK ICAgIDpjYXRlZ29yeSAnbWlub3ItbW9kZQogICAgOm5hcnJvdyBgKCwobGFtYmRhIChjYW5kKSAo c2VxLXBvc2l0aW9uIChjYWRkciBjYW5kKSBjb25zdWx0LS1uYXJyb3cpKQogICAgICAgICAgICAg ICg/bCAuICJMb2NhbCIpCiAgICAgICAgICAgICAgKD9nIC4gIkdsb2JhbCIpCiAgICAgICAgICAg ICAgKD9pIC4gIk9uIikKICAgICAgICAgICAgICAoP28gLiAiT2ZmIikpCiAgICA6bG9va3VwICMn Y29uc3VsdC0tbG9va3VwLWNhZHIKICAgIDpoaXN0b3J5ICdjb25zdWx0LS1taW5vci1tb2RlLW1l bnUtaGlzdG9yeSkpKQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC10aGVtZQoKOzs7IyMjYXV0b2xv YWQKKGRlZnVuIGNvbnN1bHQtdGhlbWUgKHRoZW1lKQogICJEaXNhYmxlIGN1cnJlbnQgdGhlbWVz IGFuZCBlbmFibGUgVEhFTUUgZnJvbSBgY29uc3VsdC10aGVtZXMnLgoKVGhlIGNvbW1hbmQgc3Vw cG9ydHMgcHJldmlld2luZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRoZW1lLiIKICAoaW50ZXJh Y3RpdmUKICAgKGxpc3QKICAgIChsZXQgKChhdmFpbC10aGVtZXMgKHNlcS1maWx0ZXIgKGxhbWJk YSAoeCkgKG9yIChub3QgY29uc3VsdC10aGVtZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWVtcSB4IGNvbnN1bHQtdGhlbWVzKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIG5pbCAoY3VzdG9tLWF2YWlsYWJs ZS10aGVtZXMpKSkpCiAgICAgICAgICAoc2F2ZWQtdGhlbWUgKGNhciBjdXN0b20tZW5hYmxlZC10 aGVtZXMpKSkKICAgICAgKGNvbnN1bHQtLXJlYWQKICAgICAgICJUaGVtZTogIgogICAgICAgKG1h cGNhciAobGFtYmRhICh4KSAob3IgeCAnZGVmYXVsdCkpIGF2YWlsLXRoZW1lcykKICAgICAgIDpy ZXF1aXJlLW1hdGNoIHQKICAgICAgIDpjYXRlZ29yeSAndGhlbWUKICAgICAgIDpoaXN0b3J5ICdj b25zdWx0LS10aGVtZS1oaXN0b3J5CiAgICAgICA6bG9va3VwIChsYW1iZGEgKF9pbnB1dCBfY2Fu ZHMgeCkKICAgICAgICAgICAgICAgICAoYW5kIHggKG5vdCAoc3RyaW5nPSB4ICJkZWZhdWx0Iikp IChpbnRlcm4tc29mdCB4KSkpCiAgICAgICA6cHJldmlldyAobGFtYmRhIChjYW5kIHJlc3RvcmUp CiAgICAgICAgICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAoKGFuZCByZXN0b3Jl IChub3QgY2FuZCkpIChjb25zdWx0LXRoZW1lIHNhdmVkLXRoZW1lKSkKICAgICAgICAgICAgICAg ICAgICgobWVtcSBjYW5kIGF2YWlsLXRoZW1lcykgKGNvbnN1bHQtdGhlbWUgY2FuZCkpKSkKICAg ICAgIDpkZWZhdWx0IChzeW1ib2wtbmFtZSAob3Igc2F2ZWQtdGhlbWUgJ2RlZmF1bHQpKSkpKSkK ICAodW5sZXNzIChlcSB0aGVtZSAoY2FyIGN1c3RvbS1lbmFibGVkLXRoZW1lcykpCiAgICAobWFw YyAjJ2Rpc2FibGUtdGhlbWUgY3VzdG9tLWVuYWJsZWQtdGhlbWVzKQogICAgKHdoZW4gdGhlbWUK ICAgICAgKGlmIChjdXN0b20tdGhlbWUtcCB0aGVtZSkKICAgICAgICAgIChlbmFibGUtdGhlbWUg dGhlbWUpCiAgICAgICAgKGxvYWQtdGhlbWUgdGhlbWUgOm5vLWNvbmZpcm0pKSkpKQoKOzs7Ozsg Q29tbWFuZDogY29uc3VsdC1idWZmZXIKCihjb25zdWx0LS1kZWZpbmUtY2FjaGUgY29uc3VsdC0t Y2FjaGVkLWJ1ZmZlcnMKICAoYXBwZW5kIChkZWxxIChjdXJyZW50LWJ1ZmZlcikgKGJ1ZmZlci1s aXN0KSkgKGxpc3QgKGN1cnJlbnQtYnVmZmVyKSkpKQoKKGNvbnN1bHQtLWRlZmluZS1jYWNoZSBj b25zdWx0LS1jYWNoZWQtYnVmZmVyLW5hbWVzCiAgKG1hcGNhciAjJ2J1ZmZlci1uYW1lIChjb25z dWx0LS1jYWNoZWQtYnVmZmVycykpKQoKKGNvbnN1bHQtLWRlZmluZS1jYWNoZSBjb25zdWx0LS1j YWNoZWQtYnVmZmVyLWZpbGUtaGFzaAogIChjb25zdWx0LS1zdHJpbmctaGFzaCAoZGVscSBuaWwg KG1hcGNhciAjJ2J1ZmZlci1maWxlLW5hbWUgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXJzKSkpKSkK CihkZWZ1biBjb25zdWx0LS1vcGVuLWZpbGUgKGZpbGUgZGlzcGxheSkKICAiT3BlbiBGSUxFIHZp YSBESVNQTEFZIGZ1bmN0aW9uLiIKICAocGNhc2UtZXhoYXVzdGl2ZSBkaXNwbGF5CiAgICAoJ3N3 aXRjaC10by1idWZmZXIgKGZpbmQtZmlsZSBmaWxlKSkKICAgICgnc3dpdGNoLXRvLWJ1ZmZlci1v dGhlci13aW5kb3cgKGZpbmQtZmlsZS1vdGhlci13aW5kb3cgZmlsZSkpCiAgICAoJ3N3aXRjaC10 by1idWZmZXItb3RoZXItZnJhbWUgKGZpbmQtZmlsZS1vdGhlci1mcmFtZSBmaWxlKSkpKQoKKGRl ZnVuIGNvbnN1bHQtLW9wZW4tYnVmZmVyIChidWZmZXIgZGlzcGxheSkKICAiT3BlbiBCVUZGRVIg dmlhIERJU1BMQVkgZnVuY3Rpb24uIgogIChmdW5jYWxsIGRpc3BsYXkgYnVmZmVyKSkKCihkZWZ2 YXIgY29uc3VsdC0tc291cmNlLWJvb2ttYXJrCiAgYCg6bmFtZSAgICAgIkJvb2ttYXJrIgogICAg Om5hcnJvdyAgID9tCiAgICA6Y2F0ZWdvcnkgYm9va21hcmsKICAgIDpmYWNlICAgICBjb25zdWx0 LWJvb2ttYXJrCiAgICA6aGlzdG9yeSAgYm9va21hcmstaGlzdG9yeQogICAgOml0ZW1zICAgICwj J2Jvb2ttYXJrLWFsbC1uYW1lcwogICAgOm9wZW4gICAgICwjJ2Jvb2ttYXJrLWp1bXApCiAgIkJv b2ttYXJrIGNhbmRpZGF0ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ2YXIg Y29uc3VsdC0tc291cmNlLXByb2plY3QtYnVmZmVyCiAgYCg6bmFtZSAgICAgICJQcm9qZWN0IEJ1 ZmZlciIKICAgIDpuYXJyb3cgICAgKD9wIC4gIlByb2plY3QiKQogICAgOmNhdGVnb3J5ICBidWZm ZXIKICAgIDpmYWNlICAgICAgY29uc3VsdC1idWZmZXIKICAgIDpoaXN0b3J5ICAgYnVmZmVyLW5h bWUtaGlzdG9yeQogICAgOm9wZW4gICAgICAsIydjb25zdWx0LS1vcGVuLWJ1ZmZlcgogICAgOnBy ZWRpY2F0ZSAsKGxhbWJkYSAoKSBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbikKICAgIDpp dGVtcwogICAgLChsYW1iZGEgKCkKICAgICAgICh3aGVuLWxldCAocm9vdCAoZnVuY2FsbCBjb25z dWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbikpCiAgICAgICAgIChtYXBjYXIgIydidWZmZXItbmFt ZQogICAgICAgICAgICAgICAgIChzZXEtZmlsdGVyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAod2hlbi1sZXQgKGZpbGUgKGJ1ZmZlci1maWxlLW5hbWUgeCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctcHJlZml4LXAgcm9vdCBmaWxl KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXJz KSkpKSkpCiAgIlByb2plY3QgYnVmZmVyIGNhbmRpZGF0ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1 ZmZlcicuIikKCihkZWZ2YXIgY29uc3VsdC0tc291cmNlLXByb2plY3QtZmlsZQogIGAoOm5hbWUg ICAgICAiUHJvamVjdCBGaWxlIgogICAgOm5hcnJvdyAgICAoP3AgLiAiUHJvamVjdCIpCiAgICA6 Y2F0ZWdvcnkgIGZpbGUKICAgIDpmYWNlICAgICAgY29uc3VsdC1maWxlCiAgICA6aGlzdG9yeSAg IGZpbGUtbmFtZS1oaXN0b3J5CiAgICA6b3BlbiAgICAgICwjJ2NvbnN1bHQtLW9wZW4tZmlsZQog ICAgOnByZWRpY2F0ZSAsKGxhbWJkYSAoKSBjb25zdWx0LXByb2plY3Qtcm9vdC1mdW5jdGlvbikK ICAgIDppdGVtcwogICAgLChsYW1iZGEgKCkKICAgICAgKHdoZW4tbGV0IChyb290IChmdW5jYWxs IGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uKSkKICAgICAgICAobGV0ICgobGVuIChsZW5n dGggcm9vdCkpCiAgICAgICAgICAgICAgKGludi1yb290IChwcm9wZXJ0aXplIHJvb3QgJ2ludmlz aWJsZSB0KSkKICAgICAgICAgICAgICAoaHQgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXItZmlsZS1o YXNoKSkpCiAgICAgICAgICAobWFwY2FyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgICAg KGNvbmNhdCBpbnYtcm9vdCAoc3Vic3RyaW5nIHggbGVuKSkpCiAgICAgICAgICAgICAgICAgIChz ZXEtZmlsdGVyIChsYW1iZGEgKHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFu ZCAobm90IChnZXRoYXNoIHggaHQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1wcmVmaXgtcCByb290IHgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVjZW50Zi1saXN0KSkpKSkpCiAgIlByb2plY3QgZmlsZSBjYW5kaWRhdGUgc291cmNlIGZv ciBgY29uc3VsdC1idWZmZXInLiIpCgooZGVmdmFyIGNvbnN1bHQtLXNvdXJjZS1oaWRkZW4tYnVm ZmVyCiAgYCg6bmFtZSAgICAgIkhpZGRlbiBCdWZmZXIiCiAgICA6bmFycm93ICAgMzIKICAgIDpj YXRlZ29yeSBidWZmZXIKICAgIDpmYWNlICAgICBjb25zdWx0LWJ1ZmZlcgogICAgOmhpc3Rvcnkg IGJ1ZmZlci1uYW1lLWhpc3RvcnkKICAgIDpvcGVuICAgICAsIydjb25zdWx0LS1vcGVuLWJ1ZmZl cgogICAgOml0ZW1zCiAgICAsKGxhbWJkYSAoKQogICAgICAgKGxldCAoKGZpbHRlciAoY29uc3Vs dC0tcmVnZXhwLWZpbHRlciBjb25zdWx0LWJ1ZmZlci1maWx0ZXIpKSkKICAgICAgICAgKHNlcS1m aWx0ZXIgKGxhbWJkYSAoeCkgKHN0cmluZy1tYXRjaC1wIGZpbHRlciB4KSkKICAgICAgICAgICAg ICAgICAgICAgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXItbmFtZXMpKSkpKQogICJIaWRkZW4gYnVm ZmVyIGNhbmRpZGF0ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ2YXIgY29u c3VsdC0tc291cmNlLWJ1ZmZlcgogIGAoOm5hbWUgICAgICJCdWZmZXIiCiAgICA6bmFycm93ICAg P2IKICAgIDpjYXRlZ29yeSBidWZmZXIKICAgIDpmYWNlICAgICBjb25zdWx0LWJ1ZmZlcgogICAg Omhpc3RvcnkgIGJ1ZmZlci1uYW1lLWhpc3RvcnkKICAgIDpvcGVuICAgICAsIydjb25zdWx0LS1v cGVuLWJ1ZmZlcgogICAgOml0ZW1zCiAgICAsKGxhbWJkYSAoKQogICAgICAgKGxldCAoKGZpbHRl ciAoY29uc3VsdC0tcmVnZXhwLWZpbHRlciBjb25zdWx0LWJ1ZmZlci1maWx0ZXIpKSkKICAgICAg ICAgKHNlcS1yZW1vdmUgKGxhbWJkYSAoeCkgKHN0cmluZy1tYXRjaC1wIGZpbHRlciB4KSkKICAg ICAgICAgICAgICAgICAgICAgKGNvbnN1bHQtLWNhY2hlZC1idWZmZXItbmFtZXMpKSkpKQogICJC dWZmZXIgY2FuZGlkYXRlIHNvdXJjZSBmb3IgYGNvbnN1bHQtYnVmZmVyJy4iKQoKKGRlZnZhciBj b25zdWx0LS1zb3VyY2UtZmlsZQogIGAoOm5hbWUgICAgICJGaWxlIgogICAgOm5hcnJvdyAgID9m CiAgICA6Y2F0ZWdvcnkgZmlsZQogICAgOmZhY2UgICAgIGNvbnN1bHQtZmlsZQogICAgOmhpc3Rv cnkgIGZpbGUtbmFtZS1oaXN0b3J5CiAgICA6b3BlbiAgICAgLCMnY29uc3VsdC0tb3Blbi1maWxl CiAgICA6aXRlbXMKICAgICwobGFtYmRhICgpCiAgICAgICAobGV0ICgoaHQgKGNvbnN1bHQtLWNh Y2hlZC1idWZmZXItZmlsZS1oYXNoKSkpCiAgICAgICAgIChzZXEtcmVtb3ZlIChsYW1iZGEgKHgp IChnZXRoYXNoIHggaHQpKSByZWNlbnRmLWxpc3QpKSkpCiAgIlJlY2VudCBmaWxlIGNhbmRpZGF0 ZSBzb3VyY2UgZm9yIGBjb25zdWx0LWJ1ZmZlcicuIikKCihkZWZ1biBjb25zdWx0LS1idWZmZXIg KGRpc3BsYXkpCiAgIkJhY2tlbmQgaW1wbGVtZW50YXRpb24gb2YgYGNvbnN1bHQtYnVmZmVyJyB3 aXRoIERJU1BMQVkgZnVuY3Rpb24uIgogIChjb25zdWx0LS1tdWx0aQogICAiU3dpdGNoIHRvOiAi CiAgIGNvbnN1bHQtYnVmZmVyLXNvdXJjZXMKICAgOmhpc3RvcnkgJ2NvbnN1bHQtLWJ1ZmZlci1o aXN0b3J5CiAgIDpzb3J0IG5pbAogICA6cHJldmlldwogICAobGFtYmRhIChjYW5kIHJlc3RvcmUp CiAgICAgKHdoZW4gY2FuZAogICAgICAgKGxldCAoKG5hbWUgKGNhciBjYW5kKSkKICAgICAgICAg ICAgIChhY3Rpb24gKG9yIChwbGlzdC1nZXQgKGNkciBjYW5kKSA6b3BlbikgIydjb25zdWx0LS1v cGVuLWJ1ZmZlcikpKQogICAgICAgICAoY29uZAogICAgICAgICAgKHJlc3RvcmUgKGZ1bmNhbGwg YWN0aW9uIG5hbWUgZGlzcGxheSkpCiAgICAgICAgICA7OyBJbiBvcmRlciB0byBhdm9pZCBzbG93 bmVzcyBhbmQgdW5uZWNlc3NhcnkgY29tcGxleGl0eSwgd2UKICAgICAgICAgIDs7IG9ubHkgcHJl dmlldyBidWZmZXJzLiBMb2FkaW5nIHJlY2VudCBmaWxlcywgYm9va21hcmtzIG9yCiAgICAgICAg ICA7OyB2aWV3cyBjYW4gcmVzdWx0IGluIGV4cGVuc2l2ZSBvcGVyYXRpb25zLgogICAgICAgICAg KChhbmQgKGVxIGFjdGlvbiAjJ2NvbnN1bHQtLW9wZW4tYnVmZmVyKQogICAgICAgICAgICAgICAg KG9yIChlcSBkaXNwbGF5ICMnc3dpdGNoLXRvLWJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAo ZXEgZGlzcGxheSAjJ3N3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93KSkKICAgICAgICAgICAg ICAgIChnZXQtYnVmZmVyIG5hbWUpKQogICAgICAgICAgIChmdW5jYWxsIGRpc3BsYXkgbmFtZSAn bm9yZWNvcmQpKSkpKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtYnVmZmVyICgp CiAgIkVuaGFuY2VkIGBzd2l0Y2gtdG8tYnVmZmVyJyBjb21tYW5kIHdpdGggc3VwcG9ydCBmb3Ig dmlydHVhbCBidWZmZXJzLgoKVGhlIGNvbW1hbmQgc3VwcG9ydHMgcmVjZW50IGZpbGVzLCBib29r bWFya3MsIHZpZXdzIGFuZCBwcm9qZWN0IGZpbGVzIGFzIHZpcnR1YWwKYnVmZmVycy4gQnVmZmVy cyBhcmUgcHJldmlld2VkLiBGdXJ0aGVybW9yZSBuYXJyb3dpbmcgdG8gYnVmZmVycyAoYiksIGZp bGVzIChmKSwKYm9va21hcmtzIChtKSBhbmQgcHJvamVjdCBmaWxlcyAocCkgaXMgc3VwcG9ydGVk IHZpYSB0aGUgY29ycmVzcG9uZGluZyBrZXlzLiBJbgpvcmRlciB0byBkZXRlcm1pbmUgdGhlIHBy b2plY3Qtc3BlY2lmaWMgZmlsZXMgYW5kIGJ1ZmZlcnMsIHRoZQpgY29uc3VsdC1wcm9qZWN0LXJv b3QtZnVuY3Rpb24nIGlzIHVzZWQuIFNlZSBgY29uc3VsdC1idWZmZXItc291cmNlcycgYW5kCmBj b25zdWx0LS1tdWx0aScgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSB2aXJ0dWFsIGJ1ZmZl ciBzb3VyY2VzLiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWJ1ZmZlciAjJ3N3aXRjaC10 by1idWZmZXIpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtYnVmZmVyLW90aGVyLXdp bmRvdyAoKQogICJWYXJpYW50IG9mIGBjb25zdWx0LWJ1ZmZlcicgd2hpY2ggb3BlbnMgaW4gb3Ro ZXIgd2luZG93LiIKICAoaW50ZXJhY3RpdmUpCiAgKGNvbnN1bHQtLWJ1ZmZlciAjJ3N3aXRjaC10 by1idWZmZXItb3RoZXItd2luZG93KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWJ1 ZmZlci1vdGhlci1mcmFtZSAoKQogICJWYXJpYW50IG9mIGBjb25zdWx0LWJ1ZmZlcicgd2hpY2gg b3BlbnMgaW4gb3RoZXIgZnJhbWUuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0tYnVmZmVy ICMnc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci1mcmFtZSkpCgo7Ozs7OyBDb21tYW5kOiBjb25zdWx0 LWttYWNybwoKKGRlZnVuIGNvbnN1bHQtLWttYWNyby1jYW5kaWRhdGVzICgpCiAgIlJldHVybiBh bGlzdCBvZiBrbWFjcm9zIGFuZCBpbmRpY2VzLiIKICAodGhyZWFkLWxhc3QKICAgICAgOzsgTGlz dCBvZiBtYWNyb3MKICAgICAgKGFwcGVuZCAod2hlbiBsYXN0LWtiZC1tYWNybwogICAgICAgICAg ICAgICAgYCgoLGxhc3Qta2JkLW1hY3JvICxrbWFjcm8tY291bnRlciAsa21hY3JvLWNvdW50ZXIt Zm9ybWF0KSkpCiAgICAgICAgICAgICAga21hY3JvLXJpbmcpCiAgICA7OyBBZGQgaW5kaWNlcwog ICAgKHNlcS1tYXAtaW5kZXhlZCAjJ2NvbnMpCiAgICA7OyBGaWx0ZXIgbW91c2UgY2xpY2tzCiAg ICAoc2VxLXJlbW92ZSAobGFtYmRhICh4KSAoc2VxLXNvbWUgIydtb3VzZS1ldmVudC1wIChjYWFy IHgpKSkpCiAgICA7OyBGb3JtYXQgbWFjcm9zCiAgICAobWFwY2FyIChwY2FzZS1sYW1iZGEgKGAo KCxrZXlzICxjb3VudGVyICxmb3JtYXQpIC4gLGluZGV4KSkKICAgICAgICAgICAgICAocHJvcGVy dGl6ZQogICAgICAgICAgICAgICAoZm9ybWF0LWtiZC1tYWNybyBrZXlzIDEpCiAgICAgICAgICAg ICAgICdjb25zdWx0LS1rbWFjcm8taW5kZXggaW5kZXgKICAgICAgICAgICAgICAgJ2NvbnN1bHQt LWFubm90YXRpb24KICAgICAgICAgICAgICAgOzsgSWYgdGhlIGNvdW50ZXIgaXMgMCBhbmQgdGhl IGNvdW50ZXIgZm9ybWF0IGlzIGl0cyBkZWZhdWx0LAogICAgICAgICAgICAgICA7OyB0aGVuIHRo ZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGUgY291bnRlciBpc24ndCBhY3R1YWxseQogICAg ICAgICAgICAgICA7OyBiZWluZyB1c2VkLiAgVGhpcyBjYW4gb25seSBiZSB3cm9uZyB3aGVuIGEg dXNlcgogICAgICAgICAgICAgICA7OyBpbnRlbnRpb25hbGx5IHN0YXJ0cyB0aGUgY291bnRlciB3 aXRoIGEgbmVnYXRpdmUgdmFsdWUgYW5kCiAgICAgICAgICAgICAgIDs7IHRoZW4gaW5jcmVtZW50 cyBpdCB0byAwLgogICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgKChub3QgKHN0 cmluZz0gZm9ybWF0ICIlZCIpKSA7OyBzaG93IGNvdW50ZXIgZm9yIG5vbi1kZWZhdWx0IGZvcm1h dAogICAgICAgICAgICAgICAgIChmb3JtYXQgIiAoY291bnRlcj0lZCwgZm9ybWF0PSVzKSAiIGNv dW50ZXIgZm9ybWF0KSkKICAgICAgICAgICAgICAgICgoLz0gY291bnRlciAwKSA7OyBzaG93IGNv dW50ZXIgaWYgbm9uLXplcm8KICAgICAgICAgICAgICAgICAoZm9ybWF0ICIgKGNvdW50ZXI9JWQp IiBjb3VudGVyKSkpKSkpCiAgICAoY29uc3VsdC0tcmVtb3ZlLWR1cHMpKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LWttYWNybyAoYXJnKQogICJSdW4gYSBjaG9zZW4ga2V5Ym9hcmQg bWFjcm8uCgpXaXRoIHByZWZpeCBBUkcsIHJ1biB0aGUgbWFjcm8gdGhhdCBtYW55IHRpbWVzLgpN YWNyb3MgY29udGFpbmluZyBtb3VzZSBjbGlja3MgYXJlIG9taXR0ZWQuIgogIChpbnRlcmFjdGl2 ZSAicCIpCiAgKGxldCAoKHNlbGVjdGVkIChjb25zdWx0LS1yZWFkCiAgICAgICAgICAgICAgICAg ICAiS2V5Ym9hcmQgbWFjcm86ICIKICAgICAgICAgICAgICAgICAgIChvciAoY29uc3VsdC0ta21h Y3JvLWNhbmRpZGF0ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgKHVzZXItZXJyb3IgIk5vIGtl eWJvYXJkIG1hY3JvcyBkZWZpbmVkIikpCiAgICAgICAgICAgICAgICAgICA6Y2F0ZWdvcnkgJ2Nv bnN1bHQta21hY3JvCiAgICAgICAgICAgICAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICAg ICAgICAgICAgICA6c29ydCBuaWwKICAgICAgICAgICAgICAgICAgIDpoaXN0b3J5ICdjb25zdWx0 LS1rbWFjcm8taGlzdG9yeQogICAgICAgICAgICAgICAgICAgOmFubm90YXRlICMnY29uc3VsdC0t Z2V0LWFubm90YXRpb24KICAgICAgICAgICAgICAgICAgIDpsb29rdXAKICAgICAgICAgICAgICAg ICAgIChsYW1iZGEgKF8gY2FuZGlkYXRlcyBjYW5kKQogICAgICAgICAgICAgICAgICAgICAoZ2V0 LXRleHQtcHJvcGVydHkgMCAnY29uc3VsdC0ta21hY3JvLWluZGV4CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2FyIChtZW1iZXIgY2FuZCBjYW5kaWRhdGVzKSkpKSkp KQogICAgKGlmICg9IDAgc2VsZWN0ZWQpCiAgICAgICAgOzsgSWYgdGhlIGZpcnN0IGVsZW1lbnQg aGFzIGJlZW4gc2VsZWN0ZWQsIGp1c3QgcnVuIHRoZSBsYXN0IG1hY3JvLgogICAgICAgIChrbWFj cm8tY2FsbC1tYWNybyAob3IgYXJnIDEpIHQgbmlsKQogICAgICA7OyBPdGhlcndpc2UsIHJ1biBh IGttYWNybyBmcm9tIHRoZSByaW5nLgogICAgICAobGV0KiAoKHNlbGVjdGVkICgtIHNlbGVjdGVk IDEpKQogICAgICAgICAgICAgKGttYWNybyAobnRoIHNlbGVjdGVkIGttYWNyby1yaW5nKSkKICAg ICAgICAgICAgIDs7IFRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgdmFyaWFibGVzIHRvIHJldHJpZXZl IHRoZSBjb3JyZWN0CiAgICAgICAgICAgICA7OyBzZXR0aW5ncy4gIE1haW5seSwgd2Ugd2FudCB0 aGUgbWFjcm8gY291bnRlciB0byBwZXJzaXN0LCB3aGljaAogICAgICAgICAgICAgOzsgYXV0b21h dGljYWxseSBoYXBwZW5zIHdoZW4gY3ljbGluZyB0aGUgcmluZy4KICAgICAgICAgICAgIChsYXN0 LWtiZC1tYWNybyAoY2FyIGttYWNybykpCiAgICAgICAgICAgICAoa21hY3JvLWNvdW50ZXIgKGNh ZHIga21hY3JvKSkKICAgICAgICAgICAgIChrbWFjcm8tY291bnRlci1mb3JtYXQgKGNhZGRyIGtt YWNybykpKQogICAgICAgIChrbWFjcm8tY2FsbC1tYWNybyAob3IgYXJnIDEpIHQpCiAgICAgICAg OzsgT25jZSBkb25lLCBwdXQgdXBkYXRlZCB2YXJpYWJsZXMgYmFjayBpbnRvIHRoZSByaW5nLgog ICAgICAgIChzZXRmIChudGggc2VsZWN0ZWQga21hY3JvLXJpbmcpCiAgICAgICAgICAgICAgKGxp c3QgbGFzdC1rYmQtbWFjcm8KICAgICAgICAgICAgICAgICAgICBrbWFjcm8tY291bnRlcgogICAg ICAgICAgICAgICAgICAgIGttYWNyby1jb3VudGVyLWZvcm1hdCkpKSkpKQoKOzs7OzsgQ29tbWFu ZDogY29uc3VsdC1pbWVudQoKKGRlZnVuIGNvbnN1bHQtLWltZW51LXNwZWNpYWwgKF9uYW1lIHBv cyBidWYgbmFtZSBmbiAmcmVzdCBhcmdzKQogICJXcmFwcGVyIGZ1bmN0aW9uIGZvciBzcGVjaWFs IGltZW51IGl0ZW1zLgoKUE9TIGlzIHRoZSBwb3NpdGlvbi4KQlVGIGlzIHRoZSBidWZmZXIuCk5B TUUgaXMgdGhlIGl0ZW0gbmFtZS4KRk4gaXMgdGhlIG9yaWdpbmFsIHNwZWNpYWwgaXRlbSBmdW5j dGlvbi4KQVJHUyBhcmUgdGhlIGFyZ3VtZW50cyB0byB0aGUgc3BlY2lhbCBpdGVtIGZ1bmN0aW9u LiIKICAoc3dpdGNoLXRvLWJ1ZmZlciBidWYpCiAgKGFwcGx5IGZuIG5hbWUgcG9zIGFyZ3MpKQoK KGRlZnVuIGNvbnN1bHQtLWltZW51LWZsYXR0ZW4gKHByZWZpeCBsaXN0KQogICJGbGF0dGVuIGlt ZW51IExJU1QuClByZXBlbmQgUFJFRklYIGluIGZyb250IG9mIGFsbCBpdGVtcy4iCiAgKG1hcGNh bgogICAobGFtYmRhIChpdGVtKQogICAgIChpZiAoaW1lbnUtLXN1YmFsaXN0LXAgaXRlbSkKICAg ICAgICAgKGNvbnN1bHQtLWltZW51LWZsYXR0ZW4KICAgICAgICAgIChjb25jYXQgcHJlZml4IChh bmQgcHJlZml4ICIvIikgKGNhciBpdGVtKSkKICAgICAgICAgIChjZHIgaXRlbSkpCiAgICAgICAo bGV0ICgoa2V5IChjb25jYXQKICAgICAgICAgICAgICAgICAgIChhbmQgcHJlZml4IChjb25jYXQg KHByb3BlcnRpemUgcHJlZml4ICdmYWNlICdjb25zdWx0LWltZW51LXByZWZpeCkgIiAiKSkKICAg ICAgICAgICAgICAgICAgIChjYXIgaXRlbSkpKQogICAgICAgICAgICAgKHBheWxvYWQgKGNkciBp dGVtKSkpCiAgICAgICAgIChsaXN0IChjb25zIGtleQogICAgICAgICAgICAgICAgICAgICAocGNh c2UgcGF5bG9hZAogICAgICAgICAgICAgICAgICAgICAgIDs7IFNpbXBsZSBtYXJrZXIgaXRlbQog ICAgICAgICAgICAgICAgICAgICAgICgocHJlZCBtYXJrZXJwKSBwYXlsb2FkKQogICAgICAgICAg ICAgICAgICAgICAgIDs7IFNpbXBsZSBpbnRlZ2VyIGl0ZW0KICAgICAgICAgICAgICAgICAgICAg ICAoKHByZWQgaW50ZWdlcnApIChjb3B5LW1hcmtlciBwYXlsb2FkKSkKICAgICAgICAgICAgICAg ICAgICAgICA7OyBTZW1hbnRpYyB1c2VzIG92ZXJsYXkgZm9yIHBvc2l0aW9ucwogICAgICAgICAg ICAgICAgICAgICAgICgocHJlZCBvdmVybGF5cCkgKGNvcHktbWFya2VyIChvdmVybGF5LXN0YXJ0 IHBheWxvYWQpKSkKICAgICAgICAgICAgICAgICAgICAgICA7OyBXcmFwIHNwZWNpYWwgaXRlbQog ICAgICAgICAgICAgICAgICAgICAgIChgKCxwb3MgLGZuIC4gLGFyZ3MpCiAgICAgICAgICAgICAg ICAgICAgICAgIChhcHBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IHBvcyAjJ2Nv bnN1bHQtLWltZW51LXNwZWNpYWwgKGN1cnJlbnQtYnVmZmVyKSAoY2FyIGl0ZW0pIGZuKQogICAg ICAgICAgICAgICAgICAgICAgICAgYXJncykpCiAgICAgICAgICAgICAgICAgICAgICAgKF8gKGVy cm9yICJVbmtub3duIGltZW51IGl0ZW06ICVTIiBpdGVtKSkpKSkpKSkKICAgbGlzdCkpCgooZGVm dW4gY29uc3VsdC0taW1lbnUtY29tcHV0ZSAoKQogICJDb21wdXRlIGltZW51IGNhbmRpZGF0ZXMu IgogIChjb25zdWx0LS1mb3JiaWQtbWluaWJ1ZmZlcikKICAobGV0KiAoKGltZW51LWF1dG8tcmVz Y2FuIHQpCiAgICAgICAgIChpbWVudS11c2UtbWFya2VycyB0KQogICAgICAgICAoaXRlbXMgKGlt ZW51LS1tYWtlLWluZGV4LWFsaXN0IHQpKSkKICAgIChzZXRxIGl0ZW1zIChyZW1vdmUgaW1lbnUt LXJlc2Nhbi1pdGVtIGl0ZW1zKSkKICAgIDs7IEZpeCB0b3BsZXZlbCBpdGVtcywgZS5nLiwgZW1h Y3MtbGlzcC1tb2RlIHRvcGxldmVsIGl0ZW1zIGFyZSBmdW5jdGlvbnMKICAgICh3aGVuLWxldCAo dG9wbGV2ZWwgKGNkciAoc2VxLWZpbmQgKGxhbWJkYSAoeCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZGVyaXZlZC1tb2RlLXAgKGNhciB4KSkpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bHQtaW1lbnUtdG9wbGV2ZWwpKSkKICAg ICAgKGxldCAoKHRvcHMgKHNlcS1yZW1vdmUgKGxhbWJkYSAoeCkgKGxpc3RwIChjZHIgeCkpKSBp dGVtcykpCiAgICAgICAgICAgIChyZXN0IChzZXEtZmlsdGVyIChsYW1iZGEgKHgpIChsaXN0cCAo Y2RyIHgpKSkgaXRlbXMpKSkKICAgICAgICAoc2V0cSBpdGVtcyAoYXBwZW5kIHJlc3QgKGFuZCB0 b3BzIChsaXN0IChjb25zIHRvcGxldmVsIHRvcHMpKSkpKSkpCiAgICAoY29uc3VsdC0taW1lbnUt ZmxhdHRlbiBuaWwgaXRlbXMpKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudS1pdGVtcyAoKQogICJS ZXR1cm4gY2FjaGVkIGltZW51IGNhbmRpZGF0ZXMuIgogICh1bmxlc3MgKGVxdWFsIChjYXIgY29u c3VsdC0taW1lbnUtY2FjaGUpIChidWZmZXItbW9kaWZpZWQtdGljaykpCiAgICAoc2V0cSBjb25z dWx0LS1pbWVudS1jYWNoZSAoY29ucyAoYnVmZmVyLW1vZGlmaWVkLXRpY2spIChjb25zdWx0LS1p bWVudS1jb21wdXRlKSkpKQogIChjZHIgY29uc3VsdC0taW1lbnUtY2FjaGUpKQoKKGRlZnVuIGNv bnN1bHQtLWltZW51LWFsbC1pdGVtcyAoYnVmZmVycykKICAiUmV0dXJuIGFsbCBpbWVudSBpdGVt cyBmcm9tIGVhY2ggQlVGRkVSUy4iCiAgKHNlcS1tYXBjYXQgKGxhbWJkYSAoYnVmKSAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWYgKGNvbnN1bHQtLWltZW51LWl0ZW1zKSkpIGJ1ZmZlcnMpKQoKKGRl ZnVuIGNvbnN1bHQtLWltZW51LXByb2plY3QtYnVmZmVycyAoKQogICJSZXR1cm4gcHJvamVjdCBi dWZmZXJzIHdpdGggdGhlIHNhbWUgYG1ham9yLW1vZGUnIGFzIHRoZSBjdXJyZW50IGJ1ZmZlci4i CiAgKGlmLWxldCAocm9vdCAoYW5kIGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uIChmdW5j YWxsIGNvbnN1bHQtcHJvamVjdC1yb290LWZ1bmN0aW9uKSkpCiAgICAgIChzZXEtZmlsdGVyIChs YW1iZGEgKGJ1ZikKICAgICAgICAgICAgICAgICAgICAod2hlbi1sZXQgKGZpbGUgKGJ1ZmZlci1m aWxlLW5hbWUgYnVmKSkKICAgICAgICAgICAgICAgICAgICAgIChhbmQgKGVxIChidWZmZXItbG9j YWwtdmFsdWUgJ21ham9yLW1vZGUgYnVmKSBtYWpvci1tb2RlKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3RyaW5nLXByZWZpeC1wIHJvb3QgZmlsZSkpKSkKICAgICAgICAgICAgICAgICAg KGJ1ZmZlci1saXN0KSkKICAgIChsaXN0IChjdXJyZW50LWJ1ZmZlcikpKSkKCihkZWZ1biBjb25z dWx0LS1pbWVudS1qdW1wIChpdGVtKQogICJKdW1wIHRvIGltZW51IElURU0gdmlhIGBjb25zdWx0 LS1qdW1wJy4KCkluIGNvbnRyYXN0IHRvIHRoZSBidWlsdGluIGBpbWVudScganVtcCBmdW5jdGlv biwKdGhpcyBmdW5jdGlvbiBjYW4ganVtcCBhY3Jvc3MgYnVmZmVycy4iCiAgKHBjYXNlIGl0ZW0K ICAgIChgKCxuYW1lICxwb3MgLGZuIC4gLGFyZ3MpIChhcHBseSBmbiBuYW1lIHBvcyBhcmdzKSkK ICAgIChgKCxfIC4gLHBvcykgKGNvbnN1bHQtLWp1bXAgcG9zKSkKICAgIChfIChlcnJvciAiVW5r bm93biBpbWVudSBpdGVtOiAlUyIgaXRlbSkpKSkKCihkZWZ1biBjb25zdWx0LS1pbWVudSAoaXRl bXMpCiAgIkNob29zZSBmcm9tIGltZW51IElURU1TIHdpdGggcHJldmlldy4KClRoZSBzeW1ib2wg YXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1dHVyZSBoaXN0b3J5LiIKICAoY29uc3VsdC0taW1l bnUtanVtcAogICAoY29uc3VsdC0tcmVhZAogICAgIkdvIHRvIGl0ZW06ICIKICAgIChvciBpdGVt cyAodXNlci1lcnJvciAiSW1lbnUgaXMgZW1wdHkiKSkKICAgIDpwcmV2aWV3CiAgICAobGV0ICgo cHJldmlldyAoY29uc3VsdC0tcHJldmlldy1wb3NpdGlvbikpKQogICAgICAobGFtYmRhIChjYW5k IHJlc3RvcmUpCiAgICAgICAgOzsgT25seSBwcmV2aWV3IHNpbXBsZSBtZW51IGl0ZW1zIHdoaWNo IGFyZSBtYXJrZXJzLAogICAgICAgIDs7IGluIG9yZGVyIHRvIGF2b2lkIGFueSBiYWQgc2lkZSBl ZmZlY3RzLgogICAgICAgIChmdW5jYWxsIHByZXZpZXcgKGFuZCAobWFya2VycCAoY2RyIGNhbmQp KSAoY2RyIGNhbmQpKSByZXN0b3JlKSkpCiAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICA6bmFycm93 CiAgICAobGV0ICgobmFycm93IChjZHIgKHNlcS1maW5kIChsYW1iZGEgKHgpIChkZXJpdmVkLW1v ZGUtcCAoY2FyIHgpKSkgY29uc3VsdC1pbWVudS1uYXJyb3cpKSkpCiAgICAgIChjb25zIChsYW1i ZGEgKGNhbmQpCiAgICAgICAgICAgICAgKHdoZW4tbGV0IChuIChjZHIgKGFzc29jIGNvbnN1bHQt LW5hcnJvdyBuYXJyb3cpKSkKICAgICAgICAgICAgICAgIChsZXQqICgoYyAoY2FyIGNhbmQpKQog ICAgICAgICAgICAgICAgICAgICAgIChsIChsZW5ndGggbikpKQogICAgICAgICAgICAgICAgICAo YW5kICg+IChsZW5ndGggYykgbCkKICAgICAgICAgICAgICAgICAgICAgICAoZXEgdCAoY29tcGFy ZS1zdHJpbmdzIG4gMCBsIGMgMCBsKSkKICAgICAgICAgICAgICAgICAgICAgICAoPSAoYXJlZiBj IGwpIDMyKSkpKSkKICAgICAgICAgICAgbmFycm93KSkKICAgIDpjYXRlZ29yeSAnaW1lbnUKICAg IDpsb29rdXAgIydjb25zdWx0LS1sb29rdXAtZWxlbQogICAgOmhpc3RvcnkgJ2NvbnN1bHQtLWlt ZW51LWhpc3RvcnkKICAgIDphZGQtaGlzdG9yeSAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkKICAg IDpzb3J0IG5pbCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtaW1lbnUgKCkKICAi Q2hvb3NlIGl0ZW0gZnJvbSBmbGF0dGVuZWQgYGltZW51JyB1c2luZyBgY29tcGxldGluZy1yZWFk JyB3aXRoIHByZXZpZXcuCgpUaGUgY29tbWFuZCBzdXBwb3J0cyBwcmV2aWV3IGFuZCBuYXJyb3dp bmcuIFNlZSB0aGUgdmFyaWFibGUKYGNvbnN1bHQtaW1lbnUtbmFycm93Jywgd2hpY2ggY29uZmln dXJlcyB0aGUgbmFycm93aW5nLgoKU2VlIGFsc28gYGNvbnN1bHQtcHJvamVjdC1pbWVudScuIgog IChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0taW1lbnUgKGNvbnN1bHQtLWltZW51LWl0ZW1zKSkp Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1wcm9qZWN0LWltZW51ICgpCiAgIkNob29z ZSBpdGVtIGZyb20gdGhlIGltZW51cyBvZiBhbGwgYnVmZmVycyBmcm9tIHRoZSBzYW1lIHByb2pl Y3QuCgpJbiBvcmRlciB0byBkZXRlcm1pbmUgdGhlIGJ1ZmZlcnMgYmVsb25naW5nIHRvIHRoZSBz YW1lIHByb2plY3QsIHRoZQpgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24nIGlzIHVzZWQu IE9ubHkgdGhlIGJ1ZmZlcnMgd2l0aCB0aGUKc2FtZSBtYWpvciBtb2RlIGFzIHRoZSBjdXJyZW50 IGJ1ZmZlciBhcmUgdXNlZC4gU2VlIGFsc28KYGNvbnN1bHQtaW1lbnUnIGZvciBtb3JlIGRldGFp bHMuIgogIChpbnRlcmFjdGl2ZSkKICAoY29uc3VsdC0taW1lbnUgKGNvbnN1bHQtLWltZW51LWFs bC1pdGVtcyAoY29uc3VsdC0taW1lbnUtcHJvamVjdC1idWZmZXJzKSkpKQoKKGRlZnVuIGNvbnN1 bHQtLWdyZXAtbWF0Y2hlcyAobGluZXMpCiAgIkZpbmQgZ3JlcCBtYXRjaCBmb3IgUkVHRVhQIGlu IExJTkVTLiIKICAobGV0ICgoY2FuZGlkYXRlcykpCiAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAg IChkb2xpc3QgKHN0ciBsaW5lcykKICAgICAgICAod2hlbiAoc3RyaW5nLW1hdGNoIGNvbnN1bHQt LWdyZXAtcmVnZXhwIHN0cikKICAgICAgICAgIChsZXQqICgoZmlsZSAoZXhwYW5kLWZpbGUtbmFt ZSAoY29uc3VsdC0tc3RyaXAtYW5zaS1lc2NhcGUgKG1hdGNoLXN0cmluZyAxIHN0cikpKSkKICAg ICAgICAgICAgICAgICAobGluZSAoc3RyaW5nLXRvLW51bWJlciAoY29uc3VsdC0tc3RyaXAtYW5z aS1lc2NhcGUgKG1hdGNoLXN0cmluZyAyIHN0cikpKSkKICAgICAgICAgICAgICAgICAoc3RyIChz dWJzdHJpbmcgc3RyIChtYXRjaC1lbmQgMCkpKQogICAgICAgICAgICAgICAgIChsb2MgKGNvbnN1 bHQtLWZvcm1hdC1sb2NhdGlvbiAoc3RyaW5nLXJlbW92ZS1wcmVmaXggZGVmYXVsdC1kaXJlY3Rv cnkgZmlsZSkgbGluZSkpCiAgICAgICAgICAgICAgICAgKHBvcykpCiAgICAgICAgICAgICh3aGls ZSAoc3RyaW5nLW1hdGNoIGNvbnN1bHQtLWdyZXAtbWF0Y2gtcmVnZXhwIHN0cikKICAgICAgICAg ICAgICAodW5sZXNzIHBvcwogICAgICAgICAgICAgICAgKHNldHEgcG9zIChtYXRjaC1iZWdpbm5p bmcgMCkpKQogICAgICAgICAgICAgIChzZXRxIHN0ciAoY29uY2F0IChzdWJzdHJpbmcgc3RyIDAg KG1hdGNoLWJlZ2lubmluZyAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJv cGVydGl6ZSAobWF0Y2gtc3RyaW5nIDEgc3RyKSAnZmFjZSAnY29uc3VsdC1wcmV2aWV3LW1hdGNo KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJzdHJpbmcgc3RyIChtYXRjaC1l bmQgMCkpKSkpCiAgICAgICAgICAgIChzZXRxIHN0ciAoY29uc3VsdC0tc3RyaXAtYW5zaS1lc2Nh cGUgc3RyKSkKICAgICAgICAgICAgKHB1c2ggKGxpc3QgKGNvbmNhdCBsb2Mgc3RyKSBmaWxlIGxp bmUgKG9yIHBvcyAwKSkgY2FuZGlkYXRlcykpKSkpCiAgICAobnJldmVyc2UgY2FuZGlkYXRlcykp KQoKOzs7OzsgQ29tbWFuZDogY29uc3VsdC1ncmVwCgooZGVmdW4gY29uc3VsdC0tZ3JlcC1tYXJr ZXIgKG9wZW4pCiAgIkdyZXAgY2FuZGlkYXRlIHRvIG1hcmtlci4KCk9QRU4gaXMgdGhlIGZ1bmN0 aW9uIHRvIG9wZW4gbmV3IGZpbGVzLiIKICAobGFtYmRhIChfaW5wdXQgY2FuZGlkYXRlcyBjYW5k KQogICAgKHdoZW4tbGV0KiAoKGxvYyAoY2RyIChhc3NvYyBjYW5kIGNhbmRpZGF0ZXMpKSkKICAg ICAgICAgICAgICAgIChidWYgKGZ1bmNhbGwgb3BlbiAoY2FyIGxvYykpKSkKICAgICAgKHdpdGgt Y3VycmVudC1idWZmZXIgYnVmCiAgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICAgICAgIChz YXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAod2lkZW4pCiAgICAgICAgICAgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpCiAgICAgICAgICAgIDs7IExvY2F0aW9uIGRhdGEgbWlnaHQgYmUgaW52YWxp ZCBieSBub3chCiAgICAgICAgICAgIChpZ25vcmUtZXJyb3JzCiAgICAgICAgICAgICAgKGZvcndh cmQtbGluZSAoLSAoY2FkciBsb2MpIDEpKQogICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgKGNh ZGRyIGxvYykpKQogICAgICAgICAgICAocG9pbnQtbWFya2VyKSkpKSkpKQoKKGRlZnVuIGNvbnN1 bHQtLWdyZXAgKHByb21wdCBjbWQgZGlyIGluaXRpYWwpCiAgIlJ1biBncmVwIENNRCBpbiBESVIg d2l0aCBJTklUSUFMIGlucHV0LgoKUFJPTVBUIGlzIHRoZSBwcm9tcHQgc3RyaW5nLgpUaGUgc3lt Ym9sIGF0IHBvaW50IGlzIGFkZGVkIHRvIHRoZSBmdXR1cmUgaGlzdG9yeS4iCiAgKGxldCogKChw cm9tcHQtZGlyIChjb25zdWx0LS1kaXJlY3RvcnktcHJvbXB0IHByb21wdCBkaXIpKQogICAgICAg ICAoZGVmYXVsdC1kaXJlY3RvcnkgKGNkciBwcm9tcHQtZGlyKSkpCiAgICAoY29uc3VsdC0td2l0 aC1maWxlLXByZXZpZXcgKG9wZW4pCiAgICAgIChjb25zdWx0LS1qdW1wCiAgICAgICAoY29uc3Vs dC0tcmVhZAogICAgICAgIChjYXIgcHJvbXB0LWRpcikKICAgICAgICAoY29uc3VsdC0tYXN5bmMt Y29tbWFuZCBjbWQKICAgICAgICAgIChjb25zdWx0LS1hc3luYy10cmFuc2Zvcm0gY29uc3VsdC0t Z3JlcC1tYXRjaGVzKSkKICAgICAgICA6bG9va3VwIChjb25zdWx0LS1ncmVwLW1hcmtlciBvcGVu KQogICAgICAgIDpwcmV2aWV3IChjb25zdWx0LS1wcmV2aWV3LXBvc2l0aW9uKQogICAgICAgIDpp bml0aWFsIChjb25jYXQgY29uc3VsdC1hc3luYy1kZWZhdWx0LXNwbGl0IGluaXRpYWwpCiAgICAg ICAgOmFkZC1oaXN0b3J5IChjb25jYXQgY29uc3VsdC1hc3luYy1kZWZhdWx0LXNwbGl0ICh0aGlu Zy1hdC1wb2ludCAnc3ltYm9sKSkKICAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICAgOmNh dGVnb3J5ICd4cmVmLWxvY2F0aW9uCiAgICAgICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0t Z3JlcC1oaXN0b3J5KQogICAgICAgIDpzb3J0IG5pbCkpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVm dW4gY29uc3VsdC1ncmVwICgmb3B0aW9uYWwgZGlyIGluaXRpYWwpCiAgIlNlYXJjaCBmb3IgcmVn ZXhwIHdpdGggZ3JlcCBpbiBESVIgd2l0aCBJTklUSUFMIGlucHV0LgoKVGhlIGlucHV0IHN0cmlu ZyBpcyBzcGxpdCwgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN0cmluZyBpcyBwYXNzZWQgdG8KdGhl IGFzeW5jaHJvbm91cyBncmVwIHByb2Nlc3MgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgc3Ry aW5nIGlzCnBhc3NlZCB0byB0aGUgY29tcGxldGlvbi1zdHlsZSBmaWx0ZXJpbmcuIFRoZSBpbnB1 dCBzdHJpbmcgaXMgc3BsaXQgYXQKYSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIsIHdoaWNoIGlzIGdp dmVuIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlCmlucHV0IHN0cmluZy4gVGhlIGZvcm1h dCBpcyBzaW1pbGFyIHRvIFBlcmwtc3R5bGUgcmVndWxhciBleHByZXNzaW9ucywKZS5nLiwgL3Jl Z2V4cC8uIEZ1cnRoZXJtb3JlIGNvbW1hbmQgbGluZSBvcHRpb25zIGNhbiBiZSBwYXNzZWQgdG8K Z3JlcCwgc3BlY2lmaWVkIGJlaGluZCAtLS4KCkV4YW1wbGU6ICNhc3luYy1yZWdleHAgLS0gZ3Jl cC1vcHRzI2ZpbHRlci1zdHJpbmcKClRoZSBzeW1ib2wgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhl IGZ1dHVyZSBoaXN0b3J5LiBJZiBgY29uc3VsdC1ncmVwJwppcyBjYWxsZWQgaW50ZXJhY3RpdmVs eSB3aXRoIGEgcHJlZml4IGFyZ3VtZW50LCB0aGUgdXNlciBjYW4gc3BlY2lmeQp0aGUgZGlyZWN0 b3J5IHRvIHNlYXJjaCBpbi4gQnkgZGVmYXVsdCB0aGUgcHJvamVjdCBkaXJlY3RvcnkgaXMgdXNl ZAppZiBgY29uc3VsdC1wcm9qZWN0LXJvb3QtZnVuY3Rpb24nIGlzIGRlZmluZWQgYW5kIHJldHVy bnMgbm9uLW5pbC4KT3RoZXJ3aXNlIHRoZSBgZGVmYXVsdC1kaXJlY3RvcnknIGlzIHNlYXJjaGVk LiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChjb25zdWx0LS1ncmVwICJHcmVwIiBjb25zdWx0LWdy ZXAtY29tbWFuZCBkaXIgaW5pdGlhbCkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gY29uc3VsdC1n aXQtZ3JlcCAoJm9wdGlvbmFsIGRpciBpbml0aWFsKQogICJTZWFyY2ggZm9yIHJlZ2V4cCB3aXRo IGdyZXAgaW4gRElSIHdpdGggSU5JVElBTCBpbnB1dC4KClNlZSBgY29uc3VsdC1ncmVwJyBmb3Ig bW9yZSBkZXRhaWxzLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChjb25zdWx0LS1ncmVwICJHaXQt Z3JlcCIgY29uc3VsdC1naXQtZ3JlcC1jb21tYW5kIGRpciBpbml0aWFsKSkKCjs7OyMjI2F1dG9s b2FkCihkZWZ1biBjb25zdWx0LXJpcGdyZXAgKCZvcHRpb25hbCBkaXIgaW5pdGlhbCkKICAiU2Vh cmNoIGZvciByZWdleHAgd2l0aCByZyBpbiBESVIgd2l0aCBJTklUSUFMIGlucHV0LgoKU2VlIGBj b25zdWx0LWdyZXAnIGZvciBtb3JlIGRldGFpbHMuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGNv bnN1bHQtLWdyZXAgIlJpcGdyZXAiIGNvbnN1bHQtcmlwZ3JlcC1jb21tYW5kIGRpciBpbml0aWFs KSkKCjs7Ozs7IENvbW1hbmQ6IGNvbnN1bHQtZmluZAoKKGRlZnVuIGNvbnN1bHQtLWZpbmQgKHBy b21wdCBjbWQgaW5pdGlhbCkKICAiUnVuIGZpbmQgQ01EIGluIGN1cnJlbnQgZGlyZWN0b3J5IHdp dGggSU5JVElBTCBpbnB1dC4KClBST01QVCBpcyB0aGUgcHJvbXB0LgpDTUQgaXMgdGhlIGZpbmQg YXJndW1lbnQgc3RyaW5nLgpUaGUgZmlsZW5hbWUgYXQgcG9pbnQgaXMgYWRkZWQgdG8gdGhlIGZ1 dHVyZSBoaXN0b3J5LiIKICAoZmluZC1maWxlCiAgIChjb25zdWx0LS1yZWFkCiAgICBwcm9tcHQK ICAgIChjb25zdWx0LS1hc3luYy1jb21tYW5kIGNtZAogICAgICAoY29uc3VsdC0tYXN5bmMtbWFw IChsYW1iZGEgKHgpIChzdHJpbmctcmVtb3ZlLXByZWZpeCAiLi8iIHgpKSkpCiAgICA6c29ydCBu aWwKICAgIDpyZXF1aXJlLW1hdGNoIHQKICAgIDppbml0aWFsIChjb25jYXQgY29uc3VsdC1hc3lu Yy1kZWZhdWx0LXNwbGl0IGluaXRpYWwpCiAgICA6YWRkLWhpc3RvcnkgKGNvbmNhdCBjb25zdWx0 LWFzeW5jLWRlZmF1bHQtc3BsaXQgKHRoaW5nLWF0LXBvaW50ICdmaWxlbmFtZSkpCiAgICA6Y2F0 ZWdvcnkgJ2ZpbGUKICAgIDpoaXN0b3J5ICcoOmlucHV0IGNvbnN1bHQtLWZpbmQtaGlzdG9yeSkp KSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBjb25zdWx0LWZpbmQgKCZvcHRpb25hbCBkaXIgaW5p dGlhbCkKICAiU2VhcmNoIGZvciByZWdleHAgd2l0aCBmaW5kIGluIERJUiB3aXRoIElOSVRJQUwg aW5wdXQuCgpUaGUgZmluZCBwcm9jZXNzIGlzIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHksIHNpbWls YXIgdG8gYGNvbnN1bHQtZ3JlcCcuClNlZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRhaWxz IHJlZ2FyZGluZyB0aGUgYXN5bmNocm9ub3VzIHNlYXJjaC4iCiAgKGludGVyYWN0aXZlICJQIikK ICAobGV0KiAoKHByb21wdC1kaXIgKGNvbnN1bHQtLWRpcmVjdG9yeS1wcm9tcHQgIkZpbmQiIGRp cikpCiAgICAgICAgIChkZWZhdWx0LWRpcmVjdG9yeSAoY2RyIHByb21wdC1kaXIpKSkKICAgIChj b25zdWx0LS1maW5kIChjYXIgcHJvbXB0LWRpcikgY29uc3VsdC1maW5kLWNvbW1hbmQgaW5pdGlh bCkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbG9jYXRlICgmb3B0aW9uYWwgaW5p dGlhbCkKICAiU2VhcmNoIGZvciByZWdleHAgd2l0aCBsb2NhdGUgd2l0aCBJTklUSUFMIGlucHV0 LgoKVGhlIGxvY2F0ZSBwcm9jZXNzIGlzIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHksIHNpbWlsYXIg dG8gYGNvbnN1bHQtZ3JlcCcuClNlZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRhaWxzIHJl Z2FyZGluZyB0aGUgYXN5bmNocm9ub3VzIHNlYXJjaC4iCiAgKGludGVyYWN0aXZlKQogIChjb25z dWx0LS1maW5kICJMb2NhdGU6ICIgY29uc3VsdC1sb2NhdGUtY29tbWFuZCBpbml0aWFsKSkKCjs7 Ozs7IENvbW1hbmQ6IGNvbnN1bHQtbWFuCgooZGVmdW4gY29uc3VsdC0tbWFuLWZvcm1hdCAobGlu ZXMpCiAgIkZvcm1hdCBtYW4gY2FuZGlkYXRlcyBmcm9tIExJTkVTLiIKICAobGV0ICgoY2FuZGlk YXRlcykpCiAgICAoc2F2ZS1tYXRjaC1kYXRhCiAgICAgIChkb2xpc3QgKHN0ciBsaW5lcykKICAg ICAgICAod2hlbiAoc3RyaW5nLW1hdGNoICJeXFwoLio/XFwpICstICtcXCguKlxcKSQiIHN0cikK ICAgICAgICAgIChsZXQgKChuYW1lIChtYXRjaC1zdHJpbmcgMSBzdHIpKQogICAgICAgICAgICAg ICAgKGRlc2MgKG1hdGNoLXN0cmluZyAyIHN0cikpKQogICAgICAgICAgICAocHVzaCAoY29ucwog ICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiJS0zMHMgJXMiCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwcm9wZXJ0aXplIG5hbWUgJ2ZhY2UgJ2NvbnN1bHQta2V5KQogICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXNjKQogICAgICAgICAgICAgICAgICAgbmFtZSkKICAgICAgICAgICAg ICAgICAgY2FuZGlkYXRlcykpKSkpCiAgICAobnJldmVyc2UgY2FuZGlkYXRlcykpKQoKOzs7IyMj YXV0b2xvYWQKKGRlZnVuIGNvbnN1bHQtbWFuICgmb3B0aW9uYWwgaW5pdGlhbCkKICAiU2VhcmNo IGZvciByZWdleHAgd2l0aCBtYW4gd2l0aCBJTklUSUFMIGlucHV0LgoKVGhlIG1hbiBwcm9jZXNz IGlzIHN0YXJ0ZWQgYXN5bmNocm9ub3VzbHksIHNpbWlsYXIgdG8gYGNvbnN1bHQtZ3JlcCcuClNl ZSBgY29uc3VsdC1ncmVwJyBmb3IgbW9yZSBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgYXN5bmNocm9u b3VzIHNlYXJjaC4iCiAgKGludGVyYWN0aXZlKQogIChtYW4gKGNvbnN1bHQtLXJlYWQKICAgICAg ICAiTWFudWFsIGVudHJ5OiAiCiAgICAgICAgKGNvbnN1bHQtLWFzeW5jLWNvbW1hbmQgY29uc3Vs dC1tYW4tY29tbWFuZAogICAgICAgICAgKGNvbnN1bHQtLWFzeW5jLXRyYW5zZm9ybSBjb25zdWx0 LS1tYW4tZm9ybWF0KSkKICAgICAgICA6cmVxdWlyZS1tYXRjaCB0CiAgICAgICAgOmxvb2t1cCAj J2NvbnN1bHQtLWxvb2t1cC1jZHIKICAgICAgICA6aW5pdGlhbCAoY29uY2F0IGNvbnN1bHQtYXN5 bmMtZGVmYXVsdC1zcGxpdCBpbml0aWFsKQogICAgICAgIDphZGQtaGlzdG9yeSAoY29uY2F0IGNv bnN1bHQtYXN5bmMtZGVmYXVsdC1zcGxpdCAodGhpbmctYXQtcG9pbnQgJ3N5bWJvbCkpCiAgICAg ICAgOmhpc3RvcnkgJyg6aW5wdXQgY29uc3VsdC0tbWFuLWhpc3RvcnkpKSkpCgo7Ozs7IEludGVn cmF0aW9uIHdpdGggdGhlIGRlZmF1bHQgY29tcGxldGlvbiBzeXN0ZW0KCihkZWZ1biBjb25zdWx0 LS1kZWZhdWx0LWNvbXBsZXRpb24tY2FuZGlkYXRlICgpCiAgIlJldHVybiBjdXJyZW50IGNhbmRp ZGF0ZSBmcm9tIGRlZmF1bHQgY29tcGxldGlvbiBzeXN0ZW0uIgogICh3aGVuIChhbmQgKG5vdCBp Y29tcGxldGUtbW9kZSkgKGVxIGNvbXBsZXRpbmctcmVhZC1mdW5jdGlvbiAjJ2NvbXBsZXRpbmct cmVhZC1kZWZhdWx0KSkKICAgIChsZXQgKChjYW5kIChtaW5pYnVmZmVyLWNvbnRlbnRzLW5vLXBy b3BlcnRpZXMpKSkKICAgICAgKHdoZW4gKHRlc3QtY29tcGxldGlvbiBjYW5kCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1jb21wbGV0aW9uLXRhYmxlCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbWluaWJ1ZmZlci1jb21wbGV0aW9uLXByZWRpY2F0ZSkKICAgICAg ICBjYW5kKSkpKQoKKGRlZnVuIGNvbnN1bHQtLWRlZmF1bHQtY29tcGxldGlvbi1maWx0ZXIgKGNh dGVnb3J5IF9oaWdobGlnaHQpCiAgIlJldHVybiBkZWZhdWx0IGZpbHRlciBmdW5jdGlvbiBnaXZl biB0aGUgY29tcGxldGlvbiBDQVRFR09SWS4KClRoZSBjb21wbGV0aW9uIGNhdGVnb3J5IGlzIHVz ZWQgdG8gZmluZCB0aGUgY29tcGxldGlvbiBzdHlsZSB2aWEKYGNvbXBsZXRpb24tY2F0ZWdvcnkt ZGVmYXVsdHMnIGFuZCBgY29tcGxldGlvbi1jYXRlZ29yeS1vdmVycmlkZXMnLiIKICAobGFtYmRh IChzdHIgY2FuZHMpCiAgICA7OyBjb21wbGV0aW9uLWFsbC1jb21wbGV0aW9ucyByZXR1cm5zIGFu IGltcHJvcGVyIGxpc3QKICAgIDs7IHdoZXJlIHRoZSBsYXN0IGxpbmsgaXMgbm90IG5lY2Vzc2Fy aWx5IG5pbC4gRml4IHRoaXMhCiAgICAobmNvbmMgKGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25z CiAgICAgICAgICAgIHN0ciBjYW5kcyBuaWwgKGxlbmd0aCBzdHIpCiAgICAgICAgICAgIGAobWV0 YWRhdGEgKGNhdGVnb3J5IC4gLGNhdGVnb3J5KSkpCiAgICAgICAgICAgbmlsKSkpCgo7OyBBbm5v dW5jZSBub3cgdGhhdCBjb25zdWx0IGhhcyBiZWVuIGxvYWRlZAoocHJvdmlkZSAnY29uc3VsdCkK Cjs7OzsgSW50ZWdyYXRpb24gd2l0aCBvdGhlciBjb21wbGV0aW9uIHN5c3RlbXMKCih3aXRoLWV2 YWwtYWZ0ZXItbG9hZCAnaWNvbXBsZXRlIChyZXF1aXJlICdjb25zdWx0LWljb21wbGV0ZSkpCih3 aXRoLWV2YWwtYWZ0ZXItbG9hZCAnc2VsZWN0cnVtIChyZXF1aXJlICdjb25zdWx0LXNlbGVjdHJ1 bSkpCgo7OyBMb2NhbCBWYXJpYWJsZXM6Cjs7IG91dGxpbmUtcmVnZXhwOiAiOzs7OyogXFx8KGRl ZlxcKHVuXFx8Y3VzdG9tXFx8dmFyXFwpIGNvbnN1bHQtW2Etel0iCjs7IEVuZDoKOzs7IGNvbnN1 bHQuZWwgZW5kcyBoZXJlCg== --=_8eacb995e016baed37890613fffd2ad6--