From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Mamoru TASAKA To: git-commits@fedoraproject.org Subject: [rpms/ruby] f45: Update to Ruby 4.0.7 Date: Thu, 17 Sep 2026 13:59:04 GMT Message-ID: <178965354405.1.6183318160573335716.rpms-ruby-d2201e13ea04@fedoraproject.org> List-ID: X-Git-Repo: rpms/ruby X-Git-Branch: f45 X-Git-Rev: d2201e13ea046fdb8c871762fbfc07dc8562f1bc QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvcnVieQpCcmFuY2gg OiBmNDUKQ29tbWl0IDogZDIyMDFlMTNlYTA0NmZkYjhjODcxNzYyZmJmYzA3ZGM4NTYyZjFiYwpB dXRob3IgOiBNYW1vcnUgVEFTQUtBIDxtdGFzYWthQGZlZG9yYXByb2plY3Qub3JnPgpEYXRlICAg OiAyMDI2LTA5LTE3VDIyOjU4OjQ5KzA5OjAwClN0YXRzICA6ICszNTk1Ly0xMDA3IGluIDQgZmls ZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL3J1YnkvYy9k MjIwMWUxM2VhMDQ2ZmRiOGM4NzE3NjJmYmZjMDdkYzg1NjJmMWJjP2JyYW5jaD1mNDUKCkxvZzoK VXBkYXRlIHRvIFJ1YnkgNC4wLjcKCi0tLQpkaWZmIC0tZ2l0IGEvcnVieS00LjAuNy1ydWJ5Z2Vt cy1wcjk4Nzctc3RvcC12ZW5kb3JpbmctcmVzb2x2LnBhdGNoIGIvcnVieS00LjAuNy1ydWJ5Z2Vt cy1wcjk4Nzctc3RvcC12ZW5kb3JpbmctcmVzb2x2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjljMWIzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9ydWJ5LTQuMC43LXJ1 YnlnZW1zLXByOTg3Ny1zdG9wLXZlbmRvcmluZy1yZXNvbHYucGF0Y2gKQEAgLTAsMCArMSwzNTc5 IEBACitGcm9tIDBiOGUwYjFjMjhiYzgzOTA5NWUyYzBlODg0MzEzZjBmNWVmMWZjNTMgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIaXJvc2hpIFNISUJBVEEgPGhzYnRAcnVieS1sYW5n Lm9yZz4KK0RhdGU6IFdlZCwgMTYgU2VwIDIwMjYgMDk6MzQ6MDkgKzA5MDAKK1N1YmplY3Q6IFtQ QVRDSF0gW3J1YnkvcnVieWdlbXNdIFN0b3AgdmVuZG9yaW5nIHJlc29sdiBmb3IgdHdvIHJlZ2V4 cHMKKworVmVuZG9yZWQgbmV0L2h0dHAgbG9hZGVkIHRoZSB3aG9sZSAzNTAwLWxpbmUgRE5TIHJl c29sdmVyIG9ubHkgdG8gbWF0Y2gKK1Jlc29sdjo6SVB2NDo6UmVnZXggYW5kIFJlc29sdjo6SVB2 Njo6UmVnZXggd2hlbiBkZWNpZGluZyB3aGV0aGVyIGFuCithZGRyZXNzIG1heSBiZSBzZW50IGFz IGEgU2VydmVyIE5hbWUgSW5kaWNhdGlvbi4gSW5saW5lIGVxdWl2YWxlbnQKK3JlZ2V4cHMgaW5z dGVhZCwgc28gdGhhdCBhIHJlc29sdmVyIFJ1YnlHZW1zIG5ldmVyIHJlc29sdmVzIHdpdGggaXMg bm8KK2xvbmdlciBzaGlwcGVkIGFuZCBubyBsb25nZXIgc2hvd3MgdXAgYXMgYW4gb3V0ZGF0ZWQg Y29weSBpbiBzZWN1cml0eQorYXVkaXRzIG9mIHRoZSBSdWJ5IHRhcmJhbGwuCisKK2h0dHBzOi8v YnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8yMjMxNworCitodHRwczovL2dpdGh1Yi5jb20vcnVi eS9ydWJ5Z2Vtcy9jb21taXQvOWYyYmQ1ZjY2YworCitDby1BdXRob3JlZC1CeTogQ2xhdWRlIE9w dXMgNSA8bm9yZXBseUBhbnRocm9waWMuY29tPgorLS0tCisgbGliL3J1YnlnZW1zL3ZlbmRvci9u ZXQtaHR0cC9saWIvbmV0L2h0dHAucmIgfCAgIDI2ICstCisgbGliL3J1YnlnZW1zL3ZlbmRvci9y ZXNvbHYvbGliL3Jlc29sdi5yYiAgICAgfCAzNTA4IC0tLS0tLS0tLS0tLS0tLS0tLQorIDIgZmls ZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgMzUxMCBkZWxldGlvbnMoLSkKKyBkZWxldGUg bW9kZSAxMDA2NDQgbGliL3J1YnlnZW1zL3ZlbmRvci9yZXNvbHYvbGliL3Jlc29sdi5yYgorCitk aWZmIC0tZ2l0IGEvbGliL3J1YnlnZW1zL3ZlbmRvci9uZXQtaHR0cC9saWIvbmV0L2h0dHAucmIg Yi9saWIvcnVieWdlbXMvdmVuZG9yL25ldC1odHRwL2xpYi9uZXQvaHR0cC5yYgoraW5kZXggNDgw MGNkMjVmMTNjMjEuLmIyMDVlNDk3MzRlZWJmIDEwMDY0NAorLS0tIGEvbGliL3J1YnlnZW1zL3Zl bmRvci9uZXQtaHR0cC9saWIvbmV0L2h0dHAucmIKKysrKyBiL2xpYi9ydWJ5Z2Vtcy92ZW5kb3Iv bmV0LWh0dHAvbGliL25ldC9odHRwLnJiCitAQCAtMjIsNyArMjIsNiBAQAorIAorIHJlcXVpcmVf cmVsYXRpdmUgJy4uLy4uLy4uL25ldC1wcm90b2NvbC9saWIvbmV0L3Byb3RvY29sJworIHJlcXVp cmVfcmVsYXRpdmUgJy4uLy4uLy4uL3VyaS9saWIvdXJpJworLXJlcXVpcmVfcmVsYXRpdmUgJy4u Ly4uLy4uL3Jlc29sdi9saWIvcmVzb2x2JworIGF1dG9sb2FkIDpPcGVuU1NMLCAnb3BlbnNzbCcK KyAKKyBtb2R1bGUgR2VtOjpOZXQgICAjOm5vZG9jOgorQEAgLTE1MzEsNiArMTUzMCwyOSBAQCBk ZWYgdXNlX3NzbD0oZmxhZykKKyAKKyAgICAgU1NMX0lWTkFNRVMgPSBTU0xfQVRUUklCVVRFUy5t YXAgeyB8YXwgIkAje2F9Ii50b19zeW0gfS5mcmVlemUgIyA6bm9kb2M6CisgCisrICAgICMgUmVz b2x2OjpJUHY0OjpSZWdleCBhbmQgUmVzb2x2OjpJUHY2OjpSZWdleCwgY29waWVkIGZyb20gcmVz b2x2IDAuNy4xIHJhdGhlcgorKyAgICAjIHRoYW4gcmVxdWlyZWQsIHNvIHRoYXQgbmV0L2h0dHAg ZG9lcyBub3QgbG9hZCBhIEROUyByZXNvbHZlciBqdXN0IHRvIGtlZXAgYW4KKysgICAgIyBJUCBh ZGRyZXNzIGxpdGVyYWwgb3V0IG9mIHRoZSBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uLgorKyAgICAj IGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3Jlc29sdi9ibG9iL3YwLjcuMS9saWIvcmVzb2x2LnJi CisrICAgIGlwdjRfb2N0ZXQgPSAvMHwxKD86WzAtOV1bMC05XT8pP3wyKD86WzAtNF1bMC05XT98 NVswLTVdP3xbNi05XSk/fFszLTldWzAtOV0/LworKyAgICBoZXgxNiA9IC9bMC05QS1GYS1mXXsx LDR9LworKyAgICBoZXgxNl9ncm91cCA9IC8oPzoje2hleDE2fSg/Ojoje2hleDE2fSkqKT8vCisr ICAgIGRvdHRlZF9xdWFkID0gL1xkK1wuXGQrXC5cZCtcLlxkKy8KKysgICAgem9uZV9pZCA9IC8l Wy0wLTlBLVphLXouX35dKy8KKysKKysgICAgSVBWNF9BRERSRVNTID0gL1xBKD86I3tpcHY0X29j dGV0fSlcLig/OiN7aXB2NF9vY3RldH0pXC4oPzoje2lwdjRfb2N0ZXR9KVwuKD86I3tpcHY0X29j dGV0fSlcei8gIyA6bm9kb2M6CisrCisrICAgIElQVjZfQUREUkVTUyA9IC9cQSg/OgorKyAgICAg ICAgKD86I3toZXgxNn06KXs3fSN7aGV4MTZ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIGE6YjpjOmQ6ZTpmOmc6aAorKyAgICAgIHwgI3toZXgxNl9ncm91cH06 OiN7aGV4MTZfZ3JvdXB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGE6 OmIKKysgICAgICB8ICg/OiN7aGV4MTZ9Oil7Nn0je2RvdHRlZF9xdWFkfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBhOmI6YzpkOmU6Zjp3LngueS56CisrICAgICAgfCAj e2hleDE2X2dyb3VwfTo6KD86I3toZXgxNn06KSoje2RvdHRlZF9xdWFkfSAgICAgICAgICAgICAg ICAgICAgICAgICMgYTo6Yjp3LngueS56CisrICAgICAgfCBbRmZdW0VlXTgwKD86OiN7aGV4MTZ9 KXs3fSN7em9uZV9pZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmU4MDpiOmM6 ZDplOmY6ZzpoJWVtMQorKyAgICAgIHwgW0ZmXVtFZV04MDooPzoje2hleDE2X2dyb3VwfTo6I3to ZXgxNl9ncm91cH18OiN7aGV4MTZfZ3JvdXB9KT86I3toZXgxNn0je3pvbmVfaWR9ICMgZmU4MDo6 YiVlbTEKKysgICAgKVx6L3ggIyA6bm9kb2M6CisrCisrICAgIHByaXZhdGVfY29uc3RhbnQgOklQ VjRfQUREUkVTUywgOklQVjZfQUREUkVTUworKworICAgICAjIFNldHMgb3IgcmV0dXJucyB0aGUg cGF0aCB0byBhIENBIGNlcnRpZmljYXRpb24gZmlsZSBpbiBQRU0gZm9ybWF0LgorICAgICBhdHRy X2FjY2Vzc29yIDpjYV9maWxlCisgCitAQCAtMTcxNCw3ICsxNzM2LDcgQEAgZGVmIGNvbm5lY3QK KyAKKyAgICAgICAgICMgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiAoU05JKSBSRkMgMzU0Ni82MDY2 CisgICAgICAgICBjYXNlIEBhZGRyZXNzCistICAgICAgICB3aGVuIEdlbTo6UmVzb2x2OjpJUHY0 OjpSZWdleCwgR2VtOjpSZXNvbHY6OklQdjY6OlJlZ2V4CisrICAgICAgICB3aGVuIElQVjRfQURE UkVTUywgSVBWNl9BRERSRVNTCisgICAgICAgICAgICMgZG9uJ3Qgc2V0IFNOSSwgYXMgSVAgYWRk cmVzc2VzIGluIFNOSSBpcyBub3QgdmFsaWQKKyAgICAgICAgICAgIyBwZXIgUkZDIDYwNjYsIHNl Y3Rpb24gMy4KKyAKK2RpZmYgLS1naXQgYS9saWIvcnVieWdlbXMvdmVuZG9yL3Jlc29sdi9saWIv cmVzb2x2LnJiIGIvbGliL3J1YnlnZW1zL3ZlbmRvci9yZXNvbHYvbGliL3Jlc29sdi5yYgorZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCBmOTIyYzczMWIwNTAyNi4uMDAwMDAwMDAwMDAw MDAKKy0tLSBhL2xpYi9ydWJ5Z2Vtcy92ZW5kb3IvcmVzb2x2L2xpYi9yZXNvbHYucmIKKysrKyAv ZGV2L251bGwKK0BAIC0xLDM0OTkgKzAsMCBAQAorLSMgZnJvemVuX3N0cmluZ19saXRlcmFsOiB0 cnVlCistCistcmVxdWlyZSAnc29ja2V0JworLXJlcXVpcmVfcmVsYXRpdmUgJy4uLy4uLy4uL3Zl bmRvcmVkX3RpbWVvdXQnCistcmVxdWlyZSAnaW8vd2FpdCcKKy1yZXF1aXJlX3JlbGF0aXZlICcu Li8uLi8uLi92ZW5kb3JlZF9zZWN1cmVyYW5kb20nCistcmVxdWlyZSAncmJjb25maWcnCistCist IyBHZW06OlJlc29sdiBpcyBhIHRocmVhZC1hd2FyZSBETlMgcmVzb2x2ZXIgbGlicmFyeSB3cml0 dGVuIGluIFJ1YnkuICBHZW06OlJlc29sdiBjYW4KKy0jIGhhbmRsZSBtdWx0aXBsZSBETlMgcmVx dWVzdHMgY29uY3VycmVudGx5IHdpdGhvdXQgYmxvY2tpbmcgdGhlIGVudGlyZSBSdWJ5CistIyBp bnRlcnByZXRlci4KKy0jCistIyBTZWUgYWxzbyByZXNvbHYtcmVwbGFjZS5yYiB0byByZXBsYWNl IHRoZSBsaWJjIHJlc29sdmVyIHdpdGggR2VtOjpSZXNvbHYuCistIworLSMgR2VtOjpSZXNvbHYg Y2FuIGxvb2sgdXAgdmFyaW91cyBETlMgcmVzb3VyY2VzIHVzaW5nIHRoZSBETlMgbW9kdWxlIGRp cmVjdGx5LgorLSMKKy0jIEV4YW1wbGVzOgorLSMKKy0jICAgcCBHZW06OlJlc29sdi5nZXRhZGRy ZXNzICJ3d3cucnVieS1sYW5nLm9yZyIKKy0jICAgcCBHZW06OlJlc29sdi5nZXRuYW1lICIyMTAu MjUxLjEyMS4yMTQiCistIworLSMgICBHZW06OlJlc29sdjo6RE5TLm9wZW4gZG8gfGRuc3wKKy0j ICAgICByZXNzID0gZG5zLmdldHJlc291cmNlcyAid3d3LnJ1YnktbGFuZy5vcmciLCBHZW06OlJl c29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkEKKy0jICAgICBwIHJlc3MubWFwKCY6YWRkcmVzcykK Ky0jICAgICByZXNzID0gZG5zLmdldHJlc291cmNlcyAicnVieS1sYW5nLm9yZyIsIEdlbTo6UmVz b2x2OjpETlM6OlJlc291cmNlOjpJTjo6TVgKKy0jICAgICBwIHJlc3MubWFwIHsgfHJ8IFtyLmV4 Y2hhbmdlLnRvX3MsIHIucHJlZmVyZW5jZV0gfQorLSMgICBlbmQKKy0jCistIworLSMgPT0gQnVn cworLSMKKy0jICogTklTIGlzIG5vdCBzdXBwb3J0ZWQuCistIyAqIC9ldGMvbnNzd2l0Y2guY29u ZiBpcyBub3Qgc3VwcG9ydGVkLgorLQorLWNsYXNzIEdlbTo6UmVzb2x2CistCistICAjIFRoZSB2 ZXJzaW9uIHN0cmluZworLSAgVkVSU0lPTiA9ICIwLjcuMCIKKy0KKy0gICMjCistICAjIExvb2tz IHVwIHRoZSBmaXJzdCBJUCBhZGRyZXNzIGZvciArbmFtZSsuCistCistICBkZWYgc2VsZi5nZXRh ZGRyZXNzKG5hbWUpCistICAgIERlZmF1bHRSZXNvbHZlci5nZXRhZGRyZXNzKG5hbWUpCistICBl bmQKKy0KKy0gICMjCistICAjIExvb2tzIHVwIGFsbCBJUCBhZGRyZXNzIGZvciArbmFtZSsuCist CistICBkZWYgc2VsZi5nZXRhZGRyZXNzZXMobmFtZSkKKy0gICAgRGVmYXVsdFJlc29sdmVyLmdl dGFkZHJlc3NlcyhuYW1lKQorLSAgZW5kCistCistICAjIworLSAgIyBJdGVyYXRlcyBvdmVyIGFs bCBJUCBhZGRyZXNzZXMgZm9yICtuYW1lKy4KKy0KKy0gIGRlZiBzZWxmLmVhY2hfYWRkcmVzcyhu YW1lLCAmYmxvY2spCistICAgIERlZmF1bHRSZXNvbHZlci5lYWNoX2FkZHJlc3MobmFtZSwgJmJs b2NrKQorLSAgZW5kCistCistICAjIworLSAgIyBMb29rcyB1cCB0aGUgaG9zdG5hbWUgb2YgK2Fk ZHJlc3MrLgorLQorLSAgZGVmIHNlbGYuZ2V0bmFtZShhZGRyZXNzKQorLSAgICBEZWZhdWx0UmVz b2x2ZXIuZ2V0bmFtZShhZGRyZXNzKQorLSAgZW5kCistCistICAjIworLSAgIyBMb29rcyB1cCBh bGwgaG9zdG5hbWVzIGZvciArYWRkcmVzcysuCistCistICBkZWYgc2VsZi5nZXRuYW1lcyhhZGRy ZXNzKQorLSAgICBEZWZhdWx0UmVzb2x2ZXIuZ2V0bmFtZXMoYWRkcmVzcykKKy0gIGVuZAorLQor LSAgIyMKKy0gICMgSXRlcmF0ZXMgb3ZlciBhbGwgaG9zdG5hbWVzIGZvciArYWRkcmVzcysuCist CistICBkZWYgc2VsZi5lYWNoX25hbWUoYWRkcmVzcywgJnByb2MpCistICAgIERlZmF1bHRSZXNv bHZlci5lYWNoX25hbWUoYWRkcmVzcywgJnByb2MpCistICBlbmQKKy0KKy0gICMjCistICAjIENy ZWF0ZXMgYSBuZXcgR2VtOjpSZXNvbHYgdXNpbmcgK3Jlc29sdmVycysuCistICAjCistICAjIElm ICtyZXNvbHZlcnMrIGlzIG5vdCBnaXZlbiwgYSBoYXNoLCBvciArbmlsKywgdXNlcyBhIEhvc3Rz IHJlc29sdmVyIGFuZAorLSAgIyBhbmQgYSBETlMgcmVzb2x2ZXIuICBJZiArcmVzb2x2ZXJzKyBp cyBhIGhhc2gsIHVzZXMgdGhlIGhhc2ggYXMKKy0gICMgY29uZmlndXJhdGlvbiBmb3IgdGhlIERO UyByZXNvbHZlci4KKy0KKy0gIGRlZiBpbml0aWFsaXplKHJlc29sdmVycz0oYXJnX25vdF9zZXQg PSB0cnVlOyBuaWwpLCB1c2VfaXB2NjogKGtleXdvcmRfbm90X3NldCA9IHRydWU7IG5pbCkpCist ICAgIGlmICFrZXl3b3JkX25vdF9zZXQgJiYgIWFyZ19ub3Rfc2V0CistICAgICAgd2FybiAiU3Vw cG9ydCBmb3Igc2VwYXJhdGUgdXNlX2lwdjYga2V5d29yZCBpcyBkZXByZWNhdGVkLCBhcyBpdCBp cyBpZ25vcmVkIGlmIGFuIGFyZ3VtZW50IGlzIHByb3ZpZGVkLiBEbyBub3QgcHJvdmlkZSBhIHBv c2l0aW9uYWwgYXJndW1lbnQgaWYgdXNpbmcgdGhlIHVzZV9pcHY2IGtleXdvcmQgYXJndW1lbnQu IiwgdXBsZXZlbDogMQorLSAgICBlbmQKKy0KKy0gICAgQHJlc29sdmVycyA9IGNhc2UgcmVzb2x2 ZXJzCistICAgIHdoZW4gSGFzaCwgbmlsCistICAgICAgW0hvc3RzLm5ldywgRE5TLm5ldyhETlM6 OkNvbmZpZy5kZWZhdWx0X2NvbmZpZ19oYXNoLm1lcmdlKHJlc29sdmVycyB8fCB7fSkpXQorLSAg ICBlbHNlCistICAgICAgcmVzb2x2ZXJzCistICAgIGVuZAorLSAgZW5kCistCistICAjIworLSAg IyBMb29rcyB1cCB0aGUgZmlyc3QgSVAgYWRkcmVzcyBmb3IgK25hbWUrLgorLQorLSAgZGVmIGdl dGFkZHJlc3MobmFtZSkKKy0gICAgZWFjaF9hZGRyZXNzKG5hbWUpIHt8YWRkcmVzc3wgcmV0dXJu IGFkZHJlc3N9CistICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldygibm8gYWRkcmVzcyBmb3IgI3tu YW1lfSIpCistICBlbmQKKy0KKy0gICMjCistICAjIExvb2tzIHVwIGFsbCBJUCBhZGRyZXNzIGZv ciArbmFtZSsuCistCistICBkZWYgZ2V0YWRkcmVzc2VzKG5hbWUpCistICAgIHJldCA9IFtdCist ICAgIGVhY2hfYWRkcmVzcyhuYW1lKSB7fGFkZHJlc3N8IHJldCA8PCBhZGRyZXNzfQorLSAgICBy ZXR1cm4gcmV0CistICBlbmQKKy0KKy0gICMjCistICAjIEl0ZXJhdGVzIG92ZXIgYWxsIElQIGFk ZHJlc3NlcyBmb3IgK25hbWUrLgorLQorLSAgZGVmIGVhY2hfYWRkcmVzcyhuYW1lKQorLSAgICBp ZiBBZGRyZXNzUmVnZXggPX4gbmFtZQorLSAgICAgIHlpZWxkIG5hbWUKKy0gICAgICByZXR1cm4K Ky0gICAgZW5kCistICAgIHlpZWxkZWQgPSBmYWxzZQorLSAgICBAcmVzb2x2ZXJzLmVhY2gge3xy fAorLSAgICAgIHIuZWFjaF9hZGRyZXNzKG5hbWUpIHt8YWRkcmVzc3wKKy0gICAgICAgIHlpZWxk IGFkZHJlc3MudG9fcworLSAgICAgICAgeWllbGRlZCA9IHRydWUKKy0gICAgICB9CistICAgICAg cmV0dXJuIGlmIHlpZWxkZWQKKy0gICAgfQorLSAgZW5kCistCistICAjIworLSAgIyBMb29rcyB1 cCB0aGUgaG9zdG5hbWUgb2YgK2FkZHJlc3MrLgorLQorLSAgZGVmIGdldG5hbWUoYWRkcmVzcykK Ky0gICAgZWFjaF9uYW1lKGFkZHJlc3MpIHt8bmFtZXwgcmV0dXJuIG5hbWV9CistICAgIHJhaXNl IFJlc29sdkVycm9yLm5ldygibm8gbmFtZSBmb3IgI3thZGRyZXNzfSIpCistICBlbmQKKy0KKy0g ICMjCistICAjIExvb2tzIHVwIGFsbCBob3N0bmFtZXMgZm9yICthZGRyZXNzKy4KKy0KKy0gIGRl ZiBnZXRuYW1lcyhhZGRyZXNzKQorLSAgICByZXQgPSBbXQorLSAgICBlYWNoX25hbWUoYWRkcmVz cykge3xuYW1lfCByZXQgPDwgbmFtZX0KKy0gICAgcmV0dXJuIHJldAorLSAgZW5kCistCistICAj IworLSAgIyBJdGVyYXRlcyBvdmVyIGFsbCBob3N0bmFtZXMgZm9yICthZGRyZXNzKy4KKy0KKy0g IGRlZiBlYWNoX25hbWUoYWRkcmVzcykKKy0gICAgeWllbGRlZCA9IGZhbHNlCistICAgIEByZXNv bHZlcnMuZWFjaCB7fHJ8CistICAgICAgci5lYWNoX25hbWUoYWRkcmVzcykge3xuYW1lfAorLSAg ICAgICAgeWllbGQgbmFtZS50b19zCistICAgICAgICB5aWVsZGVkID0gdHJ1ZQorLSAgICAgIH0K Ky0gICAgICByZXR1cm4gaWYgeWllbGRlZAorLSAgICB9CistICBlbmQKKy0KKy0gICMjCistICAj IEluZGljYXRlcyBhIGZhaWx1cmUgdG8gcmVzb2x2ZSBhIG5hbWUgb3IgYWRkcmVzcy4KKy0KKy0g IGNsYXNzIFJlc29sdkVycm9yIDwgU3RhbmRhcmRFcnJvcjsgZW5kCistCistICAjIworLSAgIyBJ bmRpY2F0ZXMgYSB0aW1lb3V0IHJlc29sdmluZyBhIG5hbWUgb3IgYWRkcmVzcy4KKy0KKy0gIGNs YXNzIFJlc29sdlRpbWVvdXQgPCBHZW06OlRpbWVvdXQ6OkVycm9yOyBlbmQKKy0KKy0gICMjCist ICAjIEdlbTo6UmVzb2x2OjpIb3N0cyBpcyBhIGhvc3RuYW1lIHJlc29sdmVyIHRoYXQgdXNlcyB0 aGUgc3lzdGVtIGhvc3RzIGZpbGUuCistCistICBjbGFzcyBIb3N0cworLSAgICBpZiAvbXN3aW58 Y3lnd2lufG1pbmd3fGJjY3dpbi8gPX4gUlVCWV9QTEFURk9STSB8fCA6OlJiQ29uZmlnOjpDT05G SUdbJ2hvc3Rfb3MnXSA9fiAvbXN3aW4vCistICAgICAgYmVnaW4KKy0gICAgICAgIHJlcXVpcmUg J3dpbjMyL3Jlc29sdicgdW5sZXNzIGRlZmluZWQ/KFdpbjMyOjpSZXNvbHYpCistICAgICAgICBo b3N0cyA9IFdpbjMyOjpSZXNvbHYuZ2V0X2hvc3RzX3BhdGggfHwgSU86Ok5VTEwKKy0gICAgICBy ZXNjdWUgTG9hZEVycm9yCistICAgICAgZW5kCistICAgIGVuZAorLSAgICAjIFRoZSBkZWZhdWx0 IGZpbGUgbmFtZSBmb3IgaG9zdCBuYW1lcworLSAgICBEZWZhdWx0RmlsZU5hbWUgPSBob3N0cyB8 fCAnL2V0Yy9ob3N0cycKKy0KKy0gICAgIyMKKy0gICAgIyBDcmVhdGVzIGEgbmV3IEdlbTo6UmVz b2x2OjpIb3N0cywgdXNpbmcgK2ZpbGVuYW1lKyBmb3IgaXRzIGRhdGEgc291cmNlLgorLQorLSAg ICBkZWYgaW5pdGlhbGl6ZShmaWxlbmFtZSA9IERlZmF1bHRGaWxlTmFtZSkKKy0gICAgICBAZmls ZW5hbWUgPSBmaWxlbmFtZQorLSAgICAgIEBtdXRleCA9IFRocmVhZDo6TXV0ZXgubmV3CistICAg ICAgQGluaXRpYWxpemVkID0gbmlsCistICAgIGVuZAorLQorLSAgICBkZWYgbGF6eV9pbml0aWFs aXplICMgOm5vZG9jOgorLSAgICAgIEBtdXRleC5zeW5jaHJvbml6ZSB7CistICAgICAgICB1bmxl c3MgQGluaXRpYWxpemVkCistICAgICAgICAgIEBuYW1lMmFkZHIgPSB7fQorLSAgICAgICAgICBA YWRkcjJuYW1lID0ge30KKy0gICAgICAgICAgRmlsZS5vcGVuKEBmaWxlbmFtZSwgJ3JiJykge3xm fAorLSAgICAgICAgICAgIGYuZWFjaCB7fGxpbmV8CistICAgICAgICAgICAgICBsaW5lLnN1YiEo LyMuKi8sICcnKQorLSAgICAgICAgICAgICAgYWRkciwgKmhvc3RuYW1lcyA9IGxpbmUuc3BsaXQo L1xzKy8pCistICAgICAgICAgICAgICBuZXh0IHVubGVzcyBhZGRyCistICAgICAgICAgICAgICAo QGFkZHIybmFtZVthZGRyXSB8fD0gW10pLmNvbmNhdChob3N0bmFtZXMpCistICAgICAgICAgICAg ICBob3N0bmFtZXMuZWFjaCB7fGhvc3RuYW1lfCAoQG5hbWUyYWRkcltob3N0bmFtZV0gfHw9IFtd KSA8PCBhZGRyfQorLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgfQorLSAgICAgICAgICBAbmFt ZTJhZGRyLmVhY2gge3xuYW1lLCBhcnJ8IGFyci5yZXZlcnNlIX0KKy0gICAgICAgICAgQGluaXRp YWxpemVkID0gdHJ1ZQorLSAgICAgICAgZW5kCistICAgICAgfQorLSAgICAgIHNlbGYKKy0gICAg ZW5kCistCistICAgICMjCistICAgICMgR2V0cyB0aGUgSVAgYWRkcmVzcyBvZiArbmFtZSsgZnJv bSB0aGUgaG9zdHMgZmlsZS4KKy0KKy0gICAgZGVmIGdldGFkZHJlc3MobmFtZSkKKy0gICAgICBl YWNoX2FkZHJlc3MobmFtZSkge3xhZGRyZXNzfCByZXR1cm4gYWRkcmVzc30KKy0gICAgICByYWlz ZSBSZXNvbHZFcnJvci5uZXcoIiN7QGZpbGVuYW1lfSBoYXMgbm8gbmFtZTogI3tuYW1lfSIpCist ICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEdldHMgYWxsIElQIGFkZHJlc3NlcyBmb3IgK25h bWUrIGZyb20gdGhlIGhvc3RzIGZpbGUuCistCistICAgIGRlZiBnZXRhZGRyZXNzZXMobmFtZSkK Ky0gICAgICByZXQgPSBbXQorLSAgICAgIGVhY2hfYWRkcmVzcyhuYW1lKSB7fGFkZHJlc3N8IHJl dCA8PCBhZGRyZXNzfQorLSAgICAgIHJldHVybiByZXQKKy0gICAgZW5kCistCistICAgICMjCist ICAgICMgSXRlcmF0ZXMgb3ZlciBhbGwgSVAgYWRkcmVzc2VzIGZvciArbmFtZSsgcmV0cmlldmVk IGZyb20gdGhlIGhvc3RzIGZpbGUuCistCistICAgIGRlZiBlYWNoX2FkZHJlc3MobmFtZSwgJnBy b2MpCistICAgICAgbGF6eV9pbml0aWFsaXplCistICAgICAgQG5hbWUyYWRkcltuYW1lXSYuZWFj aCgmcHJvYykKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgR2V0cyB0aGUgaG9zdG5hbWUg b2YgK2FkZHJlc3MrIGZyb20gdGhlIGhvc3RzIGZpbGUuCistCistICAgIGRlZiBnZXRuYW1lKGFk ZHJlc3MpCistICAgICAgZWFjaF9uYW1lKGFkZHJlc3MpIHt8bmFtZXwgcmV0dXJuIG5hbWV9Cist ICAgICAgcmFpc2UgUmVzb2x2RXJyb3IubmV3KCIje0BmaWxlbmFtZX0gaGFzIG5vIGFkZHJlc3M6 ICN7YWRkcmVzc30iKQorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBHZXRzIGFsbCBob3N0 bmFtZXMgZm9yICthZGRyZXNzKyBmcm9tIHRoZSBob3N0cyBmaWxlLgorLQorLSAgICBkZWYgZ2V0 bmFtZXMoYWRkcmVzcykKKy0gICAgICByZXQgPSBbXQorLSAgICAgIGVhY2hfbmFtZShhZGRyZXNz KSB7fG5hbWV8IHJldCA8PCBuYW1lfQorLSAgICAgIHJldHVybiByZXQKKy0gICAgZW5kCistCist ICAgICMjCistICAgICMgSXRlcmF0ZXMgb3ZlciBhbGwgaG9zdG5hbWVzIGZvciArYWRkcmVzcysg cmV0cmlldmVkIGZyb20gdGhlIGhvc3RzIGZpbGUuCistCistICAgIGRlZiBlYWNoX25hbWUoYWRk cmVzcywgJnByb2MpCistICAgICAgbGF6eV9pbml0aWFsaXplCistICAgICAgQGFkZHIybmFtZVth ZGRyZXNzXSYuZWFjaCgmcHJvYykKKy0gICAgZW5kCistICBlbmQKKy0KKy0gICMjCistICAjIEdl bTo6UmVzb2x2OjpETlMgaXMgYSBETlMgc3R1YiByZXNvbHZlci4KKy0gICMKKy0gICMgSW5mb3Jt YXRpb24gdGFrZW4gZnJvbSB0aGUgZm9sbG93aW5nIHBsYWNlczoKKy0gICMKKy0gICMgKiBTVEQw MDEzCistICAjICogUkZDIDEwMzUKKy0gICMgKiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9p YW5hL2Fzc2lnbm1lbnRzL2Rucy1wYXJhbWV0ZXJzCistICAjICogZXRjLgorLQorLSAgY2xhc3Mg RE5TCistCistICAgICMjCistICAgICMgRGVmYXVsdCBETlMgUG9ydAorLQorLSAgICBQb3J0ID0g NTMKKy0KKy0gICAgIyMKKy0gICAgIyBEZWZhdWx0IEROUyBVRFAgcGFja2V0IHNpemUKKy0KKy0g ICAgVURQU2l6ZSA9IDUxMgorLQorLSAgICAjIworLSAgICAjIENyZWF0ZXMgYSBuZXcgRE5TIHJl c29sdmVyLiAgU2VlIEdlbTo6UmVzb2x2OjpETlMubmV3IGZvciBhcmd1bWVudCBkZXRhaWxzLgor LSAgICAjCistICAgICMgWWllbGRzIHRoZSBjcmVhdGVkIEROUyByZXNvbHZlciB0byB0aGUgYmxv Y2ssIGlmIGdpdmVuLCBvdGhlcndpc2UKKy0gICAgIyByZXR1cm5zIGl0LgorLQorLSAgICBkZWYg c2VsZi5vcGVuKCphcmdzKQorLSAgICAgIGRucyA9IG5ldygqYXJncykKKy0gICAgICByZXR1cm4g ZG5zIHVubGVzcyBibG9ja19naXZlbj8KKy0gICAgICBiZWdpbgorLSAgICAgICAgeWllbGQgZG5z CistICAgICAgZW5zdXJlCistICAgICAgICBkbnMuY2xvc2UKKy0gICAgICBlbmQKKy0gICAgZW5k CistCistICAgICMjCistICAgICMgQ3JlYXRlcyBhIG5ldyBETlMgcmVzb2x2ZXIuCistICAgICMK Ky0gICAgIyArY29uZmlnX2luZm8rIGNhbiBiZToKKy0gICAgIworLSAgICAjIG5pbDo6IFVzZXMg L2V0Yy9yZXNvbHYuY29uZi4KKy0gICAgIyBTdHJpbmc6OiBQYXRoIHRvIGEgZmlsZSB1c2luZyAv ZXRjL3Jlc29sdi5jb25mJ3MgZm9ybWF0LgorLSAgICAjIEhhc2g6OiBNdXN0IGNvbnRhaW4gOm5h bWVzZXJ2ZXIsIDpzZWFyY2ggYW5kIDpuZG90cyBrZXlzLgorLSAgICAjIDpuYW1lc2VydmVyX3Bv cnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBwb3J0IG51bWJlciBvZiBuYW1lc2VydmVyIGFkZHJl c3MuCistICAgICMgOnJhaXNlX3RpbWVvdXRfZXJyb3JzIGNhbiBiZSB1c2VkIHRvIHJhaXNlIHRp bWVvdXQgZXJyb3JzCistICAgICMgYXMgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRo ZSBzYW1lIGFzIGFuIE5YRE9NQUlOIHJlc3BvbnNlLgorLSAgICAjCistICAgICMgVGhlIHZhbHVl IG9mIDpuYW1lc2VydmVyIHNob3VsZCBiZSBhbiBhZGRyZXNzIHN0cmluZyBvcgorLSAgICAjIGFu IGFycmF5IG9mIGFkZHJlc3Mgc3RyaW5ncy4KKy0gICAgIyAtIDpuYW1lc2VydmVyID0+ICc4Ljgu OC44JworLSAgICAjIC0gOm5hbWVzZXJ2ZXIgPT4gWyc4LjguOC44JywgJzguOC40LjQnXQorLSAg ICAjCistICAgICMgVGhlIHZhbHVlIG9mIDpuYW1lc2VydmVyX3BvcnQgc2hvdWxkIGJlIGFuIGFy cmF5IG9mCistICAgICMgcGFpciBvZiBuYW1lc2VydmVyIGFkZHJlc3MgYW5kIHBvcnQgbnVtYmVy LgorLSAgICAjIC0gOm5hbWVzZXJ2ZXJfcG9ydCA9PiBbWyc4LjguOC44JywgNTNdLCBbJzguOC40 LjQnLCA1M11dCistICAgICMKKy0gICAgIyBFeGFtcGxlOgorLSAgICAjCistICAgICMgICBHZW06 OlJlc29sdjo6RE5TLm5ldyg6bmFtZXNlcnZlciA9PiBbJzIxMC4yNTEuMTIxLjIxJ10sCistICAg ICMgICAgICAgICAgICAgICAgICAgOnNlYXJjaCA9PiBbJ3J1YnktbGFuZy5vcmcnXSwKKy0gICAg IyAgICAgICAgICAgICAgICAgICA6bmRvdHMgPT4gMSkKKy0KKy0gICAgZGVmIGluaXRpYWxpemUo Y29uZmlnX2luZm89bmlsKQorLSAgICAgIEBtdXRleCA9IFRocmVhZDo6TXV0ZXgubmV3CistICAg ICAgQGNvbmZpZyA9IENvbmZpZy5uZXcoY29uZmlnX2luZm8pCistICAgICAgQGluaXRpYWxpemVk ID0gbmlsCistICAgIGVuZAorLQorLSAgICAjIFNldHMgdGhlIHJlc29sdmVyIHRpbWVvdXRzLiAg VGhpcyBtYXkgYmUgYSBzaW5nbGUgcG9zaXRpdmUgbnVtYmVyCistICAgICMgb3IgYW4gYXJyYXkg b2YgcG9zaXRpdmUgbnVtYmVycyByZXByZXNlbnRpbmcgdGltZW91dHMgaW4gc2Vjb25kcy4KKy0g ICAgIyBJZiBhbiBhcnJheSBpcyBzcGVjaWZpZWQsIGEgRE5TIHJlcXVlc3Qgd2lsbCByZXRyeSBh bmQgd2FpdCBmb3IKKy0gICAgIyBlYWNoIHN1Y2Nlc3NpdmUgaW50ZXJ2YWwgaW4gdGhlIGFycmF5 IHVudGlsIGEgc3VjY2Vzc2Z1bCByZXNwb25zZQorLSAgICAjIGlzIHJlY2VpdmVkLiAgU3BlY2lm eWluZyArbmlsKyByZXZlcnRzIHRvIHRoZSBkZWZhdWx0IHRpbWVvdXRzOgorLSAgICAjIFsgNSwg c2Vjb25kID0gNSAqIDIgLyBuYW1lc2VydmVyX2NvdW50LCAyICogc2Vjb25kLCA0ICogc2Vjb25k IF0KKy0gICAgIworLSAgICAjIEV4YW1wbGU6CistICAgICMKKy0gICAgIyAgIGRucy50aW1lb3V0 cyA9IDMKKy0gICAgIworLSAgICBkZWYgdGltZW91dHM9KHZhbHVlcykKKy0gICAgICBAY29uZmln LnRpbWVvdXRzID0gdmFsdWVzCistICAgIGVuZAorLQorLSAgICBkZWYgbGF6eV9pbml0aWFsaXpl ICMgOm5vZG9jOgorLSAgICAgIEBtdXRleC5zeW5jaHJvbml6ZSB7CistICAgICAgICB1bmxlc3Mg QGluaXRpYWxpemVkCistICAgICAgICAgIEBjb25maWcubGF6eV9pbml0aWFsaXplCistICAgICAg ICAgIEBpbml0aWFsaXplZCA9IHRydWUKKy0gICAgICAgIGVuZAorLSAgICAgIH0KKy0gICAgICBz ZWxmCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIENsb3NlcyB0aGUgRE5TIHJlc29sdmVy LgorLQorLSAgICBkZWYgY2xvc2UKKy0gICAgICBAbXV0ZXguc3luY2hyb25pemUgeworLSAgICAg ICAgaWYgQGluaXRpYWxpemVkCistICAgICAgICAgIEBpbml0aWFsaXplZCA9IGZhbHNlCistICAg ICAgICBlbmQKKy0gICAgICB9CistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEdldHMgdGhl IElQIGFkZHJlc3Mgb2YgK25hbWUrIGZyb20gdGhlIEROUyByZXNvbHZlci4KKy0gICAgIworLSAg ICAjICtuYW1lKyBjYW4gYmUgYSBHZW06OlJlc29sdjo6RE5TOjpOYW1lIG9yIGEgU3RyaW5nLiAg UmV0cmlldmVkIGFkZHJlc3Mgd2lsbAorLSAgICAjIGJlIGEgR2VtOjpSZXNvbHY6OklQdjQgb3Ig R2VtOjpSZXNvbHY6OklQdjYKKy0KKy0gICAgZGVmIGdldGFkZHJlc3MobmFtZSkKKy0gICAgICBl YWNoX2FkZHJlc3MobmFtZSkge3xhZGRyZXNzfCByZXR1cm4gYWRkcmVzc30KKy0gICAgICByYWlz ZSBSZXNvbHZFcnJvci5uZXcoIkROUyByZXN1bHQgaGFzIG5vIGluZm9ybWF0aW9uIGZvciAje25h bWV9IikKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgR2V0cyBhbGwgSVAgYWRkcmVzc2Vz IGZvciArbmFtZSsgZnJvbSB0aGUgRE5TIHJlc29sdmVyLgorLSAgICAjCistICAgICMgK25hbWUr IGNhbiBiZSBhIEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUgb3IgYSBTdHJpbmcuICBSZXRyaWV2ZWQg YWRkcmVzc2VzIHdpbGwKKy0gICAgIyBiZSBhIEdlbTo6UmVzb2x2OjpJUHY0IG9yIEdlbTo6UmVz b2x2OjpJUHY2CistCistICAgIGRlZiBnZXRhZGRyZXNzZXMobmFtZSkKKy0gICAgICByZXQgPSBb XQorLSAgICAgIGVhY2hfYWRkcmVzcyhuYW1lKSB7fGFkZHJlc3N8IHJldCA8PCBhZGRyZXNzfQor LSAgICAgIHJldHVybiByZXQKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgSXRlcmF0ZXMg b3ZlciBhbGwgSVAgYWRkcmVzc2VzIGZvciArbmFtZSsgcmV0cmlldmVkIGZyb20gdGhlIEROUwor LSAgICAjIHJlc29sdmVyLgorLSAgICAjCistICAgICMgK25hbWUrIGNhbiBiZSBhIEdlbTo6UmVz b2x2OjpETlM6Ok5hbWUgb3IgYSBTdHJpbmcuICBSZXRyaWV2ZWQgYWRkcmVzc2VzIHdpbGwKKy0g ICAgIyBiZSBhIEdlbTo6UmVzb2x2OjpJUHY0IG9yIEdlbTo6UmVzb2x2OjpJUHY2CistCistICAg IGRlZiBlYWNoX2FkZHJlc3MobmFtZSkKKy0gICAgICBpZiB1c2VfaXB2Nj8KKy0gICAgICAgIGVh Y2hfcmVzb3VyY2UobmFtZSwgUmVzb3VyY2U6OklOOjpBQUFBKSB7fHJlc291cmNlfCB5aWVsZCBy ZXNvdXJjZS5hZGRyZXNzfQorLSAgICAgIGVuZAorLSAgICAgIGVhY2hfcmVzb3VyY2UobmFtZSwg UmVzb3VyY2U6OklOOjpBKSB7fHJlc291cmNlfCB5aWVsZCByZXNvdXJjZS5hZGRyZXNzfQorLSAg ICBlbmQKKy0KKy0gICAgZGVmIHVzZV9pcHY2PyAjIDpub2RvYzoKKy0gICAgICBAY29uZmlnLmxh enlfaW5pdGlhbGl6ZSB1bmxlc3MgQGNvbmZpZy5pbnN0YW5jZV92YXJpYWJsZV9nZXQoOkBpbml0 aWFsaXplZCkKKy0KKy0gICAgICB1c2VfaXB2NiA9IEBjb25maWcudXNlX2lwdjY/CistICAgICAg dW5sZXNzIHVzZV9pcHY2Lm5pbD8KKy0gICAgICAgIHJldHVybiB1c2VfaXB2NgorLSAgICAgIGVu ZAorLQorLSAgICAgIGJlZ2luCistICAgICAgICBsaXN0ID0gU29ja2V0LmlwX2FkZHJlc3NfbGlz dAorLSAgICAgIHJlc2N1ZSBOb3RJbXBsZW1lbnRlZEVycm9yCistICAgICAgICByZXR1cm4gdHJ1 ZQorLSAgICAgIGVuZAorLSAgICAgIGxpc3QuYW55PyB7fGF8IGEuaXB2Nj8gJiYgIWEuaXB2Nl9s b29wYmFjaz8gJiYgIWEuaXB2Nl9saW5rbG9jYWw/IH0KKy0gICAgZW5kCistICAgIHByaXZhdGUg OnVzZV9pcHY2PworLQorLSAgICAjIworLSAgICAjIEdldHMgdGhlIGhvc3RuYW1lIGZvciArYWRk cmVzcysgZnJvbSB0aGUgRE5TIHJlc29sdmVyLgorLSAgICAjCistICAgICMgK2FkZHJlc3MrIG11 c3QgYmUgYSBHZW06OlJlc29sdjo6SVB2NCwgR2VtOjpSZXNvbHY6OklQdjYgb3IgYSBTdHJpbmcu ICBSZXRyaWV2ZWQKKy0gICAgIyBuYW1lIHdpbGwgYmUgYSBHZW06OlJlc29sdjo6RE5TOjpOYW1l LgorLQorLSAgICBkZWYgZ2V0bmFtZShhZGRyZXNzKQorLSAgICAgIGVhY2hfbmFtZShhZGRyZXNz KSB7fG5hbWV8IHJldHVybiBuYW1lfQorLSAgICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldygiRE5T IHJlc3VsdCBoYXMgbm8gaW5mb3JtYXRpb24gZm9yICN7YWRkcmVzc30iKQorLSAgICBlbmQKKy0K Ky0gICAgIyMKKy0gICAgIyBHZXRzIGFsbCBob3N0bmFtZXMgZm9yICthZGRyZXNzKyBmcm9tIHRo ZSBETlMgcmVzb2x2ZXIuCistICAgICMKKy0gICAgIyArYWRkcmVzcysgbXVzdCBiZSBhIEdlbTo6 UmVzb2x2OjpJUHY0LCBHZW06OlJlc29sdjo6SVB2NiBvciBhIFN0cmluZy4gIFJldHJpZXZlZAor LSAgICAjIG5hbWVzIHdpbGwgYmUgR2VtOjpSZXNvbHY6OkROUzo6TmFtZSBpbnN0YW5jZXMuCist CistICAgIGRlZiBnZXRuYW1lcyhhZGRyZXNzKQorLSAgICAgIHJldCA9IFtdCistICAgICAgZWFj aF9uYW1lKGFkZHJlc3MpIHt8bmFtZXwgcmV0IDw8IG5hbWV9CistICAgICAgcmV0dXJuIHJldAor LSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBJdGVyYXRlcyBvdmVyIGFsbCBob3N0bmFtZXMg Zm9yICthZGRyZXNzKyByZXRyaWV2ZWQgZnJvbSB0aGUgRE5TCistICAgICMgcmVzb2x2ZXIuCist ICAgICMKKy0gICAgIyArYWRkcmVzcysgbXVzdCBiZSBhIEdlbTo6UmVzb2x2OjpJUHY0LCBHZW06 OlJlc29sdjo6SVB2NiBvciBhIFN0cmluZy4gIFJldHJpZXZlZAorLSAgICAjIG5hbWVzIHdpbGwg YmUgR2VtOjpSZXNvbHY6OkROUzo6TmFtZSBpbnN0YW5jZXMuCistCistICAgIGRlZiBlYWNoX25h bWUoYWRkcmVzcykKKy0gICAgICBjYXNlIGFkZHJlc3MKKy0gICAgICB3aGVuIE5hbWUKKy0gICAg ICAgIHB0ciA9IGFkZHJlc3MKKy0gICAgICB3aGVuIElQdjQsIElQdjYKKy0gICAgICAgIHB0ciA9 IGFkZHJlc3MudG9fbmFtZQorLSAgICAgIHdoZW4gSVB2NDo6UmVnZXgKKy0gICAgICAgIHB0ciA9 IElQdjQuY3JlYXRlKGFkZHJlc3MpLnRvX25hbWUKKy0gICAgICB3aGVuIElQdjY6OlJlZ2V4Cist ICAgICAgICBwdHIgPSBJUHY2LmNyZWF0ZShhZGRyZXNzKS50b19uYW1lCistICAgICAgZWxzZQor LSAgICAgICAgcmFpc2UgUmVzb2x2RXJyb3IubmV3KCJjYW5ub3QgaW50ZXJwcmV0IGFzIGFkZHJl c3M6ICN7YWRkcmVzc30iKQorLSAgICAgIGVuZAorLSAgICAgIGVhY2hfcmVzb3VyY2UocHRyLCBS ZXNvdXJjZTo6SU46OlBUUikge3xyZXNvdXJjZXwgeWllbGQgcmVzb3VyY2UubmFtZX0KKy0gICAg ZW5kCistCistICAgICMjCistICAgICMgTG9vayB1cCB0aGUgK3R5cGVjbGFzcysgRE5TIHJlc291 cmNlIG9mICtuYW1lKy4KKy0gICAgIworLSAgICAjICtuYW1lKyBtdXN0IGJlIGEgR2VtOjpSZXNv bHY6OkROUzo6TmFtZSBvciBhIFN0cmluZy4KKy0gICAgIworLSAgICAjICt0eXBlY2xhc3MrIHNo b3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy0gICAgIworLSAgICAjICogR2VtOjpSZXNv bHY6OkROUzo6UmVzb3VyY2U6OklOOjpBCistICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNv dXJjZTo6SU46OkFBQUEKKy0gICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6 QU5ZCistICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkNOQU1FCistICAg ICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkhJTkZPCistICAgICMgKiBHZW06 OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46Ok1JTkZPCistICAgICMgKiBHZW06OlJlc29sdjo6 RE5TOjpSZXNvdXJjZTo6SU46Ok1YCistICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJj ZTo6SU46Ok5TCistICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OlBUUgor LSAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpTT0EKKy0gICAgIyAqIEdl bTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6VFhUCistICAgICMgKiBHZW06OlJlc29sdjo6 RE5TOjpSZXNvdXJjZTo6SU46OldLUworLSAgICAjCistICAgICMgUmV0dXJuZWQgcmVzb3VyY2Ug aXMgcmVwcmVzZW50ZWQgYXMgYSBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZSBpbnN0YW5jZSwK Ky0gICAgIyBpLmUuIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QS4KKy0KKy0gICAg ZGVmIGdldHJlc291cmNlKG5hbWUsIHR5cGVjbGFzcykKKy0gICAgICBlYWNoX3Jlc291cmNlKG5h bWUsIHR5cGVjbGFzcykge3xyZXNvdXJjZXwgcmV0dXJuIHJlc291cmNlfQorLSAgICAgIHJhaXNl IFJlc29sdkVycm9yLm5ldygiRE5TIHJlc3VsdCBoYXMgbm8gaW5mb3JtYXRpb24gZm9yICN7bmFt ZX0iKQorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBMb29rcyB1cCBhbGwgK3R5cGVjbGFz cysgRE5TIHJlc291cmNlcyBmb3IgK25hbWUrLiAgU2VlICNnZXRyZXNvdXJjZSBmb3IKKy0gICAg IyBhcmd1bWVudCBkZXRhaWxzLgorLQorLSAgICBkZWYgZ2V0cmVzb3VyY2VzKG5hbWUsIHR5cGVj bGFzcykKKy0gICAgICByZXQgPSBbXQorLSAgICAgIGVhY2hfcmVzb3VyY2UobmFtZSwgdHlwZWNs YXNzKSB7fHJlc291cmNlfCByZXQgPDwgcmVzb3VyY2V9CistICAgICAgcmV0dXJuIHJldAorLSAg ICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBJdGVyYXRlcyBvdmVyIGFsbCArdHlwZWNsYXNzKyBE TlMgcmVzb3VyY2VzIGZvciArbmFtZSsuICBTZWUKKy0gICAgIyAjZ2V0cmVzb3VyY2UgZm9yIGFy Z3VtZW50IGRldGFpbHMuCistCistICAgIGRlZiBlYWNoX3Jlc291cmNlKG5hbWUsIHR5cGVjbGFz cywgJnByb2MpCistICAgICAgZmV0Y2hfcmVzb3VyY2UobmFtZSwgdHlwZWNsYXNzKSB7fHJlcGx5 LCByZXBseV9uYW1lfAorLSAgICAgICAgZXh0cmFjdF9yZXNvdXJjZXMocmVwbHksIHJlcGx5X25h bWUsIHR5cGVjbGFzcywgJnByb2MpCistICAgICAgfQorLSAgICBlbmQKKy0KKy0gICAgIyA6c3Rv cGRvYzoKKy0KKy0gICAgZGVmIGZldGNoX3Jlc291cmNlKG5hbWUsIHR5cGVjbGFzcykKKy0gICAg ICBsYXp5X2luaXRpYWxpemUKKy0gICAgICB0cnVuY2F0ZWQgPSB7fQorLSAgICAgIHJlcXVlc3Rl cnMgPSB7fQorLSAgICAgIHVkcF9yZXF1ZXN0ZXIgPSBiZWdpbgorLSAgICAgICAgbWFrZV91ZHBf cmVxdWVzdGVyCistICAgICAgcmVzY3VlIEVycm5vOjpFQUNDRVMKKy0gICAgICAgICMgZmFsbCBi YWNrIHRvIFRDUAorLSAgICAgIGVuZAorLSAgICAgIHNlbmRlcnMgPSB7fQorLQorLSAgICAgIGJl Z2luCistICAgICAgICBAY29uZmlnLnJlc29sdihuYW1lKSBkbyB8Y2FuZGlkYXRlLCB0b3V0LCBu YW1lc2VydmVyLCBwb3J0fAorLSAgICAgICAgICBtc2cgPSBNZXNzYWdlLm5ldworLSAgICAgICAg ICBtc2cucmQgPSAxCistICAgICAgICAgIG1zZy5hZGRfcXVlc3Rpb24oY2FuZGlkYXRlLCB0eXBl Y2xhc3MpCistCistICAgICAgICAgIHJlcXVlc3RlciA9IHJlcXVlc3RlcnMuZmV0Y2goW25hbWVz ZXJ2ZXIsIHBvcnRdKSBkbworLSAgICAgICAgICAgIGlmICF0cnVuY2F0ZWRbY2FuZGlkYXRlXSAm JiB1ZHBfcmVxdWVzdGVyCistICAgICAgICAgICAgICB1ZHBfcmVxdWVzdGVyCistICAgICAgICAg ICAgZWxzZQorLSAgICAgICAgICAgICAgcmVxdWVzdGVyc1tbbmFtZXNlcnZlciwgcG9ydF1dID0g bWFrZV90Y3BfcmVxdWVzdGVyKG5hbWVzZXJ2ZXIsIHBvcnQpCistICAgICAgICAgICAgZW5kCist ICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICB1bmxlc3Mgc2VuZGVyID0gc2VuZGVyc1tbY2Fu ZGlkYXRlLCByZXF1ZXN0ZXIsIG5hbWVzZXJ2ZXIsIHBvcnRdXQorLSAgICAgICAgICAgIHNlbmRl ciA9IHJlcXVlc3Rlci5zZW5kZXIobXNnLCBjYW5kaWRhdGUsIG5hbWVzZXJ2ZXIsIHBvcnQpCist ICAgICAgICAgICAgbmV4dCBpZiAhc2VuZGVyCistICAgICAgICAgICAgc2VuZGVyc1tbY2FuZGlk YXRlLCByZXF1ZXN0ZXIsIG5hbWVzZXJ2ZXIsIHBvcnRdXSA9IHNlbmRlcgorLSAgICAgICAgICBl bmQKKy0gICAgICAgICAgcmVwbHksIHJlcGx5X25hbWUgPSByZXF1ZXN0ZXIucmVxdWVzdChzZW5k ZXIsIHRvdXQpCistICAgICAgICAgIGNhc2UgcmVwbHkucmNvZGUKKy0gICAgICAgICAgd2hlbiBS Q29kZTo6Tm9FcnJvcgorLSAgICAgICAgICAgIGlmIHJlcGx5LnRjID09IDEgYW5kIG5vdCBSZXF1 ZXN0ZXI6OlRDUCA9PT0gcmVxdWVzdGVyCistICAgICAgICAgICAgICAjIFJldHJ5IHZpYSBUQ1A6 CistICAgICAgICAgICAgICB0cnVuY2F0ZWRbY2FuZGlkYXRlXSA9IHRydWUKKy0gICAgICAgICAg ICAgIHJlZG8KKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICB5aWVsZChyZXBseSwg cmVwbHlfbmFtZSkKKy0gICAgICAgICAgICBlbmQKKy0gICAgICAgICAgICByZXR1cm4KKy0gICAg ICAgICAgd2hlbiBSQ29kZTo6TlhEb21haW4KKy0gICAgICAgICAgICByYWlzZSBDb25maWc6Ok5Y RG9tYWluLm5ldyhyZXBseV9uYW1lLnRvX3MpCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAg ICByYWlzZSBDb25maWc6Ok90aGVyUmVzb2x2RXJyb3IubmV3KHJlcGx5X25hbWUudG9fcykKKy0g ICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0gICAgICBlbnN1cmUKKy0gICAgICAgIHVkcF9y ZXF1ZXN0ZXImLmNsb3NlCistICAgICAgICByZXF1ZXN0ZXJzLmVhY2hfdmFsdWUgeyB8cmVxdWVz dGVyfCByZXF1ZXN0ZXImLmNsb3NlIH0KKy0gICAgICBlbmQKKy0gICAgZW5kCistCistICAgIGRl ZiBtYWtlX3VkcF9yZXF1ZXN0ZXIgIyA6bm9kb2M6CistICAgICAgbmFtZXNlcnZlcl9wb3J0ID0g QGNvbmZpZy5uYW1lc2VydmVyX3BvcnQKKy0gICAgICBpZiBuYW1lc2VydmVyX3BvcnQubGVuZ3Ro ID09IDEKKy0gICAgICAgIFJlcXVlc3Rlcjo6Q29ubmVjdGVkVURQLm5ldygqbmFtZXNlcnZlcl9w b3J0WzBdKQorLSAgICAgIGVsc2UKKy0gICAgICAgIFJlcXVlc3Rlcjo6VW5jb25uZWN0ZWRVRFAu bmV3KCpuYW1lc2VydmVyX3BvcnQpCistICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICBkZWYg bWFrZV90Y3BfcmVxdWVzdGVyKGhvc3QsIHBvcnQpICMgOm5vZG9jOgorLSAgICAgIHJldHVybiBS ZXF1ZXN0ZXI6OlRDUC5uZXcoaG9zdCwgcG9ydCkKKy0gICAgcmVzY3VlIEVycm5vOjpFQ09OTlJF RlVTRUQKKy0gICAgICAjIFRyZWF0IGEgcmVmdXNlZCBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0IHRv IGEgbmFtZXNlcnZlciBsaWtlIGEgdGltZW91dCwKKy0gICAgICAjIGFzIEdlbTo6UmVzb2x2OjpE TlM6OkNvbmZpZyNyZXNvbHYgY29uc2lkZXJzIFJlc29sdlRpbWVvdXQgZXhjZXB0aW9ucyBhcyBh CistICAgICAgIyBoaW50IHRvIHRyeSB0aGUgbmV4dCBuYW1lc2VydmVyOgorLSAgICAgIHJhaXNl IFJlc29sdlRpbWVvdXQKKy0gICAgZW5kCistCistICAgIGRlZiBleHRyYWN0X3Jlc291cmNlcyht c2csIG5hbWUsIHR5cGVjbGFzcykgIyA6bm9kb2M6CistICAgICAgaWYgdHlwZWNsYXNzIDwgUmVz b3VyY2U6OkFOWQorLSAgICAgICAgbjAgPSBOYW1lLmNyZWF0ZShuYW1lKQorLSAgICAgICAgbXNn LmVhY2hfcmVzb3VyY2Uge3xuLCB0dGwsIGRhdGF8CistICAgICAgICAgIHlpZWxkIGRhdGEgaWYg bjAgPT0gbgorLSAgICAgICAgfQorLSAgICAgIGVuZAorLSAgICAgIHlpZWxkZWQgPSBmYWxzZQor LSAgICAgIG4wID0gTmFtZS5jcmVhdGUobmFtZSkKKy0gICAgICBtc2cuZWFjaF9yZXNvdXJjZSB7 fG4sIHR0bCwgZGF0YXwKKy0gICAgICAgIGlmIG4wID09IG4KKy0gICAgICAgICAgY2FzZSBkYXRh CistICAgICAgICAgIHdoZW4gdHlwZWNsYXNzCistICAgICAgICAgICAgeWllbGQgZGF0YQorLSAg ICAgICAgICAgIHlpZWxkZWQgPSB0cnVlCistICAgICAgICAgIHdoZW4gUmVzb3VyY2U6OkNOQU1F CistICAgICAgICAgICAgbjAgPSBkYXRhLm5hbWUKKy0gICAgICAgICAgZW5kCistICAgICAgICBl bmQKKy0gICAgICB9CistICAgICAgcmV0dXJuIGlmIHlpZWxkZWQKKy0gICAgICBtc2cuZWFjaF9y ZXNvdXJjZSB7fG4sIHR0bCwgZGF0YXwKKy0gICAgICAgIGlmIG4wID09IG4KKy0gICAgICAgICAg Y2FzZSBkYXRhCistICAgICAgICAgIHdoZW4gdHlwZWNsYXNzCistICAgICAgICAgICAgeWllbGQg ZGF0YQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLSAgICAgIH0KKy0gICAgZW5kCist CistICAgIGRlZiBzZWxmLnJhbmRvbShhcmcpICMgOm5vZG9jOgorLSAgICAgIGJlZ2luCistICAg ICAgICBHZW06OlNlY3VyZVJhbmRvbS5yYW5kb21fbnVtYmVyKGFyZykKKy0gICAgICByZXNjdWUg Tm90SW1wbGVtZW50ZWRFcnJvcgorLSAgICAgICAgcmFuZChhcmcpCistICAgICAgZW5kCistICAg IGVuZAorLQorLSAgICBSZXF1ZXN0SUQgPSB7fSAjIDpub2RvYzoKKy0gICAgUmVxdWVzdElETXV0 ZXggPSBUaHJlYWQ6Ok11dGV4Lm5ldyAjIDpub2RvYzoKKy0KKy0gICAgZGVmIHNlbGYuYWxsb2Nh dGVfcmVxdWVzdF9pZChob3N0LCBwb3J0KSAjIDpub2RvYzoKKy0gICAgICBpZCA9IG5pbAorLSAg ICAgIFJlcXVlc3RJRE11dGV4LnN5bmNocm9uaXplIHsKKy0gICAgICAgIGggPSAoUmVxdWVzdElE W1tob3N0LCBwb3J0XV0gfHw9IHt9KQorLSAgICAgICAgYmVnaW4KKy0gICAgICAgICAgaWQgPSBy YW5kb20oMHgwMDAwLi4weGZmZmYpCistICAgICAgICBlbmQgd2hpbGUgaFtpZF0KKy0gICAgICAg IGhbaWRdID0gdHJ1ZQorLSAgICAgIH0KKy0gICAgICBpZAorLSAgICBlbmQKKy0KKy0gICAgZGVm IHNlbGYuZnJlZV9yZXF1ZXN0X2lkKGhvc3QsIHBvcnQsIGlkKSAjIDpub2RvYzoKKy0gICAgICBS ZXF1ZXN0SURNdXRleC5zeW5jaHJvbml6ZSB7CistICAgICAgICBrZXkgPSBbaG9zdCwgcG9ydF0K Ky0gICAgICAgIGlmIGggPSBSZXF1ZXN0SURba2V5XQorLSAgICAgICAgICBoLmRlbGV0ZSBpZAor LSAgICAgICAgICBpZiBoLmVtcHR5PworLSAgICAgICAgICAgIFJlcXVlc3RJRC5kZWxldGUga2V5 CistICAgICAgICAgIGVuZAorLSAgICAgICAgZW5kCistICAgICAgfQorLSAgICBlbmQKKy0KKy0g ICAgY2FzZSBSVUJZX1BMQVRGT1JNCistICAgIHdoZW4gKlsKKy0gICAgICAjIGh0dHBzOi8vd3d3 LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2MDU2LnR4dAorLSAgICAgICMgQXBwZW5kaXggQS4gU3Vy dmV5IG9mIHRoZSBBbGdvcml0aG1zIGluIFVzZSBieSBTb21lIFBvcHVsYXIgSW1wbGVtZW50YXRp b25zCistICAgICAgL2ZyZWVic2QvLCAvbGludXgvLCAvbmV0YnNkLywgL29wZW5ic2QvLCAvc29s YXJpcy8sCistICAgICAgL2Rhcndpbi8sICMgdGhlIHNhbWUgYXMgRnJlZUJTRAorLSAgICBdIHRo ZW4KKy0gICAgICBkZWYgc2VsZi5iaW5kX3JhbmRvbV9wb3J0KHVkcHNvY2ssIGJpbmRfaG9zdD0i MC4wLjAuMCIpICMgOm5vZG9jOgorLSAgICAgICAgdWRwc29jay5iaW5kKGJpbmRfaG9zdCwgMCkK Ky0gICAgICBlbmQKKy0gICAgZWxzZQorLSAgICAgICMgU2VxdWVudGlhbCBwb3J0IGFzc2lnbm1l bnQKKy0gICAgICBkZWYgc2VsZi5iaW5kX3JhbmRvbV9wb3J0KHVkcHNvY2ssIGJpbmRfaG9zdD0i MC4wLjAuMCIpICMgOm5vZG9jOgorLSAgICAgICAgIyBFcGhlbWVyYWwgcG9ydCBudW1iZXIgcmFu Z2UgcmVjb21tZW5kZWQgYnkgUkZDIDYwNTYKKy0gICAgICAgIHBvcnQgPSByYW5kb20oMTAyNC4u NjU1MzUpCistICAgICAgICB1ZHBzb2NrLmJpbmQoYmluZF9ob3N0LCBwb3J0KQorLSAgICAgIHJl c2N1ZSBFcnJubzo6RUFERFJJTlVTRSwgIyBQT1NJWAorLSAgICAgICAgICAgICBFcnJubzo6RUFD Q0VTLCAjIFN1bk9TOiBTZWUgUFJJVl9TWVNfTkZTIGluIHByaXZpbGVnZXMoNSkKKy0gICAgICAg ICAgICAgRXJybm86OkVQRVJNICMgRnJlZUJTRDogc2VjdXJpdHkubWFjLnBvcnRhY2wucG9ydF9o aWdoIGlzIGNvbmZpZ3VyYWJsZS4gIFNlZSBtYWNfcG9ydGFjbCg0KS4KKy0gICAgICAgIHJldHJ5 CistICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICBjbGFzcyBSZXF1ZXN0ZXIgIyA6bm9kb2M6 CistICAgICAgZGVmIGluaXRpYWxpemUKKy0gICAgICAgIEBzZW5kZXJzID0ge30KKy0gICAgICAg IEBzb2NrcyA9IG5pbAorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiByZXF1ZXN0KHNlbmRlciwg dG91dCkKKy0gICAgICAgIHN0YXJ0ID0gUHJvY2Vzcy5jbG9ja19nZXR0aW1lKFByb2Nlc3M6OkNM T0NLX01PTk9UT05JQykKKy0gICAgICAgIHRpbWVsaW1pdCA9IHN0YXJ0ICsgdG91dAorLSAgICAg ICAgYmVnaW4KKy0gICAgICAgICAgc2VuZGVyLnNlbmQKKy0gICAgICAgIHJlc2N1ZSBFcnJubzo6 RUhPU1RVTlJFQUNILCAjIG11bHRpLWhvbWVkIElQdjYgbWF5IGdlbmVyYXRlIHRoaXMKKy0gICAg ICAgICAgICAgICBFcnJubzo6RU5FVFVOUkVBQ0gKKy0gICAgICAgICAgcmFpc2UgUmVzb2x2VGlt ZW91dAorLSAgICAgICAgZW5kCistICAgICAgICB3aGlsZSB0cnVlCistICAgICAgICAgIGJlZm9y ZV9zZWxlY3QgPSBQcm9jZXNzLmNsb2NrX2dldHRpbWUoUHJvY2Vzczo6Q0xPQ0tfTU9OT1RPTklD KQorLSAgICAgICAgICB0aW1lb3V0ID0gdGltZWxpbWl0IC0gYmVmb3JlX3NlbGVjdAorLSAgICAg ICAgICBpZiB0aW1lb3V0IDw9IDAKKy0gICAgICAgICAgICByYWlzZSBSZXNvbHZUaW1lb3V0Cist ICAgICAgICAgIGVuZAorLSAgICAgICAgICBpZiBAc29ja3Muc2l6ZSA9PSAxCistICAgICAgICAg ICAgc2VsZWN0X3Jlc3VsdCA9IEBzb2Nrc1swXS53YWl0X3JlYWRhYmxlKHRpbWVvdXQpID8gWyBA c29ja3MgXSA6IG5pbAorLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgc2VsZWN0X3Jlc3Vs dCA9IElPLnNlbGVjdChAc29ja3MsIG5pbCwgbmlsLCB0aW1lb3V0KQorLSAgICAgICAgICBlbmQK Ky0gICAgICAgICAgaWYgIXNlbGVjdF9yZXN1bHQKKy0gICAgICAgICAgICBhZnRlcl9zZWxlY3Qg PSBQcm9jZXNzLmNsb2NrX2dldHRpbWUoUHJvY2Vzczo6Q0xPQ0tfTU9OT1RPTklDKQorLSAgICAg ICAgICAgIG5leHQgaWYgYWZ0ZXJfc2VsZWN0IDwgdGltZWxpbWl0CistICAgICAgICAgICAgcmFp c2UgUmVzb2x2VGltZW91dAorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgYmVnaW4KKy0gICAg ICAgICAgICByZXBseSwgZnJvbSA9IHJlY3ZfcmVwbHkoc2VsZWN0X3Jlc3VsdFswXSkKKy0gICAg ICAgICAgcmVzY3VlIEVycm5vOjpFQ09OTlJFRlVTRUQsICMgR05VL0xpbnV4LCBGcmVlQlNECist ICAgICAgICAgICAgICAgICBFcnJubzo6RUNPTk5SRVNFVCAjIFdpbmRvd3MKKy0gICAgICAgICAg ICAjIE5vIG5hbWUgc2VydmVyIHJ1bm5pbmcgb24gdGhlIHNlcnZlcj8KKy0gICAgICAgICAgICAj IERvbid0IHdhaXQgYW55bW9yZS4KKy0gICAgICAgICAgICByYWlzZSBSZXNvbHZUaW1lb3V0Cist ICAgICAgICAgIGVuZAorLSAgICAgICAgICBiZWdpbgorLSAgICAgICAgICAgIG1zZyA9IE1lc3Nh Z2UuZGVjb2RlKHJlcGx5KQorLSAgICAgICAgICByZXNjdWUgRGVjb2RlRXJyb3IKKy0gICAgICAg ICAgICBuZXh0ICMgYnJva2VuIEROUyBtZXNzYWdlIGlnbm9yZWQKKy0gICAgICAgICAgZW5kCist ICAgICAgICAgIGlmIHNlbmRlciA9PSBzZW5kZXJfZm9yKGZyb20sIG1zZykKKy0gICAgICAgICAg ICBicmVhaworLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgIyB1bmV4cGVjdGVkIEROUyBt ZXNzYWdlIGlnbm9yZWQKKy0gICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0gICAgICAgIHJl dHVybiBtc2csIHNlbmRlci5kYXRhCistICAgICAgZW5kCistCistICAgICAgZGVmIHNlbmRlcl9m b3IoYWRkciwgbXNnKQorLSAgICAgICAgQHNlbmRlcnNbW2FkZHIsbXNnLmlkXV0KKy0gICAgICBl bmQKKy0KKy0gICAgICBkZWYgY2xvc2UKKy0gICAgICAgIHNvY2tzID0gQHNvY2tzCistICAgICAg ICBAc29ja3MgPSBuaWwKKy0gICAgICAgIHNvY2tzJi5lYWNoKCY6Y2xvc2UpCistICAgICAgZW5k CistCistICAgICAgY2xhc3MgU2VuZGVyICMgOm5vZG9jOgorLSAgICAgICAgZGVmIGluaXRpYWxp emUobXNnLCBkYXRhLCBzb2NrKQorLSAgICAgICAgICBAbXNnID0gbXNnCistICAgICAgICAgIEBk YXRhID0gZGF0YQorLSAgICAgICAgICBAc29jayA9IHNvY2sKKy0gICAgICAgIGVuZAorLSAgICAg IGVuZAorLQorLSAgICAgIGNsYXNzIFVuY29ubmVjdGVkVURQIDwgUmVxdWVzdGVyICMgOm5vZG9j OgorLSAgICAgICAgZGVmIGluaXRpYWxpemUoKm5hbWVzZXJ2ZXJfcG9ydCkKKy0gICAgICAgICAg c3VwZXIoKQorLSAgICAgICAgICBAbmFtZXNlcnZlcl9wb3J0ID0gbmFtZXNlcnZlcl9wb3J0Cist ICAgICAgICAgIEBpbml0aWFsaXplZCA9IGZhbHNlCistICAgICAgICAgIEBtdXRleCA9IFRocmVh ZDo6TXV0ZXgubmV3CistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBsYXp5X2luaXRpYWxp emUKKy0gICAgICAgICAgQG11dGV4LnN5bmNocm9uaXplIHsKKy0gICAgICAgICAgICBuZXh0IGlm IEBpbml0aWFsaXplZAorLSAgICAgICAgICAgIEBpbml0aWFsaXplZCA9IHRydWUKKy0gICAgICAg ICAgICBAc29ja3NfaGFzaCA9IHt9CistICAgICAgICAgICAgQHNvY2tzID0gW10KKy0gICAgICAg ICAgICBAbmFtZXNlcnZlcl9wb3J0LmVhY2gge3xob3N0LCBwb3J0fAorLSAgICAgICAgICAgICAg aWYgaG9zdC5pbmRleCgnOicpCistICAgICAgICAgICAgICAgIGJpbmRfaG9zdCA9ICI6OiIKKy0g ICAgICAgICAgICAgICAgYWYgPSBTb2NrZXQ6OkFGX0lORVQ2CistICAgICAgICAgICAgICBlbHNl CistICAgICAgICAgICAgICAgIGJpbmRfaG9zdCA9ICIwLjAuMC4wIgorLSAgICAgICAgICAgICAg ICBhZiA9IFNvY2tldDo6QUZfSU5FVAorLSAgICAgICAgICAgICAgZW5kCistICAgICAgICAgICAg ICBuZXh0IGlmIEBzb2Nrc19oYXNoW2JpbmRfaG9zdF0KKy0gICAgICAgICAgICAgIGJlZ2luCist ICAgICAgICAgICAgICAgIHNvY2sgPSBVRFBTb2NrZXQubmV3KGFmKQorLSAgICAgICAgICAgICAg cmVzY3VlIEVycm5vOjpFQUZOT1NVUFBPUlQsIEVycm5vOjpFUFJPVE9OT1NVUFBPUlQKKy0gICAg ICAgICAgICAgICAgbmV4dCAjIFRoZSBrZXJuZWwgZG9lc24ndCBzdXBwb3J0IHRoZSBhZGRyZXNz IGZhbWlseS4KKy0gICAgICAgICAgICAgIGVuZAorLSAgICAgICAgICAgICAgQHNvY2tzIDw8IHNv Y2sKKy0gICAgICAgICAgICAgIEBzb2Nrc19oYXNoW2JpbmRfaG9zdF0gPSBzb2NrCistICAgICAg ICAgICAgICBzb2NrLmRvX25vdF9yZXZlcnNlX2xvb2t1cCA9IHRydWUKKy0gICAgICAgICAgICAg IEROUy5iaW5kX3JhbmRvbV9wb3J0KHNvY2ssIGJpbmRfaG9zdCkKKy0gICAgICAgICAgICB9Cist ICAgICAgICAgIH0KKy0gICAgICAgICAgc2VsZgorLSAgICAgICAgZW5kCistCistICAgICAgICBk ZWYgcmVjdl9yZXBseShyZWFkYWJsZV9zb2NrcykKKy0gICAgICAgICAgbGF6eV9pbml0aWFsaXpl CistICAgICAgICAgIHJlcGx5LCBmcm9tID0gcmVhZGFibGVfc29ja3NbMF0ucmVjdmZyb20oVURQ U2l6ZSkKKy0gICAgICAgICAgcmV0dXJuIHJlcGx5LCBbZnJvbVszXSxmcm9tWzFdXQorLSAgICAg ICAgZW5kCistCistICAgICAgICBkZWYgc2VuZGVyKG1zZywgZGF0YSwgaG9zdCwgcG9ydD1Qb3J0 KQorLSAgICAgICAgICBob3N0ID0gQWRkcmluZm8uaXAoaG9zdCkuaXBfYWRkcmVzcworLSAgICAg ICAgICBsYXp5X2luaXRpYWxpemUKKy0gICAgICAgICAgc29jayA9IEBzb2Nrc19oYXNoW2hvc3Qu aW5kZXgoJzonKSA/ICI6OiIgOiAiMC4wLjAuMCJdCistICAgICAgICAgIHJldHVybiBuaWwgaWYg IXNvY2sKKy0gICAgICAgICAgc2VydmljZSA9IFtob3N0LCBwb3J0XQorLSAgICAgICAgICBpZCA9 IEROUy5hbGxvY2F0ZV9yZXF1ZXN0X2lkKGhvc3QsIHBvcnQpCistICAgICAgICAgIHJlcXVlc3Qg PSBtc2cuZW5jb2RlCistICAgICAgICAgIHJlcXVlc3RbMCwyXSA9IFtpZF0ucGFjaygnbicpCist ICAgICAgICAgIHJldHVybiBAc2VuZGVyc1tbc2VydmljZSwgaWRdXSA9CistICAgICAgICAgICAg U2VuZGVyLm5ldyhyZXF1ZXN0LCBkYXRhLCBzb2NrLCBob3N0LCBwb3J0KQorLSAgICAgICAgZW5k CistCistICAgICAgICBkZWYgY2xvc2UKKy0gICAgICAgICAgQG11dGV4LnN5bmNocm9uaXplIHsK Ky0gICAgICAgICAgICBpZiBAaW5pdGlhbGl6ZWQKKy0gICAgICAgICAgICAgIHN1cGVyCistICAg ICAgICAgICAgICBAc2VuZGVycy5lYWNoX2tleSB7fHNlcnZpY2UsIGlkfAorLSAgICAgICAgICAg ICAgICBETlMuZnJlZV9yZXF1ZXN0X2lkKHNlcnZpY2VbMF0sIHNlcnZpY2VbMV0sIGlkKQorLSAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgQGluaXRpYWxpemVkID0gZmFsc2UKKy0gICAg ICAgICAgICBlbmQKKy0gICAgICAgICAgfQorLSAgICAgICAgZW5kCistCistICAgICAgICBjbGFz cyBTZW5kZXIgPCBSZXF1ZXN0ZXI6OlNlbmRlciAjIDpub2RvYzoKKy0gICAgICAgICAgZGVmIGlu aXRpYWxpemUobXNnLCBkYXRhLCBzb2NrLCBob3N0LCBwb3J0KQorLSAgICAgICAgICAgIHN1cGVy KG1zZywgZGF0YSwgc29jaykKKy0gICAgICAgICAgICBAaG9zdCA9IGhvc3QKKy0gICAgICAgICAg ICBAcG9ydCA9IHBvcnQKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIGF0dHJfcmVhZGVyIDpk YXRhCistCistICAgICAgICAgIGRlZiBzZW5kCistICAgICAgICAgICAgcmFpc2UgIkBzb2NrIGlz IG5pbC4iIGlmIEBzb2NrLm5pbD8KKy0gICAgICAgICAgICBAc29jay5zZW5kKEBtc2csIDAsIEBo b3N0LCBAcG9ydCkKKy0gICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0K Ky0gICAgICBjbGFzcyBDb25uZWN0ZWRVRFAgPCBSZXF1ZXN0ZXIgIyA6bm9kb2M6CistICAgICAg ICBkZWYgaW5pdGlhbGl6ZShob3N0LCBwb3J0PVBvcnQpCistICAgICAgICAgIHN1cGVyKCkKKy0g ICAgICAgICAgQGhvc3QgPSBob3N0CistICAgICAgICAgIEBwb3J0ID0gcG9ydAorLSAgICAgICAg ICBAbXV0ZXggPSBUaHJlYWQ6Ok11dGV4Lm5ldworLSAgICAgICAgICBAaW5pdGlhbGl6ZWQgPSBm YWxzZQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgbGF6eV9pbml0aWFsaXplCistICAg ICAgICAgIEBtdXRleC5zeW5jaHJvbml6ZSB7CistICAgICAgICAgICAgbmV4dCBpZiBAaW5pdGlh bGl6ZWQKKy0gICAgICAgICAgICBAaW5pdGlhbGl6ZWQgPSB0cnVlCistICAgICAgICAgICAgaXNf aXB2NiA9IEBob3N0LmluZGV4KCc6JykKKy0gICAgICAgICAgICBzb2NrID0gVURQU29ja2V0Lm5l dyhpc19pcHY2ID8gU29ja2V0OjpBRl9JTkVUNiA6IFNvY2tldDo6QUZfSU5FVCkKKy0gICAgICAg ICAgICBAc29ja3MgPSBbc29ja10KKy0gICAgICAgICAgICBzb2NrLmRvX25vdF9yZXZlcnNlX2xv b2t1cCA9IHRydWUKKy0gICAgICAgICAgICBETlMuYmluZF9yYW5kb21fcG9ydChzb2NrLCBpc19p cHY2ID8gIjo6IiA6ICIwLjAuMC4wIikKKy0gICAgICAgICAgICBzb2NrLmNvbm5lY3QoQGhvc3Qs IEBwb3J0KQorLSAgICAgICAgICB9CistICAgICAgICAgIHNlbGYKKy0gICAgICAgIGVuZAorLQor LSAgICAgICAgZGVmIHJlY3ZfcmVwbHkocmVhZGFibGVfc29ja3MpCistICAgICAgICAgIGxhenlf aW5pdGlhbGl6ZQorLSAgICAgICAgICByZXBseSA9IHJlYWRhYmxlX3NvY2tzWzBdLnJlY3YoVURQ U2l6ZSkKKy0gICAgICAgICAgcmV0dXJuIHJlcGx5LCBuaWwKKy0gICAgICAgIGVuZAorLQorLSAg ICAgICAgZGVmIHNlbmRlcihtc2csIGRhdGEsIGhvc3Q9QGhvc3QsIHBvcnQ9QHBvcnQpCistICAg ICAgICAgIGxhenlfaW5pdGlhbGl6ZQorLSAgICAgICAgICB1bmxlc3MgaG9zdCA9PSBAaG9zdCAm JiBwb3J0ID09IEBwb3J0CistICAgICAgICAgICAgcmFpc2UgUmVxdWVzdEVycm9yLm5ldygiaG9z dC9wb3J0IGRvbid0IG1hdGNoOiAje2hvc3R9OiN7cG9ydH0iKQorLSAgICAgICAgICBlbmQKKy0g ICAgICAgICAgaWQgPSBETlMuYWxsb2NhdGVfcmVxdWVzdF9pZChAaG9zdCwgQHBvcnQpCistICAg ICAgICAgIHJlcXVlc3QgPSBtc2cuZW5jb2RlCistICAgICAgICAgIHJlcXVlc3RbMCwyXSA9IFtp ZF0ucGFjaygnbicpCistICAgICAgICAgIHJldHVybiBAc2VuZGVyc1tbbmlsLGlkXV0gPSBTZW5k ZXIubmV3KHJlcXVlc3QsIGRhdGEsIEBzb2Nrc1swXSkKKy0gICAgICAgIGVuZAorLQorLSAgICAg ICAgZGVmIGNsb3NlCistICAgICAgICAgIEBtdXRleC5zeW5jaHJvbml6ZSBkbworLSAgICAgICAg ICAgIGlmIEBpbml0aWFsaXplZAorLSAgICAgICAgICAgICAgc3VwZXIKKy0gICAgICAgICAgICAg IEBzZW5kZXJzLmVhY2hfa2V5IHt8ZnJvbSwgaWR8CistICAgICAgICAgICAgICAgIEROUy5mcmVl X3JlcXVlc3RfaWQoQGhvc3QsIEBwb3J0LCBpZCkKKy0gICAgICAgICAgICAgIH0KKy0gICAgICAg ICAgICAgIEBpbml0aWFsaXplZCA9IGZhbHNlCistICAgICAgICAgICAgZW5kCistICAgICAgICAg IGVuZAorLSAgICAgICAgZW5kCistCistICAgICAgICBjbGFzcyBTZW5kZXIgPCBSZXF1ZXN0ZXI6 OlNlbmRlciAjIDpub2RvYzoKKy0gICAgICAgICAgZGVmIHNlbmQKKy0gICAgICAgICAgICByYWlz ZSAiQHNvY2sgaXMgbmlsLiIgaWYgQHNvY2submlsPworLSAgICAgICAgICAgIEBzb2NrLnNlbmQo QG1zZywgMCkKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIGF0dHJfcmVhZGVyIDpkYXRhCist ICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICBjbGFzcyBNRE5TT25lU2hvdCA8IFVu Y29ubmVjdGVkVURQICMgOm5vZG9jOgorLSAgICAgICAgZGVmIHNlbmRlcihtc2csIGRhdGEsIGhv c3QsIHBvcnQ9UG9ydCkKKy0gICAgICAgICAgbGF6eV9pbml0aWFsaXplCistICAgICAgICAgIGlk ID0gRE5TLmFsbG9jYXRlX3JlcXVlc3RfaWQoaG9zdCwgcG9ydCkKKy0gICAgICAgICAgcmVxdWVz dCA9IG1zZy5lbmNvZGUKKy0gICAgICAgICAgcmVxdWVzdFswLDJdID0gW2lkXS5wYWNrKCduJykK Ky0gICAgICAgICAgc29jayA9IEBzb2Nrc19oYXNoW2hvc3QuaW5kZXgoJzonKSA/ICI6OiIgOiAi MC4wLjAuMCJdCistICAgICAgICAgIHJldHVybiBAc2VuZGVyc1tpZF0gPQorLSAgICAgICAgICAg IFVuY29ubmVjdGVkVURQOjpTZW5kZXIubmV3KHJlcXVlc3QsIGRhdGEsIHNvY2ssIGhvc3QsIHBv cnQpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZW5kZXJfZm9yKGFkZHIsIG1zZykK Ky0gICAgICAgICAgbGF6eV9pbml0aWFsaXplCistICAgICAgICAgIEBzZW5kZXJzW21zZy5pZF0K Ky0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgIGNsYXNzIFRDUCA8IFJlcXVlc3Rl ciAjIDpub2RvYzoKKy0gICAgICAgIGRlZiBpbml0aWFsaXplKGhvc3QsIHBvcnQ9UG9ydCkKKy0g ICAgICAgICAgc3VwZXIoKQorLSAgICAgICAgICBAaG9zdCA9IGhvc3QKKy0gICAgICAgICAgQHBv cnQgPSBwb3J0CistICAgICAgICAgIHNvY2sgPSBUQ1BTb2NrZXQubmV3KEBob3N0LCBAcG9ydCkK Ky0gICAgICAgICAgQHNvY2tzID0gW3NvY2tdCistICAgICAgICAgIEBzZW5kZXJzID0ge30KKy0g ICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHJlY3ZfcmVwbHkocmVhZGFibGVfc29ja3MpCist ICAgICAgICAgIGxlbiA9IHJlYWRhYmxlX3NvY2tzWzBdLnJlYWQoMikudW5wYWNrKCduJylbMF0K Ky0gICAgICAgICAgcmVwbHkgPSBAc29ja3NbMF0ucmVhZChsZW4pCistICAgICAgICAgIHJldHVy biByZXBseSwgbmlsCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZW5kZXIobXNnLCBk YXRhLCBob3N0PUBob3N0LCBwb3J0PUBwb3J0KQorLSAgICAgICAgICB1bmxlc3MgaG9zdCA9PSBA aG9zdCAmJiBwb3J0ID09IEBwb3J0CistICAgICAgICAgICAgcmFpc2UgUmVxdWVzdEVycm9yLm5l dygiaG9zdC9wb3J0IGRvbid0IG1hdGNoOiAje2hvc3R9OiN7cG9ydH0iKQorLSAgICAgICAgICBl bmQKKy0gICAgICAgICAgaWQgPSBETlMuYWxsb2NhdGVfcmVxdWVzdF9pZChAaG9zdCwgQHBvcnQp CistICAgICAgICAgIHJlcXVlc3QgPSBtc2cuZW5jb2RlCistICAgICAgICAgIHJlcXVlc3RbMCwy XSA9IFtyZXF1ZXN0Lmxlbmd0aCwgaWRdLnBhY2soJ25uJykKKy0gICAgICAgICAgcmV0dXJuIEBz ZW5kZXJzW1tuaWwsaWRdXSA9IFNlbmRlci5uZXcocmVxdWVzdCwgZGF0YSwgQHNvY2tzWzBdKQor LSAgICAgICAgZW5kCistCistICAgICAgICBjbGFzcyBTZW5kZXIgPCBSZXF1ZXN0ZXI6OlNlbmRl ciAjIDpub2RvYzoKKy0gICAgICAgICAgZGVmIHNlbmQKKy0gICAgICAgICAgICBAc29jay5wcmlu dChAbXNnKQorLSAgICAgICAgICAgIEBzb2NrLmZsdXNoCistICAgICAgICAgIGVuZAorLSAgICAg ICAgICBhdHRyX3JlYWRlciA6ZGF0YQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgY2xv c2UKKy0gICAgICAgICAgc3VwZXIKKy0gICAgICAgICAgQHNlbmRlcnMuZWFjaF9rZXkge3xmcm9t LGlkfAorLSAgICAgICAgICAgIEROUy5mcmVlX3JlcXVlc3RfaWQoQGhvc3QsIEBwb3J0LCBpZCkK Ky0gICAgICAgICAgfQorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgIyMKKy0g ICAgICAjIEluZGljYXRlcyBhIHByb2JsZW0gd2l0aCB0aGUgRE5TIHJlcXVlc3QuCistCistICAg ICAgY2xhc3MgUmVxdWVzdEVycm9yIDwgU3RhbmRhcmRFcnJvcgorLSAgICAgIGVuZAorLSAgICBl bmQKKy0KKy0gICAgY2xhc3MgQ29uZmlnICMgOm5vZG9jOgorLSAgICAgIGRlZiBpbml0aWFsaXpl KGNvbmZpZ19pbmZvPW5pbCkKKy0gICAgICAgIEBtdXRleCA9IFRocmVhZDo6TXV0ZXgubmV3Cist ICAgICAgICBAY29uZmlnX2luZm8gPSBjb25maWdfaW5mbworLSAgICAgICAgQGluaXRpYWxpemVk ID0gbmlsCistICAgICAgICBAdGltZW91dHMgPSBuaWwKKy0gICAgICBlbmQKKy0KKy0gICAgICBk ZWYgdGltZW91dHM9KHZhbHVlcykKKy0gICAgICAgIGlmIHZhbHVlcworLSAgICAgICAgICB2YWx1 ZXMgPSBBcnJheSh2YWx1ZXMpCistICAgICAgICAgIHZhbHVlcy5lYWNoIGRvIHx0fAorLSAgICAg ICAgICAgIE51bWVyaWMgPT09IHQgb3IgcmFpc2UgQXJndW1lbnRFcnJvciwgIiN7dC5pbnNwZWN0 fSBpcyBub3QgbnVtZXJpYyIKKy0gICAgICAgICAgICB0ID4gMC4wIG9yIHJhaXNlIEFyZ3VtZW50 RXJyb3IsICJ0aW1lb3V0PSN7dH0gbXVzdCBiZSBwb3NpdGl2ZSIKKy0gICAgICAgICAgZW5kCist ICAgICAgICAgIEB0aW1lb3V0cyA9IHZhbHVlcworLSAgICAgICAgZWxzZQorLSAgICAgICAgICBA dGltZW91dHMgPSBuaWwKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBD b25maWcucGFyc2VfcmVzb2x2X2NvbmYoZmlsZW5hbWUpCistICAgICAgICBuYW1lc2VydmVyID0g W10KKy0gICAgICAgIHNlYXJjaCA9IG5pbAorLSAgICAgICAgbmRvdHMgPSAxCistICAgICAgICBG aWxlLm9wZW4oZmlsZW5hbWUsICdyYicpIHt8ZnwKKy0gICAgICAgICAgZi5lYWNoIHt8bGluZXwK Ky0gICAgICAgICAgICBsaW5lLnN1YiEoL1sjO10uKi8sICcnKQorLSAgICAgICAgICAgIGtleXdv cmQsICphcmdzID0gbGluZS5zcGxpdCgvXHMrLykKKy0gICAgICAgICAgICBuZXh0IHVubGVzcyBr ZXl3b3JkCistICAgICAgICAgICAgY2FzZSBrZXl3b3JkCistICAgICAgICAgICAgd2hlbiAnbmFt ZXNlcnZlcicKKy0gICAgICAgICAgICAgIG5hbWVzZXJ2ZXIuY29uY2F0KGFyZ3MuZWFjaCgmOmZy ZWV6ZSkpCistICAgICAgICAgICAgd2hlbiAnZG9tYWluJworLSAgICAgICAgICAgICAgbmV4dCBp ZiBhcmdzLmVtcHR5PworLSAgICAgICAgICAgICAgc2VhcmNoID0gW2FyZ3NbMF0uZnJlZXplXQor LSAgICAgICAgICAgIHdoZW4gJ3NlYXJjaCcKKy0gICAgICAgICAgICAgIG5leHQgaWYgYXJncy5l bXB0eT8KKy0gICAgICAgICAgICAgIHNlYXJjaCA9IGFyZ3MuZWFjaCgmOmZyZWV6ZSkKKy0gICAg ICAgICAgICB3aGVuICdvcHRpb25zJworLSAgICAgICAgICAgICAgYXJncy5lYWNoIHt8YXJnfAor LSAgICAgICAgICAgICAgICBjYXNlIGFyZworLSAgICAgICAgICAgICAgICB3aGVuIC9cQW5kb3Rz OihcZCspXHovCistICAgICAgICAgICAgICAgICAgbmRvdHMgPSAkMS50b19pCistICAgICAgICAg ICAgICAgIGVuZAorLSAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGVuZAorLSAgICAgICAg ICB9CistICAgICAgICB9CistICAgICAgICByZXR1cm4geyA6bmFtZXNlcnZlciA9PiBuYW1lc2Vy dmVyLmZyZWV6ZSwgOnNlYXJjaCA9PiBzZWFyY2guZnJlZXplLCA6bmRvdHMgPT4gbmRvdHMuZnJl ZXplIH0uZnJlZXplCistICAgICAgZW5kCistCistICAgICAgZGVmIENvbmZpZy5kZWZhdWx0X2Nv bmZpZ19oYXNoKGZpbGVuYW1lPSIvZXRjL3Jlc29sdi5jb25mIikKKy0gICAgICAgIGlmIEZpbGUu ZXhpc3Q/IGZpbGVuYW1lCistICAgICAgICAgIENvbmZpZy5wYXJzZV9yZXNvbHZfY29uZihmaWxl bmFtZSkKKy0gICAgICAgIGVsc2lmIGRlZmluZWQ/KFdpbjMyOjpSZXNvbHYpCistICAgICAgICAg IHNlYXJjaCwgbmFtZXNlcnZlciA9IFdpbjMyOjpSZXNvbHYuZ2V0X3Jlc29sdl9pbmZvCistICAg ICAgICAgIGNvbmZpZ19oYXNoID0ge30KKy0gICAgICAgICAgY29uZmlnX2hhc2hbOm5hbWVzZXJ2 ZXJdID0gbmFtZXNlcnZlciBpZiBuYW1lc2VydmVyCistICAgICAgICAgIGNvbmZpZ19oYXNoWzpz ZWFyY2hdID0gW3NlYXJjaF0uZmxhdHRlbiBpZiBzZWFyY2gKKy0gICAgICAgICAgY29uZmlnX2hh c2gKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAge30KKy0gICAgICAgIGVuZAorLSAgICAgIGVu ZAorLQorLSAgICAgIGRlZiBsYXp5X2luaXRpYWxpemUKKy0gICAgICAgIEBtdXRleC5zeW5jaHJv bml6ZSB7CistICAgICAgICAgIHVubGVzcyBAaW5pdGlhbGl6ZWQKKy0gICAgICAgICAgICBAbmFt ZXNlcnZlcl9wb3J0ID0gW10KKy0gICAgICAgICAgICBAdXNlX2lwdjYgPSBuaWwKKy0gICAgICAg ICAgICBAc2VhcmNoID0gbmlsCistICAgICAgICAgICAgQG5kb3RzID0gMQorLSAgICAgICAgICAg IGNhc2UgQGNvbmZpZ19pbmZvCistICAgICAgICAgICAgd2hlbiBuaWwKKy0gICAgICAgICAgICAg IGNvbmZpZ19oYXNoID0gQ29uZmlnLmRlZmF1bHRfY29uZmlnX2hhc2gKKy0gICAgICAgICAgICB3 aGVuIFN0cmluZworLSAgICAgICAgICAgICAgY29uZmlnX2hhc2ggPSBDb25maWcucGFyc2VfcmVz b2x2X2NvbmYoQGNvbmZpZ19pbmZvKQorLSAgICAgICAgICAgIHdoZW4gSGFzaAorLSAgICAgICAg ICAgICAgY29uZmlnX2hhc2ggPSBAY29uZmlnX2luZm8uZHVwCistICAgICAgICAgICAgICBpZiBT dHJpbmcgPT09IGNvbmZpZ19oYXNoWzpuYW1lc2VydmVyXQorLSAgICAgICAgICAgICAgICBjb25m aWdfaGFzaFs6bmFtZXNlcnZlcl0gPSBbY29uZmlnX2hhc2hbOm5hbWVzZXJ2ZXJdXQorLSAgICAg ICAgICAgICAgZW5kCistICAgICAgICAgICAgICBpZiBTdHJpbmcgPT09IGNvbmZpZ19oYXNoWzpz ZWFyY2hdCistICAgICAgICAgICAgICAgIGNvbmZpZ19oYXNoWzpzZWFyY2hdID0gW2NvbmZpZ19o YXNoWzpzZWFyY2hdXQorLSAgICAgICAgICAgICAgZW5kCistICAgICAgICAgICAgZWxzZQorLSAg ICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoImludmFsaWQgcmVzb2x2IGNvbmZp Z3VyYXRpb246ICN7QGNvbmZpZ19pbmZvLmluc3BlY3R9IikKKy0gICAgICAgICAgICBlbmQKKy0g ICAgICAgICAgICBpZiBjb25maWdfaGFzaC5pbmNsdWRlPyA6bmFtZXNlcnZlcgorLSAgICAgICAg ICAgICAgQG5hbWVzZXJ2ZXJfcG9ydCA9IGNvbmZpZ19oYXNoWzpuYW1lc2VydmVyXS5tYXAge3xu c3wgW25zLCBQb3J0XSB9CistICAgICAgICAgICAgZW5kCistICAgICAgICAgICAgaWYgY29uZmln X2hhc2guaW5jbHVkZT8gOm5hbWVzZXJ2ZXJfcG9ydAorLSAgICAgICAgICAgICAgQG5hbWVzZXJ2 ZXJfcG9ydCA9IGNvbmZpZ19oYXNoWzpuYW1lc2VydmVyX3BvcnRdLm1hcCB7fG5zLCBwb3J0fCBb bnMsIChwb3J0IHx8IFBvcnQpXSB9CistICAgICAgICAgICAgZW5kCistICAgICAgICAgICAgaWYg Y29uZmlnX2hhc2guaW5jbHVkZT8gOnVzZV9pcHY2CistICAgICAgICAgICAgICBAdXNlX2lwdjYg PSBjb25maWdfaGFzaFs6dXNlX2lwdjZdCistICAgICAgICAgICAgZW5kCistICAgICAgICAgICAg QHNlYXJjaCA9IGNvbmZpZ19oYXNoWzpzZWFyY2hdIGlmIGNvbmZpZ19oYXNoLmluY2x1ZGU/IDpz ZWFyY2gKKy0gICAgICAgICAgICBAbmRvdHMgPSBjb25maWdfaGFzaFs6bmRvdHNdIGlmIGNvbmZp Z19oYXNoLmluY2x1ZGU/IDpuZG90cworLSAgICAgICAgICAgIEByYWlzZV90aW1lb3V0X2Vycm9y cyA9IGNvbmZpZ19oYXNoWzpyYWlzZV90aW1lb3V0X2Vycm9yc10KKy0KKy0gICAgICAgICAgICBp ZiBAbmFtZXNlcnZlcl9wb3J0LmVtcHR5PworLSAgICAgICAgICAgICAgQG5hbWVzZXJ2ZXJfcG9y dCA8PCBbJzAuMC4wLjAnLCBQb3J0XQorLSAgICAgICAgICAgIGVuZAorLSAgICAgICAgICAgIGlm IEBzZWFyY2gKKy0gICAgICAgICAgICAgIEBzZWFyY2ggPSBAc2VhcmNoLm1hcCB7fGFyZ3wgTGFi ZWwuc3BsaXQoYXJnKSB9CistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgaG9zdG5h bWUgPSBTb2NrZXQuZ2V0aG9zdG5hbWUKKy0gICAgICAgICAgICAgIGlmIC9cLi8gPX4gaG9zdG5h bWUKKy0gICAgICAgICAgICAgICAgQHNlYXJjaCA9IFtMYWJlbC5zcGxpdCgkJyldCistICAgICAg ICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIEBzZWFyY2ggPSBbW11dCistICAgICAgICAg ICAgICBlbmQKKy0gICAgICAgICAgICBlbmQKKy0KKy0gICAgICAgICAgICBpZiAhQG5hbWVzZXJ2 ZXJfcG9ydC5raW5kX29mPyhBcnJheSkgfHwKKy0gICAgICAgICAgICAgICBAbmFtZXNlcnZlcl9w b3J0LmFueT8ge3xuc19wb3J0fAorLSAgICAgICAgICAgICAgICAgICEoQXJyYXkgPT09IG5zX3Bv cnQpIHx8CistICAgICAgICAgICAgICAgICAgbnNfcG9ydC5sZW5ndGggIT0gMgorLSAgICAgICAg ICAgICAgICAgICEoU3RyaW5nID09PSBuc19wb3J0WzBdKSB8fAorLSAgICAgICAgICAgICAgICAg ICEoSW50ZWdlciA9PT0gbnNfcG9ydFsxXSkKKy0gICAgICAgICAgICAgICB9CistICAgICAgICAg ICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygiaW52YWxpZCBuYW1lc2VydmVyIGNvbmZpZzog I3tAbmFtZXNlcnZlcl9wb3J0Lmluc3BlY3R9IikKKy0gICAgICAgICAgICBlbmQKKy0KKy0gICAg ICAgICAgICBpZiAhQHNlYXJjaC5raW5kX29mPyhBcnJheSkgfHwKKy0gICAgICAgICAgICAgICAh QHNlYXJjaC5hbGw/IHt8bHN8IGxzLmFsbD8ge3xsfCBMYWJlbDo6U3RyID09PSBsIH0gfQorLSAg ICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoImludmFsaWQgc2VhcmNoIGNvbmZp ZzogI3tAc2VhcmNoLmluc3BlY3R9IikKKy0gICAgICAgICAgICBlbmQKKy0KKy0gICAgICAgICAg ICBpZiAhQG5kb3RzLmtpbmRfb2Y/KEludGVnZXIpCistICAgICAgICAgICAgICByYWlzZSBBcmd1 bWVudEVycm9yLm5ldygiaW52YWxpZCBuZG90cyBjb25maWc6ICN7QG5kb3RzLmluc3BlY3R9IikK Ky0gICAgICAgICAgICBlbmQKKy0KKy0gICAgICAgICAgICBAaW5pdGlhbGl6ZWQgPSB0cnVlCist ICAgICAgICAgIGVuZAorLSAgICAgICAgfQorLSAgICAgICAgc2VsZgorLSAgICAgIGVuZAorLQor LSAgICAgIGRlZiBzaW5nbGU/CistICAgICAgICBsYXp5X2luaXRpYWxpemUKKy0gICAgICAgIGlm IEBuYW1lc2VydmVyX3BvcnQubGVuZ3RoID09IDEKKy0gICAgICAgICAgcmV0dXJuIEBuYW1lc2Vy dmVyX3BvcnRbMF0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgcmV0dXJuIG5pbAorLSAgICAg ICAgZW5kCistICAgICAgZW5kCistCistICAgICAgZGVmIG5hbWVzZXJ2ZXJfcG9ydAorLSAgICAg ICAgQG5hbWVzZXJ2ZXJfcG9ydAorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiB1c2VfaXB2Nj8K Ky0gICAgICAgIEB1c2VfaXB2NgorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBnZW5lcmF0ZV9j YW5kaWRhdGVzKG5hbWUpCistICAgICAgICBjYW5kaWRhdGVzID0gbmlsCistICAgICAgICBuYW1l ID0gTmFtZS5jcmVhdGUobmFtZSkKKy0gICAgICAgIGlmIG5hbWUuYWJzb2x1dGU/CistICAgICAg ICAgIGNhbmRpZGF0ZXMgPSBbbmFtZV0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgaWYgQG5k b3RzIDw9IG5hbWUubGVuZ3RoIC0gMQorLSAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBbTmFtZS5u ZXcobmFtZS50b19hKV0KKy0gICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIGNhbmRpZGF0ZXMg PSBbXQorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgY2FuZGlkYXRlcy5jb25jYXQoQHNlYXJj aC5tYXAge3xkb21haW58IE5hbWUubmV3KG5hbWUudG9fYSArIGRvbWFpbil9KQorLSAgICAgICAg ICBmbmFtZSA9IE5hbWUuY3JlYXRlKCIje25hbWV9LiIpCistICAgICAgICAgIGlmICFjYW5kaWRh dGVzLmluY2x1ZGU/KGZuYW1lKQorLSAgICAgICAgICAgIGNhbmRpZGF0ZXMgPDwgZm5hbWUKKy0g ICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0gICAgICAgIHJldHVybiBjYW5kaWRhdGVzCist ICAgICAgZW5kCistCistICAgICAgSW5pdGlhbFRpbWVvdXQgPSA1CistCistICAgICAgZGVmIGdl bmVyYXRlX3RpbWVvdXRzCistICAgICAgICB0cyA9IFtJbml0aWFsVGltZW91dF0KKy0gICAgICAg IHRzIDw8IHRzWy0xXSAqIDIgLyBAbmFtZXNlcnZlcl9wb3J0Lmxlbmd0aAorLSAgICAgICAgdHMg PDwgdHNbLTFdICogMgorLSAgICAgICAgdHMgPDwgdHNbLTFdICogMgorLSAgICAgICAgcmV0dXJu IHRzCistICAgICAgZW5kCistCistICAgICAgZGVmIHJlc29sdihuYW1lKQorLSAgICAgICAgY2Fu ZGlkYXRlcyA9IGdlbmVyYXRlX2NhbmRpZGF0ZXMobmFtZSkKKy0gICAgICAgIHRpbWVvdXRzID0g QHRpbWVvdXRzIHx8IGdlbmVyYXRlX3RpbWVvdXRzCistICAgICAgICB0aW1lb3V0X2Vycm9yID0g ZmFsc2UKKy0gICAgICAgIGJlZ2luCistICAgICAgICAgIGNhbmRpZGF0ZXMuZWFjaCB7fGNhbmRp ZGF0ZXwKKy0gICAgICAgICAgICBiZWdpbgorLSAgICAgICAgICAgICAgdGltZW91dHMuZWFjaCB7 fHRvdXR8CistICAgICAgICAgICAgICAgIEBuYW1lc2VydmVyX3BvcnQuZWFjaCB7fG5hbWVzZXJ2 ZXIsIHBvcnR8CistICAgICAgICAgICAgICAgICAgYmVnaW4KKy0gICAgICAgICAgICAgICAgICAg IHlpZWxkIGNhbmRpZGF0ZSwgdG91dCwgbmFtZXNlcnZlciwgcG9ydAorLSAgICAgICAgICAgICAg ICAgIHJlc2N1ZSBSZXNvbHZUaW1lb3V0CistICAgICAgICAgICAgICAgICAgZW5kCistICAgICAg ICAgICAgICAgIH0KKy0gICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgIHRpbWVvdXRfZXJy b3IgPSB0cnVlCistICAgICAgICAgICAgICByYWlzZSBSZXNvbHZFcnJvci5uZXcoIkROUyByZXNv bHYgdGltZW91dDogI3tuYW1lfSIpCistICAgICAgICAgICAgcmVzY3VlIE5YRG9tYWluCistICAg ICAgICAgICAgZW5kCistICAgICAgICAgIH0KKy0gICAgICAgIHJlc2N1ZSBSZXNvbHZFcnJvcgor LSAgICAgICAgICByYWlzZSBpZiBAcmFpc2VfdGltZW91dF9lcnJvcnMgJiYgdGltZW91dF9lcnJv cgorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIEluZGlj YXRlcyBubyBzdWNoIGRvbWFpbiB3YXMgZm91bmQuCistCistICAgICAgY2xhc3MgTlhEb21haW4g PCBSZXNvbHZFcnJvcgorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBJbmRpY2F0 ZXMgc29tZSBvdGhlciB1bmhhbmRsZWQgcmVzb2x2ZXIgZXJyb3Igd2FzIGVuY291bnRlcmVkLgor LQorLSAgICAgIGNsYXNzIE90aGVyUmVzb2x2RXJyb3IgPCBSZXNvbHZFcnJvcgorLSAgICAgIGVu ZAorLSAgICBlbmQKKy0KKy0gICAgbW9kdWxlIE9wQ29kZSAjIDpub2RvYzoKKy0gICAgICBRdWVy eSA9IDAKKy0gICAgICBJUXVlcnkgPSAxCistICAgICAgU3RhdHVzID0gMgorLSAgICAgIE5vdGlm eSA9IDQKKy0gICAgICBVcGRhdGUgPSA1CistICAgIGVuZAorLQorLSAgICBtb2R1bGUgUkNvZGUg IyA6bm9kb2M6CistICAgICAgTm9FcnJvciA9IDAKKy0gICAgICBGb3JtRXJyID0gMQorLSAgICAg IFNlcnZGYWlsID0gMgorLSAgICAgIE5YRG9tYWluID0gMworLSAgICAgIE5vdEltcCA9IDQKKy0g ICAgICBSZWZ1c2VkID0gNQorLSAgICAgIFlYRG9tYWluID0gNgorLSAgICAgIFlYUlJTZXQgPSA3 CistICAgICAgTlhSUlNldCA9IDgKKy0gICAgICBOb3RBdXRoID0gOQorLSAgICAgIE5vdFpvbmUg PSAxMAorLSAgICAgIEJBRFZFUlMgPSAxNgorLSAgICAgIEJBRFNJRyA9IDE2CistICAgICAgQkFE S0VZID0gMTcKKy0gICAgICBCQURUSU1FID0gMTgKKy0gICAgICBCQURNT0RFID0gMTkKKy0gICAg ICBCQUROQU1FID0gMjAKKy0gICAgICBCQURBTEcgPSAyMQorLSAgICBlbmQKKy0KKy0gICAgIyMK Ky0gICAgIyBJbmRpY2F0ZXMgdGhhdCB0aGUgRE5TIHJlc3BvbnNlIHdhcyB1bmFibGUgdG8gYmUg ZGVjb2RlZC4KKy0KKy0gICAgY2xhc3MgRGVjb2RlRXJyb3IgPCBTdGFuZGFyZEVycm9yCistICAg IGVuZAorLQorLSAgICAjIworLSAgICAjIEluZGljYXRlcyB0aGF0IHRoZSBETlMgcmVxdWVzdCB3 YXMgdW5hYmxlIHRvIGJlIGVuY29kZWQuCistCistICAgIGNsYXNzIEVuY29kZUVycm9yIDwgU3Rh bmRhcmRFcnJvcgorLSAgICBlbmQKKy0KKy0gICAgbW9kdWxlIExhYmVsICMgOm5vZG9jOgorLSAg ICAgIGRlZiBzZWxmLnNwbGl0KGFyZykKKy0gICAgICAgIGxhYmVscyA9IFtdCistICAgICAgICBh cmcuc2NhbigvW15cLl0rLykge2xhYmVscyA8PCBTdHIubmV3KCQmKX0KKy0gICAgICAgIHJldHVy biBsYWJlbHMKKy0gICAgICBlbmQKKy0KKy0gICAgICBjbGFzcyBTdHIgIyA6bm9kb2M6CistICAg ICAgICBkZWYgaW5pdGlhbGl6ZShzdHJpbmcpCistICAgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcK Ky0gICAgICAgICAgIyBjYXNlIGluc2Vuc2l2aXR5IG9mIEROUyBsYWJlbHMgZG9lc24ndCBhcHBs eSBub24tQVNDSUkgY2hhcmFjdGVycy4gW1JGQyA0MzQzXQorLSAgICAgICAgICAjIFRoaXMgYXNz dW1lcyBAc3RyaW5nIGlzIGdpdmVuIGluIEFTQ0lJIGNvbXBhdGlibGUgZW5jb2RpbmcuCistICAg ICAgICAgIEBkb3duY2FzZSA9IHN0cmluZy5iLmRvd25jYXNlCistICAgICAgICBlbmQKKy0gICAg ICAgIGF0dHJfcmVhZGVyIDpzdHJpbmcsIDpkb3duY2FzZQorLQorLSAgICAgICAgZGVmIHRvX3MK Ky0gICAgICAgICAgcmV0dXJuIEBzdHJpbmcKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVm IGluc3BlY3QKKy0gICAgICAgICAgcmV0dXJuICIjPCN7c2VsZi5jbGFzc30gI3tzZWxmfT4iCist ICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiA9PShvdGhlcikKKy0gICAgICAgICAgcmV0dXJu IHNlbGYuY2xhc3MgPT0gb3RoZXIuY2xhc3MgJiYgQGRvd25jYXNlID09IG90aGVyLmRvd25jYXNl CistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBlcWw/KG90aGVyKQorLSAgICAgICAgICBy ZXR1cm4gc2VsZiA9PSBvdGhlcgorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgaGFzaAor LSAgICAgICAgICByZXR1cm4gQGRvd25jYXNlLmhhc2gKKy0gICAgICAgIGVuZAorLSAgICAgIGVu ZAorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBBIHJlcHJlc2VudGF0aW9uIG9mIGEgRE5T IG5hbWUuCistCistICAgIGNsYXNzIE5hbWUKKy0KKy0gICAgICAjIworLSAgICAgICMgQ3JlYXRl cyBhIG5ldyBETlMgbmFtZSBmcm9tICthcmcrLiAgK2FyZysgY2FuIGJlOgorLSAgICAgICMKKy0g ICAgICAjIE5hbWU6OiByZXR1cm5zICthcmcrLgorLSAgICAgICMgU3RyaW5nOjogQ3JlYXRlcyBh IG5ldyBOYW1lLgorLQorLSAgICAgIGRlZiBzZWxmLmNyZWF0ZShhcmcpCistICAgICAgICBjYXNl IGFyZworLSAgICAgICAgd2hlbiBOYW1lCistICAgICAgICAgIHJldHVybiBhcmcKKy0gICAgICAg IHdoZW4gU3RyaW5nCistICAgICAgICAgIHJldHVybiBOYW1lLm5ldyhMYWJlbC5zcGxpdChhcmcp LCAvXC5cei8gPX4gYXJnID8gdHJ1ZSA6IGZhbHNlKQorLSAgICAgICAgZWxzZQorLSAgICAgICAg ICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygiY2Fubm90IGludGVycHJldCBhcyBETlMgbmFtZTog I3thcmcuaW5zcGVjdH0iKQorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgZGVm IGluaXRpYWxpemUobGFiZWxzLCBhYnNvbHV0ZT10cnVlKSAjIDpub2RvYzoKKy0gICAgICAgIGxh YmVscyA9IGxhYmVscy5tYXAge3xsYWJlbHwKKy0gICAgICAgICAgY2FzZSBsYWJlbAorLSAgICAg ICAgICB3aGVuIFN0cmluZyB0aGVuIExhYmVsOjpTdHIubmV3KGxhYmVsKQorLSAgICAgICAgICB3 aGVuIExhYmVsOjpTdHIgdGhlbiBsYWJlbAorLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAg cmFpc2UgQXJndW1lbnRFcnJvciwgInVuZXhwZWN0ZWQgbGFiZWw6ICN7bGFiZWwuaW5zcGVjdH0i CistICAgICAgICAgIGVuZAorLSAgICAgICAgfQorLSAgICAgICAgQGxhYmVscyA9IGxhYmVscwor LSAgICAgICAgQGFic29sdXRlID0gYWJzb2x1dGUKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYg aW5zcGVjdCAjIDpub2RvYzoKKy0gICAgICAgICIjPCN7c2VsZi5jbGFzc306ICN7c2VsZn0je0Bh YnNvbHV0ZSA/ICcuJyA6ICcnfT4iCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAj IFRydWUgaWYgdGhpcyBuYW1lIGlzIGFic29sdXRlLgorLQorLSAgICAgIGRlZiBhYnNvbHV0ZT8K Ky0gICAgICAgIHJldHVybiBAYWJzb2x1dGUKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgPT0o b3RoZXIpICMgOm5vZG9jOgorLSAgICAgICAgcmV0dXJuIGZhbHNlIHVubGVzcyBOYW1lID09PSBv dGhlcgorLSAgICAgICAgcmV0dXJuIGZhbHNlIHVubGVzcyBAYWJzb2x1dGUgPT0gb3RoZXIuYWJz b2x1dGU/CistICAgICAgICByZXR1cm4gQGxhYmVscyA9PSBvdGhlci50b19hCistICAgICAgZW5k CistCistICAgICAgYWxpYXMgZXFsPyA9PSAjIDpub2RvYzoKKy0KKy0gICAgICAjIworLSAgICAg ICMgUmV0dXJucyB0cnVlIGlmICtvdGhlcisgaXMgYSBzdWJkb21haW4uCistICAgICAgIworLSAg ICAgICMgRXhhbXBsZToKKy0gICAgICAjCistICAgICAgIyAgIGRvbWFpbiA9IEdlbTo6UmVzb2x2 OjpETlM6Ok5hbWUuY3JlYXRlKCJ5LnoiKQorLSAgICAgICMgICBwIEdlbTo6UmVzb2x2OjpETlM6 Ok5hbWUuY3JlYXRlKCJ3LngueS56Iikuc3ViZG9tYWluX29mPyhkb21haW4pICM9PiB0cnVlCist ICAgICAgIyAgIHAgR2VtOjpSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUoIngueS56Iikuc3ViZG9t YWluX29mPyhkb21haW4pICM9PiB0cnVlCistICAgICAgIyAgIHAgR2VtOjpSZXNvbHY6OkROUzo6 TmFtZS5jcmVhdGUoInkueiIpLnN1YmRvbWFpbl9vZj8oZG9tYWluKSAjPT4gZmFsc2UKKy0gICAg ICAjICAgcCBHZW06OlJlc29sdjo6RE5TOjpOYW1lLmNyZWF0ZSgieiIpLnN1YmRvbWFpbl9vZj8o ZG9tYWluKSAjPT4gZmFsc2UKKy0gICAgICAjICAgcCBHZW06OlJlc29sdjo6RE5TOjpOYW1lLmNy ZWF0ZSgieC55LnouIikuc3ViZG9tYWluX29mPyhkb21haW4pICM9PiBmYWxzZQorLSAgICAgICMg ICBwIEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKCJ3LnoiKS5zdWJkb21haW5fb2Y/KGRv bWFpbikgIz0+IGZhbHNlCistICAgICAgIworLQorLSAgICAgIGRlZiBzdWJkb21haW5fb2Y/KG90 aGVyKQorLSAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgIm5vdCBhIGRvbWFpbiBuYW1lOiAj e290aGVyLmluc3BlY3R9IiB1bmxlc3MgTmFtZSA9PT0gb3RoZXIKKy0gICAgICAgIHJldHVybiBm YWxzZSBpZiBAYWJzb2x1dGUgIT0gb3RoZXIuYWJzb2x1dGU/CistICAgICAgICBvdGhlcl9sZW4g PSBvdGhlci5sZW5ndGgKKy0gICAgICAgIHJldHVybiBmYWxzZSBpZiBAbGFiZWxzLmxlbmd0aCA8 PSBvdGhlcl9sZW4KKy0gICAgICAgIHJldHVybiBAbGFiZWxzWy1vdGhlcl9sZW4sIG90aGVyX2xl bl0gPT0gb3RoZXIudG9fYQorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBoYXNoICMgOm5vZG9j OgorLSAgICAgICAgcmV0dXJuIEBsYWJlbHMuaGFzaCBeIEBhYnNvbHV0ZS5oYXNoCistICAgICAg ZW5kCistCistICAgICAgZGVmIHRvX2EgIyA6bm9kb2M6CistICAgICAgICByZXR1cm4gQGxhYmVs cworLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBsZW5ndGggIyA6bm9kb2M6CistICAgICAgICBy ZXR1cm4gQGxhYmVscy5sZW5ndGgKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgW10oaSkgIyA6 bm9kb2M6CistICAgICAgICByZXR1cm4gQGxhYmVsc1tpXQorLSAgICAgIGVuZAorLQorLSAgICAg ICMjCistICAgICAgIyByZXR1cm5zIHRoZSBkb21haW4gbmFtZSBhcyBhIHN0cmluZy4KKy0gICAg ICAjCistICAgICAgIyBUaGUgZG9tYWluIG5hbWUgZG9lc24ndCBoYXZlIGEgdHJhaWxpbmcgZG90 IGV2ZW4gaWYgdGhlIG5hbWUgb2JqZWN0IGlzCistICAgICAgIyBhYnNvbHV0ZS4KKy0gICAgICAj CistICAgICAgIyBFeGFtcGxlOgorLSAgICAgICMKKy0gICAgICAjICAgcCBHZW06OlJlc29sdjo6 RE5TOjpOYW1lLmNyZWF0ZSgieC55LnouIikudG9fcyAjPT4gIngueS56IgorLSAgICAgICMgICBw IEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKCJ4LnkueiIpLnRvX3MgIz0+ICJ4LnkueiIK Ky0KKy0gICAgICBkZWYgdG9fcworLSAgICAgICAgcmV0dXJuIEBsYWJlbHMuam9pbignLicpCist ICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICBjbGFzcyBNZXNzYWdlICMgOm5vZG9jOgorLSAg ICAgIEBAaWRlbnRpZmllciA9IC0xCistCistICAgICAgZGVmIGluaXRpYWxpemUoaWQgPSAoQEBp ZGVudGlmaWVyICs9IDEpICYgMHhmZmZmKQorLSAgICAgICAgQGlkID0gaWQKKy0gICAgICAgIEBx ciA9IDAKKy0gICAgICAgIEBvcGNvZGUgPSAwCistICAgICAgICBAYWEgPSAwCistICAgICAgICBA dGMgPSAwCistICAgICAgICBAcmQgPSAwICMgcmVjdXJzaW9uIGRlc2lyZWQKKy0gICAgICAgIEBy YSA9IDAgIyByZWN1cnNpb24gYXZhaWxhYmxlCistICAgICAgICBAcmNvZGUgPSAwCistICAgICAg ICBAcXVlc3Rpb24gPSBbXQorLSAgICAgICAgQGFuc3dlciA9IFtdCistICAgICAgICBAYXV0aG9y aXR5ID0gW10KKy0gICAgICAgIEBhZGRpdGlvbmFsID0gW10KKy0gICAgICBlbmQKKy0KKy0gICAg ICBhdHRyX2FjY2Vzc29yIDppZCwgOnFyLCA6b3Bjb2RlLCA6YWEsIDp0YywgOnJkLCA6cmEsIDpy Y29kZQorLSAgICAgIGF0dHJfcmVhZGVyIDpxdWVzdGlvbiwgOmFuc3dlciwgOmF1dGhvcml0eSwg OmFkZGl0aW9uYWwKKy0KKy0gICAgICBkZWYgPT0ob3RoZXIpCistICAgICAgICByZXR1cm4gQGlk ID09IG90aGVyLmlkICYmCistICAgICAgICAgICAgICAgQHFyID09IG90aGVyLnFyICYmCistICAg ICAgICAgICAgICAgQG9wY29kZSA9PSBvdGhlci5vcGNvZGUgJiYKKy0gICAgICAgICAgICAgICBA YWEgPT0gb3RoZXIuYWEgJiYKKy0gICAgICAgICAgICAgICBAdGMgPT0gb3RoZXIudGMgJiYKKy0g ICAgICAgICAgICAgICBAcmQgPT0gb3RoZXIucmQgJiYKKy0gICAgICAgICAgICAgICBAcmEgPT0g b3RoZXIucmEgJiYKKy0gICAgICAgICAgICAgICBAcmNvZGUgPT0gb3RoZXIucmNvZGUgJiYKKy0g ICAgICAgICAgICAgICBAcXVlc3Rpb24gPT0gb3RoZXIucXVlc3Rpb24gJiYKKy0gICAgICAgICAg ICAgICBAYW5zd2VyID09IG90aGVyLmFuc3dlciAmJgorLSAgICAgICAgICAgICAgIEBhdXRob3Jp dHkgPT0gb3RoZXIuYXV0aG9yaXR5ICYmCistICAgICAgICAgICAgICAgQGFkZGl0aW9uYWwgPT0g b3RoZXIuYWRkaXRpb25hbAorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBhZGRfcXVlc3Rpb24o bmFtZSwgdHlwZWNsYXNzKQorLSAgICAgICAgQHF1ZXN0aW9uIDw8IFtOYW1lLmNyZWF0ZShuYW1l KSwgdHlwZWNsYXNzXQorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlYWNoX3F1ZXN0aW9uCist ICAgICAgICBAcXVlc3Rpb24uZWFjaCB7fG5hbWUsIHR5cGVjbGFzc3wKKy0gICAgICAgICAgeWll bGQgbmFtZSwgdHlwZWNsYXNzCistICAgICAgICB9CistICAgICAgZW5kCistCistICAgICAgZGVm IGFkZF9hbnN3ZXIobmFtZSwgdHRsLCBkYXRhKQorLSAgICAgICAgQGFuc3dlciA8PCBbTmFtZS5j cmVhdGUobmFtZSksIHR0bCwgZGF0YV0KKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgZWFjaF9h bnN3ZXIKKy0gICAgICAgIEBhbnN3ZXIuZWFjaCB7fG5hbWUsIHR0bCwgZGF0YXwKKy0gICAgICAg ICAgeWllbGQgbmFtZSwgdHRsLCBkYXRhCistICAgICAgICB9CistICAgICAgZW5kCistCistICAg ICAgZGVmIGFkZF9hdXRob3JpdHkobmFtZSwgdHRsLCBkYXRhKQorLSAgICAgICAgQGF1dGhvcml0 eSA8PCBbTmFtZS5jcmVhdGUobmFtZSksIHR0bCwgZGF0YV0KKy0gICAgICBlbmQKKy0KKy0gICAg ICBkZWYgZWFjaF9hdXRob3JpdHkKKy0gICAgICAgIEBhdXRob3JpdHkuZWFjaCB7fG5hbWUsIHR0 bCwgZGF0YXwKKy0gICAgICAgICAgeWllbGQgbmFtZSwgdHRsLCBkYXRhCistICAgICAgICB9Cist ICAgICAgZW5kCistCistICAgICAgZGVmIGFkZF9hZGRpdGlvbmFsKG5hbWUsIHR0bCwgZGF0YSkK Ky0gICAgICAgIEBhZGRpdGlvbmFsIDw8IFtOYW1lLmNyZWF0ZShuYW1lKSwgdHRsLCBkYXRhXQor LSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlYWNoX2FkZGl0aW9uYWwKKy0gICAgICAgIEBhZGRp dGlvbmFsLmVhY2gge3xuYW1lLCB0dGwsIGRhdGF8CistICAgICAgICAgIHlpZWxkIG5hbWUsIHR0 bCwgZGF0YQorLSAgICAgICAgfQorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlYWNoX3Jlc291 cmNlCistICAgICAgICBlYWNoX2Fuc3dlciB7fG5hbWUsIHR0bCwgZGF0YXwgeWllbGQgbmFtZSwg dHRsLCBkYXRhfQorLSAgICAgICAgZWFjaF9hdXRob3JpdHkge3xuYW1lLCB0dGwsIGRhdGF8IHlp ZWxkIG5hbWUsIHR0bCwgZGF0YX0KKy0gICAgICAgIGVhY2hfYWRkaXRpb25hbCB7fG5hbWUsIHR0 bCwgZGF0YXwgeWllbGQgbmFtZSwgdHRsLCBkYXRhfQorLSAgICAgIGVuZAorLQorLSAgICAgIGRl ZiBlbmNvZGUKKy0gICAgICAgIHJldHVybiBNZXNzYWdlRW5jb2Rlci5uZXcge3xtc2d8CistICAg ICAgICAgIG1zZy5wdXRfcGFjaygnbm5ubm5uJywKKy0gICAgICAgICAgICBAaWQsCistICAgICAg ICAgICAgKEBxciAmIDEpIDw8IDE1IHwKKy0gICAgICAgICAgICAoQG9wY29kZSAmIDE1KSA8PCAx MSB8CistICAgICAgICAgICAgKEBhYSAmIDEpIDw8IDEwIHwKKy0gICAgICAgICAgICAoQHRjICYg MSkgPDwgOSB8CistICAgICAgICAgICAgKEByZCAmIDEpIDw8IDggfAorLSAgICAgICAgICAgIChA cmEgJiAxKSA8PCA3IHwKKy0gICAgICAgICAgICAoQHJjb2RlICYgMTUpLAorLSAgICAgICAgICAg IEBxdWVzdGlvbi5sZW5ndGgsCistICAgICAgICAgICAgQGFuc3dlci5sZW5ndGgsCistICAgICAg ICAgICAgQGF1dGhvcml0eS5sZW5ndGgsCistICAgICAgICAgICAgQGFkZGl0aW9uYWwubGVuZ3Ro KQorLSAgICAgICAgICBAcXVlc3Rpb24uZWFjaCB7fHF8CistICAgICAgICAgICAgbmFtZSwgdHlw ZWNsYXNzID0gcQorLSAgICAgICAgICAgIG1zZy5wdXRfbmFtZShuYW1lKQorLSAgICAgICAgICAg IG1zZy5wdXRfcGFjaygnbm4nLCB0eXBlY2xhc3M6OlR5cGVWYWx1ZSwgdHlwZWNsYXNzOjpDbGFz c1ZhbHVlKQorLSAgICAgICAgICB9CistICAgICAgICAgIFtAYW5zd2VyLCBAYXV0aG9yaXR5LCBA YWRkaXRpb25hbF0uZWFjaCB7fHJyfAorLSAgICAgICAgICAgIHJyLmVhY2gge3xyfAorLSAgICAg ICAgICAgICAgbmFtZSwgdHRsLCBkYXRhID0gcgorLSAgICAgICAgICAgICAgbXNnLnB1dF9uYW1l KG5hbWUpCistICAgICAgICAgICAgICBtc2cucHV0X3BhY2soJ25uTicsIGRhdGEuY2xhc3M6OlR5 cGVWYWx1ZSwgZGF0YS5jbGFzczo6Q2xhc3NWYWx1ZSwgdHRsKQorLSAgICAgICAgICAgICAgbXNn LnB1dF9sZW5ndGgxNiB7ZGF0YS5lbmNvZGVfcmRhdGEobXNnKX0KKy0gICAgICAgICAgICB9Cist ICAgICAgICAgIH0KKy0gICAgICAgIH0udG9fcworLSAgICAgIGVuZAorLQorLSAgICAgIGNsYXNz IE1lc3NhZ2VFbmNvZGVyICMgOm5vZG9jOgorLSAgICAgICAgZGVmIGluaXRpYWxpemUKKy0gICAg ICAgICAgQGRhdGEgPSAnJy5kdXAKKy0gICAgICAgICAgQG5hbWVzID0ge30KKy0gICAgICAgICAg eWllbGQgc2VsZgorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgdG9fcworLSAgICAgICAg ICByZXR1cm4gQGRhdGEKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHB1dF9ieXRlcyhk KQorLSAgICAgICAgICBAZGF0YSA8PCBkCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBw dXRfcGFjayh0ZW1wbGF0ZSwgKmQpCistICAgICAgICAgIEBkYXRhIDw8IGQucGFjayh0ZW1wbGF0 ZSkKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHB1dF9sZW5ndGgxNgorLSAgICAgICAg ICBsZW5ndGhfaW5kZXggPSBAZGF0YS5sZW5ndGgKKy0gICAgICAgICAgQGRhdGEgPDwgIlwwXDAi CistICAgICAgICAgIGRhdGFfc3RhcnQgPSBAZGF0YS5sZW5ndGgKKy0gICAgICAgICAgeWllbGQK Ky0gICAgICAgICAgZGF0YV9lbmQgPSBAZGF0YS5sZW5ndGgKKy0gICAgICAgICAgQGRhdGFbbGVu Z3RoX2luZGV4LCAyXSA9IFtkYXRhX2VuZCAtIGRhdGFfc3RhcnRdLnBhY2soIm4iKQorLSAgICAg ICAgZW5kCistCistICAgICAgICBkZWYgcHV0X3N0cmluZyhkKQorLSAgICAgICAgICBzZWxmLnB1 dF9wYWNrKCJDIiwgZC5sZW5ndGgpCistICAgICAgICAgIEBkYXRhIDw8IGQKKy0gICAgICAgIGVu ZAorLQorLSAgICAgICAgZGVmIHB1dF9zdHJpbmdfbGlzdChkcykKKy0gICAgICAgICAgZHMuZWFj aCB7fGR8CistICAgICAgICAgICAgc2VsZi5wdXRfc3RyaW5nKGQpCistICAgICAgICAgIH0KKy0g ICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHB1dF9uYW1lKGQsIGNvbXByZXNzOiB0cnVlKQor LSAgICAgICAgICBwdXRfbGFiZWxzKGQudG9fYSwgY29tcHJlc3M6IGNvbXByZXNzKQorLSAgICAg ICAgZW5kCistCistICAgICAgICBkZWYgcHV0X2xhYmVscyhkLCBjb21wcmVzczogdHJ1ZSkKKy0g ICAgICAgICAgZC5lYWNoX2luZGV4IHt8aXwKKy0gICAgICAgICAgICBkb21haW4gPSBkW2kuLi0x XQorLSAgICAgICAgICAgIGlmIGNvbXByZXNzICYmIGlkeCA9IEBuYW1lc1tkb21haW5dCistICAg ICAgICAgICAgICBzZWxmLnB1dF9wYWNrKCJuIiwgMHhjMDAwIHwgaWR4KQorLSAgICAgICAgICAg ICAgcmV0dXJuCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgaWYgQGRhdGEubGVu Z3RoIDwgMHg0MDAwCistICAgICAgICAgICAgICAgIEBuYW1lc1tkb21haW5dID0gQGRhdGEubGVu Z3RoCistICAgICAgICAgICAgICBlbmQKKy0gICAgICAgICAgICAgIHNlbGYucHV0X2xhYmVsKGRb aV0pCistICAgICAgICAgICAgZW5kCistICAgICAgICAgIH0KKy0gICAgICAgICAgQGRhdGEgPDwg IlwwIgorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgcHV0X2xhYmVsKGQpCistICAgICAg ICAgIHNlbGYucHV0X3N0cmluZyhkLnRvX3MpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0K Ky0gICAgICBkZWYgTWVzc2FnZS5kZWNvZGUobSkKKy0gICAgICAgIG8gPSBNZXNzYWdlLm5ldygw KQorLSAgICAgICAgTWVzc2FnZURlY29kZXIubmV3KG0pIHt8bXNnfAorLSAgICAgICAgICBpZCwg ZmxhZywgcWRjb3VudCwgYW5jb3VudCwgbnNjb3VudCwgYXJjb3VudCA9CistICAgICAgICAgICAg bXNnLmdldF91bnBhY2soJ25ubm5ubicpCistICAgICAgICAgIG8uaWQgPSBpZAorLSAgICAgICAg ICBvLnRjID0gKGZsYWcgPj4gOSkgJiAxCistICAgICAgICAgIG8ucmNvZGUgPSBmbGFnICYgMTUK Ky0gICAgICAgICAgcmV0dXJuIG8gdW5sZXNzIG8udGMuemVybz8KKy0KKy0gICAgICAgICAgby5x ciA9IChmbGFnID4+IDE1KSAmIDEKKy0gICAgICAgICAgby5vcGNvZGUgPSAoZmxhZyA+PiAxMSkg JiAxNQorLSAgICAgICAgICBvLmFhID0gKGZsYWcgPj4gMTApICYgMQorLSAgICAgICAgICBvLnJk ID0gKGZsYWcgPj4gOCkgJiAxCistICAgICAgICAgIG8ucmEgPSAoZmxhZyA+PiA3KSAmIDEKKy0g ICAgICAgICAgKDEuLnFkY291bnQpLmVhY2ggeworLSAgICAgICAgICAgIG5hbWUsIHR5cGVjbGFz cyA9IG1zZy5nZXRfcXVlc3Rpb24KKy0gICAgICAgICAgICBvLmFkZF9xdWVzdGlvbihuYW1lLCB0 eXBlY2xhc3MpCistICAgICAgICAgIH0KKy0gICAgICAgICAgKDEuLmFuY291bnQpLmVhY2ggewor LSAgICAgICAgICAgIG5hbWUsIHR0bCwgZGF0YSA9IG1zZy5nZXRfcnIKKy0gICAgICAgICAgICBv LmFkZF9hbnN3ZXIobmFtZSwgdHRsLCBkYXRhKQorLSAgICAgICAgICB9CistICAgICAgICAgICgx Li5uc2NvdW50KS5lYWNoIHsKKy0gICAgICAgICAgICBuYW1lLCB0dGwsIGRhdGEgPSBtc2cuZ2V0 X3JyCistICAgICAgICAgICAgby5hZGRfYXV0aG9yaXR5KG5hbWUsIHR0bCwgZGF0YSkKKy0gICAg ICAgICAgfQorLSAgICAgICAgICAoMS4uYXJjb3VudCkuZWFjaCB7CistICAgICAgICAgICAgbmFt ZSwgdHRsLCBkYXRhID0gbXNnLmdldF9ycgorLSAgICAgICAgICAgIG8uYWRkX2FkZGl0aW9uYWwo bmFtZSwgdHRsLCBkYXRhKQorLSAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICByZXR1 cm4gbworLSAgICAgIGVuZAorLQorLSAgICAgIGNsYXNzIE1lc3NhZ2VEZWNvZGVyICMgOm5vZG9j OgorLSAgICAgICAgZGVmIGluaXRpYWxpemUoZGF0YSkKKy0gICAgICAgICAgQGRhdGEgPSBkYXRh CistICAgICAgICAgIEBpbmRleCA9IDAKKy0gICAgICAgICAgQGxpbWl0ID0gZGF0YS5ieXRlc2l6 ZQorLSAgICAgICAgICB5aWVsZCBzZWxmCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBp bnNwZWN0CistICAgICAgICAgICJcIzwje3NlbGYuY2xhc3N9OiAje0BkYXRhLmJ5dGVzbGljZSgw LCBAaW5kZXgpLmluc3BlY3R9ICN7QGRhdGEuYnl0ZXNsaWNlKEBpbmRleC4uLTEpLmluc3BlY3R9 PiIKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGdldF9sZW5ndGgxNgorLSAgICAgICAg ICBsZW4sID0gc2VsZi5nZXRfdW5wYWNrKCduJykKKy0gICAgICAgICAgc2F2ZV9saW1pdCA9IEBs aW1pdAorLSAgICAgICAgICBAbGltaXQgPSBAaW5kZXggKyBsZW4KKy0gICAgICAgICAgZCA9IHlp ZWxkKGxlbikKKy0gICAgICAgICAgaWYgQGluZGV4IDwgQGxpbWl0CistICAgICAgICAgICAgcmFp c2UgRGVjb2RlRXJyb3IubmV3KCJqdW5rIGV4aXN0cyIpCistICAgICAgICAgIGVsc2lmIEBsaW1p dCA8IEBpbmRleAorLSAgICAgICAgICAgIHJhaXNlIERlY29kZUVycm9yLm5ldygibGltaXQgZXhj ZWVkZWQiKQorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgQGxpbWl0ID0gc2F2ZV9saW1pdAor LSAgICAgICAgICByZXR1cm4gZAorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZ2V0X2J5 dGVzKGxlbiA9IEBsaW1pdCAtIEBpbmRleCkKKy0gICAgICAgICAgcmFpc2UgRGVjb2RlRXJyb3Iu bmV3KCJsaW1pdCBleGNlZWRlZCIpIGlmIEBsaW1pdCA8IEBpbmRleCArIGxlbgorLSAgICAgICAg ICBkID0gQGRhdGEuYnl0ZXNsaWNlKEBpbmRleCwgbGVuKQorLSAgICAgICAgICBAaW5kZXggKz0g bGVuCistICAgICAgICAgIHJldHVybiBkCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBn ZXRfdW5wYWNrKHRlbXBsYXRlKQorLSAgICAgICAgICBsZW4gPSAwCistICAgICAgICAgIHRlbXBs YXRlLmVhY2hfYnl0ZSB7fGJ5dGV8CistICAgICAgICAgICAgYnl0ZSA9ICIlYyIgJSBieXRlCist ICAgICAgICAgICAgY2FzZSBieXRlCistICAgICAgICAgICAgd2hlbiA/YywgP0MKKy0gICAgICAg ICAgICAgIGxlbiArPSAxCistICAgICAgICAgICAgd2hlbiA/bgorLSAgICAgICAgICAgICAgbGVu ICs9IDIKKy0gICAgICAgICAgICB3aGVuID9OCistICAgICAgICAgICAgICBsZW4gKz0gNAorLSAg ICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgIHJhaXNlIFN0YW5kYXJkRXJyb3IubmV3KCJ1 bnN1cHBvcnRlZCB0ZW1wbGF0ZTogJyN7Ynl0ZS5jaHJ9JyBpbiAnI3t0ZW1wbGF0ZX0nIikKKy0g ICAgICAgICAgICBlbmQKKy0gICAgICAgICAgfQorLSAgICAgICAgICByYWlzZSBEZWNvZGVFcnJv ci5uZXcoImxpbWl0IGV4Y2VlZGVkIikgaWYgQGxpbWl0IDwgQGluZGV4ICsgbGVuCistICAgICAg ICAgIGFyciA9IEBkYXRhLnVucGFjaygiQCN7QGluZGV4fSN7dGVtcGxhdGV9IikKKy0gICAgICAg ICAgQGluZGV4ICs9IGxlbgorLSAgICAgICAgICByZXR1cm4gYXJyCistICAgICAgICBlbmQKKy0K Ky0gICAgICAgIGRlZiBnZXRfc3RyaW5nCistICAgICAgICAgIHJhaXNlIERlY29kZUVycm9yLm5l dygibGltaXQgZXhjZWVkZWQiKSBpZiBAbGltaXQgPD0gQGluZGV4CistICAgICAgICAgIGxlbiA9 IEBkYXRhLmdldGJ5dGUoQGluZGV4KQorLSAgICAgICAgICByYWlzZSBEZWNvZGVFcnJvci5uZXco ImxpbWl0IGV4Y2VlZGVkIikgaWYgQGxpbWl0IDwgQGluZGV4ICsgMSArIGxlbgorLSAgICAgICAg ICBkID0gQGRhdGEuYnl0ZXNsaWNlKEBpbmRleCArIDEsIGxlbikKKy0gICAgICAgICAgQGluZGV4 ICs9IDEgKyBsZW4KKy0gICAgICAgICAgcmV0dXJuIGQKKy0gICAgICAgIGVuZAorLQorLSAgICAg ICAgZGVmIGdldF9zdHJpbmdfbGlzdAorLSAgICAgICAgICBzdHJpbmdzID0gW10KKy0gICAgICAg ICAgd2hpbGUgQGluZGV4IDwgQGxpbWl0CistICAgICAgICAgICAgc3RyaW5ncyA8PCBzZWxmLmdl dF9zdHJpbmcKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIHN0cmluZ3MKKy0gICAgICAgIGVu ZAorLQorLSAgICAgICAgZGVmIGdldF9saXN0CistICAgICAgICAgIFtdLnRhcCBkbyB8dmFsdWVz fAorLSAgICAgICAgICAgIHdoaWxlIEBpbmRleCA8IEBsaW1pdAorLSAgICAgICAgICAgICAgdmFs dWVzIDw8IHlpZWxkCistICAgICAgICAgICAgZW5kCistICAgICAgICAgIGVuZAorLSAgICAgICAg ZW5kCistCistICAgICAgICBkZWYgZ2V0X25hbWUKKy0gICAgICAgICAgcmV0dXJuIE5hbWUubmV3 KHNlbGYuZ2V0X2xhYmVscykKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGdldF9sYWJl bHMKKy0gICAgICAgICAgcHJldl9pbmRleCA9IEBpbmRleAorLSAgICAgICAgICBzYXZlX2luZGV4 ID0gbmlsCistICAgICAgICAgIGQgPSBbXQorLSAgICAgICAgICBzaXplID0gLTEKKy0gICAgICAg ICAgd2hpbGUgdHJ1ZQorLSAgICAgICAgICAgIHJhaXNlIERlY29kZUVycm9yLm5ldygibGltaXQg ZXhjZWVkZWQiKSBpZiBAbGltaXQgPD0gQGluZGV4CistICAgICAgICAgICAgY2FzZSBAZGF0YS5n ZXRieXRlKEBpbmRleCkKKy0gICAgICAgICAgICB3aGVuIDAKKy0gICAgICAgICAgICAgIEBpbmRl eCArPSAxCistICAgICAgICAgICAgICBpZiBzYXZlX2luZGV4CistICAgICAgICAgICAgICAgIEBp bmRleCA9IHNhdmVfaW5kZXgKKy0gICAgICAgICAgICAgIGVuZAorLSAgICAgICAgICAgICAgcmV0 dXJuIGQKKy0gICAgICAgICAgICB3aGVuIDE5Mi4uMjU1CistICAgICAgICAgICAgICBpZHggPSBz ZWxmLmdldF91bnBhY2soJ24nKVswXSAmIDB4M2ZmZgorLSAgICAgICAgICAgICAgaWYgcHJldl9p bmRleCA8PSBpZHgKKy0gICAgICAgICAgICAgICAgcmFpc2UgRGVjb2RlRXJyb3IubmV3KCJub24t YmFja3dhcmQgbmFtZSBwb2ludGVyIikKKy0gICAgICAgICAgICAgIGVuZAorLSAgICAgICAgICAg ICAgcHJldl9pbmRleCA9IGlkeAorLSAgICAgICAgICAgICAgaWYgIXNhdmVfaW5kZXgKKy0gICAg ICAgICAgICAgICAgc2F2ZV9pbmRleCA9IEBpbmRleAorLSAgICAgICAgICAgICAgZW5kCistICAg ICAgICAgICAgICBAaW5kZXggPSBpZHgKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAg ICBsID0gc2VsZi5nZXRfbGFiZWwKKy0gICAgICAgICAgICAgIGQgPDwgbAorLSAgICAgICAgICAg ICAgc2l6ZSArPSAxICsgbC5zdHJpbmcuYnl0ZXNpemUKKy0gICAgICAgICAgICAgIHJhaXNlIERl Y29kZUVycm9yLm5ldygibmFtZSBsYWJlbCBkYXRhIGV4Y2VlZCAyNTUgb2N0ZXRzIikgaWYgc2l6 ZSA+IDI1NQorLSAgICAgICAgICAgIGVuZAorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAor LQorLSAgICAgICAgZGVmIGdldF9sYWJlbAorLSAgICAgICAgICByZXR1cm4gTGFiZWw6OlN0ci5u ZXcoc2VsZi5nZXRfc3RyaW5nKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZ2V0X3F1 ZXN0aW9uCistICAgICAgICAgIG5hbWUgPSBzZWxmLmdldF9uYW1lCistICAgICAgICAgIHR5cGUs IGtsYXNzID0gc2VsZi5nZXRfdW5wYWNrKCJubiIpCistICAgICAgICAgIHJldHVybiBuYW1lLCBS ZXNvdXJjZS5nZXRfY2xhc3ModHlwZSwga2xhc3MpCistICAgICAgICBlbmQKKy0KKy0gICAgICAg IGRlZiBnZXRfcnIKKy0gICAgICAgICAgbmFtZSA9IHNlbGYuZ2V0X25hbWUKKy0gICAgICAgICAg dHlwZSwga2xhc3MsIHR0bCA9IHNlbGYuZ2V0X3VucGFjaygnbm5OJykKKy0gICAgICAgICAgdHlw ZWNsYXNzID0gUmVzb3VyY2UuZ2V0X2NsYXNzKHR5cGUsIGtsYXNzKQorLSAgICAgICAgICByZXMg PSBzZWxmLmdldF9sZW5ndGgxNiBkbworLSAgICAgICAgICAgIGJlZ2luCistICAgICAgICAgICAg ICB0eXBlY2xhc3MuZGVjb2RlX3JkYXRhIHNlbGYKKy0gICAgICAgICAgICByZXNjdWUgPT4gZQor LSAgICAgICAgICAgICAgcmFpc2UgRGVjb2RlRXJyb3IsIGUubWVzc2FnZSwgZS5iYWNrdHJhY2UK Ky0gICAgICAgICAgICBlbmQKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIHJlcy5pbnN0YW5j ZV92YXJpYWJsZV9zZXQgOkB0dGwsIHR0bAorLSAgICAgICAgICByZXR1cm4gbmFtZSwgdHRsLCBy ZXMKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAg IyBTdmNQYXJhbXMgZm9yIHNlcnZpY2UgYmluZGluZyBSUnMuIFtSRkM5NDYwXQorLQorLSAgICBj bGFzcyBTdmNQYXJhbXMKKy0gICAgICBpbmNsdWRlIEVudW1lcmFibGUKKy0KKy0gICAgICAjIwor LSAgICAgICMgQ3JlYXRlIGEgbGlzdCBvZiBTdmNQYXJhbXMgd2l0aCB0aGUgZ2l2ZW4gaW5pdGlh bCBjb250ZW50LgorLSAgICAgICMKKy0gICAgICAjICtwYXJhbXMrIGhhcyB0byBiZSBhbiBlbnVt ZXJhYmxlIG9mICtTdmNQYXJhbStzLgorLSAgICAgICMgSWYgaXRzIGNvbnRlbnQgaGFzICtTdmNQ YXJhbStzIHdpdGggdGhlIGR1cGxpY2F0ZSBrZXksCistICAgICAgIyB0aGUgb25lIGFwcGVhcnMg bGFzdCB0YWtlcyBwcmVjZWRlbmNlLgorLQorLSAgICAgIGRlZiBpbml0aWFsaXplKHBhcmFtcyA9 IFtdKQorLSAgICAgICAgQHBhcmFtcyA9IHt9CistCistICAgICAgICBwYXJhbXMuZWFjaCBkbyB8 cGFyYW18CistICAgICAgICAgIGFkZCBwYXJhbQorLSAgICAgICAgZW5kCistICAgICAgZW5kCist CistICAgICAgIyMKKy0gICAgICAjIEdldCBTdmNQYXJhbSBmb3IgdGhlIGdpdmVuICtrZXkrIGlu IHRoaXMgbGlzdC4KKy0KKy0gICAgICBkZWYgW10oa2V5KQorLSAgICAgICAgQHBhcmFtc1tjYW5v bmljYWxfa2V5KGtleSldCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIEdldCB0 aGUgbnVtYmVyIG9mIFN2Y1BhcmFtcyBpbiB0aGlzIGxpc3QuCistCistICAgICAgZGVmIGNvdW50 CistICAgICAgICBAcGFyYW1zLmNvdW50CistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAg ICAjIEdldCB3aGV0aGVyIHRoaXMgbGlzdCBpcyBlbXB0eS4KKy0KKy0gICAgICBkZWYgZW1wdHk/ CistICAgICAgICBAcGFyYW1zLmVtcHR5PworLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAg ICAgIyBBZGQgdGhlIFN2Y1BhcmFtICtwYXJhbSsgdG8gdGhpcyBsaXN0LCBvdmVyd3JpdGluZyB0 aGUgZXhpc3Rpbmcgb25lIHdpdGggdGhlIHNhbWUga2V5LgorLQorLSAgICAgIGRlZiBhZGQocGFy YW0pCistICAgICAgICBAcGFyYW1zW3BhcmFtLmNsYXNzLmtleV9udW1iZXJdID0gcGFyYW0KKy0g ICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgUmVtb3ZlIHRoZSArU3ZjUGFyYW0rIHdp dGggdGhlIGdpdmVuICtrZXkrIGFuZCByZXR1cm4gaXQuCistCistICAgICAgZGVmIGRlbGV0ZShr ZXkpCistICAgICAgICBAcGFyYW1zLmRlbGV0ZShjYW5vbmljYWxfa2V5KGtleSkpCistICAgICAg ZW5kCistCistICAgICAgIyMKKy0gICAgICAjIEVudW1lcmF0ZSB0aGUgK1N2Y1BhcmFtK3MgaW4g dGhpcyBsaXN0LgorLQorLSAgICAgIGRlZiBlYWNoKCZibG9jaykKKy0gICAgICAgIHJldHVybiBl bnVtX2Zvcig6ZWFjaCkgdW5sZXNzIGJsb2NrCistICAgICAgICBAcGFyYW1zLmVhY2hfdmFsdWUo JmJsb2NrKQorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlbmNvZGUobXNnKSAjIDpub2RvYzoK Ky0gICAgICAgIEBwYXJhbXMua2V5cy5zb3J0LmVhY2ggZG8gfGtleXwKKy0gICAgICAgICAgbXNn LnB1dF9wYWNrKCduJywga2V5KQorLSAgICAgICAgICBtc2cucHV0X2xlbmd0aDE2IGRvCistICAg ICAgICAgICAgQHBhcmFtcy5mZXRjaChrZXkpLmVuY29kZShtc2cpCistICAgICAgICAgIGVuZAor LSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykg IyA6bm9kb2M6CistICAgICAgICBwYXJhbXMgPSBtc2cuZ2V0X2xpc3QgZG8KKy0gICAgICAgICAg a2V5LCA9IG1zZy5nZXRfdW5wYWNrKCduJykKKy0gICAgICAgICAgbXNnLmdldF9sZW5ndGgxNiBk bworLSAgICAgICAgICAgIFN2Y1BhcmFtOjpDbGFzc0hhc2hba2V5XS5kZWNvZGUobXNnKQorLSAg ICAgICAgICBlbmQKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgcmV0dXJuIHNlbGYubmV3KHBh cmFtcykKKy0gICAgICBlbmQKKy0KKy0gICAgICBwcml2YXRlCistCistICAgICAgZGVmIGNhbm9u aWNhbF9rZXkoa2V5KSAjIDpub2RvYzoKKy0gICAgICAgIGNhc2Uga2V5CistICAgICAgICB3aGVu IEludGVnZXIKKy0gICAgICAgICAga2V5CistICAgICAgICB3aGVuIC9cQWtleShcZCspXHovCist ICAgICAgICAgIEludGVnZXIoJDEpCistICAgICAgICB3aGVuIFN5bWJvbAorLSAgICAgICAgICBT dmNQYXJhbTo6Q2xhc3NIYXNoW2tleV0ua2V5X251bWJlcgorLSAgICAgICAgZWxzZQorLSAgICAg ICAgICByYWlzZSBUeXBlRXJyb3IsICdrZXkgbXVzdCBiZSBlaXRoZXIgU3RyaW5nIG9yIFN5bWJv bCcKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAg IyBCYXNlIGNsYXNzIGZvciBTdmNQYXJhbS4gW1JGQzk0NjBdCistCistICAgIGNsYXNzIFN2Y1Bh cmFtCistCistICAgICAgIyMKKy0gICAgICAjIEdldCB0aGUgcHJlc2VudGF0aW9uIG5hbWUgb2Yg dGhlIFN2Y1BhcmFtS2V5LgorLQorLSAgICAgIGRlZiBzZWxmLmtleV9uYW1lCistICAgICAgICBj b25zdF9nZXQoOktleU5hbWUpCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIEdl dCB0aGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdGhlIFN2Y1BhcmFtS2V5LgorLQorLSAgICAgIGRl ZiBzZWxmLmtleV9udW1iZXIKKy0gICAgICAgIGNvbnN0X2dldCg6S2V5TnVtYmVyKQorLSAgICAg IGVuZAorLQorLSAgICAgIENsYXNzSGFzaCA9IEhhc2gubmV3IGRvIHxoLCBrZXl8ICMgOm5vZG9j OgorLSAgICAgICAgY2FzZSBrZXkKKy0gICAgICAgIHdoZW4gSW50ZWdlcgorLSAgICAgICAgICBH ZW5lcmljLmNyZWF0ZShrZXkpCistICAgICAgICB3aGVuIC9cQWtleSg/PGtleT5cZCspXHovCist ICAgICAgICAgIEdlbmVyaWMuY3JlYXRlKGtleS50b19pbnQpCistICAgICAgICB3aGVuIFN5bWJv bAorLSAgICAgICAgICByYWlzZSBLZXlFcnJvciwgInVua25vd24ga2V5ICN7a2V5fSIKKy0gICAg ICAgIGVsc2UKKy0gICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAna2V5IG11c3QgYmUgZWl0aGVy IFN0cmluZyBvciBTeW1ib2wnCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAj IworLSAgICAgICMgR2VuZXJpYyBTdmNQYXJhbSBhYnN0cmFjdCBjbGFzcy4KKy0KKy0gICAgICBj bGFzcyBHZW5lcmljIDwgU3ZjUGFyYW0KKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFN2Y1Bh cmFtVmFsdWUgaW4gd2lyZS1mb3JtYXQgYnl0ZSBzdHJpbmcuCistCistICAgICAgICBhdHRyX3Jl YWRlciA6dmFsdWUKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIENyZWF0ZSBnZW5lcmljIFN2 Y1BhcmFtCistCistICAgICAgICBkZWYgaW5pdGlhbGl6ZSh2YWx1ZSkKKy0gICAgICAgICAgQHZh bHVlID0gdmFsdWUKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGVuY29kZShtc2cpICMg Om5vZG9jOgorLSAgICAgICAgICBtc2cucHV0X2J5dGVzKEB2YWx1ZSkKKy0gICAgICAgIGVuZAor LQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIHJl dHVybiBzZWxmLm5ldyhtc2cuZ2V0X2J5dGVzKQorLSAgICAgICAgZW5kCistCistICAgICAgICBk ZWYgc2VsZi5jcmVhdGUoa2V5X251bWJlcikKKy0gICAgICAgICAgYyA9IENsYXNzLm5ldyhHZW5l cmljKQorLSAgICAgICAgICBrZXlfbmFtZSA9IDoia2V5I3trZXlfbnVtYmVyfSIKKy0gICAgICAg ICAgYy5jb25zdF9zZXQoOktleU5hbWUsIGtleV9uYW1lKQorLSAgICAgICAgICBjLmNvbnN0X3Nl dCg6S2V5TnVtYmVyLCBrZXlfbnVtYmVyKQorLSAgICAgICAgICBzZWxmLmNvbnN0X3NldCg6Iktl eSN7a2V5X251bWJlcn0iLCBjKQorLSAgICAgICAgICBDbGFzc0hhc2hba2V5X25hbWVdID0gQ2xh c3NIYXNoW2tleV9udW1iZXJdID0gYworLSAgICAgICAgICByZXR1cm4gYworLSAgICAgICAgZW5k CistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjICJtYW5kYXRvcnkiIFN2Y1BhcmFt IC0tIE1hbmRhdG9yeSBrZXlzIGluIHNlcnZpY2UgYmluZGluZyBSUgorLQorLSAgICAgIGNsYXNz IE1hbmRhdG9yeSA8IFN2Y1BhcmFtCistICAgICAgICBLZXlOYW1lID0gOm1hbmRhdG9yeQorLSAg ICAgICAgS2V5TnVtYmVyID0gMAorLSAgICAgICAgQ2xhc3NIYXNoW0tleU5hbWVdID0gQ2xhc3NI YXNoW0tleU51bWJlcl0gPSBzZWxmICMgOm5vZG9jOgorLQorLSAgICAgICAgIyMKKy0gICAgICAg ICMgTWFuZGF0b3J5IGtleXMuCistCistICAgICAgICBhdHRyX3JlYWRlciA6a2V5cworLQorLSAg ICAgICAgIyMKKy0gICAgICAgICMgSW5pdGlhbGl6ZSAibWFuZGF0b3J5IiBTY3ZQYXJhbS4KKy0K Ky0gICAgICAgIGRlZiBpbml0aWFsaXplKGtleXMpCistICAgICAgICAgIEBrZXlzID0ga2V5cy5t YXAoJjp0b19pbnQpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBlbmNvZGUobXNnKSAj IDpub2RvYzoKKy0gICAgICAgICAgQGtleXMuc29ydC5lYWNoIGRvIHxrZXl8CistICAgICAgICAg ICAgbXNnLnB1dF9wYWNrKCduJywga2V5KQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVuZAor LQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIGtl eXMgPSBtc2cuZ2V0X2xpc3QgeyBtc2cuZ2V0X3VucGFjaygnbicpWzBdIH0KKy0gICAgICAgICAg cmV0dXJuIHNlbGYubmV3KGtleXMpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAg ICAjIworLSAgICAgICMgImFscG4iIFN2Y1BhcmFtIC0tIEFkZGl0aW9uYWwgc3VwcG9ydGVkIHBy b3RvY29scworLQorLSAgICAgIGNsYXNzIEFMUE4gPCBTdmNQYXJhbQorLSAgICAgICAgS2V5TmFt ZSA9IDphbHBuCistICAgICAgICBLZXlOdW1iZXIgPSAxCistICAgICAgICBDbGFzc0hhc2hbS2V5 TmFtZV0gPSBDbGFzc0hhc2hbS2V5TnVtYmVyXSA9IHNlbGYgIyA6bm9kb2M6CistCistICAgICAg ICAjIworLSAgICAgICAgIyBTdXBwb3J0ZWQgcHJvdG9jb2wgSURzLgorLQorLSAgICAgICAgYXR0 cl9yZWFkZXIgOnByb3RvY29sX2lkcworLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgSW5pdGlh bGl6ZSAiYWxwbiIgU2N2UGFyYW0uCistCistICAgICAgICBkZWYgaW5pdGlhbGl6ZShwcm90b2Nv bF9pZHMpCistICAgICAgICAgIEBwcm90b2NvbF9pZHMgPSBwcm90b2NvbF9pZHMubWFwKCY6dG9f c3RyKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZW5jb2RlKG1zZykgIyA6bm9kb2M6 CistICAgICAgICAgIG1zZy5wdXRfc3RyaW5nX2xpc3QoQHByb3RvY29sX2lkcykKKy0gICAgICAg IGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6CistICAgICAg ICAgIHJldHVybiBzZWxmLm5ldyhtc2cuZ2V0X3N0cmluZ19saXN0KQorLSAgICAgICAgZW5kCist ICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjICJuby1kZWZhdWx0LWFscG4iIFN2Y1Bh cmFtIC0tIE5vIHN1cHBvcnQgZm9yIGRlZmF1bHQgcHJvdG9jb2wKKy0KKy0gICAgICBjbGFzcyBO b0RlZmF1bHRBTFBOIDwgU3ZjUGFyYW0KKy0gICAgICAgIEtleU5hbWUgPSA6J25vLWRlZmF1bHQt YWxwbicKKy0gICAgICAgIEtleU51bWJlciA9IDIKKy0gICAgICAgIENsYXNzSGFzaFtLZXlOYW1l XSA9IENsYXNzSGFzaFtLZXlOdW1iZXJdID0gc2VsZiAjIDpub2RvYzoKKy0KKy0gICAgICAgIGRl ZiBlbmNvZGUobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgIyBubyBwYXlsb2FkCistICAgICAg ICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29kZShtc2cpICMgOm5vZG9jOgorLSAgICAg ICAgICByZXR1cm4gc2VsZi5uZXcKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAg ICMjCistICAgICAgIyAicG9ydCIgU3ZjUGFyYW0gLS0gUG9ydCBmb3IgYWx0ZXJuYXRpdmUgZW5k cG9pbnQKKy0KKy0gICAgICBjbGFzcyBQb3J0IDwgU3ZjUGFyYW0KKy0gICAgICAgIEtleU5hbWUg PSA6cG9ydAorLSAgICAgICAgS2V5TnVtYmVyID0gMworLSAgICAgICAgQ2xhc3NIYXNoW0tleU5h bWVdID0gQ2xhc3NIYXNoW0tleU51bWJlcl0gPSBzZWxmICMgOm5vZG9jOgorLQorLSAgICAgICAg IyMKKy0gICAgICAgICMgUG9ydCBudW1iZXIuCistCistICAgICAgICBhdHRyX3JlYWRlciA6cG9y dAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgSW5pdGlhbGl6ZSAicG9ydCIgU2N2UGFyYW0u CistCistICAgICAgICBkZWYgaW5pdGlhbGl6ZShwb3J0KQorLSAgICAgICAgICBAcG9ydCA9IHBv cnQudG9faW50CistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBlbmNvZGUobXNnKSAjIDpu b2RvYzoKKy0gICAgICAgICAgbXNnLnB1dF9wYWNrKCduJywgQHBvcnQpCistICAgICAgICBlbmQK Ky0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29kZShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBw b3J0LCA9IG1zZy5nZXRfdW5wYWNrKCduJykKKy0gICAgICAgICAgcmV0dXJuIHNlbGYubmV3KHBv cnQpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgImlw djRoaW50IiBTdmNQYXJhbSAtLSBJUHY0IGFkZHJlc3MgaGludHMKKy0KKy0gICAgICBjbGFzcyBJ UHY0SGludCA8IFN2Y1BhcmFtCistICAgICAgICBLZXlOYW1lID0gOmlwdjRoaW50CistICAgICAg ICBLZXlOdW1iZXIgPSA0CistICAgICAgICBDbGFzc0hhc2hbS2V5TmFtZV0gPSBDbGFzc0hhc2hb S2V5TnVtYmVyXSA9IHNlbGYgIyA6bm9kb2M6CistCistICAgICAgICAjIworLSAgICAgICAgIyBT ZXQgb2YgSVB2NCBhZGRyZXNzZXMuCistCistICAgICAgICBhdHRyX3JlYWRlciA6YWRkcmVzc2Vz CistCistICAgICAgICAjIworLSAgICAgICAgIyBJbml0aWFsaXplICJpcHY0aGludCIgU2N2UGFy YW0uCistCistICAgICAgICBkZWYgaW5pdGlhbGl6ZShhZGRyZXNzZXMpCistICAgICAgICAgIEBh ZGRyZXNzZXMgPSBhZGRyZXNzZXMubWFwIHt8YWRkcmVzc3wgSVB2NC5jcmVhdGUoYWRkcmVzcykg fQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgZW5jb2RlKG1zZykgIyA6bm9kb2M6Cist ICAgICAgICAgIEBhZGRyZXNzZXMuZWFjaCBkbyB8YWRkcmVzc3wKKy0gICAgICAgICAgICBtc2cu cHV0X2J5dGVzKGFkZHJlc3MuYWRkcmVzcykKKy0gICAgICAgICAgZW5kCistICAgICAgICBlbmQK Ky0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29kZShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBh ZGRyZXNzZXMgPSBtc2cuZ2V0X2xpc3QgeyBJUHY0Lm5ldyhtc2cuZ2V0X2J5dGVzKDQpKSB9Cist ICAgICAgICAgIHJldHVybiBzZWxmLm5ldyhhZGRyZXNzZXMpCistICAgICAgICBlbmQKKy0gICAg ICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgImlwdjZoaW50IiBTdmNQYXJhbSAtLSBJUHY2 IGFkZHJlc3MgaGludHMKKy0KKy0gICAgICBjbGFzcyBJUHY2SGludCA8IFN2Y1BhcmFtCistICAg ICAgICBLZXlOYW1lID0gOmlwdjZoaW50CistICAgICAgICBLZXlOdW1iZXIgPSA2CistICAgICAg ICBDbGFzc0hhc2hbS2V5TmFtZV0gPSBDbGFzc0hhc2hbS2V5TnVtYmVyXSA9IHNlbGYgIyA6bm9k b2M6CistCistICAgICAgICAjIworLSAgICAgICAgIyBTZXQgb2YgSVB2NiBhZGRyZXNzZXMuCist CistICAgICAgICBhdHRyX3JlYWRlciA6YWRkcmVzc2VzCistCistICAgICAgICAjIworLSAgICAg ICAgIyBJbml0aWFsaXplICJpcHY2aGludCIgU2N2UGFyYW0uCistCistICAgICAgICBkZWYgaW5p dGlhbGl6ZShhZGRyZXNzZXMpCistICAgICAgICAgIEBhZGRyZXNzZXMgPSBhZGRyZXNzZXMubWFw IHt8YWRkcmVzc3wgSVB2Ni5jcmVhdGUoYWRkcmVzcykgfQorLSAgICAgICAgZW5kCistCistICAg ICAgICBkZWYgZW5jb2RlKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIEBhZGRyZXNzZXMuZWFj aCBkbyB8YWRkcmVzc3wKKy0gICAgICAgICAgICBtc2cucHV0X2J5dGVzKGFkZHJlc3MuYWRkcmVz cykKKy0gICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZWxmLmRl Y29kZShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBhZGRyZXNzZXMgPSBtc2cuZ2V0X2xpc3Qg eyBJUHY2Lm5ldyhtc2cuZ2V0X2J5dGVzKDE2KSkgfQorLSAgICAgICAgICByZXR1cm4gc2VsZi5u ZXcoYWRkcmVzc2VzKQorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgIyMKKy0g ICAgICAjICJkb2hwYXRoIiBTdmNQYXJhbSAtLSBETlMgb3ZlciBIVFRQUyBwYXRoIHRlbXBsYXRl IFtSRkM5NDYxXQorLQorLSAgICAgIGNsYXNzIERvSFBhdGggPCBTdmNQYXJhbQorLSAgICAgICAg S2V5TmFtZSA9IDpkb2hwYXRoCistICAgICAgICBLZXlOdW1iZXIgPSA3CistICAgICAgICBDbGFz c0hhc2hbS2V5TmFtZV0gPSBDbGFzc0hhc2hbS2V5TnVtYmVyXSA9IHNlbGYgIyA6bm9kb2M6Cist CistICAgICAgICAjIworLSAgICAgICAgIyBVUkkgdGVtcGxhdGUgZm9yIERvSCBxdWVyaWVzLgor LQorLSAgICAgICAgYXR0cl9yZWFkZXIgOnRlbXBsYXRlCistCistICAgICAgICAjIworLSAgICAg ICAgIyBJbml0aWFsaXplICJkb2hwYXRoIiBTY3ZQYXJhbS4KKy0KKy0gICAgICAgIGRlZiBpbml0 aWFsaXplKHRlbXBsYXRlKQorLSAgICAgICAgICBAdGVtcGxhdGUgPSB0ZW1wbGF0ZS5lbmNvZGUo J3V0Zi04JykKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGVuY29kZShtc2cpICMgOm5v ZG9jOgorLSAgICAgICAgICBtc2cucHV0X2J5dGVzKEB0ZW1wbGF0ZSkKKy0gICAgICAgIGVuZAor LQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIHRl bXBsYXRlID0gbXNnLmdldF9ieXRlcy5mb3JjZV9lbmNvZGluZygndXRmLTgnKQorLSAgICAgICAg ICByZXR1cm4gc2VsZi5uZXcodGVtcGxhdGUpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0g ICAgZW5kCistCistICAgICMjCistICAgICMgQSBETlMgcXVlcnkgYWJzdHJhY3QgY2xhc3MuCist CistICAgIGNsYXNzIFF1ZXJ5CistICAgICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMgOm5vZG9j OgorLSAgICAgICAgcmFpc2UgRW5jb2RlRXJyb3IubmV3KCIje3NlbGYuY2xhc3N9IGlzIHF1ZXJ5 LiIpCistICAgICAgZW5kCistCistICAgICAgZGVmIHNlbGYuZGVjb2RlX3JkYXRhKG1zZykgIyA6 bm9kb2M6CistICAgICAgICByYWlzZSBEZWNvZGVFcnJvci5uZXcoIiN7c2VsZi5jbGFzc30gaXMg cXVlcnkuIikKKy0gICAgICBlbmQKKy0gICAgZW5kCistCistICAgICMjCistICAgICMgQSBETlMg cmVzb3VyY2UgYWJzdHJhY3QgY2xhc3MuCistCistICAgIGNsYXNzIFJlc291cmNlIDwgUXVlcnkK Ky0KKy0gICAgICAjIworLSAgICAgICMgUmVtYWluaW5nIFRpbWUgVG8gTGl2ZSBmb3IgdGhpcyBS ZXNvdXJjZS4KKy0KKy0gICAgICBhdHRyX3JlYWRlciA6dHRsCistCistICAgICAgQ2xhc3NIYXNo ID0gTW9kdWxlLm5ldyBkbworLSAgICAgICAgbW9kdWxlX2Z1bmN0aW9uCistCistICAgICAgICBk ZWYgW109KHR5cGVfY2xhc3NfdmFsdWUsIGtsYXNzKQorLSAgICAgICAgICB0eXBlX3ZhbHVlLCBj bGFzc192YWx1ZSA9IHR5cGVfY2xhc3NfdmFsdWUKKy0gICAgICAgICAgUmVzb3VyY2UuY29uc3Rf c2V0KDoiVHlwZSN7dHlwZV92YWx1ZX1fQ2xhc3Mje2NsYXNzX3ZhbHVlfSIsIGtsYXNzKQorLSAg ICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMg Om5vZG9jOgorLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvci5uZXcKKy0gICAgICBl bmQKKy0KKy0gICAgICBkZWYgc2VsZi5kZWNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAg ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IubmV3CistICAgICAgZW5kCistCistICAgICAg ZGVmID09KG90aGVyKSAjIDpub2RvYzoKKy0gICAgICAgIHJldHVybiBmYWxzZSB1bmxlc3Mgc2Vs Zi5jbGFzcyA9PSBvdGhlci5jbGFzcworLSAgICAgICAgc19pdmFycyA9IHNlbGYuaW5zdGFuY2Vf dmFyaWFibGVzCistICAgICAgICBzX2l2YXJzLnNvcnQhCistICAgICAgICBzX2l2YXJzLmRlbGV0 ZSA6QHR0bAorLSAgICAgICAgb19pdmFycyA9IG90aGVyLmluc3RhbmNlX3ZhcmlhYmxlcworLSAg ICAgICAgb19pdmFycy5zb3J0IQorLSAgICAgICAgb19pdmFycy5kZWxldGUgOkB0dGwKKy0gICAg ICAgIHJldHVybiBzX2l2YXJzID09IG9faXZhcnMgJiYKKy0gICAgICAgICAgc19pdmFycy5jb2xs ZWN0IHt8bmFtZXwgc2VsZi5pbnN0YW5jZV92YXJpYWJsZV9nZXQgbmFtZX0gPT0KKy0gICAgICAg ICAgICBvX2l2YXJzLmNvbGxlY3Qge3xuYW1lfCBvdGhlci5pbnN0YW5jZV92YXJpYWJsZV9nZXQg bmFtZX0KKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgZXFsPyhvdGhlcikgIyA6bm9kb2M6Cist ICAgICAgICByZXR1cm4gc2VsZiA9PSBvdGhlcgorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBo YXNoICMgOm5vZG9jOgorLSAgICAgICAgaCA9IDAKKy0gICAgICAgIHZhcnMgPSBzZWxmLmluc3Rh bmNlX3ZhcmlhYmxlcworLSAgICAgICAgdmFycy5kZWxldGUgOkB0dGwKKy0gICAgICAgIHZhcnMu ZWFjaCB7fG5hbWV8CistICAgICAgICAgIGggXj0gc2VsZi5pbnN0YW5jZV92YXJpYWJsZV9nZXQo bmFtZSkuaGFzaAorLSAgICAgICAgfQorLSAgICAgICAgcmV0dXJuIGgKKy0gICAgICBlbmQKKy0K Ky0gICAgICBkZWYgc2VsZi5nZXRfY2xhc3ModHlwZV92YWx1ZSwgY2xhc3NfdmFsdWUpICMgOm5v ZG9jOgorLSAgICAgICAgY2FjaGUgPSA6IlR5cGUje3R5cGVfdmFsdWV9X0NsYXNzI3tjbGFzc192 YWx1ZX0iCistCistICAgICAgICByZXR1cm4gKGNvbnN0X2RlZmluZWQ/KGNhY2hlKSAmJiBjb25z dF9nZXQoY2FjaGUpKSB8fAorLSAgICAgICAgICAgICAgIEdlbmVyaWMuY3JlYXRlKHR5cGVfdmFs dWUsIGNsYXNzX3ZhbHVlKQorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBBIGdl bmVyaWMgcmVzb3VyY2UgYWJzdHJhY3QgY2xhc3MuCistCistICAgICAgY2xhc3MgR2VuZXJpYyA8 IFJlc291cmNlCistCistICAgICAgICAjIworLSAgICAgICAgIyBDcmVhdGVzIGEgbmV3IGdlbmVy aWMgcmVzb3VyY2UuCistCistICAgICAgICBkZWYgaW5pdGlhbGl6ZShkYXRhKQorLSAgICAgICAg ICBAZGF0YSA9IGRhdGEKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMg RGF0YSBmb3IgdGhpcyBnZW5lcmljIHJlc291cmNlLgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIg OmRhdGEKKy0KKy0gICAgICAgIGRlZiBlbmNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAg ICAgICAgbXNnLnB1dF9ieXRlcyhkYXRhKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYg c2VsZi5kZWNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgcmV0dXJuIHNlbGYu bmV3KG1zZy5nZXRfYnl0ZXMpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZWxmLmNy ZWF0ZSh0eXBlX3ZhbHVlLCBjbGFzc192YWx1ZSkgIyA6bm9kb2M6CistICAgICAgICAgIGMgPSBD bGFzcy5uZXcoR2VuZXJpYykKKy0gICAgICAgICAgYy5jb25zdF9zZXQoOlR5cGVWYWx1ZSwgdHlw ZV92YWx1ZSkKKy0gICAgICAgICAgYy5jb25zdF9zZXQoOkNsYXNzVmFsdWUsIGNsYXNzX3ZhbHVl KQorLSAgICAgICAgICBHZW5lcmljLmNvbnN0X3NldCgiVHlwZSN7dHlwZV92YWx1ZX1fQ2xhc3Mj e2NsYXNzX3ZhbHVlfSIsIGMpCistICAgICAgICAgIENsYXNzSGFzaFtbdHlwZV92YWx1ZSwgY2xh c3NfdmFsdWVdXSA9IGMKKy0gICAgICAgICAgcmV0dXJuIGMKKy0gICAgICAgIGVuZAorLSAgICAg IGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBEb21haW4gTmFtZSByZXNvdXJjZSBhYnN0cmFj dCBjbGFzcy4KKy0KKy0gICAgICBjbGFzcyBEb21haW5OYW1lIDwgUmVzb3VyY2UKKy0KKy0gICAg ICAgICMjCistICAgICAgICAjIENyZWF0ZXMgYSBuZXcgRG9tYWluTmFtZSBmcm9tICtuYW1lKy4K Ky0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCistICAgICAgICAgIEBuYW1lID0gbmFt ZQorLSAgICAgICAgZW5kCistCistICAgICAgICAjIworLSAgICAgICAgIyBUaGUgbmFtZSBvZiB0 aGlzIERvbWFpbk5hbWUuCistCistICAgICAgICBhdHRyX3JlYWRlciA6bmFtZQorLQorLSAgICAg ICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtc2cucHV0X25h bWUoQG5hbWUpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29kZV9yZGF0 YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICByZXR1cm4gc2VsZi5uZXcobXNnLmdldF9uYW1l KQorLSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgIyBTdGFuZGFyZCAoY2xhc3Mg Z2VuZXJpYykgUlJzCistCistICAgICAgQ2xhc3NWYWx1ZSA9IG5pbCAjIDpub2RvYzoKKy0KKy0g ICAgICAjIworLSAgICAgICMgQW4gYXV0aG9yaXRhdGl2ZSBuYW1lIHNlcnZlci4KKy0KKy0gICAg ICBjbGFzcyBOUyA8IERvbWFpbk5hbWUKKy0gICAgICAgIFR5cGVWYWx1ZSA9IDIgIyA6bm9kb2M6 CistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIFRoZSBjYW5vbmljYWwgbmFtZSBm b3IgYW4gYWxpYXMuCistCistICAgICAgY2xhc3MgQ05BTUUgPCBEb21haW5OYW1lCistICAgICAg ICBUeXBlVmFsdWUgPSA1ICMgOm5vZG9jOgorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAg ICAgIyBTdGFydCBPZiBBdXRob3JpdHkgcmVzb3VyY2UuCistCistICAgICAgY2xhc3MgU09BIDwg UmVzb3VyY2UKKy0KKy0gICAgICAgIFR5cGVWYWx1ZSA9IDYgIyA6bm9kb2M6CistCistICAgICAg ICAjIworLSAgICAgICAgIyBDcmVhdGVzIGEgbmV3IFNPQSByZWNvcmQuICBTZWUgdGhlIGF0dHIg ZG9jdW1lbnRhdGlvbiBmb3IgdGhlCistICAgICAgICAjIGRldGFpbHMgb2YgZWFjaCBhcmd1bWVu dC4KKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKG1uYW1lLCBybmFtZSwgc2VyaWFsLCByZWZy ZXNoLCByZXRyeV8sIGV4cGlyZSwgbWluaW11bSkKKy0gICAgICAgICAgQG1uYW1lID0gbW5hbWUK Ky0gICAgICAgICAgQHJuYW1lID0gcm5hbWUKKy0gICAgICAgICAgQHNlcmlhbCA9IHNlcmlhbAor LSAgICAgICAgICBAcmVmcmVzaCA9IHJlZnJlc2gKKy0gICAgICAgICAgQHJldHJ5ID0gcmV0cnlf CistICAgICAgICAgIEBleHBpcmUgPSBleHBpcmUKKy0gICAgICAgICAgQG1pbmltdW0gPSBtaW5p bXVtCistICAgICAgICBlbmQKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIE5hbWUgb2YgdGhl IGhvc3Qgd2hlcmUgdGhlIG1hc3RlciB6b25lIGZpbGUgZm9yIHRoaXMgem9uZSByZXNpZGVzLgor LQorLSAgICAgICAgYXR0cl9yZWFkZXIgOm1uYW1lCistCistICAgICAgICAjIworLSAgICAgICAg IyBUaGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciB0aGlzIGRvbWFpbiBuYW1lLgorLQorLSAgICAg ICAgYXR0cl9yZWFkZXIgOnJuYW1lCistCistICAgICAgICAjIworLSAgICAgICAgIyBUaGUgdmVy c2lvbiBudW1iZXIgb2YgdGhlIHpvbmUgZmlsZS4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDpz ZXJpYWwKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIEhvdyBvZnRlbiwgaW4gc2Vjb25kcywg YSBzZWNvbmRhcnkgbmFtZSBzZXJ2ZXIgaXMgdG8gY2hlY2sgZm9yCistICAgICAgICAjIHVwZGF0 ZXMgZnJvbSB0aGUgcHJpbWFyeSBuYW1lIHNlcnZlci4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVy IDpyZWZyZXNoCistCistICAgICAgICAjIworLSAgICAgICAgIyBIb3cgb2Z0ZW4sIGluIHNlY29u ZHMsIGEgc2Vjb25kYXJ5IG5hbWUgc2VydmVyIGlzIHRvIHJldHJ5IGFmdGVyIGEKKy0gICAgICAg ICMgZmFpbHVyZSB0byBjaGVjayBmb3IgYSByZWZyZXNoLgorLQorLSAgICAgICAgYXR0cl9yZWFk ZXIgOnJldHJ5CistCistICAgICAgICAjIworLSAgICAgICAgIyBUaW1lIGluIHNlY29uZHMgdGhh dCBhIHNlY29uZGFyeSBuYW1lIHNlcnZlciBpcyB0byB1c2UgdGhlIGRhdGEKKy0gICAgICAgICMg YmVmb3JlIHJlZnJlc2hpbmcgZnJvbSB0aGUgcHJpbWFyeSBuYW1lIHNlcnZlci4KKy0KKy0gICAg ICAgIGF0dHJfcmVhZGVyIDpleHBpcmUKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFRoZSBt aW5pbXVtIG51bWJlciBvZiBzZWNvbmRzIHRvIGJlIHVzZWQgZm9yIFRUTCB2YWx1ZXMgaW4gUlJz LgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOm1pbmltdW0KKy0KKy0gICAgICAgIGRlZiBlbmNv ZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgbXNnLnB1dF9uYW1lKEBtbmFtZSkK Ky0gICAgICAgICAgbXNnLnB1dF9uYW1lKEBybmFtZSkKKy0gICAgICAgICAgbXNnLnB1dF9wYWNr KCdOTk5OTicsIEBzZXJpYWwsIEByZWZyZXNoLCBAcmV0cnksIEBleHBpcmUsIEBtaW5pbXVtKQor LSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNvZGVfcmRhdGEobXNnKSAjIDpu b2RvYzoKKy0gICAgICAgICAgbW5hbWUgPSBtc2cuZ2V0X25hbWUKKy0gICAgICAgICAgcm5hbWUg PSBtc2cuZ2V0X25hbWUKKy0gICAgICAgICAgc2VyaWFsLCByZWZyZXNoLCByZXRyeV8sIGV4cGly ZSwgbWluaW11bSA9IG1zZy5nZXRfdW5wYWNrKCdOTk5OTicpCistICAgICAgICAgIHJldHVybiBz ZWxmLm5ldygKKy0gICAgICAgICAgICBtbmFtZSwgcm5hbWUsIHNlcmlhbCwgcmVmcmVzaCwgcmV0 cnlfLCBleHBpcmUsIG1pbmltdW0pCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAg ICAjIworLSAgICAgICMgQSBQb2ludGVyIHRvIGFub3RoZXIgRE5TIG5hbWUuCistCistICAgICAg Y2xhc3MgUFRSIDwgRG9tYWluTmFtZQorLSAgICAgICAgVHlwZVZhbHVlID0gMTIgIyA6bm9kb2M6 CistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIEhvc3QgSW5mb3JtYXRpb24gcmVz b3VyY2UuCistCistICAgICAgY2xhc3MgSElORk8gPCBSZXNvdXJjZQorLQorLSAgICAgICAgVHlw ZVZhbHVlID0gMTMgIyA6bm9kb2M6CistCistICAgICAgICAjIworLSAgICAgICAgIyBDcmVhdGVz IGEgbmV3IEhJTkZPIHJ1bm5pbmcgK29zKyBvbiArY3B1Ky4KKy0KKy0gICAgICAgIGRlZiBpbml0 aWFsaXplKGNwdSwgb3MpCistICAgICAgICAgIEBjcHUgPSBjcHUKKy0gICAgICAgICAgQG9zID0g b3MKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgQ1BVIGFyY2hpdGVj dHVyZSBmb3IgdGhpcyByZXNvdXJjZS4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDpjcHUKKy0K Ky0gICAgICAgICMjCistICAgICAgICAjIE9wZXJhdGluZyBzeXN0ZW0gZm9yIHRoaXMgcmVzb3Vy Y2UuCistCistICAgICAgICBhdHRyX3JlYWRlciA6b3MKKy0KKy0gICAgICAgIGRlZiBlbmNvZGVf cmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgbXNnLnB1dF9zdHJpbmcoQGNwdSkKKy0g ICAgICAgICAgbXNnLnB1dF9zdHJpbmcoQG9zKQorLSAgICAgICAgZW5kCistCistICAgICAgICBk ZWYgc2VsZi5kZWNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgY3B1ID0gbXNn LmdldF9zdHJpbmcKKy0gICAgICAgICAgb3MgPSBtc2cuZ2V0X3N0cmluZworLSAgICAgICAgICBy ZXR1cm4gc2VsZi5uZXcoY3B1LCBvcykKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAg ICAgICMjCistICAgICAgIyBNYWlsaW5nIGxpc3Qgb3IgbWFpbGJveCBpbmZvcm1hdGlvbi4KKy0K Ky0gICAgICBjbGFzcyBNSU5GTyA8IFJlc291cmNlCistCistICAgICAgICBUeXBlVmFsdWUgPSAx NCAjIDpub2RvYzoKKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKHJtYWlsYngsIGVtYWlsYngp CistICAgICAgICAgIEBybWFpbGJ4ID0gcm1haWxieAorLSAgICAgICAgICBAZW1haWxieCA9IGVt YWlsYngKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgRG9tYWluIG5h bWUgcmVzcG9uc2libGUgZm9yIHRoaXMgbWFpbCBsaXN0IG9yIG1haWxib3guCistCistICAgICAg ICBhdHRyX3JlYWRlciA6cm1haWxieAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgTWFpbGJv eCB0byB1c2UgZm9yIGVycm9yIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIG1haWwgbGlzdCBvciBt YWlsYm94LgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOmVtYWlsYngKKy0KKy0gICAgICAgIGRl ZiBlbmNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgbXNnLnB1dF9uYW1lKEBy bWFpbGJ4KQorLSAgICAgICAgICBtc2cucHV0X25hbWUoQGVtYWlsYngpCistICAgICAgICBlbmQK Ky0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAg ICAgICBybWFpbGJ4ID0gbXNnLmdldF9zdHJpbmcKKy0gICAgICAgICAgZW1haWxieCA9IG1zZy5n ZXRfc3RyaW5nCistICAgICAgICAgIHJldHVybiBzZWxmLm5ldyhybWFpbGJ4LCBlbWFpbGJ4KQor LSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgIyMKKy0gICAgICAjIE1haWwgRXhj aGFuZ2VyIHJlc291cmNlLgorLQorLSAgICAgIGNsYXNzIE1YIDwgUmVzb3VyY2UKKy0KKy0gICAg ICAgIFR5cGVWYWx1ZT0gMTUgIyA6bm9kb2M6CistCistICAgICAgICAjIworLSAgICAgICAgIyBD cmVhdGVzIGEgbmV3IE1YIHJlY29yZCB3aXRoICtwcmVmZXJlbmNlKywgYWNjZXB0aW5nIG1haWwg YXQKKy0gICAgICAgICMgK2V4Y2hhbmdlKy4KKy0KKy0gICAgICAgIGRlZiBpbml0aWFsaXplKHBy ZWZlcmVuY2UsIGV4Y2hhbmdlKQorLSAgICAgICAgICBAcHJlZmVyZW5jZSA9IHByZWZlcmVuY2UK Ky0gICAgICAgICAgQGV4Y2hhbmdlID0gZXhjaGFuZ2UKKy0gICAgICAgIGVuZAorLQorLSAgICAg ICAgIyMKKy0gICAgICAgICMgVGhlIHByZWZlcmVuY2UgZm9yIHRoaXMgTVguCistCistICAgICAg ICBhdHRyX3JlYWRlciA6cHJlZmVyZW5jZQorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgVGhl IGhvc3Qgb2YgdGhpcyBNWC4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDpleGNoYW5nZQorLQor LSAgICAgICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtc2cu cHV0X3BhY2soJ24nLCBAcHJlZmVyZW5jZSkKKy0gICAgICAgICAgbXNnLnB1dF9uYW1lKEBleGNo YW5nZSkKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlX3JkYXRhKG1z ZykgIyA6bm9kb2M6CistICAgICAgICAgIHByZWZlcmVuY2UsID0gbXNnLmdldF91bnBhY2soJ24n KQorLSAgICAgICAgICBleGNoYW5nZSA9IG1zZy5nZXRfbmFtZQorLSAgICAgICAgICByZXR1cm4g c2VsZi5uZXcocHJlZmVyZW5jZSwgZXhjaGFuZ2UpCistICAgICAgICBlbmQKKy0gICAgICBlbmQK Ky0KKy0gICAgICAjIworLSAgICAgICMgVW5zdHJ1Y3R1cmVkIHRleHQgcmVzb3VyY2UuCistCist ICAgICAgY2xhc3MgVFhUIDwgUmVzb3VyY2UKKy0KKy0gICAgICAgIFR5cGVWYWx1ZSA9IDE2ICMg Om5vZG9jOgorLQorLSAgICAgICAgZGVmIGluaXRpYWxpemUoZmlyc3Rfc3RyaW5nLCAqcmVzdF9z dHJpbmdzKQorLSAgICAgICAgICBAc3RyaW5ncyA9IFtmaXJzdF9zdHJpbmcsICpyZXN0X3N0cmlu Z3NdCistICAgICAgICBlbmQKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFJldHVybnMgYW4g QXJyYXkgb2YgU3RyaW5ncyBmb3IgdGhpcyBUWFQgcmVjb3JkLgorLQorLSAgICAgICAgYXR0cl9y ZWFkZXIgOnN0cmluZ3MKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFJldHVybnMgdGhlIGNv bmNhdGVuYXRlZCBzdHJpbmcgZnJvbSArc3RyaW5ncysuCistCistICAgICAgICBkZWYgZGF0YQor LSAgICAgICAgICBAc3RyaW5ncy5qb2luKCIiKQorLSAgICAgICAgZW5kCistCistICAgICAgICBk ZWYgZW5jb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIG1zZy5wdXRfc3RyaW5n X2xpc3QoQHN0cmluZ3MpCistICAgICAgICBlbmQKKy0KKy0gICAgICAgIGRlZiBzZWxmLmRlY29k ZV9yZGF0YShtc2cpICMgOm5vZG9jOgorLSAgICAgICAgICBzdHJpbmdzID0gbXNnLmdldF9zdHJp bmdfbGlzdAorLSAgICAgICAgICByZXR1cm4gc2VsZi5uZXcoKnN0cmluZ3MpCistICAgICAgICBl bmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgTG9jYXRpb24gcmVzb3VyY2UK Ky0KKy0gICAgICBjbGFzcyBMT0MgPCBSZXNvdXJjZQorLQorLSAgICAgICAgVHlwZVZhbHVlID0g MjkgIyA6bm9kb2M6CistCistICAgICAgICBkZWYgaW5pdGlhbGl6ZSh2ZXJzaW9uLCBzc2l6ZSwg aHByZWNpc2lvbiwgdnByZWNpc2lvbiwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUpCist ICAgICAgICAgIEB2ZXJzaW9uICAgID0gdmVyc2lvbgorLSAgICAgICAgICBAc3NpemUgICAgICA9 IEdlbTo6UmVzb2x2OjpMT0M6OlNpemUuY3JlYXRlKHNzaXplKQorLSAgICAgICAgICBAaHByZWNp c2lvbiA9IEdlbTo6UmVzb2x2OjpMT0M6OlNpemUuY3JlYXRlKGhwcmVjaXNpb24pCistICAgICAg ICAgIEB2cHJlY2lzaW9uID0gR2VtOjpSZXNvbHY6OkxPQzo6U2l6ZS5jcmVhdGUodnByZWNpc2lv bikKKy0gICAgICAgICAgQGxhdGl0dWRlICAgPSBHZW06OlJlc29sdjo6TE9DOjpDb29yZC5jcmVh dGUobGF0aXR1ZGUpCistICAgICAgICAgIEBsb25naXR1ZGUgID0gR2VtOjpSZXNvbHY6OkxPQzo6 Q29vcmQuY3JlYXRlKGxvbmdpdHVkZSkKKy0gICAgICAgICAgQGFsdGl0dWRlICAgPSBHZW06OlJl c29sdjo6TE9DOjpBbHQuY3JlYXRlKGFsdGl0dWRlKQorLSAgICAgICAgZW5kCistCistICAgICAg ICAjIworLSAgICAgICAgIyBSZXR1cm5zIHRoZSB2ZXJzaW9uIHZhbHVlIGZvciB0aGlzIExPQyBy ZWNvcmQgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSAwMAorLQorLSAgICAgICAgYXR0cl9yZWFkZXIg OnZlcnNpb24KKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFRoZSBzcGhlcmljYWwgc2l6ZSBv ZiB0aGlzIExPQworLSAgICAgICAgIyBpbiBtZXRlcnMgdXNpbmcgc2NpZW50aWZpYyBub3RhdGlv biBhcyAyIGludGVnZXJzIG9mIFhlWQorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOnNzaXplCist CistICAgICAgICAjIworLSAgICAgICAgIyBUaGUgaG9yaXpvbnRhbCBwcmVjaXNpb24gdXNpbmcg c3NpemUgdHlwZSB2YWx1ZXMKKy0gICAgICAgICMgaW4gbWV0ZXJzIHVzaW5nIHNjaWVudGlmaWMg bm90YXRpb24gYXMgMiBpbnRlZ2VycyBvZiBYZVkKKy0gICAgICAgICMgZm9yIHByZWNpc2lvbiB1 c2UgdmFsdWUvMiBlLmcuIDJtID0gKy8tMW0KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDpocHJl Y2lzaW9uCistCistICAgICAgICAjIworLSAgICAgICAgIyBUaGUgdmVydGljYWwgcHJlY2lzaW9u IHVzaW5nIHNzaXplIHR5cGUgdmFsdWVzCistICAgICAgICAjIGluIG1ldGVycyB1c2luZyBzY2ll bnRpZmljIG5vdGF0aW9uIGFzIDIgaW50ZWdlcnMgb2YgWGVZCistICAgICAgICAjIGZvciBwcmVj aXNpb24gdXNlIHZhbHVlLzIgZS5nLiAybSA9ICsvLTFtCistCistICAgICAgICBhdHRyX3JlYWRl ciA6dnByZWNpc2lvbgorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgVGhlIGxhdGl0dWRlIGZv ciB0aGlzIExPQyB3aGVyZSAyKiozMSBpcyB0aGUgZXF1YXRvcgorLSAgICAgICAgIyBpbiB0aG91 c2FuZHRocyBvZiBhbiBhcmMgc2Vjb25kIGFzIGFuIHVuc2lnbmVkIDMyYml0IGludGVnZXIKKy0K Ky0gICAgICAgIGF0dHJfcmVhZGVyIDpsYXRpdHVkZQorLQorLSAgICAgICAgIyMKKy0gICAgICAg ICMgVGhlIGxvbmdpdHVkZSBmb3IgdGhpcyBMT0Mgd2hlcmUgMioqMzEgaXMgdGhlIHByaW1lIG1l cmlkaWFuCistICAgICAgICAjIGluIHRob3VzYW5kdGhzIG9mIGFuIGFyYyBzZWNvbmQgYXMgYW4g dW5zaWduZWQgMzJiaXQgaW50ZWdlcgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOmxvbmdpdHVk ZQorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgVGhlIGFsdGl0dWRlIG9mIHRoZSBMT0MgYWJv dmUgYSByZWZlcmVuY2Ugc3BoZXJlIHdob3NlIHN1cmZhY2Ugc2l0cyAxMDBrbSBiZWxvdyB0aGUg V0dTODQgc3BoZXJvaWQKKy0gICAgICAgICMgaW4gY2VudGltZXRlcnMgYXMgYW4gdW5zaWduZWQg MzJiaXQgaW50ZWdlcgorLQorLSAgICAgICAgYXR0cl9yZWFkZXIgOmFsdGl0dWRlCistCistICAg ICAgICBkZWYgZW5jb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIG1zZy5wdXRf Ynl0ZXMoQHZlcnNpb24pCistICAgICAgICAgIG1zZy5wdXRfYnl0ZXMoQHNzaXplLnNjYWxhcikK Ky0gICAgICAgICAgbXNnLnB1dF9ieXRlcyhAaHByZWNpc2lvbi5zY2FsYXIpCistICAgICAgICAg IG1zZy5wdXRfYnl0ZXMoQHZwcmVjaXNpb24uc2NhbGFyKQorLSAgICAgICAgICBtc2cucHV0X2J5 dGVzKEBsYXRpdHVkZS5jb29yZGluYXRlcykKKy0gICAgICAgICAgbXNnLnB1dF9ieXRlcyhAbG9u Z2l0dWRlLmNvb3JkaW5hdGVzKQorLSAgICAgICAgICBtc2cucHV0X2J5dGVzKEBhbHRpdHVkZS5h bHRpdHVkZSkKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIHNlbGYuZGVjb2RlX3JkYXRh KG1zZykgIyA6bm9kb2M6CistICAgICAgICAgIHZlcnNpb24gICAgPSBtc2cuZ2V0X2J5dGVzKDEp CistICAgICAgICAgIHNzaXplICAgICAgPSBtc2cuZ2V0X2J5dGVzKDEpCistICAgICAgICAgIGhw cmVjaXNpb24gPSBtc2cuZ2V0X2J5dGVzKDEpCistICAgICAgICAgIHZwcmVjaXNpb24gPSBtc2cu Z2V0X2J5dGVzKDEpCistICAgICAgICAgIGxhdGl0dWRlICAgPSBtc2cuZ2V0X2J5dGVzKDQpCist ICAgICAgICAgIGxvbmdpdHVkZSAgPSBtc2cuZ2V0X2J5dGVzKDQpCistICAgICAgICAgIGFsdGl0 dWRlICAgPSBtc2cuZ2V0X2J5dGVzKDQpCistICAgICAgICAgIHJldHVybiBzZWxmLm5ldygKKy0g ICAgICAgICAgICB2ZXJzaW9uLAorLSAgICAgICAgICAgIEdlbTo6UmVzb2x2OjpMT0M6OlNpemUu bmV3KHNzaXplKSwKKy0gICAgICAgICAgICBHZW06OlJlc29sdjo6TE9DOjpTaXplLm5ldyhocHJl Y2lzaW9uKSwKKy0gICAgICAgICAgICBHZW06OlJlc29sdjo6TE9DOjpTaXplLm5ldyh2cHJlY2lz aW9uKSwKKy0gICAgICAgICAgICBHZW06OlJlc29sdjo6TE9DOjpDb29yZC5uZXcobGF0aXR1ZGUs ImxhdCIpLAorLSAgICAgICAgICAgIEdlbTo6UmVzb2x2OjpMT0M6OkNvb3JkLm5ldyhsb25naXR1 ZGUsImxvbiIpLAorLSAgICAgICAgICAgIEdlbTo6UmVzb2x2OjpMT0M6OkFsdC5uZXcoYWx0aXR1 ZGUpCistICAgICAgICAgICkKKy0gICAgICAgIGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgICMj CistICAgICAgIyBBIFF1ZXJ5IHR5cGUgcmVxdWVzdGluZyBhbnkgUlIuCistCistICAgICAgY2xh c3MgQU5ZIDwgUXVlcnkKKy0gICAgICAgIFR5cGVWYWx1ZSA9IDI1NSAjIDpub2RvYzoKKy0gICAg ICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgQ0FBIHJlc291cmNlIHJlY29yZCBkZWZpbmVk IGluIFJGQyA4NjU5CistICAgICAgIworLSAgICAgICMgVGhlc2UgcmVjb3JkcyBpZGVudGlmeSBj ZXJ0aWZpY2F0ZSBhdXRob3JpdHkgYWxsb3dlZCB0byBpc3N1ZQorLSAgICAgICMgY2VydGlmaWNh dGVzIGZvciB0aGUgZ2l2ZW4gZG9tYWluLgorLQorLSAgICAgIGNsYXNzIENBQSA8IFJlc291cmNl CistICAgICAgICBUeXBlVmFsdWUgPSAyNTcKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIENy ZWF0ZXMgYSBuZXcgQ0FBIGZvciArZmxhZ3MrLCArdGFnKyBhbmQgK3ZhbHVlKy4KKy0KKy0gICAg ICAgIGRlZiBpbml0aWFsaXplKGZsYWdzLCB0YWcsIHZhbHVlKQorLSAgICAgICAgICB1bmxlc3Mg KDAuLjI1NSkgPT09IGZsYWdzCistICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXco J2ZsYWdzIG11c3QgYmUgYW4gSW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NScpCistICAgICAgICAg IGVuZAorLSAgICAgICAgICB1bmxlc3MgKDEuLjE1KSA9PT0gdGFnLmJ5dGVzaXplCistICAgICAg ICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoJ2xlbmd0aCBvZiB0YWcgbXVzdCBiZSBiZXR3 ZWVuIDEgYW5kIDE1JykKKy0gICAgICAgICAgZW5kCistCistICAgICAgICAgIEBmbGFncyA9IGZs YWdzCistICAgICAgICAgIEB0YWcgPSB0YWcKKy0gICAgICAgICAgQHZhbHVlID0gdmFsdWUKKy0g ICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgRmxhZ3MgZm9yIHRoaXMgcHJv cGVydHk6CistICAgICAgICAjIC0gQml0IDAgOiAwID0gbm90IGNyaXRpY2FsLCAxID0gY3JpdGlj YWwKKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDpmbGFncworLQorLSAgICAgICAgIyMKKy0gICAg ICAgICMgUHJvcGVydHkgdGFnICgiaXNzdWUiLCAiaXNzdWV3aWxkIiwgImlvZGVmIi4uLikuCist CistICAgICAgICBhdHRyX3JlYWRlciA6dGFnCistCistICAgICAgICAjIworLSAgICAgICAgIyBQ cm9wZXJ0eSB2YWx1ZS4KKy0KKy0gICAgICAgIGF0dHJfcmVhZGVyIDp2YWx1ZQorLQorLSAgICAg ICAgIyMKKy0gICAgICAgICMgV2hldGhlciB0aGUgY3JpdGljYWwgZmxhZyBpcyBzZXQgb24gdGhp cyBwcm9wZXJ0eS4KKy0KKy0gICAgICAgIGRlZiBjcml0aWNhbD8KKy0gICAgICAgICAgZmxhZ3Mg JiAweDgwICE9IDAKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgZGVmIGVuY29kZV9yZGF0YSht c2cpICMgOm5vZG9jOgorLSAgICAgICAgICBtc2cucHV0X3BhY2soJ0MnLCBAZmxhZ3MpCistICAg ICAgICAgIG1zZy5wdXRfc3RyaW5nKEB0YWcpCistICAgICAgICAgIG1zZy5wdXRfYnl0ZXMoQHZh bHVlKQorLSAgICAgICAgZW5kCistCistICAgICAgICBkZWYgc2VsZi5kZWNvZGVfcmRhdGEobXNn KSAjIDpub2RvYzoKKy0gICAgICAgICAgZmxhZ3MsID0gbXNnLmdldF91bnBhY2soJ0MnKQorLSAg ICAgICAgICB0YWcgPSBtc2cuZ2V0X3N0cmluZworLSAgICAgICAgICB2YWx1ZSA9IG1zZy5nZXRf Ynl0ZXMKKy0gICAgICAgICAgc2VsZi5uZXcgZmxhZ3MsIHRhZywgdmFsdWUKKy0gICAgICAgIGVu ZAorLSAgICAgIGVuZAorLQorLSAgICAgIENsYXNzSW5zZW5zaXRpdmVUeXBlcyA9IFsgIyA6bm9k b2M6CistICAgICAgICBOUywgQ05BTUUsIFNPQSwgUFRSLCBISU5GTywgTUlORk8sIE1YLCBUWFQs IExPQywgQU5ZLCBDQUEKKy0gICAgICBdCistCistICAgICAgIyMKKy0gICAgICAjIG1vZHVsZSBJ TiBjb250YWlucyBBUlBBIEludGVybmV0IHNwZWNpZmljIFJScy4KKy0KKy0gICAgICBtb2R1bGUg SU4KKy0KKy0gICAgICAgIENsYXNzVmFsdWUgPSAxICMgOm5vZG9jOgorLQorLSAgICAgICAgQ2xh c3NJbnNlbnNpdGl2ZVR5cGVzLmVhY2gge3xzfAorLSAgICAgICAgICBjID0gQ2xhc3MubmV3KHMp CistICAgICAgICAgIGMuY29uc3Rfc2V0KDpUeXBlVmFsdWUsIHM6OlR5cGVWYWx1ZSkKKy0gICAg ICAgICAgYy5jb25zdF9zZXQoOkNsYXNzVmFsdWUsIENsYXNzVmFsdWUpCistICAgICAgICAgIENs YXNzSGFzaFtbczo6VHlwZVZhbHVlLCBDbGFzc1ZhbHVlXV0gPSBjCistICAgICAgICAgIHNlbGYu Y29uc3Rfc2V0KHMubmFtZS5zdWIoLy4qOjovLCAnJyksIGMpCistICAgICAgICB9CistCistICAg ICAgICAjIworLSAgICAgICAgIyBJUHY0IEFkZHJlc3MgcmVzb3VyY2UKKy0KKy0gICAgICAgIGNs YXNzIEEgPCBSZXNvdXJjZQorLSAgICAgICAgICBUeXBlVmFsdWUgPSAxCistICAgICAgICAgIENs YXNzVmFsdWUgPSBJTjo6Q2xhc3NWYWx1ZQorLSAgICAgICAgICBDbGFzc0hhc2hbW1R5cGVWYWx1 ZSwgQ2xhc3NWYWx1ZV1dID0gc2VsZiAjIDpub2RvYzoKKy0KKy0gICAgICAgICAgIyMKKy0gICAg ICAgICAgIyBDcmVhdGVzIGEgbmV3IEEgZm9yICthZGRyZXNzKy4KKy0KKy0gICAgICAgICAgZGVm IGluaXRpYWxpemUoYWRkcmVzcykKKy0gICAgICAgICAgICBAYWRkcmVzcyA9IElQdjQuY3JlYXRl KGFkZHJlc3MpCistICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICAjIworLSAgICAgICAgICAj IFRoZSBHZW06OlJlc29sdjo6SVB2NCBhZGRyZXNzIGZvciB0aGlzIEEuCistCistICAgICAgICAg IGF0dHJfcmVhZGVyIDphZGRyZXNzCistCistICAgICAgICAgIGRlZiBlbmNvZGVfcmRhdGEobXNn KSAjIDpub2RvYzoKKy0gICAgICAgICAgICBtc2cucHV0X2J5dGVzKEBhZGRyZXNzLmFkZHJlc3Mp CistICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICBkZWYgc2VsZi5kZWNvZGVfcmRhdGEobXNn KSAjIDpub2RvYzoKKy0gICAgICAgICAgICByZXR1cm4gc2VsZi5uZXcoSVB2NC5uZXcobXNnLmdl dF9ieXRlcyg0KSkpCistICAgICAgICAgIGVuZAorLSAgICAgICAgZW5kCistCistICAgICAgICAj IworLSAgICAgICAgIyBXZWxsIEtub3duIFNlcnZpY2UgcmVzb3VyY2UuCistCistICAgICAgICBj bGFzcyBXS1MgPCBSZXNvdXJjZQorLSAgICAgICAgICBUeXBlVmFsdWUgPSAxMQorLSAgICAgICAg ICBDbGFzc1ZhbHVlID0gSU46OkNsYXNzVmFsdWUKKy0gICAgICAgICAgQ2xhc3NIYXNoW1tUeXBl VmFsdWUsIENsYXNzVmFsdWVdXSA9IHNlbGYgIyA6bm9kb2M6CistCistICAgICAgICAgIGRlZiBp bml0aWFsaXplKGFkZHJlc3MsIHByb3RvY29sLCBiaXRtYXApCistICAgICAgICAgICAgQGFkZHJl c3MgPSBJUHY0LmNyZWF0ZShhZGRyZXNzKQorLSAgICAgICAgICAgIEBwcm90b2NvbCA9IHByb3Rv Y29sCistICAgICAgICAgICAgQGJpdG1hcCA9IGJpdG1hcAorLSAgICAgICAgICBlbmQKKy0KKy0g ICAgICAgICAgIyMKKy0gICAgICAgICAgIyBUaGUgaG9zdCB0aGVzZSBzZXJ2aWNlcyBydW4gb24u CistCistICAgICAgICAgIGF0dHJfcmVhZGVyIDphZGRyZXNzCistCistICAgICAgICAgICMjCist ICAgICAgICAgICMgSVAgcHJvdG9jb2wgbnVtYmVyIGZvciB0aGVzZSBzZXJ2aWNlcy4KKy0KKy0g ICAgICAgICAgYXR0cl9yZWFkZXIgOnByb3RvY29sCistCistICAgICAgICAgICMjCistICAgICAg ICAgICMgQSBiaXQgbWFwIG9mIGVuYWJsZWQgc2VydmljZXMgb24gdGhpcyBob3N0LgorLSAgICAg ICAgICAjCistICAgICAgICAgICMgSWYgcHJvdG9jb2wgaXMgNiAoVENQKSB0aGVuIHRoZSAyNnRo IGJpdCBjb3JyZXNwb25kcyB0byB0aGUgU01UUAorLSAgICAgICAgICAjIHNlcnZpY2UgKHBvcnQg MjUpLiAgSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuIFNNVFAgc2VydmVyIHNob3VsZAorLSAg ICAgICAgICAjIGJlIGxpc3RlbmluZyBvbiBUQ1AgcG9ydCAyNTsgaWYgemVybywgU01UUCBzZXJ2 aWNlIGlzIG5vdAorLSAgICAgICAgICAjIHN1cHBvcnRlZC4KKy0KKy0gICAgICAgICAgYXR0cl9y ZWFkZXIgOmJpdG1hcAorLQorLSAgICAgICAgICBkZWYgZW5jb2RlX3JkYXRhKG1zZykgIyA6bm9k b2M6CistICAgICAgICAgICAgbXNnLnB1dF9ieXRlcyhAYWRkcmVzcy5hZGRyZXNzKQorLSAgICAg ICAgICAgIG1zZy5wdXRfcGFjaygibiIsIEBwcm90b2NvbCkKKy0gICAgICAgICAgICBtc2cucHV0 X2J5dGVzKEBiaXRtYXApCistICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICBkZWYgc2VsZi5k ZWNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgICBhZGRyZXNzID0gSVB2NC5u ZXcobXNnLmdldF9ieXRlcyg0KSkKKy0gICAgICAgICAgICBwcm90b2NvbCwgPSBtc2cuZ2V0X3Vu cGFjaygibiIpCistICAgICAgICAgICAgYml0bWFwID0gbXNnLmdldF9ieXRlcworLSAgICAgICAg ICAgIHJldHVybiBzZWxmLm5ldyhhZGRyZXNzLCBwcm90b2NvbCwgYml0bWFwKQorLSAgICAgICAg ICBlbmQKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgQW4gSVB2NiBh ZGRyZXNzIHJlY29yZC4KKy0KKy0gICAgICAgIGNsYXNzIEFBQUEgPCBSZXNvdXJjZQorLSAgICAg ICAgICBUeXBlVmFsdWUgPSAyOAorLSAgICAgICAgICBDbGFzc1ZhbHVlID0gSU46OkNsYXNzVmFs dWUKKy0gICAgICAgICAgQ2xhc3NIYXNoW1tUeXBlVmFsdWUsIENsYXNzVmFsdWVdXSA9IHNlbGYg IyA6bm9kb2M6CistCistICAgICAgICAgICMjCistICAgICAgICAgICMgQ3JlYXRlcyBhIG5ldyBB QUFBIGZvciArYWRkcmVzcysuCistCistICAgICAgICAgIGRlZiBpbml0aWFsaXplKGFkZHJlc3Mp CistICAgICAgICAgICAgQGFkZHJlc3MgPSBJUHY2LmNyZWF0ZShhZGRyZXNzKQorLSAgICAgICAg ICBlbmQKKy0KKy0gICAgICAgICAgIyMKKy0gICAgICAgICAgIyBUaGUgR2VtOjpSZXNvbHY6OklQ djYgYWRkcmVzcyBmb3IgdGhpcyBBQUFBLgorLQorLSAgICAgICAgICBhdHRyX3JlYWRlciA6YWRk cmVzcworLQorLSAgICAgICAgICBkZWYgZW5jb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAg ICAgICAgICAgbXNnLnB1dF9ieXRlcyhAYWRkcmVzcy5hZGRyZXNzKQorLSAgICAgICAgICBlbmQK Ky0KKy0gICAgICAgICAgZGVmIHNlbGYuZGVjb2RlX3JkYXRhKG1zZykgIyA6bm9kb2M6CistICAg ICAgICAgICAgcmV0dXJuIHNlbGYubmV3KElQdjYubmV3KG1zZy5nZXRfYnl0ZXMoMTYpKSkKKy0g ICAgICAgICAgZW5kCistICAgICAgICBlbmQKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFNS ViByZXNvdXJjZSByZWNvcmQgZGVmaW5lZCBpbiBSRkMgMjc4MgorLSAgICAgICAgIworLSAgICAg ICAgIyBUaGVzZSByZWNvcmRzIGlkZW50aWZ5IHRoZSBob3N0bmFtZSBhbmQgcG9ydCB0aGF0IGEg c2VydmljZSBpcworLSAgICAgICAgIyBhdmFpbGFibGUgYXQuCistCistICAgICAgICBjbGFzcyBT UlYgPCBSZXNvdXJjZQorLSAgICAgICAgICBUeXBlVmFsdWUgPSAzMworLSAgICAgICAgICBDbGFz c1ZhbHVlID0gSU46OkNsYXNzVmFsdWUKKy0gICAgICAgICAgQ2xhc3NIYXNoW1tUeXBlVmFsdWUs IENsYXNzVmFsdWVdXSA9IHNlbGYgIyA6bm9kb2M6CistCistICAgICAgICAgICMgQ3JlYXRlIGEg U1JWIHJlc291cmNlIHJlY29yZC4KKy0gICAgICAgICAgIworLSAgICAgICAgICAjIFNlZSB0aGUg ZG9jdW1lbnRhdGlvbiBmb3IgI3ByaW9yaXR5LCAjd2VpZ2h0LCAjcG9ydCBhbmQgI3RhcmdldAor LSAgICAgICAgICAjIGZvciArcHJpb3JpdHkrLCArd2VpZ2h0KywgK3BvcnQgYW5kICt0YXJnZXQr IHJlc3BlY3RpdmVseS4KKy0KKy0gICAgICAgICAgZGVmIGluaXRpYWxpemUocHJpb3JpdHksIHdl aWdodCwgcG9ydCwgdGFyZ2V0KQorLSAgICAgICAgICAgIEBwcmlvcml0eSA9IHByaW9yaXR5LnRv X2ludAorLSAgICAgICAgICAgIEB3ZWlnaHQgPSB3ZWlnaHQudG9faW50CistICAgICAgICAgICAg QHBvcnQgPSBwb3J0LnRvX2ludAorLSAgICAgICAgICAgIEB0YXJnZXQgPSBOYW1lLmNyZWF0ZSh0 YXJnZXQpCistICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICAjIFRoZSBwcmlvcml0eSBvZiB0 aGlzIHRhcmdldCBob3N0LgorLSAgICAgICAgICAjCistICAgICAgICAgICMgQSBjbGllbnQgTVVT VCBhdHRlbXB0IHRvIGNvbnRhY3QgdGhlIHRhcmdldCBob3N0IHdpdGggdGhlCistICAgICAgICAg ICMgbG93ZXN0LW51bWJlcmVkIHByaW9yaXR5IGl0IGNhbiByZWFjaDsgdGFyZ2V0IGhvc3RzIHdp dGggdGhlIHNhbWUKKy0gICAgICAgICAgIyBwcmlvcml0eSBTSE9VTEQgYmUgdHJpZWQgaW4gYW4g b3JkZXIgZGVmaW5lZCBieSB0aGUgd2VpZ2h0IGZpZWxkLgorLSAgICAgICAgICAjIFRoZSByYW5n ZSBpcyAwLTY1NTM1LiAgTm90ZSB0aGF0IGl0IGlzIG5vdCB3aWRlbHkgaW1wbGVtZW50ZWQgYW5k CistICAgICAgICAgICMgc2hvdWxkIGJlIHNldCB0byB6ZXJvLgorLQorLSAgICAgICAgICBhdHRy X3JlYWRlciA6cHJpb3JpdHkKKy0KKy0gICAgICAgICAgIyBBIHNlcnZlciBzZWxlY3Rpb24gbWVj aGFuaXNtLgorLSAgICAgICAgICAjCistICAgICAgICAgICMgVGhlIHdlaWdodCBmaWVsZCBzcGVj aWZpZXMgYSByZWxhdGl2ZSB3ZWlnaHQgZm9yIGVudHJpZXMgd2l0aCB0aGUKKy0gICAgICAgICAg IyBzYW1lIHByaW9yaXR5LiBMYXJnZXIgd2VpZ2h0cyBTSE9VTEQgYmUgZ2l2ZW4gYSBwcm9wb3J0 aW9uYXRlbHkKKy0gICAgICAgICAgIyBoaWdoZXIgcHJvYmFiaWxpdHkgb2YgYmVpbmcgc2VsZWN0 ZWQuIFRoZSByYW5nZSBvZiB0aGlzIG51bWJlciBpcworLSAgICAgICAgICAjIDAtNjU1MzUuICBE b21haW4gYWRtaW5pc3RyYXRvcnMgU0hPVUxEIHVzZSBXZWlnaHQgMCB3aGVuIHRoZXJlCistICAg ICAgICAgICMgaXNuJ3QgYW55IHNlcnZlciBzZWxlY3Rpb24gdG8gZG8sIHRvIG1ha2UgdGhlIFJS IGVhc2llciB0byByZWFkCistICAgICAgICAgICMgZm9yIGh1bWFucyAobGVzcyBub2lzeSkuIE5v dGUgdGhhdCBpdCBpcyBub3Qgd2lkZWx5IGltcGxlbWVudGVkCistICAgICAgICAgICMgYW5kIHNo b3VsZCBiZSBzZXQgdG8gemVyby4KKy0KKy0gICAgICAgICAgYXR0cl9yZWFkZXIgOndlaWdodAor LQorLSAgICAgICAgICAjIFRoZSBwb3J0IG9uIHRoaXMgdGFyZ2V0IGhvc3Qgb2YgdGhpcyBzZXJ2 aWNlLgorLSAgICAgICAgICAjCistICAgICAgICAgICMgVGhlIHJhbmdlIGlzIDAtNjU1MzUuCist CistICAgICAgICAgIGF0dHJfcmVhZGVyIDpwb3J0CistCistICAgICAgICAgICMgVGhlIGRvbWFp biBuYW1lIG9mIHRoZSB0YXJnZXQgaG9zdC4KKy0gICAgICAgICAgIworLSAgICAgICAgICAjIEEg dGFyZ2V0IG9mICIuIiBtZWFucyB0aGF0IHRoZSBzZXJ2aWNlIGlzIGRlY2lkZWRseSBub3QgYXZh aWxhYmxlCistICAgICAgICAgICMgYXQgdGhpcyBkb21haW4uCistCistICAgICAgICAgIGF0dHJf cmVhZGVyIDp0YXJnZXQKKy0KKy0gICAgICAgICAgZGVmIGVuY29kZV9yZGF0YShtc2cpICMgOm5v ZG9jOgorLSAgICAgICAgICAgIG1zZy5wdXRfcGFjaygibiIsIEBwcmlvcml0eSkKKy0gICAgICAg ICAgICBtc2cucHV0X3BhY2soIm4iLCBAd2VpZ2h0KQorLSAgICAgICAgICAgIG1zZy5wdXRfcGFj aygibiIsIEBwb3J0KQorLSAgICAgICAgICAgIG1zZy5wdXRfbmFtZShAdGFyZ2V0LCBjb21wcmVz czogZmFsc2UpCistICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICBkZWYgc2VsZi5kZWNvZGVf cmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgICBwcmlvcml0eSwgPSBtc2cuZ2V0X3Vu cGFjaygibiIpCistICAgICAgICAgICAgd2VpZ2h0LCAgID0gbXNnLmdldF91bnBhY2soIm4iKQor LSAgICAgICAgICAgIHBvcnQsICAgICA9IG1zZy5nZXRfdW5wYWNrKCJuIikKKy0gICAgICAgICAg ICB0YXJnZXQgICAgPSBtc2cuZ2V0X25hbWUKKy0gICAgICAgICAgICByZXR1cm4gc2VsZi5uZXco cHJpb3JpdHksIHdlaWdodCwgcG9ydCwgdGFyZ2V0KQorLSAgICAgICAgICBlbmQKKy0gICAgICAg IGVuZAorLQorLSAgICAgICAgIyMKKy0gICAgICAgICMgQ29tbW9uIGltcGxlbWVudGF0aW9uIGZv ciBTVkNCLWNvbXBhdGlibGUgcmVzb3VyY2UgcmVjb3Jkcy4KKy0KKy0gICAgICAgIGNsYXNzIFNl cnZpY2VCaW5kaW5nCistCistICAgICAgICAgICMjCistICAgICAgICAgICMgQ3JlYXRlIGEgc2Vy dmljZSBiaW5kaW5nIHJlc291cmNlIHJlY29yZC4KKy0KKy0gICAgICAgICAgZGVmIGluaXRpYWxp emUocHJpb3JpdHksIHRhcmdldCwgcGFyYW1zID0gW10pCistICAgICAgICAgICAgQHByaW9yaXR5 ID0gcHJpb3JpdHkudG9faW50CistICAgICAgICAgICAgQHRhcmdldCA9IE5hbWUuY3JlYXRlKHRh cmdldCkKKy0gICAgICAgICAgICBAcGFyYW1zID0gU3ZjUGFyYW1zLm5ldyhwYXJhbXMpCistICAg ICAgICAgIGVuZAorLQorLSAgICAgICAgICAjIworLSAgICAgICAgICAjIFRoZSBwcmlvcml0eSBv ZiB0aGlzIHRhcmdldCBob3N0LgorLSAgICAgICAgICAjCistICAgICAgICAgICMgVGhlIHJhbmdl IGlzIDAtNjU1MzUuCistICAgICAgICAgICMgSWYgc2V0IHRvIDAsIHRoaXMgUlIgaXMgaW4gQWxp YXNNb2RlLiBPdGhlcndpc2UsIGl0IGlzIGluIFNlcnZpY2VNb2RlLgorLQorLSAgICAgICAgICBh dHRyX3JlYWRlciA6cHJpb3JpdHkKKy0KKy0gICAgICAgICAgIyMKKy0gICAgICAgICAgIyBUaGUg ZG9tYWluIG5hbWUgb2YgdGhlIHRhcmdldCBob3N0LgorLQorLSAgICAgICAgICBhdHRyX3JlYWRl ciA6dGFyZ2V0CistCistICAgICAgICAgICMjCistICAgICAgICAgICMgVGhlIHNlcnZpY2UgcGFy YW1ldGVycyBmb3IgdGhlIHRhcmdldCBob3N0LgorLQorLSAgICAgICAgICBhdHRyX3JlYWRlciA6 cGFyYW1zCistCistICAgICAgICAgICMjCistICAgICAgICAgICMgV2hldGhlciB0aGlzIFJSIGlz IGluIEFsaWFzTW9kZS4KKy0KKy0gICAgICAgICAgZGVmIGFsaWFzX21vZGU/CistICAgICAgICAg ICAgc2VsZi5wcmlvcml0eSA9PSAwCistICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICAjIwor LSAgICAgICAgICAjIFdoZXRoZXIgdGhpcyBSUiBpcyBpbiBTZXJ2aWNlTW9kZS4KKy0KKy0gICAg ICAgICAgZGVmIHNlcnZpY2VfbW9kZT8KKy0gICAgICAgICAgICAhYWxpYXNfbW9kZT8KKy0gICAg ICAgICAgZW5kCistCistICAgICAgICAgIGRlZiBlbmNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoK Ky0gICAgICAgICAgICBtc2cucHV0X3BhY2soIm4iLCBAcHJpb3JpdHkpCistICAgICAgICAgICAg bXNnLnB1dF9uYW1lKEB0YXJnZXQsIGNvbXByZXNzOiBmYWxzZSkKKy0gICAgICAgICAgICBAcGFy YW1zLmVuY29kZShtc2cpCistICAgICAgICAgIGVuZAorLQorLSAgICAgICAgICBkZWYgc2VsZi5k ZWNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKKy0gICAgICAgICAgICBwcmlvcml0eSwgPSBtc2cu Z2V0X3VucGFjaygibiIpCistICAgICAgICAgICAgdGFyZ2V0ICAgID0gbXNnLmdldF9uYW1lCist ICAgICAgICAgICAgcGFyYW1zICAgID0gU3ZjUGFyYW1zLmRlY29kZShtc2cpCistICAgICAgICAg ICAgcmV0dXJuIHNlbGYubmV3KHByaW9yaXR5LCB0YXJnZXQsIHBhcmFtcykKKy0gICAgICAgICAg ZW5kCistICAgICAgICBlbmQKKy0KKy0gICAgICAgICMjCistICAgICAgICAjIFNWQ0IgcmVzb3Vy Y2UgcmVjb3JkIFtSRkM5NDYwXQorLQorLSAgICAgICAgY2xhc3MgU1ZDQiA8IFNlcnZpY2VCaW5k aW5nCistICAgICAgICAgIFR5cGVWYWx1ZSA9IDY0CistICAgICAgICAgIENsYXNzVmFsdWUgPSBJ Tjo6Q2xhc3NWYWx1ZQorLSAgICAgICAgICBDbGFzc0hhc2hbW1R5cGVWYWx1ZSwgQ2xhc3NWYWx1 ZV1dID0gc2VsZiAjIDpub2RvYzoKKy0gICAgICAgIGVuZAorLQorLSAgICAgICAgIyMKKy0gICAg ICAgICMgSFRUUFMgcmVzb3VyY2UgcmVjb3JkIFtSRkM5NDYwXQorLQorLSAgICAgICAgY2xhc3Mg SFRUUFMgPCBTZXJ2aWNlQmluZGluZworLSAgICAgICAgICBUeXBlVmFsdWUgPSA2NQorLSAgICAg ICAgICBDbGFzc1ZhbHVlID0gSU46OkNsYXNzVmFsdWUKKy0gICAgICAgICAgQ2xhc3NIYXNoW1tU eXBlVmFsdWUsIENsYXNzVmFsdWVdXSA9IHNlbGYgIyA6bm9kb2M6CistICAgICAgICBlbmQKKy0g ICAgICBlbmQKKy0gICAgZW5kCistICBlbmQKKy0KKy0gICMjCistICAjIEEgR2VtOjpSZXNvbHY6 OkROUyBJUHY0IGFkZHJlc3MuCistCistICBjbGFzcyBJUHY0CistCistICAgIFJlZ2V4MjU2ID0g LzAKKy0gICAgICAgICAgICAgICB8MSg/OlswLTldWzAtOV0/KT8KKy0gICAgICAgICAgICAgICB8 Mig/OlswLTRdWzAtOV0/fDVbMC01XT98WzYtOV0pPworLSAgICAgICAgICAgICAgIHxbMy05XVsw LTldPy94ICMgOm5vZG9jOgorLQorLSAgICAjIworLSAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiBJ UHY0IGFkZHJlc3NlcyBtdXN0IG1hdGNoLgorLSAgICBSZWdleCA9IC9cQSgje1JlZ2V4MjU2fSlc Ligje1JlZ2V4MjU2fSlcLigje1JlZ2V4MjU2fSlcLigje1JlZ2V4MjU2fSlcei8KKy0KKy0gICAg IyMKKy0gICAgIyBDcmVhdGVzIGEgbmV3IElQdjQgYWRkcmVzcyBmcm9tICthcmcrIHdoaWNoIG1h eSBiZToKKy0gICAgIworLSAgICAjIElQdjQ6OiByZXR1cm5zICthcmcrLgorLSAgICAjIFN0cmlu Zzo6ICthcmcrIG11c3QgbWF0Y2ggdGhlIElQdjQ6OlJlZ2V4IGNvbnN0YW50CistCistICAgIGRl ZiBzZWxmLmNyZWF0ZShhcmcpCistICAgICAgY2FzZSBhcmcKKy0gICAgICB3aGVuIElQdjQKKy0g ICAgICAgIHJldHVybiBhcmcKKy0gICAgICB3aGVuIFJlZ2V4CistICAgICAgICBpZiAoMC4uMjU1 KSA9PT0gKGEgPSAkMS50b19pKSAmJgorLSAgICAgICAgICAgKDAuLjI1NSkgPT09IChiID0gJDIu dG9faSkgJiYKKy0gICAgICAgICAgICgwLi4yNTUpID09PSAoYyA9ICQzLnRvX2kpICYmCistICAg ICAgICAgICAoMC4uMjU1KSA9PT0gKGQgPSAkNC50b19pKQorLSAgICAgICAgICByZXR1cm4gc2Vs Zi5uZXcoW2EsIGIsIGMsIGRdLnBhY2soIkNDQ0MiKSkKKy0gICAgICAgIGVsc2UKKy0gICAgICAg ICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoIklQdjQgYWRkcmVzcyB3aXRoIGludmFsaWQgdmFs dWU6ICIgKyBhcmcpCistICAgICAgICBlbmQKKy0gICAgICBlbHNlCistICAgICAgICByYWlzZSBB cmd1bWVudEVycm9yLm5ldygiY2Fubm90IGludGVycHJldCBhcyBJUHY0IGFkZHJlc3M6ICN7YXJn Lmluc3BlY3R9IikKKy0gICAgICBlbmQKKy0gICAgZW5kCistCistICAgIGRlZiBpbml0aWFsaXpl KGFkZHJlc3MpICMgOm5vZG9jOgorLSAgICAgIHVubGVzcyBhZGRyZXNzLmtpbmRfb2Y/KFN0cmlu ZykKKy0gICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdJUHY0IGFkZHJlc3MgbXVzdCBiZSBh IHN0cmluZycKKy0gICAgICBlbmQKKy0gICAgICB1bmxlc3MgYWRkcmVzcy5sZW5ndGggPT0gNAor LSAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgIklQdjQgYWRkcmVzcyBleHBlY3RzIDQgYnl0 ZXMgYnV0ICN7YWRkcmVzcy5sZW5ndGh9IGJ5dGVzIgorLSAgICAgIGVuZAorLSAgICAgIEBhZGRy ZXNzID0gYWRkcmVzcworLSAgICBlbmQKKy0KKy0gICAgIyMKKy0gICAgIyBBIFN0cmluZyByZXBy ZXNlbnRhdGlvbiBvZiB0aGlzIElQdjQgYWRkcmVzcy4KKy0KKy0gICAgIyMKKy0gICAgIyBUaGUg cmF3IElQdjQgYWRkcmVzcyBhcyBhIFN0cmluZy4KKy0KKy0gICAgYXR0cl9yZWFkZXIgOmFkZHJl c3MKKy0KKy0gICAgZGVmIHRvX3MgIyA6bm9kb2M6CistICAgICAgcmV0dXJuIHNwcmludGYoIiVk LiVkLiVkLiVkIiwgKkBhZGRyZXNzLnVucGFjaygiQ0NDQyIpKQorLSAgICBlbmQKKy0KKy0gICAg ZGVmIGluc3BlY3QgIyA6bm9kb2M6CistICAgICAgcmV0dXJuICIjPCN7c2VsZi5jbGFzc30gI3tz ZWxmfT4iCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIFR1cm5zIHRoaXMgSVB2NCBhZGRy ZXNzIGludG8gYSBHZW06OlJlc29sdjo6RE5TOjpOYW1lLgorLQorLSAgICBkZWYgdG9fbmFtZQor LSAgICAgIHJldHVybiBETlM6Ok5hbWUuY3JlYXRlKAorLSAgICAgICAgJyVkLiVkLiVkLiVkLmlu LWFkZHIuYXJwYS4nICUgQGFkZHJlc3MudW5wYWNrKCdDQ0NDJykucmV2ZXJzZSkKKy0gICAgZW5k CistCistICAgIGRlZiA9PShvdGhlcikgIyA6bm9kb2M6CistICAgICAgcmV0dXJuIEBhZGRyZXNz ID09IG90aGVyLmFkZHJlc3MKKy0gICAgZW5kCistCistICAgIGRlZiBlcWw/KG90aGVyKSAjIDpu b2RvYzoKKy0gICAgICByZXR1cm4gc2VsZiA9PSBvdGhlcgorLSAgICBlbmQKKy0KKy0gICAgZGVm IGhhc2ggIyA6bm9kb2M6CistICAgICAgcmV0dXJuIEBhZGRyZXNzLmhhc2gKKy0gICAgZW5kCist ICBlbmQKKy0KKy0gICMjCistICAjIEEgR2VtOjpSZXNvbHY6OkROUyBJUHY2IGFkZHJlc3MuCist CistICBjbGFzcyBJUHY2CistCistICAgICMjCistICAgICMgSVB2NiBhZGRyZXNzIGZvcm1hdCBh OmI6YzpkOmU6ZjpnOmgKKy0gICAgUmVnZXhfOEhleCA9IC9cQQorLSAgICAgICg/OlswLTlBLUZh LWZdezEsNH06KXs3fQorLSAgICAgICAgIFswLTlBLUZhLWZdezEsNH0KKy0gICAgICBcei94Cist CistICAgICMjCistICAgICMgQ29tcHJlc3NlZCBJUHY2IGFkZHJlc3MgZm9ybWF0IGE6OmIKKy0K Ky0gICAgUmVnZXhfQ29tcHJlc3NlZEhleCA9IC9cQQorLSAgICAgICgoPzpbMC05QS1GYS1mXXsx LDR9KD86OlswLTlBLUZhLWZdezEsNH0pKik/KSA6OgorLSAgICAgICgoPzpbMC05QS1GYS1mXXsx LDR9KD86OlswLTlBLUZhLWZdezEsNH0pKik/KQorLSAgICAgIFx6L3gKKy0KKy0gICAgIyMKKy0g ICAgIyBJUHY0IG1hcHBlZCBJUHY2IGFkZHJlc3MgZm9ybWF0IGE6YjpjOmQ6ZTpmOncueC55LnoK Ky0KKy0gICAgUmVnZXhfNkhleDREZWMgPSAvXEEKKy0gICAgICAoKD86WzAtOUEtRmEtZl17MSw0 fTopezYsNn0pCistICAgICAgKFxkKylcLihcZCspXC4oXGQrKVwuKFxkKykKKy0gICAgICBcei94 CistCistICAgICMjCistICAgICMgQ29tcHJlc3NlZCBJUHY0IG1hcHBlZCBJUHY2IGFkZHJlc3Mg Zm9ybWF0IGE6OmI6dy54LnkuegorLQorLSAgICBSZWdleF9Db21wcmVzc2VkSGV4NERlYyA9IC9c QQorLSAgICAgICgoPzpbMC05QS1GYS1mXXsxLDR9KD86OlswLTlBLUZhLWZdezEsNH0pKik/KSA6 OgorLSAgICAgICgoPzpbMC05QS1GYS1mXXsxLDR9OikqKQorLSAgICAgIChcZCspXC4oXGQrKVwu KFxkKylcLihcZCspCistICAgICAgXHoveAorLQorLSAgICAjIworLSAgICAjIElQdjYgbGluayBs b2NhbCBhZGRyZXNzIGZvcm1hdCBmZTgwOmI6YzpkOmU6ZjpnOmglZW0xCistICAgIFJlZ2V4XzhI ZXhMaW5rTG9jYWwgPSAvXEEKKy0gICAgICBbRmZdW0VlXTgwCistICAgICAgKD86OlswLTlBLUZh LWZdezEsNH0pezd9CistICAgICAgJVstMC05QS1aYS16Ll9+XSsKKy0gICAgICBcei94CistCist ICAgICMjCistICAgICMgQ29tcHJlc3NlZCBJUHY2IGxpbmsgbG9jYWwgYWRkcmVzcyBmb3JtYXQg ZmU4MDo6YiVlbTEKKy0KKy0gICAgUmVnZXhfQ29tcHJlc3NlZEhleExpbmtMb2NhbCA9IC9cQQor LSAgICAgIFtGZl1bRWVdODA6CistICAgICAgKD86CistICAgICAgICAoKD86WzAtOUEtRmEtZl17 MSw0fSg/OjpbMC05QS1GYS1mXXsxLDR9KSopPykgOjoKKy0gICAgICAgICgoPzpbMC05QS1GYS1m XXsxLDR9KD86OlswLTlBLUZhLWZdezEsNH0pKik/KQorLSAgICAgICAgfAorLSAgICAgICAgOigo PzpbMC05QS1GYS1mXXsxLDR9KD86OlswLTlBLUZhLWZdezEsNH0pKik/KQorLSAgICAgICk/Cist ICAgICAgOlswLTlBLUZhLWZdezEsNH0lWy0wLTlBLVphLXouX35dKworLSAgICAgIFx6L3gKKy0K Ky0gICAgIyMKKy0gICAgIyBBIGNvbXBvc2l0ZSBJUHY2IGFkZHJlc3MgUmVnZXhwLgorLQorLSAg ICBSZWdleCA9IC8KKy0gICAgICAoPzoje1JlZ2V4XzhIZXh9KSB8CistICAgICAgKD86I3tSZWdl eF9Db21wcmVzc2VkSGV4fSkgfAorLSAgICAgICg/OiN7UmVnZXhfNkhleDREZWN9KSB8CistICAg ICAgKD86I3tSZWdleF9Db21wcmVzc2VkSGV4NERlY30pIHwKKy0gICAgICAoPzoje1JlZ2V4XzhI ZXhMaW5rTG9jYWx9KSB8CistICAgICAgKD86I3tSZWdleF9Db21wcmVzc2VkSGV4TGlua0xvY2Fs fSkKKy0gICAgICAveAorLQorLSAgICAjIworLSAgICAjIENyZWF0ZXMgYSBuZXcgSVB2NiBhZGRy ZXNzIGZyb20gK2FyZysgd2hpY2ggbWF5IGJlOgorLSAgICAjCistICAgICMgSVB2Njo6IHJldHVy bnMgK2FyZysuCistICAgICMgU3RyaW5nOjogK2FyZysgbXVzdCBtYXRjaCBvbmUgb2YgdGhlIElQ djY6OlJlZ2V4KiBjb25zdGFudHMKKy0KKy0gICAgZGVmIHNlbGYuY3JlYXRlKGFyZykKKy0gICAg ICBjYXNlIGFyZworLSAgICAgIHdoZW4gSVB2NgorLSAgICAgICAgcmV0dXJuIGFyZworLSAgICAg IHdoZW4gU3RyaW5nCistICAgICAgICBhZGRyZXNzID0gJycuYgorLSAgICAgICAgaWYgUmVnZXhf OEhleCA9fiBhcmcKKy0gICAgICAgICAgYXJnLnNjYW4oL1swLTlBLUZhLWZdKy8pIHt8aGV4fCBh ZGRyZXNzIDw8IFtoZXguaGV4XS5wYWNrKCduJyl9CistICAgICAgICBlbHNpZiBSZWdleF9Db21w cmVzc2VkSGV4ID1+IGFyZworLSAgICAgICAgICBwcmVmaXggPSAkMQorLSAgICAgICAgICBzdWZm aXggPSAkMgorLSAgICAgICAgICBhMSA9ICcnLmIKKy0gICAgICAgICAgYTIgPSAnJy5iCistICAg ICAgICAgIHByZWZpeC5zY2FuKC9bMC05QS1GYS1mXSsvKSB7fGhleHwgYTEgPDwgW2hleC5oZXhd LnBhY2soJ24nKX0KKy0gICAgICAgICAgc3VmZml4LnNjYW4oL1swLTlBLUZhLWZdKy8pIHt8aGV4 fCBhMiA8PCBbaGV4LmhleF0ucGFjaygnbicpfQorLSAgICAgICAgICBvbWl0bGVuID0gMTYgLSBh MS5sZW5ndGggLSBhMi5sZW5ndGgKKy0gICAgICAgICAgYWRkcmVzcyA8PCBhMSA8PCAiXDAiICog b21pdGxlbiA8PCBhMgorLSAgICAgICAgZWxzaWYgUmVnZXhfNkhleDREZWMgPX4gYXJnCistICAg ICAgICAgIHByZWZpeCwgYSwgYiwgYywgZCA9ICQxLCAkMi50b19pLCAkMy50b19pLCAkNC50b19p LCAkNS50b19pCistICAgICAgICAgIGlmICgwLi4yNTUpID09PSBhICYmICgwLi4yNTUpID09PSBi ICYmICgwLi4yNTUpID09PSBjICYmICgwLi4yNTUpID09PSBkCistICAgICAgICAgICAgcHJlZml4 LnNjYW4oL1swLTlBLUZhLWZdKy8pIHt8aGV4fCBhZGRyZXNzIDw8IFtoZXguaGV4XS5wYWNrKCdu Jyl9CistICAgICAgICAgICAgYWRkcmVzcyA8PCBbYSwgYiwgYywgZF0ucGFjaygnQ0NDQycpCist ICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLm5ldygibm90 IG51bWVyaWMgSVB2NiBhZGRyZXNzOiAiICsgYXJnKQorLSAgICAgICAgICBlbmQKKy0gICAgICAg IGVsc2lmIFJlZ2V4X0NvbXByZXNzZWRIZXg0RGVjID1+IGFyZworLSAgICAgICAgICBwcmVmaXgs IHN1ZmZpeCwgYSwgYiwgYywgZCA9ICQxLCAkMiwgJDMudG9faSwgJDQudG9faSwgJDUudG9faSwg JDYudG9faQorLSAgICAgICAgICBpZiAoMC4uMjU1KSA9PT0gYSAmJiAoMC4uMjU1KSA9PT0gYiAm JiAoMC4uMjU1KSA9PT0gYyAmJiAoMC4uMjU1KSA9PT0gZAorLSAgICAgICAgICAgIGExID0gJycu YgorLSAgICAgICAgICAgIGEyID0gJycuYgorLSAgICAgICAgICAgIHByZWZpeC5zY2FuKC9bMC05 QS1GYS1mXSsvKSB7fGhleHwgYTEgPDwgW2hleC5oZXhdLnBhY2soJ24nKX0KKy0gICAgICAgICAg ICBzdWZmaXguc2NhbigvWzAtOUEtRmEtZl0rLykge3xoZXh8IGEyIDw8IFtoZXguaGV4XS5wYWNr KCduJyl9CistICAgICAgICAgICAgb21pdGxlbiA9IDEyIC0gYTEubGVuZ3RoIC0gYTIubGVuZ3Ro CistICAgICAgICAgICAgYWRkcmVzcyA8PCBhMSA8PCAiXDAiICogb21pdGxlbiA8PCBhMiA8PCBb YSwgYiwgYywgZF0ucGFjaygnQ0NDQycpCistICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICBy YWlzZSBBcmd1bWVudEVycm9yLm5ldygibm90IG51bWVyaWMgSVB2NiBhZGRyZXNzOiAiICsgYXJn KQorLSAgICAgICAgICBlbmQKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgcmFpc2UgQXJndW1l bnRFcnJvci5uZXcoIm5vdCBudW1lcmljIElQdjYgYWRkcmVzczogIiArIGFyZykKKy0gICAgICAg IGVuZAorLSAgICAgICAgcmV0dXJuIElQdjYubmV3KGFkZHJlc3MpCistICAgICAgZWxzZQorLSAg ICAgICAgcmFpc2UgQXJndW1lbnRFcnJvci5uZXcoImNhbm5vdCBpbnRlcnByZXQgYXMgSVB2NiBh ZGRyZXNzOiAje2FyZy5pbnNwZWN0fSIpCistICAgICAgZW5kCistICAgIGVuZAorLQorLSAgICBk ZWYgaW5pdGlhbGl6ZShhZGRyZXNzKSAjIDpub2RvYzoKKy0gICAgICB1bmxlc3MgYWRkcmVzcy5r aW5kX29mPyhTdHJpbmcpICYmIGFkZHJlc3MubGVuZ3RoID09IDE2CistICAgICAgICByYWlzZSBB cmd1bWVudEVycm9yLm5ldygnSVB2NiBhZGRyZXNzIG11c3QgYmUgMTYgYnl0ZXMnKQorLSAgICAg IGVuZAorLSAgICAgIEBhZGRyZXNzID0gYWRkcmVzcworLSAgICBlbmQKKy0KKy0gICAgIyMKKy0g ICAgIyBUaGUgcmF3IElQdjYgYWRkcmVzcyBhcyBhIFN0cmluZy4KKy0KKy0gICAgYXR0cl9yZWFk ZXIgOmFkZHJlc3MKKy0KKy0gICAgZGVmIHRvX3MgIyA6bm9kb2M6CistICAgICAgc3ByaW50Zigi JXg6JXg6JXg6JXg6JXg6JXg6JXg6JXgiLCAqQGFkZHJlc3MudW5wYWNrKCJubm5ubm5ubiIpKS5z dWIoLyhefDopMCg6MCkrKDp8JCkvLCAnOjonKQorLSAgICBlbmQKKy0KKy0gICAgZGVmIGluc3Bl Y3QgIyA6bm9kb2M6CistICAgICAgcmV0dXJuICIjPCN7c2VsZi5jbGFzc30gI3tzZWxmfT4iCist ICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIFR1cm5zIHRoaXMgSVB2NiBhZGRyZXNzIGludG8g YSBHZW06OlJlc29sdjo6RE5TOjpOYW1lLgorLSAgICAjLS0KKy0gICAgIyBpcDYuYXJwYSBzaG91 bGQgYmUgc2VhcmNoZWQgdG9vLiBbUkZDMzE1Ml0KKy0KKy0gICAgZGVmIHRvX25hbWUKKy0gICAg ICByZXR1cm4gRE5TOjpOYW1lLm5ldygKKy0gICAgICAgIEBhZGRyZXNzLnVucGFjaygiSDMyIilb MF0uc3BsaXQoLy8pLnJldmVyc2UgKyBbJ2lwNicsICdhcnBhJ10pCistICAgIGVuZAorLQorLSAg ICBkZWYgPT0ob3RoZXIpICMgOm5vZG9jOgorLSAgICAgIHJldHVybiBAYWRkcmVzcyA9PSBvdGhl ci5hZGRyZXNzCistICAgIGVuZAorLQorLSAgICBkZWYgZXFsPyhvdGhlcikgIyA6bm9kb2M6Cist ICAgICAgcmV0dXJuIHNlbGYgPT0gb3RoZXIKKy0gICAgZW5kCistCistICAgIGRlZiBoYXNoICMg Om5vZG9jOgorLSAgICAgIHJldHVybiBAYWRkcmVzcy5oYXNoCistICAgIGVuZAorLSAgZW5kCist CistICAjIworLSAgIyBHZW06OlJlc29sdjo6TUROUyBpcyBhIG9uZS1zaG90IE11bHRpY2FzdCBE TlMgKG1ETlMpIHJlc29sdmVyLiAgSXQgYmxpbmRseQorLSAgIyBtYWtlcyBxdWVyaWVzIHRvIHRo ZSBtRE5TIGFkZHJlc3NlcyB3aXRob3V0IHVuZGVyc3RhbmRpbmcgYW55dGhpbmcgYWJvdXQKKy0g ICMgbXVsdGljYXN0IHBvcnRzLgorLSAgIworLSAgIyBJbmZvcm1hdGlvbiB0YWtlbiBmb3JtIHRo ZSBmb2xsb3dpbmcgcGxhY2VzOgorLSAgIworLSAgIyAqIFJGQyA2NzYyCistCistICBjbGFzcyBN RE5TIDwgRE5TCistCistICAgICMjCistICAgICMgRGVmYXVsdCBtRE5TIFBvcnQKKy0KKy0gICAg UG9ydCA9IDUzNTMKKy0KKy0gICAgIyMKKy0gICAgIyBEZWZhdWx0IElQdjQgbUROUyBhZGRyZXNz CistCistICAgIEFkZHJlc3NWNCA9ICcyMjQuMC4wLjI1MScKKy0KKy0gICAgIyMKKy0gICAgIyBE ZWZhdWx0IElQdjYgbUROUyBhZGRyZXNzCistCistICAgIEFkZHJlc3NWNiA9ICdmZjAyOjpmYicK Ky0KKy0gICAgIyMKKy0gICAgIyBEZWZhdWx0IG1ETlMgYWRkcmVzc2VzCistCistICAgIEFkZHJl c3NlcyA9IFsKKy0gICAgICBbQWRkcmVzc1Y0LCBQb3J0XSwKKy0gICAgICBbQWRkcmVzc1Y2LCBQ b3J0XSwKKy0gICAgXQorLQorLSAgICAjIworLSAgICAjIENyZWF0ZXMgYSBuZXcgb25lLXNob3Qg TXVsdGljYXN0IEROUyAobUROUykgcmVzb2x2ZXIuCistICAgICMKKy0gICAgIyArY29uZmlnX2lu Zm8rIGNhbiBiZToKKy0gICAgIworLSAgICAjIG5pbDo6CistICAgICMgICBVc2VzIHRoZSBkZWZh dWx0IG1ETlMgYWRkcmVzc2VzCistICAgICMKKy0gICAgIyBIYXNoOjoKKy0gICAgIyAgIE11c3Qg Y29udGFpbiA6bmFtZXNlcnZlciBvciA6bmFtZXNlcnZlcl9wb3J0IGxpa2UKKy0gICAgIyAgIEdl bTo6UmVzb2x2OjpETlMjaW5pdGlhbGl6ZS4KKy0KKy0gICAgZGVmIGluaXRpYWxpemUoY29uZmln X2luZm89bmlsKQorLSAgICAgIGlmIGNvbmZpZ19pbmZvIHRoZW4KKy0gICAgICAgIHN1cGVyKHsg bmFtZXNlcnZlcl9wb3J0OiBBZGRyZXNzZXMgfS5tZXJnZShjb25maWdfaW5mbykpCistICAgICAg ZWxzZQorLSAgICAgICAgc3VwZXIobmFtZXNlcnZlcl9wb3J0OiBBZGRyZXNzZXMpCistICAgICAg ZW5kCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEl0ZXJhdGVzIG92ZXIgYWxsIElQIGFk ZHJlc3NlcyBmb3IgK25hbWUrIHJldHJpZXZlZCBmcm9tIHRoZSBtRE5TCistICAgICMgcmVzb2x2 ZXIsIHByb3ZpZGVkIG5hbWUgZW5kcyB3aXRoICJsb2NhbCIuICBJZiB0aGUgbmFtZSBkb2VzIG5v dCBlbmQgaW4KKy0gICAgIyAibG9jYWwiIG5vIHJlY29yZHMgd2lsbCBiZSByZXR1cm5lZC4KKy0g ICAgIworLSAgICAjICtuYW1lKyBjYW4gYmUgYSBHZW06OlJlc29sdjo6RE5TOjpOYW1lIG9yIGEg U3RyaW5nLiAgUmV0cmlldmVkIGFkZHJlc3NlcyB3aWxsCistICAgICMgYmUgYSBHZW06OlJlc29s djo6SVB2NCBvciBHZW06OlJlc29sdjo6SVB2NgorLQorLSAgICBkZWYgZWFjaF9hZGRyZXNzKG5h bWUpCistICAgICAgbmFtZSA9IEdlbTo6UmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKG5hbWUpCist CistICAgICAgcmV0dXJuIHVubGVzcyBuYW1lWy0xXS50b19zID09ICdsb2NhbCcKKy0KKy0gICAg ICBzdXBlcihuYW1lKQorLSAgICBlbmQKKy0KKy0gICAgZGVmIG1ha2VfdWRwX3JlcXVlc3RlciAj IDpub2RvYzoKKy0gICAgICBuYW1lc2VydmVyX3BvcnQgPSBAY29uZmlnLm5hbWVzZXJ2ZXJfcG9y dAorLSAgICAgIFJlcXVlc3Rlcjo6TUROU09uZVNob3QubmV3KCpuYW1lc2VydmVyX3BvcnQpCist ICAgIGVuZAorLQorLSAgZW5kCistCistICBtb2R1bGUgTE9DICMgOm5vZG9jOgorLQorLSAgICAj IworLSAgICAjIEEgR2VtOjpSZXNvbHY6OkxPQzo6U2l6ZQorLQorLSAgICBjbGFzcyBTaXplCist CistICAgICAgIyBSZWd1bGFyIGV4cHJlc3Npb24gTE9DIHNpemUgbXVzdCBtYXRjaC4KKy0KKy0g ICAgICBSZWdleCA9IC9eKFxkK1wuKlxkKilbbV0kLworLQorLSAgICAgICMjCistICAgICAgIyBD cmVhdGVzIGEgbmV3IExPQzo6U2l6ZSBmcm9tICthcmcrIHdoaWNoIG1heSBiZToKKy0gICAgICAj CistICAgICAgIyBMT0M6OlNpemU6OiByZXR1cm5zICthcmcrLgorLSAgICAgICMgU3RyaW5nOjog K2FyZysgbXVzdCBtYXRjaCB0aGUgTE9DOjpTaXplOjpSZWdleCBjb25zdGFudAorLQorLSAgICAg IGRlZiBzZWxmLmNyZWF0ZShhcmcpCistICAgICAgICBjYXNlIGFyZworLSAgICAgICAgd2hlbiBT aXplCistICAgICAgICAgIHJldHVybiBhcmcKKy0gICAgICAgIHdoZW4gU3RyaW5nCistICAgICAg ICAgIHNjYWxhciA9ICcnCistICAgICAgICAgIGlmIFJlZ2V4ID1+IGFyZworLSAgICAgICAgICAg IHNjYWxhciA9IFsoKCQxLnRvX2YqKDFlMikpLnRvX2kudG9fc1swXS50b19pKigyKio0KSsoKCQx LnRvX2YqKDFlMikpLnRvX2kudG9fcy5sZW5ndGgtMSkpXS5wYWNrKCJDIikKKy0gICAgICAgICAg ZWxzZQorLSAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJub3QgYSBwcm9wZXJs eSBmb3JtZWQgU2l6ZSBzdHJpbmc6ICIgKyBhcmcpCistICAgICAgICAgIGVuZAorLSAgICAgICAg ICByZXR1cm4gU2l6ZS5uZXcoc2NhbGFyKQorLSAgICAgICAgZWxzZQorLSAgICAgICAgICByYWlz ZSBBcmd1bWVudEVycm9yLm5ldygiY2Fubm90IGludGVycHJldCBhcyBTaXplOiAje2FyZy5pbnNw ZWN0fSIpCistICAgICAgICBlbmQKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIEludGVybmFsIHVz ZTsgdXNlIHNlbGYuY3JlYXRlLgorLSAgICAgIGRlZiBpbml0aWFsaXplKHNjYWxhcikKKy0gICAg ICAgIEBzY2FsYXIgPSBzY2FsYXIKKy0gICAgICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMg VGhlIHJhdyBzaXplCistCistICAgICAgYXR0cl9yZWFkZXIgOnNjYWxhcgorLQorLSAgICAgIGRl ZiB0b19zICMgOm5vZG9jOgorLSAgICAgICAgcyA9IEBzY2FsYXIudW5wYWNrKCJIMiIpLmpvaW4u dG9fcworLSAgICAgICAgcmV0dXJuICgoc1swXS50b19pKSooMTAqKihzWzFdLnRvX2ktMikpKS50 b19zIDw8ICJtIgorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBpbnNwZWN0ICMgOm5vZG9jOgor LSAgICAgICAgcmV0dXJuICIjPCN7c2VsZi5jbGFzc30gI3tzZWxmfT4iCistICAgICAgZW5kCist CistICAgICAgZGVmID09KG90aGVyKSAjIDpub2RvYzoKKy0gICAgICAgIHJldHVybiBAc2NhbGFy ID09IG90aGVyLnNjYWxhcgorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlcWw/KG90aGVyKSAj IDpub2RvYzoKKy0gICAgICAgIHJldHVybiBzZWxmID09IG90aGVyCistICAgICAgZW5kCistCist ICAgICAgZGVmIGhhc2ggIyA6bm9kb2M6CistICAgICAgICByZXR1cm4gQHNjYWxhci5oYXNoCist ICAgICAgZW5kCistCistICAgIGVuZAorLQorLSAgICAjIworLSAgICAjIEEgR2VtOjpSZXNvbHY6 OkxPQzo6Q29vcmQKKy0KKy0gICAgY2xhc3MgQ29vcmQKKy0KKy0gICAgICAjIFJlZ3VsYXIgZXhw cmVzc2lvbiBMT0MgQ29vcmQgbXVzdCBtYXRjaC4KKy0KKy0gICAgICBSZWdleCA9IC9eKFxkKylc cyhcZCspXHMoXGQrXC5cZCspXHMoW05FU1ddKSQvCistCistICAgICAgIyMKKy0gICAgICAjIENy ZWF0ZXMgYSBuZXcgTE9DOjpDb29yZCBmcm9tICthcmcrIHdoaWNoIG1heSBiZToKKy0gICAgICAj CistICAgICAgIyBMT0M6OkNvb3JkOjogcmV0dXJucyArYXJnKy4KKy0gICAgICAjIFN0cmluZzo6 ICthcmcrIG11c3QgbWF0Y2ggdGhlIExPQzo6Q29vcmQ6OlJlZ2V4IGNvbnN0YW50CistCistICAg ICAgZGVmIHNlbGYuY3JlYXRlKGFyZykKKy0gICAgICAgIGNhc2UgYXJnCistICAgICAgICB3aGVu IENvb3JkCistICAgICAgICAgIHJldHVybiBhcmcKKy0gICAgICAgIHdoZW4gU3RyaW5nCistICAg ICAgICAgIGNvb3JkaW5hdGVzID0gJycKKy0gICAgICAgICAgaWYgUmVnZXggPX4gYXJnICYmICQx LnRvX2YgPCAxODAKKy0gICAgICAgICAgICBtID0gJH4KKy0gICAgICAgICAgICBoZW1pID0gKG1b NF1bL1tORV0vXSkgfHwgKG1bNF1bL1tTV10vXSkgPyAxIDogLTEKKy0gICAgICAgICAgICBjb29y ZGluYXRlcyA9IFsgKChtWzFdLnRvX2kqKDM2ZTUpKSArIChtWzJdLnRvX2kqKDZlNCkpICsKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtWzNdLnRvX2YqKDFlMykpKSAqIGhlbWkrKDIq KjMxKSBdLnBhY2soIk4iKQorLSAgICAgICAgICAgIG9yaWVudGF0aW9uID0gbVs0XVsvW05TXS9d ID8gJ2xhdCcgOiAnbG9uJworLSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgcmFpc2UgQXJn dW1lbnRFcnJvci5uZXcoIm5vdCBhIHByb3Blcmx5IGZvcm1lZCBDb29yZCBzdHJpbmc6ICIgKyBh cmcpCistICAgICAgICAgIGVuZAorLSAgICAgICAgICByZXR1cm4gQ29vcmQubmV3KGNvb3JkaW5h dGVzLG9yaWVudGF0aW9uKQorLSAgICAgICAgZWxzZQorLSAgICAgICAgICByYWlzZSBBcmd1bWVu dEVycm9yLm5ldygiY2Fubm90IGludGVycHJldCBhcyBDb29yZDogI3thcmcuaW5zcGVjdH0iKQor LSAgICAgICAgZW5kCistICAgICAgZW5kCistCistICAgICAgIyBJbnRlcm5hbCB1c2U7IHVzZSBz ZWxmLmNyZWF0ZS4KKy0gICAgICBkZWYgaW5pdGlhbGl6ZShjb29yZGluYXRlcyxvcmllbnRhdGlv bikKKy0gICAgICAgIHVubGVzcyBjb29yZGluYXRlcy5raW5kX29mPyhTdHJpbmcpCistICAgICAg ICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJDb29yZCBtdXN0IGJlIGEgMzJiaXQgdW5zaWdu ZWQgaW50ZWdlciBpbiBoZXggZm9ybWF0OiAje2Nvb3JkaW5hdGVzLmluc3BlY3R9IikKKy0gICAg ICAgIGVuZAorLSAgICAgICAgdW5sZXNzIG9yaWVudGF0aW9uLmtpbmRfb2Y/KFN0cmluZykgJiYg b3JpZW50YXRpb25bL15sb24kfF5sYXQkL10KKy0gICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJv ci5uZXcoJ0Nvb3JkIGV4cGVjdHMgb3JpZW50YXRpb24gdG8gYmUgYSBTdHJpbmcgYXJndW1lbnQg b2YgImxhdCIgb3IgImxvbiInKQorLSAgICAgICAgZW5kCistICAgICAgICBAY29vcmRpbmF0ZXMg PSBjb29yZGluYXRlcworLSAgICAgICAgQG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24KKy0gICAg ICBlbmQKKy0KKy0gICAgICAjIworLSAgICAgICMgVGhlIHJhdyBjb29yZGluYXRlcworLQorLSAg ICAgIGF0dHJfcmVhZGVyIDpjb29yZGluYXRlcworLQorLSAgICAgICMjIFRoZSBvcmllbnRhdGlv biBvZiB0aGUgaGVtaXNwaGVyZSBhcyAnbGF0JyBvciAnbG9uJworLQorLSAgICAgIGF0dHJfcmVh ZGVyIDpvcmllbnRhdGlvbgorLQorLSAgICAgIGRlZiB0b19zICMgOm5vZG9jOgorLSAgICAgICAg ICBjID0gQGNvb3JkaW5hdGVzLnVucGFjaygiTiIpLmpvaW4udG9faQorLSAgICAgICAgICB2YWwg ICAgICA9IChjIC0gKDIqKjMxKSkuYWJzCistICAgICAgICAgIGZyYWNzZWNzID0gKHZhbCAlIDFl MykudG9faS50b19zCistICAgICAgICAgIHZhbCAgICAgID0gdmFsIC8gMWUzCistICAgICAgICAg IHNlY3MgICAgID0gKHZhbCAlIDYwKS50b19pLnRvX3MKKy0gICAgICAgICAgdmFsICAgICAgPSB2 YWwgLyA2MAorLSAgICAgICAgICBtaW5zICAgICA9ICh2YWwgJSA2MCkudG9faS50b19zCistICAg ICAgICAgIGRlZ3MgICAgID0gKHZhbCAvIDYwKS50b19pLnRvX3MKKy0gICAgICAgICAgcG9zaSA9 IChjID49IDIqKjMxKQorLSAgICAgICAgICBjYXNlIHBvc2kKKy0gICAgICAgICAgd2hlbiB0cnVl CistICAgICAgICAgICAgaGVtaSA9IEBvcmllbnRhdGlvblsvXmxhdCQvXSA/ICJOIiA6ICJFIgor LSAgICAgICAgICBlbHNlCistICAgICAgICAgICAgaGVtaSA9IEBvcmllbnRhdGlvblsvXmxvbiQv XSA/ICJXIiA6ICJTIgorLSAgICAgICAgICBlbmQKKy0gICAgICAgICAgcmV0dXJuIGRlZ3MgPDwg IiAiIDw8IG1pbnMgPDwgIiAiIDw8IHNlY3MgPDwgIi4iIDw8IGZyYWNzZWNzIDw8ICIgIiA8PCBo ZW1pCistICAgICAgZW5kCistCistICAgICAgZGVmIGluc3BlY3QgIyA6bm9kb2M6CistICAgICAg ICByZXR1cm4gIiM8I3tzZWxmLmNsYXNzfSAje3NlbGZ9PiIKKy0gICAgICBlbmQKKy0KKy0gICAg ICBkZWYgPT0ob3RoZXIpICMgOm5vZG9jOgorLSAgICAgICAgcmV0dXJuIEBjb29yZGluYXRlcyA9 PSBvdGhlci5jb29yZGluYXRlcworLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlcWw/KG90aGVy KSAjIDpub2RvYzoKKy0gICAgICAgIHJldHVybiBzZWxmID09IG90aGVyCistICAgICAgZW5kCist CistICAgICAgZGVmIGhhc2ggIyA6bm9kb2M6CistICAgICAgICByZXR1cm4gQGNvb3JkaW5hdGVz Lmhhc2gKKy0gICAgICBlbmQKKy0KKy0gICAgZW5kCistCistICAgICMjCistICAgICMgQSBHZW06 OlJlc29sdjo6TE9DOjpBbHQKKy0KKy0gICAgY2xhc3MgQWx0CistCistICAgICAgIyBSZWd1bGFy IGV4cHJlc3Npb24gTE9DIEFsdCBtdXN0IG1hdGNoLgorLQorLSAgICAgIFJlZ2V4ID0gL14oWyst XSpcZCtcLipcZCopW21dJC8KKy0KKy0gICAgICAjIworLSAgICAgICMgQ3JlYXRlcyBhIG5ldyBM T0M6OkFsdCBmcm9tICthcmcrIHdoaWNoIG1heSBiZToKKy0gICAgICAjCistICAgICAgIyBMT0M6 OkFsdDo6IHJldHVybnMgK2FyZysuCistICAgICAgIyBTdHJpbmc6OiArYXJnKyBtdXN0IG1hdGNo IHRoZSBMT0M6OkFsdDo6UmVnZXggY29uc3RhbnQKKy0KKy0gICAgICBkZWYgc2VsZi5jcmVhdGUo YXJnKQorLSAgICAgICAgY2FzZSBhcmcKKy0gICAgICAgIHdoZW4gQWx0CistICAgICAgICAgIHJl dHVybiBhcmcKKy0gICAgICAgIHdoZW4gU3RyaW5nCistICAgICAgICAgIGFsdGl0dWRlID0gJycK Ky0gICAgICAgICAgaWYgUmVnZXggPX4gYXJnCistICAgICAgICAgICAgYWx0aXR1ZGUgPSBbKCQx LnRvX2YqKDFlMikpKygxZTcpXS5wYWNrKCJOIikKKy0gICAgICAgICAgZWxzZQorLSAgICAgICAg ICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJub3QgYSBwcm9wZXJseSBmb3JtZWQgQWx0IHN0 cmluZzogIiArIGFyZykKKy0gICAgICAgICAgZW5kCistICAgICAgICAgIHJldHVybiBBbHQubmV3 KGFsdGl0dWRlKQorLSAgICAgICAgZWxzZQorLSAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9y Lm5ldygiY2Fubm90IGludGVycHJldCBhcyBBbHQ6ICN7YXJnLmluc3BlY3R9IikKKy0gICAgICAg IGVuZAorLSAgICAgIGVuZAorLQorLSAgICAgICMgSW50ZXJuYWwgdXNlOyB1c2Ugc2VsZi5jcmVh dGUuCistICAgICAgZGVmIGluaXRpYWxpemUoYWx0aXR1ZGUpCistICAgICAgICBAYWx0aXR1ZGUg PSBhbHRpdHVkZQorLSAgICAgIGVuZAorLQorLSAgICAgICMjCistICAgICAgIyBUaGUgcmF3IGFs dGl0dWRlCistCistICAgICAgYXR0cl9yZWFkZXIgOmFsdGl0dWRlCistCistICAgICAgZGVmIHRv X3MgIyA6bm9kb2M6CistICAgICAgICBhID0gQGFsdGl0dWRlLnVucGFjaygiTiIpLmpvaW4udG9f aQorLSAgICAgICAgcmV0dXJuICgoYS50b19mLzFlMiktMWU1KS50b19zICsgIm0iCistICAgICAg ZW5kCistCistICAgICAgZGVmIGluc3BlY3QgIyA6bm9kb2M6CistICAgICAgICByZXR1cm4gIiM8 I3tzZWxmLmNsYXNzfSAje3NlbGZ9PiIKKy0gICAgICBlbmQKKy0KKy0gICAgICBkZWYgPT0ob3Ro ZXIpICMgOm5vZG9jOgorLSAgICAgICAgcmV0dXJuIEBhbHRpdHVkZSA9PSBvdGhlci5hbHRpdHVk ZQorLSAgICAgIGVuZAorLQorLSAgICAgIGRlZiBlcWw/KG90aGVyKSAjIDpub2RvYzoKKy0gICAg ICAgIHJldHVybiBzZWxmID09IG90aGVyCistICAgICAgZW5kCistCistICAgICAgZGVmIGhhc2gg IyA6bm9kb2M6CistICAgICAgICByZXR1cm4gQGFsdGl0dWRlLmhhc2gKKy0gICAgICBlbmQKKy0K Ky0gICAgZW5kCistCistICBlbmQKKy0KKy0gICMjCistICAjIERlZmF1bHQgcmVzb2x2ZXIgdG8g dXNlIGZvciBHZW06OlJlc29sdiBjbGFzcyBtZXRob2RzLgorLQorLSAgRGVmYXVsdFJlc29sdmVy ID0gc2VsZi5uZXcKKy0KKy0gICMjCistICAjIFJlcGxhY2VzIHRoZSByZXNvbHZlcnMgaW4gdGhl IGRlZmF1bHQgcmVzb2x2ZXIgd2l0aCArbmV3X3Jlc29sdmVycysuICBUaGlzCistICAjIGFsbG93 cyByZXNvbHZlcnMgdG8gYmUgY2hhbmdlZCBmb3IgcmVzb2x2LXJlcGxhY2UuCistCistICBkZWYg RGVmYXVsdFJlc29sdmVyLnJlcGxhY2VfcmVzb2x2ZXJzIG5ld19yZXNvbHZlcnMKKy0gICAgQHJl c29sdmVycyA9IG5ld19yZXNvbHZlcnMKKy0gIGVuZAorLQorLSAgIyMKKy0gICMgQWRkcmVzcyBS ZWdleHAgdG8gdXNlIGZvciBtYXRjaGluZyBJUCBhZGRyZXNzZXMuCistCistICBBZGRyZXNzUmVn ZXggPSAvKD86I3tJUHY0OjpSZWdleH0pfCg/OiN7SVB2Njo6UmVnZXh9KS8KKy0KKy1lbmQKCmRp ZmYgLS1naXQgYS9ydWJ5LTRfMC1wcjE4NTI4LXVwZGF0ZS1yZXNvbHYtMF83XzIucGF0Y2ggYi9y dWJ5LTRfMC1wcjE4NTI4LXVwZGF0ZS1yZXNvbHYtMF83XzIucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGU0OWYwZDIuLjAwMDAwMDAKLS0tIGEvcnVieS00XzAtcHIxODUyOC11 cGRhdGUtcmVzb2x2LTBfN18yLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTg0ICswLDAgQEAK LUZyb20gODhiYTFkNGUxMzcwZjQyMjFlMDYwZTRlZDUzZWYxOTE4MzRlNTgzOCBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKLUZyb206IEhpcm9zaGkgU0hJQkFUQSA8aHNidEBydWJ5LWxhbmcub3Jn PgotRGF0ZTogVGh1LCAyNyBBdWcgMjAyNiAxMjozMTo0OSArMDkwMAotU3ViamVjdDogW1BBVENI XSBCdW1wIHVwIHJlc29sdi0wLjcuMiBmb3IgUnVieSA0LjAKLQotQmFja3BvcnQgb2YgdGhlIEF1 Z3VzdCAyMDI2IHJlc29sdiBzZWN1cml0eSByZWxlYXNlLgotCi1DVkUtMjAyNi04MDIxMgotQ1ZF LTIwMjYtODAyMTMKLQotQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBPcHVzIDUgPG5vcmVwbHlAYW50 aHJvcGljLmNvbT4KLS0tLQotIGxpYi9yZXNvbHYucmIgICAgICAgICAgICAgICAgICAgICB8IDEx NCArKysrKysrKystLQotIHRlc3QvcmVzb2x2L3Rlc3RfZG5zLnJiICAgICAgICAgICB8IDMxOSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSB0ZXN0L3Jlc29sdi90ZXN0X3Jlc291cmNl LnJiICAgICAgfCAgNjEgKysrKysrCi0gdGVzdC9yZXNvbHYvdGVzdF9yZXNvdXJjZV9sZWFrLnJi IHwgMTAxICsrKysrKysrKysKLSA0IGZpbGVzIGNoYW5nZWQsIDU4MiBpbnNlcnRpb25zKCspLCAx MyBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9yZXNvbHYvdGVzdF9yZXNv dXJjZV9sZWFrLnJiCi0KLWRpZmYgLS1naXQgYS9saWIvcmVzb2x2LnJiIGIvbGliL3Jlc29sdi5y YgotaW5kZXggMGU2MmFhZjg1MTA0OTYuLmEyZmU2OTJiMzhmNmNmIDEwMDY0NAotLS0tIGEvbGli L3Jlc29sdi5yYgotKysrIGIvbGliL3Jlc29sdi5yYgotQEAgLTM1LDcgKzM1LDcgQEAKLSBjbGFz cyBSZXNvbHYKLSAKLSAgICMgVGhlIHZlcnNpb24gc3RyaW5nCi0tICBWRVJTSU9OID0gIjAuNy4w IgotKyAgVkVSU0lPTiA9ICIwLjcuMiIKLSAKLSAgICMjCi0gICAjIExvb2tzIHVwIHRoZSBmaXJz dCBJUCBhZGRyZXNzIGZvciArbmFtZSsuCi1AQCAtNDg3LDEzICs0ODcsMTggQEAgZGVmIGVhY2hf bmFtZShhZGRyZXNzKQotICAgICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QQotICAg ICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QUFBQQotICAgICAjICogUmVzb2x2OjpE TlM6OlJlc291cmNlOjpJTjo6QU5ZCi0rICAgICMgKiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklO OjpDQUEKLSAgICAgIyAqIFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46OkNOQU1FCi0gICAgICMg KiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpISU5GTwotKyAgICAjICogUmVzb2x2OjpETlM6 OlJlc291cmNlOjpJTjo6SFRUUFMKLSsgICAgIyAqIFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46 OkxPQwotICAgICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6TUlORk8KLSAgICAgIyAq IFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46Ok1YCi0gICAgICMgKiBSZXNvbHY6OkROUzo6UmVz b3VyY2U6OklOOjpOUwotICAgICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6UFRSCi0g ICAgICMgKiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpTT0EKLSsgICAgIyAqIFJlc29sdjo6 RE5TOjpSZXNvdXJjZTo6SU46OlNSVgotKyAgICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJ Tjo6U1ZDQgotICAgICAjICogUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6VFhUCi0gICAgICMg KiBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpXS1MKLSAgICAgIwotQEAgLTcyMSw3ICs3MjYs OCBAQCBkZWYgcmVxdWVzdChzZW5kZXIsIHRvdXQpCi0gICAgICAgICAgIGJlZ2luCi0gICAgICAg ICAgICAgcmVwbHksIGZyb20gPSByZWN2X3JlcGx5KHNlbGVjdF9yZXN1bHRbMF0pCi0gICAgICAg ICAgIHJlc2N1ZSBFcnJubzo6RUNPTk5SRUZVU0VELCAjIEdOVS9MaW51eCwgRnJlZUJTRAotLSAg ICAgICAgICAgICAgICAgRXJybm86OkVDT05OUkVTRVQgIyBXaW5kb3dzCi0rICAgICAgICAgICAg ICAgICBFcnJubzo6RUNPTk5SRVNFVCwgIyBXaW5kb3dzCi0rICAgICAgICAgICAgICAgICBFT0ZF cnJvcgotICAgICAgICAgICAgICMgTm8gbmFtZSBzZXJ2ZXIgcnVubmluZyBvbiB0aGUgc2VydmVy PwotICAgICAgICAgICAgICMgRG9uJ3Qgd2FpdCBhbnltb3JlLgotICAgICAgICAgICAgIHJhaXNl IFJlc29sdlRpbWVvdXQKLUBAIC05MzAsOCArOTM2LDExIEBAIGRlZiBpbml0aWFsaXplKGhvc3Qs IHBvcnQ9UG9ydCkKLSAgICAgICAgIGVuZAotIAotICAgICAgICAgZGVmIHJlY3ZfcmVwbHkocmVh ZGFibGVfc29ja3MpCi0tICAgICAgICAgIGxlbiA9IHJlYWRhYmxlX3NvY2tzWzBdLnJlYWQoMiku dW5wYWNrKCduJylbMF0KLSsgICAgICAgICAgbGVuX2RhdGEgPSByZWFkYWJsZV9zb2Nrc1swXS5y ZWFkKDIpCi0rICAgICAgICAgIHJhaXNlIEVPRkVycm9yIGlmIGxlbl9kYXRhLm5pbD8gfHwgbGVu X2RhdGEuYnl0ZXNpemUgIT0gMgotKyAgICAgICAgICBsZW4gPSBsZW5fZGF0YS51bnBhY2soJ24n KVswXQotICAgICAgICAgICByZXBseSA9IEBzb2Nrc1swXS5yZWFkKGxlbikKLSsgICAgICAgICAg cmFpc2UgRU9GRXJyb3IgaWYgcmVwbHkubmlsPyB8fCByZXBseS5ieXRlc2l6ZSAhPSBsZW4KLSAg ICAgICAgICAgcmV0dXJuIHJlcGx5LCBuaWwKLSAgICAgICAgIGVuZAotIAotQEAgLTEyNDQsNiAr MTI1MywxMyBAQCBkZWYgc2VsZi5zcGxpdChhcmcpCi0gCi0gICAgICAgY2xhc3MgU3RyICMgOm5v ZG9jOgotICAgICAgICAgZGVmIGluaXRpYWxpemUoc3RyaW5nKQotKyAgICAgICAgICAjIEEgbGFi ZWwgaXMgbGltaXRlZCB0byA2MyBvY3RldHMuIFtSRkMgMTAzNSAyLjMuNF0gQ2hlY2tpbmcgaXQg aGVyZQotKyAgICAgICAgICAjIG1ha2VzIGl0IGFuIGludmFyaWFudCBvZiB0aGUgb2JqZWN0OiBl dmVyeSBsYWJlbCwgaG93ZXZlciBpdCB3YXMKLSsgICAgICAgICAgIyBidWlsdCwgZml0cyBpbiBp dHMgbGVuZ3RoIG9jdGV0IGFuZCBjYW5ub3Qgd3JhcCBpdC4gQ2FsbGVycyB0dXJuCi0rICAgICAg ICAgICMgdGhpcyBpbnRvIHRoZSBlcnJvciB0aGVpciBvd24gY29udHJhY3QgcHJvbWlzZXMuCi0r ICAgICAgICAgIGlmIHN0cmluZy5ieXRlc2l6ZSA+IDYzCi0rICAgICAgICAgICAgcmFpc2UgQXJn dW1lbnRFcnJvciwgIkROUyBsYWJlbCBpcyB0b28gbG9uZyAoI3tzdHJpbmcuYnl0ZXNpemV9IGJ5 dGVzLCBtYXggNjMpOiAje3N0cmluZy5pbnNwZWN0fSIKLSsgICAgICAgICAgZW5kCi0gICAgICAg ICAgIEBzdHJpbmcgPSBzdHJpbmcKLSAgICAgICAgICAgIyBjYXNlIGluc2Vuc2l2aXR5IG9mIERO UyBsYWJlbHMgZG9lc24ndCBhcHBseSBub24tQVNDSUkgY2hhcmFjdGVycy4gW1JGQyA0MzQzXQot ICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyBAc3RyaW5nIGlzIGdpdmVuIGluIEFTQ0lJIGNvbXBh dGlibGUgZW5jb2RpbmcuCi1AQCAtMTI4OSw3ICsxMzA1LDI2IEBAIGRlZiBzZWxmLmNyZWF0ZShh cmcpCi0gICAgICAgICB3aGVuIE5hbWUKLSAgICAgICAgICAgcmV0dXJuIGFyZwotICAgICAgICAg d2hlbiBTdHJpbmcKLS0gICAgICAgICAgcmV0dXJuIE5hbWUubmV3KExhYmVsLnNwbGl0KGFyZyks IC9cLlx6LyA9fiBhcmcgPyB0cnVlIDogZmFsc2UpCi0rICAgICAgICAgICMgQSBob3N0bmFtZSBp cyBydW50aW1lIGRhdGEgcmF0aGVyIHRoYW4gYSBwcm9ncmFtbWluZyBtaXN0YWtlLCBzbwotKyAg ICAgICAgICAjIGJvdGggc2l6ZSBsaW1pdHMgc3VyZmFjZSBhcyBSZXNvbHZFcnJvciB0byBzdGF5 IHJlc2N1YWJsZSBhbG9uZ3NpZGUKLSsgICAgICAgICAgIyB0aGUgcmVzdCBvZiBuYW1lIHJlc29s dXRpb24uIFRoZSB0eXBlIGNoZWNrIGJlbG93IGlzIGEgY2FsbGVyCi0rICAgICAgICAgICMgbWlz dGFrZSBhbmQga2VlcHMgcmFpc2luZyBBcmd1bWVudEVycm9yLgotKyAgICAgICAgICBiZWdpbgot KyAgICAgICAgICAgIGxhYmVscyA9IExhYmVsLnNwbGl0KGFyZykKLSsgICAgICAgICAgcmVzY3Vl IEFyZ3VtZW50RXJyb3IgPT4gZQotKyAgICAgICAgICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldyhl Lm1lc3NhZ2UpCi0rICAgICAgICAgIGVuZAotKyAgICAgICAgICAjIExhYmVsOjpTdHIgZW5mb3Jj ZXMgdGhlIHBlci1sYWJlbCBsaW1pdC4gT25seSB0aGUgdG90YWwgaXMga25vd2FibGUKLSsgICAg ICAgICAgIyBoZXJlLCBhbmQgaXQgY291bnRzIHRoZSBlbmNvZGVkIGZvcm0sIHNvIHNpemUgc3Rh cnRzIGF0IDEgZm9yIHRoZQotKyAgICAgICAgICAjIHJvb3QgbGFiZWwncyB0ZXJtaW5hdGluZyB6 ZXJvIG9jdGV0LiBbUkZDIDEwMzUgMi4zLjQsIDMuMV0KLSsgICAgICAgICAgc2l6ZSA9IDEKLSsg ICAgICAgICAgbGFiZWxzLmVhY2ggZG8gfGxhYmVsfAotKyAgICAgICAgICAgIHNpemUgKz0gMSAr IGxhYmVsLnN0cmluZy5ieXRlc2l6ZQotKyAgICAgICAgICAgIGlmIHNpemUgPiAyNTUKLSsgICAg ICAgICAgICAgIHJhaXNlIFJlc29sdkVycm9yLm5ldygiRE5TIG5hbWUgaXMgdG9vIGxvbmcgKCN7 c2l6ZX0gb2N0ZXRzLCBtYXggMjU1KTogI3thcmcuaW5zcGVjdH0iKQotKyAgICAgICAgICAgIGVu ZAotKyAgICAgICAgICBlbmQKLSsgICAgICAgICAgcmV0dXJuIE5hbWUubmV3KGxhYmVscywgL1wu XHovID1+IGFyZyA/IHRydWUgOiBmYWxzZSkKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgcmFp c2UgQXJndW1lbnRFcnJvci5uZXcoImNhbm5vdCBpbnRlcnByZXQgYXMgRE5TIG5hbWU6ICN7YXJn Lmluc3BlY3R9IikKLSAgICAgICAgIGVuZAotQEAgLTE0MTEsMTIgKzE0NDYsMjQgQEAgZGVmID09 KG90aGVyKQotICAgICAgICAgICAgICAgIEByZCA9PSBvdGhlci5yZCAmJgotICAgICAgICAgICAg ICAgIEByYSA9PSBvdGhlci5yYSAmJgotICAgICAgICAgICAgICAgIEByY29kZSA9PSBvdGhlci5y Y29kZSAmJgotLSAgICAgICAgICAgICAgIEBxdWVzdGlvbiA9PSBvdGhlci5xdWVzdGlvbiAmJgot KyAgICAgICAgICAgICAgIHF1ZXN0aW9uX2VxdWFsPyhvdGhlci5xdWVzdGlvbikgJiYKLSAgICAg ICAgICAgICAgICBAYW5zd2VyID09IG90aGVyLmFuc3dlciAmJgotICAgICAgICAgICAgICAgIEBh dXRob3JpdHkgPT0gb3RoZXIuYXV0aG9yaXR5ICYmCi0gICAgICAgICAgICAgICAgQGFkZGl0aW9u YWwgPT0gb3RoZXIuYWRkaXRpb25hbAotICAgICAgIGVuZAotIAotKyAgICAgICMgQSBxdWVzdGlv biBob2xkcyB0aGUgcmVzb3VyY2UgY2xhc3MgaXRzZWxmLCBhbmQgZGVjb2RpbmcgY3JlYXRlcyBh IGZyZXNoCi0rICAgICAgIyBjbGFzcyBmb3IgZWFjaCB1bmtub3duIHR5cGUsIHNvIHRoZSBjbGFz c2VzIGNhbm5vdCBiZSBjb21wYXJlZCBieQotKyAgICAgICMgaWRlbnRpdHkgYWxvbmUuCi0rICAg ICAgcHJpdmF0ZSBkZWYgcXVlc3Rpb25fZXF1YWw/KG90aGVyX3F1ZXN0aW9uKSAjIDpub2RvYzoK LSsgICAgICAgIHJldHVybiBmYWxzZSB1bmxlc3MgQHF1ZXN0aW9uLmxlbmd0aCA9PSBvdGhlcl9x dWVzdGlvbi5sZW5ndGgKLSsgICAgICAgIEBxdWVzdGlvbi56aXAob3RoZXJfcXVlc3Rpb24pIHt8 KG5hbWUsIHR5cGVjbGFzcyksIChvX25hbWUsIG9fdHlwZWNsYXNzKXwKLSsgICAgICAgICAgcmV0 dXJuIGZhbHNlIHVubGVzcyBuYW1lID09IG9fbmFtZSAmJgotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlc291cmNlOjpHZW5lcmljLnR5cGVfY2xhc3NfZXF1YWw/KHR5cGVjbGFzcywg b190eXBlY2xhc3MpCi0rICAgICAgICB9Ci0rICAgICAgICByZXR1cm4gdHJ1ZQotKyAgICAgIGVu ZAotKwotICAgICAgIGRlZiBhZGRfcXVlc3Rpb24obmFtZSwgdHlwZWNsYXNzKQotICAgICAgICAg QHF1ZXN0aW9uIDw8IFtOYW1lLmNyZWF0ZShuYW1lKSwgdHlwZWNsYXNzXQotICAgICAgIGVuZAot QEAgLTE1MjMsOCArMTU3MCwxNSBAQCBkZWYgcHV0X2xlbmd0aDE2Ci0gICAgICAgICBlbmQKLSAK LSAgICAgICAgIGRlZiBwdXRfc3RyaW5nKGQpCi0tICAgICAgICAgIHNlbGYucHV0X3BhY2soIkMi LCBkLmxlbmd0aCkKLS0gICAgICAgICAgQGRhdGEgPDwgZAotKyAgICAgICAgICBzID0gZC50b19z Ci0rICAgICAgICAgICMgQSBjaGFyYWN0ZXItc3RyaW5nIGlzIHByZWZpeGVkIGJ5IGEgc2luZ2xl IGxlbmd0aCBvY3RldCwgc28gaXQgY2FuCi0rICAgICAgICAgICMgaG9sZCBhdCBtb3N0IDI1NSBv Y3RldHMuIFtSRkMgMTAzNSAzLjNdIFJlamVjdCBhbnl0aGluZyBsb25nZXIgdG8KLSsgICAgICAg ICAgIyBhdm9pZCBzaWxlbnRseSB0cnVuY2F0aW5nIHRoZSBsZW5ndGggdG8gaXRzIGxvdyA4IGJp dHMgKG1vZCAyNTYpLgotKyAgICAgICAgICBpZiBzLmJ5dGVzaXplID4gMjU1Ci0rICAgICAgICAg ICAgcmFpc2UgQXJndW1lbnRFcnJvciwgImNoYXJhY3Rlci1zdHJpbmcgaXMgdG9vIGxvbmcgKCN7 cy5ieXRlc2l6ZX0gYnl0ZXMsIG1heCAyNTUpOiAje3MuaW5zcGVjdH0iCi0rICAgICAgICAgIGVu ZAotKyAgICAgICAgICBzZWxmLnB1dF9wYWNrKCJDIiwgcy5ieXRlc2l6ZSkKLSsgICAgICAgICAg QGRhdGEgPDwgcwotICAgICAgICAgZW5kCi0gCi0gICAgICAgICBkZWYgcHV0X3N0cmluZ19saXN0 KGRzKQotQEAgLTE1NTQsNyArMTYwOCwxNyBAQCBkZWYgcHV0X2xhYmVscyhkLCBjb21wcmVzczog dHJ1ZSkKLSAgICAgICAgIGVuZAotIAotICAgICAgICAgZGVmIHB1dF9sYWJlbChkKQotLSAgICAg ICAgICBzZWxmLnB1dF9zdHJpbmcoZC50b19zKQotKyAgICAgICAgICBzID0gZC50b19zCi0rICAg ICAgICAgICMgTGFiZWw6OlN0ciBhcHBsaWVzIHRoaXMgbGltaXQgd2hlbiBhIGxhYmVsIGlzIGJ1 aWx0LCBzbyB3aGF0IGlzIGxlZnQKLSsgICAgICAgICAgIyBmb3IgaGVyZSBpcyBhIHJhdyBzdHJp bmcgaGFuZGVkIHN0cmFpZ2h0IHRvIHB1dF9sYWJlbHMuIFRoZSB0d28gd2F5cwotKyAgICAgICAg ICAjIGFuIG92ZXItbG9uZyBsYWJlbCBnb2VzIHdyb25nIGRpZmZlcjogNjQgdG8gMjU1IG9jdGV0 cyB3cml0ZSBhIGxlbmd0aAotKyAgICAgICAgICAjIG9jdGV0IGluIHRoZSByZXNlcnZlZCBvciBj b21wcmVzc2lvbiBwb2ludGVyIHJhbmdlLCBhbmQgMjU2IG9yIG1vcmUKLSsgICAgICAgICAgIyB3 cmFwIGl0IG1vZCAyNTYuIEVpdGhlciB3YXkgdGhlIGVuY29kZWQgbmFtZSBzdG9wcyBiZWluZyB0 aGUgbmFtZSB0aGUKLSsgICAgICAgICAgIyBjYWxsZXIgYXNrZWQgZm9yLiBbUkZDIDEwMzUgMi4z LjQsIDQuMS40XQotKyAgICAgICAgICBpZiBzLmJ5dGVzaXplID4gNjMKLSsgICAgICAgICAgICBy YWlzZSBBcmd1bWVudEVycm9yLCAiRE5TIGxhYmVsIGlzIHRvbyBsb25nICgje3MuYnl0ZXNpemV9 IGJ5dGVzLCBtYXggNjMpOiAje3MuaW5zcGVjdH0iCi0rICAgICAgICAgIGVuZAotKyAgICAgICAg ICBzZWxmLnB1dF9zdHJpbmcocykKLSAgICAgICAgIGVuZAotICAgICAgIGVuZAotIAotQEAgLTE2 ODAsNyArMTc0NCw5IEBAIGRlZiBnZXRfbGFiZWxzCi0gICAgICAgICAgIHByZXZfaW5kZXggPSBA aW5kZXgKLSAgICAgICAgICAgc2F2ZV9pbmRleCA9IG5pbAotICAgICAgICAgICBkID0gW10KLS0g ICAgICAgICAgc2l6ZSA9IC0xCi0rICAgICAgICAgICMgc2l6ZSBjb3VudHMgdGhlIGVuY29kZWQg Zm9ybSwgc28gaXQgc3RhcnRzIGF0IDEgZm9yIHRoZSByb290Ci0rICAgICAgICAgICMgbGFiZWwn cyB0ZXJtaW5hdGluZyB6ZXJvIG9jdGV0LiBbUkZDIDEwMzUgMy4xXQotKyAgICAgICAgICBzaXpl ID0gMQotICAgICAgICAgICB3aGlsZSB0cnVlCi0gICAgICAgICAgICAgcmFpc2UgRGVjb2RlRXJy b3IubmV3KCJsaW1pdCBleGNlZWRlZCIpIGlmIEBsaW1pdCA8PSBAaW5kZXgKLSAgICAgICAgICAg ICBjYXNlIEBkYXRhLmdldGJ5dGUoQGluZGV4KQotQEAgLTE3MTEsNiArMTc3NywxMSBAQCBkZWYg Z2V0X2xhYmVscwotIAotICAgICAgICAgZGVmIGdldF9sYWJlbAotICAgICAgICAgICByZXR1cm4g TGFiZWw6OlN0ci5uZXcoc2VsZi5nZXRfc3RyaW5nKQotKyAgICAgICAgcmVzY3VlIEFyZ3VtZW50 RXJyb3IgPT4gZQotKyAgICAgICAgICAjIEEgbGVuZ3RoIG9jdGV0IG9mIDY0Li4xOTEgaXMgcmVz ZXJ2ZWQgcmF0aGVyIHRoYW4gYSBsYWJlbCBsZW5ndGgsCi0rICAgICAgICAgICMgYnV0IHRoaXMg ZGVjb2RlciB1c2VkIHRvIHJlYWQgaXQgYXMgb25lLiBbUkZDIDEwMzUgNC4xLjRdIFJlcG9ydCBp dAotKyAgICAgICAgICAjIHRoZSB3YXkgdGhlIHJlc3Qgb2YgYSBtYWxmb3JtZWQgbWVzc2FnZSBp cyByZXBvcnRlZC4KLSsgICAgICAgICAgcmFpc2UgRGVjb2RlRXJyb3IubmV3KGUubWVzc2FnZSkK LSAgICAgICAgIGVuZAotIAotICAgICAgICAgZGVmIGdldF9xdWVzdGlvbgotQEAgLTE4OTgsOCAr MTk2OSw5IEBAIGRlZiBzZWxmLmNyZWF0ZShrZXlfbnVtYmVyKQotICAgICAgICAgICBrZXlfbmFt ZSA9IDoia2V5I3trZXlfbnVtYmVyfSIKLSAgICAgICAgICAgYy5jb25zdF9zZXQoOktleU5hbWUs IGtleV9uYW1lKQotICAgICAgICAgICBjLmNvbnN0X3NldCg6S2V5TnVtYmVyLCBrZXlfbnVtYmVy KQotLSAgICAgICAgICBzZWxmLmNvbnN0X3NldCg6IktleSN7a2V5X251bWJlcn0iLCBjKQotLSAg ICAgICAgICBDbGFzc0hhc2hba2V5X25hbWVdID0gQ2xhc3NIYXNoW2tleV9udW1iZXJdID0gYwot KyAgICAgICAgICAjIE5vdCByZWdpc3RlcmVkIGluIGEgY29uc3RhbnQgb3IgaW4gQ2xhc3NIYXNo LiBDbGFzc0hhc2ggY3JlYXRlcyBhCi0rICAgICAgICAgICMgY2xhc3MgZm9yIGV2ZXJ5IHVua25v d24gU3ZjUGFyYW1LZXksIHNvIHJlZ2lzdGVyaW5nIHRoZW0KLSsgICAgICAgICAgIyBwZXJtYW5l bnRseSB3b3VsZCBsZXQgYSBtYWxpY2lvdXMgcmVzcG9uc2UgZXhoYXVzdCBtZW1vcnkuCi0gICAg ICAgICAgIHJldHVybiBjCi0gICAgICAgICBlbmQKLSAgICAgICBlbmQKLUBAIC0yMjA2LDEyICsy Mjc4LDI4IEBAIGRlZiBzZWxmLmRlY29kZV9yZGF0YShtc2cpICMgOm5vZG9jOgotICAgICAgICAg ICByZXR1cm4gc2VsZi5uZXcobXNnLmdldF9ieXRlcykKLSAgICAgICAgIGVuZAotIAotKyAgICAg ICAgIyBjcmVhdGUgbWFrZXMgYSBmcmVzaCBjbGFzcyBmb3IgZWFjaCBkZWNvZGVkIHJlc291cmNl LCBzbyB0aGUgdHlwZSBhbmQKLSsgICAgICAgICMgY2xhc3MgdmFsdWVzIGhhdmUgdG8gYmUgY29t cGFyZWQgaW5zdGVhZCBvZiB0aGUgY2xhc3MgaXRzZWxmLgotKyAgICAgICAgZGVmIHNlbGYudHlw ZV9jbGFzc19lcXVhbD8oa2xhc3MsIG90aGVyKSAjIDpub2RvYzoKLSsgICAgICAgICAgcmV0dXJu IHRydWUgaWYga2xhc3MuZXF1YWw/KG90aGVyKQotKyAgICAgICAgICBHZW5lcmljID4ga2xhc3Mg JiYgR2VuZXJpYyA+IG90aGVyICYmCi0rICAgICAgICAgICAga2xhc3M6OlR5cGVWYWx1ZSA9PSBv dGhlcjo6VHlwZVZhbHVlICYmCi0rICAgICAgICAgICAga2xhc3M6OkNsYXNzVmFsdWUgPT0gb3Ro ZXI6OkNsYXNzVmFsdWUKLSsgICAgICAgIGVuZAotKwotKyAgICAgICAgZGVmID09KG90aGVyKSAj IDpub2RvYzoKLSsgICAgICAgICAgcmV0dXJuIG90aGVyLmlzX2E/KEdlbmVyaWMpICYmCi0rICAg ICAgICAgICAgICAgICBHZW5lcmljLnR5cGVfY2xhc3NfZXF1YWw/KHNlbGYuY2xhc3MsIG90aGVy LmNsYXNzKSAmJgotKyAgICAgICAgICAgICAgICAgQGRhdGEgPT0gb3RoZXIuZGF0YQotKyAgICAg ICAgZW5kCi0rCi0gICAgICAgICBkZWYgc2VsZi5jcmVhdGUodHlwZV92YWx1ZSwgY2xhc3NfdmFs dWUpICMgOm5vZG9jOgotICAgICAgICAgICBjID0gQ2xhc3MubmV3KEdlbmVyaWMpCi0gICAgICAg ICAgIGMuY29uc3Rfc2V0KDpUeXBlVmFsdWUsIHR5cGVfdmFsdWUpCi0gICAgICAgICAgIGMuY29u c3Rfc2V0KDpDbGFzc1ZhbHVlLCBjbGFzc192YWx1ZSkKLS0gICAgICAgICAgR2VuZXJpYy5jb25z dF9zZXQoIlR5cGUje3R5cGVfdmFsdWV9X0NsYXNzI3tjbGFzc192YWx1ZX0iLCBjKQotLSAgICAg ICAgICBDbGFzc0hhc2hbW3R5cGVfdmFsdWUsIGNsYXNzX3ZhbHVlXV0gPSBjCi0rICAgICAgICAg ICMgTm90IHJlZ2lzdGVyZWQgaW4gYSBjb25zdGFudCBvciBpbiBDbGFzc0hhc2guIGdldF9jbGFz cyBjcmVhdGVzIGEKLSsgICAgICAgICAgIyBjbGFzcyBmb3IgZXZlcnkgdW5rbm93biAodHlwZSwg Y2xhc3MpIHBhaXIsIHNvIHJlZ2lzdGVyaW5nIHRoZW0KLSsgICAgICAgICAgIyBwZXJtYW5lbnRs eSB3b3VsZCBsZXQgYSBtYWxpY2lvdXMgcmVzcG9uc2UgZXhoYXVzdCBtZW1vcnkuCi0gICAgICAg ICAgIHJldHVybiBjCi0gICAgICAgICBlbmQKLSAgICAgICBlbmQKLWRpZmYgLS1naXQgYS90ZXN0 L3Jlc29sdi90ZXN0X2Rucy5yYiBiL3Rlc3QvcmVzb2x2L3Rlc3RfZG5zLnJiCi1pbmRleCBkNWQy NjQ4ZTFiYzY0OS4uMzRhZTRhZWI5YTMzYzMgMTAwNjQ0Ci0tLS0gYS90ZXN0L3Jlc29sdi90ZXN0 X2Rucy5yYgotKysrIGIvdGVzdC9yZXNvbHYvdGVzdF9kbnMucmIKLUBAIC02MzYsNiArNjM2LDIw NSBAQCBkZWYgdGVzdF90b29fbG9uZ19hZGRyZXNzCi0gICAgIGVuZAotICAgZW5kCi0gCi0rICAj IEEgRE5TIGxhYmVsIGlzIGxpbWl0ZWQgdG8gNjMgb2N0ZXRzLiBbUkZDIDEwMzUgMi4zLjRdIFdy aXRpbmcgYSBsb25nZXIgbGFiZWwKLSsgICMgdGhyb3VnaCB0aGUgbGFiZWwgcGF0aCBtdXN0IHJh aXNlIGluc3RlYWQgb2Ygb3ZlcmZsb3dpbmcgdGhlIGxlbmd0aCBvY3RldC4KLSsgIGRlZiB0ZXN0 X3B1dF9sYWJlbF9yZWplY3RzX2xhYmVsX292ZXJfNjNfb2N0ZXRzCi0rICAgIFJlc29sdjo6RE5T OjpNZXNzYWdlOjpNZXNzYWdlRW5jb2Rlci5uZXcge3xtc2d8Ci0rICAgICAgYXNzZXJ0X25vdGhp bmdfcmFpc2VkIHsgbXNnLnB1dF9sYWJlbCgiYSIgKiA2MykgfQotKyAgICAgIGFzc2VydF9yYWlz ZV93aXRoX21lc3NhZ2UoQXJndW1lbnRFcnJvciwgL0ROUyBsYWJlbCBpcyB0b28gbG9uZy8pIGRv Ci0rICAgICAgICBtc2cucHV0X2xhYmVsKCJhIiAqIDY0KQotKyAgICAgIGVuZAotKyAgICB9Ci0r ICAgICMgcHV0X2xhYmVscyBkcml2ZXMgcHV0X2xhYmVsLCBzbyB0aGUgc2FtZSBndWFyZCBhcHBs aWVzIHRvIHRoZSBuYW1lIHBhdGguCi0rICAgIFJlc29sdjo6RE5TOjpNZXNzYWdlOjpNZXNzYWdl RW5jb2Rlci5uZXcge3xtc2d8Ci0rICAgICAgYXNzZXJ0X3JhaXNlX3dpdGhfbWVzc2FnZShBcmd1 bWVudEVycm9yLCAvRE5TIGxhYmVsIGlzIHRvbyBsb25nLykgZG8KLSsgICAgICAgIG1zZy5wdXRf bGFiZWxzKFsiYSIgKiA2NF0pCi0rICAgICAgZW5kCi0rICAgIH0KLSsgIGVuZAotKwotKyAgIyBU aGUgcGVyLWxhYmVsIGxpbWl0IGlzIGFuIGludmFyaWFudCBvZiBMYWJlbDo6U3RyLCBzbyBubyBs YWJlbCBvYmplY3QgY2FuCi0rICAjIGV4aXN0IHRoYXQgd291bGQgb3ZlcmZsb3cgaXRzIGxlbmd0 aCBvY3RldC4gW1JGQyAxMDM1IDIuMy40XQotKyAgZGVmIHRlc3RfbGFiZWxfc3RyX3JlamVjdHNf bGFiZWxfb3Zlcl82M19vY3RldHMKLSsgICAgYXNzZXJ0X25vdGhpbmdfcmFpc2VkIHsgUmVzb2x2 OjpETlM6OkxhYmVsOjpTdHIubmV3KCJhIiAqIDYzKSB9Ci0rICAgIGFzc2VydF9yYWlzZV93aXRo X21lc3NhZ2UoQXJndW1lbnRFcnJvciwgL0ROUyBsYWJlbCBpcyB0b28gbG9uZy8pIGRvCi0rICAg ICAgUmVzb2x2OjpETlM6OkxhYmVsOjpTdHIubmV3KCJhIiAqIDY0KQotKyAgICBlbmQKLSsgIGVu ZAotKwotKyAgIyBFdmVyeSB3YXkgb2YgYnVpbGRpbmcgYSBuYW1lIGdvZXMgdGhyb3VnaCBMYWJl bDo6U3RyLCBzbyB0aGUgcGF0aHMgdGhhdAotKyAgIyBza2lwIE5hbWUuY3JlYXRlIGFyZSBjb3Zl cmVkIHRvby4KLSsgIGRlZiB0ZXN0X2xhYmVsX2xlbmd0aF9pc19lbmZvcmNlZF9vbl9ldmVyeV9j b25zdHJ1Y3Rpb25fcGF0aAotKyAgICBhc3NlcnRfcmFpc2Vfd2l0aF9tZXNzYWdlKEFyZ3VtZW50 RXJyb3IsIC9ETlMgbGFiZWwgaXMgdG9vIGxvbmcvKSBkbwotKyAgICAgIFJlc29sdjo6RE5TOjpO YW1lLm5ldyhbImEiICogNjRdKQotKyAgICBlbmQKLSsgICAgYXNzZXJ0X3JhaXNlX3dpdGhfbWVz c2FnZShBcmd1bWVudEVycm9yLCAvRE5TIGxhYmVsIGlzIHRvbyBsb25nLykgZG8KLSsgICAgICBS ZXNvbHY6OkROUzo6TGFiZWwuc3BsaXQoImEiICogNjQpCi0rICAgIGVuZAotKyAgICAjIENvbmZp ZyNnZW5lcmF0ZV9jYW5kaWRhdGVzIGFwcGVuZHMgc2VhcmNoIGRvbWFpbnMgd2l0aCBOYW1lLm5l dywgYW5kIHRoZQotKyAgICAjIHNlYXJjaCBsaXN0IGl0c2VsZiBjb21lcyBmcm9tIExhYmVsLnNw bGl0LCBzbyBhIHJlc29sdi5jb25mIGNhcnJ5aW5nIGFuCi0rICAgICMgb3Zlci1sb25nIGxhYmVs IGlzIHJlamVjdGVkIHdoZW4gdGhlIGNvbmZpZyBpcyByZWFkLgotKyAgICBjb25maWcgPSBSZXNv bHY6OkROUzo6Q29uZmlnLm5ldyhuYW1lc2VydmVyOiBbJzEyNy4wLjAuMSddLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IFsiYSIgKiA2NF0sIG5kb3RzOiAx KQotKyAgICBhc3NlcnRfcmFpc2Vfd2l0aF9tZXNzYWdlKEFyZ3VtZW50RXJyb3IsIC9ETlMgbGFi ZWwgaXMgdG9vIGxvbmcvKSBkbwotKyAgICAgIGNvbmZpZy5sYXp5X2luaXRpYWxpemUKLSsgICAg ZW5kCi0rICBlbmQKLSsKLSsgIGRlZiB0ZXN0X25hbWVfY3JlYXRlX3JlamVjdHNfdG9vX2xvbmdf bGFiZWwKLSsgICAgYXNzZXJ0X25vdGhpbmdfcmFpc2VkIHsgUmVzb2x2OjpETlM6Ok5hbWUuY3Jl YXRlKCJhIiAqIDYzKSB9Ci0rICAgIGFzc2VydF9yYWlzZV93aXRoX21lc3NhZ2UoUmVzb2x2OjpS ZXNvbHZFcnJvciwgL0ROUyBsYWJlbCBpcyB0b28gbG9uZy8pIGRvCi0rICAgICAgUmVzb2x2OjpE TlM6Ok5hbWUuY3JlYXRlKCJhIiAqIDY0KQotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgZGVmIHRl c3RfbmFtZV9jcmVhdGVfcmVqZWN0c190b29fbG9uZ19uYW1lCi0rICAgICMgRml2ZSA2My1vY3Rl dCBsYWJlbHMgdG90YWwgMzIxIGVuY29kZWQgb2N0ZXRzLCBvdmVyIHRoZSAyNTUgb2N0ZXQgbGlt aXQsCi0rICAgICMgd2hpbGUgZWFjaCBpbmRpdmlkdWFsIGxhYmVsIGlzIHN0aWxsIHZhbGlkLgot KyAgICB0b29fbG9uZyA9IChbImEiICogNjNdICogNSkuam9pbigiLiIpCi0rICAgIGFzc2VydF9y YWlzZV93aXRoX21lc3NhZ2UoUmVzb2x2OjpSZXNvbHZFcnJvciwgL0ROUyBuYW1lIGlzIHRvbyBs b25nLykgZG8KLSsgICAgICBSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUodG9vX2xvbmcpCi0rICAg IGVuZAotKyAgZW5kCi0rCi0rICAjIEEgaG9zdG5hbWUgaXMgcnVudGltZSBkYXRhLCBzbyBhbiBv dmVyLWxvbmcgb25lIGhhcyB0byBzdGF5IHJlc2N1YWJsZSB0aGUKLSsgICMgd2F5IHRoZSByZXN0 IG9mIG5hbWUgcmVzb2x1dGlvbiBpcy4gSXQgcmVhY2hlcyBOYW1lLmNyZWF0ZSB0aHJvdWdoCi0r ICAjIENvbmZpZyNnZW5lcmF0ZV9jYW5kaWRhdGVzLCB3aGljaCBydW5zIG91dHNpZGUgQ29uZmln I3Jlc29sdidzIG93biByZXNjdWUuCi0rICBkZWYgdGVzdF9vdmVyc2l6ZWRfbmFtZV9pc19yZXNj dWFibGVfYXNfcmVzb2x2X2Vycm9yCi0rICAgIGRucyA9IFJlc29sdjo6RE5TLm5ldyhuYW1lc2Vy dmVyX3BvcnQ6IFtbJzEyNy4wLjAuMScsIDUzXV0pCi0rICAgIGFzc2VydF9yYWlzZShSZXNvbHY6 OlJlc29sdkVycm9yKSB7IGRucy5nZXRhZGRyZXNzKCJhIiAqIDY0KSB9Ci0rICAgIGFzc2VydF9y YWlzZShSZXNvbHY6OlJlc29sdkVycm9yKSB7IGRucy5nZXRhZGRyZXNzKChbImEiICogNjNdICog NSkuam9pbigiLiIpKSB9Ci0rICBlbnN1cmUKLSsgICAgZG5zJi5jbG9zZQotKyAgZW5kCi0rCi0r ICAjIEEgbGVuZ3RoIG9jdGV0IG9mIDY0Li4xOTEgaXMgcmVzZXJ2ZWQsIG5vdCBhIGxhYmVsIGxl bmd0aCwgYnV0IHRoaXMgZGVjb2RlcgotKyAgIyByZWFkIGl0IGFzIG9uZSBhbmQgYWNjZXB0ZWQg bGFiZWxzIG5vIGVuY29kZXIgc2hvdWxkIGV2ZXIgcHJvZHVjZS4KLSsgICMgW1JGQyAxMDM1IDQu MS40XSBSZWplY3RpbmcgdGhlbSBoYXMgdG8gbG9vayBsaWtlIGFueSBvdGhlciBtYWxmb3JtZWQK LSsgICMgbWVzc2FnZSwgc28gdGhlIGNhbGxlcidzIHJlc2N1ZSBEZWNvZGVFcnJvciBzdGlsbCBj b3ZlcnMgaXQuCi0rICBkZWYgdGVzdF9kZWNvZGVfcmVqZWN0c19sYWJlbF9vdmVyXzYzX29jdGV0 cwotKyAgICBtZXNzYWdlID0gLT4obikgewotKyAgICAgIFswLCAweDgxODAsIDEsIDAsIDAsIDBd LnBhY2soIm4qIikgKwotKyAgICAgICAgW25dLnBhY2soIkMiKSArICgiYSIgKiBuKSArICJcMCIg KyBbMSwgMV0ucGFjaygibm4iKQotKyAgICB9Ci0rICAgIGFzc2VydF9ub3RoaW5nX3JhaXNlZCB7 IFJlc29sdjo6RE5TOjpNZXNzYWdlLmRlY29kZShtZXNzYWdlLmNhbGwoNjMpKSB9Ci0rICAgIFs2 NCwgMTAwLCAxOTFdLmVhY2ggZG8gfG58Ci0rICAgICAgYXNzZXJ0X3JhaXNlX3dpdGhfbWVzc2Fn ZShSZXNvbHY6OkROUzo6RGVjb2RlRXJyb3IsIC9ETlMgbGFiZWwgaXMgdG9vIGxvbmcvKSBkbwot KyAgICAgICAgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKG1lc3NhZ2UuY2FsbChuKSkKLSsg ICAgICBlbmQKLSsgICAgZW5kCi0rICBlbmQKLSsKLSsgICMgVGhlIHR5cGUgY2hlY2sgaXMgYSBj YWxsZXIgbWlzdGFrZSByYXRoZXIgdGhhbiBydW50aW1lIGRhdGEsIHNvIGl0IGtlZXBzCi0rICAj IHJhaXNpbmcgQXJndW1lbnRFcnJvci4KLSsgIGRlZiB0ZXN0X25hbWVfY3JlYXRlX3N0aWxsX3Jh aXNlc19hcmd1bWVudF9lcnJvcl9mb3Jfd3JvbmdfdHlwZQotKyAgICBhc3NlcnRfcmFpc2Vfd2l0 aF9tZXNzYWdlKEFyZ3VtZW50RXJyb3IsIC9jYW5ub3QgaW50ZXJwcmV0IGFzIEROUyBuYW1lLykg ZG8KLSsgICAgICBSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUoMTIzKQotKyAgICBlbmQKLSsgIGVu ZAotKwotKyAgIyBUaGUgMjU1IG9jdGV0IGxpbWl0IGNvdW50cyB0aGUgZW5jb2RlZCBmb3JtLCBp bmNsdWRpbmcgZWFjaCBsYWJlbCdzIGxlbmd0aAotKyAgIyBvY3RldCBhbmQgdGhlIHJvb3QgbGFi ZWwncyB0ZXJtaW5hdGluZyB6ZXJvIG9jdGV0LiBbUkZDIDEwMzUgMi4zLjQsIDMuMV0KLSsgICMg U28gdGhlIGxvbmdlc3QgbGVnYWwgbmFtZSBlbmNvZGVzIHRvIGV4YWN0bHkgMjU1IG9jdGV0cy4K LSsgIGRlZiB0ZXN0X25hbWVfY3JlYXRlX3RvdGFsX2xlbmd0aF9ib3VuZGFyeQotKyAgICBhdF9s aW1pdCA9IChbImEiICogNjNdICogMyArIFsiYSIgKiA2MV0pLmpvaW4oIi4iKQotKyAgICBuYW1l ID0gUmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKGF0X2xpbWl0KQotKyAgICBlbmNvZGVkID0gUmVz b2x2OjpETlM6Ok1lc3NhZ2U6Ok1lc3NhZ2VFbmNvZGVyLm5ldyB7fG1zZ3wgbXNnLnB1dF9uYW1l KG5hbWUpIH0udG9fcwotKyAgICBhc3NlcnRfZXF1YWwoMjU1LCBlbmNvZGVkLmJ5dGVzaXplLCAi bG9uZ2VzdCBsZWdhbCBuYW1lIGVuY29kZXMgdG8gMjU1IG9jdGV0cyIpCi0rCi0rICAgIG92ZXJf bGltaXQgPSAoWyJhIiAqIDYzXSAqIDMgKyBbImEiICogNjJdKS5qb2luKCIuIikKLSsgICAgYXNz ZXJ0X3JhaXNlX3dpdGhfbWVzc2FnZShSZXNvbHY6OlJlc29sdkVycm9yLCAvRE5TIG5hbWUgaXMg dG9vIGxvbmcvKSBkbwotKyAgICAgIFJlc29sdjo6RE5TOjpOYW1lLmNyZWF0ZShvdmVyX2xpbWl0 KQotKyAgICBlbmQKLSsKLSsgICAgIyBGb3VyIDYzLW9jdGV0IGxhYmVscyBlbmNvZGUgdG8gMjU3 IG9jdGV0cy4gQ291bnRpbmcgdGhlIHByZXNlbnRhdGlvbgotKyAgICAjIGZvcm0gaW5zdGVhZCBv ZiB0aGUgZW5jb2RlZCBmb3JtIGxldHMgdGhlc2UgdHdvIGV4dHJhIG9jdGV0cyB0aHJvdWdoLgot KyAgICBhc3NlcnRfcmFpc2Vfd2l0aF9tZXNzYWdlKFJlc29sdjo6UmVzb2x2RXJyb3IsIC9ETlMg bmFtZSBpcyB0b28gbG9uZy8pIGRvCi0rICAgICAgUmVzb2x2OjpETlM6Ok5hbWUuY3JlYXRlKChb ImEiICogNjNdICogNCkuam9pbigiLiIpKQotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgIyBUaGUg ZGVjb2RlciBlbmZvcmNlcyB0aGUgc2FtZSBsaW1pdCwgY291bnRlZCB0aGUgc2FtZSB3YXkuCi0r ICBkZWYgdGVzdF9nZXRfbGFiZWxzX3RvdGFsX2xlbmd0aF9ib3VuZGFyeQotKyAgICBlbmNvZGUg PSAtPihsYWJlbHMpIHsKLSsgICAgICBSZXNvbHY6OkROUzo6TWVzc2FnZTo6TWVzc2FnZUVuY29k ZXIubmV3IHt8bXNnfAotKyAgICAgICAgbXNnLnB1dF9sYWJlbHMobGFiZWxzLm1hcCB7fGx8IFJl c29sdjo6RE5TOjpMYWJlbDo6U3RyLm5ldyhsKSB9KQotKyAgICAgIH0udG9fcwotKyAgICB9Ci0r Ci0rICAgIGF0X2xpbWl0ID0gZW5jb2RlLmNhbGwoWyJhIiAqIDYzXSAqIDMgKyBbImEiICogNjFd KQotKyAgICBhc3NlcnRfZXF1YWwoMjU1LCBhdF9saW1pdC5ieXRlc2l6ZSkKLSsgICAgUmVzb2x2 OjpETlM6Ok1lc3NhZ2U6Ok1lc3NhZ2VEZWNvZGVyLm5ldyhhdF9saW1pdCkge3xtc2d8Ci0rICAg ICAgYXNzZXJ0X2VxdWFsKDQsIG1zZy5nZXRfbGFiZWxzLmxlbmd0aCkKLSsgICAgfQotKwotKyAg ICBvdmVyX2xpbWl0ID0gZW5jb2RlLmNhbGwoWyJhIiAqIDYzXSAqIDQpCi0rICAgIGFzc2VydF9l cXVhbCgyNTcsIG92ZXJfbGltaXQuYnl0ZXNpemUpCi0rICAgIGFzc2VydF9yYWlzZV93aXRoX21l c3NhZ2UoUmVzb2x2OjpETlM6OkRlY29kZUVycm9yLCAvbmFtZSBsYWJlbCBkYXRhIGV4Y2VlZCAy NTUgb2N0ZXRzLykgZG8KLSsgICAgICBSZXNvbHY6OkROUzo6TWVzc2FnZTo6TWVzc2FnZURlY29k ZXIubmV3KG92ZXJfbGltaXQpIHt8bXNnfCBtc2cuZ2V0X2xhYmVscyB9Ci0rICAgIGVuZAotKyAg ZW5kCi0rCi0rICAjIEEgc2luZ2xlIDI2Mi1vY3RldCBsYWJlbCB3aG9zZSBieXRlcyBzdGFydCB3 aXRoICJ0YXJnZXRceDAzY29tXHgwMCIuIFRoZQotKyAgIyBvbGQgZW5jb2RlciB3cm90ZSB0aGUg bGVuZ3RoIG9jdGV0IGFzIDI2MiAmIDB4ZmYgPT0gNiwgc28gdGhlIHdpcmUgYnl0ZXMKLSsgICMg ZGVjb2RlZCB0byB0aGUgdW5yZWxhdGVkIG5hbWUgInRhcmdldC5jb20iIChxdWVyeSBuYW1lIGNv bmZ1c2lvbiAvCi0rICAjIGFsbG93bGlzdCBieXBhc3MpLgotKyAgZGVmIHRlc3RfZW5jb2Rlcl9y ZWplY3RzX2xhYmVsX2xlbmd0aF93cmFwCi0rICAgIHBvY19sYWJlbCA9ICJ0YXJnZXQiLmIgKyAi XHgwM2NvbVx4MDAiLmIgKyAoImEiLmIgKiAyNTEpCi0rICAgIGFzc2VydF9lcXVhbCgyNjIsIHBv Y19sYWJlbC5ieXRlc2l6ZSkKLSsgICAgYXNzZXJ0X2VxdWFsKDYsIHBvY19sYWJlbC5ieXRlc2l6 ZSAmIDB4ZmYsICJwcmVjb25kaXRpb246IHRoZSBsZW5ndGggb2N0ZXQgd3JhcHMgdG8gNiIpCi0r Ci0rICAgICMgVGhlIGJ5dGVzIHRoZSBidWdneSBlbmNvZGVyIHdvdWxkIGhhdmUgZW1pdHRlZCBy ZWFsbHkgZG8gZGVjb2RlIHRvIGEKLSsgICAgIyBkaWZmZXJlbnQgbmFtZS4gVGhpcyBpcyB0aGUg dnVsbmVyYWJpbGl0eSBiZWluZyBmaXhlZC4KLSsgICAgd3JhcHBlZCA9IFtwb2NfbGFiZWwuYnl0 ZXNpemUgJiAweGZmXS5wYWNrKCJDIikgKyBwb2NfbGFiZWwKLSsgICAgUmVzb2x2OjpETlM6Ok1l c3NhZ2U6Ok1lc3NhZ2VEZWNvZGVyLm5ldyh3cmFwcGVkKSB7fG1zZ3wKLSsgICAgICBhc3NlcnRf ZXF1YWwoInRhcmdldC5jb20iLCBtc2cuZ2V0X2xhYmVscy5tYXAoJjp0b19zKS5qb2luKCIuIikp Ci0rICAgIH0KLSsKLSsgICAgIyBUaGUgZml4ZWQgZW5jb2RlciByZWZ1c2VzIHRvIGVtaXQgaXQg aW5zdGVhZCBvZiBzaWxlbnRseSB3cmFwcGluZywgc28gaXQKLSsgICAgIyBjYW4gbm8gbG9uZ2Vy IHByb2R1Y2UgInRhcmdldC5jb20iIGZyb20gdGhpcyBpbnB1dC4KLSsgICAgUmVzb2x2OjpETlM6 Ok1lc3NhZ2U6Ok1lc3NhZ2VFbmNvZGVyLm5ldyB7fG1zZ3wKLSsgICAgICBhc3NlcnRfcmFpc2Vf d2l0aF9tZXNzYWdlKEFyZ3VtZW50RXJyb3IsIC9ETlMgbGFiZWwgaXMgdG9vIGxvbmcvKSBkbwot KyAgICAgICAgbXNnLnB1dF9sYWJlbChwb2NfbGFiZWwpCi0rICAgICAgZW5kCi0rICAgIH0KLSsg ICAgYXNzZXJ0X3JhaXNlX3dpdGhfbWVzc2FnZShSZXNvbHY6OlJlc29sdkVycm9yLCAvRE5TIGxh YmVsIGlzIHRvbyBsb25nLykgZG8KLSsgICAgICBSZXNvbHY6OkROUzo6TmFtZS5jcmVhdGUocG9j X2xhYmVsKQotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgIyBBIGNoYXJhY3Rlci1zdHJpbmcgKGUu Zy4gVFhUIHJkYXRhKSBpcyBwcmVmaXhlZCBieSBhIHNpbmdsZSBsZW5ndGggb2N0ZXQgYW5kCi0r ICAjIG1heSBsZWdpdGltYXRlbHkgYmUgdXAgdG8gMjU1IG9jdGV0cywgc28gdGhlIDYzIG9jdGV0 IGxhYmVsIGxpbWl0IG11c3Qgbm90Ci0rICAjIGxlYWsgaW50byBwdXRfc3RyaW5nLiBbUkZDIDEw MzUgMy4zXQotKyAgZGVmIHRlc3RfcHV0X3N0cmluZ19hbGxvd3NfY2hhcmFjdGVyX3N0cmluZ191 cF90b18yNTUKLSsgICAgWzY0LCAyMDAsIDI1NV0uZWFjaCBkbyB8bnwKLSsgICAgICBzID0gImEi ICogbgotKyAgICAgIG0gPSBSZXNvbHY6OkROUzo6TWVzc2FnZTo6TWVzc2FnZUVuY29kZXIubmV3 IHt8bXNnfCBtc2cucHV0X3N0cmluZyhzKSB9Ci0rICAgICAgZW5jb2RlZCA9IG0udG9fcwotKyAg ICAgIGFzc2VydF9lcXVhbChuLCBlbmNvZGVkLmdldGJ5dGUoMCksICJsZW5ndGggb2N0ZXQgZm9y ICN7bn0gYnl0ZSBzdHJpbmciKQotKyAgICAgIGFzc2VydF9lcXVhbChuICsgMSwgZW5jb2RlZC5i eXRlc2l6ZSkKLSsgICAgICBSZXNvbHY6OkROUzo6TWVzc2FnZTo6TWVzc2FnZURlY29kZXIubmV3 KGVuY29kZWQpIHt8bXNnfAotKyAgICAgICAgYXNzZXJ0X2VxdWFsKHMsIG1zZy5nZXRfc3RyaW5n KQotKyAgICAgIH0KLSsgICAgZW5kCi0rICBlbmQKLSsKLSsgIGRlZiB0ZXN0X3R4dF9yZWNvcmRf cm91bmR0cmlwX3dpdGhfbG9uZ19jaGFyYWN0ZXJfc3RyaW5ncwotKyAgICB0eHQgPSBSZXNvbHY6 OkROUzo6UmVzb3VyY2U6OklOOjpUWFQubmV3KCJhIiAqIDI1NSwgImIiICogNjQpCi0rICAgIG0g PSBSZXNvbHY6OkROUzo6TWVzc2FnZS5uZXcoMCkKLSsgICAgbS5hZGRfYW5zd2VyKCJleGFtcGxl LmNvbS4iLCAzNjAwLCB0eHQpCi0rICAgIGRlY29kZWQgPSBSZXNvbHY6OkROUzo6TWVzc2FnZS5k ZWNvZGUobS5lbmNvZGUpCi0rICAgIF8sIF8sIHJlcyA9IGRlY29kZWQuYW5zd2VyLmZpcnN0Ci0r ICAgIGFzc2VydF9lcXVhbChbImEiICogMjU1LCAiYiIgKiA2NF0sIHJlcy5zdHJpbmdzKQotKyAg ZW5kCi0rCi0rICAjIHB1dF9zdHJpbmcgc3RpbGwgZ3VhcmRzIGFnYWluc3QgdGhlIGxlbmd0aCBv Y3RldCB3cmFwcGluZyBwYXN0IDI1NSBvY3RldHMuCi0rICBkZWYgdGVzdF9wdXRfc3RyaW5nX3Jl amVjdHNfb3Zlcl8yNTVfb2N0ZXRzCi0rICAgIGFzc2VydF9yYWlzZV93aXRoX21lc3NhZ2UoQXJn dW1lbnRFcnJvciwgL2NoYXJhY3Rlci1zdHJpbmcgaXMgdG9vIGxvbmcvKSBkbwotKyAgICAgIFJl c29sdjo6RE5TOjpNZXNzYWdlOjpNZXNzYWdlRW5jb2Rlci5uZXcge3xtc2d8IG1zZy5wdXRfc3Ry aW5nKCJhIiAqIDI1NikgfQotKyAgICBlbmQKLSsgIGVuZAotKwotICAgZGVmIGFzc2VydF9ub19m ZF9sZWFrCi0gICAgIHNvY2tldCA9IGFzc2VydF90aHJvdyhzZWxmKSBkbyB8dGFnfAotICAgICAg IFJlc29sdjo6RE5TLnN0dWIoOmJpbmRfcmFuZG9tX3BvcnQsIC0+KHMsICopIHt0aHJvdyh0YWcs IHMpfSkgZG8KLUBAIC04MjIsNCArMTAyMSwxMjQgQEAgZGVmIHRlc3RfbXVsdGlwbGVfc2VydmVy c193aXRoX3RpbWVvdXRfYW5kX3RydW5jYXRlZF90Y3BfZmFsbGJhY2sKLSAgICAgICBlbmQKLSAg ICAgZW5kCi0gICBlbmQKLSsKLSsgIGRlZiB0ZXN0X3RjcF9jb25uZWN0aW9uX2Nsb3NlZF9iZWZv cmVfbGVuZ3RoCi0rICAgIHdpdGhfdGNwKCcxMjcuMC4wLjEnLCAwKSBkbyB8dHwKLSsgICAgICBf LCBzZXJ2ZXJfcG9ydCwgXywgc2VydmVyX2FkZHJlc3MgPSB0LmFkZHIKLSsKLSsgICAgICBzZXJ2 ZXJfdGhyZWFkID0gVGhyZWFkLm5ldyBkbwotKyAgICAgICAgY3QgPSB0LmFjY2VwdAotKyAgICAg ICAgY3QucmVjdig1MTIpCi0rICAgICAgICBjdC5jbG9zZQotKyAgICAgIGVuZAotKwotKyAgICAg IGNsaWVudF90aHJlYWQgPSBUaHJlYWQubmV3IGRvCi0rICAgICAgICByZXF1ZXN0ZXIgPSBSZXNv bHY6OkROUzo6UmVxdWVzdGVyOjpUQ1AubmV3KHNlcnZlcl9hZGRyZXNzLCBzZXJ2ZXJfcG9ydCkK LSsgICAgICAgIGJlZ2luCi0rICAgICAgICAgIG1zZyA9IFJlc29sdjo6RE5TOjpNZXNzYWdlLm5l dwotKyAgICAgICAgICBtc2cuYWRkX3F1ZXN0aW9uKCdleGFtcGxlLm9yZycsIFJlc29sdjo6RE5T OjpSZXNvdXJjZTo6SU46OkEpCi0rICAgICAgICAgIHNlbmRlciA9IHJlcXVlc3Rlci5zZW5kZXIo bXNnLCBtc2cpCi0rICAgICAgICAgIGFzc2VydF9yYWlzZShSZXNvbHY6OlJlc29sdlRpbWVvdXQp IGRvCi0rICAgICAgICAgICAgcmVxdWVzdGVyLnJlcXVlc3Qoc2VuZGVyLCAyKQotKyAgICAgICAg ICBlbmQKLSsgICAgICAgIGVuc3VyZQotKyAgICAgICAgICByZXF1ZXN0ZXIuY2xvc2UKLSsgICAg ICAgIGVuZAotKyAgICAgIGVuZAotKwotKyAgICAgIHNlcnZlcl90aHJlYWQuam9pbgotKyAgICAg IGNsaWVudF90aHJlYWQuam9pbgotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgZGVmIHRlc3RfdGNw X2Nvbm5lY3Rpb25fY2xvc2VkX2FmdGVyX2xlbmd0aAotKyAgICB3aXRoX3RjcCgnMTI3LjAuMC4x JywgMCkgZG8gfHR8Ci0rICAgICAgXywgc2VydmVyX3BvcnQsIF8sIHNlcnZlcl9hZGRyZXNzID0g dC5hZGRyCi0rCi0rICAgICAgc2VydmVyX3RocmVhZCA9IFRocmVhZC5uZXcgZG8KLSsgICAgICAg IGN0ID0gdC5hY2NlcHQKLSsgICAgICAgIGN0LnJlY3YoNTEyKQotKyAgICAgICAgY3Quc2VuZChb MTAwXS5wYWNrKCduJyksIDApCi0rICAgICAgICBjdC5jbG9zZQotKyAgICAgIGVuZAotKwotKyAg ICAgIGNsaWVudF90aHJlYWQgPSBUaHJlYWQubmV3IGRvCi0rICAgICAgICByZXF1ZXN0ZXIgPSBS ZXNvbHY6OkROUzo6UmVxdWVzdGVyOjpUQ1AubmV3KHNlcnZlcl9hZGRyZXNzLCBzZXJ2ZXJfcG9y dCkKLSsgICAgICAgIGJlZ2luCi0rICAgICAgICAgIG1zZyA9IFJlc29sdjo6RE5TOjpNZXNzYWdl Lm5ldwotKyAgICAgICAgICBtc2cuYWRkX3F1ZXN0aW9uKCdleGFtcGxlLm9yZycsIFJlc29sdjo6 RE5TOjpSZXNvdXJjZTo6SU46OkEpCi0rICAgICAgICAgIHNlbmRlciA9IHJlcXVlc3Rlci5zZW5k ZXIobXNnLCBtc2cpCi0rICAgICAgICAgIGFzc2VydF9yYWlzZShSZXNvbHY6OlJlc29sdlRpbWVv dXQpIGRvCi0rICAgICAgICAgICAgcmVxdWVzdGVyLnJlcXVlc3Qoc2VuZGVyLCAyKQotKyAgICAg ICAgICBlbmQKLSsgICAgICAgIGVuc3VyZQotKyAgICAgICAgICByZXF1ZXN0ZXIuY2xvc2UKLSsg ICAgICAgIGVuZAotKyAgICAgIGVuZAotKwotKyAgICAgIHNlcnZlcl90aHJlYWQuam9pbgotKyAg ICAgIGNsaWVudF90aHJlYWQuam9pbgotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgZGVmIHRlc3Rf dGNwX2Nvbm5lY3Rpb25fY2xvc2VkX3dpdGhfcGFydGlhbF9sZW5ndGhfcHJlZml4Ci0rICAgIHdp dGhfdGNwKCcxMjcuMC4wLjEnLCAwKSBkbyB8dHwKLSsgICAgICBfLCBzZXJ2ZXJfcG9ydCwgXywg c2VydmVyX2FkZHJlc3MgPSB0LmFkZHIKLSsKLSsgICAgICBzZXJ2ZXJfdGhyZWFkID0gVGhyZWFk Lm5ldyBkbwotKyAgICAgICAgY3QgPSB0LmFjY2VwdAotKyAgICAgICAgY3QucmVjdig1MTIpCi0r ICAgICAgICBjdC53cml0ZSAiQSIgIyAxIGJ5dGUKLSsgICAgICAgIGN0LmNsb3NlCi0rICAgICAg ZW5kCi0rCi0rICAgICAgY2xpZW50X3RocmVhZCA9IFRocmVhZC5uZXcgZG8KLSsgICAgICAgIHJl cXVlc3RlciA9IFJlc29sdjo6RE5TOjpSZXF1ZXN0ZXI6OlRDUC5uZXcoc2VydmVyX2FkZHJlc3Ms IHNlcnZlcl9wb3J0KQotKyAgICAgICAgYmVnaW4KLSsgICAgICAgICAgbXNnID0gUmVzb2x2OjpE TlM6Ok1lc3NhZ2UubmV3Ci0rICAgICAgICAgIG1zZy5hZGRfcXVlc3Rpb24oJ2V4YW1wbGUub3Jn JywgUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QSkKLSsgICAgICAgICAgc2VuZGVyID0gcmVx dWVzdGVyLnNlbmRlcihtc2csIG1zZykKLSsgICAgICAgICAgYXNzZXJ0X3JhaXNlKFJlc29sdjo6 UmVzb2x2VGltZW91dCkgZG8KLSsgICAgICAgICAgICByZXF1ZXN0ZXIucmVxdWVzdChzZW5kZXIs IDIpCi0rICAgICAgICAgIGVuZAotKyAgICAgICAgZW5zdXJlCi0rICAgICAgICAgIHJlcXVlc3Rl ci5jbG9zZQotKyAgICAgICAgZW5kCi0rICAgICAgZW5kCi0rCi0rICAgICAgc2VydmVyX3RocmVh ZC5qb2luCi0rICAgICAgY2xpZW50X3RocmVhZC5qb2luCi0rICAgIGVuZAotKyAgZW5kCi0rCi0r ICBkZWYgdGVzdF90Y3BfY29ubmVjdGlvbl9jbG9zZWRfd2l0aF9wYXJ0aWFsX21lc3NhZ2VfYm9k eQotKyAgICB3aXRoX3RjcCgnMTI3LjAuMC4xJywgMCkgZG8gfHR8Ci0rICAgICAgXywgc2VydmVy X3BvcnQsIF8sIHNlcnZlcl9hZGRyZXNzID0gdC5hZGRyCi0rCi0rICAgICAgc2VydmVyX3RocmVh ZCA9IFRocmVhZC5uZXcgZG8KLSsgICAgICAgIGN0ID0gdC5hY2NlcHQKLSsgICAgICAgIGN0LnJl Y3YoNTEyKQotKyAgICAgICAgY3Qud3JpdGUoWzEwXS5wYWNrKCduJykpICMgbGVuZ3RoIDEwCi0r ICAgICAgICBjdC53cml0ZSAiMTIzNDUiICMgNSBieXRlcyAocGFydGlhbCkKLSsgICAgICAgIGN0 LmNsb3NlCi0rICAgICAgZW5kCi0rCi0rICAgICAgY2xpZW50X3RocmVhZCA9IFRocmVhZC5uZXcg ZG8KLSsgICAgICAgIHJlcXVlc3RlciA9IFJlc29sdjo6RE5TOjpSZXF1ZXN0ZXI6OlRDUC5uZXco c2VydmVyX2FkZHJlc3MsIHNlcnZlcl9wb3J0KQotKyAgICAgICAgYmVnaW4KLSsgICAgICAgICAg bXNnID0gUmVzb2x2OjpETlM6Ok1lc3NhZ2UubmV3Ci0rICAgICAgICAgIG1zZy5hZGRfcXVlc3Rp b24oJ2V4YW1wbGUub3JnJywgUmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6QSkKLSsgICAgICAg ICAgc2VuZGVyID0gcmVxdWVzdGVyLnNlbmRlcihtc2csIG1zZykKLSsgICAgICAgICAgYXNzZXJ0 X3JhaXNlKFJlc29sdjo6UmVzb2x2VGltZW91dCkgZG8KLSsgICAgICAgICAgICByZXF1ZXN0ZXIu cmVxdWVzdChzZW5kZXIsIDIpCi0rICAgICAgICAgIGVuZAotKyAgICAgICAgZW5zdXJlCi0rICAg ICAgICAgIHJlcXVlc3Rlci5jbG9zZQotKyAgICAgICAgZW5kCi0rICAgICAgZW5kCi0rCi0rICAg ICAgc2VydmVyX3RocmVhZC5qb2luCi0rICAgICAgY2xpZW50X3RocmVhZC5qb2luCi0rICAgIGVu ZAotKyAgZW5kCi0gZW5kCi1kaWZmIC0tZ2l0IGEvdGVzdC9yZXNvbHYvdGVzdF9yZXNvdXJjZS5y YiBiL3Rlc3QvcmVzb2x2L3Rlc3RfcmVzb3VyY2UucmIKLWluZGV4IDQzNDM4MDIzNmU2NzIxLi5i NGU1NmNlNGJiOGZmNSAxMDA2NDQKLS0tLSBhL3Rlc3QvcmVzb2x2L3Rlc3RfcmVzb3VyY2UucmIK LSsrKyBiL3Rlc3QvcmVzb2x2L3Rlc3RfcmVzb3VyY2UucmIKLUBAIC0yNCw2ICsyNCw2NyBAQCBk ZWYgdGVzdF9jb29yZAotICAgICBSZXNvbHY6OkxPQzo6Q29vcmQuY3JlYXRlKCcxIDIgMS4xIE4n KQotICAgZW5kCi0gCi0rICAjIERlY29kaW5nIGFuIHVua25vd24gKHR5cGUsIGNsYXNzKSBwYWly IGJ1aWxkcyBhIGZyZXNoIGNsYXNzIGV2ZXJ5IHRpbWUsIHNvCi0rICAjIGVxdWFsaXR5IG11c3Qg bm90IHJlc3Qgb24gdGhlIGNsYXNzIGlkZW50aXR5LgotKyAgZGVmIHRlc3RfZ2VuZXJpY19lcXVh bGl0eQotKyAgICB3aXJlID0gZ2VuZXJpY19hbnN3ZXIoNDAwMDAsICJceDAxXHgwMlx4MDMiKQot KyAgICBycjEgPSBkZWNvZGVfZ2VuZXJpYyh3aXJlKQotKyAgICBycjIgPSBkZWNvZGVfZ2VuZXJp Yyh3aXJlKQotKwotKyAgICBhc3NlcnRfbm90X3NhbWUgcnIxLmNsYXNzLCBycjIuY2xhc3MKLSsg ICAgYXNzZXJ0X2VxdWFsIHJyMSwgcnIyCi0rICAgIGFzc2VydCBycjEuZXFsPyhycjIpCi0rICAg IGFzc2VydF9lcXVhbCBycjEuaGFzaCwgcnIyLmhhc2gKLSsgICAgYXNzZXJ0X2VxdWFsIFJlc29s djo6RE5TOjpNZXNzYWdlLmRlY29kZSh3aXJlKSwgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2Rl KHdpcmUpCi0rICBlbmQKLSsKLSsgICMgQW55IGRlc2NlbmRhbnQgY291bnRzLCBub3QganVzdCBh IGNsYXNzIGNyZWF0ZSByZXR1cm5lZC4KLSsgIGRlZiB0ZXN0X2dlbmVyaWNfZXF1YWxpdHlfYmV0 d2Vlbl9kZXNjZW5kYW50cwotKyAgICBnZW5lcmljID0gUmVzb2x2OjpETlM6OlJlc291cmNlOjpH ZW5lcmljCi0rICAgIGRpcmVjdCA9IGdlbmVyaWMuY3JlYXRlKDQwMDAwLCA2MDAwMCkKLSsgICAg ZGVzY2VuZGFudCA9IENsYXNzLm5ldyhnZW5lcmljLmNyZWF0ZSg0MDAwMCwgNjAwMDApKQotKwot KyAgICBhc3NlcnRfZXF1YWwgZGlyZWN0Lm5ldygiXHgwMVx4MDJceDAzIiksIGRlc2NlbmRhbnQu bmV3KCJceDAxXHgwMlx4MDMiKQotKyAgICBhc3NlcnRfZXF1YWwgZGVzY2VuZGFudC5uZXcoIlx4 MDFceDAyXHgwMyIpLCBkaXJlY3QubmV3KCJceDAxXHgwMlx4MDMiKQotKyAgICBhc3NlcnRfZXF1 YWwgZ2VuZXJpYy5uZXcoIlx4MDFceDAyXHgwMyIpLCBnZW5lcmljLm5ldygiXHgwMVx4MDJceDAz IikKLSsgICAgYXNzZXJ0X25vdF9lcXVhbCBkaXJlY3QubmV3KCJceDAxXHgwMlx4MDMiKSwKLSsg ICAgICBDbGFzcy5uZXcoZ2VuZXJpYy5jcmVhdGUoNDAwMDEsIDYwMDAwKSkubmV3KCJceDAxXHgw Mlx4MDMiKQotKyAgZW5kCi0rCi0rICBkZWYgdGVzdF9nZW5lcmljX2luZXF1YWxpdHkKLSsgICAg cnIgPSBkZWNvZGVfZ2VuZXJpYyhnZW5lcmljX2Fuc3dlcig0MDAwMCwgIlx4MDFceDAyXHgwMyIp KQotKwotKyAgICBhc3NlcnRfbm90X2VxdWFsIHJyLCBkZWNvZGVfZ2VuZXJpYyhnZW5lcmljX2Fu c3dlcig0MDAwMSwgIlx4MDFceDAyXHgwMyIpKQotKyAgICBhc3NlcnRfbm90X2VxdWFsIHJyLCBk ZWNvZGVfZ2VuZXJpYyhnZW5lcmljX2Fuc3dlcig0MDAwMCwgIlx4MDlceDA5XHgwOSIpKQotKyAg ICBhc3NlcnRfbm90X2VxdWFsIHJyLCBSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpBLm5ldygi MTkyLjE2OC4wLjEiKQotKyAgZW5kCi0rCi0rICAjIEEgcXVlc3Rpb24gaG9sZHMgdGhlIHJlc291 cmNlIGNsYXNzIGl0c2VsZiwgc28gaXQgbmVlZHMgdGhlIHNhbWUgdHJlYXRtZW50LgotKyAgZGVm IHRlc3RfZ2VuZXJpY19xdWVzdGlvbl9lcXVhbGl0eQotKyAgICB3aXJlID0gZ2VuZXJpY19xdWVz dGlvbig0MDAwMCkKLSsKLSsgICAgYXNzZXJ0X2VxdWFsIFJlc29sdjo6RE5TOjpNZXNzYWdlLmRl Y29kZSh3aXJlKSwgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKHdpcmUpCi0rICAgIGFzc2Vy dF9ub3RfZXF1YWwgUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKHdpcmUpLAotKyAgICAgIFJl c29sdjo6RE5TOjpNZXNzYWdlLmRlY29kZShnZW5lcmljX3F1ZXN0aW9uKDQwMDAxKSkKLSsgIGVu ZAotKwotKyAgcHJpdmF0ZSBkZWYgaGVhZGVyKHFkY291bnQsIGFuY291bnQpCi0rICAgICJceDAw XHgwMFx4MDBceDAwIi5iICsgW3FkY291bnQsIGFuY291bnQsIDAsIDBdLnBhY2soJ25ubm4nKQot KyAgZW5kCi0rCi0rICBwcml2YXRlIGRlZiBnZW5lcmljX2Fuc3dlcih0eXBlLCByZGF0YSkKLSsg ICAgcmRhdGEgPSByZGF0YS5iCi0rICAgIChoZWFkZXIoMCwgMSkgKyAiXHgwMCIuYiArIFt0eXBl LCA2MDAwMCwgMCwgcmRhdGEuYnl0ZXNpemVdLnBhY2soJ25uTm4nKSArIHJkYXRhKS5iCi0rICBl bmQKLSsKLSsgIHByaXZhdGUgZGVmIGdlbmVyaWNfcXVlc3Rpb24odHlwZSkKLSsgICAgKGhlYWRl cigxLCAwKSArICJceDA3ZXhhbXBsZVx4MDNjb21ceDAwIi5iICsgW3R5cGUsIDYwMDAwXS5wYWNr KCdubicpKS5iCi0rICBlbmQKLSsKLSsgIHByaXZhdGUgZGVmIGRlY29kZV9nZW5lcmljKHdpcmUp Ci0rICAgIFJlc29sdjo6RE5TOjpNZXNzYWdlLmRlY29kZSh3aXJlKS5hbnN3ZXIuZmlyc3RbMl0K LSsgIGVuZAotKwotICAgZGVmIHRlc3Rfc3J2X25vX2NvbXByZXNzCi0gICAgICMgRG9tYWluIG5h bWUgaW4gU1JWIFJEQVRBIHNob3VsZCBub3QgYmUgY29tcHJlc3NlZAotICAgICBpc3N1ZTI5ID0g J2h0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3Jlc29sdi9pc3N1ZXMvMjknCi1kaWZmIC0tZ2l0IGEv dGVzdC9yZXNvbHYvdGVzdF9yZXNvdXJjZV9sZWFrLnJiIGIvdGVzdC9yZXNvbHYvdGVzdF9yZXNv dXJjZV9sZWFrLnJiCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwMDAwMDAu LjQ2MjhhM2QyODU3Njc3Ci0tLS0gL2Rldi9udWxsCi0rKysgYi90ZXN0L3Jlc29sdi90ZXN0X3Jl c291cmNlX2xlYWsucmIKLUBAIC0wLDAgKzEsMTAxIEBACi0rIyBmcm96ZW5fc3RyaW5nX2xpdGVy YWw6IGZhbHNlCi0rcmVxdWlyZSAndGVzdC91bml0JwotK3JlcXVpcmUgJ3Jlc29sdicKLSsKLSsj IERlY29kaW5nIGEgcmVzcG9uc2Ugd2l0aCB1bmtub3duICh0eXBlLCBjbGFzcykgcGFpcnMgb3Ig dW5rbm93biBTdmNQYXJhbUtleXMKLSsjIHVzZWQgdG8gcmVnaXN0ZXIgYSBnZW5lcmF0ZWQgY2xh c3MgcGVybWFuZW50bHksIHNvIGEgbWFsaWNpb3VzIHJlc3BvbnNlIGNvdWxkCi0rIyBleGhhdXN0 IG1lbW9yeSBldmVuIGFmdGVyIHRoZSByZXNwb25zZSB3YXMgZGlzY2FyZGVkLgotK2NsYXNzIFRl c3RSZXNvbHZSZXNvdXJjZUxlYWsgPCBUZXN0OjpVbml0OjpUZXN0Q2FzZQotKyAgIyBOdW1iZXIg b2YgZHluYW1pY2FsbHktcmVnaXN0ZXJlZCAiVHlwZTxuPl9DbGFzczxuPiIgY29uc3RhbnRzIG9u ICttb2QrLgotKyAgZGVmIHR5cGVfY29uc3RfY291bnQobW9kKQotKyAgICBtb2QuY29uc3RhbnRz KGZhbHNlKS5jb3VudCB7IHxjfCBjLnRvX3MubWF0Y2g/KC9cQVR5cGVcZCtfQ2xhc3NcZCtcei8p IH0KLSsgIGVuZAotKwotKyAgZGVmIHN2Y3BhcmFtX2tleV9jb25zdF9jb3VudAotKyAgICBSZXNv bHY6OkROUzo6U3ZjUGFyYW06OkdlbmVyaWMuY29uc3RhbnRzKGZhbHNlKS5jb3VudCB7IHxjfCBj LnRvX3MubWF0Y2g/KC9cQUtleVxkK1x6LykgfQotKyAgZW5kCi0rCi0rICAjIEEgRE5TIHJlc3Bv bnNlIHdob3NlIGFuc3dlciBzZWN0aW9uIGhvbGRzICtjb3VudCsgUlJzLCBlYWNoIHdpdGggYSBk aXN0aW5jdAotKyAgIyB1bmtub3duICh0eXBlLCBjbGFzcykgcGFpci4KLSsgIGRlZiB1bmtub3du X3R5cGVjbGFzc19yZXNwb25zZShjb3VudCkKLSsgICAgYm9keSA9ICIiLmIKLSsgICAgY291bnQu dGltZXMgZG8gfGl8Ci0rICAgICAgdHlwZSAgPSA0MDAwMCArIGkKLSsgICAgICBrbGFzcyA9IDYw MDAwCi0rICAgICAgcmRhdGEgPSAiXHgwMVx4MDJceDAzIi5iCi0rICAgICAgYm9keSA8PCAiXHgw MCIuYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTkFNRSA9IHJvb3QKLSsg ICAgICBib2R5IDw8IFt0eXBlLCBrbGFzcywgMCwgcmRhdGEuYnl0ZXNpemVdLnBhY2soJ25uTm4n KQotKyAgICAgIGJvZHkgPDwgcmRhdGEKLSsgICAgZW5kCi0rICAgIGhlYWRlciA9ICJceDAwXHgw MFx4MDBceDAwIi5iICsgWzAsIGNvdW50LCAwLCAwXS5wYWNrKCdubm5uJykKLSsgICAgKGhlYWRl ciArIGJvZHkpLmIKLSsgIGVuZAotKwotKyAgIyBBbiBTVkNCIFJSICh0eXBlIDY0KSBjYXJyeWlu ZyArY291bnQrIGRpc3RpbmN0IHVua25vd24gU3ZjUGFyYW1LZXlzLgotKyAgZGVmIHVua25vd25f c3ZjcGFyYW1fcmVzcG9uc2UoY291bnQpCi0rICAgIHJkYXRhID0gIiIuYgotKyAgICByZGF0YSA8 PCBbMV0ucGFjaygnbicpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN2Y1ByaW9y aXR5Ci0rICAgIHJkYXRhIDw8ICJceDAzZm9vXHgwN2V4YW1wbGVceDAzY29tXHgwMCIuYiAgICAg ICAgICAgICMgVGFyZ2V0TmFtZQotKyAgICBjb3VudC50aW1lcyBkbyB8aXwKLSsgICAgICBrZXkg PSAxMDAwICsgaQotKyAgICAgIHZhbCA9ICJ4Ii5iCi0rICAgICAgcmRhdGEgPDwgW2tleSwgdmFs LmJ5dGVzaXplXS5wYWNrKCdubicpIDw8IHZhbAotKyAgICBlbmQKLSsgICAgaGVhZGVyID0gIlx4 MDBceDAwXHgwMFx4MDAiLmIgKyBbMCwgMSwgMCwgMF0ucGFjaygnbm5ubicpCi0rICAgIG5hbWUg ICA9ICJceDA3ZXhhbXBsZVx4MDNjb21ceDAwIi5iCi0rICAgIHJyICAgICA9IG5hbWUgKyBbNjQs IDEsIDAsIHJkYXRhLmJ5dGVzaXplXS5wYWNrKCdubk5uJykgKyByZGF0YQotKyAgICAoaGVhZGVy ICsgcnIpLmIKLSsgIGVuZAotKwotKyAgZGVmIHRlc3RfdW5rbm93bl90eXBlY2xhc3NfZG9lc19u b3RfbGVha19jbGFzc2VzCi0rICAgIHJlc291cmNlID0gUmVzb2x2OjpETlM6OlJlc291cmNlCi0r ICAgIGdlbmVyaWMgID0gUmVzb2x2OjpETlM6OlJlc291cmNlOjpHZW5lcmljCi0rCi0rICAgIGJl Zm9yZV9yZXNvdXJjZSA9IHR5cGVfY29uc3RfY291bnQocmVzb3VyY2UpCi0rICAgIGJlZm9yZV9n ZW5lcmljICA9IHR5cGVfY29uc3RfY291bnQoZ2VuZXJpYykKLSsKLSsgICAgWzEwMCwgMTAwMF0u ZWFjaCBkbyB8Y291bnR8Ci0rICAgICAgbXNnID0gdW5rbm93bl90eXBlY2xhc3NfcmVzcG9uc2Uo Y291bnQpCi0rICAgICAgMy50aW1lcyB7IFJlc29sdjo6RE5TOjpNZXNzYWdlLmRlY29kZShtc2cp IH0KLSsgICAgZW5kCi0rICAgIEdDLnN0YXJ0Ci0rCi0rICAgIGFzc2VydF9lcXVhbCBiZWZvcmVf cmVzb3VyY2UsIHR5cGVfY29uc3RfY291bnQocmVzb3VyY2UpLAotKyAgICAgICdkZWNvZGluZyB1 bmtub3duICh0eXBlLCBjbGFzcykgUlJzIG11c3Qgbm90IHJlZ2lzdGVyIG5ldyBSZXNvdXJjZSBj b25zdGFudHMnCi0rICAgIGFzc2VydF9lcXVhbCBiZWZvcmVfZ2VuZXJpYywgdHlwZV9jb25zdF9j b3VudChnZW5lcmljKSwKLSsgICAgICAnZGVjb2RpbmcgdW5rbm93biAodHlwZSwgY2xhc3MpIFJS cyBtdXN0IG5vdCByZWdpc3RlciBuZXcgR2VuZXJpYyBjb25zdGFudHMnCi0rICBlbmQKLSsKLSsg IGRlZiB0ZXN0X3Vua25vd25fc3ZjcGFyYW1fa2V5X2RvZXNfbm90X2xlYWtfY2xhc3NlcwotKyAg ICBjbGFzc19oYXNoID0gUmVzb2x2OjpETlM6OlN2Y1BhcmFtOjpDbGFzc0hhc2gKLSsKLSsgICAg YmVmb3JlX2NvbnN0cyA9IHN2Y3BhcmFtX2tleV9jb25zdF9jb3VudAotKyAgICBiZWZvcmVfaGFz aCAgID0gY2xhc3NfaGFzaC5zaXplCi0rCi0rICAgIFsxMDAsIDEwMDBdLmVhY2ggZG8gfGNvdW50 fAotKyAgICAgIG1zZyA9IHVua25vd25fc3ZjcGFyYW1fcmVzcG9uc2UoY291bnQpCi0rICAgICAg My50aW1lcyB7IFJlc29sdjo6RE5TOjpNZXNzYWdlLmRlY29kZShtc2cpIH0KLSsgICAgZW5kCi0r ICAgIEdDLnN0YXJ0Ci0rCi0rICAgIGFzc2VydF9lcXVhbCBiZWZvcmVfY29uc3RzLCBzdmNwYXJh bV9rZXlfY29uc3RfY291bnQsCi0rICAgICAgJ2RlY29kaW5nIHVua25vd24gU3ZjUGFyYW1LZXlz IG11c3Qgbm90IHJlZ2lzdGVyIG5ldyBHZW5lcmljIGNvbnN0YW50cycKLSsgICAgYXNzZXJ0X2Vx dWFsIGJlZm9yZV9oYXNoLCBjbGFzc19oYXNoLnNpemUsCi0rICAgICAgJ2RlY29kaW5nIHVua25v d24gU3ZjUGFyYW1LZXlzIG11c3Qgbm90IGdyb3cgU3ZjUGFyYW06OkNsYXNzSGFzaCcKLSsgIGVu ZAotKwotKyAgIyBEcm9wcGluZyB0aGUgcGVybWFuZW50IHJlZ2lzdHJhdGlvbiBtdXN0IG5vdCBi cmVhayBkZWNvZGluZyBvZiB0aGUgdW5rbm93bgotKyAgIyB2YWx1ZXMgdGhlbXNlbHZlcy4KLSsg IGRlZiB0ZXN0X3Vua25vd25fdmFsdWVzX3N0aWxsX2RlY29kZQotKyAgICBtc2cgPSBSZXNvbHY6 OkROUzo6TWVzc2FnZS5kZWNvZGUodW5rbm93bl90eXBlY2xhc3NfcmVzcG9uc2UoMykpCi0rICAg IGFzc2VydF9lcXVhbCAzLCBtc2cuYW5zd2VyLnNpemUKLSsgICAgXywgXywgcnIgPSBtc2cuYW5z d2VyLmZpcnN0Ci0rICAgIGFzc2VydF9raW5kX29mIFJlc29sdjo6RE5TOjpSZXNvdXJjZTo6R2Vu ZXJpYywgcnIKLSsgICAgYXNzZXJ0X2VxdWFsICJceDAxXHgwMlx4MDMiLmIsIHJyLmRhdGEKLSsK LSsgICAgbXNnID0gUmVzb2x2OjpETlM6Ok1lc3NhZ2UuZGVjb2RlKHVua25vd25fc3ZjcGFyYW1f cmVzcG9uc2UoMykpCi0rICAgIF8sIF8sIHN2Y2IgPSBtc2cuYW5zd2VyLmZpcnN0Ci0rICAgIGFz c2VydF9lcXVhbCAzLCBzdmNiLnBhcmFtcy5jb3VudAotKyAgICBhc3NlcnRfZXF1YWwgIngiLmIs IHN2Y2IucGFyYW1zWzprZXkxMDAwXS52YWx1ZQotKyAgZW5kCi0rZW5kCi0tLS0gcnVieS00LjAu Ni5vcmlnL2xpYi9ydWJ5Z2Vtcy92ZW5kb3IvcmVzb2x2L2xpYi9yZXNvbHYucmIJMjAyNi0wNy0x NCAwOToyMjoxMC4wMDAwMDAwMDAgKzA5MDAKLSsrKyBydWJ5LTQuMC42L2xpYi9ydWJ5Z2Vtcy92 ZW5kb3IvcmVzb2x2L2xpYi9yZXNvbHYucmIJMjAyNi0wOS0wMyAxNzoxNjoxOC41NDMwMjUxNjQg KzA5MDAKLUBAIC0zNSw3ICszNSw3IEBACi0gY2xhc3MgR2VtOjpSZXNvbHYKLSAKLSAgICMgVGhl IHZlcnNpb24gc3RyaW5nCi0tICBWRVJTSU9OID0gIjAuNy4wIgotKyAgVkVSU0lPTiA9ICIwLjcu MiIKLSAKLSAgICMjCi0gICAjIExvb2tzIHVwIHRoZSBmaXJzdCBJUCBhZGRyZXNzIGZvciArbmFt ZSsuCi1AQCAtNDg3LDEzICs0ODcsMTggQEAgZGVmIGVhY2hfbmFtZShhZGRyZXNzKQotICAgICAj ICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpBCi0gICAgICMgKiBHZW06OlJlc29s djo6RE5TOjpSZXNvdXJjZTo6SU46OkFBQUEKLSAgICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJl c291cmNlOjpJTjo6QU5ZCi0rICAgICMgKiBHZW06OlJlc29sdjo6RE5TOjpSZXNvdXJjZTo6SU46 OkNBQQotICAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpDTkFNRQotICAg ICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpISU5GTwotKyAgICAjICogR2Vt OjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpIVFRQUwotKyAgICAjICogR2VtOjpSZXNvbHY6 OkROUzo6UmVzb3VyY2U6OklOOjpMT0MKLSAgICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291 cmNlOjpJTjo6TUlORk8KLSAgICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6 TVgKLSAgICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6TlMKLSAgICAgIyAq IEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6UFRSCi0gICAgICMgKiBHZW06OlJlc29s djo6RE5TOjpSZXNvdXJjZTo6SU46OlNPQQotKyAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVz b3VyY2U6OklOOjpTUlYKLSsgICAgIyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6 U1ZDQgotICAgICAjICogR2VtOjpSZXNvbHY6OkROUzo6UmVzb3VyY2U6OklOOjpUWFQKLSAgICAg IyAqIEdlbTo6UmVzb2x2OjpETlM6OlJlc291cmNlOjpJTjo6V0tTCi0gICAgICMKLUBAIC03MjEs NyArNzI2LDggQEAgZGVmIHJlcXVlc3Qoc2VuZGVyLCB0b3V0KQotICAgICAgICAgICBiZWdpbgot ICAgICAgICAgICAgIHJlcGx5LCBmcm9tID0gcmVjdl9yZXBseShzZWxlY3RfcmVzdWx0WzBdKQot ICAgICAgICAgICByZXNjdWUgRXJybm86OkVDT05OUkVGVVNFRCwgIyBHTlUvTGludXgsIEZyZWVC U0QKLS0gICAgICAgICAgICAgICAgIEVycm5vOjpFQ09OTlJFU0VUICMgV2luZG93cwotKyAgICAg ICAgICAgICAgICAgRXJybm86OkVDT05OUkVTRVQsICMgV2luZG93cwotKyAgICAgICAgICAgICAg ICAgRU9GRXJyb3IKLSAgICAgICAgICAgICAjIE5vIG5hbWUgc2VydmVyIHJ1bm5pbmcgb24gdGhl IHNlcnZlcj8KLSAgICAgICAgICAgICAjIERvbid0IHdhaXQgYW55bW9yZS4KLSAgICAgICAgICAg ICByYWlzZSBSZXNvbHZUaW1lb3V0Ci1AQCAtOTMwLDggKzkzNiwxMSBAQCBkZWYgaW5pdGlhbGl6 ZShob3N0LCBwb3J0PVBvcnQpCi0gICAgICAgICBlbmQKLSAKLSAgICAgICAgIGRlZiByZWN2X3Jl cGx5KHJlYWRhYmxlX3NvY2tzKQotLSAgICAgICAgICBsZW4gPSByZWFkYWJsZV9zb2Nrc1swXS5y ZWFkKDIpLnVucGFjaygnbicpWzBdCi0rICAgICAgICAgIGxlbl9kYXRhID0gcmVhZGFibGVfc29j a3NbMF0ucmVhZCgyKQotKyAgICAgICAgICByYWlzZSBFT0ZFcnJvciBpZiBsZW5fZGF0YS5uaWw/ IHx8IGxlbl9kYXRhLmJ5dGVzaXplICE9IDIKLSsgICAgICAgICAgbGVuID0gbGVuX2RhdGEudW5w YWNrKCduJylbMF0KLSAgICAgICAgICAgcmVwbHkgPSBAc29ja3NbMF0ucmVhZChsZW4pCi0rICAg ICAgICAgIHJhaXNlIEVPRkVycm9yIGlmIHJlcGx5Lm5pbD8gfHwgcmVwbHkuYnl0ZXNpemUgIT0g bGVuCi0gICAgICAgICAgIHJldHVybiByZXBseSwgbmlsCi0gICAgICAgICBlbmQKLSAKLUBAIC0x MjQ0LDYgKzEyNTMsMTMgQEAgZGVmIHNlbGYuc3BsaXQoYXJnKQotIAotICAgICAgIGNsYXNzIFN0 ciAjIDpub2RvYzoKLSAgICAgICAgIGRlZiBpbml0aWFsaXplKHN0cmluZykKLSsgICAgICAgICAg IyBBIGxhYmVsIGlzIGxpbWl0ZWQgdG8gNjMgb2N0ZXRzLiBbUkZDIDEwMzUgMi4zLjRdIENoZWNr aW5nIGl0IGhlcmUKLSsgICAgICAgICAgIyBtYWtlcyBpdCBhbiBpbnZhcmlhbnQgb2YgdGhlIG9i amVjdDogZXZlcnkgbGFiZWwsIGhvd2V2ZXIgaXQgd2FzCi0rICAgICAgICAgICMgYnVpbHQsIGZp dHMgaW4gaXRzIGxlbmd0aCBvY3RldCBhbmQgY2Fubm90IHdyYXAgaXQuIENhbGxlcnMgdHVybgot KyAgICAgICAgICAjIHRoaXMgaW50byB0aGUgZXJyb3IgdGhlaXIgb3duIGNvbnRyYWN0IHByb21p c2VzLgotKyAgICAgICAgICBpZiBzdHJpbmcuYnl0ZXNpemUgPiA2MwotKyAgICAgICAgICAgIHJh aXNlIEFyZ3VtZW50RXJyb3IsICJETlMgbGFiZWwgaXMgdG9vIGxvbmcgKCN7c3RyaW5nLmJ5dGVz aXplfSBieXRlcywgbWF4IDYzKTogI3tzdHJpbmcuaW5zcGVjdH0iCi0rICAgICAgICAgIGVuZAot ICAgICAgICAgICBAc3RyaW5nID0gc3RyaW5nCi0gICAgICAgICAgICMgY2FzZSBpbnNlbnNpdml0 eSBvZiBETlMgbGFiZWxzIGRvZXNuJ3QgYXBwbHkgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFtSRkMg NDM0M10KLSAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgQHN0cmluZyBpcyBnaXZlbiBpbiBBU0NJ SSBjb21wYXRpYmxlIGVuY29kaW5nLgotQEAgLTEyODksNyArMTMwNSwyNiBAQCBkZWYgc2VsZi5j cmVhdGUoYXJnKQotICAgICAgICAgd2hlbiBOYW1lCi0gICAgICAgICAgIHJldHVybiBhcmcKLSAg ICAgICAgIHdoZW4gU3RyaW5nCi0tICAgICAgICAgIHJldHVybiBOYW1lLm5ldyhMYWJlbC5zcGxp dChhcmcpLCAvXC5cei8gPX4gYXJnID8gdHJ1ZSA6IGZhbHNlKQotKyAgICAgICAgICAjIEEgaG9z dG5hbWUgaXMgcnVudGltZSBkYXRhIHJhdGhlciB0aGFuIGEgcHJvZ3JhbW1pbmcgbWlzdGFrZSwg c28KLSsgICAgICAgICAgIyBib3RoIHNpemUgbGltaXRzIHN1cmZhY2UgYXMgUmVzb2x2RXJyb3Ig dG8gc3RheSByZXNjdWFibGUgYWxvbmdzaWRlCi0rICAgICAgICAgICMgdGhlIHJlc3Qgb2YgbmFt ZSByZXNvbHV0aW9uLiBUaGUgdHlwZSBjaGVjayBiZWxvdyBpcyBhIGNhbGxlcgotKyAgICAgICAg ICAjIG1pc3Rha2UgYW5kIGtlZXBzIHJhaXNpbmcgQXJndW1lbnRFcnJvci4KLSsgICAgICAgICAg YmVnaW4KLSsgICAgICAgICAgICBsYWJlbHMgPSBMYWJlbC5zcGxpdChhcmcpCi0rICAgICAgICAg IHJlc2N1ZSBBcmd1bWVudEVycm9yID0+IGUKLSsgICAgICAgICAgICByYWlzZSBSZXNvbHZFcnJv ci5uZXcoZS5tZXNzYWdlKQotKyAgICAgICAgICBlbmQKLSsgICAgICAgICAgIyBMYWJlbDo6U3Ry IGVuZm9yY2VzIHRoZSBwZXItbGFiZWwgbGltaXQuIE9ubHkgdGhlIHRvdGFsIGlzIGtub3dhYmxl Ci0rICAgICAgICAgICMgaGVyZSwgYW5kIGl0IGNvdW50cyB0aGUgZW5jb2RlZCBmb3JtLCBzbyBz aXplIHN0YXJ0cyBhdCAxIGZvciB0aGUKLSsgICAgICAgICAgIyByb290IGxhYmVsJ3MgdGVybWlu YXRpbmcgemVybyBvY3RldC4gW1JGQyAxMDM1IDIuMy40LCAzLjFdCi0rICAgICAgICAgIHNpemUg PSAxCi0rICAgICAgICAgIGxhYmVscy5lYWNoIGRvIHxsYWJlbHwKLSsgICAgICAgICAgICBzaXpl ICs9IDEgKyBsYWJlbC5zdHJpbmcuYnl0ZXNpemUKLSsgICAgICAgICAgICBpZiBzaXplID4gMjU1 Ci0rICAgICAgICAgICAgICByYWlzZSBSZXNvbHZFcnJvci5uZXcoIkROUyBuYW1lIGlzIHRvbyBs b25nICgje3NpemV9IG9jdGV0cywgbWF4IDI1NSk6ICN7YXJnLmluc3BlY3R9IikKLSsgICAgICAg ICAgICBlbmQKLSsgICAgICAgICAgZW5kCi0rICAgICAgICAgIHJldHVybiBOYW1lLm5ldyhsYWJl bHMsIC9cLlx6LyA9fiBhcmcgPyB0cnVlIDogZmFsc2UpCi0gICAgICAgICBlbHNlCi0gICAgICAg ICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IubmV3KCJjYW5ub3QgaW50ZXJwcmV0IGFzIEROUyBuYW1l OiAje2FyZy5pbnNwZWN0fSIpCi0gICAgICAgICBlbmQKLUBAIC0xNDExLDEyICsxNDQ2LDI0IEBA IGRlZiA9PShvdGhlcikKLSAgICAgICAgICAgICAgICBAcmQgPT0gb3RoZXIucmQgJiYKLSAgICAg ICAgICAgICAgICBAcmEgPT0gb3RoZXIucmEgJiYKLSAgICAgICAgICAgICAgICBAcmNvZGUgPT0g b3RoZXIucmNvZGUgJiYKLS0gICAgICAgICAgICAgICBAcXVlc3Rpb24gPT0gb3RoZXIucXVlc3Rp b24gJiYKLSsgICAgICAgICAgICAgICBxdWVzdGlvbl9lcXVhbD8ob3RoZXIucXVlc3Rpb24pICYm Ci0gICAgICAgICAgICAgICAgQGFuc3dlciA9PSBvdGhlci5hbnN3ZXIgJiYKLSAgICAgICAgICAg ICAgICBAYXV0aG9yaXR5ID09IG90aGVyLmF1dGhvcml0eSAmJgotICAgICAgICAgICAgICAgIEBh ZGRpdGlvbmFsID09IG90aGVyLmFkZGl0aW9uYWwKLSAgICAgICBlbmQKLSAKLSsgICAgICAjIEEg cXVlc3Rpb24gaG9sZHMgdGhlIHJlc291cmNlIGNsYXNzIGl0c2VsZiwgYW5kIGRlY29kaW5nIGNy ZWF0ZXMgYSBmcmVzaAotKyAgICAgICMgY2xhc3MgZm9yIGVhY2ggdW5rbm93biB0eXBlLCBzbyB0 aGUgY2xhc3NlcyBjYW5ub3QgYmUgY29tcGFyZWQgYnkKLSsgICAgICAjIGlkZW50aXR5IGFsb25l LgotKyAgICAgIHByaXZhdGUgZGVmIHF1ZXN0aW9uX2VxdWFsPyhvdGhlcl9xdWVzdGlvbikgIyA6 bm9kb2M6Ci0rICAgICAgICByZXR1cm4gZmFsc2UgdW5sZXNzIEBxdWVzdGlvbi5sZW5ndGggPT0g b3RoZXJfcXVlc3Rpb24ubGVuZ3RoCi0rICAgICAgICBAcXVlc3Rpb24uemlwKG90aGVyX3F1ZXN0 aW9uKSB7fChuYW1lLCB0eXBlY2xhc3MpLCAob19uYW1lLCBvX3R5cGVjbGFzcyl8Ci0rICAgICAg ICAgIHJldHVybiBmYWxzZSB1bmxlc3MgbmFtZSA9PSBvX25hbWUgJiYKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZXNvdXJjZTo6R2VuZXJpYy50eXBlX2NsYXNzX2VxdWFsPyh0eXBl Y2xhc3MsIG9fdHlwZWNsYXNzKQotKyAgICAgICAgfQotKyAgICAgICAgcmV0dXJuIHRydWUKLSsg ICAgICBlbmQKLSsKLSAgICAgICBkZWYgYWRkX3F1ZXN0aW9uKG5hbWUsIHR5cGVjbGFzcykKLSAg ICAgICAgIEBxdWVzdGlvbiA8PCBbTmFtZS5jcmVhdGUobmFtZSksIHR5cGVjbGFzc10KLSAgICAg ICBlbmQKLUBAIC0xNTIzLDggKzE1NzAsMTUgQEAgZGVmIHB1dF9sZW5ndGgxNgotICAgICAgICAg ZW5kCi0gCi0gICAgICAgICBkZWYgcHV0X3N0cmluZyhkKQotLSAgICAgICAgICBzZWxmLnB1dF9w YWNrKCJDIiwgZC5sZW5ndGgpCi0tICAgICAgICAgIEBkYXRhIDw8IGQKLSsgICAgICAgICAgcyA9 IGQudG9fcwotKyAgICAgICAgICAjIEEgY2hhcmFjdGVyLXN0cmluZyBpcyBwcmVmaXhlZCBieSBh IHNpbmdsZSBsZW5ndGggb2N0ZXQsIHNvIGl0IGNhbgotKyAgICAgICAgICAjIGhvbGQgYXQgbW9z dCAyNTUgb2N0ZXRzLiBbUkZDIDEwMzUgMy4zXSBSZWplY3QgYW55dGhpbmcgbG9uZ2VyIHRvCi0r ICAgICAgICAgICMgYXZvaWQgc2lsZW50bHkgdHJ1bmNhdGluZyB0aGUgbGVuZ3RoIHRvIGl0cyBs b3cgOCBiaXRzIChtb2QgMjU2KS4KLSsgICAgICAgICAgaWYgcy5ieXRlc2l6ZSA+IDI1NQotKyAg ICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICJjaGFyYWN0ZXItc3RyaW5nIGlzIHRvbyBs b25nICgje3MuYnl0ZXNpemV9IGJ5dGVzLCBtYXggMjU1KTogI3tzLmluc3BlY3R9IgotKyAgICAg ICAgICBlbmQKLSsgICAgICAgICAgc2VsZi5wdXRfcGFjaygiQyIsIHMuYnl0ZXNpemUpCi0rICAg ICAgICAgIEBkYXRhIDw8IHMKLSAgICAgICAgIGVuZAotIAotICAgICAgICAgZGVmIHB1dF9zdHJp bmdfbGlzdChkcykKLUBAIC0xNTU0LDcgKzE2MDgsMTcgQEAgZGVmIHB1dF9sYWJlbHMoZCwgY29t cHJlc3M6IHRydWUpCi0gICAgICAgICBlbmQKLSAKLSAgICAgICAgIGRlZiBwdXRfbGFiZWwoZCkK LS0gICAgICAgICAgc2VsZi5wdXRfc3RyaW5nKGQudG9fcykKLSsgICAgICAgICAgcyA9IGQudG9f cwotKyAgICAgICAgICAjIExhYmVsOjpTdHIgYXBwbGllcyB0aGlzIGxpbWl0IHdoZW4gYSBsYWJl bCBpcyBidWlsdCwgc28gd2hhdCBpcyBsZWZ0Ci0rICAgICAgICAgICMgZm9yIGhlcmUgaXMgYSBy YXcgc3RyaW5nIGhhbmRlZCBzdHJhaWdodCB0byBwdXRfbGFiZWxzLiBUaGUgdHdvIHdheXMKLSsg ICAgICAgICAgIyBhbiBvdmVyLWxvbmcgbGFiZWwgZ29lcyB3cm9uZyBkaWZmZXI6IDY0IHRvIDI1 NSBvY3RldHMgd3JpdGUgYSBsZW5ndGgKLSsgICAgICAgICAgIyBvY3RldCBpbiB0aGUgcmVzZXJ2 ZWQgb3IgY29tcHJlc3Npb24gcG9pbnRlciByYW5nZSwgYW5kIDI1NiBvciBtb3JlCi0rICAgICAg ICAgICMgd3JhcCBpdCBtb2QgMjU2LiBFaXRoZXIgd2F5IHRoZSBlbmNvZGVkIG5hbWUgc3RvcHMg YmVpbmcgdGhlIG5hbWUgdGhlCi0rICAgICAgICAgICMgY2FsbGVyIGFza2VkIGZvci4gW1JGQyAx MDM1IDIuMy40LCA0LjEuNF0KLSsgICAgICAgICAgaWYgcy5ieXRlc2l6ZSA+IDYzCi0rICAgICAg ICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgIkROUyBsYWJlbCBpcyB0b28gbG9uZyAoI3tzLmJ5 dGVzaXplfSBieXRlcywgbWF4IDYzKTogI3tzLmluc3BlY3R9IgotKyAgICAgICAgICBlbmQKLSsg ICAgICAgICAgc2VsZi5wdXRfc3RyaW5nKHMpCi0gICAgICAgICBlbmQKLSAgICAgICBlbmQKLSAK LUBAIC0xNjgwLDcgKzE3NDQsOSBAQCBkZWYgZ2V0X2xhYmVscwotICAgICAgICAgICBwcmV2X2lu ZGV4ID0gQGluZGV4Ci0gICAgICAgICAgIHNhdmVfaW5kZXggPSBuaWwKLSAgICAgICAgICAgZCA9 IFtdCi0tICAgICAgICAgIHNpemUgPSAtMQotKyAgICAgICAgICAjIHNpemUgY291bnRzIHRoZSBl bmNvZGVkIGZvcm0sIHNvIGl0IHN0YXJ0cyBhdCAxIGZvciB0aGUgcm9vdAotKyAgICAgICAgICAj IGxhYmVsJ3MgdGVybWluYXRpbmcgemVybyBvY3RldC4gW1JGQyAxMDM1IDMuMV0KLSsgICAgICAg ICAgc2l6ZSA9IDEKLSAgICAgICAgICAgd2hpbGUgdHJ1ZQotICAgICAgICAgICAgIHJhaXNlIERl Y29kZUVycm9yLm5ldygibGltaXQgZXhjZWVkZWQiKSBpZiBAbGltaXQgPD0gQGluZGV4Ci0gICAg ICAgICAgICAgY2FzZSBAZGF0YS5nZXRieXRlKEBpbmRleCkKLUBAIC0xNzExLDYgKzE3NzcsMTEg QEAgZGVmIGdldF9sYWJlbHMKLSAKLSAgICAgICAgIGRlZiBnZXRfbGFiZWwKLSAgICAgICAgICAg cmV0dXJuIExhYmVsOjpTdHIubmV3KHNlbGYuZ2V0X3N0cmluZykKLSsgICAgICAgIHJlc2N1ZSBB cmd1bWVudEVycm9yID0+IGUKLSsgICAgICAgICAgIyBBIGxlbmd0aCBvY3RldCBvZiA2NC4uMTkx IGlzIHJlc2VydmVkIHJhdGhlciB0aGFuIGEgbGFiZWwgbGVuZ3RoLAotKyAgICAgICAgICAjIGJ1 dCB0aGlzIGRlY29kZXIgdXNlZCB0byByZWFkIGl0IGFzIG9uZS4gW1JGQyAxMDM1IDQuMS40XSBS ZXBvcnQgaXQKLSsgICAgICAgICAgIyB0aGUgd2F5IHRoZSByZXN0IG9mIGEgbWFsZm9ybWVkIG1l c3NhZ2UgaXMgcmVwb3J0ZWQuCi0rICAgICAgICAgIHJhaXNlIERlY29kZUVycm9yLm5ldyhlLm1l c3NhZ2UpCi0gICAgICAgICBlbmQKLSAKLSAgICAgICAgIGRlZiBnZXRfcXVlc3Rpb24KLUBAIC0x ODk4LDggKzE5NjksOSBAQCBkZWYgc2VsZi5jcmVhdGUoa2V5X251bWJlcikKLSAgICAgICAgICAg a2V5X25hbWUgPSA6ImtleSN7a2V5X251bWJlcn0iCi0gICAgICAgICAgIGMuY29uc3Rfc2V0KDpL ZXlOYW1lLCBrZXlfbmFtZSkKLSAgICAgICAgICAgYy5jb25zdF9zZXQoOktleU51bWJlciwga2V5 X251bWJlcikKLS0gICAgICAgICAgc2VsZi5jb25zdF9zZXQoOiJLZXkje2tleV9udW1iZXJ9Iiwg YykKLS0gICAgICAgICAgQ2xhc3NIYXNoW2tleV9uYW1lXSA9IENsYXNzSGFzaFtrZXlfbnVtYmVy XSA9IGMKLSsgICAgICAgICAgIyBOb3QgcmVnaXN0ZXJlZCBpbiBhIGNvbnN0YW50IG9yIGluIENs YXNzSGFzaC4gQ2xhc3NIYXNoIGNyZWF0ZXMgYQotKyAgICAgICAgICAjIGNsYXNzIGZvciBldmVy eSB1bmtub3duIFN2Y1BhcmFtS2V5LCBzbyByZWdpc3RlcmluZyB0aGVtCi0rICAgICAgICAgICMg cGVybWFuZW50bHkgd291bGQgbGV0IGEgbWFsaWNpb3VzIHJlc3BvbnNlIGV4aGF1c3QgbWVtb3J5 LgotICAgICAgICAgICByZXR1cm4gYwotICAgICAgICAgZW5kCi0gICAgICAgZW5kCi1AQCAtMjIw NiwxMiArMjI3OCwyOCBAQCBkZWYgc2VsZi5kZWNvZGVfcmRhdGEobXNnKSAjIDpub2RvYzoKLSAg ICAgICAgICAgcmV0dXJuIHNlbGYubmV3KG1zZy5nZXRfYnl0ZXMpCi0gICAgICAgICBlbmQKLSAK LSsgICAgICAgICMgY3JlYXRlIG1ha2VzIGEgZnJlc2ggY2xhc3MgZm9yIGVhY2ggZGVjb2RlZCBy ZXNvdXJjZSwgc28gdGhlIHR5cGUgYW5kCi0rICAgICAgICAjIGNsYXNzIHZhbHVlcyBoYXZlIHRv IGJlIGNvbXBhcmVkIGluc3RlYWQgb2YgdGhlIGNsYXNzIGl0c2VsZi4KLSsgICAgICAgIGRlZiBz ZWxmLnR5cGVfY2xhc3NfZXF1YWw/KGtsYXNzLCBvdGhlcikgIyA6bm9kb2M6Ci0rICAgICAgICAg IHJldHVybiB0cnVlIGlmIGtsYXNzLmVxdWFsPyhvdGhlcikKLSsgICAgICAgICAgR2VuZXJpYyA+ IGtsYXNzICYmIEdlbmVyaWMgPiBvdGhlciAmJgotKyAgICAgICAgICAgIGtsYXNzOjpUeXBlVmFs dWUgPT0gb3RoZXI6OlR5cGVWYWx1ZSAmJgotKyAgICAgICAgICAgIGtsYXNzOjpDbGFzc1ZhbHVl ID09IG90aGVyOjpDbGFzc1ZhbHVlCi0rICAgICAgICBlbmQKLSsKLSsgICAgICAgIGRlZiA9PShv dGhlcikgIyA6bm9kb2M6Ci0rICAgICAgICAgIHJldHVybiBvdGhlci5pc19hPyhHZW5lcmljKSAm JgotKyAgICAgICAgICAgICAgICAgR2VuZXJpYy50eXBlX2NsYXNzX2VxdWFsPyhzZWxmLmNsYXNz LCBvdGhlci5jbGFzcykgJiYKLSsgICAgICAgICAgICAgICAgIEBkYXRhID09IG90aGVyLmRhdGEK LSsgICAgICAgIGVuZAotKwotICAgICAgICAgZGVmIHNlbGYuY3JlYXRlKHR5cGVfdmFsdWUsIGNs YXNzX3ZhbHVlKSAjIDpub2RvYzoKLSAgICAgICAgICAgYyA9IENsYXNzLm5ldyhHZW5lcmljKQot ICAgICAgICAgICBjLmNvbnN0X3NldCg6VHlwZVZhbHVlLCB0eXBlX3ZhbHVlKQotICAgICAgICAg ICBjLmNvbnN0X3NldCg6Q2xhc3NWYWx1ZSwgY2xhc3NfdmFsdWUpCi0tICAgICAgICAgIEdlbmVy aWMuY29uc3Rfc2V0KCJUeXBlI3t0eXBlX3ZhbHVlfV9DbGFzcyN7Y2xhc3NfdmFsdWV9IiwgYykK LS0gICAgICAgICAgQ2xhc3NIYXNoW1t0eXBlX3ZhbHVlLCBjbGFzc192YWx1ZV1dID0gYwotKyAg ICAgICAgICAjIE5vdCByZWdpc3RlcmVkIGluIGEgY29uc3RhbnQgb3IgaW4gQ2xhc3NIYXNoLiBn ZXRfY2xhc3MgY3JlYXRlcyBhCi0rICAgICAgICAgICMgY2xhc3MgZm9yIGV2ZXJ5IHVua25vd24g KHR5cGUsIGNsYXNzKSBwYWlyLCBzbyByZWdpc3RlcmluZyB0aGVtCi0rICAgICAgICAgICMgcGVy bWFuZW50bHkgd291bGQgbGV0IGEgbWFsaWNpb3VzIHJlc3BvbnNlIGV4aGF1c3QgbWVtb3J5Lgot ICAgICAgICAgICByZXR1cm4gYwotICAgICAgICAgZW5kCi0gICAgICAgZW5kCi0KCmRpZmYgLS1n aXQgYS9ydWJ5LnNwZWMgYi9ydWJ5LnNwZWMKaW5kZXggYTJiMzZlMS4uMTg0NjA1OSAxMDA2NDQK LS0tIGEvcnVieS5zcGVjCisrKyBiL3J1Ynkuc3BlYwpAQCAtMSw2ICsxLDYgQEAKICVnbG9iYWwg bWFqb3JfdmVyc2lvbiA0CiAlZ2xvYmFsIG1pbm9yX3ZlcnNpb24gMAotJWdsb2JhbCB0ZWVueV92 ZXJzaW9uIDYKKyVnbG9iYWwgdGVlbnlfdmVyc2lvbiA3CiAlZ2xvYmFsIG1ham9yX21pbm9yX3Zl cnNpb24gJXttYWpvcl92ZXJzaW9ufS4le21pbm9yX3ZlcnNpb259CiAKICVnbG9iYWwgcnVieV92 ZXJzaW9uICV7bWFqb3JfbWlub3JfdmVyc2lvbn0uJXt0ZWVueV92ZXJzaW9ufQpAQCAtMzYsMTkg KzM2LDE4IEBACiAjIyBCVU5ETEVEX0dFTVNfVkVSU0lPTlMKIAogIyBCdW5kbGVkIGxpYnJhcmll cyB2ZXJzaW9ucwotJWdsb2JhbCBydWJ5Z2Vtc192ZXJzaW9uIDQuMC4xNgorJWdsb2JhbCBydWJ5 Z2Vtc192ZXJzaW9uIDQuMC4yMAogJWdsb2JhbCBydWJ5Z2Vtc19tb2xpbmlsbG9fdmVyc2lvbiAw LjguMAogJWdsb2JhbCBydWJ5Z2Vtc19uZXRfaHR0cF92ZXJzaW9uIDAuNy4wCiAlZ2xvYmFsIHJ1 YnlnZW1zX25ldF9wcm90b2NvbF92ZXJzaW9uIDAuMi4yCiAlZ2xvYmFsIHJ1YnlnZW1zX29wdHBh cnNlX3ZlcnNpb24gMC44LjAKLSVnbG9iYWwgcnVieWdlbXNfcmVzb2x2X3ZlcnNpb24gMC43LjIK ICVnbG9iYWwgcnVieWdlbXNfc2VjdXJlcmFuZG9tX3ZlcnNpb24gMC40LjEKICVnbG9iYWwgcnVi eWdlbXNfdGltZW91dF92ZXJzaW9uIDAuNC40CiAlZ2xvYmFsIHJ1YnlnZW1zX3Rzb3J0X3ZlcnNp b24gMC4yLjAKICVnbG9iYWwgcnVieWdlbXNfdXJpX3ZlcnNpb24gMS4xLjEKIAogIyBEZWZhdWx0 IGdlbXMuCi0lZ2xvYmFsIGJ1bmRsZXJfdmVyc2lvbiA0LjAuMTYKKyVnbG9iYWwgYnVuZGxlcl92 ZXJzaW9uIDQuMC4yMAogJWdsb2JhbCBidW5kbGVyX2Nvbm5lY3Rpb25fcG9vbF92ZXJzaW9uIDIu NS40CiAlZ2xvYmFsIGJ1bmRsZXJfZmlsZXV0aWxzX3ZlcnNpb24gMS44LjAKICVnbG9iYWwgYnVu ZGxlcl9uZXRfaHR0cF9wZXJzaXN0ZW50X3ZlcnNpb24gNC4wLjYKQEAgLTYyLDcgKzYxLDcgQEAK ICVnbG9iYWwgZGlkX3lvdV9tZWFuX3ZlcnNpb24gMi4wLjAKICVnbG9iYWwgZGlnZXN0X3ZlcnNp b24gMy4yLjEKICVnbG9iYWwgZW5nbGlzaF92ZXJzaW9uIDAuOC4xCi0lZ2xvYmFsIGVyYl92ZXJz aW9uIDYuMC4xLjEKKyVnbG9iYWwgZXJiX3ZlcnNpb24gNi4wLjcKICVnbG9iYWwgZXJyb3JfaGln aGxpZ2h0X3ZlcnNpb24gMC43LjIKICVnbG9iYWwgZXRjX3ZlcnNpb24gMS40LjYKICVnbG9iYWwg ZmNudGxfdmVyc2lvbiAxLjMuMApAQCAtMTg5LDcgKzE4OCw3IEBACiBTdW1tYXJ5OiBBbiBpbnRl cnByZXRlciBvZiBvYmplY3Qtb3JpZW50ZWQgc2NyaXB0aW5nIGxhbmd1YWdlCiBOYW1lOiBydWJ5 CiBWZXJzaW9uOiAle3J1YnlfdmVyc2lvbn0lez9kZXZlbG9wbWVudF9yZWxlYXNlfQotUmVsZWFz ZTogMzglez9kaXN0fQorUmVsZWFzZTogMzklez9kaXN0fQogIyBMaWNlbnNlcywgd2hpY2ggYXJl IGxpa2VseSBub3QgaW5jbHVkZWQgaW4gYmluYXJ5IFJQTXM6CiAjIEFwYWNoZS0yLjA6CiAjICAg YmVuY2htYXJrL2djL3JlZGJsYWNrLnJiCkBAIC0yOTgsMTAgKzI5NywxMiBAQCBQYXRjaDg6IHJ1 YnktNC4wLjEtU3VwcG9ydC1jdXN0b21pemFibGUtcnVzdGNfZmxhZ3MtZm9yLXJ1c3RjLWJ1aWxk cy5wYXRjaAogIyBGaXggZXJyb3Igd2l0aCBgZ2VtIGluc3RhbGwgLS1kb2N1bWVudD1yZG9jLHJp YAogIyBGaXhlZCBpbiByZG9jIDcuMS4wIGJ1dCBub3QgaW4gNy4wLjQKIFBhdGNoOTogcmRvYy1w cjE1MzEtZml4LW11dGlscGxlLWRvY3VtZW50LWluc3RhbGxhdGlvbi5wYXRjaAotIyBCYWNrcG9y dCBmcm9tIHJ1YnlfNF8wIGJyYW5jaCB0byB1cGRhdGUgcmVzb2x2IHRvIDAuNy4yIChmaXhlcyBD VkUtMjAyNi04MDIxMiBDVkUtMjAyNi04MDIxMykKLSMgaHR0cHM6Ly9naXRodWIuY29tL3J1Ynkv cnVieS9wdWxsLzE4NTI4Ci0jIEFsc28gY29waWVkIHRoZSBwYXRjaCB0byBhcHBseSB0aGUgZml4 IGFsc28gZm9yIHZlbmRvcmVkIHJlc29sdgotUGF0Y2gxMDogcnVieS00XzAtcHIxODUyOC11cGRh dGUtcmVzb2x2LTBfN18yLnBhdGNoCisjIFN0b3AgdmVuZG9yaW5nIHJlc29sdiBmb3IgdHdvIHJl Z2V4cHMgdG8gc3RvcCBzaG93aW5nIHVwIGFzIGFuIG91dGRhdGVkIGNvcHkgaW4gc2VjdXJpdHkK KyMgYXVkaXRzIG9mIHRoZSBSdWJ5IHRhcmJhbGwKKyMgaHR0cHM6Ly9naXRodWIuY29tL3J1Ynkv cnVieS9jb21taXQvMGI4ZTBiMWMyOGJjODM5MDk1ZTJjMGU4ODQzMTNmMGY1ZWYxZmM1MworIyBy ZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnlnZW1zL3B1bGwvOTg3Ny9jb21taXRzLzlm MmJkNWY2NmNkN2U3MWVlMTQwZWZiNjhjMTlhM2EyNjYxNzIwYWEKKyMgVGhpcyBjaGFuZ2UgaXMg aW5jbHVkZWQgaW4gcnVieWdlbXMgNC4wLjIxCitQYXRjaDEwOiBydWJ5LTQuMC43LXJ1YnlnZW1z LXByOTg3Ny1zdG9wLXZlbmRvcmluZy1yZXNvbHYucGF0Y2gKIAogUmVxdWlyZXM6ICV7bmFtZX0t bGlicyV7P19pc2F9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiAlez93aXRoX3J1YnlwaWNrOlN1 Z2dlc3RzOiBydWJ5cGlja30KQEAgLTQwOSw3ICs0MTAsNiBAQCBWZXJzaW9uOiAgICAle3J1Ynln ZW1zX3ZlcnNpb259CiAjICAgbGliL3J1YnlnZW1zL25ldC1odHRwLwogIyAgIGxpYi9ydWJ5Z2Vt cy9uZXQtcHJvdG9jb2wvCiAjICAgbGliL3J1YnlnZW1zL29wdHBhcnNlLwotIyAgIGxpYi9ydWJ5 Z2Vtcy9yZXNvbHYvCiAjICAgbGliL3J1YnlnZW1zL3RpbWVvdXQvCiAjICAgbGliL3J1YnlnZW1z L3Rzb3J0LwogIyBNSVQ6IGxpYi9ydWJ5Z2Vtcy9yZXNvbHZlci9tb2xpbmlsbG8KQEAgLTQyOCw3 ICs0MjgsNiBAQCBQcm92aWRlczogICBidW5kbGVkKHJ1YnlnZW0tbW9saW5pbGxvKSA9ICV7cnVi eWdlbXNfbW9saW5pbGxvX3ZlcnNpb259CiBQcm92aWRlczogICBidW5kbGVkKHJ1YnlnZW0tbmV0 LWh0dHApID0gJXtydWJ5Z2Vtc19uZXRfaHR0cF92ZXJzaW9ufQogUHJvdmlkZXM6ICAgYnVuZGxl ZChydWJ5Z2VtLW5ldC1wcm90b2NvbCkgPSAle3J1YnlnZW1zX25ldF9wcm90b2NvbF92ZXJzaW9u fQogUHJvdmlkZXM6ICAgYnVuZGxlZChydWJ5Z2VtLW9wdHBhcnNlKSA9ICV7cnVieWdlbXNfb3B0 cGFyc2VfdmVyc2lvbn0KLVByb3ZpZGVzOiAgIGJ1bmRsZWQocnVieWdlbS1yZXNvbHYpID0gJXty dWJ5Z2Vtc19yZXNvbHZfdmVyc2lvbn0KIFByb3ZpZGVzOiAgIGJ1bmRsZWQocnVieWdlbS1zZWN1 cmVyYW5kb20pID0gJXtydWJ5Z2Vtc19zZWN1cmVyYW5kb21fdmVyc2lvbn0KIFByb3ZpZGVzOiAg IGJ1bmRsZWQocnVieWdlbS10aW1lb3V0KSA9ICV7cnVieWdlbXNfdGltZW91dF92ZXJzaW9ufQog UHJvdmlkZXM6ICAgYnVuZGxlZChydWJ5Z2VtLXRzb3J0KSA9ICV7cnVieWdlbXNfdHNvcnRfdmVy c2lvbn0KQEAgLTEwNTIsMTYgKzEwNTEsNiBAQCBtYWtlIC1DICV7X3ZwYXRoX2J1aWxkZGlyfSAt cyBydW5ydWJ5IFRFU1RSVU5fU0NSSVBUPSItZSBcIiBcCiAgIGV4aXQgMSBpZiBHZW06Ok9wdGlv blBhcnNlcjo6VmVyc2lvbiAhPSAnJXtydWJ5Z2Vtc19vcHRwYXJzZV92ZXJzaW9ufSc7IFwKIFwi IgogCi0jIFJlc29sdi4KLW1ha2UgLUMgJXtfdnBhdGhfYnVpbGRkaXJ9IC1zIHJ1bnJ1YnkgVEVT VFJVTl9TQ1JJUFQ9Ii1lIFwiIFwKLSAgbW9kdWxlIEdlbTsgZW5kOyBcCi0gIHJlcXVpcmUgJ3Ji Y29uZmlnJzsgXAotICByZXF1aXJlICdydWJ5Z2Vtcy92ZW5kb3IvcmVzb2x2L2xpYi9yZXNvbHYn OyBcCi0gIHB1dHMgJyUle3J1YnlnZW1zX3Jlc29sdl92ZXJzaW9ufTogJXtydWJ5Z2Vtc19yZXNv bHZfdmVyc2lvbn0nOyBcCi0gIHB1dHMgJVFbR2VtOjpSZXNvbHY6OlZFUlNJT046ICN7R2VtOjpS ZXNvbHY6OlZFUlNJT059XTsgXAotICBleGl0IDEgaWYgR2VtOjpSZXNvbHY6OlZFUlNJT04gIT0g JyV7cnVieWdlbXNfcmVzb2x2X3ZlcnNpb259JzsgXAotXCIiCi0KICMgU2VjdXJlUmFuZG9tLgog bWFrZSAtQyAle192cGF0aF9idWlsZGRpcn0gLXMgcnVucnVieSBURVNUUlVOX1NDUklQVD0iLWUg XCIgXAogICBtb2R1bGUgR2VtOyBtb2R1bGUgUmFuZG9tOyBlbmQ7IGVuZDsgXApAQCAtMTk1Miw2 ICsxOTQxLDEwIEBAIG1ha2UgLUMgJXtfdnBhdGhfYnVpbGRkaXJ9IHJ1bnJ1YnkgVEVTVFJVTl9T Q1JJUFQ9IiBcCiAKIAogJWNoYW5nZWxvZworKiBUaHUgU2VwIDE3IDIwMjYgTWFtb3J1IFRBU0FL QSA8bXRhc2FrYUBmZWRvcmFwcm9qZWN0Lm9yZz4gLSA0LjAuNy0zOQorLSBVcGRhdGUgdG8gUnVi eSA0LjAuNworLSBCYWNrcG9ydCBydWJ5Z2VtcyBzaWRlIGNoYW5nZSB0byBzdG9wIHZlbmRvcmlu ZyByZXNvbHYgaW4gcnVieWdlbXMgdHJlZQorCiAqIFRodSBTZXAgMDMgMjAyNiBNYW1vcnUgVEFT QUtBIDxtdGFzYWthQGZlZG9yYXByb2plY3Qub3JnPiAtIDQuMC42LTM4CiAtIEJhY2twb3J0IHVw c3RyZWFtIHBhdGNoIHRvIHVwZGF0ZSByZXNvbHYgdG8gMC43LjIKIC0gUmVzb2x2ZXM6IENWRS0y MDI2LTgwMjEyIChyaGJ6IzI1MjczMDgpCgpkaWZmIC0tZ2l0IGEvc291cmNlcyBiL3NvdXJjZXMK aW5kZXggODQxNWRmYy4uYzI0YWUxMyAxMDA2NDQKLS0tIGEvc291cmNlcworKysgYi9zb3VyY2Vz CkBAIC0xICsxIEBACi1TSEE1MTIgKHJ1YnktNC4wLjYudGFyLnh6KSA9IGM5YzM5MTY3NWEwOThi NWEyN2RkNjg3NTcxYWIwYTE2NGM3ODhjYmI4ZGRjYmFiNmQxN2EzZThiM2M0YmEzODkzNDZiMmU2 ZDc4MDdkMzhkYjNlNzRkMjI1YzcwZTM3OGEyOTZkNjBkMGY0NjVjYjBmY2VjOTcwMjI0MmM4M2M2 CitTSEE1MTIgKHJ1YnktNC4wLjcudGFyLnh6KSA9IGQxZDM0NWMyNWJmZjQzYWE4NmY1MzZiMjJj ZDA0NzQ2YTdkMzM3MjA3N2JmNDdlYzc1ZWYxODIwYzBiNDNkMGRiZTM1NzNkZDVlNWM1NWVlNTE3 Nzk2ZjQ2ZjBjZGJkMjJjNzUwNmFlYmQwNjU4MTI0MWVlZmI1ZmZkOWQyZTVmCg==