From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI autolearn=ham autolearn_force=no version=3.4.4 Received: from cgl.ntg.nl (Cgl.ntg.nl [5.39.185.202]) by inbox.vuxu.org (Postfix) with ESMTP id EC96621635 for ; Mon, 1 Apr 2024 13:00:43 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id AAAC148207A for ; Mon, 1 Apr 2024 13:00:42 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at cgl.ntg.nl Authentication-Results: cgl.ntg.nl (amavisd-new); dkim=fail (2048-bit key) reason="fail (message has been altered)" header.d=fiee.net Received: from cgl.ntg.nl ([127.0.0.1]) by localhost (cgl.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WmiolkuFGLRL for ; Mon, 1 Apr 2024 13:00:40 +0200 (CEST) Received: from cgl.ntg.nl (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id 7DE89483F90 for ; Mon, 1 Apr 2024 12:57:34 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by cgl.ntg.nl (Postfix) with ESMTP id 6B19748124D for ; Mon, 1 Apr 2024 12:57:05 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at cgl.ntg.nl Received: from cgl.ntg.nl ([127.0.0.1]) by localhost (cgl.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Cyv_2BlfABky for ; Mon, 1 Apr 2024 12:57:03 +0200 (CEST) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=188.68.63.170; helo=relay.yourmailgateway.de; envelope-from=texml@fiee.net; receiver= Received: from relay.yourmailgateway.de (relay.yourmailgateway.de [188.68.63.170]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by cgl.ntg.nl (Postfix) with ESMTPS id DC2154810A5 for ; Mon, 1 Apr 2024 12:57:03 +0200 (CEST) Received: from mors-relay8203.netcup.net (localhost [127.0.0.1]) by mors-relay8203.netcup.net (Postfix) with ESMTPS id 4V7SdC1D6zz8b1D for ; Mon, 1 Apr 2024 10:57:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fiee.net; s=key2; t=1711969023; bh=YrqwyO32wBpUqjTO+3wAcZzW3d6Naq0e9j3tCE4vlfE=; h=Date:To:From:Subject:From; b=Aq6BjxidvmPbKHO8LLSncrSw7Cm4LJb8EiM0e6ucchJY2ZDHPT6uW6TU4/+ujGl/6 Uezxq9gId+uiGa2tB+7iJS7yv18+PzrQAnHJ8IOaRUSQ9p/yK6pDStdG6qUwiMDKj1 /uf2XDgogD29j5C66iYlSHY/27XGAMeZ6ilQUBuq8hsSEd/tpvSbVApjMn4ZEMld6m NUGKkKSQ5rYOqRGGGKFAZ7hwGVXLaVBlwKkdR1IM7V0fGrAW1bc4MaWOY7Wfx/fynV IZXc+QDOdbAexuZR/nsVymffZrFhNkwkweSvm4keF1xKp7Dx0Psn2sawg2d04j6Sa4 Ux+IFNf85ZbXw== Received: from policy02-mors.netcup.net (unknown [46.38.225.35]) by mors-relay8203.netcup.net (Postfix) with ESMTPS id 4V7SdC0Sslz8b0b for ; Mon, 1 Apr 2024 10:57:03 +0000 (UTC) Received: from mxf9ac.netcup.net (unknown [10.243.12.53]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by policy02-mors.netcup.net (Postfix) with ESMTPS id 4V7SdB6BYKz8svZ for ; Mon, 1 Apr 2024 12:57:02 +0200 (CEST) Received: from [192.168.178.23] (ipservice-092-219-062-151.092.219.pools.vodafone-ip.de [92.219.62.151]) by mxf9ac.netcup.net (Postfix) with ESMTPSA id 3F876212B5 for ; Mon, 1 Apr 2024 12:56:57 +0200 (CEST) Authentication-Results: mxf9ac; spf=pass (sender IP is 92.219.62.151) smtp.mailfrom=texml@fiee.net smtp.helo=[192.168.178.23] Received-SPF: pass (mxf9ac: connection is authenticated) Content-Type: multipart/mixed; boundary="------------xrZuObe4oRMf6zeb0Rcjbh1Q" Message-ID: <8cf674f3-b094-4a99-828d-71f88e0162ab@fiee.net> Date: Mon, 1 Apr 2024 12:56:56 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: de-DE To: mailing list for ConTeXt users From: Henning Hraban Ramm Autocrypt: addr=texml@fiee.net; keydata= xsFNBGOjPmUBEADEsxKcvxohyo3olsd7Vv58dRJvJU3D4+Ppy4t0VJSomcRVc9ritqYT6tQJ bED9ZGyjmoI21wmPPA9aZ7i1TEBg87+tR3g/RYccRTEguOs262rApjzbHIXCdGwr5zznvcvJ bgKPBkN5vO3y59O6eykRX1FLzipk8sAgrGwTk3cKAwQzUdt+0p2cJE8zYrwmEl6gilO5YHa2 X/V6JvAJoz0+NwRhTHxzWlySpnUz7FNghrewvINS0mdrmqLTG/TRASy3EhKcVxFRFo7rrra5 r0X2yledsDMex5jBHp1a0YWq2N/Tpikis+/szRHHb83+ZH3R3kLlVrXlziOEL31Y1lCWcJLM FJMuESun4I9CrYGkE99qrqj2rBjed4CM+U3lSDgDKWEuPQocvq/cfuRTNm+mZ4uA+hyuIdTl /GthXhWqnvQJAEuXg0owO9X05sKncZuU5GTdFAC6IhKH1iflv+iJIcLeQyf+XgFx6YM8BJUy 1OxnEaYSs7C6csvBFEECztjDPJj1rxR0e+4v/0GXY5Ksw6hnHiAf2NzagggxDPat3bKvgUu1 9ciFWvPfXAwCgN66VzdKYZ1m0W8Z1UanN1VwljuuOsG6Zu3/B3wYY60v1m2Dq91FwZo2aHaF UneGu8aoiLSsXU5VUFYWKggiTDSNEtHYEr6JQ9Jao/Wg9EbHqwARAQABzSRIZW5uaW5nIEhy YWJhbiBSYW1tIDx0ZXhtbEBmaWVlLm5ldD7CwY0EEwEIADcWIQTR3NEIZhd2jc10otJW7Qya acOjywUCY6M+aQUJBaOagAIbAwQLCQgHBRUICQoLBRYCAwEAAAoJEFbtDJppw6PLp6EQAMCg PaGE3s+3jlET0gncwVF9U+irKzuG5NAoMw+RplLEKL+6mTE2J02m40Of/u8+rX2z2ULuDPdf P1GqfJEd3tGW3VJlvEu5P+W0rtHGbi7I90Z47qpswWr0BwhznzFcpCE1UOhO0XfpPqhjF/ze PAfqwjn04qVS5rpF9Kw0vCgcZhmce6s+6YRYwUV64xgZEf8xktVh6l/ssiuUJFeVAPy+nEF/ dT0IWp+UExr8MWI/W5mJ+gNaWzLBm0/nzX/1P494RZBKqoEru+Y32/Yen6+6N9Eve2343uY5 Nv0NXkD/NdcMDWAjNtXAg2u8ij2TcVJL0L9IItkqUo0VWaA4q5uU5h2C//jaESfV/CoE66od PhpmFoCWwKK8WCIiLmtFCuBLfIVKD08SjsqSLC1Mu4tvrOOMD8y+UuIB+im9e7KzbyRHqdby eJclp7MX7BCMyKdZEiA0m0rKgWBBJnNLRbvDw8EoN8lQoSMirnUGZ5i7hdKagaLCmvPK8eoO O6O3AfrM+GIWDPFnNPEmf3UZUor4gGITFXRpsSA4mDK7ms66nNc+2JX77s9Dz4YjLqxPG0SD vfV4us/04Yw/YgesSWrJmdhGiGv5zdnb1i8baNs7HHVCe08hgb7qhmJy4eY3kw6PD7NWus+Z mNFh+WCJ7qJrUCfP6dPxqkxS5Ek+ZX+MzsFNBGOjPmkBEACyK7HcTpYQ3KGSfzrxzNOsZOcZ zdI3uSecbYeh1I+9Try6bSDGsw0nN63a/96MLEJyVY/Se1HqL2fdBGgo3b8w54M5Yfm9ts49 v5LWCz19tFfIyDi9S/JthI+Lbdj7VG9hUQhnoKRX3OCTyyqGr39RgjOyqlBFwwIPjaxyFgxZ /e2vJwLJY6VIu3R7jieEWkAUMIyldewMuMGuDGABIFy6Ca30GBObcqHUU2GFhcCFkG1N1fno cNQYZ02WizfS1Pl+Y/YBPsM1XrvNPKp1i5WvC6u3bn1ROCf9rynoGSJs5EcOisrmawm4xriF oJhiMC9xgEvwT18/D6wFqDZQOpOn4JsKo7Xv0s4WSfPac9bVSdWqnHWx47OrHOkDoH0hld89 3R2od+u14usgIXdTkESA849fh+kBgU1tmav13m80e6QiuTxphJfazWhnMn/BwfucvwGHH+Vs ILk9rnv3M8FEjY69rfgED97e6ngY6YWwhgKIMIqYy0gnnl+HD3ATNj4K9Jz7LrIJtk0FeNXG RjqV+AJt0JrenMgcpw9PnXi9RUZpCuZ2bM8iHIoPxnw3Gm4EHsb9LPZlg5MfJUJICrtRPbH7 eKdYAZ5ukGpRjdnVyLt81erJf27loj4KugG1htZvcHbsCrUgfxIbuonsM12A6YHM2LhGM728 bj9VKcjvbwARAQABwsF8BBgBCAAmFiEE0dzRCGYXdo3NdKLSVu0MmmnDo8sFAmOjPmwFCQWj moACGwwACgkQVu0MmmnDo8slgQ/9GrcBl6nXy6s54Hn/ontnu6HBA63YVPw4c9iK8bbfXaS1 qGWXk14/DkBxLnxpdDeM1bQ38t0mmuY9iE08gvLd1hZqtWA+wJhj1qgwevY+T1lPzmCpuRTy GX6YARigIhs2pcuKL1H8mFMRsg+BlLGaOsNticofGvYqmub+ZG+Z2fUHf2b6UJYh7u3rwJml HlL1R3xVn/34Yjp1Xcw5vFW4O+DBMmLyyD550bd0SmDYNGrX9EeShptJaMylJ/tK66367PzM G3G8m0okTHzpbYqhkEIxQRbsLRJaViKuj6+EUhmlBtOegvFTQ6u+cpax5rSVBlvPpbE9rb9H CBPtMxH1pvOMpmJVyoh998+Cyh8ZMDazuWrN1bqHuKtsbTu8fVvC/7f/fCENhhdGZ/HhFE+2 tHYcuPqshG4FZkg+9kYaMUqftQ4cp+hiVptRFKj2dG0npo80JW0cEILck6E6/jMU1FSmNc3E kZcWfSH9XrumLVBqY3OiOPuswEuWX6CQ1oJK/MK5XZJRBNJcNGg+xVNJL7uwmxLrt0eSlkln uvm7SeXs1TXP1QeIlfIgN0lHjN6yWsbT/c4gw8NgyWZFWuII5uHHQNd554LH0te1tIYZr/DH U3dYIDF2ZfHlBDjZ8PVpPwhN4/+5Oqib/aBPfSAD+LXeWcPp7T+sAEv9O1gZfgs= X-PPP-Message-ID: <171196901765.22121.16989024872819119120@mxf9ac.netcup.net> X-Rspamd-Queue-Id: 3F876212B5 X-Rspamd-Server: rspamd-worker-8404 X-NC-CID: Hnb10DZOS2Yglq9j1XTBK8BFJMKukw29d+kL/Nth Message-ID-Hash: FMXXL4QQJORQUTFVLMOR475BWIVKZI6C X-Message-ID-Hash: FMXXL4QQJORQUTFVLMOR475BWIVKZI6C X-MailFrom: texml@fiee.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.8 Precedence: list Reply-To: mailing list for ConTeXt users Subject: [NTG-context] context editor support / syntax highlighting for Pulsar List-Id: mailing list for ConTeXt users Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: This is a multi-part message in MIME format. --------------xrZuObe4oRMf6zeb0Rcjbh1Q Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Hans (et al.), find attached a slightly extended version of the "interface" script that can also generate the list of commands in cson format for Pulsar/Atom. It just creates a basic list of commands for syntax highlighting; for a complete plugin, "grammars" and "settings" are missing, see https://codeberg.org/fiee/language-context (Yes, this approach is oldfashioned and a plugin could do a lot more, but I don’t speak TypeScript.) The generated cson file is for "snippets", like in: https://codeberg.org/fiee/language-context/src/branch/master/snippets/language-context.cson There, I added information from the interface files and also from the wiki, if existing. I don’t know how to do that in the lua script. --- function flushers.pulsar(collected) for interface, whatever in next, collected do local commands = whatever.commands local environments = whatever.environments local result, r = { }, 0 r = r + 1 ; result[r] = "'.text.tex.context':\n" for i=1,#commands do r = r + 1 ; result[r] = format("\t'\\%s':\n",commands[i]) r = r + 1 ; result[r] = format("\t\tprefix: '%s'\n",commands[i]) -- can we have some information? --r = r + 1 ; result[r] = format("\t\tdescription: 'level: primitive; interface: i-tex.xml'",'') -- no URL if command starts with "stop" r = r + 1 ; result[r] = format("\t\tdescriptionMoreURL: 'https://wiki.contextgarden.net/Command/%s'\n",commands[i]) end io.savedata(format("language-context-%s.cson",interface), concat(result),"\n") end end --- Also, the "en" interface is empty, everything is in "common", so the iteration over interfaces makes no sense here. Actually, Atom/Pulsar could work with a tree sitter parser (https://github.com/pmazaitis/tree-sitter-context), but I don’t know how to use it. [TextMate] For TextMate and other editors that use TM bundles, it might make sense to update https://github.com/pgundlach/context.tmbundle At least the list of commands could be automatically converted from the interface files, but it’s more involved than what mtx-interface does. [Visual Studio Code / VSCodium] BTW, is the ConTeXt language server for VS Code public anywhere? (Ramkumar KB promised…) Or is "mtxrun --script=vscode --lsfile" the same? Hraban --------------xrZuObe4oRMf6zeb0Rcjbh1Q Content-Type: text/plain; charset=UTF-8; name="mtx-interface.lua" Content-Disposition: attachment; filename="mtx-interface.lua" Content-Transfer-Encoding: base64 aWYgbm90IG1vZHVsZXMgdGhlbiBtb2R1bGVzID0geyB9IGVuZCBtb2R1bGVzIFsnbXR4LWNh Y2hlJ10gPSB7CiAgICB2ZXJzaW9uICAgPSAxLjAwMSwKICAgIGNvbW1lbnQgICA9ICJjb21w YW5pb24gdG8gbXR4cnVuLmx1YSIsCiAgICBhdXRob3IgICAgPSAiSGFucyBIYWdlbiwgUFJB R01BLUFERSwgSGFzc2VsdCBOTCIsCiAgICBjb3B5cmlnaHQgPSAiUFJBR01BIEFERSAvIENv blRlWHQgRGV2ZWxvcG1lbnQgVGVhbSIsCiAgICBsaWNlbnNlICAgPSAic2VlIGNvbnRleHQg cmVsYXRlZCByZWFkbWUgZmlsZXMiCn0KCmxvY2FsIGNvbmNhdCwgc29ydCwgaW5zZXJ0ID0g dGFibGUuY29uY2F0LCB0YWJsZS5zb3J0LCB0YWJsZS5pbnNlcnQKbG9jYWwgZ3N1YiwgZm9y bWF0LCBnbWF0Y2gsIGZpbmQsIHVwcGVyID0gc3RyaW5nLmdzdWIsIHN0cmluZy5mb3JtYXQs IHN0cmluZy5nbWF0Y2gsIHN0cmluZy5maW5kLCBzdHJpbmcudXBwZXIKbG9jYWwgdXRmY2hh ciwgdXRmZ3N1YiA9IHV0Zi5jaGFyLCB1dGYuZ3N1Ygpsb2NhbCBzb3J0ZWRrZXlzLCBzb3J0 ZWRoYXNoLCBzZXJpYWxpemUgPSB0YWJsZS5zb3J0ZWRrZXlzLCB0YWJsZS5zb3J0ZWRoYXNo LCB0YWJsZS5zZXJpYWxpemUKCmxvY2FsIGhlbHBpbmZvID0gW1sKPD94bWwgdmVyc2lvbj0i MS4wIj8+CjxhcHBsaWNhdGlvbj4KIDxtZXRhZGF0YT4KICA8ZW50cnkgbmFtZT0ibmFtZSI+ bXR4LWludGVyZmFjZTwvZW50cnk+CiAgPGVudHJ5IG5hbWU9ImRldGFpbCI+Q29uVGVYdCBJ bnRlcmZhY2UgUmVsYXRlZCBHb29kaWVzPC9lbnRyeT4KICA8ZW50cnkgbmFtZT0idmVyc2lv biI+MC4xNDwvZW50cnk+CiA8L21ldGFkYXRhPgogPGZsYWdzPgogIDxjYXRlZ29yeSBuYW1l PSJiYXNpYyI+CiAgIDxzdWJjYXRlZ29yeT4KICAgIDxmbGFnIG5hbWU9ImludGVyZmFjZXMi PjxzaG9ydD5nZW5lcmF0ZSBjb250ZXh0IG1raWkgaW50ZXJmYWNlIGZpbGVzPC9zaG9ydD48 L2ZsYWc+CiAgIDwvc3ViY2F0ZWdvcnk+CiAgIDxzdWJjYXRlZ29yeT4KICAgIDxmbGFnIG5h bWU9ImNvbnRleHQiPjxzaG9ydD5lcXVhbHMgPHJlZiBuYW1lPSJpbnRlcmZhY2VzIi8+IDxy ZWYgbmFtZT0ibWVzc2FnZXMiLz4gPHJlZiBuYW1lPSJsYW5ndWFnZXMiLz48L3Nob3J0Pjwv ZmxhZz4KICAgPC9zdWJjYXRlZ29yeT4KICAgPHN1YmNhdGVnb3J5PgogICAgPGZsYWcgbmFt ZT0ic2NpdGUiPjxzaG9ydD5nZW5lcmF0ZSBzY2l0ZSBpbnRlcmZhY2U8L3Nob3J0PjwvZmxh Zz4KICAgIDxmbGFnIG5hbWU9ImJiZWRpdCI+PHNob3J0PmdlbmVyYXRlIGJiZWRpdCBpbnRl cmZhY2UgZmlsZXM8L3Nob3J0PjwvZmxhZz4KICAgIDxmbGFnIG5hbWU9ImplZGl0Ij48c2hv cnQ+Z2VuZXJhdGUgamVkaXQgaW50ZXJmYWNlIGZpbGVzPC9zaG9ydD48L2ZsYWc+CiAgICA8 ZmxhZyBuYW1lPSJwdWxzYXIiPjxzaG9ydD5nZW5lcmF0ZSBwdWxzYXIvYXRvbSBpbnRlcmZh Y2UgZmlsZXM8L3Nob3J0PjwvZmxhZz4KICAgIDxmbGFnIG5hbWU9InRleHRwYWQiPjxzaG9y dD5nZW5lcmF0ZSB0ZXh0cGFkIGludGVyZmFjZSBmaWxlczwvc2hvcnQ+PC9mbGFnPgogICAg PGZsYWcgbmFtZT0idmltIj48c2hvcnQ+Z2VuZXJhdGUgdmltIGludGVyZmFjZSBmaWxlczwv c2hvcnQ+PC9mbGFnPgogICAgPGZsYWcgbmFtZT0idGV4dCI+PHNob3J0PmNyZWF0ZSB0ZXh0 IGZpbGVzIGZvciBjb21tYW5kcyBhbmQgZW52aXJvbm1lbnRzPC9zaG9ydD48L2ZsYWc+CiAg ICA8ZmxhZyBuYW1lPSJyYXciPjxzaG9ydD5yZXBvcnQgY29tbWFuZHMgdG8gdGhlIGNvbnNv bGU8L3Nob3J0PjwvZmxhZz4KICAgIDxmbGFnIG5hbWU9ImNoZWNrIj48c2hvcnQ+Z2VuZXJh dGUgY2hlY2sgZmlsZTwvc2hvcnQ+PC9mbGFnPgogICAgPGZsYWcgbmFtZT0ibWVhbmluZyI+ PHNob3J0PnJlcG9ydCB0aGUgbWVhbmluZyBvZiBjb21tYW5kczwvc2hvcnQ+PC9mbGFnPgog ICAgPGZsYWcgbmFtZT0idG9rZW5zIj48c2hvcnQ+c2hvdyB0aGUgaW50ZXJuYWwgcmVwcmVz ZW50YXRpb24gb2YgY29tbWFuZHM8L3Nob3J0PjwvZmxhZz4KICAgPC9zdWJjYXRlZ29yeT4K ICAgPHN1YmNhdGVnb3J5PgogICAgPGZsYWcgbmFtZT0idG91dGYiPjxzaG9ydD5yZXBsYWNl IG5hbWVkIGNoYXJhY3RlcnMgYnkgdXRmPC9zaG9ydD48L2ZsYWc+CiAgICA8ZmxhZyBuYW1l PSJwcmVwcm9jZXNzIj48c2hvcnQ+cHJlcHJvY2VzcyBta3ZpIGZpbGVzIHRvIHRleCBmaWxl cyBbZm9yY2Usc3VmZml4XTwvc2hvcnQ+PC9mbGFnPgogICA8L3N1YmNhdGVnb3J5PgogICA8 c3ViY2F0ZWdvcnk+CiAgICA8ZmxhZyBuYW1lPSJzdWZmaXgiPjxzaG9ydD51c2UgZ2l2ZW4g c3VmZml4IGZvciBvdXRwdXQgZmlsZXM8L3Nob3J0PjwvZmxhZz4KICAgIDxmbGFnIG5hbWU9 ImZvcmNlIj48c2hvcnQ+Zm9yY2UgYWN0aW9uIGV2ZW4gd2hlbiBpbiBkb3VidDwvc2hvcnQ+ PC9mbGFnPgogICA8L3N1YmNhdGVnb3J5PgogICA8c3ViY2F0ZWdvcnk+CiAgICA8ZmxhZyBu YW1lPSJwYXR0ZXJuIj48c2hvcnQ+YSBwYXR0ZXJuIGZvciBtZWFuaW5nIGxvb2t1cHM8L3No b3J0PjwvZmxhZz4KICAgPC9zdWJjYXRlZ29yeT4KICA8L2NhdGVnb3J5PgogPC9mbGFncz4K PC9hcHBsaWNhdGlvbj4KXV0KCmxvY2FsIGFwcGxpY2F0aW9uID0gbG9ncy5hcHBsaWNhdGlv biB7CiAgICBuYW1lICAgICA9ICJtdHgtaW50ZXJmYWNlIiwKICAgIGJhbm5lciAgID0gIkNv blRlWHQgSW50ZXJmYWNlIFJlbGF0ZWQgR29vZGllcyAwLjEzIiwKICAgIGhlbHBpbmZvID0g aGVscGluZm8sCn0KCmxvY2FsIHJlcG9ydCA9IGFwcGxpY2F0aW9uLnJlcG9ydAoKc2NyaXB0 cyAgICAgICAgICAgPSBzY3JpcHRzICAgICAgICAgICBvciB7IH0Kc2NyaXB0cy5pbnRlcmZh Y2UgPSBzY3JpcHRzLmludGVyZmFjZSBvciB7IH0KCmxvY2FsIGZsdXNoZXJzICAgICAgICAg ID0geyB9CmxvY2FsIHVzZXJpbnRlcmZhY2VzICAgID0geyAnZW4nLCdjcycsJ2RlJywnaXQn LCdubCcsJ3JvJywnZnInLCdwZScgfQpsb2NhbCBtZXNzYWdlaW50ZXJmYWNlcyA9IHsgJ2Vu JywnY3MnLCdkZScsJ2l0JywnbmwnLCdybycsJ2ZyJywncGUnLCdubycgfQoKbG9jYWwgZnVu Y3Rpb24gY29sbGVjdChmaWxlbmFtZSxjbGFzcyxkYXRhKQogICAgaWYgZGF0YSB0aGVuCiAg ICAgICAgbG9jYWwgcmVzdWx0LCByID0geyB9LCAwCiAgICAgICAgZm9yIG5hbWUsIGxpc3Qg aW4gc29ydGVkaGFzaChkYXRhKSBkbwogICAgICAgICAgICByID0gciArIDEgOyByZXN1bHRb cl0gPSBmb3JtYXQoImtleXdvcmRjbGFzcy4lcy4lcz1cXFxuIixjbGFzcyxuYW1lKQogICAg ICAgICAgICBmb3IgaT0xLCNsaXN0IGRvCiAgICAgICAgICAgICAgICBpZiBpJTUgPT0gMCB0 aGVuCiAgICAgICAgICAgICAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gIlxcXG4i CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIHIgPSByICsgMSA7IHJlc3Vs dFtyXSA9IGZvcm1hdCgiJXMgIixsaXN0W2ldKQogICAgICAgICAgICBlbmQKICAgICAgICAg ICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gIlxuXG4iCiAgICAgICAgZW5kCiAgICAgICAg aW8uc2F2ZWRhdGEoZmlsZS5hZGRzdWZmaXgoZmlsZW5hbWUsInByb3BlcnRpZXMiKSxjb25j YXQocmVzdWx0KSkKICAgICAgICBpby5zYXZlZGF0YShmaWxlLmFkZHN1ZmZpeChmaWxlbmFt ZSwibHVhIiksc2VyaWFsaXplKGRhdGEsdHJ1ZSkpCiAgICBlbHNlCiAgICAgICAgb3MucmVt b3ZlKGZpbGVuYW1lKQogICAgZW5kCmVuZAoKZnVuY3Rpb24gZmx1c2hlcnMuc2NpdGUoY29s bGVjdGVkKQogICAgbG9jYWwgZGF0YSA9IHsgfQotLSAgICAgZm9yIGludGVyZmFjZSwgd2hh dGV2ZXIgaW4gbmV4dCwgY29sbGVjdGVkIGRvCi0tICAgICAgICAgZGF0YVtpbnRlcmZhY2Vd ID0gd2hhdGV2ZXIuY29tbWFuZHMKLS0gICAgIGVuZAogICAgbG9jYWwgZnVuY3Rpb24gYWRk KHRhcmdldCxvcmlnaW4sZmllbGQpCiAgICAgICAgaWYgb3JpZ2luIHRoZW4KICAgICAgICAg ICAgbG9jYWwgbGlzdCA9IG9yaWdpbltmaWVsZF0KICAgICAgICAgICAgaWYgbGlzdCB0aGVu CiAgICAgICAgICAgICAgICBmb3IgaT0xLCNsaXN0IGRvCiAgICAgICAgICAgICAgICAgICAg dGFyZ2V0W2xpc3RbaV1dID0gdHJ1ZQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAg IGVuZAogICAgICAgIGVuZAogICAgZW5kCiAgICAtLQogICAgZm9yIGludGVyZmFjZSwgd2hh dGV2ZXIgaW4gbmV4dCwgY29sbGVjdGVkIGRvCiAgICAgICAgbG9jYWwgY29tYmluZWQgPSB7 IH0KICAgICAgICBhZGQoY29tYmluZWQsd2hhdGV2ZXIsImNvbW1hbmRzIikKICAgICAgICBh ZGQoY29tYmluZWQsd2hhdGV2ZXIsImVudmlyb25tZW50cyIpCiAgICAgICAgaWYgaW50ZXJm YWNlID09ICJjb21tb24iIHRoZW4KICAgICAgICAgICAgYWRkKGNvbWJpbmVkLHdoYXRldmVy LCJ0ZXh0bmFtZXMiKQogICAgICAgICAgICBhZGQoY29tYmluZWQsd2hhdGV2ZXIsIm1hdGhu YW1lcyIpCiAgICAgICAgZW5kCiAgICAgICAgZGF0YVtpbnRlcmZhY2VdID0gc29ydGVka2V5 cyhjb21iaW5lZCkKICAgIGVuZAogICAgLS0KICAgIGNvbGxlY3QoInNjaXRlLWNvbnRleHQt ZGF0YS1pbnRlcmZhY2VzIiwgImNvbnRleHQiLCAgZGF0YSkKICAgIGNvbGxlY3QoInNjaXRl LWNvbnRleHQtZGF0YS1tZXRhcG9zdCIsICAgIm1ldGFwb3N0IiwgZG9maWxlKHJlc29sdmVy cy5maW5kZmlsZSgibXVsdC1tcHMubHVhIikpKQogICAgY29sbGVjdCgic2NpdGUtY29udGV4 dC1kYXRhLW1ldGFmdW4iLCAgICAibWV0YWZ1biIsICBkb2ZpbGUocmVzb2x2ZXJzLmZpbmRm aWxlKCJtdWx0LWZ1bi5sdWEiKSkpCiAgICBjb2xsZWN0KCJzY2l0ZS1jb250ZXh0LWRhdGEt Y29udGV4dCIsICAgICJjb250ZXh0IiwgIGRvZmlsZShyZXNvbHZlcnMuZmluZGZpbGUoIm11 bHQtbG93Lmx1YSIpKSkKICAgIGNvbGxlY3QoInNjaXRlLWNvbnRleHQtZGF0YS10ZXgiLCAg ICAgICAgInRleCIsICAgICAgZG9maWxlKHJlc29sdmVycy5maW5kZmlsZSgibXVsdC1wcm0u bHVhIikpKQplbmQKCmZ1bmN0aW9uIGZsdXNoZXJzLmplZGl0KGNvbGxlY3RlZCkKICAgIGZv ciBpbnRlcmZhY2UsIHdoYXRldmVyIGluIG5leHQsIGNvbGxlY3RlZCBkbwogICAgICAgIGxv Y2FsIGNvbW1hbmRzICAgICA9IHdoYXRldmVyLmNvbW1hbmRzCiAgICAgICAgbG9jYWwgZW52 aXJvbm1lbnRzID0gd2hhdGV2ZXIuZW52aXJvbm1lbnRzCiAgICAgICAgbG9jYWwgcmVzdWx0 LCByID0geyB9LCAwCiAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gIjw/eG1sIHZl cnNpb249JzEuMCc/PiIKICAgICAgICByID0gciArIDEgOyByZXN1bHRbcl0gPSAiPCFET0NU WVBFIE1PREUgU1lTVEVNICd4bW9kZS5kdGQnPlxuIgogICAgICAgIHIgPSByICsgMSA7IHJl c3VsdFtyXSA9ICI8TU9ERT4iCiAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gIlx0 PFJVTEVTPiIKICAgICAgICByID0gciArIDEgOyByZXN1bHRbcl0gPSAiXHRcdDxLRVlXT1JE Uz4iCiAgICAgICAgZm9yIGk9MSwjY29tbWFuZHMgZG8KICAgICAgICAgICAgciA9IHIgKyAx IDsgcmVzdWx0W3JdID0gZm9ybWF0KCJcdFx0XHQ8S0VZV09SRDI+JXM8L0tFWVdPUkQyPiIs Y29tbWFuZHNbaV0pCiAgICAgICAgZW5kCiAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3Jd ID0gIlx0XHQ8L0tFWVdPUkRTPiIKICAgICAgICByID0gciArIDEgOyByZXN1bHRbcl0gPSAi XHQ8L1JVTEVTPiIKICAgICAgICByID0gciArIDEgOyByZXN1bHRbcl0gPSAiPC9NT0RFPiIK ICAgICAgICBpby5zYXZlZGF0YShmb3JtYXQoImNvbnRleHQtamVkaXQtJXMueG1sIixpbnRl cmZhY2UpLCBjb25jYXQocmVzdWx0KSwiXG4iKQogICAgZW5kCmVuZAoKZnVuY3Rpb24gZmx1 c2hlcnMuYmJlZGl0KGNvbGxlY3RlZCkKICAgIGZvciBpbnRlcmZhY2UsIHdoYXRldmVyIGlu IG5leHQsIGNvbGxlY3RlZCBkbwogICAgICAgIGxvY2FsIGNvbW1hbmRzICAgICA9IHdoYXRl dmVyLmNvbW1hbmRzCiAgICAgICAgbG9jYWwgZW52aXJvbm1lbnRzID0gd2hhdGV2ZXIuZW52 aXJvbm1lbnRzCiAgICAgICAgbG9jYWwgcmVzdWx0LCByID0geyB9LCAwCiAgICAgICAgciA9 IHIgKyAxIDsgcmVzdWx0W3JdID0gIjw/eG1sIHZlcnNpb249JzEuMCc/PiIKICAgICAgICBy ID0gciArIDEgOyByZXN1bHRbcl0gPSAiPGtleT5CQkxNS2V5d29yZExpc3Q8L2tleT4iCiAg ICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gIjxhcnJheT4iCiAgICAgICAgZm9yIGk9 MSwjY29tbWFuZHMgZG8KICAgICAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gZm9y bWF0KCJcdDxzdHJpbmc+XFwlczwvc3RyaW5nPiIsY29tbWFuZHNbaV0pCiAgICAgICAgZW5k CiAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gIjwvYXJyYXk+IgogICAgICAgIGlv LnNhdmVkYXRhKGZvcm1hdCgiY29udGV4dC1iYmVkaXQtJXMueG1sIixpbnRlcmZhY2UpLCBj b25jYXQocmVzdWx0KSwiXG4iKQogICAgZW5kCmVuZAoKZnVuY3Rpb24gZmx1c2hlcnMucHVs c2FyKGNvbGxlY3RlZCkKICAgIGZvciBpbnRlcmZhY2UsIHdoYXRldmVyIGluIG5leHQsIGNv bGxlY3RlZCBkbwogICAgICAgIGxvY2FsIGNvbW1hbmRzICAgICA9IHdoYXRldmVyLmNvbW1h bmRzCiAgICAgICAgbG9jYWwgZW52aXJvbm1lbnRzID0gd2hhdGV2ZXIuZW52aXJvbm1lbnRz CiAgICAgICAgbG9jYWwgcmVzdWx0LCByID0geyB9LCAwCiAgICAgICAgciA9IHIgKyAxIDsg cmVzdWx0W3JdID0gIicudGV4dC50ZXguY29udGV4dCc6XG4iCiAgICAgICAgZm9yIGk9MSwj Y29tbWFuZHMgZG8KICAgICAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gZm9ybWF0 KCJcdCdcXCVzJzpcbiIsY29tbWFuZHNbaV0pCiAgICAgICAgICAgIHIgPSByICsgMSA7IHJl c3VsdFtyXSA9IGZvcm1hdCgiXHRcdHByZWZpeDogJyVzJ1xuIixjb21tYW5kc1tpXSkKICAg ICAgICAgICAgLS0gY2FuIHdlIGhhdmUgc29tZSBpbmZvcm1hdGlvbj8KICAgICAgICAgICAg LS1yID0gciArIDEgOyByZXN1bHRbcl0gPSBmb3JtYXQoIlx0XHRkZXNjcmlwdGlvbjogJ2xl dmVsOiBwcmltaXRpdmU7IGludGVyZmFjZTogaS10ZXgueG1sJyIsJycpCiAgICAgICAgICAg IC0tIG5vIFVSTCBpZiBjb21tYW5kIHN0YXJ0cyB3aXRoICJzdG9wIgogICAgICAgICAgICBy ID0gciArIDEgOyByZXN1bHRbcl0gPSBmb3JtYXQoIlx0XHRkZXNjcmlwdGlvbk1vcmVVUkw6 ICdodHRwczovL3dpa2kuY29udGV4dGdhcmRlbi5uZXQvQ29tbWFuZC8lcydcbiIsY29tbWFu ZHNbaV0pCiAgICAgICAgZW5kCiAgICAgICAgaW8uc2F2ZWRhdGEoZm9ybWF0KCJsYW5ndWFn ZS1jb250ZXh0LSVzLmNzb24iLGludGVyZmFjZSksIGNvbmNhdChyZXN1bHQpLCJcbiIpCiAg ICBlbmQKZW5kCgotLSBUaGUgVmltIGV4cG9ydCBpcyBtYWludGFpbmVkIGJ5IE5pY29sYSBW aXRhY29sb25uYToKCmxvY2FsIGZ1bmN0aW9uIHZpbWNvbGxlY3QoZmlsZW5hbWUsY2xhc3Ms ZGF0YSkKICAgIGlmIGRhdGEgdGhlbgogICAgICAgIGxvY2FsIHJlc3VsdCwgciA9IHsgfSwg MAogICAgICAgIGxvY2FsIGVuZGxpbmUgPSAiIGNvbnRhaW5lZFxuIgogICAgICAgIGlmIGZp bmQoY2xhc3MsIl5tZXRhIikgdGhlbgogICAgICAgICAgICBlbmRsaW5lID0gIlxuIgogICAg ICAgIGVuZAogICAgICAgIHIgPSByICsgMSA7IHJlc3VsdFtyXSA9ICJ2aW05c2NyaXB0XG5c biIKICAgICAgICByID0gciArIDEgOyByZXN1bHRbcl0gPSAiIyBWaW0gc3ludGF4IGZpbGVc biIKICAgICAgICByID0gciArIDEgOyByZXN1bHRbcl0gPSAiIyBMYW5ndWFnZTogQ29uVGVY dFxuIgogICAgICAgIHIgPSByICsgMSA7IHJlc3VsdFtyXSA9IGZvcm1hdCgiIyBBdXRvbWF0 aWNhbGx5IGdlbmVyYXRlZCBieSBtdHgtaW50ZXJmYWNlICglcylcblxuIiwgb3MuZGF0ZSgp KQogICAgICAgIGxvY2FsIG4gPSA1IC0tIG51bWJlciBvZiBrZXl3b3JkcyBwZXIgcm93CiAg ICAgICAgZm9yIG5hbWUsIGxpc3QgaW4gc29ydGVkaGFzaChkYXRhKSBkbwogICAgICAgICAg ICBsb2NhbCBpID0gMQogICAgICAgICAgICB3aGlsZSBpIDw9ICNsaXN0IGRvCiAgICAgICAg ICAgICAgICByID0gciArIDEgOyByZXN1bHRbcl0gPSBmb3JtYXQoInN5biBrZXl3b3JkICVz JXMiLCBjbGFzcywgKGdzdWIobmFtZSwiXiVsIix1cHBlcikpKSAtLSB1cHBlciBpcyBmcmFn aWxlCiAgICAgICAgICAgICAgICBsb2NhbCBqID0gMAotLSAgICAgICAgICAgICAgICAgd2hp bGUgaStqIDw9ICNsaXN0IGFuZCBqIDwgbiBkbwotLSAgICAgICAgICAgICAgICAgICAgIGlm IGxpc3RbaStqXSA9PSAidHJhbnNwYXJlbnQiIHRoZW4gLS0gdGhpcyBpcyBhIFZpbSBrZXl3 b3JkCi0tICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByICsgMSA7IHJlc3VsdFtyXSA9 IGZvcm1hdCgiICVzW10iLGxpc3RbaStqXSkKLS0gICAgICAgICAgICAgICAgICAgICBlbHNl Ci0tICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByICsgMSA7IHJlc3VsdFtyXSA9IGZv cm1hdCgiICVzIixsaXN0W2kral0pCi0tICAgICAgICAgICAgICAgICAgICAgZW5kCi0tICAg ICAgICAgICAgICAgICAgICAgaiA9IGogKyAxCi0tICAgICAgICAgICAgICAgICBlbmQKICAg ICAgICAgICAgICAgIHdoaWxlIGogPCBuIGRvCiAgICAgICAgICAgICAgICAgICAgbG9jYWwg bGlqID0gbGlzdFtpICsgal0KICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGlqIHRoZW4K ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICBlbHNl aWYgbGlqID09ICJ0cmFuc3BhcmVudCIgdGhlbiAtLSB0aGlzIGlzIGEgVmltIGtleXdvcmQK ICAgICAgICAgICAgICAgICAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gZm9ybWF0 KCIgJXNbXSIsbGlqKQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg ICAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3JdID0gZm9ybWF0KCIgJXMiLGxpaikKICAg ICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICBqID0gaiArIDEKICAg ICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgciA9IHIgKyAxIDsgcmVzdWx0W3Jd ID0gZW5kbGluZQogICAgICAgICAgICAgICAgaSA9IGkgKyBuCiAgICAgICAgICAgIGVuZAog ICAgICAgIGVuZAogICAgICAgIGlvLnNhdmVkYXRhKGZpbGUuYWRkc3VmZml4KGZpbGVuYW1l LCJ2aW0iKSxjb25jYXQocmVzdWx0KSkKICAgIGVsc2UKICAgICAgICBvcy5yZW1vdmUoZmls ZW5hbWUpCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBmbHVzaGVycy52aW0oY29sbGVjdGVkKQog ICAgbG9jYWwgZGF0YSA9IHsgfQogLS0gZm9yIGludGVyZmFjZSwgd2hhdGV2ZXIgaW4gbmV4 dCwgY29sbGVjdGVkIGRvCiAtLSAgICAgZGF0YVtpbnRlcmZhY2VdID0gd2hhdGV2ZXIuY29t bWFuZHMKIC0tIGVuZAogICAgbG9jYWwgZnVuY3Rpb24gYWRkKHRhcmdldCxvcmlnaW4sZmll bGQpCiAgICAgICAgaWYgb3JpZ2luIHRoZW4KICAgICAgICAgICAgbG9jYWwgbGlzdCA9IG9y aWdpbltmaWVsZF0KICAgICAgICAgICAgaWYgbGlzdCB0aGVuCiAgICAgICAgICAgICAgICBm b3IgaT0xLCNsaXN0IGRvCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2xpc3RbaV1dID0g dHJ1ZQogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAog ICAgZW5kCiAgICAtLQogICAgZm9yIGludGVyZmFjZSwgd2hhdGV2ZXIgaW4gbmV4dCwgY29s bGVjdGVkIGRvCiAgICAgICAgbG9jYWwgY29tYmluZWQgPSB7IH0KICAgICAgICBhZGQoY29t YmluZWQsd2hhdGV2ZXIsImNvbW1hbmRzIikKICAgICAgICBhZGQoY29tYmluZWQsd2hhdGV2 ZXIsImVudmlyb25tZW50cyIpCiAgICAgICAgaWYgaW50ZXJmYWNlID09ICJjb21tb24iIHRo ZW4KICAgICAgICAgICAgYWRkKGNvbWJpbmVkLHdoYXRldmVyLCJ0ZXh0bmFtZXMiKQogICAg ICAgICAgICBhZGQoY29tYmluZWQsd2hhdGV2ZXIsIm1hdGhuYW1lcyIpCiAgICAgICAgZW5k CiAgICAgICAgZGF0YVtpbnRlcmZhY2VdID0gc29ydGVka2V5cyhjb21iaW5lZCkKICAgIGVu ZAogICAgLS0KICAgIHZpbWNvbGxlY3QoImNvbnRleHQtZGF0YS1pbnRlcmZhY2VzIiwgImNv bnRleHQiLCAgZGF0YSkKIC0tIHZpbWNvbGxlY3QoImNvbnRleHQtZGF0YS1tZXRhcG9zdCIs ICAgIm1ldGFwb3N0IiwgZG9maWxlKHJlc29sdmVycy5maW5kZmlsZSgibXVsdC1tcHMubHVh IikpKQogICAgdmltY29sbGVjdCgiY29udGV4dC1kYXRhLW1ldGFmdW4iLCAgICAibWV0YWZ1 biIsICBkb2ZpbGUocmVzb2x2ZXJzLmZpbmRmaWxlKCJtdWx0LWZ1bi5sdWEiKSkpCiAgICB2 aW1jb2xsZWN0KCJjb250ZXh0LWRhdGEtY29udGV4dCIsICAgICJjb250ZXh0IiwgIGRvZmls ZShyZXNvbHZlcnMuZmluZGZpbGUoIm11bHQtbG93Lmx1YSIpKSkKICAgIHZpbWNvbGxlY3Qo ImNvbnRleHQtZGF0YS10ZXgiLCAgICAgICAgInRleCIsICAgICAgZG9maWxlKHJlc29sdmVy cy5maW5kZmlsZSgibXVsdC1wcm0ubHVhIikpKQplbmQKCmZ1bmN0aW9uIGZsdXNoZXJzLnJh dyhjb2xsZWN0ZWQpCiAgICBmb3IgaW50ZXJmYWNlLCB3aGF0ZXZlciBpbiBuZXh0LCBjb2xs ZWN0ZWQgZG8KICAgICAgICBsb2NhbCBjb21tYW5kcyAgICAgPSB3aGF0ZXZlci5jb21tYW5k cwogICAgICAgIGxvY2FsIGVudmlyb25tZW50cyA9IHdoYXRldmVyLmVudmlyb25tZW50cwog ICAgICAgIGZvciBpPTEsI2NvbW1hbmRzIGRvCiAgICAgICAgICAgIHJlcG9ydChjb21tYW5k c1tpXSkKICAgICAgICBlbmQKICAgIGVuZAplbmQKCmZ1bmN0aW9uIGZsdXNoZXJzLmRhdGEo Y29sbGVjdGVkKQogICAgcmV0dXJuIGNvbGxlY3RlZCAtLSB0YWJsZS5zYXZlKCJjb250LWVu LWZpbGVuYW1lcy5sdWEiLGNvbGxlY3RlZC5maWxlbmFtZXMpCmVuZAoKbG9jYWwgdGV4dHBh ZGNyZWF0b3IgPSAibXR4LWludGVyZmFjZS10ZXh0cGFkLmx1YSIKCmZ1bmN0aW9uIGZsdXNo ZXJzLnRleHQoY29sbGVjdGVkKQogICAgZm9yIGludGVyZmFjZSwgd2hhdGV2ZXIgaW4gbmV4 dCwgY29sbGVjdGVkIGRvCiAgICAgICAgbG9jYWwgY29tbWFuZHMgICAgID0gd2hhdGV2ZXIu Y29tbWFuZHMKICAgICAgICBsb2NhbCBlbnZpcm9ubWVudHMgPSB3aGF0ZXZlci5lbnZpcm9u bWVudHMKICAgICAgICBsb2NhbCBjLCBjbmFtZSA9IHsgfSwgZm9ybWF0KCJjb250ZXh0LWNv bW1hbmRzLSVzLnR4dCIsaW50ZXJmYWNlKQogICAgICAgIGxvY2FsIGUsIGVuYW1lID0geyB9 LCBmb3JtYXQoImNvbnRleHQtZW52aXJvbm1lbnRzLSVzLnR4dCIsaW50ZXJmYWNlKQogICAg ICAgIHJlcG9ydCgic2F2aW5nICclcyciLGNuYW1lKQogICAgICAgIGZvciBpPTEsI2NvbW1h bmRzIGRvCiAgICAgICAgICAgIGNbI2MrMV0gPSBmb3JtYXQoIlxcJXMiLGNvbW1hbmRzW2ld KQogICAgICAgIGVuZAogICAgICAgIGlvLnNhdmVkYXRhKGNuYW1lLGNvbmNhdChjLCJcbiIp KQogICAgICAgIHJlcG9ydCgic2F2aW5nICclcyciLGVuYW1lKQogICAgICAgIGZvciBpPTEs I2Vudmlyb25tZW50cyBkbwogICAgICAgICAgICBlWyNlKzFdID0gZm9ybWF0KCJcXHN0YXJ0 JXMiLGVudmlyb25tZW50c1tpXSkKICAgICAgICAgICAgZVsjZSsxXSA9IGZvcm1hdCgiXFxz dG9wJXMiLCBlbnZpcm9ubWVudHNbaV0pCiAgICAgICAgZW5kCiAgICAgICAgaW8uc2F2ZWRh dGEoZm9ybWF0KCJjb250ZXh0LWVudmlyb25tZW50cy0lcy50eHQiLGludGVyZmFjZSksY29u Y2F0KGUsIlxuIikpCiAgICBlbmQKZW5kCgpmdW5jdGlvbiBmbHVzaGVycy50ZXh0cGFkKGNv bGxlY3RlZCkKICAgIGZsdXNoZXJzLnRleHQoY29sbGVjdGVkKQogICAgZm9yIGludGVyZmFj ZSwgd2hhdGV2ZXIgaW4gbmV4dCwgY29sbGVjdGVkIGRvCiAgICAgICAgbG9jYWwgY29tbWFu ZHMgICAgID0gd2hhdGV2ZXIuY29tbWFuZHMKICAgICAgICBsb2NhbCBlbnZpcm9ubWVudHMg PSB3aGF0ZXZlci5lbnZpcm9ubWVudHMKICAgICAgICAtLQogICAgICAgIC0tIHBsdWdpbiwg dGhpcyBpcyBhIHJld3JpdGUgb2YgYSBmaWxlIHByb3ZpZGVkIGJ5IEx1a2FzIFByb2NoYXpr YQogICAgICAgIC0tCiAgICAgICAgbG9jYWwgZnVuY3Rpb24gbWVyZ2UodGVtcGxhdGVkYXRh LGRlc3RpbmF0aW9uZGF0YSxjYXRlZ29yaWVzKQogICAgICAgICAgICByZXBvcnQoImxvYWRp bmcgJyVzJyIsdGVtcGxhdGVkYXRhKQogICAgICAgICAgICBsb2NhbCBkYXRhID0gaW8ubG9h ZGRhdGEodGVtcGxhdGVkYXRhKQogICAgICAgICAgICBsb2NhbCBkb25lID0gMAogICAgICAg ICAgICBmb3IgaT0xLCNjYXRlZ29yaWVzIGRvCiAgICAgICAgICAgICAgICBsb2NhbCBjYXRl Z29yeSA9IGNhdGVnb3JpZXNbaV0KICAgICAgICAgICAgICAgIGxvY2FsIGNwYXR0ZXJuID0g IjslcypjYXRlZ29yeTolcyooIiAuLiBjYXRlZ29yeSAuLiAiKSVzKltcblxyXSsiCiAgICAg ICAgICAgICAgICBsb2NhbCBmcGF0dGVybiA9ICI7JXMqZmlsZW5hbWU6JXMqKCIgLi4gIiVT KyIgICAgIC4uICIpJXMqW1xuXHJdKyIKICAgICAgICAgICAgICAgIGRhdGEgPSBnc3ViKGRh dGEsY3BhdHRlcm4uLmZwYXR0ZXJuLGZ1bmN0aW9uKGNhdGVnb3J5LGZpbGVuYW1lKQogICAg ICAgICAgICAgICAgICAgIGxvY2FsIGZvdW5kID0gcmVzb2x2ZXJzLmZpbmRmaWxlKGZpbGVu YW1lKSBvciAiIgogICAgICAgICAgICAgICAgICAgIGxvY2FsIGJsb2IgPSBmb3VuZCB+PSAi IiBhbmQgaW8ubG9hZGRhdGEoZm91bmQpIG9yICIiCiAgICAgICAgICAgICAgICAgICAgaWYg YmxvYiA9PSAiIiAgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQoImNhdGVn b3J5OiAlcywgZmlsZW5hbWU6ICVzLCBub3QgZm91bmQiLGNhdGVnb3J5LGZpbGVuYW1lKQog ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9 IGRvbmUgKyAxCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCgiY2F0ZWdvcnk6ICVz LCBmaWxlbmFtZTogJXMsIG1lcmdlZCIsY2F0ZWdvcnksZmlsZW5hbWUpCiAgICAgICAgICAg ICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdCgiOyBjYXRl Z29yeTogJXNcbjsgZmlsZW5hbWU6ICVzXG4lc1xuXG4iLGNhdGVnb3J5LGZpbGVuYW1lLGJs b2IpCiAgICAgICAgICAgICAgICBlbmQpCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBp ZiBkb25lID4gMCB0aGVuCiAgICAgICAgICAgICAgICByZXBvcnQoInNhdmluZyAnJXMnICgl cyBmaWxlcyBtZXJnZWQpIixkZXN0aW5hdGlvbmRhdGEsZG9uZSkKICAgICAgICAgICAgICAg IGlvLnNhdmVkYXRhKGRlc3RpbmF0aW9uZGF0YSxkYXRhKQogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICByZXBvcnQoInNraXBwaW5nICclcycgKG5vIGZpbGVzIG1lcmdlZCki LGRlc3RpbmF0aW9uZGF0YSkKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAgICAg bG9jYWwgdGVtcGxhdGVuYW1lID0gInRleHRwYWQtY29udGV4dC10ZW1wbGF0ZS50eHQiCiAg ICAgICAgbG9jYWwgdGVtcGxhdGVkYXRhID0gcmVzb2x2ZXJzLmZpbmRmaWxlKHRlbXBsYXRl bmFtZSkgb3IgIiIKICAgICAgICBpZiB0ZW1wbGF0ZWRhdGEgPT0gIiIgdGhlbgogICAgICAg ICAgICByZXBvcnQoInVuYWJsZSB0byBsb2NhdGUgdGVtcGxhdGUgJyVzJyIsdGVtcGxhdGVu YW1lKQogICAgICAgIGVsc2UKICAgICAgICAgICAgbWVyZ2UodGVtcGxhdGVkYXRhLCAiY29u dGV4dC5zeW4iLCAgICAgICB7ICJ0ZXggY29tbWFuZHMiLCJjb250ZXh0IGNvbW1hbmRzIiB9 KQogICAgICAgICAgICBpZiBlbnZpcm9ubWVudC5hcmd1bWVudCgidGV4dHBhZCIpID09ICJs YXRleCIgdGhlbgogICAgICAgICAgICAgICAgbWVyZ2UodGVtcGxhdGVkYXRhLCAiY29udGV4 dC1sYXRleC5zeW4iLCB7ICJ0ZXggY29tbWFuZHMiLCJjb250ZXh0IGNvbW1hbmRzIiwgImxh dGV4IGNvbW1hbmRzIiB9KQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBs b2NhbCByID0geyB9CiAgICAgICAgbG9jYWwgYyA9IGlvLmxvYWRkYXRhKCJjb250ZXh0LWNv bW1hbmRzLWVuLnR4dCIpICAgICBvciAiIiAtLSBzaXRzIG9uIHRoZSBzYW1lIHBhdGgKICAg ICAgICBsb2NhbCBlID0gaW8ubG9hZGRhdGEoImNvbnRleHQtZW52aXJvbm1lbnRzLWVuLnR4 dCIpIG9yICIiIC0tIHNpdHMgb24gdGhlIHNhbWUgcGF0aAogICAgICAgIGZvciBzIGluIGdt YXRjaChjLCJcXCguLSklcyIpIGRvCiAgICAgICAgICAgIHJbI3IrMV0gPSBmb3JtYXQoIlxu IVRFWFQ9JXNcblxcJXNcbiEiLHMscykKICAgICAgICBlbmQKICAgICAgICBmb3IgcyBpbiBn bWF0Y2goZSwiXFxzdGFydCguLSklcytcXHN0b3AoLi0pIikgZG8KICAgICAgICAgICAgclsj cisxXSA9IGZvcm1hdCgiXG4hVEVYVD0lcyAoc3RhcnQvc3RvcClcblxcc3RhcnQlcyBcXF5c XHN0b3Alc1xuISIscyxzLHMpCiAgICAgICAgZW5kCiAgICAgICAgc29ydChyKQogICAgICAg IGluc2VydChyLDEsIiFUQ0w9NTk3LFxuIVRJVExFPUNvblRlWHRcbiFTT1JUPU5cbiFDSEFS U0VUPURFRkFVTFQiKQogICAgICAgIGlvLnNhdmVkYXRhKCJjb250ZXh0LnRjbCIsY29uY2F0 KHIsIlxuIikpCiAgICAgICAgLS0gY2xlYW51cAogICAgICAgIG9zLnJlbW92ZSgiY29udGV4 dC1jb21tYW5kcy1lbi50eHQiKQogICAgICAgIG9zLnJlbW92ZSgiY29udGV4dC1lbnZpcm9u bWVudHMtZW4udHh0IikKICAgIGVuZAplbmQKCmZ1bmN0aW9uIHNjcmlwdHMuaW50ZXJmYWNl LmVkaXRvcihlZGl0b3Isc3BsaXQsZm9yY2VkaW50ZXJmYWNlcykKICAgIHJlcXVpcmUoImNo YXItZGVmIikKCiAgICBsb2NhbCBpbnRlcmZhY2VzID0gZm9yY2VkaW50ZXJmYWNlcyBvciBl bnZpcm9ubWVudC5maWxlcyBvciB1c2VyaW50ZXJmYWNlcwogICAgaWYgbm90IGludGVyZmFj ZXMuZW4gdGhlbgogICAgICAgIC0tIGxvYWRlZCBhcyBzY3JpcHQgc28gd2UgaGF2ZSAiY29u dC15ZXMuKiIgYXMgbmFtZQogICAgICAgIGludGVyZmFjZXMgPSB7ICJlbiIgfQogICAgZW5k CiAgICAtLQogLS0gbG9jYWwgZmlsZW5hbWUgPSAiaS1jb250ZXh0LnhtbCIKICAgIGxvY2Fs IGZpbGVuYW1lID0gImNvbnRleHQtZW4ueG1sIgogICAgbG9jYWwgeG1sZmlsZSAgPSByZXNv bHZlcnMuZmluZGZpbGUoZmlsZW5hbWUpIG9yICIiCiAgICBpZiB4bWxmaWxlID09ICIiIHRo ZW4KICAgICAgICByZXBvcnQoInVuYWJsZSB0byBsb2NhdGUgJWEiLGZpbGVuYW1lKQogICAg ICAgIHJldHVybgogICAgZW5kCiAgICAtLQogICAgbG9jYWwgZmlsZW5hbWUgPSAibXVsdC1k ZWYubHVhIgogICAgbG9jYWwgZGVmZmlsZSAgPSByZXNvbHZlcnMuZmluZGZpbGUoZmlsZW5h bWUpIG9yICIiCiAgICBpZiBkZWZmaWxlID09ICIiIHRoZW4KICAgICAgICByZXBvcnQoInVu YWJsZSB0byBsb2NhdGUgJWEiLGZpbGVuYW1lKQogICAgICAgIHJldHVybgogICAgZW5kCiAg ICBsb2NhbCBpbnRlcmZhY2UgPSBkb2ZpbGUoZGVmZmlsZSkKICAgIGlmIG5vdCBpbnRlcmZh Y2Ugb3Igbm90IG5leHQoaW50ZXJmYWNlKSB0aGVuCiAgICAgICAgcmVwb3J0KCJpbnZhbGlk IGZpbGUgJWEiLGZpbGVuYW1lKQogICAgICAgIHJldHVybgogICAgZW5kCiAgICBsb2NhbCB2 YXJpYWJsZXMgPSBpbnRlcmZhY2UudmFyaWFibGVzCiAgICBsb2NhbCBjb25zdGFudHMgPSBp bnRlcmZhY2UuY29uc3RhbnRzCiAgICBsb2NhbCBjb21tYW5kcyAgPSBpbnRlcmZhY2UuY29t bWFuZHMKICAgIGxvY2FsIGVsZW1lbnRzICA9IGludGVyZmFjZS5lbGVtZW50cwogICAgLS0K ICAgIGxvY2FsIGNvbGxlY3RlZCA9IHsgfQogICAgLS0KICAgIHJlcG9ydCgiZ2VuZXJhdGlu ZyBmaWxlcyBmb3IgJWEiLGVkaXRvcikKICAgIHJlcG9ydCgibG9hZGluZyAlYSIseG1sZmls ZSkKICAgIGxvY2FsIHhtbHJvb3QgPSB4bWwubG9hZCh4bWxmaWxlKQogLS0geG1sLmluY2x1 ZGUoeG1scm9vdCwiY2Q6aW50ZXJmYWNlZmlsZSIsImZpbGVuYW1lIix0cnVlLGZ1bmN0aW9u KHMpCiAtLSAgICAgbG9jYWwgZnVsbG5hbWUgPSByZXNvbHZlcnMuZmluZGZpbGUocykKIC0t ICAgICBpZiBmdWxsbmFtZSBhbmQgZnVsbG5hbWUgfj0gIiIgdGhlbgogLS0gICAgICAgICBy ZXBvcnQoImluY2x1ZGluZyAlYSIsZnVsbG5hbWUpCiAtLSAgICAgICAgIHJldHVybiBpby5s b2FkZGF0YShmdWxsbmFtZSkKIC0tICAgICBlbmQKIC0tIGVuZCkKIC0tIGxvY2FsIGRlZmlu aXRpb25zID0geyB9CiAtLSBmb3IgZSBpbiB4bWwuY29sbGVjdGVkKHhtbHJvb3QsImNkOmlu dGVyZmFjZS9jZDpkZWZpbmUiKSBkbwogLS0gICAgIGRlZmluaXRpb25zW2UuYXQubmFtZV0g PSBlLmR0CiAtLSBlbmQKIC0tIGxvY2FsIGZ1bmN0aW9uIHJlc29sdmUocm9vdCkKIC0tICAg ICBmb3IgZSBpbiB4bWwuY29sbGVjdGVkKHJvb3QsIioiKSBkbwogLS0gICAgICAgICBpZiBl LnRnID09ICJyZXNvbHZlIiB0aGVuCiAtLSAgICAgICAgICAgICBsb2NhbCByZXNvbHZlZCA9 IGRlZmluaXRpb25zW2UuYXQubmFtZSBvciAiIl0KIC0tICAgICAgICAgICAgIGlmIHJlc29s dmVkIHRoZW4KIC0tICAgICAgICAgICAgICAgICAtLSB1c2UgcHJvcGVyIHJlcGxhY2UgaGVs cGVyCiAtLSAgICAgICAgICAgICAgICAgZS5fX3BfXy5kdFtlLm5pXSA9IHJlc29sdmVkCiAt LSAgICAgICAgICAgICAgICAgcmVzb2x2ZWQuX19wX18gPSBlLl9fcF9fCiAtLSAgICAgICAg ICAgICAgICAgcmVzb2x2ZShyZXNvbHZlZCkKIC0tICAgICAgICAgICAgIGVuZAogLS0gICAg ICAgICBlbmQKIC0tICAgICBlbmQKIC0tIGVuZAogLS0gcmVzb2x2ZSh4bWxyb290KQoKICAg IC0tIHRvZG86IHVzZSBzZXF1ZW5jZQoKICAgIGZvciBpPTEsI2ludGVyZmFjZXMgZG8KICAg ICAgICBsb2NhbCBpbnRlcmZhY2UgICAgICA9IGludGVyZmFjZXNbaV0KICAgICAgICBsb2Nh bCBpX2NvbW1hbmRzICAgICA9IHsgfQogICAgICAgIGxvY2FsIGlfZW52aXJvbm1lbnRzID0g eyB9CiAgICAgICAgbG9jYWwgc3RhcnQgPSBlbGVtZW50cy5zdGFydFtpbnRlcmZhY2VdIG9y IGVsZW1lbnRzLnN0YXJ0LmVuCiAgICAgICAgbG9jYWwgc3RvcCAgPSBlbGVtZW50cy5zdG9w IFtpbnRlcmZhY2VdIG9yIGVsZW1lbnRzLnN0b3AgLmVuCiAgICAgICAgZm9yIGUgaW4geG1s LmNvbGxlY3RlZCh4bWxyb290LCJjZDppbnRlcmZhY2UvY2Q6Y29tbWFuZCIpIGRvCiAgICAg ICAgICAgIGxvY2FsIGF0ICAgPSBlLmF0CiAgICAgICAgICAgIGxvY2FsIG5hbWUgPSBhdFsi bmFtZSJdIG9yICIiCiAgICAgICAgICAgIGxvY2FsIHR5cGUgPSBhdFsidHlwZSJdCiAgICAg ICAgICAgIGlmIG5hbWUgfj0gIiIgdGhlbgogICAgICAgICAgICAgICAgbG9jYWwgYyA9IGNv bW1hbmRzW25hbWVdCiAgICAgICAgICAgICAgICBsb2NhbCBuID0gYyBhbmQgKGNbaW50ZXJm YWNlXSBvciBjLmVuKSBvciBuYW1lCiAgICAgICAgICAgICAgICBsb2NhbCBzZXF1ZW5jZSA9 IHhtbC5hbGwoZSwiL2NkOnNlcXVlbmNlLyoiKQogICAgICAgICAgICAgICAgaWYgYXQuZ2Vu ZXJhdGVkID09ICJ5ZXMiIHRoZW4KICAgICAgICAgICAgICAgICAgICBmb3IgZSBpbiB4bWwu Y29sbGVjdGVkKGUsIi9jZDppbnN0YW5jZXMvY2Q6Y29uc3RhbnQiKSBkbwogICAgICAgICAg ICAgICAgICAgICAgICBsb2NhbCBuYW1lID0gZS5hdC52YWx1ZQogICAgICAgICAgICAgICAg ICAgICAgICBpZiBuYW1lIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fs IGMgPSB2YXJpYWJsZXNbbmFtZV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fs IG4gPSBjIGFuZCAoY1tpbnRlcmZhY2VdIG9yIGMuZW4pIG9yIG5hbWUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIHNlcXVlbmNlIHRoZW4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsb2NhbCBkb25lID0geyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIGk9MSwjc2VxdWVuY2UgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbG9jYWwgZSA9IHNlcXVlbmNlW2ldCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIGUudGcgPT0gInN0cmluZyIgdGhlbgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgdmFsdWUgPSBlLmF0LnZhbHVlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSB0aGVuCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZVtpXSA9IHZhbHVl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsb2NhbCB0ZyA9IGUudGcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIHRnID09ICJpbnN0YW5jZSIgb3IgdGcgPT0gImluc3RhbmNlOmFzc2ln bm1lbnQiIG9yIHRnID09ICJpbnN0YW5jZTpvd25udW1iZXIiIHRoZW4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lW2ldID0gbmFtZQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBmYWxzZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9uZSB0aGVuCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG4gPSBjb25jYXQoZG9uZSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSB+PSAiZW52aXJvbm1lbnQiIHRo ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpX2NvbW1hbmRzW25dID0gdHJ1 ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmIHNwbGl0IHRoZW4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpX2Vudmlyb25tZW50c1tuXSA9IHRydWUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpX2NvbW1hbmRzW3N0YXJ0Li5uXSA9IHRydWUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpX2NvbW1hbmRzW3N0b3AgLi5uXSA9IHRydWUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAg ICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICAtLSBza2lwIChmb3Igbm93 KQogICAgICAgICAgICAgICAgZWxzZWlmIHR5cGUgfj0gImVudmlyb25tZW50IiB0aGVuCiAg ICAgICAgICAgICAgICAgICAgaV9jb21tYW5kc1tuXSA9IGF0LmZpbGUgb3IgdHJ1ZQogICAg ICAgICAgICAgICAgZWxzZWlmIHNwbGl0IHRoZW4KICAgICAgICAgICAgICAgICAgICBpX2Vu dmlyb25tZW50c1tuXSA9IGF0LmZpbGUgb3IgdHJ1ZQogICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgIC0tIHZhcmlhYmxlcyA/CiAgICAgICAgICAgICAgICAgICAg aV9jb21tYW5kc1tzdGFydC4ubl0gPSBhdC5maWxlIG9yIHRydWUKICAgICAgICAgICAgICAg ICAgICBpX2NvbW1hbmRzW3N0b3AgLi5uXSA9IGF0LmZpbGUgb3IgdHJ1ZQogICAgICAgICAg ICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICAgIGlmIG5leHQo aV9jb21tYW5kcykgdGhlbgogICAgICAgICAgICBjb2xsZWN0ZWRbaW50ZXJmYWNlXSA9IHsK ICAgICAgICAgICAgICAgIGNvbW1hbmRzICAgICA9IGlfY29tbWFuZHMsCiAgICAgICAgICAg ICAgICBlbnZpcm9ubWVudHMgPSBpX2Vudmlyb25tZW50cywKICAgICAgICAgICAgfQogICAg ICAgIGVuZAogICAgZW5kCiAgICAtLQogICAgbG9jYWwgY29tbW9uY29tbWFuZHMgICAgID0g eyB9CiAgICBsb2NhbCBjb21tb25lbnZpcm9ubWVudHMgPSB7IH0KICAgIGZvciBrLCB2IGlu IG5leHQsIGNvbGxlY3RlZCBkbwogICAgICAgIGxvY2FsIGMgPSB2LmNvbW1hbmRzCiAgICAg ICAgbG9jYWwgZSA9IHYuZW52aXJvbm1lbnRzCiAgICAgICAgaWYgayA9PSAiZW4iIHRoZW4K ICAgICAgICAgICAgZm9yIGssIHYgaW4gbmV4dCwgYyBkbwogICAgICAgICAgICAgICAgY29t bW9uY29tbWFuZHNba10gPSB0cnVlCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBmb3Ig aywgdiBpbiBuZXh0LCBlIGRvCiAgICAgICAgICAgICAgICBjb21tb25lbnZpcm9ubWVudHNb a10gPSB0cnVlCiAgICAgICAgICAgIGVuZAogICAgICAgIGVsc2UKICAgICAgICAgICAgZm9y IGssIHYgaW4gbmV4dCwgYyBkbwogICAgICAgICAgICAgICAgaWYgbm90IGNvbW1vbmNvbW1h bmRzW2tdIHRoZW4KICAgICAgICAgICAgICAgICAgICBjb21tb25jb21tYW5kc1trXSA9IG5p bAogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBmb3Ig aywgdiBpbiBuZXh0LCBlIGRvCiAgICAgICAgICAgICAgICBpZiBub3QgY29tbW9uZW52aXJv bm1lbnRzW2tdIHRoZW4KICAgICAgICAgICAgICAgICAgICBjb21tb25lbnZpcm9ubWVudHNb a10gPSBuaWwKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBl bmQKICAgIGVuZAogICAgbG9jYWwgZmlsZW5hbWVzID0geyB9CiAgICBpZiBjb2xsZWN0ZWQu ZW4gdGhlbgogICAgICAgIGZvciBrLCB2IGluIG5leHQsIGNvbGxlY3RlZC5lbi5jb21tYW5k cyBkbwogICAgICAgICAgICBpZiB2IH49IHRydWUgdGhlbgogICAgICAgICAgICAgICAgZmls ZW5hbWVzW2tdID0gdgogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBmb3Ig aywgdiBpbiBuZXh0LCBjb2xsZWN0ZWQuZW4uZW52aXJvbm1lbnRzIGRvCiAgICAgICAgICAg IGlmIHYgfj0gdHJ1ZSB0aGVuCiAgICAgICAgICAgICAgICBmaWxlbmFtZXNba10gPSB2CiAg ICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCiAgICBmb3IgaywgdiBpbiBuZXh0 LCBjb2xsZWN0ZWQgZG8KICAgICAgICBsb2NhbCBjID0gdi5jb21tYW5kcwogICAgICAgIGxv Y2FsIGUgPSB2LmVudmlyb25tZW50cwogICAgICAgIGZvciBrLCB2IGluIG5leHQsIGNvbW1v bmNvbW1hbmRzIGRvCiAgICAgICAgICAgIGNba10gPSBuaWwKICAgICAgICBlbmQKICAgICAg ICBmb3IgaywgdiBpbiBuZXh0LCBjb21tb25lbnZpcm9ubWVudHMgZG8KICAgICAgICAgICAg ZVtrXSA9IG5pbAogICAgICAgIGVuZAogICAgICAgIHYuY29tbWFuZHMgICAgID0gc29ydGVk a2V5cyhjKQogICAgICAgIHYuZW52aXJvbm1lbnRzID0gc29ydGVka2V5cyhlKQogICAgZW5k CiAgICAtLQogICAgbG9jYWwgbWF0aG5hbWVzID0geyB9CiAgICBsb2NhbCB0ZXh0bmFtZXMg PSB7IH0KICAgIGZvciBrLCB2IGluIG5leHQsIGNoYXJhY3RlcnMuZGF0YSBkbwogICAgICAg IGxvY2FsIG5hbWUgPSB2LmNvbnRleHRuYW1lCiAgICAgICAgaWYgbmFtZSB0aGVuCiAgICAg ICAgICAgIHRleHRuYW1lc1tuYW1lXSA9IHRydWUKICAgICAgICBlbmQKICAgICAgICBsb2Nh bCBuYW1lID0gdi5tYXRobmFtZQogICAgICAgIGlmIG5hbWUgdGhlbgogICAgICAgICAgICBt YXRobmFtZXNbbmFtZV0gPSB0cnVlCiAgICAgICAgZW5kCiAgICAgICAgbG9jYWwgc3BlYyA9 IHYubWF0aHNwZWMKICAgICAgICBpZiBzcGVjIHRoZW4KICAgICAgICAgICAgZm9yIGk9MSwj c3BlYyBkbwogICAgICAgICAgICAgICAgbG9jYWwgcyA9IHNwZWNbaV0KICAgICAgICAgICAg ICAgIGxvY2FsIG5hbWUgPSBzLm5hbWUKICAgICAgICAgICAgICAgIGlmIG5hbWUgdGhlbgog ICAgICAgICAgICAgICAgICAgIG1hdGhuYW1lc1tuYW1lXSA9IHRydWUKICAgICAgICAgICAg ICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAogICAgLS0KICAg IGNvbGxlY3RlZC5jb21tb24gPSB7CiAgICAgICAgdGV4dG5hbWVzICAgID0gc29ydGVka2V5 cyh0ZXh0bmFtZXMpLAogICAgICAgIG1hdGhuYW1lcyAgICA9IHNvcnRlZGtleXMobWF0aG5h bWVzKSwKICAgICAgICBjb21tYW5kcyAgICAgPSBzb3J0ZWRrZXlzKGNvbW1vbmNvbW1hbmRz KSwKICAgICAgICBlbnZpcm9ubWVudHMgPSBzb3J0ZWRrZXlzKGNvbW1vbmVudmlyb25tZW50 cyksCiAgICAgICAgZmlsZW5hbWVzICAgID0gZmlsZW5hbWVzLAogICAgfQogICAgLS0KICAg IGxvY2FsIGZsdXNoZXIgPSBmbHVzaGVyc1tlZGl0b3JdCiAgICBpZiBmbHVzaGVyIHRoZW4K ICAgICAgICByZXR1cm4gZmx1c2hlcihjb2xsZWN0ZWQpCiAgICBlbmQKZW5kCgpmdW5jdGlv biBzY3JpcHRzLmludGVyZmFjZS5jaGVjaygpCiAgICBsb2NhbCB4bWxmaWxlID0gcmVzb2x2 ZXJzLmZpbmRmaWxlKCJjb250LWVuLnhtbCIpIG9yICIiCiAgICBpZiB4bWxmaWxlIH49ICIi IHRoZW4KICAgICAgICBsb2NhbCBmID0gaW8ub3BlbigiY29udC1lbi1jaGVjay50ZXgiLCJ3 IikKICAgICAgICBpZiBmIHRoZW4KICAgICAgICAgICAgZjp3cml0ZSgiXFxzdGFydHRleHRc biIpCiAgICAgICAgICAgIGxvY2FsIHggPSB4bWwubG9hZCh4bWxmaWxlKQogICAgICAgICAg ICBmb3IgZSwgZCwgayBpbiB4bWwuZWxlbWVudHMoeCwiL2NkOmludGVyZmFjZS9jZDpjb21t YW5kIikgZG8KICAgICAgICAgICAgICAgIGxvY2FsIGRrID0gZFtrXQogICAgICAgICAgICAg ICAgbG9jYWwgYXQgPSBkay5hdAogICAgICAgICAgICAgICAgaWYgYXQgdGhlbgogICAgICAg ICAgICAgICAgICAgIGxvY2FsIG5hbWUgPSB4bWwuZmlsdGVyKGRrLCJjZDpzZXF1ZW5jZS9j ZDpzdHJpbmcvYXR0cmlidXRlKHZhbHVlKSIpCiAgICAgICAgICAgICAgICAgICAgaWYgbmFt ZSBhbmQgbmFtZSB+PSAiIiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIGF0LnR5 cGUgPT0gImVudmlyb25tZW50IiB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu YW1lID0gInN0YXJ0IiAuLiBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAg ICAgICAgICAgICAgICAgICAgICBmOndyaXRlKGZvcm1hdCgiXFxkb2lmdW5kZWZpbmVkeyVz fXtcXHdyaXRlc3RhdHVze2NoZWNrfXtjb21tYW5kICclcycgaXMgdW5kZWZpbmVkfX1cbiIs bmFtZSxuYW1lKSkKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIGVu ZAogICAgICAgICAgICBlbmQKICAgICAgICAgICAgZjp3cml0ZSgiXFxzdG9wdGV4dFxuIikK ICAgICAgICAgICAgZjpjbG9zZSgpCiAgICAgICAgZW5kCiAgICBlbmQKZW5kCgpmdW5jdGlv biBzY3JpcHRzLmludGVyZmFjZS5ta2lpKCkKICAgIGxvY2FsIGZpbGVuYW1lID0gcmVzb2x2 ZXJzLmZpbmRmaWxlKGVudmlyb25tZW50LmZpbGVzWzFdIG9yICJtdWx0LWRlZi5sdWEiKSBv ciAiIgogICAgaWYgZmlsZW5hbWUgfj0gIiIgdGhlbgogICAgICAgIGxvY2FsIGludGVyZmFj ZSA9IGRvZmlsZShmaWxlbmFtZSkKICAgICAgICBpZiBpbnRlcmZhY2UgYW5kIG5leHQoaW50 ZXJmYWNlKSB0aGVuCiAgICAgICAgICAgIGxvY2FsIHZhcmlhYmxlcywgY29uc3RhbnRzLCBj b21tYW5kcywgZWxlbWVudHMgPSBpbnRlcmZhY2UudmFyaWFibGVzLCBpbnRlcmZhY2UuY29u c3RhbnRzLCBpbnRlcmZhY2UuY29tbWFuZHMsIGludGVyZmFjZS5lbGVtZW50cwogICAgICAg ICAgICBsb2NhbCBmaWxlbmFtZSA9IHJlc29sdmVycy5maW5kZmlsZSgiY29udC1lbi54bWwi KSBvciAiIgogICAgICAgICAgICBsb2NhbCB4bWxkYXRhID0gZmlsZW5hbWUgfj0gIiIgYW5k IChpby5sb2FkZGF0YShmaWxlbmFtZSkgb3IgIiIpCiAgICAgICAgICAgIGxvY2FsIGZ1bmN0 aW9uIGZsdXNoKHRleHJlc3VsdCx4bWxyZXN1bHQsbGFuZ3VhZ2Usd2hhdCx0YWcpCiAgICAg ICAgICAgICAgICBsb2NhbCB0ID0gaW50ZXJmYWNlW3doYXRdCiAgICAgICAgICAgICAgICB0 ZXhyZXN1bHRbI3RleHJlc3VsdCsxXSA9IGZvcm1hdCgiJSUgZGVmaW5pdGlvbnMgZm9yIGlu dGVyZmFjZSAlcyBmb3IgbGFuZ3VhZ2UgJXNcbiUlIix3aGF0LGxhbmd1YWdlKQogICAgICAg ICAgICAgICAgeG1scmVzdWx0WyN4bWxyZXN1bHQrMV0gPSBmb3JtYXQoIlx0PCEtLSBkZWZp bml0aW9ucyBmb3IgaW50ZXJmYWNlICVzIGZvciBsYW5ndWFnZSAlcyAtLT5cbiIsd2hhdCxs YW5ndWFnZSkKICAgICAgICAgICAgICAgIHhtbHJlc3VsdFsjeG1scmVzdWx0KzFdID0gZm9y bWF0KCJcdDxjZDolcz4iLHdoYXQpCiAgICAgICAgICAgICAgICBsb2NhbCBzb3J0ZWQgPSBz b3J0ZWRrZXlzKHQpCiAgICAgICAgICAgICAgICBmb3IgaT0xLCNzb3J0ZWQgZG8KICAgICAg ICAgICAgICAgICAgICBsb2NhbCBrZXkgPSBzb3J0ZWRbaV0KICAgICAgICAgICAgICAgICAg ICBsb2NhbCB2ID0gdFtrZXldCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgdmFsdWUgPSB2 W2xhbmd1YWdlXSBvciB2WyJlbiJdCiAgICAgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVl IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KCJ3YXJuaW5nLCBubyB2YWx1 ZSBmb3Iga2V5ICclcycgZm9yIGxhbmd1YWdlICclcyciLGtleSxsYW5ndWFnZSkKICAgICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsIHZhbHVl ID0gdFtrZXldW2xhbmd1YWdlXSBvciB0W2tleV0uZW4KICAgICAgICAgICAgICAgICAgICAg ICAgdGV4cmVzdWx0WyN0ZXhyZXN1bHQrMV0gPSBmb3JtYXQoIlxcc2V0aW50ZXJmYWNlJXN7 JXN9eyVzfSIsdGFnLGtleSx2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgeG1scmVz dWx0WyN4bWxyZXN1bHQrMV0gPSBmb3JtYXQoIlx0XHQ8Y2Q6JXMgbmFtZT0nJXMnIHZhbHVl PSclcycvPiIsdGFnLGtleSx2YWx1ZSkKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAg ICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgeG1scmVzdWx0WyN4bWxyZXN1bHQrMV0g PSBmb3JtYXQoIlx0PC9jZDolcz5cbiIsd2hhdCkKICAgICAgICAgICAgZW5kCiAgICAgICAg ICAgIGxvY2FsIGZ1bmN0aW9uIHJlcGxhY2Uoc3RyLCBlbGVtZW50LCBhdHRyaWJ1dGUsIGNh dGVnb3J5LCBvdGhlcmNhdGVnb3J5LCBsYW5ndWFnZSkKICAgICAgICAgICAgICAgIHJldHVy biBzdHI6Z3N1Yihmb3JtYXQoIig8JXNbXj5dLSVzPSkoW1wiXCddKShbXlwiXCddLSkoW1wi XCddKSIsZWxlbWVudCxhdHRyaWJ1dGUpLCBmdW5jdGlvbihhLGIsYykKICAgICAgICAgICAg ICAgICAgICBsb2NhbCBjYyA9IGNhdGVnb3J5W2NdCiAgICAgICAgICAgICAgICAgICAgaWYg bm90IGNjIGFuZCBvdGhlcmNhdGVnb3J5IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAg Y2MgPSBvdGhlcmNhdGVnb3J5W2NdCiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAg ICAgICAgICAgICAgaWYgY2MgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBjY2wgPSBj Y1tsYW5ndWFnZV0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2NsIHRoZW4KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIC4uIGIgLi4gY2NsIC4uIGIKICAgICAg ICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGEgLi4gYiAuLiBjIC4uIGIKICAgICAgICAgICAgICAgIGVu ZCkKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC0tIHdlIGNvdWxkIGp1c3QgcmVwbGFj ZSBhdHRyaWJ1dGVzCiAgICAgICAgICAgIGZvciBsYW5ndWFnZSwgXyBpbiBuZXh0LCBjb21t YW5kcy5zZXR1cGxheW91dCBkbwogICAgICAgICAgICAgICAgLS0ga2V5d29yZCBmaWxlcwog ICAgICAgICAgICAgICAgbG9jYWwgdGV4cmVzdWx0LCB4bWxyZXN1bHQgPSB7IH0sIHsgfQog ICAgICAgICAgICAgICAgdGV4cmVzdWx0WyN0ZXhyZXN1bHQrMV0gPSBmb3JtYXQoIiUlIHRo aXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCwgZG9uJ3QgZWRpdCB0aGlzIGZpbGVcbiUlIikK ICAgICAgICAgICAgICAgIHhtbHJlc3VsdFsjeG1scmVzdWx0KzFdID0gZm9ybWF0KCI8P3ht bCB2ZXJzaW9uPScxLjAnPz5cbiIsdGFnKQogICAgICAgICAgICAgICAgeG1scmVzdWx0WyN4 bWxyZXN1bHQrMV0gPSBmb3JtYXQoIjxjZDppbnRlcmZhY2UgeG1sbnM6Y2Q9J2h0dHA6Ly93 d3cucHJhZ21hLWFkZS5jb20vY29tbWFuZHMnIG5hbWU9J2NvbnRleHQnIGxhbmd1YWdlPScl cycgdmVyc2lvbj0nMjAwOC4xMC4yMSAxOTo0Mic+XG4iLGxhbmd1YWdlKQogICAgICAgICAg ICAgICAgZmx1c2godGV4cmVzdWx0LHhtbHJlc3VsdCxsYW5ndWFnZSwidmFyaWFibGVzIiwi dmFyaWFibGUiKQogICAgICAgICAgICAgICAgZmx1c2godGV4cmVzdWx0LHhtbHJlc3VsdCxs YW5ndWFnZSwiY29uc3RhbnRzIiwiY29uc3RhbnQiKQogICAgICAgICAgICAgICAgZmx1c2go dGV4cmVzdWx0LHhtbHJlc3VsdCxsYW5ndWFnZSwiZWxlbWVudHMiLCAiZWxlbWVudCIpCiAg ICAgICAgICAgICAgICBmbHVzaCh0ZXhyZXN1bHQseG1scmVzdWx0LGxhbmd1YWdlLCJjb21t YW5kcyIsICJjb21tYW5kIikKICAgICAgICAgICAgICAgIHRleHJlc3VsdFsjdGV4cmVzdWx0 KzFdID0gZm9ybWF0KCIlJVxuXFxlbmRpbnB1dCIpCiAgICAgICAgICAgICAgICB4bWxyZXN1 bHRbI3htbHJlc3VsdCsxXSA9IGZvcm1hdCgiPC9jZDppbnRlcmZhY2U+IikKICAgICAgICAg ICAgICAgIGxvY2FsIHRleGZpbGVuYW1lID0gZm9ybWF0KCJtdWx0LSVzLm1raWkiLGxhbmd1 YWdlKQogICAgICAgICAgICAgICAgbG9jYWwgeG1sZmlsZW5hbWUgPSBmb3JtYXQoImtleXMt JXMueG1sIixsYW5ndWFnZSkKICAgICAgICAgICAgICAgIGlvLnNhdmVkYXRhKHRleGZpbGVu YW1lLGNvbmNhdCh0ZXhyZXN1bHQsIlxuIikpCiAgICAgICAgICAgICAgICByZXBvcnQoInNh dmluZyBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgJyVzJyIsdGV4ZmlsZW5hbWUpCiAgICAgICAg ICAgICAgICBpby5zYXZlZGF0YSh4bWxmaWxlbmFtZSxjb25jYXQoeG1scmVzdWx0LCJcbiIp KQogICAgICAgICAgICAgICAgcmVwb3J0KCJzYXZpbmcgaW50ZXJmYWNlIHRyYW5zbGF0aW9u cyAnJXMnIix4bWxmaWxlbmFtZSkKICAgICAgICAgICAgICAgIC0tIG1raWkgZmlsZXMKICAg ICAgICAgICAgICAgIGlmIGxhbmd1YWdlIH49ICJlbiIgYW5kIHhtbGRhdGEgfj0gIiIgdGhl bgogICAgICAgICAgICAgICAgICAgIGxvY2FsIG5ld2RhdGEgPSB4bWxkYXRhOmdzdWIoIig8 Y2Q6aW50ZXJmYWNlLipsYW5ndWFnZT0uKWVuKC4pIiwiJTEiLi5sYW5ndWFnZS4uIiUyIiwx KQogICAgICAgICAgICAgICAgIC0tIG5ld2RhdGEgPSByZXBsYWNlKG5ld2RhdGEsICdjZDpj b21tYW5kJywgJ25hbWUnLCBpbnRlcmZhY2UuY29tbWFuZHMsIGludGVyZmFjZS5lbGVtZW50 cywgbGFuZ3VhZ2UpCiAgICAgICAgICAgICAgICAgICAgbmV3ZGF0YSA9IHJlcGxhY2UobmV3 ZGF0YSwgJ2NkOnN0cmluZycsICd2YWx1ZScsIGludGVyZmFjZS5jb21tYW5kcywgaW50ZXJm YWNlLmVsZW1lbnRzLCBsYW5ndWFnZSkKICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0g cmVwbGFjZShuZXdkYXRhLCAnY2Q6dmFyaWFibGUnICwgJ3ZhbHVlJywgaW50ZXJmYWNlLnZh cmlhYmxlcywgbmlsLCBsYW5ndWFnZSkKICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0g cmVwbGFjZShuZXdkYXRhLCAnY2Q6cGFyYW1ldGVyJywgJ25hbWUnLCBpbnRlcmZhY2UuY29u c3RhbnRzLCBuaWwsIGxhbmd1YWdlKQogICAgICAgICAgICAgICAgICAgIG5ld2RhdGEgPSBy ZXBsYWNlKG5ld2RhdGEsICdjZDpjb25zdGFudCcsICd0eXBlJywgaW50ZXJmYWNlLnZhcmlh YmxlcywgbmlsLCBsYW5ndWFnZSkKICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0gcmVw bGFjZShuZXdkYXRhLCAnY2Q6dmFyaWFibGUnLCAndHlwZScsIGludGVyZmFjZS52YXJpYWJs ZXMsIG5pbCwgbGFuZ3VhZ2UpCiAgICAgICAgICAgICAgICAgICAgbmV3ZGF0YSA9IHJlcGxh Y2UobmV3ZGF0YSwgJ2NkOmluaGVyaXQnLCAnbmFtZScsIGludGVyZmFjZS5jb21tYW5kcywg aW50ZXJmYWNlLmVsZW1lbnRzLCBsYW5ndWFnZSkKICAgICAgICAgICAgICAgICAgICBsb2Nh bCB4bWxmaWxlbmFtZSA9IGZvcm1hdCgiY29udC0lcy54bWwiLGxhbmd1YWdlKQogICAgICAg ICAgICAgICAgICAgIGlvLnNhdmVkYXRhKHhtbGZpbGVuYW1lLG5ld2RhdGEpCiAgICAgICAg ICAgICAgICAgICAgcmVwb3J0KCJzYXZpbmcgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gJyVz JyIseG1sZmlsZW5hbWUpCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIC0t IG1raXYgaXMgZ2VuZXJhdGVkIG90aGVyd2lzZQogICAgICAgICAgICBlbmQKICAgICAgICBl bmQKICAgIGVuZAplbmQKCmZ1bmN0aW9uIHNjcmlwdHMuaW50ZXJmYWNlLnByZXByb2Nlc3Mo KQogICAgcmVxdWlyZSgibHVhdC1tYWMiKQoKICAgIGxvY2FsIG5ld3N1ZmZpeCA9IGVudmly b25tZW50LmFyZ3VtZW50KCJzdWZmaXgiKSBvciAibG9nIgogICAgbG9jYWwgZm9yY2UgPSBl bnZpcm9ubWVudC5hcmd1bWVudCgiZm9yY2UiKQogICAgZm9yIGk9MSwjZW52aXJvbm1lbnQu ZmlsZXMgZG8KICAgICAgICBsb2NhbCBvbGRuYW1lID0gZW52aXJvbm1lbnQuZmlsZXNbaV0K ICAgICAgICBsb2NhbCBuZXduYW1lID0gZmlsZS5yZXBsYWNlc3VmZml4KG9sZG5hbWUsbmV3 c3VmZml4KQogICAgICAgIGlmIG9sZG5hbWUgPT0gbmV3bmFtZSB0aGVuCiAgICAgICAgICAg IHJlcG9ydCgic2tpcHBpbmcgJyVzJyBiZWNhdXNlIG9sZCBhbmQgbmV3IG5hbWUgYXJlIHRo ZSBzYW1lIixvbGRuYW1lKQogICAgICAgIGVsc2VpZiBpby5leGlzdHMobmV3bmFtZSkgYW5k IG5vdCBmb3JjZSB0aGVuCiAgICAgICAgICAgIHJlcG9ydCgic2tpcHBpbmcgJyVzJyBiZWNh dXNlIG5ldyBmaWxlIGV4aXN0cywgdXNlIC0tZm9yY2UiLG9sZG5hbWUpCiAgICAgICAgZWxz ZQogICAgICAgICAgICByZXBvcnQoInByb2Nlc3NpbmcgJyVzJyBpbnRvICclcyciLG9sZG5h bWUsbmV3bmFtZSkKICAgICAgICAgICAgaW8uc2F2ZWRhdGEobmV3bmFtZSxyZXNvbHZlcnMu bWFjcm9zLnByZXByb2Nlc3NlZChpby5sb2FkZGF0YShvbGRuYW1lKSkpCiAgICAgICAgZW5k CiAgICBlbmQKZW5kCgpmdW5jdGlvbiBzY3JpcHRzLmludGVyZmFjZS5iaWRpKCkKICAgIHJl cXVpcmUoImNoYXItZGVmIikKCiAgICBsb2NhbCBkaXJlY3Rpb25kYXRhICA9IHsgfQogICAg bG9jYWwgbWlycm9yZGF0YSAgICAgPSB7IH0KICAgIGxvY2FsIHRleHRjbGFzc2RhdGEgID0g eyB9CgogICAgbG9jYWwgZGF0YSA9IHsKICAgICAgICBjb21tZW50ICAgID0gImdlbmVyYXRl ZCBieTogbXR4cnVuIC0tIHNjcmlwdCBpbnRlcmZhY2UubHVhIC0tYmlkaSIsCiAgICAgICAg ZGlyZWN0aW9uICA9IGRpcmVjdGlvbnMsCiAgICAgICAgbWlycm9yICAgICA9IG1pcnJvcnMs CiAgICAgICAgdGV4dGNsYXNzICA9IHRleHRjbGFzc2VzLAogICAgfQoKICAgIGZvciBrLCBk IGluIG5leHQsIGNoYXJhY3RlcnMuZGF0YSBkbwogICAgICAgIGxvY2FsIGRpcmVjdGlvbiA9 IGQuZGlyZWN0aW9uCiAgICAgICAgbG9jYWwgbWlycm9yICAgID0gZC5taXJyb3IKICAgICAg ICBsb2NhbCB0ZXh0Y2xhc3MgPSBkLnRleHRjbGFzcwogICAgICAgIGlmIGRpcmVjdGlvbiBh bmQgZGlyZWN0aW9uIH49ICJsIiB0aGVuCiAgICAgICAgICAgIGRpcmVjdGlvbmRhdGFba10g PSBkaXJlY3Rpb24KICAgICAgICBlbmQKICAgICAgICBpZiBtaXJyb3IgdGhlbgogICAgICAg ICAgICBtaXJyb3JkYXRhW2tdID0gbWlycm9yCiAgICAgICAgZW5kCiAgICAgICAgaWYgdGV4 dGNsYXNzIHRoZW4KICAgICAgICAgICAgdGV4dGNsYXNzZGF0YVtrXSA9IHRleHRjbGFzcwog ICAgICAgIGVuZAogICAgZW5kCgogICAgbG9jYWwgZmlsZW5hbWUgPSAic2NpdGUtY29udGV4 dC1kYXRhLWJpZGkubHVhIgoKICAgIHJlcG9ydCgic2F2aW5nICVhIixmaWxlbmFtZSkKICAg IHRhYmxlLnNhdmUoZmlsZW5hbWUsZGF0YSkKZW5kCgpmdW5jdGlvbiBzY3JpcHRzLmludGVy ZmFjZS50b3V0ZigpCiAgICBsb2NhbCBmaWxlbmFtZSA9IGVudmlyb25tZW50LmZpbGVzWzFd CiAgICBpZiBmaWxlbmFtZSB0aGVuCiAgICAgICAgcmVxdWlyZSgiY2hhci1kZWYiKQogICAg ICAgIGxvY2FsIGNvbnRleHRuYW1lcyA9IHsgfQogICAgICAgIGZvciB1bmljb2RlLCBkYXRh IGluIG5leHQsIGNoYXJhY3RlcnMuZGF0YSBkbwogICAgICAgICAgICBsb2NhbCBjb250ZXh0 bmFtZSA9IGRhdGEuY29udGV4dG5hbWUKICAgICAgICAgICAgaWYgY29udGV4dG5hbWUgdGhl bgogICAgICAgICAgICAgICAgY29udGV4dG5hbWVzW2NvbnRleHRuYW1lXSA9IHV0Zi5jaGFy KHVuaWNvZGUpCiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBjb250ZXh0bmFtZXMudXVt bGF1dCA9IGNvbnRleHRuYW1lcy51ZGlhZXJlc2lzCiAgICAgICAgICAgIGNvbnRleHRuYW1l cy5VdW1sYXV0ID0gY29udGV4dG5hbWVzLlVkaWFlcmVzaXMKICAgICAgICAgICAgY29udGV4 dG5hbWVzLm91bWxhdXQgPSBjb250ZXh0bmFtZXMub2RpYWVyZXNpcwogICAgICAgICAgICBj b250ZXh0bmFtZXMuT3VtbGF1dCA9IGNvbnRleHRuYW1lcy5PZGlhZXJlc2lzCiAgICAgICAg ICAgIGNvbnRleHRuYW1lcy5hdW1sYXV0ID0gY29udGV4dG5hbWVzLmFkaWFlcmVzaXMKICAg ICAgICAgICAgY29udGV4dG5hbWVzLkF1bWxhdXQgPSBjb250ZXh0bmFtZXMuQWRpYWVyZXNp cwogICAgICAgIGVuZAogICAgICAgIHJlcG9ydCgibG9hZGluZyAlYSIsZmlsZW5hbWUpCiAg ICAgICAgbG9jYWwgc3RyID0gaW8ubG9hZGRhdGEoZmlsZW5hbWUpIG9yICIiCiAgICAgICAg bG9jYWwgZG9uZSA9IHsgfQogICAgICAgIHN0ciA9IGdzdWIoc3RyLCIoXFwpKFthLXpBLVpd W2EtekEtWl1bYS16QS1aXSspKCVzKikiLCBmdW5jdGlvbihiLHMsYSkKICAgICAgICAgICAg bG9jYWwgY24gPSBjb250ZXh0bmFtZXNbc10KICAgICAgICAgICAgaWYgY24gdGhlbgogICAg ICAgICAgICAgICAgZG9uZVtzXSA9IChkb25lW3NdIG9yIDApICsgMQogICAgICAgICAgICAg ICAgcmV0dXJuIGNuCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGRvbmVbc10g PSAoZG9uZVtzXSBvciAwKSAtIDEKICAgICAgICAgICAgICAgIHJldHVybiBiIC4uIHMgLi4g YQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQpCiAgICAgICAgZm9yIGssIHYgaW4gdGFi bGUuc29ydGVkcGFpcnMoZG9uZSkgZG8KICAgICAgICAgICAgaWYgdiA+IDAgdGhlbgogICAg ICAgICAgICAgICAgcmVwb3J0KCIrICU1aSA6ICVzID0+ICVzIix2LGssY29udGV4dG5hbWVz W2tdKQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXBvcnQoIi0gJTVpIDog JXMiLC12LGssY29udGV4dG5hbWVzW2tdKQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQK ICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lIC4uICIudG91dGYiCiAgICAgICAgcmVwb3J0 KCJzYXZpbmcgJWEiLGZpbGVuYW1lKQogICAgICAgIGlvLnNhdmVkYXRhKGZpbGVuYW1lLHN0 cikKICAgIGVuZAplbmQKCmZ1bmN0aW9uIHNjcmlwdHMuaW50ZXJmYWNlLm1lYW5pbmcoKQog ICAgbG9jYWwgcnVubmVyICA9ICJtdHhydW4gLS1zaWxlbnQgLS1zY3JpcHQgY29udGV4dCAt LWV4dHJhPW1lYW5pbmcgLS1vbmNlIC0tbm9jb25zb2xlIC0tbm9zdGF0aXN0aWNzIgogICAg bG9jYWwgcGF0dGVybiA9IGVudmlyb25tZW50LmFyZ3VtZW50cy5wYXR0ZXJuCiAgICBsb2Nh bCBmaWxlcyAgID0gZW52aXJvbm1lbnQuZmlsZXMKICAgIGlmIHR5cGUocGF0dGVybikgPT0g InN0cmluZyIgdGhlbgogICAgICAgIHJ1bm5lciA9IHJ1bm5lciAuLiAnIC0tcGF0dGVybj0i JyAuLiBwYXR0ZXJuIC4uICciJwogICAgZWxzZWlmIGZpbGVzIGFuZCAjZmlsZXMgPiAwIHRo ZW4KICAgICAgICBmb3IgaT0xLCNmaWxlcyBkbwogICAgICAgICAgICBydW5uZXIgPSBydW5u ZXIgLi4gJyAiJyAuLiBmaWxlc1tpXSAuLiAnIicKICAgICAgICBlbmQKICAgIGVsc2UKICAg ICAgICByZXR1cm4KICAgIGVuZAogICAgbG9jYWwgciA9IG9zLnJlc3VsdG9mKHJ1bm5lcikK ICAgIGlmIHR5cGUocikgPT0gInN0cmluZyIgdGhlbgogICAgICAgIHIgPSBnc3ViKHIsIl4u LShtZWFuaW5nJXMrPikiLCJcbiUxIikKICAgICAgICBwcmludChyKQogICAgZW5kCmVuZAoK ZnVuY3Rpb24gc2NyaXB0cy5pbnRlcmZhY2UudG9rZW5zKCkKICAgIGxvY2FsIHJ1bm5lciAg PSAibXR4cnVuIC0tc2lsZW50IC0tc2NyaXB0IGNvbnRleHQgLS1leHRyYT1tZWFuaW5nIC0t dG9rZW5zIC0tb25jZSAtLW5vY29uc29sZSAtLW5vc3RhdGlzdGljcyIKICAgIGxvY2FsIHBh dHRlcm4gPSBlbnZpcm9ubWVudC5hcmd1bWVudHMucGF0dGVybgogICAgbG9jYWwgZmlsZXMg ICA9IGVudmlyb25tZW50LmZpbGVzCiAgICBpZiB0eXBlKHBhdHRlcm4pID09ICJzdHJpbmci IHRoZW4KICAgICAgICBydW5uZXIgPSBydW5uZXIgLi4gJyAtLXBhdHRlcm49IicgLi4gcGF0 dGVybiAuLiAnIicKICAgIGVsc2VpZiBmaWxlcyBhbmQgI2ZpbGVzID4gMCB0aGVuCiAgICAg ICAgZm9yIGk9MSwjZmlsZXMgZG8KICAgICAgICAgICAgcnVubmVyID0gcnVubmVyIC4uICcg IicgLi4gZmlsZXNbaV0gLi4gJyInCiAgICAgICAgZW5kCiAgICBlbHNlCiAgICAgICAgcmV0 dXJuCiAgICBlbmQKICAgIGxvY2FsIHIgPSBvcy5yZXN1bHRvZihydW5uZXIpCiAgICBpZiB0 eXBlKHIpID09ICJzdHJpbmciIHRoZW4KICAgICAgICByID0gZ3N1YihyLCJeLi0odG9rZW5z JXMrPikiLCJcbiUxIikKICAgICAgICBwcmludChyKQogICAgZW5kCmVuZAoKbG9jYWwgZWEg PSBlbnZpcm9ubWVudC5hcmd1bWVudAoKaWYgZWEoIm1raWkiKSB0aGVuCiAgICBzY3JpcHRz LmludGVyZmFjZS5ta2lpKCkKZWxzZWlmIGVhKCJwcmVwcm9jZXNzIikgdGhlbgogICAgc2Ny aXB0cy5pbnRlcmZhY2UucHJlcHJvY2VzcygpCmVsc2VpZiBlYSgibWVhbmluZyIpIHRoZW4K ICAgIHNjcmlwdHMuaW50ZXJmYWNlLm1lYW5pbmcoKQplbHNlaWYgZWEoInRva2VucyIpIHRo ZW4KICAgIHNjcmlwdHMuaW50ZXJmYWNlLnRva2VucygpCmVsc2VpZiBlYSgidG91dGYiKSB0 aGVuCiAgICBzY3JpcHRzLmludGVyZmFjZS50b3V0ZigpCmVsc2VpZiBlYSgiYmlkaSIpIHRo ZW4KICAgIHNjcmlwdHMuaW50ZXJmYWNlLmJpZGkoKQplbHNlaWYgZWEoImNoZWNrIikgdGhl bgogICAgc2NyaXB0cy5pbnRlcmZhY2UuY2hlY2soKQplbHNlaWYgZWEoInNjaXRlIikgb3Ig ZWEoImJiZWRpdCIpIG9yIGVhKCJqZWRpdCIpIG9yIGVhKCJwdWxzYXIiKSBvciBlYSgidGV4 dHBhZCIpIG9yIGVhKCJ2aW0iKSBvciBlYSgidGV4dCIpIG9yIGVhKCJyYXciKSB0aGVuCiAg ICBpZiBlYSgic2NpdGUiKSB0aGVuCiAgICAgICAgc2NyaXB0cy5pbnRlcmZhY2UuZWRpdG9y KCJzY2l0ZSIpCiAgICBlbmQKICAgIGlmIGVhKCJiYmVkaXQiKSB0aGVuCiAgICAgICAgc2Ny aXB0cy5pbnRlcmZhY2UuZWRpdG9yKCJiYmVkaXQiKQogICAgZW5kCiAgICBpZiBlYSgiamVk aXQiKSB0aGVuCiAgICAgICAgc2NyaXB0cy5pbnRlcmZhY2UuZWRpdG9yKCJqZWRpdCIpCiAg ICBlbmQKICAgIGlmIGVhKCJwdWxzYXIiKSB0aGVuCiAgICAgICAgc2NyaXB0cy5pbnRlcmZh Y2UuZWRpdG9yKCJwdWxzYXIiKQogICAgZW5kCiAgICBpZiBlYSgidGV4dHBhZCIpIHRoZW4K ICAgICAgICBzY3JpcHRzLmludGVyZmFjZS5lZGl0b3IoInRleHRwYWQiLHRydWUsIHsgImVu IiB9KQogICAgZW5kCiAgICBpZiBlYSgidmltIikgdGhlbgogICAgICAgIHNjcmlwdHMuaW50 ZXJmYWNlLmVkaXRvcigidmltIix0cnVlLCB7ICJlbiIgfSkKICAgIGVuZAogICAgaWYgZWEo InRleHQiKSB0aGVuCiAgICAgICAgc2NyaXB0cy5pbnRlcmZhY2UuZWRpdG9yKCJ0ZXh0IikK ICAgIGVuZAogICAgaWYgZWEoInJhdyIpIHRoZW4KICAgICAgICBzY3JpcHRzLmludGVyZmFj ZS5lZGl0b3IoInJhdyIpCiAgICBlbmQKZWxzZWlmIGVhKCJleHBvcnRoZWxwIikgdGhlbgog ICAgYXBwbGljYXRpb24uZXhwb3J0KGVhKCJleHBvcnRoZWxwIiksZW52aXJvbm1lbnQuZmls ZXNbMV0pCmVsc2UKICAgIGFwcGxpY2F0aW9uLmhlbHAoKQplbmQK --------------xrZuObe4oRMf6zeb0Rcjbh1Q Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ --------------xrZuObe4oRMf6zeb0Rcjbh1Q--