<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>84642</bug_id>
          
          <creation_ts>2012-04-23 15:21:37 -0700</creation_ts>
          <short_desc>Make garden-o-matic work for the Apple Mac port</short_desc>
          <delta_ts>2012-06-19 16:54:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>89164</dependson>
    
    <dependson>89332</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>abarth</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>kadam</cc>
    
    <cc>lforschler</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>608076</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-04-23 15:21:37 -0700</bug_when>
    <thetext>As discussed at the WebKit Developers Conference,  garden-o-matic needs to work for the Apple Mac port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608083</commentid>
    <comment_count>1</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-23 15:26:47 -0700</bug_when>
    <thetext>cc&apos;ing abarth since I believe he is most in the know about what&apos;s remaining to support this. I&apos;ll be happy to work on it once I can sync up w/ him.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610132</commentid>
    <comment_count>2</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-04-25 16:15:14 -0700</bug_when>
    <thetext>I outlined the steps I think are needed in bug 82719. Copy-pasting here for easier reference.

If I were doing this, I&apos;d do the following set of patches:
1. Adding a drop-down in the top-right corner of garden-o-matic to choose your platform and then add a builders.js file for Apple (we can add other ports later when all the kinks are worked out).
2. Fix all the garden-o-matic JS code that uses build.chromium.org to use build.webkit.org for non-chromium platforms. Off the top of my head, the only things that need to change are the paths to the expected/actual results and the &quot;master&quot; query parameter passed to test-results.appspot.com (ChromiumWebkit --&gt; webkit.org).
3. Fix webkit-patch rebaseline-test to do the right thing for non-Chromium bots. I think this is just making it grab actual results off build.webkit.org instead of build.chromium.org.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647252</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 13:44:52 -0700</bug_when>
    <thetext>Going to take a stab at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647296</commentid>
    <comment_count>4</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-12 14:06:20 -0700</bug_when>
    <thetext>As a followup to the steps I outlined, I think we might also want an &quot;all platforms&quot; view for garden-o-matic for the use-case of wanting to rebaseline a test you just committed across all platforms. But I think that&apos;s a natural followup change. The primary use-case is wanting to get your platform&apos;s builders green and for that we want a dropdown where you pick your platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647325</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-12 14:22:35 -0700</bug_when>
    <thetext>it seems to me that it might make sense to specify the default platform on the command line (using the usual -platform/--chromium/--gtk/etc flags) rather than forcing the user to always select from the drop down. I&apos;m not even sure we need/want the dropdown at all (although I do think an &quot;all platforms&quot; is a nice long-term dream).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647342</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-12 14:30:59 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; it seems to me that it might make sense to specify the default platform on the command line (using the usual -platform/--chromium/--gtk/etc flags) rather than forcing the user to always select from the drop down. I&apos;m not even sure we need/want the dropdown at all (although I do think an &quot;all platforms&quot; is a nice long-term dream).

I&apos;m not set on the specifics of the UI. We can always tweak it if we find it&apos;s less than ideal. Simon, feel free to approach this bit however you want. My point was more that the UI currently assumes one platform (chromium) and making the UI mutli-platform aware is probably not as good as letting you pick the platform given the primary use-cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647345</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-12 14:33:10 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; it seems to me that it might make sense to specify the default platform on the command line (using the usual -platform/--chromium/--gtk/etc flags) rather than forcing the user to always select from the drop down. I&apos;m not even sure we need/want the dropdown at all (although I do think an &quot;all platforms&quot; is a nice long-term dream).
&gt; 
&gt; I&apos;m not set on the specifics of the UI. We can always tweak it if we find it&apos;s less than ideal. Simon, feel free to approach this bit however you want. My point was more that the UI currently assumes one platform (chromium) and making the UI mutli-platform aware is probably not as good as letting you pick the platform given the primary use-cases.

Oh, yeah, I agree that single-port is a better default than all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647383</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 15:02:53 -0700</bug_when>
    <thetext>I was going to add a platform flag, which sets the popup to the platform. But I agree that switching platforms on the fly isn&apos;t that important (other than possibly making development easier).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647395</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-12 15:11:31 -0700</bug_when>
    <thetext>smfr: Please feel free to grab me on #webkit if you have any questions.  I would probably start by hacking builders.js and looking to see what breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647557</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 18:22:47 -0700</bug_when>
    <thetext>I think we&apos;re going to need some server-side changes on b.w.o here. Chromium uses a consistent directory layout, and keeps json results around after zipping up test results:

http://build.chromium.org/f/chromium/layout_test_results/Webkit_Mac10_7/140722/

build.webkit.org, however, has results directories like:
http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20Tests/r120136%20%284%29/
then at some point moves things to old-results:
http://build.webkit.org/old-results/Lion%20Intel%20Release%20%28Tests%29/
but doesn&apos;t keep the json file separate from the zip file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647559</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 18:23:21 -0700</bug_when>
    <thetext>Also note the %20 vs underscores in the directory names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647561</commentid>
    <comment_count>12</comment_count>
      <attachid>147206</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 18:26:32 -0700</bug_when>
    <thetext>Created attachment 147206
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647562</commentid>
    <comment_count>13</comment_count>
      <attachid>147206</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 18:27:38 -0700</bug_when>
    <thetext>Comment on attachment 147206
Work in progress

Comments on the patch welcome, but not ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647566</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-12 18:29:08 -0700</bug_when>
    <thetext>Attachment 147206 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/BuildSlaveSupport/build.webkit.org-c...&quot; exit_code: 1
Tools/Scripts/webkitpy/layout_tests/port/builders.py:56:  whitespace before &apos;:&apos;  [pep8/E203] [5]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647586</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-06-12 18:54:43 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think we&apos;re going to need some server-side changes on b.w.o here. Chromium uses a consistent directory layout, and keeps json results around after zipping up test results:
&gt; 
&gt; http://build.chromium.org/f/chromium/layout_test_results/Webkit_Mac10_7/140722/
&gt; 
&gt; build.webkit.org, however, has results directories like:
&gt; http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20Tests/r120136%20%284%29/
&gt; then at some point moves things to old-results:
&gt; http://build.webkit.org/old-results/Lion%20Intel%20Release%20%28Tests%29/
&gt; but doesn&apos;t keep the json file separate from the zip file.

Looks like you&apos;re on the right track with this patch. Do we know when things get moved to old-results? I would imagine if it&apos;s not for 24 hours or more after the build completes, we can probably ignore its existence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647601</commentid>
    <comment_count>16</comment_count>
      <attachid>147206</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-12 19:25:51 -0700</bug_when>
    <thetext>Comment on attachment 147206
Work in progress

View in context: https://bugs.webkit.org/attachment.cgi?id=147206&amp;action=review

Yep.  Definitely looks like you&apos;re on the right track.

Having a directory on the buildbot that accumulates results for each builder is pretty useful.  If we can add that to build.webkit.org, that would be helpful both for the UI and for the backend of the rebaseline functionality.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/config.js:101
&gt; +    config.kCurrentPlatform = platform;

Just a style nit: The &quot;k&quot; in kCurrentPlatform means &quot;constant&quot;.  You might want to call this variable config.currentPlatform

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:95
&gt; +        // FIXME: can jQuery do this?

I think so.  If not, we should probably add this sort of function to base.js so we can re-use it elsewhere.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:110
&gt; +        Object.keys(config.kPlatforms).forEach(function(platformName) {

You might want to sort this list before iterating over it.  Object.keys can give things back in a wacky order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647603</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-12 19:27:16 -0700</bug_when>
    <thetext>In case you haven&apos;t found it yet, you can run the unit test by opening http://trac.webkit.org/browser/trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/run-unittests.html in a browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647658</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 21:41:53 -0700</bug_when>
    <thetext>build.chromium.org has directories which I presume are symlinks to the most recent results, like:
http://build.chromium.org/f/chromium/layout_test_results/Webkit_Win/results/

b.w.o has the revision and build number in the url:
http://build.webkit.org/results/Apple%20Lion%20Release%20WK1%20(Tests)/r120154%20%2816%29/
and no &apos;latest&apos; symlink.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647661</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-12 21:48:09 -0700</bug_when>
    <thetext>They&apos;re not actually symlinks.  The results of each build are just spammed into the folder, so it accumulates the most recent failure for each test.  Having a symlink to the latest build would probably work fine for garden o matic.  Accumulating the results is most useful for the flakiness dashboard to show you how each test failed during the most recent flake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647668</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-12 21:55:36 -0700</bug_when>
    <thetext>I&apos;m starting to think that garden-o-matic requires quite a bit of server-side support. I wish Chromium hadn&apos;t forked the tools so long ago :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647683</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-12 22:19:07 -0700</bug_when>
    <thetext>Hey now.  Be nice.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647729</commentid>
    <comment_count>22</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-12 23:22:34 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; They&apos;re not actually symlinks.  The results of each build are just spammed into the folder, so it accumulates the most recent failure for each test.  Having a symlink to the latest build would probably work fine for garden o matic.  Accumulating the results is most useful for the flakiness dashboard to show you how each test failed during the most recent flake.

TL;DR: Do whatever is easiest for you here.

Historically, the spamming was done because it was easiest to do it that way with some complexity of chromium&apos;s buildbot machinery. If you just symlink, all the tools should work fine. The only thing you&apos;d lose is the ability to see actual results for flaky tests (e.g. if a test fails one run, but passes in the most recent run, you wouldn&apos;t be able to easily see the output of the failure run in the flakiness dashboard). It&apos;s actually no worse than the current state of the flakiness dashboard for the b.w.o. bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647737</commentid>
    <comment_count>23</comment_count>
      <attachid>147206</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-12 23:37:44 -0700</bug_when>
    <thetext>Comment on attachment 147206
Work in progress

View in context: https://bugs.webkit.org/attachment.cgi?id=147206&amp;action=review

I don&apos;t have any significant feedback either. This patch is doing it all as I&apos;d expect/want.

&gt; Tools/ChangeLog:14
&gt; +        (.):

Side-nit: we really should change prepare-ChangeLog to understand anonymous top-level JS functions better so we don&apos;t get this spam in the output. Obviously, not related to the patch in question. :)

&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:95
&gt;&gt; +        // FIXME: can jQuery do this?
&gt; 
&gt; I think so.  If not, we should probably add this sort of function to base.js so we can re-use it elsewhere.

I don&apos;t see anything with a quick glance at http://docs.jquery.com/index.php?title=UI. Also, all we really want here is a select element. I&apos;d rather we not add a complex jquery widget here.

Having a generic function that takes a dictionary-style data-structure and spits out a select element (or populates an existing select element?) in base seems reasonable though.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:98
&gt; +                (RegExp(name + &apos;=&apos; + &apos;(.+?)(&amp;|$)&apos;).exec(location.search)||[,null])[1]

I like this! It&apos;s a bit hard to read, but it&apos;s a nice one-line way of doing this.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:107
&gt; +        var platformSelect = document.getElementById(&apos;platform-picker&apos;);

Looks like you haven&apos;t hooked up an onchange handler to this yet. When do you, I think the easiest thing might be to change the platform parameter and just window.location.reload(). That way you don&apos;t have to worry about cleaning up global state or other single-platform assumptions garden-o-matic makes.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:108
&gt; +        $(platformSelect).empty();

Nit: I don&apos;t think this does anything here since it&apos;s already empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647739</commentid>
    <comment_count>24</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-12 23:43:54 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I&apos;m starting to think that garden-o-matic requires quite a bit of server-side support. I wish Chromium hadn&apos;t forked the tools so long ago :(

An alternative to changing the server would be having garden-o-matic learn to grab the actual results files using URLs that include the revision number of the latest run. We actually have access to this from the full_results.json file that we already load in order to generate the list of failing tests. The json has a &quot;revision&quot; key that should match the revision number in the b.w.o. urls.

This is what the flakiness dashboard does to handle the b.w.o. bots currently and it works fine. It just makes the JS code a little more complicated. I think changing the server might be simpler in the long-run, but I&apos;m fine with doing this either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647746</commentid>
    <comment_count>25</comment_count>
      <attachid>147206</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-12 23:51:18 -0700</bug_when>
    <thetext>Comment on attachment 147206
Work in progress

View in context: https://bugs.webkit.org/attachment.cgi?id=147206&amp;action=review

&gt;&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:95
&gt;&gt;&gt; +        // FIXME: can jQuery do this?
&gt;&gt; 
&gt;&gt; I think so.  If not, we should probably add this sort of function to base.js so we can re-use it elsewhere.
&gt; 
&gt; I don&apos;t see anything with a quick glance at http://docs.jquery.com/index.php?title=UI. Also, all we really want here is a select element. I&apos;d rather we not add a complex jquery widget here.
&gt; 
&gt; Having a generic function that takes a dictionary-style data-structure and spits out a select element (or populates an existing select element?) in base seems reasonable though.

I think he meant parse query parameters out of URLs.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647747</commentid>
    <comment_count>26</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-06-12 23:53:07 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 147206 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147206&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:95
&gt; &gt;&gt;&gt; +        // FIXME: can jQuery do this?
&gt; &gt;&gt; 
&gt; &gt;&gt; I think so.  If not, we should probably add this sort of function to base.js so we can re-use it elsewhere.
&gt; &gt; 
&gt; &gt; I don&apos;t see anything with a quick glance at http://docs.jquery.com/index.php?title=UI. Also, all we really want here is a select element. I&apos;d rather we not add a complex jquery widget here.
&gt; &gt; 
&gt; &gt; Having a generic function that takes a dictionary-style data-structure and spits out a select element (or populates an existing select element?) in base seems reasonable though.
&gt; 
&gt; I think he meant parse query parameters out of URLs.  :)

Lol. That makes more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648015</commentid>
    <comment_count>27</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-13 08:00:49 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #20)
&gt; &gt; I&apos;m starting to think that garden-o-matic requires quite a bit of server-side support. I wish Chromium hadn&apos;t forked the tools so long ago :(
&gt; 
&gt; An alternative to changing the server would be having garden-o-matic learn to grab the actual results files using URLs that include the revision number of the latest run. We actually have access to this from the full_results.json file that we already load in order to generate the list of failing tests. The json has a &quot;revision&quot; key that should match the revision number in the b.w.o. urls.
&gt; 
&gt; This is what the flakiness dashboard does to handle the b.w.o. bots currently and it works fine. It just makes the JS code a little more complicated. I think changing the server might be simpler in the long-run, but I&apos;m fine with doing this either way.

Yeah, this was going to be my next approach. We&apos;re also getting revs and build numbers from each builder, but I haven&apos;t figured out the loading dependencies yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649851</commentid>
    <comment_count>28</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-14 21:52:44 -0700</bug_when>
    <thetext>Got as far as requesting full_results.json from build.webkit.org, but it doesn&apos;t set the Access-Control-Allow-Origin: * header, so I can&apos;t load them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649862</commentid>
    <comment_count>29</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-14 22:06:49 -0700</bug_when>
    <thetext>Filed bug 89164 on b.w.o for CORS stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649866</commentid>
    <comment_count>30</comment_count>
      <attachid>147729</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-14 22:09:25 -0700</bug_when>
    <thetext>Created attachment 147729
More work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650276</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-15 09:58:02 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Got as far as requesting full_results.json from build.webkit.org, but it doesn&apos;t set the Access-Control-Allow-Origin: * header, so I can&apos;t load them.

If you want to continue to make progress, you can hack SecurityOrigin::canRequest to always return true, or you can set Settings::disableWebSecurity to true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650738</commentid>
    <comment_count>32</comment_count>
      <attachid>147951</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-15 23:12:56 -0700</bug_when>
    <thetext>Created attachment 147951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650739</commentid>
    <comment_count>33</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-15 23:14:29 -0700</bug_when>
    <thetext>Patch is good for review. A couple of unit tests fail (checkout: rebaseline, ui.notifications: BuildersFailing). Not sure if that&apos;s my fault or not.

The perf panel doesn&apos;t work with the Apple builders. Haven&apos;t figured out why not yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650755</commentid>
    <comment_count>34</comment_count>
      <attachid>147951</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-16 00:51:57 -0700</bug_when>
    <thetext>Comment on attachment 147951
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=147951&amp;action=review

This looks great!  A bunch of minor comments below.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/LayoutTestResultsLoader.js:67
&gt; +        window.console.log(&apos;fetching NRWT results &apos;, this._builder.resultsDirectoryURL(buildName) + &apos;full_results.json&apos;)

Should we put these console message behind a debug flag?

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:81
&gt; +// FIXME: export, called by results.
&gt; +function indexOfMostRecentCompletedBuild(individualBuilderStatus)

Usually the way we export things is with this idiom:

builders.indexOfMostRecentCompletedBuild = function(indexOfMostRecentCompletedBuild)
...

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:140
&gt; +    net.get(builderInfoURL, function(builderInfo) {
&gt; +        callback(builderInfo);
&gt; +    });

You can just pass callback directly to net.get.  There&apos;s no need for the extra thunk.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:152
&gt; +            selectURL += (first ? &apos;?&apos; : &apos;&amp;&apos;) + &apos;select=&apos; + buildNumber;

A slightly better idiom for doing this is to build up a dictionary and then use $.param to convert the dictionary into a query string.  That will handle the escaping correctly in case anything funky is going on.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/builders.js:158
&gt; +        net.get(selectURL, function(cachedBuildsInfo) {
&gt; +            callback(cachedBuildsInfo);
&gt; +        });

Same comment about the extra thunk.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:174
&gt; +        // if (testName != &apos;editing/spelling/grammar-edit-word.html&apos;)
&gt; +        //     return;

We should probably remove this before landing.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js:184
&gt; -
&gt; +            

This change seem spurious.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/net.js:61
&gt; +            // window.console.log(&apos;failed to load&apos;, url, textStatus, errorThrown);

We should either remove this line or uncomment it and put it behind a debug flag.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:393
&gt; +                continueWalk();

I always worry that this function is going to overflow its stack, but I think we can wait for that problem to occur before worrying about it too much.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:621
&gt; +        net.jsonp(buildURLs[currentIndex], resultsCallback);

There&apos;s probably a way of avoiding repeating this line, but it&apos;s probably not worthwhile.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:629
&gt; +        var requestsInFlight = builderNameList.length;

Sorry to have created a merge conflict for you in this file.  You should feel free to revert my change to this function.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/results.js:643
&gt; +                    ++requestsInFlight;

Interesting.  I&apos;d probably change this around to use RequestTracker, but you or I can do that in a later patch.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:99
&gt; +        function getURLParameter(name) {
&gt; +            return decodeURI(
&gt; +                (RegExp(name + &apos;=&apos; + &apos;(.+?)(&amp;|$)&apos;).exec(location.search)||[,null])[1]
&gt; +            );
&gt; +        }

Can you move this function to base.js?

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:106
&gt; +        var platformSelect = document.getElementById(&apos;platform-picker&apos;);

Typically we&apos;d say $(this, &quot;#platform-picker&quot;) to scope this selector to this object.  It&apos;s not super important here, though, because this UI element really is a singleton.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:108
&gt; +        Object.keys(config.kPlatforms).forEach(function(platformName) {

You should always call sort() after calling Object.keys so that you iterate over the keys in a predictable order.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui.js:122
&gt; +            var url = window.location.href;
&gt; +            var queryIndex = url.indexOf(&apos;?&apos;);
&gt; +            if (queryIndex != -1)
&gt; +                url = url.substring(0, queryIndex);
&gt; +            window.location.href = url + &apos;?platform=&apos; + platformSelect.selectedOptions[0]._platform;

Why not just assign to window.location.search?

location.search = &apos;?platform=&apos; + platformSelect.selectedOptions[0]._platform;

That also has the advantage of preserving the fragment, which we use for remembering which tab is currently open.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/notifications.css:93
&gt; +        opacity: 0.2;
&gt; +        -webkit-transition: opacity 0.5s;

Nice idea.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/styles/onebar.css:47
&gt; +  float: right;
&gt; +  margin: 8px;
&gt; +  font-size: larger;

We&apos;ve been using four space indent for CSS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650756</commentid>
    <comment_count>35</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-06-16 00:54:52 -0700</bug_when>
    <thetext>&gt; Patch is good for review. A couple of unit tests fail (checkout: rebaseline, ui.notifications: BuildersFailing). Not sure if that&apos;s my fault or not.

Don&apos;t worry about them.  I&apos;ll take a look at these after you land your patch.

&gt; The perf panel doesn&apos;t work with the Apple builders. Haven&apos;t figured out why not yet.

The perf panel uses http://build.chromium.org/f/chromium/perf/dashboard/overview.html.  We should probably just disable the tab on non-Chromium ports for now.  In the future, we could integrate with or link to http://webkit-perf.appspot.com/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650949</commentid>
    <comment_count>36</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-06-16 21:54:09 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/120546</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650975</commentid>
    <comment_count>37</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-06-17 01:41:32 -0700</bug_when>
    <thetext>The following webkitpy tests are failing after this patch for both GTK and EFL ports:
webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest.test_complex_shadowing
webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest.test_mac_future
webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest.test_no_add_mac_future</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651206</commentid>
    <comment_count>38</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-17 23:57:44 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; The following webkitpy tests are failing after this patch for both GTK and EFL ports:
&gt; webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest.test_complex_shadowing
&gt; webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest.test_mac_future
&gt; webkitpy.common.checkout.baselineoptimizer_unittest.BaselineOptimizerTest.test_no_add_mac_future

New bug to track these failures: https://bugs.webkit.org/show_bug.cgi?id=89332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652990</commentid>
    <comment_count>39</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-06-19 16:54:27 -0700</bug_when>
    <thetext>Super exciting!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147206</attachid>
            <date>2012-06-12 18:26:32 -0700</date>
            <delta_ts>2012-06-14 22:09:20 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-84642-20120612182633.patch</filename>
            <type>text/plain</type>
            <size>25555</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMDg2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmJkYjU4NWE5NTc1ZGQ4YzFiYTI4NmZjODE3YjhiYTlm
ODI3NjE3Mi4uZWI2ZjU3MzYxYjI3ZWZiOGZhYTI3ZTZkYjIzNGQwYWJiODcyMDM2MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMw
IEBACisyMDEyLTA2LTEyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgZ2FyZGVuLW8tbWF0aWMgd29yayBmb3IgdGhlIEFwcGxlIE1hYyBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDY0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
V29yayBpbiBwcm9ncmVzcywgbm90IHJlYWR5IGZvciByZXZpZXcgeWV0LgorCisgICAgICAgICog
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVz
dEZhaWx1cmVzL2dhcmRlbi1vLW1hdGljLmh0bWw6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3Njcmlw
dHMvTGF5b3V0VGVzdFJlc3VsdHNMb2FkZXIuanM6CisgICAgICAgIChMYXlvdXRUZXN0UmVzdWx0
c0xvYWRlci5wcm90b3R5cGUuc2V0IF9mZXRjaEFuZFBhcnNlTlJXVFJlc3VsdHMpOgorICAgICAg
ICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1s
L1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2J1aWxkZXJzLmpzOgorICAgICAgICAoLik6CisgICAgICAg
ICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
VGVzdEZhaWx1cmVzL3NjcmlwdHMvY29uZmlnLmpzOgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3Jp
cHRzL21vZGVsLmpzOgorICAgICAgICAoLik6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMv
cmVzdWx0cy5qczoKKyAgICAgICAgKC4pOgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3Vp
LmpzOgorICAgICAgICAoLik6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkvZmFpbHVy
ZXMuanM6CisgICAgICAgICguKToKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53
ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc3R5bGVzL29uZWJhci5j
c3M6CisgICAgICAgICgjb25lYmFyICNwbGF0Zm9ybS1waWNrZXIpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnMucHk6CisKIDIwMTItMDYtMTIg
IENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAg
ICBbRUZMXSBlbmFibGUgTEVHQUNZX1dFQktJVF9CTE9CX0JVSUxERVIgZmxhZwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGlj
X2h0bWwvVGVzdEZhaWx1cmVzL2dhcmRlbi1vLW1hdGljLmh0bWwgYi9Ub29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMv
Z2FyZGVuLW8tbWF0aWMuaHRtbAppbmRleCA4M2I2YmI1MWRjNzUwYTkxZTE3YjVmZDgwZmUxNDUx
ZjVkNzhjMzE1Li5lZjM3NzJjZjFiYmQwNzIxMTZhYjYxYjhiYjQyYmVkMWI2YTMxZTAyIDEwMDY0
NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvZ2FyZGVuLW8tbWF0aWMuaHRtbAorKysgYi9Ub29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0
RmFpbHVyZXMvZ2FyZGVuLW8tbWF0aWMuaHRtbApAQCAtMzMsOSArMzMsOSBAQCBKYW1lcywgYSB3
ZWIgZGV2ZWxvcGVyIGZyb20gQmlybWluZ2hhbSwgVUsuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlLXNyYyAnc2VsZicgJ3Vuc2FmZS1pbmxpbmUnIGZpbGU6
IGh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbSBodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb207
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc3JjIGh0dHA6
Ly90aGVtZXMuZ29vZ2xldXNlcmNvbnRlbnQuY29tOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbWctc3JjIGh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbSBodHRw
Oi8vYnVpbGQuY2hyb21pdW0ub3JnIGZpbGU6OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZWRpYS1zcmMgaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtc3JjIGh0dHA6Ly9idWls
ZC5jaHJvbWl1bS5vcmcgaHR0cDovL3Rlc3QtcmVzdWx0cy5hcHBzcG90LmNvbTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdC1zcmMgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZyBodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnIGh0dHA6Ly8xMjcuMC4wLjE6ODEy
NyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLXNyYyBo
dHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnIGh0dHA6Ly9idWlsZC53ZWJraXQub3JnOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS1zcmMgaHR0cDovL2J1aWxk
LmNocm9taXVtLm9yZyBodHRwOi8vYnVpbGQud2Via2l0Lm9yZyBodHRwOi8vdGVzdC1yZXN1bHRz
LmFwcHNwb3QuY29tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25uZWN0LXNyYyBodHRwOi8vdHJhYy53ZWJraXQub3JnIGh0dHA6Ly9idWlsZC5jaHJvbWl1bS5v
cmcgaHR0cDovL2J1aWxkLndlYmtpdC5vcmcgaHR0cDovLzEyNy4wLjAuMTo4MTI3Ij4KIDx0aXRs
ZT5HYXJkZW4tTy1NYXRpYzwvdGl0bGU+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0
dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2Fuczo0MDAsNzAwIj4K
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29t
L2FqYXgvbGlicy9qcXVlcnl1aS8xLjguMTUvdGhlbWVzL2Jhc2UvanF1ZXJ5LXVpLmNzcyI+CmRp
ZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9MYXlvdXRUZXN0UmVzdWx0c0xvYWRl
ci5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL0xheW91dFRlc3RSZXN1bHRzTG9hZGVyLmpz
CmluZGV4IGYyNGE3MDJlYzU1MzBjNmMyNjA5YTY3ZWUwMmExMTZkZDkyY2Y3OWEuLjk4ZDlmN2Fm
NTJjOThmOTI5Y2I4MjViNjliZGQwY2VhMDA2ZGNjYmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWls
dXJlcy9zY3JpcHRzL0xheW91dFRlc3RSZXN1bHRzTG9hZGVyLmpzCisrKyBiL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWls
dXJlcy9zY3JpcHRzL0xheW91dFRlc3RSZXN1bHRzTG9hZGVyLmpzCkBAIC02NCw2ICs2NCw3IEBA
IExheW91dFRlc3RSZXN1bHRzTG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgX2Zl
dGNoQW5kUGFyc2VOUldUUmVzdWx0czogZnVuY3Rpb24oYnVpbGROYW1lLCBzdWNjZXNzQ2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2spIHsKKyAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdmZXRjaGlu
ZyBOUldUIHJlc3VsdHMgJywgdGhpcy5fYnVpbGRlci5yZXN1bHRzRGlyZWN0b3J5VVJMKGJ1aWxk
TmFtZSkgKyAnZnVsbF9yZXN1bHRzLmpzb24nKQogICAgICAgICBnZXRSZXNvdXJjZSh0aGlzLl9i
dWlsZGVyLnJlc3VsdHNEaXJlY3RvcnlVUkwoYnVpbGROYW1lKSArICdmdWxsX3Jlc3VsdHMuanNv
bicsIGZ1bmN0aW9uKHhocikgewogICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKChuZXcgTlJX
VFJlc3VsdHNQYXJzZXIoKSkucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpOwogICAgICAgICB9LApk
aWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvYnVpbGRlcnMuanMgYi9Ub29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0
RmFpbHVyZXMvc2NyaXB0cy9idWlsZGVycy5qcwppbmRleCA5ZWQwZDU0MmIxMDc3Y2E4ZTA0NTU5
OWY2NGZmYTUzNmNhMGYwNzBkLi4wYmYyMjliMTI5NmU1YmZkZjY0NTRjYmQxMzk5MGI5ZjNlYjYw
NjcxIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9idWlsZGVycy5qcworKysg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9idWlsZGVycy5qcwpAQCAtMjcsOCArMjcsNiBAQCB2
YXIgYnVpbGRlcnMgPSBidWlsZGVycyB8fCB7fTsKIAogKGZ1bmN0aW9uKCkgewogCi12YXIga0No
cm9taXVtQnVpbGRCb3RVUkwgPSAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9wL2Nocm9taXVt
LndlYmtpdCc7Ci0KIHZhciBrVXBkYXRlU3RlcE5hbWUgPSAndXBkYXRlJzsKIHZhciBrVXBkYXRl
U2NyaXB0c1N0ZXBOYW1lID0gJ3VwZGF0ZV9zY3JpcHRzJzsKIHZhciBrQ29tcGlsZVN0ZXBOYW1l
ID0gJ2NvbXBpbGUnOwpAQCAtMzYsOSArMzQsMTQgQEAgdmFyIGtXZWJLaXRUZXN0c1N0ZXBOYW1l
ID0gJ3dlYmtpdF90ZXN0cyc7CiAKIHZhciBrQ3Jhc2hlZE9ySHVuZ091dHB1dE1hcmtlciA9ICdj
cmFzaGVkIG9yIGh1bmcnOwogCi1mdW5jdGlvbiB1cmxGb3JCdWlsZEluZm8oYnVpbGRlck5hbWUs
IGJ1aWxkTnVtYmVyKQorZnVuY3Rpb24gYnVpbGRCb3RVUkwocGxhdGZvcm0pCit7CisgICAgcmV0
dXJuIGNvbmZpZy5rUGxhdGZvcm1zW3BsYXRmb3JtXS5idWlsZENvbnNvbGVVUkw7Cit9CisKK2Z1
bmN0aW9uIHVybEZvckJ1aWxkSW5mbyhwbGF0Zm9ybSwgYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVy
KQogewotICAgIHJldHVybiBrQ2hyb21pdW1CdWlsZEJvdFVSTCArICcvanNvbi9idWlsZGVycy8n
ICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkZXJOYW1lKSArICcvYnVpbGRzLycgKyBlbmNvZGVV
UklDb21wb25lbnQoYnVpbGROdW1iZXIpOworICAgIHJldHVybiBidWlsZEJvdFVSTChwbGF0Zm9y
bSkgKyAnL2pzb24vYnVpbGRlcnMvJyArIGVuY29kZVVSSUNvbXBvbmVudChidWlsZGVyTmFtZSkg
KyAnL2J1aWxkcy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkTnVtYmVyKTsKIH0KIAogZnVu
Y3Rpb24gZGlkRmFpbChzdGVwKQpAQCAtNzEsNyArNzQsNyBAQCBmdW5jdGlvbiBtb3N0UmVjZW50
Q29tcGxldGVkQnVpbGROdW1iZXIoaW5kaXZpZHVhbEJ1aWxkZXJTdGF0dXMpCiAKIHZhciBnX2J1
aWxkSW5mb0NhY2hlID0gbmV3IGJhc2UuQXN5bmNocm9ub3VzQ2FjaGUoZnVuY3Rpb24oa2V5LCBj
YWxsYmFjaykgewogICAgIHZhciBleHBsb2RlZEtleSA9IGtleS5zcGxpdCgnXG4nKTsKLSAgICBu
ZXQuZ2V0KHVybEZvckJ1aWxkSW5mbyhleHBsb2RlZEtleVswXSwgZXhwbG9kZWRLZXlbMV0pLCBj
YWxsYmFjayk7CisgICAgbmV0LmdldCh1cmxGb3JCdWlsZEluZm8oZXhwbG9kZWRLZXlbMF0sIGV4
cGxvZGVkS2V5WzFdLCBleHBsb2RlZEtleVsyXSksIGNhbGxiYWNrKTsKIH0pOwogCiBidWlsZGVy
cy5jbGVhckJ1aWxkSW5mb0NhY2hlID0gZnVuY3Rpb24oKQpAQCAtNzksOSArODIsOSBAQCBidWls
ZGVycy5jbGVhckJ1aWxkSW5mb0NhY2hlID0gZnVuY3Rpb24oKQogICAgIGdfYnVpbGRJbmZvQ2Fj
aGUuY2xlYXIoKTsKIH0KIAotZnVuY3Rpb24gZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWls
ZGVyKGNhbGxiYWNrKQorZnVuY3Rpb24gZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVy
KHBsYXRmb3JtLCBjYWxsYmFjaykKIHsKLSAgICBuZXQuZ2V0KGtDaHJvbWl1bUJ1aWxkQm90VVJM
ICsgJy9qc29uL2J1aWxkZXJzJywgZnVuY3Rpb24oYnVpbGRlclN0YXR1cykgeworICAgIG5ldC5n
ZXQoYnVpbGRCb3RVUkwocGxhdGZvcm0pICsgJy9qc29uL2J1aWxkZXJzJywgZnVuY3Rpb24oYnVp
bGRlclN0YXR1cykgewogICAgICAgICB2YXIgYnVpbGRJbmZvQnlCdWlsZGVyID0ge307CiAgICAg
ICAgIHZhciBidWlsZGVyTmFtZXMgPSBPYmplY3Qua2V5cyhidWlsZGVyU3RhdHVzKTsKICAgICAg
ICAgdmFyIHJlcXVlc3RUcmFja2VyID0gbmV3IGJhc2UuUmVxdWVzdFRyYWNrZXIoYnVpbGRlck5h
bWVzLmxlbmd0aCwgY2FsbGJhY2ssIFtidWlsZEluZm9CeUJ1aWxkZXJdKTsKQEAgLTEwMSw3ICsx
MDQsNyBAQCBmdW5jdGlvbiBmZXRjaE1vc3RSZWNlbnRCdWlsZEluZm9CeUJ1aWxkZXIoY2FsbGJh
Y2spCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBnX2J1aWxkSW5mb0NhY2hlLmdldChidWlsZGVyTmFtZSArICdcbicgKyBidWlsZE51bWJlciwg
ZnVuY3Rpb24oYnVpbGRJbmZvKSB7CisgICAgICAgICAgICBnX2J1aWxkSW5mb0NhY2hlLmdldChw
bGF0Zm9ybSArICdcbicgKyBidWlsZGVyTmFtZSArICdcbicgKyBidWlsZE51bWJlciwgZnVuY3Rp
b24oYnVpbGRJbmZvKSB7CiAgICAgICAgICAgICAgICAgYnVpbGRJbmZvQnlCdWlsZGVyW2J1aWxk
ZXJOYW1lXSA9IGJ1aWxkSW5mbzsKICAgICAgICAgICAgICAgICByZXF1ZXN0VHJhY2tlci5yZXF1
ZXN0Q29tcGxldGUoKTsKICAgICAgICAgICAgIH0pOwpAQCAtMTExLDcgKzExNCw3IEBAIGZ1bmN0
aW9uIGZldGNoTW9zdFJlY2VudEJ1aWxkSW5mb0J5QnVpbGRlcihjYWxsYmFjaykKIAogYnVpbGRl
cnMuYnVpbGRlcnNGYWlsaW5nTm9uTGF5b3V0VGVzdHMgPSBmdW5jdGlvbihjYWxsYmFjaykKIHsK
LSAgICBmZXRjaE1vc3RSZWNlbnRCdWlsZEluZm9CeUJ1aWxkZXIoZnVuY3Rpb24oYnVpbGRJbmZv
QnlCdWlsZGVyKSB7CisgICAgZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVyKGNvbmZp
Zy5rQ3VycmVudFBsYXRmb3JtLCBmdW5jdGlvbihidWlsZEluZm9CeUJ1aWxkZXIpIHsKICAgICAg
ICAgdmFyIGZhaWx1cmVMaXN0ID0ge307CiAgICAgICAgICQuZWFjaChidWlsZEluZm9CeUJ1aWxk
ZXIsIGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBidWlsZEluZm8pIHsKICAgICAgICAgICAgIGlmICgh
YnVpbGRJbmZvKQpAQCAtMTI2LDcgKzEyOSw3IEBAIGJ1aWxkZXJzLmJ1aWxkZXJzRmFpbGluZ05v
bkxheW91dFRlc3RzID0gZnVuY3Rpb24oY2FsbGJhY2spCiAKIGJ1aWxkZXJzLnBlcmZCdWlsZGVy
cyA9IGZ1bmN0aW9uKGNhbGxiYWNrKQogewotICAgIGZldGNoTW9zdFJlY2VudEJ1aWxkSW5mb0J5
QnVpbGRlcihmdW5jdGlvbihidWlsZEluZm9CeUJ1aWxkZXIpIHsKKyAgICBmZXRjaE1vc3RSZWNl
bnRCdWlsZEluZm9CeUJ1aWxkZXIoY29uZmlnLmtDdXJyZW50UGxhdGZvcm0sIGZ1bmN0aW9uKGJ1
aWxkSW5mb0J5QnVpbGRlcikgewogICAgICAgICB2YXIgcGVyZlRlc3RNYXAgPSB7fTsKICAgICAg
ICAgJC5lYWNoKGJ1aWxkSW5mb0J5QnVpbGRlciwgZnVuY3Rpb24oYnVpbGRlck5hbWUsIGJ1aWxk
SW5mbykgewogICAgICAgICAgICAgaWYgKCFidWlsZEluZm8gfHwgYnVpbGRlck5hbWUuaW5kZXhP
ZignUGVyZicpID09IC0xKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvY29u
ZmlnLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvY29uZmlnLmpzCmluZGV4IDM5YWU3MTM3
MjgwNmM1MWQzZTgwYWYxMmMxODA4ZTJjOTc2NWYwMGMuLjVlYzBjODY3MWJiY2E4YTYyMzU1NDQ0
ODYyZTA2ZGViYWQ1MjY4ZGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2Nv
bmZpZy5qcworKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9jb25maWcuanMKQEAgLTI3LDIx
ICsyNyw1MCBAQCB2YXIgY29uZmlnID0gY29uZmlnIHx8IHt9OwogCiAoZnVuY3Rpb24oKSB7CiAK
LWNvbmZpZy5rQnVpbGRlcnMgPSB7Ci0gICAgJ1dlYmtpdCBXaW4nOiB7dmVyc2lvbjogJ3hwJ30s
Ci0gICAgJ1dlYmtpdCBWaXN0YSc6IHt2ZXJzaW9uOiAndmlzdGEnfSwKLSAgICAnV2Via2l0IFdp
bjcnOiB7dmVyc2lvbjogJ3dpbjcnfSwKLSAgICAnV2Via2l0IFdpbiAoZGJnKSgxKSc6IHt2ZXJz
aW9uOiAneHAnLCBkZWJ1ZzogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBXaW4gKGRiZykoMiknOiB7dmVy
c2lvbjogJ3hwJywgZGVidWc6IHRydWV9LAotICAgICdXZWJraXQgTGludXgnOiB7dmVyc2lvbjog
J2x1Y2lkJywgaXM2NGJpdDogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBMaW51eCAzMic6IHt2ZXJzaW9u
OiAnbHVjaWQnfSwKLSAgICAnV2Via2l0IExpbnV4IChkYmcpJzoge3ZlcnNpb246ICdsdWNpZCcs
IGlzNjRiaXQ6IHRydWUsIGRlYnVnOiB0cnVlfSwKLSAgICAnV2Via2l0IE1hYzEwLjUnOiB7dmVy
c2lvbjogJ2xlb3BhcmQnfSwKLSAgICAnV2Via2l0IE1hYzEwLjUgKGRiZykoMSknOiB7dmVyc2lv
bjogJ2xlb3BhcmQnLCBkZWJ1ZzogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIp
Jzoge3ZlcnNpb246ICdsZW9wYXJkJywgZGVidWc6IHRydWV9LAotICAgICdXZWJraXQgTWFjMTAu
Nic6IHt2ZXJzaW9uOiAnc25vd2xlb3BhcmQnfSwKLSAgICAnV2Via2l0IE1hYzEwLjYgKGRiZykn
OiB7dmVyc2lvbjogJ3Nub3dsZW9wYXJkJywgZGVidWc6IHRydWV9LAotICAgICdXZWJraXQgTWFj
MTAuNyc6IHt2ZXJzaW9uOiAnbGlvbid9LAorY29uZmlnLmtQbGF0Zm9ybXMgPSB7CisgICAgJ2Fw
cGxlJyA6IHsKKyAgICAgICAgbGFiZWwgOiAnQXBwbGUnLAorICAgICAgICBidWlsZENvbnNvbGVV
Ukw6ICdodHRwOi8vYnVpbGQud2Via2l0Lm9yZycsCisgICAgICAgIGxheW91dFRlc3RSZXN1bHRz
VVJMOiAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cycsIC8vIEZJWE1FOiBub3Qgc3Vy
ZSBpZiB0aGlzIGlzIHJpZ2h0CisgICAgICAgIHdhdGVyZmFsbFVSTDogJ2h0dHA6Ly9idWlsZC53
ZWJraXQub3JnL3dhdGVyZmFsbCcsCisgICAgICAgIGJ1aWxkZXJzOiB7CisgICAgICAgICAgICAv
LyBUZW1wb3JhcnkKKyAgICAgICAgICAgICdBcHBsZSBMaW9uIFJlbGVhc2UgV0sxIFRlc3RzJyA6
IHt2ZXJzaW9uOiAnbGlvbicgfSwKKyAgICAgICAgICAgICdBcHBsZSBMaW9uIERlYnVnIFdLMSBU
ZXN0cycgOiB7dmVyc2lvbjogJ2xpb24nLCBkZWJ1ZzogdHJ1ZX0sCisgICAgICAgICAgICAnQXBw
bGUgTGlvbiBSZWxlYXNlIFdLMiBUZXN0cycgOiB7dmVyc2lvbjogJ2xpb24nIH0sCisgICAgICAg
ICAgICAnQXBwbGUgTGlvbiBEZWJ1ZyBXSzIgVGVzdHMnIDoge3ZlcnNpb246ICdsaW9uJywgZGVi
dWc6IHRydWV9LAorCisKKyAgICAgICAgICAgIC8vICdBcHBsZSBMaW9uIFJlbGVhc2UgV0sxIChU
ZXN0cyknIDoge3ZlcnNpb246ICdsaW9uJyB9LAorICAgICAgICAgICAgLy8gJ0FwcGxlIExpb24g
RGVidWcgV0sxIChUZXN0cyknIDoge3ZlcnNpb246ICdsaW9uJywgZGVidWc6IHRydWV9LAorICAg
ICAgICAgICAgLy8gJ0FwcGxlIExpb24gUmVsZWFzZSBXSzIgKFRlc3RzKScgOiB7dmVyc2lvbjog
J2xpb24nIH0sCisgICAgICAgICAgICAvLyAnQXBwbGUgTGlvbiBEZWJ1ZyBXSzIgKFRlc3RzKScg
OiB7dmVyc2lvbjogJ2xpb24nLCBkZWJ1ZzogdHJ1ZX0sCisgICAgICAgICAgICAvLyAnQXBwbGUg
V2luIFhQIERlYnVnIChUZXN0cyknIDoge3ZlcnNpb246ICd4cCcsZGVidWc6IHRydWV9LAorICAg
ICAgICAgICAgLy8gJ0FwcGxlIFdpbiA3IFJlbGVhc2UgKFRlc3RzKScgOiB7dmVyc2lvbjogJ3dp
bjcnfSwKKyAgICAgICAgfSwKKyAgICB9LAorICAgICdjaHJvbWl1bScgOiB7CisgICAgICAgIGxh
YmVsIDogJ0Nocm9taXVtJywKKyAgICAgICAgYnVpbGRDb25zb2xlVVJMOiAnaHR0cDovL2J1aWxk
LmNocm9taXVtLm9yZy9wL2Nocm9taXVtLndlYmtpdCcsCisgICAgICAgIGxheW91dFRlc3RSZXN1
bHRzVVJMOiAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0
X3Jlc3VsdHMnLAorICAgICAgICB3YXRlcmZhbGxVUkw6ICdodHRwOi8vYnVpbGQuY2hyb21pdW0u
b3JnL3AvY2hyb21pdW0ud2Via2l0L3dhdGVyZmFsbCcsCisgICAgICAgIGJ1aWxkZXJzOiB7Cisg
ICAgICAgICAgICAnV2Via2l0IFdpbic6IHt2ZXJzaW9uOiAneHAnfSwKKyAgICAgICAgICAgICdX
ZWJraXQgVmlzdGEnOiB7dmVyc2lvbjogJ3Zpc3RhJ30sCisgICAgICAgICAgICAnV2Via2l0IFdp
bjcnOiB7dmVyc2lvbjogJ3dpbjcnfSwKKyAgICAgICAgICAgICdXZWJraXQgV2luIChkYmcpKDEp
Jzoge3ZlcnNpb246ICd4cCcsIGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAgICdXZWJraXQgV2lu
IChkYmcpKDIpJzoge3ZlcnNpb246ICd4cCcsIGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAgICdX
ZWJraXQgTGludXgnOiB7dmVyc2lvbjogJ2x1Y2lkJywgaXM2NGJpdDogdHJ1ZX0sCisgICAgICAg
ICAgICAnV2Via2l0IExpbnV4IDMyJzoge3ZlcnNpb246ICdsdWNpZCd9LAorICAgICAgICAgICAg
J1dlYmtpdCBMaW51eCAoZGJnKSc6IHt2ZXJzaW9uOiAnbHVjaWQnLCBpczY0Yml0OiB0cnVlLCBk
ZWJ1ZzogdHJ1ZX0sCisgICAgICAgICAgICAnV2Via2l0IE1hYzEwLjUnOiB7dmVyc2lvbjogJ2xl
b3BhcmQnfSwKKyAgICAgICAgICAgICdXZWJraXQgTWFjMTAuNSAoZGJnKSgxKSc6IHt2ZXJzaW9u
OiAnbGVvcGFyZCcsIGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAgICdXZWJraXQgTWFjMTAuNSAo
ZGJnKSgyKSc6IHt2ZXJzaW9uOiAnbGVvcGFyZCcsIGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAg
ICdXZWJraXQgTWFjMTAuNic6IHt2ZXJzaW9uOiAnc25vd2xlb3BhcmQnfSwKKyAgICAgICAgICAg
ICdXZWJraXQgTWFjMTAuNiAoZGJnKSc6IHt2ZXJzaW9uOiAnc25vd2xlb3BhcmQnLCBkZWJ1Zzog
dHJ1ZX0sCisgICAgICAgICAgICAnV2Via2l0IE1hYzEwLjcnOiB7dmVyc2lvbjogJ2xpb24nfSwK
KyAgICAgICAgfSwKKyAgICB9CiB9OwogCiBjb25maWcua1RyYWNVUkwgPSAnaHR0cDovL3RyYWMu
d2Via2l0Lm9yZyc7CkBAIC02MSw0ICs5MCwxNSBAQCBjb25maWcua1JlbGF0aXZlVGltZVVwZGF0
ZUZyZXF1ZW5jeSA9IDEwMDAgKiA2MDsKIAogY29uZmlnLmtFeHBlcmltZW50YWxGZWF0dXJlcyA9
IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc2VhcmNoKCdlbmFibGVFeHBlcmltZW50cz0xJykgIT0g
LTE7CiAKK2NvbmZpZy5rQ3VycmVudFBsYXRmb3JtID0gJ2Nocm9taXVtJzsKKworY29uZmlnLnNl
dFBsYXRmb3JtID0gZnVuY3Rpb24ocGxhdGZvcm0pCit7CisgICAgaWYgKCF0aGlzLmtQbGF0Zm9y
bXNbcGxhdGZvcm1dKSB7CisgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhwbGF0Zm9ybSArICcg
aXMgbm90IGEgcmVjb2duaXplZCBwbGF0Zm9ybScpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNvbmZpZy5rQ3VycmVudFBsYXRmb3JtID0gcGxhdGZvcm07Cit9OworCiB9KSgpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvbW9kZWwuanMgYi9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVy
ZXMvc2NyaXB0cy9tb2RlbC5qcwppbmRleCBjMmRlYmJkNmM1ZTk2MzhkMmRhZjg2OTU4MGJkZDhm
NGI1NmEyNjY2Li5kNWE4ZTM4NDU5MDVkOTIzMTNiNjIyYzBiMmJlNGI1N2MyY2FkMWI0IDEwMDY0
NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9tb2RlbC5qcworKysgYi9Ub29scy9CdWls
ZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFp
bHVyZXMvc2NyaXB0cy9tb2RlbC5qcwpAQCAtMTUyLDcgKzE1Miw5IEBAIG1vZGVsLmxhdGVzdFJl
dmlzaW9uV2l0aE5vQnVpbGRlcnNJbkZsaWdodCA9IGZ1bmN0aW9uKCkKIAogbW9kZWwudXBkYXRl
UmVzdWx0c0J5QnVpbGRlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKQogewotICAgIHJlc3VsdHMuZmV0
Y2hSZXN1bHRzQnlCdWlsZGVyKE9iamVjdC5rZXlzKGNvbmZpZy5rQnVpbGRlcnMpLCBmdW5jdGlv
bihyZXN1bHRzQnlCdWlsZGVyKSB7CisgICAgdmFyIHBsYXRmb3JtQnVpbGRlcnMgPSBjb25maWcu
a1BsYXRmb3Jtc1tjb25maWcua0N1cnJlbnRQbGF0Zm9ybV0uYnVpbGRlcnM7CisgICAgcmVzdWx0
cy5mZXRjaFJlc3VsdHNCeUJ1aWxkZXIoT2JqZWN0LmtleXMocGxhdGZvcm1CdWlsZGVycyksIGZ1
bmN0aW9uKHJlc3VsdHNCeUJ1aWxkZXIpIHsKKyAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdy
ZXN1bHRzQnlCdWlsZGVyJywgcmVzdWx0c0J5QnVpbGRlcikKICAgICAgICAgbW9kZWwuc3RhdGUu
cmVzdWx0c0J5QnVpbGRlciA9IHJlc3VsdHNCeUJ1aWxkZXI7CiAgICAgICAgIGNhbGxiYWNrKCk7
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJr
aXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRzLmpz
IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGlj
X2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvcmVzdWx0cy5qcwppbmRleCBlZmYxMTBiMWU5ZWQ2
OGQ1ZjhhYzRmZWZmMzBkYjI0NTIwYjFlNGM4Li4xZTQ5YTM4ZDAyNGYzM2JkZTI0OTI5YTQ5NTli
ZWU1ZGY4MTEyMjliIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53
ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRz
LmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3Jlc3VsdHMuanMKQEAgLTI3LDcgKzI3
LDYgQEAgdmFyIHJlc3VsdHMgPSByZXN1bHRzIHx8IHt9OwogCiAoZnVuY3Rpb24oKSB7CiAKLXZh
ciBrTGF5b3V0VGVzdFJlc3VsdHNTZXJ2ZXIgPSAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9m
L2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvJzsKIHZhciBrTGF5b3V0VGVzdFJlc3VsdHNQ
YXRoID0gJy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvJzsKIHZhciBrUmVzdWx0c05hbWUg
PSAnZnVsbF9yZXN1bHRzLmpzb24nOwogCkBAIC04Myw2ICs4MiwxMSBAQCByZXN1bHRzLmtBdWRp
b1R5cGUgPSAnYXVkaW8nCiByZXN1bHRzLmtUZXh0VHlwZSA9ICd0ZXh0JwogLy8gRklYTUU6IFRo
ZXJlIGFyZSBtb3JlIHR5cGVzIG9mIHRlc3RzLgogCitmdW5jdGlvbiBsYXlvdXRUZXN0UmVzdWx0
c1VSTChwbGF0Zm9ybSkKK3sKKyAgICByZXR1cm4gY29uZmlnLmtQbGF0Zm9ybXNbcGxhdGZvcm1d
LmxheW91dFRlc3RSZXN1bHRzVVJMOworfQorCiBmdW5jdGlvbiBwb3NzaWJsZVN1ZmZpeExpc3RG
b3IoZmFpbHVyZVR5cGVMaXN0KQogewogICAgIHZhciBzdWZmaXhMaXN0ID0gW107CkBAIC0xNzYs
MjkgKzE4MCwyOSBAQCByZXN1bHRzLmRpcmVjdG9yeUZvckJ1aWxkZXIgPSBmdW5jdGlvbihidWls
ZGVyTmFtZSkKICAgICByZXR1cm4gYnVpbGRlck5hbWUucmVwbGFjZSgvWyAuKCldL2csICdfJyk7
CiB9CiAKLWZ1bmN0aW9uIHJlc3VsdHNEaXJlY3RvcnlVUkwoYnVpbGRlck5hbWUpCitmdW5jdGlv
biByZXN1bHRzRGlyZWN0b3J5VVJMKHBsYXRmb3JtLCBidWlsZGVyTmFtZSkKIHsKLSAgICByZXR1
cm4ga0xheW91dFRlc3RSZXN1bHRzU2VydmVyICsgcmVzdWx0cy5kaXJlY3RvcnlGb3JCdWlsZGVy
KGJ1aWxkZXJOYW1lKSArIGtMYXlvdXRUZXN0UmVzdWx0c1BhdGg7CisgICAgcmV0dXJuIGxheW91
dFRlc3RSZXN1bHRzVVJMKHBsYXRmb3JtKSArICcvJyArIHJlc3VsdHMuZGlyZWN0b3J5Rm9yQnVp
bGRlcihidWlsZGVyTmFtZSkgKyBrTGF5b3V0VGVzdFJlc3VsdHNQYXRoOwogfQogCi1mdW5jdGlv
biByZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChidWlsZGVyTmFtZSkKK2Z1bmN0aW9uIHJlc3Vs
dHNEaXJlY3RvcnlMaXN0aW5nVVJMKHBsYXRmb3JtLCBidWlsZGVyTmFtZSkKIHsKLSAgICByZXR1
cm4ga0xheW91dFRlc3RSZXN1bHRzU2VydmVyICsgcmVzdWx0cy5kaXJlY3RvcnlGb3JCdWlsZGVy
KGJ1aWxkZXJOYW1lKSArICcvJzsKKyAgICByZXR1cm4gbGF5b3V0VGVzdFJlc3VsdHNVUkwocGxh
dGZvcm0pICsgJy8nICsgcmVzdWx0cy5kaXJlY3RvcnlGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKSAr
ICcvJzsKIH0KIAotZnVuY3Rpb24gcmVzdWx0c0RpcmVjdG9yeVVSTEZvckJ1aWxkTnVtYmVyKGJ1
aWxkZXJOYW1lLCBidWlsZE51bWJlcikKK2Z1bmN0aW9uIHJlc3VsdHNEaXJlY3RvcnlVUkxGb3JC
dWlsZE51bWJlcihwbGF0Zm9ybSwgYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVyKQogewotICAgIHJl
dHVybiByZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChidWlsZGVyTmFtZSkgKyBidWlsZE51bWJl
ciArICcvJworICAgIHJldHVybiByZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChwbGF0Zm9ybSwg
YnVpbGRlck5hbWUpICsgYnVpbGROdW1iZXIgKyAnLycKIH0KIAotZnVuY3Rpb24gcmVzdWx0c1N1
bW1hcnlVUkwoYnVpbGRlck5hbWUpCitmdW5jdGlvbiByZXN1bHRzU3VtbWFyeVVSTChwbGF0Zm9y
bSwgYnVpbGRlck5hbWUpCiB7Ci0gICAgcmV0dXJuIHJlc3VsdHNEaXJlY3RvcnlVUkwoYnVpbGRl
ck5hbWUpICsga1Jlc3VsdHNOYW1lOworICAgIHJldHVybiByZXN1bHRzRGlyZWN0b3J5VVJMKHBs
YXRmb3JtLCBidWlsZGVyTmFtZSkgKyBrUmVzdWx0c05hbWU7CiB9CiAKLWZ1bmN0aW9uIHJlc3Vs
dHNTdW1tYXJ5VVJMRm9yQnVpbGROdW1iZXIoYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVyKQorZnVu
Y3Rpb24gcmVzdWx0c1N1bW1hcnlVUkxGb3JCdWlsZE51bWJlcihwbGF0Zm9ybSwgYnVpbGRlck5h
bWUsIGJ1aWxkTnVtYmVyKQogewotICAgIHJldHVybiByZXN1bHRzRGlyZWN0b3J5VVJMRm9yQnVp
bGROdW1iZXIoYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVyKSArIGtSZXN1bHRzTmFtZTsKKyAgICBy
ZXR1cm4gcmVzdWx0c0RpcmVjdG9yeVVSTEZvckJ1aWxkTnVtYmVyKHBsYXRmb3JtLCBidWlsZGVy
TmFtZSwgYnVpbGROdW1iZXIpICsga1Jlc3VsdHNOYW1lOwogfQogCiB2YXIgZ19yZXN1bHRzQ2Fj
aGUgPSBuZXcgYmFzZS5Bc3luY2hyb25vdXNDYWNoZShmdW5jdGlvbiAoa2V5LCBjYWxsYmFjaykg
ewpAQCAtMzQzLDE4ICszNDcsMTggQEAgcmVzdWx0cy5jb2xsZWN0VW5leHBlY3RlZFJlc3VsdHMg
PSBmdW5jdGlvbihkaWN0aW9uYXJ5T2ZSZXN1bHROb2RlcykKICAgICByZXR1cm4gYmFzZS51bmlx
dWlmeUFycmF5KGNvbGxlY3RlZFJlc3VsdHMpOwogfTsKIAotZnVuY3Rpb24gaGlzdG9yaWNhbFJl
c3VsdHNTdW1tYXJ5VVJMcyhidWlsZGVyTmFtZSwgY2FsbGJhY2spCitmdW5jdGlvbiBoaXN0b3Jp
Y2FsUmVzdWx0c1N1bW1hcnlVUkxzKHBsYXRmb3JtLCBidWlsZGVyTmFtZSwgY2FsbGJhY2spCiB7
Ci0gICAgbmV0LmdldChyZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChidWlsZGVyTmFtZSksIGZ1
bmN0aW9uKGRpcmVjdG9yeUxpc3RpbmcpIHsKKyAgICBuZXQuZ2V0KHJlc3VsdHNEaXJlY3RvcnlM
aXN0aW5nVVJMKHBsYXRmb3JtLCBidWlsZGVyTmFtZSksIGZ1bmN0aW9uKGRpcmVjdG9yeUxpc3Rp
bmcpIHsKICAgICAgICAgdmFyIHN1bW1hcnlVUkxzID0gZGlyZWN0b3J5TGlzdGluZy5tYXRjaChr
QnVpbGRMaW5rUmVnZXhwKS5tYXAoZnVuY3Rpb24oYnVpbGRMaW5rKSB7CiAgICAgICAgICAgICB2
YXIgYnVpbGROdW1iZXIgPSBwYXJzZUludChidWlsZExpbmsubWF0Y2goa0J1aWxkTnVtYmVyUmVn
ZXhwKVswXSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0c1N1bW1hcnlVUkxGb3JCdWlsZE51
bWJlcihidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dHNTdW1tYXJ5VVJMRm9yQnVpbGROdW1iZXIocGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCBidWlsZE51
bWJlcik7CiAgICAgICAgIH0pLnJldmVyc2UoKTsKICAgICAgICAgY2FsbGJhY2soc3VtbWFyeVVS
THMpOwogICAgIH0pOwogfQogCi1mdW5jdGlvbiB3YWxrSGlzdG9yeShidWlsZGVyTmFtZSwgdGVz
dE5hbWUsIGNhbGxiYWNrKQorZnVuY3Rpb24gd2Fsa0hpc3RvcnkocGxhdGZvcm0sIGJ1aWxkZXJO
YW1lLCB0ZXN0TmFtZSwgY2FsbGJhY2spCiB7CiAgICAgdmFyIGluZGV4T2ZOZXh0S2V5VG9GZXRj
aCA9IDA7CiAgICAgdmFyIGtleUxpc3QgPSBbXTsKQEAgLTM4NSw3ICszODksNyBAQCBmdW5jdGlv
biB3YWxrSGlzdG9yeShidWlsZGVyTmFtZSwgdGVzdE5hbWUsIGNhbGxiYWNrKQogICAgICAgICBj
b250aW51ZVdhbGsoKTsKICAgICB9CiAKLSAgICBoaXN0b3JpY2FsUmVzdWx0c1N1bW1hcnlVUkxz
KGJ1aWxkZXJOYW1lLCBmdW5jdGlvbihzdW1tYXJ5VVJMcykgeworICAgIGhpc3RvcmljYWxSZXN1
bHRzU3VtbWFyeVVSTHMocGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCBmdW5jdGlvbihzdW1tYXJ5VVJM
cykgewogICAgICAgICBrZXlMaXN0ID0gc3VtbWFyeVVSTHM7CiAgICAgICAgIGNvbnRpbnVlV2Fs
aygpOwogICAgIH0pOwpAQCAtMzk2LDcgKzQwMCw4IEBAIHJlc3VsdHMucmVncmVzc2lvblJhbmdl
Rm9yRmFpbHVyZSA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSwgY2FsbGJhY2spCiAg
ICAgdmFyIG9sZGVzdEZhaWxpbmdSZXZpc2lvbiA9IDA7CiAgICAgdmFyIG5ld2VzdFBhc3NpbmdS
ZXZpc2lvbiA9IDA7CiAKLSAgICB3YWxrSGlzdG9yeShidWlsZGVyTmFtZSwgdGVzdE5hbWUsIGZ1
bmN0aW9uKHJldmlzaW9uLCByZXN1bHROb2RlKSB7CisgICAgLy8gRklYTUU6IHNob3VsZCB0cmVh
dCB7cGxhdGZvcm0sIGJ1aWxkZXJOYW1lfSBhcyBhIHR1cGxlCisgICAgd2Fsa0hpc3RvcnkoY29u
ZmlnLmtDdXJyZW50UGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSwgZnVuY3Rpb24ocmV2
aXNpb24sIHJlc3VsdE5vZGUpIHsKICAgICAgICAgaWYgKCFyZXZpc2lvbikgewogICAgICAgICAg
ICAgY2FsbGJhY2sob2xkZXN0RmFpbGluZ1JldmlzaW9uLCBuZXdlc3RQYXNzaW5nUmV2aXNpb24p
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTM2LDcgKzU0MSw3IEBAIGZ1bmN0aW9u
IHNvcnRSZXN1bHRVUkxzQnlTdWZmaXgodXJscykKIAogcmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxz
ID0gZnVuY3Rpb24oZmFpbHVyZUluZm8sIGNhbGxiYWNrKQogewotICAgIHZhciBzdGVtID0gcmVz
dWx0c0RpcmVjdG9yeVVSTChmYWlsdXJlSW5mby5idWlsZGVyTmFtZSk7CisgICAgdmFyIHN0ZW0g
PSByZXN1bHRzRGlyZWN0b3J5VVJMKGNvbmZpZy5rUGxhdGZvcm0sIGZhaWx1cmVJbmZvLmJ1aWxk
ZXJOYW1lKTsKICAgICB2YXIgdGVzdE5hbWVTdGVtID0gYmFzZS50cmltRXh0ZW5zaW9uKGZhaWx1
cmVJbmZvLnRlc3ROYW1lKTsKIAogICAgIHZhciBzdWZmaXhMaXN0ID0gcG9zc2libGVTdWZmaXhM
aXN0Rm9yKGZhaWx1cmVJbmZvLmZhaWx1cmVUeXBlTGlzdCk7CkBAIC01NjksNyArNTc0LDggQEAg
cmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxzID0gZnVuY3Rpb24oZmFpbHVyZUluZm8sIGNhbGxiYWNr
KQogCiByZXN1bHRzLmZldGNoUmVzdWx0c0ZvckJ1aWxkZXIgPSBmdW5jdGlvbihidWlsZGVyTmFt
ZSwgY2FsbGJhY2spCiB7Ci0gICAgbmV0Lmpzb25wKHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJO
YW1lKSwgY2FsbGJhY2spOworICAgIHdpbmRvdy5jb25zb2xlLmxvZygnZmV0Y2hpbmcgJywgcmVz
dWx0c1N1bW1hcnlVUkwoY29uZmlnLmtDdXJyZW50UGxhdGZvcm0sIGJ1aWxkZXJOYW1lKSk7Cisg
ICAgbmV0Lmpzb25wKHJlc3VsdHNTdW1tYXJ5VVJMKGNvbmZpZy5rQ3VycmVudFBsYXRmb3JtLCBi
dWlsZGVyTmFtZSksIGNhbGxiYWNrKTsKIH07CiAKIHJlc3VsdHMuZmV0Y2hSZXN1bHRzQnlCdWls
ZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWVMaXN0LCBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1Rv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1s
L1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWku
anMKaW5kZXggYjI5MzBmZjgxZmYyMTMwZmEyOGM4YWIxNWFjYTA5ZmE3MTlmYjIyNS4uZWM3MDQ5
YTk2MmMyYzlmMzY0MTI5YzlmMzUxYWI2MWU3OWNlMDMxNSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZh
aWx1cmVzL3NjcmlwdHMvdWkuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkuanMK
QEAgLTI5LDcgKzI5LDcgQEAgdmFyIHVpID0gdWkgfHwge307CiAKIHVpLmRpc3BsYXlVUkxGb3JC
dWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWUpCiB7Ci0gICAgcmV0dXJuICdodHRwOi8vYnVp
bGQuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0ud2Via2l0L3dhdGVyZmFsbD8nICsgJC5wYXJhbSh7
CisgICAgcmV0dXJuIGNvbmZpZy5rUGxhdGZvcm1zW2NvbmZpZy5rQ3VycmVudFBsYXRmb3JtXS53
YXRlcmZhbGxVUkwgKyAnPycgKyAkLnBhcmFtKHsKICAgICAgICAgJ2J1aWxkZXInOiBidWlsZGVy
TmFtZQogICAgIH0pOwogfQpAQCAtNjcsNiArNjcsNyBAQCB1aS5vbmViYXIgPSBiYXNlLmV4dGVu
ZHMoJ2RpdicsIHsKICAgICB7CiAgICAgICAgIHRoaXMuaWQgPSAnb25lYmFyJzsKICAgICAgICAg
dGhpcy5pbm5lckhUTUwgPQorICAgICAgICAgICAgJzxkaXY+PHNlbGVjdCBpZD0icGxhdGZvcm0t
cGlja2VyIj48L3NlbGVjdD48L2Rpdj4nICsKICAgICAgICAgICAgICc8dWw+JyArCiAgICAgICAg
ICAgICAgICAgJzxsaT48YSBocmVmPSIjdW5leHBlY3RlZCI+VW5leHBlY3RlZCBGYWlsdXJlczwv
YT48L2xpPicgKwogICAgICAgICAgICAgICAgICc8bGk+PGEgaHJlZj0iI2V4cGVjdGVkIj5FeHBl
Y3RlZCBGYWlsdXJlczwvYT48L2xpPicgKwpAQCAtODMsMTMgKzg0LDM5IEBAIHVpLm9uZWJhciA9
IGJhc2UuZXh0ZW5kcygnZGl2JywgewogICAgICAgICAgICAgJ3Jlc3VsdHMnLAogICAgICAgICAg
ICAgJ3BlcmYnLAogICAgICAgICBdCi0KKyAgICAKICAgICAgICAgdGhpcy5fdGFiSW5kZXhUb1Nh
dmVkU2Nyb2xsT2Zmc2V0ID0ge307CiAgICAgICAgIHRoaXMuX3RhYnMgPSAkKHRoaXMpLnRhYnMo
ewogICAgICAgICAgICAgZGlzYWJsZWQ6IFsyXSwKICAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9u
KGV2ZW50LCB1aSkgeyB0aGlzLl9yZXN0b3JlU2Nyb2xsT2Zmc2V0KHVpLmluZGV4KTsgfSwKICAg
ICAgICAgfSk7CiAgICAgfSwKKyAgICBfYnVpbGRQbGF0Zm9ybXNQb3B1cDogZnVuY3Rpb24oKSB7
CisgICAgICAgIC8vIEZJWE1FOiBjYW4galF1ZXJ5IGRvIHRoaXM/CisgICAgICAgIGZ1bmN0aW9u
IGdldFVSTFBhcmFtZXRlcihuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJKAor
ICAgICAgICAgICAgICAgIChSZWdFeHAobmFtZSArICc9JyArICcoLis/KSgmfCQpJykuZXhlYyhs
b2NhdGlvbi5zZWFyY2gpfHxbLG51bGxdKVsxXQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IGZpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gZG8gdGhp
cy4KKyAgICAgICAgdmFyIHVybFBsYXRmb3JtID0gZ2V0VVJMUGFyYW1ldGVyKCdwbGF0Zm9ybScp
OworICAgICAgICBpZiAodXJsUGxhdGZvcm0pCisgICAgICAgICAgICBjb25maWcuc2V0UGxhdGZv
cm0odXJsUGxhdGZvcm0pOworICAgICAgICAKKyAgICAgICAgdmFyIHBsYXRmb3JtU2VsZWN0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsYXRmb3JtLXBpY2tlcicpOworICAgICAgICAkKHBs
YXRmb3JtU2VsZWN0KS5lbXB0eSgpOworICAgICAgICB2YXIgY3VycmVudFBsYXRmb3JtSW5kZXgg
PSAwOworICAgICAgICBPYmplY3Qua2V5cyhjb25maWcua1BsYXRmb3JtcykuZm9yRWFjaChmdW5j
dGlvbihwbGF0Zm9ybU5hbWUpIHsKKyAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdvcHRpb24nKTsKKyAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBj
b25maWcua1BsYXRmb3Jtc1twbGF0Zm9ybU5hbWVdLmxhYmVsOworICAgICAgICAgICAgaWYgKHBs
YXRmb3JtTmFtZSA9PSBjb25maWcua0N1cnJlbnRQbGF0Zm9ybSkKKyAgICAgICAgICAgICAgICBj
dXJyZW50UGxhdGZvcm1JbmRleCA9IHBsYXRmb3JtU2VsZWN0LmNoaWxkTm9kZXMubGVuZ3RoOwor
ICAgICAgICAgICAgcGxhdGZvcm1TZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKKyAgICAgICAg
fSk7CisgICAgICAgIAorICAgICAgICBwbGF0Zm9ybVNlbGVjdC5zZWxlY3RlZEluZGV4ID0gY3Vy
cmVudFBsYXRmb3JtSW5kZXg7CisgICAgfSwKICAgICBfc2F2ZVNjcm9sbE9mZnNldDogZnVuY3Rp
b24oKSB7CiAgICAgICAgIHZhciB0YWJJbmRleCA9IHRoaXMuX3RhYnMudGFicygnb3B0aW9uJywg
J3NlbGVjdGVkJyk7CiAgICAgICAgIHRoaXMuX3RhYkluZGV4VG9TYXZlZFNjcm9sbE9mZnNldFt0
YWJJbmRleF0gPSBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKQEAgLTEzMSw2ICsxNTgsNyBAQCB1
aS5vbmViYXIgPSBiYXNlLmV4dGVuZHMoJ2RpdicsIHsKICAgICB7CiAgICAgICAgIGRvY3VtZW50
LmJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CiAgICAg
ICAgIHRoaXMuX3NldHVwSGlzdG9yeUhhbmRsZXJzKCk7CisgICAgICAgIHRoaXMuX2J1aWxkUGxh
dGZvcm1zUG9wdXAoKTsKICAgICB9LAogICAgIHRhYk5hbWVkOiBmdW5jdGlvbih0YWJOYW1lKQog
ICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5v
cmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpL2ZhaWx1cmVzLmpz
IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGlj
X2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkvZmFpbHVyZXMuanMKaW5kZXggMmM1M2JmYzFi
MDAxZWNmMDFlZDQ3ZDNmODIzYThjMWFlNWJiNGNkYi4uMzJmNDkwMGQ5MTQxZjhmYTQ2M2U1MTE0
ZWEwYzgzZTdjZDQ2NTk3MiAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkv
ZmFpbHVyZXMuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkvZmFpbHVyZXMuanMK
QEAgLTMzLDcgKzMzLDggQEAgdmFyIGtCdWlsZGluZ1Jlc3VsdCA9ICdCVUlMRElORyc7CiB1aS5m
YWlsdXJlcy5CdWlsZGVyID0gYmFzZS5leHRlbmRzKCdhJywgewogICAgIGluaXQ6IGZ1bmN0aW9u
KGJ1aWxkZXJOYW1lLCBmYWlsdXJlcykKICAgICB7Ci0gICAgICAgIHZhciBjb25maWd1cmF0aW9u
ID0gY29uZmlnLmtCdWlsZGVyc1tidWlsZGVyTmFtZV07CisgICAgICAgIHZhciBwbGF0Zm9ybUJ1
aWxkZXJzID0gY29uZmlnLmtQbGF0Zm9ybXNbY29uZmlnLmtDdXJyZW50UGxhdGZvcm1dLmJ1aWxk
ZXJzOworICAgICAgICB2YXIgY29uZmlndXJhdGlvbiA9IHBsYXRmb3JtQnVpbGRlcnNbYnVpbGRl
ck5hbWVdOwogICAgICAgICBpZiAoY29uZmlndXJhdGlvbikgewogICAgICAgICAgICAgaWYgKGNv
bmZpZ3VyYXRpb24udmVyc2lvbikKICAgICAgICAgICAgICAgICB0aGlzLl9hZGRTcGFuKCd2ZXJz
aW9uJywgY29uZmlndXJhdGlvbi52ZXJzaW9uKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJl
cy9zdHlsZXMvb25lYmFyLmNzcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zdHlsZXMvb25lYmFyLmNzcwpp
bmRleCBlMGRkY2UyMjY5YjU4ZTFiNjJmOGFhMzU5MzdjNjgyYTNlNjgwZTIyLi4yY2NiZGI3NDlh
MGJlMWM5YTNhNTA2MmJmZTRjZGNjYTYwMzhhZjk3IDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVy
ZXMvc3R5bGVzL29uZWJhci5jc3MKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3N0eWxlcy9vbmViYXIu
Y3NzCkBAIC00MSw2ICs0MSwxMiBAQAogICAgIGJvcmRlci1yYWRpdXM6IDBweDsKIH0KIAorI29u
ZWJhciAjcGxhdGZvcm0tcGlja2VyIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW46IDhweDsK
KyAgZm9udC1zaXplOiBsYXJnZXI7Cit9CisKICN1bmV4cGVjdGVkIHsKICAgICBtaW4taGVpZ2h0
OiA1NTBweDsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvYnVpbGRlcnMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2J1aWxkZXJzLnB5CmluZGV4IDEyNDliYjU0M2Y0NmNlNmQxN2JlODFmOWJlYzA1YzEw
ZTc0YmIwMzYuLjg5MTAzYzk3NzQ0NWEwMWE3MWQ4NGZlOTM2YjkyYjc2NTVkZTM2MjYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnMu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9idWlsZGVy
cy5weQpAQCAtNTMsMTMgKzUzLDE2IEBAIF9leGFjdF9tYXRjaGVzID0gewogICAgICJXZWJraXQg
TWFjMTAuNyI6IHsicG9ydF9uYW1lIjogImNocm9taXVtLW1hYy1saW9uIiwgInNwZWNpZmllcnMi
OiBzZXQoWyJsaW9uIl0pfSwKIAogICAgICMgVGhlc2UgYnVpbGRlcnMgYXJlIG9uIGJ1aWxkLndl
YmtpdC5vcmcuCisgICAgIkFwcGxlIExpb24gUmVsZWFzZSBXSzEgKFRlc3RzKSIgOiB7InBvcnRf
bmFtZSI6ICJtYWMtbGlvbiIsICJzcGVjaWZpZXJzIjogc2V0KFsibGlvbiJdKX0sCisgICAgIkFw
cGxlIExpb24gRGVidWcgV0sxIChUZXN0cykiIDogeyJwb3J0X25hbWUiOiAibWFjLWxpb24iLCAi
c3BlY2lmaWVycyI6IHNldChbImxpb24iLCAiZGVidWciXSl9LAorICAgICJBcHBsZSBMaW9uIFJl
bGVhc2UgV0syIChUZXN0cykiIDogeyJwb3J0X25hbWUiOiAibWFjLWxpb24iLCAic3BlY2lmaWVy
cyI6IHNldChbImxpb24iLCAid2syIl0pfSwKKyAgICAiQXBwbGUgTGlvbiBEZWJ1ZyBXSzIgKFRl
c3RzKSIgOiB7InBvcnRfbmFtZSI6ICJtYWMtbGlvbiIsICJzcGVjaWZpZXJzIjogc2V0KFsibGlv
biIsICJ3azIiLCAiZGVidWciXSl9LAorCisgICAgIkFwcGxlIFdpbiBYUCBEZWJ1ZyAoVGVzdHMp
IiA6IHsicG9ydF9uYW1lIjogIndpbi14cCIsICJzcGVjaWZpZXJzIjogc2V0KFsid2luIiwgImRl
YnVnIl0pfSwKKyAgICAiQXBwbGUgV2luIDcgUmVsZWFzZSAoVGVzdHMpIiA6IHsicG9ydF9uYW1l
IjogIndpbi14cCIsICJzcGVjaWZpZXJzIjogc2V0KFsid2luIl0pfSwKKwogICAgICJHVEsgTGlu
dXggMzItYml0IERlYnVnIjogeyJwb3J0X25hbWUiOiAiZ3RrIiwgInNwZWNpZmllcnMiOiBzZXQo
WyJndGsiXSl9LAotICAgICJMZW9wYXJkIEludGVsIERlYnVnIChUZXN0cykiOiB7InBvcnRfbmFt
ZSI6ICJtYWMtbGVvcGFyZCIsICJzcGVjaWZpZXJzIjogc2V0KFsibGVvcGFyZCJdKX0sCi0gICAg
IlNub3dMZW9wYXJkIEludGVsIFJlbGVhc2UgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1z
bm93bGVvcGFyZCIsICJzcGVjaWZpZXJzIjogc2V0KFsic25vd2xlb3BhcmQiXSl9LAotICAgICJT
bm93TGVvcGFyZCBJbnRlbCBSZWxlYXNlIChXZWJLaXQyIFRlc3RzKSI6IHsicG9ydF9uYW1lIjog
Im1hYy1zbm93bGVvcGFyZC13azIiLCAic3BlY2lmaWVycyI6IHNldChbIndrMiJdKX0sCiAgICAg
IlF0IExpbnV4IFJlbGVhc2UiOiB7InBvcnRfbmFtZSI6ICJxdC1saW51eCIsICJzcGVjaWZpZXJz
Ijogc2V0KFsid2luIiwgImxpbnV4IiwgIm1hYyJdKX0sCi0gICAgIldpbmRvd3MgWFAgRGVidWcg
KFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIndpbi14cCIsICJzcGVjaWZpZXJzIjogc2V0KFsid2lu
Il0pfSwKLSAgICAiV2luZG93cyA3IFJlbGVhc2UgKFdlYktpdDIgVGVzdHMpIjogeyJwb3J0X25h
bWUiOiAid2luLWZ1dHVyZS13azIiLCAic3BlY2lmaWVycyI6IHNldChbIndrMiJdKX0sCiAgICAg
IkVGTCBMaW51eCBSZWxlYXNlIjogeyJwb3J0X25hbWUiOiAiZWZsIiwgInNwZWNpZmllcnMiOiBz
ZXQoWyJlZmwiXSl9LAogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147729</attachid>
            <date>2012-06-14 22:09:25 -0700</date>
            <delta_ts>2012-06-15 23:12:49 -0700</delta_ts>
            <desc>More work in progress.</desc>
            <filename>bug-84642-20120614220924.patch</filename>
            <type>text/plain</type>
            <size>33792</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTU1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDc1OGE5ZmM1MjU0NTIwMTFhMTYwNGMxYWMxYTVkY2U3
Yjc2NzBjMy4uZGE0NjJjMmQ3YmM3MWJmYTczNmJlMDU0NjAxZmY1Y2JkNWMzMzI4ZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDEyLTA2LTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgZ2FyZGVuLW8tbWF0aWMgd29yayBmb3IgdGhlIEFwcGxlIE1hYyBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDY0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
V29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndl
YmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9nYXJkZW4tby1tYXRpYy5o
dG1sOgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL0xheW91dFRlc3RSZXN1bHRzTG9hZGVy
LmpzOgorICAgICAgICAoTGF5b3V0VGVzdFJlc3VsdHNMb2FkZXIucHJvdG90eXBlLnNldCBfZmV0
Y2hBbmRQYXJzZU5SV1RSZXN1bHRzKToKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWls
ZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9idWls
ZGVycy5qczoKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9jb25maWcuanM6CisgICAgICAg
ICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
VGVzdEZhaWx1cmVzL3NjcmlwdHMvZ2FyZGVuLW8tbWF0aWMuanM6CisgICAgICAgICogQnVpbGRT
bGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1
cmVzL3NjcmlwdHMvbW9kZWwuanM6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvcmVzdWx0
cy5qczoKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9zdW1tYXJ5LW1vY2suanM6CisgICAg
ICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkuanM6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3Njcmlw
dHMvdWkvZmFpbHVyZXMuanM6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3N0eWxlcy9vbmViYXIuY3Nz
OgorICAgICAgICAoI29uZWJhciAjcGxhdGZvcm0tcGlja2VyKToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5OgorCiAyMDEyLTA2LTEyICBM
dWNhcyBGb3JzY2hsZXIgIDxsZm9yc2NobGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXcmFwIGJv
dCB0eXBlcyBpbnNpZGUgKCkuCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvZ2FyZGVuLW8t
bWF0aWMuaHRtbCBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9nYXJkZW4tby1tYXRpYy5odG1sCmluZGV4IDgz
YjZiYjUxZGM3NTBhOTFlMTdiNWZkODBmZTE0NTFmNWQ3OGMzMTUuLmVmMzc3MmNmMWJiZDA3MjEx
NmFiNjFiOGJiNDJiZWQxYjZhMzFlMDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9nYXJk
ZW4tby1tYXRpYy5odG1sCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9nYXJkZW4tby1tYXRpYy5odG1s
CkBAIC0zMyw5ICszMyw5IEBAIEphbWVzLCBhIHdlYiBkZXZlbG9wZXIgZnJvbSBCaXJtaW5naGFt
LCBVSy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtc3Jj
ICdzZWxmJyAndW5zYWZlLWlubGluZScgZmlsZTogaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29t
IGh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udC1zcmMgaHR0cDovL3RoZW1lcy5nb29nbGV1c2VyY29udGVudC5j
b207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy1zcmMgaHR0
cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tIGh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcgZmlsZTo7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLXNyYyBodHRw
Oi8vYnVpbGQuY2hyb21pdW0ub3JnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmcmFtZS1zcmMgaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZyBodHRwOi8vdGVzdC1y
ZXN1bHRzLmFwcHNwb3QuY29tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25uZWN0LXNyYyBodHRwOi8vdHJhYy53ZWJraXQub3JnIGh0dHA6Ly9idWlsZC5jaHJv
bWl1bS5vcmcgaHR0cDovLzEyNy4wLjAuMTo4MTI3Ij4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWVkaWEtc3JjIGh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcgaHR0
cDovL2J1aWxkLndlYmtpdC5vcmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYW1lLXNyYyBodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnIGh0dHA6Ly9idWlsZC53
ZWJraXQub3JnIGh0dHA6Ly90ZXN0LXJlc3VsdHMuYXBwc3BvdC5jb207CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Qtc3JjIGh0dHA6Ly90cmFjLndlYmtp
dC5vcmcgaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZyBodHRwOi8vYnVpbGQud2Via2l0Lm9yZyBo
dHRwOi8vMTI3LjAuMC4xOjgxMjciPgogPHRpdGxlPkdhcmRlbi1PLU1hdGljPC90aXRsZT4KIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nz
cz9mYW1pbHk9T3BlbitTYW5zOjQwMCw3MDAiPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeXVpLzEuOC4xNS90
aGVtZXMvYmFzZS9qcXVlcnktdWkuY3NzIj4KZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9z
Y3JpcHRzL0xheW91dFRlc3RSZXN1bHRzTG9hZGVyLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3Njcmlw
dHMvTGF5b3V0VGVzdFJlc3VsdHNMb2FkZXIuanMKaW5kZXggZjI0YTcwMmVjNTUzMGM2YzI2MDlh
NjdlZTAyYTExNmRkOTJjZjc5YS4uOThkOWY3YWY1MmM5OGY5MjljYjgyNWI2OWJkZDBjZWEwMDZk
Y2NiYSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvTGF5b3V0VGVzdFJlc3Vs
dHNMb2FkZXIuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvTGF5b3V0VGVzdFJlc3Vs
dHNMb2FkZXIuanMKQEAgLTY0LDYgKzY0LDcgQEAgTGF5b3V0VGVzdFJlc3VsdHNMb2FkZXIucHJv
dG90eXBlID0gewogICAgIH0sCiAKICAgICBfZmV0Y2hBbmRQYXJzZU5SV1RSZXN1bHRzOiBmdW5j
dGlvbihidWlsZE5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykgeworICAgICAg
ICB3aW5kb3cuY29uc29sZS5sb2coJ2ZldGNoaW5nIE5SV1QgcmVzdWx0cyAnLCB0aGlzLl9idWls
ZGVyLnJlc3VsdHNEaXJlY3RvcnlVUkwoYnVpbGROYW1lKSArICdmdWxsX3Jlc3VsdHMuanNvbicp
CiAgICAgICAgIGdldFJlc291cmNlKHRoaXMuX2J1aWxkZXIucmVzdWx0c0RpcmVjdG9yeVVSTChi
dWlsZE5hbWUpICsgJ2Z1bGxfcmVzdWx0cy5qc29uJywgZnVuY3Rpb24oeGhyKSB7CiAgICAgICAg
ICAgICBzdWNjZXNzQ2FsbGJhY2soKG5ldyBOUldUUmVzdWx0c1BhcnNlcigpKS5wYXJzZSh4aHIu
cmVzcG9uc2VUZXh0KSk7CiAgICAgICAgIH0sCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMv
c2NyaXB0cy9idWlsZGVycy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2J1aWxkZXJzLmpz
CmluZGV4IDllZDBkNTQyYjEwNzdjYThlMDQ1NTk5ZjY0ZmZhNTM2Y2EwZjA3MGQuLjEyYmNhMTVk
YzBkNmIwMzc3NGMyNzM1YzVhNTk2NjFkOWJhZDUwOWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWls
dXJlcy9zY3JpcHRzL2J1aWxkZXJzLmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2J1
aWxkZXJzLmpzCkBAIC0yNyw4ICsyNyw2IEBAIHZhciBidWlsZGVycyA9IGJ1aWxkZXJzIHx8IHt9
OwogCiAoZnVuY3Rpb24oKSB7CiAKLXZhciBrQ2hyb21pdW1CdWlsZEJvdFVSTCA9ICdodHRwOi8v
YnVpbGQuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0ud2Via2l0JzsKLQogdmFyIGtVcGRhdGVTdGVw
TmFtZSA9ICd1cGRhdGUnOwogdmFyIGtVcGRhdGVTY3JpcHRzU3RlcE5hbWUgPSAndXBkYXRlX3Nj
cmlwdHMnOwogdmFyIGtDb21waWxlU3RlcE5hbWUgPSAnY29tcGlsZSc7CkBAIC0zNiw5ICszNCwx
OSBAQCB2YXIga1dlYktpdFRlc3RzU3RlcE5hbWUgPSAnd2Via2l0X3Rlc3RzJzsKIAogdmFyIGtD
cmFzaGVkT3JIdW5nT3V0cHV0TWFya2VyID0gJ2NyYXNoZWQgb3IgaHVuZyc7CiAKLWZ1bmN0aW9u
IHVybEZvckJ1aWxkSW5mbyhidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIpCitmdW5jdGlvbiBidWls
ZEJvdFVSTChwbGF0Zm9ybSkKIHsKLSAgICByZXR1cm4ga0Nocm9taXVtQnVpbGRCb3RVUkwgKyAn
L2pzb24vYnVpbGRlcnMvJyArIGVuY29kZVVSSUNvbXBvbmVudChidWlsZGVyTmFtZSkgKyAnL2J1
aWxkcy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkTnVtYmVyKTsKKyAgICByZXR1cm4gY29u
ZmlnLmtQbGF0Zm9ybXNbcGxhdGZvcm1dLmJ1aWxkQ29uc29sZVVSTDsKK30KKworZnVuY3Rpb24g
dXJsRm9yQnVpbGRlckluZm8ocGxhdGZvcm0sIGJ1aWxkZXJOYW1lKQoreworICAgIHJldHVybiBi
dWlsZEJvdFVSTChwbGF0Zm9ybSkgKyAnL2pzb24vYnVpbGRlcnMvJyArIGVuY29kZVVSSUNvbXBv
bmVudChidWlsZGVyTmFtZSkgKyAnLyc7Cit9CisKK2Z1bmN0aW9uIHVybEZvckJ1aWxkSW5mbyhw
bGF0Zm9ybSwgYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVyKQoreworICAgIHJldHVybiBidWlsZEJv
dFVSTChwbGF0Zm9ybSkgKyAnL2pzb24vYnVpbGRlcnMvJyArIGVuY29kZVVSSUNvbXBvbmVudChi
dWlsZGVyTmFtZSkgKyAnL2J1aWxkcy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkTnVtYmVy
KTsKIH0KIAogZnVuY3Rpb24gZGlkRmFpbChzdGVwKQpAQCAtNzEsNyArNzksNyBAQCBmdW5jdGlv
biBtb3N0UmVjZW50Q29tcGxldGVkQnVpbGROdW1iZXIoaW5kaXZpZHVhbEJ1aWxkZXJTdGF0dXMp
CiAKIHZhciBnX2J1aWxkSW5mb0NhY2hlID0gbmV3IGJhc2UuQXN5bmNocm9ub3VzQ2FjaGUoZnVu
Y3Rpb24oa2V5LCBjYWxsYmFjaykgewogICAgIHZhciBleHBsb2RlZEtleSA9IGtleS5zcGxpdCgn
XG4nKTsKLSAgICBuZXQuZ2V0KHVybEZvckJ1aWxkSW5mbyhleHBsb2RlZEtleVswXSwgZXhwbG9k
ZWRLZXlbMV0pLCBjYWxsYmFjayk7CisgICAgbmV0LmdldCh1cmxGb3JCdWlsZEluZm8oZXhwbG9k
ZWRLZXlbMF0sIGV4cGxvZGVkS2V5WzFdLCBleHBsb2RlZEtleVsyXSksIGNhbGxiYWNrKTsKIH0p
OwogCiBidWlsZGVycy5jbGVhckJ1aWxkSW5mb0NhY2hlID0gZnVuY3Rpb24oKQpAQCAtNzksOSAr
ODcsOSBAQCBidWlsZGVycy5jbGVhckJ1aWxkSW5mb0NhY2hlID0gZnVuY3Rpb24oKQogICAgIGdf
YnVpbGRJbmZvQ2FjaGUuY2xlYXIoKTsKIH0KIAotZnVuY3Rpb24gZmV0Y2hNb3N0UmVjZW50QnVp
bGRJbmZvQnlCdWlsZGVyKGNhbGxiYWNrKQorZnVuY3Rpb24gZmV0Y2hNb3N0UmVjZW50QnVpbGRJ
bmZvQnlCdWlsZGVyKHBsYXRmb3JtLCBjYWxsYmFjaykKIHsKLSAgICBuZXQuZ2V0KGtDaHJvbWl1
bUJ1aWxkQm90VVJMICsgJy9qc29uL2J1aWxkZXJzJywgZnVuY3Rpb24oYnVpbGRlclN0YXR1cykg
eworICAgIG5ldC5nZXQoYnVpbGRCb3RVUkwocGxhdGZvcm0pICsgJy9qc29uL2J1aWxkZXJzJywg
ZnVuY3Rpb24oYnVpbGRlclN0YXR1cykgewogICAgICAgICB2YXIgYnVpbGRJbmZvQnlCdWlsZGVy
ID0ge307CiAgICAgICAgIHZhciBidWlsZGVyTmFtZXMgPSBPYmplY3Qua2V5cyhidWlsZGVyU3Rh
dHVzKTsKICAgICAgICAgdmFyIHJlcXVlc3RUcmFja2VyID0gbmV3IGJhc2UuUmVxdWVzdFRyYWNr
ZXIoYnVpbGRlck5hbWVzLmxlbmd0aCwgY2FsbGJhY2ssIFtidWlsZEluZm9CeUJ1aWxkZXJdKTsK
QEAgLTEwMSw3ICsxMDksNyBAQCBmdW5jdGlvbiBmZXRjaE1vc3RSZWNlbnRCdWlsZEluZm9CeUJ1
aWxkZXIoY2FsbGJhY2spCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBnX2J1aWxkSW5mb0NhY2hlLmdldChidWlsZGVyTmFtZSArICdcbicgKyBi
dWlsZE51bWJlciwgZnVuY3Rpb24oYnVpbGRJbmZvKSB7CisgICAgICAgICAgICBnX2J1aWxkSW5m
b0NhY2hlLmdldChwbGF0Zm9ybSArICdcbicgKyBidWlsZGVyTmFtZSArICdcbicgKyBidWlsZE51
bWJlciwgZnVuY3Rpb24oYnVpbGRJbmZvKSB7CiAgICAgICAgICAgICAgICAgYnVpbGRJbmZvQnlC
dWlsZGVyW2J1aWxkZXJOYW1lXSA9IGJ1aWxkSW5mbzsKICAgICAgICAgICAgICAgICByZXF1ZXN0
VHJhY2tlci5yZXF1ZXN0Q29tcGxldGUoKTsKICAgICAgICAgICAgIH0pOwpAQCAtMTA5LDkgKzEx
Nyw0MCBAQCBmdW5jdGlvbiBmZXRjaE1vc3RSZWNlbnRCdWlsZEluZm9CeUJ1aWxkZXIoY2FsbGJh
Y2spCiAgICAgfSk7CiB9CiAKKy8vIEZJWE1FIHJlbW92ZQorYnVpbGRlcnMubW9zdFJlY2VudENv
bXBsZXRlZEJ1aWxkID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIGNhbGxiYWNrKQoreworICAgIHZh
ciBwbGF0Zm9ybSA9IGNvbmZpZy5rQ3VycmVudFBsYXRmb3JtOworICAgIG5ldC5nZXQodXJsRm9y
QnVpbGRlckluZm8ocGxhdGZvcm0sIGJ1aWxkZXJOYW1lKSwgZnVuY3Rpb24oYnVpbGRlclN0YXR1
cykgeworICAgICAgICBpZiAoJC5pc0VtcHR5T2JqZWN0KGJ1aWxkZXJTdGF0dXMpKQorICAgICAg
ICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdtb3N0UmVjZW50Q29tcGxldGVkQnVpbGQgZmFpbGVk
IHRvIGdldCBkYXRhIGZyb20gJywgdXJsRm9yQnVpbGRlckluZm8ocGxhdGZvcm0sIGJ1aWxkZXJO
YW1lKSk7CisgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnbW9zdFJlY2VudENvbXBsZXRlZEJ1
aWxkTnVtYmVyJywgYnVpbGRlclN0YXR1cykKKyAgICAgICAgdmFyIG1vc3RSZWNlbnRDb21wbGV0
ZWQgPSBtb3N0UmVjZW50Q29tcGxldGVkQnVpbGROdW1iZXIoYnVpbGRlclN0YXR1cyk7CisgICAg
ICAgIGNhbGxiYWNrKG1vc3RSZWNlbnRDb21wbGV0ZWQpOworICAgIH0pOworICAgIHJldHVybiAw
OworfQorCitidWlsZGVycy5yZWNlbnRCdWlsZEluZm9zID0gZnVuY3Rpb24oY2FsbGJhY2spCit7
CisgICAgd2luZG93LmNvbnNvbGUubG9nKCdyZWNlbnRCdWlsZEluZm9zJyk7CisgICAgZmV0Y2hN
b3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVyKGNvbmZpZy5rQ3VycmVudFBsYXRmb3JtLCBmdW5j
dGlvbihidWlsZEluZm9CeUJ1aWxkZXIpIHsKKyAgICAgICAgdmFyIGJ1aWxkSW5mbyA9IHt9Owor
ICAgICAgICAkLmVhY2goYnVpbGRJbmZvQnlCdWlsZGVyLCBmdW5jdGlvbihidWlsZGVyTmFtZSwg
dGhpc0J1aWxkSW5mbykgeworICAgICAgICAgICAgaWYgKCFidWlsZEluZm8pCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBidWlsZEluZm9bYnVpbGRl
ck5hbWVdID0gdGhpc0J1aWxkSW5mbzsKKyAgICAgICAgfSk7CisgICAgICAgIGNhbGxiYWNrKGJ1
aWxkSW5mbyk7CisgICAgfSk7Cit9OworCiBidWlsZGVycy5idWlsZGVyc0ZhaWxpbmdOb25MYXlv
dXRUZXN0cyA9IGZ1bmN0aW9uKGNhbGxiYWNrKQogewotICAgIGZldGNoTW9zdFJlY2VudEJ1aWxk
SW5mb0J5QnVpbGRlcihmdW5jdGlvbihidWlsZEluZm9CeUJ1aWxkZXIpIHsKK3JldHVybjsKKyAg
ICB3aW5kb3cuY29uc29sZS5sb2coJ2J1aWxkZXJzRmFpbGluZ05vbkxheW91dFRlc3RzJyk7Cisg
ICAgZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVyKGNvbmZpZy5rQ3VycmVudFBsYXRm
b3JtLCBmdW5jdGlvbihidWlsZEluZm9CeUJ1aWxkZXIpIHsKICAgICAgICAgdmFyIGZhaWx1cmVM
aXN0ID0ge307CiAgICAgICAgICQuZWFjaChidWlsZEluZm9CeUJ1aWxkZXIsIGZ1bmN0aW9uKGJ1
aWxkZXJOYW1lLCBidWlsZEluZm8pIHsKICAgICAgICAgICAgIGlmICghYnVpbGRJbmZvKQpAQCAt
MTI2LDcgKzE2NSw5IEBAIGJ1aWxkZXJzLmJ1aWxkZXJzRmFpbGluZ05vbkxheW91dFRlc3RzID0g
ZnVuY3Rpb24oY2FsbGJhY2spCiAKIGJ1aWxkZXJzLnBlcmZCdWlsZGVycyA9IGZ1bmN0aW9uKGNh
bGxiYWNrKQogewotICAgIGZldGNoTW9zdFJlY2VudEJ1aWxkSW5mb0J5QnVpbGRlcihmdW5jdGlv
bihidWlsZEluZm9CeUJ1aWxkZXIpIHsKK3JldHVybjsKKyAgICB3aW5kb3cuY29uc29sZS5sb2co
J3BlcmZCdWlsZGVycycpOworICAgIGZldGNoTW9zdFJlY2VudEJ1aWxkSW5mb0J5QnVpbGRlcihj
b25maWcua0N1cnJlbnRQbGF0Zm9ybSwgZnVuY3Rpb24oYnVpbGRJbmZvQnlCdWlsZGVyKSB7CiAg
ICAgICAgIHZhciBwZXJmVGVzdE1hcCA9IHt9OwogICAgICAgICAkLmVhY2goYnVpbGRJbmZvQnlC
dWlsZGVyLCBmdW5jdGlvbihidWlsZGVyTmFtZSwgYnVpbGRJbmZvKSB7CiAgICAgICAgICAgICBp
ZiAoIWJ1aWxkSW5mbyB8fCBidWlsZGVyTmFtZS5pbmRleE9mKCdQZXJmJykgPT0gLTEpCmRpZmYg
LS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9jb25maWcuanMgYi9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVy
ZXMvc2NyaXB0cy9jb25maWcuanMKaW5kZXggMzlhZTcxMzcyODA2YzUxZDNlODBhZjEyYzE4MDhl
MmM5NzY1ZjAwYy4uOTEyNzNhOWIxNTFlMDRhMGVkMTFiMTdkYjI2N2IyODIxMGNhYzkwMiAxMDA2
NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvY29uZmlnLmpzCisrKyBiL1Rvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RG
YWlsdXJlcy9zY3JpcHRzL2NvbmZpZy5qcwpAQCAtMjcsMjEgKzI3LDU3IEBAIHZhciBjb25maWcg
PSBjb25maWcgfHwge307CiAKIChmdW5jdGlvbigpIHsKIAotY29uZmlnLmtCdWlsZGVycyA9IHsK
LSAgICAnV2Via2l0IFdpbic6IHt2ZXJzaW9uOiAneHAnfSwKLSAgICAnV2Via2l0IFZpc3RhJzog
e3ZlcnNpb246ICd2aXN0YSd9LAotICAgICdXZWJraXQgV2luNyc6IHt2ZXJzaW9uOiAnd2luNyd9
LAotICAgICdXZWJraXQgV2luIChkYmcpKDEpJzoge3ZlcnNpb246ICd4cCcsIGRlYnVnOiB0cnVl
fSwKLSAgICAnV2Via2l0IFdpbiAoZGJnKSgyKSc6IHt2ZXJzaW9uOiAneHAnLCBkZWJ1ZzogdHJ1
ZX0sCi0gICAgJ1dlYmtpdCBMaW51eCc6IHt2ZXJzaW9uOiAnbHVjaWQnLCBpczY0Yml0OiB0cnVl
fSwKLSAgICAnV2Via2l0IExpbnV4IDMyJzoge3ZlcnNpb246ICdsdWNpZCd9LAotICAgICdXZWJr
aXQgTGludXggKGRiZyknOiB7dmVyc2lvbjogJ2x1Y2lkJywgaXM2NGJpdDogdHJ1ZSwgZGVidWc6
IHRydWV9LAotICAgICdXZWJraXQgTWFjMTAuNSc6IHt2ZXJzaW9uOiAnbGVvcGFyZCd9LAotICAg
ICdXZWJraXQgTWFjMTAuNSAoZGJnKSgxKSc6IHt2ZXJzaW9uOiAnbGVvcGFyZCcsIGRlYnVnOiB0
cnVlfSwKLSAgICAnV2Via2l0IE1hYzEwLjUgKGRiZykoMiknOiB7dmVyc2lvbjogJ2xlb3BhcmQn
LCBkZWJ1ZzogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBNYWMxMC42Jzoge3ZlcnNpb246ICdzbm93bGVv
cGFyZCd9LAotICAgICdXZWJraXQgTWFjMTAuNiAoZGJnKSc6IHt2ZXJzaW9uOiAnc25vd2xlb3Bh
cmQnLCBkZWJ1ZzogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBNYWMxMC43Jzoge3ZlcnNpb246ICdsaW9u
J30sCitjb25maWcua1BsYXRmb3JtcyA9IHsKKyAgICAnYXBwbGUnIDogeworICAgICAgICBsYWJl
bCA6ICdBcHBsZScsCisgICAgICAgIGJ1aWxkQ29uc29sZVVSTDogJ2h0dHA6Ly9idWlsZC53ZWJr
aXQub3JnJywKKyAgICAgICAgbGF5b3V0VGVzdFJlc3VsdHNVUkw6ICdodHRwOi8vYnVpbGQud2Vi
a2l0Lm9yZy9yZXN1bHRzJywKKyAgICAgICAgd2F0ZXJmYWxsVVJMOiAnaHR0cDovL2J1aWxkLndl
YmtpdC5vcmcvd2F0ZXJmYWxsJywKKyAgICAgICAgYnVpbGRlcnM6IHsKKyAgICAgICAgICAgICdB
cHBsZSBMaW9uIFJlbGVhc2UgV0sxIChUZXN0cyknIDoge3ZlcnNpb246ICdsaW9uJyB9LAorICAg
ICAgICAgICAgJ0FwcGxlIExpb24gRGVidWcgV0sxIChUZXN0cyknIDoge3ZlcnNpb246ICdsaW9u
JywgZGVidWc6IHRydWV9LAorICAgICAgICAgICAgJ0FwcGxlIExpb24gUmVsZWFzZSBXSzIgKFRl
c3RzKScgOiB7dmVyc2lvbjogJ2xpb24nIH0sCisgICAgICAgICAgICAnQXBwbGUgTGlvbiBEZWJ1
ZyBXSzIgKFRlc3RzKScgOiB7dmVyc2lvbjogJ2xpb24nLCBkZWJ1ZzogdHJ1ZX0sCisgICAgICAg
ICAgICAnQXBwbGUgV2luIFhQIERlYnVnIChUZXN0cyknIDoge3ZlcnNpb246ICd4cCcsZGVidWc6
IHRydWV9LAorICAgICAgICAgICAgJ0FwcGxlIFdpbiA3IFJlbGVhc2UgKFRlc3RzKScgOiB7dmVy
c2lvbjogJ3dpbjcnfSwKKyAgICAgICAgfSwKKyAgICAgICAgaGF2ZUJ1aWxkZXJBY2N1bXVsYXRl
ZFJlc3VsdHMgOiBmYWxzZSwKKyAgICAgICAgcmVzdWx0c0RpcmVjdG9yeU5hbWVGcm9tQnVpbGRl
ck5hbWU6IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
VVJJQ29tcG9uZW50KGJ1aWxkZXJOYW1lKTsKKyAgICAgICAgfSwKKyAgICAgICAgcmVzdWx0c0Rp
cmVjdG9yeUZvckJ1aWxkTnVtYmVyOiBmdW5jdGlvbihidWlsZE51bWJlciwgcmV2aXNpb24pIHsK
KyAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoJ3InICsgcmV2aXNpb24gKyAn
ICgnICsgYnVpbGROdW1iZXIgKyAnKScpOworICAgICAgICB9LAorICAgIH0sCisgICAgJ2Nocm9t
aXVtJyA6IHsKKyAgICAgICAgbGFiZWwgOiAnQ2hyb21pdW0nLAorICAgICAgICBidWlsZENvbnNv
bGVVUkw6ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0ud2Via2l0JywKKyAg
ICAgICAgbGF5b3V0VGVzdFJlc3VsdHNVUkw6ICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2Yv
Y2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cycsCisgICAgICAgIHdhdGVyZmFsbFVSTDogJ2h0
dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS53ZWJraXQvd2F0ZXJmYWxsJywKKyAg
ICAgICAgYnVpbGRlcnM6IHsKKyAgICAgICAgICAgICdXZWJraXQgV2luJzoge3ZlcnNpb246ICd4
cCd9LAorICAgICAgICAgICAgJ1dlYmtpdCBWaXN0YSc6IHt2ZXJzaW9uOiAndmlzdGEnfSwKKyAg
ICAgICAgICAgICdXZWJraXQgV2luNyc6IHt2ZXJzaW9uOiAnd2luNyd9LAorICAgICAgICAgICAg
J1dlYmtpdCBXaW4gKGRiZykoMSknOiB7dmVyc2lvbjogJ3hwJywgZGVidWc6IHRydWV9LAorICAg
ICAgICAgICAgJ1dlYmtpdCBXaW4gKGRiZykoMiknOiB7dmVyc2lvbjogJ3hwJywgZGVidWc6IHRy
dWV9LAorICAgICAgICAgICAgJ1dlYmtpdCBMaW51eCc6IHt2ZXJzaW9uOiAnbHVjaWQnLCBpczY0
Yml0OiB0cnVlfSwKKyAgICAgICAgICAgICdXZWJraXQgTGludXggMzInOiB7dmVyc2lvbjogJ2x1
Y2lkJ30sCisgICAgICAgICAgICAnV2Via2l0IExpbnV4IChkYmcpJzoge3ZlcnNpb246ICdsdWNp
ZCcsIGlzNjRiaXQ6IHRydWUsIGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAgICdXZWJraXQgTWFj
MTAuNSc6IHt2ZXJzaW9uOiAnbGVvcGFyZCd9LAorICAgICAgICAgICAgJ1dlYmtpdCBNYWMxMC41
IChkYmcpKDEpJzoge3ZlcnNpb246ICdsZW9wYXJkJywgZGVidWc6IHRydWV9LAorICAgICAgICAg
ICAgJ1dlYmtpdCBNYWMxMC41IChkYmcpKDIpJzoge3ZlcnNpb246ICdsZW9wYXJkJywgZGVidWc6
IHRydWV9LAorICAgICAgICAgICAgJ1dlYmtpdCBNYWMxMC42Jzoge3ZlcnNpb246ICdzbm93bGVv
cGFyZCd9LAorICAgICAgICAgICAgJ1dlYmtpdCBNYWMxMC42IChkYmcpJzoge3ZlcnNpb246ICdz
bm93bGVvcGFyZCcsIGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAgICdXZWJraXQgTWFjMTAuNyc6
IHt2ZXJzaW9uOiAnbGlvbid9LAorICAgICAgICB9LAorICAgICAgICBoYXZlQnVpbGRlckFjY3Vt
dWxhdGVkUmVzdWx0cyA6IHRydWUsCisgICAgICAgIHJlc3VsdHNEaXJlY3RvcnlOYW1lRnJvbUJ1
aWxkZXJOYW1lOiBmdW5jdGlvbihidWlsZGVyTmFtZSkgeworICAgICAgICAgICAgcmV0dXJuIGJ1
aWxkZXJOYW1lLnJlcGxhY2UoL1sgLigpXS9nLCAnXycpOworICAgICAgICB9LAorICAgICAgICBy
ZXN1bHRzRGlyZWN0b3J5Rm9yQnVpbGROdW1iZXI6IGZ1bmN0aW9uKGJ1aWxkTnVtYmVyLCByZXZp
c2lvbikgeworICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTnVtYmVyOworICAgICAgICB9LAorICAg
IH0KIH07CiAKIGNvbmZpZy5rVHJhY1VSTCA9ICdodHRwOi8vdHJhYy53ZWJraXQub3JnJzsKQEAg
LTYxLDQgKzk3LDE1IEBAIGNvbmZpZy5rUmVsYXRpdmVUaW1lVXBkYXRlRnJlcXVlbmN5ID0gMTAw
MCAqIDYwOwogCiBjb25maWcua0V4cGVyaW1lbnRhbEZlYXR1cmVzID0gd2luZG93LmxvY2F0aW9u
LnNlYXJjaC5zZWFyY2goJ2VuYWJsZUV4cGVyaW1lbnRzPTEnKSAhPSAtMTsKIAorY29uZmlnLmtD
dXJyZW50UGxhdGZvcm0gPSAnY2hyb21pdW0nOworCitjb25maWcuc2V0UGxhdGZvcm0gPSBmdW5j
dGlvbihwbGF0Zm9ybSkKK3sKKyAgICBpZiAoIXRoaXMua1BsYXRmb3Jtc1twbGF0Zm9ybV0pIHsK
KyAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKHBsYXRmb3JtICsgJyBpcyBub3QgYSByZWNvZ25p
emVkIHBsYXRmb3JtJyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uZmlnLmtDdXJy
ZW50UGxhdGZvcm0gPSBwbGF0Zm9ybTsKK307CisKIH0pKCk7CmRpZmYgLS1naXQgYS9Ub29scy9C
dWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0
RmFpbHVyZXMvc2NyaXB0cy9nYXJkZW4tby1tYXRpYy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3Jp
cHRzL2dhcmRlbi1vLW1hdGljLmpzCmluZGV4IDc3NzI4MjZjYzUzNGIzYzIxMGNjZWVkZWFhZmM5
MjBmZDBiOWFmOTEuLjFiZDkxYWNkMjliNjJlYzY4MzEwODgyOTJkZjFlOGZkMTRjZGM1YTcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2dhcmRlbi1vLW1hdGljLmpzCisrKyBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19o
dG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2dhcmRlbi1vLW1hdGljLmpzCkBAIC03MCwxMCArNzAs
MTMgQEAgZnVuY3Rpb24gdXBkYXRlKCkKIAogICAgICAgICB1cGRhdGluZy51cGRhdGUoJ0FuYWx5
emluZyB0ZXN0IGZhaWx1cmVzIC4uLicpOwogCisgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygn
YW5hbHl6ZVVuZXhwZWN0ZWRGYWlsdXJlcyBzdGFydGluZycpCiAgICAgICAgIG1vZGVsLmFuYWx5
emVVbmV4cGVjdGVkRmFpbHVyZXMoZnVuY3Rpb24oZmFpbHVyZUFuYWx5c2lzKSB7CisgICAgICAg
ICAgICB3aW5kb3cuY29uc29sZS5sb2coJ2FuYWx5emVVbmV4cGVjdGVkRmFpbHVyZXMnKQogICAg
ICAgICAgICAgdXBkYXRpbmcudXBkYXRlKCdBbmFseXppbmcgdGVzdCBmYWlsdXJlcyAuLi4gJyAr
ICsrbnVtYmVyT2ZUZXN0c0FuYWx5emVkICsgJyB0ZXN0cyBhbmFseXplZC4nKTsKICAgICAgICAg
ICAgIGdfdW5leHBlY3RlZEZhaWx1cmVzQ29udHJvbGxlci51cGRhdGUoZmFpbHVyZUFuYWx5c2lz
KTsKICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB3aW5kb3cuY29uc29sZS5s
b2coJ3VwZGF0ZVBhcnR5VGltZScpCiAgICAgICAgICAgICB1cGRhdGVQYXJ0eVRpbWUoKTsKICAg
ICAgICAgICAgIGdfdW5leHBlY3RlZEZhaWx1cmVzQ29udHJvbGxlci5wdXJnZSgpOwogCmRpZmYg
LS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9tb2RlbC5qcyBiL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJl
cy9zY3JpcHRzL21vZGVsLmpzCmluZGV4IGMyZGViYmQ2YzVlOTYzOGQyZGFmODY5NTgwYmRkOGY0
YjU2YTI2NjYuLjA1MWJmYWRkZWYwYjlmOGM0ZjIxMTZkOGZiOGM4MjdjMjQxNmFmMDkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL21vZGVsLmpzCisrKyBiL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWls
dXJlcy9zY3JpcHRzL21vZGVsLmpzCkBAIC0xMDEsMTAgKzEwMSwxMiBAQCB2YXIgZ19jb21taXRJ
bmRleCA9IHt9OwogCiBtb2RlbC51cGRhdGVSZWNlbnRDb21taXRzID0gZnVuY3Rpb24oY2FsbGJh
Y2spCiB7CisgICAgd2luZG93LmNvbnNvbGUubG9nKCd1cGRhdGVSZWNlbnRDb21taXRzJykKICAg
ICB0cmFjLnJlY2VudENvbW1pdERhdGEoJ3RydW5rJywga0NvbW1pdExvZ0xlbmd0aCwgZnVuY3Rp
b24oY29tbWl0RGF0YUxpc3QpIHsKICAgICAgICAgbW9kZWwuc3RhdGUucmVjZW50Q29tbWl0cyA9
IGNvbW1pdERhdGFMaXN0OwogICAgICAgICB1cGRhdGVDb21taXRJbmRleCgpOwogICAgICAgICBm
aW5kQW5kTWFya1JldmVydGVkUmV2aXNpb25zKG1vZGVsLnN0YXRlLnJlY2VudENvbW1pdHMpOwor
ICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coJ3VwZGF0ZVJlY2VudENvbW1pdHMgZG9uZScpCiAg
ICAgICAgIGNhbGxiYWNrKCk7CiAgICAgfSk7CiB9OwpAQCAtMTUyLDE2ICsxNTQsMTkgQEAgbW9k
ZWwubGF0ZXN0UmV2aXNpb25XaXRoTm9CdWlsZGVyc0luRmxpZ2h0ID0gZnVuY3Rpb24oKQogCiBt
b2RlbC51cGRhdGVSZXN1bHRzQnlCdWlsZGVyID0gZnVuY3Rpb24oY2FsbGJhY2spCiB7Ci0gICAg
cmVzdWx0cy5mZXRjaFJlc3VsdHNCeUJ1aWxkZXIoT2JqZWN0LmtleXMoY29uZmlnLmtCdWlsZGVy
cyksIGZ1bmN0aW9uKHJlc3VsdHNCeUJ1aWxkZXIpIHsKKyAgICB2YXIgcGxhdGZvcm1CdWlsZGVy
cyA9IGNvbmZpZy5rUGxhdGZvcm1zW2NvbmZpZy5rQ3VycmVudFBsYXRmb3JtXS5idWlsZGVyczsK
KyAgICByZXN1bHRzLmZldGNoUmVzdWx0c0J5QnVpbGRlcihPYmplY3Qua2V5cyhwbGF0Zm9ybUJ1
aWxkZXJzKSwgZnVuY3Rpb24ocmVzdWx0c0J5QnVpbGRlcikgewogICAgICAgICBtb2RlbC5zdGF0
ZS5yZXN1bHRzQnlCdWlsZGVyID0gcmVzdWx0c0J5QnVpbGRlcjsKKyAgICAgICAgd2luZG93LmNv
bnNvbGUubG9nKCd1cGRhdGVSZXN1bHRzQnlCdWlsZGVyIGRvbmUgJywgbW9kZWwuc3RhdGUucmVz
dWx0c0J5QnVpbGRlcikKICAgICAgICAgY2FsbGJhY2soKTsKICAgICB9KTsKIH07CiAKIG1vZGVs
LmFuYWx5emVVbmV4cGVjdGVkRmFpbHVyZXMgPSBmdW5jdGlvbihjYWxsYmFjaywgY29tcGxldGlv
bkNhbGxiYWNrKQogeworICAgIHdpbmRvdy5jb25zb2xlLmxvZygnYW5hbHl6ZVVuZXhwZWN0ZWRG
YWlsdXJlcycsIG1vZGVsLnN0YXRlLnJlc3VsdHNCeUJ1aWxkZXIpCiAgICAgdmFyIHVuZXhwZWN0
ZWRGYWlsdXJlcyA9IHJlc3VsdHMudW5leHBlY3RlZEZhaWx1cmVzQnlUZXN0KG1vZGVsLnN0YXRl
LnJlc3VsdHNCeUJ1aWxkZXIpOwotCisgICAgd2luZG93LmNvbnNvbGUubG9nKCd1bmV4cGVjdGVk
RmFpbHVyZXMnLCB1bmV4cGVjdGVkRmFpbHVyZXMpCiAgICAgJC5lYWNoKG1vZGVsLnN0YXRlLmZh
aWx1cmVBbmFseXNpc0J5VGVzdCwgZnVuY3Rpb24odGVzdE5hbWUsIGZhaWx1cmVBbmFseXNpcykg
ewogICAgICAgICBpZiAoISh0ZXN0TmFtZSBpbiB1bmV4cGVjdGVkRmFpbHVyZXMpKQogICAgICAg
ICAgICAgZGVsZXRlIG1vZGVsLnN0YXRlLmZhaWx1cmVBbmFseXNpc0J5VGVzdFt0ZXN0TmFtZV07
CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRzLmpzIGIvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVz
dEZhaWx1cmVzL3NjcmlwdHMvcmVzdWx0cy5qcwppbmRleCBlZmYxMTBiMWU5ZWQ2OGQ1ZjhhYzRm
ZWZmMzBkYjI0NTIwYjFlNGM4Li40OTIzNDY2NjE5ZmY2NWNhYzcyZTY1MDZhZjg5NGFjMDU2NTQw
ZmYyIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRzLmpzCisrKyBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19o
dG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3Jlc3VsdHMuanMKQEAgLTI3LDcgKzI3LDYgQEAgdmFy
IHJlc3VsdHMgPSByZXN1bHRzIHx8IHt9OwogCiAoZnVuY3Rpb24oKSB7CiAKLXZhciBrTGF5b3V0
VGVzdFJlc3VsdHNTZXJ2ZXIgPSAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVt
L2xheW91dF90ZXN0X3Jlc3VsdHMvJzsKIHZhciBrTGF5b3V0VGVzdFJlc3VsdHNQYXRoID0gJy9y
ZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvJzsKIHZhciBrUmVzdWx0c05hbWUgPSAnZnVsbF9y
ZXN1bHRzLmpzb24nOwogCkBAIC04Myw2ICs4MiwxMSBAQCByZXN1bHRzLmtBdWRpb1R5cGUgPSAn
YXVkaW8nCiByZXN1bHRzLmtUZXh0VHlwZSA9ICd0ZXh0JwogLy8gRklYTUU6IFRoZXJlIGFyZSBt
b3JlIHR5cGVzIG9mIHRlc3RzLgogCitmdW5jdGlvbiBsYXlvdXRUZXN0UmVzdWx0c1VSTChwbGF0
Zm9ybSkKK3sKKyAgICByZXR1cm4gY29uZmlnLmtQbGF0Zm9ybXNbcGxhdGZvcm1dLmxheW91dFRl
c3RSZXN1bHRzVVJMOworfQorCiBmdW5jdGlvbiBwb3NzaWJsZVN1ZmZpeExpc3RGb3IoZmFpbHVy
ZVR5cGVMaXN0KQogewogICAgIHZhciBzdWZmaXhMaXN0ID0gW107CkBAIC0xNzMsMzIgKzE3Nywz
MiBAQCByZXN1bHRzLmNhblJlYmFzZWxpbmUgPSBmdW5jdGlvbihmYWlsdXJlVHlwZUxpc3QpCiAK
IHJlc3VsdHMuZGlyZWN0b3J5Rm9yQnVpbGRlciA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lKQogewot
ICAgIHJldHVybiBidWlsZGVyTmFtZS5yZXBsYWNlKC9bIC4oKV0vZywgJ18nKTsKKyAgICByZXR1
cm4gY29uZmlnLmtQbGF0Zm9ybXNbY29uZmlnLmtDdXJyZW50UGxhdGZvcm1dLnJlc3VsdHNEaXJl
Y3RvcnlOYW1lRnJvbUJ1aWxkZXJOYW1lKGJ1aWxkZXJOYW1lKTsKIH0KIAotZnVuY3Rpb24gcmVz
dWx0c0RpcmVjdG9yeVVSTChidWlsZGVyTmFtZSkKK2Z1bmN0aW9uIHJlc3VsdHNEaXJlY3RvcnlV
UkwocGxhdGZvcm0sIGJ1aWxkZXJOYW1lKQogewotICAgIHJldHVybiBrTGF5b3V0VGVzdFJlc3Vs
dHNTZXJ2ZXIgKyByZXN1bHRzLmRpcmVjdG9yeUZvckJ1aWxkZXIoYnVpbGRlck5hbWUpICsga0xh
eW91dFRlc3RSZXN1bHRzUGF0aDsKKyAgICByZXR1cm4gbGF5b3V0VGVzdFJlc3VsdHNVUkwocGxh
dGZvcm0pICsgJy8nICsgcmVzdWx0cy5kaXJlY3RvcnlGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKSAr
IGtMYXlvdXRUZXN0UmVzdWx0c1BhdGg7CiB9CiAKLWZ1bmN0aW9uIHJlc3VsdHNEaXJlY3RvcnlM
aXN0aW5nVVJMKGJ1aWxkZXJOYW1lKQorZnVuY3Rpb24gcmVzdWx0c0RpcmVjdG9yeUxpc3RpbmdV
UkwocGxhdGZvcm0sIGJ1aWxkZXJOYW1lKQogewotICAgIHJldHVybiBrTGF5b3V0VGVzdFJlc3Vs
dHNTZXJ2ZXIgKyByZXN1bHRzLmRpcmVjdG9yeUZvckJ1aWxkZXIoYnVpbGRlck5hbWUpICsgJy8n
OworICAgIHJldHVybiBsYXlvdXRUZXN0UmVzdWx0c1VSTChwbGF0Zm9ybSkgKyAnLycgKyByZXN1
bHRzLmRpcmVjdG9yeUZvckJ1aWxkZXIoYnVpbGRlck5hbWUpICsgJy8nOwogfQogCi1mdW5jdGlv
biByZXN1bHRzRGlyZWN0b3J5VVJMRm9yQnVpbGROdW1iZXIoYnVpbGRlck5hbWUsIGJ1aWxkTnVt
YmVyKQorZnVuY3Rpb24gcmVzdWx0c0RpcmVjdG9yeVVSTEZvckJ1aWxkTnVtYmVyKHBsYXRmb3Jt
LCBidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIsIHJldmlzaW9uKQogewotICAgIHJldHVybiByZXN1
bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChidWlsZGVyTmFtZSkgKyBidWlsZE51bWJlciArICcvJwor
ICAgIHJldHVybiByZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChwbGF0Zm9ybSwgYnVpbGRlck5h
bWUpICsgY29uZmlnLmtQbGF0Zm9ybXNbcGxhdGZvcm1dLnJlc3VsdHNEaXJlY3RvcnlGb3JCdWls
ZE51bWJlcihidWlsZE51bWJlciwgcmV2aXNpb24pICsgJy8nOwogfQogCi1mdW5jdGlvbiByZXN1
bHRzU3VtbWFyeVVSTChidWlsZGVyTmFtZSkKK2Z1bmN0aW9uIHJlc3VsdHNTdW1tYXJ5VVJMKHBs
YXRmb3JtLCBidWlsZGVyTmFtZSkKIHsKLSAgICByZXR1cm4gcmVzdWx0c0RpcmVjdG9yeVVSTChi
dWlsZGVyTmFtZSkgKyBrUmVzdWx0c05hbWU7CisgICAgcmV0dXJuIHJlc3VsdHNEaXJlY3RvcnlV
UkwocGxhdGZvcm0sIGJ1aWxkZXJOYW1lKSArIGtSZXN1bHRzTmFtZTsKIH0KIAotZnVuY3Rpb24g
cmVzdWx0c1N1bW1hcnlVUkxGb3JCdWlsZE51bWJlcihidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIp
CitmdW5jdGlvbiByZXN1bHRzU3VtbWFyeVVSTEZvckJ1aWxkTnVtYmVyKHBsYXRmb3JtLCBidWls
ZGVyTmFtZSwgYnVpbGROdW1iZXIsIHJldmlzaW9uKQogewotICAgIHJldHVybiByZXN1bHRzRGly
ZWN0b3J5VVJMRm9yQnVpbGROdW1iZXIoYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVyKSArIGtSZXN1
bHRzTmFtZTsKKyAgICByZXR1cm4gcmVzdWx0c0RpcmVjdG9yeVVSTEZvckJ1aWxkTnVtYmVyKHBs
YXRmb3JtLCBidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIsIHJldmlzaW9uKSArIGtSZXN1bHRzTmFt
ZTsKIH0KIAogdmFyIGdfcmVzdWx0c0NhY2hlID0gbmV3IGJhc2UuQXN5bmNocm9ub3VzQ2FjaGUo
ZnVuY3Rpb24gKGtleSwgY2FsbGJhY2spIHsKQEAgLTM0MywxOCArMzQ3LDE5IEBAIHJlc3VsdHMu
Y29sbGVjdFVuZXhwZWN0ZWRSZXN1bHRzID0gZnVuY3Rpb24oZGljdGlvbmFyeU9mUmVzdWx0Tm9k
ZXMpCiAgICAgcmV0dXJuIGJhc2UudW5pcXVpZnlBcnJheShjb2xsZWN0ZWRSZXN1bHRzKTsKIH07
CiAKLWZ1bmN0aW9uIGhpc3RvcmljYWxSZXN1bHRzU3VtbWFyeVVSTHMoYnVpbGRlck5hbWUsIGNh
bGxiYWNrKQorZnVuY3Rpb24gaGlzdG9yaWNhbFJlc3VsdHNTdW1tYXJ5VVJMcyhwbGF0Zm9ybSwg
YnVpbGRlck5hbWUsIGNhbGxiYWNrKQogewotICAgIG5ldC5nZXQocmVzdWx0c0RpcmVjdG9yeUxp
c3RpbmdVUkwoYnVpbGRlck5hbWUpLCBmdW5jdGlvbihkaXJlY3RvcnlMaXN0aW5nKSB7CisgICAg
bmV0LmdldChyZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChwbGF0Zm9ybSwgYnVpbGRlck5hbWUp
LCBmdW5jdGlvbihkaXJlY3RvcnlMaXN0aW5nKSB7CiAgICAgICAgIHZhciBzdW1tYXJ5VVJMcyA9
IGRpcmVjdG9yeUxpc3RpbmcubWF0Y2goa0J1aWxkTGlua1JlZ2V4cCkubWFwKGZ1bmN0aW9uKGJ1
aWxkTGluaykgewogICAgICAgICAgICAgdmFyIGJ1aWxkTnVtYmVyID0gcGFyc2VJbnQoYnVpbGRM
aW5rLm1hdGNoKGtCdWlsZE51bWJlclJlZ2V4cClbMF0pOwotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdHNTdW1tYXJ5VVJMRm9yQnVpbGROdW1iZXIoYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVyKTsK
KyAgICAgICAgICAgIHZhciByZXZpc2lvbiA9IDA7IC8vIEZJWE1FOiBuZWVkIHJldmlzaW9uIGZv
ciBBcHBsZS4KKyAgICAgICAgICAgIHJldHVybiByZXN1bHRzU3VtbWFyeVVSTEZvckJ1aWxkTnVt
YmVyKHBsYXRmb3JtLCBidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIsIHJldmlzaW9uKTsKICAgICAg
ICAgfSkucmV2ZXJzZSgpOwogICAgICAgICBjYWxsYmFjayhzdW1tYXJ5VVJMcyk7CiAgICAgfSk7
CiB9CiAKLWZ1bmN0aW9uIHdhbGtIaXN0b3J5KGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSwgY2FsbGJh
Y2spCitmdW5jdGlvbiB3YWxrSGlzdG9yeShwbGF0Zm9ybSwgYnVpbGRlck5hbWUsIHRlc3ROYW1l
LCBjYWxsYmFjaykKIHsKICAgICB2YXIgaW5kZXhPZk5leHRLZXlUb0ZldGNoID0gMDsKICAgICB2
YXIga2V5TGlzdCA9IFtdOwpAQCAtMzg1LDcgKzM5MCw3IEBAIGZ1bmN0aW9uIHdhbGtIaXN0b3J5
KGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSwgY2FsbGJhY2spCiAgICAgICAgIGNvbnRpbnVlV2Fsaygp
OwogICAgIH0KIAotICAgIGhpc3RvcmljYWxSZXN1bHRzU3VtbWFyeVVSTHMoYnVpbGRlck5hbWUs
IGZ1bmN0aW9uKHN1bW1hcnlVUkxzKSB7CisgICAgaGlzdG9yaWNhbFJlc3VsdHNTdW1tYXJ5VVJM
cyhwbGF0Zm9ybSwgYnVpbGRlck5hbWUsIGZ1bmN0aW9uKHN1bW1hcnlVUkxzKSB7CiAgICAgICAg
IGtleUxpc3QgPSBzdW1tYXJ5VVJMczsKICAgICAgICAgY29udGludWVXYWxrKCk7CiAgICAgfSk7
CkBAIC0zOTYsNyArNDAxLDggQEAgcmVzdWx0cy5yZWdyZXNzaW9uUmFuZ2VGb3JGYWlsdXJlID0g
ZnVuY3Rpb24oYnVpbGRlck5hbWUsIHRlc3ROYW1lLCBjYWxsYmFjaykKICAgICB2YXIgb2xkZXN0
RmFpbGluZ1JldmlzaW9uID0gMDsKICAgICB2YXIgbmV3ZXN0UGFzc2luZ1JldmlzaW9uID0gMDsK
IAotICAgIHdhbGtIaXN0b3J5KGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSwgZnVuY3Rpb24ocmV2aXNp
b24sIHJlc3VsdE5vZGUpIHsKKyAgICAvLyBGSVhNRTogc2hvdWxkIHRyZWF0IHtwbGF0Zm9ybSwg
YnVpbGRlck5hbWV9IGFzIGEgdHVwbGUKKyAgICB3YWxrSGlzdG9yeShjb25maWcua0N1cnJlbnRQ
bGF0Zm9ybSwgYnVpbGRlck5hbWUsIHRlc3ROYW1lLCBmdW5jdGlvbihyZXZpc2lvbiwgcmVzdWx0
Tm9kZSkgewogICAgICAgICBpZiAoIXJldmlzaW9uKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhv
bGRlc3RGYWlsaW5nUmV2aXNpb24sIG5ld2VzdFBhc3NpbmdSZXZpc2lvbik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC01MzYsNyArNTQyLDcgQEAgZnVuY3Rpb24gc29ydFJlc3VsdFVS
THNCeVN1ZmZpeCh1cmxzKQogCiByZXN1bHRzLmZldGNoUmVzdWx0c1VSTHMgPSBmdW5jdGlvbihm
YWlsdXJlSW5mbywgY2FsbGJhY2spCiB7Ci0gICAgdmFyIHN0ZW0gPSByZXN1bHRzRGlyZWN0b3J5
VVJMKGZhaWx1cmVJbmZvLmJ1aWxkZXJOYW1lKTsKKyAgICB2YXIgc3RlbSA9IHJlc3VsdHNEaXJl
Y3RvcnlVUkwoY29uZmlnLmtQbGF0Zm9ybSwgZmFpbHVyZUluZm8uYnVpbGRlck5hbWUpOwogICAg
IHZhciB0ZXN0TmFtZVN0ZW0gPSBiYXNlLnRyaW1FeHRlbnNpb24oZmFpbHVyZUluZm8udGVzdE5h
bWUpOwogCiAgICAgdmFyIHN1ZmZpeExpc3QgPSBwb3NzaWJsZVN1ZmZpeExpc3RGb3IoZmFpbHVy
ZUluZm8uZmFpbHVyZVR5cGVMaXN0KTsKQEAgLTU1Nyw2ICs1NjMsNyBAQCByZXN1bHRzLmZldGNo
UmVzdWx0c1VSTHMgPSBmdW5jdGlvbihmYWlsdXJlSW5mbywgY2FsbGJhY2spCiAKICAgICAkLmVh
Y2goc3VmZml4TGlzdCwgZnVuY3Rpb24oaW5kZXgsIHN1ZmZpeCkgewogICAgICAgICB2YXIgdXJs
ID0gc3RlbSArIHRlc3ROYW1lU3RlbSArIHN1ZmZpeDsKKyAgICAgICAgd2luZG93LmNvbnNvbGUu
bG9nKCdmZXRjaFJlc3VsdHNVUkxzJywgdXJsKQogICAgICAgICBuZXQucHJvYmUodXJsLCB7CiAg
ICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICByZXN1bHRV
UkxzLnB1c2godXJsKTsKQEAgLTU2OSwyMSArNTc2LDUyIEBAIHJlc3VsdHMuZmV0Y2hSZXN1bHRz
VVJMcyA9IGZ1bmN0aW9uKGZhaWx1cmVJbmZvLCBjYWxsYmFjaykKIAogcmVzdWx0cy5mZXRjaFJl
c3VsdHNGb3JCdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIGNhbGxiYWNrKQogewotICAg
IG5ldC5qc29ucChyZXN1bHRzU3VtbWFyeVVSTChidWlsZGVyTmFtZSksIGNhbGxiYWNrKTsKKyAg
ICB2YXIgcmVzdWx0c1VSTCA9IHJlc3VsdHNTdW1tYXJ5VVJMKGNvbmZpZy5rQ3VycmVudFBsYXRm
b3JtLCBidWlsZGVyTmFtZSk7CisgICAgd2luZG93LmNvbnNvbGUubG9nKCdmZXRjaFJlc3VsdHNG
b3JCdWlsZGVyICcsIHJlc3VsdHNTdW1tYXJ5VVJMKGNvbmZpZy5rQ3VycmVudFBsYXRmb3JtLCBi
dWlsZGVyTmFtZSkpOworICAgIG5ldC5qc29ucChyZXN1bHRzVVJMLCBjYWxsYmFjayk7Cit9Owor
CityZXN1bHRzLmZldGNoUmVzdWx0c0ZvckJ1aWxkT25CdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRl
ck5hbWUsIGJ1aWxkTnVtYmVyLCByZXZpc2lvbiwgY2FsbGJhY2spCit7CisgICAgdmFyIHJlc3Vs
dHNVUkwgPSByZXN1bHRzU3VtbWFyeVVSTEZvckJ1aWxkTnVtYmVyKGNvbmZpZy5rQ3VycmVudFBs
YXRmb3JtLCBidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIsIHJldmlzaW9uKTsKKyAgICB3aW5kb3cu
Y29uc29sZS5sb2coJ2ZldGNoUmVzdWx0c0ZvckJ1aWxkT25CdWlsZGVyJywgYnVpbGRlck5hbWUs
IGJ1aWxkTnVtYmVyLCByZXZpc2lvbiwgcmVzdWx0c1VSTCkKKyAgICBuZXQuanNvbnAocmVzdWx0
c1VSTCwgY2FsbGJhY2spOwogfTsKIAogcmVzdWx0cy5mZXRjaFJlc3VsdHNCeUJ1aWxkZXIgPSBm
dW5jdGlvbihidWlsZGVyTmFtZUxpc3QsIGNhbGxiYWNrKQogewogICAgIHZhciByZXN1bHRzQnlC
dWlsZGVyID0ge30KLSAgICB2YXIgcmVxdWVzdHNJbkZsaWdodCA9IGJ1aWxkZXJOYW1lTGlzdC5s
ZW5ndGg7Ci0gICAgJC5lYWNoKGJ1aWxkZXJOYW1lTGlzdCwgZnVuY3Rpb24oaW5kZXgsIGJ1aWxk
ZXJOYW1lKSB7Ci0gICAgICAgIHJlc3VsdHMuZmV0Y2hSZXN1bHRzRm9yQnVpbGRlcihidWlsZGVy
TmFtZSwgZnVuY3Rpb24ocmVzdWx0c1RyZWUpIHsKLSAgICAgICAgICAgIHJlc3VsdHNCeUJ1aWxk
ZXJbYnVpbGRlck5hbWVdID0gcmVzdWx0c1RyZWU7Ci0gICAgICAgICAgICAtLXJlcXVlc3RzSW5G
bGlnaHQ7Ci0gICAgICAgICAgICBpZiAoIXJlcXVlc3RzSW5GbGlnaHQpCi0gICAgICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0c0J5QnVpbGRlcik7CisgICAgaWYgKGNvbmZpZy5rUGxhdGZvcm1z
W2NvbmZpZy5rQ3VycmVudFBsYXRmb3JtXS5oYXZlQnVpbGRlckFjY3VtdWxhdGVkUmVzdWx0cykg
eworICAgICAgICB2YXIgcmVxdWVzdHNJbkZsaWdodCA9IGJ1aWxkZXJOYW1lTGlzdC5sZW5ndGg7
CisgICAgICAgICQuZWFjaChidWlsZGVyTmFtZUxpc3QsIGZ1bmN0aW9uKGluZGV4LCBidWlsZGVy
TmFtZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdHMuZmV0Y2hSZXN1bHRzRm9yQnVpbGRlcihi
dWlsZGVyTmFtZSwgZnVuY3Rpb24ocmVzdWx0c1RyZWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
d2luZG93LmNvbnNvbGUubG9nKCdyZXN1bHRzIGZvciAnLCBidWlsZGVyTmFtZSwgcmVzdWx0c1Ry
ZWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0g
cmVzdWx0c1RyZWU7CisgICAgICAgICAgICAgICAgICAgIC0tcmVxdWVzdHNJbkZsaWdodDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0c0luRmxpZ2h0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2socmVzdWx0c0J5QnVpbGRlcik7CisgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0pOwotICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXJzLnJl
Y2VudEJ1aWxkSW5mb3MoZnVuY3Rpb24ocmVjZW50QnVpbGRJbmZvcykgeworICAgICAgICAgICAg
dmFyIHJlcXVlc3RzSW5GbGlnaHQ7CisgICAgICAgICAgICAkLmVhY2goYnVpbGRlck5hbWVMaXN0
LCBmdW5jdGlvbihpbmRleCwgYnVpbGRlck5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVj
ZW50QnVpbGRJbmZvc1tidWlsZGVyTmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgKytyZXF1
ZXN0c0luRmxpZ2h0OworICAgICAgICAgICAgICAgICAgICB2YXIgYnVpbGRJbmZvID0gcmVjZW50
QnVpbGRJbmZvc1tidWlsZGVyTmFtZV07CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZmV0
Y2hSZXN1bHRzRm9yQnVpbGRPbkJ1aWxkZXIoYnVpbGRlck5hbWUsIGJ1aWxkSW5mby5udW1iZXIs
IGJ1aWxkSW5mby5zb3VyY2VTdGFtcC5yZXZpc2lvbiwgZnVuY3Rpb24ocmVzdWx0c1RyZWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnZ290IHJlc3VsdHMg
Zm9yJywgYnVpbGRlck5hbWUsIHJlc3VsdHNUcmVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gcmVzdWx0c1RyZWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC0tcmVxdWVzdHNJbkZsaWdodDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcmVxdWVzdHNJbkZsaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjayhyZXN1bHRzQnlCdWlsZGVyKTsKKworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQogfTsK
IAogfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3N1bW1hcnktbW9j
ay5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3N1bW1hcnktbW9jay5qcwppbmRleCBmMmQ3
OGM0OWVmYWYzNjg1MzdkMzNmYWY0ZTg0M2ZkNjcxMDdiZjU3Li41MjBkZTFiZDEzZTUyOTZhNDY5
OTE2YTYxYjEzY2YwN2FlODdmZTFhIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0
cy9zdW1tYXJ5LW1vY2suanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvc3VtbWFyeS1t
b2NrLmpzCkBAIC05Niw3ICs5Niw3IEBAIHZhciB0ZXN0TmFtZXMgPSBuZXcgQ3ljbGVyKFsKICAg
ICAndGFibGVzL21vemlsbGEvYnVncy9idWc1MjUwNS5odG1sJwogXSk7CiAKLXZhciBidWlsZGVy
cyA9IG5ldyBDeWNsZXIoT2JqZWN0LmtleXMoY29uZmlnLmtCdWlsZGVycyksIDMpOwordmFyIGJ1
aWxkZXJzID0gbmV3IEN5Y2xlcihPYmplY3Qua2V5cyhjb25maWcua1BsYXRmb3Jtc1tjb25maWcu
a0N1cnJlbnRQbGF0Zm9ybV0uYnVpbGRlcnMpLCAzKTsKIAogdmFyIGV4cGVjdGF0aW9ucyA9IG5l
dyBDeWNsZXIoWwogICAgICdURVhUJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3Jp
cHRzL3VpLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkuanMKaW5kZXggYjI5MzBmZjgx
ZmYyMTMwZmEyOGM4YWIxNWFjYTA5ZmE3MTlmYjIyNS4uZWM3MDQ5YTk2MmMyYzlmMzY0MTI5Yzlm
MzUxYWI2MWU3OWNlMDMxNSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWku
anMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcv
cHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkuanMKQEAgLTI5LDcgKzI5LDcgQEAg
dmFyIHVpID0gdWkgfHwge307CiAKIHVpLmRpc3BsYXlVUkxGb3JCdWlsZGVyID0gZnVuY3Rpb24o
YnVpbGRlck5hbWUpCiB7Ci0gICAgcmV0dXJuICdodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL3Av
Y2hyb21pdW0ud2Via2l0L3dhdGVyZmFsbD8nICsgJC5wYXJhbSh7CisgICAgcmV0dXJuIGNvbmZp
Zy5rUGxhdGZvcm1zW2NvbmZpZy5rQ3VycmVudFBsYXRmb3JtXS53YXRlcmZhbGxVUkwgKyAnPycg
KyAkLnBhcmFtKHsKICAgICAgICAgJ2J1aWxkZXInOiBidWlsZGVyTmFtZQogICAgIH0pOwogfQpA
QCAtNjcsNiArNjcsNyBAQCB1aS5vbmViYXIgPSBiYXNlLmV4dGVuZHMoJ2RpdicsIHsKICAgICB7
CiAgICAgICAgIHRoaXMuaWQgPSAnb25lYmFyJzsKICAgICAgICAgdGhpcy5pbm5lckhUTUwgPQor
ICAgICAgICAgICAgJzxkaXY+PHNlbGVjdCBpZD0icGxhdGZvcm0tcGlja2VyIj48L3NlbGVjdD48
L2Rpdj4nICsKICAgICAgICAgICAgICc8dWw+JyArCiAgICAgICAgICAgICAgICAgJzxsaT48YSBo
cmVmPSIjdW5leHBlY3RlZCI+VW5leHBlY3RlZCBGYWlsdXJlczwvYT48L2xpPicgKwogICAgICAg
ICAgICAgICAgICc8bGk+PGEgaHJlZj0iI2V4cGVjdGVkIj5FeHBlY3RlZCBGYWlsdXJlczwvYT48
L2xpPicgKwpAQCAtODMsMTMgKzg0LDM5IEBAIHVpLm9uZWJhciA9IGJhc2UuZXh0ZW5kcygnZGl2
JywgewogICAgICAgICAgICAgJ3Jlc3VsdHMnLAogICAgICAgICAgICAgJ3BlcmYnLAogICAgICAg
ICBdCi0KKyAgICAKICAgICAgICAgdGhpcy5fdGFiSW5kZXhUb1NhdmVkU2Nyb2xsT2Zmc2V0ID0g
e307CiAgICAgICAgIHRoaXMuX3RhYnMgPSAkKHRoaXMpLnRhYnMoewogICAgICAgICAgICAgZGlz
YWJsZWQ6IFsyXSwKICAgICAgICAgICAgIHNob3c6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgeyB0aGlz
Ll9yZXN0b3JlU2Nyb2xsT2Zmc2V0KHVpLmluZGV4KTsgfSwKICAgICAgICAgfSk7CiAgICAgfSwK
KyAgICBfYnVpbGRQbGF0Zm9ybXNQb3B1cDogZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIEZJWE1F
OiBjYW4galF1ZXJ5IGRvIHRoaXM/CisgICAgICAgIGZ1bmN0aW9uIGdldFVSTFBhcmFtZXRlcihu
YW1lKSB7CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJKAorICAgICAgICAgICAgICAgIChS
ZWdFeHAobmFtZSArICc9JyArICcoLis/KSgmfCQpJykuZXhlYyhsb2NhdGlvbi5zZWFyY2gpfHxb
LG51bGxdKVsxXQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gRklYTUU6IGZpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gZG8gdGhpcy4KKyAgICAgICAgdmFyIHVy
bFBsYXRmb3JtID0gZ2V0VVJMUGFyYW1ldGVyKCdwbGF0Zm9ybScpOworICAgICAgICBpZiAodXJs
UGxhdGZvcm0pCisgICAgICAgICAgICBjb25maWcuc2V0UGxhdGZvcm0odXJsUGxhdGZvcm0pOwor
ICAgICAgICAKKyAgICAgICAgdmFyIHBsYXRmb3JtU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3BsYXRmb3JtLXBpY2tlcicpOworICAgICAgICAkKHBsYXRmb3JtU2VsZWN0KS5lbXB0
eSgpOworICAgICAgICB2YXIgY3VycmVudFBsYXRmb3JtSW5kZXggPSAwOworICAgICAgICBPYmpl
Y3Qua2V5cyhjb25maWcua1BsYXRmb3JtcykuZm9yRWFjaChmdW5jdGlvbihwbGF0Zm9ybU5hbWUp
IHsKKyAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRp
b24nKTsKKyAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBjb25maWcua1BsYXRmb3Jtc1tw
bGF0Zm9ybU5hbWVdLmxhYmVsOworICAgICAgICAgICAgaWYgKHBsYXRmb3JtTmFtZSA9PSBjb25m
aWcua0N1cnJlbnRQbGF0Zm9ybSkKKyAgICAgICAgICAgICAgICBjdXJyZW50UGxhdGZvcm1JbmRl
eCA9IHBsYXRmb3JtU2VsZWN0LmNoaWxkTm9kZXMubGVuZ3RoOworICAgICAgICAgICAgcGxhdGZv
cm1TZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAg
ICAgICBwbGF0Zm9ybVNlbGVjdC5zZWxlY3RlZEluZGV4ID0gY3VycmVudFBsYXRmb3JtSW5kZXg7
CisgICAgfSwKICAgICBfc2F2ZVNjcm9sbE9mZnNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgIHZh
ciB0YWJJbmRleCA9IHRoaXMuX3RhYnMudGFicygnb3B0aW9uJywgJ3NlbGVjdGVkJyk7CiAgICAg
ICAgIHRoaXMuX3RhYkluZGV4VG9TYXZlZFNjcm9sbE9mZnNldFt0YWJJbmRleF0gPSBkb2N1bWVu
dC5ib2R5LnNjcm9sbFRvcDsKQEAgLTEzMSw2ICsxNTgsNyBAQCB1aS5vbmViYXIgPSBiYXNlLmV4
dGVuZHMoJ2RpdicsIHsKICAgICB7CiAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3Jl
KHRoaXMsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CiAgICAgICAgIHRoaXMuX3NldHVwSGlz
dG9yeUhhbmRsZXJzKCk7CisgICAgICAgIHRoaXMuX2J1aWxkUGxhdGZvcm1zUG9wdXAoKTsKICAg
ICB9LAogICAgIHRhYk5hbWVkOiBmdW5jdGlvbih0YWJOYW1lKQogICAgIHsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19o
dG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpL2ZhaWx1cmVzLmpzIGIvVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVz
L3NjcmlwdHMvdWkvZmFpbHVyZXMuanMKaW5kZXggMmM1M2JmYzFiMDAxZWNmMDFlZDQ3ZDNmODIz
YThjMWFlNWJiNGNkYi4uYmJjMWY1ODE1N2FhOTFiYmVlZDY3OWZkNWRkMGIwZWU0NzE0YjQwNSAx
MDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkvZmFpbHVyZXMuanMKKysrIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkvZmFpbHVyZXMuanMKQEAgLTMzLDcgKzMzLDggQEAg
dmFyIGtCdWlsZGluZ1Jlc3VsdCA9ICdCVUlMRElORyc7CiB1aS5mYWlsdXJlcy5CdWlsZGVyID0g
YmFzZS5leHRlbmRzKCdhJywgewogICAgIGluaXQ6IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBmYWls
dXJlcykKICAgICB7Ci0gICAgICAgIHZhciBjb25maWd1cmF0aW9uID0gY29uZmlnLmtCdWlsZGVy
c1tidWlsZGVyTmFtZV07CisgICAgICAgIHZhciBwbGF0Zm9ybUJ1aWxkZXJzID0gY29uZmlnLmtQ
bGF0Zm9ybXNbY29uZmlnLmtDdXJyZW50UGxhdGZvcm1dLmJ1aWxkZXJzOworICAgICAgICB2YXIg
Y29uZmlndXJhdGlvbiA9IHBsYXRmb3JtQnVpbGRlcnNbYnVpbGRlck5hbWVdOwogICAgICAgICBp
ZiAoY29uZmlndXJhdGlvbikgewogICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24udmVyc2lv
bikKICAgICAgICAgICAgICAgICB0aGlzLl9hZGRTcGFuKCd2ZXJzaW9uJywgY29uZmlndXJhdGlv
bi52ZXJzaW9uKTsKQEAgLTEwOCw3ICsxMDksNyBAQCB1aS5mYWlsdXJlcy5GYWlsdXJlR3JpZCA9
IGJhc2UuZXh0ZW5kcygndGFibGUnLCB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
T2JqZWN0LmtleXMocmVzdWx0c0J5QnVpbGRlcikuZm9yRWFjaChmdW5jdGlvbihidWlsZGVyTmFt
ZSkgewotICAgICAgICAgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSBjb25maWcua0J1aWxkZXJzW2J1
aWxkZXJOYW1lXTsKKyAgICAgICAgICAgIHZhciBjb25maWd1cmF0aW9uID0gY29uZmlnLmtQbGF0
Zm9ybXNbY29uZmlnLmtDdXJyZW50UGxhdGZvcm1dLmJ1aWxkZXJzW2J1aWxkZXJOYW1lXTsKICAg
ICAgICAgICAgIGlmICghY29uZmlndXJhdGlvbikKICAgICAgICAgICAgICAgICB0aHJvdyAiVW5r
bm93biBidWlsZGVyIG5hbWU6ICIgKyBidWlsZGVyTmFtZTsKICAgICAgICAgICAgIHZhciByb3cg
PSB0aGlzLl9yb3dCeVJlc3VsdChyZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXS5hY3R1YWwp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3N0eWxlcy9vbmViYXIuY3NzIGIvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVz
dEZhaWx1cmVzL3N0eWxlcy9vbmViYXIuY3NzCmluZGV4IGUwZGRjZTIyNjliNThlMWI2MmY4YWEz
NTkzN2M2ODJhM2U2ODBlMjIuLjJjY2JkYjc0OWEwYmUxYzlhM2E1MDYyYmZlNGNkY2NhNjAzOGFm
OTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zdHlsZXMvb25lYmFyLmNzcworKysgYi9U
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9UZXN0RmFpbHVyZXMvc3R5bGVzL29uZWJhci5jc3MKQEAgLTQxLDYgKzQxLDEyIEBACiAgICAg
Ym9yZGVyLXJhZGl1czogMHB4OwogfQogCisjb25lYmFyICNwbGF0Zm9ybS1waWNrZXIgeworICBm
bG9hdDogcmlnaHQ7CisgIG1hcmdpbjogOHB4OworICBmb250LXNpemU6IGxhcmdlcjsKK30KKwog
I3VuZXhwZWN0ZWQgewogICAgIG1pbi1oZWlnaHQ6IDU1MHB4OwogfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9idWlsZGVycy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnMucHkKaW5kZXggMTI0
OWJiNTQzZjQ2Y2U2ZDE3YmU4MWY5YmVjMDVjMTBlNzRiYjAzNi4uODkxMDNjOTc3NDQ1YTAxYTcx
ZDg0ZmU5MzZiOTJiNzY1NWRlMzYyNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9idWlsZGVycy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5CkBAIC01MywxMyArNTMsMTYgQEAgX2V4
YWN0X21hdGNoZXMgPSB7CiAgICAgIldlYmtpdCBNYWMxMC43IjogeyJwb3J0X25hbWUiOiAiY2hy
b21pdW0tbWFjLWxpb24iLCAic3BlY2lmaWVycyI6IHNldChbImxpb24iXSl9LAogCiAgICAgIyBU
aGVzZSBidWlsZGVycyBhcmUgb24gYnVpbGQud2Via2l0Lm9yZy4KKyAgICAiQXBwbGUgTGlvbiBS
ZWxlYXNlIFdLMSAoVGVzdHMpIiA6IHsicG9ydF9uYW1lIjogIm1hYy1saW9uIiwgInNwZWNpZmll
cnMiOiBzZXQoWyJsaW9uIl0pfSwKKyAgICAiQXBwbGUgTGlvbiBEZWJ1ZyBXSzEgKFRlc3RzKSIg
OiB7InBvcnRfbmFtZSI6ICJtYWMtbGlvbiIsICJzcGVjaWZpZXJzIjogc2V0KFsibGlvbiIsICJk
ZWJ1ZyJdKX0sCisgICAgIkFwcGxlIExpb24gUmVsZWFzZSBXSzIgKFRlc3RzKSIgOiB7InBvcnRf
bmFtZSI6ICJtYWMtbGlvbiIsICJzcGVjaWZpZXJzIjogc2V0KFsibGlvbiIsICJ3azIiXSl9LAor
ICAgICJBcHBsZSBMaW9uIERlYnVnIFdLMiAoVGVzdHMpIiA6IHsicG9ydF9uYW1lIjogIm1hYy1s
aW9uIiwgInNwZWNpZmllcnMiOiBzZXQoWyJsaW9uIiwgIndrMiIsICJkZWJ1ZyJdKX0sCisKKyAg
ICAiQXBwbGUgV2luIFhQIERlYnVnIChUZXN0cykiIDogeyJwb3J0X25hbWUiOiAid2luLXhwIiwg
InNwZWNpZmllcnMiOiBzZXQoWyJ3aW4iLCAiZGVidWciXSl9LAorICAgICJBcHBsZSBXaW4gNyBS
ZWxlYXNlIChUZXN0cykiIDogeyJwb3J0X25hbWUiOiAid2luLXhwIiwgInNwZWNpZmllcnMiOiBz
ZXQoWyJ3aW4iXSl9LAorCiAgICAgIkdUSyBMaW51eCAzMi1iaXQgRGVidWciOiB7InBvcnRfbmFt
ZSI6ICJndGsiLCAic3BlY2lmaWVycyI6IHNldChbImd0ayJdKX0sCi0gICAgIkxlb3BhcmQgSW50
ZWwgRGVidWcgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1sZW9wYXJkIiwgInNwZWNpZmll
cnMiOiBzZXQoWyJsZW9wYXJkIl0pfSwKLSAgICAiU25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAo
VGVzdHMpIjogeyJwb3J0X25hbWUiOiAibWFjLXNub3dsZW9wYXJkIiwgInNwZWNpZmllcnMiOiBz
ZXQoWyJzbm93bGVvcGFyZCJdKX0sCi0gICAgIlNub3dMZW9wYXJkIEludGVsIFJlbGVhc2UgKFdl
YktpdDIgVGVzdHMpIjogeyJwb3J0X25hbWUiOiAibWFjLXNub3dsZW9wYXJkLXdrMiIsICJzcGVj
aWZpZXJzIjogc2V0KFsid2syIl0pfSwKICAgICAiUXQgTGludXggUmVsZWFzZSI6IHsicG9ydF9u
YW1lIjogInF0LWxpbnV4IiwgInNwZWNpZmllcnMiOiBzZXQoWyJ3aW4iLCAibGludXgiLCAibWFj
Il0pfSwKLSAgICAiV2luZG93cyBYUCBEZWJ1ZyAoVGVzdHMpIjogeyJwb3J0X25hbWUiOiAid2lu
LXhwIiwgInNwZWNpZmllcnMiOiBzZXQoWyJ3aW4iXSl9LAotICAgICJXaW5kb3dzIDcgUmVsZWFz
ZSAoV2ViS2l0MiBUZXN0cykiOiB7InBvcnRfbmFtZSI6ICJ3aW4tZnV0dXJlLXdrMiIsICJzcGVj
aWZpZXJzIjogc2V0KFsid2syIl0pfSwKICAgICAiRUZMIExpbnV4IFJlbGVhc2UiOiB7InBvcnRf
bmFtZSI6ICJlZmwiLCAic3BlY2lmaWVycyI6IHNldChbImVmbCJdKX0sCiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147951</attachid>
            <date>2012-06-15 23:12:56 -0700</date>
            <delta_ts>2012-06-16 00:51:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84642-20120615231255.patch</filename>
            <type>text/plain</type>
            <size>46045</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTU1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDc1OGE5ZmM1MjU0NTIwMTFhMTYwNGMxYWMxYTVkY2U3
Yjc2NzBjMy4uYjYyZWJlNmU2YzNjY2U1YzY3OWUxMzRjZWI0YjE4NTQ5NTg4ODE3ZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUw
IEBACisyMDEyLTA2LTE1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgZ2FyZGVuLW8tbWF0aWMgd29yayBmb3IgdGhlIEFwcGxlIE1hYyBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDY0Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
TWFrZSBnYXJkZW4tby1tYXRpYyB3b3JrIGZvciB0aGUgQXBwbGUsIHdlYmtpdC5vcmctaG9zdGVk
IGJ1aWxkZXJzIGFuZCB0ZXN0ZXJzLiBUaGlzIGludm9sdmVkCisgICAgICAgIGVkdWNhdGluZyB0
aGUgc2NyaXB0cyBpbiB2YXJpb3VzIHdheXM6CisgICAgICAgICogV3JhcCB1cCBwbGF0Zm9ybS1y
ZWxhdGVkIGRpZmZlcmVuY2VzIGluIGNvbmZpZy5rUGxhdGZvcm1zW10KKyAgICAgICAgKiBBZGQg
YSA8c2VsZWN0PiB0byBzd2l0Y2ggYmV0d2VlbiBwbGF0Zm9ybXMsIGFuZCBzdXBwb3J0IGEgdXJs
IHBhcmFtZXRlciwgP3BsYXRmb3JtPWNocm9taXVtL2FwcGxlCisgICAgICAgICogVGhlIHdlYmtp
dC5vcmcgYm90cyBkb24ndCBhY2N1bXVsYXRlIHRlc3QgcmVzdWx0cyBpbnRvIGEgc2luZ2xlIGRp
cmVjdG9yeSBsaWtlIHRoZSBjaHJvbWl1bS5vcmcgb25lcyBkbywKKyAgICAgICAgICBzbyBhZGQg
Y29uZmlnLmhhdmVCdWlsZGVyQWNjdW11bGF0ZWRSZXN1bHRzIGFuZCBsb2dpYyBpbiBmZXRjaFJl
c3VsdHNCeUJ1aWxkZXIoKSB0byBmaW5kIHRoZSBtb3N0CisgICAgICAgICAgcmVjZW50IGJ1aWxk
IHdpdGggdmFsaWQgcmVzdWx0cy4KKyAgICAgICAgKiBUaGUgd2Via2l0Lm9yZyBib3RzIG9mdGVu
IGdlbmVyYXRlIHJlc3VsdHMgZGlyZWN0b3JpZXMgd2l0aCBubyBsYXlvdXQgdGVzdCBkYXRhIChl
LmcuIHdoZW4gdGVzdGVycworICAgICAgICAgIHRyeSB0byB0ZXN0IGEgYnVpbGQgdGhhdCBoYXMg
YWxyZWFkeSBiZWVuIGRlbGV0ZWQpLiBNYWtlIHdhbGtIaXN0b3J5KCkgbW9yZSByb2J1c3QgaGVy
ZS4KKyAgICAgICAgKiB3ZWJraXQub3JnIHVzZXMgZGlmZmVyZW50bHkgbmFtZWQgdGVzdCByZXN1
bHQgZGlyZWN0b3JpZXMsIHRoYXQgaW5jbHVkZSB0aGUgU1ZOIHJldmlzaW9uIGFzCisgICAgICAg
ICAgd2VsbCBhcyB0aGUgYnVpbGQgbnVtYmVyLiBUaGF0IGZvcmNlcyB1cyB0byBmZXRjaCBtb3Jl
IGJ1aWxkIGluZm8gYmVmb3JlIHdlIGNhbiBnZXQgdGhlCisgICAgICAgICAgcmVzdWx0IGRpcmVj
dG9yeSBVUkwuCisgICAgICAgICogY2hyb21pdW0ub3JnIHNlcnZlcyByYXcgZGlyZWN0b3J5IGxp
c3RpbmdzIGZvciBhIGJ1aWxkZXIncyByZXN1bHRzIGRpcmVjdG9yaWVzLiB3ZWJraXQub3JnIHNl
cnZlcworICAgICAgICAgIHRob3NlIHdpdGggVHdpc3RlZCwgc28gcmF0aGVyIHRoYW4gc2NyYXBl
IGRpcmVjdG9yeSBsaXN0aW5ncywgd2UgdXNlIGJ1aWxkYm90IEpTT04gdG8gZmluZCByZXN1bHRz
CisgICAgICAgICAgZGlycy4KKyAgICAgICAgKiBWYXJpb3VzIFVSTHMgZGlmZmVyIGJldHdlZW4g
d2Via2l0Lm9yZyBhbmQgY2hyb21pdW0ub3JnCisgICAgICAgICogQmV0dGVyIFVJIGZvciB0aGUg
ZmFpbHVyZXMgaW5mbywgc28gdGhhdCBzb21lIGluZm8gaXMgdmlzaWJsZSBldmVuIHdoZW4gbm90
IGhvdmVyZWQuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvZ2FyZGVuLW8tbWF0aWMuaHRtbDoKKyAg
ICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9MYXlvdXRUZXN0UmVzdWx0c0xvYWRlci5qczoKKyAg
ICAgICAgKExheW91dFRlc3RSZXN1bHRzTG9hZGVyLnByb3RvdHlwZS5zZXQgX2ZldGNoQW5kUGFy
c2VOUldUUmVzdWx0cyk6CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvYnVpbGRlcnMuanM6
CisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvY29uZmlnLmpzOgorICAgICAgICAqIEJ1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWls
dXJlcy9zY3JpcHRzL21vZGVsLmpzOgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL25ldC5q
czoKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRzLmpzOgorICAgICAgICAqIEJ1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RG
YWlsdXJlcy9zY3JpcHRzL3Jlc3VsdHNfdW5pdHRlc3RzLmpzOgorICAgICAgICAqIEJ1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJl
cy9zY3JpcHRzL3N1bW1hcnktbW9jay5qczoKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91
aS5qczoKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS9mYWlsdXJlcy5qczoKKyAgICAg
ICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS9ub3RpZmljYXRpb25zX3VuaXR0ZXN0cy5qczoKKyAg
ICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS9wZXJmLmpzOgorICAgICAgICAqIEJ1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJl
cy9zY3JpcHRzL3VpX3VuaXR0ZXN0cy5qczoKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc3R5bGVzL25v
dGlmaWNhdGlvbnMuY3NzOgorICAgICAgICAob2wubm90aWZpY2F0aW9ucz5saSB0YWJsZS5mYWls
dXJlcyk6CisgICAgICAgIChvbC5ub3RpZmljYXRpb25zPmxpOmhvdmVyIHRhYmxlLmZhaWx1cmVz
KToKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc3R5bGVzL29uZWJhci5jc3M6CisgICAgICAgICgjb25l
YmFyICNwbGF0Zm9ybS1waWNrZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYnVpbGRlcnMucHk6CisKIDIwMTItMDYtMTIgIEx1Y2FzIEZvcnNjaGxlciAg
PGxmb3JzY2hsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdyYXAgYm90IHR5cGVzIGluc2lkZSAo
KS4KZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9nYXJkZW4tby1tYXRpYy5odG1sIGIvVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
VGVzdEZhaWx1cmVzL2dhcmRlbi1vLW1hdGljLmh0bWwKaW5kZXggODNiNmJiNTFkYzc1MGE5MWUx
N2I1ZmQ4MGZlMTQ1MWY1ZDc4YzMxNS4uZWYzNzcyY2YxYmJkMDcyMTE2YWI2MWI4YmI0MmJlZDFi
NmEzMWUwMiAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL2dhcmRlbi1vLW1hdGljLmh0bWwK
KysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvVGVzdEZhaWx1cmVzL2dhcmRlbi1vLW1hdGljLmh0bWwKQEAgLTMzLDkgKzMzLDkg
QEAgSmFtZXMsIGEgd2ViIGRldmVsb3BlciBmcm9tIEJpcm1pbmdoYW0sIFVLLgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS1zcmMgJ3NlbGYnICd1bnNhZmUt
aW5saW5lJyBmaWxlOiBodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20gaHR0cDovL2ZvbnRzLmdv
b2dsZWFwaXMuY29tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b250LXNyYyBodHRwOi8vdGhlbWVzLmdvb2dsZXVzZXJjb250ZW50LmNvbTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLXNyYyBodHRwczovL2FqYXguZ29vZ2xl
YXBpcy5jb20gaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZyBmaWxlOjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEtc3JjIGh0dHA6Ly9idWlsZC5jaHJvbWl1
bS5vcmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLXNy
YyBodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnIGh0dHA6Ly90ZXN0LXJlc3VsdHMuYXBwc3BvdC5j
b207Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Qtc3Jj
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcgaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZyBodHRwOi8v
MTI3LjAuMC4xOjgxMjciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZWRpYS1zcmMgaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZyBodHRwOi8vYnVpbGQud2Via2l0
Lm9yZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtc3Jj
IGh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcgaHR0cDovL2J1aWxkLndlYmtpdC5vcmcgaHR0cDov
L3Rlc3QtcmVzdWx0cy5hcHBzcG90LmNvbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29ubmVjdC1zcmMgaHR0cDovL3RyYWMud2Via2l0Lm9yZyBodHRwOi8vYnVp
bGQuY2hyb21pdW0ub3JnIGh0dHA6Ly9idWlsZC53ZWJraXQub3JnIGh0dHA6Ly8xMjcuMC4wLjE6
ODEyNyI+CiA8dGl0bGU+R2FyZGVuLU8tTWF0aWM8L3RpdGxlPgogPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1Nh
bnM6NDAwLDcwMCI+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vYWpheC5n
b29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5dWkvMS44LjE1L3RoZW1lcy9iYXNlL2pxdWVy
eS11aS5jc3MiPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Vi
a2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvTGF5b3V0VGVz
dFJlc3VsdHNMb2FkZXIuanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQu
b3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9MYXlvdXRUZXN0UmVz
dWx0c0xvYWRlci5qcwppbmRleCBmMjRhNzAyZWM1NTMwYzZjMjYwOWE2N2VlMDJhMTE2ZGQ5MmNm
NzlhLi45OGQ5ZjdhZjUyYzk4ZjkyOWNiODI1YjY5YmRkMGNlYTAwNmRjY2JhIDEwMDY0NAotLS0g
YS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9MYXlvdXRUZXN0UmVzdWx0c0xvYWRlci5qcworKysg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9MYXlvdXRUZXN0UmVzdWx0c0xvYWRlci5qcwpAQCAt
NjQsNiArNjQsNyBAQCBMYXlvdXRUZXN0UmVzdWx0c0xvYWRlci5wcm90b3R5cGUgPSB7CiAgICAg
fSwKIAogICAgIF9mZXRjaEFuZFBhcnNlTlJXVFJlc3VsdHM6IGZ1bmN0aW9uKGJ1aWxkTmFtZSwg
c3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7CisgICAgICAgIHdpbmRvdy5jb25zb2xl
LmxvZygnZmV0Y2hpbmcgTlJXVCByZXN1bHRzICcsIHRoaXMuX2J1aWxkZXIucmVzdWx0c0RpcmVj
dG9yeVVSTChidWlsZE5hbWUpICsgJ2Z1bGxfcmVzdWx0cy5qc29uJykKICAgICAgICAgZ2V0UmVz
b3VyY2UodGhpcy5fYnVpbGRlci5yZXN1bHRzRGlyZWN0b3J5VVJMKGJ1aWxkTmFtZSkgKyAnZnVs
bF9yZXN1bHRzLmpzb24nLCBmdW5jdGlvbih4aHIpIHsKICAgICAgICAgICAgIHN1Y2Nlc3NDYWxs
YmFjaygobmV3IE5SV1RSZXN1bHRzUGFyc2VyKCkpLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTsK
ICAgICAgICAgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndl
YmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL2J1aWxkZXJz
LmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvYnVpbGRlcnMuanMKaW5kZXggOWVkMGQ1NDJi
MTA3N2NhOGUwNDU1OTlmNjRmZmE1MzZjYTBmMDcwZC4uMDY2ZjUyNTY0YTNhZDcyNmJlYzdmZmZi
MjE3ZDE5MzBlMThlMjE1MiAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvYnVp
bGRlcnMuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvYnVpbGRlcnMuanMKQEAgLTI3
LDggKzI3LDYgQEAgdmFyIGJ1aWxkZXJzID0gYnVpbGRlcnMgfHwge307CiAKIChmdW5jdGlvbigp
IHsKIAotdmFyIGtDaHJvbWl1bUJ1aWxkQm90VVJMID0gJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5v
cmcvcC9jaHJvbWl1bS53ZWJraXQnOwotCiB2YXIga1VwZGF0ZVN0ZXBOYW1lID0gJ3VwZGF0ZSc7
CiB2YXIga1VwZGF0ZVNjcmlwdHNTdGVwTmFtZSA9ICd1cGRhdGVfc2NyaXB0cyc7CiB2YXIga0Nv
bXBpbGVTdGVwTmFtZSA9ICdjb21waWxlJzsKQEAgLTM2LDkgKzM0LDE5IEBAIHZhciBrV2ViS2l0
VGVzdHNTdGVwTmFtZSA9ICd3ZWJraXRfdGVzdHMnOwogCiB2YXIga0NyYXNoZWRPckh1bmdPdXRw
dXRNYXJrZXIgPSAnY3Jhc2hlZCBvciBodW5nJzsKIAotZnVuY3Rpb24gdXJsRm9yQnVpbGRJbmZv
KGJ1aWxkZXJOYW1lLCBidWlsZE51bWJlcikKK2Z1bmN0aW9uIGJ1aWxkQm90VVJMKHBsYXRmb3Jt
KQogewotICAgIHJldHVybiBrQ2hyb21pdW1CdWlsZEJvdFVSTCArICcvanNvbi9idWlsZGVycy8n
ICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkZXJOYW1lKSArICcvYnVpbGRzLycgKyBlbmNvZGVV
UklDb21wb25lbnQoYnVpbGROdW1iZXIpOworICAgIHJldHVybiBjb25maWcua1BsYXRmb3Jtc1tw
bGF0Zm9ybV0uYnVpbGRDb25zb2xlVVJMOworfQorCitmdW5jdGlvbiB1cmxGb3JCdWlsZGVySW5m
byhwbGF0Zm9ybSwgYnVpbGRlck5hbWUpCit7CisgICAgcmV0dXJuIGJ1aWxkQm90VVJMKHBsYXRm
b3JtKSArICcvanNvbi9idWlsZGVycy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkZXJOYW1l
KSArICcvJzsKK30KKworZnVuY3Rpb24gdXJsRm9yQnVpbGRJbmZvKHBsYXRmb3JtLCBidWlsZGVy
TmFtZSwgYnVpbGROdW1iZXIpCit7CisgICAgcmV0dXJuIGJ1aWxkQm90VVJMKHBsYXRmb3JtKSAr
ICcvanNvbi9idWlsZGVycy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ1aWxkZXJOYW1lKSArICcv
YnVpbGRzLycgKyBlbmNvZGVVUklDb21wb25lbnQoYnVpbGROdW1iZXIpOwogfQogCiBmdW5jdGlv
biBkaWRGYWlsKHN0ZXApCkBAIC02OSw5ICs3NywyNCBAQCBmdW5jdGlvbiBtb3N0UmVjZW50Q29t
cGxldGVkQnVpbGROdW1iZXIoaW5kaXZpZHVhbEJ1aWxkZXJTdGF0dXMpCiAgICAgcmV0dXJuIG51
bGw7CiB9CiAKKy8vIEZJWE1FOiBleHBvcnQsIGNhbGxlZCBieSByZXN1bHRzLgorZnVuY3Rpb24g
aW5kZXhPZk1vc3RSZWNlbnRDb21wbGV0ZWRCdWlsZChpbmRpdmlkdWFsQnVpbGRlclN0YXR1cykK
K3sKKyAgICBpZiAoIWluZGl2aWR1YWxCdWlsZGVyU3RhdHVzKQorICAgICAgICByZXR1cm4gLTE7
CisKKyAgICBmb3IgKHZhciBpID0gaW5kaXZpZHVhbEJ1aWxkZXJTdGF0dXMuY2FjaGVkQnVpbGRz
Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHZhciBidWlsZE51bWJlciA9IGlu
ZGl2aWR1YWxCdWlsZGVyU3RhdHVzLmNhY2hlZEJ1aWxkc1tpXTsKKyAgICAgICAgaWYgKGluZGl2
aWR1YWxCdWlsZGVyU3RhdHVzLmN1cnJlbnRCdWlsZHMuaW5kZXhPZihidWlsZE51bWJlcikgPT0g
LTEpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisK
IHZhciBnX2J1aWxkSW5mb0NhY2hlID0gbmV3IGJhc2UuQXN5bmNocm9ub3VzQ2FjaGUoZnVuY3Rp
b24oa2V5LCBjYWxsYmFjaykgewogICAgIHZhciBleHBsb2RlZEtleSA9IGtleS5zcGxpdCgnXG4n
KTsKLSAgICBuZXQuZ2V0KHVybEZvckJ1aWxkSW5mbyhleHBsb2RlZEtleVswXSwgZXhwbG9kZWRL
ZXlbMV0pLCBjYWxsYmFjayk7CisgICAgbmV0LmdldCh1cmxGb3JCdWlsZEluZm8oZXhwbG9kZWRL
ZXlbMF0sIGV4cGxvZGVkS2V5WzFdLCBleHBsb2RlZEtleVsyXSksIGNhbGxiYWNrKTsKIH0pOwog
CiBidWlsZGVycy5jbGVhckJ1aWxkSW5mb0NhY2hlID0gZnVuY3Rpb24oKQpAQCAtNzksOSArMTAy
LDkgQEAgYnVpbGRlcnMuY2xlYXJCdWlsZEluZm9DYWNoZSA9IGZ1bmN0aW9uKCkKICAgICBnX2J1
aWxkSW5mb0NhY2hlLmNsZWFyKCk7CiB9CiAKLWZ1bmN0aW9uIGZldGNoTW9zdFJlY2VudEJ1aWxk
SW5mb0J5QnVpbGRlcihjYWxsYmFjaykKK2Z1bmN0aW9uIGZldGNoTW9zdFJlY2VudEJ1aWxkSW5m
b0J5QnVpbGRlcihwbGF0Zm9ybSwgY2FsbGJhY2spCiB7Ci0gICAgbmV0LmdldChrQ2hyb21pdW1C
dWlsZEJvdFVSTCArICcvanNvbi9idWlsZGVycycsIGZ1bmN0aW9uKGJ1aWxkZXJTdGF0dXMpIHsK
KyAgICBuZXQuZ2V0KGJ1aWxkQm90VVJMKHBsYXRmb3JtKSArICcvanNvbi9idWlsZGVycycsIGZ1
bmN0aW9uKGJ1aWxkZXJTdGF0dXMpIHsKICAgICAgICAgdmFyIGJ1aWxkSW5mb0J5QnVpbGRlciA9
IHt9OwogICAgICAgICB2YXIgYnVpbGRlck5hbWVzID0gT2JqZWN0LmtleXMoYnVpbGRlclN0YXR1
cyk7CiAgICAgICAgIHZhciByZXF1ZXN0VHJhY2tlciA9IG5ldyBiYXNlLlJlcXVlc3RUcmFja2Vy
KGJ1aWxkZXJOYW1lcy5sZW5ndGgsIGNhbGxiYWNrLCBbYnVpbGRJbmZvQnlCdWlsZGVyXSk7CkBA
IC0xMDEsNyArMTI0LDcgQEAgZnVuY3Rpb24gZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWls
ZGVyKGNhbGxiYWNrKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgZ19idWlsZEluZm9DYWNoZS5nZXQoYnVpbGRlck5hbWUgKyAnXG4nICsgYnVp
bGROdW1iZXIsIGZ1bmN0aW9uKGJ1aWxkSW5mbykgeworICAgICAgICAgICAgZ19idWlsZEluZm9D
YWNoZS5nZXQocGxhdGZvcm0gKyAnXG4nICsgYnVpbGRlck5hbWUgKyAnXG4nICsgYnVpbGROdW1i
ZXIsIGZ1bmN0aW9uKGJ1aWxkSW5mbykgewogICAgICAgICAgICAgICAgIGJ1aWxkSW5mb0J5QnVp
bGRlcltidWlsZGVyTmFtZV0gPSBidWlsZEluZm87CiAgICAgICAgICAgICAgICAgcmVxdWVzdFRy
YWNrZXIucmVxdWVzdENvbXBsZXRlKCk7CiAgICAgICAgICAgICB9KTsKQEAgLTEwOSw5ICsxMzIs
NTAgQEAgZnVuY3Rpb24gZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVyKGNhbGxiYWNr
KQogICAgIH0pOwogfQogCitidWlsZGVycy5idWlsZGVySW5mbyA9IGZ1bmN0aW9uKHBsYXRmb3Jt
LCBidWlsZGVyTmFtZSwgY2FsbGJhY2spCit7CisgICAgdmFyIGJ1aWxkZXJJbmZvVVJMID0gdXJs
Rm9yQnVpbGRlckluZm8ocGxhdGZvcm0sIGJ1aWxkZXJOYW1lKTsKKyAgICBuZXQuZ2V0KGJ1aWxk
ZXJJbmZvVVJMLCBmdW5jdGlvbihidWlsZGVySW5mbykgeworICAgICAgICBjYWxsYmFjayhidWls
ZGVySW5mbyk7CisgICAgfSk7Cit9OworCitidWlsZGVycy5jYWNoZWRCdWlsZEluZm9zID0gZnVu
Y3Rpb24ocGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgYnVpbGRl
ckluZm9VUkwgPSB1cmxGb3JCdWlsZGVySW5mbyhwbGF0Zm9ybSwgYnVpbGRlck5hbWUpOworICAg
IG5ldC5nZXQoYnVpbGRlckluZm9VUkwsIGZ1bmN0aW9uKGJ1aWxkZXJJbmZvKSB7CisgICAgICAg
IHZhciBzZWxlY3RVUkwgPSB1cmxGb3JCdWlsZGVySW5mbyhwbGF0Zm9ybSwgYnVpbGRlck5hbWUp
ICsgJ2J1aWxkcyc7CisgICAgICAgIHZhciBmaXJzdCA9IHRydWU7CisgICAgICAgIAorICAgICAg
ICAvLyBGSVhNRTogbGltaXQgdG8gc29tZSByZWFzb25hYmxlIG51bWJlcj8KKyAgICAgICAgYnVp
bGRlckluZm8uY2FjaGVkQnVpbGRzLmZvckVhY2goZnVuY3Rpb24oYnVpbGROdW1iZXIpIHsKKyAg
ICAgICAgICAgIHNlbGVjdFVSTCArPSAoZmlyc3QgPyAnPycgOiAnJicpICsgJ3NlbGVjdD0nICsg
YnVpbGROdW1iZXI7CisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICB9KTsKKwor
ICAgICAgICBuZXQuZ2V0KHNlbGVjdFVSTCwgZnVuY3Rpb24oY2FjaGVkQnVpbGRzSW5mbykgewor
ICAgICAgICAgICAgY2FsbGJhY2soY2FjaGVkQnVpbGRzSW5mbyk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCitidWlsZGVycy5yZWNlbnRCdWlsZEluZm9zID0gZnVuY3Rpb24oY2FsbGJhY2sp
Cit7CisgICAgZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVyKGNvbmZpZy5jdXJyZW50
UGxhdGZvcm0sIGZ1bmN0aW9uKGJ1aWxkSW5mb0J5QnVpbGRlcikgeworICAgICAgICB2YXIgYnVp
bGRJbmZvID0ge307CisgICAgICAgICQuZWFjaChidWlsZEluZm9CeUJ1aWxkZXIsIGZ1bmN0aW9u
KGJ1aWxkZXJOYW1lLCB0aGlzQnVpbGRJbmZvKSB7CisgICAgICAgICAgICBpZiAoIWJ1aWxkSW5m
bykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1
aWxkSW5mb1tidWlsZGVyTmFtZV0gPSB0aGlzQnVpbGRJbmZvOworICAgICAgICB9KTsKKyAgICAg
ICAgY2FsbGJhY2soYnVpbGRJbmZvKTsKKyAgICB9KTsKK307CisKIGJ1aWxkZXJzLmJ1aWxkZXJz
RmFpbGluZ05vbkxheW91dFRlc3RzID0gZnVuY3Rpb24oY2FsbGJhY2spCiB7Ci0gICAgZmV0Y2hN
b3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVyKGZ1bmN0aW9uKGJ1aWxkSW5mb0J5QnVpbGRlcikg
eworICAgIGZldGNoTW9zdFJlY2VudEJ1aWxkSW5mb0J5QnVpbGRlcihjb25maWcuY3VycmVudFBs
YXRmb3JtLCBmdW5jdGlvbihidWlsZEluZm9CeUJ1aWxkZXIpIHsKICAgICAgICAgdmFyIGZhaWx1
cmVMaXN0ID0ge307CiAgICAgICAgICQuZWFjaChidWlsZEluZm9CeUJ1aWxkZXIsIGZ1bmN0aW9u
KGJ1aWxkZXJOYW1lLCBidWlsZEluZm8pIHsKICAgICAgICAgICAgIGlmICghYnVpbGRJbmZvKQpA
QCAtMTI2LDExICsxOTAsMTIgQEAgYnVpbGRlcnMuYnVpbGRlcnNGYWlsaW5nTm9uTGF5b3V0VGVz
dHMgPSBmdW5jdGlvbihjYWxsYmFjaykKIAogYnVpbGRlcnMucGVyZkJ1aWxkZXJzID0gZnVuY3Rp
b24oY2FsbGJhY2spCiB7Ci0gICAgZmV0Y2hNb3N0UmVjZW50QnVpbGRJbmZvQnlCdWlsZGVyKGZ1
bmN0aW9uKGJ1aWxkSW5mb0J5QnVpbGRlcikgeworICAgIGZldGNoTW9zdFJlY2VudEJ1aWxkSW5m
b0J5QnVpbGRlcihjb25maWcuY3VycmVudFBsYXRmb3JtLCBmdW5jdGlvbihidWlsZEluZm9CeUJ1
aWxkZXIpIHsKICAgICAgICAgdmFyIHBlcmZUZXN0TWFwID0ge307CiAgICAgICAgICQuZWFjaChi
dWlsZEluZm9CeUJ1aWxkZXIsIGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBidWlsZEluZm8pIHsKICAg
ICAgICAgICAgIGlmICghYnVpbGRJbmZvIHx8IGJ1aWxkZXJOYW1lLmluZGV4T2YoJ1BlcmYnKSA9
PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgIGJ1aWxkSW5mby5z
dGVwcy5mb3JFYWNoKGZ1bmN0aW9uKHN0ZXApIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SWYgdGhlIGNvbXBpbGUgaXMgYnJva2VuLCBncmFiIGFuIG9sZGVyIGJ1aWxkLgogICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBjb21waWxlL3VwZGF0ZSBpcyBicm9rZW4sIG5vIHN0ZXBzIHdpbGwg
aGF2ZSBhIHJlc3VsdHMgdXJsLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMv
Y29uZmlnLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvY29uZmlnLmpzCmluZGV4IDM5YWU3
MTM3MjgwNmM1MWQzZTgwYWYxMmMxODA4ZTJjOTc2NWYwMGMuLjA5MzI2NmExZDAwZmY1NTczNGYz
ZjA1YTNiYWQwZDg3NWZkZGJlODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRz
L2NvbmZpZy5qcworKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9jb25maWcuanMKQEAgLTI3
LDIxICsyNyw1OSBAQCB2YXIgY29uZmlnID0gY29uZmlnIHx8IHt9OwogCiAoZnVuY3Rpb24oKSB7
CiAKLWNvbmZpZy5rQnVpbGRlcnMgPSB7Ci0gICAgJ1dlYmtpdCBXaW4nOiB7dmVyc2lvbjogJ3hw
J30sCi0gICAgJ1dlYmtpdCBWaXN0YSc6IHt2ZXJzaW9uOiAndmlzdGEnfSwKLSAgICAnV2Via2l0
IFdpbjcnOiB7dmVyc2lvbjogJ3dpbjcnfSwKLSAgICAnV2Via2l0IFdpbiAoZGJnKSgxKSc6IHt2
ZXJzaW9uOiAneHAnLCBkZWJ1ZzogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBXaW4gKGRiZykoMiknOiB7
dmVyc2lvbjogJ3hwJywgZGVidWc6IHRydWV9LAotICAgICdXZWJraXQgTGludXgnOiB7dmVyc2lv
bjogJ2x1Y2lkJywgaXM2NGJpdDogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBMaW51eCAzMic6IHt2ZXJz
aW9uOiAnbHVjaWQnfSwKLSAgICAnV2Via2l0IExpbnV4IChkYmcpJzoge3ZlcnNpb246ICdsdWNp
ZCcsIGlzNjRiaXQ6IHRydWUsIGRlYnVnOiB0cnVlfSwKLSAgICAnV2Via2l0IE1hYzEwLjUnOiB7
dmVyc2lvbjogJ2xlb3BhcmQnfSwKLSAgICAnV2Via2l0IE1hYzEwLjUgKGRiZykoMSknOiB7dmVy
c2lvbjogJ2xlb3BhcmQnLCBkZWJ1ZzogdHJ1ZX0sCi0gICAgJ1dlYmtpdCBNYWMxMC41IChkYmcp
KDIpJzoge3ZlcnNpb246ICdsZW9wYXJkJywgZGVidWc6IHRydWV9LAotICAgICdXZWJraXQgTWFj
MTAuNic6IHt2ZXJzaW9uOiAnc25vd2xlb3BhcmQnfSwKLSAgICAnV2Via2l0IE1hYzEwLjYgKGRi
ZyknOiB7dmVyc2lvbjogJ3Nub3dsZW9wYXJkJywgZGVidWc6IHRydWV9LAotICAgICdXZWJraXQg
TWFjMTAuNyc6IHt2ZXJzaW9uOiAnbGlvbid9LAorY29uZmlnLmtQbGF0Zm9ybXMgPSB7CisgICAg
J2FwcGxlJyA6IHsKKyAgICAgICAgbGFiZWwgOiAnQXBwbGUnLAorICAgICAgICBidWlsZENvbnNv
bGVVUkw6ICdodHRwOi8vYnVpbGQud2Via2l0Lm9yZycsCisgICAgICAgIGxheW91dFRlc3RSZXN1
bHRzVVJMOiAnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cycsCisgICAgICAgIHdhdGVy
ZmFsbFVSTDogJ2h0dHA6Ly9idWlsZC53ZWJraXQub3JnL3dhdGVyZmFsbCcsCisgICAgICAgIGJ1
aWxkZXJzOiB7CisgICAgICAgICAgICAnQXBwbGUgTGlvbiBSZWxlYXNlIFdLMSAoVGVzdHMpJyA6
IHt2ZXJzaW9uOiAnbGlvbicgfSwKKyAgICAgICAgICAgICdBcHBsZSBMaW9uIERlYnVnIFdLMSAo
VGVzdHMpJyA6IHt2ZXJzaW9uOiAnbGlvbicsIGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAgICdB
cHBsZSBMaW9uIFJlbGVhc2UgV0syIChUZXN0cyknIDoge3ZlcnNpb246ICdsaW9uJyB9LAorICAg
ICAgICAgICAgJ0FwcGxlIExpb24gRGVidWcgV0syIChUZXN0cyknIDoge3ZlcnNpb246ICdsaW9u
JywgZGVidWc6IHRydWV9LAorICAgICAgICAgICAgLy8gJ0FwcGxlIFdpbiBYUCBEZWJ1ZyAoVGVz
dHMpJyA6IHt2ZXJzaW9uOiAneHAnLGRlYnVnOiB0cnVlfSwKKyAgICAgICAgICAgIC8vICdBcHBs
ZSBXaW4gNyBSZWxlYXNlIChUZXN0cyknIDoge3ZlcnNpb246ICd3aW43J30sCisgICAgICAgIH0s
CisgICAgICAgIGhhdmVCdWlsZGVyQWNjdW11bGF0ZWRSZXN1bHRzIDogZmFsc2UsCisgICAgICAg
IHVzZURpcmVjdG9yeUxpc3RpbmdGb3JPbGRCdWlsZHM6IGZhbHNlLAorICAgICAgICByZXN1bHRz
RGlyZWN0b3J5TmFtZUZyb21CdWlsZGVyTmFtZTogZnVuY3Rpb24oYnVpbGRlck5hbWUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYnVpbGRlck5hbWUpOworICAgICAg
ICB9LAorICAgICAgICByZXN1bHRzRGlyZWN0b3J5Rm9yQnVpbGROdW1iZXI6IGZ1bmN0aW9uKGJ1
aWxkTnVtYmVyLCByZXZpc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBv
bmVudCgncicgKyByZXZpc2lvbiArICcgKCcgKyBidWlsZE51bWJlciArICcpJyk7CisgICAgICAg
IH0sCisgICAgfSwKKyAgICAnY2hyb21pdW0nIDogeworICAgICAgICBsYWJlbCA6ICdDaHJvbWl1
bScsCisgICAgICAgIGJ1aWxkQ29uc29sZVVSTDogJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcv
cC9jaHJvbWl1bS53ZWJraXQnLAorICAgICAgICBsYXlvdXRUZXN0UmVzdWx0c1VSTDogJ2h0dHA6
Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzJywKKyAg
ICAgICAgd2F0ZXJmYWxsVVJMOiAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9wL2Nocm9taXVt
LndlYmtpdC93YXRlcmZhbGwnLAorICAgICAgICBidWlsZGVyczogeworICAgICAgICAgICAgJ1dl
YmtpdCBXaW4nOiB7dmVyc2lvbjogJ3hwJ30sCisgICAgICAgICAgICAnV2Via2l0IFZpc3RhJzog
e3ZlcnNpb246ICd2aXN0YSd9LAorICAgICAgICAgICAgJ1dlYmtpdCBXaW43Jzoge3ZlcnNpb246
ICd3aW43J30sCisgICAgICAgICAgICAnV2Via2l0IFdpbiAoZGJnKSgxKSc6IHt2ZXJzaW9uOiAn
eHAnLCBkZWJ1ZzogdHJ1ZX0sCisgICAgICAgICAgICAnV2Via2l0IFdpbiAoZGJnKSgyKSc6IHt2
ZXJzaW9uOiAneHAnLCBkZWJ1ZzogdHJ1ZX0sCisgICAgICAgICAgICAnV2Via2l0IExpbnV4Jzog
e3ZlcnNpb246ICdsdWNpZCcsIGlzNjRiaXQ6IHRydWV9LAorICAgICAgICAgICAgJ1dlYmtpdCBM
aW51eCAzMic6IHt2ZXJzaW9uOiAnbHVjaWQnfSwKKyAgICAgICAgICAgICdXZWJraXQgTGludXgg
KGRiZyknOiB7dmVyc2lvbjogJ2x1Y2lkJywgaXM2NGJpdDogdHJ1ZSwgZGVidWc6IHRydWV9LAor
ICAgICAgICAgICAgJ1dlYmtpdCBNYWMxMC41Jzoge3ZlcnNpb246ICdsZW9wYXJkJ30sCisgICAg
ICAgICAgICAnV2Via2l0IE1hYzEwLjUgKGRiZykoMSknOiB7dmVyc2lvbjogJ2xlb3BhcmQnLCBk
ZWJ1ZzogdHJ1ZX0sCisgICAgICAgICAgICAnV2Via2l0IE1hYzEwLjUgKGRiZykoMiknOiB7dmVy
c2lvbjogJ2xlb3BhcmQnLCBkZWJ1ZzogdHJ1ZX0sCisgICAgICAgICAgICAnV2Via2l0IE1hYzEw
LjYnOiB7dmVyc2lvbjogJ3Nub3dsZW9wYXJkJ30sCisgICAgICAgICAgICAnV2Via2l0IE1hYzEw
LjYgKGRiZyknOiB7dmVyc2lvbjogJ3Nub3dsZW9wYXJkJywgZGVidWc6IHRydWV9LAorICAgICAg
ICAgICAgJ1dlYmtpdCBNYWMxMC43Jzoge3ZlcnNpb246ICdsaW9uJ30sCisgICAgICAgIH0sCisg
ICAgICAgIGhhdmVCdWlsZGVyQWNjdW11bGF0ZWRSZXN1bHRzIDogdHJ1ZSwKKyAgICAgICAgdXNl
RGlyZWN0b3J5TGlzdGluZ0Zvck9sZEJ1aWxkczogdHJ1ZSwKKyAgICAgICAgcmVzdWx0c0RpcmVj
dG9yeU5hbWVGcm9tQnVpbGRlck5hbWU6IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lKSB7CisgICAgICAg
ICAgICByZXR1cm4gYnVpbGRlck5hbWUucmVwbGFjZSgvWyAuKCldL2csICdfJyk7CisgICAgICAg
IH0sCisgICAgICAgIHJlc3VsdHNEaXJlY3RvcnlGb3JCdWlsZE51bWJlcjogZnVuY3Rpb24oYnVp
bGROdW1iZXIsIHJldmlzaW9uKSB7CisgICAgICAgICAgICByZXR1cm4gYnVpbGROdW1iZXI7Cisg
ICAgICAgIH0sCisgICAgfQogfTsKIAogY29uZmlnLmtUcmFjVVJMID0gJ2h0dHA6Ly90cmFjLndl
YmtpdC5vcmcnOwpAQCAtNjEsNCArOTksMTUgQEAgY29uZmlnLmtSZWxhdGl2ZVRpbWVVcGRhdGVG
cmVxdWVuY3kgPSAxMDAwICogNjA7CiAKIGNvbmZpZy5rRXhwZXJpbWVudGFsRmVhdHVyZXMgPSB3
aW5kb3cubG9jYXRpb24uc2VhcmNoLnNlYXJjaCgnZW5hYmxlRXhwZXJpbWVudHM9MScpICE9IC0x
OwogCitjb25maWcuY3VycmVudFBsYXRmb3JtID0gJ2Nocm9taXVtJzsKKworY29uZmlnLnNldFBs
YXRmb3JtID0gZnVuY3Rpb24ocGxhdGZvcm0pCit7CisgICAgaWYgKCF0aGlzLmtQbGF0Zm9ybXNb
cGxhdGZvcm1dKSB7CisgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhwbGF0Zm9ybSArICcgaXMg
bm90IGEgcmVjb2duaXplZCBwbGF0Zm9ybScpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNvbmZpZy5jdXJyZW50UGxhdGZvcm0gPSBwbGF0Zm9ybTsKK307CisKIH0pKCk7CmRpZmYgLS1n
aXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9tb2RlbC5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVT
dXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9z
Y3JpcHRzL21vZGVsLmpzCmluZGV4IGMyZGViYmQ2YzVlOTYzOGQyZGFmODY5NTgwYmRkOGY0YjU2
YTI2NjYuLmEzMDlmMDJmZGI0MjhhMTg0YzBmYmY4ZTgwZWNiODMwMzNjNmI5YmUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL21vZGVsLmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJl
cy9zY3JpcHRzL21vZGVsLmpzCkBAIC0xMDksNyArMTA5LDggQEAgbW9kZWwudXBkYXRlUmVjZW50
Q29tbWl0cyA9IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIH0pOwogfTsKIAotZnVuY3Rpb24gdXBk
YXRlQ29tbWl0SW5kZXgoKSB7CitmdW5jdGlvbiB1cGRhdGVDb21taXRJbmRleCgpCit7CiAgICAg
bW9kZWwuc3RhdGUucmVjZW50Q29tbWl0cy5mb3JFYWNoKGZ1bmN0aW9uKGNvbW1pdERhdGEpIHsK
ICAgICAgICAgZ19jb21taXRJbmRleFtjb21taXREYXRhLnJldmlzaW9uXSA9IGNvbW1pdERhdGE7
CiAgICAgfSk7CkBAIC0xNTIsNyArMTUzLDggQEAgbW9kZWwubGF0ZXN0UmV2aXNpb25XaXRoTm9C
dWlsZGVyc0luRmxpZ2h0ID0gZnVuY3Rpb24oKQogCiBtb2RlbC51cGRhdGVSZXN1bHRzQnlCdWls
ZGVyID0gZnVuY3Rpb24oY2FsbGJhY2spCiB7Ci0gICAgcmVzdWx0cy5mZXRjaFJlc3VsdHNCeUJ1
aWxkZXIoT2JqZWN0LmtleXMoY29uZmlnLmtCdWlsZGVycyksIGZ1bmN0aW9uKHJlc3VsdHNCeUJ1
aWxkZXIpIHsKKyAgICB2YXIgcGxhdGZvcm1CdWlsZGVycyA9IGNvbmZpZy5rUGxhdGZvcm1zW2Nv
bmZpZy5jdXJyZW50UGxhdGZvcm1dLmJ1aWxkZXJzOworICAgIHJlc3VsdHMuZmV0Y2hSZXN1bHRz
QnlCdWlsZGVyKE9iamVjdC5rZXlzKHBsYXRmb3JtQnVpbGRlcnMpLCBmdW5jdGlvbihyZXN1bHRz
QnlCdWlsZGVyKSB7CiAgICAgICAgIG1vZGVsLnN0YXRlLnJlc3VsdHNCeUJ1aWxkZXIgPSByZXN1
bHRzQnlCdWlsZGVyOwogICAgICAgICBjYWxsYmFjaygpOwogICAgIH0pOwpAQCAtMTYxLDcgKzE2
Myw2IEBAIG1vZGVsLnVwZGF0ZVJlc3VsdHNCeUJ1aWxkZXIgPSBmdW5jdGlvbihjYWxsYmFjaykK
IG1vZGVsLmFuYWx5emVVbmV4cGVjdGVkRmFpbHVyZXMgPSBmdW5jdGlvbihjYWxsYmFjaywgY29t
cGxldGlvbkNhbGxiYWNrKQogewogICAgIHZhciB1bmV4cGVjdGVkRmFpbHVyZXMgPSByZXN1bHRz
LnVuZXhwZWN0ZWRGYWlsdXJlc0J5VGVzdChtb2RlbC5zdGF0ZS5yZXN1bHRzQnlCdWlsZGVyKTsK
LQogICAgICQuZWFjaChtb2RlbC5zdGF0ZS5mYWlsdXJlQW5hbHlzaXNCeVRlc3QsIGZ1bmN0aW9u
KHRlc3ROYW1lLCBmYWlsdXJlQW5hbHlzaXMpIHsKICAgICAgICAgaWYgKCEodGVzdE5hbWUgaW4g
dW5leHBlY3RlZEZhaWx1cmVzKSkKICAgICAgICAgICAgIGRlbGV0ZSBtb2RlbC5zdGF0ZS5mYWls
dXJlQW5hbHlzaXNCeVRlc3RbdGVzdE5hbWVdOwpAQCAtMTY5LDYgKzE3MCw5IEBAIG1vZGVsLmFu
YWx5emVVbmV4cGVjdGVkRmFpbHVyZXMgPSBmdW5jdGlvbihjYWxsYmFjaywgY29tcGxldGlvbkNh
bGxiYWNrKQogCiAgICAgdmFyIHRyYWNrZXIgPSBuZXcgYmFzZS5SZXF1ZXN0VHJhY2tlcihPYmpl
Y3Qua2V5cyh1bmV4cGVjdGVkRmFpbHVyZXMpLmxlbmd0aCwgY29tcGxldGlvbkNhbGxiYWNrKTsK
ICAgICAkLmVhY2godW5leHBlY3RlZEZhaWx1cmVzLCBmdW5jdGlvbih0ZXN0TmFtZSwgcmVzdWx0
Tm9kZXNCeUJ1aWxkZXIpIHsKKyAgICAgICAgLy8gaWYgKHRlc3ROYW1lICE9ICdlZGl0aW5nL3Nw
ZWxsaW5nL2dyYW1tYXItZWRpdC13b3JkLmh0bWwnKQorICAgICAgICAvLyAgICAgcmV0dXJuOwor
CiAgICAgICAgIHZhciBidWlsZGVyTmFtZUxpc3QgPSBPYmplY3Qua2V5cyhyZXN1bHROb2Rlc0J5
QnVpbGRlcik7CiAgICAgICAgIHJlc3VsdHMudW5pZnlSZWdyZXNzaW9uUmFuZ2VzKGJ1aWxkZXJO
YW1lTGlzdCwgdGVzdE5hbWUsIGZ1bmN0aW9uKG9sZGVzdEZhaWxpbmdSZXZpc2lvbiwgbmV3ZXN0
UGFzc2luZ1JldmlzaW9uKSB7CiAgICAgICAgICAgICB2YXIgZmFpbHVyZUFuYWx5c2lzID0gewpA
QCAtMTc3LDcgKzE4MSw3IEBAIG1vZGVsLmFuYWx5emVVbmV4cGVjdGVkRmFpbHVyZXMgPSBmdW5j
dGlvbihjYWxsYmFjaywgY29tcGxldGlvbkNhbGxiYWNrKQogICAgICAgICAgICAgICAgICdvbGRl
c3RGYWlsaW5nUmV2aXNpb24nOiBvbGRlc3RGYWlsaW5nUmV2aXNpb24sCiAgICAgICAgICAgICAg
ICAgJ25ld2VzdFBhc3NpbmdSZXZpc2lvbic6IG5ld2VzdFBhc3NpbmdSZXZpc2lvbiwKICAgICAg
ICAgICAgIH07Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaGV1cmlzdGljYWxseU5hcnJv
d1JlZ3Jlc3Npb25SYW5nZShmYWlsdXJlQW5hbHlzaXMpOwogCiAgICAgICAgICAgICB2YXIgcHJl
dmlvdXNGYWlsdXJlQW5hbHlzaXMgPSBtb2RlbC5zdGF0ZS5mYWlsdXJlQW5hbHlzaXNCeVRlc3Rb
dGVzdE5hbWVdOwpAQCAtMTg5LDYgKzE5Myw3IEBAIG1vZGVsLmFuYWx5emVVbmV4cGVjdGVkRmFp
bHVyZXMgPSBmdW5jdGlvbihjYWxsYmFjaywgY29tcGxldGlvbkNhbGxiYWNrKQogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBtb2RlbC5zdGF0ZS5mYWlsdXJlQW5hbHlzaXNCeVRlc3RbdGVz
dE5hbWVdID0gZmFpbHVyZUFuYWx5c2lzOworICAgICAgICAgICAgCiAgICAgICAgICAgICBjYWxs
YmFjayhmYWlsdXJlQW5hbHlzaXMpOwogICAgICAgICAgICAgdHJhY2tlci5yZXF1ZXN0Q29tcGxl
dGUoKTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9u
ZXQuanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9w
dWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9uZXQuanMKaW5kZXggMjk3NTNiN2MxYzU4
ZGIxMTBiZjczMGU5MzUxOWQ4MDBkZDAxNDk3ZC4uZGM5ODVlYjBmNGEzNjNjMjY3MWFhYmRiYmQ5
YzZmODRiN2UyZTNiMCAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvbmV0Lmpz
CisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL25ldC5qcwpAQCAtNTcsNyArNTcsOCBAQCBu
ZXQuanNvbnAgPSBmdW5jdGlvbih1cmwsIGNhbGxiYWNrKQogICAgICAgICBzdWNjZXNzOiBmdW5j
dGlvbihqc29ucCkgewogICAgICAgICAgICAgY2FsbGJhY2soYmFzZS5wYXJzZUpTT05QKGpzb25w
KSk7CiAgICAgICAgIH0sCi0gICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKKyAgICAgICAgZXJy
b3I6IGZ1bmN0aW9uKHJlcXVlc3QsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7CisgICAgICAg
ICAgICAvLyB3aW5kb3cuY29uc29sZS5sb2coJ2ZhaWxlZCB0byBsb2FkJywgdXJsLCB0ZXh0U3Rh
dHVzLCBlcnJvclRocm93bik7CiAgICAgICAgICAgICBjYWxsYmFjayh7fSk7CiAgICAgICAgIH0s
CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJr
aXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRzLmpz
IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGlj
X2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvcmVzdWx0cy5qcwppbmRleCBlZmYxMTBiMWU5ZWQ2
OGQ1ZjhhYzRmZWZmMzBkYjI0NTIwYjFlNGM4Li4wM2FkNGUwNGMyYmRlM2RjNzQ4NTdlZWMxMGYx
NTk1NTA0OGIxMDViIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53
ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRz
LmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3Jlc3VsdHMuanMKQEAgLTI3LDcgKzI3
LDYgQEAgdmFyIHJlc3VsdHMgPSByZXN1bHRzIHx8IHt9OwogCiAoZnVuY3Rpb24oKSB7CiAKLXZh
ciBrTGF5b3V0VGVzdFJlc3VsdHNTZXJ2ZXIgPSAnaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9m
L2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvJzsKIHZhciBrTGF5b3V0VGVzdFJlc3VsdHNQ
YXRoID0gJy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvJzsKIHZhciBrUmVzdWx0c05hbWUg
PSAnZnVsbF9yZXN1bHRzLmpzb24nOwogCkBAIC04Myw2ICs4MiwxMSBAQCByZXN1bHRzLmtBdWRp
b1R5cGUgPSAnYXVkaW8nCiByZXN1bHRzLmtUZXh0VHlwZSA9ICd0ZXh0JwogLy8gRklYTUU6IFRo
ZXJlIGFyZSBtb3JlIHR5cGVzIG9mIHRlc3RzLgogCitmdW5jdGlvbiBsYXlvdXRUZXN0UmVzdWx0
c1VSTChwbGF0Zm9ybSkKK3sKKyAgICByZXR1cm4gY29uZmlnLmtQbGF0Zm9ybXNbcGxhdGZvcm1d
LmxheW91dFRlc3RSZXN1bHRzVVJMOworfQorCiBmdW5jdGlvbiBwb3NzaWJsZVN1ZmZpeExpc3RG
b3IoZmFpbHVyZVR5cGVMaXN0KQogewogICAgIHZhciBzdWZmaXhMaXN0ID0gW107CkBAIC0xNzMs
MzIgKzE3NywzMiBAQCByZXN1bHRzLmNhblJlYmFzZWxpbmUgPSBmdW5jdGlvbihmYWlsdXJlVHlw
ZUxpc3QpCiAKIHJlc3VsdHMuZGlyZWN0b3J5Rm9yQnVpbGRlciA9IGZ1bmN0aW9uKGJ1aWxkZXJO
YW1lKQogewotICAgIHJldHVybiBidWlsZGVyTmFtZS5yZXBsYWNlKC9bIC4oKV0vZywgJ18nKTsK
KyAgICByZXR1cm4gY29uZmlnLmtQbGF0Zm9ybXNbY29uZmlnLmN1cnJlbnRQbGF0Zm9ybV0ucmVz
dWx0c0RpcmVjdG9yeU5hbWVGcm9tQnVpbGRlck5hbWUoYnVpbGRlck5hbWUpOwogfQogCi1mdW5j
dGlvbiByZXN1bHRzRGlyZWN0b3J5VVJMKGJ1aWxkZXJOYW1lKQorZnVuY3Rpb24gcmVzdWx0c0Rp
cmVjdG9yeVVSTChwbGF0Zm9ybSwgYnVpbGRlck5hbWUpCiB7Ci0gICAgcmV0dXJuIGtMYXlvdXRU
ZXN0UmVzdWx0c1NlcnZlciArIHJlc3VsdHMuZGlyZWN0b3J5Rm9yQnVpbGRlcihidWlsZGVyTmFt
ZSkgKyBrTGF5b3V0VGVzdFJlc3VsdHNQYXRoOworICAgIHJldHVybiBsYXlvdXRUZXN0UmVzdWx0
c1VSTChwbGF0Zm9ybSkgKyAnLycgKyByZXN1bHRzLmRpcmVjdG9yeUZvckJ1aWxkZXIoYnVpbGRl
ck5hbWUpICsga0xheW91dFRlc3RSZXN1bHRzUGF0aDsKIH0KIAotZnVuY3Rpb24gcmVzdWx0c0Rp
cmVjdG9yeUxpc3RpbmdVUkwoYnVpbGRlck5hbWUpCitmdW5jdGlvbiByZXN1bHRzRGlyZWN0b3J5
TGlzdGluZ1VSTChwbGF0Zm9ybSwgYnVpbGRlck5hbWUpCiB7Ci0gICAgcmV0dXJuIGtMYXlvdXRU
ZXN0UmVzdWx0c1NlcnZlciArIHJlc3VsdHMuZGlyZWN0b3J5Rm9yQnVpbGRlcihidWlsZGVyTmFt
ZSkgKyAnLyc7CisgICAgcmV0dXJuIGxheW91dFRlc3RSZXN1bHRzVVJMKHBsYXRmb3JtKSArICcv
JyArIHJlc3VsdHMuZGlyZWN0b3J5Rm9yQnVpbGRlcihidWlsZGVyTmFtZSkgKyAnLyc7CiB9CiAK
LWZ1bmN0aW9uIHJlc3VsdHNEaXJlY3RvcnlVUkxGb3JCdWlsZE51bWJlcihidWlsZGVyTmFtZSwg
YnVpbGROdW1iZXIpCitmdW5jdGlvbiByZXN1bHRzRGlyZWN0b3J5VVJMRm9yQnVpbGROdW1iZXIo
cGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCBidWlsZE51bWJlciwgcmV2aXNpb24pCiB7Ci0gICAgcmV0
dXJuIHJlc3VsdHNEaXJlY3RvcnlMaXN0aW5nVVJMKGJ1aWxkZXJOYW1lKSArIGJ1aWxkTnVtYmVy
ICsgJy8nCisgICAgcmV0dXJuIHJlc3VsdHNEaXJlY3RvcnlMaXN0aW5nVVJMKHBsYXRmb3JtLCBi
dWlsZGVyTmFtZSkgKyBjb25maWcua1BsYXRmb3Jtc1twbGF0Zm9ybV0ucmVzdWx0c0RpcmVjdG9y
eUZvckJ1aWxkTnVtYmVyKGJ1aWxkTnVtYmVyLCByZXZpc2lvbikgKyAnLyc7CiB9CiAKLWZ1bmN0
aW9uIHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lKQorZnVuY3Rpb24gcmVzdWx0c1N1bW1h
cnlVUkwocGxhdGZvcm0sIGJ1aWxkZXJOYW1lKQogewotICAgIHJldHVybiByZXN1bHRzRGlyZWN0
b3J5VVJMKGJ1aWxkZXJOYW1lKSArIGtSZXN1bHRzTmFtZTsKKyAgICByZXR1cm4gcmVzdWx0c0Rp
cmVjdG9yeVVSTChwbGF0Zm9ybSwgYnVpbGRlck5hbWUpICsga1Jlc3VsdHNOYW1lOwogfQogCi1m
dW5jdGlvbiByZXN1bHRzU3VtbWFyeVVSTEZvckJ1aWxkTnVtYmVyKGJ1aWxkZXJOYW1lLCBidWls
ZE51bWJlcikKK2Z1bmN0aW9uIHJlc3VsdHNTdW1tYXJ5VVJMRm9yQnVpbGROdW1iZXIocGxhdGZv
cm0sIGJ1aWxkZXJOYW1lLCBidWlsZE51bWJlciwgcmV2aXNpb24pCiB7Ci0gICAgcmV0dXJuIHJl
c3VsdHNEaXJlY3RvcnlVUkxGb3JCdWlsZE51bWJlcihidWlsZGVyTmFtZSwgYnVpbGROdW1iZXIp
ICsga1Jlc3VsdHNOYW1lOworICAgIHJldHVybiByZXN1bHRzRGlyZWN0b3J5VVJMRm9yQnVpbGRO
dW1iZXIocGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCBidWlsZE51bWJlciwgcmV2aXNpb24pICsga1Jl
c3VsdHNOYW1lOwogfQogCiB2YXIgZ19yZXN1bHRzQ2FjaGUgPSBuZXcgYmFzZS5Bc3luY2hyb25v
dXNDYWNoZShmdW5jdGlvbiAoa2V5LCBjYWxsYmFjaykgewpAQCAtMzQzLDE4ICszNDcsMzQgQEAg
cmVzdWx0cy5jb2xsZWN0VW5leHBlY3RlZFJlc3VsdHMgPSBmdW5jdGlvbihkaWN0aW9uYXJ5T2ZS
ZXN1bHROb2RlcykKICAgICByZXR1cm4gYmFzZS51bmlxdWlmeUFycmF5KGNvbGxlY3RlZFJlc3Vs
dHMpOwogfTsKIAotZnVuY3Rpb24gaGlzdG9yaWNhbFJlc3VsdHNTdW1tYXJ5VVJMcyhidWlsZGVy
TmFtZSwgY2FsbGJhY2spCi17Ci0gICAgbmV0LmdldChyZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VS
TChidWlsZGVyTmFtZSksIGZ1bmN0aW9uKGRpcmVjdG9yeUxpc3RpbmcpIHsKLSAgICAgICAgdmFy
IHN1bW1hcnlVUkxzID0gZGlyZWN0b3J5TGlzdGluZy5tYXRjaChrQnVpbGRMaW5rUmVnZXhwKS5t
YXAoZnVuY3Rpb24oYnVpbGRMaW5rKSB7Ci0gICAgICAgICAgICB2YXIgYnVpbGROdW1iZXIgPSBw
YXJzZUludChidWlsZExpbmsubWF0Y2goa0J1aWxkTnVtYmVyUmVnZXhwKVswXSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0c1N1bW1hcnlVUkxGb3JCdWlsZE51bWJlcihidWlsZGVyTmFtZSwg
YnVpbGROdW1iZXIpOwotICAgICAgICB9KS5yZXZlcnNlKCk7Ci0gICAgICAgIGNhbGxiYWNrKHN1
bW1hcnlVUkxzKTsKLSAgICB9KTsKK2Z1bmN0aW9uIGhpc3RvcmljYWxSZXN1bHRzU3VtbWFyeVVS
THMocGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCBjYWxsYmFjaykKK3sKKyAgICBpZiAoY29uZmlnLmtQ
bGF0Zm9ybXNbcGxhdGZvcm1dLnVzZURpcmVjdG9yeUxpc3RpbmdGb3JPbGRCdWlsZHMpIHsKKyAg
ICAgICAgdmFyIGxpc3RpbmdVUkwgPSByZXN1bHRzRGlyZWN0b3J5TGlzdGluZ1VSTChwbGF0Zm9y
bSwgYnVpbGRlck5hbWUpOworICAgICAgICBuZXQuZ2V0KGxpc3RpbmdVUkwsIGZ1bmN0aW9uKGRp
cmVjdG9yeUxpc3RpbmcpIHsKKyAgICAgICAgICAgIHZhciBzdW1tYXJ5VVJMcyA9IGRpcmVjdG9y
eUxpc3RpbmcubWF0Y2goa0J1aWxkTGlua1JlZ2V4cCkubWFwKGZ1bmN0aW9uKGJ1aWxkTGluaykg
eworICAgICAgICAgICAgICAgIHZhciBidWlsZE51bWJlciA9IHBhcnNlSW50KGJ1aWxkTGluay5t
YXRjaChrQnVpbGROdW1iZXJSZWdleHApWzBdKTsKKyAgICAgICAgICAgICAgICB2YXIgcmV2aXNp
b24gPSAwOyAvLyBGSVhNRTogbmVlZCByZXZpc2lvbiBmb3IgQXBwbGUuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdHNTdW1tYXJ5VVJMRm9yQnVpbGROdW1iZXIocGxhdGZvcm0sIGJ1aWxk
ZXJOYW1lLCBidWlsZE51bWJlciwgcmV2aXNpb24pOworICAgICAgICAgICAgfSkucmV2ZXJzZSgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBjYWxsYmFjayhzdW1tYXJ5VVJMcyk7CisgICAg
ICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBzdW1tYXJ5VVJMcyA9IFtdOworICAg
ICAgICBidWlsZGVycy5jYWNoZWRCdWlsZEluZm9zKHBsYXRmb3JtLCBidWlsZGVyTmFtZSwgZnVu
Y3Rpb24oY2FjaGVkQnVpbGRJbmZvcykgeworICAgICAgICAgICAgJC5lYWNoKGNhY2hlZEJ1aWxk
SW5mb3MsIGZ1bmN0aW9uKGJ1aWxkTnVtYmVyLCBidWlsZEluZm8pIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcmV2aXNpb24gPSBidWlsZEluZm8uc291cmNlU3RhbXAucmV2aXNpb247CisgICAgICAg
ICAgICAgICAgdmFyIHVybCA9IHJlc3VsdHNTdW1tYXJ5VVJMRm9yQnVpbGROdW1iZXIocGxhdGZv
cm0sIGJ1aWxkZXJOYW1lLCBidWlsZE51bWJlciwgcmV2aXNpb24pOworICAgICAgICAgICAgICAg
IHN1bW1hcnlVUkxzLnB1c2godXJsKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYWxsYmFjayhzdW1tYXJ5VVJMcy5yZXZlcnNlKCkpOworICAgICAgICB9KTsK
KyAgICB9CiB9CiAKLWZ1bmN0aW9uIHdhbGtIaXN0b3J5KGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSwg
Y2FsbGJhY2spCitmdW5jdGlvbiB3YWxrSGlzdG9yeShwbGF0Zm9ybSwgYnVpbGRlck5hbWUsIHRl
c3ROYW1lLCBjYWxsYmFjaykKIHsKICAgICB2YXIgaW5kZXhPZk5leHRLZXlUb0ZldGNoID0gMDsK
ICAgICB2YXIga2V5TGlzdCA9IFtdOwpAQCAtMzY5LDYgKzM4OSwxMCBAQCBmdW5jdGlvbiB3YWxr
SGlzdG9yeShidWlsZGVyTmFtZSwgdGVzdE5hbWUsIGNhbGxiYWNrKQogICAgICAgICB2YXIga2V5
ID0ga2V5TGlzdFtpbmRleE9mTmV4dEtleVRvRmV0Y2hdOwogICAgICAgICArK2luZGV4T2ZOZXh0
S2V5VG9GZXRjaDsKICAgICAgICAgZ19yZXN1bHRzQ2FjaGUuZ2V0KGtleSwgZnVuY3Rpb24ocmVz
dWx0c1RyZWUpIHsKKyAgICAgICAgICAgIGlmICgkLmlzRW1wdHlPYmplY3QocmVzdWx0c1RyZWUp
KSB7CisgICAgICAgICAgICAgICAgY29udGludWVXYWxrKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyIHJlc3VsdE5vZGUgPSByZXN1bHRz
LnJlc3VsdE5vZGVGb3JUZXN0KHJlc3VsdHNUcmVlLCB0ZXN0TmFtZSk7CiAgICAgICAgICAgICB2
YXIgcmV2aXNpb24gPSBwYXJzZUludChyZXN1bHRzVHJlZVsncmV2aXNpb24nXSkKICAgICAgICAg
ICAgIGlmIChpc05hTihyZXZpc2lvbikpCkBAIC0zODUsNyArNDA5LDcgQEAgZnVuY3Rpb24gd2Fs
a0hpc3RvcnkoYnVpbGRlck5hbWUsIHRlc3ROYW1lLCBjYWxsYmFjaykKICAgICAgICAgY29udGlu
dWVXYWxrKCk7CiAgICAgfQogCi0gICAgaGlzdG9yaWNhbFJlc3VsdHNTdW1tYXJ5VVJMcyhidWls
ZGVyTmFtZSwgZnVuY3Rpb24oc3VtbWFyeVVSTHMpIHsKKyAgICBoaXN0b3JpY2FsUmVzdWx0c1N1
bW1hcnlVUkxzKHBsYXRmb3JtLCBidWlsZGVyTmFtZSwgZnVuY3Rpb24oc3VtbWFyeVVSTHMpIHsK
ICAgICAgICAga2V5TGlzdCA9IHN1bW1hcnlVUkxzOwogICAgICAgICBjb250aW51ZVdhbGsoKTsK
ICAgICB9KTsKQEAgLTM5Niw3ICs0MjAsOCBAQCByZXN1bHRzLnJlZ3Jlc3Npb25SYW5nZUZvckZh
aWx1cmUgPSBmdW5jdGlvbihidWlsZGVyTmFtZSwgdGVzdE5hbWUsIGNhbGxiYWNrKQogICAgIHZh
ciBvbGRlc3RGYWlsaW5nUmV2aXNpb24gPSAwOwogICAgIHZhciBuZXdlc3RQYXNzaW5nUmV2aXNp
b24gPSAwOwogCi0gICAgd2Fsa0hpc3RvcnkoYnVpbGRlck5hbWUsIHRlc3ROYW1lLCBmdW5jdGlv
bihyZXZpc2lvbiwgcmVzdWx0Tm9kZSkgeworICAgIC8vIEZJWE1FOiBzaG91bGQgdHJlYXQge3Bs
YXRmb3JtLCBidWlsZGVyTmFtZX0gYXMgYSB0dXBsZQorICAgIHdhbGtIaXN0b3J5KGNvbmZpZy5j
dXJyZW50UGxhdGZvcm0sIGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSwgZnVuY3Rpb24ocmV2aXNpb24s
IHJlc3VsdE5vZGUpIHsKICAgICAgICAgaWYgKCFyZXZpc2lvbikgewogICAgICAgICAgICAgY2Fs
bGJhY2sob2xkZXN0RmFpbGluZ1JldmlzaW9uLCBuZXdlc3RQYXNzaW5nUmV2aXNpb24pOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDI2LDcgKzQ1MSw3IEBAIGZ1bmN0aW9uIG1lcmdl
UmVncmVzc2lvblJhbmdlcyhyZWdyZXNzaW9uUmFuZ2VzKQogICAgIG1lcmdlZFJhbmdlLm5ld2Vz
dFBhc3NpbmdSZXZpc2lvbiA9IDA7CiAKICAgICAkLmVhY2gocmVncmVzc2lvblJhbmdlcywgZnVu
Y3Rpb24oYnVpbGRlck5hbWUsIHJhbmdlKSB7Ci0gICAgICAgIGlmICghcmFuZ2Uub2xkZXN0RmFp
bGluZ1JldmlzaW9uIHx8ICFyYW5nZS5uZXdlc3RQYXNzaW5nUmV2aXNpb24pCisgICAgICAgIGlm
ICghcmFuZ2Uub2xkZXN0RmFpbGluZ1JldmlzaW9uICYmICFyYW5nZS5uZXdlc3RQYXNzaW5nUmV2
aXNpb24pCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBpZiAoIW1lcmdlZFJhbmdlLm9s
ZGVzdEZhaWxpbmdSZXZpc2lvbikKQEAgLTQzNCwxMSArNDU5LDEyIEBAIGZ1bmN0aW9uIG1lcmdl
UmVncmVzc2lvblJhbmdlcyhyZWdyZXNzaW9uUmFuZ2VzKQogICAgICAgICBpZiAoIW1lcmdlZFJh
bmdlLm5ld2VzdFBhc3NpbmdSZXZpc2lvbikKICAgICAgICAgICAgIG1lcmdlZFJhbmdlLm5ld2Vz
dFBhc3NpbmdSZXZpc2lvbiA9IHJhbmdlLm5ld2VzdFBhc3NpbmdSZXZpc2lvbjsKIAotICAgICAg
ICBpZiAocmFuZ2Uub2xkZXN0RmFpbGluZ1JldmlzaW9uIDwgbWVyZ2VkUmFuZ2Uub2xkZXN0RmFp
bGluZ1JldmlzaW9uKQorICAgICAgICBpZiAocmFuZ2Uub2xkZXN0RmFpbGluZ1JldmlzaW9uICYm
IHJhbmdlLm9sZGVzdEZhaWxpbmdSZXZpc2lvbiA8IG1lcmdlZFJhbmdlLm9sZGVzdEZhaWxpbmdS
ZXZpc2lvbikKICAgICAgICAgICAgIG1lcmdlZFJhbmdlLm9sZGVzdEZhaWxpbmdSZXZpc2lvbiA9
IHJhbmdlLm9sZGVzdEZhaWxpbmdSZXZpc2lvbjsKICAgICAgICAgaWYgKHJhbmdlLm5ld2VzdFBh
c3NpbmdSZXZpc2lvbiA+IG1lcmdlZFJhbmdlLm5ld2VzdFBhc3NpbmdSZXZpc2lvbikKICAgICAg
ICAgICAgIG1lcmdlZFJhbmdlLm5ld2VzdFBhc3NpbmdSZXZpc2lvbiA9IHJhbmdlLm5ld2VzdFBh
c3NpbmdSZXZpc2lvbjsKICAgICB9KTsKKwogICAgIHJldHVybiBtZXJnZWRSYW5nZTsKIH0KIApA
QCAtNDY1LDcgKzQ5MSw3IEBAIHJlc3VsdHMudW5pZnlSZWdyZXNzaW9uUmFuZ2VzID0gZnVuY3Rp
b24oYnVpbGRlck5hbWVMaXN0LCB0ZXN0TmFtZSwgY2FsbGJhY2spCiAgICAgfSk7CiB9OwogCi1y
ZXN1bHRzLmNvdW50RmFpbHVyZU9jY3VyYW5jZXMgPSBmdW5jdGlvbihidWlsZGVyTmFtZUxpc3Qs
IHRlc3ROYW1lLCBjYWxsYmFjaykKK3Jlc3VsdHMuY291bnRGYWlsdXJlT2NjdXJlbmNlcyA9IGZ1
bmN0aW9uKGJ1aWxkZXJOYW1lTGlzdCwgdGVzdE5hbWUsIGNhbGxiYWNrKQogewogICAgIHZhciBx
dWVyaWVzSW5GbGlnaHQgPSBidWlsZGVyTmFtZUxpc3QubGVuZ3RoOwogICAgIGlmICghcXVlcmll
c0luRmxpZ2h0KQpAQCAtNDczLDcgKzQ5OSw3IEBAIHJlc3VsdHMuY291bnRGYWlsdXJlT2NjdXJh
bmNlcyA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lTGlzdCwgdGVzdE5hbWUsIGNhbGxiYWNrKQogCiAg
ICAgdmFyIGZhaWx1cmVDb3VudCA9IDA7CiAgICAgJC5lYWNoKGJ1aWxkZXJOYW1lTGlzdCwgZnVu
Y3Rpb24oaW5kZXgsIGJ1aWxkZXJOYW1lKSB7Ci0gICAgICAgIHdhbGtIaXN0b3J5KGJ1aWxkZXJO
YW1lLCB0ZXN0TmFtZSwgZnVuY3Rpb24ocmV2aXNpb24sIHJlc3VsdE5vZGUpIHsKKyAgICAgICAg
d2Fsa0hpc3RvcnkoY29uZmlnLmN1cnJlbnRQbGF0Zm9ybSwgYnVpbGRlck5hbWUsIHRlc3ROYW1l
LCBmdW5jdGlvbihyZXZpc2lvbiwgcmVzdWx0Tm9kZSkgewogICAgICAgICAgICAgaWYgKGlzVW5l
eHBlY3RlZEZhaWx1cmUocmVzdWx0Tm9kZSkpIHsKICAgICAgICAgICAgICAgICArK2ZhaWx1cmVD
b3VudDsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUzNiw3ICs1NjIsNyBAQCBm
dW5jdGlvbiBzb3J0UmVzdWx0VVJMc0J5U3VmZml4KHVybHMpCiAKIHJlc3VsdHMuZmV0Y2hSZXN1
bHRzVVJMcyA9IGZ1bmN0aW9uKGZhaWx1cmVJbmZvLCBjYWxsYmFjaykKIHsKLSAgICB2YXIgc3Rl
bSA9IHJlc3VsdHNEaXJlY3RvcnlVUkwoZmFpbHVyZUluZm8uYnVpbGRlck5hbWUpOworICAgIHZh
ciBzdGVtID0gcmVzdWx0c0RpcmVjdG9yeVVSTChjb25maWcuY3VycmVudFBsYXRmb3JtLCBmYWls
dXJlSW5mby5idWlsZGVyTmFtZSk7CiAgICAgdmFyIHRlc3ROYW1lU3RlbSA9IGJhc2UudHJpbUV4
dGVuc2lvbihmYWlsdXJlSW5mby50ZXN0TmFtZSk7CiAKICAgICB2YXIgc3VmZml4TGlzdCA9IHBv
c3NpYmxlU3VmZml4TGlzdEZvcihmYWlsdXJlSW5mby5mYWlsdXJlVHlwZUxpc3QpOwpAQCAtNTY5
LDIxICs1OTUsNjMgQEAgcmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxzID0gZnVuY3Rpb24oZmFpbHVy
ZUluZm8sIGNhbGxiYWNrKQogCiByZXN1bHRzLmZldGNoUmVzdWx0c0ZvckJ1aWxkZXIgPSBmdW5j
dGlvbihidWlsZGVyTmFtZSwgY2FsbGJhY2spCiB7Ci0gICAgbmV0Lmpzb25wKHJlc3VsdHNTdW1t
YXJ5VVJMKGJ1aWxkZXJOYW1lKSwgY2FsbGJhY2spOworICAgIHZhciByZXN1bHRzVVJMID0gcmVz
dWx0c1N1bW1hcnlVUkwoY29uZmlnLmN1cnJlbnRQbGF0Zm9ybSwgYnVpbGRlck5hbWUpOworICAg
IG5ldC5qc29ucChyZXN1bHRzVVJMLCBjYWxsYmFjayk7Cit9OworCityZXN1bHRzLmZldGNoUmVz
dWx0c0ZvckJ1aWxkT25CdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIGJ1aWxkTnVtYmVy
LCByZXZpc2lvbiwgY2FsbGJhY2spCit7CisgICAgdmFyIHJlc3VsdHNVUkwgPSByZXN1bHRzU3Vt
bWFyeVVSTEZvckJ1aWxkTnVtYmVyKGNvbmZpZy5jdXJyZW50UGxhdGZvcm0sIGJ1aWxkZXJOYW1l
LCBidWlsZE51bWJlciwgcmV2aXNpb24pOworICAgIG5ldC5qc29ucChyZXN1bHRzVVJMLCBjYWxs
YmFjayk7Cit9OworCisvLyBMb29rIGZvciB0aGUgbW9zdCByZWNlbnQgY29tcGxldGVkIGJ1aWxk
IHRoYXQgaGFzIGZ1bGwgcmVzdWx0cy4KK3Jlc3VsdHMuZmV0Y2hSZXN1bHRzRm9yTW9zdFJlY2Vu
dENvbXBsZXRlZEJ1aWxkT25CdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIGNhbGxiYWNr
KQoreworICAgIGhpc3RvcmljYWxSZXN1bHRzU3VtbWFyeVVSTHMoY29uZmlnLmN1cnJlbnRQbGF0
Zm9ybSwgYnVpbGRlck5hbWUsIGZ1bmN0aW9uKGJ1aWxkVVJMcykgeworICAgICAgICB2YXIgY3Vy
cmVudEluZGV4ID0gMDsKKyAgICAgICAgdmFyIHJlc3VsdHNDYWxsYmFjayA9IGZ1bmN0aW9uKGJ1
aWxkUmVzdWx0cykgeworICAgICAgICAgICAgaWYgKCQuaXNFbXB0eU9iamVjdChidWlsZFJlc3Vs
dHMpKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAg
bmV0Lmpzb25wKGJ1aWxkVVJMc1tjdXJyZW50SW5kZXhdLCByZXN1bHRzQ2FsbGJhY2spOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbGxiYWNr
KGJ1aWxkUmVzdWx0cyk7CisgICAgICAgIH07CisgICAgICAgIG5ldC5qc29ucChidWlsZFVSTHNb
Y3VycmVudEluZGV4XSwgcmVzdWx0c0NhbGxiYWNrKTsKKyAgICB9KTsKIH07CiAKIHJlc3VsdHMu
ZmV0Y2hSZXN1bHRzQnlCdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWVMaXN0LCBjYWxsYmFj
aykKIHsKICAgICB2YXIgcmVzdWx0c0J5QnVpbGRlciA9IHt9Ci0gICAgdmFyIHJlcXVlc3RzSW5G
bGlnaHQgPSBidWlsZGVyTmFtZUxpc3QubGVuZ3RoOwotICAgICQuZWFjaChidWlsZGVyTmFtZUxp
c3QsIGZ1bmN0aW9uKGluZGV4LCBidWlsZGVyTmFtZSkgewotICAgICAgICByZXN1bHRzLmZldGNo
UmVzdWx0c0ZvckJ1aWxkZXIoYnVpbGRlck5hbWUsIGZ1bmN0aW9uKHJlc3VsdHNUcmVlKSB7Ci0g
ICAgICAgICAgICByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSA9IHJlc3VsdHNUcmVlOwot
ICAgICAgICAgICAgLS1yZXF1ZXN0c0luRmxpZ2h0OwotICAgICAgICAgICAgaWYgKCFyZXF1ZXN0
c0luRmxpZ2h0KQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdHNCeUJ1aWxkZXIpOwor
ICAgIGlmIChjb25maWcua1BsYXRmb3Jtc1tjb25maWcuY3VycmVudFBsYXRmb3JtXS5oYXZlQnVp
bGRlckFjY3VtdWxhdGVkUmVzdWx0cykgeworICAgICAgICB2YXIgcmVxdWVzdHNJbkZsaWdodCA9
IGJ1aWxkZXJOYW1lTGlzdC5sZW5ndGg7CisgICAgICAgICQuZWFjaChidWlsZGVyTmFtZUxpc3Qs
IGZ1bmN0aW9uKGluZGV4LCBidWlsZGVyTmFtZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdHMu
ZmV0Y2hSZXN1bHRzRm9yQnVpbGRlcihidWlsZGVyTmFtZSwgZnVuY3Rpb24ocmVzdWx0c1RyZWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0gPSBy
ZXN1bHRzVHJlZTsKKyAgICAgICAgICAgICAgICAgICAgLS1yZXF1ZXN0c0luRmxpZ2h0OworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RzSW5GbGlnaHQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFjayhyZXN1bHRzQnlCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVpbGRlcnMucmVj
ZW50QnVpbGRJbmZvcyhmdW5jdGlvbihyZWNlbnRCdWlsZEluZm9zKSB7CisgICAgICAgICAgICB2
YXIgcmVxdWVzdHNJbkZsaWdodCA9IDA7CisgICAgICAgICAgICAkLmVhY2goYnVpbGRlck5hbWVM
aXN0LCBmdW5jdGlvbihpbmRleCwgYnVpbGRlck5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cmVjZW50QnVpbGRJbmZvc1tidWlsZGVyTmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgKyty
ZXF1ZXN0c0luRmxpZ2h0OworICAgICAgICAgICAgICAgICAgICB2YXIgYnVpbGRJbmZvID0gcmVj
ZW50QnVpbGRJbmZvc1tidWlsZGVyTmFtZV07CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMu
ZmV0Y2hSZXN1bHRzRm9yTW9zdFJlY2VudENvbXBsZXRlZEJ1aWxkT25CdWlsZGVyKGJ1aWxkZXJO
YW1lLCBmdW5jdGlvbihyZXN1bHRzVHJlZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0gPSByZXN1bHRzVHJlZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC0tcmVxdWVzdHNJbkZsaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghcmVxdWVzdHNJbkZsaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayhyZXN1bHRzQnlCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KIH07CiAKIH0pKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy9yZXN1bHRzX3VuaXR0ZXN0cy5q
cyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3Jlc3VsdHNfdW5pdHRlc3RzLmpzCmluZGV4IGI1
ZDE5OGZjNzY1MjhhMDQyYjhjZDE0MTBkN2VlNDM4YzNjMTkyN2MuLmU3MzFiZjM5YTgxZmJjODJh
MjgzMDQ1NmM2NGRkMTE0YzA2ZmYzYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3Jp
cHRzL3Jlc3VsdHNfdW5pdHRlc3RzLmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1
aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3Jl
c3VsdHNfdW5pdHRlc3RzLmpzCkBAIC0zNDQsNyArMzQ0LDcgQEAgdGVzdCgid2Fsa0hpc3Rvcnki
LCA2LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGVxdWFscyhuZXdlc3RQYXNzaW5nUmV2aXNp
b24sIDkwNDI1KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgcmVzdWx0cy5jb3VudEZhaWx1cmVP
Y2N1cmFuY2VzKFsiTW9jayBCdWlsZGVyIiwgIkFub3RoZXIgQnVpbGRlciJdLCAidXNlcnNjcmlw
dHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBmdW5jdGlvbihmYWlsdXJlQ291bnQpIHsKKyAgICAgICAg
cmVzdWx0cy5jb3VudEZhaWx1cmVPY2N1cmVuY2VzKFsiTW9jayBCdWlsZGVyIiwgIkFub3RoZXIg
QnVpbGRlciJdLCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBmdW5jdGlvbihmYWls
dXJlQ291bnQpIHsKICAgICAgICAgICAgIGVxdWFscyhmYWlsdXJlQ291bnQsIDQpOwogICAgICAg
ICB9KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3N1bW1h
cnktbW9jay5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3N1bW1hcnktbW9jay5qcwppbmRl
eCBmMmQ3OGM0OWVmYWYzNjg1MzdkMzNmYWY0ZTg0M2ZkNjcxMDdiZjU3Li41ZTczMmNmMjU3OTNm
MDg3MjJmMTllMTgyZjExMDc3NDY2ODVhNjdkIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZl
U3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMv
c2NyaXB0cy9zdW1tYXJ5LW1vY2suanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvc3Vt
bWFyeS1tb2NrLmpzCkBAIC05Niw3ICs5Niw3IEBAIHZhciB0ZXN0TmFtZXMgPSBuZXcgQ3ljbGVy
KFsKICAgICAndGFibGVzL21vemlsbGEvYnVncy9idWc1MjUwNS5odG1sJwogXSk7CiAKLXZhciBi
dWlsZGVycyA9IG5ldyBDeWNsZXIoT2JqZWN0LmtleXMoY29uZmlnLmtCdWlsZGVycyksIDMpOwor
dmFyIGJ1aWxkZXJzID0gbmV3IEN5Y2xlcihPYmplY3Qua2V5cyhjb25maWcua1BsYXRmb3Jtc1tj
b25maWcuY3VycmVudFBsYXRmb3JtXS5idWlsZGVycyksIDMpOwogCiB2YXIgZXhwZWN0YXRpb25z
ID0gbmV3IEN5Y2xlcihbCiAgICAgJ1RFWFQnLApkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVz
L3NjcmlwdHMvdWkuanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS5qcwppbmRleCBiMjkz
MGZmODFmZjIxMzBmYTI4YzhhYjE1YWNhMDlmYTcxOWZiMjI1Li41ZjJlYzQyN2NhYmFmMzllNzY0
Yjc1NGQ4OTU1MjFjZjFlMzlhMWIxIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0
cy91aS5qcworKysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS5qcwpAQCAtMjksNyArMjks
NyBAQCB2YXIgdWkgPSB1aSB8fCB7fTsKIAogdWkuZGlzcGxheVVSTEZvckJ1aWxkZXIgPSBmdW5j
dGlvbihidWlsZGVyTmFtZSkKIHsKLSAgICByZXR1cm4gJ2h0dHA6Ly9idWlsZC5jaHJvbWl1bS5v
cmcvcC9jaHJvbWl1bS53ZWJraXQvd2F0ZXJmYWxsPycgKyAkLnBhcmFtKHsKKyAgICByZXR1cm4g
Y29uZmlnLmtQbGF0Zm9ybXNbY29uZmlnLmN1cnJlbnRQbGF0Zm9ybV0ud2F0ZXJmYWxsVVJMICsg
Jz8nICsgJC5wYXJhbSh7CiAgICAgICAgICdidWlsZGVyJzogYnVpbGRlck5hbWUKICAgICB9KTsK
IH0KQEAgLTY3LDYgKzY3LDcgQEAgdWkub25lYmFyID0gYmFzZS5leHRlbmRzKCdkaXYnLCB7CiAg
ICAgewogICAgICAgICB0aGlzLmlkID0gJ29uZWJhcic7CiAgICAgICAgIHRoaXMuaW5uZXJIVE1M
ID0KKyAgICAgICAgICAgICc8ZGl2PjxzZWxlY3QgaWQ9InBsYXRmb3JtLXBpY2tlciI+PC9zZWxl
Y3Q+PC9kaXY+JyArCiAgICAgICAgICAgICAnPHVsPicgKwogICAgICAgICAgICAgICAgICc8bGk+
PGEgaHJlZj0iI3VuZXhwZWN0ZWQiPlVuZXhwZWN0ZWQgRmFpbHVyZXM8L2E+PC9saT4nICsKICAg
ICAgICAgICAgICAgICAnPGxpPjxhIGhyZWY9IiNleHBlY3RlZCI+RXhwZWN0ZWQgRmFpbHVyZXM8
L2E+PC9saT4nICsKQEAgLTkwLDYgKzkxLDM5IEBAIHVpLm9uZWJhciA9IGJhc2UuZXh0ZW5kcygn
ZGl2JywgewogICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24oZXZlbnQsIHVpKSB7IHRoaXMuX3Jl
c3RvcmVTY3JvbGxPZmZzZXQodWkuaW5kZXgpOyB9LAogICAgICAgICB9KTsKICAgICB9LAorICAg
IF9idWlsZFBsYXRmb3Jtc1BvcHVwOiBmdW5jdGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb24gZ2V0
VVJMUGFyYW1ldGVyKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUkkoCisgICAg
ICAgICAgICAgICAgKFJlZ0V4cChuYW1lICsgJz0nICsgJyguKz8pKCZ8JCknKS5leGVjKGxvY2F0
aW9uLnNlYXJjaCl8fFssbnVsbF0pWzFdCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBGSVhNRTogZmluZCBhIGJldHRlciBwbGFjZSB0byBkbyB0aGlzLgor
ICAgICAgICB2YXIgdXJsUGxhdGZvcm0gPSBnZXRVUkxQYXJhbWV0ZXIoJ3BsYXRmb3JtJyk7Cisg
ICAgICAgIGlmICh1cmxQbGF0Zm9ybSkKKyAgICAgICAgICAgIGNvbmZpZy5zZXRQbGF0Zm9ybSh1
cmxQbGF0Zm9ybSk7CisgICAgICAgIAorICAgICAgICB2YXIgcGxhdGZvcm1TZWxlY3QgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgncGxhdGZvcm0tcGlja2VyJyk7CisgICAgICAgIHZhciBjdXJy
ZW50UGxhdGZvcm1JbmRleCA9IDA7CisgICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZy5rUGxhdGZv
cm1zKS5mb3JFYWNoKGZ1bmN0aW9uKHBsYXRmb3JtTmFtZSkgeworICAgICAgICAgICAgdmFyIG9w
dGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOworICAgICAgICAgICAgb3B0
aW9uLmlubmVyVGV4dCA9IGNvbmZpZy5rUGxhdGZvcm1zW3BsYXRmb3JtTmFtZV0ubGFiZWw7Cisg
ICAgICAgICAgICBvcHRpb24uX3BsYXRmb3JtID0gcGxhdGZvcm1OYW1lOworICAgICAgICAgICAg
aWYgKHBsYXRmb3JtTmFtZSA9PSBjb25maWcuY3VycmVudFBsYXRmb3JtKQorICAgICAgICAgICAg
ICAgIGN1cnJlbnRQbGF0Zm9ybUluZGV4ID0gcGxhdGZvcm1TZWxlY3QuY2hpbGROb2Rlcy5sZW5n
dGg7CisgICAgICAgICAgICBwbGF0Zm9ybVNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOworICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHBsYXRmb3JtU2VsZWN0LmFkZEV2ZW50TGlzdGVu
ZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHVybCA9IHdpbmRvdy5s
b2NhdGlvbi5ocmVmOworICAgICAgICAgICAgdmFyIHF1ZXJ5SW5kZXggPSB1cmwuaW5kZXhPZign
PycpOworICAgICAgICAgICAgaWYgKHF1ZXJ5SW5kZXggIT0gLTEpCisgICAgICAgICAgICAgICAg
dXJsID0gdXJsLnN1YnN0cmluZygwLCBxdWVyeUluZGV4KTsKKyAgICAgICAgICAgIHdpbmRvdy5s
b2NhdGlvbi5ocmVmID0gdXJsICsgJz9wbGF0Zm9ybT0nICsgcGxhdGZvcm1TZWxlY3Quc2VsZWN0
ZWRPcHRpb25zWzBdLl9wbGF0Zm9ybTsKKyAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAKKyAg
ICAgICAgcGxhdGZvcm1TZWxlY3Quc2VsZWN0ZWRJbmRleCA9IGN1cnJlbnRQbGF0Zm9ybUluZGV4
OworICAgIH0sCiAgICAgX3NhdmVTY3JvbGxPZmZzZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICB2
YXIgdGFiSW5kZXggPSB0aGlzLl90YWJzLnRhYnMoJ29wdGlvbicsICdzZWxlY3RlZCcpOwogICAg
ICAgICB0aGlzLl90YWJJbmRleFRvU2F2ZWRTY3JvbGxPZmZzZXRbdGFiSW5kZXhdID0gZG9jdW1l
bnQuYm9keS5zY3JvbGxUb3A7CkBAIC0xMzEsNiArMTY1LDcgQEAgdWkub25lYmFyID0gYmFzZS5l
eHRlbmRzKCdkaXYnLCB7CiAgICAgewogICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9y
ZSh0aGlzLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOwogICAgICAgICB0aGlzLl9zZXR1cEhp
c3RvcnlIYW5kbGVycygpOworICAgICAgICB0aGlzLl9idWlsZFBsYXRmb3Jtc1BvcHVwKCk7CiAg
ICAgfSwKICAgICB0YWJOYW1lZDogZnVuY3Rpb24odGFiTmFtZSkKICAgICB7CmRpZmYgLS1naXQg
YS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS9mYWlsdXJlcy5qcyBiL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJl
cy9zY3JpcHRzL3VpL2ZhaWx1cmVzLmpzCmluZGV4IDJjNTNiZmMxYjAwMWVjZjAxZWQ0N2QzZjgy
M2E4YzFhZTViYjRjZGIuLjc3ZWNkYTNjMmE5ZWUyMGNkZTU2ZmFkZjU0N2U5ZTExODgxNTA1Y2Yg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpL2ZhaWx1cmVzLmpzCisrKyBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19o
dG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpL2ZhaWx1cmVzLmpzCkBAIC0zMyw3ICszMyw4IEBA
IHZhciBrQnVpbGRpbmdSZXN1bHQgPSAnQlVJTERJTkcnOwogdWkuZmFpbHVyZXMuQnVpbGRlciA9
IGJhc2UuZXh0ZW5kcygnYScsIHsKICAgICBpbml0OiBmdW5jdGlvbihidWlsZGVyTmFtZSwgZmFp
bHVyZXMpCiAgICAgewotICAgICAgICB2YXIgY29uZmlndXJhdGlvbiA9IGNvbmZpZy5rQnVpbGRl
cnNbYnVpbGRlck5hbWVdOworICAgICAgICB2YXIgcGxhdGZvcm1CdWlsZGVycyA9IGNvbmZpZy5r
UGxhdGZvcm1zW2NvbmZpZy5jdXJyZW50UGxhdGZvcm1dLmJ1aWxkZXJzOworICAgICAgICB2YXIg
Y29uZmlndXJhdGlvbiA9IHBsYXRmb3JtQnVpbGRlcnNbYnVpbGRlck5hbWVdOwogICAgICAgICBp
ZiAoY29uZmlndXJhdGlvbikgewogICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24udmVyc2lv
bikKICAgICAgICAgICAgICAgICB0aGlzLl9hZGRTcGFuKCd2ZXJzaW9uJywgY29uZmlndXJhdGlv
bi52ZXJzaW9uKTsKQEAgLTEwOCw3ICsxMDksNyBAQCB1aS5mYWlsdXJlcy5GYWlsdXJlR3JpZCA9
IGJhc2UuZXh0ZW5kcygndGFibGUnLCB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
T2JqZWN0LmtleXMocmVzdWx0c0J5QnVpbGRlcikuZm9yRWFjaChmdW5jdGlvbihidWlsZGVyTmFt
ZSkgewotICAgICAgICAgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSBjb25maWcua0J1aWxkZXJzW2J1
aWxkZXJOYW1lXTsKKyAgICAgICAgICAgIHZhciBjb25maWd1cmF0aW9uID0gY29uZmlnLmtQbGF0
Zm9ybXNbY29uZmlnLmN1cnJlbnRQbGF0Zm9ybV0uYnVpbGRlcnNbYnVpbGRlck5hbWVdOwogICAg
ICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uKQogICAgICAgICAgICAgICAgIHRocm93ICJVbmtu
b3duIGJ1aWxkZXIgbmFtZTogIiArIGJ1aWxkZXJOYW1lOwogICAgICAgICAgICAgdmFyIHJvdyA9
IHRoaXMuX3Jvd0J5UmVzdWx0KHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdLmFjdHVhbCk7
CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS9ub3RpZmljYXRpb25zX3Vu
aXR0ZXN0cy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpL25vdGlmaWNhdGlvbnNfdW5p
dHRlc3RzLmpzCmluZGV4IDZjNmExOGMwNTE4NWNmZWQ4MmZmMzgzMTE2Y2E0NWRiYzlhN2M0ZjMu
LmJiNDVmYTEzMjk3NWM0MjcwMTIyOWI2NjlkMTM2ZjM5NjdiMTFjYzcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1s
L1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpL25vdGlmaWNhdGlvbnNfdW5pdHRlc3RzLmpzCisrKyBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19o
dG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpL25vdGlmaWNhdGlvbnNfdW5pdHRlc3RzLmpzCkBA
IC0zMTgsNyArMzE4LDcgQEAgdGVzdCgnRmFpbGluZ1Rlc3RzU3VtbWFyeSAoZ3JvdXBpbmcpJywg
MSwgZnVuY3Rpb24oKSB7CiAKIHRlc3QoJ0J1aWxkZXJzRmFpbGluZycsIDEsIGZ1bmN0aW9uKCkg
ewogICAgIHZhciBidWlsZGVyRmFpbGluZyA9IG5ldyB1aS5ub3RpZmljYXRpb25zLkJ1aWxkZXJz
RmFpbGluZygnRGlzYXN0ZXJpZnlpbmcnKTsKLSAgICBidWlsZGVyRmFpbGluZy5zZXRGYWlsaW5n
QnVpbGRlcnMoeydXZWJraXQgTGludXgnOiBbJ2NvbXBpbGUnXSwgJ1dlYmtpdCBWaXN0YSc6IFsn
d2Via2l0X3Rlc3RzJywgJ3VwZGF0ZSddKTsKKyAgICBidWlsZGVyRmFpbGluZy5zZXRGYWlsaW5n
QnVpbGRlcnMoeydXZWJraXQgTGludXgnOiBbJ2NvbXBpbGUnXSwgJ1dlYmtpdCBWaXN0YSc6IFsn
d2Via2l0X3Rlc3RzJywgJ3VwZGF0ZSddfSk7CiAgICAgZXF1YWwoYnVpbGRlckZhaWxpbmcuaW5u
ZXJIVE1MLAogICAgICAgICAnPGRpdiBjbGFzcz0iaG93Ij4nICsKICAgICAgICAgICAgICc8dGlt
ZSBjbGFzcz0icmVsYXRpdmUiPjwvdGltZT4nICsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJl
cy9zY3JpcHRzL3VpL3BlcmYuanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJr
aXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2NyaXB0cy91aS9wZXJmLmpz
CmluZGV4IDI0MmYyMWY2ODg1NjNlYzU4ZWRjMjVhODkyYjQ3YzcxY2JlNmIwYTIuLmFiN2EyNmJh
ZjYxN2VhMzFlNDcyNmQxY2E0MmFiNmY0MjM2M2ViNTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWls
dXJlcy9zY3JpcHRzL3VpL3BlcmYuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWkv
cGVyZi5qcwpAQCAtOTEsNiArOTEsOCBAQCB1aS5wZXJmLlZpZXcgPSBiYXNlLmV4dGVuZHMoJ2Rp
dicsIHsKICAgICAgICAgaWYgKHRoaXMuX2J1aWxkZXJQaWNrZXIpCiAgICAgICAgICAgICB0aGlz
Ll90aXRsZUJhci5yZW1vdmVDaGlsZCh0aGlzLl9idWlsZGVyUGlja2VyKTsKIAorICAgICAgICBp
ZiAoIXRoaXMuX3N1aXRlUGlja2VyLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgdmFyIHNlbGVjdGVkU3VpdGUgPSB0aGlzLl9zdWl0ZVBpY2tlclt0aGlzLl9zdWl0ZVBpY2tl
ci5zZWxlY3RlZEluZGV4XS50ZXh0OwogICAgICAgICB2YXIgYnVpbGRlcnMgPSBbXTsKICAgICAg
ICAgdmFyIHVybHMgPSBbXTsKQEAgLTExOCw2ICsxMjAsOSBAQCB1aS5wZXJmLlZpZXcgPSBiYXNl
LmV4dGVuZHMoJ2RpdicsIHsKICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoZ3JhcGgpOwog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKCF0aGlzLl9idWlsZGVyUGlja2VyIHx8ICF0aGlzLl9i
dWlsZGVyUGlja2VyLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICB2YXIg
dXJsID0gdGhpcy5fYnVpbGRlclBpY2tlclt0aGlzLl9idWlsZGVyUGlja2VyLnNlbGVjdGVkSW5k
ZXhdLnZhbHVlOwogICAgICAgICBwb3BPdXRMaW5rLmhyZWYgPSB1cmw7CiAgICAgICAgIGdyYXBo
LnNyYyA9IHVybDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndl
YmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpX3VuaXR0
ZXN0cy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zY3JpcHRzL3VpX3VuaXR0ZXN0cy5qcwppbmRleCBj
ZDE4ZTg4ODgxYTMwZmI2NjJiMzkzMDI0YWQ3YzQzMmQ2Zjg3ZWVlLi4yNDY0MDQ1YzY0ZWE5MWJi
YzZiNWZhMjAxNTUwOTI5YzRjNzFmZjUyIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc2Ny
aXB0cy91aV91bml0dGVzdHMuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvVGVzdEZhaWx1cmVzL3NjcmlwdHMvdWlfdW5p
dHRlc3RzLmpzCkBAIC01NCw2ICs1NCw3IEBAIHRlc3QoInVpLm9uZWJhciIsIDMsIGZ1bmN0aW9u
KCkgewogICAgIG9uZWJhciA9IG5ldyB1aS5vbmViYXIoKTsKICAgICBvbmViYXIuYXR0YWNoKCk7
CiAgICAgZXF1YWwob25lYmFyLmlubmVySFRNTCwKKyAgICAgICAgJzxkaXY+PHNlbGVjdCBpZD0i
cGxhdGZvcm0tcGlja2VyIj48b3B0aW9uPkFwcGxlPC9vcHRpb24+PG9wdGlvbj5DaHJvbWl1bTwv
b3B0aW9uPjwvc2VsZWN0PjwvZGl2PicgKwogICAgICAgICAnPHVsIGNsYXNzPSJ1aS10YWJzLW5h
diB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWkt
Y29ybmVyLWFsbCI+JyArCiAgICAgICAgICAgICAnPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0
IHVpLWNvcm5lci10b3AgdWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUiPjxhIGhyZWY9
IiN1bmV4cGVjdGVkIj5VbmV4cGVjdGVkIEZhaWx1cmVzPC9hPjwvbGk+JyArCiAgICAgICAgICAg
ICAnPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiPjxhIGhyZWY9IiNl
eHBlY3RlZCI+RXhwZWN0ZWQgRmFpbHVyZXM8L2E+PC9saT4nICsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL1Rl
c3RGYWlsdXJlcy9zdHlsZXMvbm90aWZpY2F0aW9ucy5jc3MgYi9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc3R5
bGVzL25vdGlmaWNhdGlvbnMuY3NzCmluZGV4IDAwMjhlMWU4ZGU4OTlhNTA0NTNmN2YyOTI2Mjhm
NTJjM2RiNmU3ZDAuLmY2N2ZjYWUwZDQwYTVmYzQ2MTRiNjNlZDVhODIyNzIwNTQxMTFmZWYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmln
L3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zdHlsZXMvbm90aWZpY2F0aW9ucy5jc3MKKysrIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvVGVzdEZhaWx1cmVzL3N0eWxlcy9ub3RpZmljYXRpb25zLmNzcwpAQCAtODksMTEgKzg5LDEy
IEBAIG9sLm5vdGlmaWNhdGlvbnM+bGkgZGl2LnByb2JsZW0gewogICAgIH0KIAogICAgIG9sLm5v
dGlmaWNhdGlvbnM+bGkgdGFibGUuZmFpbHVyZXMgewotICAgICAgICB2aXNpYmlsaXR5OiBoaWRk
ZW47CisgICAgICAgIG9wYWNpdHk6IDAuMjsKKyAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBv
cGFjaXR5IDAuNXM7CiAgICAgfQogCiAgICAgb2wubm90aWZpY2F0aW9ucz5saTpob3ZlciB0YWJs
ZS5mYWlsdXJlcyB7Ci0gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CisgICAgICAgIG9wYWNp
dHk6IDE7CiAgICAgfQogCiBvbC5ub3RpZmljYXRpb25zPmxpIHVsLmNhdXNlcz5saT51bC5hY3Rp
b25zIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5v
cmctY29uZmlnL3B1YmxpY19odG1sL1Rlc3RGYWlsdXJlcy9zdHlsZXMvb25lYmFyLmNzcyBiL1Rv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1s
L1Rlc3RGYWlsdXJlcy9zdHlsZXMvb25lYmFyLmNzcwppbmRleCBlMGRkY2UyMjY5YjU4ZTFiNjJm
OGFhMzU5MzdjNjgyYTNlNjgwZTIyLi4yY2NiZGI3NDlhMGJlMWM5YTNhNTA2MmJmZTRjZGNjYTYw
MzhhZjk3IDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQu
b3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9UZXN0RmFpbHVyZXMvc3R5bGVzL29uZWJhci5jc3MKKysr
IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGlj
X2h0bWwvVGVzdEZhaWx1cmVzL3N0eWxlcy9vbmViYXIuY3NzCkBAIC00MSw2ICs0MSwxMiBAQAog
ICAgIGJvcmRlci1yYWRpdXM6IDBweDsKIH0KIAorI29uZWJhciAjcGxhdGZvcm0tcGlja2VyIHsK
KyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW46IDhweDsKKyAgZm9udC1zaXplOiBsYXJnZXI7Cit9
CisKICN1bmV4cGVjdGVkIHsKICAgICBtaW4taGVpZ2h0OiA1NTBweDsKIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnMucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2J1aWxkZXJzLnB5CmluZGV4
IDEyNDliYjU0M2Y0NmNlNmQxN2JlODFmOWJlYzA1YzEwZTc0YmIwMzYuLjY1YTFkOGQ0YjJiMDFm
MmUzMmEyMmNhMzRmYTdhMzdjNzNjYjdmMDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9idWlsZGVycy5weQpAQCAtNTMsMTMgKzUzLDE2IEBA
IF9leGFjdF9tYXRjaGVzID0gewogICAgICJXZWJraXQgTWFjMTAuNyI6IHsicG9ydF9uYW1lIjog
ImNocm9taXVtLW1hYy1saW9uIiwgInNwZWNpZmllcnMiOiBzZXQoWyJsaW9uIl0pfSwKIAogICAg
ICMgVGhlc2UgYnVpbGRlcnMgYXJlIG9uIGJ1aWxkLndlYmtpdC5vcmcuCisgICAgIkFwcGxlIExp
b24gUmVsZWFzZSBXSzEgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1saW9uIiwgInNwZWNp
ZmllcnMiOiBzZXQoWyJsaW9uIl0pfSwKKyAgICAiQXBwbGUgTGlvbiBEZWJ1ZyBXSzEgKFRlc3Rz
KSI6IHsicG9ydF9uYW1lIjogIm1hYy1saW9uIiwgInNwZWNpZmllcnMiOiBzZXQoWyJsaW9uIiwg
ImRlYnVnIl0pfSwKKyAgICAiQXBwbGUgTGlvbiBSZWxlYXNlIFdLMiAoVGVzdHMpIjogeyJwb3J0
X25hbWUiOiAibWFjLWxpb24iLCAic3BlY2lmaWVycyI6IHNldChbImxpb24iLCAid2syIl0pfSwK
KyAgICAiQXBwbGUgTGlvbiBEZWJ1ZyBXSzIgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1s
aW9uIiwgInNwZWNpZmllcnMiOiBzZXQoWyJsaW9uIiwgIndrMiIsICJkZWJ1ZyJdKX0sCisKKyAg
ICAiQXBwbGUgV2luIFhQIERlYnVnIChUZXN0cykiOiB7InBvcnRfbmFtZSI6ICJ3aW4teHAiLCAi
c3BlY2lmaWVycyI6IHNldChbIndpbiIsICJkZWJ1ZyJdKX0sCisgICAgIkFwcGxlIFdpbiA3IFJl
bGVhc2UgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIndpbi14cCIsICJzcGVjaWZpZXJzIjogc2V0
KFsid2luIl0pfSwKKwogICAgICJHVEsgTGludXggMzItYml0IERlYnVnIjogeyJwb3J0X25hbWUi
OiAiZ3RrIiwgInNwZWNpZmllcnMiOiBzZXQoWyJndGsiXSl9LAotICAgICJMZW9wYXJkIEludGVs
IERlYnVnIChUZXN0cykiOiB7InBvcnRfbmFtZSI6ICJtYWMtbGVvcGFyZCIsICJzcGVjaWZpZXJz
Ijogc2V0KFsibGVvcGFyZCJdKX0sCi0gICAgIlNub3dMZW9wYXJkIEludGVsIFJlbGVhc2UgKFRl
c3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1zbm93bGVvcGFyZCIsICJzcGVjaWZpZXJzIjogc2V0
KFsic25vd2xlb3BhcmQiXSl9LAotICAgICJTbm93TGVvcGFyZCBJbnRlbCBSZWxlYXNlIChXZWJL
aXQyIFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIm1hYy1zbm93bGVvcGFyZC13azIiLCAic3BlY2lm
aWVycyI6IHNldChbIndrMiJdKX0sCiAgICAgIlF0IExpbnV4IFJlbGVhc2UiOiB7InBvcnRfbmFt
ZSI6ICJxdC1saW51eCIsICJzcGVjaWZpZXJzIjogc2V0KFsid2luIiwgImxpbnV4IiwgIm1hYyJd
KX0sCi0gICAgIldpbmRvd3MgWFAgRGVidWcgKFRlc3RzKSI6IHsicG9ydF9uYW1lIjogIndpbi14
cCIsICJzcGVjaWZpZXJzIjogc2V0KFsid2luIl0pfSwKLSAgICAiV2luZG93cyA3IFJlbGVhc2Ug
KFdlYktpdDIgVGVzdHMpIjogeyJwb3J0X25hbWUiOiAid2luLWZ1dHVyZS13azIiLCAic3BlY2lm
aWVycyI6IHNldChbIndrMiJdKX0sCiAgICAgIkVGTCBMaW51eCBSZWxlYXNlIjogeyJwb3J0X25h
bWUiOiAiZWZsIiwgInNwZWNpZmllcnMiOiBzZXQoWyJlZmwiXSl9LAogfQogCg==
</data>
<flag name="review"
          id="155554"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>