Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gpYxN-0002c7-7C for pgadmin-hackers@arkaria.postgresql.org; Fri, 01 Feb 2019 13:34:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gpYxL-0006VO-I6 for pgadmin-hackers@arkaria.postgresql.org; Fri, 01 Feb 2019 13:34:07 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gpYxL-0006Up-9R for pgadmin-hackers@lists.postgresql.org; Fri, 01 Feb 2019 13:34:07 +0000 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gpYxE-00085I-Ko for pgadmin-hackers@postgresql.org; Fri, 01 Feb 2019 13:34:06 +0000 Received: by mail-lj1-x232.google.com with SMTP id k15-v6so5807671ljc.8 for ; Fri, 01 Feb 2019 05:34:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=9H2s57ooCCxB6jk2S9oI0WjLPUlWQ5R6YW+xC8Jf4Yc=; b=qT9XApReoc2K7WxNtRsxXaQ0awFwngkjrLPn5SyPCGguW03HGabYs9jLpaep9OMZ4w jr6IQ9wQEfdZLPfrQcCO6xj0eQNfVfYWe0+BBMRAyjMc7zhYsNcJt4SNM7t8tCP/fAxl KpAMMbyRQj62W3kZOwjQ/v9w5EDfvgZUqIXbumGsVfBvNNssB9vNEfuTALL2l6huR9Os 2aGAorP13I5g9hXquRJF7izHkFye/DoNzWKLAFfjniTox6q394WibKGeL19mfkWo7JxS H8dSgeJNFVnz23ipyA9Avkn0Ua2N+f/HtZjLhQq+SobZBhYdza5pqYFCzGWbrTOZKiTM KAhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=9H2s57ooCCxB6jk2S9oI0WjLPUlWQ5R6YW+xC8Jf4Yc=; b=npOwKaVHakjCaZQBTChXCbiHEuE3sxLqshKqzcLP5qgggx3VMpKXkd4hSmQ0m5RP1v ZajQjaRPvxKIuKbSpC0nP7yVYpiybuowdyKxtyO8/yPffq1TqoHqllprzqbKQU/I5jbn 7WGLuB1Lnp0292APnK1A9z01iZ6aPZSIpu+33vThO9Q2tH5q2EhEJkKOlM3JikVdSNjz /qk+xyUbkkqOaT8RIbmgU1VO06JKsFd9a6/n41fp3kcGR4CpBfMF9sUPBHvUqS3JBNdI RlJFeYcXvkhDAe298VxRZRoX7i0CdGQB5IuFPFYPGQx8azvkgKXDgzf/bSGidahdumSd fosg== X-Gm-Message-State: AHQUAuYY11fgFg+8Wbo/B9ZtSIV0ljGmws+sRgf6MJNGZs+rkmeI6bWt eVQflSnGNLdjgsOW3fAIk4VRnxRERD9T/xM/S2JR2mdA X-Google-Smtp-Source: AHgI3IYx4e01xdZepj4yZYbkJOI9Q+GD2WdBQQIEV9Icb5nZkm7dNpEVyIsbmG+5snsK0ghqW9vhVK2ogE2UrXfLgtU= X-Received: by 2002:a2e:3a10:: with SMTP id h16-v6mr27142856lja.184.1549028038614; Fri, 01 Feb 2019 05:33:58 -0800 (PST) MIME-Version: 1.0 From: Aditya Toshniwal Date: Fri, 1 Feb 2019 19:03:47 +0530 Message-ID: Subject: [pgAdmin4][RM3941] Dashboard graphs needs optimizations To: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000fd69cf0580d5312a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000fd69cf0580d5312a Content-Type: multipart/alternative; boundary="000000000000fd69cd0580d53128" --000000000000fd69cd0580d53128 Content-Type: text/plain; charset="UTF-8" Hi Hackers, Attached is the patch to optimise the dashboard. Changes include: 1) One ajax request for the all the charts instead of separate for every chart. The next request will not hit until the previous is completed. 2) The code will check for intervals which is greatest common divisor of all the refresh rates. Chart names which will be eligible for refresh will be sent with the ajax. If none are eligible, no ajax will be fired. 3) In the backend, query is generated in such a way that data for all the requested chart names will be fetched in one hit to the database. 4) Test cases for charts rest api and javascript added. -- Thanks and Regards, Aditya Toshniwal Software Engineer | EnterpriseDB Software Solutions | Pune "Don't Complain about Heat, Plant a tree" --000000000000fd69cd0580d53128 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Attached is the patch to optimise the dashboar= d. Changes include:
1) One ajax request for the all the charts instead of s= eparate for every chart. The next request will not hit until the previous i= s completed.
2) The code will check for intervals which is greatest common = divisor of all the refresh rates. Chart names which will be eligible for re= fresh will be sent with the ajax. If none are eligible, no ajax will be fir= ed.
3) In the backend, query is generated in such a way that data for all t= he requested chart names will be fetched in one hit to the database.
<= div class=3D"gmail_default" style=3D"font-family:verdana,sans-serif">4) Tes= t cases for charts rest api and javascript added.

--
Thanks and Regards,
Aditya Toshniwal
<= div>Software Engineer |=C2=A0En= terpriseDB Software Solutions |=C2=A0Pu= ne
"Don't Complain= about Heat, Plant a tree"
= --000000000000fd69cd0580d53128-- --000000000000fd69cf0580d5312a Content-Type: application/octet-stream; name="RM3941.patch" Content-Disposition: attachment; filename="RM3941.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jrm3a1150 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9fX2luaXRfXy5weSBiL3dlYi9wZ2Fk bWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQppbmRleCA5YTAxMThjOC4uMzY4OGUxNjUgMTAwNjQ0 Ci0tLSBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1p bi9kYXNoYm9hcmQvX19pbml0X18ucHkKQEAgLTksNyArOSw3IEBACiAKICIiIkEgYmx1ZXByaW50 IG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGRhc2hib2FyZCBmcmFtZS4iIiIKIGZyb20gZnVuY3Rv b2xzIGltcG9ydCB3cmFwcwotZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCB1cmxf Zm9yLCBSZXNwb25zZSwgZworZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCB1cmxf Zm9yLCBSZXNwb25zZSwgZywgcmVxdWVzdAogZnJvbSBmbGFza19iYWJlbGV4IGltcG9ydCBnZXR0 ZXh0CiBmcm9tIGZsYXNrX3NlY3VyaXR5IGltcG9ydCBsb2dpbl9yZXF1aXJlZAogZnJvbSBwZ2Fk bWluLnV0aWxzIGltcG9ydCBQZ0FkbWluTW9kdWxlCkBAIC0xNTQsMjEgKzE1NCw5IEBAIGNsYXNz IERhc2hib2FyZE1vZHVsZShQZ0FkbWluTW9kdWxlKToKICAgICAgICAgcmV0dXJuIFsKICAgICAg ICAgICAgICdkYXNoYm9hcmQuaW5kZXgnLCAnZGFzaGJvYXJkLmdldF9ieV9zZXZlcl9pZCcsCiAg ICAgICAgICAgICAnZGFzaGJvYXJkLmdldF9ieV9kYXRhYmFzZV9pZCcsCi0gICAgICAgICAgICAn ZGFzaGJvYXJkLnNlc3Npb25fc3RhdHMnLAotICAgICAgICAgICAgJ2Rhc2hib2FyZC5nZXRfc2Vz c2lvbl9zdGF0c19ieV9zZXZlcl9pZCcsCi0gICAgICAgICAgICAnZGFzaGJvYXJkLmdldF9zZXNz aW9uX3N0YXRzX2J5X2RhdGFiYXNlX2lkJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudHBzX3N0 YXRzJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudHBzX3N0YXRzX2J5X3NlcnZlcl9pZCcsCi0g ICAgICAgICAgICAnZGFzaGJvYXJkLnRwc19zdGF0c19ieV9kYXRhYmFzZV9pZCcsCi0gICAgICAg ICAgICAnZGFzaGJvYXJkLnRpX3N0YXRzJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudGlfc3Rh dHNfYnlfc2VydmVyX2lkJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudGlfc3RhdHNfYnlfZGF0 YWJhc2VfaWQnLAotICAgICAgICAgICAgJ2Rhc2hib2FyZC50b19zdGF0cycsCi0gICAgICAgICAg ICAnZGFzaGJvYXJkLnRvX3N0YXRzX2J5X3NlcnZlcl9pZCcsCi0gICAgICAgICAgICAnZGFzaGJv YXJkLnRvX3N0YXRzX2J5X2RhdGFiYXNlX2lkJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQuYmlv X3N0YXRzJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQuYmlvX3N0YXRzX2J5X3NlcnZlcl9pZCcs Ci0gICAgICAgICAgICAnZGFzaGJvYXJkLmJpb19zdGF0c19ieV9kYXRhYmFzZV9pZCcsCisgICAg ICAgICAgICAnZGFzaGJvYXJkLmRhc2hib2FyZF9zdGF0cycsCisgICAgICAgICAgICAnZGFzaGJv YXJkLmRhc2hib2FyZF9zdGF0c19zaWQnLAorICAgICAgICAgICAgJ2Rhc2hib2FyZC5kYXNoYm9h cmRfc3RhdHNfZGlkJywKICAgICAgICAgICAgICdkYXNoYm9hcmQuYWN0aXZpdHknLAogICAgICAg ICAgICAgJ2Rhc2hib2FyZC5nZXRfYWN0aXZpdHlfYnlfc2VydmVyX2lkJywKICAgICAgICAgICAg ICdkYXNoYm9hcmQuZ2V0X2FjdGl2aXR5X2J5X2RhdGFiYXNlX2lkJywKQEAgLTM1Niw4NyArMzQ0 LDM2IEBAIGRlZiBnZXRfZGF0YShzaWQsIGRpZCwgdGVtcGxhdGUpOgogICAgICkKIAogCi1AYmx1 ZXByaW50LnJvdXRlKCcvc2Vzc2lvbl9zdGF0cy8nLCBlbmRwb2ludD0nc2Vzc2lvbl9zdGF0cycp Ci1AYmx1ZXByaW50LnJvdXRlKAotICAgICcvc2Vzc2lvbl9zdGF0cy88aW50OnNpZD4nLCBlbmRw b2ludD0nZ2V0X3Nlc3Npb25fc3RhdHNfYnlfc2V2ZXJfaWQnCi0pCi1AYmx1ZXByaW50LnJvdXRl KAotICAgICcvc2Vzc2lvbl9zdGF0cy88aW50OnNpZD4vPGludDpkaWQ+JywKLSAgICBlbmRwb2lu dD0nZ2V0X3Nlc3Npb25fc3RhdHNfYnlfZGF0YWJhc2VfaWQnCi0pCitAYmx1ZXByaW50LnJvdXRl KCcvZGFzaGJvYXJkX3N0YXRzJywKKyAgICAgICAgICAgICAgICAgZW5kcG9pbnQ9J2Rhc2hib2Fy ZF9zdGF0cycpCitAYmx1ZXByaW50LnJvdXRlKCcvZGFzaGJvYXJkX3N0YXRzLzxpbnQ6c2lkPics CisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSdkYXNoYm9hcmRfc3RhdHNfc2lkJykKK0BibHVl cHJpbnQucm91dGUoJy9kYXNoYm9hcmRfc3RhdHMvPGludDpzaWQ+LzxpbnQ6ZGlkPicsCisgICAg ICAgICAgICAgICAgIGVuZHBvaW50PSdkYXNoYm9hcmRfc3RhdHNfZGlkJykKIEBsb2dpbl9yZXF1 aXJlZAogQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIHNlc3Npb25fc3RhdHMoc2lkPU5vbmUsIGRp ZD1Ob25lKToKLSAgICAiIiIKLSAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgc2VydmVyIHNlc3Np b24gc3RhdGlzdGljcwotICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAotICAgIDpyZXR1cm46Ci0g ICAgIiIiCi0gICAgcmV0dXJuIGdldF9kYXRhKHNpZCwgZGlkLCAnc2Vzc2lvbl9zdGF0cy5zcWwn KQotCitkZWYgZGFzaGJvYXJkX3N0YXRzKHNpZD1Ob25lLCBkaWQ9Tm9uZSk6CisgICAgcmVzcF9k YXRhID0ge30KIAotQGJsdWVwcmludC5yb3V0ZSgnL3Rwc19zdGF0cy8nLCBlbmRwb2ludD0ndHBz X3N0YXRzJykKLUBibHVlcHJpbnQucm91dGUoJy90cHNfc3RhdHMvPGludDpzaWQ+JywgZW5kcG9p bnQ9J3Rwc19zdGF0c19ieV9zZXJ2ZXJfaWQnKQotQGJsdWVwcmludC5yb3V0ZSgKLSAgICAnL3Rw c19zdGF0cy88aW50OnNpZD4vPGludDpkaWQ+JywgZW5kcG9pbnQ9J3Rwc19zdGF0c19ieV9kYXRh YmFzZV9pZCcKLSkKLUBsb2dpbl9yZXF1aXJlZAotQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIHRw c19zdGF0cyhzaWQ9Tm9uZSwgZGlkPU5vbmUpOgotICAgICIiIgotICAgIFRoaXMgZnVuY3Rpb24g cmV0dXJucyBzZXJ2ZXIgVFBTIHRocm91Z2hwdXQKLSAgICA6cGFyYW0gc2lkOiBzZXJ2ZXIgaWQK LSAgICA6cmV0dXJuOgotICAgICIiIgotICAgIHJldHVybiBnZXRfZGF0YShzaWQsIGRpZCwgJ3Rw c19zdGF0cy5zcWwnKQorICAgIGlmIHJlcXVlc3QuYXJnc1snY2hhcnRfbmFtZXMnXSAhPSAnJzoK KyAgICAgICAgY2hhcnRfbmFtZXMgPSByZXF1ZXN0LmFyZ3NbJ2NoYXJ0X25hbWVzJ10uc3BsaXQo JywnKQogCisgICAgICAgIGlmIG5vdCBzaWQ6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPSdTZXJ2ZXIgSUQgbm90IHNwZWNpZmllZC4nKQogCi1AYmx1 ZXByaW50LnJvdXRlKCcvdGlfc3RhdHMvJywgZW5kcG9pbnQ9J3RpX3N0YXRzJykKLUBibHVlcHJp bnQucm91dGUoJy90aV9zdGF0cy88aW50OnNpZD4nLCBlbmRwb2ludD0ndGlfc3RhdHNfYnlfc2Vy dmVyX2lkJykKLUBibHVlcHJpbnQucm91dGUoCi0gICAgJy90aV9zdGF0cy88aW50OnNpZD4vPGlu dDpkaWQ+JywgZW5kcG9pbnQ9J3RpX3N0YXRzX2J5X2RhdGFiYXNlX2lkJwotKQotQGxvZ2luX3Jl cXVpcmVkCi1AY2hlY2tfcHJlY29uZGl0aW9uCi1kZWYgdGlfc3RhdHMoc2lkPU5vbmUsIGRpZD1O b25lKToKLSAgICAiIiIKLSAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgc2VydmVyIHR1cGxlIGlu cHV0IHN0YXRpc3RpY3MKLSAgICA6cGFyYW0gc2lkOiBzZXJ2ZXIgaWQKLSAgICA6cmV0dXJuOgot ICAgICIiIgotICAgIHJldHVybiBnZXRfZGF0YShzaWQsIGRpZCwgJ3RpX3N0YXRzLnNxbCcpCi0K LQotQGJsdWVwcmludC5yb3V0ZSgnL3RvX3N0YXRzLycsIGVuZHBvaW50PSd0b19zdGF0cycpCi1A Ymx1ZXByaW50LnJvdXRlKCcvdG9fc3RhdHMvPGludDpzaWQ+JywgZW5kcG9pbnQ9J3RvX3N0YXRz X2J5X3NlcnZlcl9pZCcpCi1AYmx1ZXByaW50LnJvdXRlKAotICAgICcvdG9fc3RhdHMvPGludDpz aWQ+LzxpbnQ6ZGlkPicsIGVuZHBvaW50PSd0b19zdGF0c19ieV9kYXRhYmFzZV9pZCcKLSkKLUBs b2dpbl9yZXF1aXJlZAotQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIHRvX3N0YXRzKHNpZD1Ob25l LCBkaWQ9Tm9uZSk6Ci0gICAgIiIiCi0gICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHNlcnZlciB0 dXBsZSBvdXRwdXQgc3RhdGlzdGljcwotICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAotICAgIDpy ZXR1cm46Ci0gICAgIiIiCi0gICAgcmV0dXJuIGdldF9kYXRhKHNpZCwgZGlkLCAndG9fc3RhdHMu c3FsJykKKyAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpv aW4oW2cudGVtcGxhdGVfcGF0aCwgJ2Rhc2hib2FyZF9zdGF0cy5zcWwnXSksIGRpZD1kaWQsCisg ICAgICAgICAgICBjaGFydF9uYW1lcz1jaGFydF9uYW1lcywKKyAgICAgICAgKQorICAgICAgICBz dGF0dXMsIHJlcyA9IGcuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQogCisgICAgICAgIGZvciBjaGFy dF9yb3cgaW4gcmVzWydyb3dzJ106CisgICAgICAgICAgICByZXNwX2RhdGFbY2hhcnRfcm93Wydj aGFydF9uYW1lJ11dID0gY2hhcnRfcm93WydjaGFydF9kYXRhJ10KIAotQGJsdWVwcmludC5yb3V0 ZSgnL2Jpb19zdGF0cy8nLCBlbmRwb2ludD0nYmlvX3N0YXRzJykKLUBibHVlcHJpbnQucm91dGUo Jy9iaW9fc3RhdHMvPGludDpzaWQ+JywgZW5kcG9pbnQ9J2Jpb19zdGF0c19ieV9zZXJ2ZXJfaWQn KQotQGJsdWVwcmludC5yb3V0ZSgKLSAgICAnL2Jpb19zdGF0cy88aW50OnNpZD4vPGludDpkaWQ+ JywgZW5kcG9pbnQ9J2Jpb19zdGF0c19ieV9kYXRhYmFzZV9pZCcKLSkKLUBsb2dpbl9yZXF1aXJl ZAotQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIGJpb19zdGF0cyhzaWQ9Tm9uZSwgZGlkPU5vbmUp OgotICAgICIiIgotICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBzZXJ2ZXIgYmxvY2sgSU8gc3Rh dGlzdGljcwotICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAotICAgIDpyZXR1cm46Ci0gICAgIiIi Ci0gICAgcmV0dXJuIGdldF9kYXRhKHNpZCwgZGlkLCAnYmlvX3N0YXRzLnNxbCcpCisgICAgcmV0 dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAgIHJlc3BvbnNlPXJlc3BfZGF0YSwKKyAgICAgICAg c3RhdHVzPTIwMAorICAgICkKIAogCiBAYmx1ZXByaW50LnJvdXRlKCcvYWN0aXZpdHkvJywgZW5k cG9pbnQ9J2FjdGl2aXR5JykKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0 aWMvanMvY2hhcnRpbmcuanMgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL2NoYXJ0 aW5nLmpzCmluZGV4IDY0ZDkwMjdkLi5iNjBhMDJhZCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4v ZGFzaGJvYXJkL3N0YXRpYy9qcy9jaGFydGluZy5qcworKysgYi93ZWIvcGdhZG1pbi9kYXNoYm9h cmQvc3RhdGljL2pzL2NoYXJ0aW5nLmpzCkBAIC02OCw3ICs2OCw5IEBAIGV4cG9ydCBjbGFzcyBD aGFydCB7CiAgIH0KIAogICBnZXRPdGhlckRhdGEoa2V5KSB7Ci0gICAgcmV0dXJuIHRoaXMuX290 aGVyRGF0YVtrZXldOworICAgIGlmKHRoaXMuX290aGVyRGF0YVtrZXldKSB7CisgICAgICByZXR1 cm4gdGhpcy5fb3RoZXJEYXRhW2tleV07CisgICAgfQogICB9CiAKICAgc2V0T3RoZXJEYXRhKGtl eSwgdmFsdWUpIHsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMv ZGFzaGJvYXJkLmpzIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9kYXNoYm9hcmQu anMKaW5kZXggM2M5YTQzYTMuLmUxMTk0OTdjIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9kYXNo Ym9hcmQvc3RhdGljL2pzL2Rhc2hib2FyZC5qcworKysgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQv c3RhdGljL2pzL2Rhc2hib2FyZC5qcwpAQCAtMTAsMTEgKzEwLDExIEBACiBkZWZpbmUoJ3BnYWRt aW4uZGFzaGJvYXJkJywgWwogICAnc291cmNlcy91cmxfZm9yJywgJ3NvdXJjZXMvZ2V0dGV4dCcs ICdyZXF1aXJlJywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywKICAgJ3NvdXJjZXMvcGdhZG1pbics ICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICcuL2NoYXJ0aW5nJywKLSAgJ3BnYWRtaW4uYWxlcnRp ZnlqcycsICdwZ2FkbWluLmJhY2tmb3JtJywKLSAgJ3NvdXJjZXMvbm9kZXMvZGFzaGJvYXJkJywg J3BnYWRtaW4uYnJvd3NlcicsICdib290c3RyYXAnLCAnd2Nkb2NrZXInLAorICAncGdhZG1pbi5h bGVydGlmeWpzJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAnc291cmNlcy9ub2Rlcy9kYXNoYm9hcmQn LAorICAnc291cmNlcy91dGlscycsICdwZ2FkbWluLmJyb3dzZXInLCAnYm9vdHN0cmFwJywgJ3dj ZG9ja2VyJywKIF0sIGZ1bmN0aW9uKAogICB1cmxfZm9yLCBnZXR0ZXh0LCByLCAkLCBfLCBwZ0Fk bWluLCBCYWNrYm9uZSwgQmFja2dyaWQsIGNoYXJ0aW5nLAotICBBbGVydGlmeSwgQmFja2Zvcm0s IE5vZGVzRGFzaGJvYXJkCisgIEFsZXJ0aWZ5LCBCYWNrZm9ybSwgTm9kZXNEYXNoYm9hcmQsIGNv bW1vblV0aWxzCiApIHsKIAogICBwZ0FkbWluLkJyb3dzZXIgPSBwZ0FkbWluLkJyb3dzZXIgfHwg e307CkBAIC0yMTQsOCArMjE0LDkgQEAgZGVmaW5lKCdwZ2FkbWluLmRhc2hib2FyZCcsIFsKICAg ICAgIC8vIExvYWQgdGhlIGRlZmF1bHQgd2VsY29tZSBkYXNoYm9hcmQKICAgICAgIHZhciB1cmwg PSB1cmxfZm9yKCdkYXNoYm9hcmQuaW5kZXgnKTsKIAotICAgICAgLyogU3RvcmUgdGhlIGNoYXJ0 IG9iamVjdHMgYW5kIHRoZXJlIGludGVydmFsIGlkcyBpbiB0aGlzIHN0b3JlICovCi0gICAgICB0 aGlzLmNoYXJ0U3RvcmUgPSB7fTsKKyAgICAgIC8qIFN0b3JlIHRoZSBjaGFydCBvYmplY3RzLCBy ZWZyZXNoIGZyZXEgYW5kIG5leHQgcmVmcmVzaCB0aW1lICovCisgICAgICB0aGlzLmNoYXJ0X3N0 b3JlID0ge307CisgICAgICB0aGlzLmNoYXJ0c1BvbGxlckludElkID0gLTE7CiAKICAgICAgIHZh ciBkYXNoYm9hcmRQYW5lbCA9IHBnQnJvd3Nlci5wYW5lbHNbJ2Rhc2hib2FyZCddLnBhbmVsOwog ICAgICAgaWYgKGRhc2hib2FyZFBhbmVsKSB7CkBAIC0zNzMsOTYgKzM3NCwxNzQgQEAgZGVmaW5l KCdwZ2FkbWluLmRhc2hib2FyZCcsIFsKICAgICAgIH0KICAgICB9LAogCi0gICAgcmVuZGVyQ2hh cnRMb29wOiBmdW5jdGlvbihjaGFydE9iaiwgc2lkLCBkaWQsIHVybCwgY291bnRlciwgcmVmcmVz aCkgewotICAgICAgdmFyIGRhdGEgPSBbXSwKLSAgICAgICAgZGF0YXNldCA9IFtdOworICAgIC8v IFJlbmRlciB0aGUgY2hhcnRzCisgICAgcmVuZGVyQ2hhcnRzOiBmdW5jdGlvbihjaGFydHNfY29u ZmlnKSB7CiAKLSAgICAgIHZhciB0aGVJbnRlcnZhbEZ1bmMgPSBmdW5jdGlvbigpIHsKLSAgICAg ICAgdmFyIHBhdGggPSB1cmwgKyBzaWQ7Ci0gICAgICAgIGlmIChkaWQgIT0gLTEpIHsKLSAgICAg ICAgICBwYXRoICs9ICcvJyArIGRpZDsKKyAgICAgIGxldCBzZWxmID0gdGhpcywKKyAgICAgICAg dG9vbHRpcEZvcm1hdHRlciA9IGZ1bmN0aW9uKHJlZnJlc2gsIGN1cnJWYWwpIHsKKyAgICAgICAg ICByZXR1cm4oYFNlY29uZHMgYWdvOiAke3BhcnNlSW50KGN1cnJWYWwueCAqIHJlZnJlc2gpfTwv YnI+CisgICAgICAgICAgICAgICAgICBWYWx1ZTogJHtjdXJyVmFsLnl9YCk7CisgICAgICAgIH0s CisgICAgICAgIGN1cnJfZXBvY2g9Y29tbW9uVXRpbHMuZ2V0RXBvY2goKTsKKworICAgICAgc2Vs Zi5zdG9wQ2hhcnRzUG9sbGVyKCk7CisKKyAgICAgIGNoYXJ0c19jb25maWcubWFwKChjaGFydF9j b25maWcpID0+IHsKKyAgICAgICAgaWYoc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcuY2hh cnRfbmFtZV0KKyAgICAgICAgICAmJiBzZWxmLm9sZF9wcmVmZXJlbmNlc1tjaGFydF9jb25maWcu cmVmcmVzaF9wcmVmX25hbWVdICE9CisgICAgICAgICAgICBzZWxmLnByZWZlcmVuY2VzW2NoYXJ0 X2NvbmZpZy5yZWZyZXNoX3ByZWZfbmFtZV0pIHsKKyAgICAgICAgICBzZWxmLmNsZWFyQ2hhcnRG cm9tU3RvcmUoY2hhcnRfY29uZmlnLmNoYXJ0X25hbWUpOwogICAgICAgICB9Ci0gICAgICAgICQu YWpheCh7Ci0gICAgICAgICAgdXJsOiBwYXRoLAotICAgICAgICAgIHR5cGU6ICdHRVQnLAotICAg ICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsCi0gICAgICAgIH0pCi0gICAgICAgIC5kb25lKGZ1bmN0 aW9uKHJlc3ApIHsKLSAgICAgICAgICAkKGNoYXJ0T2JqLmdldENvbnRhaW5lcigpKS5yZW1vdmVD bGFzcygnZ3JhcGgtZXJyb3InKTsKLSAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShyZXNwKTsK LQotICAgICAgICAgIHZhciB5ID0gMCwKLSAgICAgICAgICAgIHg7Ci0gICAgICAgICAgaWYgKGRh dGFzZXQubGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgIGlmIChjb3VudGVyID09IHRydWUpIHsK LSAgICAgICAgICAgICAgLy8gSGF2ZSB3ZSBzdGFzaGVkIGluaXRpYWwgdmFsdWVzPwotICAgICAg ICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChjaGFydE9iai5nZXRPdGhlckRhdGEoJ2NvdW50ZXJf cHJldmlvdXNfdmFscycpKSkgewotICAgICAgICAgICAgICAgIGNoYXJ0T2JqLnNldE90aGVyRGF0 YSgnY291bnRlcl9wcmV2aW91c192YWxzJywgZGF0YVswXSk7Ci0gICAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBpbml0aWFsIGRhdGEgc3RydWN0dXJl Ci0gICAgICAgICAgICAgICAgZm9yICh4IGluIGRhdGFbMF0pIHsKLSAgICAgICAgICAgICAgICAg IGRhdGFzZXQucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgICdkYXRhJzogWwotICAgICAgICAg ICAgICAgICAgICAgIFswLCBkYXRhWzBdW3hdIC0gY2hhcnRPYmouZ2V0T3RoZXJEYXRhKCdjb3Vu dGVyX3ByZXZpb3VzX3ZhbHMnKVt4XV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAg ICAgICAgICAgICAgICdsYWJlbCc6IHgsCi0gICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICAgIC8vIENyZWF0ZSB0aGUgaW5pdGlhbCBkYXRhIHN0cnVjdHVyZQotICAgICAgICAgICAg ICBmb3IgKHggaW4gZGF0YVswXSkgewotICAgICAgICAgICAgICAgIGRhdGFzZXQucHVzaCh7Ci0g ICAgICAgICAgICAgICAgICAnZGF0YSc6IFsKLSAgICAgICAgICAgICAgICAgICAgWzAsIGRhdGFb MF1beF1dLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICdsYWJlbCc6 IHgsCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh4IGluIGRhdGFbMF0pIHsKLSAg ICAgICAgICAgICAgLy8gUHVzaCBuZXcgdmFsdWVzIG9udG8gdGhlIGV4aXN0aW5nIGRhdGEgc3Ry dWN0dXJlCi0gICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb3VudGVyIHN0YXQsIHdlIG5l ZWQgdG8gc3VidHJhY3QgdGhlIHByZXZpb3VzIHZhbHVlCi0gICAgICAgICAgICAgIGlmIChjb3Vu dGVyID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YXNldFt5XVsnZGF0YSddLnVuc2hp ZnQoWzAsIGRhdGFbMF1beF1dKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCB2YWx1ZSwgbWludXMgdGhlIHByZXZpb3VzIG9uZSB3 ZSBzdGFzaGVkLgotICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhlIHRhYiBoYXMg YmVlbiByZWxvYWRlZCwgaW4gd2hpY2ggY2FzZSBvdXQgcHJldmlvdXMgdmFsdWVzIGFyZSBnb25l Ci0gICAgICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY2hhcnRPYmouZ2V0T3RoZXJEYXRh KCdjb3VudGVyX3ByZXZpb3VzX3ZhbHMnKSkpCi0gICAgICAgICAgICAgICAgICByZXR1cm47Ci0K LSAgICAgICAgICAgICAgICBkYXRhc2V0W3ldWydkYXRhJ10udW5zaGlmdChbMCwgZGF0YVswXVt4 XSAtIGNoYXJ0T2JqLmdldE90aGVyRGF0YSgnY291bnRlcl9wcmV2aW91c192YWxzJylbeF1dKTsK LSAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lIGluZGV4 IHRvIGdldCBhIHByb3BlciBzY3JvbGxpbmcgZGlzcGxheQotICAgICAgICAgICAgICBmb3IgKHZh ciB6ID0gMDsgeiA8IGRhdGFzZXRbeV1bJ2RhdGEnXS5sZW5ndGg7IHorKykgewotICAgICAgICAg ICAgICAgIGRhdGFzZXRbeV1bJ2RhdGEnXVt6XVswXSA9IHo7Ci0gICAgICAgICAgICAgIH0KKyAg ICAgICAgaWYoc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcuY2hhcnRfbmFtZV0pIHsKKyAg ICAgICAgICBsZXQgY2hhcnRfb2JqID0gc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcuY2hh cnRfbmFtZV0uY2hhcnRfb2JqOworICAgICAgICAgIGNoYXJ0X29iai5zZXRPcHRpb25zKGNoYXJ0 X2NvbmZpZy5vcHRpb25zLCBmYWxzZSk7CisgICAgICAgICAgY2hhcnRfb2JqLnNldFRvb2x0aXBG b3JtYXR0ZXIoCisgICAgICAgICAgICB0b29sdGlwRm9ybWF0dGVyLmJpbmQobnVsbCwgc2VsZi5w cmVmZXJlbmNlc1tjaGFydF9jb25maWcucmVmcmVzaF9wcmVmX25hbWVdKQorICAgICAgICAgICk7 CisgICAgICAgIH0KIAotICAgICAgICAgICAgICB5Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBjaGFydE9iai5zZXRPdGhlckRhdGEoJ2NvdW50ZXJfcHJldmlvdXNfdmFscycsIGRhdGFb MF0pOworICAgICAgICBpZighc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcuY2hhcnRfbmFt ZV0pIHsKKyAgICAgICAgICBsZXQgY2hhcnRfb2JqID0gbmV3IGNoYXJ0aW5nLkNoYXJ0KGNoYXJ0 X2NvbmZpZy5jb250YWluZXIsIGNoYXJ0X2NvbmZpZy5vcHRpb25zKTsKKworICAgICAgICAgIGNo YXJ0X29iai5zZXRUb29sdGlwRm9ybWF0dGVyKAorICAgICAgICAgICAgdG9vbHRpcEZvcm1hdHRl ci5iaW5kKG51bGwsIHNlbGYucHJlZmVyZW5jZXNbY2hhcnRfY29uZmlnLnJlZnJlc2hfcHJlZl9u YW1lXSkKKyAgICAgICAgICApOworCisgICAgICAgICAgY2hhcnRfb2JqLnNldE90aGVyRGF0YSgn Y291bnRlcicsIGNoYXJ0X2NvbmZpZy5jb3VudGVyKTsKKworICAgICAgICAgIHNlbGYuY2hhcnRf c3RvcmVbY2hhcnRfY29uZmlnLmNoYXJ0X25hbWVdID0geworICAgICAgICAgICAgJ2NoYXJ0X29i aicgOiBjaGFydF9vYmosCisgICAgICAgICAgICAncmVmcmVzaF9vbic6IGN1cnJfZXBvY2gsCisg ICAgICAgICAgICAncmVmcmVzaF9yYXRlJzogc2VsZi5wcmVmZXJlbmNlc1tjaGFydF9jb25maWcu cmVmcmVzaF9wcmVmX25hbWVdLAorICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgIH0pOwor CisgICAgICBzZWxmLnN0YXJ0Q2hhcnRzUG9sbGVyKHNlbGYuY2hhcnRfc3RvcmUsIHNlbGYuc2lk LCBzZWxmLmRpZCk7CisgICAgfSwKKworICAgIGdldFN0YXRzVXJsOiBmdW5jdGlvbihzaWQ9LTEs IGRpZD0tMSwgY2hhcnRfbmFtZXM9W10pIHsKKyAgICAgIGxldCBiYXNlX3VybCA9IHVybF9mb3Io J2Rhc2hib2FyZC5kYXNoYm9hcmRfc3RhdHMnKTsKKyAgICAgIGJhc2VfdXJsICs9ICcvJyArIHNp ZDsKKyAgICAgIGJhc2VfdXJsICs9IChkaWQgPiAwKT8oJy8nICsgZGlkKTonJzsKKyAgICAgIGJh c2VfdXJsICs9ICc/Y2hhcnRfbmFtZXM9JyArIGNoYXJ0X25hbWVzLmpvaW4oJywnKTsKKyAgICAg IHJldHVybiBiYXNlX3VybDsKKyAgICB9LAorCisgICAgdXBkYXRlQ2hhcnQ6IGZ1bmN0aW9uKGNo YXJ0X29iaiwgbmV3X2RhdGEpeworICAgICAgLy8gRGF0YXNldCBmb3JtYXQ6CisgICAgICAvLyBb CisgICAgICAvLyAgICAgeyBkYXRhOiBbWzAsIHkwXSwgWzEsIHkxXS4uLl0sIGxhYmVsOiAnTGFi ZWwgMScsIFtvcHRpb25zXSB9LAorICAgICAgLy8gICAgIHsgZGF0YTogW1swLCB5MF0sIFsxLCB5 MV0uLi5dLCBsYWJlbDogJ0xhYmVsIDInLCBbb3B0aW9uc10gfSwKKyAgICAgIC8vICAgICB7IGRh dGE6IFtbMCwgeTBdLCBbMSwgeTFdLi4uXSwgbGFiZWw6ICdMYWJlbCAzJywgW29wdGlvbnNdIH0K KyAgICAgIC8vIF0KKyAgICAgIGxldCBkYXRhc2V0ID0gY2hhcnRfb2JqLmdldE90aGVyRGF0YSgn ZGF0YXNldCcpIHx8IFtdLAorICAgICAgICBjb3VudGVyX3ByZXZfZGF0YSA9IGNoYXJ0X29iai5n ZXRPdGhlckRhdGEoJ2NvdW50ZXJfcHJldl9kYXRhJykgfHwgbmV3X2RhdGEsCisgICAgICAgIGNv dW50ZXIgPSBjaGFydF9vYmouZ2V0T3RoZXJEYXRhKCdjb3VudGVyJykgfHwgZmFsc2U7CisKKyAg ICAgIGlmIChkYXRhc2V0Lmxlbmd0aCA9PSAwKSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgaW5p dGlhbCBkYXRhIHN0cnVjdHVyZQorICAgICAgICBmb3IgKGxldCBsYWJlbCBpbiBuZXdfZGF0YSkg eworICAgICAgICAgIGRhdGFzZXQucHVzaCh7CisgICAgICAgICAgICAnZGF0YSc6IFsKKyAgICAg ICAgICAgICAgWzAsIGNvdW50ZXI/KG5ld19kYXRhW2xhYmVsXSAtIGNvdW50ZXJfcHJldl9kYXRh W2xhYmVsXSk6bmV3X2RhdGFbbGFiZWxdXSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAn bGFiZWwnOiBsYWJlbCwKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsK KyAgICAgICAgT2JqZWN0LmtleXMobmV3X2RhdGEpLm1hcCgobGFiZWwsIGxhYmVsX2luZCkgPT4g eworICAgICAgICAgIC8vIFB1c2ggbmV3IHZhbHVlcyBvbnRvIHRoZSBleGlzdGluZyBkYXRhIHN0 cnVjdHVyZQorICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb3VudGVyIHN0YXQsIHdlIG5lZWQg dG8gc3VidHJhY3QgdGhlIHByZXZpb3VzIHZhbHVlCisgICAgICAgICAgaWYgKCFjb3VudGVyKSB7 CisgICAgICAgICAgICBkYXRhc2V0W2xhYmVsX2luZF1bJ2RhdGEnXS51bnNoaWZ0KFswLCBuZXdf ZGF0YVtsYWJlbF1dKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU3RvcmUg dGhlIGN1cnJlbnQgdmFsdWUsIG1pbnVzIHRoZSBwcmV2aW91cyBvbmUgd2Ugc3Rhc2hlZC4KKyAg ICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhlIHRhYiBoYXMgYmVlbiByZWxvYWRlZCwgaW4g d2hpY2ggY2FzZSBvdXQgcHJldmlvdXMgdmFsdWVzIGFyZSBnb25lCisgICAgICAgICAgICBpZiAo Xy5pc1VuZGVmaW5lZChjb3VudGVyX3ByZXZfZGF0YSkpCisgICAgICAgICAgICAgIHJldHVybjsK KworICAgICAgICAgICAgZGF0YXNldFtsYWJlbF9pbmRdWydkYXRhJ10udW5zaGlmdChbMCwgbmV3 X2RhdGFbbGFiZWxdIC0gY291bnRlcl9wcmV2X2RhdGFbbGFiZWxdXSk7CiAgICAgICAgICAgfQog Ci0gICAgICAgICAgLy8gUmVtb3ZlIHVuZWVkZWQgZWxlbWVudHMKLSAgICAgICAgICBmb3IgKHgg PSAwOyB4IDwgZGF0YXNldC5sZW5ndGg7IHgrKykgewotICAgICAgICAgICAgLy8gUmVtb3ZlIG9s ZCBkYXRhIHBvaW50cwotICAgICAgICAgICAgaWYgKGRhdGFzZXRbeF1bJ2RhdGEnXS5sZW5ndGgg PiAxMDEpIHsKLSAgICAgICAgICAgICAgZGF0YXNldFt4XVsnZGF0YSddLnBvcCgpOwotICAgICAg ICAgICAgfQorICAgICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lIGluZGV4IHRvIGdldCBhIHByb3Bl ciBzY3JvbGxpbmcgZGlzcGxheQorICAgICAgICAgIGZvciAodmFyIHRpbWVfaW5kID0gMDsgdGlt ZV9pbmQgPCBkYXRhc2V0W2xhYmVsX2luZF1bJ2RhdGEnXS5sZW5ndGg7IHRpbWVfaW5kKyspIHsK KyAgICAgICAgICAgIGRhdGFzZXRbbGFiZWxfaW5kXVsnZGF0YSddW3RpbWVfaW5kXVswXSA9IHRp bWVfaW5kOwogICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGNvdW50ZXJfcHJldl9k YXRhID0gbmV3X2RhdGE7CisgICAgICB9CiAKLSAgICAgICAgICBpZiAoY2hhcnRPYmouaXNJblBh Z2UoKSkgewotICAgICAgICAgICAgaWYgKGNoYXJ0T2JqLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAg ICAgICAgIGNoYXJ0T2JqLmRyYXcoZGF0YXNldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg fSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgIC8vIFJlbW92ZSBvbGQgZGF0YSBw b2ludHMKKyAgICAgIGZvciAobGV0IGxhYmVsX2luZCA9IDA7IGxhYmVsX2luZCA8IGRhdGFzZXQu bGVuZ3RoOyBsYWJlbF9pbmQrKykgeworICAgICAgICBpZiAoZGF0YXNldFtsYWJlbF9pbmRdWydk YXRhJ10ubGVuZ3RoID4gMTAxKSB7CisgICAgICAgICAgZGF0YXNldFtsYWJlbF9pbmRdWydkYXRh J10ucG9wKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgY2hhcnRfb2JqLnNldE90aGVy RGF0YSgnZGF0YXNldCcsIGRhdGFzZXQpOworICAgICAgY2hhcnRfb2JqLnNldE90aGVyRGF0YSgn Y291bnRlcl9wcmV2X2RhdGEnLCBjb3VudGVyX3ByZXZfZGF0YSk7CisKKyAgICAgIGlmIChjaGFy dF9vYmouaXNJblBhZ2UoKSkgeworICAgICAgICBpZiAoY2hhcnRfb2JqLmlzVmlzaWJsZSgpKSB7 CisgICAgICAgICAgY2hhcnRfb2JqLmRyYXcoZGF0YXNldCk7CisgICAgICAgIH0KKyAgICAgIH0g ZWxzZSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9LAorCisgICAgc3RvcENoYXJ0 c1BvbGxlcjogZnVuY3Rpb24oKSB7CisgICAgICBjbGVhckludGVydmFsKHRoaXMuY2hhcnRzUG9s bGVySW50SWQpOworICAgIH0sCisKKyAgICBzdGFydENoYXJ0c1BvbGxlcjogZnVuY3Rpb24oY2hh cnRfc3RvcmUsIHNpZCwgZGlkKSB7CisgICAgICBsZXQgc2VsZiA9IHRoaXM7CisgICAgICAvKiBw b2xsaW5nIHdpbGwgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoZSByZWZyZXNoIHJh dGVzKi8KKyAgICAgIGxldCBwb2xsSW50ZXJ2YWwgPSBjb21tb25VdGlscy5nZXRHQ0QoCisgICAg ICAgIE9iamVjdC52YWx1ZXMoY2hhcnRfc3RvcmUpLm1hcChpdGVtID0+IGl0ZW0ucmVmcmVzaF9y YXRlKQorICAgICAgKTsKKyAgICAgIGxldCBsYXN0X3BvbGxfY29tcGxldGUgPSB0cnVlOworCisg ICAgICAvKiBTdG9wIGlmIHJ1bm5pbmcsIG9ubHkgb25lIHBvbGxlciBsaXZlcyAqLworICAgICAg c2VsZi5zdG9wQ2hhcnRzUG9sbGVyKCk7CisKKyAgICAgIHZhciB0aGVQb2xsaW5nRnVuYyA9IGZ1 bmN0aW9uKCkgeworICAgICAgICBsZXQgY3Vycl9lcG9jaCA9IGNvbW1vblV0aWxzLmdldEVwb2No KCk7CisgICAgICAgIGxldCBjaGFydF9uYW1lc190b19nZXQgPSBbXTsKKworICAgICAgICBmb3Io bGV0IGNoYXJ0X25hbWUgaW4gY2hhcnRfc3RvcmUpIHsKKyAgICAgICAgICAvKiB3aGVuIGl0cyB0 aW1lIHRvIGdldCB0aGUgZGF0YSAqLworICAgICAgICAgIGlmKGNoYXJ0X3N0b3JlW2NoYXJ0X25h bWVdLnJlZnJlc2hfb24gPD0gY3Vycl9lcG9jaCkgeworICAgICAgICAgICAgLyogc2V0IHRoZSBu ZXh0IHRyaWdnZXIgcG9pbnQgKi8KKyAgICAgICAgICAgIGNoYXJ0X3N0b3JlW2NoYXJ0X25hbWVd LnJlZnJlc2hfb24gPSBjdXJyX2Vwb2NoICsgY2hhcnRfc3RvcmVbY2hhcnRfbmFtZV0ucmVmcmVz aF9yYXRlOworICAgICAgICAgICAgY2hhcnRfbmFtZXNfdG9fZ2V0LnB1c2goY2hhcnRfbmFtZSk7 CiAgICAgICAgICAgfQorICAgICAgICB9CiAKKyAgICAgICAgLyogSWYgbm9uZSBvZiB0aGUgY2hh cnQgd2FudHMgZGF0YSwgZG9uJ3QgdHJvdWJsZQorICAgICAgICAgKiBJZiByZXNwb25zZSBub3Qg cmVjZWl2ZWQgZnJvbSBwcmV2IHBvbGwsIGRvbid0IHRyb3VibGUgISEKKyAgICAgICAgICovCisg ICAgICAgIGlmKGNoYXJ0X25hbWVzX3RvX2dldC5sZW5ndGggPT0gMCB8fCAhbGFzdF9wb2xsX2Nv bXBsZXRlKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBh dGggPSBzZWxmLmdldFN0YXRzVXJsKHNpZCwgZGlkLCBjaGFydF9uYW1lc190b19nZXQpOworICAg ICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDogcGF0aCwKKyAgICAgICAgICB0eXBlOiAnR0VU JywKKyAgICAgICAgfSkKKyAgICAgICAgLmRvbmUoZnVuY3Rpb24ocmVzcCkgeworICAgICAgICAg IGxhc3RfcG9sbF9jb21wbGV0ZSA9IHRydWU7CisgICAgICAgICAgZm9yKGxldCBjaGFydF9uYW1l IGluIHJlc3ApIHsKKyAgICAgICAgICAgIGxldCBjaGFydF9vYmogPSBjaGFydF9zdG9yZVtjaGFy dF9uYW1lXS5jaGFydF9vYmo7CisgICAgICAgICAgICAkKGNoYXJ0X29iai5nZXRDb250YWluZXIo KSkucmVtb3ZlQ2xhc3MoJ2dyYXBoLWVycm9yJyk7CisgICAgICAgICAgICBzZWxmLnVwZGF0ZUNo YXJ0KGNoYXJ0X29iaiwgcmVzcFtjaGFydF9uYW1lXSk7CisgICAgICAgICAgfQogICAgICAgICB9 KQogICAgICAgICAuZmFpbChmdW5jdGlvbih4aHIpIHsKKyAgICAgICAgICBsYXN0X3BvbGxfY29t cGxldGUgPSB0cnVlOwogICAgICAgICAgIGxldCBlcnIgPSAnJzsKICAgICAgICAgICBsZXQgbXNn ID0gJyc7CiAgICAgICAgICAgbGV0IGNscyA9ICdpbmZvJzsKQEAgLTQ4NCw2NiArNTYzLDE5IEBA IGRlZmluZSgncGdhZG1pbi5kYXNoYm9hcmQnLCBbCiAgICAgICAgICAgICB9CiAgICAgICAgICAg fQogCi0gICAgICAgICAgJChjaGFydE9iai5nZXRDb250YWluZXIoKSkuYWRkQ2xhc3MoJ2dyYXBo LWVycm9yJyk7Ci0gICAgICAgICAgJChjaGFydE9iai5nZXRDb250YWluZXIoKSkuaHRtbCgKLSAg ICAgICAgICAgICc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC0nICsgY2xzICsgJyBwZy1wYW5lbC1t ZXNzYWdlIiByb2xlPSJhbGVydCI+JyArIG1zZyArICc8L2Rpdj4nCi0gICAgICAgICAgKTsKKyAg ICAgICAgICBmb3IobGV0IGNoYXJ0X25hbWUgaW4gY2hhcnRfc3RvcmUpIHsKKyAgICAgICAgICAg IGxldCBjaGFydF9vYmogPSBjaGFydF9zdG9yZVtjaGFydF9uYW1lXS5jaGFydF9vYmo7CisgICAg ICAgICAgICAkKGNoYXJ0X29iai5nZXRDb250YWluZXIoKSkuYWRkQ2xhc3MoJ2dyYXBoLWVycm9y Jyk7CisgICAgICAgICAgICAkKGNoYXJ0X29iai5nZXRDb250YWluZXIoKSkuaHRtbCgKKyAgICAg ICAgICAgICAgJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LScgKyBjbHMgKyAnIHBnLXBhbmVsLW1l c3NhZ2UiIHJvbGU9ImFsZXJ0Ij4nICsgbXNnICsgJzwvZGl2PicKKyAgICAgICAgICAgICk7Cisg ICAgICAgICAgfQogICAgICAgICB9KTsKKyAgICAgICAgbGFzdF9wb2xsX2NvbXBsZXRlID0gZmFs c2U7CiAgICAgICB9OwogICAgICAgLyogRXhlY3V0ZSBvbmNlIGZvciB0aGUgZmlyc3QgdGltZSBh cyBzZXRJbnRlcnZhbCB3aWxsIG5vdCBkbyAqLwotICAgICAgdGhlSW50ZXJ2YWxGdW5jKCk7Ci0g ICAgICByZXR1cm4gc2V0SW50ZXJ2YWwodGhlSW50ZXJ2YWxGdW5jLCByZWZyZXNoICogMTAwMCk7 Ci0gICAgfSwKLQotICAgIC8vIFJlbmRlciBhIGNoYXJ0Ci0gICAgcmVuZGVyX2NoYXJ0OiBmdW5j dGlvbigKLSAgICAgIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zLCBjb3VudGVyLCBjaGFydE5hbWUs IHByZWZOYW1lCi0gICAgKSB7Ci0KLSAgICAgIC8vIERhdGEgZm9ybWF0OgotICAgICAgLy8gWwot ICAgICAgLy8gICAgIHsgZGF0YTogW1swLCB5MF0sIFsxLCB5MV0uLi5dLCBsYWJlbDogJ0xhYmVs IDEnLCBbb3B0aW9uc10gfSwKLSAgICAgIC8vICAgICB7IGRhdGE6IFtbMCwgeTBdLCBbMSwgeTFd Li4uXSwgbGFiZWw6ICdMYWJlbCAyJywgW29wdGlvbnNdIH0sCi0gICAgICAvLyAgICAgeyBkYXRh OiBbWzAsIHkwXSwgWzEsIHkxXS4uLl0sIGxhYmVsOiAnTGFiZWwgMycsIFtvcHRpb25zXSB9Ci0g ICAgICAvLyBdCi0KLSAgICAgIGxldCBzZWxmID0gdGhpcywKLSAgICAgICAgdG9vbHRpcEZvcm1h dHRlciA9IGZ1bmN0aW9uKHJlZnJlc2gsIGN1cnJWYWwpIHsKLSAgICAgICAgICByZXR1cm4oYFNl Y29uZHMgYWdvOiAke3BhcnNlSW50KGN1cnJWYWwueCAqIHJlZnJlc2gpfTwvYnI+Ci0gICAgICAg ICAgICAgICAgICBWYWx1ZTogJHtjdXJyVmFsLnl9YCk7Ci0gICAgICAgIH07Ci0KLSAgICAgIGlm KHNlbGYuY2hhcnRTdG9yZVtjaGFydE5hbWVdCi0gICAgICAgICYmIHNlbGYub2xkX3ByZWZlcmVu Y2VzW3ByZWZOYW1lXSAhPSBzZWxmLnByZWZlcmVuY2VzW3ByZWZOYW1lXSkgewotICAgICAgICBz ZWxmLmNsZWFyQ2hhcnRGcm9tU3RvcmUoY2hhcnROYW1lKTsKLSAgICAgIH0KLQotICAgICAgaWYo c2VsZi5jaGFydFN0b3JlW2NoYXJ0TmFtZV0pIHsKLSAgICAgICAgbGV0IGNoYXJ0T2JqID0gc2Vs Zi5jaGFydFN0b3JlW2NoYXJ0TmFtZV0uY2hhcnRPYmo7Ci0gICAgICAgIGNoYXJ0T2JqLnNldE9w dGlvbnMob3B0aW9ucywgZmFsc2UpOwotICAgICAgICBjaGFydE9iai5zZXRUb29sdGlwRm9ybWF0 dGVyKAotICAgICAgICAgIHRvb2x0aXBGb3JtYXR0ZXIuYmluZChudWxsLCBzZWxmLnByZWZlcmVu Y2VzW3ByZWZOYW1lXSkKLSAgICAgICAgKTsKLSAgICAgIH0KLQotICAgICAgaWYoIXNlbGYuY2hh cnRTdG9yZVtjaGFydE5hbWVdKSB7Ci0KLSAgICAgICAgbGV0IGNoYXJ0T2JqID0gbmV3IGNoYXJ0 aW5nLkNoYXJ0KGNvbnRhaW5lciwgb3B0aW9ucyk7Ci0KLSAgICAgICAgY2hhcnRPYmouc2V0VG9v bHRpcEZvcm1hdHRlcigKLSAgICAgICAgICB0b29sdGlwRm9ybWF0dGVyLmJpbmQobnVsbCwgc2Vs Zi5wcmVmZXJlbmNlc1twcmVmTmFtZV0pCi0gICAgICAgICk7Ci0KLSAgICAgICAgc2VsZi5jaGFy dFN0b3JlW2NoYXJ0TmFtZV0gPSB7Ci0gICAgICAgICAgJ2NoYXJ0T2JqJyA6IGNoYXJ0T2JqLAot ICAgICAgICAgICdpbnRlcnZhbElkJyA6IHVuZGVmaW5lZCwKLSAgICAgICAgfTsKLQotICAgICAg ICBzZWxmLmNoYXJ0U3RvcmVbY2hhcnROYW1lXVsnaW50ZXJ2YWxJZCddID0gc2VsZi5yZW5kZXJD aGFydExvb3AoCi0gICAgICAgICAgc2VsZi5jaGFydFN0b3JlW2NoYXJ0TmFtZV1bJ2NoYXJ0T2Jq J10sIHNlbGYuc2lkLCBzZWxmLmRpZCwgdXJsLAotICAgICAgICAgIGNvdW50ZXIsIHNlbGYucHJl ZmVyZW5jZXNbcHJlZk5hbWVdCi0gICAgICAgICk7Ci0gICAgICB9CisgICAgICB0aGVQb2xsaW5n RnVuYygpOworICAgICAgc2VsZi5jaGFydHNQb2xsZXJJbnRJZCA9IHNldEludGVydmFsKHRoZVBv bGxpbmdGdW5jLCBwb2xsSW50ZXJ2YWwgKiAxMDAwKTsKICAgICB9LAogCiAgICAgLy8gSGFuZGxl ciBmdW5jdGlvbiB0byBzdXBwb3J0IHRoZSAiQWRkIFNlcnZlciIgbGluawpAQCAtNjgzLDE0ICs3 MTUsMTMgQEAgZGVmaW5lKCdwZ2FkbWluLmRhc2hib2FyZCcsIFsKICAgICBjbGVhckNoYXJ0RnJv bVN0b3JlOiBmdW5jdGlvbihjaGFydE5hbWUpIHsKICAgICAgIHZhciBzZWxmID0gdGhpczsKICAg ICAgIGlmKCFjaGFydE5hbWUpewotICAgICAgICBfLmVhY2goc2VsZi5jaGFydFN0b3JlLCBmdW5j dGlvbihjaGFydCwga2V5KSB7Ci0gICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGFydC5pbnRlcnZh bElkKTsKLSAgICAgICAgICBkZWxldGUgc2VsZi5jaGFydFN0b3JlW2tleV07CisgICAgICAgIHNl bGYuc3RvcENoYXJ0c1BvbGxlcigpOworICAgICAgICBfLmVhY2goc2VsZi5jaGFydF9zdG9yZSwg ZnVuY3Rpb24oY2hhcnQsIGtleSkgeworICAgICAgICAgIGRlbGV0ZSBzZWxmLmNoYXJ0X3N0b3Jl W2tleV07CiAgICAgICAgIH0pOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgIGNsZWFy SW50ZXJ2YWwoc2VsZi5jaGFydFN0b3JlW2NoYXJ0TmFtZV0uaW50ZXJ2YWxJZCk7Ci0gICAgICAg IGRlbGV0ZSBzZWxmLmNoYXJ0U3RvcmVbY2hhcnROYW1lXTsKKyAgICAgICAgZGVsZXRlIHNlbGYu Y2hhcnRfc3RvcmVbY2hhcnROYW1lXTsKICAgICAgIH0KICAgICB9LAogCkBAIC03OTcsMjYgKzgy OCwzNyBAQCBkZWZpbmUoJ3BnYWRtaW4uZGFzaGJvYXJkJywgWwogCiAgICAgICAgIGlmKHNlbGYu cHJlZmVyZW5jZXMuc2hvd19ncmFwaHMpIHsKICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGdyYXBo cwotICAgICAgICAgIHBnQWRtaW4uRGFzaGJvYXJkLnJlbmRlcl9jaGFydCgKLSAgICAgICAgICAg IGRpdl9zZXNzaW9ucywgdXJsX2ZvcignZGFzaGJvYXJkLnNlc3Npb25fc3RhdHMnKSwgb3B0aW9u c19saW5lLCBmYWxzZSwKLSAgICAgICAgICAgICdzZXNzaW9uX3N0YXRzJywgJ3Nlc3Npb25fc3Rh dHNfcmVmcmVzaCcKLSAgICAgICAgICApOwotICAgICAgICAgIHBnQWRtaW4uRGFzaGJvYXJkLnJl bmRlcl9jaGFydCgKLSAgICAgICAgICAgIGRpdl90cHMsIHVybF9mb3IoJ2Rhc2hib2FyZC50cHNf c3RhdHMnKSwgb3B0aW9uc19saW5lLCB0cnVlLAotICAgICAgICAgICAgJ3Rwc19zdGF0cycsJ3Rw c19zdGF0c19yZWZyZXNoJwotICAgICAgICAgICk7Ci0gICAgICAgICAgcGdBZG1pbi5EYXNoYm9h cmQucmVuZGVyX2NoYXJ0KAotICAgICAgICAgICAgZGl2X3RpLCB1cmxfZm9yKCdkYXNoYm9hcmQu dGlfc3RhdHMnKSwgb3B0aW9uc19saW5lLCB0cnVlLAotICAgICAgICAgICAgJ3RpX3N0YXRzJywg J3RpX3N0YXRzX3JlZnJlc2gnCi0gICAgICAgICAgKTsKLSAgICAgICAgICBwZ0FkbWluLkRhc2hi b2FyZC5yZW5kZXJfY2hhcnQoCi0gICAgICAgICAgICBkaXZfdG8sIHVybF9mb3IoJ2Rhc2hib2Fy ZC50b19zdGF0cycpLCBvcHRpb25zX2xpbmUsIHRydWUsCi0gICAgICAgICAgICAndG9fc3RhdHMn LCd0b19zdGF0c19yZWZyZXNoJwotICAgICAgICAgICk7Ci0gICAgICAgICAgcGdBZG1pbi5EYXNo Ym9hcmQucmVuZGVyX2NoYXJ0KAotICAgICAgICAgICAgZGl2X2JpbywgdXJsX2ZvcignZGFzaGJv YXJkLmJpb19zdGF0cycpLCBvcHRpb25zX2xpbmUsIHRydWUsCi0gICAgICAgICAgICAnYmlvX3N0 YXRzJywnYmlvX3N0YXRzX3JlZnJlc2gnCi0gICAgICAgICAgKTsKKyAgICAgICAgICBwZ0FkbWlu LkRhc2hib2FyZC5yZW5kZXJDaGFydHMoW3sKKyAgICAgICAgICAgIGNoYXJ0X25hbWU6ICdzZXNz aW9uX3N0YXRzJywKKyAgICAgICAgICAgIGNvbnRhaW5lcjogZGl2X3Nlc3Npb25zLAorICAgICAg ICAgICAgb3B0aW9uczogb3B0aW9uc19saW5lLAorICAgICAgICAgICAgY291bnRlcjogZmFsc2Us CisgICAgICAgICAgICByZWZyZXNoX3ByZWZfbmFtZTogJ3Nlc3Npb25fc3RhdHNfcmVmcmVzaCcs CisgICAgICAgICAgfSwgeworICAgICAgICAgICAgY2hhcnRfbmFtZTogJ3Rwc19zdGF0cycsCisg ICAgICAgICAgICBjb250YWluZXI6IGRpdl90cHMsCisgICAgICAgICAgICBvcHRpb25zOiBvcHRp b25zX2xpbmUsCisgICAgICAgICAgICBjb3VudGVyOiB0cnVlLAorICAgICAgICAgICAgcmVmcmVz aF9wcmVmX25hbWU6ICd0cHNfc3RhdHNfcmVmcmVzaCcsCisgICAgICAgICAgfSwgeworICAgICAg ICAgICAgY2hhcnRfbmFtZTogJ3RpX3N0YXRzJywKKyAgICAgICAgICAgIGNvbnRhaW5lcjogZGl2 X3RpLAorICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc19saW5lLAorICAgICAgICAgICAgY291 bnRlcjogdHJ1ZSwKKyAgICAgICAgICAgIHJlZnJlc2hfcHJlZl9uYW1lOiAndGlfc3RhdHNfcmVm cmVzaCcsCisgICAgICAgICAgfSwgeworICAgICAgICAgICAgY2hhcnRfbmFtZTogJ3RvX3N0YXRz JywKKyAgICAgICAgICAgIGNvbnRhaW5lcjogZGl2X3RvLAorICAgICAgICAgICAgb3B0aW9uczog b3B0aW9uc19saW5lLAorICAgICAgICAgICAgY291bnRlcjogdHJ1ZSwKKyAgICAgICAgICAgIHJl ZnJlc2hfcHJlZl9uYW1lOiAndG9fc3RhdHNfcmVmcmVzaCcsCisgICAgICAgICAgfSwgeworICAg ICAgICAgICAgY2hhcnRfbmFtZTogJ2Jpb19zdGF0cycsCisgICAgICAgICAgICBjb250YWluZXI6 IGRpdl9iaW8sCisgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zX2xpbmUsCisgICAgICAgICAg ICBjb3VudGVyOiB0cnVlLAorICAgICAgICAgICAgcmVmcmVzaF9wcmVmX25hbWU6ICdiaW9fc3Rh dHNfcmVmcmVzaCcsCisgICAgICAgICAgfV0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYoIXNl bGYucHJlZmVyZW5jZXMuc2hvd19ncmFwaHMgJiYgIXNlbGYucHJlZmVyZW5jZXMuc2hvd19hY3Rp dml0eSkgewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNo Ym9hcmQvc3FsL2RlZmF1bHQvYmlvX3N0YXRzLnNxbCBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90 ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L2Jpb19zdGF0cy5zcWwKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDE0MjdlMWE3Li4wMDAwMDAwMAotLS0gYS93ZWIvcGdhZG1pbi9k YXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC9iaW9fc3RhdHMuc3FsCisr KyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0vKnBnYTRkYXNoKi8KLVNFTEVDVAotICAgKFNF TEVDVCBzdW0oYmxrc19yZWFkKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hF UkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9 IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1JlYWRzJykgfX0iLAotICAgKFNFTEVD VCBzdW0oYmxrc19oaXQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBk YXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sg ZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnSGl0cycpIH19IgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2RlZmF1bHQvZGFzaGJv YXJkX3N0YXRzLnNxbCBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJk L3NxbC9kZWZhdWx0L2Rhc2hib2FyZF9zdGF0cy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAuLjU2NjBjMjMwCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vZGFz aGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2RlZmF1bHQvZGFzaGJvYXJkX3N0YXRzLnNx bApAQCAtMCwwICsxLDU2IEBACit7JSBzZXQgYWRkX3VuaW9uID0gZmFsc2UgJX0KK3slIGlmICdz ZXNzaW9uX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUg JX0KK1NFTEVDVCAnc2Vzc2lvbl9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcm93X3RvX2pzb24odCkg QVMgY2hhcnRfZGF0YQorRlJPTSAoU0VMRUNUCisgICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdf c3RhdF9hY3Rpdml0eXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1l IEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAi e3sgXygnVG90YWwnKSB9fSIsCisgICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rp dml0eSBXSEVSRSBzdGF0ZSA9ICdhY3RpdmUneyUgaWYgZGlkICV9IEFORCBkYXRuYW1lID0gKFNF TEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVu ZGlmICV9KSAgQVMgInt7IF8oJ0FjdGl2ZScpIH19IiwKKyAgIChTRUxFQ1QgY291bnQoKikgRlJP TSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHN0YXRlID0gJ2lkbGUneyUgaWYgZGlkICV9IEFORCBk YXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sg ZGlkIH19KXslIGVuZGlmICV9KSAgQVMgInt7IF8oJ0lkbGUnKSB9fSIKKykgdAoreyUgZW5kaWYg JX0KK3slIGlmIGFkZF91bmlvbiBhbmQgJ3Rwc19zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK1VO SU9OIEFMTAoreyUgZW5kaWYgJX0KK3slIGlmICd0cHNfc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9 Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQorU0VMRUNUICd0cHNfc3RhdHMnIEFTIGNoYXJ0 X25hbWUsIHJvd190b19qc29uKHQpIEFTIGNoYXJ0X2RhdGEKK0ZST00gKFNFTEVDVAorICAgKFNF TEVDVCBzdW0oeGFjdF9jb21taXQpICsgc3VtKHhhY3Rfcm9sbGJhY2spIEZST00gcGdfc3RhdF9k YXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00g cGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygn VHJhbnNhY3Rpb25zJykgfX0iLAorICAgKFNFTEVDVCBzdW0oeGFjdF9jb21taXQpIEZST00gcGdf c3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1l IEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAi e3sgXygnQ29tbWl0cycpIH19IiwKKyAgIChTRUxFQ1Qgc3VtKHhhY3Rfcm9sbGJhY2spIEZST00g cGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRu YW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBB UyAie3sgXygnUm9sbGJhY2tzJykgfX0iCispIHQKK3slIGVuZGlmICV9Cit7JSBpZiBhZGRfdW5p b24gYW5kICd0aV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK1VOSU9OIEFMTAoreyUgZW5kaWYg JX0KK3slIGlmICd0aV9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK3slIHNldCBhZGRfdW5pb24g PSB0cnVlICV9CitTRUxFQ1QgJ3RpX3N0YXRzJyBBUyBjaGFydF9uYW1lLCByb3dfdG9fanNvbih0 KSBBUyBjaGFydF9kYXRhCitGUk9NIChTRUxFQ1QKKyAgIChTRUxFQ1Qgc3VtKHR1cF9pbnNlcnRl ZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VM RUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5k aWYgJX0pIEFTICJ7eyBfKCdJbnNlcnRzJykgfX0iLAorICAgKFNFTEVDVCBzdW0odHVwX3VwZGF0 ZWQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNF TEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVu ZGlmICV9KSBBUyAie3sgXygnVXBkYXRlcycpIH19IiwKKyAgIChTRUxFQ1Qgc3VtKHR1cF9kZWxl dGVkKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChT RUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBl bmRpZiAlfSkgQVMgInt7IF8oJ0RlbGV0ZXMnKSB9fSIKKykgdAoreyUgZW5kaWYgJX0KK3slIGlm IGFkZF91bmlvbiBhbmQgJ3RvX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQorVU5JT04gQUxMCit7 JSBlbmRpZiAlfQoreyUgaWYgJ3RvX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQoreyUgc2V0IGFk ZF91bmlvbiA9IHRydWUgJX0KK1NFTEVDVCAndG9fc3RhdHMnIEFTIGNoYXJ0X25hbWUsIHJvd190 b19qc29uKHQpIEFTIGNoYXJ0X2RhdGEKK0ZST00gKFNFTEVDVAorICAgKFNFTEVDVCBzdW0odHVw X2ZldGNoZWQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1l ID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19 KXslIGVuZGlmICV9KSBBUyAie3sgXygnRmV0Y2hlZCcpIH19IiwKKyAgIChTRUxFQ1Qgc3VtKHR1 cF9yZXR1cm5lZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5h bWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQg fX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdSZXR1cm5lZCcpIH19IgorKSB0Cit7JSBlbmRpZiAl fQoreyUgaWYgYWRkX3VuaW9uIGFuZCAnYmlvX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQorVU5J T04gQUxMCit7JSBlbmRpZiAlfQoreyUgaWYgJ2Jpb19zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0K K3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9CitTRUxFQ1QgJ2Jpb19zdGF0cycgQVMgY2hhcnRf bmFtZSwgcm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0YQorRlJPTSAoU0VMRUNUCisgICAoU0VM RUNUIHN1bShibGtzX3JlYWQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVS RSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0g e3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnUmVhZHMnKSB9fSIsCisgICAoU0VMRUNU IHN1bShibGtzX2hpdCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRh dG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBk aWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdIaXRzJykgfX0iCispIHQKK3slIGVuZGlmICV9 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9z cWwvZGVmYXVsdC9zZXNzaW9uX3N0YXRzLnNxbCBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1w bGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3Nlc3Npb25fc3RhdHMuc3FsCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAzZWE2YTU3Ny4uMDAwMDAwMDAKLS0tIGEvd2ViL3BnYWRtaW4v ZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2RlZmF1bHQvc2Vzc2lvbl9zdGF0cy5z cWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8qcGdhNGRhc2gqLwotU0VMRUNUCi0g ICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0eXslIGlmIGRpZCAlfSBXSEVS RSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0g e3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnVG90YWwnKSB9fSIsCi0gICAoU0VMRUNU IGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSBzdGF0ZSA9ICdhY3RpdmUneyUg aWYgZGlkICV9IEFORCBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2Ug V0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSAgQVMgInt7IF8oJ0FjdGl2ZScpIH19 IiwKLSAgIChTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHN0YXRl ID0gJ2lkbGUneyUgaWYgZGlkICV9IEFORCBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00g cGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSAgQVMgInt7IF8o J0lkbGUnKSB9fSIKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMv ZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3RpX3N0YXRzLnNxbCBiL3dlYi9wZ2FkbWluL2Rhc2hib2Fy ZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3RpX3N0YXRzLnNxbApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNWY5NzYwODIuLjAwMDAwMDAwCi0tLSBhL3dlYi9wZ2FkbWlu L2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3RpX3N0YXRzLnNxbAor KysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotLypwZ2E0ZGFzaCovCi1TRUxFQ1QKLSAgIChT RUxFQ1Qgc3VtKHR1cF9pbnNlcnRlZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9 IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBv aWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdJbnNlcnRzJykgfX0iLAotICAg KFNFTEVDVCBzdW0odHVwX3VwZGF0ZWQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAl fSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUg b2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnVXBkYXRlcycpIH19IiwKLSAg IChTRUxFQ1Qgc3VtKHR1cF9kZWxldGVkKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQg JX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJF IG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0RlbGV0ZXMnKSB9fSIKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9k ZWZhdWx0L3RvX3N0YXRzLnNxbCBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFz aGJvYXJkL3NxbC9kZWZhdWx0L3RvX3N0YXRzLnNxbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMmY1YTNiZWYuLjAwMDAwMDAwCi0tLSBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1w bGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3RvX3N0YXRzLnNxbAorKysgL2Rldi9udWxsCkBA IC0xLDQgKzAsMCBAQAotLypwZ2E0ZGFzaCovCi1TRUxFQ1QKLSAgIChTRUxFQ1Qgc3VtKHR1cF9m ZXRjaGVkKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9 IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7 JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0ZldGNoZWQnKSB9fSIsCi0gICAoU0VMRUNUIHN1bSh0dXBf cmV0dXJuZWQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1l ID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19 KXslIGVuZGlmICV9KSBBUyAie3sgXygnUmV0dXJuZWQnKSB9fSIKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3Rwc19zdGF0 cy5zcWwgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVm YXVsdC90cHNfc3RhdHMuc3FsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTVmODZm NS4uMDAwMDAwMDAKLS0tIGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9h cmQvc3FsL2RlZmF1bHQvdHBzX3N0YXRzLnNxbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBA QAotLypwZ2E0ZGFzaCovCi1TRUxFQ1QKLSAgIChTRUxFQ1Qgc3VtKHhhY3RfY29tbWl0KSArIHN1 bSh4YWN0X3JvbGxiYWNrKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUg ZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7 IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1RyYW5zYWN0aW9ucycpIH19IiwKLSAgIChT RUxFQ1Qgc3VtKHhhY3RfY29tbWl0KSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0g V0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9p ZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0NvbW1pdHMnKSB9fSIsCi0gICAo U0VMRUNUIHN1bSh4YWN0X3JvbGxiYWNrKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQg JX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJF IG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1JvbGxiYWNrcycpIH19Igpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3Fs L2dwZGJfNS4wX3BsdXMvZGFzaGJvYXJkX3N0YXRzLnNxbCBiL3dlYi9wZ2FkbWluL2Rhc2hib2Fy ZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9ncGRiXzUuMF9wbHVzL2Rhc2hib2FyZF9zdGF0cy5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjc2NzA1NDdjCi0tLSAvZGV2 L251bGwKKysrIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3Fs L2dwZGJfNS4wX3BsdXMvZGFzaGJvYXJkX3N0YXRzLnNxbApAQCAtMCwwICsxLDU2IEBACit7JSBz ZXQgYWRkX3VuaW9uID0gZmFsc2UgJX0KK3slIGlmICdzZXNzaW9uX3N0YXRzJyBpbiBjaGFydF9u YW1lcyAlfQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0KK1NFTEVDVCAnc2Vzc2lvbl9zdGF0 cycgQVMgY2hhcnRfbmFtZSwgcm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0YQorRlJPTSAoU0VM RUNUCisgICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0eXslIGlmIGRpZCAl fSBXSEVSRSBkYXRpZCA9IHt7IGRpZCB9fSB7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1RvdGFsJykg fX0iLAorICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgY3Vy cmVudF9xdWVyeSBOT1QgTElLRSAnPElETEU+JSd7JSBpZiBkaWQgJX0gQU5EIGRhdGlkID0ge3sg ZGlkIH19IHslIGVuZGlmICV9KSAgQVMgInt7IF8oJ0FjdGl2ZScpIH19IiwKKyAgIChTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIGN1cnJlbnRfcXVlcnkgTElLRSAn PElETEU+JSd7JSBpZiBkaWQgJX0gQU5EIGRhdGlkID0gIHt7IGRpZCB9fSB7JSBlbmRpZiAlfSkg IEFTICJ7eyBfKCdJZGxlJykgfX0iCispIHQKK3slIGVuZGlmICV9Cit7JSBpZiBhZGRfdW5pb24g YW5kICd0cHNfc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9CitVTklPTiBBTEwKK3slIGVuZGlmICV9 Cit7JSBpZiAndHBzX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQoreyUgc2V0IGFkZF91bmlvbiA9 IHRydWUgJX0KK1NFTEVDVCAndHBzX3N0YXRzJyBBUyBjaGFydF9uYW1lLCByb3dfdG9fanNvbih0 KSBBUyBjaGFydF9kYXRhCitGUk9NIChTRUxFQ1QKKyAgIChTRUxFQ1Qgc3VtKHhhY3RfY29tbWl0 KSArIHN1bSh4YWN0X3JvbGxiYWNrKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0g V0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9p ZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1RyYW5zYWN0aW9ucycpIH19IiwK KyAgIChTRUxFQ1Qgc3VtKHhhY3RfY29tbWl0KSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBk aWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdI RVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0NvbW1pdHMnKSB9fSIs CisgICAoU0VMRUNUIHN1bSh4YWN0X3JvbGxiYWNrKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBp ZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNl IFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1JvbGxiYWNrcycp IH19IgorKSB0Cit7JSBlbmRpZiAlfQoreyUgaWYgYWRkX3VuaW9uIGFuZCAndGlfc3RhdHMnIGlu IGNoYXJ0X25hbWVzICV9CitVTklPTiBBTEwKK3slIGVuZGlmICV9Cit7JSBpZiAndGlfc3RhdHMn IGluIGNoYXJ0X25hbWVzICV9Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQorU0VMRUNUICd0 aV9zdGF0cycgQVMgY2hhcnRfbmFtZSwgcm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0YQorRlJP TSAoU0VMRUNUCisgICAoU0VMRUNUIHN1bSh0dXBfaW5zZXJ0ZWQpIEZST00gcGdfc3RhdF9kYXRh YmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdf ZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnSW5z ZXJ0cycpIH19IiwKKyAgIChTRUxFQ1Qgc3VtKHR1cF91cGRhdGVkKSBGUk9NIHBnX3N0YXRfZGF0 YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBn X2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1Vw ZGF0ZXMnKSB9fSIsCisgICAoU0VMRUNUIHN1bSh0dXBfZGVsZXRlZCkgRlJPTSBwZ19zdGF0X2Rh dGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBw Z19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdE ZWxldGVzJykgfX0iCispIHQKK3slIGVuZGlmICV9Cit7JSBpZiBhZGRfdW5pb24gYW5kICd0b19z dGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK1VOSU9OIEFMTAoreyUgZW5kaWYgJX0KK3slIGlmICd0 b19zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9CitT RUxFQ1QgJ3RvX3N0YXRzJyBBUyBjaGFydF9uYW1lLCByb3dfdG9fanNvbih0KSBBUyBjaGFydF9k YXRhCitGUk9NIChTRUxFQ1QKKyAgIChTRUxFQ1Qgc3VtKHR1cF9mZXRjaGVkKSBGUk9NIHBnX3N0 YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBG Uk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7 IF8oJ0ZldGNoZWQnKSB9fSIsCisgICAoU0VMRUNUIHN1bSh0dXBfcmV0dXJuZWQpIEZST00gcGdf c3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1l IEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAi e3sgXygnUmV0dXJuZWQnKSB9fSIKKykgdAoreyUgZW5kaWYgJX0KK3slIGlmIGFkZF91bmlvbiBh bmQgJ2Jpb19zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK1VOSU9OIEFMTAoreyUgZW5kaWYgJX0K K3slIGlmICdiaW9fc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9Cit7JSBzZXQgYWRkX3VuaW9uID0g dHJ1ZSAlfQorU0VMRUNUICdiaW9fc3RhdHMnIEFTIGNoYXJ0X25hbWUsIHJvd190b19qc29uKHQp IEFTIGNoYXJ0X2RhdGEKK0ZST00gKFNFTEVDVAorICAgKFNFTEVDVCBzdW0oYmxrc19yZWFkKSBG Uk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1Qg ZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAl fSkgQVMgInt7IF8oJ1JlYWRzJykgfX0iLAorICAgKFNFTEVDVCBzdW0oYmxrc19oaXQpIEZST00g cGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRu YW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBB UyAie3sgXygnSGl0cycpIH19IgorKSB0Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2dwZGJfNS4wX3BsdXMvc2Vz c2lvbl9zdGF0cy5zcWwgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2Fy ZC9zcWwvZ3BkYl81LjBfcGx1cy9zZXNzaW9uX3N0YXRzLnNxbApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZTNmMjRlN2MuLjAwMDAwMDAwCi0tLSBhL3dlYi9wZ2FkbWluL2Rhc2hib2Fy ZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9ncGRiXzUuMF9wbHVzL3Nlc3Npb25fc3RhdHMuc3Fs CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vKnBnYTRkYXNoKi8KLVNFTEVDVAotICAg KFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHl7JSBpZiBkaWQgJX0gV0hFUkUg ZGF0aWQgPSB7eyBkaWQgfX0geyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdUb3RhbCcpIH19IiwKLSAg IChTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIGN1cnJlbnRfcXVl cnkgTk9UIExJS0UgJzxJRExFPiUneyUgaWYgZGlkICV9IEFORCBkYXRpZCA9IHt7IGRpZCB9fSB7 JSBlbmRpZiAlfSkgIEFTICJ7eyBfKCdBY3RpdmUnKSB9fSIsCi0gICAoU0VMRUNUIGNvdW50KCop IEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSBjdXJyZW50X3F1ZXJ5IExJS0UgJzxJRExFPiUn eyUgaWYgZGlkICV9IEFORCBkYXRpZCA9ICB7eyBkaWQgfX0geyUgZW5kaWYgJX0pICBBUyAie3sg XygnSWRsZScpIH19IgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3Rlc3RzL3Rl c3RfZGFzaGJvYXJkX2dyYXBocy5weSBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZXN0cy90ZXN0 X2Rhc2hib2FyZF9ncmFwaHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu LjkwMzgwYzJmCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3Rlc3Rz L3Rlc3RfZGFzaGJvYXJkX2dyYXBocy5weQpAQCAtMCwwICsxLDExOSBAQAorIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQg KEMpIDIwMTMgLSAyMDE5LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29m dHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKworZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBCYXNlVGVzdEdl bmVyYXRvcgorZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBzZXJ2ZXJfdXRpbHMgYXMgc2VydmVy X3V0aWxzCitpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCisKKworY2xhc3MgRGFzaGJvYXJkR3Jh cGhzVGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3Mg dmFsaWRhdGVzIHRoZSB2ZXJzaW9uIGluIHJhbmdlIGZ1bmN0aW9uYWxpdHkKKyAgICBieSBkZWZp bmluZyBkaWZmZXJlbnQgdmVyc2lvbiBzY2VuYXJpb3M7IHdoZXJlIGRpY3Qgb2YKKyAgICBwYXJh bWV0ZXJzIGRlc2NyaWJlcyB0aGUgc2NlbmFyaW8gYXBwZW5kZWQgYnkgdGVzdCBuYW1lLgorICAg ICIiIgorCisgICAgc2NlbmFyaW9zID0gWygKKyAgICAgICAgJ1Rlc3RDYXNlIGZvciBzZXNzaW9u X3N0YXRzIGdyYXBoJywgZGljdCgKKyAgICAgICAgICAgIHNpZD0xLAorICAgICAgICAgICAgZGlk PS0xLAorICAgICAgICAgICAgY2hhcnRfZGF0YT17CisgICAgICAgICAgICAgICAgJ3Nlc3Npb25f c3RhdHMnOiBbJ1RvdGFsJywgJ0FjdGl2ZScsICdJZGxlJ10sCisgICAgICAgICAgICB9CisgICAg ICAgICkpLCAoCisgICAgICAgICdUZXN0Q2FzZSBmb3IgdHBzX3N0YXRzIGdyYXBoJywgZGljdCgK KyAgICAgICAgICAgIHNpZD0xLAorICAgICAgICAgICAgZGlkPS0xLAorICAgICAgICAgICAgY2hh cnRfZGF0YT17CisgICAgICAgICAgICAgICAgJ3Rwc19zdGF0cyc6IFsnVHJhbnNhY3Rpb25zJywg J0NvbW1pdHMnLCAnUm9sbGJhY2tzJ10sCisgICAgICAgICAgICB9CisgICAgICAgICkpLCAoCisg ICAgICAgICdUZXN0Q2FzZSBmb3IgdGlfc3RhdHMgZ3JhcGgnLCBkaWN0KAorICAgICAgICAgICAg c2lkPTEsCisgICAgICAgICAgICBkaWQ9LTEsCisgICAgICAgICAgICBjaGFydF9kYXRhPXsKKyAg ICAgICAgICAgICAgICAndGlfc3RhdHMnOiBbJ0luc2VydHMnLCAnVXBkYXRlcycsICdEZWxldGVz J10sCisgICAgICAgICAgICB9CisgICAgICAgICkpLCAoCisgICAgICAgICdUZXN0Q2FzZSBmb3Ig dG9fc3RhdHMgZ3JhcGgnLCBkaWN0KAorICAgICAgICAgICAgc2lkPTEsCisgICAgICAgICAgICBk aWQ9LTEsCisgICAgICAgICAgICBjaGFydF9kYXRhPXsKKyAgICAgICAgICAgICAgICAndG9fc3Rh dHMnOiBbJ0ZldGNoZWQnLCAnUmV0dXJuZWQnXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgKSks ICgKKyAgICAgICAgJ1Rlc3RDYXNlIGZvciBiaW9fc3RhdHMgZ3JhcGgnLCBkaWN0KAorICAgICAg ICAgICAgc2lkPTEsCisgICAgICAgICAgICBkaWQ9LTEsCisgICAgICAgICAgICBjaGFydF9kYXRh PXsKKyAgICAgICAgICAgICAgICAnYmlvX3N0YXRzJzogWydSZWFkcycsICdIaXRzJ10sCisgICAg ICAgICAgICB9CisgICAgICAgICkpLCAoCisgICAgICAgICdUZXN0Q2FzZSBmb3IgdHdvIGdyYXBo cycsIGRpY3QoCisgICAgICAgICAgICBzaWQ9MSwKKyAgICAgICAgICAgIGRpZD0tMSwKKyAgICAg ICAgICAgIGNoYXJ0X2RhdGE9eworICAgICAgICAgICAgICAgICdzZXNzaW9uX3N0YXRzJzogWydU b3RhbCcsICdBY3RpdmUnLCAnSWRsZSddLAorICAgICAgICAgICAgICAgICdiaW9fc3RhdHMnOiBb J1JlYWRzJywgJ0hpdHMnXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgKSksICgKKyAgICAgICAg J1Rlc3RDYXNlIGZvciBmaXZlIGdyYXBocycsIGRpY3QoCisgICAgICAgICAgICBzaWQ9MSwKKyAg ICAgICAgICAgIGRpZD0tMSwKKyAgICAgICAgICAgIGNoYXJ0X2RhdGE9eworICAgICAgICAgICAg ICAgICdzZXNzaW9uX3N0YXRzJzogWydUb3RhbCcsICdBY3RpdmUnLCAnSWRsZSddLAorICAgICAg ICAgICAgICAgICd0cHNfc3RhdHMnOiBbJ1RyYW5zYWN0aW9ucycsICdDb21taXRzJywgJ1JvbGxi YWNrcyddLAorICAgICAgICAgICAgICAgICd0aV9zdGF0cyc6IFsnSW5zZXJ0cycsICdVcGRhdGVz JywgJ0RlbGV0ZXMnXSwKKyAgICAgICAgICAgICAgICAndG9fc3RhdHMnOiBbJ0ZldGNoZWQnLCAn UmV0dXJuZWQnXSwKKyAgICAgICAgICAgICAgICAnYmlvX3N0YXRzJzogWydSZWFkcycsICdIaXRz J10sCisgICAgICAgICAgICB9CisgICAgICAgICkpLCAoCisgICAgICAgICdUZXN0Q2FzZSBmb3Ig bm8gZ3JhcGgnLCBkaWN0KAorICAgICAgICAgICAgc2lkPTEsCisgICAgICAgICAgICBkaWQ9LTEs CisgICAgICAgICAgICBjaGFydF9kYXRhPXt9LAorICAgICAgICApKQorICAgIF0KKworICAgIGRl ZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldFN0YXRzVXJsKHNlbGYs IHNpZD0tMSwgZGlkPS0xLCBjaGFydF9uYW1lcz0nJyk6CisgICAgICAgIGJhc2VfdXJsID0gJy9k YXNoYm9hcmQvZGFzaGJvYXJkX3N0YXRzJworICAgICAgICBiYXNlX3VybCA9IGJhc2VfdXJsICsg Jy8nICsgc3RyKHNpZCkKKyAgICAgICAgYmFzZV91cmwgKz0gJy8nICsgc3RyKGRpZCkgaWYgZGlk ID4gMCBlbHNlICcnCisgICAgICAgIGJhc2VfdXJsICs9ICc/Y2hhcnRfbmFtZXM9JyArIGNoYXJ0 X25hbWVzCisgICAgICAgIHJldHVybiBiYXNlX3VybAorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6 CisgICAgICAgIHNlcnZlcl9yZXNwb25zZSA9IHNlcnZlcl91dGlscy5jb25uZWN0X3NlcnZlcihz ZWxmLCBzZWxmLnNpZCkKKyAgICAgICAgaWYgc2VydmVyX3Jlc3BvbnNlWyJpbmZvIl0gPT0gIlNl cnZlciBjb25uZWN0ZWQuIjoKKworICAgICAgICAgICAgdXJsID0gc2VsZi5nZXRTdGF0c1VybChz ZWxmLnNpZCwgc2VsZi5kaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIs Ii5qb2luKHNlbGYuY2hhcnRfZGF0YS5rZXlzKCkpKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBz ZWxmLnRlc3Rlci5nZXQodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcG9u c2Uuc3RhdHVzX2NvZGUsIDIwMCkKKworICAgICAgICAgICAgcmVzcF9kYXRhID0ganNvbi5sb2Fk cyhyZXNwb25zZS5kYXRhKQorCisgICAgICAgICAgICAjIEFsbCByZXF1ZXN0ZWQgY2hhcnRzIHJl Y2VpdmVkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocmVzcF9kYXRhLmtleXMo KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi5jaGFydF9kYXRhLmtl eXMoKSkpCisKKyAgICAgICAgICAgICMgQWxsIHJlcXVlc3RlZCBjaGFydHMgZGF0YSByZWNlaXZl ZAorICAgICAgICAgICAgZm9yIGNoYXJ0X25hbWUsIGNoYXJ0X3ZhbHMgaW4gc2VsZi5jaGFydF9k YXRhLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KHJlc3Bf ZGF0YVtjaGFydF9uYW1lXS5rZXlzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNldChjaGFydF92YWxzKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ug RXhjZXB0aW9uKCJFcnJvciB3aGlsZSBjb25uZWN0aW5nIHNlcnZlciB0byBhZGQgdGhlIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICIgZGF0YWJhc2UuIikKKworICAgIGRlZiB0ZWFyRG93 bihzZWxmKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pz L3V0aWxzLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3V0aWxzLmpzCmluZGV4IDI3Yjk5OWY3 Li42Y2JiNjhhNSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3V0aWxzLmpzCisr KyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy91dGlscy5qcwpAQCAtNDYsMyArNDYsMjcgQEAgbGV0 IGlzU3RyaW5nID0gKHN0cikgPT4gKF8uaXNTdHJpbmcoc3RyKSk7CiBleHBvcnQgewogICBpc1Zh bGlkRGF0YSwgaXNGdW5jdGlvbiwgaXNTdHJpbmcsCiB9OworCitleHBvcnQgZnVuY3Rpb24gZ2V0 RXBvY2goaW5wX2RhdGUpIHsKKyAgbGV0IGRhdGVfb2JqID0gaW5wX2RhdGUgPyBpbnBfZGF0ZSA6 IG5ldyBEYXRlKCk7CisgIHJldHVybiBwYXJzZUludChkYXRlX29iai5nZXRUaW1lKCkvMTAwMCk7 Cit9CisKKy8qIEV1Y2xhZGlhbiBHQ0QgKi8KK2V4cG9ydCBmdW5jdGlvbiBnZXRHQ0QoaW5wX2Fy cikgeworICBsZXQgZ2NkX2Zvcl90d28gPSAoYSwgYikgPT4geworICAgIHJldHVybiBhID09IDA/ YjpnY2RfZm9yX3R3byhiICUgYSwgYSk7CisgIH07CisKKyAgbGV0IGlucF9sZW4gPSBpbnBfYXJy Lmxlbmd0aDsKKyAgaWYoaW5wX2xlbiA8PSAyKSB7CisgICAgcmV0dXJuIGdjZF9mb3JfdHdvKGlu cF9hcnJbMF0sIGlucF9hcnJbMV0pOworICB9CisKKyAgbGV0IHJlc3VsdCA9IGlucF9hcnJbMF07 CisgIGZvcihsZXQgaT0xOyBpPGlucF9sZW47IGkrKykgeworICAgIHJlc3VsdCA9IGdjZF9mb3Jf dHdvKGlucF9hcnJbaV0sIHJlc3VsdCk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFz Y3JpcHQvZGFzaGJvYXJkL2NoYXJ0aW5nX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2Ny aXB0L2Rhc2hib2FyZC9jaGFydGluZ19zcGVjLmpzCmluZGV4IDhhZmQ3YTg0Li45YTBkODcwOSAx MDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9kYXNoYm9hcmQvY2hhcnRpbmdf c3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Rhc2hib2FyZC9jaGFydGlu Z19zcGVjLmpzCkBAIC03Myw2ICs3MywxMCBAQCBkZXNjcmliZSgnSW4gY2hhcnRpbmcgcmVsYXRl ZCB0ZXN0Y2FzZXMnLCAoKT0+IHsKICAgICBleHBlY3QoY2hhcnRPYmouZ2V0T3RoZXJEYXRhKCdz b21lX3ZhbCcpKS50b0VxdWFsKDEpOwogICB9KTsKIAorICBpdCgnQ2hlY2sgaWYgb3RoZXIgZGF0 YSByZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm90IHNldCcsICgpPT57CisgICAgZXhwZWN0KGNoYXJ0 T2JqLmdldE90aGVyRGF0YSgnc29tZV92YWxfbm90X3NldCcpKS50b0JlKHVuZGVmaW5lZCk7Cisg IH0pOworCiAgIGl0KCdDaGVjayBpZiBpc1Zpc2libGUgcmV0dXJucyBjb3JyZWN0JywgKCk9PnsK ICAgICBsZXQgZGltU3B5ID0gc3B5T24oY2hhcnRPYmosICdnZXRDb250YWluZXJEaW1lbnNpb25z Jyk7CiAKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvcGdhZG1pbl91dGls c19zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9wZ2FkbWluX3V0aWxzX3NwZWMu anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjM0MTM3NmFkCi0tLSAvZGV2 L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9wZ2FkbWluX3V0aWxzX3NwZWMu anMKQEAgLTAsMCArMSwzNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwg VG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE5LCBUaGUgcGdBZG1pbiBEZXZl bG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0 Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQgeyBnZXRFcG9jaCwgZ2V0R0NEIH0g ZnJvbSAnc291cmNlcy91dGlscyc7CisKK2Rlc2NyaWJlKCdnZXRFcG9jaCcsIGZ1bmN0aW9uICgp IHsKKyAgaXQoJ3Nob3VsZCByZXR1cm4gbm9uIHplcm8nLCBmdW5jdGlvbiAoKSB7CisgICAgZXhw ZWN0KGdldEVwb2NoKCkpLnRvQmVHcmVhdGVyVGhhbigwKTsKKyAgfSk7CisKKyAgaXQoJ3Nob3Vs ZCByZXR1cm4gZXBvY2ggZm9yIGEgZGF0ZSBwYXNzZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgbGV0 IHNvbWVEYXRlID0gbmV3IERhdGUoMjAxOSwxLDEsMTAsMjAsMzAsNDApLAorICAgICAgc29tZURh dGVFcG9jaCA9IDE1NDg5OTY2MzA7CisKKyAgICBleHBlY3QoZ2V0RXBvY2gobmV3IERhdGUoc29t ZURhdGUpKSkudG9FcXVhbChzb21lRGF0ZUVwb2NoKTsKKyAgfSk7Cit9KTsKKworZGVzY3JpYmUo J2dldEdDRCcsIGZ1bmN0aW9uICgpIHsKKyAgaXQoJ2ZvciB0d28gbnVtYmVycycsIGZ1bmN0aW9u ICgpIHsKKyAgICBsZXQgbm9zID0gWzUsIDEwXTsKKyAgICBleHBlY3QoZ2V0R0NEKG5vcykpLnRv RXF1YWwoNSk7CisgIH0pOworCisgIGl0KCdmb3IgbW9yZSB0aGFuIHR3byBudW1iZXJzJywgZnVu Y3Rpb24gKCkgeworICAgIGxldCBub3MgPSBbOSwgMjQsIDMzXTsKKyAgICBleHBlY3QoZ2V0R0NE KG5vcykpLnRvRXF1YWwoMyk7CisgIH0pOworfSk7Cg== --000000000000fd69cf0580d5312a--