From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31495 invoked by alias); 19 Dec 2011 19:00:49 -0000 Received: (qmail 31456 invoked by uid 22791); 19 Dec 2011 19:00:39 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_05,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD,TW_BJ X-Spam-Check-By: sourceware.org Received: from mail-qw0-f48.google.com (HELO mail-qw0-f48.google.com) (209.85.216.48) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 19 Dec 2011 19:00:21 +0000 Received: by qadc16 with SMTP id c16so3851898qad.0 for ; Mon, 19 Dec 2011 11:00:20 -0800 (PST) Received: by 10.224.42.134 with SMTP id s6mr26617904qae.78.1324321220379; Mon, 19 Dec 2011 11:00:20 -0800 (PST) MIME-Version: 1.0 Received: by 10.224.42.134 with SMTP id s6mr26617875qae.78.1324321220197; Mon, 19 Dec 2011 11:00:20 -0800 (PST) Received: by 10.224.72.210 with HTTP; Mon, 19 Dec 2011 11:00:20 -0800 (PST) In-Reply-To: References: Date: Mon, 19 Dec 2011 19:05:00 -0000 Message-ID: Subject: [RFC] A new command 'explore' From: Siva Chandra To: gdb-patches@sourceware.org X-System-Of-Record: true Content-Type: multipart/mixed; boundary=20cf3074d5f0e5fb9f04b4768f14 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: 2011-12/txt/msg00643.txt.bz2 --20cf3074d5f0e5fb9f04b4768f14 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Content-length: 1426 Hello, Attached is a patch which implements a new command 'explore' using the GDB Python API. The idea behind this 'explore' command is as follows: Often, when exploring a new code base which has complicated data structures, we would like to explore the data structure values top-down. For example, if a struct is part of a struct/union is part of another struct/union, then we typically explore the top-level struct/union in the first pass. In subsequent passes, we might want to go deeper by exploring the structs/unions embedded in the top level struct. We might infact want to explore all the way up to the leaf values. The =91explore=92 command enables a user to do such a top-down exploration of data structures interactively. I will add the documentation to gdb/doc/gdb.texinfo once the basics of this patch are approved. 2011-12-19 Siva Chandra New command 'explore' which helps explore values in scope. * 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. * testsuite/gdb.python/Makefile.in: Add py-explore to EXECUTABLES * testsuite/gdb.python/py-explore.c: C program used for testing the new 'explore' command. * testsuite/gdb-python/py-explore.exp: Tests for the new 'explore' command. Thanks, Siva Chandra --20cf3074d5f0e5fb9f04b4768f14 Content-Type: text/plain; charset=US-ASCII; name="explore_command_patch.txt" Content-Disposition: attachment; filename="explore_command_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gwduknfo0 Content-length: 50744 ZGlmZiAtcnVwTiBzcmMvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmlu IHNyY19sb2NhbC9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KLS0t IHNyYy9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMjAxMS0wOC0x NyAxNjoxMToyMC4wMDAwMDAwMDAgKzA1MzAKKysrIHNyY19sb2NhbC9nZGIv ZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMjAxMS0xMS0xMiAxMjowNzoz NC44MDI1MDY3MDMgKzA1MzAKQEAgLTU4LDcgKzU4LDggQEAgUFlUSE9OX0ZJ TEVTID0gXAogCWdkYi9wcm9tcHQucHkgXAogCWdkYi9jb21tYW5kL19faW5p dF9fLnB5IFwKIAlnZGIvY29tbWFuZC9wcmV0dHlfcHJpbnRlcnMucHkgXAot CWdkYi9jb21tYW5kL3Byb21wdC5weQorCWdkYi9jb21tYW5kL3Byb21wdC5w eSBcCisJZ2RiL2NvbW1hbmQvZXhwbG9yZS5weQogCiBGTEFHU19UT19QQVNT ID0gXAogCSJwcmVmaXg9JChwcmVmaXgpIiBcCmRpZmYgLXJ1cE4gc3JjL2dk Yi9weXRob24vbGliL2dkYi9jb21tYW5kL2V4cGxvcmUucHkgc3JjX2xvY2Fs L2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL2V4cGxvcmUucHkKLS0tIHNy Yy9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9leHBsb3JlLnB5CTE5NzAt MDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICswNTMwCisrKyBzcmNfbG9jYWwv Z2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQvZXhwbG9yZS5weQkyMDExLTEy LTE2IDEyOjIzOjA4Ljg2ODE5NTk4NiArMDUzMApAQCAtMCwwICsxLDU0MiBA QAorIyBHREIgJ2V4cGxvcmUnIGNvbW1hbmQuCisjIENvcHlyaWdodCAoQykg MjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor IworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKworIiIiSW1wbGVtZW50YXRpb24gb2YgdGhlIEdEQiAnZXhw bG9yZScgY29tbWFuZCB1c2luZyB0aGUgR0RCIFB5dGhvbiBBUEkuIiIiCisK K2ltcG9ydCBnZGIKKworY2xhc3MgRXhwbG9yZXIob2JqZWN0KToKKyAgICAi IiJJbnRlcm5lbCBjbGFzcyB3aGljaCBpbnZva2VzIG90aGVyIGV4cGxvcmVy cy4iIiIKKworICAgICMgVGhpcyBtYXAgaXMgZmlsbGVkIGJ5IHRoZSBFeHBs b3JlVXRpbHMuaW5pdF9lbnYoKSBmdW5jdGlvbgorICAgIHR5cGVfY29kZV90 b19leHBsb3Jlcl9tYXAgPSB7IH0KKworICAgIF9TQ0FMQVJfVFlQRV9MSVNU ID0gWworICAgICAgICBnZGIuVFlQRV9DT0RFX0NIQVIsCisgICAgICAgIGdk Yi5UWVBFX0NPREVfSU5ULAorICAgICAgICBnZGIuVFlQRV9DT0RFX0JPT0ws CisgICAgICAgIGdkYi5UWVBFX0NPREVfRkxULAorICAgICAgICBnZGIuVFlQ RV9DT0RFX1ZPSUQsCisgICAgICAgIGdkYi5UWVBFX0NPREVfRU5VTSwKKyAg ICBdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4cGxvcmVfZXhw cihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAgICB0eXBlX2NvZGUg PSB2YWx1ZS50eXBlLmNvZGUKKyAgICAgICAgaWYgdHlwZV9jb2RlIGluIEV4 cGxvcmVyLnR5cGVfY29kZV90b19leHBsb3Jlcl9tYXA6CisgICAgICAgICAg ICBpZiBleHByWzBdID09ICcqJzoKKyAgICAgICAgICAgICAgICBleHByID0g IiglcykiICUgZXhwcgorICAgICAgICAgICAgZXhwbG9yZXJfY2xhc3MgPSBF eHBsb3Jlci50eXBlX2NvZGVfdG9fZXhwbG9yZXJfbWFwW3R5cGVfY29kZV0K KyAgICAgICAgICAgIHdoaWxlIGV4cGxvcmVyX2NsYXNzLmV4cGxvcmVfZXhw cihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAgICAgICAgICAgIHBh c3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiRXhwbG9y ZXIgZm9yIHR5cGUgXCclc1wnIG5vdCB5ZXQgYXZhaWxhYmxlLlxuIiAlCisg ICAgICAgICAgICAgICAgICAgc3RyKHZhbHVlLnR5cGUpKQorCisgICAgQHN0 YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX3R5cGUobmFtZSwgZGF0YXR5 cGUsIGlzX2NoaWxkKToKKyAgICAgICAgdHlwZV9jb2RlID0gZGF0YXR5cGUu Y29kZQorICAgICAgICBpZiB0eXBlX2NvZGUgaW4gRXhwbG9yZXIudHlwZV9j b2RlX3RvX2V4cGxvcmVyX21hcDoKKyAgICAgICAgICAgIGV4cGxvcmVyX2Ns YXNzID0gRXhwbG9yZXIudHlwZV9jb2RlX3RvX2V4cGxvcmVyX21hcFt0eXBl X2NvZGVdCisgICAgICAgICAgICB3aGlsZSBleHBsb3Jlcl9jbGFzcy5leHBs b3JlX3R5cGUobmFtZSwgZGF0YXR5cGUsIGlzX2NoaWxkKToKKyAgICAgICAg ICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmlu dCAoIkV4cGxvcmVyIGZvciB0eXBlIFwnJXNcJyBub3QgeWV0IGF2YWlsYWJs ZS5cbiIgJQorICAgICAgICAgICAgICAgICAgIHN0cihkYXRhdHlwZSkpCisK KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlzX3NjYWxhcl90eXBlKHR5 cGUpOgorICAgICAgICBpZiB0eXBlLmNvZGUgaW4gRXhwbG9yZXIuX1NDQUxB Ul9UWVBFX0xJU1Q6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3Rh dGljbWV0aG9kCisgICAgZGVmIHJldHVybmluZ190b19wYXJlbnRfdmFsdWVf bWVzc2FnZSgpOgorICAgICAgICBwcmludCAiXG5SZXR1cm5pbmcgdG8gcGFy ZW50IHZhbHVlLi4uXG4iCisgICAgICAgIAorICAgIEBzdGF0aWNtZXRob2QK KyAgICBkZWYgcmV0dXJuX3RvX3BhcmVudF92YWx1ZV9wcm9tcHQoKToKKyAg ICAgICAgcmF3X2lucHV0KCJcblByZXNzIGVudGVyIHRvIHJldHVybiB0byBw YXJlbnQgdmFsdWUuLi4iKQorICAgICAgICBFeHBsb3Jlci5yZXR1cm5pbmdf dG9fcGFyZW50X3ZhbHVlX21lc3NhZ2UoKQorICAgICAgICAKKyAgICBAc3Rh dGljbWV0aG9kCisgICAgZGVmIHJldHVybmluZ190b19lbmNsb3NpbmdfdHlw ZV9tZXNzYWdlKCk6CisgICAgICAgIHByaW50ICJcblJldHVybmluZyB0byBl bmNsb3NpbmcgdHlwZS4uLlxuIgorICAgICAgICAKKyAgICBAc3RhdGljbWV0 aG9kCisgICAgZGVmIHJldHVybl90b19lbmNsb3NpbmdfdHlwZV9wcm9tcHQo KToKKyAgICAgICAgcmF3X2lucHV0KCJcblByZXNzIGVudGVyIHRvIHJldHVy biB0byBlbmNsb3NpbmcgdHlwZS4uLiIpCisgICAgICAgIEV4cGxvcmVyLnJl dHVybmluZ190b19lbmNsb3NpbmdfdHlwZV9tZXNzYWdlKCkKKworCitjbGFz cyBTY2FsYXJFeHBsb3JlcihvYmplY3QpOgorICAgICIiIkludGVybmFsIGNs YXNzIHVzZWQgdG8gZXhwbG9yZSBzY2FsYXIgdmFsdWVzLiIiIgorCisgICAg QHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFs dWUsIGlzX2NoaWxkKToKKyAgICAgICAgcHJpbnQgKCJcJyVzXCcgaXMgYSBz Y2FsYXIgdmFsdWUgb2YgdHlwZSBcJyVzXCcuXG4iICUKKyAgICAgICAgICAg ICAgIChleHByLCB2YWx1ZS50eXBlKSkKKyAgICAgICAgcHJpbnQgIiAgJXMg PSAlcyIgJSAoZXhwciwgc3RyKHZhbHVlKSkKKworICAgICAgICBpZiBpc19j aGlsZDoKKyAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJlbnRf dmFsdWVfcHJvbXB0KCkKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAg IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV90eXBlKG5hbWUsIGRh dGF0eXBlLCBpc19jaGlsZCk6CisgICAgICAgIGlmIGRhdGF0eXBlLmNvZGUg PT0gZ2RiLlRZUEVfQ09ERV9FTlVNOgorICAgICAgICAgICAgaWYgaXNfY2hp bGQ6CisgICAgICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBvZiBhbiBlbnVt ZXJhdGVkIHR5cGUgXCclc1wnLiIgJQorICAgICAgICAgICAgICAgICAgICAg ICAobmFtZSwgc3RyKGRhdGF0eXBlKSkpCisgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgIHByaW50ICIlcyBpcyBhbiBlbnVtZXJhdGVkIHR5 cGUuIiAlIG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlz X2NoaWxkOgorICAgICAgICAgICAgICAgIHByaW50ICgiJXMgaXMgb2YgYSBw cmltaXRpdmUgc2NhbGFyIHR5cGUgXCclc1wnLiIgJQorICAgICAgICAgICAg ICAgICAgICAgICAobmFtZSwgc3RyKGRhdGF0eXBlKSkpCisgICAgICAgICAg ICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICIlcyBpcyBhIHByaW1p dGl2ZSBzY2FsYXIgdHlwZS4iICUgbmFtZQorCisgICAgICAgIGlmIGlzX2No aWxkOgorICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX2VuY2xvc2lu Z190eXBlX3Byb21wdCgpCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKwor Y2xhc3MgUG9pbnRlckV4cGxvcmVyKG9iamVjdCk6CisgICAgIiIiSW50ZXJu YWwgY2xhc3MgdXNlZCB0byBleHBsb3JlIHBvaW50ZXIgdmFsdWVzLiIiIgor CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX2V4cHIoZXhw ciwgdmFsdWUsIGlzX2NoaWxkKToKKyAgICAgICAgaWYgc3RyKHZhbHVlKSA9 PSAiMHgwIjoKKyAgICAgICAgICAgIHByaW50ICJcbiAgJXMgPSBOVUxMIiAl IGV4cHIKKyAgICAgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAg ICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJlbnRfdmFsdWVfcHJvbXB0KCkK KworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVyZWZf dmFsdWUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlcmVm X3ZhbHVlID0gdmFsdWUuZGVyZWZlcmVuY2UoKQorICAgICAgICBleGNlcHQg UnVudGltZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgKCJcJyVzXCcgYSBw b2ludGVyIHBvaW50aW5nIHRvIGFuIGludmFsaWQgbWVtb3J5IGxvY2F0aW9u LiIgJQorICAgICAgICAgICAgICAgICAgIGV4cHIpCisgICAgICAgICAgICBp ZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5f dG9fcGFyZW50X3ZhbHVlX3Byb21wdCgpCisgICAgICAgICAgICByZXR1cm4g RmFsc2UKKworICAgICAgICBwcmludCAoIlxuXCclc1wnIGlzIGEgcG9pbnRl ciB0byBhIHZhbHVlIG9mIHR5cGUgXCclc1wnIiAlCisgICAgICAgICAgICAg ICAoZXhwciwgZGVyZWZfdmFsdWUudHlwZSkpCisgICAgICAgIEV4cGxvcmVy LmV4cGxvcmVfZXhwcigiKiglcykiICUgZXhwciwgZGVyZWZfdmFsdWUsIGlz X2NoaWxkKQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHN0YXRp Y21ldGhvZAorICAgIGRlZiBleHBsb3JlX3R5cGUobmFtZSwgZGF0YXR5cGUs IGlzX2NoaWxkKToKKyAgICAgICAgdGFyZ2V0X3R5cGUgPSBkYXRhdHlwZS50 YXJnZXQoKQorICAgICAgICBwcmludCAoIlxuXCclc1wnIGlzIG9mIGEgcG9p bnRlciB0eXBlIHdpdGggdGFyZ2V0IHR5cGUgXCclc1wnLiIgJQorICAgICAg ICAgICAgICAgKG5hbWUsIHN0cih0YXJnZXRfdHlwZSkpKQorCisgICAgICAg IEV4cGxvcmVyLmV4cGxvcmVfdHlwZSgidGhlIHZhbHVlIHBvaW50ZWQgdG8g YnkgJXMiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRhcmdldF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aXNfY2hpbGQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEFy cmF5RXhwbG9yZXIob2JqZWN0KToKKyAgICAiIiJJbnRlcm5hbCBjbGFzcyB1 c2VkIHRvIGV4cGxvcmUgYXJyYXlzLiIiIgorCisgICAgQHN0YXRpY21ldGhv ZAorICAgIGRlZiBfcHJpbnRfYXJyYXlfaW5mbyhuYW1lLCB0YXJnZXRfdHlw ZSk6CisgICAgICAgIHByaW50ICgiXG4lcyBpcyBhbiBhcnJheSBvZiBlbGVt ZW50cyBvZiB0eXBlIFwnJXNcJy4iICUKKyAgICAgICAgICAgICAgIChuYW1l LCB0YXJnZXRfdHlwZSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm IGV4cGxvcmVfZXhwcihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAg ICBBcnJheUV4cGxvcmVyLl9wcmludF9hcnJheV9pbmZvKCJcJyVzXCciICUg ZXhwciwgdmFsdWUudHlwZS50YXJnZXQoKSkKKyAgICAgICAgaW5kZXggPSAw CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZGV4ID0gaW50KHJhd19p bnB1dCgiRW50ZXIgdGhlIGluZGV4IHRvIGV4cGxvcmU6ICIpKQorICAgICAg ICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGlmIGlzX2NoaWxk OgorICAgICAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybmluZ190b19wYXJl bnRfdmFsdWVfbWVzc2FnZSgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK KworICAgICAgICBhcnJheV9yYW5nZSA9IHZhbHVlLnR5cGUucmFuZ2UoKQor ICAgICAgICBpZiBpbmRleCA8IGFycmF5X3JhbmdlWzBdIG9yIGluZGV4ID4g YXJyYXlfcmFuZ2VbMV06CisgICAgICAgICAgICBwcmludCAiRW50ZXJlZCBp bmRleCBvdXQgb2YgcmFuZ2Ugb2YgdGhlIGFycmF5LiIKKyAgICAgICAgICAg IHJhd19pbnB1dCgiUHJlc3MgZW50ZXIgdG8gY29udGludWUuLi4gIikKKyAg ICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZWxlbWVudCA9IHZh bHVlW2luZGV4XQorICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoIiVz WyVzXSIgJSAoZXhwciwgaW5kZXgpLCBlbGVtZW50LCBUcnVlKQorICAgICAg ICByZXR1cm4gVHJ1ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBl eHBsb3JlX3R5cGUobmFtZSwgZGF0YXR5cGUsIGlzX2NoaWxkKToKKyAgICAg ICAgdGFyZ2V0X3R5cGUgPSBkYXRhdHlwZS50YXJnZXQoKQorICAgICAgICBB cnJheUV4cGxvcmVyLl9wcmludF9hcnJheV9pbmZvKG5hbWUsIHRhcmdldF90 eXBlKQorCisgICAgICAgIGVudHJ5ID0gcmF3X2lucHV0KCJFbnRlciBcJ3Nc JyB0byBzdGVwIGluIHRvIGV4cGxvcmluZyB0aGUgIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAidHlwZSBvZiB0aGUgZWxlbWVudHM6ICIpCisgICAg ICAgIGlmIGVudHJ5ID09ICJzIjoKKyAgICAgICAgICAgIEV4cGxvcmVyLmV4 cGxvcmVfdHlwZSgiYW4gYXJyYXkgZWxlbWVudCBvZiAlcyIgJSBuYW1lLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF90eXBl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisg ICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAg ICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5pbmdfdG9fZW5jbG9zaW5nX3R5 cGVfbWVzc2FnZSgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg ICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIENvbXBvdW5kRXhwbG9yZXIo b2JqZWN0KToKKyAgICAiIiJJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGV4cGxv cmUgc3RydWN0LCBjbGFzc2VzIGFuZCB1bmlvbnMuIiIiCisKKyAgICBfVkFM VUVTID0gMAorICAgIF9UWVBFUyAgPSAxCisKKyAgICBAc3RhdGljbWV0aG9k CisgICAgZGVmIF9wcmludF9maWVsZHMocHJpbnRfbGlzdCwgcHJpbnRfdHlw ZSk6CisgICAgICAgIG1heF90eXBlX25hbWVfbGVuZ3RoID0gMAorICAgICAg ICBtYXhfZmllbGRfbmFtZV9sZW5ndGggPSAwCisgICAgICAgIGZvciB0cmlw bGUgaW4gcHJpbnRfbGlzdDoKKyAgICAgICAgICAgIGlmIG1heF90eXBlX25h bWVfbGVuZ3RoIDwgbGVuKHRyaXBsZVswXSk6CisgICAgICAgICAgICAgICAg bWF4X3R5cGVfbmFtZV9sZW5ndGggPSBsZW4odHJpcGxlWzBdKQorICAgICAg ICAgICAgaWYgbWF4X2ZpZWxkX25hbWVfbGVuZ3RoIDwgbGVuKHRyaXBsZVsx XSk6CisgICAgICAgICAgICAgICAgbWF4X2ZpZWxkX25hbWVfbGVuZ3RoID0g bGVuKHRyaXBsZVsxXSkKKworICAgICAgICBmb3JtYXRfc3RyID0gIiIKKyAg ICAgICAgaWYgcHJpbnRfdHlwZSA9PSBDb21wb3VuZEV4cGxvcmVyLl9WQUxV RVM6CisgICAgICAgICAgICBmb3JtYXRfc3RyID0gKCIgIHswOj4lZH0gezE6 PCVkfSA9IHsyfSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4 X3R5cGVfbmFtZV9sZW5ndGgsIG1heF9maWVsZF9uYW1lX2xlbmd0aCkpCisg ICAgICAgIGlmIHByaW50X3R5cGUgPT0gQ29tcG91bmRFeHBsb3Jlci5fVFlQ RVM6CisgICAgICAgICAgICBmb3JtYXRfc3RyID0gKCIgIHswOj4lZH0gezE6 PCVkfSAvLyB7Mn0iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG1h eF90eXBlX25hbWVfbGVuZ3RoLCBtYXhfZmllbGRfbmFtZV9sZW5ndGgpKQor CisgICAgICAgIGZvciB0cmlwbGUgaW4gcHJpbnRfbGlzdDoKKyAgICAgICAg ICAgIHByaW50IGZvcm1hdF9zdHIuZm9ybWF0KHRyaXBsZVswXSwgdHJpcGxl WzFdLCB0cmlwbGVbMl0pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm IGV4cGxvcmVfZXhwcihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAg ICB0eXBlX2NvZGUgPSB2YWx1ZS50eXBlLmNvZGUKKyAgICAgICAgaWYgdHlw ZV9jb2RlID09IGdkYi5UWVBFX0NPREVfU1RSVUNUOgorICAgICAgICAgICAg cHJpbnQgKCJcblwnJXNcJyBpcyBhIHN0cnVjdC9jbGFzcyBvZiB0eXBlIFwn JXNcJyAiCisgICAgICAgICAgICAgICAgICAgIndpdGggdGhlIGZvbGxvd2lu ZyBmaWVsZHM6XG4iICUKKyAgICAgICAgICAgICAgICAgICAoZXhwciwgc3Ry KHZhbHVlLnR5cGUpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBy aW50ICgiXG4nJXMnIGlzIGEgdW5pb24gb2YgdHlwZSBcJyVzXCcgd2l0aCB0 aGUgZm9sbG93aW5nICIKKyAgICAgICAgICAgICAgICAgICAiZmllbGRzOlxu IiAlCisgICAgICAgICAgICAgICAgICAgKGV4cHIsIHN0cih2YWx1ZS50eXBl KSkpCisKKyAgICAgICAgZmllbGRzID0gdmFsdWUudHlwZS5maWVsZHMoKQor ICAgICAgICBoYXNfZXhwbG9yYWJsZV9maWVsZHMgPSBGYWxzZQorICAgICAg ICBjdXJyZW50X2Nob2ljZSA9IDAKKyAgICAgICAgY2hvaWNlX3RvX2NvbXBv dW5kX2ZpZWxkX21hcCA9IHsgfQorICAgICAgICBwcmludF9saXN0ID0gWyBd CisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBm aWVsZF9mdWxsX25hbWUgPSBleHByICsgIi4iICsgZmllbGQubmFtZQorICAg ICAgICAgICAgZmllbGRfdmFsdWUgPSB2YWx1ZVtmaWVsZC5uYW1lXQorICAg ICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9ICIiCisgICAgICAgICAgICBpc19j b21wb3VuZF9maWVsZCA9IEZhbHNlCisgICAgICAgICAgICBpZiB0eXBlX2Nv ZGUgPT0gZ2RiLlRZUEVfQ09ERV9VTklPTjoKKyAgICAgICAgICAgICAgICBs aXRlcmFsX3ZhbHVlID0gKCI8RW50ZXIgJXMgdG8gZXhwbG9yZSB0aGlzIGZp ZWxkPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry KGN1cnJlbnRfY2hvaWNlKSkKKyAgICAgICAgICAgICAgICBpc19jb21wb3Vu ZF9maWVsZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgaWYgRXhwbG9yZXIuaXNfc2NhbGFyX3R5cGUoZmllbGQudHlwZSk6 CisgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSBzdHIoZmll bGRfdmFsdWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9ICgiPEVudGVyICVzIHRvIGV4cGxv cmUgdGhpcyBmaWVsZD4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHIoY3VycmVudF9jaG9pY2UpKQorICAgICAgICAgICAg ICAgICAgICBpc19jb21wb3VuZF9maWVsZCA9IFRydWUKKworICAgICAgICAg ICAgaWYgaXNfY29tcG91bmRfZmllbGQ6CisgICAgICAgICAgICAgICAgY2hv aWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcFtzdHIoY3VycmVudF9jaG9pY2Up XSA9ICgKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfZnVsbF9uYW1lLCBm aWVsZF92YWx1ZSkKKyAgICAgICAgICAgICAgICBjdXJyZW50X2Nob2ljZSA9 IGN1cnJlbnRfY2hvaWNlICsgMQorCisgICAgICAgICAgICBwcmludF9saXN0 LmFwcGVuZCgoc3RyKGZpZWxkLnR5cGUpLCBmaWVsZC5uYW1lLCBsaXRlcmFs X3ZhbHVlKSkKKworICAgICAgICBDb21wb3VuZEV4cGxvcmVyLl9wcmludF9m aWVsZHMocHJpbnRfbGlzdCwgQ29tcG91bmRFeHBsb3Jlci5fVkFMVUVTKQor ICAgICAgICBwcmludCAiIgorCisgICAgICAgIGlmIGxlbihjaG9pY2VfdG9f Y29tcG91bmRfZmllbGRfbWFwKSA+IDA6CisgICAgICAgICAgICBjaG9pY2Ug PSByYXdfaW5wdXQoIkVudGVyIHRoZSBudW1iZXIgb2YgdGhlIGZpZWxkIHlv dSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhbnQgdG8g ZXhwbG9yZSBpbiBcJyVzXCc6ICIgJSBleHByKQorICAgICAgICAgICAgaWYg Y2hvaWNlIGluIGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXA6CisgICAg ICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV9leHByKGNob2ljZV90b19j b21wb3VuZF9maWVsZF9tYXBbY2hvaWNlXVswXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2Zp ZWxkX21hcFtjaG9pY2VdWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBU cnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGlz X2NoaWxkOgorICAgICAgICAgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5p bmdfdG9fcGFyZW50X3ZhbHVlX21lc3NhZ2UoKQorICAgICAgICBlbHNlOgor ICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgRXhw bG9yZXIucmV0dXJuX3RvX3BhcmVudF92YWx1ZV9wcm9tcHQoKQorCisgICAg ICAgIHJldHVybiBGYWxzZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl ZiBleHBsb3JlX3R5cGUobmFtZSwgZGF0YXR5cGUsIGlzX2NoaWxkKToKKyAg ICAgICAgdHlwZV9jb2RlID0gZGF0YXR5cGUuY29kZQorICAgICAgICBpZiB0 eXBlX2NvZGUgPT0gZ2RiLlRZUEVfQ09ERV9TVFJVQ1Q6CisgICAgICAgICAg ICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICBwcmludCAoIlxuJXMg aXMgYSBzdHJ1Y3QvY2xhc3Mgb2YgdHlwZSBcJyVzXCcgIgorICAgICAgICAg ICAgICAgICAgICAgICAid2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiIg JQorICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgc3RyKGRhdGF0eXBl KSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50 ICgiXG4lcyBpcyBhIHN0cnVjdC9jbGFzcyB3aXRoIHRoZSBmb2xsb3dpbmcg IgorICAgICAgICAgICAgICAgICAgICAgICAiZmllbGRzOlxuIiAlCisgICAg ICAgICAgICAgICAgICAgICAgIG5hbWUpCisgICAgICAgIGVsc2U6CisgICAg ICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICBwcmludCAo IlxuJXMgaXMgYSB1bmlvbiBvZiB0eXBlIFwnJXNcJyAiCisgICAgICAgICAg ICAgICAgICAgICAgICJ3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuIiAl CisgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBzdHIoZGF0YXR5cGUp KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQg KCJcbiVzIGlzIGEgdW5pb24gd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczpc biIgJQorICAgICAgICAgICAgICAgICAgICAgICBuYW1lKQorCisgICAgICAg IGZpZWxkcyA9IGRhdGF0eXBlLmZpZWxkcygpCisgICAgICAgIGhhc19leHBs b3JhYmxlX2ZpZWxkcyA9IEZhbHNlCisgICAgICAgIGN1cnJlbnRfY2hvaWNl ID0gMAorICAgICAgICBjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwID0g eyB9CisgICAgICAgIHByaW50X2xpc3QgPSBbIF0KKyAgICAgICAgZm9yIGZp ZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIGlmIEV4cGxvcmVyLmlzX3Nj YWxhcl90eXBlKGZpZWxkLnR5cGUpOgorICAgICAgICAgICAgICAgIHByaW50 X2xpc3QuYXBwZW5kKChzdHIoZmllbGQudHlwZSksIGZpZWxkLm5hbWUsICJT Y2FsYXIgVmFsdWUiKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgcHJpbnRfbGlzdC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAg IChzdHIoZmllbGQudHlwZSksCisgICAgICAgICAgICAgICAgICAgICBmaWVs ZC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgIjxFbnRlciAlZCB0byBl eHBsb3JlIHRoaXMgZmllbGQ+IiAlIGN1cnJlbnRfY2hvaWNlKSkKKyAgICAg ICAgICAgICAgICBjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwW3N0cihj dXJyZW50X2Nob2ljZSldID0gKAorICAgICAgICAgICAgICAgICAgICBmaWVs ZC5uYW1lLCBmaWVsZC50eXBlKQorICAgICAgICAgICAgICAgIGN1cnJlbnRf Y2hvaWNlID0gY3VycmVudF9jaG9pY2UgKyAxCisKKyAgICAgICAgQ29tcG91 bmRFeHBsb3Jlci5fcHJpbnRfZmllbGRzKHByaW50X2xpc3QsIENvbXBvdW5k RXhwbG9yZXIuX1RZUEVTKQorICAgICAgICBwcmludCAiIgorCisgICAgICAg IGlmIGxlbihjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwKSA+IDA6Cisg ICAgICAgICAgICBjaG9pY2UgPSByYXdfaW5wdXQoIkVudGVyIHRoZSBudW1i ZXIgb2YgdGhlIGZpZWxkIHlvdSB3YW50IHRvICIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZXhwbG9yZSA6ICIpCisgICAgICAgICAgICBp ZiBjaG9pY2UgaW4gY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcDoKKyAg ICAgICAgICAgICAgICBFeHBsb3Jlci5leHBsb3JlX3R5cGUoCisgICAgICAg ICAgICAgICAgICAgICgiZmllbGQgXCclc1wnIG9mIFwnJXNcJyIgJQorICAg ICAgICAgICAgICAgICAgICAgKGNob2ljZV90b19jb21wb3VuZF9maWVsZF9t YXBbY2hvaWNlXVswXSwgbmFtZSkpLAorICAgICAgICAgICAgICAgICAgICBj aG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwW2Nob2ljZV1bMV0sCisgICAg ICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgcmV0dXJu IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYg aXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIEV4cGxvcmVyLnJldHVy bmluZ190b19lbmNsb3NpbmdfdHlwZV9tZXNzYWdlKCkKKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAg IEV4cGxvcmVyLnJldHVybl90b19lbmNsb3NpbmdfdHlwZV9wcm9tcHQoKQor CisgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgCisKK2NsYXNz IFR5cGVkZWZFeHBsb3JlcihvYmplY3QpOgorICAgICIiIkludGVybmFsIGNs YXNzIHVzZWQgdG8gZXhwbG9yZSB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBhIHR5 cGVkZWYuIiIiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4cGxv cmVfZXhwcihleHByLCB2YWx1ZSwgaXNfY2hpbGQpOgorICAgICAgICBhY3R1 YWxfdHlwZSA9IHZhbHVlLnR5cGUuc3RyaXBfdHlwZWRlZnMoKQorICAgICAg ICBwcmludCAoIlxuXCclc1wnIGlzIGEgdmFsdWUgb2YgdHlwZSBcJyVzXCcg IgorICAgICAgICAgICAgICAgIndoaWNoIGlzIGEgdHlwZWRlZiBvZiB0eXBl IFwnJXNcJyIgJQorICAgICAgICAgICAgICAgKGV4cHIsIHN0cih2YWx1ZS50 eXBlKSwgc3RyKGFjdHVhbF90eXBlKSkpCisKKyAgICAgICAgRXhwbG9yZXIu ZXhwbG9yZV9leHByKGV4cHIsIHZhbHVlLmNhc3QoYWN0dWFsX3R5cGUpLCBp c19jaGlsZCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGlj bWV0aG9kCisgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwg aXNfY2hpbGQpOgorICAgICAgICBhY3R1YWxfdHlwZSA9IGRhdGF0eXBlLnN0 cmlwX3R5cGVkZWZzKCkKKyAgICAgICAgcHJpbnQoIlxuJXMgaXMgb2YgYSB0 eXBlIHdoaWNoIGlzIGEgdHlwZWRlZiBvZiB0eXBlIFwnJXNcJy4iICUKKyAg ICAgICAgICAgICAgKG5hbWUsIHN0cihhY3R1YWxfdHlwZSkpKQorICAgICAg ICBFeHBsb3Jlci5leHBsb3JlX3R5cGUobmFtZSwgYWN0dWFsX3R5cGUsIGlz X2NoaWxkKQorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBFeHBs b3JlVXRpbHMob2JqZWN0KToKKyAgICAiIiJJbnRlcm5hbCBjbGFzcyB3aGlj aCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIHRoZSBtYWluIGNsYXNzZXMuIiIi CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGluaXRfZW52KCk6Cisg ICAgICAgIEV4cGxvcmVyLnR5cGVfY29kZV90b19leHBsb3Jlcl9tYXAgPSB7 CisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0NIQVIgOiBTY2FsYXJFeHBs b3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfSU5UIDogU2NhbGFy RXhwbG9yZXIsCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0JPT0wgOiBT Y2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfRkxU IDogU2NhbGFyRXhwbG9yZXIsCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RF X1ZPSUQgOiBTY2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBF X0NPREVfRU5VTSA6IFNjYWxhckV4cGxvcmVyLAorICAgICAgICAgICAgZ2Ri LlRZUEVfQ09ERV9TVFJVQ1QgOiBDb21wb3VuZEV4cGxvcmVyLAorICAgICAg ICAgICAgZ2RiLlRZUEVfQ09ERV9VTklPTiA6IENvbXBvdW5kRXhwbG9yZXIs CisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX1BUUiA6IFBvaW50ZXJFeHBs b3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfVFlQRURFRiA6IFR5 cGVkZWZFeHBsb3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfQVJS QVkgOiBBcnJheUV4cGxvcmVyCisgICAgICAgIH0KKworICAgIEBzdGF0aWNt ZXRob2QKKyAgICBkZWYgY2hlY2tfYXJncyhuYW1lLCBhcmdfc3RyKToKKyAg ICAgICAgaWYgbGVuKGFyZ19zdHIpIDwgMToKKyAgICAgICAgICAgIHJhaXNl IGdkYi5HZGJFcnJvcigiRVJST1I6IFwnJXNcJyBjb21tYW5kIHJlcXVpcmVz IGFuIGFyZ3VtZW50LiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5hbWUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg ZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAc3RhdGlj bWV0aG9kCisgICAgZGVmIGdldF90eXBlX2Zyb21fc3RyKHR5cGVfc3RyKToK KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBBc3N1bWUgdGhlIGN1cnJl bnQgbGFuZ3VhZ2UgdG8gYmUgQy9DKysgYW5kIG1ha2UgYSB0cnkuCisgICAg ICAgICAgICByZXR1cm4gZ2RiLnBhcnNlX2FuZF9ldmFsKCIoJXMgKikwIiAl IHR5cGVfc3RyKS50eXBlLnRhcmdldCgpCisgICAgICAgIGV4Y2VwdCBSdW50 aW1lRXJyb3I6CisgICAgICAgICAgICAjIElmIGFzc3VtcHRpb24gb2YgY3Vy cmVudCBsYW5ndWFnZSB0byBiZSBDL0MrKyB3YXMgd3JvbmcsIHRoZW4KKyAg ICAgICAgICAgICMgbG9va3VwIHRoZSB0eXBlIHVzaW5nIHRoZSBBUEkuCisg ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdkYi5s b29rdXBfdHlwZSh0eXBlX3N0cikKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50 aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X3ZhbHVlX2Zyb21fc3RyKHZh bHVlX3N0cik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBn ZGIucGFyc2VfYW5kX2V2YWwodmFsdWVfc3RyKQorICAgICAgICBleGNlcHQg UnVudGltZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCitj bGFzcyBFeHBsb3JlQ29tbWFuZChnZGIuQ29tbWFuZCk6CisgICAgIiIiR0RC IGNvbW1hbmQgdG8gZXhwbG9yZSBleHByZXNzaW9uIHZhbHVlcyBhbmQgdHlw ZXMgdG9wIGRvd24uCisKKyAgICBVc2FnZTogZXhwbG9yZSBBUkcKKworICAg IEFSRyBpcyBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHR5cGUgdmlzaWJs ZSBpbiB0aGUgY3VycmVudCBzY29wZS4gCisKKyAgICBJZiBBUkcgaXMgYW4g ZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gYSBzY2FsYXIgdmFsdWUg b3Igc3RydWN0L2NsYXNzCisgICAgd2l0aCBvbmx5IHNjYWxhciBmaWVsZHMs IHRoZW4gdGhlIHZhbHVlIGlzIHByaW50ZWQuIElmIGl0IGV2YWx1YXRlcyB0 byBhCisgICAgdW5pb24sIG9yIGlmIGl0IGlzIGEgY2xhc3Mvc3RydWN0IHdp dGggY2xhc3Mvc3RydWN0IGZpZWxkcywgb3IgaWYgaXMgYXMKKyAgICBhcnJh eSwgdGhlIHVzZXIgY2FuIGludGVyYWN0aXZlbHkgZXhwbG9yZSB0aGUgdmFs dWUuIEV4cGxvcmF0aW9uIGhlcmUgbWVhbnMKKyAgICB0byBvYnNlcnZlLCBz dGFydGluZyBmcm9tIHRoZSBmaWVsZHMvZWxlbWVudHMgb2YgdGhlIFZBTFVF LCByaWdodCBkb3duIHRvCisgICAgdGhlIGxlYWYgc2NhbGFyIHZhbHVlcyBl bWJlZGRlZCBpbiB0aGVzZSBmaWVsZHMuCisKKyAgICBJZiBBUkcgaXMgYSB0 eXBlIHZpc2libGUgaW4gdGhlIGN1cnJlbnQgc2NvcGUsIHRoZW4gdGhlIHVz ZXIgY2FuIGV4cGxvcmUKKyAgICB0aGUgdHlwZSB0b3AgZG93bi4KKyAgICAi IiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIo RXhwbG9yZUNvbW1hbmQsIHNlbGYpLl9faW5pdF9fKG5hbWUgPSAiZXhwbG9y ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb21tYW5kX2NsYXNzID0gZ2RiLkNPTU1BTkRfREFUQSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZp eCA9IFRydWUpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ19zdHIsIGZy b21fdHR5KToKKyAgICAgICAgaWYgRXhwbG9yZVV0aWxzLmNoZWNrX2FyZ3Mo ImV4cGxvcmUiLCBhcmdfc3RyKSA9PSBGYWxzZToKKyAgICAgICAgICAgIHJl dHVybgorCisgICAgICAgICMgQ2hlY2sgaWYgaXQgaXMgYSB2YWx1ZQorICAg ICAgICB2YWx1ZSA9IEV4cGxvcmVVdGlscy5nZXRfdmFsdWVfZnJvbV9zdHIo YXJnX3N0cikKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAg ICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoYXJnX3N0ciwgdmFsdWUs IEZhbHNlKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBJZiBp dCBpcyBub3QgYSB2YWx1ZSwgY2hlY2sgaWYgaXQgaXMgYSB0eXBlCisgICAg ICAgIGRhdGF0eXBlID0gRXhwbG9yZVV0aWxzLmdldF90eXBlX2Zyb21fc3Ry KGFyZ19zdHIpCisgICAgICAgIGlmIGRhdGF0eXBlIGlzIG5vdCBOb25lOgor ICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKGFyZ19zdHIsIGRh dGF0eXBlLCBGYWxzZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg ICMgSWYgaXQgaXMgbmVpdGhlciBhIHZhbHVlIG5vciBhIHR5cGUsIHJhaXNl IGFuIGVycm9yLgorICAgICAgICByYWlzZSBnZGIuR2RiRXJyb3IoCisgICAg ICAgICAgICAoIkVSUk9SOiBcJyVzXCcgbmVpdGhlciBldmFsdWF0ZXMgdG8g YSB2YWx1ZSBub3IgaXMgYSB0eXBlICIKKyAgICAgICAgICAgICAiaW4gdGhl IGN1cnJlbnQgY29udGV4dC4iICUKKyAgICAgICAgICAgICBhcmdfc3RyKSkK KworCitjbGFzcyBFeHBsb3JlVmFsdWVDb21tYW5kKGdkYi5Db21tYW5kKToK KyAgICAiIiJHREIgY29tbWFuZCB0byBleHBsb3JlIGV4cHJlc3Npb24gdmFs dWVzIHRvcCBkb3duLgorCisgICAgVXNhZ2U6IGV4cGxvcmUgdmFsdWUgQVJH CisKKyAgICBBUkcgaXMgYW4gZXhwcmVzc2lvbiB2aXNpYmxlIGluIHRoZSBj dXJyZW50IHNjb3BlLiAKKworICAgIElmIEFSRyBpcyBhbiBleHByZXNzaW9u IHdoaWNoIGV2YWx1YXRlcyB0byBhIHNjYWxhciB2YWx1ZSBvciBzdHJ1Y3Qv Y2xhc3MKKyAgICB3aXRoIG9ubHkgc2NhbGFyIGZpZWxkcywgdGhlbiB0aGUg dmFsdWUgaXMgcHJpbnRlZC4gSWYgaXQgZXZhbHVhdGVzIHRvIGEKKyAgICB1 bmlvbiwgb3IgaWYgaXQgaXMgYSBjbGFzcy9zdHJ1Y3Qgd2l0aCBjbGFzcy9z dHJ1Y3QgZmllbGRzLCBvciBpZiBpcyBhcworICAgIGFycmF5LCB0aGUgdXNl ciBjYW4gaW50ZXJhY3RpdmVseSBleHBsb3JlIHRoZSB2YWx1ZS4gRXhwbG9y YXRpb24gaGVyZSBtZWFucworICAgIHRvIG9ic2VydmUsIHN0YXJ0aW5nIGZy b20gdGhlIGZpZWxkcy9lbGVtZW50cyBvZiB0aGUgVkFMVUUsIHJpZ2h0IGRv d24gdG8KKyAgICB0aGUgbGVhZiBzY2FsYXIgdmFsdWVzIGVtYmVkZGVkIGlu IHRoZXNlIGZpZWxkcy4KKyAgICAiIiIKKyAKKyAgICBkZWYgX19pbml0X18o c2VsZik6CisgICAgICAgIHN1cGVyKEV4cGxvcmVWYWx1ZUNvbW1hbmQsIHNl bGYpLl9faW5pdF9fKAorICAgICAgICAgICAgbmFtZSA9ICJleHBsb3JlIHZh bHVlIiwgY29tbWFuZF9jbGFzcyA9IGdkYi5DT01NQU5EX0RBVEEpCisKKyAg ICBkZWYgaW52b2tlKHNlbGYsIGFyZ19zdHIsIGZyb21fdHR5KToKKyAgICAg ICAgaWYgRXhwbG9yZVV0aWxzLmNoZWNrX2FyZ3MoImV4cGxvcmUgdmFsdWUi LCBhcmdfc3RyKSA9PSBGYWxzZToKKyAgICAgICAgICAgIHJldHVybgorCisg ICAgICAgIHZhbHVlID0gRXhwbG9yZVV0aWxzLmdldF92YWx1ZV9mcm9tX3N0 cihhcmdfc3RyKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAg ICAgICAgcmFpc2UgZ2RiLkdkYkVycm9yKAorICAgICAgICAgICAgICAgICgi RVJST1I6IFwnJXNcJyBkb2VzIG5vdCBldmFsdWF0ZSB0byBhIHZhbHVlIGlu IHRoZSBjdXJyZW50ICIKKyAgICAgICAgICAgICAgICAgImNvbnRleHQuIiAl CisgICAgICAgICAgICAgICAgIGFyZ19zdHIpKQorICAgICAgICAgICAgcmV0 dXJuCisKKyAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV9leHByKGFyZ19zdHIs IHZhbHVlLCBGYWxzZSkKKworCitjbGFzcyBFeHBsb3JlVHlwZUNvbW1hbmQo Z2RiLkNvbW1hbmQpOiAgICAgICAgICAgIAorICAgICIiIkdEQiBjb21tYW5k IHRvIGV4cGxvcmUgdHlwZXMgdG9wIGRvd24uCisKKyAgICBVc2FnZTogZXhw bG9yZSB0eXBlIEFSRworCisgICAgQVJHIGlzIGEgdHlwZSB2aXNpYmxlIGlu IHRoZSBjdXJyZW50IHNjb3BlLiAKKworICAgIElmIEFSRyBpcyBhIHR5cGUg dmlzaWJsZSBpbiB0aGUgY3VycmVudCBzY29wZSwgdGhlbiB0aGUgdXNlciBj YW4gZXhwbG9yZQorICAgIHRoZSB0eXBlIHRvcCBkb3duLgorICAgICIiIgor CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihFeHBs b3JlVHlwZUNvbW1hbmQsIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAg bmFtZSA9ICJleHBsb3JlIHR5cGUiLCBjb21tYW5kX2NsYXNzID0gZ2RiLkNP TU1BTkRfREFUQSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnX3N0ciwg ZnJvbV90dHkpOgorICAgICAgICBpZiBFeHBsb3JlVXRpbHMuY2hlY2tfYXJn cygiZXhwbG9yZSB0eXBlIiwgYXJnX3N0cikgPT0gRmFsc2U6CisgICAgICAg ICAgICByZXR1cm4KKworICAgICAgICBkYXRhdHlwZSA9IEV4cGxvcmVVdGls cy5nZXRfdHlwZV9mcm9tX3N0cihhcmdfc3RyKQorICAgICAgICBpZiBkYXRh dHlwZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgZ2RiLkdkYkVycm9y KAorICAgICAgICAgICAgICAgICgiRVJST1I6IFwnJXNcJyBpcyBub3QgYSB0 eXBlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIiAlCisgICAgICAgICAgICAg ICAgIGFyZ19zdHIpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAg RXhwbG9yZXIuZXhwbG9yZV90eXBlKGFyZ19zdHIsIGRhdGF0eXBlLCBGYWxz ZSkKKworCitFeHBsb3JlVXRpbHMuaW5pdF9lbnYoKQorCitFeHBsb3JlQ29t bWFuZCgpCitFeHBsb3JlVmFsdWVDb21tYW5kKCkKK0V4cGxvcmVUeXBlQ29t bWFuZCgpCmRpZmYgLXJ1cE4gc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhv bi9NYWtlZmlsZS5pbiBzcmNfbG9jYWwvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL01ha2VmaWxlLmluCi0tLSBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0 aG9uL01ha2VmaWxlLmluCTIwMTEtMDUtMTYgMTk6MjY6NDAuMDAwMDAwMDAw ICswNTMwCisrKyBzcmNfbG9jYWwvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9u L01ha2VmaWxlLmluCTIwMTEtMTEtMTIgMTE6NDg6NDQuODcyNTU4OTEyICsw NTMwCkBAIC00LDcgKzQsOCBAQCBzcmNkaXIgPSBAc3JjZGlyQAogRVhFQ1VU QUJMRVMgPSBweS10eXBlIHB5LXZhbHVlIHB5LXByZXR0eXByaW50IHB5LXRl bXBsYXRlIHB5LWJsb2NrIFwKIAlweS1zeW1ib2wgcHktbWkgcHktYnJlYWtw b2ludCBweS1pbmZlcmlvciBweS1pbmZ0aHJlYWQgXAogCXB5LXNoYXJlZCBw eXRob24gbGliLXR5cGVzIHB5LWV2ZW50cyBweS1ldnRocmVhZHMgcHktZnJh bWUgXAotCXB5LW1pIHB5LXBwLW1haW50IHB5LXByb2dzcGFjZSBweS1zZWN0 aW9uLXNjcmlwdCBweS1vYmpmaWxlCisJcHktbWkgcHktcHAtbWFpbnQgcHkt cHJvZ3NwYWNlIHB5LXNlY3Rpb24tc2NyaXB0IHB5LW9iamZpbGUgXAorCXB5 LWV4cGxvcmUKIAogTUlTQ0VMTEFORU9VUyA9IHB5LXNoYXJlZC1zbC5zbAog CmRpZmYgLXJ1cE4gc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1l eHBsb3JlLmMgc3JjX2xvY2FsL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1leHBsb3JlLmMKLS0tIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24v cHktZXhwbG9yZS5jCTE5NzAtMDEtMDEgMDU6MzA6MDAuMDAwMDAwMDAwICsw NTMwCisrKyBzcmNfbG9jYWwvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5 LWV4cGxvcmUuYwkyMDExLTExLTI0IDAwOjI1OjE4LjYxMjMxODQxMSArMDUz MApAQCAtMCwwICsxLDgwIEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQg b2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAx MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKyovCisKKyNkZWZpbmUgQVJSQVlfU0laRSAxMAor CitzdHJ1Y3QgU2ltcGxlU3RydWN0Cit7CisgIGludCBhOworICBkb3VibGUg ZDsKK307CisKK3VuaW9uIFNpbXBsZVVuaW9uCit7CisgIGludCBpOworICBj aGFyIGM7CisgIGZsb2F0IGY7CisgIGRvdWJsZSBkOworfTsKKwordHlwZWRl ZiBzdHJ1Y3QgU2ltcGxlU3RydWN0IFNTOworCitzdHJ1Y3QgQ29tcGxleFN0 cnVjdAoreworICBzdHJ1Y3QgU2ltcGxlU3RydWN0IHM7CisgIHVuaW9uIFNp bXBsZVVuaW9uIHU7CisgIFNTIHNhW0FSUkFZX1NJWkVdOworfTsKKwordW5p b24gQ29tcGxleFVuaW9uCit7CisgIFNTIHM7CisgIHN0cnVjdCBTaW1wbGVT dHJ1Y3Qgc2FbQVJSQVlfU0laRV07Cit9OworCitpbnQKK21haW4gKHZvaWQp Cit7CisgIHN0cnVjdCBTaW1wbGVTdHJ1Y3Qgc3M7CisgIHN0cnVjdCBTaW1w bGVTdHJ1Y3QqIHNzX3B0ciA9ICZzczsKKyAgU1Mgc3NfdDsKKworICB1bmlv biBTaW1wbGVVbmlvbiBzdTsKKyAgc3RydWN0IENvbXBsZXhTdHJ1Y3QgY3M7 CisgIHN0cnVjdCBDb21wbGV4U3RydWN0KiBjc19wdHIgPSAmY3M7CisgIHVu aW9uIENvbXBsZXhVbmlvbiBjdTsKKyAgaW50IGk7CisKKyAgc3MuYSA9IDEw OworICBzcy5kID0gMTAwLjAxOworICBzc190ID0gc3M7CisgIAorICBzdS5k ID0gMTAwLjE7CisKKyAgY3MucyA9IHNzOworICBjcy51ID0gc3U7CisgIGZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFOyBpKyspCisgICAgeworICAgICAg Y3Muc2FbaV0uYSA9IGk7CisgICAgICBjcy5zYVtpXS5kID0gMTAuMTAgKyBp OworICAgICAgY3Uuc2FbaV0uYSA9IGk7CisgICAgICBjdS5zYVtpXS5kID0g MTAwLjEwICsgaTsKKyAgICB9CisKKyAgcmV0dXJuIDA7IC8qIEJyZWFrIGhl cmUuICovCit9CmRpZmYgLXJ1cE4gc3JjL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1leHBsb3JlLmV4cCBzcmNfbG9jYWwvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LWV4cGxvcmUuZXhwCi0tLSBzcmMvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUuZXhwCTE5NzAtMDEtMDEgMDU6MzA6 MDAuMDAwMDAwMDAwICswNTMwCisrKyBzcmNfbG9jYWwvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWV4cGxvcmUuZXhwCTIwMTEtMTItMTYgMTI6MTk6 MDkuODk4NzcwOTYzICswNTMwCkBAIC0wLDAgKzEsMzExIEBACisjIENvcHly aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBUaGlz IGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3Rz IHRoZSBjb21tYW5kICdleHBsb3JlJworIyB3aGljaCBpcyBpbXBsZW1lbnRl ZCB1c2luZyB0aGUgR0RCLVB5dGhvbiBBUEkuCisKK2xvYWRfbGliIGdkYi1w eXRob24uZXhwCisKK3NldCB0ZXN0ZmlsZSAicHktZXhwbG9yZSIKK3NldCBz cmNmaWxlICR7dGVzdGZpbGV9LmMKK3NldCBiaW5maWxlICR7b2JqZGlyfS8k e3N1YmRpcn0vJHt0ZXN0ZmlsZX0KK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3Rp bmcgJHt0ZXN0ZmlsZX0uZXhwICR7dGVzdGZpbGV9ICR7c3JjZmlsZX1dIH0g eworICAgIHJldHVybiAtMQorfQorCisjIFNraXAgYWxsIHRlc3RzIGlmIFB5 dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCitpZiB7IFtza2lwX3B5 dGhvbl90ZXN0c10gfSB7IGNvbnRpbnVlIH0KKworc2V0IFNTICJzdHJ1Y3Qg U2ltcGxlU3RydWN0Igorc2V0IFNVICJ1bmlvbiBTaW1wbGVVbmlvbiIKK3Nl dCBDUyAic3RydWN0IENvbXBsZXhTdHJ1Y3QiCitzZXQgQ1UgInVuaW9uIENv bXBsZXhVbmlvbiIKK3NldCByZXR1cm5fdG9fcGFyZW50X3Byb21wdCB7UHJl c3MgZW50ZXIgdG8gcmV0dXJuIHRvIHBhcmVudCB2YWx1ZS4uLn0KK3NldCBh cnJheV9pbmRleF9wcm9tcHQge0VudGVyIHRoZSBpbmRleCB0byBleHBsb3Jl OiB9CisKK3Byb2MgZW50ZXJfZmllbGRfbnVtYmVyX3Byb21wdCB7IHZhbHVl X25hbWUgfSB7CisgICAgcmV0dXJuICJFbnRlciB0aGUgbnVtYmVyIG9mIHRo ZSBmaWVsZCB5b3Ugd2FudCB0byBleHBsb3JlIGluICckdmFsdWVfbmFtZSc6 ICIKK30KKworcHJvYyBjb21wb3VuZF9kZXNjcmlwdGlvbiB7IHZhbHVlX25h bWUgdHlwZV9raW5kIHR5cGVfbmFtZSB9IHsKKyAgICByZXR1cm4gIickdmFs dWVfbmFtZScgaXMgYSAkdHlwZV9raW5kIG9mIHR5cGUgJyR0eXBlX25hbWUn IHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6XFtcclxuXF0rIgorfQorCitw cm9jIHR5cGVkZWZfZGVzY3JpcHRpb24geyB2YWx1ZV9uYW1lIHR5cGVkZWZf bmFtZSB0eXBlX25hbWUgfSB7CisgICAgcmV0dXJuICInJHZhbHVlX25hbWUn IGlzIGEgdmFsdWUgb2YgdHlwZSAnJHR5cGVkZWZfbmFtZScgd2hpY2ggaXMg YSB0eXBlZGVmIG9mIHR5cGUgJyR0eXBlX25hbWUnXFtcclxuXF0rIgorfQor Citwcm9jIHNjYWxhcl9kZXNjcmlwdGlvbiB7IHZhbHVlX25hbWUgdHlwZSB9 IHsKKyAgICByZXR1cm4gIickdmFsdWVfbmFtZScgaXMgYSBzY2FsYXIgdmFs dWUgb2YgdHlwZSAnJHR5cGUnXC5cW1xyXG5cXSsiCit9CisKK3Byb2MgYXJy YXlfZGVzY3JpcHRpb24geyB2YWx1ZV9uYW1lIHR5cGUgfSB7CisgICAgcmV0 dXJuICInJHZhbHVlX25hbWUnIGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIG9m IHR5cGUgJyR0eXBlJy5cW1xyXG5cXSsiCit9CisKK3Byb2MgcG9pbnRlcl9k ZXNjcmlwdGlvbiB7IHZhbHVlX25hbWUgdHlwZV9uYW1lIH0geworICAgIHNl dCB0eXBlX2Rlc2NyaXB0aW9uICInJHZhbHVlX25hbWUnIGlzIGEgcG9pbnRl ciB0byBhIHZhbHVlIG9mIHR5cGUgJyR0eXBlX25hbWUnXFtcclxuXF0rIgor ICAgIHNldCB2YWx1ZV9kZXNjcmlwdGlvbiAiLiokdmFsdWVfbmFtZS4qJHR5 cGVfbmFtZS4qIiAgICAKKyAgICByZXR1cm4gIiR0eXBlX2Rlc2NyaXB0aW9u JHZhbHVlX2Rlc2NyaXB0aW9uIgorfQorCitwcm9jIGZpZWxkX3ZhbHVlcyB7 IGFyZ3MgfSB7CisgICAgc2V0IHJlc3VsdCAiIgorICAgIGZvcmVhY2ggZmll bGQgJGFyZ3MgeworICAgICAgICBzZXQgcmVzdWx0ICIkcmVzdWx0XFsgXF0q JGZpZWxkXFtcclxuXF0rIgorICAgIH0KKyAgICByZXR1cm4gJHJlc3VsdAor fQorCitwcm9jIGZpZWxkX2Nob2ljZXMgeyBhcmdzIH0geworICAgIHNldCBy ZXN1bHQgIiIKKyAgICBzZXQgZmllbGRfbnVtIDAKKyAgICBmb3JlYWNoIGZp ZWxkICRhcmdzIHsKKyAgICAgICAgc2V0IHJlc3VsdCAiJHJlc3VsdCRmaWVs ZFxbIFxdKz1cWyBcXSs8RW50ZXIgJGZpZWxkX251bSAuKiIKKyAgICAgICAg aW5jciBmaWVsZF9udW0KKyAgICB9CisgICAgcmV0dXJuICRyZXN1bHQKK30K KworcHJvYyBzY2FsYXJfdmFsdWUgeyB2YWx1ZV9uYW1lIHZhbHVlIH0gewor ICAgIHJldHVybiAiJHZhbHVlX25hbWUgPSAkdmFsdWVcW3JcblxdKyIKK30K Kworc2V0IFNTX2ZpZWxkcyBbZmllbGRfdmFsdWVzIHtpbnQgYSA9IDEwfSB7 ZG91YmxlIGQgPSAxMDBbLl0uKn1dCisKK2lmICFbcnVudG9fbWFpbl0gewor ICAgcmV0dXJuIC0xCit9CisKK2dkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xp bmVfbnVtYmVyICJCcmVhayBoZXJlLiJdCitnZGJfY29udGludWVfdG9fYnJl YWtwb2ludCAiQnJlYWsgaGVyZSIgIi4qQnJlYWsgaGVyZS4qIgorCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFZhbHVlIGV4cGxvcmF0aW9uIHRl c3RzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2dkYl90ZXN0ICJl eHBsb3JlIGkiICJbc2NhbGFyX2Rlc2NyaXB0aW9uIHtpfSB7aW50fV0uKmkg PSAuKiIKK2dkYl90ZXN0ICJleHBsb3JlIHNzIiAiW2NvbXBvdW5kX2Rlc2Ny aXB0aW9uIHtzc30ge3N0cnVjdC9jbGFzc30gJFNTXS4qJFNTX2ZpZWxkcyIK K2dkYl90ZXN0ICJleHBsb3JlIHNzX3B0ciIgIltwb2ludGVyX2Rlc2NyaXB0 aW9uIHtzc19wdHJ9ICRTU10uKiRTU19maWVsZHMiCitnZGJfdGVzdCAiZXhw bG9yZSAqc3NfcHRyIiAiW2NvbXBvdW5kX2Rlc2NyaXB0aW9uIHtcKFwqc3Nf cHRyXCl9IHtzdHJ1Y3QvY2xhc3N9ICRTU10uKiRTU19maWVsZHMiCitnZGJf dGVzdCAiZXhwbG9yZSBzc190IiAiW3R5cGVkZWZfZGVzY3JpcHRpb24ge3Nz X3R9IHtTU30gJFNTXS4qW2NvbXBvdW5kX2Rlc2NyaXB0aW9uIHtzc190fSB7 c3RydWN0L2NsYXNzfSAkU1NdLiokU1NfZmllbGRzIgorCitnZGJfdGVzdF9t dWx0aXBsZSAiZXhwbG9yZSBzdSIgIiIgeworICAgIC1yZSAiW2NvbXBvdW5k X2Rlc2NyaXB0aW9uIHtzdX0gdW5pb24ge3VuaW9uIFNpbXBsZVVuaW9ufV0u KltmaWVsZF9jaG9pY2VzIHtpbnQgaX0ge2NoYXIgY30ge2Zsb2F0IGZ9IHtk b3VibGUgZH1dW2VudGVyX2ZpZWxkX251bWJlcl9wcm9tcHQge3N1fV0iIHsK KyAgICAgICAgcGFzcyAiZXhwbG9yZSBzdSIKKyAgICAgICAgZ2RiX3Rlc3Rf bXVsdGlwbGUgIjMiICJleHBsb3JlIHN1LmQiIHsKKyAgICAgICAgICAgIC1y ZSAiW3NjYWxhcl9kZXNjcmlwdGlvbiB7c3UuZH0ge2RvdWJsZX1dLipbc2Nh bGFyX3ZhbHVlIHtzdS5kfSB7MTAwWy5dLip9XS4qJHJldHVybl90b19wYXJl bnRfcHJvbXB0IiB7CisgICAgICAgICAgICAgICAgcGFzcyAiZXhwbG9yZSBz dS5kIgorICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAi ZW5kIHN1LmQgZXhwbG9yYXRpb24iIHsKKyAgICAgICAgICAgICAgICAgICAg LXJlICJbZW50ZXJfZmllbGRfbnVtYmVyX3Byb21wdCB7c3V9XSIgeworICAg ICAgICAgICAgICAgICAgICAgICAgcGFzcyAiZW5kIHN1LmQgZXhwbG9yYXRp b24iCisgICAgICAgICAgICAgICAgICAgICAgICBnZGJfdGVzdF9tdWx0aXBs ZSAiICIgImVuZCBzdSBleHBsb3JhdGlvbiIgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC1yZSAiJGdkYl9wcm9tcHQiIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFzcyAiZW5kIHN1IGV4cGxvcmF0aW9u IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K K30KKworZ2RiX3Rlc3RfbXVsdGlwbGUgImV4cGxvcmUgY3MiICIiIHsKKyAg ICAtcmUgIltjb21wb3VuZF9kZXNjcmlwdGlvbiB7Y3N9IHtzdHJ1Y3QvY2xh c3N9IHtzdHJ1Y3QgQ29tcGxleFN0cnVjdH1dLipbZmllbGRfY2hvaWNlcyB7 c3RydWN0IFNpbXBsZVN0cnVjdCBzfSB7dW5pb24gU2ltcGxlVW5pb24gdX0g e1NTIC4xMC4gc2F9XVtlbnRlcl9maWVsZF9udW1iZXJfcHJvbXB0IHtjc31d IiB7CisgICAgICAgIHBhc3MgImV4cGxvcmUgY3MiCisgICAgICAgIGdkYl90 ZXN0X211bHRpcGxlICIwIiAiZXhwbG9yZSBjcy5zIiB7CisgICAgICAgICAg ICAtcmUgIltjb21wb3VuZF9kZXNjcmlwdGlvbiB7Y3Muc30ge3N0cnVjdC9j bGFzc30ge3N0cnVjdCBTaW1wbGVTdHJ1Y3R9XS4qW2ZpZWxkX3ZhbHVlcyB7 aW50IGEgPSAxMH0ge2RvdWJsZSBkID0gMTAwWy5dLip9XS4qJHJldHVybl90 b19wYXJlbnRfcHJvbXB0IiB7CisgICAgICAgICAgICAgICAgcGFzcyAiZXhw bG9yZSBjcy5zIgorICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxl ICIgIiAiZW5kIGNzLnMgZXhwbG9yYXRpb24iIHsKKyAgICAgICAgICAgICAg ICAgICAgLXJlICJbZW50ZXJfZmllbGRfbnVtYmVyX3Byb21wdCB7Y3N9XSIg eworICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAiZW5kIGNzLnMgZXhw bG9yYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICBnZGJfdGVzdF9t dWx0aXBsZSAiICIgImVuZCBjcyBleHBsb3JhdGlvbiIgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC1yZSAiJGdkYl9wcm9tcHQiIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAiZW5kIGNzIGV4cGxv cmF0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KK30KKworZ2RiX3Rlc3RfbXVsdGlwbGUgImV4cGxvcmUgY3UiICIi IHsKKyAgICAtcmUgIltjb21wb3VuZF9kZXNjcmlwdGlvbiB7Y3V9IHVuaW9u IHt1bmlvbiBDb21wbGV4VW5pb259XS4qW2ZpZWxkX2Nob2ljZXMge1NTIHN9 IHtzdHJ1Y3QgU2ltcGxlU3RydWN0IC4xMC4gc2F9XVtlbnRlcl9maWVsZF9u dW1iZXJfcHJvbXB0IHtjdX1dIiB7CisgICAgICAgIHBhc3MgImV4cGxvcmUg Y3UiCisgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIxIiAiZXhwbG9yZSBj dS5zYSIgeworICAgICAgICAgICAgLXJlICJbYXJyYXlfZGVzY3JpcHRpb24g e2N1LnNhfSAkU1NdJGFycmF5X2luZGV4X3Byb21wdCIgeworICAgICAgICAg ICAgICAgIHBhc3MgImV4cGxvcmUgY3Uuc2EiCisgICAgICAgICAgICAgICAg Z2RiX3Rlc3RfbXVsdGlwbGUgIjAiICJleHBsb3JlIGN1LnNhXFswXF0iIHsK KyAgICAgICAgICAgICAgICAgICAgLXJlICJbY29tcG91bmRfZGVzY3JpcHRp b24ge2N1LnNhXFswXF19IHtzdHJ1Y3QvY2xhc3N9IHtzdHJ1Y3QgU2ltcGxl U3RydWN0fV0uKltmaWVsZF92YWx1ZXMge2ludCBhID0gMH0ge2RvdWJsZSBk ID0gLipbLl0uKn1dLiokcmV0dXJuX3RvX3BhcmVudF9wcm9tcHQiIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmUgY3Uuc2FcWzBc XSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxl ICIgIiAiZW5kIGN1LnNhXFswXF0gZXhwbG9yYXRpb24iIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtcmUgIlthcnJheV9kZXNjcmlwdGlvbiB7 Y3Uuc2F9ICRTU10kYXJyYXlfaW5kZXhfcHJvbXB0IiB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhc3MgImVuZCBjdS5zYVxbMFxdIGV4 cGxvcmF0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnZGJfdGVz dF9tdWx0aXBsZSAiICIgImVuZCBjdS5zYSBleHBsb3JhdGlvbiIgeworICAg ICAgICAgICAgICAgICAgICAtcmUgIltlbnRlcl9maWVsZF9udW1iZXJfcHJv bXB0IHtjdX1dIiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJl bmQgY3Uuc2EgZXhwbG9yYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAg ICBnZGJfdGVzdF9tdWx0aXBsZSAiICIgImVuZCBjdSBleHBsb3JhdGlvbiIg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1yZSAiJGdkYl9wcm9t cHQiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAi ZW5kIGN1IGV4cGxvcmF0aW9uIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjIFR5cGUgZXhwbG9yYXRpb24gdGVzdHMKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworCitwcm9jIHNjYWxhcl9wcmltaXRpdmVfdHlwZV9kZWNz cmlwdGlvbiB7dHlwZX0geworICAgIHJldHVybiAiJHR5cGUgaXMgYSBwcmlt aXRpdmUgc2NhbGFyIHR5cGUiCit9CisKK3Byb2MgY29tcG91bmRfdHlwZV9k ZXNjcmlwdGlvbiB7IHR5cGVfbmFtZSB0eXBlX2tpbmQgfSB7CisgICAgcmV0 dXJuICIkdHlwZV9uYW1lIGlzIGEgJHR5cGVfa2luZCB3aXRoIHRoZSBmb2xs b3dpbmcgZmllbGRzOiIKK30KKworcHJvYyBjb21wb3VuZF9maWVsZF90eXBl X2Rlc2NyaXB0aW9uIHsgZmllbGRfbmFtZSB0eXBlX2tpbmQgdHlwZV9uYW1l fSB7CisgICAgcmV0dXJuICIkZmllbGRfbmFtZSBpcyBhICR0eXBlX2tpbmQg b2YgdHlwZSAnJHR5cGVfbmFtZScgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxk czoiCit9CisKK3Byb2MgYXJyYXlfdHlwZV9kZXNjcmlwdGlvbiB7IGFycmF5 X25hbWUgdHlwZV9uYW1lIH0geworICAgIHJldHVybiAiJGFycmF5X25hbWUg aXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgb2YgdHlwZSAnJHR5cGVfbmFtZSci Cit9CisKK3Byb2MgdHlwZWRlZl90eXBlX2Rlc2NyaXB0aW9uIHsgdHlwZV9u YW1lIHRhcmdldF9uYW1lIH0geworICAgIHJldHVybiAiJHR5cGVfbmFtZSBp cyBvZiBhIHR5cGUgd2hpY2ggaXMgYSB0eXBlZGVmIG9mIHR5cGUgJyR0YXJn ZXRfbmFtZSciCit9CisKK3NldCBDU19maWVsZF8wICJmaWVsZCAncycgb2Yg J3N0cnVjdCBDb21wbGV4U3RydWN0JyIKK3NldCBDU19maWVsZF8xICJmaWVs ZCAndScgb2YgJ3N0cnVjdCBDb21wbGV4U3RydWN0JyIKK3NldCBDU19maWVs ZF8yICJmaWVsZCAnc2EnIG9mICdzdHJ1Y3QgQ29tcGxleFN0cnVjdCciCitz ZXQgQ1NfZmllbGRfMl9hcnJheV9lbGVtZW50ICJhbiBhcnJheSBlbGVtZW50 IG9mICRDU19maWVsZF8yIgorCitzZXQgQ1VfZmllbGRfMCAiZmllbGQgJ3Mn IG9mICd1bmlvbiBDb21wbGV4VW5pb24nIgorc2V0IENVX2ZpZWxkXzEgImZp ZWxkICdzYScgb2YgJ3VuaW9uIENvbXBsZXhVbmlvbiciCitzZXQgQ1VfZmll bGRfMV9hcnJheV9lbGVtZW50ICJhbiBhcnJheSBlbGVtZW50IG9mICRDVV9m aWVsZF8xIgorCitzZXQgU1NfZmllbGRzX3R5cGVzIFtmaWVsZF92YWx1ZXMg e2ludCBhIC8vIFNjYWxhciBWYWx1ZX0ge2RvdWJsZSBkIC8vIFNjYWxhciBW YWx1ZX1dCitzZXQgU1VfZmllbGRzX3R5cGVzIFtmaWVsZF92YWx1ZXMge2lu dCBpIC8vIFNjYWxhciBWYWx1ZX0ge2NoYXIgYyAvLyBTY2FsYXIgVmFsdWV9 IHtmbG9hdCBmIC8vIFNjYWxhciBWYWx1ZX0ge2RvdWJsZSBkIC8vIFNjYWxh ciBWYWx1ZX1dCitzZXQgQ1NfZmllbGRzX3R5cGVzIFtmaWVsZF92YWx1ZXMg e3N0cnVjdCBTaW1wbGVTdHJ1Y3QgcyAgLy8gPEVudGVyIDAgdG8gZXhwbG9y ZSB0aGlzIGZpZWxkPn0ge3VuaW9uIFNpbXBsZVVuaW9uIHUgIC8vIDxFbnRl ciAxIHRvIGV4cGxvcmUgdGhpcyBmaWVsZD59IHtTUyBcWzEwXF0gc2EgLy8g PEVudGVyIDIgdG8gZXhwbG9yZSB0aGlzIGZpZWxkPn1dCitzZXQgQ1VfZmll bGRzX3R5cGVzIFtmaWVsZF92YWx1ZXMge1NTIHMgIC8vIDxFbnRlciAwIHRv IGV4cGxvcmUgdGhpcyBmaWVsZD59IHtzdHJ1Y3QgU2ltcGxlU3RydWN0IFxb MTBcXSBzYSAvLyA8RW50ZXIgMSB0byBleHBsb3JlIHRoaXMgZmllbGQ+fV0K KworZ2RiX3Rlc3QgImV4cGxvcmUgaW50IiAiLipbc2NhbGFyX3ByaW1pdGl2 ZV90eXBlX2RlY3NyaXB0aW9uIHtpbnR9XS4qIgorZ2RiX3Rlc3QgImV4cGxv cmUgc3RydWN0IFNpbXBsZVN0cnVjdCIgIi4qW2NvbXBvdW5kX3R5cGVfZGVz Y3JpcHRpb24gJFNTIHtzdHJ1Y3QvY2xhc3N9XS4qJFNTX2ZpZWxkc190eXBl cy4qIgorZ2RiX3Rlc3QgImV4cGxvcmUgdW5pb24gU2ltcGxlVW5pb24iICIu Kltjb21wb3VuZF90eXBlX2Rlc2NyaXB0aW9uICRTVSB7dW5pb259XS4qJFNV X2ZpZWxkc190eXBlcyIKK2dkYl90ZXN0ICJleHBsb3JlIFNTIiAiLipbdHlw ZWRlZl90eXBlX2Rlc2NyaXB0aW9uIHtTU30gJFNTXS4qW2NvbXBvdW5kX3R5 cGVfZGVzY3JpcHRpb24ge1NTfSB7c3RydWN0L2NsYXNzfV0uKiRTU19maWVs ZHNfdHlwZXMuKiIKKworZ2RiX3Rlc3RfbXVsdGlwbGUgImV4cGxvcmUgdHlw ZSBzdHJ1Y3QgQ29tcGxleFN0cnVjdCIgIiIgeworICAgIC1yZSAiLipbY29t cG91bmRfdHlwZV9kZXNjcmlwdGlvbiAkQ1Mge3N0cnVjdC9jbGFzc31dLiok Q1NfZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgcGFzcyAiZXhwbG9yZSB0 eXBlIHN0cnVjdCBDb21wbGV4U3RydWN0IgorICAgICAgICBnZGJfdGVzdF9t dWx0aXBsZSAiMCIgImV4cGxvcmUgdHlwZSBzdHJ1Y3QgQ29tcGxleFN0cnVj dCBmaWVsZCAwIiB7CisgICAgICAgICAgICAtcmUgIi4qW2NvbXBvdW5kX2Zp ZWxkX3R5cGVfZGVzY3JpcHRpb24gJENTX2ZpZWxkXzAge3N0cnVjdC9jbGFz c30gJFNTXS4qJFNTX2ZpZWxkc190eXBlcy4qIiB7CisgICAgICAgICAgICAg ICAgcGFzcyAiZXhwbG9yZSB0eXBlIHN0cnVjdCBDb21wbGV4U3RydWN0IGZp ZWxkIDAiCisgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIiAi ICJyZXR1cm4gdG8gQ29tcGxleFN0cnVjdCBmcm9tIGZpZWxkIDAiIHsKKyAg ICAgICAgICAgICAgICAgICAgLXJlICIuKltjb21wb3VuZF90eXBlX2Rlc2Ny aXB0aW9uICRDUyB7c3RydWN0L2NsYXNzfV0uKiRDU19maWVsZHNfdHlwZXMu KiIgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyAicmV0dXJuIHRv IENvbXBsZXhTdHJ1Y3QgZnJvbSBmaWVsZCAwIgorICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIxIiAiZXhwbG9y ZSB0eXBlIHN0cnVjdCBDb21wbGV4U3RydWN0IGZpZWxkIDEiIHsKKyAgICAg ICAgICAgIC1yZSAiLipbY29tcG91bmRfZmllbGRfdHlwZV9kZXNjcmlwdGlv biAkQ1NfZmllbGRfMSB7dW5pb259ICRTVV0uKiRTVV9maWVsZHNfdHlwZXMu KiIgeworICAgICAgICAgICAgICAgIHBhc3MgImV4cGxvcmUgdHlwZSBzdHJ1 Y3QgQ29tcGxleFN0cnVjdCBmaWVsZCAxIgorICAgICAgICAgICAgICAgIGdk Yl90ZXN0X211bHRpcGxlICIgIiAicmV0dXJuIHRvIENvbXBsZXhTdHJ1Y3Qg ZnJvbSBmaWVsZCAxIiB7CisgICAgICAgICAgICAgICAgICAgIC1yZSAiLipb Y29tcG91bmRfdHlwZV9kZXNjcmlwdGlvbiAkQ1Mge3N0cnVjdC9jbGFzc31d LiokQ1NfZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHBhc3MgInJldHVybiB0byBDb21wbGV4U3RydWN0IGZyb20gZmllbGQg MSIKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnZGJfdGVzdF9t dWx0aXBsZSAiMiIgImV4cGxvcmUgdHlwZSBzdHJ1Y3QgQ29tcGxleFN0cnVj dCBmaWVsZCAyIiB7CisgICAgICAgICAgICAtcmUgIi4qW2FycmF5X3R5cGVf ZGVzY3JpcHRpb24gJENTX2ZpZWxkXzIge1NTfV0uKiIgeworICAgICAgICAg ICAgICAgIHBhc3MgImV4cGxvcmUgdHlwZSBzdHJ1Y3QgQ29tcGxleFN0cnVj dCBmaWVsZCAyIgorICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxl ICJzIiAiYXJyYXkgZWxlbWVudCBvZiBmaWVsZCAyIG9mIENvbXBsZXhTdHJ1 Y3QiIHsKKyAgICAgICAgICAgICAgICAgICAgLXJlICIuKltjb21wb3VuZF9m aWVsZF90eXBlX2Rlc2NyaXB0aW9uICRDU19maWVsZF8yX2FycmF5X2VsZW1l bnQge3N0cnVjdC9jbGFzc30gJFNTXS4qJFNTX2ZpZWxkc190eXBlcy4qIiB7 CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICJhcnJheSBlbGVtZW50 IG9mIGZpZWxkIDIgb2YgQ29tcGxleFN0cnVjdCIKKyAgICAgICAgICAgICAg ICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAicmV0dXJuIHRvIENv bXBsZXhTdHJ1Y3QgYXJyYXkiIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtcmUgIi4qW2FycmF5X3R5cGVfZGVzY3JpcHRpb24gJENTX2ZpZWxk XzIge1NTfV0uKiIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwYXNzICJyZXR1cm4gdG8gQ29tcGxleFN0cnVjdCBhcnJheSIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUg IiAiICJyZXR1cm4gdG8gQ29tcGxleFN0cnVjdCBmcm9tIGZpZWxkIDIiIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1yZSAiLipb Y29tcG91bmRfdHlwZV9kZXNjcmlwdGlvbiAkQ1Mge3N0cnVjdC9jbGFzc31d LiokQ1NfZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwYXNzICJyZXR1cm4gdG8gQ29tcGxleFN0 cnVjdCBmcm9tIGZpZWxkIDIiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIiAiICJyZXR1cm4gdG8gR0RCIHByb21w dCBmcm9tIENvbXBsZXhTdHJ1Y3QgdHlwZSBleHBsb3JhdGlvbiIgeworICAg ICAgICAgICAgLXJlICIkZ2RiX3Byb21wdCIgeworICAgICAgICAgICAgICAg IHBhc3MgInJldHVybiB0byBHREIgcHJvbXB0IGZyb20gQ29tcGxleFN0cnVj dCB0eXBlIGV4cGxvcmF0aW9uIgorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfQorfQorCitnZGJfdGVzdF9tdWx0aXBsZSAiZXhwbG9yZSB0eXBl IHVuaW9uIENvbXBsZXhVbmlvbiIgIiIgeworICAgIC1yZSAiLipbY29tcG91 bmRfdHlwZV9kZXNjcmlwdGlvbiAkQ1Uge3VuaW9ufV0uKiRDVV9maWVsZHNf dHlwZXMuKiIgeworICAgICAgICBwYXNzICJleHBsb3JlIHR5cGUgdW5pb24g Q29tcGxleFVuaW9uIgorICAgICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiMCIg ImV4cGxvcmUgdHlwZSB1bmlvbiBDb21wbGV4U3RydWN0IGZpZWxkIDAiIHsK KyAgICAgICAgICAgIC1yZSAiLipbY29tcG91bmRfZmllbGRfdHlwZV9kZXNj cmlwdGlvbiAkQ1VfZmllbGRfMCB7c3RydWN0L2NsYXNzfSAkU1NdLiokU1Nf ZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgICAgICAgICBwYXNzICJleHBs b3JlIHR5cGUgdW5pb24gQ29tcGxleFVuaW9uIGZpZWxkIDAiCisgICAgICAg ICAgICAgICAgZ2RiX3Rlc3RfbXVsdGlwbGUgIiAiICJyZXR1cm4gdG8gQ29t cGxleFVuaW9uIGZyb20gZmllbGQgMCIgeworICAgICAgICAgICAgICAgICAg ICAtcmUgIi4qW2NvbXBvdW5kX3R5cGVfZGVzY3JpcHRpb24gJENVIHt1bmlv bn1dLiokQ1VfZmllbGRzX3R5cGVzLioiIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHBhc3MgInJldHVybiB0byBDb21wbGV4VW5pb24gZnJvbSBmaWVs ZCAwIgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdkYl90ZXN0 X211bHRpcGxlICIxIiAiZXhwbG9yZSB0eXBlIHVuaW9uIENvbXBsZXhVbmlv biBmaWVsZCAxIiB7CisgICAgICAgICAgICAtcmUgIi4qW2FycmF5X3R5cGVf ZGVzY3JpcHRpb24gJENVX2ZpZWxkXzEgJFNTXS4qIiB7CisgICAgICAgICAg ICAgICAgcGFzcyAiZXhwbG9yZSB0eXBlIHVuaW9uIENvbXBsZXhVbmlvbiBm aWVsZCAxIgorICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICJz IiAiYXJyYXkgZWxlbWVudCBvZiBmaWVsZCAxIG9mIENvbXBsZXhVbmlvbiIg eworICAgICAgICAgICAgICAgICAgICAtcmUgIi4qW2NvbXBvdW5kX2ZpZWxk X3R5cGVfZGVzY3JpcHRpb24gJENVX2ZpZWxkXzFfYXJyYXlfZWxlbWVudCB7 c3RydWN0L2NsYXNzfSAkU1NdLiokU1NfZmllbGRzX3R5cGVzLioiIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHBhc3MgImFycmF5IGVsZW1lbnQgb2Yg ZmllbGQgMSBvZiBDb21wbGV4VW5pb24iCisgICAgICAgICAgICAgICAgICAg ICAgICBnZGJfdGVzdF9tdWx0aXBsZSAiICIgInJldHVybiB0byBDb21wbGV4 VW5pb24gYXJyYXkiIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAt cmUgIi4qW2FycmF5X3R5cGVfZGVzY3JpcHRpb24gJENVX2ZpZWxkXzEgJFNT XS4qIiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3Mg InJldHVybiB0byBDb21wbGV4VW5pb24gYXJyYXkiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdkYl90ZXN0X211bHRpcGxlICIgIiAicmV0 dXJuIHRvIENvbXBsZXhVbmlvbiBmcm9tIGZpZWxkIDEiIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1yZSAiLipbY29tcG91bmRf dHlwZV9kZXNjcmlwdGlvbiAkQ1Uge3VuaW9ufV0uKiRDVV9maWVsZHNfdHlw ZXMuKiIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhc3MgInJldHVybiB0byBDb21wbGV4VW5pb24gZnJvbSBmaWVsZCAx IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdkYl90ZXN0X211bHRp cGxlICIgIiAicmV0dXJuIHRvIEdEQiBwcm9tcHQgZnJvbSBDb21wbGV4VW5p b24gdHlwZSBleHBsb3JhdGlvbiIgeworICAgICAgICAgICAgLXJlICIkZ2Ri X3Byb21wdCIgeworICAgICAgICAgICAgICAgIHBhc3MgInJldHVybiB0byBH REIgcHJvbXB0IGZyb20gQ29tcGxleFVuaW9uIHR5cGUgZXhwbG9yYXRpb24i CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9Cg== --20cf3074d5f0e5fb9f04b4768f14--