From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16622 invoked by alias); 16 Oct 2002 22:16:05 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 16565 invoked by uid 71); 16 Oct 2002 22:16:01 -0000 Resent-Date: 16 Oct 2002 22:16:01 -0000 Resent-Message-ID: <20021016221601.16564.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, Erik.Pessers@ACM.ORG Received: (qmail 15845 invoked by uid 61); 16 Oct 2002 22:11:23 -0000 Message-Id: <20021016221123.15844.qmail@sources.redhat.com> Date: Wed, 16 Oct 2002 15:16:00 -0000 From: Erik.Pessers@ACM.ORG Reply-To: Erik.Pessers@ACM.ORG To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: ada/8247: Compiler bug reported; may have to do with variant records X-SW-Source: 2002-10/txt/msg00652.txt.bz2 List-Id: >Number: 8247 >Category: ada >Synopsis: Compiler bug reported; may have to do with variant records >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Oct 16 15:16:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Erik pessers >Release: unknown-1.0 >Organization: >Environment: Linux 2.4 on I868 (Compaq Presario5020); same issue on both GNAT3.14p-3 and GNAT3.2 (3.2.1-0pre3) compilers. >Description: $ gnatmake adalib-string_hashes gcc-3.2 -c adalib-string_hashes.adb +===========================GNAT BUG DETECTED==============================+ | 3.2.1 20020924 (prerelease) (i386-pc-linux-gnu) Assert_Failure einfo.adb:4508| | Error detected at adalib-hashes.ads:327:5 [adalib-string_hashes.ads:16:5]| | Please submit a bug report, see http://gcc.gnu.org/bugs.html. | | Include the entire contents of this bug box in the report. | | Include the exact gcc-3.2 or gnatmake command that you entered. | | Also include sources listed below in gnatchop format | | (concatenated together with no headers between files). | +==========================================================================+ Please include these source files with error report adalib-string_hashes.adb adalib-string_hashes.ads adalib.ads adalib-hashes.ads adalib-list.ads /usr/local/lib/ada/include/bc/bc.ads /usr/local/lib/ada/include/bc/bc-containers.ads /usr/local/lib/ada/include/bc/bc-containers-lists.ads /usr/local/lib/ada/include/bc/bc-containers-lists-single.ads /usr/local/lib/ada/include/bc/global_heap.ads /usr/local/lib/ada/include/bc/bc-support.ads /usr/local/lib/ada/include/bc/bc-support-managed_storage.ads adalib-strings.ads adalib-sprintf.ads compilation abandoned gnatmake: "adalib-string_hashes.adb" compilation error >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="sources" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sources" CnBhY2thZ2UgYm9keSBBZGFsaWIuU3RyaW5nX0hhc2hlcyBpcwoKICAgIGZ1bmN0aW9uIEhhc2gg KGtleSA6IFRfU3RyaW5nX0J1ZmZlcikgcmV0dXJuIFRfSGFzaF9WYWwgaXMKICAgIAogICAgICAg IGggOiBOYXR1cmFsIDo9IDAgOwoKICAgIGJlZ2luCiAgICAgICAgZm9yIGkgaW4gMSAuLiBBZGFs aWIuU3RyaW5ncy5MZW5ndGgoa2V5KSBsb29wCiAgICAgICAgICAgIGggOj0gaCozMyArIENoYXJh Y3RlcidQb3MoQWRhbGliLlN0cmluZ3MuRWxlbWVudChLZXksIGkpKSA7CiAgICAgICAgZW5kIGxv b3AgOwogICAgICAgIHJldHVybiAoaCBtb2QgSGFzaF9NYXgpIDsKICAgIGVuZCBIYXNoIDsKCgog ICBwcm9jZWR1cmUgQWRkICggCiAgICAgICAgICBIYXNoICAgICAgICAgIDogaW4gb3V0IFRfSGFz aDsKICAgICAgICAgIGtleSAgICAgICAgICAgOiBpbiBTdHJpbmcgOyAKICAgICAgICAgIHZhbHVl ICAgICAgICAgOiBpbiBUX0VsZW0gOwogICAgICAgICAgYWxsb3dfcmVwbGFjZSA6IGluIEJvb2xl YW4gOj0gVHJ1ZSApIGlzCiAgICAgICAgICAgICAgICAgICAKICAgYmVnaW4KICAgICAgIEFkZCAo SGFzaCwgQWRhbGliLlN0cmluZ3MuVG9fU3RyaW5nX0J1ZmZlcihrZXkpLCB2YWx1ZSwgYWxsb3df cmVwbGFjZSkgOwogICBlbmQgQWRkIDsKCiAgIHByb2NlZHVyZSBEZWxldGUgKCAgCiAgICAgICAg ICBIYXNoICAgICAgICAgIDogaW4gb3V0IFRfSGFzaDsKICAgICAgICAgIGtleSAgICAgICAgICAg OiBpbiBTdHJpbmcgKSBpcwogICAKICAgYmVnaW4KICAgICAgIERlbGV0ZSAoSGFzaCwgQWRhbGli LlN0cmluZ3MuVG9fU3RyaW5nX0J1ZmZlcihrZXkpKSA7CiAgIGVuZCBEZWxldGUgOwoKICAgZnVu Y3Rpb24gaXNfUHJlc2VudCAoIEhhc2ggOiBUX0hhc2ggOyBrZXkgICA6IFN0cmluZyApIHJldHVy biBCb29sZWFuIGlzCiAgIAogICBiZWdpbgogICAgICAgcmV0dXJuKGlzX1ByZXNlbnQoSGFzaCwg QWRhbGliLlN0cmluZ3MuVG9fU3RyaW5nX0J1ZmZlcihrZXkpKSkgOwogICBlbmQgaXNfUHJlc2Vu dCA7CgplbmQgQWRhbGliLlN0cmluZ19IYXNoZXMgOwoKd2l0aCBBZGFsaWIuSGFzaGVzIDsKd2l0 aCBBZGFsaWIuU3RyaW5ncyA7CndpdGggQWRhbGliLlNwcmludGYgOwoKZ2VuZXJpYwogICAgdHlw ZSBUX0VsZW0gaXMgcHJpdmF0ZSA7CiAgICB3aXRoIGZ1bmN0aW9uIFByaW50IChhIDogVF9FbGVt KSByZXR1cm4gU3RyaW5nIDsKcGFja2FnZSBBZGFsaWIuU3RyaW5nX0hhc2hlcyBpcwoKICAgIEhh c2hfTWF4IDogTmF0dXJhbCA6PSAyNTYgOwoKICAgIHN1YnR5cGUgVF9IYXNoX1ZhbCBpcyBOYXR1 cmFsIHJhbmdlIDAuLkhhc2hfTWF4LTEgOwoKICAgIGZ1bmN0aW9uIEhhc2ggKGtleSA6IFRfU3Ry aW5nX0J1ZmZlcikgcmV0dXJuIFRfSGFzaF9WYWwgOwoKICAgIHBhY2thZ2UgU0hhc2ggaXMgbmV3 IEFkYWxpYi5IYXNoZXMgKAogICAgICAgICAgICBUX0tleSAgICAgICA9PiBUX1N0cmluZ19CdWZm ZXIsIAogICAgICAgICAgICBUX0VsZW0gICAgICA9PiBUX0VsZW0sCiAgICAgICAgICAgIEJ1Y2tl dHNfTWF4ID0+IDY0LAogICAgICAgICAgICBLZXlfSGFzaCAgICA9PiBIYXNoLCAKICAgICAgICAg ICAgIj0iICAgICAgICAgPT4gQWRhbGliLlN0cmluZ3MuIj0iLCAKICAgICAgICAgICAgUHJpbnRf S2V5ICAgPT4gQWRhbGliLlN0cmluZ3MuVG9fU3RyaW5nLAogICAgICAgICAgICBQcmludF9FbGVt ICA9PiBQcmludCApIDsKCiAgICBzdWJ0eXBlIFRfS2V5ZWRfRWxlbWVudCBpcyBTSGFzaC5UX0tl eWVkX0VsZW1lbnQgOwogICAgc3VidHlwZSBUX0J1Y2tldF9GaWxsIGlzIFNIYXNoLlRfQnVja2V0 X0ZpbGwgOwogICAgc3VidHlwZSBUX1N0YXRpc3RpY3MgaXMgU0hhc2guVF9TdGF0aXN0aWNzIDsK ICAgIHN1YnR5cGUgVF9IYXNoIGlzIFNIYXNoLlRfSGFzaCA7CgogICBwcm9jZWR1cmUgSW5pdGlh bGlzZSAoCiAgICAgICAgICBIYXNoIDogICAgb3V0IFRfSGFzaCApCiAgICAgICAgICAgICAgIHJl bmFtZXMgU0hhc2guSW5pdGlhbGlzZSA7CgogICBwcm9jZWR1cmUgQWRkICgKICAgICAgICAgIEhh c2ggICAgICAgICAgOiBpbiBvdXQgVF9IYXNoOwogICAgICAgICAga2V5ICAgICAgICAgICA6IGlu ICAgICBTdHJpbmcgOyAKICAgICAgICAgIHZhbHVlICAgICAgICAgOiBpbiAgICAgVF9FbGVtIDsK ICAgICAgICAgIGFsbG93X3JlcGxhY2UgOiBpbiAgICAgQm9vbGVhbiA6PSBUcnVlICkgOwoKICAg IHByb2NlZHVyZSBBZGQgKAogICAgICAgICAgSGFzaCAgICAgICAgICA6IGluIG91dCBUX0hhc2g7 ICAgICAgICAgCiAgICAgICAgICBLZXkgICAgICAgICAgIDogaW4gICAgIFRfU3RyaW5nX0J1ZmZl cjsgICAgICAgICAgCiAgICAgICAgICBWYWx1ZSAgICAgICAgIDogaW4gICAgIFRfRWxlbTsgICAg ICAgICAKICAgICAgICAgIEFsbG93X1JlcGxhY2UgOiBpbiAgICAgQm9vbGVhbiA6PSBUcnVlICkK ICAgICAgICAgICAgICAgcmVuYW1lcyBTSGFzaC5BZGQgOwoKICAgIHByb2NlZHVyZSBEZWxldGUg KAogICAgICAgICAgSGFzaCAgICAgICAgICA6IGluIG91dCBUX0hhc2g7ICAgICAgICAgCiAgICAg ICAgICBLZXkgICAgICAgICAgIDogaW4gICAgIHN0cmluZykgOwoKICAgIHByb2NlZHVyZSBEZWxl dGUgKAogICAgICAgICAgSGFzaCAgICAgICAgICA6IGluIG91dCBUX0hhc2g7IAogICAgICAgICAg S2V5ICAgICAgICAgICA6IGluICAgICBUX1N0cmluZ19CdWZmZXIgICApIAogICAgICAgICAgICAg ICByZW5hbWVzIFNIYXNoLkRlbGV0ZSA7CgogICBmdW5jdGlvbiBpc19QcmVzZW50ICgKICAgICAg ICAgIEhhc2ggICAgICAgICA6IFRfSGFzaDsgCiAgICAgICAgICBLZXkgICAgICAgICAgOiBTdHJp bmcgICApIHJldHVybiBCb29sZWFuIDsKCiAgICBmdW5jdGlvbiBJc19QcmVzZW50ICgKICAgICAg ICAgIEhhc2ggICAgICAgICA6IFRfSGFzaDsgCiAgICAgICAgICBLZXkgICAgICAgICAgOiBUX1N0 cmluZ19CdWZmZXIgICApIAogICAgICByZXR1cm4gQm9vbGVhbiAKICAgICAgICAgICAgICAgcmVu YW1lcyBTSGFzaC5pc19QcmVzZW50IDsKCiAgIGZ1bmN0aW9uIGdldF9LZXkgICAoIGVsZW0gOiBU X0tleWVkX0VsZW1lbnQgKSByZXR1cm4gVF9TdHJpbmdfQnVmZmVyCiAgICAgICAgICAgICAgIHJl bmFtZXMgU0hhc2guZ2V0X0tleSA7CgogICBmdW5jdGlvbiBnZXRfVmFsdWUgKCBlbGVtIDogVF9L ZXllZF9FbGVtZW50ICkgcmV0dXJuIFRfRWxlbSAKICAgICAgICAgICAgICAgcmVuYW1lcyBTSGFz aC5nZXRfVmFsdWUgOwoKICAgZnVuY3Rpb24gR2V0X1ZhbHVlICgKICAgICAgICAgIEhhc2ggICAg ICAgICA6IFRfSGFzaDsgCiAgICAgICAgICBLZXkgICAgICAgICAgOiBTdHJpbmcgICApIAogICAg ICByZXR1cm4gVF9FbGVtIDsKCiAgIGZ1bmN0aW9uIEdldF9WYWx1ZSAoCiAgICAgICAgICBIYXNo ICAgICAgICAgOiBUX0hhc2g7IAogICAgICAgICAgS2V5ICAgICAgICAgIDogVF9TdHJpbmdfQnVm ZmVyICAgKSAKICAgICAgcmV0dXJuIFRfRWxlbSAKICAgICAgICAgICAgICAgcmVuYW1lcyBTSGFz aC5HZXRfVmFsdWUgOwogICAgICAgCiAgIHByb2NlZHVyZSBTdGF0aXN0aWNzICgKICAgICAgICAg IEhhc2ggICAgICAgICA6IGluIFRfSGFzaDsKICAgICAgICAgIHN0YXRzICAgICAgICA6ICAgIG91 dCBUX1N0YXRpc3RpY3MpIAogICAgICAgICAgICAgICByZW5hbWVzIFNIYXNoLlN0YXRpc3RpY3Mg OwoKICAgcHJvY2VkdXJlIGR1bXBfU3RhdGlzdGljcygKICAgICAgICAgIEhhc2ggICAgICAgICA6 IGluIFRfSGFzaCApCiAgICAgICAgICAgICAgIHJlbmFtZXMgU0hhc2guZHVtcF9TdGF0aXN0aWNz IDsKCiAgIHByb2NlZHVyZSBkdW1wX0hhc2ggKAogICAgICAgICAgSGFzaCAgICAgICAgIDogaW4g VF9IYXNoICkKICAgICAgICAgICAgICAgcmVuYW1lcyBTSGFzaC5kdW1wX0hhc2ggOwoKZW5kIEFk YWxpYi5TdHJpbmdfSGFzaGVzIDsKCndpdGggQWRhLlRleHRfSU8gOwp3aXRoIEFkYS5FeGNlcHRp b25zIDsKd2l0aCBBZGEuU3RyaW5ncyA7CndpdGggQWRhLlN0cmluZ3MuVW5ib3VuZGVkIDsKd2l0 aCBBZGEuU3RyaW5ncy5NYXBzIDsKd2l0aCBBZGEuU3RyaW5ncy5NYXBzLkNvbnN0YW50cyA7Cndp dGggQWRhLlN0cmluZ3MuRml4ZWQgOwp3aXRoIEdOQVQuT1NfTGliIDsKd2l0aCBTeXN0ZW0gOwp3 aXRoIEFkYS5UZXh0X0lPIDsKCnBhY2thZ2UgQWRhTGliIGlzCgogICAgIC0tIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAgICAtLSBHZW5lcmljIGV4Y2VwdGlvbnMKICAgICAtLSAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tCgogICBHZW5lcmljX0Vycm9yICAgICAgOiBFeGNlcHRpb24gOwogICBHZW5l cmljX0ZhdGFsRXJyb3IgOiBFeGNlcHRpb24gOwogICBWZXJib3NlICAgICAgICAgICAgOiBFeGNl cHRpb24gOwogICBEZWJ1ZyAgICAgICAgICAgICAgOiBFeGNlcHRpb24gOwoKICAgICAtLSAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLS0gV2FybmluZyBvciBpbmRpY2F0aW9ucwogICAg IC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIE91dF9PZl9Cb3VuZHMgICAgICA6IEV4 Y2VwdGlvbiA7IC0tIE9iamVjdCBvdXRzaWRlIGl0cyBuYXR1cmFsIGNvbnRleHQKICAgRHVwbGlj YXRlX0VudHJ5ICAgIDogRXhjZXB0aW9uIDsgLS0gT2JqZWN0IGR1cGxpY2F0ZWQgKHdhcm5pbmcg b3IgaW5kaWNhdGlvbikgCiAgIERhdGFfTm90X0ZvdW5kICAgICA6IEV4Y2VwdGlvbiA7IC0tIERh dGEgb2JqZWN0IG9yIHNlY3Rpb24gbm90IGZvdW5kIAogICBLZXlfTm90X0ZvdW5kICAgICAgOiBF eGNlcHRpb24gOyAtLSBLZXllZCBhY2Nlc3MgdG8gb2JqZWN0IGZhaWxlZAogICBWYWx1ZV9Ob3Rf Rm91bmQgICAgOiBFeGNlcHRpb24gOyAtLSBLZXllZCBhY2Nlc3MgdG8gb2JqZWN0IHJlc3VsdGVk IGluIG5vIGRhdGEKICAgTnVsbF9Qb2ludGVyICAgICAgIDogRXhjZXB0aW9uIDsgLS0gCiAgIE51 bGxfVmFsdWUgICAgICAgICA6IEV4Y2VwdGlvbiA7IC0tIAogICBOb3RfTnVsbCAgICAgICAgICAg OiBFeGNlcHRpb24gOyAtLSBPYmplY3Qgbm90IGVtcHR5IHdoaWxlIE51bGwgdmFsdWUgZXhwZWN0 ZWQKICAgVW5kZWZpbmVkX1ZhbHVlICAgIDogRXhjZXB0aW9uIDsgLS0gCiAgIFR5cGVfTWlzbWF0 Y2ggICAgICA6IEV4Y2VwdGlvbiA7IC0tIAoKICAgICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAgICAtLSBFcnJvciBtZXNzYWdlcyAoZ2VuZXJhbCBmYWlsdXJlcykK ICAgICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIEludmFsaWRf Qm91bmRzICAgIDogRXhjZXB0aW9uIDsgLS0gT2JqZWN0IG91dHNpZGUgaXRzIG5hdHVyYWwgY29u dGV4dAogICBJbnZhbGlkX0R1cGwgICAgICA6IEV4Y2VwdGlvbiA7IC0tIEludmFsaWQgb2JqZWN0 IGR1cGxpY2F0aW9uCiAgIEludmFsaWRfU3RydWN0ICAgIDogRXhjZXB0aW9uIDsgLS0gSW52YWxp ZCBvYmplY3QgZHVwbGljYXRpb24KICAgSW52YWxpZF9EYXRhdHlwZSAgOiBFeGNlcHRpb24gOyAt LSBJbnZhbGlkIG9iamVjdCBkYXRhIHR5cGUKICAgSW52YWxpZF9EYXRhICAgICAgOiBFeGNlcHRp b24gOyAtLSBJbnZhbGlkIG9iamVjdCBkYXRhIHZhbHVlCiAgIE5vdF9Jbml0aWFsaXNlZCAgIDog RXhjZXB0aW9uIDsgLS0gSW52YWxpZCBvYmplY3Qgbm90IGluaXRpYWxpc2VkCiAgIEZpbGVfTm90 X0ZvdW5kICAgIDogRXhjZXB0aW9uIDsKICAgRmlsZV9PcGVuX0Vycm9yICAgOiBFeGNlcHRpb24g OwogICBGaWxlX0lPX0Vycm9yICAgICA6IEV4Y2VwdGlvbiA7CiAgIEZpbGVfRW1wdHkgICAgICAg IDogRXhjZXB0aW9uIDsKICAgQmV5b25kX0VPRiAgICAgICAgOiBFeGNlcHRpb24gOwogICBJbnZh bGlkX1R5cGUgICAgICA6IEV4Y2VwdGlvbiA7IC0tIEludmFsaWQgb2JqZWN0IHR5cGUKICAgSW52 YWxpZF9Gb3JtYXQgICAgOiBFeGNlcHRpb24gOyAtLSBJbnZhbGlkIG9iamVjdCBmb3JtYXQKICAg QXBwbF9GYWlsdXJlICAgICAgOiBFeGNlcHRpb24gOyAtLSBBcHBsaWNhdGlvbiAvIHByb2Nlc3Np bmcgZmFpbHVyZQogICBOb3RfSW1wbGVtZW50ZWQgICA6IEV4Y2VwdGlvbiA7IC0tIE1vZHVsZSBv ZiBmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgKHlldCkKCiAgICAgLS0gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLS0gRXJyb3IgbWVzc2FnZXMgKFhNTCBwYXJzaW5n KQogICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgWE1MX05v X0NoaWxkcmVuICAgOiBFeGNlcHRpb24gOyAtLSBYTUwgdHJlZSBub2RlIGhhcyBubyBjaGlsZHJl bgogICBYTUxfUGFyc2VfRXJyb3IgICA6IEV4Y2VwdGlvbiA7IC0tIEVycm9yIHJldHVybmVkIGZy b20gJ3htbGFkYScgcGFja2FnZQoKICAgICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAgICAtLSBFcnJvciBtZXNzYWdlcyAoY29tbWFuZCBsaW5lIHBhcnNpbmcpCiAg ICAgLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBJbnZhbGlkX09w dGlvbiAgICAgIDogRXhjZXB0aW9uIDsgLS0gSW52YWxpZCBjb21tYW5kIGxpbmUgb3B0aW9uCiAg IFVuZGVmaW5lZF9PcHRpb24gICAgOiBFeGNlcHRpb24gOyAtLSBDb21tYW5kIG9wdGlvbiBub3Qg ZGVmaW5lZAogICBNaXNzaW5nX09wdGlvbiAgICAgIDogRXhjZXB0aW9uIDsgLS0gTWlzc2luZyBl eHBlY3RlZC9yZXF1aXJlZCBvcHRpb24KICAgSW52YWxpZF9QYXJhbWV0ZXIgICA6IEV4Y2VwdGlv biA7IC0tIAogICBBYnNlbnRfUGFyYW1ldGVyICAgIDogRXhjZXB0aW9uIDsgLS0gCiAgIFVuZGVm aW5lZF9QYXJhbWV0ZXIgOiBFeGNlcHRpb24gOyAtLSAKICAgSW52YWxpZF9EdXBsaWNhdGUgICA6 IEV4Y2VwdGlvbiA7IC0tCgogICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICAgIC0tIEVycm9yIG1lc3NhZ2VzIChTTk1QIHJlbGF0ZWQpCiAgICAgLS0gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBOb19SZXNwb25zZSAgICAgICA6IEV4 Y2VwdGlvbiA7CiAgIE5vX1N1Y2hfT2JqZWN0ICAgIDogRXhjZXB0aW9uIDsKICAgTm9fU3VjaF9J bnN0YW5jZSAgOiBFeGNlcHRpb24gOwogICBFbmRfb2ZfTUlCX1ZpZXcgICA6IEV4Y2VwdGlvbiA7 CiAgIE5vX01JQiAgICAgICAgICAgIDogRXhjZXB0aW9uIDsKICAgTUlCX0Vycm9yICAgICAgICAg OiBFeGNlcHRpb24gOwogICBOdWxsX1JlZiAgICAgICAgICA6IEV4Y2VwdGlvbiA7CiAgIFVuc3Vw cG9ydGVkICAgICAgIDogRXhjZXB0aW9uIDsKICAgSW50ZXJuYWxfRXJyb3IgICAgOiBFeGNlcHRp b24gOwogICBCYWRfTG9jcG9ydCAgICAgICA6IEV4Y2VwdGlvbiA7CiAgIEJhZF9BZGRyZXNzICAg ICAgIDogRXhjZXB0aW9uIDsKICAgTm9fU29ja2V0ICAgICAgICAgOiBFeGNlcHRpb24gOwogICBC YWRfVmVyc2lvbiAgICAgICA6IEV4Y2VwdGlvbiA7CiAgIEJhZF9WYXJpYWJsZSAgICAgIDogRXhj ZXB0aW9uIDsKICAgQmFkX09wdGlvbiAgICAgICAgOiBFeGNlcHRpb24gOwogICBXcm9uZ19BU05f VHlwZSAgICA6IEV4Y2VwdGlvbiA7CgoKICAgICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAgICAtLSBEYXRhIHN0cnVjdHVyZXM7IHN0cmluZ3MKICAgICAtLSAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIHR5cGUgUF9TdHJpbmcgaXMgYWNj ZXNzIFN0cmluZyA7CgogICBzdWJ0eXBlIFRfU3RyaW5nX0J1ZmZlciBpcyBBZGEuU3RyaW5ncy5V bmJvdW5kZWQuVW5ib3VuZGVkX1N0cmluZyA7CiAgIHR5cGUgUF9TdHJpbmdfQnVmZmVyIGlzIGFj Y2VzcyBhbGwgVF9TdHJpbmdfQnVmZmVyIDsKCgogICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICAgIC0tIERhdGEgc3RydWN0dXJlczsgZ3JhcGhpY3MKICAgICAt LSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgogICAgIC0tIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC0tIERhdGEgc3RydWN0dXJlczsgbmV0 d29ya2luZwogICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAg c3VidHlwZSBJUF9Qb3J0SUQgaXMgTmF0dXJhbCByYW5nZSAwIC4uIDY1NTM1IDsKICAgc3VidHlw ZSBJUF9Qcm90b2NvbCBpcyBOYXR1cmFsIHJhbmdlIDAuLjI1NSA7CiAgIElQX0NfUHJvdG9jb2xf SUNNUCA6IGNvbnN0YW50IElQX1Byb3RvY29sIDo9IDEgOwogICBJUF9DX1Byb3RvY29sX1RDUCAg OiBjb25zdGFudCBJUF9Qcm90b2NvbCA6PSA2IDsKICAgSVBfQ19Qcm90b2NvbF9VRFAgIDogY29u c3RhbnQgSVBfUHJvdG9jb2wgOj0gMTcgOwogICBJUF9DX1Byb3RvY29sX09TUEYgOiBjb25zdGFu dCBJUF9Qcm90b2NvbCA6PSA4OSA7CgogICBJUF9DX1BvcnRJRF9TTk1QIDogY29uc3RhbnQgSVBf UG9ydElEIDo9IDE2MSA7CgogICB0eXBlIElQX1BvcnQgaXMgcmVjb3JkCiAgICAgICBwcm90b2Nv bCA6IElQX1Byb3RvY29sIDsKICAgICAgIFBvcnQgICAgIDogSVBfUG9ydElEIDsKICAgZW5kIHJl Y29yZCA7CgogICAtLUNMSV9PcHRpb25fUXVpZXQgICAgOiBCb29sZWFuIDo9IEZhbHNlIDsKICAg LS1DTElfT3B0aW9uX1dhcm5pbmdzIDogQm9vbGVhbiA6PSBGYWxzZSA7CiAgIC0tQ0xJX09wdGlv bl9WZXJib3NlICA6IEJvb2xlYW4gOj0gRmFsc2UgOwogICAtLUNMSV9PcHRpb25fRGVidWcgICAg OiBCb29sZWFuIDo9IEZhbHNlIDsKCgogICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICAgIC0tIFNvbWUgY29tbW9uIHV0aWwuICBmdW5jdGlvbnMKICAgICAtLSAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgLS0gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLS0gRGVz Y3JpcHRpb246IAogICAgIC0tICAgVGhlIENyb2FrIGZ1bmN0aW9ucyB3cml0ZSBhIHRleHQgc3Ry aW5nIHRvCiAgICAgLS0gICB0aGUgY3VycmVudCBTVERFUlIgc3RyZWFtOyBDcm9hayB3aWxsIHdy aXRlIHRoZSB0ZXh0CiAgICAgLS0gICBtZXNzYWdlIGFzIGlzOyBDcm9ha19MaW5lIHdpbGwgYXBw ZW5kIGFuIEVPTCBzZXF1ZW5jZQogICAgIC0tCiAgICAgLS0gUGFyYW1ldGVyczoKICAgICAtLSAg IE1lc3NhZ2UgIDogdGV4dCB0byBiZSB3cml0dGVuCiAgICAgLS0KICAgICAtLSBVc2FnZToKICAg ICAtLSAgIAogICAgIC0tIFJldHVybnM6CiAgICAgLS0gICAKICAgICAtLSBFeGNlcHRpb25zOgog ICAgIC0tICAgCiAgICAgLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgogICBwcm9jZWR1cmUgQ3JvYWsgICAgICAoIE1lc3NhZ2UgIDog aW4gU3RyaW5nICA6PSAiIik7IAogICBwcm9jZWR1cmUgQ3JvYWtfTGluZSAoIE1lc3NhZ2UgIDog aW4gU3RyaW5nICA6PSAiIik7IAoKICAgLS1wcm9jZWR1cmUgQ3JvYWsgICAgICAoIE1lc3NhZ2Ug IDogaW4gVF9TdHJpbmdfQnVmZmVyIDo9ICIiICk7IAogICAtLXByb2NlZHVyZSBDcm9ha19MaW5l ICggTWVzc2FnZSAgOiBpbiBUX1N0cmluZ19CdWZmZXIgOj0gIiIgKTsgCiAgICAgICAgICAgIApl bmQgQWRhTGliIDsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gTW9kdWxlICA6ICRSQ1NmaWxlOiBhZGFsaWItbGlz dC5hZHMsdiAkCi0tIFZlcnNpb24gOiAkUmV2aXNpb246IDEuMSAkCi0tICAgICAgICAgICAkU3Rh dGU6IEV4cCAkIDsgCi0tICAgICAgICAgICBMYXN0IHVwZGF0ZWQgJERhdGU6IDIwMDAvMTAvMTgg MTk6NTA6MTMgJCBieSAkQXV0aG9yOiBlcmlrICQgCi0tIEF1dGhvciAgOiBFcmlrIFBlc3NlcnMK LS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLS0gRGVzY3JpcHRpb24gOgotLSAgIFRoZSBBZGFMaWIuVHlwZXMuRGVz Y3JpcHRvciBwYWNrYWdlIGlzIHRoZSBnZW5laXJjIGRlZmluaXRpb24KLS0gICBmb3IgYSBkYXRh IHR5cGUgZGVzY3JpcHRvciB1bml0LgotLQotLSAgIFVzZSBleGFtcGxlOgotLQotLSAgICAgd2l0 aCBBZGFMaWIuVHlwZXMgOyAKLS0gICAgIHdpdGggQWRhTGliLlR5cGVzLkRlc2NyaXB0aW9uIDsK LS0KLS0gICAgIHByb2NlZHVyZSBtYWluIGlzCi0tICAgICAgIHBhY2thZ2UgdHlwZXMgaXMgbmV3 IEFkYUxpYi5UeXBlcyA7Ci0tICAgICAgIHBhY2thZ2UgaW50ZWdlcl9kZXNjcmlwdG9yIGlzIG5l dyB0eXBlcy5EZXNjcmlwdG9yIChJbnRlZ2VyLCAiPSIpIDsKLS0KLS0gICAgICAgdXNlIGludGVn ZXJfZGVzY3JpcHRvciA7Ci0tICAgICAgIGZ1bmN0aW9uIGlzX0ludGVnZXIgKCBkZXNjIDogaW4g VHlwZXMuVEMnQ2xhc3MgKSByZXR1cm4gQm9vbGVhbiAKLS0gICAgICAgICAgICAgcmVuYW1lcyBp bnRlZ2VyX2Rlc2NyaXB0b3IuaXNfRWxlbWVudCA7Ci0tCi0tICAgICAgIGlkZXNjciA6IGludGVn ZXJfZGVzY3JpcHRvci5UIDsKLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gQ2FsbGluZyBpbnRlcmZhY2UgOgot LQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotLSBDaGFuZ2UgaGlzdG9yeSA6Ci0tCi0tICAkTG9nOiBhZGFsaWItbGlz dC5hZHMsdiAkCi0tICBSZXZpc2lvbiAxLjEgIDIwMDAvMTAvMTggMTk6NTA6MTMgIGVyaWsKLS0g IEluaXRpYWwgcmV2aXNpb24KLS0KLS0gIFJldmlzaW9uIDEuMiAgMjAwMC8xMC8xNiAxMzo1Njoy NiAgZXJpawotLSAgQWRkaW5nIGhlYWRlciAuCi0tCi0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIENvcHlyaWdo dCAoQykgMjAwMCwgRXJpayBQZXNzZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t Ci0tIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgICAgIC0tCi0tICAgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR1BMIExpY2Vuc2Ugd2hpY2ggY29tZXMgICAgICAgICAgIC0tCi0tICAgd2l0 aCB0aGlzIExpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIGV4 cGxpY2l0ICJhcy1pcyIgYmFzaXMgICAgIC0tCi0tICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgIC0tCi0tICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgICAgICAgIC0tCi0tICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdQTCBtYW5pZmVzdG8g ICAgIC0tCi0tICAgd2l0aCB0aGlzIGxpYnJhcnksIGluIHRoZSBmaWxlIG5hbWVkICJHUExfTWFu aWZlc3RvLnR4dCIuICAgIC0tCi0tICAgSWYgbm90LCBjb250YWN0IHRoZSBhdXRob3Igb2YgdGhp cyBsaWJyYXJ5IGZvciBhIGNvcHkuICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tCndpdGggQWRhbGli Lkxpc3QgOwoKZ2VuZXJpYwogICAgLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICAgLS0gRGVmaW5lcyB0aGUgZGF0YXR5cGUgb2YgdGhlIGhhc2gga2V5CiAg ICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB0eXBl IFRfS2V5ICBpcyBwcml2YXRlIDsKCiAgICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgICAtLSBEZWZpbmVzIHRoZSBkYXRhdHlwZSBvZiB0aGUgaGFzaCB2 YWx1ZQogICAgLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICAgdHlwZSBUX0VsZW0gaXMgcHJpdmF0ZSA7CgogICAgLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLS0gRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGJ1Y2tl dHMgaW4gdGhlIGhhc2ggdGFibGUKICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAgIEJ1Y2tldHNfTWF4IDogTmF0dXJhbCA6PSA2NDsgIAoKICAgIC0t IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC0tIERlZmlu ZXMgdGhlIGhhc2ggZnVuY3Rpb24gdG8gdXNlIGZvciBtYXBwaW5nIGEKICAgIC0tIGtleSB2YWx1 ZSB0byBhIGJ1Y2tldAogICAgLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICAgd2l0aCBmdW5jdGlvbiBLZXlfSGFzaCAoCiAgICAgICAgICBLZXkgOiBUX0tl eSApIAogICAgICByZXR1cm4gTmF0dXJhbDsgCgogICAgLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLS0gRnVuY3Rpb24gZm9yIHRlc3RpbmcgZXF1YWxp dHkgb2YgdHdvIGtleSB2YWx1ZXMKICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAgIHdpdGggZnVuY3Rpb24gIj0iICgKICAgICAgICAgIEEsICAgICAg ICAKICAgICAgICAgIEIgOiBUX0tleSApIAogICAgICByZXR1cm4gQm9vbGVhbjsgCgogICAgLS0g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLS0gQXV4IGZ1 bmN0aW9ucyBmb3IgY29udmVydGluZyB0byBhIHRleHQgc3RyaW5nIGZvcgogICAgLS0gb3V0cG91 dCB0byBhIHRleHQtc3RyZWFtOyB1c2VkIGZvciBkaXNwbGF5IG9mCiAgICAtLSBkdW1wIG1vZHVs ZXMsIGFuZCBlcnJvciBtZXNzYWdlIHRleHR4CiAgICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB3aXRoIGZ1bmN0aW9uIFByaW50X0tleSAoCiAgICAg ICAgICBBIDogVF9LZXkgKSAKICAgICAgcmV0dXJuIFN0cmluZzsgCiAgICB3aXRoIGZ1bmN0aW9u IFByaW50X0VsZW0gKAogICAgICAgICAgQSA6IFRfRWxlbSApIAogICAgICByZXR1cm4gU3RyaW5n OyAKcGFja2FnZSBBZGFMaWIuSGFzaGVzIGlzCgogICAgdHlwZSBUX0tleWVkX0VsZW1lbnQgaXMg cHJpdmF0ZSA7CgogICAgdHlwZSBUX0hhc2ggaXMgbGltaXRlZCBwcml2YXRlIDsKCiAgICAtLXN1 YnR5cGUgVF9CdWNrZXRfSW5kZXggaXMgTmF0dXJhbCByYW5nZSAwLi5CdWNrZXRzX01heC0xIDsK ICAgIC0tdHlwZSBUX0J1Y2tldF9GaWxsIGlzIGFycmF5IChUX0J1Y2tldF9JbmRleCkgb2YgTmF0 dXJhbCA7CiAgICB0eXBlIFRfU3RhdGlzdGljcyBpcwogICAgcmVjb3JkCiAgICAgICAgQ291bnQg ICAgICAgICA6IE5hdHVyYWwgOj0gQnVja2V0c19NYXggOwogICAgICAgIEVudHJpZXMgICAgICAg OiBOYXR1cmFsIDo9IDAgOwogICAgICAgIE5yX0luVXNlICAgICAgOiBOYXR1cmFsIHJhbmdlIDAg Li4gQnVja2V0c19NYXggOj0gMCA7CiAgICAgICAgTWF4X1VzZSAgICAgICA6IE5hdHVyYWwgOj0g MCA7CiAgICAgICAgQXZlcmFnZV9Vc2UgICA6IEZsb2F0IDo9IDAuMCA7CiAgICAgICAgU3RkZXZf VXNlICAgICA6IEZsb2F0IDo9IDAuMCA7CiAgICAgICAgUGVyY19BYm92ZUF2ZyA6IEZsb2F0IDo9 IDAuMCA7CiAgICAgICAgLS1CdWNrZXRfRmlsbCAgIDogVF9CdWNrZXRfRmlsbCA6PSAob3RoZXJz ID0+IDApIDsKICAgIGVuZCByZWNvcmQgOwoKICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC0tIEluaXRpYWxp c2UKICAgIC0tIC0tLS0tLS0tLS0tCiAgICAtLSBEZXNjcmlwdGlvbjogSW5pdGlhbGlzZXMgdGhl IGludGVybmFsIGRhdGEgc3RydWN0dXJlIChoYXNoLWJ1Y2tldAogICAgLS0gbGlzdHMpIHVzZWQg dG8gc3RvcmUgdGhlIGhhc2ggZGF0YS4gVGhlIHByb2NlZHVyZSB3aWxsIGJlIGNhbGxlZAogICAg LS0gYXV0b21hdGljYWxseSB0byBzZXQgdXAgdGhlIGhhc2ggYnVja2V0cyBmb3IgZmlyc3QgdXNl OyB0aGUKICAgIC0tIHByb2NlZHVyZSBtYXkgYmUgY2FsbGVkIGxhdGVyIGV4cGxpY2l0bHkgdG8g KHJlLSlpbml0aWFsaXNlCiAgICAtLSB0aGUgaGFzaCBidWNrZXRzLiBBbGwgY3VycmVudCBkYXRh IHdpbGwgYmUgbG9zdC4KICAgIC0tCiAgICAtLSBDYWxsaW5nIGNvbnZlbnRpb246IEluaXRpYWxp c2UgOwogICAgLS0KICAgIC0tIFBhcmFtZXRlcnM6IEhhc2ggc3RydWN0dXJlIHRvIGJlIHNldCB1 cC9pbml0aWFsaXNlZAogICAgLS0KICAgIC0tIFJldHVybnM6IEVtcHR5IGhhc2ggc3RydWN0dXJl LCB0aHJvdWdoIHRoZSBvdXQgcGFyYW1ldGVyCiAgICAtLQogICAgLS0gRXhjZXB0aW9uczogbm9u ZQogICAgLS0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHByb2NlZHVyZSBJbml0aWFsaXNlICgKICAgICAg ICAgIEhhc2ggOiAgICBvdXQgVF9IYXNoICk7IAoKICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC0tIEFkZAog ICAgLS0gLS0tLS0tLS0tLS0KICAgIC0tIERlc2NyaXB0aW9uOiBBZGRzIGFuIGVudHJ5IHRvIGEg aGFzaCBkYXRhc3RydWN0dXJlCiAgICAtLQogICAgLS0gQ2FsbGluZyBjb252ZW50aW9uOiBBZGQg KEhhc2gsIGtleSwgdmFsdWUpOwogICAgLS0gICAgICAgICAgICAgICAgICAgICBBZGQgKEhhc2gs IGtleSwgdmFsdWUsIEZhbHNlKTsKICAgIC0tCiAgICAtLSBQYXJhbWV0ZXJzOiBIYXNoIHN0cnVj dHVyZSB0aGUgZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvCiAgICAtLSAgICAgICAgICAgICBLZXkg YXNzb2NpYXRlZCB3aXRoIHRoZSBoYXNoIGVudHJ5CiAgICAtLSAgICAgICAgICAgICBWYWx1ZSBh c3NvY2lhdGVkIHdpdGggdGhlIGhhc2ggZW50cnkKICAgIC0tICAgICAgICAgICAgIE9wdGlvbmFs bHk6IGJvb2xlYW4gdmFsdWUgZGlzYWxsb3dpbmcgcmVwbGFjaW5nCiAgICAtLSAgICAgICAgICAg ICAgICAgb2YgYW4gZXhpc3RpbmcgZWxlbWVudCB3aXRoIHNhbWUga2V5CiAgICAtLQogICAgLS0g UmV0dXJuczogVXBkYXRlZCBoYXNoIHN0cnVjdHVyZSwgdGhyb3VnaCB0aGUgaGFzaCBwYXJhbWV0 ZXIKICAgIC0tCiAgICAtLSBFeGNlcHRpb25zOiBub25lCiAgICAtLQogICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICAgcHJvY2VkdXJlIEFkZCAoCiAgICAgICAgICBIYXNoICAgICAgICAgIDogaW4gb3V0IFRfSGFz aDsgICAgICAgICAKICAgICAgICAgIEtleSAgICAgICAgICAgOiBpbiAgICAgVF9LZXk7ICAgICAg ICAgIAogICAgICAgICAgVmFsdWUgICAgICAgICA6IGluICAgICBUX0VsZW07ICAgICAgICAgCiAg ICAgICAgICBBbGxvd19SZXBsYWNlIDogaW4gICAgIEJvb2xlYW4gOj0gVHJ1ZSApOyAKCiAgICAt LSAgIHByb2NlZHVyZSBEZWxldGUgKCBrZXkgIDogaW4gU3RyaW5nIDsgCiAgICAtLSAgICAgICAg ICAgICAgICAgICAgIHZhbHVlIDogaW4gVF9FbGVtICkgOwoKICAgIC0tIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC0t IERlbGV0ZQogICAgLS0gLS0tLS0tLS0tLS0KICAgIC0tIERlc2NyaXB0aW9uOiBEZWxldGVzIGFu IGVudHJ5IGZyb20gYSBoYXNoIGRhdGFzdHJ1Y3R1cmUKICAgIC0tCiAgICAtLSBDYWxsaW5nIGNv bnZlbnRpb246IERlbGV0ZSAoSGFzaCwga2V5KTsKICAgIC0tCiAgICAtLSBQYXJhbWV0ZXJzOiBI YXNoIHN0cnVjdHVyZSB0aGUgZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvCiAgICAtLSAgICAgICAg ICAgICBLZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBoYXNoIGVudHJ5IHRvIGJlIGRlbGV0ZWQKICAg IC0tCiAgICAtLSBSZXR1cm5zOiBVcGRhdGVkIGhhc2ggc3RydWN0dXJlLCB0aHJvdWdoIHRoZSBo YXNoIHBhcmFtZXRlcgogICAgLS0KICAgIC0tIEV4Y2VwdGlvbnM6IEFkYWxpYi5LZXlfTm90X0Zv dW5kIC0gTm8gZW50cnkgZm91bmQgZm9yIGdpdmVuIGtleQogICAgLS0KICAgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICAgIHByb2NlZHVyZSBEZWxldGUgKAogICAgICAgICAgSGFzaCA6IGluIG91dCBUX0hhc2g7IAog ICAgICAgICAgS2V5ICA6IGluICAgICBUX0tleSAgICk7IAoKICAgIC0tICAgZnVuY3Rpb24gaXNf UHJlc2VudCAoIGtleSAgIDogU3RyaW5nIDsgCiAgICAtLSAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZSA6IFRfRWxlbSApIHJldHVybiBCb29sZWFuIDsKCiAgICBmdW5jdGlvbiBJc19QcmVz ZW50ICgKICAgICAgICAgIEhhc2ggOiBUX0hhc2g7IAogICAgICAgICAgS2V5ICA6IFRfS2V5ICAg KSAKICAgICAgcmV0dXJuIEJvb2xlYW47IAoKICAgIC0tICAgZnVuY3Rpb24gZ2V0X1ZhbHVlICgg a2V5ICAgOiBTdHJpbmcgKSByZXR1cm4gVF9LZXllZF9FbGVtZW50IDsKICAgIC0tCiAgICAtLSAg IGZ1bmN0aW9uIGdldF9WYWx1ZSAoIGtleSAgIDogU3RyaW5nICkgcmV0dXJuIFRfRWxlbSA7CgoK ICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAgIC0tIGdldF9LZXkgYW5kIGdldF9WYWx1ZQogICAgLS0gLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAgICAtLSBEZXNjcmlwdGlvbjogRnJvbSBhbiBpbnRlcm5hbCBUX0tl eWVkX0VsZW1lbnQgc3RydWN0dXJlLCByZXRyaWV2ZQogICAgLS0gdGhlIHZhbHVlIG9mIHRoZSBr ZXkgcmVzcC4gdGhlIGFzc29jaWF0ZWQgdmFsdWUuCiAgICAtLQogICAgLS0gQ2FsbGluZyBjb252 ZW50aW9uOiAKICAgIC0tICAgICBkZWNsYXJlCiAgICAtLSAgICAgICAga2V5IDogU3RyaW5nICAg ICAgOj0gZ2V0X0tleSAgIChrZXllZF9lbGVtKSA7CiAgICAtLSAgICAgICAgdmFsIDogPGVsZW0g dHlwZT4gOj0gZ2V0X1ZhbHVlIChrZXllZF9lbGVtKSA7CiAgICAtLSAgICAgYmVnaW4KICAgIC0t ICAgICAgICAgLi4gCiAgICAtLSAgICAgZW5kIDsKICAgIC0tICAgICAgICAKICAgIC0tCiAgICAt LSBQYXJhbWV0ZXJzOiBrZXllZC1lbGVtZW50IHZhcmlhYmxlIG9yIGNvbnN0YW50CiAgICAtLQog ICAgLS0gUmV0dXJuczogZ2V0X0tleSByZXR1cm5zIGEgc3RyaW5nIHZhbHVlIHdpdGgga2V5ZWQg ZWxlbWVudCBIS0VZCiAgICAtLSAgICAgICAgICBnZXRfVmFsdWUgcmV0dXJucyB0aGUgdmFsdWUg b2YgdGhlIGFzc29jaWF0ZWQgSFZBTAogICAgLS0KICAgIC0tIEV4Y2VwdGlvbnM6IG5vbmUKICAg IC0tCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBHZXRfS2V5ICgKICAgICAgICAgIEVsZW0g OiBUX0tleWVkX0VsZW1lbnQgKSAKICAgICAgcmV0dXJuIFRfS2V5OyAKCiAgICBmdW5jdGlvbiBH ZXRfVmFsdWUgKAogICAgICAgICAgRWxlbSA6IFRfS2V5ZWRfRWxlbWVudCApIAogICAgICByZXR1 cm4gVF9FbGVtOyAKCiAgICBmdW5jdGlvbiBHZXRfVmFsdWUgKAogICAgICAgICAgSGFzaCA6IFRf SGFzaDsgCiAgICAgICAgICBLZXkgIDogVF9LZXkgICApIAogICAgICByZXR1cm4gVF9FbGVtOyAK CiAgICAtLSAgIHByb2NlZHVyZSBMaXN0X0tleXMgOwogICAgLS0gICBmdW5jdGlvbiBnZXRfS2V5 ICAgKCBpbmRleCA6IE5hdHVyYWwgKSByZXR1cm4gU3RyaW5nIDsKICAgIC0tICAgZnVuY3Rpb24g S2V5X0NvdW50IHJldHVybiBOYXR1cmFsIDsKICAgIC0tCgogICAgLS1mb3JlYWNoIHByb2NlZHVy ZQoKICAgIC0tZm9yZWFjaC1zb3J0ZWQgcHJvY2VkdXJlCgogICAgLS1CdWNrZXQgdXNlL3N0YXRz IGluZm8KCiAgICAtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAtLSBTdGF0aXN0aWNzCiAgICAtLSAtLS0tLS0tLS0t CiAgICAtLSBEZXNjcmlwdGlvbjogUmV0dXJucyBzdGF0aXN0aWNzIGRhdGEgb24gY3VycmVudCBi dWNrZXQgdXNhZ2UuCiAgICAtLQogICAgLS0gQ2FsbGluZyBjb252ZW50aW9uOiBTdGF0aXN0Y2lz IChzdGF0cykgOwogICAgLS0KICAgIC0tIFBhcmFtZXRlcnM6ICdzdGF0cycgcmVjb3JkIHJldHVy bmluZyBzdGF0aXN0aWNzIGRhdGEgZm9yIHByaW50aW5nCiAgICAtLSBvciBmdXJ0aGVyIHByb2Nl c3Npbmc6CiAgICAtLSAgIHN0YXRzLmNvdW50CiAgICAtLSAgIHN0YXRzLk5yX2luVXNlCiAgICAt LSAgIHN0YXRzLmF2ZXJhZ2VfdXNlCiAgICAtLSAgIHN0YXRzLnN0ZGV2X3VzZQogICAgLS0gICBz dGF0cy5wZXJjZW50YWdlX292ZXJfYXZlcmFnZQogICAgLS0gICBzdGF0cy5idWNrZXRfZmlsbAog ICAgLS0KICAgIC0tIFJldHVybnM6IG5vbmUKICAgIC0tCiAgICAtLSBFeGNlcHRpb25zOiBub25l CiAgICAtLQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgcHJvY2VkdXJlIFN0YXRpc3RpY3MgKAogICAgICAg ICAgSGFzaCAgOiBpbiAgICAgVF9IYXNoOyAgICAgIAogICAgICAgICAgU3RhdHMgOiAgICBvdXQg VF9TdGF0aXN0aWNzICk7IAoKICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC0tIGR1bXBfSGFzaAogICAgLS0g LS0tLS0tLS0tCiAgICAtLSBEZXNjcmlwdGlvbjogV3JpdGVzIGEgZHVtcCBvZiB0aGUgY3VycmVu dCBoYXNoIGNvbnRlbnRzIGluCiAgICAtLSBodW1hbi0oYWxtb3N0LSlyZWFkYWJsZSBmb3JtIHRv IHRoZSBjdXJyZW50IFNUREVSUiBzdHJlYW07CiAgICAtLSBtYWlubHkgbWVhbnQgZm9yIHByb2dy YW0gZGVidWdnaW5nIHB1cnBvc2VzLgogICAgLS0KICAgIC0tIENhbGxpbmcgY29udmVudGlvbjog ZHVtcF9IYXNoIDsKICAgIC0tCiAgICAtLSBQYXJhbWV0ZXJzOiBub25lCiAgICAtLQogICAgLS0g UmV0dXJuczogbm9uZQogICAgLS0KICAgIC0tIEV4Y2VwdGlvbnM6IG5vbmUKICAgIC0tCiAgICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgICBwcm9jZWR1cmUgRHVtcF9TdGF0aXN0aWNzICgKICAgICAgICAgIEhhc2gg OiBpbiAgICAgVF9IYXNoICk7IAoKICAgIC0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC0tIGR1bXBfU3RhdGlzdGlj cwogICAgLS0gLS0tLS0tLS0tLS0tLS0tCiAgICAtLSBEZXNjcmlwdGlvbjogV3JpdGVzIGEgZHVt cCBvZiB0aGUgY3VycmVudCBoYXNoIHN0YXRpc3RpY3MgaW4KICAgIC0tIGh1bWFuLShhbG1vc3Qt KXJlYWRhYmxlIGZvcm0gdG8gdGhlIGN1cnJlbnQgU1RERVJSIHN0cmVhbTsKICAgIC0tIG1haW5s eSBtZWFudCBmb3IgcHJvZ3JhbSBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAgICAtLQogICAgLS0gQ2Fs bGluZyBjb252ZW50aW9uOiBkdW1wX1N0YXRpc3RpY3MgOwogICAgLS0KICAgIC0tIFBhcmFtZXRl cnM6IG5vbmUKICAgIC0tCiAgICAtLSBSZXR1cm5zOiBub25lCiAgICAtLQogICAgLS0gRXhjZXB0 aW9uczogbm9uZQogICAgLS0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHByb2NlZHVyZSBEdW1wX0hhc2gg KAogICAgICAgICAgSGFzaCA6IGluICAgICBUX0hhc2ggKTsgCgogICAgcHJpdmF0ZQoKICAgIHR5 cGUgVF9LZXllZF9FbGVtZW50IChEZWZpbmVkOiBCb29sZWFuIDo9IFRSVUUpIGlzCiAgICByZWNv cmQKICAgICAgICBjYXNlIERlZmluZWQgaXMKICAgICAgICAgICAgd2hlbiBUUlVFID0+CiAgICAg ICAgICAgICAgICBIS2V5IDogVF9LZXkgOwogICAgICAgICAgICAgICAgSFZhbCA6IGFsaWFzZWQg VF9FbGVtIDsKICAgICAgICAgICAgd2hlbiBGYWxzZSA9PgogICAgICAgICAgICAgICAgbnVsbCA7 CiAgICAgICAgZW5kIGNhc2UgOwogICAgZW5kIHJlY29yZCA7CgogICAgc3VidHlwZSBUX0RlZmlu ZWRfS2V5ZWRfRWxlbWVudCBpcyBUX0tleWVkX0VsZW1lbnQoRGVmaW5lZCA9PiBUUlVFKSA7Cgog ICAgZnVuY3Rpb24gIj0iICgKICAgICAgICAgIEEsICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgIEIgOiBUX0RlZmluZWRfS2V5ZWRfRWxlbWVudCApIAogICAgICByZXR1cm4gQm9v bGVhbjsgCgogICAgcGFja2FnZSBCdWNrZXQgaXMgbmV3IEFkYWxpYi5MaXN0ICggVF9EZWZpbmVk X0tleWVkX0VsZW1lbnQsICI9IikgOwogICAgdXNlIEJ1Y2tldCA7CgogICAgc3VidHlwZSBUX0J1 Y2tldF9JbmRleCBpcyBOYXR1cmFsIHJhbmdlIDAuLkJ1Y2tldHNfTWF4LTEgOwogICAgdHlwZSBU X0J1Y2tldF9BcnJheSBpcyBhcnJheSAoVF9CdWNrZXRfSW5kZXgpIG9mIEJ1Y2tldC5UX1Npbmds ZV9MaXN0IDsKCiAgICB0eXBlIFRfSGFzaCBpcwogICAgcmVjb3JkCiAgICAgICAgVmVyc2lvbiAg ICAgOiBOYXR1cmFsIDo9IDAgOwogICAgICAgIE5yX0VudHJpZXMgIDogTmF0dXJhbCA6PSAwIDsK ICAgICAgICBCdWNrZXRfTGlzdCA6IFRfQnVja2V0X0FycmF5IDo9IChvdGhlcnMgPT4gQnVja2V0 Lk51bGxfQ29udGFpbmVyKSA7CiAgICBlbmQgcmVjb3JkIDsKCiAgICB0eXBlIFRfTG9jYXRpb24g KEZvdW5kIDogQm9vbGVhbikgaXMKICAgIHJlY29yZAogICAgICAgIGNhc2UgRm91bmQgaXMKICAg ICAgICAgICAgd2hlbiBUUlVFID0+CiAgICAgICAgICAgICAgICBCdWNrZXRfSW5kZXggOiBUX0J1 Y2tldF9JbmRleCA6PSAwIDsKICAgICAgICAgICAgICAgIExpc3RfSW5kZXggICA6IFBvc2l0aXZl ICAgICAgIDo9IDEgOwogICAgICAgICAgICB3aGVuIEZBTFNFID0+CiAgICAgICAgICAgICAgICBu dWxsIDsKICAgICAgICBlbmQgY2FzZTsKICAgIGVuZCByZWNvcmQgOwoKICAgIGZ1bmN0aW9uIEl0 ZW1fQXQgKAogICAgICAgICAgSGFzaCAgICAgOiBUX0hhc2g7ICAgIAogICAgICAgICAgTG9jYXRp b24gOiBUX0xvY2F0aW9uICkgCiAgICAgIHJldHVybiBUX0tleWVkX0VsZW1lbnQ7IAoKICAgIGZ1 bmN0aW9uIExvY2F0ZSAoCiAgICAgICAgICBIYXNoIDogVF9IYXNoOyAKICAgICAgICAgIEtleSAg OiBUX0tleSAgICkgCiAgICAgIHJldHVybiBUX0xvY2F0aW9uOyAKCiAgICBmdW5jdGlvbiBCdWNr ZXRpbmRleCAoCiAgICAgICAgICBLZXkgOiBUX0tleSApIAogICAgICByZXR1cm4gVF9CdWNrZXRf SW5kZXg7IAoKZW5kIEFkYUxpYi5IYXNoZXMgOwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBNb2R1bGUgIDogJFJD U2ZpbGU6IGFkYWxpYi1saXN0LmFkcyx2ICQKLS0gVmVyc2lvbiA6ICRSZXZpc2lvbjogMS4xICQK LS0gICAgICAgICAgICRTdGF0ZTogRXhwICQgOyAKLS0gICAgICAgICAgIExhc3QgdXBkYXRlZCAk RGF0ZTogMjAwMC8xMC8xOCAxOTo1MDoxMyAkIGJ5ICRBdXRob3I6IGVyaWsgJCAKLS0gQXV0aG9y ICA6IEVyaWsgUGVzc2VycwotLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBEZXNjcmlwdGlvbiA6Ci0tICAgVGhl IEFkYUxpYi5UeXBlcy5EZXNjcmlwdG9yIHBhY2thZ2UgaXMgdGhlIGdlbmVpcmMgZGVmaW5pdGlv bgotLSAgIGZvciBhIGRhdGEgdHlwZSBkZXNjcmlwdG9yIHVuaXQuCi0tCi0tICAgVXNlIGV4YW1w bGU6Ci0tCi0tICAgICB3aXRoIEFkYUxpYi5UeXBlcyA7IAotLSAgICAgd2l0aCBBZGFMaWIuVHlw ZXMuRGVzY3JpcHRpb24gOwotLQotLSAgICAgcHJvY2VkdXJlIG1haW4gaXMKLS0gICAgICAgcGFj a2FnZSB0eXBlcyBpcyBuZXcgQWRhTGliLlR5cGVzIDsKLS0gICAgICAgcGFja2FnZSBpbnRlZ2Vy X2Rlc2NyaXB0b3IgaXMgbmV3IHR5cGVzLkRlc2NyaXB0b3IgKEludGVnZXIsICI9IikgOwotLQot LSAgICAgICB1c2UgaW50ZWdlcl9kZXNjcmlwdG9yIDsKLS0gICAgICAgZnVuY3Rpb24gaXNfSW50 ZWdlciAoIGRlc2MgOiBpbiBUeXBlcy5UQydDbGFzcyApIHJldHVybiBCb29sZWFuIAotLSAgICAg ICAgICAgICByZW5hbWVzIGludGVnZXJfZGVzY3JpcHRvci5pc19FbGVtZW50IDsKLS0KLS0gICAg ICAgaWRlc2NyIDogaW50ZWdlcl9kZXNjcmlwdG9yLlQgOwotLQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLSBDYWxs aW5nIGludGVyZmFjZSA6Ci0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tIENoYW5nZSBoaXN0b3J5IDoKLS0KLS0g ICRMb2c6IGFkYWxpYi1saXN0LmFkcyx2ICQKLS0gIFJldmlzaW9uIDEuMSAgMjAwMC8xMC8xOCAx OTo1MDoxMyAgZXJpawotLSAgSW5pdGlhbCByZXZpc2lvbgotLQotLSAgUmV2aXNpb24gMS4yICAy MDAwLzEwLzE2IDEzOjU2OjI2ICBlcmlrCi0tICBBZGRpbmcgaGVhZGVyIC4KLS0KLS0KLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLS0gQ29weXJpZ2h0IChDKSAyMDAwLCBFcmlrIFBlc3NlcnMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLS0KLS0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAgICAgLS0KLS0g ICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB3aGljaCBjb21lcyAgICAg ICAgICAgLS0KLS0gICB3aXRoIHRoaXMgTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgb24gYW4gZXhwbGljaXQgImFzLWlzIiBiYXNpcyAgICAgLS0KLS0gICBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgLS0K LS0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICAgICAgICAgLS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR1BMIG1hbmlmZXN0byAgICAgLS0KLS0gICB3aXRoIHRoaXMgbGlicmFyeSwgaW4gdGhlIGZp bGUgbmFtZWQgIkdQTF9NYW5pZmVzdG8udHh0Ii4gICAgLS0KLS0gICBJZiBub3QsIGNvbnRhY3Qg dGhlIGF1dGhvciBvZiB0aGlzIGxpYnJhcnkgZm9yIGEgY29weS4gICAgICAgLS0KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLS0Kd2l0aCBCQy5Db250YWluZXJzOyAKd2l0aCBCQy5Db250YWluZXJzLkxpc3RzOwp3aXRo IEJDLkNvbnRhaW5lcnMuTGlzdHMuU2luZ2xlOwp3aXRoIEdsb2JhbF9IZWFwOwoKZ2VuZXJpYwog ICB0eXBlIFRfRWxlbSBpcyBwcml2YXRlIDsKICAgd2l0aCBmdW5jdGlvbiAiPSIgKGEsIGIgOiBU X0VsZW0pIHJldHVybiBCb29sZWFuIDsKcGFja2FnZSBBZGFMaWIuTGlzdCBpcwoKICBwYWNrYWdl IENvbnRhaW5lcnMgaXMgbmV3IEJDLkNvbnRhaW5lcnMgKEl0ZW0gPT4gVF9FbGVtLCAiPSIgPT4g Ij0iKTsKCiAgcGFja2FnZSBMaXN0cyBpcyBuZXcgQ29udGFpbmVycy5MaXN0czsKCiAgcGFja2Fn ZSBMUyBpcyBuZXcgTGlzdHMuU2luZ2xlIChTdG9yYWdlID0+IEdsb2JhbF9IZWFwLlN0b3JhZ2Up OwoKICBzdWJ0eXBlIFRfU2luZ2xlX0xpc3QgaXMgTFMuTGlzdCA7CgogIHN1YnR5cGUgSXRlcmF0 b3IgaXMgQ29udGFpbmVycy5JdGVyYXRvciA7CgogIGZ1bmN0aW9uIE51bGxfQ29udGFpbmVyIHJl dHVybiBUX1NpbmdsZV9MaXN0IAogICAgICAgcmVuYW1lcyBMUy5OdWxsX0NvbnRhaW5lcjsKCiAg ZnVuY3Rpb24gIj0iIChMLCBSIDogVF9TaW5nbGVfTGlzdCkgcmV0dXJuIEJvb2xlYW4gCiAgICAg ICByZW5hbWVzIExTLiI9IiA7CiAgIC0tICBSZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiBib3Ro IGxpc3RzIGFyZSBudWxsIG9yIHN0cnVjdHVyYWxseQogICAtLSAgc2hhcmUgdGhlIHNhbWUgbGlz dC4KCiAgcHJvY2VkdXJlIENsZWFyIChMIDogaW4gb3V0IFRfU2luZ2xlX0xpc3QpIAogICAgICAg cmVuYW1lcyBMUy5DbGVhciA7CiAgIC0tICBJZiB0aGUgbGlzdCBpcyBub3QgbnVsbCwgZGVzdHJv eSB0aGlzIGFsaWFzIHRvIHRoZSBsaXN0LCBtYWtlCiAgIC0tICB0aGUgbGlzdCBudWxsLCBhbmQg cmVjbGFpbSB0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggYW55CiAgIC0tICB1bnJlYWNoYWJs ZSBpdGVtcy4KICAKCiAgIHByb2NlZHVyZSBJbnNlcnQgKEwgOiBpbiBvdXQgVF9TaW5nbGVfTGlz dDsgRWxlbSA6IFRfRWxlbSkgCiAgICAgICByZW5hbWVzIExTLkluc2VydCA7CiAgIC0tICBBZGQg dGhlIGl0ZW0gdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCgogICBwcm9jZWR1cmUgSW5zZXJ0IChM IDogaW4gb3V0IFRfU2luZ2xlX0xpc3Q7IEZyb21fTGlzdCA6IGluIG91dCBUX1NpbmdsZV9MaXN0 KSAKICAgICAgIHJlbmFtZXMgTFMuSW5zZXJ0IDsKICAgLS0gIEFkZCBGcm9tX0xpc3QgdG8gdGhl IGhlYWQgb2YgdGhlIGxpc3QuCgogICBwcm9jZWR1cmUgSW5zZXJ0IChMIDogaW4gb3V0IFRfU2lu Z2xlX0xpc3Q7IEVsZW0gOiBUX0VsZW07IEJlZm9yZSA6IFBvc2l0aXZlKSAKICAgICAgIHJlbmFt ZXMgTFMuSW5zZXJ0IDsKICAgLS0gIEFkZCB0aGUgaXRlbSBiZWZvcmUgdGhlIGdpdmVuIGluZGV4 IGl0ZW0gaW4gdGhlIGxpc3Q7IGlmIEJlZm9yZQogICAtLSAgaXMgMSwgdGhlIGl0ZW0gaXMgYWRk ZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCgogICBwcm9jZWR1cmUgSW5zZXJ0IChMIDogaW4g b3V0IFRfU2luZ2xlX0xpc3Q7CiAgICAgICAgICAgICAgICAgICAgIEZyb21fTGlzdCA6IGluIG91 dCBUX1NpbmdsZV9MaXN0OwogICAgICAgICAgICAgICAgICAgICBCZWZvcmUgOiBQb3NpdGl2ZSkg CiAgICAgICByZW5hbWVzIExTLkluc2VydCA7CiAgIC0tICBBZGQgdGhlIGxpc3QgYmVmb3JlIHRo ZSBnaXZlbiBpbmRleCBpdGVtIGluIHRoZSBsaXN0OyBpZiBCZWZvcmUKICAgLS0gIGlzIDEsIHRo ZSBsaXN0IGlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LgoKICAgcHJvY2VkdXJlIEFw cGVuZCAoTCA6IGluIG91dCBUX1NpbmdsZV9MaXN0OyBFbGVtIDogVF9FbGVtKSAKICAgICAgIHJl bmFtZXMgTFMuQXBwZW5kIDsKICAgLS0gIEFkZCB0aGUgaXRlbSBhdCB0aGUgZW5kIG9mIHRoZSBs aXN0LgoKICAgcHJvY2VkdXJlIEFwcGVuZCAoTCA6IGluIG91dCBUX1NpbmdsZV9MaXN0OyBGcm9t X0xpc3QgOiBpbiBvdXQgVF9TaW5nbGVfTGlzdCkgCiAgICAgICByZW5hbWVzIExTLkFwcGVuZCA7 CiAgIC0tICBBZGQgdGhlIGdpdmVuIGxpc3QgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KCiAgIHBy b2NlZHVyZSBBcHBlbmQgKEwgOiBpbiBvdXQgVF9TaW5nbGVfTGlzdDsgRWxlbSA6IFRfRWxlbTsg QWZ0ZXIgOiBQb3NpdGl2ZSkgCiAgICAgICByZW5hbWVzIExTLkFwcGVuZCA7CiAgIC0tICBBZGQg dGhlIGl0ZW0gYWZ0ZXIgdGhlIGdpdmVuIGluZGV4IGl0ZW0gaW4gdGhlIGxpc3QuCgogICBwcm9j ZWR1cmUgQXBwZW5kIChMIDogaW4gb3V0IFRfU2luZ2xlX0xpc3Q7CiAgICAgICAgICAgICAgICAg ICAgIEZyb21fTGlzdCA6IGluIG91dCBUX1NpbmdsZV9MaXN0OwogICAgICAgICAgICAgICAgICAg ICBBZnRlciA6IFBvc2l0aXZlKSAKICAgICAgIHJlbmFtZXMgTFMuQXBwZW5kIDsKICAgLS0gIEFk ZCBGcm9tX0xpc3QgYWZ0ZXIgdGhlIGdpdmVuIGluZGV4IGl0ZW0gaW4gdGhlIGxpc3QuCgogICBw cm9jZWR1cmUgUmVtb3ZlIChMIDogaW4gb3V0IFRfU2luZ2xlX0xpc3Q7IEZyb20gOiBQb3NpdGl2 ZSkgCiAgICAgICByZW5hbWVzIExTLlJlbW92ZSA7CiAgIC0tICBSZW1vdmUgdGhlIGl0ZW0gYXQg dGhlIGdpdmVuIGluZGV4IGluIHRoZSBsaXN0LgoKICAgcHJvY2VkdXJlIFB1cmdlIChMIDogaW4g b3V0IFRfU2luZ2xlX0xpc3Q7IEZyb20gOiBQb3NpdGl2ZSkgCiAgICAgICByZW5hbWVzIExTLlB1 cmdlIDsKICAgLS0gIFJlbW92ZSBhbGwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0IHN0YXJ0aW5nIGF0 IHRoZSBnaXZlbiBpbmRleCwKICAgLS0gIGluY2x1c2l2ZS4KCiAgIHByb2NlZHVyZSBQdXJnZSAo TCA6IGluIG91dCBUX1NpbmdsZV9MaXN0OyBGcm9tIDogUG9zaXRpdmU7IENvdW50IDogUG9zaXRp dmUpIAogICAgICAgcmVuYW1lcyBMUy5QdXJnZSA7CiAgIC0tICBSZW1vdmUgYWxsIHRoZSBpdGVt cyBpbiB0aGUgbGlzdCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gaW5kZXgsCiAgIC0tICBpbmNsdXNp dmUsIGZvciBhIHRvdGFsIG9mIGNvdW50IGl0ZW1zLgoKICAgcHJvY2VkdXJlIFByZXNlcnZlIChM IDogaW4gb3V0IFRfU2luZ2xlX0xpc3Q7IEZyb20gOiBQb3NpdGl2ZSkgCiAgICAgICByZW5hbWVz IExTLlByZXNlcnZlIDsKICAgLS0gIFJlbW92ZSBhbGwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGV4 Y2VwdCB0aG9zZSBzdGFydGluZyBhdCB0aGUKICAgLS0gIGdpdmVuIGluZGV4LCBpbmNsdXNpdmUu CgogICBwcm9jZWR1cmUgUHJlc2VydmUgKEwgOiBpbiBvdXQgVF9TaW5nbGVfTGlzdDsgRnJvbSA6 IFBvc2l0aXZlOyBDb3VudCA6IFBvc2l0aXZlKSAKICAgICAgIHJlbmFtZXMgTFMuUHJlc2VydmUg OwogICAtLSAgUmVtb3ZlIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgZXhjZXB0IHRob3NlIHN0 YXJ0aW5nIGF0IHRoZQogICAtLSAgZ2l2ZW4gaW5kZXgsIGluY2x1c2l2ZSwgZm9yIGEgdG90YWwg b2YgY291bnQgaXRlbXMuCgogICBwcm9jZWR1cmUgU2hhcmUgKEwgOiBpbiBvdXQgVF9TaW5nbGVf TGlzdDsgCiAgICAgICAgICAgICAgICAgICAgV2l0aF9MaXN0IDogVF9TaW5nbGVfTGlzdDsgU3Rh cnRpbmdfQXQgOiBQb3NpdGl2ZSkgCiAgICAgICByZW5hbWVzIExTLlNoYXJlIDsKICAgLS0gIENs ZWFyIHRoZSBsaXN0LCB0aGVuLCBpZiB0aGUgZ2l2ZW4gbGlzdCBpcyBub3QgbnVsbCwgc2V0IHRo ZQogICAtLSAgbGlzdCB0byBzdHJ1Y3R1cmFsbHkgc2hhcmUgd2l0aCB0aGUgaGVhZCBvZiB0aGUg Z2l2ZW4gbGlzdCwKICAgLS0gIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBpbmRleC4KCiAgIHByb2Nl ZHVyZSBTaGFyZV9IZWFkIChMIDogaW4gb3V0IFRfU2luZ2xlX0xpc3Q7IFdpdGhfTGlzdCA6IGlu IFRfU2luZ2xlX0xpc3QpIAogICAgICAgcmVuYW1lcyBMUy5TaGFyZV9IZWFkIDsKICAgLS0gIENs ZWFyIHRoZSBsaXN0LCB0aGVuLCBpZiB0aGUgZ2l2ZW4gbGlzdCBpcyBub3QgbnVsbCwgc2V0IHRo ZQogICAtLSAgbGlzdCB0byBzdHJ1Y3R1cmFsbHkgc2hhcmUgd2l0aCB0aGUgaGVhZCBvZiB0aGUg Z2l2ZW4gbGlzdC4KCiAgIHByb2NlZHVyZSBTaGFyZV9Gb290IChMIDogaW4gb3V0IFRfU2luZ2xl X0xpc3Q7IFdpdGhfTGlzdCA6IGluIFRfU2luZ2xlX0xpc3QpIAogICAgICAgcmVuYW1lcyBMUy5T aGFyZV9Gb290IDsKICAgLS0gIENsZWFyIHRoZSBsaXN0LCB0aGVuLCBpZiB0aGUgZ2l2ZW4gbGlz dCBpcyBub3QgbnVsbCwgc2V0IHRoZQogICAtLSAgbGlzdCB0byBzdHJ1Y3R1cmFsbHkgc2hhcmUg d2l0aCB0aGUgZW5kIG9mIHRoZSBnaXZlbiBsaXN0LgoKICAgcHJvY2VkdXJlIFN3YXBfVGFpbCAo TCA6IGluIG91dCBUX1NpbmdsZV9MaXN0OyBXaXRoX0xpc3QgOiBpbiBvdXQgVF9TaW5nbGVfTGlz dCkgCiAgICAgICByZW5hbWVzIExTLlN3YXBfVGFpbCA7CiAgIC0tICBUaGUgZ2l2ZW4gbGlzdCBt dXN0IHJlcHJlc2VudCB0aGUgaGVhZCBvZiBhIGxpc3QsIHdoaWNoIG1heSBiZQogICAtLSAgbnVs bC4gU2V0IHRoZSB0YWlsIG9mIHRoZSBsaXN0ICh3aGljaCBtYXkgYmUgbnVsbCkgdG8gZGVub3Rl CiAgIC0tICB0aGUgZ2l2ZW4gbGlzdCAod2hpY2ggbWF5IGJlIG51bGwpLCBhbmQgc2V0IHRoZSBn aXZlbiBsaXN0IHRvCiAgIC0tICB0aGUgb3JpZ2luYWwgdGFpbCBvZiB0aGUgbGlzdC4gSWYgaXQg aXMgbm90IG51bGwsIHRoZQogICAtLSAgcHJlZGVjZXNzb3Igb2YgdGhlIG5ldyB0YWlsIG9mIHRo ZSBsaXN0IGlzIHNldCB0byBiZSB0aGUgaGVhZAogICAtLSAgb2YgdGhlIGxpc3QuIElmIGl0IGlz IG5vdCBudWxsLCB0aGUgcHJlZGVjZXNzb3Igb2YgdGhlIG5ldyBoZWFkCiAgIC0tICBvZiB0aGUg Z2l2ZW4gbGlzdCBpcyBzZXQgdG8gYmUgbnVsbC4KCiAgIHByb2NlZHVyZSBUYWlsIChMIDogaW4g b3V0IFRfU2luZ2xlX0xpc3QpIAogICAgICAgcmVuYW1lcyBMUy5UYWlsIDsKICAgLS0gIFRoZSBs aXN0IG11c3Qgbm90IGJlIG51bGwuIFNldCB0aGUgbGlzdCB0byBub3cgZGVub3RlIGl0cyB0YWls CiAgIC0tICAod2hpY2ggbWF5IGJlIG51bGwpLCBhbmQgcmVjbGFpbSB0aGUgc3RvcmFnZSBhc3Nv Y2lhdGVkIHdpdGgKICAgLS0gIGFueSB1bnJlYWNoYWJsZSBpdGVtcy4KCiAgIHByb2NlZHVyZSBT ZXRfSGVhZCAoTCA6IGluIG91dCBUX1NpbmdsZV9MaXN0OyBFbGVtIDogVF9FbGVtKSAKICAgICAg IHJlbmFtZXMgTFMuU2V0X0hlYWQgOwogICAtLSAgU2V0IHRoZSBpdGVtIGF0IHRoZSBoZWFkIG9m IHRoZSBsaXN0LgoKICAgcHJvY2VkdXJlIFNldF9JdGVtIChMIDogaW4gb3V0IFRfU2luZ2xlX0xp c3Q7IEVsZW0gOiBUX0VsZW07IEF0X0xvYyA6IFBvc2l0aXZlKSAKICAgICAgIHJlbmFtZXMgTFMu U2V0X0l0ZW0gOwogICAtLSAgU2V0IHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleC4KCiAgIGZ1 bmN0aW9uIExlbmd0aCAoTCA6IFRfU2luZ2xlX0xpc3QpIHJldHVybiBOYXR1cmFsIAogICAgICAg cmVuYW1lcyBMUy5MZW5ndGggOwogICAtLSAgUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4g dGhlIGxpc3QuCgogICBmdW5jdGlvbiBJc19OdWxsIChMIDogVF9TaW5nbGVfTGlzdCkgcmV0dXJu IEJvb2xlYW4gCiAgICAgICByZW5hbWVzIExTLklzX051bGwgOwogICAtLSAgUmV0dXJuIFRydWUg aWYgYW5kIG9ubHkgdGhlcmUgYXJlIG5vIGl0ZW1zIGluIHRoZSBsaXN0LgoKICAgZnVuY3Rpb24g SXNfU2hhcmVkIChMIDogVF9TaW5nbGVfTGlzdCkgcmV0dXJuIEJvb2xlYW4gCiAgICAgICByZW5h bWVzIExTLklzX1NoYXJlZCA7CiAgIC0tICBSZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUg bGlzdCBoYXMgYW4gYWxpYXMuCgogICBmdW5jdGlvbiBIZWFkIChMIDogVF9TaW5nbGVfTGlzdCkg cmV0dXJuIFRfRWxlbSAKICAgICAgIHJlbmFtZXMgTFMuSGVhZCA7CiAgIC0tICBSZXR1cm4gYSBj b3B5IG9mIHRoZSBpdGVtIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LgoKLS0gICBnZW5lcmljCi0t ICAgICB3aXRoIHByb2NlZHVyZSBQcm9jZXNzIChFbGVtIDogaW4gb3V0IFRfRWxlbSk7Ci0tICAg cHJvY2VkdXJlIFByb2Nlc3NfSGVhZCAoTCA6IGluIG91dCBUX1NpbmdsZV9MaXN0KSAKLS0gICAg ICAgcmVuYW1lcyBMUy5Qcm9jZXNzX0hlYWQgOwogICAtLSAgQWNjZXNzIHRoZSBpdGVtIGF0IHRo ZSBoZWFkIG9mIHRoZSBsaXN0LgoKICAgZnVuY3Rpb24gRm9vdCAoTCA6IFRfU2luZ2xlX0xpc3Qp IHJldHVybiBUX0VsZW0gCiAgICAgICByZW5hbWVzIExTLkZvb3QgOwogICAtLSAgUmV0dXJuIGEg Y29weSBvZiB0aGUgaXRlbSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgoKLS0gICBnZW5lcmljCi0t ICAgICAgd2l0aCBwcm9jZWR1cmUgUHJvY2VzcyAoRWxlbSA6IGluIG91dCBUX0VsZW0pIDsKLS0g ICBwcm9jZWR1cmUgUHJvY2Vzc19Gb290IChMIDogaW4gb3V0IFRfU2luZ2xlX0xpc3QpIAotLSAg ICAgICByZW5hbWVzIEJDLkNvbnRhaW5lcnMuTGlzdHMuU2luZ2xlLlByb2Nlc3NfRm9vdCA7Ci0t ICAgLS0gIEFjY2VzcyB0aGUgaXRlbSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgoKICAgZnVuY3Rp b24gSXRlbV9BdCAoTCA6IFRfU2luZ2xlX0xpc3Q7IEluZGV4IDogUG9zaXRpdmUpIHJldHVybiBU X0VsZW0gCiAgICAgICByZW5hbWVzIExTLkl0ZW1fQXQgOwogICAtLSAgUmV0dXJuIGEgY29weSBv ZiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXguCgogICBmdW5jdGlvbiBOZXdfSXRlcmF0b3Ig KEZvcl9UaGVfTGlzdCA6IFRfU2luZ2xlX0xpc3QpIHJldHVybiBDb250YWluZXJzLkl0ZXJhdG9y J0NsYXNzIAogICAgICAgcmVuYW1lcyBMUy5OZXdfSXRlcmF0b3IgOwogICAtLSAgUmV0dXJuIGEg cmVzZXQgSXRlcmF0b3IgYm91bmQgdG8gdGhlIHNwZWNpZmljIFRfU2luZ2xlX0xpc3QuCiAKCmVu ZCBBZGFMaWIuTGlzdCA7Ci0tICBDb3B5cmlnaHQgKEMpIDE5OTQtMjAwMSBHcmFkeSBCb29jaCwg RGF2aWQgV2VsbGVyIGFuZCBTaW1vbiBXcmlnaHQuCi0tICBBbGwgUmlnaHRzIFJlc2VydmVkLgot LQotLSAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdAotLSAgICAgIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBB ZGEgQ29tbXVuaXR5Ci0tICAgICAgTGljZW5zZSB3aGljaCBjb21lcyB3aXRoIHRoaXMgTGlicmFy eS4KLS0KLS0gICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlCi0tICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZAotLSAgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS0gICAgICBQVVJQT1NFLiBTZWUgdGhlIEFk YSBDb21tdW5pdHkgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLSAgICAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEFkYSBDb21tdW5pdHkKLS0gICAgICBMaWNlbnNl IHdpdGggdGhpcyBsaWJyYXJ5LCBpbiB0aGUgZmlsZSBuYW1lZCAiQWRhIENvbW11bml0eQotLSAg ICAgIExpY2Vuc2UiIG9yICJBQ0wiLiBJZiBub3QsIGNvbnRhY3QgdGhlIGF1dGhvciBvZiB0aGlz IGxpYnJhcnkKLS0gICAgICBmb3IgYSBjb3B5LgotLQoKLS0gICRSQ1NmaWxlOiBiYy5hZHMsdiAk Ci0tICAkUmV2aXNpb246IDEuOCAkCi0tICAkRGF0ZTogMjAwMS8wOS8yMiAxNzozMDoyNyAkCi0t ICAkQXV0aG9yOiBzaW1vbiAkCgpwYWNrYWdlIEJDIGlzCgogICAtLSAgVGhpcyBpcyB0aGUgdG9w IGxldmVsIHBhY2thZ2UgaW4gdGhlIEJvb2NoIENvbXBvbmVudCBIaWVyYXJjaHkuCgogICAtLSAg VGhlIGZvbGxvd2luZyBleGNlcHRpb25zIG1heSBiZSByYWlzZWQgYnkgaW1wcm9wZXIgdXNlIG9m IHRoZQogICAtLSAgQ29tcG9uZW50cy4KCiAgIENvbnRhaW5lcl9FcnJvciA6IGV4Y2VwdGlvbjsK ICAgRHVwbGljYXRlIDogZXhjZXB0aW9uOwogICBJc19OdWxsIDogZXhjZXB0aW9uOwogICBOb3Rf Rm91bmQgOiBleGNlcHRpb247CiAgIE5vdF9OdWxsIDogZXhjZXB0aW9uOwogICBOb3RfUm9vdCA6 IGV4Y2VwdGlvbjsKICAgT3ZlcmZsb3cgOiBleGNlcHRpb247CiAgIFJhbmdlX0Vycm9yIDogZXhj ZXB0aW9uOwogICBSZWZlcmVuY2VkIDogZXhjZXB0aW9uOwogICBTdG9yYWdlX0Vycm9yIDogZXhj ZXB0aW9uOwogICBTeW5jaHJvbml6YXRpb25fRXJyb3IgOiBleGNlcHRpb247CiAgIFVuZGVyZmxv dyA6IGV4Y2VwdGlvbjsKCiAgIFNob3VsZF9IYXZlX0JlZW5fT3ZlcnJpZGRlbiA6IGV4Y2VwdGlv bjsKICAgLS0gIFJhaXNlZCBpZiB0aGUgQ29tcG9uZW50cyBoYXZlIGZhaWxlZCB0byBvdmVycmlk ZSBhIHByaW1pdGl2ZQogICAtLSAgc3VicHJvZ3JhbSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gb3Zl cnJpZGRlbiBmb3IgYSBkZXJpdmVkIHR5cGUuCiAgIC0tICBVc2VkIG9ubHkgd2hlcmUgdGhlIHN1 YnByb2dyYW0gaXMgcHJpdmF0ZSAoYW5kIHRoZXJlZm9yZSBjYW4ndAogICAtLSAgYmUgYWJzdHJh Y3QpLgoKICAgTm90X1lldF9JbXBsZW1lbnRlZCA6IGV4Y2VwdGlvbjsKICAgLS0gIFJhaXNlZCB3 aGVuIGEgZmVhdHVyZSBoYXNuJ3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuCgplbmQgQkM7CgotLSAg Q29weXJpZ2h0IChDKSAxOTk0LTIwMDEgR3JhZHkgQm9vY2gsIERhdmlkIFdlbGxlciwgU3RldmUg RG9pZWwKLS0gIGFuZCBTaW1vbiBXcmlnaHQuCi0tICBBbGwgUmlnaHRzIFJlc2VydmVkLgotLQot LSAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdAotLSAgICAgIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBZGEg Q29tbXVuaXR5Ci0tICAgICAgTGljZW5zZSB3aGljaCBjb21lcyB3aXRoIHRoaXMgTGlicmFyeS4K LS0KLS0gICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlCi0tICAgICAgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZAotLSAgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS0gICAgICBQVVJQT1NFLiBTZWUgdGhlIEFkYSBD b21tdW5pdHkgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLSAgICAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEFkYSBDb21tdW5pdHkKLS0gICAgICBMaWNlbnNlIHdp dGggdGhpcyBsaWJyYXJ5LCBpbiB0aGUgZmlsZSBuYW1lZCAiQWRhIENvbW11bml0eQotLSAgICAg IExpY2Vuc2UiIG9yICJBQ0wiLiBJZiBub3QsIGNvbnRhY3QgdGhlIGF1dGhvciBvZiB0aGlzIGxp YnJhcnkKLS0gICAgICBmb3IgYSBjb3B5LgotLQoKLS0gICRSQ1NmaWxlOiBiYy1jb250YWluZXJz LmFkcyx2ICQKLS0gICRSZXZpc2lvbjogMS4xNyAkCi0tICAkRGF0ZTogMjAwMS8wOS8yMiAxNzoy OTo0NiAkCi0tICAkQXV0aG9yOiBzaW1vbiAkCgp3aXRoIEFkYS5GaW5hbGl6YXRpb247CgpnZW5l cmljCiAgIHR5cGUgSXRlbSBpcyBwcml2YXRlOwogICB3aXRoIGZ1bmN0aW9uICI9IiAoTCwgUiA6 IEl0ZW0pIHJldHVybiBCb29sZWFuIGlzIDw+OwpwYWNrYWdlIEJDLkNvbnRhaW5lcnMgaXMKCiAg IHByYWdtYSBFbGFib3JhdGVfQm9keTsKCiAgIC0tICBUaGlzIHBhY2thZ2Ugc3BlY2lmaWVzIHRo ZSBjb21tb24gcHJvdG9jb2wgb2YgYWxsIENvbnRhaW5lcgogICAtLSAgY2xhc3Nlcy4gVGhpcyBj b21tb24gcHJvdG9jb2wgY29uc2lzdHMgb2YgSXRlcmF0b3JzLgoKICAgdHlwZSBDb250YWluZXIg aXMgYWJzdHJhY3QgdGFnZ2VkIHByaXZhdGU7CgogICBmdW5jdGlvbiBOdWxsX0NvbnRhaW5lciBy ZXR1cm4gQ29udGFpbmVyIGlzIGFic3RyYWN0OwoKICAgLS0gIEFjdGl2ZSBpdGVyYXRpb24KCiAg IHR5cGUgSXRlcmF0b3IgKDw+KSBpcyBhYnN0cmFjdCBuZXcgQWRhLkZpbmFsaXphdGlvbi5Db250 cm9sbGVkIHdpdGggcHJpdmF0ZTsKCiAgIGZ1bmN0aW9uIE5ld19JdGVyYXRvciAoRm9yX1RoZV9D b250YWluZXIgOiBDb250YWluZXIpIHJldHVybiBJdGVyYXRvcidDbGFzcwogICAgICBpcyBhYnN0 cmFjdDsKICAgLS0gIFJldHVybiBhIHJlc2V0IEl0ZXJhdG9yIGJvdW5kIHRvIHRoZSBzcGVjaWZp YyBDb250YWluZXIuCgogICBwcm9jZWR1cmUgUmVzZXQgKEl0IDogaW4gb3V0IEl0ZXJhdG9yKSBp cyBhYnN0cmFjdDsKICAgLS0gIFJlc2V0IHRoZSBJdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nLgoK ICAgcHJvY2VkdXJlIE5leHQgKEl0IDogaW4gb3V0IEl0ZXJhdG9yKSBpcyBhYnN0cmFjdDsKICAg LS0gIEFkdmFuY2UgdGhlIEl0ZXJhdG9yIHRvIHRoZSBuZXh0IEl0ZW0gaW4gdGhlIENvbnRhaW5l ci4KCiAgIGZ1bmN0aW9uIElzX0RvbmUgKEl0IDogSXRlcmF0b3IpIHJldHVybiBCb29sZWFuIGlz IGFic3RyYWN0OwogICAtLSAgUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIG5vIG1vcmUgSXRlbXMg aW4gdGhlIENvbnRhaW5lci4KCiAgIGZ1bmN0aW9uIEN1cnJlbnRfSXRlbSAoSXQgOiBJdGVyYXRv cikgcmV0dXJuIEl0ZW0gaXMgYWJzdHJhY3Q7CiAgIC0tICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBj dXJyZW50IEl0ZW0uCgogICBnZW5lcmljCiAgICAgIHdpdGggcHJvY2VkdXJlIEFwcGx5IChFbGVt IDogaW4gb3V0IEl0ZW0pOwogICBwcm9jZWR1cmUgQWNjZXNzX0N1cnJlbnRfSXRlbSAoSW5fVGhl X0l0ZXJhdG9yIDogSXRlcmF0b3InQ2xhc3MpOwogICAtLSAgQ2FsbCBBcHBseSBmb3IgdGhlIEl0 ZXJhdG9yJ3MgY3VycmVudCBJdGVtLgoKICAgcHJvY2VkdXJlIERlbGV0ZV9JdGVtX0F0IChJdCA6 IGluIG91dCBJdGVyYXRvcikgaXMgYWJzdHJhY3Q7CiAgIC0tICBSZW1vdmUgdGhlIGN1cnJlbnQg aXRlbS4KCiAgIC0tICBQYXNzaXZlIGl0ZXJhdGlvbgoKICAgZ2VuZXJpYwogICAgICB3aXRoIHBy b2NlZHVyZSBBcHBseSAoRWxlbSA6IGluIEl0ZW07IE9LIDogb3V0IEJvb2xlYW4pOwogICBwcm9j ZWR1cmUgVmlzaXQgKFVzaW5nIDogaW4gb3V0IEl0ZXJhdG9yJ0NsYXNzKTsKICAgLS0gIENhbGwg QXBwbHkgd2l0aCBhIGNvcHkgb2YgZWFjaCBJdGVtIGluIHRoZSBDb250YWluZXIgdG8gd2hpY2gK ICAgLS0gIHRoZSBpdGVyYXRvciBVc2luZyBpcyBib3VuZC4gVGhlIGl0ZXJhdGlvbiB3aWxsIHRl cm1pbmF0ZSBlYXJseQogICAtLSAgaWYgQXBwbHkgc2V0cyBPSyB0byBGYWxzZS4KCiAgIGdlbmVy aWMKICAgICAgdHlwZSBQYXJhbV9UeXBlIGlzIHByaXZhdGU7CiAgICAgIHdpdGggcHJvY2VkdXJl IEFwcGx5IChFbGVtIDogaW4gSXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFt IDogaW4gUGFyYW1fVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9LIDogb3V0IEJv b2xlYW4pOwogICBwcm9jZWR1cmUgVmlzaXRfV2l0aF9Jbl9QYXJhbSAoVXNpbmcgOiBpbiBvdXQg SXRlcmF0b3InQ2xhc3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhbSA6 IGluIFBhcmFtX1R5cGUpOwogICAtLSAgQ2FsbCBBcHBseSB3aXRoIGEgUGFyYW1ldGVyIGZvciBl YWNoIEl0ZW0gaW4gdGhlIENvbnRhaW5lciB0bwogICAtLSAgd2hpY2ggdGhlIGl0ZXJhdG9yIFVz aW5nIGlzIGJvdW5kLiBUaGUgaXRlcmF0aW9uIHdpbGwgdGVybWluYXRlCiAgIC0tICBlYXJseSBp ZiBBcHBseSBzZXRzIE9LIHRvIEZhbHNlLgoKICAgZ2VuZXJpYwogICAgICB0eXBlIFBhcmFtX1R5 cGUgaXMgcHJpdmF0ZTsKICAgICAgd2l0aCBwcm9jZWR1cmUgQXBwbHkgKEVsZW0gOiBpbiBJdGVt OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW0gOiBpbiBvdXQgUGFyYW1fVHlwZTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9LIDogb3V0IEJvb2xlYW4pOwogICBwcm9jZWR1 cmUgVmlzaXRfV2l0aF9Jbl9PdXRfUGFyYW0gKFVzaW5nIDogaW4gb3V0IEl0ZXJhdG9yJ0NsYXNz OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtIDogaW4gb3V0IFBh cmFtX1R5cGUpOwogICAtLSAgQ2FsbCBBcHBseSB3aXRoIGEgUGFyYW1ldGVyIGZvciBlYWNoIEl0 ZW0gaW4gdGhlIENvbnRhaW5lciB0bwogICAtLSAgd2hpY2ggdGhlIGl0ZXJhdG9yIFVzaW5nIGlz IGJvdW5kLiBUaGUgaXRlcmF0aW9uIHdpbGwgdGVybWluYXRlCiAgIC0tICBlYXJseSBpZiBBcHBs eSBzZXRzIE9LIHRvIEZhbHNlLgoKICAgZ2VuZXJpYwogICAgICB3aXRoIHByb2NlZHVyZSBBcHBs eSAoRWxlbSA6IGluIG91dCBJdGVtOyBPSyA6IG91dCBCb29sZWFuKTsKICAgcHJvY2VkdXJlIE1v ZGlmeSAoVXNpbmcgOiBpbiBvdXQgSXRlcmF0b3InQ2xhc3MpOwogICAtLSAgQ2FsbCBBcHBseSB3 aXRoIGEgY29weSBvZiBlYWNoIEl0ZW0gaW4gdGhlIENvbnRhaW5lciB0byB3aGljaAogICAtLSAg dGhlIGl0ZXJhdG9yIFVzaW5nIGlzIGJvdW5kLiBUaGUgaXRlcmF0aW9uIHdpbGwgdGVybWluYXRl IGVhcmx5CiAgIC0tICBpZiBBcHBseSBzZXRzIE9LIHRvIEZhbHNlLgoKICAgZ2VuZXJpYwogICAg ICB0eXBlIFBhcmFtX1R5cGUgaXMgcHJpdmF0ZTsKICAgICAgd2l0aCBwcm9jZWR1cmUgQXBwbHkg KEVsZW0gOiBpbiBvdXQgSXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtIDog aW4gUGFyYW1fVHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9LIDogb3V0IEJvb2xl YW4pOwogICBwcm9jZWR1cmUgTW9kaWZ5X1dpdGhfSW5fUGFyYW0gKFVzaW5nIDogaW4gb3V0IEl0 ZXJhdG9yJ0NsYXNzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtIDog aW4gUGFyYW1fVHlwZSk7CiAgIC0tICBDYWxsIEFwcGx5IHdpdGggYSBQYXJhbWV0ZXIgZWFjaCBJ dGVtIGluIHRoZSBDb250YWluZXIgdG8gd2hpY2gKICAgLS0gIHRoZSBpdGVyYXRvciBVc2luZyBp cyBib3VuZC4gVGhlIGl0ZXJhdGlvbiB3aWxsIHRlcm1pbmF0ZSBlYXJseQogICAtLSAgaWYgQXBw bHkgc2V0cyBPSyB0byBGYWxzZS4KCiAgIGdlbmVyaWMKICAgICAgdHlwZSBQYXJhbV9UeXBlIGlz IHByaXZhdGU7CiAgICAgIHdpdGggcHJvY2VkdXJlIEFwcGx5IChFbGVtIDogaW4gb3V0IEl0ZW07 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhbSA6IGluIG91dCBQYXJhbV9UeXBlOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgT0sgOiBvdXQgQm9vbGVhbik7CiAgIHByb2NlZHVy ZSBNb2RpZnlfV2l0aF9Jbl9PdXRfUGFyYW0gKFVzaW5nIDogaW4gb3V0IEl0ZXJhdG9yJ0NsYXNz OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhbSA6IGluIG91dCBQ YXJhbV9UeXBlKTsKICAgLS0gIENhbGwgQXBwbHkgd2l0aCBhIGNvcHkgb2YgZWFjaCBJdGVtIGlu IHRoZSBDb250YWluZXIgdG8gd2hpY2gKICAgLS0gIHRoZSBpdGVyYXRvciBVc2luZyBpcyBib3Vu ZC4gVGhlIGl0ZXJhdGlvbiB3aWxsIHRlcm1pbmF0ZSBlYXJseQogICAtLSAgaWYgQXBwbHkgc2V0 cyBPSyB0byBGYWxzZS4KCnByaXZhdGUKCiAgIC0tICBXZSBuZWVkIGFjY2VzcyB0byBJdGVtczsg YnV0IHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgbm8gYWN0dWFsCiAgIC0tICBhbGxvY2F0aW9ucyBv Y2N1ciB1c2luZyB0aGlzIHR5cGUuCgogICB0eXBlIEl0ZW1fUHRyIGlzIGFjY2VzcyBhbGwgSXRl bTsKICAgZm9yIEl0ZW1fUHRyJ1N0b3JhZ2VfU2l6ZSB1c2UgMDsKCiAgIHR5cGUgQ29udGFpbmVy IGlzIGFic3RyYWN0IG5ldyBBZGEuRmluYWxpemF0aW9uLkNvbnRyb2xsZWQgd2l0aCBudWxsIHJl Y29yZDsKCiAgIC0tICBTdXBwb3J0IGZvciBjb25jdXJyZW5jeSBwcm90ZWN0aW9uLiBUaGUgYmFz ZSBpbXBsZW1lbnRhdGlvbiBvZgogICAtLSAgdGhlc2UgcHJvY2VkdXJlcyBkb2VzIG5vdGhpbmc7 IGRlcml2ZWQgdHlwZXMgb3ZlcnJpZGUgYXMKICAgLS0gIHJlcXVpcmVkLgoKICAgcHJvY2VkdXJl IExvY2sgKEMgOiBpbiBvdXQgQ29udGFpbmVyKTsKCiAgIHByb2NlZHVyZSBVbmxvY2sgKEMgOiBp biBvdXQgQ29udGFpbmVyKTsKCiAgIC0tICBQcml2YXRlIHByaW1pdGl2ZSBvcGVyYXRpb25zIG9m IENvbnRhaW5lci4gIFRoZXNlIHNob3VsZAogICAtLSAgaWRlYWxseSBiZSBhYnN0cmFjdDsgaW5z dGVhZCwgd2UgcHJvdmlkZSBpbXBsZW1lbnRhdGlvbnMsIGJ1dAogICAtLSAgdGhleSByYWlzZSBT aG91bGRfSGF2ZV9CZWVuX092ZXJyaWRkZW4uCgogICBmdW5jdGlvbiBJdGVtX0F0IChDIDogQ29u dGFpbmVyOyBJbmRleCA6IFBvc2l0aXZlKSByZXR1cm4gSXRlbV9QdHI7CgogICAtLSAgSXRlcmF0 aW9uCgogICB0eXBlIENvbnRhaW5lcl9QdHIgaXMgYWNjZXNzIGFsbCBDb250YWluZXInQ2xhc3M7 CiAgIGZvciBDb250YWluZXJfUHRyJ1N0b3JhZ2VfU2l6ZSB1c2UgMDsKCiAgIHR5cGUgSXRlcmF0 b3IgaXMgYWJzdHJhY3QgbmV3IEFkYS5GaW5hbGl6YXRpb24uQ29udHJvbGxlZCB3aXRoIHJlY29y ZAogICAgICBGb3JfVGhlX0NvbnRhaW5lciA6IENvbnRhaW5lcl9QdHI7CiAgIGVuZCByZWNvcmQ7 CgogICAtLSAgUHJpdmF0ZSBwcmltaXRpdmUgb3BlcmF0aW9ucyBvZiBJdGVyYXRvci4gIFRoZXNl IHNob3VsZCBpZGVhbGx5CiAgIC0tICBiZSBhYnN0cmFjdDsgaW5zdGVhZCwgd2UgcHJvdmlkZSBp bXBsZW1lbnRhdGlvbnMsIGJ1dCB0aGV5CiAgIC0tICByYWlzZSBTaG91bGRfSGF2ZV9CZWVuX092 ZXJyaWRkZW4uCiAgIGZ1bmN0aW9uIEN1cnJlbnRfSXRlbV9QdHIgKEl0IDogSXRlcmF0b3IpIHJl dHVybiBJdGVtX1B0cjsKCmVuZCBCQy5Db250YWluZXJzOwotLSAgQ29weXJpZ2h0IChDKSAxOTk0 LTE5OTggR3JhZHkgQm9vY2gsIERhdmlkIFdlbGxlciBhbmQgU2ltb24gV3JpZ2h0LgotLSAgQWxs IFJpZ2h0cyBSZXNlcnZlZC4KLS0KLS0gICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKLS0gICAgICBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgQWRhIENvbW11bml0eQotLSAgICAgIExpY2Vuc2Ugd2hpY2ggY29t ZXMgd2l0aCB0aGlzIExpYnJhcnkuCi0tCi0tICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotLSAgICAgIHVzZWZ1bCwgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLS0gICAgICB3YXJyYW50 eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0tICAgICAg UFVSUE9TRS4gU2VlIHRoZSBBZGEgQ29tbXVuaXR5IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LS0gICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBBZGEgQ29tbXVu aXR5Ci0tICAgICAgTGljZW5zZSB3aXRoIHRoaXMgbGlicmFyeSwgaW4gdGhlIGZpbGUgbmFtZWQg IkFkYSBDb21tdW5pdHkKLS0gICAgICBMaWNlbnNlIiBvciAiQUNMIi4gSWYgbm90LCBjb250YWN0 IHRoZSBhdXRob3Igb2YgdGhpcyBsaWJyYXJ5Ci0tICAgICAgZm9yIGEgY29weS4KLS0KCi0tICAk UkNTZmlsZTogYmMtY29udGFpbmVycy1saXN0cy5hZHMsdiAkCi0tICAkUmV2aXNpb246IDEuNSAk Ci0tICAkRGF0ZTogMjAwMS8wOS8xMyAwNTo0Mjo1OSAkCi0tICAkQXV0aG9yOiBzaW1vbiAkCgpn ZW5lcmljIHBhY2thZ2UgQkMuQ29udGFpbmVycy5MaXN0cyBpcwoKICAgLS0gIEEgc2luZ2xlIGxp c3QgaXMgYSByb290ZWQgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlIGl0ZW1zLCB3aXRoCiAgIC0t ICBhIGxpbmsgZnJvbSBvbmUgaXRlbSB0byBpdHMgZm9sbG93aW5nIGl0ZW0uIEEgZG91YmxlIGxp c3QgaXMgYQogICAtLSAgcm9vdGVkIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBpdGVtcywgd2l0 aCBsaW5rcyBmcm9tIG9uZSBpdGVtCiAgIC0tICB0byBpdHMgcHJldmlvdXMgYW5kIG5leHQgaXRl bXMuCgogICAtLSAgTGlzdHMgYXJlIHBvbHlsaXRoaWMgc3RydWN0dXJlcywgYW5kIGhlbmNlIHRo ZSBzZW1hbnRpY3Mgb2YKICAgLS0gIGNvcHlpbmcsIGFzc2lnbm1lbnQsIGFuZCBlcXVhbGl0eSBp bnZvbHZlIHN0cnVjdHVyYWwKICAgLS0gIHNoYXJpbmcuIENhcmUgbXVzdCBiZSB0YWtlbiBpbiBt YW5pcHVsYXRpbmcgdGhlIHNhbWUgbGlzdCBuYW1lZAogICAtLSAgYnkgbW9yZSB0aGFuIG9uZSBh bGlhcy4KCiAgIC0tICBUaGVzZSBjbGFzc2VzIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgc3ViY2xh c3NlZC4KCiAgIC0tICBUaGVzZSBhYnN0cmFjdGlvbnMgaGF2ZSBiZWVuIGNhcmVmdWxseSBjb25z dHJ1Y3RlZCB0byBlbGltaW5hdGUKICAgLS0gIGFsbCBzdG9yYWdlIGxlYWtzLCBleGNlcHQgaW4g dGhlIGNhc2Ugb2YgaW50ZW50aW9uYWwKICAgLS0gIGFidXNlcy4gV2hlbiBhIGxpc3QgaXMgbWFu aXB1bGF0ZWQsIGFsbCBpdGVtcyB0aGF0IGJlY29tZQogICAtLSAgdW5yZWFjaGFibGUgYXJlIGF1 dG9tYXRpY2FsbHkgcmVjbGFpbWVkLiBGdXJ0aGVybW9yZSwgdGhpcwogICAtLSAgZGVzaWduIHBy b3RlY3RzIGFnYWluc3QgZGFuZ2xpbmcgcmVmZXJlbmNlczogYW4gaXRlbSBpcyBuZXZlcgogICAt LSAgcmVjbGFpbWVkIGlmIHRoZXJlIGV4aXN0cyBhIHJlZmVyZW5jZSB0byBpdC4KCiAgIC0tICBV bnJlYWNoYWJsZSBpdGVtcyBhcmUgdGhvc2UgdGhhdCBiZWxvbmcgdG8gYSBsaXN0IG9yIGEgc3Vi bGlzdAogICAtLSAgd2hvc2UgaGVhZCBpcyBub3QgZGVzaWduYXRlZCBieSBhbnkgYWxpYXMuIEZv ciBleGFtcGxlLAogICAtLSAgY29uc2lkZXIgdGhlIGxpc3QgKEEgQiBDKSwgd2l0aCB0aGUgaGVh ZCBvZiB0aGUgbGlzdCBkZXNpZ25hdGVkCiAgIC0tICBieSBMMS4gTDEgaW5pdGlhbGx5IHBvaW50 cyB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgYXQgaXRlbQogICAtLSAgQS4gSW52b2tpbmcgdGhl IG1lbWJlciBmdW5jdGlvbiBUYWlsIG9uIEwxIG5vdyBjYXVzZXMgTDEgdG8KICAgLS0gIHBvaW50 IHRvIGl0ZW0gQi4gQmVjYXVzZSBBIGlzIG5vdyBjb25zaWRlcmVkIHVucmVhY2hhYmxlLCB0aGUK ICAgLS0gIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0ZW0gQSBpcyByZWNsYWltZWQ7IHRoZSBw cmVkZWNlc3NvciBvZgogICAtLSAgQiBpcyBub3cgbnVsbC4gU2ltaWxhcmx5LCBjb25zaWRlciB0 aGUgbGlzdCAoRCBFIEYpLCB3aXRoIHRoZQogICAtLSAgaGVhZCBvZiB0aGUgbGlzdCBkZXNpZ25h dGVkIGJ5IGJvdGggTDEgYW5kIEwyLiBCb3RoIEwxIGFuZCBMMgogICAtLSAgYXJlIGFsaWFzZXMg dGhhdCBpbml0aWFsbHkgcG9pbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QgYXQKICAgLS0gIGl0 ZW0gRC4gSW52b2tpbmcgdGhlIG1lbWJlciBmdW5jdGlvbiBUYWlsIG9uIEwxIG5vdyBjYXVzZXMg TDEKICAgLS0gIHRvIHBvaW50IHRvIGl0ZW0gRTsgTDIgaXMgdW5hZmZlY3RlZC4gU3VwcG9zZSB3 ZSBub3cgaW52b2tlIHRoZQogICAtLSAgbWVtYmVyIGZ1bmN0aW9uIGNsZWFyIG9uIEwyLiBUaGUg c2VtYW50aWNzIG9mIHRoaXMgb3BlcmF0aW9uCiAgIC0tICBhcmUgc3VjaCB0aGF0IG9ubHkgdW5y ZWFjaGFibGUgaXRlbXMgYXJlIHJlY2xhaW1lZC4gVGh1cywgdGhlCiAgIC0tICBzdG9yYWdlIGFz c29jaWF0ZWQgd2l0aCBpdGVtIEQgaXMgcmVjbGFpbWVkLCBiZWNhdXNlIGl0IGlzIG5vCiAgIC0t ICBsb25nZXIgcmVhY2hhYmxlOyBMMiBpcyBub3cgbnVsbCwgYW5kIHRoZSBwcmVkZWNlc3NvciBv ZiBFIGlzCiAgIC0tICBub3cgbnVsbC4gSXRlbXMgRSBhbmQgRiBhcmUgbm90IHJlY2xhaW1lZCwg YmVjYXVzZSB0aGV5IGFyZQogICAtLSAgcmVhY2hhYmxlIHRocm91Z2ggTDEuCgogICAtLSAgQW4g YWx0ZXJuYXRlIGFic3RyYWN0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBjb25zaWRlciBpdGVtcyBB CiAgIC0tICBhbmQgRCByZWFjaGFibGUgZm9yIGRvdWJseS1saW5rZWQgbGlzdHMgaW4gdGhlc2Ug dHdvCiAgIC0tICBjaXJjdW1zdGFuY2VzLiBXZSBleHBsaWNpdGx5IHJlamVjdGVkIHRoaXMgZGVz aWduLCBpbiBvcmRlciB0bwogICAtLSAgbWFpbnRhaW4gY29uc2lzdGVuY3kgd2l0aCB0aGUgc2Vt YW50aWNzIG9mIHRoZSBzaW5nbHktbGlua2VkCiAgIC0tICBsaXN0LgoKICAgLS0gIEl0IGlzIHBv c3NpYmxlLCBidXQgbm90IGdlbmVyYWxseSBkZXNpcmFibGUsIHRvIHByb2R1Y2UKICAgLS0gIG11 bHRpLWhlYWRlZCBsaXN0cy4gSW4gc3VjaCBjYXNlcywgdGhlIHByZWRlY2Vzc29yIG9mIHRoZSBp dGVtCiAgIC0tICBhdCB0aGUgbmVjayBvZiBhIG11bHRpLWhlYWRlZCBsaXN0IHBvaW50cyB0byB0 aGUgbW9zdCByZWNlbnRseQogICAtLSAgYXR0YWNoZWQgaGVhZC4KCiAgIC0tICBUaGUgc2luZ2x5 LWxpbmtlZCBhbmQgZG91Ymx5LWxpbmtlZCBsaXN0cyBoYXZlIGEgc2ltaWxhcgogICAtLSAgcHJv dG9jb2wsIGV4Y2VwdCB0aGF0IHRoZSBkb3VibHktbGlua2VkIGxpc3QgYWRkcyB0d28KICAgLS0g IG9wZXJhdGlvbnMsIFByZWRlY2Vzc29yIGFuZCBJc19IZWFkLiBUaGUgc3BhY2Ugc2VtYW50aWNz IG9mCiAgIC0tICB0aGVzZSB0d28gY2xhc3NlcyBhcmUgZGlmZmVyZW50ICh0aGUgZG91Ymx5LWxp bmtlZCBsaXN0IGhhcyBvbmUKICAgLS0gIGV4dHJhIHBvaW50ZXIgcGVyIGl0ZW0pIGFuZCBhZGRp dGlvbmFsbHksIHRoZWlyIHRpbWUgc2VtYW50aWNzCiAgIC0tICBhcmUgc2xpZ2h0bHkgZGlmZmVy ZW50LCBiZWNhdXNlIG9mIHRoZSBvcHRpbWl6YXRpb25zIHBvc3NpYmxlCiAgIC0tICB3aXRoIGhh dmluZyBhIHByZXZpb3VzIHBvaW50ZXIgaW4gdGhlIGRvdWJseS1saW5rZWQgbGlzdCBjbGFzcy4K CmVuZCBCQy5Db250YWluZXJzLkxpc3RzOwotLSAgQ29weXJpZ2h0IChDKSAxOTk0LTIwMDEgR3Jh ZHkgQm9vY2gsIERhdmlkIFdlbGxlciBhbmQgU2ltb24gV3JpZ2h0LgotLSAgQWxsIFJpZ2h0cyBS ZXNlcnZlZC4KLS0KLS0gICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQKLS0gICAgICBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgQWRhIENvbW11bml0eQotLSAgICAgIExpY2Vuc2Ugd2hpY2ggY29tZXMgd2l0aCB0 aGlzIExpYnJhcnkuCi0tCi0tICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotLSAgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLS0gICAgICB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0tICAgICAgUFVSUE9TRS4g U2VlIHRoZSBBZGEgQ29tbXVuaXR5IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0gICAgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBBZGEgQ29tbXVuaXR5Ci0tICAg ICAgTGljZW5zZSB3aXRoIHRoaXMgbGlicmFyeSwgaW4gdGhlIGZpbGUgbmFtZWQgIkFkYSBDb21t dW5pdHkKLS0gICAgICBMaWNlbnNlIiBvciAiQUNMIi4gSWYgbm90LCBjb250YWN0IHRoZSBhdXRo b3Igb2YgdGhpcyBsaWJyYXJ5Ci0tICAgICAgZm9yIGEgY29weS4KLS0KCi0tICAkUkNTZmlsZTog YmMtY29udGFpbmVycy1saXN0cy1zaW5nbGUuYWRzLHYgJAotLSAgJFJldmlzaW9uOiAxLjE2ICQK LS0gICREYXRlOiAyMDAxLzEwLzE4IDIwOjQyOjI2ICQKLS0gICRBdXRob3I6IHNpbW9uICQKCndp dGggU3lzdGVtLlN0b3JhZ2VfUG9vbHM7CgpnZW5lcmljCiAgIFN0b3JhZ2UgOiBpbiBvdXQgU3lz dGVtLlN0b3JhZ2VfUG9vbHMuUm9vdF9TdG9yYWdlX1Bvb2wnQ2xhc3M7CnBhY2thZ2UgQkMuQ29u dGFpbmVycy5MaXN0cy5TaW5nbGUgaXMKCiAgIHByYWdtYSBFbGFib3JhdGVfQm9keTsKCiAgIC0t ICBTaW5nbHktbGlua2VkIGxpc3QKCiAgIHR5cGUgTGlzdCBpcyBuZXcgQ29udGFpbmVyIHdpdGgg cHJpdmF0ZTsKCiAgIGZ1bmN0aW9uIE51bGxfQ29udGFpbmVyIHJldHVybiBMaXN0OwoKICAgZnVu Y3Rpb24gIj0iIChMLCBSIDogTGlzdCkgcmV0dXJuIEJvb2xlYW47CiAgIC0tICBSZXR1cm4gVHJ1 ZSBpZiBhbmQgb25seSBpZiBib3RoIGxpc3RzIGFyZSBudWxsIG9yIHN0cnVjdHVyYWxseQogICAt LSAgc2hhcmUgdGhlIHNhbWUgbGlzdC4KCiAgIHByb2NlZHVyZSBDbGVhciAoTCA6IGluIG91dCBM aXN0KTsKICAgLS0gIElmIHRoZSBsaXN0IGlzIG5vdCBudWxsLCBkZXN0cm95IHRoaXMgYWxpYXMg dG8gdGhlIGxpc3QsIG1ha2UKICAgLS0gIHRoZSBsaXN0IG51bGwsIGFuZCByZWNsYWltIHRoZSBz dG9yYWdlIGFzc29jaWF0ZWQgd2l0aCBhbnkKICAgLS0gIHVucmVhY2hhYmxlIGl0ZW1zLgoKICAg cHJvY2VkdXJlIEluc2VydCAoTCA6IGluIG91dCBMaXN0OyBFbGVtIDogSXRlbSk7CiAgIC0tICBB ZGQgdGhlIGl0ZW0gdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCgogICBwcm9jZWR1cmUgSW5zZXJ0 IChMIDogaW4gb3V0IExpc3Q7IEZyb21fTGlzdCA6IGluIG91dCBMaXN0KTsKICAgLS0gIEFkZCBG cm9tX0xpc3QgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCgogICBwcm9jZWR1cmUgSW5zZXJ0IChM IDogaW4gb3V0IExpc3Q7IEVsZW0gOiBJdGVtOyBCZWZvcmUgOiBQb3NpdGl2ZSk7CiAgIC0tICBB ZGQgdGhlIGl0ZW0gYmVmb3JlIHRoZSBnaXZlbiBpbmRleCBpdGVtIGluIHRoZSBsaXN0OyBpZiBC ZWZvcmUKICAgLS0gIGlzIDEsIHRoZSBpdGVtIGlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBs aXN0LgoKICAgcHJvY2VkdXJlIEluc2VydCAoTCA6IGluIG91dCBMaXN0OwogICAgICAgICAgICAg ICAgICAgICBGcm9tX0xpc3QgOiBpbiBvdXQgTGlzdDsKICAgICAgICAgICAgICAgICAgICAgQmVm b3JlIDogUG9zaXRpdmUpOwogICAtLSAgQWRkIHRoZSBsaXN0IGJlZm9yZSB0aGUgZ2l2ZW4gaW5k ZXggaXRlbSBpbiB0aGUgbGlzdDsgaWYgQmVmb3JlCiAgIC0tICBpcyAxLCB0aGUgbGlzdCBpcyBh ZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KCiAgIHByb2NlZHVyZSBBcHBlbmQgKEwgOiBp biBvdXQgTGlzdDsgRWxlbSA6IEl0ZW0pOwogICAtLSAgQWRkIHRoZSBpdGVtIGF0IHRoZSBlbmQg b2YgdGhlIGxpc3QuCgogICBwcm9jZWR1cmUgQXBwZW5kIChMIDogaW4gb3V0IExpc3Q7IEZyb21f TGlzdCA6IGluIG91dCBMaXN0KTsKICAgLS0gIEFkZCB0aGUgZ2l2ZW4gbGlzdCBhdCB0aGUgZW5k IG9mIHRoZSBsaXN0LgoKICAgcHJvY2VkdXJlIEFwcGVuZCAoTCA6IGluIG91dCBMaXN0OyBFbGVt IDogSXRlbTsgQWZ0ZXIgOiBQb3NpdGl2ZSk7CiAgIC0tICBBZGQgdGhlIGl0ZW0gYWZ0ZXIgdGhl IGdpdmVuIGluZGV4IGl0ZW0gaW4gdGhlIGxpc3QuCgogICBwcm9jZWR1cmUgQXBwZW5kIChMIDog aW4gb3V0IExpc3Q7CiAgICAgICAgICAgICAgICAgICAgIEZyb21fTGlzdCA6IGluIG91dCBMaXN0 OwogICAgICAgICAgICAgICAgICAgICBBZnRlciA6IFBvc2l0aXZlKTsKICAgLS0gIEFkZCBGcm9t X0xpc3QgYWZ0ZXIgdGhlIGdpdmVuIGluZGV4IGl0ZW0gaW4gdGhlIGxpc3QuCgogICBwcm9jZWR1 cmUgUmVtb3ZlIChMIDogaW4gb3V0IExpc3Q7IEZyb20gOiBQb3NpdGl2ZSk7CiAgIC0tICBSZW1v dmUgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4IGluIHRoZSBsaXN0LgoKICAgcHJvY2VkdXJl IFB1cmdlIChMIDogaW4gb3V0IExpc3Q7IEZyb20gOiBQb3NpdGl2ZSk7CiAgIC0tICBSZW1vdmUg YWxsIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gaW5kZXgsCiAg IC0tICBpbmNsdXNpdmUuCgogICBwcm9jZWR1cmUgUHVyZ2UgKEwgOiBpbiBvdXQgTGlzdDsgRnJv bSA6IFBvc2l0aXZlOyBDb3VudCA6IFBvc2l0aXZlKTsKICAgLS0gIFJlbW92ZSBhbGwgdGhlIGl0 ZW1zIGluIHRoZSBsaXN0IHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBpbmRleCwKICAgLS0gIGluY2x1 c2l2ZSwgZm9yIGEgdG90YWwgb2YgY291bnQgaXRlbXMuCgogICBwcm9jZWR1cmUgUHJlc2VydmUg KEwgOiBpbiBvdXQgTGlzdDsgRnJvbSA6IFBvc2l0aXZlKTsKICAgLS0gIFJlbW92ZSBhbGwgdGhl IGl0ZW1zIGluIHRoZSBsaXN0IGV4Y2VwdCB0aG9zZSBzdGFydGluZyBhdCB0aGUKICAgLS0gIGdp dmVuIGluZGV4LCBpbmNsdXNpdmUuCgogICBwcm9jZWR1cmUgUHJlc2VydmUgKEwgOiBpbiBvdXQg TGlzdDsgRnJvbSA6IFBvc2l0aXZlOyBDb3VudCA6IFBvc2l0aXZlKTsKICAgLS0gIFJlbW92ZSBh bGwgdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGV4Y2VwdCB0aG9zZSBzdGFydGluZyBhdCB0aGUKICAg LS0gIGdpdmVuIGluZGV4LCBpbmNsdXNpdmUsIGZvciBhIHRvdGFsIG9mIGNvdW50IGl0ZW1zLgoK ICAgcHJvY2VkdXJlIFNoYXJlIChMIDogaW4gb3V0IExpc3Q7IFdpdGhfTGlzdCA6IExpc3Q7IFN0 YXJ0aW5nX0F0IDogUG9zaXRpdmUpOwogICAtLSAgQ2xlYXIgdGhlIGxpc3QsIHRoZW4sIGlmIHRo ZSBnaXZlbiBsaXN0IGlzIG5vdCBudWxsLCBzZXQgdGhlCiAgIC0tICBsaXN0IHRvIHN0cnVjdHVy YWxseSBzaGFyZSB3aXRoIHRoZSBoZWFkIG9mIHRoZSBnaXZlbiBsaXN0LAogICAtLSAgc3RhcnRp bmcgYXQgdGhlIGdpdmVuIGluZGV4LgoKICAgcHJvY2VkdXJlIFNoYXJlX0hlYWQgKEwgOiBpbiBv dXQgTGlzdDsgV2l0aF9MaXN0IDogaW4gTGlzdCk7CiAgIC0tICBDbGVhciB0aGUgbGlzdCwgdGhl biwgaWYgdGhlIGdpdmVuIGxpc3QgaXMgbm90IG51bGwsIHNldCB0aGUKICAgLS0gIGxpc3QgdG8g c3RydWN0dXJhbGx5IHNoYXJlIHdpdGggdGhlIGhlYWQgb2YgdGhlIGdpdmVuIGxpc3QuCgogICBw cm9jZWR1cmUgU2hhcmVfRm9vdCAoTCA6IGluIG91dCBMaXN0OyBXaXRoX0xpc3QgOiBpbiBMaXN0 KTsKICAgLS0gIENsZWFyIHRoZSBsaXN0LCB0aGVuLCBpZiB0aGUgZ2l2ZW4gbGlzdCBpcyBub3Qg bnVsbCwgc2V0IHRoZQogICAtLSAgbGlzdCB0byBzdHJ1Y3R1cmFsbHkgc2hhcmUgd2l0aCB0aGUg ZW5kIG9mIHRoZSBnaXZlbiBsaXN0LgoKICAgcHJvY2VkdXJlIFN3YXBfVGFpbCAoTCA6IGluIG91 dCBMaXN0OyBXaXRoX0xpc3QgOiBpbiBvdXQgTGlzdCk7CiAgIC0tICBUaGUgZ2l2ZW4gbGlzdCBt dXN0IHJlcHJlc2VudCB0aGUgaGVhZCBvZiBhIGxpc3QsIHdoaWNoIG1heSBiZQogICAtLSAgbnVs bC4gU2V0IHRoZSB0YWlsIG9mIHRoZSBsaXN0ICh3aGljaCBtYXkgYmUgbnVsbCkgdG8gZGVub3Rl CiAgIC0tICB0aGUgZ2l2ZW4gbGlzdCAod2hpY2ggbWF5IGJlIG51bGwpLCBhbmQgc2V0IHRoZSBn aXZlbiBsaXN0IHRvCiAgIC0tICB0aGUgb3JpZ2luYWwgdGFpbCBvZiB0aGUgbGlzdC4gSWYgaXQg aXMgbm90IG51bGwsIHRoZQogICAtLSAgcHJlZGVjZXNzb3Igb2YgdGhlIG5ldyB0YWlsIG9mIHRo ZSBsaXN0IGlzIHNldCB0byBiZSB0aGUgaGVhZAogICAtLSAgb2YgdGhlIGxpc3QuIElmIGl0IGlz IG5vdCBudWxsLCB0aGUgcHJlZGVjZXNzb3Igb2YgdGhlIG5ldyBoZWFkCiAgIC0tICBvZiB0aGUg Z2l2ZW4gbGlzdCBpcyBzZXQgdG8gYmUgbnVsbC4KCiAgIHByb2NlZHVyZSBUYWlsIChMIDogaW4g b3V0IExpc3QpOwogICAtLSAgVGhlIGxpc3QgbXVzdCBub3QgYmUgbnVsbC4gU2V0IHRoZSBsaXN0 IHRvIG5vdyBkZW5vdGUgaXRzIHRhaWwKICAgLS0gICh3aGljaCBtYXkgYmUgbnVsbCksIGFuZCBy ZWNsYWltIHRoZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aAogICAtLSAgYW55IHVucmVhY2hhYmxl IGl0ZW1zLgoKICAgcHJvY2VkdXJlIFNldF9IZWFkIChMIDogaW4gb3V0IExpc3Q7IEVsZW0gOiBJ dGVtKTsKICAgLS0gIFNldCB0aGUgaXRlbSBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KCiAgIHBy b2NlZHVyZSBTZXRfSXRlbSAoTCA6IGluIG91dCBMaXN0OyBFbGVtIDogSXRlbTsgQXRfTG9jIDog UG9zaXRpdmUpOwogICAtLSAgU2V0IHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleC4KCiAgIGZ1 bmN0aW9uIExlbmd0aCAoTCA6IExpc3QpIHJldHVybiBOYXR1cmFsOwogICAtLSAgUmV0dXJuIHRo ZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGxpc3QuCgogICBmdW5jdGlvbiBJc19OdWxsIChMIDog TGlzdCkgcmV0dXJuIEJvb2xlYW47CiAgIC0tICBSZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSB0aGVy ZSBhcmUgbm8gaXRlbXMgaW4gdGhlIGxpc3QuCgogICBmdW5jdGlvbiBJc19TaGFyZWQgKEwgOiBM aXN0KSByZXR1cm4gQm9vbGVhbjsKICAgLS0gIFJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRo ZSBsaXN0IGhhcyBhbiBhbGlhcy4KCiAgIGZ1bmN0aW9uIEhlYWQgKEwgOiBMaXN0KSByZXR1cm4g SXRlbTsKICAgLS0gIFJldHVybiBhIGNvcHkgb2YgdGhlIGl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhl IGxpc3QuCgogICBnZW5lcmljCiAgICAgIHdpdGggcHJvY2VkdXJlIFByb2Nlc3MgKEVsZW0gOiBp biBvdXQgSXRlbSk7CiAgIHByb2NlZHVyZSBQcm9jZXNzX0hlYWQgKEwgOiBpbiBvdXQgTGlzdCk7 CiAgIC0tICBBY2Nlc3MgdGhlIGl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCgogICBmdW5j dGlvbiBGb290IChMIDogTGlzdCkgcmV0dXJuIEl0ZW07CiAgIC0tICBSZXR1cm4gYSBjb3B5IG9m IHRoZSBpdGVtIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCgogICBnZW5lcmljCiAgICAgIHdpdGgg cHJvY2VkdXJlIFByb2Nlc3MgKEVsZW0gOiBpbiBvdXQgSXRlbSk7CiAgIHByb2NlZHVyZSBQcm9j ZXNzX0Zvb3QgKEwgOiBpbiBvdXQgTGlzdCk7CiAgIC0tICBBY2Nlc3MgdGhlIGl0ZW0gYXQgdGhl IGVuZCBvZiB0aGUgbGlzdC4KCiAgIGZ1bmN0aW9uIEl0ZW1fQXQgKEwgOiBMaXN0OyBJbmRleCA6 IFBvc2l0aXZlKSByZXR1cm4gSXRlbTsKICAgLS0gIFJldHVybiBhIGNvcHkgb2YgdGhlIGl0ZW0g YXQgdGhlIGdpdmVuIGluZGV4LgoKICAgZnVuY3Rpb24gTmV3X0l0ZXJhdG9yIChGb3JfVGhlX0xp c3QgOiBMaXN0KSByZXR1cm4gSXRlcmF0b3InQ2xhc3M7CiAgIC0tICBSZXR1cm4gYSByZXNldCBJ dGVyYXRvciBib3VuZCB0byB0aGUgc3BlY2lmaWMgTGlzdC4KCnByaXZhdGUKCiAgIGZ1bmN0aW9u IEl0ZW1fQXQgKEwgOiBMaXN0OyBJbmRleCA6IFBvc2l0aXZlKSByZXR1cm4gSXRlbV9QdHI7Cgog ICAtLSAgVHlwZSBkZW5vdGluZyBhIHNpbXBsZSBub2RlIGNvbnNpc3Rpbmcgb2YgYW4gaXRlbSwg YSBwb2ludGVyIHRvCiAgIC0tICB0aGUgbmV4dCBpdGVtLCBhbmQgYSByZWZlcmVuY2UgY291bnQK CiAgIHR5cGUgU2luZ2xlX05vZGU7CiAgIHR5cGUgU2luZ2xlX05vZGVfUmVmIGlzIGFjY2VzcyBT aW5nbGVfTm9kZTsKICAgZm9yIFNpbmdsZV9Ob2RlX1JlZidTdG9yYWdlX1Bvb2wgdXNlIFN0b3Jh Z2U7CiAgIHR5cGUgU2luZ2xlX05vZGUgaXMgcmVjb3JkCiAgICAgIEVsZW1lbnQgOiBJdGVtOwog ICAgICBOZXh0IDogU2luZ2xlX05vZGVfUmVmOwogICAgICBDb3VudCA6IE5hdHVyYWwgOj0gMTsK ICAgZW5kIHJlY29yZDsKCiAgIHR5cGUgTGlzdCBpcyBuZXcgQ29udGFpbmVyIHdpdGggcmVjb3Jk CiAgICAgIFJlcCA6IFNpbmdsZV9Ob2RlX1JlZjsKICAgZW5kIHJlY29yZDsKCiAgIHByb2NlZHVy ZSBJbml0aWFsaXplIChMIDogaW4gb3V0IExpc3QpOwogICBwcm9jZWR1cmUgQWRqdXN0IChMIDog aW4gb3V0IExpc3QpOwogICBwcm9jZWR1cmUgRmluYWxpemUgKEwgOiBpbiBvdXQgTGlzdCk7Cgog ICB0eXBlIExpc3RfSXRlcmF0b3IgaXMgbmV3IEl0ZXJhdG9yIHdpdGggcmVjb3JkCiAgICAgIElu ZGV4IDogU2luZ2xlX05vZGVfUmVmOwogICBlbmQgcmVjb3JkOwoKICAgLS0gIE92ZXJyaWRpbmcg cHJpbWl0aXZlIHN1cGJyb2dyYW1zIG9mIHRoZSBjb25jcmV0ZSBhY3R1YWwKICAgLS0gIEl0ZXJh dG9yLgoKICAgcHJvY2VkdXJlIFJlc2V0IChJdCA6IGluIG91dCBMaXN0X0l0ZXJhdG9yKTsKCiAg IHByb2NlZHVyZSBOZXh0IChJdCA6IGluIG91dCBMaXN0X0l0ZXJhdG9yKTsKCiAgIGZ1bmN0aW9u IElzX0RvbmUgKEl0IDogTGlzdF9JdGVyYXRvcikgcmV0dXJuIEJvb2xlYW47CgogICBmdW5jdGlv biBDdXJyZW50X0l0ZW0gKEl0IDogTGlzdF9JdGVyYXRvcikgcmV0dXJuIEl0ZW07CgogICBmdW5j dGlvbiBDdXJyZW50X0l0ZW1fUHRyIChJdCA6IExpc3RfSXRlcmF0b3IpIHJldHVybiBJdGVtX1B0 cjsKCiAgIHByb2NlZHVyZSBEZWxldGVfSXRlbV9BdCAoSXQgOiBpbiBvdXQgTGlzdF9JdGVyYXRv cik7CgplbmQgQkMuQ29udGFpbmVycy5MaXN0cy5TaW5nbGU7Ci0tICBDb3B5cmlnaHQgKEMpIDE5 OTggUGF0IFJvZ2Vycy4KLS0gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0tCi0tICAgICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0Ci0tICAgICAg YW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFkYSBDb21tdW5pdHkKLS0g ICAgICBMaWNlbnNlIHdoaWNoIGNvbWVzIHdpdGggdGhpcyBMaWJyYXJ5LgotLQotLSAgICAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLS0g ICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkCi0tICAgICAgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotLSAgICAgIFBVUlBPU0UuIFNlZSB0aGUgQWRhIENvbW11bml0eSBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0tICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgQWRhIENvbW11bml0eQotLSAgICAgIExpY2Vuc2Ugd2l0aCB0aGlzIGxpYnJh cnksIGluIHRoZSBmaWxlIG5hbWVkICJBZGEgQ29tbXVuaXR5Ci0tICAgICAgTGljZW5zZSIgb3Ig IkFDTCIuIElmIG5vdCwgY29udGFjdCB0aGUgYXV0aG9yIG9mIHRoaXMgbGlicmFyeQotLSAgICAg IGZvciBhIGNvcHkuCi0tCgotLSAgJElkOiBnbG9iYWxfaGVhcC5hZHMsdiAxLjUgMjAwMS8wOS8y MyAxNToyNToxMCBzaW1vbiBFeHAgJAoKd2l0aCBCQy5TdXBwb3J0Lk1hbmFnZWRfU3RvcmFnZTsK d2l0aCBTeXN0ZW0uU3RvcmFnZV9Qb29sczsKCnBhY2thZ2UgR2xvYmFsX0hlYXAgaXMKCiAgIHN1 YnR5cGUgUG9vbCBpcyBCQy5TdXBwb3J0Lk1hbmFnZWRfU3RvcmFnZS5Qb29sOwogICBTdG9yYWdl X1Bvb2wgOiBQb29sIChDaHVua19TaXplID0+IDEwMjQpOwoKICAgU3RvcmFnZSA6IFN5c3RlbS5T dG9yYWdlX1Bvb2xzLlJvb3RfU3RvcmFnZV9Qb29sJ0NsYXNzCiAgICAgcmVuYW1lcyBTeXN0ZW0u U3RvcmFnZV9Qb29scy5Sb290X1N0b3JhZ2VfUG9vbCdDbGFzcyAoU3RvcmFnZV9Qb29sKTsKCmVu ZCBHbG9iYWxfSGVhcDsKLS0gIENvcHlyaWdodCAoQykgMTk5NC0xOTk4LDIwMDEgR3JhZHkgQm9v Y2gsIERhdmlkIFdlbGxlciBhbmQgU2ltb24gV3JpZ2h0LgotLSAgQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KLS0KLS0gICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQKLS0gICAgICBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgQWRhIENvbW11bml0eQotLSAgICAgIExpY2Vuc2Ugd2hpY2ggY29tZXMgd2l0aCB0aGlzIExp YnJhcnkuCi0tCi0tICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZQotLSAgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKLS0gICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0tICAgICAgUFVSUE9TRS4gU2VlIHRo ZSBBZGEgQ29tbXVuaXR5IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0gICAgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBBZGEgQ29tbXVuaXR5Ci0tICAgICAgTGlj ZW5zZSB3aXRoIHRoaXMgbGlicmFyeSwgaW4gdGhlIGZpbGUgbmFtZWQgIkFkYSBDb21tdW5pdHkK LS0gICAgICBMaWNlbnNlIiBvciAiQUNMIi4gSWYgbm90LCBjb250YWN0IHRoZSBhdXRob3Igb2Yg dGhpcyBsaWJyYXJ5Ci0tICAgICAgZm9yIGEgY29weS4KLS0KCi0tICAkUkNTZmlsZTogYmMtc3Vw cG9ydC5hZHMsdiAkCi0tICAkUmV2aXNpb246IDEuNSAkCi0tICAkRGF0ZTogMjAwMS8wOS8yMiAx NzozMDoyNiAkCi0tICAkQXV0aG9yOiBzaW1vbiAkCgpwYWNrYWdlIEJDLlN1cHBvcnQgaXMgZW5k IEJDLlN1cHBvcnQ7Ci0tICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBHcmFkeSBCb29jaCwgUGF0 IFJvZ2VycyBhbmQgU2ltb24gV3JpZ2h0LgotLSAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS0KLS0g ICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQKLS0gICAgICBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQWRhIENv bW11bml0eQotLSAgICAgIExpY2Vuc2Ugd2hpY2ggY29tZXMgd2l0aCB0aGlzIExpYnJhcnkuCi0t Ci0tICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZQotLSAgICAgIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQKLS0gICAgICB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0tICAgICAgUFVSUE9TRS4gU2VlIHRoZSBBZGEgQ29t bXVuaXR5IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0gICAgICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBBZGEgQ29tbXVuaXR5Ci0tICAgICAgTGljZW5zZSB3aXRo IHRoaXMgbGlicmFyeSwgaW4gdGhlIGZpbGUgbmFtZWQgIkFkYSBDb21tdW5pdHkKLS0gICAgICBM aWNlbnNlIiBvciAiQUNMIi4gSWYgbm90LCBjb250YWN0IHRoZSBhdXRob3Igb2YgdGhpcyBsaWJy YXJ5Ci0tICAgICAgZm9yIGEgY29weS4KLS0KCi0tICAkUkNTZmlsZTogYmMtc3VwcG9ydC1tYW5h Z2VkX3N0b3JhZ2UuYWRzLHYgJAotLSAgJFJldmlzaW9uOiAxLjEwICQKLS0gICREYXRlOiAyMDAx LzA5LzIzIDE1OjI1OjEwICQKLS0gICRBdXRob3I6IHNpbW9uICQKCndpdGggU3lzdGVtLlN0b3Jh Z2VfUG9vbHM7CndpdGggU3lzdGVtLlN0b3JhZ2VfRWxlbWVudHM7CgpwYWNrYWdlIEJDLlN1cHBv cnQuTWFuYWdlZF9TdG9yYWdlIGlzCgogICBwcmFnbWEgRWxhYm9yYXRlX0JvZHk7CgogICBwYWNr YWdlIFNTRSByZW5hbWVzIFN5c3RlbS5TdG9yYWdlX0VsZW1lbnRzOwogICBwYWNrYWdlIFNTUCBy ZW5hbWVzIFN5c3RlbS5TdG9yYWdlX1Bvb2xzOwoKICAgdHlwZSBQb29sIChDaHVua19TaXplIDog U1NFLlN0b3JhZ2VfQ291bnQpIGlzCiAgICAgbmV3IFNTUC5Sb290X1N0b3JhZ2VfUG9vbCB3aXRo IHByaXZhdGU7CiAgIC0tICBUaGlzIHBvb2wgY2FuIGFsbG9jYXRlIG9iamVjdHMgb2YgdHlwZSBZ b3VyX1R5cGUgdGhhdCBhcmUgbm8KICAgLS0gIGxhcmdlciB0aGFuIENodW5rX1NpemUgLSBQb29s X092ZXJoZWFkIChBbGlnbm1lbnQgPT4KICAgLS0gIFlvdXJfVHlwZSdBbGlnbm1lbnQpLiAgQkMu U3RvcmFnZV9FcnJvciB3aWxsIGJlIHJhaXNlZCBmb3IKICAgLS0gIGF0dGVtcHRzIHRvIGFsbG9j YXRlIGxhcmdlciBvYmplY3RzLgogICAtLSAgKFBvb2xfT3ZlcmhlYWQncyBUeXBlX092ZXJoZWFk IHBhcmFtZXRlciBpcyBmb3IgdXNlIHdoZW4KICAgLS0gIFlvdXJfVHlwZSBpcyB1bmNvbnN0cmFp bmVkLCBzbyB0aGF0IHNvbWUgYWRkaXRpb25hbCBzdG9yYWdlIGlzCiAgIC0tICByZXF1aXJlZCB0 byBob2xkIHRoZSBhY3R1YWwgb2JqZWN0J3MgY29uc3RyYWludHMpLgoKICAgcHJvY2VkdXJlIEFs bG9jYXRlIChUaGVfUG9vbCA6IGluIG91dCBQb29sOwogICAgICAgICAgICAgICAgICAgICAgIFN0 b3JhZ2VfQWRkcmVzcyA6IG91dCBTeXN0ZW0uQWRkcmVzczsKICAgICAgICAgICAgICAgICAgICAg ICBTaXplX0luX1N0b3JhZ2VfRWxlbWVudHMgOiBTU0UuU3RvcmFnZV9Db3VudDsKICAgICAgICAg ICAgICAgICAgICAgICBBbGlnbm1lbnQgOiBTU0UuU3RvcmFnZV9Db3VudCk7CgogICBwcm9jZWR1 cmUgRGVhbGxvY2F0ZSAoVGhlX1Bvb2wgOiBpbiBvdXQgUG9vbDsKICAgICAgICAgICAgICAgICAg ICAgICAgIFN0b3JhZ2VfQWRkcmVzcyA6IFN5c3RlbS5BZGRyZXNzOwogICAgICAgICAgICAgICAg ICAgICAgICAgU2l6ZV9Jbl9TdG9yYWdlX0VsZW1lbnRzIDogU1NFLlN0b3JhZ2VfQ291bnQ7CiAg ICAgICAgICAgICAgICAgICAgICAgICBBbGlnbm1lbnQgOiBTU0UuU3RvcmFnZV9Db3VudCk7Cgog ICBmdW5jdGlvbiBTdG9yYWdlX1NpemUgKFRoaXMgOiBQb29sKSByZXR1cm4gU1NFLlN0b3JhZ2Vf Q291bnQ7CgogICBmdW5jdGlvbiBQb29sX092ZXJoZWFkCiAgICAgKFR5cGVfT3ZlcmhlYWQgIDog U1NFLlN0b3JhZ2VfQ291bnQgOj0gMDsKICAgICAgQWxpZ25tZW50IDogU1NFLlN0b3JhZ2VfQ291 bnQpIHJldHVybiBTU0UuU3RvcmFnZV9Db3VudDsKCiAgIHByb2NlZHVyZSBQcmVhbGxvY2F0ZV9D aHVua3MgKFRoaXMgOiBpbiBvdXQgUG9vbDsgIENvdW50IDogUG9zaXRpdmUpOwoKICAgcHJvY2Vk dXJlIFJlY2xhaW1fVW51c2VkX0NodW5rcyAoVGhpcyA6IGluIG91dCBQb29sKTsKCiAgIHByb2Nl ZHVyZSBQdXJnZV9VbnVzZWRfQ2h1bmtzIChUaGlzIDogaW4gb3V0IFBvb2wpOwoKICAgZnVuY3Rp b24gVG90YWxfQ2h1bmtzIChUaGlzIDogUG9vbCkgcmV0dXJuIE5hdHVyYWw7CgogICBmdW5jdGlv biBEaXJ0eV9DaHVua3MgKFRoaXMgOiBQb29sKSByZXR1cm4gTmF0dXJhbDsKCiAgIGZ1bmN0aW9u IFVudXNlZF9DaHVua3MgKFRoaXMgOiBQb29sKSByZXR1cm4gTmF0dXJhbDsKCnByaXZhdGUKCiAg IHR5cGUgQ2h1bmsgKFBheWxvYWRfU2l6ZSA6IFNTRS5TdG9yYWdlX0NvdW50KTsKCiAgIHR5cGUg Q2h1bmtfUG9pbnRlciBpcyBhY2Nlc3MgYWxsIENodW5rOwoKICAgdHlwZSBDaHVuayAoUGF5bG9h ZF9TaXplIDogU1NFLlN0b3JhZ2VfQ291bnQpIGlzCiAgICAgIHJlY29yZAogICAgICAgICBQcmV2 aW91c19TaXplZF9DaHVuayA6IENodW5rX1BvaW50ZXI7CiAgICAgICAgIE5leHRfU2l6ZWRfQ2h1 bmsgOiBDaHVua19Qb2ludGVyOwogICAgICAgICBOZXh0X0NodW5rIDogQ2h1bmtfUG9pbnRlcjsK ICAgICAgICAgRWxlbWVudF9TaXplIDogU1NFLlN0b3JhZ2VfQ291bnQ7CiAgICAgICAgIEFsaWdu bWVudCA6IFNTRS5TdG9yYWdlX0NvdW50OwogICAgICAgICBOdW1iZXJfRWxlbWVudHMgOiBTU0Uu U3RvcmFnZV9Db3VudDsKICAgICAgICAgTmV4dF9FbGVtZW50IDogU3lzdGVtLkFkZHJlc3M7CiAg ICAgICAgIFBheWxvYWQgOiBTU0UuU3RvcmFnZV9BcnJheSAoMSAuLiBQYXlsb2FkX1NpemUpOwog ICAgICBlbmQgcmVjb3JkOwoKICAgdHlwZSBQb29sIChDaHVua19TaXplIDogU1NFLlN0b3JhZ2Vf Q291bnQpIGlzCiAgICAgbmV3IFNTUC5Sb290X1N0b3JhZ2VfUG9vbCB3aXRoCiAgICAgIHJlY29y ZAogICAgICAgICBIZWFkIDogQ2h1bmtfUG9pbnRlcjsKICAgICAgICAgVW51c2VkIDogQ2h1bmtf UG9pbnRlcjsKICAgICAgICAgQWxsb2NhdGVkX0NodW5rX1NpemUgOiBTU0UuU3RvcmFnZV9Db3Vu dDsKICAgICAgZW5kIHJlY29yZDsKCiAgIHByb2NlZHVyZSBJbml0aWFsaXplIChUaGlzIDogaW4g b3V0IFBvb2wpOwogICBwcm9jZWR1cmUgRmluYWxpemUgKFRoaXMgOiBpbiBvdXQgUG9vbCk7Cgog ICBmdW5jdGlvbiBBbGlnbmVkIChTaXplIDogU1NFLlN0b3JhZ2VfQ291bnQ7CiAgICAgICAgICAg ICAgICAgICAgIEFsaWdubWVudCA6IFNTRS5TdG9yYWdlX0NvdW50KSByZXR1cm4gU1NFLlN0b3Jh Z2VfT2Zmc2V0OwoKICAgZnVuY3Rpb24gTmV3X0FsbG9jYXRpb24gKFNpemUgOiBTU0UuU3RvcmFn ZV9Db3VudCkgcmV0dXJuIENodW5rX1BvaW50ZXI7CgogICBmdW5jdGlvbiBXaXRoaW5fUmFuZ2Ug KFRhcmdldCA6IFN5c3RlbS5BZGRyZXNzOwogICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2Ug OiBDaHVua19Qb2ludGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCA6IFNTRS5T dG9yYWdlX0NvdW50KSByZXR1cm4gQm9vbGVhbjsKICAgcHJhZ21hIElubGluZSAoV2l0aGluX1Jh bmdlKTsKCiAgIHByb2NlZHVyZSBHZXRfQ2h1bmsgKFJlc3VsdCA6IG91dCBDaHVua19Qb2ludGVy OwogICAgICAgICAgICAgICAgICAgICAgICBGcm9tIDogaW4gb3V0IFBvb2w7CiAgICAgICAgICAg ICAgICAgICAgICAgIFJlcXVlc3RlZF9FbGVtZW50X1NpemUgOiBTU0UuU3RvcmFnZV9Db3VudDsK ICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdGVkX0FsaWdubWVudCA6IFNTRS5TdG9yYWdl X0NvdW50KTsKCgogICB1c2UgdHlwZSBTU0UuU3RvcmFnZV9PZmZzZXQ7CgogICB0eXBlIEVtcHR5 X0NodW5rIGlzIG5ldyBDaHVuayAoUGF5bG9hZF9TaXplID0+IDApOwogICBDaHVua19PdmVyaGVh ZCA6IGNvbnN0YW50IFNTRS5TdG9yYWdlX0NvdW50CiAgICAgOj0gKEVtcHR5X0NodW5rJ1NpemUg KyBTeXN0ZW0uU3RvcmFnZV9Vbml0IC0gMSkgLyBTeXN0ZW0uU3RvcmFnZV9Vbml0OwoKZW5kIEJD LlN1cHBvcnQuTWFuYWdlZF9TdG9yYWdlOwp3aXRoIEFkYS5TdHJpbmdzIDsgdXNlIEFkYS5TdHJp bmdzIDsKCnBhY2thZ2UgQWRhbGliLlN0cmluZ3MgaXMKCmZ1bmN0aW9uIFRvX1N0cmluZyAocyA6 ICAgICAgICBUX1N0cmluZ19CdWZmZXIpIHJldHVybiBTdHJpbmcKICAgIHJlbmFtZXMgQWRhLlN0 cmluZ3MuVW5ib3VuZGVkLlRvX1N0cmluZyA7CgpmdW5jdGlvbiBUb19TdHJpbmdfQnVmZmVyIChz IDogICAgICAgIFN0cmluZykgcmV0dXJuIFRfU3RyaW5nX0J1ZmZlcgogICAgcmVuYW1lcyBBZGEu U3RyaW5ncy5VbmJvdW5kZWQuVG9fVW5ib3VuZGVkX1N0cmluZyA7CgpmdW5jdGlvbiBUb19TdHJp bmdfQnVmZmVyIChMZW5ndGggOiBpbiBOYXR1cmFsKSByZXR1cm4gVF9TdHJpbmdfQnVmZmVyCiAg ICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5Ub19VbmJvdW5kZWRfU3RyaW5nIDsKCmZ1 bmN0aW9uIExlbmd0aCAocyA6ICAgICAgICBUX1N0cmluZ19CdWZmZXIpIHJldHVybiBOYXR1cmFs CiAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5MZW5ndGggOwoKCiAgIHByb2NlZHVy ZSBBcHBlbmQKICAgICAoU291cmNlICAgOiBpbiBvdXQgVF9TdHJpbmdfQnVmZmVyOwogICAgICBO ZXdfSXRlbSA6IGluIFRfU3RyaW5nX0J1ZmZlcikKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5V bmJvdW5kZWQuQXBwZW5kOwoKICAgcHJvY2VkdXJlIEFwcGVuZAogICAgIChTb3VyY2UgICA6IGlu IG91dCBUX1N0cmluZ19CdWZmZXI7CiAgICAgIE5ld19JdGVtIDogaW4gU3RyaW5nKQogICAgICBy ZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5BcHBlbmQ7CgogICBwcm9jZWR1cmUgQXBwZW5k CiAgICAgKFNvdXJjZSAgIDogaW4gb3V0IFRfU3RyaW5nX0J1ZmZlcjsKICAgICAgTmV3X0l0ZW0g OiBpbiBDaGFyYWN0ZXIpCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLkFwcGVu ZDsKCiAgIGZ1bmN0aW9uICImIiAoTGVmdCwgUmlnaHQgOiBUX1N0cmluZ19CdWZmZXIpIHJldHVy biBUX1N0cmluZ19CdWZmZXIKICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuIiYiOwoK ICAgZnVuY3Rpb24gIiYiCiAgICAgKExlZnQgIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBS aWdodCA6IGluIFN0cmluZykKICAgICAgcmV0dXJuICBUX1N0cmluZ19CdWZmZXIKICAgICAgcmVu YW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuIiYiOwoKICAgZnVuY3Rpb24gIiYiCiAgICAgKExl ZnQgIDogaW4gU3RyaW5nOwogICAgICBSaWdodCA6IGluIFRfU3RyaW5nX0J1ZmZlcikKICAgICAg cmV0dXJuICBUX1N0cmluZ19CdWZmZXIKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5k ZWQuIiYiOwoKICAgZnVuY3Rpb24gIiYiCiAgICAgKExlZnQgIDogaW4gVF9TdHJpbmdfQnVmZmVy OwogICAgICBSaWdodCA6IGluIENoYXJhY3RlcikKICAgICAgcmV0dXJuICBUX1N0cmluZ19CdWZm ZXIKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuIiYiOwoKICAgZnVuY3Rpb24g IiYiCiAgICAgKExlZnQgIDogaW4gQ2hhcmFjdGVyOwogICAgICBSaWdodCA6IGluIFRfU3RyaW5n X0J1ZmZlcikKICAgICAgcmV0dXJuICBUX1N0cmluZ19CdWZmZXIKICAgICAgcmVuYW1lcyBBZGEu U3RyaW5ncy5VbmJvdW5kZWQuIiYiOwoKICAgZnVuY3Rpb24gRWxlbWVudAogICAgIChTb3VyY2Ug OiBpbiBUX1N0cmluZ19CdWZmZXI7CiAgICAgIEluZGV4ICA6IGluIFBvc2l0aXZlKQogICAgICBy ZXR1cm4gICBDaGFyYWN0ZXIKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuRWxl bWVudDsKCiAgIHByb2NlZHVyZSBSZXBsYWNlX0VsZW1lbnQKICAgICAoU291cmNlIDogaW4gb3V0 IFRfU3RyaW5nX0J1ZmZlcjsKICAgICAgSW5kZXggIDogaW4gUG9zaXRpdmU7CiAgICAgIEJ5ICAg ICA6IENoYXJhY3RlcikKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuUmVwbGFj ZV9FbGVtZW50OwoKICAgZnVuY3Rpb24gU2xpY2UKICAgICAoU291cmNlIDogaW4gVF9TdHJpbmdf QnVmZmVyOwogICAgICBMb3cgICAgOiBpbiBQb3NpdGl2ZTsKICAgICAgSGlnaCAgIDogaW4gTmF0 dXJhbCkKICAgICAgcmV0dXJuICAgU3RyaW5nCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5i b3VuZGVkLlNsaWNlOwoKICAgZnVuY3Rpb24gIj0iIChMZWZ0LCBSaWdodCA6IGluIFRfU3RyaW5n X0J1ZmZlcikgcmV0dXJuIEJvb2xlYW4KICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5k ZWQuIj0iOwoKICAgZnVuY3Rpb24gIj0iCiAgICAgKExlZnQgIDogaW4gVF9TdHJpbmdfQnVmZmVy OwogICAgICBSaWdodCA6IGluIFN0cmluZykKICAgICAgcmV0dXJuICBCb29sZWFuCiAgICAgIHJl bmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLiI9IjsKCiAgIGZ1bmN0aW9uICI9IgogICAgIChM ZWZ0ICA6IGluIFN0cmluZzsKICAgICAgUmlnaHQgOiBpbiBUX1N0cmluZ19CdWZmZXIpCiAgICAg IHJldHVybiAgQm9vbGVhbgogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC4iPSI7 CgogICBmdW5jdGlvbiAiPCIgKExlZnQsIFJpZ2h0IDogaW4gVF9TdHJpbmdfQnVmZmVyKSByZXR1 cm4gQm9vbGVhbgogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC4iPCI7CgogICBm dW5jdGlvbiAiPCIKICAgICAoTGVmdCAgOiBpbiBUX1N0cmluZ19CdWZmZXI7CiAgICAgIFJpZ2h0 IDogaW4gU3RyaW5nKQogICAgICByZXR1cm4gIEJvb2xlYW4KICAgICAgcmVuYW1lcyBBZGEuU3Ry aW5ncy5VbmJvdW5kZWQuIjwiOwoKICAgZnVuY3Rpb24gIjwiCiAgICAgKExlZnQgIDogaW4gU3Ry aW5nOwogICAgICBSaWdodCA6IGluIFRfU3RyaW5nX0J1ZmZlcikKICAgICAgcmV0dXJuICBCb29s ZWFuCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLiI8IjsKCiAgIGZ1bmN0aW9u ICI8PSIgKExlZnQsIFJpZ2h0IDogaW4gVF9TdHJpbmdfQnVmZmVyKSByZXR1cm4gQm9vbGVhbgog ICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC4iPD0iOwoKICAgZnVuY3Rpb24gIjw9 IgogICAgIChMZWZ0ICA6IGluIFRfU3RyaW5nX0J1ZmZlcjsKICAgICAgUmlnaHQgOiBpbiBTdHJp bmcpCiAgICAgIHJldHVybiAgQm9vbGVhbgogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91 bmRlZC4iPD0iOwoKICAgZnVuY3Rpb24gIjw9IgogICAgIChMZWZ0ICA6IGluIFN0cmluZzsKICAg ICAgUmlnaHQgOiBpbiBUX1N0cmluZ19CdWZmZXIpCiAgICAgIHJldHVybiAgQm9vbGVhbgogICAg ICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC4iPD0iOwoKICAgZnVuY3Rpb24gIj4iIChM ZWZ0LCBSaWdodCA6IGluIFRfU3RyaW5nX0J1ZmZlcikgcmV0dXJuIEJvb2xlYW4KICAgcmVuYW1l cyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuIj4iOwoKICAgZnVuY3Rpb24gIj4iCiAgICAgKExlZnQg IDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBSaWdodCA6IGluIFN0cmluZykKICAgICAgcmV0 dXJuICBCb29sZWFuCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLiI+IjsKCiAg IGZ1bmN0aW9uICI+IgogICAgIChMZWZ0ICA6IGluIFN0cmluZzsKICAgICAgUmlnaHQgOiBpbiBU X1N0cmluZ19CdWZmZXIpCiAgICAgIHJldHVybiAgQm9vbGVhbgogICAgICByZW5hbWVzIEFkYS5T dHJpbmdzLlVuYm91bmRlZC4iPiI7CgogICBmdW5jdGlvbiAiPj0iIChMZWZ0LCBSaWdodCA6IGlu IFRfU3RyaW5nX0J1ZmZlcikgcmV0dXJuIEJvb2xlYW4KICAgICAgcmVuYW1lcyBBZGEuU3RyaW5n cy5VbmJvdW5kZWQuIj49IjsKCiAgIGZ1bmN0aW9uICI+PSIKICAgICAoTGVmdCAgOiBpbiBUX1N0 cmluZ19CdWZmZXI7CiAgICAgIFJpZ2h0IDogaW4gU3RyaW5nKQogICAgICByZXR1cm4gIEJvb2xl YW4KICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuIj49IjsKCiAgIGZ1bmN0aW9u ICI+PSIKICAgICAoTGVmdCAgOiBpbiBTdHJpbmc7CiAgICAgIFJpZ2h0IDogaW4gVF9TdHJpbmdf QnVmZmVyKQogICAgICByZXR1cm4gIEJvb2xlYW4KICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5V bmJvdW5kZWQuIj49IjsKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTZWFyY2gg U3VicHJvZ3JhbXMgLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBmdW5jdGlvbiBJ bmRleAogICAgIChTb3VyY2UgICA6IGluIFRfU3RyaW5nX0J1ZmZlcjsKICAgICAgUGF0dGVybiAg OiBpbiBTdHJpbmc7CiAgICAgIEdvaW5nICAgIDogaW4gRGlyZWN0aW9uIDo9IEZvcndhcmQ7CiAg ICAgIE1hcHBpbmcgIDogaW4gTWFwcy5DaGFyYWN0ZXJfTWFwcGluZyA6PSBNYXBzLklkZW50aXR5 KQogICAgICByZXR1cm4gICAgIE5hdHVyYWwKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJv dW5kZWQuSW5kZXg7CgogICBmdW5jdGlvbiBJbmRleAogICAgIChTb3VyY2UgICA6IGluIFRfU3Ry aW5nX0J1ZmZlcjsKICAgICAgUGF0dGVybiAgOiBpbiBTdHJpbmc7CiAgICAgIEdvaW5nICAgIDog aW4gRGlyZWN0aW9uIDo9IEZvcndhcmQ7CiAgICAgIE1hcHBpbmcgIDogaW4gTWFwcy5DaGFyYWN0 ZXJfTWFwcGluZ19GdW5jdGlvbikKICAgICAgcmV0dXJuICAgICBOYXR1cmFsCiAgICAgIHJlbmFt ZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLkluZGV4OwoKICAgZnVuY3Rpb24gSW5kZXgKICAgICAo U291cmNlIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBTZXQgICAgOiBpbiBNYXBzLkNoYXJh Y3Rlcl9TZXQ7CiAgICAgIFRlc3QgICA6IGluIE1lbWJlcnNoaXAgOj0gSW5zaWRlOwogICAgICBH b2luZyAgOiBpbiBEaXJlY3Rpb24gIDo9IEZvcndhcmQpCiAgICAgIHJldHVybiAgIE5hdHVyYWwK ICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuSW5kZXg7CgogICBmdW5jdGlvbiBJ bmRleF9Ob25fQmxhbmsKICAgICAoU291cmNlIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBH b2luZyAgOiBpbiBEaXJlY3Rpb24gOj0gRm9yd2FyZCkKICAgICAgcmV0dXJuICAgTmF0dXJhbAog ICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5JbmRleF9Ob25fQmxhbms7CgogICBm dW5jdGlvbiBDb3VudAogICAgIChTb3VyY2UgIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBQ YXR0ZXJuIDogaW4gU3RyaW5nOwogICAgICBNYXBwaW5nIDogaW4gTWFwcy5DaGFyYWN0ZXJfTWFw cGluZyA6PSBNYXBzLklkZW50aXR5KQogICAgICByZXR1cm4gICAgTmF0dXJhbAogICAgICByZW5h bWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5Db3VudDsKCiAgIGZ1bmN0aW9uIENvdW50CiAgICAg KFNvdXJjZSAgIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBQYXR0ZXJuICA6IGluIFN0cmlu ZzsKICAgICAgTWFwcGluZyAgOiBpbiBNYXBzLkNoYXJhY3Rlcl9NYXBwaW5nX0Z1bmN0aW9uKQog ICAgICByZXR1cm4gICAgIE5hdHVyYWwKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5k ZWQuQ291bnQ7CgogICBmdW5jdGlvbiBDb3VudAogICAgIChTb3VyY2UgOiBpbiBUX1N0cmluZ19C dWZmZXI7CiAgICAgIFNldCAgICA6IGluIE1hcHMuQ2hhcmFjdGVyX1NldCkKICAgICAgcmV0dXJu ICAgTmF0dXJhbAogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5Db3VudDsKCiAg IHByb2NlZHVyZSBGaW5kX1Rva2VuCiAgICAgKFNvdXJjZSA6IGluIFRfU3RyaW5nX0J1ZmZlcjsK ICAgICAgU2V0ICAgIDogaW4gTWFwcy5DaGFyYWN0ZXJfU2V0OwogICAgICBUZXN0ICAgOiBpbiBN ZW1iZXJzaGlwOwogICAgICBGaXJzdCAgOiBvdXQgUG9zaXRpdmU7CiAgICAgIExhc3QgICA6IG91 dCBOYXR1cmFsKQogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5GaW5kX1Rva2Vu OwoKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIFN0cmluZyBU cmFuc2xhdGlvbiBTdWJwcm9ncmFtcyAtLQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KCiAgIGZ1bmN0aW9uIFRyYW5zbGF0ZQogICAgIChTb3VyY2UgIDogaW4gVF9TdHJp bmdfQnVmZmVyOwogICAgICBNYXBwaW5nIDogaW4gTWFwcy5DaGFyYWN0ZXJfTWFwcGluZykKICAg ICAgcmV0dXJuICAgIFRfU3RyaW5nX0J1ZmZlcgogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVu Ym91bmRlZC5UcmFuc2xhdGU7CgogICBwcm9jZWR1cmUgVHJhbnNsYXRlCiAgICAgKFNvdXJjZSAg OiBpbiBvdXQgVF9TdHJpbmdfQnVmZmVyOwogICAgICBNYXBwaW5nIDogTWFwcy5DaGFyYWN0ZXJf TWFwcGluZykKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuVHJhbnNsYXRlOwoK ICAgZnVuY3Rpb24gVHJhbnNsYXRlCiAgICAgKFNvdXJjZSAgOiBpbiBUX1N0cmluZ19CdWZmZXI7 CiAgICAgIE1hcHBpbmcgOiBpbiBNYXBzLkNoYXJhY3Rlcl9NYXBwaW5nX0Z1bmN0aW9uKQogICAg ICByZXR1cm4gICAgVF9TdHJpbmdfQnVmZmVyCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5i b3VuZGVkLlRyYW5zbGF0ZTsKCiAgIHByb2NlZHVyZSBUcmFuc2xhdGUKICAgICAoU291cmNlICA6 IGluIG91dCBUX1N0cmluZ19CdWZmZXI7CiAgICAgIE1hcHBpbmcgOiBpbiBNYXBzLkNoYXJhY3Rl cl9NYXBwaW5nX0Z1bmN0aW9uKQogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5U cmFuc2xhdGU7CgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAg LS0gU3RyaW5nIFRyYW5zZm9ybWF0aW9uIFN1YnByb2dyYW1zIC0tCiAgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgZnVuY3Rpb24gUmVwbGFjZV9TbGljZQogICAg IChTb3VyY2UgOiBpbiBUX1N0cmluZ19CdWZmZXI7CiAgICAgIExvdyAgICA6IGluIFBvc2l0aXZl OwogICAgICBIaWdoICAgOiBpbiBOYXR1cmFsOwogICAgICBCeSAgICAgOiBpbiBTdHJpbmcpCiAg ICAgIHJldHVybiAgIFRfU3RyaW5nX0J1ZmZlcgogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVu Ym91bmRlZC5SZXBsYWNlX1NsaWNlOwoKICAgcHJvY2VkdXJlIFJlcGxhY2VfU2xpY2UKICAgICAo U291cmNlICAgOiBpbiBvdXQgVF9TdHJpbmdfQnVmZmVyOwogICAgICBMb3cgICAgICA6IGluIFBv c2l0aXZlOwogICAgICBIaWdoICAgICA6IGluIE5hdHVyYWw7CiAgICAgIEJ5ICAgICAgIDogaW4g U3RyaW5nKQogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5SZXBsYWNlX1NsaWNl OwoKICAgZnVuY3Rpb24gSW5zZXJ0CiAgICAgKFNvdXJjZSAgIDogaW4gVF9TdHJpbmdfQnVmZmVy OwogICAgICBCZWZvcmUgICA6IGluIFBvc2l0aXZlOwogICAgICBOZXdfSXRlbSA6IGluIFN0cmlu ZykKICAgICAgcmV0dXJuICAgICBUX1N0cmluZ19CdWZmZXIKICAgICAgcmVuYW1lcyBBZGEuU3Ry aW5ncy5VbmJvdW5kZWQuSW5zZXJ0OwoKICAgcHJvY2VkdXJlIEluc2VydAogICAgIChTb3VyY2Ug ICA6IGluIG91dCBUX1N0cmluZ19CdWZmZXI7CiAgICAgIEJlZm9yZSAgIDogaW4gUG9zaXRpdmU7 CiAgICAgIE5ld19JdGVtIDogaW4gU3RyaW5nKQogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVu Ym91bmRlZC5JbnNlcnQ7CgogICBmdW5jdGlvbiBPdmVyd3JpdGUKICAgICAoU291cmNlICAgOiBp biBUX1N0cmluZ19CdWZmZXI7CiAgICAgIFBvc2l0aW9uIDogaW4gUG9zaXRpdmU7CiAgICAgIE5l d19JdGVtIDogaW4gU3RyaW5nKQogICAgICByZXR1cm4gICAgIFRfU3RyaW5nX0J1ZmZlcgogICAg ICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5PdmVyd3JpdGU7CgogICBwcm9jZWR1cmUg T3ZlcndyaXRlCiAgICAgKFNvdXJjZSAgICA6IGluIG91dCBUX1N0cmluZ19CdWZmZXI7CiAgICAg IFBvc2l0aW9uICA6IGluIFBvc2l0aXZlOwogICAgICBOZXdfSXRlbSAgOiBpbiBTdHJpbmcpCiAg ICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLk92ZXJ3cml0ZTsKCiAgIGZ1bmN0aW9u IERlbGV0ZQogICAgIChTb3VyY2UgIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBGcm9tICAg IDogaW4gUG9zaXRpdmU7CiAgICAgIFRocm91Z2ggOiBpbiBOYXR1cmFsKQogICAgICByZXR1cm4g ICAgVF9TdHJpbmdfQnVmZmVyCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLkRl bGV0ZTsKCiAgIHByb2NlZHVyZSBEZWxldGUKICAgICAoU291cmNlICA6IGluIG91dCBUX1N0cmlu Z19CdWZmZXI7CiAgICAgIEZyb20gICAgOiBpbiBQb3NpdGl2ZTsKICAgICAgVGhyb3VnaCA6IGlu IE5hdHVyYWwpCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLkRlbGV0ZTsKCiAg IGZ1bmN0aW9uIFRyaW0KICAgICAoU291cmNlIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBT aWRlICAgOiBpbiBUcmltX0VuZCkKICAgICAgcmV0dXJuICAgVF9TdHJpbmdfQnVmZmVyCiAgICAg IHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLlRyaW07CgogICBwcm9jZWR1cmUgVHJpbQog ICAgIChTb3VyY2UgOiBpbiBvdXQgVF9TdHJpbmdfQnVmZmVyOwogICAgICBTaWRlICAgOiBpbiBU cmltX0VuZCkKICAgICAgcmVuYW1lcyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuVHJpbTsKCiAgIGZ1 bmN0aW9uIFRyaW0KICAgICAoU291cmNlIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBMZWZ0 ICAgOiBpbiBNYXBzLkNoYXJhY3Rlcl9TZXQ7CiAgICAgIFJpZ2h0ICA6IGluIE1hcHMuQ2hhcmFj dGVyX1NldCkKICAgICAgcmV0dXJuICAgVF9TdHJpbmdfQnVmZmVyCiAgICAgIHJlbmFtZXMgQWRh LlN0cmluZ3MuVW5ib3VuZGVkLlRyaW07CgogICBwcm9jZWR1cmUgVHJpbQogICAgIChTb3VyY2Ug OiBpbiBvdXQgVF9TdHJpbmdfQnVmZmVyOwogICAgICBMZWZ0ICAgOiBpbiBNYXBzLkNoYXJhY3Rl cl9TZXQ7CiAgICAgIFJpZ2h0ICA6IGluIE1hcHMuQ2hhcmFjdGVyX1NldCkKICAgICAgcmVuYW1l cyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuVHJpbTsKCiAgIGZ1bmN0aW9uIEhlYWQKICAgICAoU291 cmNlIDogaW4gVF9TdHJpbmdfQnVmZmVyOwogICAgICBDb3VudCAgOiBpbiBOYXR1cmFsOwogICAg ICBQYWQgICAgOiBpbiBDaGFyYWN0ZXIgOj0gU3BhY2UpCiAgICAgIHJldHVybiAgIFRfU3RyaW5n X0J1ZmZlcgogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5IZWFkOwoKICAgcHJv Y2VkdXJlIEhlYWQKICAgICAoU291cmNlIDogaW4gb3V0IFRfU3RyaW5nX0J1ZmZlcjsKICAgICAg Q291bnQgIDogaW4gTmF0dXJhbDsKICAgICAgUGFkICAgIDogaW4gQ2hhcmFjdGVyIDo9IFNwYWNl KQogICAgICByZW5hbWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC5IZWFkOwoKICAgZnVuY3Rpb24g VGFpbAogICAgIChTb3VyY2UgOiBpbiBUX1N0cmluZ19CdWZmZXI7CiAgICAgIENvdW50ICA6IGlu IE5hdHVyYWw7CiAgICAgIFBhZCAgICA6IGluIENoYXJhY3RlciA6PSBTcGFjZSkKICAgICAgcmV0 dXJuICAgVF9TdHJpbmdfQnVmZmVyCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVk LlRhaWw7CgogICBwcm9jZWR1cmUgVGFpbAogICAgIChTb3VyY2UgOiBpbiBvdXQgVF9TdHJpbmdf QnVmZmVyOwogICAgICBDb3VudCAgOiBpbiBOYXR1cmFsOwogICAgICBQYWQgICAgOiBpbiBDaGFy YWN0ZXIgOj0gU3BhY2UpCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLlRhaWw7 CgogICBmdW5jdGlvbiAiKiIKICAgICAoTGVmdCAgOiBpbiBOYXR1cmFsOwogICAgICBSaWdodCA6 IGluIENoYXJhY3RlcikKICAgICAgcmV0dXJuICBUX1N0cmluZ19CdWZmZXIKICAgICAgcmVuYW1l cyBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuIioiOwoKICAgZnVuY3Rpb24gIioiCiAgICAgKExlZnQg IDogaW4gTmF0dXJhbDsKICAgICAgUmlnaHQgOiBpbiBTdHJpbmcpCiAgICAgIHJldHVybiAgVF9T dHJpbmdfQnVmZmVyCiAgICAgIHJlbmFtZXMgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLiIqIjsKCiAg IGZ1bmN0aW9uICIqIgogICAgIChMZWZ0ICA6IGluIE5hdHVyYWw7CiAgICAgIFJpZ2h0IDogaW4g VF9TdHJpbmdfQnVmZmVyKQogICAgICByZXR1cm4gIFRfU3RyaW5nX0J1ZmZlcgogICAgICByZW5h bWVzIEFkYS5TdHJpbmdzLlVuYm91bmRlZC4iKiI7CgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgIC0tIFN0cmluZyBjb252ZXJzaW9ucwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgpmdW5jdGlvbiAgVUMgKCBjIDogICAgICAgIENoYXJhY3RlcikgcmV0dXJuIFRfU3RyaW5nX0J1 ZmZlciA7CmZ1bmN0aW9uICBVQyAoIHMgOiAgICAgICAgU3RyaW5nKSByZXR1cm4gVF9TdHJpbmdf QnVmZmVyIDsKZnVuY3Rpb24gIFVDICggcyA6ICAgICAgICBUX1N0cmluZ19CdWZmZXIpIHJldHVy biBUX1N0cmluZ19CdWZmZXIgOwoKcHJvY2VkdXJlIFVDICggcyA6IGluIG91dCBUX1N0cmluZ19C dWZmZXIgKSA7CnByb2NlZHVyZSBVQyAoIHMgOiBpbiAgICAgU3RyaW5nOwogICAgICAgICAgICAg ICByIDogICAgb3V0IFRfU3RyaW5nX0J1ZmZlciApIDsKcHJvY2VkdXJlIFVDICggcyA6IGluICAg ICBUX1N0cmluZ19CdWZmZXI7CiAgICAgICAgICAgICAgIHIgOiAgICBvdXQgVF9TdHJpbmdfQnVm ZmVyICkgOwoKCmZ1bmN0aW9uICBVQ19GaXJzdCAoIHMgOiAgICAgICAgU3RyaW5nKSByZXR1cm4g VF9TdHJpbmdfQnVmZmVyIDsKZnVuY3Rpb24gIFVDX0ZpcnN0ICggcyA6ICAgICAgICBUX1N0cmlu Z19CdWZmZXIpIHJldHVybiBUX1N0cmluZ19CdWZmZXIgOwoKcHJvY2VkdXJlIFVDX0ZpcnN0ICgg cyA6IGluIG91dCBUX1N0cmluZ19CdWZmZXIgKSA7CnByb2NlZHVyZSBVQ19GaXJzdCAoIHMgOiBp biAgICAgU3RyaW5nOwogICAgICAgICAgICAgICAgICAgICByIDogICAgb3V0IFRfU3RyaW5nX0J1 ZmZlciApIDsKcHJvY2VkdXJlIFVDX0ZpcnN0ICggcyA6IGluICAgICBUX1N0cmluZ19CdWZmZXI7 CiAgICAgICAgICAgICAgICAgICAgIHIgOiAgICBvdXQgVF9TdHJpbmdfQnVmZmVyICkgOwoKZnVu Y3Rpb24gIExDICggYyA6ICAgICAgICBDaGFyYWN0ZXIpIHJldHVybiBUX1N0cmluZ19CdWZmZXIg OwpmdW5jdGlvbiAgTEMgKCBzIDogICAgICAgIFN0cmluZykgcmV0dXJuIFRfU3RyaW5nX0J1ZmZl ciA7CmZ1bmN0aW9uICBMQyAoIHMgOiAgICAgICAgVF9TdHJpbmdfQnVmZmVyKSByZXR1cm4gVF9T dHJpbmdfQnVmZmVyIDsKCnByb2NlZHVyZSBMQyAoIHMgOiBpbiBvdXQgVF9TdHJpbmdfQnVmZmVy ICkgOwpwcm9jZWR1cmUgTEMgKCBzIDogaW4gICAgIFN0cmluZzsKICAgICAgICAgICAgICAgciA6 ICAgIG91dCBUX1N0cmluZ19CdWZmZXIgKSA7CnByb2NlZHVyZSBMQyAoIHMgOiBpbiAgICAgVF9T dHJpbmdfQnVmZmVyOwogICAgICAgICAgICAgICByIDogICAgb3V0IFRfU3RyaW5nX0J1ZmZlciAp IDsKCgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIFN0cmluZyBJbnB1dC1PdXRw dXQgLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgLS1wcm9jZWR1cmUgR2V0IChG aWxlIDogaW4gQWRhLlRleHRfSU8uRmlsZV9UeXBlOyAKICAgLS0gICAgICAgICAgICAgICBJdGVt IDogb3V0IFRfU3RyaW5nX0J1ZmZlcik7CiAgIC0tcHJvY2VkdXJlIEdldCAoSXRlbSA6IG91dCBU X1N0cmluZ19CdWZmZXIpOwogICBwcm9jZWR1cmUgUHV0IChGaWxlIDogaW4gQWRhLlRleHRfSU8u RmlsZV9UeXBlOyAKICAgICAgICAgICAgICAgICAgSXRlbSA6IGluIFRfU3RyaW5nX0J1ZmZlcik7 CiAgIHByb2NlZHVyZSBQdXQgKEl0ZW0gOiBpbiBUX1N0cmluZ19CdWZmZXIpOwoKICAgLS1wcm9j ZWR1cmUgR2V0X0xpbmUKICAgLS0gIChGaWxlIDogaW4gQWRhLlRleHRfSU8uRmlsZV9UeXBlOwog ICAtLSAgIEl0ZW0gOiBvdXQgVF9TdHJpbmdfQnVmZmVyKTsKCiAgIC0tcHJvY2VkdXJlIEdldF9M aW5lCiAgIC0tICAoSXRlbSA6IG91dCBUX1N0cmluZ19CdWZmZXIpOwoKICAgcHJvY2VkdXJlIFB1 dF9MaW5lCiAgICAgKEZpbGUgOiBpbiBBZGEuVGV4dF9JTy5GaWxlX1R5cGU7CiAgICAgIEl0ZW0g OiBpbiBUX1N0cmluZ19CdWZmZXIpOwoKICAgcHJvY2VkdXJlIFB1dF9MaW5lCiAgICAgKEl0ZW0g OiBpbiBUX1N0cmluZ19CdWZmZXIpOwoKCmVuZCBBZGFsaWIuU3RyaW5ncyA7CndpdGggQWRhLkNo YXJhY3RlcnMuTGF0aW5fMSA7CgpwYWNrYWdlIEFkYWxpYi5TcHJpbnRmIGlzCgogICB1c2UgQWRh LkV4Y2VwdGlvbnMgOwoKICAgdHlwZSBBbGlnbm1lbnQgaXMgCiAgICAgICAgIChMZWZ0LCAgCiAg ICAgICAgICBSaWdodCwgCiAgICAgICAgICBDZW50ZXIpOyAKICAgdHlwZSBNYXBwaW5nIGlzIAog ICAgICAgICAoTm9uZSwgICAgIAogICAgICAgICAgVXBwZXIsICAgIAogICAgICAgICAgTG93ZXIs ICAgIAogICAgICAgICAgUHJpbnRhYmxlKTsgCiAgIHR5cGUgQmFzZXR5cGUgaXMgCiAgICAgICAg IChCaW5hcnksICAgICAgICAKICAgICAgICAgIE9jdGFsLCAgICAgICAgIAogICAgICAgICAgRGVj aW1hbCwgICAgICAgCiAgICAgICAgICBIZXhhZGVjaW1hbCwgICAKICAgICAgICAgIERvdHRlZF9E ZWNpbWFsKTsgCiAgIHR5cGUgRW5jb2RpbmcgaXMgCiAgICAgICAgIChQbGFpbiwgICAKICAgICAg ICAgIERlY2ltYWwsIAogICAgICAgICAgVGV4dHVhbCk7IAogICB0eXBlIEZsb2F0X1JlcCBpcyAK ICAgICAgICAgKFN0YW5kYXJkLCAgIAogICAgICAgICAgU2NpZW50aWZpYywgCiAgICAgICAgICBF bmdpbmVlcmluZyk7IAoKICAgdHlwZSBOYmFzZV9BcnJheSBpcyBhcnJheSAoQmFzZXR5cGUpIG9m IFBvc2l0aXZlOyAKICAgdHlwZSBOZGlnaXRfQXJyYXkgaXMgYXJyYXkgKE5hdHVyYWwgcmFuZ2Ug MCAuLiAxNSkgb2YgQ2hhcmFjdGVyOyAKCiAgIE5iYXNlICA6IE5iYXNlX0FycmF5ICA6PSAoQmlu YXJ5ID0+IDIsIE9jdGFsID0+IDgsIEhleGFkZWNpbWFsID0+IDE2LAogICAgIG90aGVycyA9PiAx MCk7ICAKICAgTmRpZ2l0IDogTmRpZ2l0X0FycmF5IDo9ICgwID0+ICcwJywgMSA9PiAnMScsIDIg PT4gJzInLCAzID0+ICczJywgNCA9PgogICAgICc0JywgNSA9PiAnNScsIDYgPT4gJzYnLCA3ID0+ ICc3JywgOCA9PiAnOCcsIDkgPT4gJzknLCAxMCA9PiAnQScsIDExCiAgICAgPT4gJ0InLCAxMiA9 PiAnQycsIDEzID0+ICdEJywgMTQgPT4gJ0UnLCAxNSA9PiAnRicpOyAgCiAgIGZ1bmN0aW9uIEZv cm1hdCAoCiAgICAgICAgIEMgICAgIDogQ2hhcmFjdGVyOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICBXaWR0aCA6IEludGVnZXIgICAgICA6PSAtIDE7ICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgQWxpZ24gOiBBbGlnbm1lbnQgICAgOj0gQWxp Z25tZW50JyhMZWZ0KTsgICAgICAgICAgICAgICAKICAgICAgICAgUGFkICAgOiBDaGFyYWN0ZXIg ICAgOj0gQWRhLkNoYXJhY3RlcnMuTGF0aW5fMS5TcGFjZTsgCiAgICAgICAgIE1hcCAgIDogTWFw cGluZyAgICAgIDo9IE1hcHBpbmcnKE5vbmUpICAgICAgICAgICAgICAgICAgKSAKICAgICByZXR1 cm4gU3RyaW5nOyAKCiAgIGZ1bmN0aW9uIEZvcm1hdCAoCiAgICAgICAgIFMgICAgIDogU3RyaW5n OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICBXaWR0aCA6 IEludGVnZXIgICAgICA6PSAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg QWxpZ24gOiBBbGlnbm1lbnQgICAgOj0gQWxpZ25tZW50JyhMZWZ0KTsgICAgICAgICAgICAgICAK ICAgICAgICAgUGFkICAgOiBDaGFyYWN0ZXIgICAgOj0gQWRhLkNoYXJhY3RlcnMuTGF0aW5fMS5T cGFjZTsgCiAgICAgICAgIE1hcCAgIDogTWFwcGluZyAgICAgIDo9IE1hcHBpbmcnKE5vbmUpICAg ICAgICAgICAgICAgICAgKSAKICAgICByZXR1cm4gU3RyaW5nOyAKCiAgIGZ1bmN0aW9uIEZvcm1h dCAoCiAgICAgICAgIFMgICAgICAgICAgICA6IFN0cmluZzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgIFdpZHRoICAgICAgICA6IEludGVnZXI7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIEluZGVudCAgICAgICA6IEludGVn ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIEZpcnN0X0lu ZGVudCA6IEJvb2xlYW4gICAgOj0gRmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgIFdyYXBfTGluZSAgICA6IEJvb2xlYW4gICAgOj0gRmFsc2U7ICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgIFBhZCAgICAgICAgICA6IENoYXJhY3RlciAgOj0gQWRhLkNoYXJhY3Rl cnMuTGF0aW5fMS5TcGFjZTsgCiAgICAgICAgIE1hcCAgICAgICAgICA6IE1hcHBpbmcgICAgOj0g TWFwcGluZycoTm9uZSkgICAgICAgICAgICAgICAgICApIAogICAgIHJldHVybiBTdHJpbmc7IAoK ICAgZnVuY3Rpb24gRm9ybWF0ICgKICAgICAgICAgUyAgICAgOiBUX1N0cmluZ19CdWZmZXI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIFdpZHRoIDogSW50 ZWdlciAgICAgIDo9IC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICBBbGln biA6IEFsaWdubWVudCAgICA6PSBBbGlnbm1lbnQnKExlZnQpOyAgICAgICAgICAgICAgIAogICAg ICAgICBQYWQgICA6IENoYXJhY3RlciAgICA6PSBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xLlNwYWNl OyAKICAgICAgICAgTWFwICAgOiBNYXBwaW5nICAgICAgOj0gTWFwcGluZycoTm9uZSkgICAgICAg ICAgICAgICAgICApIAogICAgIHJldHVybiBTdHJpbmc7IAoKICAgZnVuY3Rpb24gRm9ybWF0ICgK ICAgICAgICAgUyAgICAgICAgICAgIDogVF9TdHJpbmdfQnVmZmVyOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgV2lkdGggICAgICAgIDogSW50ZWdlcjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgSW5kZW50ICAgICAgIDog SW50ZWdlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgRmly c3RfSW5kZW50IDogQm9vbGVhbiAgICA6PSBGYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgV3JhcF9MaW5lICAgIDogQm9vbGVhbiAgICA6PSBGYWxzZTsgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgUGFkICAgICAgICAgIDogQ2hhcmFjdGVyICA6PSBBZGEuQ2hh cmFjdGVycy5MYXRpbl8xLlNwYWNlOyAKICAgICAgICAgTWFwICAgICAgICAgIDogTWFwcGluZyAg ICA6PSBNYXBwaW5nJyhOb25lKSAgICAgICAgICAgICAgICAgICkgCiAgICAgcmV0dXJuIFN0cmlu ZzsgCgogIAogICBmdW5jdGlvbiBGb3JtYXQgKAogICAgICAgICBJICAgICA6IEludGVnZXI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICBXaWR0aCA6IEludGVn ZXIgICAgICA6PSAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICBBbGlnbiA6 IEFsaWdubWVudCAgICA6PSBBbGlnbm1lbnQnKFJpZ2h0KTsgICAgICAgICAgICAgCiAgICAgICAg IFNpZ24gIDogQm9vbGVhbiAgICAgIDo9IEZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgIFBhZCAgIDogQ2hhcmFjdGVyICAgIDo9IEFkYS5DaGFyYWN0ZXJzLkxhdGluXzEuU3Bh Y2UgKSAKICAgICByZXR1cm4gU3RyaW5nOyAKCiAgIGZ1bmN0aW9uIEZvcm1hdCAoCiAgICAgICAg IEkgICAgIDogTmF0dXJhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgIEJhc2UgIDogQmFzZXR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgIFdpZHRoIDogSW50ZWdlciAgICAgIDo9IC0gMTsgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgIEFsaWduIDogQWxpZ25tZW50ICAgIDo9IEFsaWdubWVudCcoUmln aHQpOyAgICAgICAgICAgICAKICAgICAgICAgUGFkICAgOiBDaGFyYWN0ZXIgICAgOj0gQWRhLkNo YXJhY3RlcnMuTGF0aW5fMS5TcGFjZSApIAogICAgIHJldHVybiBTdHJpbmc7IAoKICAgZnVuY3Rp b24gRm9ybWF0ICgKICAgICAgICAgQiAgICAgIDogQm9vbGVhbjsgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgV2lkdGggIDogSW50ZWdlciAgICAgIDo9IC0gMTsgICAgICAgICAgICAK ICAgICAgICAgQWxpZ24gIDogQWxpZ25tZW50ICAgIDo9IEFsaWdubWVudCcoTGVmdCk7IAogICAg ICAgICBFbmNvZGUgOiBFbmNvZGluZyAgICAgOj0gRW5jb2RpbmcnKFBsYWluKSAgKSAKICAgICBy ZXR1cm4gU3RyaW5nOyAKCiAgIGZ1bmN0aW9uIEZvcm1hdCAoCiAgICAgICAgIEYgICAgICAgICAg ICAgIDogRmxvYXQ7CiAgICAgICAgIFByZWNpc2lvbiAgICAgIDogTmF0dXJhbCAgICAgIDo9IDI7 CiAgICAgICAgIFdpZHRoICAgICAgICAgIDogSW50ZWdlciAgICAgIDo9IC0gMTsgICAgICAgICAg ICAKICAgICAgICAgQWxpZ24gICAgICAgICAgOiBBbGlnbm1lbnQgICAgOj0gQWxpZ25tZW50JyhM ZWZ0KTsgCiAgICAgICAgIFJlcHJlc2VudGF0aW9uIDogRmxvYXRfUmVwICAgIDo9IEZsb2F0X1Jl cCcoU3RhbmRhcmQpICApIAogICAgIHJldHVybiBTdHJpbmc7IAoKZW5kIEFkYWxpYi5TcHJpbnRm IDsK