From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4828 invoked by alias); 26 Mar 2012 07:24:14 -0000 Received: (qmail 4818 invoked by uid 22791); 26 Mar 2012 07:24:12 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qc0-f169.google.com (HELO mail-qc0-f169.google.com) (209.85.216.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 26 Mar 2012 07:23:58 +0000 Received: by qcsd16 with SMTP id d16so3512801qcs.0 for ; Mon, 26 Mar 2012 00:23:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-system-of-record:x-gm-message-state; bh=G1vJPBIM236YL9jD8a3QGLuESkzRdb4pFHFbd7HcdTo=; b=gnCNyDxKJBlxuU4yPYD5zd63t5UJakkZTXcNQz0J/20gB+PSX53B9AzZVextpiPQ5D l/wTB1gk2V5XM0Drm/4P7dm/hVplJSDYBAllaBi9e/9/q0kDW9BPW5UJ4FqYmcE7ALAz 5Z/SyQHPOW6y33YL2bjLVVrxfuSQRpQ8d2/K4okE46WnHtBSDG2R/QjWKTCkZ4xsNe9E HwMgUAiIdEgK3RHytmAFXLdqgoaDF9aTWL+VsbRJMnnh8A1sjqDzQWSQzJVFlb/vnDbg 0KQmITYthq65UgEuC0RwmxRmsGYfG9l65d2cb5RB7yaDD2yp2y9HLnspt8W+JtF+YvDz nITw== Received: by 10.224.106.66 with SMTP id w2mr26887733qao.1.1332746637111; Mon, 26 Mar 2012 00:23:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.106.66 with SMTP id w2mr26887729qao.1.1332746637033; Mon, 26 Mar 2012 00:23:57 -0700 (PDT) Received: by 10.224.184.8 with HTTP; Mon, 26 Mar 2012 00:23:56 -0700 (PDT) In-Reply-To: <83haxet7vh.fsf@gnu.org> References: <837gyu17am.fsf@gnu.org> <83haxet7vh.fsf@gnu.org> Date: Mon, 26 Mar 2012 07:24:00 -0000 Message-ID: Subject: Re: [patch 2/2] New 'explore' command Python implementation (with docs) From: Siva Chandra To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf3074afd6e0416804bc204146 X-System-Of-Record: true X-Gm-Message-State: ALoCoQlvsW6Fvb6y+J5lxYYNGb2jYDfR9nfBj9DzJelLKmflKQ+HS3lf749Lc6mA+6d70B+wnYaX6OXdCEpFnMd56Yuroy5ntr7iYpFVwfgegu+eTP86o1B14fmO0lxpo+f+mFdDiBmB+xb2XNhkNBGiRB2waAfJ+g== X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-03/txt/msg00865.txt.bz2 --20cf3074afd6e0416804bc204146 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1802 Thanks Eli, for the review. I have fixed according to your suggestion. Since I have now submitted the patch for Value.referenced_value, I have added features and tests using this. The patch is attached. There is no change to gdb.texinfo except for what Eli has suggested. The ChangeLogs are as follows: Code ChangeLog: 2012-03-26 Siva Chandra Reddy New command 'explore' which helps explore values and types in scope. * NEWS: Add an entry about the new 'explore' command. * data-directory/Makefile.in: Add gdb/command/explore.py * python/lib/gdb/command/explore.py: Implemention of the 'explore' command using the GDB Python API. Docs ChangeLog: 2012-03-26 Siva Chandra Reddy * gdb.texinfo (Examining Data): Document the 'explore' command. Testsuite ChangeLog: 2012-03-26 Siva Chandra Reddy * gdb.python/Makefile.in: Add py-explore to EXECUTABLES * gdb.python/py-explore.c: C program used for testing the new 'explore' command on C constructs. * gdb.python/py-explore.cc: C++ program used for testing the new 'explore' command on C++ constructs. * gdb-python/py-explore.exp: Tests for the new 'explore' command on C constructs. * gdb-python/py-explore-cc.exp: Tests for the new 'explore' command on C++ constructs. Thanks, Siva Chandra On Sat, Mar 24, 2012 at 7:32 PM, Eli Zaretskii wrote: >> Date: Wed, 21 Mar 2012 18:04:31 +0530 >> From: Siva Chandra >> Cc: Eli Zaretskii >> >> +prompted to chose the field you want to explore. =A0Lets say you choose > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ^^^^ > "Let's" > > The doco parts of the patch are OK with the above change. --20cf3074afd6e0416804bc204146 Content-Type: application/octet-stream; name="python_explore_command_patch_v4.text" Content-Disposition: attachment; filename="python_explore_command_patch_v4.text" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h096otvd0 Content-length: 94949 SW5kZXg6IE5FV1MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9ORVdTLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjUwMwpkaWZmIC1jIC1wIC1yMS41MDMgTkVXUwoqKiogTkVXUwkyNSBNYXIg MjAxMiAxMzo0NDowMSAtMDAwMAkxLjUwMwotLS0gTkVXUwkyNiBNYXIgMjAx MiAwNzowMDo1NiAtMDAwMAoqKioqKioqKioqKioqKiogUVByb2dyYW1TaWdu YWxzOgoqKiogMTI5LDEzNCAqKioqCi0tLSAxMjksMTM5IC0tLS0KICAtLWlu aXQtZXZhbC1jb21tYW5kPUNPTU1BTkQsIC1pZXggTGlrZSAtLWV2YWwtY29t bWFuZD1DT01NQU5ELCAtZXggYnV0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4ZWN1dGUgaXQgYmVmb3JlIGxvYWRpbmcgaW5mZXJp b3IuCiAgCisgICAqKiAiZXhwbG9yZSIgYW5kIGl0cyBzdWIgY29tbWFuZHMg ImV4cGxvcmUgdmFsdWUiIGFuZCAiZXhwbG9yZSB0eXBlIgorICAgICAgY2Fu IGJlIHVzZWQgdG8gcmVjdXJyc2l2ZWx5IGV4cGxvcmUgdmFsdWVzIGFuZCB0 eXBlcyBvZgorICAgICAgZXhwcmVzc2lvbnMuICBUaGVzZSBjb21tYW5kcyBh cmUgYXZhaWxhYmxlIG9ubHkgaWYgR0RCIGlzCisgICAgICBjb25maWd1cmVk IHdpdGggJy0td2l0aC1weXRob24nLgorIAogICoqKiBDaGFuZ2VzIGluIEdE QiA3LjQKICAKICAqIEdEQiBub3cgaGFuZGxlcyBhbWJpZ3VvdXMgbGluZXNw ZWNzIG1vcmUgY29uc2lzdGVudGx5OyB0aGUgZXhpc3RpbmcKSW5kZXg6IGRh dGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZGF0YS1kaXJlY3Rvcnkv TWFrZWZpbGUuaW4sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAt YyAtcCAtcjEuMTAgTWFrZWZpbGUuaW4KKioqIGRhdGEtZGlyZWN0b3J5L01h a2VmaWxlLmluCTQgSmFuIDIwMTIgMDg6MTc6MTkgLTAwMDAJMS4xMAotLS0g ZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMjYgTWFyIDIwMTIgMDc6MDA6 NTYgLTAwMDAKKioqKioqKioqKioqKioqIFBZVEhPTl9GSUxFUyA9IFwKKioq IDU4LDY0ICoqKioKICAJZ2RiL3Byb21wdC5weSBcCiAgCWdkYi9jb21tYW5k L19faW5pdF9fLnB5IFwKICAJZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJz LnB5IFwKISAJZ2RiL2NvbW1hbmQvcHJvbXB0LnB5CiAgCiAgRkxBR1NfVE9f UEFTUyA9IFwKICAJInByZWZpeD0kKHByZWZpeCkiIFwKLS0tIDU4LDY1IC0t LS0KICAJZ2RiL3Byb21wdC5weSBcCiAgCWdkYi9jb21tYW5kL19faW5pdF9f LnB5IFwKICAJZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5IFwKISAJ Z2RiL2NvbW1hbmQvcHJvbXB0LnB5IFwKISAJZ2RiL2NvbW1hbmQvZXhwbG9y ZS5weQogIAogIEZMQUdTX1RPX1BBU1MgPSBcCiAgCSJwcmVmaXg9JChwcmVm aXgpIiBcCkluZGV4OiBkb2MvZ2RiLnRleGluZm8KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9kb2MvZ2RiLnRl eGluZm8sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTM2CmRpZmYgLWMgLXAg LXIxLjkzNiBnZGIudGV4aW5mbwoqKiogZG9jL2dkYi50ZXhpbmZvCTIyIE1h ciAyMDEyIDA4OjEwOjQxIC0wMDAwCTEuOTM2Ci0tLSBkb2MvZ2RiLnRleGlu Zm8JMjYgTWFyIDIwMTIgMDc6MDE6MDEgLTAwMDAKKioqKioqKioqKioqKioq IGZpZWxkcyBvZiBhIHN0cnVjdCBvciBhIGNsYXNzIGFyZSBkZWNsYXIKKioq IDcxOTgsNzIwMyAqKioqCi0tLSA3MTk4LDczNTAgLS0tLQogIGNvbW1hbmQg cmF0aGVyIHRoYW4gQGNvZGV7cHJpbnR9LiAgQHhyZWZ7U3ltYm9scywgLEV4 YW1pbmluZyB0aGUgU3ltYm9sCiAgVGFibGV9LgogIAorIEBjaW5kZXggZXhw bG9yaW5nIGhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZXMKKyBAa2luZGV4 IGV4cGxvcmUKKyBBbm90aGVyIHdheSBvZiBleGFtaW5pbmcgdmFsdWVzIG9m IGV4cHJlc3Npb25zIGFuZCB0eXBlIGluZm9ybWF0aW9uIGlzCisgdGhyb3Vn aCB0aGUgUHl0aG9uIGV4dGVuc2lvbiBjb21tYW5kIEBjb2Rle2V4cGxvcmV9 IChhdmFpbGFibGUgb25seSBpZgorIHRoZSBAdmFsdWV7R0RCTn0gYnVpbGQg aXMgY29uZmlndXJlZCB3aXRoIEBjb2Rley0td2l0aC1weXRob259KS4gIEl0 Cisgb2ZmZXJzIGFuIGludGVyYWN0aXZlIHdheSB0byBzdGFydCBhdCB0aGUg aGlnaGVzdCBsZXZlbCAob3IsIHRoZSBtb3N0CisgYWJzdHJhY3QgbGV2ZWwp IG9mIHRoZSBkYXRhIHR5cGUgb2YgYW4gZXhwcmVzc2lvbiAob3IsIHRoZSBk YXRhIHR5cGUKKyBpdHNlbGYpIGFuZCBleHBsb3JlIGFsbCB0aGUgd2F5IGRv d24gdG8gbGVhZiBzY2FsYXIgdmFsdWVzL2ZpZWxkcworIGVtYmVkZGVkIGlu IHRoZSBoaWdoZXIgbGV2ZWwgZGF0YSB0eXBlcy4KKyAKKyBAdGFibGUgQGNv ZGUKKyBAaXRlbSBleHBsb3JlIEB2YXJ7YXJnfQorIEB2YXJ7YXJnfSBpcyBl aXRoZXIgYW4gZXhwcmVzc2lvbiAoaW4gdGhlIHNvdXJjZSBsYW5ndWFnZSks IG9yIGEgdHlwZQorIHZpc2libGUgaW4gdGhlIGN1cnJlbnQgY29udGV4dCBv ZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZC4KKyBAZW5kIHRhYmxlCisg CisgVGhlIHdvcmtpbmcgb2YgdGhlIEBjb2Rle2V4cGxvcmV9IGNvbW1hbmQg Y2FuIGJlIGlsbHVzdHJhdGVkIHdpdGggYW4KKyBleGFtcGxlLiAgSWYgYSBk YXRhIHR5cGUgQGNvZGV7c3RydWN0IENvbXBsZXhTdHJ1Y3R9IGlzIGRlZmlu ZWQgaW4geW91cgorIEMgcHJvZ3JhbSBhcworIAorIEBzbWFsbGV4YW1wbGUK KyBzdHJ1Y3QgU2ltcGxlU3RydWN0CisgQHsKKyAgIGludCBpOworICAgZG91 YmxlIGQ7CisgQH07CisgCisgc3RydWN0IENvbXBsZXhTdHJ1Y3QKKyBAewor ICAgc3RydWN0IFNpbXBsZVN0cnVjdCAqc3NfcDsKKyAgIGludCBhcnJbMTBd OworIEB9OworIEBlbmQgc21hbGxleGFtcGxlCisgCisgQG5vaW5kZW50Cisg Zm9sbG93ZWQgYnkgdmFyaWFibGUgZGVjbGFyYXRpb25zIGFzCisgCisgQHNt YWxsZXhhbXBsZQorIHN0cnVjdCBTaW1wbGVTdHJ1Y3Qgc3MgPSBAeyAxMCwg MS4xMSBAfTsKKyBzdHJ1Y3QgQ29tcGxleFN0cnVjdCBjcyA9IEB7ICZzcywg QHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSBAfSBAfTsKKyBAZW5k IHNtYWxsZXhhbXBsZQorIAorIEBub2luZGVudAorIHRoZW4sIHRoZSB2YWx1 ZSBvZiB0aGUgdmFyaWFibGUgQGNvZGV7Y3N9IGNhbiBiZSBleHBsb3JlZCB1 c2luZyB0aGUKKyBAY29kZXtleHBsb3JlfSBjb21tYW5kIGFzIGZvbGxvd3Mu CisgCisgQHNtYWxsZXhhbXBsZQorIChnZGIpIGV4cGxvcmUgY3MKKyBUaGUg dmFsdWUgb2YgYGNzJyBpcyBhIHN0cnVjdC9jbGFzcyBvZiB0eXBlIGBzdHJ1 Y3QgQ29tcGxleFN0cnVjdCcgd2l0aAorIHRoZSBmb2xsb3dpbmcgZmllbGRz OgorIAorICAgc3NfcCA9IDxFbnRlciAwIHRvIGV4cGxvcmUgdGhpcyBmaWVs ZCBvZiB0eXBlIGBzdHJ1Y3QgU2ltcGxlU3RydWN0IConPgorICAgIGFyciA9 IDxFbnRlciAxIHRvIGV4cGxvcmUgdGhpcyBmaWVsZCBvZiB0eXBlIGBpbnQg WzEwXSc+CisgCisgRW50ZXIgdGhlIGZpZWxkIG51bWJlciBvZiBjaG9pY2U6 CisgQGVuZCBzbWFsbGV4YW1wbGUKKyAKKyBAbm9pbmRlbnQKKyBTaW5jZSB0 aGUgZmllbGRzIG9mIEBjb2Rle2NzfSBhcmUgbm90IHNjYWxhciB2YWx1ZXMs IHlvdSBhcmUgYmVpbmcKKyBwcm9tcHRlZCB0byBjaG9zZSB0aGUgZmllbGQg eW91IHdhbnQgdG8gZXhwbG9yZS4gIExldCdzIHNheSB5b3UgY2hvb3NlCisg dGhlIGZpZWxkIEBjb2Rle3NzX3B9IGJ5IGVudGVyaW5nIEBjb2RlezB9LiAg VGhlbiwgc2luY2UgdGhpcyBmaWVsZCBpcyBhCisgcG9pbnRlciwgeW91IHdp bGwgYmUgYXNrZWQgaWYgaXQgaXMgcG9pbnRpbmcgdG8gYSBzaW5nbGUgdmFs dWUuICBGcm9tCisgdGhlIGRlY2xhcmF0aW9uIG9mIEBjb2Rle2NzfSBhYm92 ZSwgaXQgaXMgaW5kZWVkIHBvaW50aW5nIHRvIGEgc2luZ2xlCisgdmFsdWUs IGhlbmNlIHlvdSBlbnRlciBAY29kZXt5fS4gIElmIHlvdSBlbnRlciBAY29k ZXtufSwgdGhlbiB5b3Ugd2lsbAorIGJlIGFza2VkIGlmIGl0IHdlcmUgcG9p bnRpbmcgdG8gYW4gYXJyYXkgb2YgdmFsdWVzLCBpbiB3aGljaCBjYXNlIHRo aXMKKyBmaWVsZCB3aWxsIGJlIGV4cGxvcmVkIGFzIGlmIGl0IHdlcmUgYW4g YXJyYXkuCisgCisgQHNtYWxsZXhhbXBsZQorIGBjcy5zc19wJyBpcyBhIHBv aW50ZXIgdG8gYSB2YWx1ZSBvZiB0eXBlIGBzdHJ1Y3QgU2ltcGxlU3RydWN0 JworIENvbnRpbnVlIGV4cGxvcmluZyBpdCBhcyBhIHBvaW50ZXIgdG8gYSBz aW5nbGUgdmFsdWUgW3kvbl06IHkKKyBUaGUgdmFsdWUgb2YgYCooY3Muc3Nf cCknIGlzIGEgc3RydWN0L2NsYXNzIG9mIHR5cGUgYHN0cnVjdAorIFNpbXBs ZVN0cnVjdCcgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAKKyAgIGkg PSAxMCAuLiAoVmFsdWUgb2YgdHlwZSBgaW50JykKKyAgIGQgPSAxLjExMDAw MDAwMDAwMDAwMDEgLi4gKFZhbHVlIG9mIHR5cGUgYGRvdWJsZScpCisgCisg UHJlc3MgZW50ZXIgdG8gcmV0dXJuIHRvIHBhcmVudCB2YWx1ZToKKyBAZW5k IHNtYWxsZXhhbXBsZQorIAorIEBub2luZGVudAorIElmIHRoZSBmaWVsZCBA Y29kZXthcnJ9IG9mIEBjb2Rle2NzfSB3YXMgY2hvc2VuIGZvciBleHBsb3Jh dGlvbiBieQorIGVudGVyaW5nIEBjb2RlezF9IGVhcmxpZXIsIHRoZW4gc2lu Y2UgaXQgaXMgYXMgYXJyYXksIHlvdSB3aWxsIGJlCisgcHJvbXB0ZWQgdG8g ZW50ZXIgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBhcnJheSB0 aGF0IHlvdSB3YW50CisgdG8gZXhwbG9yZS4KKyAKKyBAc21hbGxleGFtcGxl CisgYGNzLmFycicgaXMgYW4gYXJyYXkgb2YgYGludCcuCisgRW50ZXIgdGhl IGluZGV4IG9mIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIGV4cGxvcmUgaW4g YGNzLmFycic6IDUKKyAKKyBgKGNzLmFycilbNV0nIGlzIGEgc2NhbGFyIHZh bHVlIG9mIHR5cGUgYGludCcuCisgCisgKGNzLmFycilbNV0gPSA0CisgCisg UHJlc3MgZW50ZXIgdG8gcmV0dXJuIHRvIHBhcmVudCB2YWx1ZTogCisgQGVu ZCBzbWFsbGV4YW1wbGUKKyAKKyBJbiBnZW5lcmFsLCBhdCBhbnkgc3RhZ2Ug b2YgZXhwbG9yYXRpb24sIHlvdSBjYW4gZ28gZGVlcGVyIHRvd2FyZHMgdGhl CisgbGVhZiB2YWx1ZXMgYnkgcmVzcG9uZGluZyB0byB0aGUgcHJvbXB0cyBh cHByb3ByaWF0ZWx5LCBvciBoaXQgdGhlCisgcmV0dXJuIGtleSB0byByZXR1 cm4gdG8gdGhlIGVuY2xvc2luZyBkYXRhIHN0cnVjdHVyZSAodGhlIEBpe2hp Z2hlcn0KKyBsZXZlbCBkYXRhIHN0cnVjdHVyZSkuCisgCisgU2ltaWxhciB0 byBleHBsb3JpbmcgdmFsdWVzLCB5b3UgY2FuIHVzZSB0aGUgQGNvZGV7ZXhw bG9yZX0gY29tbWFuZCB0bworIGV4cGxvcmUgdHlwZXMuICBJbnN0ZWFkIG9m IHNwZWNpZnlpbmcgYSB2YWx1ZSAod2hpY2ggaXMgdHlwaWNhbGx5IGEKKyB2 YXJpYWJsZSBuYW1lIG9yIGFuIGV4cHJlc3Npb24gdmFsaWQgaW4gdGhlIGN1 cnJlbnQgY29udGV4dCBvZiB0aGUKKyBwcm9ncmFtIGJlaW5nIGRlYnVnZ2Vk KSwgeW91IHNwZWNpZnkgYSB0eXBlIG5hbWUuICBJZiB5b3UgY29uc2lkZXIg dGhlCisgc2FtZSBleGFtcGxlIGFzIGFib3ZlLCB5b3VyIGNhbiBleHBsb3Jl IHRoZSB0eXBlCisgQGNvZGV7c3RydWN0IENvbXBsZXhTdHJ1Y3R9IGJ5IHBh c3NpbmcgdGhlIGFyZ3VtZW50CisgQGNvZGV7c3RydWN0IENvbXBsZXhTdHJ1 Y3R9IHRvIHRoZSBAY29kZXtleHBsb3JlfSBjb21tYW5kLgorIAorIEBzbWFs bGV4YW1wbGUKKyAoZ2RiKSBleHBsb3JlIHN0cnVjdCBDb21wbGV4U3RydWN0 CisgQGVuZCBzbWFsbGV4YW1wbGUKKyAKKyBAbm9pbmRlbnQKKyBCeSByZXNw b25kaW5nIHRvIHRoZSBwcm9tcHRzIGFwcHJvcHJpYXRlbHkgaW4gdGhlIHN1 YnNlcXVlbnQgaW50ZXJhY3RpdmUKKyBzZXNzaW9uLCB5b3UgY2FuIGV4cGxv cmUgdGhlIHR5cGUgQGNvZGV7c3RydWN0IENvbXBsZXhTdHJ1Y3R9IGluIGEK KyBtYW5uZXIgc2ltaWxhciB0byBob3cgdGhlIHZhbHVlIEBjb2Rle2NzfSB3 YXMgZXhwbG9yZWQgaW4gdGhlIGFib3ZlCisgZXhhbXBsZS4KKyAKKyBUaGUg QGNvZGV7ZXhwbG9yZX0gY29tbWFuZCBhbHNvIGhhcyB0d28gc3ViLWNvbW1h bmRzLAorIEBjb2Rle2V4cGxvcmUgdmFsdWV9IGFuZCBAY29kZXtleHBsb3Jl IHR5cGV9LiBUaGUgZm9ybWVyIHN1Yi1jb21tYW5kIGlzCisgYSB3YXkgdG8g ZXhwbGljaXRseSBzcGVjaWZ5IHRoYXQgdmFsdWUgZXhwbG9yYXRpb24gb2Yg dGhlIGFyZ3VtZW50IGlzCisgYmVpbmcgaW52b2tlZCwgd2hpbGUgdGhlIGxh dHRlciBpcyBhIHdheSB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhhdCB0eXBl CisgZXhwbG9yYXRpb24gb2YgdGhlIGFyZ3VtZW50IGlzIGJlaW5nIGludm9r ZWQuCisgCisgQHRhYmxlIEBjb2RlCisgQGl0ZW0gZXhwbG9yZSB2YWx1ZSBA dmFye2V4cHJ9CisgQGNpbmRleCBleHBsb3JlIHZhbHVlCisgVGhpcyBzdWIt Y29tbWFuZCBvZiBAY29kZXtleHBsb3JlfSBleHBsb3JlcyB0aGUgdmFsdWUg b2YgdGhlCisgZXhwcmVzc2lvbiBAdmFye2V4cHJ9IChpZiBAdmFye2V4cHJ9 IGlzIGFuIGV4cHJlc3Npb24gdmFsaWQgaW4gdGhlCisgY3VycmVudCBjb250 ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkKS4gIFRoZSBiZWhh dmlvciBvZiB0aGlzCisgY29tbWFuZCBpcyBpZGVudGljYWwgdG8gdGhhdCBv ZiB0aGUgYmVoYXZpb3Igb2YgdGhlIEBjb2Rle2V4cGxvcmV9CisgY29tbWFu ZCBiZWluZyBwYXNzZWQgdGhlIGFyZ3VtZW50IEB2YXJ7ZXhwcn0uCisgCisg QGl0ZW0gZXhwbG9yZSB0eXBlIEB2YXJ7YXJnfQorIEBjaW5kZXggZXhwbG9y ZSB0eXBlCisgVGhpcyBzdWItY29tbWFuZCBvZiBAY29kZXtleHBsb3JlfSBl eHBsb3JlcyB0aGUgdHlwZSBvZiBAdmFye2FyZ30gKGlmCisgQHZhcnthcmd9 IGlzIGEgdHlwZSB2aXNpYmxlIGluIHRoZSBjdXJyZW50IGNvbnRleHQgb2Yg cHJvZ3JhbSBiZWluZworIGRlYnVnZ2VkKSwgb3IgdGhlIHR5cGUgb2YgdGhl IHZhbHVlL2V4cHJlc3Npb24gQHZhcnthcmd9IChpZiBAdmFye2FyZ30KKyBp cyBhbiBleHByZXNzaW9uIHZhbGlkIGluIHRoZSBjdXJyZW50IGNvbnRleHQg b2YgdGhlIHByb2dyYW0gYmVpbmcKKyBkZWJ1Z2dlZCkuICBJZiBAdmFye2Fy Z30gaXMgYSB0eXBlLCB0aGVuIHRoZSBiZWhhdmlvciBvZiB0aGlzIGNvbW1h bmQgaXMKKyBpZGVudGljYWwgdG8gdGhhdCBvZiB0aGUgQGNvZGV7ZXhwbG9y ZX0gY29tbWFuZCBiZWluZyBwYXNzZWQgdGhlCisgYXJndW1lbnQgQHZhcnth cmd9LiAgSWYgQHZhcnthcmd9IGlzIGFuIGV4cHJlc3Npb24sIHRoZW4gdGhl IGJlaGF2aW9yIG9mCisgdGhpcyBjb21tYW5kIHdpbGwgYmUgaWRlbnRpY2Fs IHRvIHRoYXQgb2YgdGhlIEBjb2Rle2V4cGxvcmV9IGNvbW1hbmQKKyBiZWlu ZyBwYXNzZWQgdGhlIHR5cGUgb2YgQHZhcnthcmd9IGFzIHRoZSBhcmd1bWVu dC4KKyBAZW5kIHRhYmxlCisgCiAgQG1lbnUKICAqIEV4cHJlc3Npb25zOjog ICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zCiAgKiBBbWJpZ3VvdXMgRXhw cmVzc2lvbnM6OiAgICAgICBBbWJpZ3VvdXMgRXhwcmVzc2lvbnMKSW5kZXg6 IHB5dGhvbi9saWIvZ2RiL2NvbW1hbmQvZXhwbG9yZS5weQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiBweXRob24vbGliL2dkYi9jb21tYW5k L2V4cGxvcmUucHkKZGlmZiAtTiBweXRob24vbGliL2dkYi9jb21tYW5kL2V4 cGxvcmUucHkKKioqIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w MDAwCi0tLSBweXRob24vbGliL2dkYi9jb21tYW5kL2V4cGxvcmUucHkJMjYg TWFyIDIwMTIgMDc6MDE6MDIgLTAwMDAKKioqKioqKioqKioqKioqCioqKiAw ICoqKioKLS0tIDEsNzU1IC0tLS0KKyAjIEdEQiAnZXhwbG9yZScgY29tbWFu ZC4KKyAjIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKyAKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICMgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgIworICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAjCisgIyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisg CisgIiIiSW1wbGVtZW50YXRpb24gb2YgdGhlIEdEQiAnZXhwbG9yZScgY29t bWFuZCB1c2luZyB0aGUgR0RCIFB5dGhvbiBBUEkuIiIiCisgCisgaW1wb3J0 IGdkYgorIAorIGNsYXNzIEV4cGxvcmVyKG9iamVjdCk6CisgICAgICIiIklu dGVybmFsIGNsYXNzIHdoaWNoIGludm9rZXMgb3RoZXIgZXhwbG9yZXJzLiIi IgorIAorICAgICAjIFRoaXMgbWFwIGlzIGZpbGxlZCBieSB0aGUgRXhwbG9y ZXIuaW5pdF9lbnYoKSBmdW5jdGlvbgorICAgICB0eXBlX2NvZGVfdG9fZXhw bG9yZXJfbWFwID0geyB9CisgCisgICAgIF9TQ0FMQVJfVFlQRV9MSVNUID0g KAorICAgICAgICAgZ2RiLlRZUEVfQ09ERV9DSEFSLAorICAgICAgICAgZ2Ri LlRZUEVfQ09ERV9JTlQsCisgICAgICAgICBnZGIuVFlQRV9DT0RFX0JPT0ws CisgICAgICAgICBnZGIuVFlQRV9DT0RFX0ZMVCwKKyAgICAgICAgIGdkYi5U WVBFX0NPREVfVk9JRCwKKyAgICAgICAgIGdkYi5UWVBFX0NPREVfRU5VTSwK KyAgICAgKQorIAorICAgICBAc3RhdGljbWV0aG9kCisgICAgIGRlZiBndWFy ZF9leHByKGV4cHIpOgorICAgICAgICAgbGVuZ3RoID0gbGVuKGV4cHIpCisg ICAgICAgICBndWFyZCA9IEZhbHNlCisgCisgICAgICAgICBpZiBleHByWzBd ID09ICcoJyBhbmQgZXhwcltsZW5ndGgtMV0gPT0gJyknOgorICAgICAgICAg ICAgIHBhc3MKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgaSA9IDAK KyAgICAgICAgICAgICB3aGlsZSBpIDwgbGVuZ3RoOgorICAgICAgICAgICAg ICAgICBjID0gZXhwcltpXQorICAgICAgICAgICAgICAgICBpZiAoYyA9PSAn Xycgb3IgKCdhJyA8PSBjIGFuZCBjIDw9ICd6Jykgb3IKKyAgICAgICAgICAg ICAgICAgICAgICgnQScgPD0gYyBhbmQgYyA8PSAnWicpIG9yICgnMCcgPD0g YyBhbmQgYyA8PSAnOScpKToKKyAgICAgICAgICAgICAgICAgICAgIHBhc3MK KyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg IGd1YXJkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAg ICAgICAgICAgICAgICAgaSArPSAxCisgCisgICAgICAgICBpZiBndWFyZDoK KyAgICAgICAgICAgICByZXR1cm4gIigiICsgZXhwciArICIpIgorICAgICAg ICAgZWxzZToKKyAgICAgICAgICAgICByZXR1cm4gZXhwcgorIAorICAgICBA c3RhdGljbWV0aG9kCisgICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFs dWUsIGlzX2NoaWxkKToKKyAgICAgICAgICIiIk1haW4gZnVuY3Rpb24gdG8g ZXhwbG9yZSBhbiBleHByZXNzaW9uIHZhbHVlLgorIAorICAgICAgICAgQXJn dW1lbnRzOgorICAgICAgICAgICAgIGV4cHI6IFRoZSBleHByZXNzaW9uIHN0 cmluZyB0aGF0IGlzIGJlaW5nIGV4cGxvcmVkLgorICAgICAgICAgICAgIHZh bHVlOiBUaGUgZ2RiLlZhbHVlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLgor ICAgICAgICAgICAgIGlzX2NoaWxkOiBCb29sZWFuIHZhbHVlIHRvIGluZGlj YXRlIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgY2hpbGQuCisgICAgICAgICAg ICAgICAgICAgICAgIEFuIGV4cHJlc3Npb24gaXMgYSBjaGlsZCBpZiBpdCBp cyBkZXJpdmVkIGZyb20gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAg ICAgZXhwcmVzc2lvbiBlbnRlcmVkIGJ5IHRoZSB1c2VyLiAgRm9yIGV4YW1w bGUsIGlmIHRoZSB1c2VyCisgICAgICAgICAgICAgICAgICAgICAgIGVudGVy ZWQgYW4gZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gYSBzdHJ1Y3Qs IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBleHBsb3Jpbmcg dGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0LCBpc19jaGlsZCBpcyBzZXQKKyAg ICAgICAgICAgICAgICAgICAgICAgdG8gVHJ1ZSBpbnRlcm5hbGx5LgorIAor ICAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgICBObyByZXR1cm4gdmFs dWUuCisgICAgICAgICAiIiIKKyAgICAgICAgIHR5cGVfY29kZSA9IHZhbHVl LnR5cGUuY29kZQorICAgICAgICAgaWYgdHlwZV9jb2RlIGluIEV4cGxvcmVy LnR5cGVfY29kZV90b19leHBsb3Jlcl9tYXA6CisgICAgICAgICAgICAgZXhw bG9yZXJfY2xhc3MgPSBFeHBsb3Jlci50eXBlX2NvZGVfdG9fZXhwbG9yZXJf bWFwW3R5cGVfY29kZV0KKyAgICAgICAgICAgICB3aGlsZSBleHBsb3Jlcl9j bGFzcy5leHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxkKToKKyAg ICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICBwcmludCAoIkV4cGxvcmVyIGZvciB0eXBlICclcycgbm90IHlldCBh dmFpbGFibGUuXG4iICUKKyAgICAgICAgICAgICAgICAgICAgc3RyKHZhbHVl LnR5cGUpKQorIAorICAgICBAc3RhdGljbWV0aG9kCisgICAgIGRlZiBleHBs b3JlX3R5cGUobmFtZSwgZGF0YXR5cGUsIGlzX2NoaWxkKToKKyAgICAgICAg ICIiIk1haW4gZnVuY3Rpb24gdG8gZXhwbG9yZSBhIGRhdGEgdHlwZS4KKyAK KyAgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAgICBuYW1lOiBUaGUg c3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCB0byB0aGUgZGF0YSB0eXBl IGJlaW5nCisgICAgICAgICAgICAgICAgICAgZXhwbG9yZWQuCisgICAgICAg ICAgICAgZGF0YXR5cGU6IFRoZSBnZGIuVHlwZSB2YWx1ZSBvZiB0aGUgZGF0 YSB0eXBlIGJlaW5nIGV4cGxvcmVkLgorICAgICAgICAgICAgIGlzX2NoaWxk OiBCb29sZWFuIHZhbHVlIHRvIGluZGljYXRlIGlmIHRoZSBuYW1lIGlzIGEg Y2hpbGQuCisgICAgICAgICAgICAgICAgICAgICAgIEEgbmFtZSBpcyBhIGNo aWxkIGlmIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgbWFpbiBuYW1lCisgICAg ICAgICAgICAgICAgICAgICAgIGVudGVyZWQgYnkgdGhlIHVzZXIuICBGb3Ig ZXhhbXBsZSwgaWYgdGhlIHVzZXIgZW50ZXJlZAorICAgICAgICAgICAgICAg ICAgICAgICB0aGUgbmFtZSBvZiBzdHJ1Y3QgdHlwZSwgdGhlbiB3aGVuIGV4 cGxvcmluZyB0aGUgZmllbGRzCisgICAgICAgICAgICAgICAgICAgICAgIG9m IHRoZSBzdHJ1Y3QsIGlzX2NoaWxkIGlzIHNldCB0byBUcnVlIGludGVybmFs bHkuCisgCisgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgIE5vIHJl dHVybiB2YWx1ZS4KKyAgICAgICAgICIiIgorICAgICAgICAgdHlwZV9jb2Rl ID0gZGF0YXR5cGUuY29kZQorICAgICAgICAgaWYgdHlwZV9jb2RlIGluIEV4 cGxvcmVyLnR5cGVfY29kZV90b19leHBsb3Jlcl9tYXA6CisgICAgICAgICAg ICAgZXhwbG9yZXJfY2xhc3MgPSBFeHBsb3Jlci50eXBlX2NvZGVfdG9fZXhw bG9yZXJfbWFwW3R5cGVfY29kZV0KKyAgICAgICAgICAgICB3aGlsZSBleHBs b3Jlcl9jbGFzcy5leHBsb3JlX3R5cGUobmFtZSwgZGF0YXR5cGUsIGlzX2No aWxkKToKKyAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICBwcmludCAoIkV4cGxvcmVyIGZvciB0eXBlICclcycg bm90IHlldCBhdmFpbGFibGUuXG4iICUKKyAgICAgICAgICAgICAgICAgICAg c3RyKGRhdGF0eXBlKSkKKyAKKyAgICAgQHN0YXRpY21ldGhvZAorICAgICBk ZWYgaW5pdF9lbnYoKToKKyAgICAgICAgICIiIkluaXRpYWxpemVzIHRoZSBF eHBsb3JlciBlbnZpcm9ubWVudC4KKyAgICAgICAgIFRoaXMgZnVuY3Rpb24g c2hvdWxkIGJlIGludm9rZWQgYmVmb3JlIHN0YXJ0aW5nIGFueSBleHBsb3Jh dGlvbi4gIElmCisgICAgICAgICBpbnZva2VkIGJlZm9yZSBhbiBleHBsb3Jh dGlvbiwgaXQgbmVlZCBub3QgYmUgaW52b2tlZCBmb3Igc3Vic2VxdWVudAor ICAgICAgICAgZXhwbG9yYXRpb25zLgorICAgICAgICAgIiIiCisgICAgICAg ICBFeHBsb3Jlci50eXBlX2NvZGVfdG9fZXhwbG9yZXJfbWFwID0geworICAg ICAgICAgICAgIGdkYi5UWVBFX0NPREVfQ0hBUiA6IFNjYWxhckV4cGxvcmVy LAorICAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfSU5UIDogU2NhbGFyRXhw bG9yZXIsCisgICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9CT09MIDogU2Nh bGFyRXhwbG9yZXIsCisgICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9GTFQg OiBTY2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgICBnZGIuVFlQRV9DT0RF X1ZPSUQgOiBTY2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgICBnZGIuVFlQ RV9DT0RFX0VOVU0gOiBTY2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgICBn ZGIuVFlQRV9DT0RFX1NUUlVDVCA6IENvbXBvdW5kRXhwbG9yZXIsCisgICAg ICAgICAgICAgZ2RiLlRZUEVfQ09ERV9VTklPTiA6IENvbXBvdW5kRXhwbG9y ZXIsCisgICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9QVFIgOiBQb2ludGVy RXhwbG9yZXIsCisgICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9SRUYgOiBS ZWZlcmVuY2VFeHBsb3JlciwKKyAgICAgICAgICAgICBnZGIuVFlQRV9DT0RF X1RZUEVERUYgOiBUeXBlZGVmRXhwbG9yZXIsCisgICAgICAgICAgICAgZ2Ri LlRZUEVfQ09ERV9BUlJBWSA6IEFycmF5RXhwbG9yZXIKKyAgICAgICAgIH0K KyAKKyAgICAgQHN0YXRpY21ldGhvZAorICAgICBkZWYgaXNfc2NhbGFyX3R5 cGUodHlwZSk6CisgICAgICAgICAiIiJDaGVja3Mgd2hldGhlciBhIHR5cGUg aXMgYSBzY2FsYXIgdHlwZS4KKyAgICAgICAgIEEgdHlwZSBpcyBhIHNjYWxh ciB0eXBlIG9mIGl0cyB0eXBlIGlzCisgICAgICAgICAgICAgZ2RiLlRZUEVf Q09ERV9DSEFSIG9yCisgICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9JTlQg b3IKKyAgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0JPT0wgb3IKKyAgICAg ICAgICAgICBnZGIuVFlQRV9DT0RFX0ZMVCBvcgorICAgICAgICAgICAgIGdk Yi5UWVBFX0NPREVfVk9JRCBvcgorICAgICAgICAgICAgIGdkYi5UWVBFX0NP REVfRU5VTS4KKyAKKyAgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAg ICB0eXBlOiBUaGUgdHlwZSB0byBiZSBjaGVja2VkLgorIAorICAgICAgICAg UmV0dXJuczoKKyAgICAgICAgICAgICAnVHJ1ZScgaWYgJ3R5cGUnIGlzIGEg c2NhbGFyIHR5cGUuICdGYWxzZScgb3RoZXJ3aXNlLgorICAgICAgICAgIiIi CisgICAgICAgICByZXR1cm4gdHlwZS5jb2RlIGluIEV4cGxvcmVyLl9TQ0FM QVJfVFlQRV9MSVNUCisgCisgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgZGVm IHJldHVybl90b19wYXJlbnRfdmFsdWUoKToKKyAgICAgICAgICIiIkEgdXRp bGl0eSBmdW5jdGlvbiB3aGljaCBwcmludHMgdGhhdCB0aGUgY3VycmVudCBl eHBsb3JhdGlvbiBzZXNzaW9uCisgICAgICAgICBpcyByZXR1cm5pbmcgdG8g dGhlIHBhcmVudCB2YWx1ZS4gVXNlZnVsIHdoZW4gZXhwbG9yaW5nIHZhbHVl cy4KKyAgICAgICAgICIiIgorICAgICAgICAgcHJpbnQgIlxuUmV0dXJuaW5n IHRvIHBhcmVudCB2YWx1ZS4uLlxuIgorICAgICAgICAgCisgICAgIEBzdGF0 aWNtZXRob2QKKyAgICAgZGVmIHJldHVybl90b19wYXJlbnRfdmFsdWVfcHJv bXB0KCk6CisgICAgICAgICAiIiJBIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2gg cHJvbXB0cyB0aGUgdXNlciB0byBwcmVzcyB0aGUgJ2VudGVyJyBrZXkKKyAg ICAgICAgIHNvIHRoYXQgdGhlIGV4cGxvcmF0aW9uIHNlc3Npb24gY2FuIHNo aWZ0IGJhY2sgdG8gdGhlIHBhcmVudCB2YWx1ZS4KKyAgICAgICAgIFVzZWZ1 bCB3aGVuIGV4cGxvcmluZyB2YWx1ZXMuCisgICAgICAgICAiIiIKKyAgICAg ICAgIHJhd19pbnB1dCgiXG5QcmVzcyBlbnRlciB0byByZXR1cm4gdG8gcGFy ZW50IHZhbHVlOiAiKQorICAgICAgICAgCisgICAgIEBzdGF0aWNtZXRob2QK KyAgICAgZGVmIHJldHVybl90b19lbmNsb3NpbmdfdHlwZSgpOgorICAgICAg ICAgIiIiQSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHByaW50cyB0aGF0IHRo ZSBjdXJyZW50IGV4cGxvcmF0aW9uIHNlc3Npb24KKyAgICAgICAgIGlzIHJl dHVybmluZyB0byB0aGUgZW5jbG9zaW5nIHR5cGUuICBVc2VmdWwgd2hlbiBl eHBsb3JpbmcgdHlwZXMuCisgICAgICAgICAiIiIKKyAgICAgICAgIHByaW50 ICJcblJldHVybmluZyB0byBlbmNsb3NpbmcgdHlwZS4uLlxuIgorICAgICAg ICAgCisgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgZGVmIHJldHVybl90b19l bmNsb3NpbmdfdHlwZV9wcm9tcHQoKToKKyAgICAgICAgICIiIkEgdXRpbGl0 eSBmdW5jdGlvbiB3aGljaCBwcm9tcHRzIHRoZSB1c2VyIHRvIHByZXNzIHRo ZSAnZW50ZXInIGtleQorICAgICAgICAgc28gdGhhdCB0aGUgZXhwbG9yYXRp b24gc2Vzc2lvbiBjYW4gc2hpZnQgYmFjayB0byB0aGUgZW5jbG9zaW5nIHR5 cGUuCisgICAgICAgICBVc2VmdWwgd2hlbiBleHBsb3JpbmcgdHlwZXMuCisg ICAgICAgICAiIiIKKyAgICAgICAgIHJhd19pbnB1dCgiXG5QcmVzcyBlbnRl ciB0byByZXR1cm4gdG8gZW5jbG9zaW5nIHR5cGU6ICIpCisgCisgCisgY2xh c3MgU2NhbGFyRXhwbG9yZXIob2JqZWN0KToKKyAgICAgIiIiSW50ZXJuYWwg Y2xhc3MgdXNlZCB0byBleHBsb3JlIHNjYWxhciB2YWx1ZXMuIiIiCisgCisg ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgZGVmIGV4cGxvcmVfZXhwcihleHBy LCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAgICAgIiIiRnVuY3Rpb24gdG8g ZXhwbG9yZSBzY2FsYXIgdmFsdWVzLgorICAgICAgICAgU2VlIEV4cGxvcmVy LmV4cGxvcmVfZXhwciBhbmQgRXhwbG9yZXIuaXNfc2NhbGFyX3R5cGUgZm9y IG1vcmUKKyAgICAgICAgIGluZm9ybWF0aW9uLgorICAgICAgICAgIiIiCisg ICAgICAgICBwcmludCAoIiclcycgaXMgYSBzY2FsYXIgdmFsdWUgb2YgdHlw ZSAnJXMnLiIgJQorICAgICAgICAgICAgICAgIChleHByLCB2YWx1ZS50eXBl KSkKKyAgICAgICAgIHByaW50ICIlcyA9ICVzIiAlIChleHByLCBzdHIodmFs dWUpKQorIAorICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAg RXhwbG9yZXIucmV0dXJuX3RvX3BhcmVudF92YWx1ZV9wcm9tcHQoKQorICAg ICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJlbnRfdmFsdWUoKQor IAorICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgICAgIEBzdGF0aWNtZXRo b2QKKyAgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNf Y2hpbGQpOgorICAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBzY2Fs YXIgdHlwZXMuCisgICAgICAgICBTZWUgRXhwbG9yZXIuZXhwbG9yZV90eXBl IGFuZCBFeHBsb3Jlci5pc19zY2FsYXJfdHlwZSBmb3IgbW9yZQorICAgICAg ICAgaW5mb3JtYXRpb24uCisgICAgICAgICAiIiIKKyAgICAgICAgIGlmIGRh dGF0eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9FTlVNOgorICAgICAgICAg ICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAgICBwcmludCAoIiVz IGlzIG9mIGFuIGVudW1lcmF0ZWQgdHlwZSAnJXMnLiIgJQorICAgICAgICAg ICAgICAgICAgICAgICAgKG5hbWUsIHN0cihkYXRhdHlwZSkpKQorICAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ICInJXMnIGlz IGFuIGVudW1lcmF0ZWQgdHlwZS4iICUgbmFtZQorICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICAg cHJpbnQgKCIlcyBpcyBvZiBhIHNjYWxhciB0eXBlICclcycuIiAlCisgICAg ICAgICAgICAgICAgICAgICAgICAobmFtZSwgc3RyKGRhdGF0eXBlKSkpCisg ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgcHJpbnQgIicl cycgaXMgYSBzY2FsYXIgdHlwZS4iICUgbmFtZQorIAorICAgICAgICAgaWYg aXNfY2hpbGQ6CisgICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX2Vu Y2xvc2luZ190eXBlX3Byb21wdCgpCisgICAgICAgICAgICAgRXhwbG9yZXIu cmV0dXJuX3RvX2VuY2xvc2luZ190eXBlKCkKKyAKKyAgICAgICAgIHJldHVy biBGYWxzZQorIAorIAorIGNsYXNzIFBvaW50ZXJFeHBsb3JlcihvYmplY3Qp OgorICAgICAiIiJJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGV4cGxvcmUgcG9p bnRlciB2YWx1ZXMuIiIiCisgCisgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg ZGVmIGV4cGxvcmVfZXhwcihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAg ICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBwb2ludGVyIHZhbHVlcy4K KyAgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX2V4cHIgZm9yIG1vcmUg aW5mb3JtYXRpb24uCisgICAgICAgICAiIiIKKyAgICAgICAgIHByaW50ICgi JyVzJyBpcyBhIHBvaW50ZXIgdG8gYSB2YWx1ZSBvZiB0eXBlICclcyciICUK KyAgICAgICAgICAgICAgICAoZXhwciwgc3RyKHZhbHVlLnR5cGUudGFyZ2V0 KCkpKSkKKyAgICAgICAgIG9wdGlvbiAgPSByYXdfaW5wdXQoIkNvbnRpbnVl IGV4cGxvcmluZyBpdCBhcyBhIHBvaW50ZXIgdG8gYSBzaW5nbGUgIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgW3kvbl06ICIpCisg ICAgICAgICBpZiBvcHRpb24gPT0gInkiOgorICAgICAgICAgICAgIGRlcmVm X3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg ICAgICAgZGVyZWZfdmFsdWUgPSB2YWx1ZS5kZXJlZmVyZW5jZSgpCisgICAg ICAgICAgICAgICAgIHN0cihkZXJlZl92YWx1ZSkKKyAgICAgICAgICAgICBl eGNlcHQgZ2RiLk1lbW9yeUVycm9yOgorICAgICAgICAgICAgICAgICBwcmlu dCAoIiclcycgYSBwb2ludGVyIHBvaW50aW5nIHRvIGFuIGludmFsaWQgbWVt b3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbi4iICUg ZXhwcikKKyAgICAgICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAg ICAgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5fdG9fcGFyZW50X3ZhbHVl X3Byb21wdCgpCisgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg ICAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcigiKiVzIiAlIEV4cGxv cmVyLmd1YXJkX2V4cHIoZXhwciksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlcmVmX3ZhbHVlLCBpc19jaGlsZCkKKyAgICAgICAg ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIAorICAgICAgICAgb3B0aW9u ICA9IHJhd19pbnB1dCgiQ29udGludWUgZXhwbG9yaW5nIGl0IGFzIGEgcG9p bnRlciB0byBhbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh cnJheSBbeS9uXTogIikKKyAgICAgICAgIGlmIG9wdGlvbiA9PSAieSI6Cisg ICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgaW5k ZXggPSAwCisgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg ICAgICAgIGluZGV4ID0gaW50KHJhd19pbnB1dCgiRW50ZXIgdGhlIGluZGV4 IG9mIHRoZSBlbGVtZW50IHlvdSAiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIndhbnQgdG8gZXhwbG9yZSBpbiAnJXMn OiAiICUgZXhwcikpCisgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVy cm9yOgorICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAg ICAgICAgZWxlbWVudF9leHByID0gIiVzWyVkXSIgJSAoRXhwbG9yZXIuZ3Vh cmRfZXhwcihleHByKSwgaW5kZXgpCisgICAgICAgICAgICAgICAgIGVsZW1l bnQgPSB2YWx1ZVtpbmRleF0KKyAgICAgICAgICAgICAgICAgdHJ5OgorICAg ICAgICAgICAgICAgICAgICAgc3RyKGVsZW1lbnQpCisgICAgICAgICAgICAg ICAgIGV4Y2VwdCBnZGIuTWVtb3J5RXJyb3I6CisgICAgICAgICAgICAgICAg ICAgICBwcmludCAiQ2Fubm90IHJlYWQgdmFsdWUgYXQgaW5kZXggJWQuIiAl IGluZGV4CisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg ICAgICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoZWxlbWVudF9leHBy LCBlbGVtZW50LCBUcnVlKQorICAgICAgICAgICAgIHJldHVybiBGYWxzZQor IAorICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgRXhwbG9y ZXIucmV0dXJuX3RvX3BhcmVudF92YWx1ZSgpCisgICAgICAgICByZXR1cm4g RmFsc2UKKyAKKyAgICAgQHN0YXRpY21ldGhvZAorICAgICBkZWYgZXhwbG9y ZV90eXBlKG5hbWUsIGRhdGF0eXBlLCBpc19jaGlsZCk6CisgICAgICAgICAi IiJGdW5jdGlvbiB0byBleHBsb3JlIHBvaW50ZXIgdHlwZXMuCisgICAgICAg ICBTZWUgRXhwbG9yZXIuZXhwbG9yZV90eXBlIGZvciBtb3JlIGluZm9ybWF0 aW9uLgorICAgICAgICAgIiIiCisgICAgICAgICB0YXJnZXRfdHlwZSA9IGRh dGF0eXBlLnRhcmdldCgpCisgICAgICAgICBwcmludCAoIlxuJXMgaXMgYSBw b2ludGVyIHRvIGEgdmFsdWUgb2YgdHlwZSAnJXMnLiIgJQorICAgICAgICAg ICAgICAgIChuYW1lLCBzdHIodGFyZ2V0X3R5cGUpKSkKKyAKKyAgICAgICAg IEV4cGxvcmVyLmV4cGxvcmVfdHlwZSgidGhlIHBvaW50ZWUgdHlwZSBvZiAl cyIgJSBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh cmdldF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz X2NoaWxkKQorICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgCisgY2xhc3Mg UmVmZXJlbmNlRXhwbG9yZXIob2JqZWN0KToKKyAgICAgIiIiSW50ZXJuYWwg Y2xhc3MgdXNlZCB0byBleHBsb3JlIHJlZmVyZW5jZSAoVFlQRV9DT0RFX1JF RikgdmFsdWVzLiIiIgorIAorICAgICBAc3RhdGljbWV0aG9kCisgICAgIGRl ZiBleHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxkKToKKyAgICAg ICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgYXJyYXkgdmFsdWVzLgorICAg ICAgICAgU2VlIEV4cGxvcmVyLmV4cGxvcmVfZXhwciBmb3IgbW9yZSBpbmZv cm1hdGlvbi4KKyAgICAgICAgICIiIgorICAgICAgICAgcmVmZXJlbmNlZF92 YWx1ZSA9IHZhbHVlLnJlZmVyZW5jZWRfdmFsdWUoKQorICAgICAgICAgRXhw bG9yZXIuZXhwbG9yZV9leHByKGV4cHIsIHJlZmVyZW5jZWRfdmFsdWUsIGlz X2NoaWxkKQorICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgICAgIEBzdGF0 aWNtZXRob2QKKyAgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlw ZSwgaXNfY2hpbGQpOgorICAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9y ZSBwb2ludGVyIHR5cGVzLgorICAgICAgICAgU2VlIEV4cGxvcmVyLmV4cGxv cmVfdHlwZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICIiIgor ICAgICAgICAgdGFyZ2V0X3R5cGUgPSBkYXRhdHlwZS50YXJnZXQoKQorICAg ICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKG5hbWUsIHRhcmdldF90eXBl LCBpc19jaGlsZCkKKyAgICAgICAgIHJldHVybiBGYWxzZQorIAorIAorIGNs YXNzIEFycmF5RXhwbG9yZXIob2JqZWN0KToKKyAgICAgIiIiSW50ZXJuYWwg Y2xhc3MgdXNlZCB0byBleHBsb3JlIGFycmF5cy4iIiIKKyAKKyAgICAgQHN0 YXRpY21ldGhvZAorICAgICBkZWYgZXhwbG9yZV9leHByKGV4cHIsIHZhbHVl LCBpc19jaGlsZCk6CisgICAgICAgICAiIiJGdW5jdGlvbiB0byBleHBsb3Jl IGFycmF5IHZhbHVlcy4KKyAgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3Jl X2V4cHIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAiIiIKKyAg ICAgICAgIHRhcmdldF90eXBlID0gdmFsdWUudHlwZS50YXJnZXQoKQorICAg ICAgICAgcHJpbnQgKCInJXMnIGlzIGFuIGFycmF5IG9mICclcycuIiAlIChl eHByLCBzdHIodGFyZ2V0X3R5cGUpKSkKKyAgICAgICAgIGluZGV4ID0gMAor ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGluZGV4ID0gaW50KHJhd19p bnB1dCgiRW50ZXIgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHlvdSB3YW50 IHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4 cGxvcmUgaW4gJyVzJzogIiAlIGV4cHIpKQorICAgICAgICAgZXhjZXB0IFZh bHVlRXJyb3I6CisgICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAg ICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJlbnRfdmFsdWUoKQor ICAgICAgICAgICAgIHJldHVybiBGYWxzZQorIAorICAgICAgICAgZWxlbWVu dCA9IE5vbmUKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBlbGVtZW50 ID0gdmFsdWVbaW5kZXhdCisgICAgICAgICAgICAgc3RyKGVsZW1lbnQpCisg ICAgICAgICBleGNlcHQgZ2RiLk1lbW9yeUVycm9yOgorICAgICAgICAgICAg IHByaW50ICJDYW5ub3QgcmVhZCB2YWx1ZSBhdCBpbmRleCAlZC4iICUgaW5k ZXgKKyAgICAgICAgICAgICByYXdfaW5wdXQoIlByZXNzIGVudGVyIHRvIGNv bnRpbnVlLi4uICIpCisgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg ICAgICAgICAKKyAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcigiJXNb JWRdIiAlIChFeHBsb3Jlci5ndWFyZF9leHByKGV4cHIpLCBpbmRleCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCwgVHJ1ZSkK KyAgICAgICAgIHJldHVybiBUcnVlCisgCisgICAgIEBzdGF0aWNtZXRob2QK KyAgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNfY2hp bGQpOgorICAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBhcnJheSB0 eXBlcy4KKyAgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX3R5cGUgZm9y IG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAiIiIKKyAgICAgICAgIHRh cmdldF90eXBlID0gZGF0YXR5cGUudGFyZ2V0KCkKKyAgICAgICAgIHByaW50 ICIlcyBpcyBhbiBhcnJheSBvZiAnJXMnLiIgJSAobmFtZSwgc3RyKHRhcmdl dF90eXBlKSkKKyAKKyAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfdHlwZSgi dGhlIGFycmF5IGVsZW1lbnQgb2YgJXMiICUgbmFtZSwgdGFyZ2V0X3R5cGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfY2hpbGQpCisg ICAgICAgICByZXR1cm4gRmFsc2UKKyAKKyAKKyBjbGFzcyBDb21wb3VuZEV4 cGxvcmVyKG9iamVjdCk6CisgICAgICIiIkludGVybmFsIGNsYXNzIHVzZWQg dG8gZXhwbG9yZSBzdHJ1Y3QsIGNsYXNzZXMgYW5kIHVuaW9ucy4iIiIKKyAK KyAgICAgQHN0YXRpY21ldGhvZAorICAgICBkZWYgX3ByaW50X2ZpZWxkcyhw cmludF9saXN0KToKKyAgICAgICAgICIiIkludGVybmFsIGZ1bmN0aW9uIHdo aWNoIHByaW50cyB0aGUgZmllbGRzIG9mIGEgc3RydWN0L2NsYXNzL3VuaW9u LgorICAgICAgICAgIiIiCisgICAgICAgICBtYXhfZmllbGRfbmFtZV9sZW5n dGggPSAwCisgICAgICAgICBmb3IgcGFpciBpbiBwcmludF9saXN0OgorICAg ICAgICAgICAgIGlmIG1heF9maWVsZF9uYW1lX2xlbmd0aCA8IGxlbihwYWly WzBdKToKKyAgICAgICAgICAgICAgICAgbWF4X2ZpZWxkX25hbWVfbGVuZ3Ro ID0gbGVuKHBhaXJbMF0pCisgCisgICAgICAgICBmb3JtYXRfc3RyID0gIiAg ezA6PiVkfSA9IHsxfSIgJSBtYXhfZmllbGRfbmFtZV9sZW5ndGgKKyAgICAg ICAgIGZvciBwYWlyIGluIHByaW50X2xpc3Q6CisgICAgICAgICAgICAgcHJp bnQgZm9ybWF0X3N0ci5mb3JtYXQocGFpclswXSwgcGFpclsxXSkKKyAKKyAg ICAgQHN0YXRpY21ldGhvZAorICAgICBkZWYgX2dldF9yZWFsX2ZpZWxkX2Nv dW50KGZpZWxkcyk6CisgICAgICAgICByZWFsX2ZpZWxkX2NvdW50ID0gMDsK KyAgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICAg aWYgbm90IGZpZWxkLmFydGlmaWNpYWw6CisgICAgICAgICAgICAgICAgIHJl YWxfZmllbGRfY291bnQgPSByZWFsX2ZpZWxkX2NvdW50ICsgMQorIAorICAg ICAgICAgcmV0dXJuIHJlYWxfZmllbGRfY291bnQKKyAKKyAgICAgQHN0YXRp Y21ldGhvZAorICAgICBkZWYgZXhwbG9yZV9leHByKGV4cHIsIHZhbHVlLCBp c19jaGlsZCk6CisgICAgICAgICAiIiJGdW5jdGlvbiB0byBleHBsb3JlIHN0 cnVjdHMvY2xhc3NlcyBhbmQgdW5pb24gdmFsdWVzLgorICAgICAgICAgU2Vl IEV4cGxvcmVyLmV4cGxvcmVfZXhwciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4K KyAgICAgICAgICIiIgorICAgICAgICAgZGF0YXR5cGUgPSB2YWx1ZS50eXBl CisgICAgICAgICB0eXBlX2NvZGUgPSBkYXRhdHlwZS5jb2RlCisgICAgICAg ICBmaWVsZHMgPSBkYXRhdHlwZS5maWVsZHMoKQorIAorICAgICAgICAgaWYg dHlwZV9jb2RlID09IGdkYi5UWVBFX0NPREVfU1RSVUNUOgorICAgICAgICAg ICAgIHR5cGVfZGVzYyA9ICJzdHJ1Y3QvY2xhc3MiCisgICAgICAgICBlbHNl OgorICAgICAgICAgICAgIHR5cGVfZGVzYyA9ICJ1bmlvbiIKKyAKKyAgICAg ICAgIGlmIENvbXBvdW5kRXhwbG9yZXIuX2dldF9yZWFsX2ZpZWxkX2NvdW50 KGZpZWxkcykgPT0gMDoKKyAgICAgICAgICAgICBwcmludCAoIlRoZSB2YWx1 ZSBvZiAnJXMnIGlzIGEgJXMgb2YgdHlwZSAnJXMnIHdpdGggbm8gZmllbGRz LiIgJQorICAgICAgICAgICAgICAgICAgICAoZXhwciwgdHlwZV9kZXNjLCBz dHIodmFsdWUudHlwZSkpKQorICAgICAgICAgICAgIGlmIGlzX2NoaWxkOgor ICAgICAgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5fdG9fcGFyZW50X3Zh bHVlX3Byb21wdCgpCisgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisg ICAgICAgICBwcmludCAoIlRoZSB2YWx1ZSBvZiAnJXMnIGlzIGEgJXMgb2Yg dHlwZSAnJXMnIHdpdGggdGhlIGZvbGxvd2luZyAiCisgICAgICAgICAgICAg ICAiZmllbGRzOlxuIiAlIChleHByLCB0eXBlX2Rlc2MsIHN0cih2YWx1ZS50 eXBlKSkpCisgCisgICAgICAgICBoYXNfZXhwbG9yYWJsZV9maWVsZHMgPSBG YWxzZQorICAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcCA9 IHsgfQorICAgICAgICAgY3VycmVudF9jaG9pY2UgPSAwCisgICAgICAgICBw cmludF9saXN0ID0gWyBdCisgICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRz OgorICAgICAgICAgICAgIGlmIGZpZWxkLmFydGlmaWNpYWw6CisgICAgICAg ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgZmllbGRfZnVsbF9u YW1lID0gRXhwbG9yZXIuZ3VhcmRfZXhwcihleHByKSArICIuIiArIGZpZWxk Lm5hbWUKKyAgICAgICAgICAgICBpZiBmaWVsZC5pc19iYXNlX2NsYXNzOgor ICAgICAgICAgICAgICAgICBmaWVsZF92YWx1ZSA9IHZhbHVlLmNhc3QoZmll bGQudHlwZSkKKyAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg ICBmaWVsZF92YWx1ZSA9IHZhbHVlW2ZpZWxkLm5hbWVdCisgICAgICAgICAg ICAgbGl0ZXJhbF92YWx1ZSA9ICIiCisgICAgICAgICAgICAgaWYgdHlwZV9j b2RlID09IGdkYi5UWVBFX0NPREVfVU5JT046CisgICAgICAgICAgICAgICAg IGxpdGVyYWxfdmFsdWUgPSAoIjxFbnRlciAlZCB0byBleHBsb3JlIHRoaXMg ZmllbGQgb2YgdHlwZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiclcyc+IiAlIChjdXJyZW50X2Nob2ljZSwgc3RyKGZpZWxkLnR5 cGUpKSkKKyAgICAgICAgICAgICAgICAgaGFzX2V4cGxvcmFibGVfZmllbGRz ID0gVHJ1ZQorICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg IGlmIEV4cGxvcmVyLmlzX3NjYWxhcl90eXBlKGZpZWxkLnR5cGUpOgorICAg ICAgICAgICAgICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9ICgiJXMgLi4gKFZh bHVlIG9mIHR5cGUgJyVzJykiICUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHN0cihmaWVsZF92YWx1ZSksIHN0cihmaWVsZC50 eXBlKSkpCisgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgICAgICBpZiBmaWVsZC5pc19iYXNlX2NsYXNzOgorICAgICAgICAgICAg ICAgICAgICAgICAgIGZpZWxkX2Rlc2MgPSAiYmFzZSBjbGFzcyIKKyAgICAg ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAg ICAgZmllbGRfZGVzYyA9ICJmaWVsZCIKKyAgICAgICAgICAgICAgICAgICAg IGxpdGVyYWxfdmFsdWUgPSAoIjxFbnRlciAlZCB0byBleHBsb3JlIHRoaXMg JXMgb2YgdHlwZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICInJXMnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoY3VycmVudF9jaG9pY2UsIGZpZWxkX2Rlc2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZmllbGQu dHlwZSkpKQorICAgICAgICAgICAgICAgICAgICAgaGFzX2V4cGxvcmFibGVf ZmllbGRzID0gVHJ1ZQorIAorICAgICAgICAgICAgIGNob2ljZV90b19jb21w b3VuZF9maWVsZF9tYXBbc3RyKGN1cnJlbnRfY2hvaWNlKV0gPSAoCisgICAg ICAgICAgICAgICAgIGZpZWxkX2Z1bGxfbmFtZSwgZmllbGRfdmFsdWUpCisg ICAgICAgICAgICAgY3VycmVudF9jaG9pY2UgPSBjdXJyZW50X2Nob2ljZSAr IDEKKyAKKyAgICAgICAgICAgICBwcmludF9saXN0LmFwcGVuZCgoZmllbGQu bmFtZSwgbGl0ZXJhbF92YWx1ZSkpCisgCisgICAgICAgICBDb21wb3VuZEV4 cGxvcmVyLl9wcmludF9maWVsZHMocHJpbnRfbGlzdCkKKyAgICAgICAgIHBy aW50ICIiCisgCisgICAgICAgICBpZiBoYXNfZXhwbG9yYWJsZV9maWVsZHM6 CisgICAgICAgICAgICAgY2hvaWNlID0gcmF3X2lucHV0KCJFbnRlciB0aGUg ZmllbGQgbnVtYmVyIG9mIGNob2ljZTogIikKKyAgICAgICAgICAgICBpZiBj aG9pY2UgaW4gY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcDoKKyAgICAg ICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV9leHByKGNob2ljZV90b19j b21wb3VuZF9maWVsZF9tYXBbY2hvaWNlXVswXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZV90b19jb21wb3VuZF9m aWVsZF9tYXBbY2hvaWNlXVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgIHJldHVy biBUcnVlCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg aWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgICBFeHBsb3Jlci5y ZXR1cm5pbmdfdG9fcGFyZW50X3ZhbHVlX21lc3NhZ2UoKQorICAgICAgICAg ZWxzZToKKyAgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAg ICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX3BhcmVudF92YWx1ZV9wcm9tcHQo KQorIAorICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgICAgIEBzdGF0aWNt ZXRob2QKKyAgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwg aXNfY2hpbGQpOgorICAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBz dHJ1Y3QvY2xhc3MgYW5kIHVuaW9uIHR5cGVzLgorICAgICAgICAgU2VlIEV4 cGxvcmVyLmV4cGxvcmVfdHlwZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAg ICAgICAgICIiIgorICAgICAgICAgdHlwZV9jb2RlID0gZGF0YXR5cGUuY29k ZQorICAgICAgICAgdHlwZV9kZXNjID0gIiIKKyAgICAgICAgIGlmIHR5cGVf Y29kZSA9PSBnZGIuVFlQRV9DT0RFX1NUUlVDVDoKKyAgICAgICAgICAgICB0 eXBlX2Rlc2MgPSAic3RydWN0L2NsYXNzIgorICAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICB0eXBlX2Rlc2MgPSAidW5pb24iCisgCisgICAgICAgICBm aWVsZHMgPSBkYXRhdHlwZS5maWVsZHMoKQorICAgICAgICAgaWYgQ29tcG91 bmRFeHBsb3Jlci5fZ2V0X3JlYWxfZmllbGRfY291bnQoZmllbGRzKSA9PSAw OgorICAgICAgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAg ICBwcmludCAoIiVzIGlzIGEgJXMgb2YgdHlwZSAnJXMnIHdpdGggbm8gZmll bGRzLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHR5cGVf ZGVzYywgc3RyKGRhdGF0eXBlKSkpCisgICAgICAgICAgICAgICAgIEV4cGxv cmVyLnJldHVybl90b19lbmNsb3NpbmdfdHlwZV9wcm9tcHQoKQorICAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ICInJXMnIGlz IGEgJXMgd2l0aCBubyBmaWVsZHMuIiAlIChuYW1lLCB0eXBlX2Rlc2MpCisg ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgCisgICAgICAgICBpZiBpc19j aGlsZDoKKyAgICAgICAgICAgICBwcmludCAoIiVzIGlzIGEgJXMgb2YgdHlw ZSAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgIndpdGggdGhlIGZvbGxv d2luZyBmaWVsZHM6XG4iICUKKyAgICAgICAgICAgICAgICAgICAgKG5hbWUs IHR5cGVfZGVzYywgc3RyKGRhdGF0eXBlKSkpCisgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgIHByaW50ICgiJyVzJyBpcyBhICVzIHdpdGggdGhlIGZv bGxvd2luZyAiCisgICAgICAgICAgICAgICAgICAgICJmaWVsZHM6XG4iICUK KyAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHR5cGVfZGVzYykpCisgCisg ICAgICAgICBoYXNfZXhwbG9yYWJsZV9maWVsZHMgPSBGYWxzZQorICAgICAg ICAgY3VycmVudF9jaG9pY2UgPSAwCisgICAgICAgICBjaG9pY2VfdG9fY29t cG91bmRfZmllbGRfbWFwID0geyB9CisgICAgICAgICBwcmludF9saXN0ID0g WyBdCisgICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRzOgorICAgICAgICAg ICAgIGlmIGZpZWxkLmFydGlmaWNpYWw6CisgICAgICAgICAgICAgICAgIGNv bnRpbnVlCisgICAgICAgICAgICAgaWYgZmllbGQuaXNfYmFzZV9jbGFzczoK KyAgICAgICAgICAgICAgICAgZmllbGRfZGVzYyA9ICJiYXNlIGNsYXNzIgor ICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIGZpZWxkX2Rl c2MgPSAiZmllbGQiCisgICAgICAgICAgICAgcmhzID0gKCI8RW50ZXIgJWQg dG8gZXhwbG9yZSB0aGlzICVzIG9mIHR5cGUgJyVzJz4iICUKKyAgICAgICAg ICAgICAgICAgICAgKGN1cnJlbnRfY2hvaWNlLCBmaWVsZF9kZXNjLCBzdHIo ZmllbGQudHlwZSkpKQorICAgICAgICAgICAgIHByaW50X2xpc3QuYXBwZW5k KChmaWVsZC5uYW1lLCByaHMpKQorICAgICAgICAgICAgIGNob2ljZV90b19j b21wb3VuZF9maWVsZF9tYXBbc3RyKGN1cnJlbnRfY2hvaWNlKV0gPSAoCisg ICAgICAgICAgICAgICAgIGZpZWxkLm5hbWUsIGZpZWxkLnR5cGUsIGZpZWxk X2Rlc2MpCisgICAgICAgICAgICAgY3VycmVudF9jaG9pY2UgPSBjdXJyZW50 X2Nob2ljZSArIDEKKyAKKyAgICAgICAgIENvbXBvdW5kRXhwbG9yZXIuX3By aW50X2ZpZWxkcyhwcmludF9saXN0KQorICAgICAgICAgcHJpbnQgIiIKKyAK KyAgICAgICAgIGlmIGxlbihjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFw KSA+IDA6CisgICAgICAgICAgICAgY2hvaWNlID0gcmF3X2lucHV0KCJFbnRl ciB0aGUgZmllbGQgbnVtYmVyIG9mIGNob2ljZTogIikKKyAgICAgICAgICAg ICBpZiBjaG9pY2UgaW4gY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcDoK KyAgICAgICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAg ICAgICAgICBuZXdfbmFtZSA9ICgiJXMgJyVzJyBvZiAlcyIgJSAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaG9pY2VfdG9fY29tcG91 bmRfZmllbGRfbWFwW2Nob2ljZV1bMl0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcFtj aG9pY2VdWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5hbWUpKQorICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgICAgICAgbmV3X25hbWUgPSAoIiVzICclcycgb2YgJyVzJyIgJSAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaG9pY2VfdG9fY29t cG91bmRfZmllbGRfbWFwW2Nob2ljZV1bMl0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21h cFtjaG9pY2VdWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5hbWUpKQorICAgICAgICAgICAgICAgICBFeHBsb3Jlci5leHBsb3Jl X3R5cGUobmV3X25hbWUsCisgICAgICAgICAgICAgICAgICAgICBjaG9pY2Vf dG9fY29tcG91bmRfZmllbGRfbWFwW2Nob2ljZV1bMV0sIFRydWUpCisgICAg ICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAg ICAgICAgICBFeHBsb3Jlci5yZXR1cm5fdG9fZW5jbG9zaW5nX3R5cGUoKQor ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAg ICAgICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX2VuY2xvc2luZ190 eXBlX3Byb21wdCgpCisgCisgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg ICAgICAgIAorIAorIGNsYXNzIFR5cGVkZWZFeHBsb3JlcihvYmplY3QpOgor ICAgICAiIiJJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGV4cGxvcmUgdmFsdWVz IHdob3NlIHR5cGUgaXMgYSB0eXBlZGVmLiIiIgorIAorICAgICBAc3RhdGlj bWV0aG9kCisgICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlz X2NoaWxkKToKKyAgICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgdHlw ZWRlZiB2YWx1ZXMuCisgICAgICAgICBTZWUgRXhwbG9yZXIuZXhwbG9yZV9l eHByIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAgIiIiCisgICAg ICAgICBhY3R1YWxfdHlwZSA9IHZhbHVlLnR5cGUuc3RyaXBfdHlwZWRlZnMo KQorICAgICAgICAgcHJpbnQgKCJUaGUgdmFsdWUgb2YgJyVzJyBpcyBvZiB0 eXBlICclcycgIgorICAgICAgICAgICAgICAgICJ3aGljaCBpcyBhIHR5cGVk ZWYgb2YgdHlwZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgKGV4cHIsIHN0 cih2YWx1ZS50eXBlKSwgc3RyKGFjdHVhbF90eXBlKSkpCisgCisgICAgICAg ICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoZXhwciwgdmFsdWUuY2FzdChhY3R1 YWxfdHlwZSksIGlzX2NoaWxkKQorICAgICAgICAgcmV0dXJuIEZhbHNlCisg CisgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgZGVmIGV4cGxvcmVfdHlwZShu YW1lLCBkYXRhdHlwZSwgaXNfY2hpbGQpOgorICAgICAgICAgIiIiRnVuY3Rp b24gdG8gZXhwbG9yZSB0eXBlZGVmIHR5cGVzLgorICAgICAgICAgU2VlIEV4 cGxvcmVyLmV4cGxvcmVfdHlwZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAg ICAgICAgICIiIgorICAgICAgICAgYWN0dWFsX3R5cGUgPSBkYXRhdHlwZS5z dHJpcF90eXBlZGVmcygpCisgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAg ICAgICAgICBwcmludCAoIlRoZSB0eXBlIG9mICVzIGlzIGEgdHlwZWRlZiBv ZiB0eXBlICclcycuIiAlCisgICAgICAgICAgICAgICAgICAgIChuYW1lLCBz dHIoYWN0dWFsX3R5cGUpKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgcHJpbnQgKCJUaGUgdHlwZSAnJXMnIGlzIGEgdHlwZWRlZiBvZiB0eXBl ICclcycuIiAlCisgICAgICAgICAgICAgICAgICAgIChuYW1lLCBzdHIoYWN0 dWFsX3R5cGUpKSkKKyAKKyAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfdHlw ZShuYW1lLCBhY3R1YWxfdHlwZSwgaXNfY2hpbGQpCisgICAgICAgICByZXR1 cm4gRmFsc2UKKyAKKyAKKyBjbGFzcyBFeHBsb3JlVXRpbHMob2JqZWN0KToK KyAgICAgIiIiSW50ZXJuYWwgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgdXRpbGl0 aWVzIGZvciB0aGUgbWFpbiBjb21tYW5kIGNsYXNzZXMuIiIiCisgCisgICAg IEBzdGF0aWNtZXRob2QKKyAgICAgZGVmIGNoZWNrX2FyZ3MobmFtZSwgYXJn X3N0cik6CisgICAgICAgICAiIiJVdGlsaXR5IHRvIGNoZWNrIGlmIGFkZXF1 YXRlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBhbgorICAg ICAgICAgZXhwbG9yZSBjb21tYW5kLgorIAorICAgICAgICAgQXJndW1lbnRz OgorICAgICAgICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBleHBsb3Jl IGNvbW1hbmQuCisgICAgICAgICAgICAgYXJnX3N0cjogVGhlIGFyZ3VtZW50 IHN0cmluZyBwYXNzZWQgdG8gdGhlIGV4cGxvcmUgY29tbWFuZC4KKyAKKyAg ICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAgVHJ1ZSBpZiBhZGVxdWF0 ZSBhcmd1bWVudHMgYXJlIHBhc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorIAor ICAgICAgICAgUmFpc2VzOgorICAgICAgICAgICAgIGdkYi5HZGJFcnJvciBp ZiBhZGVxdWF0ZSBhcmd1bWVudHMgYXJlIG5vdCBwYXNzZWQuCisgICAgICAg ICAiIiIKKyAgICAgICAgIGlmIGxlbihhcmdfc3RyKSA8IDE6CisgICAgICAg ICAgICAgcmFpc2UgZ2RiLkdkYkVycm9yKCJFUlJPUjogJyVzJyByZXF1aXJl cyBhbiBhcmd1bWVudC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICUgbmFtZSkKKyAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg ICAgIGVsc2U6CisgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAKKyAgICAg QHN0YXRpY21ldGhvZAorICAgICBkZWYgZ2V0X3R5cGVfZnJvbV9zdHIodHlw ZV9zdHIpOgorICAgICAgICAgIiIiQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGRl ZHVjZSB0aGUgZ2RiLlR5cGUgdmFsdWUgZnJvbSBhIHN0cmluZworICAgICAg ICAgcmVwcmVzZW50aW5nIHRoZSB0eXBlLgorIAorICAgICAgICAgQXJndW1l bnRzOgorICAgICAgICAgICAgIHR5cGVfc3RyOiBUaGUgdHlwZSBzdHJpbmcg ZnJvbSB3aGljaCB0aGUgZ2RiLlR5cGUgdmFsdWUgc2hvdWxkIGJlCisgICAg ICAgICAgICAgICAgICAgICAgIGRlZHVjZWQuCisgCisgICAgICAgICBSZXR1 cm5zOgorICAgICAgICAgICAgIFRoZSBkZWR1Y2VkIGdkYi5UeXBlIHZhbHVl IGlmIHBvc3NpYmxlLCBOb25lIG90aGVyd2lzZS4KKyAgICAgICAgICIiIgor ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICMgQXNzdW1lIHRoZSBjdXJy ZW50IGxhbmd1YWdlIHRvIGJlIEMvQysrIGFuZCBtYWtlIGEgdHJ5LgorICAg ICAgICAgICAgIHJldHVybiBnZGIucGFyc2VfYW5kX2V2YWwoIiglcyAqKTAi ICUgdHlwZV9zdHIpLnR5cGUudGFyZ2V0KCkKKyAgICAgICAgIGV4Y2VwdCBS dW50aW1lRXJyb3I6CisgICAgICAgICAgICAgIyBJZiBhc3N1bXB0aW9uIG9m IGN1cnJlbnQgbGFuZ3VhZ2UgdG8gYmUgQy9DKysgd2FzIHdyb25nLCB0aGVu CisgICAgICAgICAgICAgIyBsb29rdXAgdGhlIHR5cGUgdXNpbmcgdGhlIEFQ SS4KKyAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIHJldHVy biBnZGIubG9va3VwX3R5cGUodHlwZV9zdHIpCisgICAgICAgICAgICAgZXhj ZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgcmV0dXJuIE5v bmUKKyAKKyAgICAgQHN0YXRpY21ldGhvZAorICAgICBkZWYgZ2V0X3ZhbHVl X2Zyb21fc3RyKHZhbHVlX3N0cik6CisgICAgICAgICAiIiJBIHV0aWxpdHkg ZnVuY3Rpb24gdG8gZGVkdWNlIHRoZSBnZGIuVmFsdWUgdmFsdWUgZnJvbSBh IHN0cmluZworICAgICAgICAgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZS4KKyAK KyAgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAgICB2YWx1ZV9zdHI6 IFRoZSB2YWx1ZSBzdHJpbmcgZnJvbSB3aGljaCB0aGUgZ2RiLlZhbHVlIHZh bHVlIHNob3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgZGVkdWNl ZC4KKyAKKyAgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAgVGhlIGRl ZHVjZWQgZ2RiLlZhbHVlIHZhbHVlIGlmIHBvc3NpYmxlLCBOb25lIG90aGVy d2lzZS4KKyAgICAgICAgICIiIgorICAgICAgICAgdHJ5OgorICAgICAgICAg ICAgIHJldHVybiBnZGIucGFyc2VfYW5kX2V2YWwodmFsdWVfc3RyKQorICAg ICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICByZXR1 cm4gTm9uZQorIAorIAorIGNsYXNzIEV4cGxvcmVDb21tYW5kKGdkYi5Db21t YW5kKToKKyAgICAgIiIiRXhwbG9yZSBhIHZhbHVlIG9yIGEgdHlwZSB2YWxp ZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LgorIAorICAgICAgICBVc2FnZToK KyAKKyAgICAgICAgICBleHBsb3JlIEFSRworIAorICAgICAgICAgIC0gQVJH IGlzIGVpdGhlciBhIHZhbGlkIGV4cHJlc3Npb24gb3IgYSB0eXBlIG5hbWUu CisgICAgICAgICAgLSBBdCBhbnkgc3RhZ2Ugb2YgZXhwbG9yYXRpb24sIGhp dCB0aGUgcmV0dXJuIGtleSAoaW5zdGVhZCBvZiBhCisgICAgICAgICAgICBj aG9pY2UsIGlmIGFueSkgdG8gcmV0dXJuIHRvIHRoZSBlbmNsb3NpbmcgdHlw ZSBvciB2YWx1ZS4KKyAgICAgIiIiCisgCisgICAgIGRlZiBfX2luaXRfXyhz ZWxmKToKKyAgICAgICAgIHN1cGVyKEV4cGxvcmVDb21tYW5kLCBzZWxmKS5f X2luaXRfXyhuYW1lID0gImV4cGxvcmUiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfY2xhc3MgPSBn ZGIuQ09NTUFORF9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IFRydWUpCisgCisgICAgIGRl ZiBpbnZva2Uoc2VsZiwgYXJnX3N0ciwgZnJvbV90dHkpOgorICAgICAgICAg aWYgRXhwbG9yZVV0aWxzLmNoZWNrX2FyZ3MoImV4cGxvcmUiLCBhcmdfc3Ry KSA9PSBGYWxzZToKKyAgICAgICAgICAgICByZXR1cm4KKyAKKyAgICAgICAg ICMgQ2hlY2sgaWYgaXQgaXMgYSB2YWx1ZQorICAgICAgICAgdmFsdWUgPSBF eHBsb3JlVXRpbHMuZ2V0X3ZhbHVlX2Zyb21fc3RyKGFyZ19zdHIpCisgICAg ICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICBFeHBs b3Jlci5leHBsb3JlX2V4cHIoYXJnX3N0ciwgdmFsdWUsIEZhbHNlKQorICAg ICAgICAgICAgIHJldHVybgorIAorICAgICAgICAgIyBJZiBpdCBpcyBub3Qg YSB2YWx1ZSwgY2hlY2sgaWYgaXQgaXMgYSB0eXBlCisgICAgICAgICBkYXRh dHlwZSA9IEV4cGxvcmVVdGlscy5nZXRfdHlwZV9mcm9tX3N0cihhcmdfc3Ry KQorICAgICAgICAgaWYgZGF0YXR5cGUgaXMgbm90IE5vbmU6CisgICAgICAg ICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKGFyZ19zdHIsIGRhdGF0eXBl LCBGYWxzZSkKKyAgICAgICAgICAgICByZXR1cm4KKyAKKyAgICAgICAgICMg SWYgaXQgaXMgbmVpdGhlciBhIHZhbHVlIG5vciBhIHR5cGUsIHJhaXNlIGFu IGVycm9yLgorICAgICAgICAgcmFpc2UgZ2RiLkdkYkVycm9yKAorICAgICAg ICAgICAgICgiJyVzJyBuZWl0aGVyIGV2YWx1YXRlcyB0byBhIHZhbHVlIG5v ciBpcyBhIHR5cGUgIgorICAgICAgICAgICAgICAiaW4gdGhlIGN1cnJlbnQg Y29udGV4dC4iICUKKyAgICAgICAgICAgICAgYXJnX3N0cikpCisgCisgCisg Y2xhc3MgRXhwbG9yZVZhbHVlQ29tbWFuZChnZGIuQ29tbWFuZCk6CisgICAg ICIiIkV4cGxvcmUgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiB2YWxpZCBpbiB0 aGUgY3VycmVudCBjb250ZXh0LgorIAorICAgICAgICBVc2FnZToKKyAKKyAg ICAgICAgICBleHBsb3JlIHZhbHVlIEFSRworIAorICAgICAgICAgIC0gQVJH IGlzIGEgdmFsaWQgZXhwcmVzc2lvbi4KKyAgICAgICAgICAtIEF0IGFueSBz dGFnZSBvZiBleHBsb3JhdGlvbiwgaGl0IHRoZSByZXR1cm4ga2V5IChpbnN0 ZWFkIG9mIGEKKyAgICAgICAgICAgIGNob2ljZSwgaWYgYW55KSB0byByZXR1 cm4gdG8gdGhlIGVuY2xvc2luZyB2YWx1ZS4KKyAgICAgIiIiCisgIAorICAg ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICBzdXBlcihFeHBsb3Jl VmFsdWVDb21tYW5kLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgICBu YW1lID0gImV4cGxvcmUgdmFsdWUiLCBjb21tYW5kX2NsYXNzID0gZ2RiLkNP TU1BTkRfREFUQSkKKyAKKyAgICAgZGVmIGludm9rZShzZWxmLCBhcmdfc3Ry LCBmcm9tX3R0eSk6CisgICAgICAgICBpZiBFeHBsb3JlVXRpbHMuY2hlY2tf YXJncygiZXhwbG9yZSB2YWx1ZSIsIGFyZ19zdHIpID09IEZhbHNlOgorICAg ICAgICAgICAgIHJldHVybgorIAorICAgICAgICAgdmFsdWUgPSBFeHBsb3Jl VXRpbHMuZ2V0X3ZhbHVlX2Zyb21fc3RyKGFyZ19zdHIpCisgICAgICAgICBp ZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgIHJhaXNlIGdkYi5HZGJF cnJvcigKKyAgICAgICAgICAgICAgICAgKCIgJyVzJyBkb2VzIG5vdCBldmFs dWF0ZSB0byBhIHZhbHVlIGluIHRoZSBjdXJyZW50ICIKKyAgICAgICAgICAg ICAgICAgICJjb250ZXh0LiIgJQorICAgICAgICAgICAgICAgICAgYXJnX3N0 cikpCisgICAgICAgICAgICAgcmV0dXJuCisgCisgICAgICAgICBFeHBsb3Jl ci5leHBsb3JlX2V4cHIoYXJnX3N0ciwgdmFsdWUsIEZhbHNlKQorIAorIAor IGNsYXNzIEV4cGxvcmVUeXBlQ29tbWFuZChnZGIuQ29tbWFuZCk6ICAgICAg ICAgICAgCisgICAgICIiIkV4cGxvcmUgYSB0eXBlIG9yIHRoZSB0eXBlIG9m IGFuIGV4cHJlc3Npb24gdmFsaWQgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAg Y29udGV4dC4KKyAKKyAgICAgICAgVXNhZ2U6CisgCisgICAgICAgICAgZXhw bG9yZSB0eXBlIEFSRworIAorICAgICAgICAgIC0gQVJHIGlzIGEgdmFsaWQg ZXhwcmVzc2lvbiBvciBhIHR5cGUgbmFtZS4KKyAgICAgICAgICAtIEF0IGFu eSBzdGFnZSBvZiBleHBsb3JhdGlvbiwgaGl0IHRoZSByZXR1cm4ga2V5IChp bnN0ZWFkIG9mIGEKKyAgICAgICAgICAgIGNob2ljZSwgaWYgYW55KSB0byBy ZXR1cm4gdG8gdGhlIGVuY2xvc2luZyB0eXBlLgorICAgICAiIiIKKyAKKyAg ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgc3VwZXIoRXhwbG9y ZVR5cGVDb21tYW5kLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgICBu YW1lID0gImV4cGxvcmUgdHlwZSIsIGNvbW1hbmRfY2xhc3MgPSBnZGIuQ09N TUFORF9EQVRBKQorIAorICAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ19zdHIs IGZyb21fdHR5KToKKyAgICAgICAgIGlmIEV4cGxvcmVVdGlscy5jaGVja19h cmdzKCJleHBsb3JlIHR5cGUiLCBhcmdfc3RyKSA9PSBGYWxzZToKKyAgICAg ICAgICAgICByZXR1cm4KKyAKKyAgICAgICAgIGRhdGF0eXBlID0gRXhwbG9y ZVV0aWxzLmdldF90eXBlX2Zyb21fc3RyKGFyZ19zdHIpCisgICAgICAgICBp ZiBkYXRhdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICBFeHBsb3Jl ci5leHBsb3JlX3R5cGUoYXJnX3N0ciwgZGF0YXR5cGUsIEZhbHNlKQorICAg ICAgICAgICAgIHJldHVybgorIAorICAgICAgICAgdmFsdWUgPSBFeHBsb3Jl VXRpbHMuZ2V0X3ZhbHVlX2Zyb21fc3RyKGFyZ19zdHIpCisgICAgICAgICBp ZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICBwcmludCAiJyVz JyBpcyBvZiB0eXBlICclcycuIiAlIChhcmdfc3RyLCBzdHIodmFsdWUudHlw ZSkpCisgICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKHN0cih2 YWx1ZS50eXBlKSwgdmFsdWUudHlwZSwgRmFsc2UpCisgCisgICAgICAgICBy YWlzZSBnZGIuR2RiRXJyb3IoKCInJXMnIGlzIG5vdCBhIHR5cGUgb3IgdmFs dWUgaW4gdGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiY29udGV4dC4iICUgYXJnX3N0cikpCisgCisgCisgRXhwbG9yZXIu aW5pdF9lbnYoKQorIAorIEV4cGxvcmVDb21tYW5kKCkKKyBFeHBsb3JlVmFs dWVDb21tYW5kKCkKKyBFeHBsb3JlVHlwZUNvbW1hbmQoKQpJbmRleDogdGVz dHN1aXRlL2dkYi5weXRob24vTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi90ZXN0c3VpdGUv Z2RiLnB5dGhvbi9NYWtlZmlsZS5pbix2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4xNQpkaWZmIC1jIC1wIC1yMS4xNSBNYWtlZmlsZS5pbgoqKiogdGVzdHN1 aXRlL2dkYi5weXRob24vTWFrZWZpbGUuaW4JMjIgTWFyIDIwMTIgMDg6MTA6 NDQgLTAwMDAJMS4xNQotLS0gdGVzdHN1aXRlL2dkYi5weXRob24vTWFrZWZp bGUuaW4JMjYgTWFyIDIwMTIgMDc6MDE6MDIgLTAwMDAKKioqKioqKioqKioq KioqIEVYRUNVVEFCTEVTID0gcHktdHlwZSBweS12YWx1ZSBweS1wcmV0dHkK KioqIDUsMTEgKioqKgogIAlweS1zeW1ib2wgcHktbWkgcHktYnJlYWtwb2lu dCBweS1pbmZlcmlvciBweS1pbmZ0aHJlYWQgXAogIAlweS1zaGFyZWQgcHl0 aG9uIGxpYi10eXBlcyBweS1ldmVudHMgcHktZXZ0aHJlYWRzIHB5LWZyYW1l IFwKICAJcHktbWkgcHktcHAtbWFpbnQgcHktcHJvZ3NwYWNlIHB5LXNlY3Rp b24tc2NyaXB0IHB5LW9iamZpbGUgXAohIAlweS1maW5pc2gtYnJlYWtwb2lu dCBweS1maW5pc2gtYnJlYWtwb2ludDIgcHktdmFsdWUtY2MKICAKICBNSVND RUxMQU5FT1VTID0gcHktc2hhcmVkLXNsLnNsIHB5LWV2ZW50cy1zaGxpYi5z byBweS1ldmVudHMtc2hsaWItbm9kZWJ1Zy5zbyAKICAKLS0tIDUsMTIgLS0t LQogIAlweS1zeW1ib2wgcHktbWkgcHktYnJlYWtwb2ludCBweS1pbmZlcmlv ciBweS1pbmZ0aHJlYWQgXAogIAlweS1zaGFyZWQgcHl0aG9uIGxpYi10eXBl cyBweS1ldmVudHMgcHktZXZ0aHJlYWRzIHB5LWZyYW1lIFwKICAJcHktbWkg cHktcHAtbWFpbnQgcHktcHJvZ3NwYWNlIHB5LXNlY3Rpb24tc2NyaXB0IHB5 LW9iamZpbGUgXAohIAlweS1maW5pc2gtYnJlYWtwb2ludCBweS1maW5pc2gt YnJlYWtwb2ludDIgcHktdmFsdWUtY2MgcHktZXhwbG9yZSBcCiEgCXB5LWV4 cGxvcmUtY2MKICAKICBNSVNDRUxMQU5FT1VTID0gcHktc2hhcmVkLXNsLnNs IHB5LWV2ZW50cy1zaGxpYi5zbyBweS1ldmVudHMtc2hsaWItbm9kZWJ1Zy5z byAKICAKSW5kZXg6IHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUt Y2MuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3Rz dWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUtY2MuZXhwCmRpZmYgLU4gdGVz dHN1aXRlL2dkYi5weXRob24vcHktZXhwbG9yZS1jYy5leHAKKioqIC9kZXYv bnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCi0tLSB0ZXN0c3VpdGUv Z2RiLnB5dGhvbi9weS1leHBsb3JlLWNjLmV4cAkyNiBNYXIgMjAxMiAwNzow MTowMiAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSwx NDYgLS0tLQorICMgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorIAorICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAjCisgIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAjIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICMKKyAjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyAKKyAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHREIgdGVzdHN1 aXRlLiAgSXQgdGVzdHMgdGhlIG1lY2hhbmlzbQorICMgZXhwb3NpbmcgdmFs dWVzIHRvIFB5dGhvbi4KKyAKKyBpZiB7IFtza2lwX2NwbHVzX3Rlc3RzXSB9 IHsgY29udGludWUgfQorIAorIHNldCB0ZXN0ZmlsZSAicHktZXhwbG9yZSIK KyBzZXQgc3JjZmlsZSAke3Rlc3RmaWxlfS5jYworIHNldCBiaW5maWxlICR7 b2JqZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0KKyAKKyBpZiB7W3ByZXBh cmVfZm9yX3Rlc3RpbmcgJHRlc3RmaWxlLmV4cCAkdGVzdGZpbGUgJHNyY2Zp bGUge2RlYnVnIGMrK31dfSB7CisgICAgIHJldHVybiAtMQorIH0KKyAKKyAj IFNraXAgYWxsIHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVu YWJsZWQuCisgaWYgeyBbc2tpcF9weXRob25fdGVzdHNdIH0geyBjb250aW51 ZSB9CisgCisgc2V0IGludF9wdHJfcmVmX2Rlc2MgIlRoZSB2YWx1ZSBvZiAn aW50X3B0cl9yZWYnIGlzIG9mIHR5cGUgJ2ludF9wdHInIHdoaWNoIGlzIGEg dHlwZWRlZiBvZiB0eXBlICdpbnQgXFwqJy4qXCdpbnRfcHRyX3JlZicgaXMg YSBwb2ludGVyIHRvIGEgdmFsdWUgb2YgdHlwZSAnaW50Jy4qIgorIAorIHNl dCBiX2Rlc2MgIlRoZSB2YWx1ZSBvZiAnYicgaXMgYSBzdHJ1Y3QvY2xhc3Mg b2YgdHlwZSAnQicgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczouKlwKKyBB ID0gPEVudGVyIDAgdG8gZXhwbG9yZSB0aGlzIGJhc2UgY2xhc3Mgb2YgdHlw ZSAnQSc+LipcCisgaSA9IDEwIFxcLlxcLiBcXChWYWx1ZSBvZiB0eXBlICdp bnQnXFwpLipcCisgYyA9IDk3ICdhJyBcXC5cXC4gXFwoVmFsdWUgb2YgdHlw ZSAnY2hhcidcXCkuKiIKKyAKKyBzZXQgQl9kZXNjICInQicgaXMgYSBzdHJ1 Y3QvY2xhc3Mgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczouKlwKKyBBID0g PEVudGVyIDAgdG8gZXhwbG9yZSB0aGlzIGJhc2UgY2xhc3Mgb2YgdHlwZSAn QSc+LipcCisgaSA9IDxFbnRlciAxIHRvIGV4cGxvcmUgdGhpcyBmaWVsZCBv ZiB0eXBlICdpbnQnPi4qXAorIGMgPSA8RW50ZXIgMiB0byBleHBsb3JlIHRo aXMgZmllbGQgb2YgdHlwZSAnY2hhcic+LioiCisgCisgaWYgIVtydW50b19t YWluXSB7CisgICAgcmV0dXJuIC0xCisgfQorIAorIGdkYl9icmVha3BvaW50 IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBoZXJlLiJdCisgZ2RiX2Nv bnRpbnVlX3RvX2JyZWFrcG9pbnQgIkJyZWFrIGhlcmUiICIuKkJyZWFrIGhl cmUuKiIKKyAKKyBnZGJfdGVzdCAiZXhwbG9yZSBBIiAiJ0EnIGlzIGEgc3Ry dWN0L2NsYXNzIHdpdGggbm8gZmllbGRzXC4iCisgZ2RiX3Rlc3QgImV4cGxv cmUgYSIgIlRoZSB2YWx1ZSBvZiAnYScgaXMgYSBzdHJ1Y3QvY2xhc3Mgb2Yg dHlwZSAnY29uc3QgQScgd2l0aCBubyBmaWVsZHNcLiIKKyBnZGJfdGVzdCAi ZXhwbG9yZSBpbnRfcmVmIiAiJ2ludF9yZWYnIGlzIGEgc2NhbGFyIHZhbHVl IG9mIHR5cGUgJ2ludCcuKmludF9yZWYgPSAxMCIKKyAKKyBnZGJfdGVzdF9t dWx0aXBsZSAiZXhwbG9yZSBpbnRfcHRyX3JlZiIgIiIgeworICAgICAtcmUg IiRpbnRfcHRyX3JlZl9kZXNjLipDb250aW51ZSBleHBsb3JpbmcgaXQgYXMg YSBwb2ludGVyIHRvIGEgc2luZ2xlIHZhbHVlIFxcXFt5L25cXFxdOi4qIiB7 CisgICAgICAgICBwYXNzICJleHBsb3JlIGludF9wdHJfcmVmIgorICAgICAg ICAgZ2RiX3Rlc3RfbXVsdGlwbGUgInkiICJleHBsb3JlX2ludF9wdHJfcmVm X2FzX3NpbmdsZV92YWx1ZV9wb2ludGVyIiB7CisgICAgICAgICAgICAgLXJl ICInXFsqXF1pbnRfcHRyX3JlZicgaXMgYSBzY2FsYXIgdmFsdWUgb2YgdHlw ZSAnaW50Jy4qXFsqXF1pbnRfcHRyX3JlZiA9IDEwLiokZ2RiX3Byb21wdCIg eworICAgICAgICAgICAgICAgICBwYXNzICJleHBsb3JlX2ludF9wdHJfcmVm X2FzX3NpbmdsZV92YWx1ZV9wb2ludGVyIgorICAgICAgICAgICAgIH0KKyAg ICAgICAgIH0KKyAgICAgfQorIH0KKyAKKyBnZGJfdGVzdF9tdWx0aXBsZSAi ZXhwbG9yZSBiIiAiIiB7CisgICAgIC1yZSAiJGJfZGVzYy4qRW50ZXIgdGhl IGZpZWxkIG51bWJlciBvZiBjaG9pY2U6LioiIHsKKyAgICAgICAgIHBhc3Mg ImV4cGxvcmUgYiIKKyAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIwIiAi ZXhwbG9yZV9iYXNlX2NsYXNzX0EiIHsKKyAgICAgICAgICAgICAtcmUgIlRo ZSB2YWx1ZSBvZiAnYlwuQScgaXMgYSBzdHJ1Y3QvY2xhc3Mgb2YgdHlwZSAn QScgd2l0aCBubyBmaWVsZHNcLiIgeworICAgICAgICAgICAgICAgICBwYXNz ICJleHBsb3JlX2Jhc2VfY2xhc3NfQSIKKyAgICAgICAgICAgICAgICAgZ2Ri X3Rlc3RfbXVsdGlwbGUgIlwwIiAicmV0dXJuX3RvX2JfZnJvbV9BIiB7Cisg ICAgICAgICAgICAgICAgICAgICAtcmUgIi4qJGJfZGVzYy4qRW50ZXIgdGhl IGZpZWxkIG51bWJlciBvZiBjaG9pY2U6LioiIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICBwYXNzICJyZXR1cm5fdG9fYl9mcm9tX0EiCisgICAgICAg ICAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjEiICJleHBs b3JlX2ZpZWxkX2lfb2ZfYiIgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtcmUgIidiXC5pJyBpcyBhIHNjYWxhciB2YWx1ZSBvZiB0eXBlICdp bnQnLipiXC5pID0gMTAuKiIgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFzcyAiZXhwbG9yZV9maWVsZF9pX29mX2IiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAi XDAiICJyZXR1cm5fdG9fYl9mcm9tX2kiIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtcmUgIiRiX2Rlc2MuKkVudGVyIHRoZSBm aWVsZCBudW1iZXIgb2YgY2hvaWNlOi4qIiB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgInJldHVybl90b19iX2Zy b21faSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVs dGlwbGUgIjIiICJleHBsb3JlX2ZpZWxkX2Nfb2ZfYiIgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtcmUgIidiXC5jJyBpcyBhIHNjYWxhciB2 YWx1ZSBvZiB0eXBlICdjaGFyJy4qYlwuYyA9IC4qJ2EnLioiIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmVfZmll bGRfY19vZl9iIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAicmV0dXJuX3RvX2JfZnJvbV9jIiB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXJlICIk Yl9kZXNjLipFbnRlciB0aGUgZmllbGQgbnVtYmVyIG9mIGNob2ljZTouKiIg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXNzICJyZXR1cm5fdG9fYl9mcm9tX2kiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgInJldHVybl90b19nZGJf cHJvbXB0IiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1yZSAi JGdkYl9wcm9tcHQiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhc3MgInJldHVybl90b19nZGJfcHJvbXB0X2Zyb21fYiIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQor IH0KKyAKKyBnZGJfdGVzdF9tdWx0aXBsZSAiZXhwbG9yZSBCIiAiIiB7Cisg ICAgIC1yZSAiJEJfZGVzYy4qRW50ZXIgdGhlIGZpZWxkIG51bWJlciBvZiBj aG9pY2U6LioiIHsKKyAgICAgICAgIHBhc3MgImV4cGxvcmUgQiIKKyAgICAg ICAgIGdkYl90ZXN0X211bHRpcGxlICIwIiAiZXhwbG9yZV9iYXNlX2NsYXNz X0EiIHsKKyAgICAgICAgICAgICAtcmUgImJhc2UgY2xhc3MgJ0EnIG9mICdC JyBpcyBhIHN0cnVjdC9jbGFzcyBvZiB0eXBlICdBJyB3aXRoIG5vIGZpZWxk c1wuIiB7CisgICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmVfYmFzZV9j bGFzc19BIgorICAgICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAi XDAiICJyZXR1cm5fdG9fQiIgeworICAgICAgICAgICAgICAgICAgICAgLXJl ICIkQl9kZXNjLipFbnRlciB0aGUgZmllbGQgbnVtYmVyIG9mIGNob2ljZTou KiIgeworICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgInJldHVybl90 b19CIgorICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRp cGxlICIxIiAiZXhwbG9yZV9maWVsZF9pX29mX0IiIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLXJlICJmaWVsZCAnaScgb2YgJ0InIGlzIG9m IGEgc2NhbGFyIHR5cGUgJ2ludCcuKiIgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZV9maWVsZF9pX29mX0IiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0 aXBsZSAiXDAiICJyZXR1cm5fdG9fQl9mcm9tX2kiIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtcmUgIiRCX2Rlc2MuKkVudGVy IHRoZSBmaWVsZCBudW1iZXIgb2YgY2hvaWNlOi4qIiB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgInJldHVybl90 b19CX2Zyb21faSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3Rl c3RfbXVsdGlwbGUgIjIiICJleHBsb3JlX2ZpZWxkX2Nfb2ZfQiIgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtcmUgImZpZWxkICdjJyBvZiAn QicgaXMgb2YgYSBzY2FsYXIgdHlwZSAnY2hhcicuKiIgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZV9maWVsZF9j X29mX0IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJf dGVzdF9tdWx0aXBsZSAiXDAiICJyZXR1cm5fdG9fQl9mcm9tX2MiIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtcmUgIiRCX2Rl c2MuKkVudGVyIHRoZSBmaWVsZCBudW1iZXIgb2YgY2hvaWNlOi4qIiB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Mg InJldHVybl90b19CX2Zyb21fYyIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAicmV0dXJuX3RvX2dkYl9wcm9t cHQiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXJlICIkZ2Ri X3Byb21wdCIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGFzcyAicmV0dXJuX3RvX2dkYl9wcm9tcHRfZnJvbV9CIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisgfQpJ bmRleDogdGVzdHN1aXRlL2dkYi5weXRob24vcHktZXhwbG9yZS5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIucHl0 aG9uL3B5LWV4cGxvcmUuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIucHl0aG9u L3B5LWV4cGxvcmUuYwoqKiogL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6 MDAgLTAwMDAKLS0tIHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUu YwkyNiBNYXIgMjAxMiAwNzowMTowMiAtMDAwMAoqKioqKioqKioqKioqKioK KioqIDAgKioqKgotLS0gMSw4MiAtLS0tCisgLyogVGhpcyB0ZXN0Y2FzZSBp cyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKyAKKyAgICBDb3B5 cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAK KyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgCisgICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyAK KyAjZGVmaW5lIEFSUkFZX1NJWkUgMTAKKyAKKyBzdHJ1Y3QgU2ltcGxlU3Ry dWN0CisgeworICAgaW50IGE7CisgICBkb3VibGUgZDsKKyB9OworIAorIHVu aW9uIFNpbXBsZVVuaW9uCisgeworICAgaW50IGk7CisgICBjaGFyIGM7Cisg ICBmbG9hdCBmOworICAgZG91YmxlIGQ7CisgfTsKKyAKKyB0eXBlZGVmIHN0 cnVjdCBTaW1wbGVTdHJ1Y3QgU1M7CisgCisgc3RydWN0IENvbXBsZXhTdHJ1 Y3QKKyB7CisgICBzdHJ1Y3QgU2ltcGxlU3RydWN0IHM7CisgICB1bmlvbiBT aW1wbGVVbmlvbiB1OworICAgU1Mgc2FbQVJSQVlfU0laRV07CisgfTsKKyAK KyB1bmlvbiBDb21wbGV4VW5pb24KKyB7CisgICBTUyBzOworICAgc3RydWN0 IFNpbXBsZVN0cnVjdCBzYVtBUlJBWV9TSVpFXTsKKyB9OworIAorIGludAor IG1haW4gKHZvaWQpCisgeworICAgc3RydWN0IFNpbXBsZVN0cnVjdCBzczsK KyAgIHN0cnVjdCBTaW1wbGVTdHJ1Y3QqIHNzX3B0ciA9ICZzczsKKyAgIFNT IHNzX3Q7CisgCisgICB1bmlvbiBTaW1wbGVVbmlvbiBzdTsKKyAgIHN0cnVj dCBDb21wbGV4U3RydWN0IGNzOworICAgc3RydWN0IENvbXBsZXhTdHJ1Y3Qq IGNzX3B0ciA9ICZjczsKKyAgIHVuaW9uIENvbXBsZXhVbmlvbiBjdTsKKyAg IGludCBpOworICAgZG91YmxlIGRhcnJheVs1XSA9IHswLjEsIDAuMiwgMC4z LCAwLjQsIDAuNX07CisgICBkb3VibGUgKmRhcnJheV9yZWYgPSBkYXJyYXk7 CisgCisgICBzcy5hID0gMTA7CisgICBzcy5kID0gMTAwLjAxOworICAgc3Nf dCA9IHNzOworICAgCisgICBzdS5kID0gMTAwLjE7CisgCisgICBjcy5zID0g c3M7CisgICBjcy51ID0gc3U7CisgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRTsgaSsrKQorICAgICB7CisgICAgICAgY3Muc2FbaV0uYSA9IGk7Cisg ICAgICAgY3Muc2FbaV0uZCA9IDEwLjEwICsgaTsKKyAgICAgICBjdS5zYVtp XS5hID0gaTsKKyAgICAgICBjdS5zYVtpXS5kID0gMTAwLjEwICsgaTsKKyAg ICAgfQorIAorICAgcmV0dXJuIDA7IC8qIEJyZWFrIGhlcmUuICovCisgfQpJ bmRleDogdGVzdHN1aXRlL2dkYi5weXRob24vcHktZXhwbG9yZS5jYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1leHBsb3JlLmNjCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5weXRo b24vcHktZXhwbG9yZS5jYwoqKiogL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6 MDA6MDAgLTAwMDAKLS0tIHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWV4cGxv cmUuY2MJMjYgTWFyIDIwMTIgMDc6MDE6MDIgLTAwMDAKKioqKioqKioqKioq KioqCioqKiAwICoqKioKLS0tIDEsNTQgLS0tLQorIC8qIFRoaXMgdGVzdGNh c2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisgCisgICAg Q29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAg ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorICAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICov CisgCisgY2xhc3MgQSB7CisgIHB1YmxpYzoKKyAgIHZpcnR1YWwgfkEoKSB7 IH0KKyB9OworIAorIGNsYXNzIEIgOiBwdWJsaWMgQSB7CisgIHB1YmxpYzoK KyAgIHZpcnR1YWwgfkIoKSB7IH0KKyAKKyAgIGludCBpOworICAgY2hhciBj OworIH07CisgCisgdHlwZWRlZiBpbnQgKmludF9wdHI7CisgCisgaW50Cisg ZnVuYyAoY29uc3QgQSAmYSkKKyB7CisgICBpbnQgdmFsID0gMTA7CisgICBp bnQgJmludF9yZWYgPSB2YWw7CisgICBpbnRfcHRyIHB0ciA9ICZ2YWw7Cisg ICBpbnRfcHRyICZpbnRfcHRyX3JlZiA9IHB0cjsKKyAgIEIgYjsKKyAKKyAg IGIuaSA9IDEwOworICAgYi5jID0gJ2EnOworIAorICAgcmV0dXJuIDA7IC8q IEJyZWFrIGhlcmUuICAqLworIH0KKyAKKyBpbnQKKyBtYWluICgpCisgewor ICAgQSBvYmo7CisgICByZXR1cm4gZnVuYyAob2JqKTsKKyB9CkluZGV4OiB0 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1leHBsb3JlLmV4cAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1leHBsb3JlLmV4cApkaWZmIC1OIHRlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWV4cGxvcmUuZXhwCioqKiAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDow MCAtMDAwMAotLS0gdGVzdHN1aXRlL2dkYi5weXRob24vcHktZXhwbG9yZS5l eHAJMjYgTWFyIDIwMTIgMDc6MDE6MDIgLTAwMDAKKioqKioqKioqKioqKioq CioqKiAwICoqKioKLS0tIDEsNDY5IC0tLS0KKyAjIENvcHlyaWdodCAyMDEy IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorICMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICMgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAjCisgIyBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICMKKyAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIyBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAKKyBzZXQgdGVzdGZpbGUgInB5LWV4cGxv cmUiCisgc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworIHNldCBiaW5maWxl ICR7b2JqZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0KKyBpZiB7IFtwcmVw YXJlX2Zvcl90ZXN0aW5nICR7dGVzdGZpbGV9LmV4cCAke3Rlc3RmaWxlfSAk e3NyY2ZpbGV9XSB9IHsKKyAgICAgcmV0dXJuIC0xCisgfQorIAorICMgU2tp cCBhbGwgdGVzdHMgaWYgUHl0aG9uIHNjcmlwdGluZyBpcyBub3QgZW5hYmxl ZC4KKyBpZiB7IFtza2lwX3B5dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0K KyAKKyBzZXQgU1MgInN0cnVjdCBTaW1wbGVTdHJ1Y3QiCisgc2V0IFNVICJ1 bmlvbiBTaW1wbGVVbmlvbiIKKyBzZXQgQ1MgInN0cnVjdCBDb21wbGV4U3Ry dWN0IgorIHNldCBDVSAidW5pb24gQ29tcGxleFVuaW9uIgorIHNldCBlbnRl cl9maWVsZF9udW1iZXJfcHJvbXB0ICB7RW50ZXIgdGhlIGZpZWxkIG51bWJl ciBvZiBjaG9pY2U6IH0KKyBzZXQgcmV0dXJuX3RvX3BhcmVudF9wcm9tcHQg e1ByZXNzIGVudGVyIHRvIHJldHVybiB0byBwYXJlbnQgdmFsdWU6IH0KKyBz ZXQgYXJyYXlfaW5kZXhfcHJvbXB0IHtFbnRlciB0aGUgaW5kZXggb2YgdGhl IGVsZW1lbnQgeW91IHdhbnQgdG8gZXhwbG9yZSBpbiAuKjogfQorIAorIHBy b2MgY29tcG91bmRfZGVzY3JpcHRpb24geyB2YWx1ZV9uYW1lIHR5cGVfZGVz YyB0eXBlX25hbWUgfSB7CisgICAgIHJldHVybiAiVGhlIHZhbHVlIG9mICck dmFsdWVfbmFtZScgaXMgYSAkdHlwZV9kZXNjIG9mIHR5cGUgJyR0eXBlX25h bWUnIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6XFtcclxuXF0rIgorIH0K KyAKKyBwcm9jIHR5cGVkZWZfZGVzY3JpcHRpb24geyB2YWx1ZV9uYW1lIHR5 cGVkZWZfbmFtZSB0eXBlX25hbWUgfSB7CisgICAgIHJldHVybiAiVGhlIHZh bHVlIG9mICckdmFsdWVfbmFtZScgaXMgb2YgdHlwZSAnJHR5cGVkZWZfbmFt ZScgd2hpY2ggaXMgYSB0eXBlZGVmIG9mIHR5cGUgJyR0eXBlX25hbWUnXC5c W1xyXG5cXSsiCisgfQorIAorIHByb2Mgc2NhbGFyX2Rlc2NyaXB0aW9uIHsg dmFsdWVfbmFtZSB0eXBlIH0geworICAgICByZXR1cm4gIickdmFsdWVfbmFt ZScgaXMgYSBzY2FsYXIgdmFsdWUgb2YgdHlwZSAnJHR5cGUnXC5cW1xyXG5c XSsiCisgfQorIAorIHByb2MgYXJyYXlfZGVzY3JpcHRpb24geyB2YWx1ZV9u YW1lIHR5cGUgfSB7CisgICAgIHJldHVybiAiJyR2YWx1ZV9uYW1lJyBpcyBh biBhcnJheSBvZiAnJHR5cGUnXC5cW1xyXG5cXSsiCisgfQorIAorIHByb2Mg cG9pbnRlcl9kZXNjcmlwdGlvbiB7IHZhbHVlX25hbWUgdHlwZV9uYW1lIH0g eworICAgICBzZXQgdHlwZV9kZXNjcmlwdGlvbiAiJyR2YWx1ZV9uYW1lJyBp cyBhIHBvaW50ZXIgdG8gYSB2YWx1ZSBvZiB0eXBlICckdHlwZV9uYW1lJ1wu XFtcclxuXF0rIgorICAgICBzZXQgcHJvbXB0ICJDb250aW51ZSBleHBsb3Jp bmcgaXQgYXMgYSBwb2ludGVyIHRvIGEgc2luZ2xlIHZhbHVlIFxbXFtcXXkv blxbXF1cXTogIiAKKyAgICAgcmV0dXJuICIkdHlwZV9kZXNjcmlwdGlvbiRw cm9tcHQiCisgfQorIAorIHByb2MgZmllbGRfdmFsdWVzIHsgYXJncyB9IHsK KyAgICAgc2V0IHJlc3VsdCAiIgorICAgICBmb3JlYWNoIGZpZWxkICRhcmdz IHsKKyAgICAgICAgIHNldCByZXN1bHQgIiRyZXN1bHRcWyBcXSokZmllbGQg XFtcLlxdXFtcLlxdIFxbXChcXVZhbHVlIG9mIHR5cGUgLipcW1wpXF1cW1xy XG5cXSsiCisgICAgIH0KKyAgICAgcmV0dXJuICRyZXN1bHQKKyB9CisgCisg cHJvYyBmaWVsZF9jaG9pY2VzIHsgYXJncyB9IHsKKyAgICAgc2V0IHJlc3Vs dCAiIgorICAgICBzZXQgZmllbGRfbnVtIDAKKyAgICAgZm9yZWFjaCBmaWVs ZCAkYXJncyB7CisgICAgICAgICBzZXQgcmVzdWx0ICIkcmVzdWx0JGZpZWxk XFsgXF0rPVxbIFxdKzxFbnRlciAkZmllbGRfbnVtIHRvIGV4cGxvcmUgdGhp cyBmaWVsZCBvZiB0eXBlIC4qIgorICAgICAgICAgaW5jciBmaWVsZF9udW0K KyAgICAgfQorICAgICByZXR1cm4gJHJlc3VsdAorIH0KKyAKKyBwcm9jIHNj YWxhcl92YWx1ZSB7IHZhbHVlX25hbWUgdmFsdWUgfSB7CisgICAgIHJldHVy biAiJHZhbHVlX25hbWUgPSAkdmFsdWVcW3JcblxdKyIKKyB9CisgCisgc2V0 IFNTX2ZpZWxkcyBbZmllbGRfdmFsdWVzIHthID0gMTB9IHtkID0gMTAwWy5d Lip9XQorIAorIGlmICFbcnVudG9fbWFpbl0geworICAgIHJldHVybiAtMQor IH0KKyAKKyBnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAi QnJlYWsgaGVyZS4iXQorIGdkYl9jb250aW51ZV90b19icmVha3BvaW50ICJC cmVhayBoZXJlIiAiLipCcmVhayBoZXJlLioiCisgCisgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworICMgVmFsdWUgZXhwbG9yYXRpb24gdGVzdHMKKyAj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgCisgZ2RiX3Rlc3QgImV4cGxv cmUgaSIgIltzY2FsYXJfZGVzY3JpcHRpb24ge2l9IHtpbnR9XS4qaSA9IC4q IgorIGdkYl90ZXN0ICJleHBsb3JlIHNzIiAiW2NvbXBvdW5kX2Rlc2NyaXB0 aW9uIHtzc30ge3N0cnVjdC9jbGFzc30gJFNTXS4qJFNTX2ZpZWxkcyIKKyBn ZGJfdGVzdCAiZXhwbG9yZSAqc3NfcHRyIiAiW2NvbXBvdW5kX2Rlc2NyaXB0 aW9uIHtcKnNzX3B0cn0ge3N0cnVjdC9jbGFzc30gJFNTXS4qJFNTX2ZpZWxk cyIKKyBnZGJfdGVzdCAiZXhwbG9yZSBzc190IiAiW3R5cGVkZWZfZGVzY3Jp cHRpb24ge3NzX3R9IHtTU30gJFNTXS4qW2NvbXBvdW5kX2Rlc2NyaXB0aW9u IHtzc190fSB7c3RydWN0L2NsYXNzfSAkU1NdLiokU1NfZmllbGRzIgorIAor IGdkYl90ZXN0X211bHRpcGxlICJleHBsb3JlIHNzX3B0ciIgIiIgeworICAg ICAtcmUgIltwb2ludGVyX2Rlc2NyaXB0aW9uIHtzc19wdHJ9ICRTU10uKiIg eworICAgICAgICAgcGFzcyAiZXhwbG9yZSBzc19wdHIiCisgICAgICAgICBn ZGJfdGVzdF9tdWx0aXBsZSAieSIgImV4cGxvcmVfYXNfc2luZ2xlX3ZhbHVl X3BvaW50ZXIiIHsKKyAgICAgICAgICAgICAtcmUgIiRTU19maWVsZHMiIHsK KyAgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZSBzc19wdHIgYXMgc2lu Z2xlIHZhbHVlIHBvaW50ZXIiCisgICAgICAgICAgICAgfQorICAgICAgICAg fQorICAgICB9CisgfQorIAorIGdkYl90ZXN0X211bHRpcGxlICJleHBsb3Jl IGRhcnJheV9yZWYiICIiIHsKKyAgICAgLXJlICJbcG9pbnRlcl9kZXNjcmlw dGlvbiB7ZGFycmF5X3JlZn0ge2RvdWJsZX1dLioiIHsKKyAgICAgICAgIHBh c3MgImV4cGxvcmUgZGFycmF5X3JlZiIKKyAgICAgICAgIGdkYl90ZXN0X211 bHRpcGxlICJuIiAibm9fdG9fZXhwbG9yZV9hc19wb2ludGVyIiB7CisgICAg ICAgICAgICAgLXJlICJDb250aW51ZSBleHBsb3JpbmcgaXQgYXMgYSBwb2lu dGVyIHRvIGFuIGFycmF5IFxbXFtcXXkvblxbXF1cXTogIiB7CisgICAgICAg ICAgICAgICAgIHBhc3MgIm5vX3RvX2V4cGxvcmVfYXNfcG9pbnRlciIKKyAg ICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgInkiICJleHBsb3Jl X2FzX2FycmF5IiB7CisgICAgICAgICAgICAgICAgICAgICAtcmUgIi4qRW50 ZXIgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIGV4cGxv cmUgaW4gJ2RhcnJheV9yZWYnOi4qIiAgeworICAgICAgICAgICAgICAgICAg ICAgICAgIHBhc3MgImV4cGxvcmVfYXNfYXJyYXkiCisgICAgICAgICAgICAg ICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjIiICJleHBsb3JlX2Fz X2FycmF5X2luZGV4XzIiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLXJlICIuKidkYXJyYXlfcmVmXFxcWzJcXFxdJyBpcyBhIHNjYWxhciB2 YWx1ZSBvZiB0eXBlICdkb3VibGUnXC4uKmRhcnJheV9yZWZcXFxbMlxcXF0g PSAwLioiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh c3MgImV4cGxvcmVfYXNfYXJyYXlfaW5kZXhfMiIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgImVu ZCBleHBsb3JlX2FzX2FycmF5X2luZGV4XzIiIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtcmUgIi4qUmV0dXJuaW5nIHRvIHBh cmVudCB2YWx1ZS4qRW50ZXIgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHlv dSB3YW50IHRvIGV4cGxvcmUgaW4gJ2RhcnJheV9yZWYnOi4qIiB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MgImVu ZCBleHBsb3JlX2FzX2FycmF5X2luZGV4XzIiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJc MCIgImVuZCBleHBsb3JlX2FzX2FycmF5IiB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtcmUgIlxbXG5cclxdKyIg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBhc3MgImVuZCBleHBsb3JlX2FzX2FycmF5IgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorIH0KKyAKKyBnZGJfdGVz dF9tdWx0aXBsZSAiZXhwbG9yZSBzdSIgIiIgeworICAgICAtcmUgIltjb21w b3VuZF9kZXNjcmlwdGlvbiB7c3V9IHt1bmlvbn0ge3VuaW9uIFNpbXBsZVVu aW9ufV0uKltmaWVsZF9jaG9pY2VzIHtpfSB7Y30ge2Z9IHtkfV0uKiRlbnRl cl9maWVsZF9udW1iZXJfcHJvbXB0IiB7CisgICAgICAgICBwYXNzICJleHBs b3JlIHN1IgorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjMiICJleHBs b3JlIHN1LmQiIHsKKyAgICAgICAgICAgICAtcmUgIltzY2FsYXJfZGVzY3Jp cHRpb24ge3N1LmR9IHtkb3VibGV9XS4qW3NjYWxhcl92YWx1ZSB7c3UuZH0g ezEwMFsuXS4qfV0uKiRyZXR1cm5fdG9fcGFyZW50X3Byb21wdCIgeworICAg ICAgICAgICAgICAgICBwYXNzICJleHBsb3JlIHN1LmQiCisgICAgICAgICAg ICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAiZW5kIHN1LmQgZXhwbG9y YXRpb24iIHsKKyAgICAgICAgICAgICAgICAgICAgIC1yZSAiLipbY29tcG91 bmRfZGVzY3JpcHRpb24ge3N1fSB7dW5pb259IHt1bmlvbiBTaW1wbGVVbmlv bn1dLipbZmllbGRfY2hvaWNlcyB7aX0ge2N9IHtmfSB7ZH1dLiokZW50ZXJf ZmllbGRfbnVtYmVyX3Byb21wdCIgeworICAgICAgICAgICAgICAgICAgICAg ICAgIHBhc3MgImVuZCBzdS5kIGV4cGxvcmF0aW9uIgorICAgICAgICAgICAg ICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgImVuZCBzdSBl eHBsb3JhdGlvbiIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt cmUgIiRnZGJfcHJvbXB0IiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYXNzICJlbmQgc3UgZXhwbG9yYXRpb24iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyB9Cisg CisgZ2RiX3Rlc3RfbXVsdGlwbGUgImV4cGxvcmUgY3MiICIiIHsKKyAgICAg LXJlICJbY29tcG91bmRfZGVzY3JpcHRpb24ge2NzfSB7c3RydWN0L2NsYXNz fSB7c3RydWN0IENvbXBsZXhTdHJ1Y3R9XS4qW2ZpZWxkX2Nob2ljZXMge3N9 IHt1fSB7c2F9XS4qJGVudGVyX2ZpZWxkX251bWJlcl9wcm9tcHQiIHsKKyAg ICAgICAgIHBhc3MgImV4cGxvcmUgY3MiCisgICAgICAgICBnZGJfdGVzdF9t dWx0aXBsZSAiMCIgImV4cGxvcmUgY3MucyIgeworICAgICAgICAgICAgIC1y ZSAiW2NvbXBvdW5kX2Rlc2NyaXB0aW9uIHtjcy5zfSB7c3RydWN0L2NsYXNz fSB7c3RydWN0IFNpbXBsZVN0cnVjdH1dLipbZmllbGRfdmFsdWVzIHthID0g MTB9IHtkID0gMTAwWy5dLip9XS4qJHJldHVybl90b19wYXJlbnRfcHJvbXB0 IiB7CisgICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmUgY3MucyIKKyAg ICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIiAiICJlbmQgY3Mu cyBleHBsb3JhdGlvbiIgeworICAgICAgICAgICAgICAgICAgICAgLXJlICIu KiRlbnRlcl9maWVsZF9udW1iZXJfcHJvbXB0IiB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgcGFzcyAiZW5kIGNzLnMgZXhwbG9yYXRpb24iCisgICAg ICAgICAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAi ZW5kIGNzIGV4cGxvcmF0aW9uIiB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC1yZSAiJGdkYl9wcm9tcHQiIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhc3MgImVuZCBjcyBleHBsb3JhdGlvbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAg fQorIH0KKyAKKyBnZGJfdGVzdF9tdWx0aXBsZSAiZXhwbG9yZSBjdSIgIiIg eworICAgICAtcmUgIltjb21wb3VuZF9kZXNjcmlwdGlvbiB7Y3V9IHt1bmlv bn0ge3VuaW9uIENvbXBsZXhVbmlvbn1dLipbZmllbGRfY2hvaWNlcyB7c30g e3NhfV0uKiRlbnRlcl9maWVsZF9udW1iZXJfcHJvbXB0IiB7CisgICAgICAg ICBwYXNzICJleHBsb3JlIGN1IgorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgIjEiICJleHBsb3JlIGN1LnNhIiB7CisgICAgICAgICAgICAgLXJlICIu KlthcnJheV9kZXNjcmlwdGlvbiB7Y3Uuc2F9ICRTU10uKiRhcnJheV9pbmRl eF9wcm9tcHQiIHsKKyAgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZSBj dS5zYSIKKyAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjAi ICJleHBsb3JlIGN1LnNhXFswXF0iIHsKKyAgICAgICAgICAgICAgICAgICAg IC1yZSAiW2NvbXBvdW5kX2Rlc2NyaXB0aW9uIHtcKGN1LnNhXClcWzBcXX0g e3N0cnVjdC9jbGFzc30ge3N0cnVjdCBTaW1wbGVTdHJ1Y3R9XS4qW2ZpZWxk X3ZhbHVlcyB7YSA9IDB9IHtkID0gMTAwWy5dLip9XS4qJHJldHVybl90b19w YXJlbnRfcHJvbXB0IiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFz cyAiZXhwbG9yZSBjdS5zYVxbMFxdIgorICAgICAgICAgICAgICAgICAgICAg ICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgImVuZCBjdS5zYVxbMFxdIGV4 cGxvcmF0aW9uIiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1y ZSAiW2FycmF5X2Rlc2NyaXB0aW9uIHtjdS5zYX0gJFNTXSRhcnJheV9pbmRl eF9wcm9tcHQiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhc3MgImVuZCBjdS5zYVxbMFxdIGV4cGxvcmF0aW9uIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIg ImVuZCBjdS5zYSBleHBsb3JhdGlvbiIgeworICAgICAgICAgICAgICAgICAg ICAgLXJlICIuKiRlbnRlcl9maWVsZF9udW1iZXJfcHJvbXB0IiB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgcGFzcyAiZW5kIGN1LnNhIGV4cGxvcmF0 aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRp cGxlICJcMCIgImVuZCBjdSBleHBsb3JhdGlvbiIgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtcmUgIiRnZGJfcHJvbXB0IiB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJlbmQgY3UgZXhwbG9y YXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAg ICB9CisgICAgIH0KKyB9CisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CisgIyBUeXBlIGV4cGxvcmF0aW9uIHRlc3RzCisgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisgCisgcHJvYyBzY2FsYXJfdHlwZV9kZWNzcmlwdGlvbiB7 dHlwZX0geworICAgICByZXR1cm4gIickdHlwZScgaXMgYSBzY2FsYXIgdHlw ZVwuIgorIH0KKyAKKyBwcm9jIGNoaWxkX3NjYWxhcl90eXBlX2Rlc2NyaXB0 aW9uIHtwYXRoIHR5cGV9IHsKKyAgICAgcmV0dXJuICIkcGF0aCBpcyBvZiBh IHNjYWxhciB0eXBlICckdHlwZSdcLiIKKyB9CisgCisgcHJvYyBjb21wb3Vu ZF90eXBlX2Rlc2NyaXB0aW9uIHsgdHlwZV9uYW1lIHR5cGVfZGVzYyB9IHsK KyAgICAgcmV0dXJuICInJHR5cGVfbmFtZScgaXMgYSAkdHlwZV9kZXNjIHdp dGggdGhlIGZvbGxvd2luZyBmaWVsZHM6IgorIH0KKyAKKyBwcm9jIGNoaWxk X2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRpb24geyBwYXRoIHR5cGVfbmFtZSB0 eXBlX2Rlc2MgfSB7CisgICAgIHJldHVybiAiJHBhdGggaXMgYSAkdHlwZV9k ZXNjIG9mIHR5cGUgJyR0eXBlX25hbWUnIHdpdGggdGhlIGZvbGxvd2luZyBm aWVsZHM6IgorIH0KKyAKKyBwcm9jIGNoaWxkX2FycmF5X3R5cGVfZGVzY3Jp cHRpb24geyBwYXRoIHRhcmdldF90eXBlX25hbWUgfSB7CisgICAgIHJldHVy biAiJHBhdGggaXMgYW4gYXJyYXkgb2YgJyR0YXJnZXRfdHlwZV9uYW1lJ1wu IgorIH0KKyAKKyBwcm9jIHR5cGVkZWZfdHlwZV9kZXNjcmlwdGlvbiB7IHR5 cGVfbmFtZSB0YXJnZXRfbmFtZSB9IHsKKyAgICAgcmV0dXJuICJUaGUgdHlw ZSAnJHR5cGVfbmFtZScgaXMgYSB0eXBlZGVmIG9mIHR5cGUgJyR0YXJnZXRf bmFtZSdcLiIKKyB9CisgCisgc2V0IFNTX2ZpZWxkc190eXBlcyBbZmllbGRf Y2hvaWNlcyB7YX0ge2R9XQorIHNldCBTVV9maWVsZHNfdHlwZXMgW2ZpZWxk X2Nob2ljZXMge2l9IHtjfSB7Zn0ge2R9XQorIHNldCBDU19maWVsZHNfdHlw ZXMgW2ZpZWxkX2Nob2ljZXMge3N9IHt1fSB7c2F9XQorIHNldCBDVV9maWVs ZHNfdHlwZXMgW2ZpZWxkX2Nob2ljZXMge3N9IHtzYX1dCisgCisgc2V0IENT X2ZpZWxkXzAgImZpZWxkICdzJyBvZiAnc3RydWN0IENvbXBsZXhTdHJ1Y3Qn IgorIHNldCBDU19maWVsZF8xICJmaWVsZCAndScgb2YgJ3N0cnVjdCBDb21w bGV4U3RydWN0JyIKKyBzZXQgQ1NfZmllbGRfMiAiZmllbGQgJ3NhJyBvZiAn c3RydWN0IENvbXBsZXhTdHJ1Y3QnIgorIHNldCBDU19maWVsZF8yX2FycmF5 X2VsZW1lbnQgImFuIGFycmF5IGVsZW1lbnQgb2YgJENTX2ZpZWxkXzIiCisg Cisgc2V0IENVX2ZpZWxkXzAgImZpZWxkICdzJyBvZiAndW5pb24gQ29tcGxl eFVuaW9uJyIKKyBzZXQgQ1VfZmllbGRfMSAiZmllbGQgJ3NhJyBvZiAndW5p b24gQ29tcGxleFVuaW9uJyIKKyBzZXQgQ1VfZmllbGRfMV9hcnJheV9lbGVt ZW50ICJhbiBhcnJheSBlbGVtZW50IG9mICRDVV9maWVsZF8xIgorIAorIGdk Yl90ZXN0ICJleHBsb3JlIGludCIgIi4qW3NjYWxhcl90eXBlX2RlY3NyaXB0 aW9uIHtpbnR9XS4qIgorIAorIGdkYl90ZXN0X211bHRpcGxlICJleHBsb3Jl IHN0cnVjdCBTaW1wbGVTdHJ1Y3QiICIiIHsKKyAgICAgLXJlICIuKltjb21w b3VuZF90eXBlX2Rlc2NyaXB0aW9uICRTUyB7c3RydWN0L2NsYXNzfV0uKiRT U19maWVsZHNfdHlwZXMuKiIgeworICAgICAgICAgcGFzcyAiZXhwbG9yZSBz dHJ1Y3QgU2ltcGxlU3RydWN0IgorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgIjAiICJleHBsb3JlIHR5cGUgc3RydWN0IFNpbXBsZVN0cnVjdCBmZWls ZCAwIiB7CisgICAgICAgICAgICAgLXJlICIuKltjaGlsZF9zY2FsYXJfdHlw ZV9kZXNjcmlwdGlvbiB7ZmllbGQgJ2EnIG9mICdzdHJ1Y3QgU2ltcGxlU3Ry dWN0J30ge2ludH1dLioiIHsKKyAgICAgICAgICAgICAgICAgcGFzcyAiZXhw bG9yZSB0eXBlIHN0cnVjdCBTaW1wbGVTdHJ1Y3QgZmVpbGQgMCIKKyAgICAg ICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAicmV0dXJuIHRv IHN0cnVjdCBTaW1wbGVTdHJ1Y3QgZnJvbSBmaWVsZCAwIiB7CisgICAgICAg ICAgICAgICAgICAgICAtcmUgIi4qW2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRp b24gJFNTIHtzdHJ1Y3QvY2xhc3N9XS4qJFNTX2ZpZWxkc190eXBlcy4qIiB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIHN0 cnVjdCBTaW1wbGVTdHJ1Y3QgZnJvbSBmaWVsZCAwIgorICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg fQorICAgICAgICAgfQorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjEi ICJleHBsb3JlIHR5cGUgc3RydWN0IFNpbXBsZVN0cnVjdCBmZWlsZCAxIiB7 CisgICAgICAgICAgICAgLXJlICIuKltjaGlsZF9zY2FsYXJfdHlwZV9kZXNj cmlwdGlvbiB7ZmllbGQgJ2QnIG9mICdzdHJ1Y3QgU2ltcGxlU3RydWN0J30g e2RvdWJsZX1dLioiIHsKKyAgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9y ZSB0eXBlIHN0cnVjdCBTaW1wbGVTdHJ1Y3QgZmVpbGQgMSIKKyAgICAgICAg ICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAicmV0dXJuIHRvIHN0 cnVjdCBTaW1wbGVTdHJ1Y3QgZnJvbSBmaWVsZCAxIiB7CisgICAgICAgICAg ICAgICAgICAgICAtcmUgIi4qW2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRpb24g JFNTIHtzdHJ1Y3QvY2xhc3N9XS4qJFNTX2ZpZWxkc190eXBlcy4qIiB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIHN0cnVj dCBTaW1wbGVTdHJ1Y3QgZnJvbSBmaWVsZCAxIgorICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQor ICAgICAgICAgfQorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAi cmV0dXJuIHRvIEdEQiBwcm9tcHQgZnJvbSBzdHJ1Y3QgU2ltcGxlU3RydWN0 IiB7CisgICAgICAgICAgICAgLXJlICIkZ2RiX3Byb21wdCIgeworICAgICAg ICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8gR0RCIHByb21wdCBmcm9tIHN0 cnVjdCBTaW1wbGVTdHJ1Y3QiCisgICAgICAgICAgICAgfQorICAgICAgICAg fQorICAgICB9CisgfQorIAorIGdkYl90ZXN0X211bHRpcGxlICJleHBsb3Jl IHVuaW9uIFNpbXBsZVVuaW9uIiAiIiB7CisgICAtcmUgIi4qW2NvbXBvdW5k X3R5cGVfZGVzY3JpcHRpb24gJFNVIHt1bmlvbn1dLiokU1VfZmllbGRzX3R5 cGVzLioiIHsKKyAgICAgICBwYXNzICJleHBsb3JlIHVuaW9uIFNpbXBsZVVu aW9uIgorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjAiICJleHBsb3Jl IHR5cGUgdW5pb24gU2ltcGxlVW5pb24gZmVpbGQgMCIgeworICAgICAgICAg ICAgIC1yZSAiLipbY2hpbGRfc2NhbGFyX3R5cGVfZGVzY3JpcHRpb24ge2Zp ZWxkICdpJyBvZiAndW5pb24gU2ltcGxlVW5pb24nfSB7aW50fV0uKiIgewor ICAgICAgICAgICAgICAgICBwYXNzICJleHBsb3JlIHR5cGUgdW5pb24gU2lt cGxlVW5pb24gZmVpbGQgMCIKKyAgICAgICAgICAgICAgICAgZ2RiX3Rlc3Rf bXVsdGlwbGUgIlwwIiAicmV0dXJuIHRvIHVuaW9uIFNpbXBsZVVuaW9uIGZy b20gZmllbGQgMCIgeworICAgICAgICAgICAgICAgICAgICAgLXJlICIuKltj b21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRTVSB7dW5pb259XS4qJFNVX2Zp ZWxkc190eXBlcy4qIiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcGFz cyAicmV0dXJuIHRvIHVuaW9uIFNpbXBsZVVuaW9uIGZyb20gZmllbGQgMCIK KyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGdkYl90ZXN0 X211bHRpcGxlICIxIiAiZXhwbG9yZSB0eXBlIHVuaW9uIFNpbXBsZVVuaW9u IGZlaWxkIDEiIHsKKyAgICAgICAgICAgICAtcmUgIi4qW2NoaWxkX3NjYWxh cl90eXBlX2Rlc2NyaXB0aW9uIHtmaWVsZCAnYycgb2YgJ3VuaW9uIFNpbXBs ZVVuaW9uJ30ge2NoYXJ9XS4qIiB7CisgICAgICAgICAgICAgICAgIHBhc3Mg ImV4cGxvcmUgdHlwZSB1bmlvbiBTaW1wbGVVbmlvbiBmZWlsZCAxIgorICAg ICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiXDAiICJyZXR1cm4g dG8gdW5pb24gU2ltcGxlVW5pb24gZnJvbSBmaWVsZCAxIiB7CisgICAgICAg ICAgICAgICAgICAgICAtcmUgIi4qW2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRp b24gJFNVIHt1bmlvbn1dLiokU1VfZmllbGRzX3R5cGVzLioiIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8gdW5pb24gU2lt cGxlVW5pb24gZnJvbSBmaWVsZCAxIgorICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAg ICAgfQorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIjIiICJleHBsb3Jl IHR5cGUgdW5pb24gU2ltcGxlVW5pb24gZmVpbGQgMiIgeworICAgICAgICAg ICAgIC1yZSAiLipbY2hpbGRfc2NhbGFyX3R5cGVfZGVzY3JpcHRpb24ge2Zp ZWxkICdmJyBvZiAndW5pb24gU2ltcGxlVW5pb24nfSB7ZmxvYXR9XS4qIiB7 CisgICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmUgdHlwZSB1bmlvbiBT aW1wbGVVbmlvbiBmZWlsZCAyIgorICAgICAgICAgICAgICAgICBnZGJfdGVz dF9tdWx0aXBsZSAiXDAiICJyZXR1cm4gdG8gdW5pb24gU2ltcGxlVW5pb24g ZnJvbSBmaWVsZCAyIiB7CisgICAgICAgICAgICAgICAgICAgICAtcmUgIi4q W2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRpb24gJFNVIHt1bmlvbn1dLiokU1Vf ZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBw YXNzICJyZXR1cm4gdG8gdW5pb24gU2ltcGxlVW5pb24gZnJvbSBmaWVsZCAy IgorICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgZ2RiX3Rl c3RfbXVsdGlwbGUgIjMiICJleHBsb3JlIHR5cGUgdW5pb24gU2ltcGxlVW5p b24gZmVpbGQgMyIgeworICAgICAgICAgICAgIC1yZSAiLipbY2hpbGRfc2Nh bGFyX3R5cGVfZGVzY3JpcHRpb24ge2ZpZWxkICdkJyBvZiAndW5pb24gU2lt cGxlVW5pb24nfSB7ZG91YmxlfV0uKiIgeworICAgICAgICAgICAgICAgICBw YXNzICJleHBsb3JlIHR5cGUgdW5pb24gU2ltcGxlVW5pb24gZmVpbGQgMyIK KyAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAicmV0 dXJuIHRvIHVuaW9uIFNpbXBsZVVuaW9uIGZyb20gZmllbGQgMyIgeworICAg ICAgICAgICAgICAgICAgICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2Ny aXB0aW9uICRTVSB7dW5pb259XS4qJFNVX2ZpZWxkc190eXBlcy4qIiB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIHVuaW9u IFNpbXBsZVVuaW9uIGZyb20gZmllbGQgMyIKKyAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAg ICAgICAgIH0KKyAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgInJl dHVybiB0byBHREIgcHJvbXB0IGZyb20gdW5pb24gU2ltcGxlVW5pb24iIHsK KyAgICAgICAgICAgICAtcmUgIiRnZGJfcHJvbXB0IiB7CisgICAgICAgICAg ICAgICAgIHBhc3MgInJldHVybiB0byBHREIgcHJvbXB0IGZyb20gdW5pb24g U2ltcGxlVW5pb24iCisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAg fQorIH0KKyAKKyBnZGJfdGVzdF9tdWx0aXBsZSAiZXhwbG9yZSBTUyIgIiIg eworICAgICAtcmUgIi4qW3R5cGVkZWZfdHlwZV9kZXNjcmlwdGlvbiB7U1N9 ICRTU10uKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uIHtTU30ge3N0cnVj dC9jbGFzc31dLiokU1NfZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgIHBh c3MgImV4cGxvcmUgU1MiCisgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAi MCIgImV4cGxvcmUgdHlwZSBTUyBmZWlsZCAwIiB7CisgICAgICAgICAgICAg LXJlICIuKltjaGlsZF9zY2FsYXJfdHlwZV9kZXNjcmlwdGlvbiB7ZmllbGQg J2EnIG9mICdTUyd9IHtpbnR9XS4qIiB7CisgICAgICAgICAgICAgICAgIHBh c3MgImV4cGxvcmUgdHlwZSBTUyBmZWlsZCAwIgorICAgICAgICAgICAgICAg ICBnZGJfdGVzdF9tdWx0aXBsZSAiXDAiICJyZXR1cm4gdG8gU1MgZnJvbSBm aWVsZCAwIiB7CisgICAgICAgICAgICAgICAgICAgICAtcmUgIi4qW2NvbXBv dW5kX3R5cGVfZGVzY3JpcHRpb24ge1NTfSB7c3RydWN0L2NsYXNzfV0uKiRT U19maWVsZHNfdHlwZXMuKiIgeworICAgICAgICAgICAgICAgICAgICAgICAg IHBhc3MgInJldHVybiB0byBTUyBmcm9tIGZpZWxkIDAiCisgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICB9CisgICAgICAgICB9CisgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAi MSIgImV4cGxvcmUgdHlwZSBTUyBmZWlsZCAxIiB7CisgICAgICAgICAgICAg LXJlICIuKltjaGlsZF9zY2FsYXJfdHlwZV9kZXNjcmlwdGlvbiB7ZmllbGQg J2QnIG9mICdTUyd9IHtkb3VibGV9XS4qIiB7CisgICAgICAgICAgICAgICAg IHBhc3MgImV4cGxvcmUgdHlwZSBTUyBmZWlsZCAxIgorICAgICAgICAgICAg ICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiXDAiICJyZXR1cm4gdG8gc3RydWN0 IFNpbXBsZVN0cnVjdCBmcm9tIGZpZWxkIDEiIHsKKyAgICAgICAgICAgICAg ICAgICAgIC1yZSAiLipbY29tcG91bmRfdHlwZV9kZXNjcmlwdGlvbiB7U1N9 IHtzdHJ1Y3QvY2xhc3N9XS4qJFNTX2ZpZWxkc190eXBlcy4qIiB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIFNTIGZpZWxk IDEiCisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBnZGJf dGVzdF9tdWx0aXBsZSAiXDAiICJyZXR1cm4gdG8gR0RCIHByb21wdCBmcm9t IFNTIiB7CisgICAgICAgICAgICAgLXJlICIkZ2RiX3Byb21wdCIgeworICAg ICAgICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8gR0RCIHByb21wdCBmcm9t IFNTIgorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorIH0K KyAKKyBnZGJfdGVzdF9tdWx0aXBsZSAiZXhwbG9yZSB0eXBlIHN0cnVjdCBD b21wbGV4U3RydWN0IiAiIiB7CisgICAgIC1yZSAiLipbY29tcG91bmRfdHlw ZV9kZXNjcmlwdGlvbiAkQ1Mge3N0cnVjdC9jbGFzc31dLiokQ1NfZmllbGRz X3R5cGVzLioiIHsKKyAgICAgICAgIHBhc3MgImV4cGxvcmUgdHlwZSBzdHJ1 Y3QgQ29tcGxleFN0cnVjdCIKKyAgICAgICAgIGdkYl90ZXN0X211bHRpcGxl ICIwIiAiZXhwbG9yZSB0eXBlIHN0cnVjdCBDb21wbGV4U3RydWN0IGZpZWxk IDAiIHsKKyAgICAgICAgICAgICAtcmUgIi4qW2NoaWxkX2NvbXBvdW5kX3R5 cGVfZGVzY3JpcHRpb24gJENTX2ZpZWxkXzAgJFNTIHtzdHJ1Y3QvY2xhc3N9 XS4qJFNTX2ZpZWxkc190eXBlcy4qIiB7CisgICAgICAgICAgICAgICAgIHBh c3MgImV4cGxvcmUgdHlwZSBzdHJ1Y3QgQ29tcGxleFN0cnVjdCBmaWVsZCAw IgorICAgICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiXDAiICJy ZXR1cm4gdG8gQ29tcGxleFN0cnVjdCBmcm9tIGZpZWxkIDAiIHsKKyAgICAg ICAgICAgICAgICAgICAgIC1yZSAiLipbY29tcG91bmRfdHlwZV9kZXNjcmlw dGlvbiAkQ1Mge3N0cnVjdC9jbGFzc31dLiokQ1NfZmllbGRzX3R5cGVzLioi IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8g Q29tcGxleFN0cnVjdCBmcm9tIGZpZWxkIDAiCisgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9Cisg ICAgICAgICB9CisgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiMSIgImV4 cGxvcmUgdHlwZSBzdHJ1Y3QgQ29tcGxleFN0cnVjdCBmaWVsZCAxIiB7Cisg ICAgICAgICAgICAgLXJlICIuKltjaGlsZF9jb21wb3VuZF90eXBlX2Rlc2Ny aXB0aW9uICRDU19maWVsZF8xICRTVSB7dW5pb259XS4qJFNVX2ZpZWxkc190 eXBlcy4qIiB7CisgICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmUgdHlw ZSBzdHJ1Y3QgQ29tcGxleFN0cnVjdCBmaWVsZCAxIgorICAgICAgICAgICAg ICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiXDAiICJyZXR1cm4gdG8gQ29tcGxl eFN0cnVjdCBmcm9tIGZpZWxkIDEiIHsKKyAgICAgICAgICAgICAgICAgICAg IC1yZSAiLipbY29tcG91bmRfdHlwZV9kZXNjcmlwdGlvbiAkQ1Mge3N0cnVj dC9jbGFzc31dLiokQ1NfZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8gQ29tcGxleFN0cnVjdCBm cm9tIGZpZWxkIDEiCisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAg ICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiMiIgImV4cGxvcmUgdHlwZSBzdHJ1 Y3QgQ29tcGxleFN0cnVjdCBmaWVsZCAyIiB7CisgICAgICAgICAgICAgLXJl ICIuKltjaGlsZF9hcnJheV90eXBlX2Rlc2NyaXB0aW9uICRDU19maWVsZF8y IHtTU31dLioiIHsKKyAgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZSB0 eXBlIHN0cnVjdCBDb21wbGV4U3RydWN0IGZpZWxkIDIiCisgICAgICAgICAg ICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgInJldHVybiB0byBDb21w bGV4U3RydWN0IGZyb20gZmllbGQgMiIgeworICAgICAgICAgICAgICAgICAg ICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRDUyB7c3Ry dWN0L2NsYXNzfV0uKiRDU19maWVsZHNfdHlwZXMuKiIgeworICAgICAgICAg ICAgICAgICAgICAgICAgIHBhc3MgInJldHVybiB0byBDb21wbGV4U3RydWN0 IGZyb20gZmllbGQgMiIKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAg ICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgInJldHVybiB0byBHREIg cHJvbXB0IGZyb20gQ29tcGxleFN0cnVjdCB0eXBlIGV4cGxvcmF0aW9uIiB7 CisgICAgICAgICAgICAgLXJlICIkZ2RiX3Byb21wdCIgeworICAgICAgICAg ICAgICAgICBwYXNzICJyZXR1cm4gdG8gR0RCIHByb21wdCBmcm9tIENvbXBs ZXhTdHJ1Y3QgdHlwZSBleHBsb3JhdGlvbiIKKyAgICAgICAgICAgICB9Cisg ICAgICAgICB9CisgICAgIH0KKyB9CisgCisgZ2RiX3Rlc3RfbXVsdGlwbGUg ImV4cGxvcmUgdHlwZSB1bmlvbiBDb21wbGV4VW5pb24iICIiIHsKKyAgICAg LXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRDVSB7dW5pb259 XS4qJENVX2ZpZWxkc190eXBlcy4qIiB7CisgICAgICAgICBwYXNzICJleHBs b3JlIHR5cGUgdW5pb24gQ29tcGxleFVuaW9uIgorICAgICAgICAgZ2RiX3Rl c3RfbXVsdGlwbGUgIjAiICJleHBsb3JlIHR5cGUgdW5pb24gQ29tcGxleFN0 cnVjdCBmaWVsZCAwIiB7CisgICAgICAgICAgICAgLXJlICIuKltjaGlsZF9j b21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRDVV9maWVsZF8wICRTUyB7c3Ry dWN0L2NsYXNzfV0uKiRTU19maWVsZHNfdHlwZXMuKiIgeworICAgICAgICAg ICAgICAgICBwYXNzICJleHBsb3JlIHR5cGUgdW5pb24gQ29tcGxleFVuaW9u IGZpZWxkIDAiCisgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxl ICJcMCIgInJldHVybiB0byBDb21wbGV4VW5pb24gZnJvbSBmaWVsZCAwIiB7 CisgICAgICAgICAgICAgICAgICAgICAtcmUgIi4qW2NvbXBvdW5kX3R5cGVf ZGVzY3JpcHRpb24gJENVIHt1bmlvbn1dLiokQ1VfZmllbGRzX3R5cGVzLioi IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8g Q29tcGxleFVuaW9uIGZyb20gZmllbGQgMCIKKyAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAg ICAgICAgIH0KKyAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIxIiAiZXhw bG9yZSB0eXBlIHVuaW9uIENvbXBsZXhVbmlvbiBmaWVsZCAxIiB7CisgICAg ICAgICAgICAgLXJlICIuKltjaGlsZF9hcnJheV90eXBlX2Rlc2NyaXB0aW9u ICRDVV9maWVsZF8xICRTU10uKiIgeworICAgICAgICAgICAgICAgICBwYXNz ICJleHBsb3JlIHR5cGUgdW5pb24gQ29tcGxleFVuaW9uIGZpZWxkIDEiCisg ICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJcMCIgInJldHVy biB0byBDb21wbGV4VW5pb24gYXJyYXkiIHsKKyAgICAgICAgICAgICAgICAg ICAgIC1yZSAiLipbY29tcG91bmRfdHlwZV9kZXNjcmlwdGlvbiAkQ1Uge3Vu aW9ufV0uKiRDVV9maWVsZHNfdHlwZXMuKiIgeworICAgICAgICAgICAgICAg ICAgICAgICAgIHBhc3MgInJldHVybiB0byBDb21wbGV4VW5pb24gZnJvbSBm aWVsZCAxIgorICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAg Z2RiX3Rlc3RfbXVsdGlwbGUgIlwwIiAicmV0dXJuIHRvIEdEQiBwcm9tcHQg ZnJvbSBDb21wbGV4VW5pb24gdHlwZSBleHBsb3JhdGlvbiIgeworICAgICAg ICAgICAgIC1yZSAiJGdkYl9wcm9tcHQiIHsKKyAgICAgICAgICAgICAgICAg cGFzcyAicmV0dXJuIHRvIEdEQiBwcm9tcHQgZnJvbSBDb21wbGV4VW5pb24g dHlwZSBleHBsb3JhdGlvbiIKKyAgICAgICAgICAgICB9CisgICAgICAgICB9 CisgICAgIH0KKyB9CisgCisgZ2RiX3Rlc3RfbXVsdGlwbGUgImV4cGxvcmUg dHlwZSBjdSIgIiIgeworICAgICAtcmUgIidjdScgaXMgb2YgdHlwZSAndW5p b24gQ29tcGxleFVuaW9uJy4qW2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRpb24g JENVIHt1bmlvbn1dLiokQ1VfZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAg IHBhc3MgImV4cGxvcmUgdHlwZSB1bmlvbiBDb21wbGV4VW5pb24iCisgICAg ICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiMCIgImV4cGxvcmUgdHlwZSB1bmlv biBDb21wbGV4U3RydWN0IGZpZWxkIDAiIHsKKyAgICAgICAgICAgICAtcmUg Ii4qW2NoaWxkX2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRpb24gJENVX2ZpZWxk XzAgJFNTIHtzdHJ1Y3QvY2xhc3N9XS4qJFNTX2ZpZWxkc190eXBlcy4qIiB7 CisgICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmUgdHlwZSB1bmlvbiBD b21wbGV4VW5pb24gZmllbGQgMCIKKyAgICAgICAgICAgICAgICAgZ2RiX3Rl c3RfbXVsdGlwbGUgIlwwIiAicmV0dXJuIHRvIENvbXBsZXhVbmlvbiBmcm9t IGZpZWxkIDAiIHsKKyAgICAgICAgICAgICAgICAgICAgIC1yZSAiLipbY29t cG91bmRfdHlwZV9kZXNjcmlwdGlvbiAkQ1Uge3VuaW9ufV0uKiRDVV9maWVs ZHNfdHlwZXMuKiIgeworICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Mg InJldHVybiB0byBDb21wbGV4VW5pb24gZnJvbSBmaWVsZCAwIgorICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgIjEiICJleHBsb3JlIHR5cGUgdW5pb24gQ29tcGxleFVuaW9uIGZpZWxk IDEiIHsKKyAgICAgICAgICAgICAtcmUgIi4qW2NoaWxkX2FycmF5X3R5cGVf ZGVzY3JpcHRpb24gJENVX2ZpZWxkXzEgJFNTXS4qIiB7CisgICAgICAgICAg ICAgICAgIHBhc3MgImV4cGxvcmUgdHlwZSB1bmlvbiBDb21wbGV4VW5pb24g ZmllbGQgMSIKKyAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUg IlwwIiAicmV0dXJuIHRvIENvbXBsZXhVbmlvbiBhcnJheSIgeworICAgICAg ICAgICAgICAgICAgICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2NyaXB0 aW9uICRDVSB7dW5pb259XS4qJENVX2ZpZWxkc190eXBlcy4qIiB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRvIENvbXBsZXhV bmlvbiBmcm9tIGZpZWxkIDEiCisgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9 CisgICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiXDAiICJyZXR1cm4gdG8g R0RCIHByb21wdCBmcm9tIENvbXBsZXhVbmlvbiB0eXBlIGV4cGxvcmF0aW9u IiB7CisgICAgICAgICAgICAgLXJlICIkZ2RiX3Byb21wdCIgeworICAgICAg ICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8gR0RCIHByb21wdCBmcm9tIENv bXBsZXhVbmlvbiB0eXBlIGV4cGxvcmF0aW9uIgorICAgICAgICAgICAgIH0K KyAgICAgICAgIH0KKyAgICAgfQorIH0K --20cf3074afd6e0416804bc204146--