From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Stefan Kangas Newsgroups: gmane.emacs.bugs Subject: bug#40995: [PATCH] Delete libraries obsolete since 23.1 and 23.2 Date: Fri, 1 May 2020 14:02:42 +0200 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000013cdf905a494f686" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="71053"; mail-complaints-to="usenet@ciao.gmane.io" To: 40995@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri May 01 14:08:19 2020 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 1jUUSp-000IKu-ID for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 01 May 2020 14:08:19 +0200 Original-Received: from localhost ([::1]:38214 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUUSo-0001MF-Kl for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 01 May 2020 08:08:18 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:49708) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUUSd-0001Lc-R3 for bug-gnu-emacs@gnu.org; Fri, 01 May 2020 08:08:11 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUUSZ-0001UH-Cf for bug-gnu-emacs@gnu.org; Fri, 01 May 2020 08:08:07 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:36831) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUUSY-0001Sv-RX for bug-gnu-emacs@gnu.org; Fri, 01 May 2020 08:08:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jUUSY-00054B-Km for bug-gnu-emacs@gnu.org; Fri, 01 May 2020 08:08:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Kangas Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 01 May 2020 12:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 40995 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.158833482819413 (code B ref -1); Fri, 01 May 2020 12:08:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 1 May 2020 12:07:08 +0000 Original-Received: from localhost ([127.0.0.1]:48377 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jUURd-000531-Md for submit@debbugs.gnu.org; Fri, 01 May 2020 08:07:08 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:40640) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jUURV-00052Q-3n for submit@debbugs.gnu.org; Fri, 01 May 2020 08:07:04 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47664) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUUQw-000051-EW for bug-gnu-emacs@gnu.org; Fri, 01 May 2020 08:06:56 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUUNd-0003Ie-1z for bug-gnu-emacs@gnu.org; Fri, 01 May 2020 08:06:22 -0400 Original-Received: from mail-yb1-f177.google.com ([209.85.219.177]:42959) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUUNb-0003FA-O3 for bug-gnu-emacs@gnu.org; Fri, 01 May 2020 08:02:56 -0400 Original-Received: by mail-yb1-f177.google.com with SMTP id i16so4840478ybq.9 for ; Fri, 01 May 2020 05:02:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=rpFe102HyEzto5QjjzTgu8EcgqQXMDJP4JEAVr+Dib0=; b=ccgPICB+DlvZzEBAqmyJPW/8roQohqNUbDCBX3N8+egVz1vgVIhbctkrM+32QbpgvR FqMEXjsJaEPeULF4/OLXez4HlAHomqEFIXMTzTv2fYJdfryQngutFF5KVEgl9Kpew3n2 yLvLpfcpsaXNXAPfXDFBVuoNpTumjoIEXDRjA2PtBqTl2Iudg2GLddaMSQD3Ml2Zf7tM 8Y81DCB7fBg4DrRDHN7dhH/fupyOQhj6oC66mqV0WD9/EfC3aTfK4hCY17K8xWR0Wxm/ hyr55LmYNDHa91pYPOPy4DMScpP8x6V/dkFZ5ugnjFJSelQSh3MUT0fmVLd3u4uT6DVg Rekg== X-Gm-Message-State: AGi0PuZBPX/xdpGFR+QhR0SVo1+Pf4H2l1Ov6NsGd4J5otE0nxP4nWxv NMsPvRrGpY5tbjZgpHYuQTw2CUIP7cbQeIuS3fnpxPGdAMc= X-Google-Smtp-Source: APiQypKLssYfNPUTBoWCDSM2v/qxLOet45FoiQYX6QP8KLw+dU1ru7VWcPb2X1QjgLg/f14t9f+aLPqDn1/e1a2tmNE= X-Received: by 2002:a25:68c3:: with SMTP id d186mr3545741ybc.181.1588334574147; Fri, 01 May 2020 05:02:54 -0700 (PDT) Received-SPF: pass client-ip=209.85.219.177; envelope-from=stefankangas@gmail.com; helo=mail-yb1-f177.google.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/05/01 08:02:54 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:179428 Archived-At: --00000000000013cdf905a494f686 Content-Type: text/plain; charset="UTF-8" 2010-05-08 - Emacs 23.2 released 2009-07-29 - Emacs 23.1 released I think we can now safely remove the following libraries, obsolete since the above dates: [23.2] * lisp/obsolete/ledit.el [23.2] * lisp/obsolete/lmenu.el [23.2] * lisp/obsolete/lucid.el [23.1] * lisp/obsolete/old-whitespace.el The libraries ledit.el, lmenu.el and lucid.el concern compatibility with the long defunct Lucid Emacs, and old-whitespace.el is the old version of whitespace.el. Please see the attached patch. Best regards, Stefan Kangas PS. There are also two libraries, fast-lock.el and lazy-lock.el obsolete since Emacs 22, released in 2007. Perhaps they should also be removed. --00000000000013cdf905a494f686 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Delete-libraries-obsolete-since-23.1-or-23.2.patch" Content-Disposition: attachment; filename="0001-Delete-libraries-obsolete-since-23.1-or-23.2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k9o5agcs0 RnJvbSBlMzVjZGZhMWRlNTNkMTBmMjQ3YzYwZmY4OTMzODQ3YjMzZmM2NTRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVmYW4gS2FuZ2FzIDxzdGVmYW5rYW5nYXNAZ21haWwuY29t PgpEYXRlOiBGcmksIDEgTWF5IDIwMjAgMTM6Mjk6MDYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBE ZWxldGUgbGlicmFyaWVzIG9ic29sZXRlIHNpbmNlIDIzLjEgb3IgMjMuMgoKRW1hY3MgMjMuMiB3 YXMgcmVsZWFzZWQgMTAgeWVhcnMgYWdvLiAgb2xkLXdoaXRlc3BhY2UuZWwgaGFzIGEKcmVwbGFj ZW1lbnQgaW4gd2hpdGVzcGFjZS5lbCBhbmQgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LiAgVGhlIG90 aGVyCmxpYnJhcmllcyBpbXBsZW1lbnQgY29tcGF0aWJpbGl0eSB3aXRoIEx1Y2lkIEVtYWNzLCBh IG1vZGlmaWVkIHZlcnNpb24Kb2YgRW1hY3MgbGFzdCByZWxlYXNlZCBpbiB0aGUgMTk5MHMuCgoq IGxpc3Avb2Jzb2xldGUvbGVkaXQuZWw6CiogbGlzcC9vYnNvbGV0ZS9sbWVudS5lbDoKKiBsaXNw L29ic29sZXRlL2x1Y2lkLmVsOgoqIGxpc3Avb2Jzb2xldGUvb2xkLXdoaXRlc3BhY2UuZWw6IERl bGV0ZSBmaWxlcy4gIFRoZXNlIGxpYnJhcmllcyBoYXZlCmJlZW4gb2Jzb2xldGUgc2luY2UgRW1h Y3MgMjMuMSBvciAyMy4yLgoqIGV0Yy9ORVdTOiBBbm5vdW5jZSB0aGVpciBkZWxldGlvbi4KCiog YWRtaW4vYXV0aG9ycy5lbCAoYXV0aG9ycy1pZ25vcmVkLWZpbGVzKQooYXV0aG9ycy1maXhlZC1l bnRyaWVzLCBhdXRob3JzLXZhbGlkLWZpbGUtbmFtZXMpOgoqIGxpc3AvZW11bGF0aW9uL3ZpcGVy LmVsICh2aXBlci1tb2RlKToKKiBsaXNwL2ZmYXAuZWwgKGZmYXAtbWVudS1hc2spOiBSZW1vdmUg cmVmZXJlbmNlcyB0byBkZWxldGVkIGZpbGVzLgotLS0KIGFkbWluL2F1dGhvcnMuZWwgICAgICAg ICAgICAgICAgfCAgIDYgKy0KIGV0Yy9ORVdTICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQg KwogbGlzcC9lbXVsYXRpb24vdmlwZXIuZWwgICAgICAgICB8ICAgMSAtCiBsaXNwL2ZmYXAuZWwg ICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBsaXNwL29ic29sZXRlL2xlZGl0LmVsICAgICAg ICAgIHwgMTU3IC0tLS0tLS0KIGxpc3Avb2Jzb2xldGUvbG1lbnUuZWwgICAgICAgICAgfCA0NDUg LS0tLS0tLS0tLS0tLS0tLS0tCiBsaXNwL29ic29sZXRlL2x1Y2lkLmVsICAgICAgICAgIHwgMjEx IC0tLS0tLS0tLQogbGlzcC9vYnNvbGV0ZS9vbGQtd2hpdGVzcGFjZS5lbCB8IDgwMSAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMo KyksIDE2MTkgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGlzcC9vYnNvbGV0ZS9s ZWRpdC5lbAogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpc3Avb2Jzb2xldGUvbG1lbnUuZWwKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBsaXNwL29ic29sZXRlL2x1Y2lkLmVsCiBkZWxldGUgbW9kZSAxMDA2NDQg bGlzcC9vYnNvbGV0ZS9vbGQtd2hpdGVzcGFjZS5lbAoKZGlmZiAtLWdpdCBhL2FkbWluL2F1dGhv cnMuZWwgYi9hZG1pbi9hdXRob3JzLmVsCmluZGV4IDEzYjIwM2I5YmMuLmRjNTdjMGE2YjkgMTAw NjQ0Ci0tLSBhL2FkbWluL2F1dGhvcnMuZWwKKysrIGIvYWRtaW4vYXV0aG9ycy5lbApAQCAtMzY1 LDcgKzM2NSw3IEBAIGF1dGhvcnMtaWdub3JlZC1maWxlcwogICAgICJsaWIvc3RkYXJnLmluLmgi ICJsaWIvc3RkYm9vbC5pbi5oIgogICAgICJ1bmlkYXRhL2JpZGltaXJyb3IuYXdrIiAidW5pZGF0 YS9iaWRpdHlwZS5hd2siCiAgICAgInNwbGl0LW1hbiIgIlhrZXltYXAudHh0IiAibXMtN2JrZXJt aXQiICJ1bGltaXQuaGFjayIKLSAgICAiZ251LWhwMzAwIiAicmVmY2FyZC5iaXQiICJsZWRpdC5s IiAiZm9ybXMuUkVBRE1FIiAiZm9ybXMtZDIuZGF0IgorICAgICJnbnUtaHAzMDAiICJyZWZjYXJk LmJpdCIgImZvcm1zLlJFQURNRSIgImZvcm1zLWQyLmRhdCIKICAgICAiQ1hURVJNLURJQy9QWS50 aXQiICJDWFRFUk0tRElDL1pJUkFOTUEudGl0IgogICAgICJDWFRFUk0tRElDL0NUTGF1LnRpdCIg IkNYVEVSTS1ESUMvQ1RMYXVCLnRpdCIKICAgICAiY29weWluZy5wYXBlciIgImNlbGliYWN5LjEi ICJjb25kb20uMSIgImVjaG8ubXNnIiAic2V4LjYiCkBAIC02MDksNyArNjA5LDcgQEAgYXV0aG9y cy1maXhlZC1lbnRyaWVzCiAgICAgOzsgTm8gbG9uZ2VyIGRpc3RyaWJ1dGVkOiBsc2VsZWN0LmVs LgogICAgICgiTHVjaWQsIEluYy4iIDpjaGFuZ2VkICJieXRlY29kZS5jIiAiYnl0ZS1vcHQuZWwi ICJieXRlLXJ1bi5lbCIKICAgICAgImJ5dGVjb21wLmVsIiAiZGVsc2VsLmVsIiAiZGlzYXNzLmVs IiAiZmFjZXMuZWwiICJmb250LWxvY2suZWwiCi0gICAgICJsbWVudS5lbCIgIm1haWxhYmJyZXYu ZWwiICJzZWxlY3QuZWwiICJ4ZmFjZXMuYyIgInhzZWxlY3QuYyIpCisgICAgICJtYWlsYWJicmV2 LmVsIiAic2VsZWN0LmVsIiAieGZhY2VzLmMiICJ4c2VsZWN0LmMiKQogICAgIDs7IE1DQy4gIE5v IGxvbmdlciBkaXN0cmlidXRlZDogZW1hY3NzZXJ2ZXIuYy4KICAgICAoIk1pY3JvZWxlY3Ryb25p Y3MgYW5kIENvbXB1dGVyIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24iCiAgICAgIDpjaGFuZ2VkICJl dGFncy5jIiAiZW1hY3NjbGllbnQuYyIgIm1vdmVtYWlsLmMiCkBAIC03NzMsNyArNzczLDcgQEAg YXV0aG9ycy12YWxpZC1maWxlLW5hbWVzCiAgICAgImVyYy1oZWNvbXBsZXRlLmVsIgogICAgICJl c2hlbGwvZXNoLW1haW50LmVsIgogICAgICJsYW5ndWFnZS9wZXJzaWFuLmVsIgotICAgICJsZWRp dC5lbCIgIm1lZXNlLmVsIiAiaXN3aXRjaGIuZWwiICJsb25nbGluZXMuZWwiCisgICAgIm1lZXNl LmVsIiAiaXN3aXRjaGIuZWwiICJsb25nbGluZXMuZWwiCiAgICAgIm1oLWV4ZWMuZWwiICJtaC1p bml0LmVsIiAibWgtY3VzdG9taXplLmVsIgogICAgICJuZXQvem9uZS1tb2RlLmVsIiAieGVzYW0u ZWwiCiAgICAgInRlcm0vbWFjLXdpbi5lbCIgInN1cC1tb3VzZS5lbCIKZGlmZiAtLWdpdCBhL2V0 Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggYzQ5MTE3MjZhOC4uNGVkZGEwOTQ1ZCAxMDA2NDQKLS0t IGEvZXRjL05FV1MKKysrIGIvZXRjL05FV1MKQEAgLTMzMSw2ICszMzEsMTAgQEAgVGhpcyBpcyBu byBsb25nZXIgc3VwcG9ydGVkLCBhbmQgc2V0dGluZyB0aGlzIHZhcmlhYmxlIGhhcyBubyBlZmZl Y3QuCiAqKiBUaGUgbWFjcm8gJ3dpdGgtZGlzcGxheWVkLWJ1ZmZlci13aW5kb3cnIGlzIG5vdyBv YnNvbGV0ZS4KIFVzZSBtYWNybyAnd2l0aC1jdXJyZW50LWJ1ZmZlci13aW5kb3cnIHdpdGggYWN0 aW9uIGFsaXN0IGVudHJ5ICdib2R5LWZ1bmN0aW9uJy4KIAorLS0tCisqKiBTb21lIGxpYnJhcmll cyBvYnNvbGV0ZSBzaW5jZSBFbWFjcyAyMyBoYXZlIGJlZW4gcmVtb3ZlZDoKKydsZWRpdC5lbCcs ICdsbWVudS5lbCcsICdsdWNpZC5lbCBhbmQgJ29sZC13aGl0ZXNwYWNlLmVsJy4KKwogDAogKiBM aXNwIENoYW5nZXMgaW4gRW1hY3MgMjguMQogCmRpZmYgLS1naXQgYS9saXNwL2VtdWxhdGlvbi92 aXBlci5lbCBiL2xpc3AvZW11bGF0aW9uL3ZpcGVyLmVsCmluZGV4IDQ5MmMzMWJkZTcuLjhlN2Ez NGZjNjkgMTAwNjQ0Ci0tLSBhL2xpc3AvZW11bGF0aW9uL3ZpcGVyLmVsCisrKyBiL2xpc3AvZW11 bGF0aW9uL3ZpcGVyLmVsCkBAIC0xMjIxLDcgKzEyMjEsNiBAQCB2aXBlci12aS1pbnRlcmNlcHQt bWFwCiAgICh2aXBlci1oYXJuZXNzLW1pbm9yLW1vZGUgIm91dGxpbmUiKQogICAodmlwZXItaGFy bmVzcy1taW5vci1tb2RlICJhbGxvdXQiKQogICAodmlwZXItaGFybmVzcy1taW5vci1tb2RlICJ4 cmVmIikKLSAgKHZpcGVyLWhhcm5lc3MtbWlub3ItbW9kZSAibG1lbnUiKQogICAodmlwZXItaGFy bmVzcy1taW5vci1tb2RlICJ2YyIpCiAgICh2aXBlci1oYXJuZXNzLW1pbm9yLW1vZGUgImx0eC1t YXRoIikgOyBMYVRlWC1tYXRoLW1vZGUgaW4gQVVDLVRlWCwgd2hpY2gKICAgKHZpcGVyLWhhcm5l c3MtbWlub3ItbW9kZSAibGF0ZXgiKSAgICA7IHNpdHMgaW4gb25lIG9mIHRoZXNlIHR3byBmaWxl cwpkaWZmIC0tZ2l0IGEvbGlzcC9mZmFwLmVsIGIvbGlzcC9mZmFwLmVsCmluZGV4IGVhZDc5YjQ1 YzAuLmQ2NTZiMzczNzIgMTAwNjQ0Ci0tLSBhL2xpc3AvZmZhcC5lbAorKysgYi9saXNwL2ZmYXAu ZWwKQEAgLTE2MDcsNyArMTYwNyw3IEBAIGZmYXAtbWVudS1hc2sKIEZ1bmN0aW9uIENPTlQgaXMg YXBwbGllZCB0byB0aGUgZW50cnkgY2hvc2VuIGJ5IHRoZSB1c2VyLiIKICAgOzsgTm90ZTogdGhp cyBmdW5jdGlvbiBpcyB1c2VkIHdpdGggYSBkaWZmZXJlbnQgY29udGludWF0aW9uCiAgIDs7IGJ5 IHRoZSBmZmFwLXVybCBhZGQtb24gcGFja2FnZS4KLSAgOzsgQ291bGQgdHJ5IHJld3JpdGluZyB0 byB1c2UgZWFzeW1lbnUuZWwgb3IgbG1lbnUuZWwuCisgIDs7IENvdWxkIHRyeSByZXdyaXRpbmcg dG8gdXNlIGVhc3ltZW51LmVsLgogICAobGV0IChjaG9pY2UpCiAgICAgKGNvbmQKICAgICAgOzsg RW1hY3MgbW91c2U6CmRpZmYgLS1naXQgYS9saXNwL29ic29sZXRlL2xlZGl0LmVsIGIvbGlzcC9v YnNvbGV0ZS9sZWRpdC5lbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk5YTA2ZGU1 Ny4uMDAwMDAwMDAwMAotLS0gYS9saXNwL29ic29sZXRlL2xlZGl0LmVsCisrKyAvZGV2L251bGwK QEAgLTEsMTU3ICswLDAgQEAKLTs7OyBsZWRpdC5lbCAtLS0gRW1hY3Mgc2lkZSBvZiBsZWRpdCBp bnRlcmZhY2UKLQotOzsgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDAxLTIwMjAgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCi0KLTs7IE1haW50YWluZXI6IGVtYWNzLWRldmVsQGdudS5vcmcK LTs7IEtleXdvcmRzOiBsYW5ndWFnZXMKLTs7IE9ic29sZXRlLXNpbmNlOiAyNC4zCi0KLTs7IFRo aXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KLQotOzsgR05VIEVtYWNzIGlzIGZyZWUgc29m dHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLTs7IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5Ci07OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgotOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K LQotOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi07OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTs7IGFsb25nIHdpdGggR05VIEVt YWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotOzs7 IENvbW1lbnRhcnk6Ci0KLTs7IFRoaXMgaXMgYSBtYWpvciBtb2RlIGZvciBlZGl0aW5nIExpc3p0 LgotCi07OzsgQ29kZToKLQotOzs7IFRvIGRvOgotOzs7IG8gbGlzcCAtPiBlbWFjcyBzaWRlIG9m IHRoaW5ncyAoZ3JpbmQtZGVmaW5pdGlvbiBhbmQgZmluZC1kZWZpbml0aW9uKQotCi0oZGVmdmFy IGxlZGl0LW1vZGUtbWFwIG5pbCkKLQotKGRlZmNvbnN0IGxlZGl0LXphcC1maWxlCi0gIChleHBh bmQtZmlsZS1uYW1lIChjb25jYXQgKHVzZXItbG9naW4tbmFtZSkgIi5sMSIpIHRlbXBvcmFyeS1m aWxlLWRpcmVjdG9yeSkKLSAgIkZpbGUgbmFtZSBmb3IgZGF0YSBzZW50IHRvIExpc3AgYnkgTGVk aXQuIikKLShkZWZjb25zdCBsZWRpdC1yZWFkLWZpbGUKLSAgKGV4cGFuZC1maWxlLW5hbWUgKGNv bmNhdCAodXNlci1sb2dpbi1uYW1lKSAiLmwyIikgdGVtcG9yYXJ5LWZpbGUtZGlyZWN0b3J5KQot ICAiRmlsZSBuYW1lIGZvciBkYXRhIHNlbnQgdG8gTGVkaXQgYnkgTGlzcC4iKQotKGRlZmNvbnN0 IGxlZGl0LWNvbXBpbGUtZmlsZQotICAoZXhwYW5kLWZpbGUtbmFtZSAoY29uY2F0ICh1c2VyLWxv Z2luLW5hbWUpICIubDQiKSB0ZW1wb3JhcnktZmlsZS1kaXJlY3RvcnkpCi0gICJGaWxlIG5hbWUg Zm9yIGRhdGEgc2VudCB0byBMaXNwIGNvbXBpbGVyIGJ5IExlZGl0LiIpCi0oZGVmY29uc3QgbGVk aXQtYnVmZmVyICIqTEVESVQqIgotICAiTmFtZSBvZiBidWZmZXIgaW4gd2hpY2ggTGVkaXQgYWNj dW11bGF0ZXMgZGF0YSB0byBzZW5kIHRvIExpc3AuIikKLQotOzs7IyMjYXV0b2xvYWQKLShkZWZj b25zdCBsZWRpdC1zYXZlLWZpbGVzIHQgIlwKLSpOb24tbmlsIG1lYW5zIExlZGl0IHNob3VsZCBz YXZlIGZpbGVzIGJlZm9yZSB0cmFuc2ZlcnJpbmcgdG8gTGlzcC4iKQotOzs7IyMjYXV0b2xvYWQK LShkZWZjb25zdCBsZWRpdC1nby10by1saXNwLXN0cmluZyAiJT9saXNwIiAiXAotKlNoZWxsIGNv bW1hbmRzIHRvIGV4ZWN1dGUgdG8gcmVzdW1lIExpc3Agam9iLiIpCi07OzsjIyNhdXRvbG9hZAot KGRlZmNvbnN0IGxlZGl0LWdvLXRvLWxpc3p0LXN0cmluZyAiJT9saXN6dCIgIlwKLSpTaGVsbCBj b21tYW5kcyB0byBleGVjdXRlIHRvIHJlc3VtZSBMaXNwIGNvbXBpbGVyIGpvYi4iKQotCi0oZGVm dW4gbGVkaXQtc2F2ZS1kZWZ1biAoKQotICAiU2F2ZSB0aGUgY3VycmVudCBkZWZ1biBpbiB0aGUg bGVkaXQgYnVmZmVyLiIKLSAgKGludGVyYWN0aXZlKQotICAoc2F2ZS1leGN1cnNpb24KLSAgIChl bmQtb2YtZGVmdW4pCi0gICAobGV0ICgoZW5kIChwb2ludCkpKQotICAgICAoYmVnaW5uaW5nLW9m LWRlZnVuKQotICAgICAoYXBwZW5kLXRvLWJ1ZmZlciBsZWRpdC1idWZmZXIgKHBvaW50KSBlbmQp KQotICAgKG1lc3NhZ2UgIkN1cnJlbnQgZGVmdW4gc2F2ZWQgZm9yIExpc3AiKSkpCi0KLShkZWZ1 biBsZWRpdC1zYXZlLXJlZ2lvbiAoYmVnIGVuZCkKLSAgIlNhdmUgdGhlIGN1cnJlbnQgcmVnaW9u IGluIHRoZSBsZWRpdCBidWZmZXIiCi0gIChpbnRlcmFjdGl2ZSAiciIpCi0gIChhcHBlbmQtdG8t YnVmZmVyIGxlZGl0LWJ1ZmZlciBiZWcgZW5kKQotICAobWVzc2FnZSAiUmVnaW9uIHNhdmVkIGZv ciBMaXNwIikpCi0KLShkZWZ1biBsZWRpdC16YXAtZGVmdW4tdG8tbGlzcCAoKQotICAiQ2Fycnkg dGhlIGN1cnJlbnQgZGVmdW4gdG8gTGlzcC4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxlZGl0LXNh dmUtZGVmdW4pCi0gIChsZWRpdC1nby10by1saXNwKSkKLQotKGRlZnVuIGxlZGl0LXphcC1kZWZ1 bi10by1saXN6dCAoKQotICAiQ2FycnkgdGhlIGN1cnJlbnQgZGVmdW4gdG8gbGlzenQuIgotICAo aW50ZXJhY3RpdmUpCi0gIChsZWRpdC1zYXZlLWRlZnVuKQotICAobGVkaXQtZ28tdG8tbGlzenQp KQotCi0oZGVmdW4gbGVkaXQtemFwLXJlZ2lvbi10by1saXNwIChiZWcgZW5kKQotICAiQ2Fycnkg dGhlIGN1cnJlbnQgcmVnaW9uIHRvIExpc3AuIgotICAoaW50ZXJhY3RpdmUgInIiKQotICAobGVk aXQtc2F2ZS1yZWdpb24gYmVnIGVuZCkKLSAgKGxlZGl0LWdvLXRvLWxpc3ApKQotCi0oZGVmdW4g bGVkaXQtZ28tdG8tbGlzcCAoKQotICAiU3VzcGVuZCBFbWFjcyBhbmQgcmVzdGFydCBhIHdhaXRp bmcgTGlzcCBqb2IuIgotICAoaW50ZXJhY3RpdmUpCi0gIChpZiBsZWRpdC1zYXZlLWZpbGVzCi0g ICAgICAoc2F2ZS1zb21lLWJ1ZmZlcnMpKQotICAoaWYgKGdldC1idWZmZXIgbGVkaXQtYnVmZmVy KQotICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgbGVkaXQtYnVmZmVyCi0gICAgICAgIChnb3Rv LWNoYXIgKHBvaW50LW1pbikpCi0gICAgICAgICh3cml0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBv aW50LW1heCkgbGVkaXQtemFwLWZpbGUpCi0gICAgICAgIChlcmFzZS1idWZmZXIpKSkKLSAgKHN1 c3BlbmQtZW1hY3MgbGVkaXQtZ28tdG8tbGlzcC1zdHJpbmcpCi0gIChsb2FkIGxlZGl0LXJlYWQt ZmlsZSB0IHQpKQotCi0oZGVmdW4gbGVkaXQtZ28tdG8tbGlzenQgKCkKLSAgIlN1c3BlbmQgRW1h Y3MgYW5kIHJlc3RhcnQgYSB3YWl0aW5nIExpc3p0IGpvYi4iCi0gIChpbnRlcmFjdGl2ZSkKLSAg KGlmIGxlZGl0LXNhdmUtZmlsZXMKLSAgICAgIChzYXZlLXNvbWUtYnVmZmVycykpCi0gIChpZiAo Z2V0LWJ1ZmZlciBsZWRpdC1idWZmZXIpCi0gICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBsZWRp dC1idWZmZXIKLSAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAgICAgICAgKGluc2Vy dCAiKGRlY2xhcmUgKG1hY3JvcyB0KSlcbiIpCi0gICAgICAgICh3cml0ZS1yZWdpb24gKHBvaW50 LW1pbikgKHBvaW50LW1heCkgbGVkaXQtY29tcGlsZS1maWxlKQotICAgICAgICAoZXJhc2UtYnVm ZmVyKSkpCi0gIChzdXNwZW5kLWVtYWNzIGxlZGl0LWdvLXRvLWxpc3p0LXN0cmluZykKLSAgKGxv YWQgbGVkaXQtcmVhZC1maWxlIHQgdCkpCi0KLShkZWZ1biBsZWRpdC1zZXR1cCAoKQotICAiU2V0 IHVwIGtleSBiaW5kaW5ncyBmb3IgdGhlIExpc3AvRW1hY3MgaW50ZXJmYWNlLiIKLSAgKHVubGVz cyBsZWRpdC1tb2RlLW1hcAotICAgIChzZXRxIGxlZGl0LW1vZGUtbWFwIChtYWtlLXNwYXJzZS1r ZXltYXApKQotICAgIChzZXQta2V5bWFwLXBhcmVudCBsZWRpdC1tb2RlLW1hcCBsaXNwLW1vZGUt c2hhcmVkLW1hcCkpCi0gIChkZWZpbmUta2V5IGxlZGl0LW1vZGUtbWFwICJcZVxeZCIgJ2xlZGl0 LXNhdmUtZGVmdW4pCi0gIChkZWZpbmUta2V5IGxlZGl0LW1vZGUtbWFwICJcZVxeciIgJ2xlZGl0 LXNhdmUtcmVnaW9uKQotICAoZGVmaW5lLWtleSBsZWRpdC1tb2RlLW1hcCAiXF54eiIgJ2xlZGl0 LWdvLXRvLWxpc3ApCi0gIChkZWZpbmUta2V5IGxlZGl0LW1vZGUtbWFwICJcZVxeYyIgJ2xlZGl0 LWdvLXRvLWxpc3p0KSkKLQotKGxlZGl0LXNldHVwKQotCi07OzsjIyNhdXRvbG9hZAotKGRlZnVu IGxlZGl0LW1vZGUgKCkKLSAgIlxcPGxlZGl0LW1vZGUtbWFwPk1ham9yIG1vZGUgZm9yIGVkaXRp bmcgdGV4dCBhbmQgc3R1ZmZpbmcgaXQgdG8gYSBMaXNwIGpvYi4KLUxpa2UgTGlzcCBtb2RlLCBw bHVzIHRoZXNlIHNwZWNpYWwgY29tbWFuZHM6Ci0gIFxcW2xlZGl0LXNhdmUtZGVmdW5dCS0tIHJl Y29yZCBkZWZ1biBhdCBvciBhZnRlciBwb2ludAotCSAgIGZvciBsYXRlciB0cmFuc21pc3Npb24g dG8gTGlzcCBqb2IuCi0gIFxcW2xlZGl0LXNhdmUtcmVnaW9uXSAtLSByZWNvcmQgcmVnaW9uIGZv ciBsYXRlciB0cmFuc21pc3Npb24gdG8gTGlzcCBqb2IuCi0gIFxcW2xlZGl0LWdvLXRvLWxpc3Bd IC0tIHRyYW5zZmVyIHRvIExpc3Agam9iIGFuZCB0cmFuc21pdCBzYXZlZCB0ZXh0LgotICBcXFts ZWRpdC1nby10by1saXN6dF0gLS0gdHJhbnNmZXIgdG8gTGlzenQgKExpc3AgY29tcGlsZXIpIGpv YgotCSAgIGFuZCB0cmFuc21pdCBzYXZlZCB0ZXh0LgotCi1cXHtsZWRpdC1tb2RlLW1hcH0KLVRv IG1ha2UgTGlzcCBtb2RlIGF1dG9tYXRpY2FsbHkgY2hhbmdlIHRvIExlZGl0IG1vZGUsCi1kbyAo c2V0cSBsaXNwLW1vZGUtaG9vayAnbGVkaXQtZnJvbS1saXNwLW1vZGUpIgotICAoaW50ZXJhY3Rp dmUpCi0gIChkZWxheS1tb2RlLWhvb2tzIChsaXNwLW1vZGUpKQotICAobGVkaXQtZnJvbS1saXNw LW1vZGUpKQotCi07OzsjIyNhdXRvbG9hZAotKGRlZnVuIGxlZGl0LWZyb20tbGlzcC1tb2RlICgp Ci0gICh1c2UtbG9jYWwtbWFwIGxlZGl0LW1vZGUtbWFwKQotICAoc2V0cSBtb2RlLW5hbWUgIkxl ZGl0IikKLSAgKHNldHEgbWFqb3ItbW9kZSAnbGVkaXQtbW9kZSkKLSAgKHJ1bi1tb2RlLWhvb2tz ICdsZWRpdC1tb2RlLWhvb2spKQotCi0ocHJvdmlkZSAnbGVkaXQpCi0KLTs7OyBsZWRpdC5lbCBl bmRzIGhlcmUKZGlmZiAtLWdpdCBhL2xpc3Avb2Jzb2xldGUvbG1lbnUuZWwgYi9saXNwL29ic29s ZXRlL2xtZW51LmVsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzg0ODE5MjRiLi4w MDAwMDAwMDAwCi0tLSBhL2xpc3Avb2Jzb2xldGUvbG1lbnUuZWwKKysrIC9kZXYvbnVsbApAQCAt MSw0NDUgKzAsMCBAQAotOzs7IGxtZW51LmVsIC0tLSBlbXVsYXRlIEx1Y2lkJ3MgbWVudWJhciBz dXBwb3J0Ci0KLTs7IENvcHlyaWdodCAoQykgMTk5Mi0xOTk0LCAxOTk3LCAyMDAxLTIwMjAgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotOzsgSW5jLgotCi07OyBLZXl3b3JkczogZW11bGF0aW9u cyBvYnNvbGV0ZQotOzsgT2Jzb2xldGUtc2luY2U6IDIzLjMKLQotOzsgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR05VIEVtYWNzLgotCi07OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLTs7IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCi07OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi07OyBHTlUgRW1h Y3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLTs7 IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi07OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi07OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotCi07OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotOzsgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3Qs IHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi07OzsgQ29tbWVudGFyeToK LQotOzsgVGhpcyBmaWxlIGhhcyBiZWVuIG9ic29sZXRlIHNpbmNlIEVtYWNzIDIzLjMuCi0KLTs7 OyBDb2RlOgotCi0MCi07OyBGaXJzdCwgZW11bGF0ZSB0aGUgTHVjaWQgbWVudWJhciBzdXBwb3J0 IGluIEdOVSBFbWFjcyAxOS4KLQotOzsgQXJyYW5nZSB0byB1c2UgY3VycmVudC1tZW51YmFyIHRv IHNldCB1cCBwYXJ0IG9mIHRoZSBtZW51IGJhci4KLQotKGRlZnZhciBjdXJyZW50LW1lbnViYXIp Ci0oZGVmdmFyIGx1Y2lkLW1lbnViYXItbWFwKQotKGRlZnZhciBsdWNpZC1mYWlsaW5nLW1lbnVi YXIpCi0KLShkZWZ2YXIgcmVjb21wdXRlLWx1Y2lkLW1lbnViYXIgJ3JlY29tcHV0ZS1sdWNpZC1t ZW51YmFyKQotKGRlZnVuIHJlY29tcHV0ZS1sdWNpZC1tZW51YmFyICgpCi0gIChkZWZpbmUta2V5 IGx1Y2lkLW1lbnViYXItbWFwIFttZW51LWJhcl0KLSAgICAoY29uZGl0aW9uLWNhc2UgbmlsCi0J KG1ha2UtbHVjaWQtbWVudS1rZXltYXAgIm1lbnUtYmFyIiBjdXJyZW50LW1lbnViYXIpCi0gICAg ICAoZXJyb3IgKG1lc3NhZ2UgIkludmFsaWQgZGF0YSBpbiBjdXJyZW50LW1lbnViYXIgbW92ZWQg dG8gbHVjaWQtZmFpbGluZy1tZW51YmFyIikKLQkgICAgIChzaXQtZm9yIDEpCi0JICAgICAoc2V0 cSBsdWNpZC1mYWlsaW5nLW1lbnViYXIgY3VycmVudC1tZW51YmFyCi0JCSAgIGN1cnJlbnQtbWVu dWJhciBuaWwpKSkpCi0gIChzZXRxIGx1Y2lkLW1lbnUtYmFyLWRpcnR5LWZsYWcgbmlsKSkKLQot KGRlZnZhciBsdWNpZC1tZW51YmFyLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkKLShvciAoYXNz cSAnY3VycmVudC1tZW51YmFyIG1pbm9yLW1vZGUtbWFwLWFsaXN0KQotICAgIChzZXRxIG1pbm9y LW1vZGUtbWFwLWFsaXN0Ci0JICAoY29ucyAoY29ucyAnY3VycmVudC1tZW51YmFyIGx1Y2lkLW1l bnViYXItbWFwKQotCQltaW5vci1tb2RlLW1hcC1hbGlzdCkpKQotCi07OyBYRW1hY3MgY29tcGF0 aWJpbGl0eQotKGRlZnVuIHNldC1tZW51YmFyLWRpcnR5LWZsYWcgKCkKLSAgKGZvcmNlLW1vZGUt bGluZS11cGRhdGUpCi0gIChzZXRxIGx1Y2lkLW1lbnUtYmFyLWRpcnR5LWZsYWcgdCkpCi0KLShk ZWZ2YXIgYWRkLW1lbnUtaXRlbS1jb3VudCAwKQotCi07OyBUaGlzIGlzIGEgdmFyaWFibGUgd2hv c2UgdmFsdWUgaXMgYWx3YXlzIG5pbC4KLShkZWZ2YXIgbWFrZS1sdWNpZC1tZW51LWtleW1hcC1k aXNhYmxlIG5pbCkKLQotOzsgUmV0dXJuIGEgbWVudSBrZXltYXAgY29ycmVzcG9uZGluZyB0byBh IEx1Y2lkLXN0eWxlIG1lbnUgbGlzdAotOzsgTUVOVS1JVEVNUywgYW5kIHdpdGggbmFtZSBNRU5V LU5BTUUuCi0oZGVmdW4gbWFrZS1sdWNpZC1tZW51LWtleW1hcCAobWVudS1uYW1lIG1lbnUtaXRl bXMpCi0gIChsZXQgKChtZW51IChtYWtlLXNwYXJzZS1rZXltYXAgbWVudS1uYW1lKSkpCi0gICAg OzsgUHJvY2VzcyBpdGVtcyBpbiByZXZlcnNlIG9yZGVyLAotICAgIDs7IHNpbmNlIHRoZSBkZWZp bmUta2V5IGxvb3AgcmV2ZXJzZXMgdGhlbSBhZ2Fpbi4KLSAgICAoc2V0cSBtZW51LWl0ZW1zIChy ZXZlcnNlIG1lbnUtaXRlbXMpKQotICAgICh3aGlsZSBtZW51LWl0ZW1zCi0gICAgICAobGV0ICgo aXRlbSAoY2FyIG1lbnUtaXRlbXMpKQotCSAgICBjb21tYW5kIG5hbWUgY2FsbGJhY2spCi0JKGNv bmQgKChzdHJpbmdwIGl0ZW0pCi0JICAgICAgIChzZXRxIGNvbW1hbmQgbmlsKQotCSAgICAgICAo c2V0cSBuYW1lIChpZiAoc3RyaW5nLW1hdGNoICJeLSskIiBpdGVtKSAiIiBpdGVtKSkpCi0JICAg ICAgKChjb25zcCBpdGVtKQotCSAgICAgICAoc2V0cSBjb21tYW5kIChtYWtlLWx1Y2lkLW1lbnUt a2V5bWFwIChjYXIgaXRlbSkgKGNkciBpdGVtKSkpCi0JICAgICAgIChzZXRxIG5hbWUgKGNhciBp dGVtKSkpCi0JICAgICAgKCh2ZWN0b3JwIGl0ZW0pCi0JICAgICAgIChzZXRxIGNvbW1hbmQgKG1h a2Utc3ltYm9sIChmb3JtYXQgIm1lbnUtZnVuY3Rpb24tJWQiCi0JCQkJCQkgIGFkZC1tZW51LWl0 ZW0tY291bnQpKQotCQkgICAgIGFkZC1tZW51LWl0ZW0tY291bnQgKDErIGFkZC1tZW51LWl0ZW0t Y291bnQpCi0JCSAgICAgbmFtZSAoYXJlZiBpdGVtIDApCi0JCSAgICAgY2FsbGJhY2sgKGFyZWYg aXRlbSAxKSkKLQkgICAgICAgKGlmIChzeW1ib2xwIGNhbGxiYWNrKQotCQkgICAoZnNldCBjb21t YW5kIGNhbGxiYWNrKQotCQkgKGZzZXQgY29tbWFuZCAobGlzdCAnbGFtYmRhICgpICcoaW50ZXJh Y3RpdmUpIGNhbGxiYWNrKSkpCi0JICAgICAgIChwdXQgY29tbWFuZCAnbWVudS1hbGlhcyB0KQot CSAgICAgICAobGV0ICgoaSAyKSkKLQkJICh3aGlsZSAoPCBpIChsZW5ndGggaXRlbSkpCi0JCSAg IChjb25kCi0JCSAgICAoKGVxIChhcmVmIGl0ZW0gaSkgJzphY3RpdmUpCi0JCSAgICAgKHB1dCBj b21tYW5kICdtZW51LWVuYWJsZQotCQkJICAob3IgKGFyZWYgaXRlbSAoMSsgaSkpCi0JCQkgICAg ICAnbWFrZS1sdWNpZC1tZW51LWtleW1hcC1kaXNhYmxlKSkKLQkJICAgICAoc2V0cSBpICgrIDIg aSkpKQotCQkgICAgKChlcSAoYXJlZiBpdGVtIGkpICc6c3VmZml4KQotCQkgICAgIDs7IHVuaW1w bGVtZW50ZWQKLQkJICAgICAoc2V0cSBpICgrIDIgaSkpKQotCQkgICAgKChlcSAoYXJlZiBpdGVt IGkpICc6a2V5cykKLQkJICAgICA7OyB1bmltcGxlbWVudGVkCi0JCSAgICAgKHNldHEgaSAoKyAy IGkpKSkKLQkJICAgICgoZXEgKGFyZWYgaXRlbSBpKSAnOnN0eWxlKQotCQkgICAgIDs7IHVuaW1w bGVtZW50ZWQKLQkJICAgICAoc2V0cSBpICgrIDIgaSkpKQotCQkgICAgKChlcSAoYXJlZiBpdGVt IGkpICc6c2VsZWN0ZWQpCi0JCSAgICAgOzsgdW5pbXBsZW1lbnRlZAotCQkgICAgIChzZXRxIGkg KCsgMiBpKSkpCi0JCSAgICAoKGFuZCAoc3ltYm9scCAoYXJlZiBpdGVtIGkpKQotCQkJICAoPSA/ OiAoc3RyaW5nLXRvLWNoYXIgKHN5bWJvbC1uYW1lIChhcmVmIGl0ZW0gaSkpKSkpCi0JCSAgICAg KGVycm9yICJVbnJlY29nbml6ZWQgbWVudSBpdGVtIGtleXdvcmQ6ICVTIgotCQkJICAgIChhcmVm IGl0ZW0gaSkpKQotCQkgICAgKCg9IGkgMikKLQkJICAgICA7OyBvbGQtc3R5bGUgZm9ybWF0OiBh Y3RpdmUtcCAmb3B0aW9uYWwgc3VmZml4Ci0JCSAgICAgKHB1dCBjb21tYW5kICdtZW51LWVuYWJs ZQotCQkJICAob3IgKGFyZWYgaXRlbSBpKSAnbWFrZS1sdWNpZC1tZW51LWtleW1hcC1kaXNhYmxl KSkKLQkJICAgICA7OyBzdWZmaXggaXMgdW5pbXBsZW1lbnRlZAotCQkgICAgIChzZXRxIGkgKGxl bmd0aCBpdGVtKSkpCi0JCSAgICAodAotCQkgICAgIChlcnJvciAiVW5leHBlY3RlZCBtZW51IGl0 ZW0gdmFsdWU6ICVTIgotCQkJICAgIChhcmVmIGl0ZW0gaSkpKSkpKSkpCi0JKGlmIChudWxsIGNv bW1hbmQpCi0JICAgIDs7IEhhbmRsZSBpbmFjdGl2ZSBzdHJpbmdzIHNwZWNpYWxseS0tYWxsb3cg YW55IG51bWJlcgotCSAgICA7OyBvZiBpZGVudGljYWwgb25lcy4KLQkgICAgKHNldGNkciBtZW51 IChjb25zIChsaXN0IG5pbCBuYW1lKSAoY2RyIG1lbnUpKSkKLQkgIChpZiBuYW1lCi0JICAgICAg KGRlZmluZS1rZXkgbWVudSAodmVjdG9yIChpbnRlcm4gbmFtZSkpIChjb25zIG5hbWUgY29tbWFu ZCkpKSkpCi0gICAgICAoc2V0cSBtZW51LWl0ZW1zIChjZHIgbWVudS1pdGVtcykpKQotICAgIG1l bnUpKQotCi0oZGVjbGFyZS1mdW5jdGlvbiB4LXBvcHVwLWRpYWxvZyAibWVudS5jIiAocG9zaXRp b24gY29udGVudHMgJm9wdGlvbmFsIGhlYWRlcikpCi0KLTs7IFhFbWFjcyBjb21wYXRpYmlsaXR5 IGZ1bmN0aW9uCi0oZGVmdW4gcG9wdXAtZGlhbG9nLWJveCAoZGF0YSkKLSAgIlBvcCB1cCBhIGRp YWxvZyBib3guCi1BIGRpYWxvZyBib3ggZGVzY3JpcHRpb24gaXMgYSBsaXN0LgotCi0gLSBUaGUg Zmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdCBpcyBhIHN0cmluZyB0byBkaXNwbGF5IGluIHRoZSBk aWFsb2cgYm94LgotIC0gVGhlIHJlc3Qgb2YgdGhlIGVsZW1lbnRzIGFyZSBkZXNjcmlwdGlvbnMg b2YgdGhlIGRpYWxvZyBib3gncyBidXR0b25zLgotICAgRWFjaCBvbmUgaXMgYSB2ZWN0b3Igb2Yg dGhyZWUgZWxlbWVudHM6Ci0gICAtIFRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSB0ZXh0IG9mIHRo ZSBidXR0b24uCi0gICAtIFRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgYGNhbGxiYWNrJy4KLSAg IC0gVGhlIHRoaXJkIGVsZW1lbnQgaXMgdCBvciBuaWwsIHdoZXRoZXIgdGhpcyBidXR0b24gaXMg c2VsZWN0YWJsZS4KLQotSWYgdGhlIGBjYWxsYmFjaycgb2YgYSBidXR0b24gaXMgYSBzeW1ib2ws IHRoZW4gaXQgbXVzdCBuYW1lIGEgY29tbWFuZC4KLUl0IHdpbGwgYmUgaW52b2tlZCB3aXRoIGBj YWxsLWludGVyYWN0aXZlbHknLiAgSWYgaXQgaXMgYSBsaXN0LCB0aGVuIGl0IGlzCi1ldmFsdWF0 ZWQgd2l0aCBgZXZhbCcuCi0KLU9uZSAoYW5kIG9ubHkgb25lKSBvZiB0aGUgYnV0dG9ucyBtYXkg YmUgbmlsLiAgVGhpcyBtYXJrZXIgbWVhbnMgdGhhdCBhbGwKLWZvbGxvd2luZyBidXR0b25zIHNo b3VsZCBiZSBmbHVzaHJpZ2h0IGluc3RlYWQgb2YgZmx1c2hsZWZ0LgotCi1UaGUgc3ludGF4LCBt b3JlIHByZWNpc2VseToKLQotICAgZm9ybQkJOj0gIDxzb21ldGhpbmcgdG8gcGFzcyB0byBgZXZh bCc+Ci0gICBjb21tYW5kCTo9ICA8YSBzeW1ib2wgb3Igc3RyaW5nLCB0byBwYXNzIHRvIGBjYWxs LWludGVyYWN0aXZlbHknPgotICAgY2FsbGJhY2sgCTo9ICBjb21tYW5kIHwgZm9ybQotICAgYWN0 aXZlLXAJOj0gIDx0LCBuaWwsIG9yIGEgZm9ybSB0byBldmFsdWF0ZSB0byBkZWNpZGUgd2hldGhl ciB0aGlzCi0JCSAgICBidXR0b24gc2hvdWxkIGJlIHNlbGVjdGFibGU+Ci0gICBuYW1lCQk6PSAg PHN0cmluZz4KLSAgIHBhcnRpdGlvbgk6PSAgYG5pbCcKLSAgIGJ1dHRvbgk6PSAgYFsnICBuYW1l IGNhbGxiYWNrIGFjdGl2ZS1wIGBdJwotICAgZGlhbG9nCTo9ICBgKCcgbmFtZSBbIGJ1dHRvbiBd KyBbIHBhcnRpdGlvbiBbIGJ1dHRvbiBdKyBdIGApJyIKLSAgKGxldCAoKG5hbWUgKGNhciBkYXRh KSkKLQkodGFpbCAoY2RyIGRhdGEpKQotCWNvbnZlcnRlZAotCWNob2ljZSBtZWFuaW5nKQotICAg ICh3aGlsZSB0YWlsCi0gICAgICAoaWYgKG51bGwgKGNhciB0YWlsKSkKLQkgIChzZXRxIGNvbnZl cnRlZCAoY29ucyBuaWwgY29udmVydGVkKSkKLQkobGV0ICgoaXRlbSAoYXJlZiAoY2FyIHRhaWwp IDApKQotCSAgICAgIChjYWxsYmFjayAoYXJlZiAoY2FyIHRhaWwpIDEpKQotCSAgICAgIChlbmFi bGUgKGFyZWYgKGNhciB0YWlsKSAyKSkpCi0JICAoc2V0cSBjb252ZXJ0ZWQKLQkJKGNvbnMgKGlm IGVuYWJsZSAoY29ucyBpdGVtIGNhbGxiYWNrKSBpdGVtKQotCQkgICAgICBjb252ZXJ0ZWQpKSkp Ci0gICAgICAoc2V0cSB0YWlsIChjZHIgdGFpbCkpKQotICAgIChzZXRxIGNob2ljZSAoeC1wb3B1 cC1kaWFsb2cgdCAoY29ucyBuYW1lIChucmV2ZXJzZSBjb252ZXJ0ZWQpKSkpCi0gICAgKGlmIGNo b2ljZQotCShpZiAoc3ltYm9scCBjaG9pY2UpCi0JICAgIChjYWxsLWludGVyYWN0aXZlbHkgY2hv aWNlKQotCSAgKGV2YWwgY2hvaWNlKSkpKSkKLQwKLTs7IFRoaXMgaXMgZW1wdHkgYmVjYXVzZSB0 aGUgdXN1YWwgZWxlbWVudHMgb2YgdGhlIG1lbnUgYmFyCi07OyBhcmUgcHJvdmlkZWQgYnkgbWVu dS1iYXIuZWwgaW5zdGVhZC4KLTs7IEl0IHdvdWxkIG5vdCBtYWtlIHNlbnNlIHRvIGR1cGxpY2F0 ZSB0aGVtIGhlcmUuCi0oZGVmY29uc3QgZGVmYXVsdC1tZW51YmFyIG5pbCkKLQotOzsgWEVtYWNz IGNvbXBhdGliaWxpdHkKLShkZWZ1biBzZXQtbWVudWJhciAobWVudWJhcikKLSAgIlNldCB0aGUg ZGVmYXVsdCBtZW51YmFyIHRvIGJlIG1lbnViYXIuIgotICAoc2V0cS1kZWZhdWx0IGN1cnJlbnQt bWVudWJhciAoY29weS1zZXF1ZW5jZSBtZW51YmFyKSkKLSAgKHNldC1tZW51YmFyLWRpcnR5LWZs YWcpKQotCi07OyBYRW1hY3MgY29tcGF0aWJpbGl0eQotKGRlZnVuIHNldC1idWZmZXItbWVudWJh ciAobWVudWJhcikKLSAgIlNldCB0aGUgYnVmZmVyLWxvY2FsIG1lbnViYXIgdG8gYmUgbWVudWJh ci4iCi0gIChtYWtlLWxvY2FsLXZhcmlhYmxlICdjdXJyZW50LW1lbnViYXIpCi0gIChzZXRxIGN1 cnJlbnQtbWVudWJhciAoY29weS1zZXF1ZW5jZSBtZW51YmFyKSkKLSAgKHNldC1tZW51YmFyLWRp cnR5LWZsYWcpKQotCi0MCi07OzsgbWVudSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zCi0KLTs7IFhF bWFjcyBjb21wYXRpYmlsaXR5Ci0oZGVmdW4gZmluZC1tZW51LWl0ZW0gKG1lbnViYXIgaXRlbS1w YXRoLWxpc3QgJm9wdGlvbmFsIHBhcmVudCkKLSAgIlNlYXJjaGVzIE1FTlVCQVIgZm9yIGl0ZW0g Z2l2ZW4gYnkgSVRFTS1QQVRILUxJU1QuCi1SZXR1cm5zIChJVEVNIC4gUEFSRU5UKSwgd2hlcmUg UEFSRU5UIGlzIHRoZSBpbW1lZGlhdGUgcGFyZW50IG9mCi0gdGhlIGl0ZW0gZm91bmQuCi1TaWdu YWxzIGFuIGVycm9yIGlmIHRoZSBpdGVtIGlzIG5vdCBmb3VuZC4iCi0gIChvciBwYXJlbnQgKHNl dHEgaXRlbS1wYXRoLWxpc3QgKG1hcGNhciAnZG93bmNhc2UgaXRlbS1wYXRoLWxpc3QpKSkKLSAg KGlmIChub3QgKGNvbnNwIG1lbnViYXIpKQotICAgICAgbmlsCi0gICAgKGxldCAoKHJlc3QgbWVu dWJhcikKLQkgIHJlc3VsdCkKLSAgICAgICh3aGlsZSByZXN0Ci0JKGlmIChhbmQgKGNhciByZXN0 KQotCQkgKGVxdWFsIChjYXIgaXRlbS1wYXRoLWxpc3QpCi0JCQkoZG93bmNhc2UgKGlmICh2ZWN0 b3JwIChjYXIgcmVzdCkpCi0JCQkJICAgICAgKGFyZWYgKGNhciByZXN0KSAwKQotCQkJCSAgICAo aWYgKHN0cmluZ3AgKGNhciByZXN0KSkKLQkJCQkJKGNhciByZXN0KQotCQkJCSAgICAgIChjYXIg KGNhciByZXN0KSkpKSkpKQotCSAgICAoc2V0cSByZXN1bHQgKGNhciByZXN0KSByZXN0IG5pbCkK LQkgIChzZXRxIHJlc3QgKGNkciByZXN0KSkpKQotICAgICAgKGlmIChjZHIgaXRlbS1wYXRoLWxp c3QpCi0JICAoaWYgKGNvbnNwIHJlc3VsdCkKLQkgICAgICAoZmluZC1tZW51LWl0ZW0gKGNkciBy ZXN1bHQpIChjZHIgaXRlbS1wYXRoLWxpc3QpIHJlc3VsdCkKLQkgICAgKGlmIHJlc3VsdAotCQko c2lnbmFsICdlcnJvciAobGlzdCAibm90IGEgc3VibWVudSIgcmVzdWx0KSkKLQkgICAgICAoc2ln bmFsICdlcnJvciAobGlzdCAibm8gc3VjaCBzdWJtZW51IiAoY2FyIGl0ZW0tcGF0aC1saXN0KSkp KSkKLQkoY29ucyByZXN1bHQgcGFyZW50KSkpKSkKLQotCi07OyBYRW1hY3MgY29tcGF0aWJpbGl0 eQotKGRlZnVuIGRpc2FibGUtbWVudS1pdGVtIChwYXRoKQotICAiTWFrZSB0aGUgbmFtZWQgbWVu dSBpdGVtIGJlIHVuc2VsZWN0YWJsZS4KLVBBVEggaXMgYSBsaXN0IG9mIHN0cmluZ3Mgd2hpY2gg aWRlbnRpZnkgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51IGl0ZW0gaW4KLXRoZSBtZW51IGhpZXJh cmNoeS4gIChcIkZpbGVcIiBcIlNhdmVcIikgbWVhbnMgdGhlIG1lbnUgaXRlbSBjYWxsZWQgXCJT YXZlXCIKLXVuZGVyIHRoZSB0b3BsZXZlbCBcIkZpbGVcIiBtZW51LiAgKFwiTWVudVwiIFwiRm9v XCIgXCJJdGVtXCIpIG1lYW5zIHRoZQotbWVudSBpdGVtIGNhbGxlZCBcIkl0ZW1cIiB1bmRlciB0 aGUgXCJGb29cIiBzdWJtZW51IG9mIFwiTWVudVwiLiIKLSAgKGxldCogKChtZW51YmFyIGN1cnJl bnQtbWVudWJhcikKLQkgKHBhaXIgKGZpbmQtbWVudS1pdGVtIG1lbnViYXIgcGF0aCkpCi0JIChp dGVtIChjYXIgcGFpcikpCi0JIChtZW51IChjZHIgcGFpcikpKQotICAgIChvciBpdGVtCi0JKHNp Z25hbCAnZXJyb3IgKGxpc3QgKGlmIG1lbnUgIk5vIHN1Y2ggbWVudSBpdGVtIiAiTm8gc3VjaCBt ZW51IikKLQkJCSAgICAgcGF0aCkpKQotICAgIChpZiAoY29uc3AgaXRlbSkgKGVycm9yICJjYW4n dCBkaXNhYmxlIG1lbnVzLCBvbmx5IG1lbnUgaXRlbXMiKSkKLSAgICAoYXNldCBpdGVtIDIgbmls KQotICAgIChzZXQtbWVudWJhci1kaXJ0eS1mbGFnKQotICAgIGl0ZW0pKQotCi0KLTs7IFhFbWFj cyBjb21wYXRpYmlsaXR5Ci0oZGVmdW4gZW5hYmxlLW1lbnUtaXRlbSAocGF0aCkKLSAgIk1ha2Ug dGhlIG5hbWVkIG1lbnUgaXRlbSBiZSBzZWxlY3RhYmxlLgotUEFUSCBpcyBhIGxpc3Qgb2Ygc3Ry aW5ncyB3aGljaCBpZGVudGlmeSB0aGUgcG9zaXRpb24gb2YgdGhlIG1lbnUgaXRlbSBpbgotdGhl IG1lbnUgaGllcmFyY2h5LiAgKFwiRmlsZVwiIFwiU2F2ZVwiKSBtZWFucyB0aGUgbWVudSBpdGVt IGNhbGxlZCBcIlNhdmVcIgotdW5kZXIgdGhlIHRvcGxldmVsIFwiRmlsZVwiIG1lbnUuICAoXCJN ZW51XCIgXCJGb29cIiBcIkl0ZW1cIikgbWVhbnMgdGhlCi1tZW51IGl0ZW0gY2FsbGVkIFwiSXRl bVwiIHVuZGVyIHRoZSBcIkZvb1wiIHN1Ym1lbnUgb2YgXCJNZW51XCIuIgotICAobGV0KiAoKG1l bnViYXIgY3VycmVudC1tZW51YmFyKQotCSAocGFpciAoZmluZC1tZW51LWl0ZW0gbWVudWJhciBw YXRoKSkKLQkgKGl0ZW0gKGNhciBwYWlyKSkKLQkgKG1lbnUgKGNkciBwYWlyKSkpCi0gICAgKG9y IGl0ZW0KLQkoc2lnbmFsICdlcnJvciAobGlzdCAoaWYgbWVudSAiTm8gc3VjaCBtZW51IGl0ZW0i ICJObyBzdWNoIG1lbnUiKQotCQkJICAgICBwYXRoKSkpCi0gICAgKGlmIChjb25zcCBpdGVtKSAo ZXJyb3IgIiVTIGlzIGEgbWVudSwgbm90IGEgbWVudSBpdGVtIiBwYXRoKSkKLSAgICAoYXNldCBp dGVtIDIgdCkKLSAgICAoc2V0LW1lbnViYXItZGlydHktZmxhZykKLSAgICBpdGVtKSkKLQotCi0o ZGVmdW4gYWRkLW1lbnUtaXRlbS0xIChpdGVtLXAgbWVudS1wYXRoIGl0ZW0tbmFtZSBpdGVtLWRh dGEgZW5hYmxlZC1wIGJlZm9yZSkKLSAgKGlmIGJlZm9yZSAoc2V0cSBiZWZvcmUgKGRvd25jYXNl IGJlZm9yZSkpKQotICAobGV0KiAoKG1lbnViYXIgY3VycmVudC1tZW51YmFyKQotCSAobWVudSAo Y29uZGl0aW9uLWNhc2UgKCkKLQkJICAgKGNhciAoZmluZC1tZW51LWl0ZW0gbWVudWJhciBtZW51 LXBhdGgpKQotCQkgKGVycm9yIG5pbCkpKQotCSAoaXRlbSAoaWYgKGxpc3RwIG1lbnUpCi0JCSAg IChjYXIgKGZpbmQtbWVudS1pdGVtIChjZHIgbWVudSkgKGxpc3QgaXRlbS1uYW1lKSkpCi0JCSAo c2lnbmFsICdlcnJvciAobGlzdCAibm90IGEgc3VibWVudSIgbWVudS1wYXRoKSkpKSkKLSAgICAo b3IgbWVudQotCShsZXQgKChyZXN0IG1lbnUtcGF0aCkKLQkgICAgICAoc28tZmFyIG1lbnViYXIp KQotCSAgKHdoaWxlIHJlc3QKLTs7OwkgICAgKHNldHEgbWVudSAoY2FyIChmaW5kLW1lbnUtaXRl bSAoY2RyIHNvLWZhcikgKGxpc3QgKGNhciByZXN0KSkpKSkKLQkgICAgKHNldHEgbWVudQotCQkg IChpZiAoZXEgc28tZmFyIG1lbnViYXIpCi0JCSAgICAgIChjYXIgKGZpbmQtbWVudS1pdGVtIHNv LWZhciAobGlzdCAoY2FyIHJlc3QpKSkpCi0JCSAgICAoY2FyIChmaW5kLW1lbnUtaXRlbSAoY2Ry IHNvLWZhcikgKGxpc3QgKGNhciByZXN0KSkpKSkpCi0JICAgIChvciBtZW51Ci0JCShsZXQgKChy ZXN0MiBzby1mYXIpKQotCQkgIChvciByZXN0MgotCQkgICAgICAoZXJyb3IgIlRyeWluZyB0byBt b2RpZnkgYSBtZW51IHRoYXQgZG9lc24ndCBleGlzdCIpKQotCQkgICh3aGlsZSAoYW5kIChjZHIg cmVzdDIpIChjYXIgKGNkciByZXN0MikpKQotCQkgICAgKHNldHEgcmVzdDIgKGNkciByZXN0Mikp KQotCQkgIChzZXRjZHIgcmVzdDIKLQkJCSAgKG5jb25jIChsaXN0IChzZXRxIG1lbnUgKGxpc3Qg KGNhciByZXN0KSkpKQotCQkJCSAoY2RyIHJlc3QyKSkpKSkKLQkgICAgKHNldHEgc28tZmFyIG1l bnUpCi0JICAgIChzZXRxIHJlc3QgKGNkciByZXN0KSkpKSkKLSAgICAob3IgbWVudSAoc2V0cSBt ZW51IG1lbnViYXIpKQotICAgIChpZiBpdGVtCi0JbmlsCTsgaXQncyBhbHJlYWR5IHRoZXJlCi0g ICAgICAoaWYgaXRlbS1wCi0JICAoc2V0cSBpdGVtICh2ZWN0b3IgaXRlbS1uYW1lIGl0ZW0tZGF0 YSBlbmFibGVkLXApKQotCShzZXRxIGl0ZW0gKGNvbnMgaXRlbS1uYW1lIGl0ZW0tZGF0YSkpKQot ICAgICAgOzsgaWYgQkVGT1JFIGlzIHNwZWNpZmllZCwgdHJ5IHRvIGFkZCBpdCB0aGVyZS4KLSAg ICAgIChpZiBiZWZvcmUKLQkgIChzZXRxIGJlZm9yZSAoY2FyIChmaW5kLW1lbnUtaXRlbSBtZW51 IChsaXN0IGJlZm9yZSkpKSkpCi0gICAgICAobGV0ICgocmVzdCBtZW51KQotCSAgICAoYWRkZWQt YmVmb3JlIG5pbCkpCi0JKHdoaWxlIHJlc3QKLQkgIChpZiAoZXEgYmVmb3JlIChjYXIgKGNkciBy ZXN0KSkpCi0JICAgICAgKHByb2duCi0JCShzZXRjZHIgcmVzdCAoY29ucyBpdGVtIChjZHIgcmVz dCkpKQotCQkoc2V0cSByZXN0IG5pbCBhZGRlZC1iZWZvcmUgdCkpCi0JICAgIChzZXRxIHJlc3Qg KGNkciByZXN0KSkpKQotCShpZiAobm90IGFkZGVkLWJlZm9yZSkKLQkgICAgOzsgYWRkaW5nIGJl Zm9yZSB0aGUgZmlyc3QgaXRlbSBvbiB0aGUgbWVudWJhciBpdHNlbGYgaXMgaGFyZGVyCi0JICAg IChpZiAoYW5kIChlcSBtZW51IG1lbnViYXIpIChlcSBiZWZvcmUgKGNhciBtZW51KSkpCi0JCShz ZXRxIG1lbnUgKGNvbnMgaXRlbSBtZW51KQotCQkgICAgICBjdXJyZW50LW1lbnViYXIgbWVudSkK LQkgICAgICA7OyBvdGhlcndpc2UsIGFkZCB0aGUgaXRlbSB0byB0aGUgZW5kLgotCSAgICAgIChu Y29uYyBtZW51IChsaXN0IGl0ZW0pKSkpKSkKLSAgICAoaWYgaXRlbS1wCi0JKHByb2duCi0JICAo YXNldCBpdGVtIDEgaXRlbS1kYXRhKQotCSAgKGFzZXQgaXRlbSAyIChub3QgKG51bGwgZW5hYmxl ZC1wKSkpKQotICAgICAgKHNldGNhciBpdGVtIGl0ZW0tbmFtZSkKLSAgICAgIChzZXRjZHIgaXRl bSBpdGVtLWRhdGEpKQotICAgIChzZXQtbWVudWJhci1kaXJ0eS1mbGFnKQotICAgIGl0ZW0pKQot Ci07OyBYRW1hY3MgY29tcGF0aWJpbGl0eQotKGRlZnVuIGFkZC1tZW51LWl0ZW0gKG1lbnUtcGF0 aCBpdGVtLW5hbWUgZnVuY3Rpb24gZW5hYmxlZC1wICZvcHRpb25hbCBiZWZvcmUpCi0gICJBZGQg YSBtZW51IGl0ZW0gdG8gc29tZSBtZW51LCBjcmVhdGluZyB0aGUgbWVudSBmaXJzdCBpZiBuZWNl c3NhcnkuCi1JZiB0aGUgbmFtZWQgaXRlbSBleGlzdHMgYWxyZWFkeSwgaXQgaXMgY2hhbmdlZC4K LU1FTlUtUEFUSCBpZGVudGlmaWVzIHRoZSBtZW51IHVuZGVyIHdoaWNoIHRoZSBuZXcgbWVudSBp dGVtIHNob3VsZCBiZSBpbnNlcnRlZC4KLSBJdCBpcyBhIGxpc3Qgb2Ygc3RyaW5nczsgZm9yIGV4 YW1wbGUsIChcIkZpbGVcIikgbmFtZXMgdGhlIHRvcC1sZXZlbCBcIkZpbGVcIgotIG1lbnUuICAo XCJGaWxlXCIgXCJGb29cIikgbmFtZXMgYSBoeXBvdGhldGljYWwgc3VibWVudSBvZiBcIkZpbGVc Ii4KLUlURU0tTkFNRSBpcyB0aGUgc3RyaW5nIG5hbWluZyB0aGUgbWVudSBpdGVtIHRvIGJlIGFk ZGVkLgotRlVOQ1RJT04gaXMgdGhlIGNvbW1hbmQgdG8gaW52b2tlIHdoZW4gdGhpcyBtZW51IGl0 ZW0gaXMgc2VsZWN0ZWQuCi0gSWYgaXQgaXMgYSBzeW1ib2wsIHRoZW4gaXQgaXMgaW52b2tlZCB3 aXRoIGBjYWxsLWludGVyYWN0aXZlbHknLCBpbiB0aGUgc2FtZQotIHdheSB0aGF0IGZ1bmN0aW9u cyBib3VuZCB0byBrZXlzIGFyZSBpbnZva2VkLiAgSWYgaXQgaXMgYSBsaXN0LCB0aGVuIHRoZQot IGxpc3QgaXMgc2ltcGx5IGV2YWx1YXRlZC4KLUVOQUJMRUQtUCBjb250cm9scyB3aGV0aGVyIHRo ZSBpdGVtIGlzIHNlbGVjdGFibGUgb3Igbm90LgotQkVGT1JFLCBpZiBwcm92aWRlZCwgaXMgdGhl IG5hbWUgb2YgYSBtZW51IGl0ZW0gYmVmb3JlIHdoaWNoIHRoaXMgaXRlbSBzaG91bGQKLSBiZSBh ZGRlZCwgaWYgdGhpcyBpdGVtIGlzIG5vdCBvbiB0aGUgbWVudSBhbHJlYWR5LiAgSWYgdGhlIGl0 ZW0gaXMgYWxyZWFkeQotIHByZXNlbnQsIGl0IHdpbGwgbm90IGJlIG1vdmVkLiIKLSAgKG9yIG1l bnUtcGF0aCAoZXJyb3IgIm11c3Qgc3BlY2lmeSBhIG1lbnUgcGF0aCIpKQotICAob3IgaXRlbS1u YW1lIChlcnJvciAibXVzdCBzcGVjaWZ5IGFuIGl0ZW0gbmFtZSIpKQotICAoYWRkLW1lbnUtaXRl bS0xIHQgbWVudS1wYXRoIGl0ZW0tbmFtZSBmdW5jdGlvbiBlbmFibGVkLXAgYmVmb3JlKSkKLQot Ci07OyBYRW1hY3MgY29tcGF0aWJpbGl0eQotKGRlZnVuIGRlbGV0ZS1tZW51LWl0ZW0gKHBhdGgp Ci0gICJSZW1vdmUgdGhlIG5hbWVkIG1lbnUgaXRlbSBmcm9tIHRoZSBtZW51IGhpZXJhcmNoeS4K LVBBVEggaXMgYSBsaXN0IG9mIHN0cmluZ3Mgd2hpY2ggaWRlbnRpZnkgdGhlIHBvc2l0aW9uIG9m IHRoZSBtZW51IGl0ZW0gaW4KLXRoZSBtZW51IGhpZXJhcmNoeS4gIChcIkZpbGVcIiBcIlNhdmVc IikgbWVhbnMgdGhlIG1lbnUgaXRlbSBjYWxsZWQgXCJTYXZlXCIKLXVuZGVyIHRoZSB0b3BsZXZl bCBcIkZpbGVcIiBtZW51LiAgKFwiTWVudVwiIFwiRm9vXCIgXCJJdGVtXCIpIG1lYW5zIHRoZQot bWVudSBpdGVtIGNhbGxlZCBcIkl0ZW1cIiB1bmRlciB0aGUgXCJGb29cIiBzdWJtZW51IG9mIFwi TWVudVwiLiIKLSAgKGxldCogKChtZW51YmFyIGN1cnJlbnQtbWVudWJhcikKLQkgKHBhaXIgKGZp bmQtbWVudS1pdGVtIG1lbnViYXIgcGF0aCkpCi0JIChpdGVtIChjYXIgcGFpcikpCi0JIChtZW51 IChvciAoY2RyIHBhaXIpIG1lbnViYXIpKSkKLSAgICAoaWYgKG5vdCBpdGVtKQotCW5pbAotICAg ICAgOzsgdGhlIG1lbnViYXIgaXMgdGhlIG9ubHkgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIG90aGVy IG1lbnVzIGJlZ2luCi0gICAgICA7OyB3aXRoIHRoZWlyIG5hbWUuCi0gICAgICAoaWYgKGVxIG1l bnUgY3VycmVudC1tZW51YmFyKQotCSAgKHNldHEgY3VycmVudC1tZW51YmFyIChkZWxxIGl0ZW0g bWVudSkpCi0JKGRlbHEgaXRlbSBtZW51KSkKLSAgICAgIChzZXQtbWVudWJhci1kaXJ0eS1mbGFn KQotICAgICAgaXRlbSkpKQotCi0KLTs7IFhFbWFjcyBjb21wYXRpYmlsaXR5Ci0oZGVmdW4gcmVs YWJlbC1tZW51LWl0ZW0gKHBhdGggbmV3LW5hbWUpCi0gICJDaGFuZ2UgdGhlIHN0cmluZyBvZiB0 aGUgc3BlY2lmaWVkIG1lbnUgaXRlbS4KLVBBVEggaXMgYSBsaXN0IG9mIHN0cmluZ3Mgd2hpY2gg aWRlbnRpZnkgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZW51IGl0ZW0gaW4KLXRoZSBtZW51IGhpZXJh cmNoeS4gIChcIkZpbGVcIiBcIlNhdmVcIikgbWVhbnMgdGhlIG1lbnUgaXRlbSBjYWxsZWQgXCJT YXZlXCIKLXVuZGVyIHRoZSB0b3BsZXZlbCBcIkZpbGVcIiBtZW51LiAgKFwiTWVudVwiIFwiRm9v XCIgXCJJdGVtXCIpIG1lYW5zIHRoZQotbWVudSBpdGVtIGNhbGxlZCBcIkl0ZW1cIiB1bmRlciB0 aGUgXCJGb29cIiBzdWJtZW51IG9mIFwiTWVudVwiLgotTkVXLU5BTUUgaXMgdGhlIHN0cmluZyB0 aGF0IHRoZSBtZW51IGl0ZW0gd2lsbCBiZSBwcmludGVkIGFzIGZyb20gbm93IG9uLiIKLSAgKG9y IChzdHJpbmdwIG5ldy1uYW1lKQotICAgICAgKHNldHEgbmV3LW5hbWUgKHNpZ25hbCAnd3Jvbmct dHlwZS1hcmd1bWVudCAobGlzdCAnc3RyaW5ncCBuZXctbmFtZSkpKSkKLSAgKGxldCogKChtZW51 YmFyIGN1cnJlbnQtbWVudWJhcikKLQkgKHBhaXIgKGZpbmQtbWVudS1pdGVtIG1lbnViYXIgcGF0 aCkpCi0JIChpdGVtIChjYXIgcGFpcikpCi0JIChtZW51IChjZHIgcGFpcikpKQotICAgIChvciBp dGVtCi0JKHNpZ25hbCAnZXJyb3IgKGxpc3QgKGlmIG1lbnUgIk5vIHN1Y2ggbWVudSBpdGVtIiAi Tm8gc3VjaCBtZW51IikKLQkJCSAgICAgcGF0aCkpKQotICAgIChpZiAoYW5kIChjb25zcCBpdGVt KQotCSAgICAgKHN0cmluZ3AgKGNhciBpdGVtKSkpCi0JKHNldGNhciBpdGVtIG5ldy1uYW1lKQot ICAgICAgKGFzZXQgaXRlbSAwIG5ldy1uYW1lKSkKLSAgICAoc2V0LW1lbnViYXItZGlydHktZmxh ZykKLSAgICBpdGVtKSkKLQotOzsgWEVtYWNzIGNvbXBhdGliaWxpdHkKLShkZWZ1biBhZGQtbWVu dSAobWVudS1wYXRoIG1lbnUtbmFtZSBtZW51LWl0ZW1zICZvcHRpb25hbCBiZWZvcmUpCi0gICJB ZGQgYSBtZW51IHRvIHRoZSBtZW51YmFyIG9yIG9uZSBvZiBpdHMgc3VibWVudXMuCi1JZiB0aGUg bmFtZWQgbWVudSBleGlzdHMgYWxyZWFkeSwgaXQgaXMgY2hhbmdlZC4KLU1FTlUtUEFUSCBpZGVu dGlmaWVzIHRoZSBtZW51IHVuZGVyIHdoaWNoIHRoZSBuZXcgbWVudSBzaG91bGQgYmUgaW5zZXJ0 ZWQuCi0gSXQgaXMgYSBsaXN0IG9mIHN0cmluZ3M7IGZvciBleGFtcGxlLCAoXCJGaWxlXCIpIG5h bWVzIHRoZSB0b3AtbGV2ZWwgXCJGaWxlXCIKLSBtZW51LiAgKFwiRmlsZVwiIFwiRm9vXCIpIG5h bWVzIGEgaHlwb3RoZXRpY2FsIHN1Ym1lbnUgb2YgXCJGaWxlXCIuCi0gSWYgTUVOVS1QQVRIIGlz IG5pbCwgdGhlbiB0aGUgbWVudSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtZW51YmFyIGl0c2VsZi4K LU1FTlUtTkFNRSBpcyB0aGUgc3RyaW5nIG5hbWluZyB0aGUgbWVudSB0byBiZSBhZGRlZC4KLU1F TlUtSVRFTVMgaXMgYSBsaXN0IG9mIG1lbnUgaXRlbSBkZXNjcmlwdGlvbnMuCi0gRWFjaCBtZW51 IGl0ZW0gc2hvdWxkIGJlIGEgdmVjdG9yIG9mIHRocmVlIGVsZW1lbnRzOgotICAgLSBhIHN0cmlu ZywgdGhlIG5hbWUgb2YgdGhlIG1lbnUgaXRlbTsKLSAgIC0gYSBzeW1ib2wgbmFtaW5nIGEgY29t bWFuZCwgb3IgYSBmb3JtIHRvIGV2YWx1YXRlOwotICAgLSBhbmQgYSBmb3JtIHdob3NlIHZhbHVl IGRldGVybWluZXMgd2hldGhlciB0aGlzIGl0ZW0gaXMgc2VsZWN0YWJsZS4KLUJFRk9SRSwgaWYg cHJvdmlkZWQsIGlzIHRoZSBuYW1lIG9mIGEgbWVudSBiZWZvcmUgd2hpY2ggdGhpcyBtZW51IHNo b3VsZAotIGJlIGFkZGVkLCBpZiB0aGlzIG1lbnUgaXMgbm90IG9uIGl0cyBwYXJlbnQgYWxyZWFk eS4gIElmIHRoZSBtZW51IGlzIGFscmVhZHkKLSBwcmVzZW50LCBpdCB3aWxsIG5vdCBiZSBtb3Zl ZC4iCi0gIChvciBtZW51LW5hbWUgKGVycm9yICJtdXN0IHNwZWNpZnkgYSBtZW51IG5hbWUiKSkK LSAgKG9yIG1lbnUtaXRlbXMgKGVycm9yICJtdXN0IHNwZWNpZnkgc29tZSBtZW51IGl0ZW1zIikp Ci0gIChhZGQtbWVudS1pdGVtLTEgbmlsIG1lbnUtcGF0aCBtZW51LW5hbWUgbWVudS1pdGVtcyB0 IGJlZm9yZSkpCi0KLQwKLQotKGRlZnZhciBwdXQtYnVmZmVyLW5hbWVzLWluLWZpbGUtbWVudSB0 KQotCi0KLTs7IERvbid0IHVuY29uZGl0aW9uYWxseSBlbmFibGUgbWVudSBiYXJzOyBsZWF2ZSB0 aGF0IHVwIHRvIHRoZSB1c2VyLgotOzsobGV0ICgoZnJhbWVzIChmcmFtZS1saXN0KSkpCi07OyAg KHdoaWxlIGZyYW1lcwotOzsgICAgKG1vZGlmeS1mcmFtZS1wYXJhbWV0ZXJzIChjYXIgZnJhbWVz KSAnKChtZW51LWJhci1saW5lcyAuIDEpKSkKLTs7ICAgIChzZXRxIGZyYW1lcyAoY2RyIGZyYW1l cykpKSkKLTs7KG9yIChhc3NxICdtZW51LWJhci1saW5lcyBkZWZhdWx0LWZyYW1lLWFsaXN0KQot OzsgICAgKHNldHEgZGVmYXVsdC1mcmFtZS1hbGlzdAotOzsJICAoY29ucyAnKG1lbnUtYmFyLWxp bmVzIC4gMSkgZGVmYXVsdC1mcmFtZS1hbGlzdCkpKQotCi0oc2V0LW1lbnViYXIgZGVmYXVsdC1t ZW51YmFyKQotDAotKHByb3ZpZGUgJ2xtZW51KQotCi07OzsgbG1lbnUuZWwgZW5kcyBoZXJlCmRp ZmYgLS1naXQgYS9saXNwL29ic29sZXRlL2x1Y2lkLmVsIGIvbGlzcC9vYnNvbGV0ZS9sdWNpZC5l bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3Y2M5Y2ZhYS4uMDAwMDAwMDAwMAot LS0gYS9saXNwL29ic29sZXRlL2x1Y2lkLmVsCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAg QEAKLTs7OyBsdWNpZC5lbCAtLS0gZW11bGF0ZSBzb21lIEx1Y2lkIEVtYWNzIGZ1bmN0aW9ucwot Ci07OyBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTUsIDIwMDEtMjAyMCBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KLQotOzsgTWFpbnRhaW5lcjogZW1hY3MtZGV2ZWxAZ251Lm9yZwotOzsg S2V5d29yZHM6IGVtdWxhdGlvbnMKLTs7IE9ic29sZXRlLXNpbmNlOiAyMy4yCi0KLTs7IFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KLQotOzsgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdh cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLTs7IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Ci07OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgotOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot OzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi07OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLQotOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTs7IGFsb25nIHdpdGggR05VIEVtYWNz LiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotOzs7IENv bW1lbnRhcnk6Ci0KLTs7OyBDb2RlOgotCi07OyBYRW1hY3MgYXV0b2xvYWRzIENMIHNvIHdlIG1p Z2h0IGFzIHdlbGwgbWFrZSB1c2Ugb2YgaXQuCi0ocmVxdWlyZSAnY2wpCi0KLShkZWZhbGlhcyAn Y3VycmVudC10aW1lLXNlY29uZHMgJ2N1cnJlbnQtdGltZSkKLQotKGRlZnVuIHJlYWwtcGF0aC1u YW1lIChuYW1lICZvcHRpb25hbCBkZWZhdWx0KQotICAoZmlsZS10cnVlbmFtZSAoZXhwYW5kLWZp bGUtbmFtZSBuYW1lIGRlZmF1bHQpKSkKLQotOzsgSXQncyBub3QgY2xlYXIgd2hhdCB0byByZXR1 cm4gaWYgdGhlIG1vdXNlIGlzIG5vdCBpbiBGUkFNRS4KLShkZWZ1biByZWFkLW1vdXNlLXBvc2l0 aW9uIChmcmFtZSkKLSAgKGxldCAoKHBvcyAobW91c2UtcG9zaXRpb24pKSkKLSAgICAoaWYgKGVx IChjYXIgcG9zKSBmcmFtZSkKLQkoY2RyIHBvcykpKSkKLQotKGRlZnVuIHN3aXRjaC10by1vdGhl ci1idWZmZXIgKGFyZykKLSAgIlN3aXRjaCB0byB0aGUgcHJldmlvdXMgYnVmZmVyLgotV2l0aCBh IG51bWVyaWMgYXJnIE4sIHN3aXRjaCB0byB0aGUgTnRoIG1vc3QgcmVjZW50IGJ1ZmZlci4KLVdp dGggYW4gYXJnIG9mIDAsIGJ1cmllcyB0aGUgY3VycmVudCBidWZmZXIgYXQgdGhlCi1ib3R0b20g b2YgdGhlIGJ1ZmZlciBzdGFjay4iCi0gIChpbnRlcmFjdGl2ZSAicCIpCi0gIChpZiAoZXEgYXJn IDApCi0gICAgICAoYnVyeS1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkpCi0gIChzd2l0Y2gtdG8t YnVmZmVyCi0gICAoaWYgKDw9IGFyZyAxKSAob3RoZXItYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikp Ci0gICAgIChudGggYXJnCi0JICAoYXBwbHkgJ25jb25jCi0JCSAobWFwY2FyCi0JCSAgKGxhbWJk YSAoYnVmKQotCQkgICAgKGlmICg9ID9cICAoc3RyaW5nLXRvLWNoYXIgKGJ1ZmZlci1uYW1lIGJ1 ZikpKQotCQkJbmlsCi0JCSAgICAgIChsaXN0IGJ1ZikpKQotCQkgIChidWZmZXItbGlzdCkpKSkp KSkKLQotKGRlZnVuIGRldmljZS1jbGFzcyAoJm9wdGlvbmFsIGRldmljZSkKLSAgIlJldHVybiB0 aGUgY2xhc3MgKGNvbG9yIGJlaGF2aW9yKSBvZiBERVZJQ0UuCi1UaGlzIHdpbGwgYmUgb25lIG9m IGBjb2xvcicsIGBncmF5c2NhbGUnLCBvciBgbW9ubycuCi1UaGlzIGZ1bmN0aW9uIGV4aXN0cyBm b3IgY29tcGF0aWJpbGl0eSB3aXRoIFhFbWFjcy4iCi0gIChjb25kCi0gICAoKGRpc3BsYXktY29s b3ItcCBkZXZpY2UpICdjb2xvcikKLSAgICgoZGlzcGxheS1ncmF5c2NhbGUtcCBkZXZpY2UpICdn cmF5c2NhbGUpCi0gICAodCAnbW9ubykpKQotCi0oZGVmYWxpYXMgJ2ZpbmQtZmFjZSAnZmFjZXAp Ci0oZGVmYWxpYXMgJ2dldC1mYWNlICdmYWNlcCkKLTs7IGludGVybmFsLXRyeS1mYWNlLWZvbnQg d2FzIHJlbW92ZWQgZnJvbSBmYWNlcy5lbCBpbiByZXYgMS4xMzksIDE5OTkvMDcvMjEuCi07Ozso ZGVmYWxpYXMgJ3RyeS1mYWNlLWZvbnQgJ2ludGVybmFsLXRyeS1mYWNlLWZvbnQpCi0KLShkZWZh bGlhcyAnZXhlYy10by1zdHJpbmcgJ3NoZWxsLWNvbW1hbmQtdG8tc3RyaW5nKQotDAotCi07OyBC dWZmZXIgY29udGV4dAotCi0oZGVmdW4gYnVmZmVyLXN5bnRhY3RpYy1jb250ZXh0ICgmb3B0aW9u YWwgYnVmZmVyKQotICAiU3ludGFjdGljIGNvbnRleHQgYXQgcG9pbnQgaW4gQlVGRkVSLgotRWl0 aGVyIG9mIGBzdHJpbmcnLCBgY29tbWVudCcgb3IgbmlsLgotVGhpcyBpcyBhbiBYRW1hY3MgY29t cGF0aWJpbGl0eSBmdW5jdGlvbi4iCi0gICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciBidWZmZXIg KGN1cnJlbnQtYnVmZmVyKSkKLSAgICAobGV0ICgoc3RhdGUgKHN5bnRheC1wcHNzIChwb2ludCkp KSkKLSAgICAgIChjb25kCi0gICAgICAgKChudGggMyBzdGF0ZSkgJ3N0cmluZykKLSAgICAgICAo KG50aCA0IHN0YXRlKSAnY29tbWVudCkpKSkpCi0KLQotKGRlZnVuIGJ1ZmZlci1zeW50YWN0aWMt Y29udGV4dC1kZXB0aCAoJm9wdGlvbmFsIGJ1ZmZlcikKLSAgIlN5bnRhY3RpYyBwYXJlbnRoZXNp cyBkZXB0aCBhdCBwb2ludCBpbiBCVUZGRVIuCi1UaGlzIGlzIGFuIFhFbWFjcyBjb21wYXRpYmls aXR5IGZ1bmN0aW9uLiIKLSAgKHdpdGgtY3VycmVudC1idWZmZXIgKG9yIGJ1ZmZlciAoY3VycmVu dC1idWZmZXIpKQotICAgIChudGggMCAoc3ludGF4LXBwc3MgKHBvaW50KSkpKSkKLQotCi07OyBF eHRlbnRzCi0oZGVmdW4gbWFrZS1leHRlbnQgKGJlZyBlbmQgJm9wdGlvbmFsIGJ1ZmZlcikKLSAg KG1ha2Utb3ZlcmxheSBiZWcgZW5kIGJ1ZmZlcikpCi0KLShkZWZ1biBleHRlbnQtcHJvcGVydGll cyAoZXh0ZW50KSAob3ZlcmxheS1wcm9wZXJ0aWVzIGV4dGVudCkpCi0odW5sZXNzIChmYm91bmRw ICdleHRlbnQtcHJvcGVydHkpIChkZWZhbGlhcyAnZXh0ZW50LXByb3BlcnR5ICdvdmVybGF5LWdl dCkpCi0KLShkZWZ1biBleHRlbnQtYXQgKHBvcyAmb3B0aW9uYWwgb2JqZWN0IHByb3BlcnR5IGJl Zm9yZSkKLSAgKHdpdGgtY3VycmVudC1idWZmZXIgKG9yIG9iamVjdCAoY3VycmVudC1idWZmZXIp KQotICAgIChsZXQgKChvdmVybGF5cyAob3ZlcmxheXMtYXQgcG9zICdzb3J0ZWQpKSkKLSAgICAg ICh3aGVuIHByb3BlcnR5Ci0JKGxldCAoZmlsdGVyZWQpCi0JICAod2hpbGUgb3ZlcmxheXMKLQkg ICAgKGlmIChvdmVybGF5LWdldCAoY2FyIG92ZXJsYXlzKSBwcm9wZXJ0eSkKLQkJKHNldHEgZmls dGVyZWQgKGNvbnMgKGNhciBvdmVybGF5cykgZmlsdGVyZWQpKSkKLQkgICAgKHNldHEgb3Zlcmxh eXMgKGNkciBvdmVybGF5cykpKQotCSAgKHNldHEgb3ZlcmxheXMgZmlsdGVyZWQpKSkKLSAgICAg IChpZiBiZWZvcmUKLQkgIChudGggMSAobWVtcSBiZWZvcmUgb3ZlcmxheXMpKQotCShjYXIgb3Zl cmxheXMpKSkpKQotCi0oZGVmdW4gc2V0LWV4dGVudC1wcm9wZXJ0eSAoZXh0ZW50IHByb3AgdmFs dWUpCi0gIDs7IE1ha2Ugc3VyZSB0aGF0IHNlcGFyYXRlIGFkamFjZW50IGV4dGVudHMKLSAgOzsg d2l0aCB0aGUgc2FtZSBtb3VzZS1mYWNlIHZhbHVlCi0gIDs7IGRvIG5vdCBydW4gdG9nZXRoZXIg YXMgb25lIGV4dGVudC4KLSAgKGFuZCAoZXEgcHJvcCAnbW91c2UtZmFjZSkKLSAgICAgICAoc3lt Ym9scCB2YWx1ZSkKLSAgICAgICAoc2V0cSB2YWx1ZSAobGlzdCB2YWx1ZSkpKQotICAoaWYgKGVx IHByb3AgJ2R1cGxpY2FibGUpCi0gICAgICAoY29uZCAoKGFuZCB2YWx1ZSAobm90IChvdmVybGF5 LWdldCBleHRlbnQgcHJvcCkpKQotCSAgICAgOzsgSWYgYmVjb21pbmcgZHVwbGljYWJsZSwgY29w eSBhbGwgb3ZlcmxheXByb3BzIHRvIHRleHQgcHJvcHMuCi0JICAgICAoYWRkLXRleHQtcHJvcGVy dGllcyAob3ZlcmxheS1zdGFydCBleHRlbnQpCi0JCQkJICAob3ZlcmxheS1lbmQgZXh0ZW50KQot CQkJCSAgKG92ZXJsYXktcHJvcGVydGllcyBleHRlbnQpCi0JCQkJICAob3ZlcmxheS1idWZmZXIg ZXh0ZW50KSkpCi0JICAgIDs7IElmIGJlY29taW5nIG5vIGxvbmdlciBkdXBsaWNhYmxlLCByZW1v dmUgdGhlc2UgdGV4dCBwcm9wcy4KLQkgICAgKChhbmQgKG5vdCB2YWx1ZSkgKG92ZXJsYXktZ2V0 IGV4dGVudCBwcm9wKSkKLQkgICAgIChyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIChvdmVybGF5LXN0 YXJ0IGV4dGVudCkKLQkJCQkgICAgIChvdmVybGF5LWVuZCBleHRlbnQpCi0JCQkJICAgICAob3Zl cmxheS1wcm9wZXJ0aWVzIGV4dGVudCkKLQkJCQkgICAgIChvdmVybGF5LWJ1ZmZlciBleHRlbnQp KSkpCi0gICAgOzsgSWYgZXh0ZW50IGlzIGFscmVhZHkgZHVwbGljYWJsZSwgcHV0IHRoaXMgcHJv cGVydHkKLSAgICA7OyBvbiB0aGUgdGV4dCBhcyB3ZWxsIGFzIG9uIHRoZSBvdmVybGF5LgotICAg IChpZiAob3ZlcmxheS1nZXQgZXh0ZW50ICdkdXBsaWNhYmxlKQotCShwdXQtdGV4dC1wcm9wZXJ0 eSAgKG92ZXJsYXktc3RhcnQgZXh0ZW50KQotCQkJICAgIChvdmVybGF5LWVuZCBleHRlbnQpCi0J CQkgICAgcHJvcCB2YWx1ZSAob3ZlcmxheS1idWZmZXIgZXh0ZW50KSkpKQotICAob3ZlcmxheS1w dXQgZXh0ZW50IHByb3AgdmFsdWUpKQotCi0oZGVmdW4gc2V0LWV4dGVudC1mYWNlIChleHRlbnQg ZmFjZSkKLSAgKHNldC1leHRlbnQtcHJvcGVydHkgZXh0ZW50ICdmYWNlIGZhY2UpKQotCi0oZGVm dW4gc2V0LWV4dGVudC1lbmQtZ2x5cGggKGV4dGVudCBnbHlwaCkKLSAgKHNldC1leHRlbnQtcHJv cGVydHkgZXh0ZW50ICdhZnRlci1zdHJpbmcgZ2x5cGgpKQotCi0oZGVmdW4gZGVsZXRlLWV4dGVu dCAoZXh0ZW50KQotICAoc2V0LWV4dGVudC1wcm9wZXJ0eSBleHRlbnQgJ2R1cGxpY2FibGUgbmls KQotICAoZGVsZXRlLW92ZXJsYXkgZXh0ZW50KSkKLQwKLTs7IFN1cHBvcnQgdGhlIEx1Y2lkIG5h bWVzIHdpdGggYHNjcmVlbicgaW5zdGVhZCBvZiBgZnJhbWUnLgotCi0oZGVmYWxpYXMgJ2N1cnJl bnQtc2NyZWVuLWNvbmZpZ3VyYXRpb24gJ2N1cnJlbnQtZnJhbWUtY29uZmlndXJhdGlvbikKLShk ZWZhbGlhcyAnZGVsZXRlLXNjcmVlbiAnZGVsZXRlLWZyYW1lKQotKGRlZmFsaWFzICdmaW5kLWZp bGUtbmV3LXNjcmVlbiAnZmluZC1maWxlLW90aGVyLWZyYW1lKQotKGRlZmFsaWFzICdmaW5kLWZp bGUtcmVhZC1vbmx5LW5ldy1zY3JlZW4gJ2ZpbmQtZmlsZS1yZWFkLW9ubHktb3RoZXItZnJhbWUp Ci0oZGVmYWxpYXMgJ2ZpbmQtdGFnLW5ldy1zY3JlZW4gJ2ZpbmQtdGFnLW90aGVyLWZyYW1lKQot OzsoZGVmYWxpYXMgJ2ZvY3VzLXNjcmVlbiAnZm9jdXMtZnJhbWUpCi0oZGVmYWxpYXMgJ2ljb25p Znktc2NyZWVuICdpY29uaWZ5LWZyYW1lKQotKGRlZmFsaWFzICdtYWlsLW5ldy1zY3JlZW4gJ21h aWwtb3RoZXItZnJhbWUpCi0oZGVmYWxpYXMgJ21ha2Utc2NyZWVuLWludmlzaWJsZSAnbWFrZS1m cmFtZS1pbnZpc2libGUpCi0oZGVmYWxpYXMgJ21ha2Utc2NyZWVuLXZpc2libGUgJ21ha2UtZnJh bWUtdmlzaWJsZSkKLTs7IChkZWZhbGlhcyAnbWluaWJ1ZmZlci1zY3JlZW4tbGlzdCAnbWluaWJ1 ZmZlci1mcmFtZS1saXN0KQotKGRlZmFsaWFzICdtb2RpZnktc2NyZWVuLXBhcmFtZXRlcnMgJ21v ZGlmeS1mcmFtZS1wYXJhbWV0ZXJzKQotKGRlZmFsaWFzICduZXh0LXNjcmVlbiAnbmV4dC1mcmFt ZSkKLTs7IChkZWZhbGlhcyAnbmV4dC1tdWx0aXNjcmVlbi13aW5kb3cgJ25leHQtbXVsdGlmcmFt ZS13aW5kb3cpCi07OyAoZGVmYWxpYXMgJ3ByZXZpb3VzLW11bHRpc2NyZWVuLXdpbmRvdyAncHJl dmlvdXMtbXVsdGlmcmFtZS13aW5kb3cpCi07OyAoZGVmYWxpYXMgJ3JlZGlyZWN0LXNjcmVlbi1m b2N1cyAncmVkaXJlY3QtZnJhbWUtZm9jdXMpCi0oZGVmYWxpYXMgJ3JlZHJhdy1zY3JlZW4gJ3Jl ZHJhdy1mcmFtZSkKLTs7IChkZWZhbGlhcyAnc2NyZWVuLWNoYXItaGVpZ2h0ICdmcmFtZS1jaGFy LWhlaWdodCkKLTs7IChkZWZhbGlhcyAnc2NyZWVuLWNoYXItd2lkdGggJ2ZyYW1lLWNoYXItd2lk dGgpCi07OyAoZGVmYWxpYXMgJ3NjcmVlbi1jb25maWd1cmF0aW9uLXRvLXJlZ2lzdGVyICdmcmFt ZS1jb25maWd1cmF0aW9uLXRvLXJlZ2lzdGVyKQotOzsgKGRlZmFsaWFzICdzY3JlZW4tZm9jdXMg J2ZyYW1lLWZvY3VzKQotKGRlZmFsaWFzICdzY3JlZW4tbGlzdCAnZnJhbWUtbGlzdCkKLTs7IChk ZWZhbGlhcyAnc2NyZWVuLWxpdmUtcCAnZnJhbWUtbGl2ZS1wKQotKGRlZmFsaWFzICdzY3JlZW4t cGFyYW1ldGVycyAnZnJhbWUtcGFyYW1ldGVycykKLShkZWZhbGlhcyAnc2NyZWVuLXBpeGVsLWhl aWdodCAnZnJhbWUtcGl4ZWwtaGVpZ2h0KQotKGRlZmFsaWFzICdzY3JlZW4tcGl4ZWwtd2lkdGgg J2ZyYW1lLXBpeGVsLXdpZHRoKQotKGRlZmFsaWFzICdzY3JlZW4tcm9vdC13aW5kb3cgJ2ZyYW1l LXJvb3Qtd2luZG93KQotKGRlZmFsaWFzICdzY3JlZW4tc2VsZWN0ZWQtd2luZG93ICdmcmFtZS1z ZWxlY3RlZC13aW5kb3cpCi0oZGVmYWxpYXMgJ2xvd2VyLXNjcmVlbiAnbG93ZXItZnJhbWUpCi0o ZGVmYWxpYXMgJ3JhaXNlLXNjcmVlbiAncmFpc2UtZnJhbWUpCi0oZGVmYWxpYXMgJ3NjcmVlbi12 aXNpYmxlLXAgJ2ZyYW1lLXZpc2libGUtcCkKLShkZWZhbGlhcyAnc2NyZWVucCAnZnJhbWVwKQot KGRlZmFsaWFzICdzZWxlY3Qtc2NyZWVuICdzZWxlY3QtZnJhbWUpCi0oZGVmYWxpYXMgJ3NlbGVj dGVkLXNjcmVlbiAnc2VsZWN0ZWQtZnJhbWUpCi07OyAoZGVmYWxpYXMgJ3NldC1zY3JlZW4tY29u ZmlndXJhdGlvbiAnc2V0LWZyYW1lLWNvbmZpZ3VyYXRpb24pCi07OyAoZGVmYWxpYXMgJ3NldC1z Y3JlZW4taGVpZ2h0ICdzZXQtZnJhbWUtaGVpZ2h0KQotKGRlZmFsaWFzICdzZXQtc2NyZWVuLXBv c2l0aW9uICdzZXQtZnJhbWUtcG9zaXRpb24pCi0oZGVmYWxpYXMgJ3NldC1zY3JlZW4tc2l6ZSAn c2V0LWZyYW1lLXNpemUpCi07OyAoZGVmYWxpYXMgJ3NldC1zY3JlZW4td2lkdGggJ3NldC1mcmFt ZS13aWR0aCkKLShkZWZhbGlhcyAnc3dpdGNoLXRvLWJ1ZmZlci1uZXctc2NyZWVuICdzd2l0Y2gt dG8tYnVmZmVyLW90aGVyLWZyYW1lKQotOzsgKGRlZmFsaWFzICd1bmZvY3VzLXNjcmVlbiAndW5m b2N1cy1mcmFtZSkKLShkZWZhbGlhcyAndmlzaWJsZS1zY3JlZW4tbGlzdCAndmlzaWJsZS1mcmFt ZS1saXN0KQotKGRlZmFsaWFzICd3aW5kb3ctc2NyZWVuICd3aW5kb3ctZnJhbWUpCi0oZGVmYWxp YXMgJ3gtY3JlYXRlLXNjcmVlbiAneC1jcmVhdGUtZnJhbWUpCi0oZGVmYWxpYXMgJ3gtbmV3LXNj cmVlbiAnbWFrZS1mcmFtZSkKLQotKHByb3ZpZGUgJ2x1Y2lkKQotCi07OyBMb2NhbCBWYXJpYWJs ZXM6Ci07OyBieXRlLWNvbXBpbGUtd2FybmluZ3M6IChub3QgY2wtZnVuY3Rpb25zKQotOzsgRW5k OgotCi07OzsgbHVjaWQuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9saXNwL29ic29sZXRlL29s ZC13aGl0ZXNwYWNlLmVsIGIvbGlzcC9vYnNvbGV0ZS9vbGQtd2hpdGVzcGFjZS5lbApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0NmQ3ZGRkYS4uMDAwMDAwMDAwMAotLS0gYS9saXNw L29ic29sZXRlL29sZC13aGl0ZXNwYWNlLmVsCisrKyAvZGV2L251bGwKQEAgLTEsODAxICswLDAg QEAKLTs7OyB3aGl0ZXNwYWNlLmVsIC0tLSB3YXJuIGFib3V0IGFuZCBjbGVhbiBib2d1cyB3aGl0 ZXNwYWNlcyBpbiB0aGUgZmlsZQotCi07OyBDb3B5cmlnaHQgKEMpIDE5OTktMjAyMCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotOzsgQXV0aG9yOiBSYWplc2ggVmFpZGhlZXN3YXJy YW4gPHJ2QGdudS5vcmc+Ci07OyBLZXl3b3JkczogY29udmVuaWVuY2UKLTs7IE9ic29sZXRlLXNp bmNlOiAyMy4xCi0KLTs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KLQotOzsgR05V IEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLTs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci07OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotOzsgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLQotOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi07OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotOzsgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotOzsgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotOzsgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTs7 IGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KLQotOzs7IENvbW1lbnRhcnk6Ci0KLTs7IFVSTDogaHR0cDovL3d3dy5kc21p dC5jb20vbGlzcC8KLTs7Ci07OyBUaGUgd2hpdGVzcGFjZSBsaWJyYXJ5IGlzIGludGVuZGVkIHRv IGZpbmQgYW5kIGhlbHAgZml4IGZpdmUgZGlmZmVyZW50IHR5cGVzCi07OyBvZiB3aGl0ZXNwYWNl IHByb2JsZW1zIHRoYXQgY29tbW9ubHkgZXhpc3QgaW4gc291cmNlIGNvZGUuCi07OwotOzsgMS4g TGVhZGluZyBzcGFjZSAoZW1wdHkgbGluZXMgYXQgdGhlIHRvcCBvZiBhIGZpbGUpLgotOzsgMi4g VHJhaWxpbmcgc3BhY2UgKGVtcHR5IGxpbmVzIGF0IHRoZSBlbmQgb2YgYSBmaWxlKS4KLTs7IDMu IEluZGVudGF0aW9uIHNwYWNlICg4IG9yIG1vcmUgc3BhY2VzIGF0IGJlZ2lubmluZyBvZiBsaW5l LCB0aGF0IHNob3VsZCBiZQotOzsJCSAgICAgIHJlcGxhY2VkIHdpdGggVEFCUykuCi07OyA0LiBT cGFjZXMgZm9sbG93ZWQgYnkgYSBUQUIuICAoQWxtb3N0IGFsd2F5cywgd2UgbmV2ZXIgd2FudCB0 aGF0KS4KLTs7IDUuIFNwYWNlcyBvciBUQUJTIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgotOzsKLTs7 IFdoaXRlc3BhY2UgZXJyb3JzIGFyZSByZXBvcnRlZCBpbiBhIGJ1ZmZlciwgYW5kIG9uIHRoZSBt b2RlIGxpbmUuCi07OwotOzsgTW9kZSBsaW5lIHdpbGwgc2hvdyBhIFc6PHg+ITx5PiB0byBkZW5v dGUgYSBwYXJ0aWN1bGFyIHR5cGUgb2Ygd2hpdGVzcGFjZSwKLTs7IHdoZXJlIGB4JyBhbmQgYHkn IGNhbiBiZSBvbmUgKG9yIG1vcmUpIG9mOgotOzsKLTs7IGUgLSBFbmQtb2YtTGluZSB3aGl0ZXNw YWNlLgotOzsgaSAtIEluZGVudGF0aW9uIHdoaXRlc3BhY2UuCi07OyBsIC0gTGVhZGluZyB3aGl0 ZXNwYWNlLgotOzsgcyAtIFNwYWNlIGZvbGxvd2VkIGJ5IFRhYi4KLTs7IHQgLSBUcmFpbGluZyB3 aGl0ZXNwYWNlLgotOzsKLTs7IElmIGFueSBvZiB0aGUgd2hpdGVzcGFjZSBjaGVja3MgaXMgdHVy bmVkIG9mZiwgdGhlIG1vZGUgbGluZSB3aWxsIGRpc3BsYXkgYQotOzsgITx5Pi4KLTs7Ci07OyAg ICAgKHNpbmNlICgzKSBpcyB0aGUgbW9zdCBjb250cm92ZXJzaWFsIG9uZSwgaGVyZSBpcyB0aGUg cmF0aW9uYWxlOiBNb3N0Ci07OyAgICAgdGVybWluYWwgZHJpdmVycyBhbmQgcHJpbnRlciBkcml2 ZXJzIGhhdmUgVEFCIGNvbmZpZ3VyZWQgb3IgZXZlbgotOzsgICAgIGhhcmRjb2RlZCB0byBiZSA4 IHNwYWNlcy4gIChTb21lIG9mIHRoZW0gYWxsb3cgY29uZmlndXJhdGlvbiwgYnV0IGFsbW9zdAot OzsgICAgIGFsd2F5cyB0aGV5IGRlZmF1bHQgdG8gOC4pCi07OwotOzsgICAgIENoYW5naW5nIGB0 YWItd2lkdGgnIHRvIG90aGVyIHRoYW4gOCBhbmQgZWRpdGluZyB3aWxsIGNhdXNlIHlvdXIgY29k ZSB0bwotOzsgICAgIGxvb2sgZGlmZmVyZW50IGZyb20gd2l0aGluIEVtYWNzLCBhbmQgc2F5LCBp ZiB5b3UgY2F0IGl0IG9yIG1vcmUgaXQsIG9yCi07OyAgICAgZXZlbiBwcmludCBpdC4KLTs7Ci07 OyAgICAgQWxtb3N0IGFsbCB0aGUgcG9wdWxhciBwcm9ncmFtbWluZyBtb2RlcyBsZXQgeW91IGRl ZmluZSBhbiBvZmZzZXQgKGxpa2UKLTs7ICAgICBjLWJhc2ljLW9mZnNldCBvciBwZXJsLWluZGVu dC1sZXZlbCkgdG8gY29uZmlndXJlIHRoZSBvZmZzZXQsIHNvIHlvdQotOzsgICAgIHNob3VsZCBu ZXZlciBoYXZlIHRvIHNldCB5b3VyIGB0YWItd2lkdGgnIHRvIGJlIG90aGVyIHRoYW4gOCBpbiBh bGwKLTs7ICAgICB0aGVzZSBtb2Rlcy4gIEluIGZhY3QsIHdpdGggYW4gaW5kZW50IGxldmVsIG9m IHNheSwgNCwgMiBUQUJTIHdpbGwgY2F1c2UKLTs7ICAgICBFbWFjcyB0byByZXBsYWNlIHlvdXIg OCBzcGFjZXMgd2l0aCBvbmUgXHQgKHRyeSBpdCkuICBJZiB2aSB1c2VycyBpbgotOzsgICAgIHlv dXIgb2ZmaWNlIGNvbXBsYWluLCB0ZWxsIHRoZW0gdG8gdXNlIHZpbSwgd2hpY2ggZGlzdGluZ3Vp c2hlcyBiZXR3ZWVuCi07OyAgICAgdGFic3RvcCBhbmQgc2hpZnR3aWR0aCAodmkgZXF1aXZhbGVu dCBvZiBvdXIgb2Zmc2V0cyksIGFuZCBhbHNvIGFzayB0aGVtCi07OyAgICAgdG8gc2V0IHNtYXJ0 dGFiLikKLTs7Ci07OyBBbGwgdGhlIGFib3ZlIGhhdmUgY2F1c2VkIChhbmQgd2lsbCBjYXVzZSkg dW53YW50ZWQgY29kZWxpbmUgaW50ZWdyYXRpb24gYW5kCi07OyBtZXJnZSBwcm9ibGVtcy4KLTs7 Ci07OyB3aGl0ZXNwYWNlLmVsIHdpbGwgY29tcGxhaW4gaWYgaXQgZGV0ZWN0cyB3aGl0ZXNwYWNl cyBvbiBvcGVuaW5nIGEgZmlsZSwgYW5kCi07OyB3YXJuIHlvdSBvbiBjbG9zaW5nIGEgZmlsZSBh bHNvIChpbiBjYXNlIHlvdSBoYWQgaW5zZXJ0ZWQgYW55Ci07OyB3aGl0ZXNwYWNlcyBkdXJpbmcg dGhlIHByb2Nlc3Mgb2YgeW91ciBlZGl0aW5nKS4KLTs7Ci07OyBFeHBvcnRlZCBmdW5jdGlvbnM6 Ci07OwotOzsgYHdoaXRlc3BhY2UtYnVmZmVyJyAtIFRvIGNoZWNrIHRoZSBjdXJyZW50IGJ1ZmZl ciBmb3Igd2hpdGVzcGFjZSBwcm9ibGVtcy4KLTs7IGB3aGl0ZXNwYWNlLWNsZWFudXAnIC0gVG8g Y2xlYW51cCBhbGwgd2hpdGVzcGFjZXMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotOzsgYHdoaXRl c3BhY2UtcmVnaW9uJyAtIFRvIGNoZWNrIGJldHdlZW4gcG9pbnQgYW5kIG1hcmsgZm9yIHdoaXRl c3BhY2UKLTs7ICAgICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcy4KLTs7IGB3aGl0ZXNwYWNl LWNsZWFudXAtcmVnaW9uJyAtIFRvIGNsZWFudXAgYWxsIHdoaXRlc3BhY2VzIGJldHdlZW4gcG9p bnQKLTs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtYXJrIGluIHRoZSBjdXJy ZW50IGJ1ZmZlci4KLQotOzs7IENvZGU6Ci0KLShkZWZ2YXIgd2hpdGVzcGFjZS12ZXJzaW9uICIz LjUiICJWZXJzaW9uIG9mIHRoZSB3aGl0ZXNwYWNlIGxpYnJhcnkuIikKLQotKGRlZnZhciB3aGl0 ZXNwYWNlLWFsbC1idWZmZXItZmlsZXMgbmlsCi0gICJBbiBhc3NvY2lhdGVkIGxpc3Qgb2YgYnVm ZmVycyBhbmQgZmlsZXMgY2hlY2tlZCBmb3Igd2hpdGVzcGFjZSBjbGVhbmxpbmVzcy4KLQotVGhp cyBpcyB0byBlbmFibGUgcGVyaW9kaWMgY2hlY2tpbmcgb2Ygd2hpdGVzcGFjZSBjbGVhbmxpbmVz cyBpbiB0aGUgZmlsZXMKLXZpc2l0ZWQgYnkgdGhlIGJ1ZmZlcnMuIikKLQotKGRlZnZhciB3aGl0 ZXNwYWNlLXJlc2Nhbi10aW1lciBuaWwKLSAgIlRpbWVyIG9iamVjdCB1c2VkIHRvIHJlc2NhbiB0 aGUgZmlsZXMgaW4gYnVmZmVycyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4iKQotCi07OyBUZWxs IEVtYWNzIGFib3V0IHRoaXMgbmV3IGtpbmQgb2YgbWlub3IgbW9kZQotKGRlZnZhciB3aGl0ZXNw YWNlLW1vZGUgbmlsCi0gICJOb24tbmlsIHdoZW4gV2hpdGVzcGFjZSBtb2RlIChhIG1pbm9yIG1v ZGUpIGlzIGVuYWJsZWQuIikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnd2hpdGVzcGFj ZS1tb2RlKQotCi0oZGVmdmFyIHdoaXRlc3BhY2UtbW9kZS1saW5lIG5pbAotICAiU3RyaW5nIHRv IGRpc3BsYXkgaW4gdGhlIG1vZGUgbGluZSBmb3IgV2hpdGVzcGFjZSBtb2RlLiIpCi0obWFrZS12 YXJpYWJsZS1idWZmZXItbG9jYWwgJ3doaXRlc3BhY2UtbW9kZS1saW5lKQotCi0oZGVmdmFyIHdo aXRlc3BhY2UtY2hlY2stYnVmZmVyLWxlYWRpbmcgbmlsCi0gICJUZXN0IGxlYWRpbmcgd2hpdGVz cGFjZSBmb3IgZmlsZSBpbiBjdXJyZW50IGJ1ZmZlciBpZiB0LiIpCi0obWFrZS12YXJpYWJsZS1i dWZmZXItbG9jYWwgJ3doaXRlc3BhY2UtY2hlY2stYnVmZmVyLWxlYWRpbmcpCi07OzsjIyNhdXRv bG9hZChwdXQgJ3doaXRlc3BhY2UtY2hlY2stYnVmZmVyLWxlYWRpbmcgJ3NhZmUtbG9jYWwtdmFy aWFibGUgJ2Jvb2xlYW5wKQotCi0oZGVmdmFyIHdoaXRlc3BhY2UtY2hlY2stYnVmZmVyLXRyYWls aW5nIG5pbAotICAiVGVzdCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZvciBmaWxlIGluIGN1cnJlbnQg YnVmZmVyIGlmIHQuIikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnd2hpdGVzcGFjZS1j aGVjay1idWZmZXItdHJhaWxpbmcpCi07OzsjIyNhdXRvbG9hZChwdXQgJ3doaXRlc3BhY2UtY2hl Y2stYnVmZmVyLXRyYWlsaW5nICdzYWZlLWxvY2FsLXZhcmlhYmxlICdib29sZWFucCkKLQotKGRl ZnZhciB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1pbmRlbnQgbmlsCi0gICJUZXN0IGluZGVudGF0 aW9uIHdoaXRlc3BhY2UgZm9yIGZpbGUgaW4gY3VycmVudCBidWZmZXIgaWYgdC4iKQotKG1ha2Ut dmFyaWFibGUtYnVmZmVyLWxvY2FsICd3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1pbmRlbnQpCi07 OzsjIyNhdXRvbG9hZChwdXQgJ3doaXRlc3BhY2UtY2hlY2stYnVmZmVyLWluZGVudCAnc2FmZS1s b2NhbC12YXJpYWJsZSAnYm9vbGVhbnApCi0KLShkZWZ2YXIgd2hpdGVzcGFjZS1jaGVjay1idWZm ZXItc3BhY2V0YWIgbmlsCi0gICJUZXN0IFNwYWNlLWZvbGxvd2VkLWJ5LVRBQlMgd2hpdGVzcGFj ZSBmb3IgZmlsZSBpbiBjdXJyZW50IGJ1ZmZlciBpZiB0LiIpCi0obWFrZS12YXJpYWJsZS1idWZm ZXItbG9jYWwgJ3doaXRlc3BhY2UtY2hlY2stYnVmZmVyLXNwYWNldGFiKQotOzs7IyMjYXV0b2xv YWQocHV0ICd3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1zcGFjZXRhYiAnc2FmZS1sb2NhbC12YXJp YWJsZSAnYm9vbGVhbnApCi0KLShkZWZ2YXIgd2hpdGVzcGFjZS1jaGVjay1idWZmZXItYXRlb2wg bmlsCi0gICJUZXN0IGVuZC1vZi1saW5lIHdoaXRlc3BhY2UgZm9yIGZpbGUgaW4gY3VycmVudCBi dWZmZXIgaWYgdC4iKQotKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICd3aGl0ZXNwYWNlLWNo ZWNrLWJ1ZmZlci1hdGVvbCkKLTs7OyMjI2F1dG9sb2FkKHB1dCAnd2hpdGVzcGFjZS1jaGVjay1i dWZmZXItYXRlb2wgJ3NhZmUtbG9jYWwtdmFyaWFibGUgJ2Jvb2xlYW5wKQotCi0oZGVmdmFyIHdo aXRlc3BhY2UtaGlnaGxpZ2h0ZWQtc3BhY2UgbmlsCi0gICJUaGUgdmFyaWFibGUgdG8gc3RvcmUg dGhlIGV4dGVudCB0byBoaWdobGlnaHQuIikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAn d2hpdGVzcGFjZS1oaWdobGlnaHRlZC1zcGFjZSkKLQotKGRlZmFsaWFzICd3aGl0ZXNwYWNlLW1h a2Utb3ZlcmxheQotICAoaWYgKGZlYXR1cmVwICd4ZW1hY3MpICdtYWtlLWV4dGVudCAnbWFrZS1v dmVybGF5KSkKLShkZWZhbGlhcyAnd2hpdGVzcGFjZS1vdmVybGF5LXB1dAotICAoaWYgKGZlYXR1 cmVwICd4ZW1hY3MpICdzZXQtZXh0ZW50LXByb3BlcnR5ICdvdmVybGF5LXB1dCkpCi0oZGVmYWxp YXMgJ3doaXRlc3BhY2UtZGVsZXRlLW92ZXJsYXkKLSAgKGlmIChmZWF0dXJlcCAneGVtYWNzKSAn ZGVsZXRlLWV4dGVudCAnZGVsZXRlLW92ZXJsYXkpKQotKGRlZmFsaWFzICd3aGl0ZXNwYWNlLW92 ZXJsYXktc3RhcnQKLSAgKGlmIChmZWF0dXJlcCAneGVtYWNzKSAnZXh0ZW50LXN0YXJ0ICdvdmVy bGF5LXN0YXJ0KSkKLShkZWZhbGlhcyAnd2hpdGVzcGFjZS1vdmVybGF5LWVuZAotICAoaWYgKGZl YXR1cmVwICd4ZW1hY3MpICdleHRlbnQtZW5kICdvdmVybGF5LWVuZCkpCi0oZGVmYWxpYXMgJ3do aXRlc3BhY2UtbW9kZS1saW5lLXVwZGF0ZQotICAoaWYgKGZlYXR1cmVwICd4ZW1hY3MpICdyZWRy YXctbW9kZWxpbmUgJ2ZvcmNlLW1vZGUtbGluZS11cGRhdGUpKQotCi0oZGVmZ3JvdXAgd2hpdGVz cGFjZSBuaWwKLSAgIkNoZWNrIGZvciBhbmQgZml4IGZpdmUgZGlmZmVyZW50IHR5cGVzIG9mIHdo aXRlc3BhY2VzIGluIHNvdXJjZSBjb2RlLiIKLSAgOnZlcnNpb24gIjIxLjEiCi0gIDpsaW5rICco ZW1hY3MtY29tbWVudGFyeS1saW5rICJ3aGl0ZXNwYWNlLmVsIikKLSAgOzsgU2luY2UgWEVtYWNz IGRvZXNuJ3QgaGF2ZSBhICdjb252ZW5pZW5jZSBncm91cCwgdXNlIHRoZSBuZXh0IGJlc3QgZ3Jv dXAKLSAgOzsgd2hpY2ggaXMgJ2VkaXRpbmc/Ci0gIDpncm91cCAoaWYgKGZlYXR1cmVwICd4ZW1h Y3MpICdlZGl0aW5nICdjb252ZW5pZW5jZSkpCi0KLShkZWZjdXN0b20gd2hpdGVzcGFjZS1jaGVj ay1sZWFkaW5nLXdoaXRlc3BhY2UgdAotICAiRmxhZyB0byBjaGVjayBsZWFkaW5nIHdoaXRlc3Bh Y2UuICBUaGlzIGlzIHRoZSBnbG9iYWwgZm9yIHRoZSBzeXN0ZW0uCi1JdCBjYW4gYmUgb3ZlcnJp ZGRlbiBieSBzZXR0aW5nIGEgYnVmZmVyIGxvY2FsIHZhcmlhYmxlCi1gd2hpdGVzcGFjZS1jaGVj ay1idWZmZXItbGVhZGluZycuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3doaXRlc3Bh Y2UpCi0KLShkZWZjdXN0b20gd2hpdGVzcGFjZS1jaGVjay10cmFpbGluZy13aGl0ZXNwYWNlIHQK LSAgIkZsYWcgdG8gY2hlY2sgdHJhaWxpbmcgd2hpdGVzcGFjZS4gIFRoaXMgaXMgdGhlIGdsb2Jh bCBmb3IgdGhlIHN5c3RlbS4KLUl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYSBidWZm ZXIgbG9jYWwgdmFyaWFibGUKLWB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci10cmFpbGluZycuIgot ICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3doaXRlc3BhY2UpCi0KLShkZWZjdXN0b20gd2hp dGVzcGFjZS1jaGVjay1zcGFjZXRhYi13aGl0ZXNwYWNlIHQKLSAgIkZsYWcgdG8gY2hlY2sgc3Bh Y2UgZm9sbG93ZWQgYnkgYSBUQUIuICBUaGlzIGlzIHRoZSBnbG9iYWwgZm9yIHRoZSBzeXN0ZW0u Ci1JdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIGEgYnVmZmVyIGxvY2FsIHZhcmlhYmxl Ci1gd2hpdGVzcGFjZS1jaGVjay1idWZmZXItc3BhY2V0YWInLiIKLSAgOnR5cGUgJ2Jvb2xlYW4K LSAgOmdyb3VwICd3aGl0ZXNwYWNlKQotCi0oZGVmY3VzdG9tIHdoaXRlc3BhY2Utc3BhY2V0YWIt cmVnZXhwICJbIF0rXHQiCi0gICJSZWdleHAgdG8gbWF0Y2ggb25lIG9yIG1vcmUgc3BhY2VzIGZv bGxvd2VkIGJ5IGEgVEFCLiIKLSAgOnR5cGUgJ3JlZ2V4cAotICA6Z3JvdXAgJ3doaXRlc3BhY2Up Ci0KLShkZWZjdXN0b20gd2hpdGVzcGFjZS1jaGVjay1pbmRlbnQtd2hpdGVzcGFjZSBpbmRlbnQt dGFicy1tb2RlCi0gICJGbGFnIHRvIGNoZWNrIGluZGVudGF0aW9uIHdoaXRlc3BhY2UuICBUaGlz IGlzIHRoZSBnbG9iYWwgZm9yIHRoZSBzeXN0ZW0uCi1JdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBz ZXR0aW5nIGEgYnVmZmVyIGxvY2FsIHZhcmlhYmxlCi1gd2hpdGVzcGFjZS1jaGVjay1idWZmZXIt aW5kZW50Jy4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAnd2hpdGVzcGFjZSkKLQotKGRl ZmN1c3RvbSB3aGl0ZXNwYWNlLWluZGVudC1yZWdleHAgIl5cdCpcXCggICAgICAgIFxcKSsiCi0g ICJSZWdleHAgdG8gbWF0Y2ggbXVsdGlwbGVzIG9mIGVpZ2h0IHNwYWNlcyBuZWFyIGxpbmUgYmVn aW5uaW5ncy4KLVRoZSBkZWZhdWx0IHZhbHVlIGlnbm9yZXMgbGVhZGluZyBUQUJzLiIKLSAgOnR5 cGUgJ3JlZ2V4cAotICA6Z3JvdXAgJ3doaXRlc3BhY2UpCi0KLShkZWZjdXN0b20gd2hpdGVzcGFj ZS1jaGVjay1hdGVvbC13aGl0ZXNwYWNlIHQKLSAgIkZsYWcgdG8gY2hlY2sgZW5kLW9mLWxpbmUg d2hpdGVzcGFjZS4gIFRoaXMgaXMgdGhlIGdsb2JhbCBmb3IgdGhlIHN5c3RlbS4KLUl0IGNhbiBi ZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYSBidWZmZXIgbG9jYWwgdmFyaWFibGUKLWB3aGl0ZXNw YWNlLWNoZWNrLWJ1ZmZlci1hdGVvbCcuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3do aXRlc3BhY2UpCi0KLShkZWZjdXN0b20gd2hpdGVzcGFjZS1hdGVvbC1yZWdleHAgIlsgXHRdKyQi Ci0gICJSZWdleHAgdG8gbWF0Y2ggb25lIG9yIG1vcmUgVEFCcyBvciBzcGFjZXMgYXQgbGluZSBl bmRzLiIKLSAgOnR5cGUgJ3JlZ2V4cAotICA6Z3JvdXAgJ3doaXRlc3BhY2UpCi0KLShkZWZjdXN0 b20gd2hpdGVzcGFjZS1lcnJidWYgIipXaGl0ZXNwYWNlIEVycm9ycyoiCi0gICJUaGUgbmFtZSBv ZiB0aGUgYnVmZmVyIHdoZXJlIHdoaXRlc3BhY2UgcmVsYXRlZCBtZXNzYWdlcyB3aWxsIGJlIGxv Z2dlZC4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICd3aGl0ZXNwYWNlKQotCi0oZGVmY3Vz dG9tIHdoaXRlc3BhY2UtY2xlYW4tbXNnICJjbGVhbi4iCi0gICJJZiBub24tbmlsLCB0aGlzIG1l c3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgYWZ0ZXIgYSB3aGl0ZXNwYWNlIGNoZWNrCi1kZXRlcm1p bmVzIGEgZmlsZSB0byBiZSBjbGVhbi4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICd3aGl0 ZXNwYWNlKQotCi0oZGVmY3VzdG9tIHdoaXRlc3BhY2UtYWJvcnQtb24tZXJyb3IgbmlsCi0gICJX aGlsZSB3cml0aW5nIGEgZmlsZSwgYWJvcnQgaWYgdGhlIGZpbGUgaXMgdW5jbGVhbi4KLUlmIGB3 aGl0ZXNwYWNlLWF1dG8tY2xlYW51cCcgaXMgc2V0LCB0aGF0IHRha2VzIHByZWNlZGVuY2Ugb3Zl cgotdGhpcyB2YXJpYWJsZS4iCi0gIDp0eXBlICAnYm9vbGVhbgotICA6Z3JvdXAgJ3doaXRlc3Bh Y2UpCi0KLShkZWZjdXN0b20gd2hpdGVzcGFjZS1hdXRvLWNsZWFudXAgbmlsCi0gICJDbGVhbnVw IGEgYnVmZmVyIGF1dG9tYXRpY2FsbHkgb24gZmluZGluZyBpdCB3aGl0ZXNwYWNlIHVuY2xlYW4u IgotICA6dHlwZSAgJ2Jvb2xlYW4KLSAgOmdyb3VwICd3aGl0ZXNwYWNlKQotCi0oZGVmY3VzdG9t IHdoaXRlc3BhY2Utc2lsZW50IG5pbAotICAiQWxsIHdoaXRlc3BhY2UgZXJyb3JzIHdpbGwgYmUg c2hvd24gb25seSBpbiB0aGUgbW9kZSBsaW5lIHdoZW4gdC4KLQotTm90ZSB0aGF0IHNldHRpbmcg dGhpcyBtYXkgY2F1c2UgYWxsIHdoaXRlc3BhY2VzIGludHJvZHVjZWQgaW4gYSBmaWxlIHRvIGdv Ci11bm5vdGljZWQgd2hlbiB0aGUgYnVmZmVyIGlzIGtpbGxlZCwgdW5sZXNzIHRoZSB1c2VyIHZp c2l0cyB0aGUgYCpXaGl0ZXNwYWNlCi1FcnJvcnMqJyBidWZmZXIgYmVmb3JlIG9wZW5pbmcgKG9y IGNsb3NpbmcpIGFub3RoZXIgZmlsZS4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAnd2hp dGVzcGFjZSkKLQotKGRlZmN1c3RvbSB3aGl0ZXNwYWNlLW1vZGVzICcoYWRhLW1vZGUgYXNtLW1v ZGUgYXV0b2NvbmYtbW9kZSBhd2stbW9kZQotCQkJCSAgICAgICBjLW1vZGUgYysrLW1vZGUgY2Mt bW9kZQotCQkJCSAgICAgICBjaGFuZ2UtbG9nLW1vZGUgY3BlcmwtbW9kZQotCQkJCSAgICAgICBl bGVjdHJpYy1ucm9mZi1tb2RlIGVtYWNzLWxpc3AtbW9kZQotCQkJCSAgICAgICBmOTAtbW9kZSBm b3J0cmFuLW1vZGUgaHRtbC1tb2RlCi0JCQkJICAgICAgIGh0bWwzLW1vZGUgamF2YS1tb2RlIGpk ZS1tb2RlCi0JCQkJICAgICAgIGtzaC1tb2RlIGxhdGV4LW1vZGUgTGFUZVgtbW9kZQotCQkJCSAg ICAgICBsaXNwLW1vZGUgbTQtbW9kZSBtYWtlZmlsZS1tb2RlCi0JCQkJICAgICAgIG1vZHVsYS0y LW1vZGUgbnJvZmYtbW9kZSBvYmpjLW1vZGUKLQkJCQkgICAgICAgcGFzY2FsLW1vZGUgcGVybC1t b2RlIHByb2xvZy1tb2RlCi0JCQkJICAgICAgIHB5dGhvbi1tb2RlIHNjaGVtZS1tb2RlIHNnbWwt bW9kZQotCQkJCSAgICAgICBzaC1tb2RlIHNoZWxsLXNjcmlwdC1tb2RlIHNpbXVsYS1tb2RlCi0J CQkJICAgICAgIHRjbC1tb2RlIHRleC1tb2RlIHRleGluZm8tbW9kZQotCQkJCSAgICAgICB2cm1s LW1vZGUgeG1sLW1vZGUpCi0KLSAgIk1ham9yIG1vZGVzIGluIHdoaWNoIHdlIHR1cm4gb24gd2hp dGVzcGFjZSBjaGVja2luZy4KLQotVGhlc2UgYXJlIG1vc3RseSBwcm9ncmFtbWluZyBhbmQgZG9j dW1lbnRhdGlvbiBtb2Rlcy4gIEJ1dCB5b3UgbWF5IGFkZCBvdGhlcgotbW9kZXMgdGhhdCB5b3Ug d2FudCB3aGl0ZXNwYWNlcyBjaGVja2VkIGluIGJ5IGFkZGluZyBzb21ldGhpbmcgbGlrZSB0aGUK LWZvbGxvd2luZyB0byB5b3VyIGAuZW1hY3MnOgotCi1cKHNldHEgd2hpdGVzcGFjZS1tb2RlcyAo Y29ucyBcXD0nbXktbW9kZSAoY29ucyBcXD0nbXktb3RoZXItbW9kZQotCQkJCQkgICAgd2hpdGVz cGFjZS1tb2RlcykpXCkKLQotT3IsIGFsdGVybmF0ZWx5LCB5b3UgY2FuIHVzZSB0aGUgRW1hY3Mg YGN1c3RvbWl6ZScgY29tbWFuZCB0byBzZXQgdGhpcy4iCi0gIDp0eXBlICcocmVwZWF0IHN5bWJv bCkKLSAgOmdyb3VwICd3aGl0ZXNwYWNlKQotCi0oZGVmY3VzdG9tIHdoaXRlc3BhY2UtcmVzY2Fu LXRpbWVyLXRpbWUgNjAwCi0gICJQZXJpb2QgaW4gc2Vjb25kcyB0byByZXNjYW4gbW9kaWZpZWQg YnVmZmVycyBmb3Igd2hpdGVzcGFjZSBjcmVlcC4KLQotVGhpcyBpcyB0aGUgcGVyaW9kIGFmdGVy IHdoaWNoIHRoZSB0aW1lciB3aWxsIGZpcmUgY2F1c2luZwotYHdoaXRlc3BhY2UtcmVzY2FuLWZp bGVzLWluLWJ1ZmZlcnMnIHRvIGNoZWNrIGZvciB3aGl0ZXNwYWNlIGNyZWVwIGluCi1tb2RpZmll ZCBidWZmZXJzLgotCi1UbyBkaXNhYmxlIHRpbWVyIHNjYW5zLCBzZXQgdGhpcyB0byB6ZXJvLiIK LSAgOnR5cGUgJ2ludGVnZXIKLSAgOmdyb3VwICd3aGl0ZXNwYWNlKQotCi0oZGVmY3VzdG9tIHdo aXRlc3BhY2UtZGlzcGxheS1pbi1tb2RlbGluZSB0Ci0gICJEaXNwbGF5IHdoaXRlc3BhY2UgZXJy b3JzIG9uIHRoZSBtb2RlbGluZS4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAnd2hpdGVz cGFjZSkKLQotKGRlZmN1c3RvbSB3aGl0ZXNwYWNlLWRpc3BsYXktc3BhY2VzLWluLWNvbG9yIHQK LSAgIkRpc3BsYXkgdGhlIGJvZ3VzIHdoaXRlc3BhY2VzIGJ5IGNvbG9yaW5nIHRoZW0gd2l0aCB0 aGUgZmFjZQotYHdoaXRlc3BhY2UtaGlnaGxpZ2h0Jy4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpn cm91cCAnd2hpdGVzcGFjZSkKLQotKGRlZmZhY2Ugd2hpdGVzcGFjZS1oaWdobGlnaHQgJygoKChj bGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKQotCQkJCSAoOmJhY2tncm91bmQgImdyZWVu MSIpKQotCQkJCSgoKGNsYXNzIGNvbG9yKSAoYmFja2dyb3VuZCBkYXJrKSkKLQkJCQkgKDpiYWNr Z3JvdW5kICJzZWEgZ3JlZW4iKSkKLQkJCQkoKChjbGFzcyBncmF5c2NhbGUgbW9ubykKLQkJCQkg IChiYWNrZ3JvdW5kIGxpZ2h0KSkKLQkJCQkgKDpiYWNrZ3JvdW5kICJibGFjayIpKQotCQkJCSgo KGNsYXNzIGdyYXlzY2FsZSBtb25vKQotCQkJCSAgKGJhY2tncm91bmQgZGFyaykpCi0JCQkJICg6 YmFja2dyb3VuZCAid2hpdGUiKSkpCi0gICJGYWNlIHVzZWQgZm9yIGhpZ2hsaWdodGluZyB0aGUg Ym9ndXMgd2hpdGVzcGFjZXMgdGhhdCBleGlzdCBpbiB0aGUgYnVmZmVyLiIKLSAgOmdyb3VwICd3 aGl0ZXNwYWNlKQotCi0oaWYgKG5vdCAoYXNzb2MgJ3doaXRlc3BhY2UtbW9kZSBtaW5vci1tb2Rl LWFsaXN0KSkKLSAgICAoc2V0cSBtaW5vci1tb2RlLWFsaXN0IChjb25zICcod2hpdGVzcGFjZS1t b2RlIHdoaXRlc3BhY2UtbW9kZS1saW5lKQotCQkJCSBtaW5vci1tb2RlLWFsaXN0KSkpCi0KLShz ZXQtZGVmYXVsdCAnd2hpdGVzcGFjZS1jaGVjay1idWZmZXItbGVhZGluZwotCSAgICAgd2hpdGVz cGFjZS1jaGVjay1sZWFkaW5nLXdoaXRlc3BhY2UpCi0oc2V0LWRlZmF1bHQgJ3doaXRlc3BhY2Ut Y2hlY2stYnVmZmVyLXRyYWlsaW5nCi0JICAgICB3aGl0ZXNwYWNlLWNoZWNrLXRyYWlsaW5nLXdo aXRlc3BhY2UpCi0oc2V0LWRlZmF1bHQgJ3doaXRlc3BhY2UtY2hlY2stYnVmZmVyLWluZGVudAot CSAgICAgd2hpdGVzcGFjZS1jaGVjay1pbmRlbnQtd2hpdGVzcGFjZSkKLShzZXQtZGVmYXVsdCAn d2hpdGVzcGFjZS1jaGVjay1idWZmZXItc3BhY2V0YWIKLQkgICAgIHdoaXRlc3BhY2UtY2hlY2st c3BhY2V0YWItd2hpdGVzcGFjZSkKLShzZXQtZGVmYXVsdCAnd2hpdGVzcGFjZS1jaGVjay1idWZm ZXItYXRlb2wKLQkgICAgIHdoaXRlc3BhY2UtY2hlY2stYXRlb2wtd2hpdGVzcGFjZSkKLQotKGRl ZnVuIHdoaXRlc3BhY2UtY2hlY2std2hpdGVzcGFjZS1tb2RlICgmb3B0aW9uYWwgYXJnKQotICAi VGVzdCBhbmQgc2V0IHRoZSB3aGl0ZXNwYWNlLW1vZGUgaW4gcXVhbGlmeWluZyBidWZmZXJzLiIK LSAgKGlmIChudWxsIHdoaXRlc3BhY2UtbW9kZSkKLSAgICAgIChzZXRxIHdoaXRlc3BhY2UtbW9k ZQotCSAgICAoaWYgKG9yIGFyZyAobWVtYmVyIG1ham9yLW1vZGUgd2hpdGVzcGFjZS1tb2Rlcykp Ci0JCXQKLQkgICAgICBuaWwpKSkpCi0KLTs7OyMjI2F1dG9sb2FkCi0oZGVmdW4gd2hpdGVzcGFj ZS10b2dnbGUtbGVhZGluZy1jaGVjayAoKQotICAiVG9nZ2xlIHRoZSBjaGVjayBmb3IgbGVhZGlu ZyBzcGFjZSBpbiB0aGUgbG9jYWwgYnVmZmVyLiIKLSAgKGludGVyYWN0aXZlKQotICAobGV0ICgo Y3VycmVudC12YWwgd2hpdGVzcGFjZS1jaGVjay1idWZmZXItbGVhZGluZykpCi0gICAgKHNldHEg d2hpdGVzcGFjZS1jaGVjay1idWZmZXItbGVhZGluZyAobm90IGN1cnJlbnQtdmFsKSkKLSAgICAo bWVzc2FnZSAiV2lsbCVzIGNoZWNrIGZvciBsZWFkaW5nIHNwYWNlIGluIGJ1ZmZlci4iCi0JICAg ICAoaWYgd2hpdGVzcGFjZS1jaGVjay1idWZmZXItbGVhZGluZyAiIiAiIG5vdCIpKQotICAgIChp ZiB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1sZWFkaW5nICh3aGl0ZXNwYWNlLWJ1ZmZlci1sZWFk aW5nKSkpKQotCi07OzsjIyNhdXRvbG9hZAotKGRlZnVuIHdoaXRlc3BhY2UtdG9nZ2xlLXRyYWls aW5nLWNoZWNrICgpCi0gICJUb2dnbGUgdGhlIGNoZWNrIGZvciB0cmFpbGluZyBzcGFjZSBpbiB0 aGUgbG9jYWwgYnVmZmVyLiIKLSAgKGludGVyYWN0aXZlKQotICAobGV0ICgoY3VycmVudC12YWwg d2hpdGVzcGFjZS1jaGVjay1idWZmZXItdHJhaWxpbmcpKQotICAgIChzZXRxIHdoaXRlc3BhY2Ut Y2hlY2stYnVmZmVyLXRyYWlsaW5nIChub3QgY3VycmVudC12YWwpKQotICAgIChtZXNzYWdlICJX aWxsJXMgY2hlY2sgZm9yIHRyYWlsaW5nIHNwYWNlIGluIGJ1ZmZlci4iCi0JICAgICAoaWYgd2hp dGVzcGFjZS1jaGVjay1idWZmZXItdHJhaWxpbmcgIiIgIiBub3QiKSkKLSAgICAoaWYgd2hpdGVz cGFjZS1jaGVjay1idWZmZXItdHJhaWxpbmcgKHdoaXRlc3BhY2UtYnVmZmVyLXRyYWlsaW5nKSkp KQotCi07OzsjIyNhdXRvbG9hZAotKGRlZnVuIHdoaXRlc3BhY2UtdG9nZ2xlLWluZGVudC1jaGVj ayAoKQotICAiVG9nZ2xlIHRoZSBjaGVjayBmb3IgaW5kZW50YXRpb24gc3BhY2UgaW4gdGhlIGxv Y2FsIGJ1ZmZlci4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKGN1cnJlbnQtdmFsIHdoaXRl c3BhY2UtY2hlY2stYnVmZmVyLWluZGVudCkpCi0gICAgKHNldHEgd2hpdGVzcGFjZS1jaGVjay1i dWZmZXItaW5kZW50IChub3QgY3VycmVudC12YWwpKQotICAgIChtZXNzYWdlICJXaWxsJXMgY2hl Y2sgZm9yIGluZGVudGF0aW9uIHNwYWNlIGluIGJ1ZmZlci4iCi0JICAgICAoaWYgd2hpdGVzcGFj ZS1jaGVjay1idWZmZXItaW5kZW50ICIiICIgbm90IikpCi0gICAgKGlmIHdoaXRlc3BhY2UtY2hl Y2stYnVmZmVyLWluZGVudAotCSh3aGl0ZXNwYWNlLWJ1ZmZlci1zZWFyY2ggd2hpdGVzcGFjZS1p bmRlbnQtcmVnZXhwKSkpKQotCi07OzsjIyNhdXRvbG9hZAotKGRlZnVuIHdoaXRlc3BhY2UtdG9n Z2xlLXNwYWNldGFiLWNoZWNrICgpCi0gICJUb2dnbGUgdGhlIGNoZWNrIGZvciBzcGFjZS1mb2xs b3dlZC1ieS1UQUJzIGluIHRoZSBsb2NhbCBidWZmZXIuIgotICAoaW50ZXJhY3RpdmUpCi0gIChs ZXQgKChjdXJyZW50LXZhbCB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1zcGFjZXRhYikpCi0gICAg KHNldHEgd2hpdGVzcGFjZS1jaGVjay1idWZmZXItc3BhY2V0YWIgKG5vdCBjdXJyZW50LXZhbCkp Ci0gICAgKG1lc3NhZ2UgIldpbGwlcyBjaGVjayBmb3Igc3BhY2UtZm9sbG93ZWQtYnktVEFCcyBp biBidWZmZXIuIgotCSAgICAgKGlmIHdoaXRlc3BhY2UtY2hlY2stYnVmZmVyLXNwYWNldGFiICIi ICIgbm90IikpCi0gICAgKGlmIHdoaXRlc3BhY2UtY2hlY2stYnVmZmVyLXNwYWNldGFiCi0JKHdo aXRlc3BhY2UtYnVmZmVyLXNlYXJjaCB3aGl0ZXNwYWNlLXNwYWNldGFiLXJlZ2V4cCkpKSkKLQot Ci07OzsjIyNhdXRvbG9hZAotKGRlZnVuIHdoaXRlc3BhY2UtdG9nZ2xlLWF0ZW9sLWNoZWNrICgp Ci0gICJUb2dnbGUgdGhlIGNoZWNrIGZvciBlbmQtb2YtbGluZSBzcGFjZSBpbiB0aGUgbG9jYWwg YnVmZmVyLiIKLSAgKGludGVyYWN0aXZlKQotICAobGV0ICgoY3VycmVudC12YWwgd2hpdGVzcGFj ZS1jaGVjay1idWZmZXItYXRlb2wpKQotICAgIChzZXRxIHdoaXRlc3BhY2UtY2hlY2stYnVmZmVy LWF0ZW9sIChub3QgY3VycmVudC12YWwpKQotICAgIChtZXNzYWdlICJXaWxsJXMgY2hlY2sgZm9y IGVuZC1vZi1saW5lIHNwYWNlIGluIGJ1ZmZlci4iCi0JICAgICAoaWYgd2hpdGVzcGFjZS1jaGVj ay1idWZmZXItYXRlb2wgIiIgIiBub3QiKSkKLSAgICAoaWYgd2hpdGVzcGFjZS1jaGVjay1idWZm ZXItYXRlb2wKLQkod2hpdGVzcGFjZS1idWZmZXItc2VhcmNoIHdoaXRlc3BhY2UtYXRlb2wtcmVn ZXhwKSkpKQotCi0KLTs7OyMjI2F1dG9sb2FkCi0oZGVmdW4gd2hpdGVzcGFjZS1idWZmZXIgKCZv cHRpb25hbCBxdWlldCkKLSAgIkZpbmQgZml2ZSBkaWZmZXJlbnQgdHlwZXMgb2Ygd2hpdGUgc3Bh Y2VzIGluIGJ1ZmZlci4KLVRoZXNlIGFyZToKLTEuIExlYWRpbmcgc3BhY2UgXChlbXB0eSBsaW5l cyBhdCB0aGUgdG9wIG9mIGEgZmlsZSkuCi0yLiBUcmFpbGluZyBzcGFjZSBcKGVtcHR5IGxpbmVz IGF0IHRoZSBlbmQgb2YgYSBmaWxlKS4KLTMuIEluZGVudGF0aW9uIHNwYWNlIFwoOCBvciBtb3Jl IHNwYWNlcywgdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBUQUJTKS4KLTQuIFNwYWNlcyBm b2xsb3dlZCBieSBhIFRBQi4gXChBbG1vc3QgYWx3YXlzLCB3ZSBuZXZlciB3YW50IHRoYXQpLgot NS4gU3BhY2VzIG9yIFRBQlMgYXQgdGhlIGVuZCBvZiBhIGxpbmUuCi0KLUNoZWNrIGZvciB3aGl0 ZXNwYWNlIG9ubHkgaWYgdGhpcyBidWZmZXIgcmVhbGx5IGNvbnRhaW5zIGEgbm9uLWVtcHR5IGZp bGUKLWFuZDoKLTEuIHRoZSBtYWpvciBtb2RlIGlzIG9uZSBvZiB0aGUgd2hpdGVzcGFjZS1tb2Rl cywgb3IKLTIuIGB3aGl0ZXNwYWNlLWJ1ZmZlcicgd2FzIGV4cGxpY2l0bHkgY2FsbGVkIHdpdGgg YSBwcmVmaXggYXJndW1lbnQuIgotICAoaW50ZXJhY3RpdmUpCi0gIChsZXQgKCh3aGl0ZXNwYWNl LWVycm9yIG5pbCkpCi0gICAgKHdoaXRlc3BhY2UtY2hlY2std2hpdGVzcGFjZS1tb2RlIGN1cnJl bnQtcHJlZml4LWFyZykKLSAgICAoaWYgKGFuZCBidWZmZXItZmlsZS1uYW1lICg+IChidWZmZXIt c2l6ZSkgMCkgd2hpdGVzcGFjZS1tb2RlKQotCShwcm9nbgotCSAgKHdoaXRlc3BhY2UtY2hlY2st YnVmZmVyLWxpc3QgKGJ1ZmZlci1uYW1lKSBidWZmZXItZmlsZS1uYW1lKQotCSAgKHdoaXRlc3Bh Y2UtdGlja2xlLXRpbWVyKQotCSAgKG92ZXJsYXktcmVjZW50ZXIgKHBvaW50LW1heCkpCi0JICAo cmVtb3ZlLW92ZXJsYXlzIG5pbCBuaWwgJ2ZhY2UgJ3doaXRlc3BhY2UtaGlnaGxpZ2h0KQotCSAg KGlmIHdoaXRlc3BhY2UtYXV0by1jbGVhbnVwCi0JICAgICAgKGlmIGJ1ZmZlci1yZWFkLW9ubHkK LQkJICAoaWYgKG5vdCBxdWlldCkKLQkJICAgICAgKG1lc3NhZ2UgIkNhbid0IGNsZWFudXA6ICVz IGlzIHJlYWQtb25seSIgKGJ1ZmZlci1uYW1lKSkpCi0JCSh3aGl0ZXNwYWNlLWNsZWFudXAtaW50 ZXJuYWwpKQotCSAgICAobGV0ICgod2hpdGVzcGFjZS1sZWFkaW5nIChpZiB3aGl0ZXNwYWNlLWNo ZWNrLWJ1ZmZlci1sZWFkaW5nCi0JCQkJCSAgKHdoaXRlc3BhY2UtYnVmZmVyLWxlYWRpbmcpCi0J CQkJCW5pbCkpCi0JCSAgKHdoaXRlc3BhY2UtdHJhaWxpbmcgKGlmIHdoaXRlc3BhY2UtY2hlY2st YnVmZmVyLXRyYWlsaW5nCi0JCQkJCSAgICh3aGl0ZXNwYWNlLWJ1ZmZlci10cmFpbGluZykKLQkJ CQkJIG5pbCkpCi0JCSAgKHdoaXRlc3BhY2UtaW5kZW50IChpZiB3aGl0ZXNwYWNlLWNoZWNrLWJ1 ZmZlci1pbmRlbnQKLQkJCQkJICh3aGl0ZXNwYWNlLWJ1ZmZlci1zZWFyY2gKLQkJCQkJICB3aGl0 ZXNwYWNlLWluZGVudC1yZWdleHApCi0JCQkJICAgICAgIG5pbCkpCi0JCSAgKHdoaXRlc3BhY2Ut c3BhY2V0YWIgKGlmIHdoaXRlc3BhY2UtY2hlY2stYnVmZmVyLXNwYWNldGFiCi0JCQkJCSAgICh3 aGl0ZXNwYWNlLWJ1ZmZlci1zZWFyY2gKLQkJCQkJICAgIHdoaXRlc3BhY2Utc3BhY2V0YWItcmVn ZXhwKQotCQkJCQkgbmlsKSkKLQkJICAod2hpdGVzcGFjZS1hdGVvbCAoaWYgd2hpdGVzcGFjZS1j aGVjay1idWZmZXItYXRlb2wKLQkJCQkJKHdoaXRlc3BhY2UtYnVmZmVyLXNlYXJjaAotCQkJCQkg d2hpdGVzcGFjZS1hdGVvbC1yZWdleHApCi0JCQkJICAgICAgbmlsKSkKLQkJICAod2hpdGVzcGFj ZS1lcnJtc2cgbmlsKQotCQkgICh3aGl0ZXNwYWNlLWZpbGVuYW1lIGJ1ZmZlci1maWxlLW5hbWUp Ci0JCSAgKHdoaXRlc3BhY2UtdGhpcy1tb2RlbGluZSAiIikpCi0KLQkgICAgICA7OyBOb3cgbGV0 J3MgY29tcGxhaW4gaWYgd2UgZm91bmQgYW55IG9mIHRoZSBhYm92ZS4KLQkgICAgICAoc2V0cSB3 aGl0ZXNwYWNlLWVycm9yIChvciB3aGl0ZXNwYWNlLWxlYWRpbmcgd2hpdGVzcGFjZS1pbmRlbnQK LQkJCQkJIHdoaXRlc3BhY2Utc3BhY2V0YWIgd2hpdGVzcGFjZS1hdGVvbAotCQkJCQkgd2hpdGVz cGFjZS10cmFpbGluZykpCi0KLQkgICAgICAoaWYgd2hpdGVzcGFjZS1lcnJvcgotCQkgIChwcm9n bgotCQkgICAgKHNldHEgd2hpdGVzcGFjZS1lcnJtc2cKLQkJCSAgKGNvbmNhdCB3aGl0ZXNwYWNl LWZpbGVuYW1lICIgY29udGFpbnM6XG4iCi0JCQkJICAoaWYgd2hpdGVzcGFjZS1sZWFkaW5nCi0J CQkJICAgICAgIkxlYWRpbmcgd2hpdGVzcGFjZVxuIikKLQkJCQkgIChpZiB3aGl0ZXNwYWNlLWlu ZGVudAotCQkJCSAgICAgIChjb25jYXQgIkluZGVudGF0aW9uIHdoaXRlc3BhY2UiCi0JCQkJCSAg ICAgIHdoaXRlc3BhY2UtaW5kZW50ICJcbiIpKQotCQkJCSAgKGlmIHdoaXRlc3BhY2Utc3BhY2V0 YWIKLQkJCQkgICAgICAoY29uY2F0ICJTcGFjZSBmb2xsb3dlZCBieSBUYWIiCi0JCQkJCSAgICAg IHdoaXRlc3BhY2Utc3BhY2V0YWIgIlxuIikpCi0JCQkJICAoaWYgd2hpdGVzcGFjZS1hdGVvbAot CQkJCSAgICAgIChjb25jYXQgIkVuZC1vZi1saW5lIHdoaXRlc3BhY2UiCi0JCQkJCSAgICAgIHdo aXRlc3BhY2UtYXRlb2wgIlxuIikpCi0JCQkJICAoaWYgd2hpdGVzcGFjZS10cmFpbGluZwotCQkJ CSAgICAgICJUcmFpbGluZyB3aGl0ZXNwYWNlXG4iKQotCQkJCSAgIlxudHlwZSBgTS14IHdoaXRl c3BhY2UtY2xlYW51cCcgdG8gIgotCQkJCSAgImNsZWFudXAgdGhlIGZpbGUuIikpCi0JCSAgICAo c2V0cSB3aGl0ZXNwYWNlLXRoaXMtbW9kZWxpbmUKLQkJCSAgKGNvbmNhdCAoaWYgd2hpdGVzcGFj ZS1hdGVvbCAiZSIpCi0JCQkJICAoaWYgd2hpdGVzcGFjZS1pbmRlbnQgImkiKQotCQkJCSAgKGlm IHdoaXRlc3BhY2UtbGVhZGluZyAibCIpCi0JCQkJICAoaWYgd2hpdGVzcGFjZS1zcGFjZXRhYiAi cyIpCi0JCQkJICAoaWYgd2hpdGVzcGFjZS10cmFpbGluZyAidCIpKSkpKQotCSAgICAgICh3aGl0 ZXNwYWNlLXVwZGF0ZS1tb2RlbGluZSB3aGl0ZXNwYWNlLXRoaXMtbW9kZWxpbmUpCi0JICAgICAg KGlmIChnZXQtYnVmZmVyIHdoaXRlc3BhY2UtZXJyYnVmKQotCQkgIChraWxsLWJ1ZmZlciB3aGl0 ZXNwYWNlLWVycmJ1ZikpCi0JICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXIt Y3JlYXRlIHdoaXRlc3BhY2UtZXJyYnVmKQotCQkoaWYgd2hpdGVzcGFjZS1lcnJtc2cKLQkJICAg IChwcm9nbgotCQkgICAgICAoaW5zZXJ0IHdoaXRlc3BhY2UtZXJybXNnKQotCQkgICAgICAoaWYg KG5vdCAob3IgcXVpZXQgd2hpdGVzcGFjZS1zaWxlbnQpKQotCQkJICAoZGlzcGxheS1idWZmZXIg KGN1cnJlbnQtYnVmZmVyKSB0KSkKLQkJICAgICAgKGlmIChub3QgcXVpZXQpCi0JCQkgIChtZXNz YWdlICJXaGl0ZXNwYWNlczogWyVzJXNdIGluICVzIgotCQkJCSAgIHdoaXRlc3BhY2UtdGhpcy1t b2RlbGluZQotCQkJCSAgIChsZXQgKCh3aGl0ZXNwYWNlLXVuY2hlY2tlZAotCQkJCQkgICh3aGl0 ZXNwYWNlLXVuY2hlY2tlZC13aGl0ZXNwYWNlcykpKQotCQkJCSAgICAgKGlmIHdoaXRlc3BhY2Ut dW5jaGVja2VkCi0JCQkJCSAoY29uY2F0ICIhIiB3aGl0ZXNwYWNlLXVuY2hlY2tlZCkKLQkJCQkg ICAgICAgIiIpKQotCQkJCSAgIHdoaXRlc3BhY2UtZmlsZW5hbWUpKSkKLQkJICAoaWYgKGFuZCAo bm90IHF1aWV0KSAobm90IChlcXVhbCB3aGl0ZXNwYWNlLWNsZWFuLW1zZyAiIikpKQotCQkgICAg ICAobWVzc2FnZSAiJXMgJXMiIHdoaXRlc3BhY2UtZmlsZW5hbWUKLQkJCSAgICAgICB3aGl0ZXNw YWNlLWNsZWFuLW1zZykpKSkpKSkpCi0gICAgd2hpdGVzcGFjZS1lcnJvcikpCi0KLTs7OyMjI2F1 dG9sb2FkCi0oZGVmdW4gd2hpdGVzcGFjZS1yZWdpb24gKHMgZSkKLSAgIkNoZWNrIHRoZSByZWdp b24gZm9yIHdoaXRlc3BhY2UgZXJyb3JzLiIKLSAgKGludGVyYWN0aXZlICJyIikKLSAgKHNhdmUt ZXhjdXJzaW9uCi0gICAgKHNhdmUtcmVzdHJpY3Rpb24KLSAgICAgIChuYXJyb3ctdG8tcmVnaW9u IHMgZSkKLSAgICAgICh3aGl0ZXNwYWNlLWJ1ZmZlcikpKSkKLQotOzs7IyMjYXV0b2xvYWQKLShk ZWZ1biB3aGl0ZXNwYWNlLWNsZWFudXAgKCkKLSAgIkNsZWFudXAgdGhlIGZpdmUgZGlmZmVyZW50 IGtpbmRzIG9mIHdoaXRlc3BhY2UgcHJvYmxlbXMuCi1JdCBub3JtYWxseSBhcHBsaWVzIHRvIHRo ZSB3aG9sZSBidWZmZXIsIGJ1dCBpbiBUcmFuc2llbnQgTWFyayBtb2RlCi13aGVuIHRoZSBtYXJr IGlzIGFjdGl2ZSBpdCBhcHBsaWVzIHRvIHRoZSByZWdpb24uCi1TZWUgYHdoaXRlc3BhY2UtYnVm ZmVyJyBkb2NzdHJpbmcgZm9yIGEgc3VtbWFyeSBvZiB0aGUgcHJvYmxlbXMuIgotICAoaW50ZXJh Y3RpdmUpCi0gIChpZiAoYW5kIHRyYW5zaWVudC1tYXJrLW1vZGUgbWFyay1hY3RpdmUpCi0gICAg ICAod2hpdGVzcGFjZS1jbGVhbnVwLXJlZ2lvbiAocmVnaW9uLWJlZ2lubmluZykgKHJlZ2lvbi1l bmQpKQotICAgICh3aGl0ZXNwYWNlLWNsZWFudXAtaW50ZXJuYWwpKSkKLQotKGRlZnVuIHdoaXRl c3BhY2UtY2xlYW51cC1pbnRlcm5hbCAoJm9wdGlvbmFsIHJlZ2lvbi1vbmx5KQotICA7OyBJZiB0 aGlzIGJ1ZmZlciByZWFsbHkgY29udGFpbnMgYSBmaWxlLCB0aGVuIHJ1biwgZWxzZSBxdWl0Lgot ICAod2hpdGVzcGFjZS1jaGVjay13aGl0ZXNwYWNlLW1vZGUgY3VycmVudC1wcmVmaXgtYXJnKQot ICAoaWYgKGFuZCBidWZmZXItZmlsZS1uYW1lIHdoaXRlc3BhY2UtbW9kZSkKLSAgICAgIChsZXQg KCh3aGl0ZXNwYWNlLWFueSBuaWwpCi0JICAgICh3aGl0ZXNwYWNlLXRhYndpZHRoIDgpCi0JICAg ICh3aGl0ZXNwYWNlLXRhYndpZHRoLXNhdmVkIHRhYi13aWR0aCkpCi0KLQk7OyBzaW5jZSBhbGwg cHJpbnRhYmxlIFRBQlMgc2hvdWxkIGJlIDgsIGlycmVzcGVjdGl2ZSBvZiBob3cKLQk7OyB0aGV5 IGFyZSBkaXNwbGF5ZWQuCi0JKHNldHEgdGFiLXdpZHRoIHdoaXRlc3BhY2UtdGFid2lkdGgpCi0K LQkoaWYgKGFuZCB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1sZWFkaW5nCi0JCSAod2hpdGVzcGFj ZS1idWZmZXItbGVhZGluZykpCi0JICAgIChwcm9nbgotCSAgICAgICh3aGl0ZXNwYWNlLWJ1ZmZl ci1sZWFkaW5nLWNsZWFudXApCi0JICAgICAgKHNldHEgd2hpdGVzcGFjZS1hbnkgdCkpKQotCi0J KGlmIChhbmQgd2hpdGVzcGFjZS1jaGVjay1idWZmZXItdHJhaWxpbmcKLQkJICh3aGl0ZXNwYWNl LWJ1ZmZlci10cmFpbGluZykpCi0JICAgIChwcm9nbgotCSAgICAgICh3aGl0ZXNwYWNlLWJ1ZmZl ci10cmFpbGluZy1jbGVhbnVwKQotCSAgICAgIChzZXRxIHdoaXRlc3BhY2UtYW55IHQpKSkKLQot CShpZiAoYW5kIHdoaXRlc3BhY2UtY2hlY2stYnVmZmVyLWluZGVudAotCQkgKHdoaXRlc3BhY2Ut YnVmZmVyLXNlYXJjaCB3aGl0ZXNwYWNlLWluZGVudC1yZWdleHApKQotCSAgICAocHJvZ24KLQkg ICAgICAod2hpdGVzcGFjZS1pbmRlbnQtY2xlYW51cCkKLQkgICAgICAoc2V0cSB3aGl0ZXNwYWNl LWFueSB0KSkpCi0KLQkoaWYgKGFuZCB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1zcGFjZXRhYgot CQkgKHdoaXRlc3BhY2UtYnVmZmVyLXNlYXJjaCB3aGl0ZXNwYWNlLXNwYWNldGFiLXJlZ2V4cCkp Ci0JICAgIChwcm9nbgotCSAgICAgICh3aGl0ZXNwYWNlLWJ1ZmZlci1jbGVhbnVwIHdoaXRlc3Bh Y2Utc3BhY2V0YWItcmVnZXhwICJcdCIpCi0JICAgICAgKHNldHEgd2hpdGVzcGFjZS1hbnkgdCkp KQotCi0JKGlmIChhbmQgd2hpdGVzcGFjZS1jaGVjay1idWZmZXItYXRlb2wKLQkJICh3aGl0ZXNw YWNlLWJ1ZmZlci1zZWFyY2ggd2hpdGVzcGFjZS1hdGVvbC1yZWdleHApKQotCSAgICAocHJvZ24K LQkgICAgICAod2hpdGVzcGFjZS1idWZmZXItY2xlYW51cCB3aGl0ZXNwYWNlLWF0ZW9sLXJlZ2V4 cCAiIikKLQkgICAgICAoc2V0cSB3aGl0ZXNwYWNlLWFueSB0KSkpCi0KLQk7OyBDYWxsIHRoaXMg cmVjdXJzaXZlbHkgdGlsbCBldmVyeXRoaW5nIGlzIHRha2VuIGNhcmUgb2YKLQkoaWYgd2hpdGVz cGFjZS1hbnkKLQkgICAgKHdoaXRlc3BhY2UtY2xlYW51cC1pbnRlcm5hbCByZWdpb24tb25seSkK LQkgIDs7IGlmIHdlIGFyZSBkb25lLCB0YWxrIHRvIHRoZSB1c2VyCi0JICAocHJvZ24KLQkgICAg KHVubGVzcyB3aGl0ZXNwYWNlLXNpbGVudAotCSAgICAgIChpZiByZWdpb24tb25seQotCQkgICht ZXNzYWdlICJUaGUgcmVnaW9uIGlzIG5vdyBjbGVhbiIpCi0JCShtZXNzYWdlICIlcyBpcyBub3cg Y2xlYW4iIGJ1ZmZlci1maWxlLW5hbWUpKSkKLQkgICAgKHdoaXRlc3BhY2UtdXBkYXRlLW1vZGVs aW5lKSkpCi0JKHNldHEgdGFiLXdpZHRoIHdoaXRlc3BhY2UtdGFid2lkdGgtc2F2ZWQpKSkpCi0K LTs7OyMjI2F1dG9sb2FkCi0oZGVmdW4gd2hpdGVzcGFjZS1jbGVhbnVwLXJlZ2lvbiAocyBlKQot ICAiV2hpdGVzcGFjZSBjbGVhbnVwIG9uIHRoZSByZWdpb24uIgotICAoaW50ZXJhY3RpdmUgInIi KQotICAoc2F2ZS1leGN1cnNpb24KLSAgICAoc2F2ZS1yZXN0cmljdGlvbgotICAgICAgKG5hcnJv dy10by1yZWdpb24gcyBlKQotICAgICAgKHdoaXRlc3BhY2UtY2xlYW51cC1pbnRlcm5hbCB0KSkK LSAgICAod2hpdGVzcGFjZS1idWZmZXIgdCkpKQotCi0oZGVmdW4gd2hpdGVzcGFjZS1idWZmZXIt bGVhZGluZyAoKQotICAiUmV0dXJuIHQgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGhhcyBsZWFkaW5n IG5ld2xpbmUgY2hhcmFjdGVycy4KLUlmIGhpZ2hsaWdodGluZyBpcyBlbmFibGVkLCBoaWdobGln aHQgdGhlc2UgY2hhcmFjdGVycy4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpCi0gICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXG4iKQotICAgICh1bmxlc3Mg KGJvYnApCi0gICAgICAod2hpdGVzcGFjZS1oaWdobGlnaHQtdGhlLXNwYWNlIChwb2ludC1taW4p IChwb2ludCkpCi0gICAgICB0KSkpCi0KLShkZWZ1biB3aGl0ZXNwYWNlLWJ1ZmZlci1sZWFkaW5n LWNsZWFudXAgKCkKLSAgIlJlbW92ZSBhbnkgbGVhZGluZyBuZXdsaW5lIGNoYXJhY3RlcnMgZnJv bSBjdXJyZW50IGJ1ZmZlci4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChnb3RvLWNoYXIgKHBv aW50LW1pbikpCi0gICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXG4iKQotICAgIChkZWxldGUtcmVn aW9uIChwb2ludC1taW4pIChwb2ludCkpKSkKLQotKGRlZnVuIHdoaXRlc3BhY2UtYnVmZmVyLXRy YWlsaW5nICgpCi0gICJSZXR1cm4gdCBpZiB0aGUgY3VycmVudCBidWZmZXIgaGFzIGV4dHJhIHRy YWlsaW5nIG5ld2xpbmUgY2hhcmFjdGVycy4KLUlmIGhpZ2hsaWdodGluZyBpcyBlbmFibGVkLCBo aWdobGlnaHQgdGhlc2UgY2hhcmFjdGVycy4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChnb3Rv LWNoYXIgKHBvaW50LW1heCkpCi0gICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIlxuIikKLSAgICAo Zm9yd2FyZC1saW5lKQotICAgICh1bmxlc3MgKGVvYnApCi0gICAgICAod2hpdGVzcGFjZS1oaWdo bGlnaHQtdGhlLXNwYWNlIChwb2ludCkgKHBvaW50LW1heCkpCi0gICAgICB0KSkpCi0KLShkZWZ1 biB3aGl0ZXNwYWNlLWJ1ZmZlci10cmFpbGluZy1jbGVhbnVwICgpCi0gICJSZW1vdmUgZXh0cmEg dHJhaWxpbmcgbmV3bGluZSBjaGFyYWN0ZXJzIGZyb20gY3VycmVudCBidWZmZXIuIgotICAoc2F2 ZS1leGN1cnNpb24KLSAgICAoZ290by1jaGFyIChwb2ludC1tYXgpKQotICAgIChza2lwLWNoYXJz LWJhY2t3YXJkICJcbiIpCi0gICAgKHVubGVzcyAoZW9icCkKLSAgICAgIChmb3J3YXJkLWxpbmUp Ci0gICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChwb2ludC1tYXgpKSkpKQotCi0oZGVmdW4g d2hpdGVzcGFjZS1idWZmZXItc2VhcmNoIChyZWdleHApCi0gICJTZWFyY2ggZm9yIGFueSBnaXZl biB3aGl0ZXNwYWNlIFJFR0VYUC4iCi0gICh3aXRoLWxvY2FsLXF1aXQKLSAgICAobGV0ICh3aGl0 ZXNwYWNlLXJldHZhbCkKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCShnb3RvLWNoYXIgKHBvaW50 LW1pbikpCi0JKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCByZWdleHAgbmlsIHQpCi0JICAod2hp dGVzcGFjZS1oaWdobGlnaHQtdGhlLXNwYWNlIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVu ZCAwKSkKLQkgIChwdXNoIChtYXRjaC1iZWdpbm5pbmcgMCkgd2hpdGVzcGFjZS1yZXR2YWwpKSkK LSAgICAgICh3aGVuIHdoaXRlc3BhY2UtcmV0dmFsCi0JKGZvcm1hdCAiICVzIiAobnJldmVyc2Ug d2hpdGVzcGFjZS1yZXR2YWwpKSkpKSkKLQotKGRlZnVuIHdoaXRlc3BhY2UtYnVmZmVyLWNsZWFu dXAgKHJlZ2V4cCBuZXdyZWdleHApCi0gICJTZWFyY2ggZm9yIGFueSBnaXZlbiB3aGl0ZXNwYWNl IFJFR0VYUCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBORVdSRUdFWFAuIgotICAoc2F2ZS1leGN1 cnNpb24KLSAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQotICAgICh3aGlsZSAocmUtc2VhcmNo LWZvcndhcmQgcmVnZXhwIG5pbCB0KQotICAgICAgKHJlcGxhY2UtbWF0Y2ggbmV3cmVnZXhwKSkp KQotCi0oZGVmdW4gd2hpdGVzcGFjZS1pbmRlbnQtY2xlYW51cCAoKQotICAiU2VhcmNoIGZvciA4 L21vcmUgc3BhY2VzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgYW5kIHJlcGxhY2UgaXQgd2l0aCB0 YWJzLiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAg ICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHdoaXRlc3BhY2UtaW5kZW50LXJlZ2V4cCBuaWwg dCkKLSAgICAgIChsZXQgKChjb2x1bW4gKGN1cnJlbnQtY29sdW1uKSkKLQkgICAgKGluZGVudC10 YWJzLW1vZGUgdCkpCi0JKGRlbGV0ZS1yZWdpb24gKG1hdGNoLWJlZ2lubmluZyAwKSAocG9pbnQp KQotCShpbmRlbnQtdG8gY29sdW1uKSkpKSkKLQotKGRlZnVuIHdoaXRlc3BhY2UtdW5jaGVja2Vk LXdoaXRlc3BhY2VzICgpCi0gICJSZXR1cm4gdGhlIGxpc3Qgb2Ygd2hpdGVzcGFjZXMgd2hvc2Ug dGVzdGluZyBoYXMgYmVlbiBzdXBwcmVzc2VkLiIKLSAgKGxldCAoKHVuY2hlY2tlZC1zcGFjZXMK LQkgKGNvbmNhdCAoaWYgKG5vdCB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1hdGVvbCkgImUiKQot CQkgKGlmIChub3Qgd2hpdGVzcGFjZS1jaGVjay1idWZmZXItaW5kZW50KSAiaSIpCi0JCSAoaWYg KG5vdCB3aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1sZWFkaW5nKSAibCIpCi0JCSAoaWYgKG5vdCB3 aGl0ZXNwYWNlLWNoZWNrLWJ1ZmZlci1zcGFjZXRhYikgInMiKQotCQkgKGlmIChub3Qgd2hpdGVz cGFjZS1jaGVjay1idWZmZXItdHJhaWxpbmcpICJ0IikpKSkKLSAgICAoaWYgKG5vdCAoZXF1YWwg dW5jaGVja2VkLXNwYWNlcyAiIikpCi0JdW5jaGVja2VkLXNwYWNlcwotICAgICAgbmlsKSkpCi0K LShkZWZ1biB3aGl0ZXNwYWNlLXVwZGF0ZS1tb2RlbGluZSAoJm9wdGlvbmFsIHdoaXRlc3BhY2Ut ZXJyKQotICAiVXBkYXRlIG1vZGUgbGluZSB3aXRoIHdoaXRlc3BhY2UgZXJyb3JzLgotQWxzbyB3 aXRoIHdoaXRlc3BhY2VzIHdob3NlIHRlc3RpbmcgaGFzIGJlZW4gdHVybmVkIG9mZi4iCi0gIChp ZiB3aGl0ZXNwYWNlLWRpc3BsYXktaW4tbW9kZWxpbmUKLSAgICAgIChwcm9nbgotCShzZXRxIHdo aXRlc3BhY2UtbW9kZS1saW5lIG5pbCkKLQk7OyBXaGl0ZXNwYWNlIGVycm9ycwotCShpZiAoYW5k IHdoaXRlc3BhY2UtZXJyIChub3QgKGVxdWFsIHdoaXRlc3BhY2UtZXJyICIiKSkpCi0JICAgIChz ZXRxIHdoaXRlc3BhY2UtbW9kZS1saW5lIHdoaXRlc3BhY2UtZXJyKSkKLQk7OyBXaGl0ZXNwYWNl IHN1cHByZXNzZWQgZXJyb3JzCi0JKGxldCAoKHdoaXRlc3BhY2UtdW5jaGVja2VkICh3aGl0ZXNw YWNlLXVuY2hlY2tlZC13aGl0ZXNwYWNlcykpKQotCSAgKGlmIHdoaXRlc3BhY2UtdW5jaGVja2Vk Ci0JICAgICAgKHNldHEgd2hpdGVzcGFjZS1tb2RlLWxpbmUKLQkJICAgIChjb25jYXQgd2hpdGVz cGFjZS1tb2RlLWxpbmUgIiEiIHdoaXRlc3BhY2UtdW5jaGVja2VkKSkpKQotCTs7IEFkZCB0aGUg d2hpdGVzcGFjZSBtb2RlbGluZSBwcmVmaXgKLQkoc2V0cSB3aGl0ZXNwYWNlLW1vZGUtbGluZSAo aWYgd2hpdGVzcGFjZS1tb2RlLWxpbmUKLQkJCQkgICAgICAgKGNvbmNhdCAiIFc6IiB3aGl0ZXNw YWNlLW1vZGUtbGluZSkKLQkJCQkgICAgIG5pbCkpCi0JKHdoaXRlc3BhY2UtbW9kZS1saW5lLXVw ZGF0ZSkpKSkKLQotKGRlZnVuIHdoaXRlc3BhY2UtaGlnaGxpZ2h0LXRoZS1zcGFjZSAoYiBlKQot ICAiSGlnaGxpZ2h0IHRoZSBjdXJyZW50IGxpbmUsIHVuaGlnaGxpZ2h0aW5nIGEgcHJldmlvdXNs eSBqdW1wZWQgdG8gbGluZS4iCi0gIChpZiB3aGl0ZXNwYWNlLWRpc3BsYXktc3BhY2VzLWluLWNv bG9yCi0gICAgICAobGV0ICgob2wgKHdoaXRlc3BhY2UtbWFrZS1vdmVybGF5IGIgZSkpKQotCSh3 aGl0ZXNwYWNlLW92ZXJsYXktcHV0IG9sICdmYWNlICd3aGl0ZXNwYWNlLWhpZ2hsaWdodCkpKSkK LQotKGRlZnVuIHdoaXRlc3BhY2UtdW5oaWdobGlnaHQtdGhlLXNwYWNlKCkKLSAgIlVuaGlnaGxp Z2h0IHRoZSBjdXJyZW50bHkgaGlnaGxpZ2h0IGxpbmUuIgotICAoaWYgKGFuZCB3aGl0ZXNwYWNl LWRpc3BsYXktc3BhY2VzLWluLWNvbG9yIHdoaXRlc3BhY2UtaGlnaGxpZ2h0ZWQtc3BhY2UpCi0g ICAgICAocHJvZ24KLQkobWFwYyAnd2hpdGVzcGFjZS1kZWxldGUtb3ZlcmxheSB3aGl0ZXNwYWNl LWhpZ2hsaWdodGVkLXNwYWNlKQotCShzZXRxIHdoaXRlc3BhY2UtaGlnaGxpZ2h0ZWQtc3BhY2Ug bmlsKSkpKQotCi0oZGVmdW4gd2hpdGVzcGFjZS1jaGVjay1idWZmZXItbGlzdCAoYnVmLW5hbWUg YnVmLWZpbGUpCi0gICJBZGQgYSBidWZmZXIgYW5kIGl0cyBmaWxlIHRvIHRoZSB3aGl0ZXNwYWNl IG1vbml0b3IgbGlzdC4KLQotVGhlIGJ1ZmZlciBuYW1lZCBCVUYtTkFNRSBhbmQgaXRzIGFzc29j aWF0ZWQgZmlsZSBCVUYtRklMRSBhcmUgbm93IG1vbml0b3JlZAotcGVyaW9kaWNhbGx5IGZvciB3 aGl0ZXNwYWNlLiIKLSAgKGlmIChhbmQgd2hpdGVzcGFjZS1tb2RlIChub3QgKG1lbWJlciAobGlz dCBidWYtZmlsZSBidWYtbmFtZSkKLQkJCQkJd2hpdGVzcGFjZS1hbGwtYnVmZmVyLWZpbGVzKSkp Ci0gICAgICAoYWRkLXRvLWxpc3QgJ3doaXRlc3BhY2UtYWxsLWJ1ZmZlci1maWxlcyAobGlzdCBi dWYtZmlsZSBidWYtbmFtZSkpKSkKLQotKGRlZnVuIHdoaXRlc3BhY2UtdGlja2xlLXRpbWVyICgp Ci0gICJUaWNrbGUgdGltZXIgdG8gcGVyaW9kaWNhbGx5IHRvIHNjYW4gcXVhbGlmeWluZyBmaWxl cyBmb3Igd2hpdGVzcGFjZSBjcmVlcC4KLQotSWYgdGltZXIgaXMgbm90IHNldCwgdGhlbiBzZXQg aXQgdG8gc2NhbiB0aGUgZmlsZXMgaW4KLWB3aGl0ZXNwYWNlLWFsbC1idWZmZXItZmlsZXMnIHBl cmlvZGljYWxseSAoZGVmaW5lZCBieQotYHdoaXRlc3BhY2UtcmVzY2FuLXRpbWVyLXRpbWUnKSBm b3Igd2hpdGVzcGFjZSBjcmVlcC4iCi0gIChpZiAoYW5kIHdoaXRlc3BhY2UtcmVzY2FuLXRpbWVy LXRpbWUKLQkgICAoLz0gd2hpdGVzcGFjZS1yZXNjYW4tdGltZXItdGltZSAwKQotCSAgIChub3Qg d2hpdGVzcGFjZS1yZXNjYW4tdGltZXIpKQotICAgICAgKHNldHEgd2hpdGVzcGFjZS1yZXNjYW4t dGltZXIKLQkgICAgKGFkZC10aW1lb3V0IHdoaXRlc3BhY2UtcmVzY2FuLXRpbWVyLXRpbWUKLQkJ CSAnd2hpdGVzcGFjZS1yZXNjYW4tZmlsZXMtaW4tYnVmZmVycyBuaWwKLQkJCSB3aGl0ZXNwYWNl LXJlc2Nhbi10aW1lci10aW1lKSkpKQotCi0oZGVmdW4gd2hpdGVzcGFjZS1yZXNjYW4tZmlsZXMt aW4tYnVmZmVycyAoJm9wdGlvbmFsIGFyZykKLSAgIkNoZWNrIG1vbml0b3JlZCBmaWxlcyBmb3Ig d2hpdGVzcGFjZSBjcmVlcCBzaW5jZSBsYXN0IHNjYW4uIgotICAobGV0ICgod2hpdGVzcGFjZS1h bGwtbXktZmlsZXMgd2hpdGVzcGFjZS1hbGwtYnVmZmVyLWZpbGVzKQotCWJ1ZmZpbGUgYnVmbmFt ZSB0aGlzZWx0IGJ1ZikKLSAgICAoaWYgKG5vdCB3aGl0ZXNwYWNlLWFsbC1teS1maWxlcykKLQko cHJvZ24KLQkgIChkaXNhYmxlLXRpbWVvdXQgd2hpdGVzcGFjZS1yZXNjYW4tdGltZXIpCi0JICAo c2V0cSB3aGl0ZXNwYWNlLXJlc2Nhbi10aW1lciBuaWwpKQotICAgICAgKHdoaWxlIHdoaXRlc3Bh Y2UtYWxsLW15LWZpbGVzCi0JKHNldHEgdGhpc2VsdCAoY2FyIHdoaXRlc3BhY2UtYWxsLW15LWZp bGVzKSkKLQkoc2V0cSB3aGl0ZXNwYWNlLWFsbC1teS1maWxlcyAoY2RyIHdoaXRlc3BhY2UtYWxs LW15LWZpbGVzKSkKLQkoc2V0cSBidWZmaWxlIChjYXIgdGhpc2VsdCkpCi0JKHNldHEgYnVmbmFt ZSAoY2FkciB0aGlzZWx0KSkKLQkoc2V0cSBidWYgKGdldC1idWZmZXIgYnVmbmFtZSkpCi0JKGlm IChidWZmZXItbGl2ZS1wIGJ1ZikKLQkgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmbmFtZQot CSAgICAgIDs7KG1lc3NhZ2UgImJ1ZmZlciAlcyBsaXZlIiBidWZuYW1lKQotCSAgICAgIChpZiB3 aGl0ZXNwYWNlLW1vZGUKLQkJICAocHJvZ24KLQkJICAgIDs7KG1lc3NhZ2UgImNoZWNraW5nIGZv ciB3aGl0ZXNwYWNlIGluICVzIiBidWZuYW1lKQotCQkgICAgKGlmIHdoaXRlc3BhY2UtYXV0by1j bGVhbnVwCi0JCQkocHJvZ24KLQkJCSAgOzsobWVzc2FnZSAiY2xlYW5pbmcgdXAgd2hpdGVzcGFj ZSBpbiAlcyIgYnVmbmFtZSkKLQkJCSAgKHdoaXRlc3BhY2UtY2xlYW51cC1pbnRlcm5hbCkpCi0J CSAgICAgIChwcm9nbgotCQkJOzsobWVzc2FnZSAid2hpdGVzcGFjZS1idWZmZXIgJXMuIiAoYnVm ZmVyLW5hbWUpKQotCQkJKHdoaXRlc3BhY2UtYnVmZmVyIHQpKSkpCi0JCTs7KG1lc3NhZ2UgIlJl bW92aW5nICVzIGZyb20gcmVmcmVzaCBsaXN0IiBidWZuYW1lKQotCQkod2hpdGVzcGFjZS1yZWZy ZXNoLXJlc2Nhbi1saXN0IGJ1ZmZpbGUgYnVmbmFtZSkpKQotCSAgOzsobWVzc2FnZSAiUmVtb3Zp bmcgJXMgZnJvbSByZWZyZXNoIGxpc3QiIGJ1Zm5hbWUpCi0JICAod2hpdGVzcGFjZS1yZWZyZXNo LXJlc2Nhbi1saXN0IGJ1ZmZpbGUgYnVmbmFtZSkpKSkpKQotCi0oZGVmdW4gd2hpdGVzcGFjZS1y ZWZyZXNoLXJlc2Nhbi1saXN0IChidWZmaWxlIGJ1Zm5hbWUpCi0gICJSZWZyZXNoIHRoZSBsaXN0 IG9mIGZpbGVzIHRvIGJlIHJlc2Nhbm5lZCBmb3Igd2hpdGVzcGFjZSBjcmVlcC4iCi0gIChpZiB3 aGl0ZXNwYWNlLWFsbC1idWZmZXItZmlsZXMKLSAgICAgIChzZXRxIHdoaXRlc3BhY2UtYWxsLWJ1 ZmZlci1maWxlcwotCSAgICAoZGVsZXRlIChsaXN0IGJ1ZmZpbGUgYnVmbmFtZSkgd2hpdGVzcGFj ZS1hbGwtYnVmZmVyLWZpbGVzKSkKLSAgICAod2hlbiB3aGl0ZXNwYWNlLXJlc2Nhbi10aW1lcgot ICAgICAgKGRpc2FibGUtdGltZW91dCB3aGl0ZXNwYWNlLXJlc2Nhbi10aW1lcikKLSAgICAgIChz ZXRxIHdoaXRlc3BhY2UtcmVzY2FuLXRpbWVyIG5pbCkpKSkKLQotOzs7IyMjYXV0b2xvYWQKLShk ZWZhbGlhcyAnZ2xvYmFsLXdoaXRlc3BhY2UtbW9kZSAnd2hpdGVzcGFjZS1nbG9iYWwtbW9kZSkK LQotOzs7IyMjYXV0b2xvYWQKLShkZWZpbmUtbWlub3ItbW9kZSB3aGl0ZXNwYWNlLWdsb2JhbC1t b2RlCi0gICJUb2dnbGUgdXNpbmcgV2hpdGVzcGFjZSBtb2RlIGluIG5ldyBidWZmZXJzLgotCi1X aGVuIHRoaXMgbW9kZSBpcyBhY3RpdmUsIGB3aGl0ZXNwYWNlLWJ1ZmZlcicgaXMgYWRkZWQgdG8K LWBmaW5kLWZpbGUtaG9vaycgYW5kIGBraWxsLWJ1ZmZlci1ob29rJy4iCi0gIDpnbG9iYWwgdAot ICA6Z3JvdXAgJ3doaXRlc3BhY2UKLSAgKGlmIHdoaXRlc3BhY2UtZ2xvYmFsLW1vZGUKLSAgICAg IChwcm9nbgotCShhZGQtaG9vayAnZmluZC1maWxlLWhvb2sgJ3doaXRlc3BhY2UtYnVmZmVyKQot CShhZGQtaG9vayAnd3JpdGUtZmlsZS1mdW5jdGlvbnMgJ3doaXRlc3BhY2Utd3JpdGUtZmlsZS1o b29rIG5pbCB0KQotCShhZGQtaG9vayAna2lsbC1idWZmZXItaG9vayAnd2hpdGVzcGFjZS1idWZm ZXIpKQotICAgIChyZW1vdmUtaG9vayAnZmluZC1maWxlLWhvb2sgJ3doaXRlc3BhY2UtYnVmZmVy KQotICAgIChyZW1vdmUtaG9vayAnd3JpdGUtZmlsZS1mdW5jdGlvbnMgJ3doaXRlc3BhY2Utd3Jp dGUtZmlsZS1ob29rIHQpCi0gICAgKHJlbW92ZS1ob29rICdraWxsLWJ1ZmZlci1ob29rICd3aGl0 ZXNwYWNlLWJ1ZmZlcikpKQotCi07OzsjIyNhdXRvbG9hZAotKGRlZnVuIHdoaXRlc3BhY2Utd3Jp dGUtZmlsZS1ob29rICgpCi0gICJIb29rIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiB0aGUgYnVm ZmVyIHdoZW4gd2hpdGVzcGFjZSBjaGVjayBpcyBlbmFibGVkLgotVGhpcyBpcyBtZWFudCB0byBi ZSBhZGRlZCBidWZmZXItbG9jYWxseSB0byBgd3JpdGUtZmlsZS1mdW5jdGlvbnMnLiIKLSAgKGxl dCAoKHdlcnIgbmlsKSkKLSAgICAoaWYgd2hpdGVzcGFjZS1hdXRvLWNsZWFudXAKLQkod2hpdGVz cGFjZS1jbGVhbnVwLWludGVybmFsKQotICAgICAgKHNldHEgd2VyciAod2hpdGVzcGFjZS1idWZm ZXIpKSkKLSAgICAoaWYgKGFuZCB3aGl0ZXNwYWNlLWFib3J0LW9uLWVycm9yIHdlcnIpCi0JKGVy cm9yICJBYm9ydCB3cml0ZSBkdWUgdG8gd2hpdGVzcGFjZXMgaW4gJXMiCi0JCSAgICAgICBidWZm ZXItZmlsZS1uYW1lKSkpCi0gIG5pbCkKLQotKGRlZnVuIHdoaXRlc3BhY2UtdW5sb2FkLWZ1bmN0 aW9uICgpCi0gICJVbmxvYWQgdGhlIHdoaXRlc3BhY2UgbGlicmFyeS4iCi0gIChpZiAodW5pbnRl cm4gIndoaXRlc3BhY2UtdW5sb2FkLWhvb2siIG9iYXJyYXkpCi0gICAgICA7OyBpZiB3aGl0ZXNw YWNlLXVubG9hZC1ob29rIGlzIGRlZmluZWQsIGxldCdzIGdldCByaWQgb2YgaXQKLSAgICAgIDs7 IGFuZCByZWN1cnNpdmVseSBjYWxsIGB1bmxvYWQtZmVhdHVyZScKLSAgICAgIChwcm9nbiAodW5s b2FkLWZlYXR1cmUgJ3doaXRlc3BhY2UpIHQpCi0gICAgOzsgdGhpcyBvbmx5IGhhcHBlbnMgaW4g dGhlIHJlY3Vyc2l2ZSBjYWxsCi0gICAgKHdoaXRlc3BhY2UtZ2xvYmFsLW1vZGUgLTEpCi0gICAg KHNhdmUtY3VycmVudC1idWZmZXIKLSAgICAgIChkb2xpc3QgKGJ1ZiAoYnVmZmVyLWxpc3QpKQot CShzZXQtYnVmZmVyIGJ1ZikKLQkocmVtb3ZlLWhvb2sgJ3dyaXRlLWZpbGUtZnVuY3Rpb25zICd3 aGl0ZXNwYWNlLXdyaXRlLWZpbGUtaG9vayB0KSkpCi0gICAgOzsgY29udGludWUgc3RhbmRhcmQg dW5sb2FkaW5nCi0gICAgbmlsKSkKLQotKGRlZnVuIHdoaXRlc3BhY2UtdW5sb2FkLWhvb2sgKCkK LSAgKHJlbW92ZS1ob29rICdmaW5kLWZpbGUtaG9vayAnd2hpdGVzcGFjZS1idWZmZXIpCi0gIChy ZW1vdmUtaG9vayAnd3JpdGUtZmlsZS1mdW5jdGlvbnMgJ3doaXRlc3BhY2Utd3JpdGUtZmlsZS1o b29rIHQpCi0gIChyZW1vdmUtaG9vayAna2lsbC1idWZmZXItaG9vayAnd2hpdGVzcGFjZS1idWZm ZXIpKQotCi0oYWRkLWhvb2sgJ3doaXRlc3BhY2UtdW5sb2FkLWhvb2sgJ3doaXRlc3BhY2UtdW5s b2FkLWhvb2spCi0KLShwcm92aWRlICd3aGl0ZXNwYWNlKQotCi07Ozsgd2hpdGVzcGFjZS5lbCBl bmRzIGhlcmUKLS0gCjIuMjYuMgoK --00000000000013cdf905a494f686--