<?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>51258</bug_id>
          
          <creation_ts>2010-12-17 08:34:26 -0800</creation_ts>
          <short_desc>TouchEvents does not support multi-touch on a page with multiple touch targets</short_desc>
          <delta_ts>2011-05-09 00:22:18 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.quirksmode.org/m/tests/drag2.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Dixon">joth</reporter>
          <assigned_to name="Jonathan Dixon">joth</assigned_to>
          <cc>ap</cc>
    
    <cc>benm</cc>
    
    <cc>christian.webkit</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gmak</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kim.1.gronholm</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>manyoso</cc>
    
    <cc>steveblock</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>323794</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-17 08:34:26 -0800</bug_when>
    <thetext>The way EventHandler::handleTouchEvent currently works means that all touch points of a given type (press, move, release) will all be sent to a single target.
This does not work correctly with the page above, as each draggable square is its own div with its own event target. So, for e.g., using 2 fingers to move 2 divs requires each div receive its own ontouchmove events, containing the respective changedTouches.

Currently, the implementation only dispatches all of the move events to a single target:

3011	    if (movedTouches-&gt;length() &gt; 0) {
3012	        Touch* changedTouch = movedTouches-&gt;item(0);  // &lt;-- only looking up the first touch point&apos;s target
3014	        touchEventTarget = changedTouch-&gt;target();
....
3026	        touchEventTarget-&gt;dispatchEvent(moveEv.get(), ec);
3027	        defaultPrevented |= moveEv-&gt;defaultPrevented();  // &lt;-- dispatching all the move events to this single touch target
3028	    }
3029	

ditto for touch start, end and cancel events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323817</commentid>
    <comment_count>1</comment_count>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-17 09:15:00 -0800</bug_when>
    <thetext>I have started work on a patch to address this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324926</commentid>
    <comment_count>2</comment_count>
      <attachid>77097</attachid>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-21 03:00:58 -0800</bug_when>
    <thetext>Created attachment 77097
Proposed fix 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324927</commentid>
    <comment_count>3</comment_count>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-21 03:03:37 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=77097) [details]
&gt; Proposed fix 1

forgot to mention: tested using the Qt test runner:


$ ./WebKitTools/Scripts/run-webkit-tests --qt --repeat-each 50 --timeout 5 fast/events/touch/
Running build-dumprendertree
Running tests from /usr/local/google/home/joth/dev/b.clank/src/third_party/WebKit/LayoutTests
Testing 13 test cases, repeating each test 50 times.
fast/events/touch .................................................................................................
6.72s total testing time

all 650 test cases succeeded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324950</commentid>
    <comment_count>4</comment_count>
      <attachid>77097</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2010-12-21 05:06:44 -0800</bug_when>
    <thetext>Comment on attachment 77097
Proposed fix 1

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

Nice cleanup, thanks! Just a few comments.

&gt; WebCore/page/EventHandler.cpp:2789
&gt; +static const AtomicString&amp; eventNameForTouchPointState(int state)

PlatformTouchPoint::State instead of int?

&gt; WebCore/page/EventHandler.cpp:2808
&gt; +    // The complete set of touches in this event, for the event touches list.

I think this comment is a little confusing. How about something like
&quot;Holds the complete set of touches on the screen and will be used as the &apos;touches&apos; list in the JS event.&quot;

&gt; WebCore/page/EventHandler.cpp:2811
&gt; +    // For each target holds the complete set of currently active touches, for the targetTouches list.

Again, a bit confusing. Maybe be more explicit and mention that it forms the &apos;targetTouches&apos; list in the JS event. I think the touch code needs as many clear comments as possible :)

&gt; WebCore/page/EventHandler.cpp:2815
&gt; +    // Array of touches per state, used to assembe the the changedTouches list.

assembe -&gt; assemble and too many &apos;the&apos;s :), changedTouches list in JS event.

&gt; WebCore/page/EventHandler.cpp:2820
&gt; +        HashSet&lt;EventTarget*&gt; m_targets;

Should the EventTargets be RefPtrs?

&gt; WebCore/page/EventHandler.cpp:2854
&gt; +        ASSERT(node);

node.get()?

&gt; WebCore/page/EventHandler.cpp:2891
&gt; +        if (!touchTarget.get())

Why is this moved? Seemed better in it&apos;s old place so that we didn&apos;t bother creating a Touch without a target.

&gt; WebCore/page/EventHandler.cpp:2899
&gt; +        // touches and targetTouches should contain information about every touch currently on the screen.

Maybe expand this comment to say that if it is a TouchRelease or Cancel then as it&apos;s not on the screen it won&apos;t be in touches or targetTouches, but will be in changedTouches.

&gt; WebCore/page/EventHandler.cpp:2916
&gt; +            changedTouches[point.state()].m_targets.add(touchTarget.get());

Perhaps point.state() could go into a local, we seem to be calling it a lot.

&gt; WebCore/page/EventHandler.cpp:2932
&gt; +        const AtomicString&amp; stateName(eventNameForTouchPointState(state));

Can we move this into the TouchEvent::create call directly?

&gt; WebCore/page/EventHandler.cpp:2938
&gt; +            ASSERT(targetTouches);

targetTouches.get()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325007</commentid>
    <comment_count>5</comment_count>
      <attachid>77097</attachid>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-21 08:00:26 -0800</bug_when>
    <thetext>Comment on attachment 77097
Proposed fix 1

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

Thanks for the comments, think I covered them all. Just preparing a new patch...

&gt;&gt; WebCore/page/EventHandler.cpp:2789
&gt;&gt; +static const AtomicString&amp; eventNameForTouchPointState(int state)
&gt; 
&gt; PlatformTouchPoint::State instead of int?

Done

&gt;&gt; WebCore/page/EventHandler.cpp:2808
&gt;&gt; +    // The complete set of touches in this event, for the event touches list.
&gt; 
&gt; I think this comment is a little confusing. How about something like
&gt; &quot;Holds the complete set of touches on the screen and will be used as the &apos;touches&apos; list in the JS event.&quot;

Done. Thanks.

&gt;&gt; WebCore/page/EventHandler.cpp:2811
&gt;&gt; +    // For each target holds the complete set of currently active touches, for the targetTouches list.
&gt; 
&gt; Again, a bit confusing. Maybe be more explicit and mention that it forms the &apos;targetTouches&apos; list in the JS event. I think the touch code needs as many clear comments as possible :)

How about:
    // Another different on the &apos;touches&apos; list above: filtered and grouped by event target. Used for the
    // &apos;targetTouches&apos; list in the JS event.

&gt;&gt; WebCore/page/EventHandler.cpp:2815
&gt;&gt; +    // Array of touches per state, used to assembe the the changedTouches list.
&gt; 
&gt; assembe -&gt; assemble and too many &apos;the&apos;s :), changedTouches list in JS event.

Done

&gt;&gt; WebCore/page/EventHandler.cpp:2820
&gt;&gt; +        HashSet&lt;EventTarget*&gt; m_targets;
&gt; 
&gt; Should the EventTargets be RefPtrs?

Done. + added a typedef EventTargetSet

&gt;&gt; WebCore/page/EventHandler.cpp:2854
&gt;&gt; +        ASSERT(node);
&gt; 
&gt; node.get()?

Apparently not, jorlow says to rely on the conversion operator.

&gt;&gt; WebCore/page/EventHandler.cpp:2891
&gt;&gt; +        if (!touchTarget.get())
&gt; 
&gt; Why is this moved? Seemed better in it&apos;s old place so that we didn&apos;t bother creating a Touch without a target.

Mistake, fixed. Good spot!

&gt;&gt; WebCore/page/EventHandler.cpp:2899
&gt;&gt; +        // touches and targetTouches should contain information about every touch currently on the screen.
&gt; 
&gt; Maybe expand this comment to say that if it is a TouchRelease or Cancel then as it&apos;s not on the screen it won&apos;t be in touches or targetTouches, but will be in changedTouches.

Changed to:
        // touches and targetTouches should only contain information about touches still on the screen, so if this point is
        // released or cancelled it will only appear in the changedTouches list.

I also added a link to http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/ upto, which hopefully helps spell this lot out.

&gt;&gt; WebCore/page/EventHandler.cpp:2916
&gt;&gt; +            changedTouches[point.state()].m_targets.add(touchTarget.get());
&gt; 
&gt; Perhaps point.state() could go into a local, we seem to be calling it a lot.

Done

&gt;&gt; WebCore/page/EventHandler.cpp:2932
&gt;&gt; +        const AtomicString&amp; stateName(eventNameForTouchPointState(state));
&gt; 
&gt; Can we move this into the TouchEvent::create call directly?

Minor benefit it doing it outside the loop, and also it now has a static_cast (see your comment #1) so probably clearer as it too.

&gt;&gt; WebCore/page/EventHandler.cpp:2938
&gt;&gt; +            ASSERT(targetTouches);
&gt; 
&gt; targetTouches.get()?

Apparently not</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325011</commentid>
    <comment_count>6</comment_count>
      <attachid>77116</attachid>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-21 08:03:04 -0800</bug_when>
    <thetext>Created attachment 77116
Patch 2 - benm comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325198</commentid>
    <comment_count>7</comment_count>
      <attachid>77116</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-12-21 14:18:45 -0800</bug_when>
    <thetext>Comment on attachment 77116
Patch 2 - benm comments.

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

&gt; WebCore/page/EventHandler.cpp:2801
&gt; +        ASSERT(false);

ASSERT_NOT_REACHED()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325434</commentid>
    <comment_count>8</comment_count>
      <attachid>77200</attachid>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-22 03:10:39 -0800</bug_when>
    <thetext>Created attachment 77200
Patch 3 - tonikitoo comment and fix comment typo

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325435</commentid>
    <comment_count>9</comment_count>
      <attachid>77200</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2010-12-22 03:25:05 -0800</bug_when>
    <thetext>Comment on attachment 77200
Patch 3 - tonikitoo comment and fix comment typo

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

WebCore changes look good. Had a quick look over the layout tests ...

To any other folks participating in the review: I don&apos;t have review rights so I cannot r+ this patch when it&apos;s ready.

&gt; LayoutTests/fast/events/touch/touch-target-expected.txt:41
&gt; +TEST COMPLETE

We now have two &quot;test complete&quot; messages in this test - doesn&apos;t seem right?

&gt; LayoutTests/fast/events/touch/touch-target-limited-expected.txt:45
&gt; +TEST COMPLETE

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325437</commentid>
    <comment_count>10</comment_count>
      <attachid>77201</attachid>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-22 03:30:54 -0800</bug_when>
    <thetext>Created attachment 77201
Patch 4 - corrects expected results to only have one TEST COMPLETE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325484</commentid>
    <comment_count>11</comment_count>
      <attachid>77201</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-22 07:25:21 -0800</bug_when>
    <thetext>Comment on attachment 77201
Patch 4 - corrects expected results to only have one TEST COMPLETE

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

&gt; WebCore/page/EventHandler.cpp:2860
&gt; +        RefPtr&lt;Node&gt; node = result.innerNode();

Why do we now take a reference? Is this required?

&gt; WebCore/page/EventHandler.cpp:2943
&gt; +            RefPtr&lt;TouchList&gt; targetTouches(state == PlatformTouchPoint::TouchCancelled ? emptyList : touchesByTarget.get(touchEventTarget));

Would it be clearer to have a isTouchCancelEvent boolean set up outside this inner loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325501</commentid>
    <comment_count>12</comment_count>
      <attachid>77219</attachid>
    <who name="Jonathan Dixon">joth</who>
    <bug_when>2010-12-22 08:26:37 -0800</bug_when>
    <thetext>Created attachment 77219
Patch 5 - steveblock comments

Thanks, both comments done.
Could you commit-queue+ it too? Cheers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326025</commentid>
    <comment_count>13</comment_count>
      <attachid>77219</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-23 04:21:30 -0800</bug_when>
    <thetext>Comment on attachment 77219
Patch 5 - steveblock comments

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326045</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 05:48:45 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 77219:

inspector/debugger-pause-on-breakpoint.html bug 51320 (author: podivilov@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326046</commentid>
    <comment_count>15</comment_count>
      <attachid>77219</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 05:49:58 -0800</bug_when>
    <thetext>Comment on attachment 77219
Patch 5 - steveblock comments

Clearing flags on attachment: 77219

Committed r74553: &lt;http://trac.webkit.org/changeset/74553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326047</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 05:50:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400369</commentid>
    <comment_count>17</comment_count>
      <attachid>77219</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-05-09 00:22:18 -0700</bug_when>
    <thetext>Comment on attachment 77219
Patch 5 - steveblock comments

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

&gt; LayoutTests/fast/events/touch/script-tests/multi-touch-grouped-targets.js:75
&gt; +    eventSender.addTouchPoint(50, 150);

Did you intend to add two identical touch points here? Since you really only add two unique test points, a correct implementation should fail this test (event.changedTouches.length should never be 3, for instance).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77097</attachid>
            <date>2010-12-21 03:00:58 -0800</date>
            <delta_ts>2010-12-21 08:03:04 -0800</delta_ts>
            <desc>Proposed fix 1</desc>
            <filename>bug51258_patch.txt</filename>
            <type>text/plain</type>
            <size>34074</size>
            <attacher name="Jonathan Dixon">joth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTA4MmUwLi4yNjdiOTY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTIt
MjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qgc3Vw
cG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAorCisg
ICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gtZ3JvdXBlZC10YXJnZXRzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91
Y2gtZ3JvdXBlZC10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Rv
dWNoL3NjcmlwdC10ZXN0cy9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuanM6IEFkZGVkLgor
ICAgICAgICAoZGVjbGFyZVRvdWNoSGFuZGxlci5yZXR1cm4uc2hvdWxkQmUpOgorICAgICAgICAo
ZGVjbGFyZVRvdWNoSGFuZGxlcik6CisgICAgICAgICh0b3VjaEVuZEhhbmRsZXIpOgorICAgICAg
ICBBZGRlZCBuZXcgdGVzdCB0aGF0IGVuc3VyZXMgYm90aCB0ZXN0IHRhcmdldHMgcmVjZWl2ZSBl
dmVudHMgd2hlbiBoaXQgYnkgbXVsdGlwbGUKKyAgICAgICAgdG91Y2ggcG9pbnRzIGZyb20gdGhl
IHNhbWUgcGxhdGZvcm0gZXZlbnQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9zY3Jp
cHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanM6CisgICAgICAgIChkZWNsYXJlVG91Y2hT
dGFydC5yZXR1cm4udG91Y2hTdGFydEhhbmRsZXIpOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQpOgorICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZS5yZXR1cm4udG91Y2hNb3ZlSGFuZGxlcik6
CisgICAgICAgIChkZWNsYXJlVG91Y2hNb3ZlKToKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3Vj
aC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQucmV0dXJuLnRvdWNoU3RhcnRIYW5kbGVyKToKKyAgICAgICAgKGRlY2xhcmVUb3VjaFN0YXJ0
KToKKyAgICAgICAgKGRlY2xhcmVUb3VjaE1vdmUucmV0dXJuLnRvdWNoTW92ZUhhbmRsZXIpOgor
ICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZSk6CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC10YXJnZXQtbGltaXRlZC1leHBlY3RlZC50eHQ6CisgICAgICAgIFVwZGF0ZWQgJiByZWJh
c2VsaW5lZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IG5ldyBleHBlY3RhdGlvbnMuCisKIDIw
MTAtMTItMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDAzMmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1n
cm91cGVkLXRhcmdldHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1Rlc3RzIHRoYXQg
dGhlIGFuIGV2ZW50IGlzIHNlbnQgZm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0
IHRvdWNoZXMgY29udGFpbnMgYWxsIHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0CisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMg
MworUEFTUyBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50b3Vj
aGVzLmxlbmd0aCBpcyAzCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQ
QVNTIGV2ZW50LnRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQuY2hhbmdlZFRvdWNoZXMu
bGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC5j
aGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaGVuZCIK
K1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMAorUEFTUyBldmVudC50YXJnZXRUb3VjaGVz
Lmxlbmd0aCBpcyAwCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQQVNT
IGV2ZW50LnR5cGUgaXMgInRvdWNoZW5kIgorUEFTUyBldmVudC50b3VjaGVzLmxlbmd0aCBpcyAw
CitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDAKK1BBU1MgZXZlbnQuY2hhbmdl
ZFRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbApA
QCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8IS0tCisg
IFRvdWNoIHRlc3RzIHRoYXQgaW52b2x2ZSB0aGUgb250b3VjaHN0YXJ0LCBvbnRvdWNobW92ZSwg
b250b3VjaGVuZCBvciBvbnRvdWNoY2FuY2VsIGNhbGxiYWNrcworICBzaG91bGQgYmUgd3JpdHRl
biBpbiBhbiBhc3luY2hyb25vdXMgZmFzaGlvbiBzbyB0aGV5IGNhbiBiZSBydW4gb24gbW9iaWxl
IHBsYXRmb3JtcyBsaWtlIEFuZHJvaWQuCisgIFRoaXMgdGVtcGxhdGUgd2lsbCBnZW5lcmF0ZSBh
biBhc3luY2hyb25vdXMgc3R5bGUgdGVzdCBieSB1c2luZyB0aGUganMtdGVzdC1wb3N0LWZ1bmN0
aW9uIHNjcmlwdC4KKyAgWW91IHdpbGwgbmVlZCB0byBpbnZva2UgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKSBpbiB5b3VyIHRlc3Qgc2NyaXB0IHdoZW4gdGhlIHRlc3QgY29tcGxldGVzLgorLS0+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQt
dGFyZ2V0cy5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvbXVsdGktdG91Y2gtZ3JvdXBl
ZC10YXJnZXRzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3Rz
L211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZDI2ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpA
QCAtMCwwICsxLDg5IEBACit2YXIgdGFyZ2V0c0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwordGFyZ2V0c0Rpdi5pZCA9ICJ0YXJnZXRzRGl2IjsKKwordmFyIGRpdjEgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RpdjEuaWQgPSAidGFyZ2V0QSI7CitkaXYxLnN0
eWxlLndpZHRoID0gIjEwMHB4IjsKK2RpdjEuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKK2RpdjEu
c3R5bGUuYmFja2dyb3VuZENvbG9yID0gImJsdWUiOworCit2YXIgZGl2MiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworZGl2Mi5pZCA9ICJ0YXJnZXRCIjsKK2RpdjIuc3R5bGUud2lk
dGggPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOworCitkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0
YXJnZXRzRGl2LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpKTsKK3RhcmdldHNE
aXYuYXBwZW5kQ2hpbGQoZGl2MSk7Cit0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2JyJykpOwordGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkaXYyKTsKKworZnVu
Y3Rpb24gZGVjbGFyZVRvdWNoSGFuZGxlcihkaXZfaWQsIGV4cGVjdGVkVGFyZ2V0VG91Y2hlcykK
K3sKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCB1c2Ug
dGhlIHBhcmFtZXRlcnMgKGRpdl9pZCwgZXhwZWN0ZWRUYXJnZXRUb3VjaGVzKSBpbiBzaG91bGRC
ZS4uIGNhbGxzLCBhcworICAgICAgICAvLyB0aGUgb3JkZXIgb2YgZXZlbnQgZGlzcGF0Y2ggaXMg
bm90IGRldGVybWluaXN0aWMgYWNyb3NzIGV4ZWN1dGlvbnMgYW5kIHJlb3JkZXJpbmcKKyAgICAg
ICAgLy8gb2Z0aGUgUEFTUyBkZWJ1ZyBvdXRwdXQgZGV0YWlscyB3b3VsZCBjYXVzZSB0aGUgdGVz
dCB0byBiZSB1bnJlbGlhYmxlLgorICAgICAgICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5n
dGgnLCAnMycpOworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggIT0gZXhw
ZWN0ZWRUYXJnZXRUb3VjaGVzKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgnV3JvbmcgdGFyZ2V0
VG91Y2ggbGVuZ3RoOiAnICsgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggKyAnIHZzICcgKyBl
eHBlY3RlZFRhcmdldFRvdWNoZXMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50
LnRhcmdldFRvdWNoZXMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChl
dmVudC50YXJnZXRUb3VjaGVzW2ldLnRhcmdldC5pZCAhPSBkaXZfaWQpCisgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgnSW5jb3JyZWN0IHRhcmdldFRvdWNoIElEOiAnICsgZXZlbnQudGFyZ2V0
VG91Y2hlc1tpXS50YXJnZXQuaWQgKyAnIHZzICcgKyBkaXZfaWQpOworICAgICAgICB9CisgICAg
ICAgIHNob3VsZEJlKCdldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGgnLCAnMycpOworICAgIH0K
K30KKwordmFyIGVuZENvdW50ID0gMDsKK2Z1bmN0aW9uIHRvdWNoRW5kSGFuZGxlcigpCit7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNoZW5kJyk7CisKKyAg
ICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5ndGgnLCAnMCcpOworICAgIHNob3VsZEJlKCdl
dmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcwJyk7CisgICAgc2hvdWxkQmUoJ2V2ZW50LmNo
YW5nZWRUb3VjaGVzLmxlbmd0aCcsICczJyk7CisKKyAgICBpZiAoKytlbmRDb3VudCA9PSAyKQor
ICAgIHsKKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgIH0KK30KKworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVj
bGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyksIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRM
aXN0ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyks
IGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRs
ZXIsIGZhbHNlKTsKKworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFy
ZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZhbHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0
ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZh
bHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRsZXIs
IGZhbHNlKTsKKworZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIGFuIGV2ZW50IGlzIHNlbnQg
Zm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0IHRvdWNoZXMgY29udGFpbnMgYWxs
IHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0Iik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNo
UG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg1MCwgMTUwKTsKKyAgICBl
dmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDUwLCAyNTApOworICAgIGV2ZW50U2VuZGVyLmFkZFRv
dWNoUG9pbnQoNTAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAg
ZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAyMDAsIDE1MCk7CisgICAgZXZlbnRTZW5k
ZXIudXBkYXRlVG91Y2hQb2ludCgxLCAzMDAsIDI1MCk7CisgICAgZXZlbnRTZW5kZXIudXBkYXRl
VG91Y2hQb2ludCgyLCA0MDAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisK
KyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci5y
ZWxlYXNlVG91Y2hQb2ludCgxKTsKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgy
KTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworfSBlbHNlCisgICAgZGVidWcoJ1RoaXMg
dGVzdCByZXF1aXJlcyBEUlQuJyk7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5q
cwppbmRleCBmZDM0MDBjLi41NWNlZWJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanMKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC1saW1p
dGVkLmpzCkBAIC0xMyw1OSArMTMsNjYgQEAgZGl2Mi5zdHlsZS53aWR0aCA9ICIxMDBweCI7CiBk
aXYyLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CiBkaXYyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9
ICJncmVlbiI7CiAKLXZhciB0b3VjaFN0YXJ0Q291bnQgPSAwOwotdmFyIHRvdWNoTW92ZUNvdW50
ID0gMDsKLQogZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodGFyZ2V0c0RpdiwgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjEp
OwogdGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsK
IHRhcmdldHNEaXYuYXBwZW5kQ2hpbGQoZGl2Mik7CiAKLWZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5k
bGVyKCkKK2Z1bmN0aW9uIGRlY2xhcmVUb3VjaFN0YXJ0KCkKIHsKLSAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCAndG91Y2hzdGFydCcpOwotICAgIHN3aXRjaCAodG91Y2hT
dGFydENvdW50KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2
Mi5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNb
MV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICB2YXIgdG91
Y2hTdGFydENvdW50ID0gMDsKKyAgICByZXR1cm4gZnVuY3Rpb24gdG91Y2hTdGFydEhhbmRsZXIo
KQorICAgIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3Rv
dWNoc3RhcnQnKTsKKyAgICAgICAgc3dpdGNoICh0b3VjaFN0YXJ0Q291bnQpIHsKKyAgICAgICAg
ICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoJywg
JzEnKTsKKworICAgICAgICB0b3VjaFN0YXJ0Q291bnQrKzsKICAgICB9Ci0KLSAgICB0b3VjaFN0
YXJ0Q291bnQrKzsKIH0KIAotZnVuY3Rpb24gdG91Y2hNb3ZlSGFuZGxlcigpCitmdW5jdGlvbiBk
ZWNsYXJlVG91Y2hNb3ZlKGRpdl9pZCkKIHsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2
ZW50LnR5cGUnLCAndG91Y2htb3ZlJyk7Ci0gICAgc3dpdGNoICh0b3VjaE1vdmVDb3VudCkgewot
ICAgICAgICBjYXNlIDA6Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQn
LCBkaXYyLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywg
ZGl2Mi5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNo
ZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBpZiAoKyt0b3VjaE1vdmVDb3VudCA9PSAzKQorICAgIHZhciB0b3VjaE1vdmVDb3VudCA9
IDA7CisgICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoTW92ZUhhbmRsZXIoKQogICAgIHsKLSAgICAg
ICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOwotICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCAndG91Y2htb3ZlJyk7CisgICAg
ICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291bnQpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2
ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQn
LCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3Ro
JywgJzEnKTsKKworICAgICAgICBpZiAoKyt0b3VjaE1vdmVDb3VudCA9PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVs
bHlQYXJzZWQoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotZGl2MS5hZGRFdmVudExpc3RlbmVy
KCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhhbmRsZXIsIGZhbHNlKTsKLWRpdjEuYWRkRXZlbnRM
aXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hNb3ZlSGFuZGxlciwgZmFsc2UpOworZGl2MS5hZGRF
dmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOwor
ZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZh
bHNlKTsKIAotZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhh
bmRsZXIsIGZhbHNlKTsKLWRpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hN
b3ZlSGFuZGxlciwgZmFsc2UpOworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iiwg
ZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3Vj
aG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZhbHNlKTsKIAogZGVzY3JpcHRpb24oIlRlc3Rz
IHRoYXQgdGhlIHRhcmdldCBvZiB0b3VjaGVzIG1hdGNoIHRoZSBlbGVtZW50IHdoZXJlIHRoZSBl
dmVudCBvcmlnaW5hdGVkLCBub3Qgd2hlcmUgdGhlIHRvdWNoIGlzIGN1cnJlbnRseSBvY2N1cnJp
bmcuIFRoaXMgaXMgYSBsaW1pdGVkIHZlcnNpb24gb2YgdGVzdCB0b3VjaC10YXJnZXQuaHRtbCB0
aGF0IGF2b2lkcyB0aGUgc2l0dWF0aW9uIHdoZXJlIG9uZSB0b3VjaCBwb2ludCBpcyByZWxlYXNl
ZCB3aGlsZSBhbm90aGVyIGlzIG1haW50YWluZWQuIik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzCmlu
ZGV4IDhlNDdmMjMuLjViMzc5YmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC5qcwpAQCAtMTMsNTkgKzEz
LDY2IEBAIGRpdjIuc3R5bGUud2lkdGggPSAiMTAwcHgiOwogZGl2Mi5zdHlsZS5oZWlnaHQgPSAi
MTAwcHgiOwogZGl2Mi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOwogCi12YXIgdG91
Y2hTdGFydENvdW50ID0gMDsKLXZhciB0b3VjaE1vdmVDb3VudCA9IDA7Ci0KIGRvY3VtZW50LmJv
ZHkuaW5zZXJ0QmVmb3JlKHRhcmdldHNEaXYsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykpOwogdGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkaXYxKTsKIHRhcmdldHNEaXYuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENo
aWxkKGRpdjIpOwogCi1mdW5jdGlvbiB0b3VjaFN0YXJ0SGFuZGxlcigpCitmdW5jdGlvbiBkZWNs
YXJlVG91Y2hTdGFydCgpCiB7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBl
JywgJ3RvdWNoc3RhcnQnKTsKLSAgICBzd2l0Y2ggKHRvdWNoU3RhcnRDb3VudCkgewotICAgICAg
ICBjYXNlIDA6Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNo
ZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEu
aWQpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgdmFyIHRvdWNoU3RhcnRDb3VudCA9IDA7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudHlwZScsICd0b3VjaHN0YXJ0Jyk7CisgICAgICAg
IHN3aXRjaCAodG91Y2hTdGFydENvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZl
bnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcs
IGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNo
b3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAgdG91
Y2hTdGFydENvdW50Kys7CiAgICAgfQotCi0gICAgdG91Y2hTdGFydENvdW50Kys7CiB9CiAKLWZ1
bmN0aW9uIHRvdWNoTW92ZUhhbmRsZXIoKQorZnVuY3Rpb24gZGVjbGFyZVRvdWNoTW92ZShkaXZf
aWQpCiB7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92
ZScpOwotICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291bnQpIHsKLSAgICAgICAgY2FzZSAwOgotICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRp
djEuaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCsrdG91Y2hNb3Zl
Q291bnQgPT0gMykKKyAgICB2YXIgdG91Y2hNb3ZlQ291bnQgPSAwOworICAgIHJldHVybiBmdW5j
dGlvbiB0b3VjaE1vdmVIYW5kbGVyKCkKICAgICB7Ci0gICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAg
ICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92ZScpOworICAgICAgICBzd2l0Y2ggKHRvdWNoTW92
ZUNvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdl
dC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
ZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5p
ZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHNob3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAg
aWYgKCsrdG91Y2hNb3ZlQ291bnQgPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAg
IH0KICAgICB9CiB9CiAKLWRpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRvdWNo
U3RhcnRIYW5kbGVyLCBmYWxzZSk7Ci1kaXYxLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIs
IHRvdWNoTW92ZUhhbmRsZXIsIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hz
dGFydCIsIGRlY2xhcmVUb3VjaFN0YXJ0KCksIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5l
cigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoTW92ZSgpLCBmYWxzZSk7CiAKLWRpdjIuYWRkRXZl
bnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRvdWNoU3RhcnRIYW5kbGVyLCBmYWxzZSk7Ci1kaXYy
LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIHRvdWNoTW92ZUhhbmRsZXIsIGZhbHNlKTsK
K2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIGRlY2xhcmVUb3VjaFN0YXJ0KCks
IGZhbHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNo
TW92ZSgpLCBmYWxzZSk7CiAKIGRlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHRoZSB0YXJnZXQgb2Yg
dG91Y2hlcyBtYXRjaCB0aGUgZWxlbWVudCB3aGVyZSB0aGUgZXZlbnQgb3JpZ2luYXRlZCwgbm90
IHdoZXJlIHRoZSB0b3VjaCBpcyBjdXJyZW50bHkgb2NjdXJyaW5nLiIpOwogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4
dAppbmRleCA2MGE0YzM3Li44ZGJiZDc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1leHBlY3RlZC50eHQKQEAgLTcsMTggKzcsNDIg
QEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUKIFBBU1MgZXZlbnQudHlwZSBpcyAidG91Y2hzdGFy
dCIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2
ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRU
b3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCitQQVNT
IGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50b3Vj
aGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5s
ZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRh
cmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMg
MQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0u
dGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBp
cyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBl
dmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0Lmlk
IGlzICJ0YXJnZXRBIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0
QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBl
IGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJn
ZXRBIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1Mg
ZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBldmVudC50eXBlIGlzICJ0b3Vj
aHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKIFBB
U1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRh
cmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgor
UEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQu
dG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNo
ZXMubGVuZ3RoIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNo
ZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdl
dC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtbGltaXRlZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQt
bGltaXRlZC1leHBlY3RlZC50eHQKaW5kZXggMGMxZWZkMC4uZDE4OWI4YiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1s
aW1pdGVkLWV4cGVjdGVkLnR4dApAQCAtNywxOCArNyw0NiBAQCBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVz
WzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQu
aWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BB
U1MgZXZlbnQudHlwZSBpcyAidG91Y2hzdGFydCIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJn
ZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0
YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50
LnR5cGUgaXMgInRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMg
InRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgor
UEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMg
InRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEi
CitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVu
dC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92
ZSIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2
ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRU
b3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92ZSIKIFBBU1Mg
ZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2ZW50LnRvdWNo
ZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxl
bmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCiBQQVNTIGV2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRh
cmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMg
MQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgorUEFTUyBldmVudC50b3VjaGVzWzBd
LnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQg
aXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1Mg
ZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdl
dEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0
b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgog
UEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQu
dGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDdlNjgwNzkuLjUzMjRiYjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAt
MTItMjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qg
c3VwcG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAor
CisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFy
Z2V0cy5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpldmVudE5hbWVGb3JUb3VjaFBvaW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgUmVkZXNpZ25lZCBldmVu
dCBoYW5kbGVyIHRvIGVuc3VyZSBhbGwgZXZlbnQgdGFyZ2V0cyBpbnZvbHZlZCBpbiBhIGdpdmVu
CisgICAgICAgIG11bHRpdG91Y2ggZXZlbnQgZ2V0IHRoZSBhcHByb3ByaWF0ZSBldmVudChzKSBm
aXJlZC4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oOiBBZGRlZCBl
bmQtc3RvcCBtYXJrZXIgZm9yIFN0YXRlIGVudW0uCisKIDIwMTAtMTItMDkgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMzI4YmU2My4uNzI0Yjc5OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKQEAgLTI3ODYsMjggKzI3ODYsNDEgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUxh
c3RTY3JvbGxiYXJVbmRlck1vdXNlKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIHNldEwKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKLXN0YXRpYyBQYXNzUmVmUHRyPFRvdWNoTGlzdD4g
YXNzZW1ibGVUYXJnZXRUb3VjaGVzKFRvdWNoKiB0b3VjaFRhcmdldCwgVG91Y2hMaXN0KiB0b3Vj
aGVzKQorc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lRm9yVG91Y2hQb2ludFN0
YXRlKGludCBzdGF0ZSkKIHsKLSAgICBSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzID0g
VG91Y2hMaXN0OjpjcmVhdGUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3Vj
aGVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICh0b3VjaGVzLT5pdGVtKGkpLT50YXJn
ZXQoKS0+dG9Ob2RlKCktPmlzU2FtZU5vZGUodG91Y2hUYXJnZXQtPnRhcmdldCgpLT50b05vZGUo
KSkpCi0gICAgICAgICAgICB0YXJnZXRUb3VjaGVzLT5hcHBlbmQodG91Y2hlcy0+aXRlbShpKSk7
CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFJlbGVhc2VkOgorICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQ7Cisg
ICAgY2FzZSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkOgorICAgICAgICByZXR1
cm4gZXZlbnROYW1lcygpLnRvdWNoY2FuY2VsRXZlbnQ7CisgICAgY2FzZSBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoUHJlc3NlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS50b3VjaHN0
YXJ0RXZlbnQ7CisgICAgY2FzZSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQ6CisgICAg
ICAgIHJldHVybiBldmVudE5hbWVzKCkudG91Y2htb3ZlRXZlbnQ7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKICAgICB9Ci0K
LSAgICByZXR1cm4gdGFyZ2V0VG91Y2hlcy5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiB7
CisgICAgLy8gVGhlIGNvbXBsZXRlIHNldCBvZiB0b3VjaGVzIGluIHRoaXMgZXZlbnQsIGZvciB0
aGUgZXZlbnQgdG91Y2hlcyBsaXN0LgogICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRvdWNoZXMgPSBU
b3VjaExpc3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxUb3VjaExpc3Q+IHByZXNzZWRUb3VjaGVz
ID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8VG91Y2hMaXN0PiByZWxlYXNlZFRv
dWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1vdmVk
VG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFRvdWNoTGlzdD4gY2Fu
Y2VsVG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7CisKKyAgICAvLyBGb3IgZWFjaCB0YXJn
ZXQgaG9sZHMgdGhlIGNvbXBsZXRlIHNldCBvZiBjdXJyZW50bHkgYWN0aXZlIHRvdWNoZXMsIGZv
ciB0aGUgdGFyZ2V0VG91Y2hlcyBsaXN0LgorICAgIHR5cGVkZWYgSGFzaE1hcDxFdmVudFRhcmdl
dCosIFJlZlB0cjxUb3VjaExpc3Q+ID4gVGFyZ2V0VG91Y2hlc01hcDsKKyAgICBUYXJnZXRUb3Vj
aGVzTWFwIHRvdWNoZXNCeVRhcmdldDsKKworICAgIC8vIEFycmF5IG9mIHRvdWNoZXMgcGVyIHN0
YXRlLCB1c2VkIHRvIGFzc2VtYmUgdGhlIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0LgorICAgIHN0
cnVjdCB7CisgICAgICAgIC8vIFRoZSB0b3VjaGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcnRp
Y3VsYXIgY2hhbmdlIHN0YXRlIHRoaXMgc3RydWN0IGluc3RhbmNlIHJlcHJlc2VudHMuCisgICAg
ICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1fdG91Y2hlczsKKyAgICAgICAgLy8gU2V0IG9mIHRhcmdl
dHMgaW52b2x2ZWQgaW4gbV90b3VjaGVzLgorICAgICAgICBIYXNoU2V0PEV2ZW50VGFyZ2V0Kj4g
bV90YXJnZXRzOworICAgIH0gY2hhbmdlZFRvdWNoZXNbUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFN0YXRlRW5kXTsKIAogICAgIGNvbnN0IFZlY3RvcjxQbGF0Zm9ybVRvdWNoUG9pbnQ+JiBwb2lu
dHMgPSBldmVudC50b3VjaFBvaW50cygpOwotICAgIEF0b21pY1N0cmluZyogZXZlbnROYW1lID0g
MDsKIAogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVs
eVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAKQEAgLTI4MzcsMTMgKzI4NTAsMTQgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBl
dmVudCkKICAgICAgICAgfQogCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVz
dFJlc3VsdEF0UG9pbnQocGFnZVBvaW50LCAvKmFsbG93U2hhZG93Q29udGVudCovIGZhbHNlLCBm
YWxzZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlKTsKLSAgICAgICAgTm9kZSogdGFy
Z2V0ID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJl
c3VsdC5pbm5lck5vZGUoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUpOwogCiAgICAgICAgIC8vIFRv
dWNoIGV2ZW50cyBzaG91bGQgbm90IGdvIHRvIHRleHQgbm9kZXMKLSAgICAgICAgaWYgKHRhcmdl
dCAmJiB0YXJnZXQtPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+
cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKIAotICAgICAgICBEb2N1bWVudCogZG9jID0g
dGFyZ2V0LT5kb2N1bWVudCgpOworICAgICAgICBEb2N1bWVudCogZG9jID0gbm9kZS0+ZG9jdW1l
bnQoKTsKICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKCFkb2MtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6VE9VQ0hfTElTVEVORVIpKQpAQCAt
Mjg2MSw4ICsyODc1LDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgdW5zaWduZWQgdG91Y2hQb2lu
dFRhcmdldEtleSA9IHBvaW50LmlkKCkgKyAxOwogICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+
IHRvdWNoVGFyZ2V0OwogICAgICAgICBpZiAocG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoUHJlc3NlZCkgewotICAgICAgICAgICAgbV9vcmlnaW5hdGluZ1RvdWNoUG9p
bnRUYXJnZXRzLnNldCh0b3VjaFBvaW50VGFyZ2V0S2V5LCB0YXJnZXQpOwotICAgICAgICAgICAg
dG91Y2hUYXJnZXQgPSB0YXJnZXQ7CisgICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2lu
dFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUuZ2V0KCkpOworICAgICAgICAg
ICAgdG91Y2hUYXJnZXQgPSBub2RlOwogICAgICAgICB9IGVsc2UgaWYgKHBvaW50LnN0YXRlKCkg
PT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkIHx8IHBvaW50LnN0YXRlKCkgPT0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkgewogICAgICAgICAgICAgLy8gVGhl
IHRhcmdldCBzaG91bGQgYmUgdGhlIG9yaWdpbmFsIHRhcmdldCBmb3IgdGhpcyB0b3VjaCwgc28g
Z2V0IGl0IGZyb20gdGhlIGhhc2htYXAuIEFzIGl0J3MgYSByZWxlYXNlIG9yIGNhbmNlbAogICAg
ICAgICAgICAgLy8gd2UgYWxzbyByZW1vdmUgaXQgZnJvbSB0aGUgbWFwLgpAQCAtMjg3MCwxMTcg
KzI4ODQsNjcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICB0b3Vj
aFRhcmdldCA9IG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy5nZXQodG91Y2hQb2ludFRh
cmdldEtleSk7CiAKLSAgICAgICAgaWYgKCF0b3VjaFRhcmdldC5nZXQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCiAgICAgICAgIFJlZlB0cjxUb3VjaD4gdG91Y2ggPSBUb3VjaDo6Y3JlYXRl
KGRvYy0+ZnJhbWUoKSwgdG91Y2hUYXJnZXQuZ2V0KCksIHBvaW50LmlkKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LnNjcmVlblBvcygpLngoKSwg
cG9pbnQuc2NyZWVuUG9zKCkueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGp1c3RlZFBhZ2VYLCBhZGp1c3RlZFBhZ2VZKTsKIAotICAgICAgICAvLyB0
b3VjaGVzIHNob3VsZCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGV2ZXJ5IHRvdWNoIGN1cnJl
bnRseSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBpZiAocG9pbnQuc3RhdGUoKSAhPSBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQpCisgICAgICAgIGlmICghdG91Y2hUYXJnZXQuZ2V0
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBOb3cgYnVpbGQgdXAgdGhl
IGNvcnJlY3QgbGlzdCBmb3IgdGFyZ2V0VG91Y2hlcyBhbmQgY2hhbmdlZFRvdWNoZXMuCisgICAg
ICAgIFRhcmdldFRvdWNoZXNNYXA6Oml0ZXJhdG9yIHRhcmdldFRvdWNoZXNJdGVyYXRvciA9IHRv
dWNoZXNCeVRhcmdldC5maW5kKHRvdWNoVGFyZ2V0LmdldCgpKTsKKyAgICAgICAgaWYgKHRhcmdl
dFRvdWNoZXNJdGVyYXRvciA9PSB0b3VjaGVzQnlUYXJnZXQuZW5kKCkpCisgICAgICAgICAgICB0
YXJnZXRUb3VjaGVzSXRlcmF0b3IgPSB0b3VjaGVzQnlUYXJnZXQuc2V0KHRvdWNoVGFyZ2V0Lmdl
dCgpLCBUb3VjaExpc3Q6OmNyZWF0ZSgpKS5maXJzdDsKKworICAgICAgICAvLyB0b3VjaGVzIGFu
ZCB0YXJnZXRUb3VjaGVzIHNob3VsZCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGV2ZXJ5IHRv
dWNoIGN1cnJlbnRseSBvbiB0aGUgc2NyZWVuLgorICAgICAgICBpZiAocG9pbnQuc3RhdGUoKSAh
PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgJiYgcG9pbnQuc3RhdGUoKSAhPSBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAgICAgICAgICB0b3VjaGVz
LT5hcHBlbmQodG91Y2gpOworICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yLT5zZWNv
bmQtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBOb3cgYnVpbGQgdXAg
dGhlIGNvcnJlY3QgbGlzdCBmb3IgY2hhbmdlZFRvdWNoZXMuCiAgICAgICAgIC8vIE5vdGUgdGhh
dCAgYW55IHRvdWNoZXMgdGhhdCBhcmUgaW4gdGhlIFRvdWNoU3RhdGlvbmFyeSBzdGF0ZSAoZS5n
LiBpZgogICAgICAgICAvLyB0aGUgdXNlciBoYWQgc2V2ZXJhbCBwb2ludHMgdG91Y2hlZCBidXQg
ZGlkIG5vdCBtb3ZlIHRoZW0gYWxsKSBzaG91bGQKLSAgICAgICAgLy8gb25seSBiZSBwcmVzZW50
IGluIHRoZSB0b3VjaGVzIGxpc3QuIFRoZXkgbWF5IGFsc28gYmUgYWRkZWQgdG8gdGhlCi0gICAg
ICAgIC8vIHRhcmdldFRvdWNoZXMgbGlzdCBsYXRlciwgYnV0IHNob3VsZCBuZXZlciBiZSBpbiB0
aGUgY2hhbmdlZFRvdWNoZXMKLSAgICAgICAgLy8gbGlzdCBzbyB3ZSBkbyBub3QgaGFuZGxlIHRo
ZW0gZXhwbGljaXRseSBoZXJlLgorICAgICAgICAvLyBuZXZlciBiZSBpbiB0aGUgY2hhbmdlZFRv
dWNoZXMgbGlzdCBzbyB3ZSBkbyBub3QgaGFuZGxlIHRoZW0gZXhwbGljaXRseSBoZXJlLgogICAg
ICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3NjA5
IGZvciBmdXJ0aGVyIGRpc2N1c3Npb24KICAgICAgICAgLy8gYWJvdXQgdGhlIFRvdWNoU3RhdGlv
bmFyeSBzdGF0ZS4KLSAgICAgICAgaWYgKHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaFJlbGVhc2VkKQotICAgICAgICAgICAgcmVsZWFzZWRUb3VjaGVzLT5hcHBlbmQo
dG91Y2gpOwotICAgICAgICBlbHNlIGlmIChwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQ
b2ludDo6VG91Y2hDYW5jZWxsZWQpCi0gICAgICAgICAgICBjYW5jZWxUb3VjaGVzLT5hcHBlbmQo
dG91Y2gpOwotICAgICAgICBlbHNlIGlmIChwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQ
b2ludDo6VG91Y2hQcmVzc2VkKQotICAgICAgICAgICAgcHJlc3NlZFRvdWNoZXMtPmFwcGVuZCh0
b3VjaCk7Ci0gICAgICAgIGVsc2UgaWYgKHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaE1vdmVkKQotICAgICAgICAgICAgbW92ZWRUb3VjaGVzLT5hcHBlbmQodG91Y2gp
OworICAgICAgICBpZiAocG9pbnQuc3RhdGUoKSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
U3RhdGlvbmFyeSkgeworICAgICAgICAgICAgQVNTRVJUKHBvaW50LnN0YXRlKCkgPCBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGVFbmQpOworICAgICAgICAgICAgaWYgKCFjaGFuZ2VkVG91
Y2hlc1twb2ludC5zdGF0ZSgpXS5tX3RvdWNoZXMpCisgICAgICAgICAgICAgICAgY2hhbmdlZFRv
dWNoZXNbcG9pbnQuc3RhdGUoKV0ubV90b3VjaGVzID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIGNoYW5nZWRUb3VjaGVzW3BvaW50LnN0YXRlKCldLm1fdG91Y2hlcy0+YXBwZW5k
KHRvdWNoKTsKKyAgICAgICAgICAgIGNoYW5nZWRUb3VjaGVzW3BvaW50LnN0YXRlKCldLm1fdGFy
Z2V0cy5hZGQodG91Y2hUYXJnZXQuZ2V0KCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV90
b3VjaFByZXNzZWQgPSB0b3VjaGVzLT5sZW5ndGgoKSA+IDA7CiAKICAgICBib29sIGRlZmF1bHRQ
cmV2ZW50ZWQgPSBmYWxzZTsKLSAgICBUb3VjaCogY2hhbmdlZFRvdWNoID0gMDsKLSAgICBFdmVu
dFRhcmdldCogdG91Y2hFdmVudFRhcmdldCA9IDA7Ci0KLSAgICBpZiAoY2FuY2VsVG91Y2hlcy0+
bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIC8vIFdlIGRpc3BhdGNoIHRoZSBldmVudCB0byB0aGUg
dGFyZ2V0IG9mIHRoZSB0b3VjaCB0aGF0IGNhdXNlZCB0aGlzIHRvdWNoIGV2ZW50IHRvIGJlIGdl
bmVyYXRlZCwgaS5lLgotICAgICAgICAvLyB3ZSB0YWtlIGl0IGZyb20gdGhlIGxpc3QgdGhhdCB3
aWxsIGJlIHVzZWQgYXMgdGhlIGNoYW5nZWRUb3VjaGVzIHByb3BlcnR5IG9mIHRoZSBldmVudC4K
LSAgICAgICAgLy8gVGhlIGNob2ljZSB0byB1c2UgdGhlIHRvdWNoIGF0IGluZGV4IDAgZ3VhcmFu
dGVlcyB0aGF0IHRoZXJlIGlzIGEgdGFyZ2V0IChhcyB3ZSBjaGVja2VkIHRoZSBsZW5ndGgKLSAg
ICAgICAgLy8gYWJvdmUpLiBJbiB0aGUgY2FzZSB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSB0b3Vj
aGVzIGluIHdoYXQgYmVjb21lcyB0aGUgY2hhbmdlZFRvdWNoZXMgbGlzdCwgaXQgaXMKLSAgICAg
ICAgLy8gZGlmZmljdWx0IHRvIHNheSBob3cgd2Ugc2hvdWxkIHByaW9yaXRpc2UgdG91Y2hlcyBh
bmQgYXMgc3VjaCwgaXRlbSAwIGlzIGFuIGFyYml0cmFyeSBjaG9pY2UuCi0gICAgICAgIGNoYW5n
ZWRUb3VjaCA9IGNhbmNlbFRvdWNoZXMtPml0ZW0oMCk7Ci0gICAgICAgIEFTU0VSVChjaGFuZ2Vk
VG91Y2gpOwotICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0ID0gY2hhbmdlZFRvdWNoLT50YXJnZXQo
KTsKLSAgICAgICAgQVNTRVJUKHRvdWNoRXZlbnRUYXJnZXQpOwotCi0gICAgICAgIGV2ZW50TmFt
ZSA9ICZldmVudE5hbWVzKCkudG91Y2hjYW5jZWxFdmVudDsKLSAgICAgICAgUmVmUHRyPFRvdWNo
RXZlbnQ+IGNhbmNlbEV2ID0KLSAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZShUb3VjaExp
c3Q6OmNyZWF0ZSgpLmdldCgpLCBUb3VjaExpc3Q6OmNyZWF0ZSgpLmdldCgpLCBjYW5jZWxUb3Vj
aGVzLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKmV2ZW50TmFtZSwgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRvY3VtZW50KCkt
PmRlZmF1bHRWaWV3KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBl
dmVudC5zaGlmdEtleSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoY2FuY2VsRXYuZ2V0
KCksIGVjKTsKLSAgICAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBjYW5jZWxFdi0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOwotICAgIH0KLQotICAgIGlmIChyZWxlYXNlZFRvdWNoZXMtPmxlbmd0aCgpID4g
MCkgewotICAgICAgICBUb3VjaCogY2hhbmdlZFRvdWNoID0gcmVsZWFzZWRUb3VjaGVzLT5pdGVt
KDApOwotICAgICAgICBBU1NFUlQoY2hhbmdlZFRvdWNoKTsKLSAgICAgICAgdG91Y2hFdmVudFRh
cmdldCA9IGNoYW5nZWRUb3VjaC0+dGFyZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCh0b3VjaEV2ZW50
VGFyZ2V0KTsKLQotICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzID0gYXNz
ZW1ibGVUYXJnZXRUb3VjaGVzKGNoYW5nZWRUb3VjaCwgdG91Y2hlcy5nZXQoKSk7Ci0KLSAgICAg
ICAgZXZlbnROYW1lID0gJmV2ZW50TmFtZXMoKS50b3VjaGVuZEV2ZW50OwotICAgICAgICBSZWZQ
dHI8VG91Y2hFdmVudD4gZW5kRXYgPSAKLSAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZSh0
b3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCByZWxlYXNlZFRvdWNoZXMuZ2V0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXZl
bnROYW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZp
ZXcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2ZW50LnNoaWZ0
S2V5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBldmVudC5tZXRhS2V5KCkpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAg
ICAgdG91Y2hFdmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChlbmRFdi5nZXQoKSwgZWMpOwotICAg
ICAgICBkZWZhdWx0UHJldmVudGVkIHw9IGVuZEV2LT5kZWZhdWx0UHJldmVudGVkKCk7Ci0gICAg
fQotICAgIGlmIChwcmVzc2VkVG91Y2hlcy0+bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIFRvdWNo
KiBjaGFuZ2VkVG91Y2ggPSBwcmVzc2VkVG91Y2hlcy0+aXRlbSgwKTsKLSAgICAgICAgQVNTRVJU
KGNoYW5nZWRUb3VjaCk7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQgPSBjaGFuZ2VkVG91Y2gt
PnRhcmdldCgpOwotICAgICAgICBBU1NFUlQodG91Y2hFdmVudFRhcmdldCk7Ci0KLSAgICAgICAg
UmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyA9IGFzc2VtYmxlVGFyZ2V0VG91Y2hlcyhj
aGFuZ2VkVG91Y2gsIHRvdWNoZXMuZ2V0KCkpOwotCi0gICAgICAgIGV2ZW50TmFtZSA9ICZldmVu
dE5hbWVzKCkudG91Y2hzdGFydEV2ZW50OwotICAgICAgICBSZWZQdHI8VG91Y2hFdmVudD4gc3Rh
cnRFdiA9Ci0gICAgICAgICAgICBUb3VjaEV2ZW50OjpjcmVhdGUodG91Y2hlcy5nZXQoKSwgdGFy
Z2V0VG91Y2hlcy5nZXQoKSwgcHJlc3NlZFRvdWNoZXMuZ2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXZlbnROYW1lLCB0b3VjaEV2ZW50
VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGV2ZW50
LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2ZW50LnNoaWZ0S2V5KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5tZXRhS2V5KCkp
OwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgdG91Y2hFdmVudFRhcmdl
dC0+ZGlzcGF0Y2hFdmVudChzdGFydEV2LmdldCgpLCBlYyk7Ci0gICAgICAgIGRlZmF1bHRQcmV2
ZW50ZWQgfD0gc3RhcnRFdi0+ZGVmYXVsdFByZXZlbnRlZCgpOwotICAgIH0KLQotICAgIGlmICht
b3ZlZFRvdWNoZXMtPmxlbmd0aCgpID4gMCkgewotICAgICAgICBUb3VjaCogY2hhbmdlZFRvdWNo
ID0gbW92ZWRUb3VjaGVzLT5pdGVtKDApOwotICAgICAgICBBU1NFUlQoY2hhbmdlZFRvdWNoKTsK
LSAgICAgICAgdG91Y2hFdmVudFRhcmdldCA9IGNoYW5nZWRUb3VjaC0+dGFyZ2V0KCk7Ci0gICAg
ICAgIEFTU0VSVCh0b3VjaEV2ZW50VGFyZ2V0KTsKLQotICAgICAgICBSZWZQdHI8VG91Y2hMaXN0
PiB0YXJnZXRUb3VjaGVzID0gYXNzZW1ibGVUYXJnZXRUb3VjaGVzKGNoYW5nZWRUb3VjaCwgdG91
Y2hlcy5nZXQoKSk7Ci0KLSAgICAgICAgZXZlbnROYW1lID0gJmV2ZW50TmFtZXMoKS50b3VjaG1v
dmVFdmVudDsKLSAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IG1vdmVFdiA9IAotICAgICAgICAg
ICAgVG91Y2hFdmVudDo6Y3JlYXRlKHRvdWNoZXMuZ2V0KCksIHRhcmdldFRvdWNoZXMuZ2V0KCks
IG1vdmVkVG91Y2hlcy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpldmVudE5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5k
b2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5h
bHRLZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkoKSk7Ci0gICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KG1v
dmVFdi5nZXQoKSwgZWMpOwotICAgICAgICBkZWZhdWx0UHJldmVudGVkIHw9IG1vdmVFdi0+ZGVm
YXVsdFByZXZlbnRlZCgpOworCisgICAgZm9yICh1bnNpZ25lZCBzdGF0ZSA9IDA7IHN0YXRlICE9
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0ZUVuZDsgKytzdGF0ZSkgeworICAgICAgICBp
ZiAoIWNoYW5nZWRUb3VjaGVzW3N0YXRlXS5tX3RvdWNoZXMpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAvLyBXaGVuIHNlbmRpbmcgYSB0b3VjaCBjYW5jZWwgZXZlbnQsIHVzZSBh
biBlbXB0eSB0b3VjaGVzIGxpc3QuCisgICAgICAgIFJlZlB0cjxUb3VjaExpc3Q+IGVmZmVjdGl2
ZVRvdWNoZXMgPSB0b3VjaGVzOworICAgICAgICBpZiAoc3RhdGUgPT0gUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaENhbmNlbGxlZCkKKyAgICAgICAgICAgIGVmZmVjdGl2ZVRvdWNoZXMgPSBUb3Vj
aExpc3Q6OmNyZWF0ZSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YXRlTmFtZShl
dmVudE5hbWVGb3JUb3VjaFBvaW50U3RhdGUoc3RhdGUpKTsKKyAgICAgICAgY29uc3QgSGFzaFNl
dDxFdmVudFRhcmdldCo+JiB0YXJnZXRzRm9yU3RhdGUgPSBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0u
bV90YXJnZXRzOworCisgICAgICAgIGZvciAoSGFzaFNldDxFdmVudFRhcmdldCo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHRhcmdldHNGb3JTdGF0ZS5iZWdpbigpOyBpdCAhPSB0YXJnZXRzRm9yU3Rh
dGUuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIEV2ZW50VGFyZ2V0KiB0b3VjaEV2ZW50VGFy
Z2V0ID0gKml0OworICAgICAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyA9
IHRvdWNoZXNCeVRhcmdldC5nZXQodG91Y2hFdmVudFRhcmdldCk7CisgICAgICAgICAgICBBU1NF
UlQodGFyZ2V0VG91Y2hlcyk7CisKKyAgICAgICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50PiB0b3Vj
aEV2ZW50ID0KKyAgICAgICAgICAgICAgICBUb3VjaEV2ZW50OjpjcmVhdGUoZWZmZWN0aXZlVG91
Y2hlcy5nZXQoKSwgdGFyZ2V0VG91Y2hlcy5nZXQoKSwgY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1f
dG91Y2hlcy5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVO
YW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXco
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgZXZlbnQu
Y3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtl
eSgpKTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgdG91
Y2hFdmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudCh0b3VjaEV2ZW50LmdldCgpLCBlYyk7CisgICAg
ICAgICAgICBkZWZhdWx0UHJldmVudGVkIHw9IHRvdWNoRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBkZWZhdWx0UHJldmVudGVkOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBvaW50LmgKaW5kZXggODJjOGQ3OC4uNTc0NmIxOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oCkBAIC00MCw3ICs0MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgVG91Y2hQcmVzc2VkLAogICAgICAgICBUb3VjaE1vdmVkLAogICAgICAgICBU
b3VjaFN0YXRpb25hcnksCi0gICAgICAgIFRvdWNoQ2FuY2VsbGVkCisgICAgICAgIFRvdWNoQ2Fu
Y2VsbGVkLAorICAgICAgICBUb3VjaFN0YXRlRW5kIC8vIFBsYWNlaG9sZGVyOiBtdXN0IHJlbWFp
biB0aGUgbGFzdCBpdGVtLgogICAgIH07CiAKICNpZiBQTEFURk9STShRVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77116</attachid>
            <date>2010-12-21 08:03:04 -0800</date>
            <delta_ts>2010-12-22 03:10:39 -0800</delta_ts>
            <desc>Patch 2 - benm comments.</desc>
            <filename>bug51258_patch.txt</filename>
            <type>text/plain</type>
            <size>35765</size>
            <attacher name="Jonathan Dixon">joth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTA4MmUwLi4yNjdiOTY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTIt
MjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qgc3Vw
cG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAorCisg
ICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gtZ3JvdXBlZC10YXJnZXRzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91
Y2gtZ3JvdXBlZC10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Rv
dWNoL3NjcmlwdC10ZXN0cy9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuanM6IEFkZGVkLgor
ICAgICAgICAoZGVjbGFyZVRvdWNoSGFuZGxlci5yZXR1cm4uc2hvdWxkQmUpOgorICAgICAgICAo
ZGVjbGFyZVRvdWNoSGFuZGxlcik6CisgICAgICAgICh0b3VjaEVuZEhhbmRsZXIpOgorICAgICAg
ICBBZGRlZCBuZXcgdGVzdCB0aGF0IGVuc3VyZXMgYm90aCB0ZXN0IHRhcmdldHMgcmVjZWl2ZSBl
dmVudHMgd2hlbiBoaXQgYnkgbXVsdGlwbGUKKyAgICAgICAgdG91Y2ggcG9pbnRzIGZyb20gdGhl
IHNhbWUgcGxhdGZvcm0gZXZlbnQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9zY3Jp
cHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanM6CisgICAgICAgIChkZWNsYXJlVG91Y2hT
dGFydC5yZXR1cm4udG91Y2hTdGFydEhhbmRsZXIpOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQpOgorICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZS5yZXR1cm4udG91Y2hNb3ZlSGFuZGxlcik6
CisgICAgICAgIChkZWNsYXJlVG91Y2hNb3ZlKToKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3Vj
aC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQucmV0dXJuLnRvdWNoU3RhcnRIYW5kbGVyKToKKyAgICAgICAgKGRlY2xhcmVUb3VjaFN0YXJ0
KToKKyAgICAgICAgKGRlY2xhcmVUb3VjaE1vdmUucmV0dXJuLnRvdWNoTW92ZUhhbmRsZXIpOgor
ICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZSk6CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC10YXJnZXQtbGltaXRlZC1leHBlY3RlZC50eHQ6CisgICAgICAgIFVwZGF0ZWQgJiByZWJh
c2VsaW5lZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IG5ldyBleHBlY3RhdGlvbnMuCisKIDIw
MTAtMTItMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDAzMmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1n
cm91cGVkLXRhcmdldHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1Rlc3RzIHRoYXQg
dGhlIGFuIGV2ZW50IGlzIHNlbnQgZm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0
IHRvdWNoZXMgY29udGFpbnMgYWxsIHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0CisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMg
MworUEFTUyBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50b3Vj
aGVzLmxlbmd0aCBpcyAzCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQ
QVNTIGV2ZW50LnRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQuY2hhbmdlZFRvdWNoZXMu
bGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC5j
aGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaGVuZCIK
K1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMAorUEFTUyBldmVudC50YXJnZXRUb3VjaGVz
Lmxlbmd0aCBpcyAwCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQQVNT
IGV2ZW50LnR5cGUgaXMgInRvdWNoZW5kIgorUEFTUyBldmVudC50b3VjaGVzLmxlbmd0aCBpcyAw
CitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDAKK1BBU1MgZXZlbnQuY2hhbmdl
ZFRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbApA
QCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8IS0tCisg
IFRvdWNoIHRlc3RzIHRoYXQgaW52b2x2ZSB0aGUgb250b3VjaHN0YXJ0LCBvbnRvdWNobW92ZSwg
b250b3VjaGVuZCBvciBvbnRvdWNoY2FuY2VsIGNhbGxiYWNrcworICBzaG91bGQgYmUgd3JpdHRl
biBpbiBhbiBhc3luY2hyb25vdXMgZmFzaGlvbiBzbyB0aGV5IGNhbiBiZSBydW4gb24gbW9iaWxl
IHBsYXRmb3JtcyBsaWtlIEFuZHJvaWQuCisgIFRoaXMgdGVtcGxhdGUgd2lsbCBnZW5lcmF0ZSBh
biBhc3luY2hyb25vdXMgc3R5bGUgdGVzdCBieSB1c2luZyB0aGUganMtdGVzdC1wb3N0LWZ1bmN0
aW9uIHNjcmlwdC4KKyAgWW91IHdpbGwgbmVlZCB0byBpbnZva2UgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKSBpbiB5b3VyIHRlc3Qgc2NyaXB0IHdoZW4gdGhlIHRlc3QgY29tcGxldGVzLgorLS0+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQt
dGFyZ2V0cy5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvbXVsdGktdG91Y2gtZ3JvdXBl
ZC10YXJnZXRzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3Rz
L211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZDI2ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpA
QCAtMCwwICsxLDg5IEBACit2YXIgdGFyZ2V0c0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwordGFyZ2V0c0Rpdi5pZCA9ICJ0YXJnZXRzRGl2IjsKKwordmFyIGRpdjEgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RpdjEuaWQgPSAidGFyZ2V0QSI7CitkaXYxLnN0
eWxlLndpZHRoID0gIjEwMHB4IjsKK2RpdjEuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKK2RpdjEu
c3R5bGUuYmFja2dyb3VuZENvbG9yID0gImJsdWUiOworCit2YXIgZGl2MiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworZGl2Mi5pZCA9ICJ0YXJnZXRCIjsKK2RpdjIuc3R5bGUud2lk
dGggPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOworCitkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0
YXJnZXRzRGl2LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpKTsKK3RhcmdldHNE
aXYuYXBwZW5kQ2hpbGQoZGl2MSk7Cit0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2JyJykpOwordGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkaXYyKTsKKworZnVu
Y3Rpb24gZGVjbGFyZVRvdWNoSGFuZGxlcihkaXZfaWQsIGV4cGVjdGVkVGFyZ2V0VG91Y2hlcykK
K3sKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCB1c2Ug
dGhlIHBhcmFtZXRlcnMgKGRpdl9pZCwgZXhwZWN0ZWRUYXJnZXRUb3VjaGVzKSBpbiBzaG91bGRC
ZS4uIGNhbGxzLCBhcworICAgICAgICAvLyB0aGUgb3JkZXIgb2YgZXZlbnQgZGlzcGF0Y2ggaXMg
bm90IGRldGVybWluaXN0aWMgYWNyb3NzIGV4ZWN1dGlvbnMgYW5kIHJlb3JkZXJpbmcKKyAgICAg
ICAgLy8gb2Z0aGUgUEFTUyBkZWJ1ZyBvdXRwdXQgZGV0YWlscyB3b3VsZCBjYXVzZSB0aGUgdGVz
dCB0byBiZSB1bnJlbGlhYmxlLgorICAgICAgICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5n
dGgnLCAnMycpOworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggIT0gZXhw
ZWN0ZWRUYXJnZXRUb3VjaGVzKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgnV3JvbmcgdGFyZ2V0
VG91Y2ggbGVuZ3RoOiAnICsgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggKyAnIHZzICcgKyBl
eHBlY3RlZFRhcmdldFRvdWNoZXMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50
LnRhcmdldFRvdWNoZXMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChl
dmVudC50YXJnZXRUb3VjaGVzW2ldLnRhcmdldC5pZCAhPSBkaXZfaWQpCisgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgnSW5jb3JyZWN0IHRhcmdldFRvdWNoIElEOiAnICsgZXZlbnQudGFyZ2V0
VG91Y2hlc1tpXS50YXJnZXQuaWQgKyAnIHZzICcgKyBkaXZfaWQpOworICAgICAgICB9CisgICAg
ICAgIHNob3VsZEJlKCdldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGgnLCAnMycpOworICAgIH0K
K30KKwordmFyIGVuZENvdW50ID0gMDsKK2Z1bmN0aW9uIHRvdWNoRW5kSGFuZGxlcigpCit7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNoZW5kJyk7CisKKyAg
ICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5ndGgnLCAnMCcpOworICAgIHNob3VsZEJlKCdl
dmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcwJyk7CisgICAgc2hvdWxkQmUoJ2V2ZW50LmNo
YW5nZWRUb3VjaGVzLmxlbmd0aCcsICczJyk7CisKKyAgICBpZiAoKytlbmRDb3VudCA9PSAyKQor
ICAgIHsKKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgIH0KK30KKworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVj
bGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyksIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRM
aXN0ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyks
IGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRs
ZXIsIGZhbHNlKTsKKworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFy
ZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZhbHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0
ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZh
bHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRsZXIs
IGZhbHNlKTsKKworZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIGFuIGV2ZW50IGlzIHNlbnQg
Zm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0IHRvdWNoZXMgY29udGFpbnMgYWxs
IHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0Iik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNo
UG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg1MCwgMTUwKTsKKyAgICBl
dmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDUwLCAyNTApOworICAgIGV2ZW50U2VuZGVyLmFkZFRv
dWNoUG9pbnQoNTAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAg
ZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAyMDAsIDE1MCk7CisgICAgZXZlbnRTZW5k
ZXIudXBkYXRlVG91Y2hQb2ludCgxLCAzMDAsIDI1MCk7CisgICAgZXZlbnRTZW5kZXIudXBkYXRl
VG91Y2hQb2ludCgyLCA0MDAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisK
KyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci5y
ZWxlYXNlVG91Y2hQb2ludCgxKTsKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgy
KTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworfSBlbHNlCisgICAgZGVidWcoJ1RoaXMg
dGVzdCByZXF1aXJlcyBEUlQuJyk7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5q
cwppbmRleCBmZDM0MDBjLi41NWNlZWJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanMKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC1saW1p
dGVkLmpzCkBAIC0xMyw1OSArMTMsNjYgQEAgZGl2Mi5zdHlsZS53aWR0aCA9ICIxMDBweCI7CiBk
aXYyLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CiBkaXYyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9
ICJncmVlbiI7CiAKLXZhciB0b3VjaFN0YXJ0Q291bnQgPSAwOwotdmFyIHRvdWNoTW92ZUNvdW50
ID0gMDsKLQogZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodGFyZ2V0c0RpdiwgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjEp
OwogdGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsK
IHRhcmdldHNEaXYuYXBwZW5kQ2hpbGQoZGl2Mik7CiAKLWZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5k
bGVyKCkKK2Z1bmN0aW9uIGRlY2xhcmVUb3VjaFN0YXJ0KCkKIHsKLSAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCAndG91Y2hzdGFydCcpOwotICAgIHN3aXRjaCAodG91Y2hT
dGFydENvdW50KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2
Mi5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNb
MV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICB2YXIgdG91
Y2hTdGFydENvdW50ID0gMDsKKyAgICByZXR1cm4gZnVuY3Rpb24gdG91Y2hTdGFydEhhbmRsZXIo
KQorICAgIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3Rv
dWNoc3RhcnQnKTsKKyAgICAgICAgc3dpdGNoICh0b3VjaFN0YXJ0Q291bnQpIHsKKyAgICAgICAg
ICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoJywg
JzEnKTsKKworICAgICAgICB0b3VjaFN0YXJ0Q291bnQrKzsKICAgICB9Ci0KLSAgICB0b3VjaFN0
YXJ0Q291bnQrKzsKIH0KIAotZnVuY3Rpb24gdG91Y2hNb3ZlSGFuZGxlcigpCitmdW5jdGlvbiBk
ZWNsYXJlVG91Y2hNb3ZlKGRpdl9pZCkKIHsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2
ZW50LnR5cGUnLCAndG91Y2htb3ZlJyk7Ci0gICAgc3dpdGNoICh0b3VjaE1vdmVDb3VudCkgewot
ICAgICAgICBjYXNlIDA6Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQn
LCBkaXYyLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywg
ZGl2Mi5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNo
ZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBpZiAoKyt0b3VjaE1vdmVDb3VudCA9PSAzKQorICAgIHZhciB0b3VjaE1vdmVDb3VudCA9
IDA7CisgICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoTW92ZUhhbmRsZXIoKQogICAgIHsKLSAgICAg
ICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOwotICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCAndG91Y2htb3ZlJyk7CisgICAg
ICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291bnQpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2
ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQn
LCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3Ro
JywgJzEnKTsKKworICAgICAgICBpZiAoKyt0b3VjaE1vdmVDb3VudCA9PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVs
bHlQYXJzZWQoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotZGl2MS5hZGRFdmVudExpc3RlbmVy
KCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhhbmRsZXIsIGZhbHNlKTsKLWRpdjEuYWRkRXZlbnRM
aXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hNb3ZlSGFuZGxlciwgZmFsc2UpOworZGl2MS5hZGRF
dmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOwor
ZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZh
bHNlKTsKIAotZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhh
bmRsZXIsIGZhbHNlKTsKLWRpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hN
b3ZlSGFuZGxlciwgZmFsc2UpOworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iiwg
ZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3Vj
aG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZhbHNlKTsKIAogZGVzY3JpcHRpb24oIlRlc3Rz
IHRoYXQgdGhlIHRhcmdldCBvZiB0b3VjaGVzIG1hdGNoIHRoZSBlbGVtZW50IHdoZXJlIHRoZSBl
dmVudCBvcmlnaW5hdGVkLCBub3Qgd2hlcmUgdGhlIHRvdWNoIGlzIGN1cnJlbnRseSBvY2N1cnJp
bmcuIFRoaXMgaXMgYSBsaW1pdGVkIHZlcnNpb24gb2YgdGVzdCB0b3VjaC10YXJnZXQuaHRtbCB0
aGF0IGF2b2lkcyB0aGUgc2l0dWF0aW9uIHdoZXJlIG9uZSB0b3VjaCBwb2ludCBpcyByZWxlYXNl
ZCB3aGlsZSBhbm90aGVyIGlzIG1haW50YWluZWQuIik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzCmlu
ZGV4IDhlNDdmMjMuLjViMzc5YmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC5qcwpAQCAtMTMsNTkgKzEz
LDY2IEBAIGRpdjIuc3R5bGUud2lkdGggPSAiMTAwcHgiOwogZGl2Mi5zdHlsZS5oZWlnaHQgPSAi
MTAwcHgiOwogZGl2Mi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOwogCi12YXIgdG91
Y2hTdGFydENvdW50ID0gMDsKLXZhciB0b3VjaE1vdmVDb3VudCA9IDA7Ci0KIGRvY3VtZW50LmJv
ZHkuaW5zZXJ0QmVmb3JlKHRhcmdldHNEaXYsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykpOwogdGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkaXYxKTsKIHRhcmdldHNEaXYuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENo
aWxkKGRpdjIpOwogCi1mdW5jdGlvbiB0b3VjaFN0YXJ0SGFuZGxlcigpCitmdW5jdGlvbiBkZWNs
YXJlVG91Y2hTdGFydCgpCiB7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBl
JywgJ3RvdWNoc3RhcnQnKTsKLSAgICBzd2l0Y2ggKHRvdWNoU3RhcnRDb3VudCkgewotICAgICAg
ICBjYXNlIDA6Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNo
ZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEu
aWQpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgdmFyIHRvdWNoU3RhcnRDb3VudCA9IDA7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudHlwZScsICd0b3VjaHN0YXJ0Jyk7CisgICAgICAg
IHN3aXRjaCAodG91Y2hTdGFydENvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZl
bnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcs
IGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNo
b3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAgdG91
Y2hTdGFydENvdW50Kys7CiAgICAgfQotCi0gICAgdG91Y2hTdGFydENvdW50Kys7CiB9CiAKLWZ1
bmN0aW9uIHRvdWNoTW92ZUhhbmRsZXIoKQorZnVuY3Rpb24gZGVjbGFyZVRvdWNoTW92ZShkaXZf
aWQpCiB7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92
ZScpOwotICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291bnQpIHsKLSAgICAgICAgY2FzZSAwOgotICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRp
djEuaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCsrdG91Y2hNb3Zl
Q291bnQgPT0gMykKKyAgICB2YXIgdG91Y2hNb3ZlQ291bnQgPSAwOworICAgIHJldHVybiBmdW5j
dGlvbiB0b3VjaE1vdmVIYW5kbGVyKCkKICAgICB7Ci0gICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAg
ICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92ZScpOworICAgICAgICBzd2l0Y2ggKHRvdWNoTW92
ZUNvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdl
dC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
ZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5p
ZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHNob3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAg
aWYgKCsrdG91Y2hNb3ZlQ291bnQgPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAg
IH0KICAgICB9CiB9CiAKLWRpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRvdWNo
U3RhcnRIYW5kbGVyLCBmYWxzZSk7Ci1kaXYxLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIs
IHRvdWNoTW92ZUhhbmRsZXIsIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hz
dGFydCIsIGRlY2xhcmVUb3VjaFN0YXJ0KCksIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5l
cigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoTW92ZSgpLCBmYWxzZSk7CiAKLWRpdjIuYWRkRXZl
bnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRvdWNoU3RhcnRIYW5kbGVyLCBmYWxzZSk7Ci1kaXYy
LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIHRvdWNoTW92ZUhhbmRsZXIsIGZhbHNlKTsK
K2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIGRlY2xhcmVUb3VjaFN0YXJ0KCks
IGZhbHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNo
TW92ZSgpLCBmYWxzZSk7CiAKIGRlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHRoZSB0YXJnZXQgb2Yg
dG91Y2hlcyBtYXRjaCB0aGUgZWxlbWVudCB3aGVyZSB0aGUgZXZlbnQgb3JpZ2luYXRlZCwgbm90
IHdoZXJlIHRoZSB0b3VjaCBpcyBjdXJyZW50bHkgb2NjdXJyaW5nLiIpOwogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4
dAppbmRleCA2MGE0YzM3Li44ZGJiZDc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1leHBlY3RlZC50eHQKQEAgLTcsMTggKzcsNDIg
QEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUKIFBBU1MgZXZlbnQudHlwZSBpcyAidG91Y2hzdGFy
dCIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2
ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRU
b3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCitQQVNT
IGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50b3Vj
aGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5s
ZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRh
cmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMg
MQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0u
dGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBp
cyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBl
dmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0Lmlk
IGlzICJ0YXJnZXRBIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0
QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBl
IGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJn
ZXRBIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1Mg
ZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBldmVudC50eXBlIGlzICJ0b3Vj
aHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKIFBB
U1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRh
cmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgor
UEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQu
dG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNo
ZXMubGVuZ3RoIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNo
ZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdl
dC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtbGltaXRlZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQt
bGltaXRlZC1leHBlY3RlZC50eHQKaW5kZXggMGMxZWZkMC4uZDE4OWI4YiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1s
aW1pdGVkLWV4cGVjdGVkLnR4dApAQCAtNywxOCArNyw0NiBAQCBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVz
WzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQu
aWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BB
U1MgZXZlbnQudHlwZSBpcyAidG91Y2hzdGFydCIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJn
ZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0
YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50
LnR5cGUgaXMgInRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMg
InRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgor
UEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMg
InRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEi
CitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVu
dC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92
ZSIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2
ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRU
b3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92ZSIKIFBBU1Mg
ZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2ZW50LnRvdWNo
ZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxl
bmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCiBQQVNTIGV2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRh
cmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMg
MQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgorUEFTUyBldmVudC50b3VjaGVzWzBd
LnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQg
aXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1Mg
ZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdl
dEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0
b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgog
UEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQu
dGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDdlNjgwNzkuLjUzMjRiYjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAt
MTItMjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qg
c3VwcG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAor
CisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFy
Z2V0cy5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpldmVudE5hbWVGb3JUb3VjaFBvaW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgUmVkZXNpZ25lZCBldmVu
dCBoYW5kbGVyIHRvIGVuc3VyZSBhbGwgZXZlbnQgdGFyZ2V0cyBpbnZvbHZlZCBpbiBhIGdpdmVu
CisgICAgICAgIG11bHRpdG91Y2ggZXZlbnQgZ2V0IHRoZSBhcHByb3ByaWF0ZSBldmVudChzKSBm
aXJlZC4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oOiBBZGRlZCBl
bmQtc3RvcCBtYXJrZXIgZm9yIFN0YXRlIGVudW0uCisKIDIwMTAtMTItMDkgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMzI4YmU2My4uYjUxOGRiOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKQEAgLTI3ODYsMzMgKzI3ODYsNTMgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUxh
c3RTY3JvbGxiYXJVbmRlck1vdXNlKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIHNldEwKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKLXN0YXRpYyBQYXNzUmVmUHRyPFRvdWNoTGlzdD4g
YXNzZW1ibGVUYXJnZXRUb3VjaGVzKFRvdWNoKiB0b3VjaFRhcmdldCwgVG91Y2hMaXN0KiB0b3Vj
aGVzKQorc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lRm9yVG91Y2hQb2ludFN0
YXRlKFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgc3RhdGUpCiB7Ci0gICAgUmVmUHRyPFRvdWNo
TGlzdD4gdGFyZ2V0VG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hlcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAo
dG91Y2hlcy0+aXRlbShpKS0+dGFyZ2V0KCktPnRvTm9kZSgpLT5pc1NhbWVOb2RlKHRvdWNoVGFy
Z2V0LT50YXJnZXQoKS0+dG9Ob2RlKCkpKQotICAgICAgICAgICAgdGFyZ2V0VG91Y2hlcy0+YXBw
ZW5kKHRvdWNoZXMtPml0ZW0oaSkpOworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS50b3VjaGVuZEV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENh
bmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS50b3VjaGNhbmNlbEV2ZW50Owor
ICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQ6CisgICAgICAgIHJldHVy
biBldmVudE5hbWVzKCkudG91Y2hzdGFydEV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaE1vdmVkOgorICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLnRvdWNobW92ZUV2
ZW50OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVy
biBlbXB0eUF0b207CiAgICAgfQotCi0gICAgcmV0dXJuIHRhcmdldFRvdWNoZXMucmVsZWFzZSgp
OwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmIGV2ZW50KQogeworICAgIC8vIEZpcnN0IGJ1aWxkIHVwIHRoZSBsaXN0cyB0
byB1c2UgZm9yIHRoZSAndG91Y2hlcycsICd0YXJnZXRUb3VjaGVzJyBhbmQgJ2NoYW5nZWRUb3Vj
aGVzJyBhdHRyaWJ1dGVzCisgICAgLy8gaW4gdGhlIEpTIGV2ZW50LiBTZWUgaHR0cDovL3d3dy5z
aXRlcGVuLmNvbS9ibG9nLzIwMDgvMDcvMTAvdG91Y2hpbmctYW5kLWdlc3R1cmluZy1vbi10aGUt
aXBob25lLworICAgIC8vIGZvciBhbiBvdmVydmlldyBvZiBob3cgdGhlc2UgbGlzdHMgZml0IHRv
Z2V0aGVyLgorCisgICAgLy8gSG9sZHMgdGhlIGNvbXBsZXRlIHNldCBvZiB0b3VjaGVzIG9uIHRo
ZSBzY3JlZW4gYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgJ3RvdWNoZXMnIGxpc3QgaW4gdGhlIEpT
IGV2ZW50LgogICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0
ZSgpOwotICAgIFJlZlB0cjxUb3VjaExpc3Q+IHByZXNzZWRUb3VjaGVzID0gVG91Y2hMaXN0Ojpj
cmVhdGUoKTsKLSAgICBSZWZQdHI8VG91Y2hMaXN0PiByZWxlYXNlZFRvdWNoZXMgPSBUb3VjaExp
c3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1vdmVkVG91Y2hlcyA9IFRvdWNo
TGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFRvdWNoTGlzdD4gY2FuY2VsVG91Y2hlcyA9IFRv
dWNoTGlzdDo6Y3JlYXRlKCk7CisKKyAgICAvLyBBbm90aGVyIGRpZmZlcmVudCBvbiB0aGUgJ3Rv
dWNoZXMnIGxpc3QgYWJvdmU6IGZpbHRlcmVkIGFuZCBncm91cGVkIGJ5IGV2ZW50IHRhcmdldC4g
VXNlZCBmb3IgdGhlCisgICAgLy8gJ3RhcmdldFRvdWNoZXMnIGxpc3QgaW4gdGhlIEpTIGV2ZW50
LgorICAgIHR5cGVkZWYgSGFzaE1hcDxFdmVudFRhcmdldCosIFJlZlB0cjxUb3VjaExpc3Q+ID4g
VGFyZ2V0VG91Y2hlc01hcDsKKyAgICBUYXJnZXRUb3VjaGVzTWFwIHRvdWNoZXNCeVRhcmdldDsK
KworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gRXZlbnRUYXJnZXRT
ZXQ7CisgICAgLy8gQXJyYXkgb2YgdG91Y2hlcyBwZXIgc3RhdGUsIHVzZWQgdG8gYXNzZW1ibGUg
dGhlICdjaGFuZ2VkVG91Y2hlcycgbGlzdCBpbiB0aGUgSlMgZXZlbnQuCisgICAgc3RydWN0IHsK
KyAgICAgICAgLy8gVGhlIHRvdWNoZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFydGljdWxhciBj
aGFuZ2Ugc3RhdGUgdGhpcyBzdHJ1Y3QgaW5zdGFuY2UgcmVwcmVzZW50cy4KKyAgICAgICAgUmVm
UHRyPFRvdWNoTGlzdD4gbV90b3VjaGVzOworICAgICAgICAvLyBTZXQgb2YgdGFyZ2V0cyBpbnZv
bHZlZCBpbiBtX3RvdWNoZXMuCisgICAgICAgIEV2ZW50VGFyZ2V0U2V0IG1fdGFyZ2V0czsKKyAg
ICB9IGNoYW5nZWRUb3VjaGVzW1BsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0ZUVuZF07CiAK
ICAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1Ub3VjaFBvaW50PiYgcG9pbnRzID0gZXZlbnQudG91
Y2hQb2ludHMoKTsKLSAgICBBdG9taWNTdHJpbmcqIGV2ZW50TmFtZSA9IDA7CiAKICAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNl
ckdlc3R1cmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaW50cy5zaXplKCk7
ICsraSkgewogICAgICAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50ID0gcG9pbnRz
W2ldOworICAgICAgICBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHBvaW50U3RhdGUgPSBwb2lu
dC5zdGF0ZSgpOwogICAgICAgICBJbnRQb2ludCBwYWdlUG9pbnQgPSBkb2N1bWVudFBvaW50Rm9y
V2luZG93UG9pbnQobV9mcmFtZSwgcG9pbnQucG9zKCkpOwogCiAgICAgICAgIEhpdFRlc3RSZXF1
ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUg
fCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHk7CkBAIC0yODIxLDcgKzI4NDEsNyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2
ZW50KQogICAgICAgICAvLyBzaG91bGQgYWZmZWN0IHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGN1
cnJlbnQgbm9kZSBpZiBuZWNlc3NhcnksCiAgICAgICAgIC8vIEhpdFRlc3RSZXF1ZXN0OjpBY3Rp
dmUgc2lnbmlmaWVzIHRoYXQgdGhlIGhpdCB0ZXN0IGlzIHRha2luZyBwbGFjZQogICAgICAgICAv
LyB3aXRoIHRoZSBtb3VzZSAob3IgZmluZ2VyIGluIHRoaXMgY2FzZSkgYmVpbmcgcHJlc3NlZC4K
LSAgICAgICAgc3dpdGNoIChwb2ludC5zdGF0ZSgpKSB7CisgICAgICAgIHN3aXRjaCAocG9pbnRT
dGF0ZSkgewogICAgICAgICBjYXNlIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOgog
ICAgICAgICAgICAgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI4MzcsMTMgKzI4NTcsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgfQog
CiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEF0UG9pbnQocGFn
ZVBvaW50LCAvKmFsbG93U2hhZG93Q29udGVudCovIGZhbHNlLCBmYWxzZSwgRG9udEhpdFRlc3RT
Y3JvbGxiYXJzLCBoaXRUeXBlKTsKLSAgICAgICAgTm9kZSogdGFyZ2V0ID0gcmVzdWx0LmlubmVy
Tm9kZSgpOworICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsK
KyAgICAgICAgQVNTRVJUKG5vZGUpOwogCiAgICAgICAgIC8vIFRvdWNoIGV2ZW50cyBzaG91bGQg
bm90IGdvIHRvIHRleHQgbm9kZXMKLSAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPmlzVGV4
dE5vZGUoKSkKLSAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50Tm9kZSgpOworICAg
ICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKIAotICAgICAgICBEb2N1bWVudCogZG9jID0gdGFyZ2V0LT5kb2N1bWVudCgp
OworICAgICAgICBEb2N1bWVudCogZG9jID0gbm9kZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYg
KCFkb2MpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFkb2MtPmhhc0xpc3Rl
bmVyVHlwZShEb2N1bWVudDo6VE9VQ0hfTElTVEVORVIpKQpAQCAtMjg2MCwxMCArMjg4MSwxMCBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNo
RXZlbnQmIGV2ZW50KQogICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHBsYXRmb3JtIHRvdWNoIGlk
IGJ5IDEgdG8gYXZvaWQgc3RvcmluZyBhIGtleSBvZiAwIGluIHRoZSBoYXNobWFwLgogICAgICAg
ICB1bnNpZ25lZCB0b3VjaFBvaW50VGFyZ2V0S2V5ID0gcG9pbnQuaWQoKSArIDE7CiAgICAgICAg
IFJlZlB0cjxFdmVudFRhcmdldD4gdG91Y2hUYXJnZXQ7Ci0gICAgICAgIGlmIChwb2ludC5zdGF0
ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkKSB7Ci0gICAgICAgICAgICBt
X29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIHRh
cmdldCk7Ci0gICAgICAgICAgICB0b3VjaFRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgfSBlbHNl
IGlmIChwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCB8
fCBwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpIHsK
KyAgICAgICAgaWYgKHBvaW50U3RhdGUgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNz
ZWQpIHsKKyAgICAgICAgICAgIG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy5zZXQodG91
Y2hQb2ludFRhcmdldEtleSwgbm9kZS5nZXQoKSk7CisgICAgICAgICAgICB0b3VjaFRhcmdldCA9
IG5vZGU7CisgICAgICAgIH0gZWxzZSBpZiAocG9pbnRTdGF0ZSA9PSBQbGF0Zm9ybVRvdWNoUG9p
bnQ6OlRvdWNoUmVsZWFzZWQgfHwgcG9pbnRTdGF0ZSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRv
dWNoQ2FuY2VsbGVkKSB7CiAgICAgICAgICAgICAvLyBUaGUgdGFyZ2V0IHNob3VsZCBiZSB0aGUg
b3JpZ2luYWwgdGFyZ2V0IGZvciB0aGlzIHRvdWNoLCBzbyBnZXQgaXQgZnJvbSB0aGUgaGFzaG1h
cC4gQXMgaXQncyBhIHJlbGVhc2Ugb3IgY2FuY2VsCiAgICAgICAgICAgICAvLyB3ZSBhbHNvIHJl
bW92ZSBpdCBmcm9tIHRoZSBtYXAuCiAgICAgICAgICAgICB0b3VjaFRhcmdldCA9IG1fb3JpZ2lu
YXRpbmdUb3VjaFBvaW50VGFyZ2V0cy50YWtlKHRvdWNoUG9pbnRUYXJnZXRLZXkpOwpAQCAtMjg3
NywxMTAgKzI4OTgsNTkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQuc2NyZWVuUG9zKCkueCgpLCBwb2ludC5zY3JlZW5Qb3Mo
KS55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVz
dGVkUGFnZVgsIGFkanVzdGVkUGFnZVkpOwogCi0gICAgICAgIC8vIHRvdWNoZXMgc2hvdWxkIGNv
bnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgZXZlcnkgdG91Y2ggY3VycmVudGx5IG9uIHRoZSBzY3Jl
ZW4uCi0gICAgICAgIGlmIChwb2ludC5zdGF0ZSgpICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91
Y2hSZWxlYXNlZCkKKyAgICAgICAgLy8gRW5zdXJlIHRoaXMgdGFyZ2V0J3MgdG91Y2ggbGlzdCBl
eGlzdHMsIGV2ZW4gaWYgaXQgZW5kcyB1cCBlbXB0eSwgc28gaXQgY2FuIGFsd2F5cyBiZSBwYXNz
ZWQgdG8gVG91Y2hFdmVudDo6Q3JlYXRlIGJlbG93LgorICAgICAgICBUYXJnZXRUb3VjaGVzTWFw
OjppdGVyYXRvciB0YXJnZXRUb3VjaGVzSXRlcmF0b3IgPSB0b3VjaGVzQnlUYXJnZXQuZmluZCh0
b3VjaFRhcmdldC5nZXQoKSk7CisgICAgICAgIGlmICh0YXJnZXRUb3VjaGVzSXRlcmF0b3IgPT0g
dG91Y2hlc0J5VGFyZ2V0LmVuZCgpKQorICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9y
ID0gdG91Y2hlc0J5VGFyZ2V0LnNldCh0b3VjaFRhcmdldC5nZXQoKSwgVG91Y2hMaXN0OjpjcmVh
dGUoKSkuZmlyc3Q7CisKKyAgICAgICAgLy8gdG91Y2hlcyBhbmQgdGFyZ2V0VG91Y2hlcyBzaG91
bGQgb25seSBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRvdWNoZXMgc3RpbGwgb24gdGhlIHNj
cmVlbiwgc28gaWYgdGhpcyBwb2ludCBpcworICAgICAgICAvLyByZWxlYXNlZCBvciBjYW5jZWxs
ZWQgaXQgd2lsbCBvbmx5IGFwcGVhciBpbiB0aGUgY2hhbmdlZFRvdWNoZXMgbGlzdC4KKyAgICAg
ICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkICYm
IHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkgewogICAg
ICAgICAgICAgdG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKKyAgICAgICAgICAgIHRhcmdldFRvdWNo
ZXNJdGVyYXRvci0+c2Vjb25kLT5hcHBlbmQodG91Y2gpOworICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVzLgogICAg
ICAgICAvLyBOb3RlIHRoYXQgIGFueSB0b3VjaGVzIHRoYXQgYXJlIGluIHRoZSBUb3VjaFN0YXRp
b25hcnkgc3RhdGUgKGUuZy4gaWYKICAgICAgICAgLy8gdGhlIHVzZXIgaGFkIHNldmVyYWwgcG9p
bnRzIHRvdWNoZWQgYnV0IGRpZCBub3QgbW92ZSB0aGVtIGFsbCkgc2hvdWxkCi0gICAgICAgIC8v
IG9ubHkgYmUgcHJlc2VudCBpbiB0aGUgdG91Y2hlcyBsaXN0LiBUaGV5IG1heSBhbHNvIGJlIGFk
ZGVkIHRvIHRoZQotICAgICAgICAvLyB0YXJnZXRUb3VjaGVzIGxpc3QgbGF0ZXIsIGJ1dCBzaG91
bGQgbmV2ZXIgYmUgaW4gdGhlIGNoYW5nZWRUb3VjaGVzCi0gICAgICAgIC8vIGxpc3Qgc28gd2Ug
ZG8gbm90IGhhbmRsZSB0aGVtIGV4cGxpY2l0bHkgaGVyZS4KKyAgICAgICAgLy8gbmV2ZXIgYmUg
aW4gdGhlIGNoYW5nZWRUb3VjaGVzIGxpc3Qgc28gd2UgZG8gbm90IGhhbmRsZSB0aGVtIGV4cGxp
Y2l0bHkgaGVyZS4KICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNzYwOSBmb3IgZnVydGhlciBkaXNjdXNzaW9uCiAgICAgICAgIC8vIGFib3V0
IHRoZSBUb3VjaFN0YXRpb25hcnkgc3RhdGUuCi0gICAgICAgIGlmIChwb2ludC5zdGF0ZSgpID09
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCkKLSAgICAgICAgICAgIHJlbGVhc2Vk
VG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAgZWxzZSBpZiAocG9pbnQuc3RhdGUoKSA9
PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKQotICAgICAgICAgICAgY2FuY2Vs
VG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAgZWxzZSBpZiAocG9pbnQuc3RhdGUoKSA9
PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCkKLSAgICAgICAgICAgIHByZXNzZWRU
b3VjaGVzLT5hcHBlbmQodG91Y2gpOwotICAgICAgICBlbHNlIGlmIChwb2ludC5zdGF0ZSgpID09
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCkKLSAgICAgICAgICAgIG1vdmVkVG91Y2hl
cy0+YXBwZW5kKHRvdWNoKTsKKyAgICAgICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3Vj
aFBvaW50OjpUb3VjaFN0YXRpb25hcnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChwb2ludFN0YXRl
IDwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRlRW5kKTsKKyAgICAgICAgICAgIGlmICgh
Y2hhbmdlZFRvdWNoZXNbcG9pbnRTdGF0ZV0ubV90b3VjaGVzKQorICAgICAgICAgICAgICAgIGNo
YW5nZWRUb3VjaGVzW3BvaW50U3RhdGVdLm1fdG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBjaGFuZ2VkVG91Y2hlc1twb2ludFN0YXRlXS5tX3RvdWNoZXMtPmFwcGVu
ZCh0b3VjaCk7CisgICAgICAgICAgICBjaGFuZ2VkVG91Y2hlc1twb2ludFN0YXRlXS5tX3Rhcmdl
dHMuYWRkKHRvdWNoVGFyZ2V0KTsKKyAgICAgICAgfQogICAgIH0KLQogICAgIG1fdG91Y2hQcmVz
c2VkID0gdG91Y2hlcy0+bGVuZ3RoKCkgPiAwOwogCisgICAgLy8gTm93IGl0ZXJhdGUgdGhlIGNo
YW5nZWRUb3VjaGVzIGxpc3QgYW5kIG1fdGFyZ2V0cyB3aXRoaW4gaXQsIHNlbmRpbmcgZXZlbnRz
IHRvIHRoZSB0YWdldHMgYXMgcmVxdWlyZWQuCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0g
ZmFsc2U7Ci0gICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IDA7Ci0gICAgRXZlbnRUYXJnZXQqIHRv
dWNoRXZlbnRUYXJnZXQgPSAwOwotCi0gICAgaWYgKGNhbmNlbFRvdWNoZXMtPmxlbmd0aCgpID4g
MCkgewotICAgICAgICAvLyBXZSBkaXNwYXRjaCB0aGUgZXZlbnQgdG8gdGhlIHRhcmdldCBvZiB0
aGUgdG91Y2ggdGhhdCBjYXVzZWQgdGhpcyB0b3VjaCBldmVudCB0byBiZSBnZW5lcmF0ZWQsIGku
ZS4KLSAgICAgICAgLy8gd2UgdGFrZSBpdCBmcm9tIHRoZSBsaXN0IHRoYXQgd2lsbCBiZSB1c2Vk
IGFzIHRoZSBjaGFuZ2VkVG91Y2hlcyBwcm9wZXJ0eSBvZiB0aGUgZXZlbnQuCi0gICAgICAgIC8v
IFRoZSBjaG9pY2UgdG8gdXNlIHRoZSB0b3VjaCBhdCBpbmRleCAwIGd1YXJhbnRlZXMgdGhhdCB0
aGVyZSBpcyBhIHRhcmdldCAoYXMgd2UgY2hlY2tlZCB0aGUgbGVuZ3RoCi0gICAgICAgIC8vIGFi
b3ZlKS4gSW4gdGhlIGNhc2UgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgdG91Y2hlcyBpbiB3aGF0
IGJlY29tZXMgdGhlIGNoYW5nZWRUb3VjaGVzIGxpc3QsIGl0IGlzCi0gICAgICAgIC8vIGRpZmZp
Y3VsdCB0byBzYXkgaG93IHdlIHNob3VsZCBwcmlvcml0aXNlIHRvdWNoZXMgYW5kIGFzIHN1Y2gs
IGl0ZW0gMCBpcyBhbiBhcmJpdHJhcnkgY2hvaWNlLgotICAgICAgICBjaGFuZ2VkVG91Y2ggPSBj
YW5jZWxUb3VjaGVzLT5pdGVtKDApOwotICAgICAgICBBU1NFUlQoY2hhbmdlZFRvdWNoKTsKLSAg
ICAgICAgdG91Y2hFdmVudFRhcmdldCA9IGNoYW5nZWRUb3VjaC0+dGFyZ2V0KCk7Ci0gICAgICAg
IEFTU0VSVCh0b3VjaEV2ZW50VGFyZ2V0KTsKLQotICAgICAgICBldmVudE5hbWUgPSAmZXZlbnRO
YW1lcygpLnRvdWNoY2FuY2VsRXZlbnQ7Ci0gICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50PiBjYW5j
ZWxFdiA9Ci0gICAgICAgICAgICBUb3VjaEV2ZW50OjpjcmVhdGUoVG91Y2hMaXN0OjpjcmVhdGUo
KS5nZXQoKSwgVG91Y2hMaXN0OjpjcmVhdGUoKS5nZXQoKSwgY2FuY2VsVG91Y2hlcy5nZXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpldmVu
dE5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmll
dygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgMCwgMCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZlbnQuc2hpZnRL
ZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50Lm1ldGFLZXkoKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICB0b3VjaEV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGNhbmNlbEV2LmdldCgpLCBlYyk7Ci0g
ICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgfD0gY2FuY2VsRXYtPmRlZmF1bHRQcmV2ZW50ZWQoKTsK
LSAgICB9Ci0KLSAgICBpZiAocmVsZWFzZWRUb3VjaGVzLT5sZW5ndGgoKSA+IDApIHsKLSAgICAg
ICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IHJlbGVhc2VkVG91Y2hlcy0+aXRlbSgwKTsKLSAgICAg
ICAgQVNTRVJUKGNoYW5nZWRUb3VjaCk7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQgPSBjaGFu
Z2VkVG91Y2gtPnRhcmdldCgpOwotICAgICAgICBBU1NFUlQodG91Y2hFdmVudFRhcmdldCk7Ci0K
LSAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyA9IGFzc2VtYmxlVGFyZ2V0
VG91Y2hlcyhjaGFuZ2VkVG91Y2gsIHRvdWNoZXMuZ2V0KCkpOwotCi0gICAgICAgIGV2ZW50TmFt
ZSA9ICZldmVudE5hbWVzKCkudG91Y2hlbmRFdmVudDsKLSAgICAgICAgUmVmUHRyPFRvdWNoRXZl
bnQ+IGVuZEV2ID0gCi0gICAgICAgICAgICBUb3VjaEV2ZW50OjpjcmVhdGUodG91Y2hlcy5nZXQo
KSwgdGFyZ2V0VG91Y2hlcy5nZXQoKSwgcmVsZWFzZWRUb3VjaGVzLmdldCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV2ZW50TmFtZSwgdG91
Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAw
LCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubWV0
YUtleSgpKTsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHRvdWNoRXZl
bnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoZW5kRXYuZ2V0KCksIGVjKTsKLSAgICAgICAgZGVmYXVs
dFByZXZlbnRlZCB8PSBlbmRFdi0+ZGVmYXVsdFByZXZlbnRlZCgpOwotICAgIH0KLSAgICBpZiAo
cHJlc3NlZFRvdWNoZXMtPmxlbmd0aCgpID4gMCkgewotICAgICAgICBUb3VjaCogY2hhbmdlZFRv
dWNoID0gcHJlc3NlZFRvdWNoZXMtPml0ZW0oMCk7Ci0gICAgICAgIEFTU0VSVChjaGFuZ2VkVG91
Y2gpOwotICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0ID0gY2hhbmdlZFRvdWNoLT50YXJnZXQoKTsK
LSAgICAgICAgQVNTRVJUKHRvdWNoRXZlbnRUYXJnZXQpOwotCi0gICAgICAgIFJlZlB0cjxUb3Vj
aExpc3Q+IHRhcmdldFRvdWNoZXMgPSBhc3NlbWJsZVRhcmdldFRvdWNoZXMoY2hhbmdlZFRvdWNo
LCB0b3VjaGVzLmdldCgpKTsKLQotICAgICAgICBldmVudE5hbWUgPSAmZXZlbnROYW1lcygpLnRv
dWNoc3RhcnRFdmVudDsKLSAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IHN0YXJ0RXYgPQotICAg
ICAgICAgICAgVG91Y2hFdmVudDo6Y3JlYXRlKHRvdWNoZXMuZ2V0KCksIHRhcmdldFRvdWNoZXMu
Z2V0KCksIHByZXNzZWRUb3VjaGVzLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmV2ZW50TmFtZSwgdG91Y2hFdmVudFRhcmdldC0+dG9O
b2RlKCktPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCks
IGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPmRpc3BhdGNo
RXZlbnQoc3RhcnRFdi5nZXQoKSwgZWMpOwotICAgICAgICBkZWZhdWx0UHJldmVudGVkIHw9IHN0
YXJ0RXYtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAobW92ZWRUb3VjaGVz
LT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IG1vdmVkVG91
Y2hlcy0+aXRlbSgwKTsKLSAgICAgICAgQVNTRVJUKGNoYW5nZWRUb3VjaCk7Ci0gICAgICAgIHRv
dWNoRXZlbnRUYXJnZXQgPSBjaGFuZ2VkVG91Y2gtPnRhcmdldCgpOwotICAgICAgICBBU1NFUlQo
dG91Y2hFdmVudFRhcmdldCk7Ci0KLSAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91
Y2hlcyA9IGFzc2VtYmxlVGFyZ2V0VG91Y2hlcyhjaGFuZ2VkVG91Y2gsIHRvdWNoZXMuZ2V0KCkp
OwotCi0gICAgICAgIGV2ZW50TmFtZSA9ICZldmVudE5hbWVzKCkudG91Y2htb3ZlRXZlbnQ7Ci0g
ICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50PiBtb3ZlRXYgPSAKLSAgICAgICAgICAgIFRvdWNoRXZl
bnQ6OmNyZWF0ZSh0b3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBtb3ZlZFRvdWNo
ZXMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqZXZlbnROYW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1lbnQoKS0+
ZGVmYXVsdFZpZXcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDAsIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2
ZW50LnNoaWZ0S2V5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBldmVudC5tZXRhS2V5KCkpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChtb3ZlRXYuZ2V0KCks
IGVjKTsKLSAgICAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBtb3ZlRXYtPmRlZmF1bHRQcmV2ZW50
ZWQoKTsKKyAgICBSZWZQdHI8VG91Y2hMaXN0PiBlbXB0eUxpc3QgPSBUb3VjaExpc3Q6OmNyZWF0
ZSgpOworICAgIGZvciAodW5zaWduZWQgc3RhdGUgPSAwOyBzdGF0ZSAhPSBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoU3RhdGVFbmQ7ICsrc3RhdGUpIHsKKyAgICAgICAgaWYgKCFjaGFuZ2VkVG91
Y2hlc1tzdGF0ZV0ubV90b3VjaGVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Ly8gV2hlbiBzZW5kaW5nIGEgdG91Y2ggY2FuY2VsIGV2ZW50LCB1c2UgZW1wdHkgdG91Y2hlcyBh
bmQgdGFyZ2V0VG91Y2hlcyBsaXN0cy4KKyAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4mIGVmZmVj
dGl2ZVRvdWNoZXMoc3RhdGUgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCA/
IGVtcHR5TGlzdCA6IHRvdWNoZXMpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YXRl
TmFtZShldmVudE5hbWVGb3JUb3VjaFBvaW50U3RhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1Ub3Vj
aFBvaW50OjpTdGF0ZT4oc3RhdGUpKSk7CisgICAgICAgIGNvbnN0IEV2ZW50VGFyZ2V0U2V0JiB0
YXJnZXRzRm9yU3RhdGUgPSBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90YXJnZXRzOworCisgICAg
ICAgIGZvciAoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0c0ZvclN0
YXRlLmJlZ2luKCk7IGl0ICE9IHRhcmdldHNGb3JTdGF0ZS5lbmQoKTsgKytpdCkgeworICAgICAg
ICAgICAgRXZlbnRUYXJnZXQqIHRvdWNoRXZlbnRUYXJnZXQgPSBpdC0+Z2V0KCk7CisgICAgICAg
ICAgICBSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzKHN0YXRlID09IFBsYXRmb3JtVG91
Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzQnlUYXJnZXQuZ2V0
KHRvdWNoRXZlbnRUYXJnZXQpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRUb3VjaGVzKTsK
KworICAgICAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IHRvdWNoRXZlbnQgPQorICAgICAgICAg
ICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZShlZmZlY3RpdmVUb3VjaGVzLmdldCgpLCB0YXJnZXRU
b3VjaGVzLmdldCgpLCBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVzLmdldCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZlbnRUYXJn
ZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFs
dEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCkpOworICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KHRvdWNoRXZlbnQuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGRlZmF1bHRQcmV2
ZW50ZWQgfD0gdG91Y2hFdmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgICAgICB9CiAgICAg
fQogCiAgICAgcmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRv
dWNoUG9pbnQuaAppbmRleCA4MmM4ZDc4Li41NzQ2YjE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1Ub3VjaFBvaW50LmgKQEAgLTQwLDcgKzQwLDggQEAgcHVibGljOgogICAgICAgICBUb3VjaFBy
ZXNzZWQsCiAgICAgICAgIFRvdWNoTW92ZWQsCiAgICAgICAgIFRvdWNoU3RhdGlvbmFyeSwKLSAg
ICAgICAgVG91Y2hDYW5jZWxsZWQKKyAgICAgICAgVG91Y2hDYW5jZWxsZWQsCisgICAgICAgIFRv
dWNoU3RhdGVFbmQgLy8gUGxhY2Vob2xkZXI6IG11c3QgcmVtYWluIHRoZSBsYXN0IGl0ZW0uCiAg
ICAgfTsKIAogI2lmIFBMQVRGT1JNKFFUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77200</attachid>
            <date>2010-12-22 03:10:39 -0800</date>
            <delta_ts>2010-12-22 03:30:54 -0800</delta_ts>
            <desc>Patch 3 - tonikitoo comment and fix comment typo</desc>
            <filename>bug51258_patch.txt</filename>
            <type>text/plain</type>
            <size>35771</size>
            <attacher name="Jonathan Dixon">joth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTA4MmUwLi4yNjdiOTY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTIt
MjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qgc3Vw
cG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAorCisg
ICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gtZ3JvdXBlZC10YXJnZXRzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91
Y2gtZ3JvdXBlZC10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Rv
dWNoL3NjcmlwdC10ZXN0cy9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuanM6IEFkZGVkLgor
ICAgICAgICAoZGVjbGFyZVRvdWNoSGFuZGxlci5yZXR1cm4uc2hvdWxkQmUpOgorICAgICAgICAo
ZGVjbGFyZVRvdWNoSGFuZGxlcik6CisgICAgICAgICh0b3VjaEVuZEhhbmRsZXIpOgorICAgICAg
ICBBZGRlZCBuZXcgdGVzdCB0aGF0IGVuc3VyZXMgYm90aCB0ZXN0IHRhcmdldHMgcmVjZWl2ZSBl
dmVudHMgd2hlbiBoaXQgYnkgbXVsdGlwbGUKKyAgICAgICAgdG91Y2ggcG9pbnRzIGZyb20gdGhl
IHNhbWUgcGxhdGZvcm0gZXZlbnQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9zY3Jp
cHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanM6CisgICAgICAgIChkZWNsYXJlVG91Y2hT
dGFydC5yZXR1cm4udG91Y2hTdGFydEhhbmRsZXIpOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQpOgorICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZS5yZXR1cm4udG91Y2hNb3ZlSGFuZGxlcik6
CisgICAgICAgIChkZWNsYXJlVG91Y2hNb3ZlKToKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3Vj
aC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQucmV0dXJuLnRvdWNoU3RhcnRIYW5kbGVyKToKKyAgICAgICAgKGRlY2xhcmVUb3VjaFN0YXJ0
KToKKyAgICAgICAgKGRlY2xhcmVUb3VjaE1vdmUucmV0dXJuLnRvdWNoTW92ZUhhbmRsZXIpOgor
ICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZSk6CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC10YXJnZXQtbGltaXRlZC1leHBlY3RlZC50eHQ6CisgICAgICAgIFVwZGF0ZWQgJiByZWJh
c2VsaW5lZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IG5ldyBleHBlY3RhdGlvbnMuCisKIDIw
MTAtMTItMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDAzMmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1n
cm91cGVkLXRhcmdldHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1Rlc3RzIHRoYXQg
dGhlIGFuIGV2ZW50IGlzIHNlbnQgZm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0
IHRvdWNoZXMgY29udGFpbnMgYWxsIHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0CisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMg
MworUEFTUyBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50b3Vj
aGVzLmxlbmd0aCBpcyAzCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQ
QVNTIGV2ZW50LnRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQuY2hhbmdlZFRvdWNoZXMu
bGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC5j
aGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaGVuZCIK
K1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMAorUEFTUyBldmVudC50YXJnZXRUb3VjaGVz
Lmxlbmd0aCBpcyAwCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQQVNT
IGV2ZW50LnR5cGUgaXMgInRvdWNoZW5kIgorUEFTUyBldmVudC50b3VjaGVzLmxlbmd0aCBpcyAw
CitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDAKK1BBU1MgZXZlbnQuY2hhbmdl
ZFRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbApA
QCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8IS0tCisg
IFRvdWNoIHRlc3RzIHRoYXQgaW52b2x2ZSB0aGUgb250b3VjaHN0YXJ0LCBvbnRvdWNobW92ZSwg
b250b3VjaGVuZCBvciBvbnRvdWNoY2FuY2VsIGNhbGxiYWNrcworICBzaG91bGQgYmUgd3JpdHRl
biBpbiBhbiBhc3luY2hyb25vdXMgZmFzaGlvbiBzbyB0aGV5IGNhbiBiZSBydW4gb24gbW9iaWxl
IHBsYXRmb3JtcyBsaWtlIEFuZHJvaWQuCisgIFRoaXMgdGVtcGxhdGUgd2lsbCBnZW5lcmF0ZSBh
biBhc3luY2hyb25vdXMgc3R5bGUgdGVzdCBieSB1c2luZyB0aGUganMtdGVzdC1wb3N0LWZ1bmN0
aW9uIHNjcmlwdC4KKyAgWW91IHdpbGwgbmVlZCB0byBpbnZva2UgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKSBpbiB5b3VyIHRlc3Qgc2NyaXB0IHdoZW4gdGhlIHRlc3QgY29tcGxldGVzLgorLS0+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQt
dGFyZ2V0cy5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvbXVsdGktdG91Y2gtZ3JvdXBl
ZC10YXJnZXRzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3Rz
L211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZDI2ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpA
QCAtMCwwICsxLDg5IEBACit2YXIgdGFyZ2V0c0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwordGFyZ2V0c0Rpdi5pZCA9ICJ0YXJnZXRzRGl2IjsKKwordmFyIGRpdjEgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RpdjEuaWQgPSAidGFyZ2V0QSI7CitkaXYxLnN0
eWxlLndpZHRoID0gIjEwMHB4IjsKK2RpdjEuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKK2RpdjEu
c3R5bGUuYmFja2dyb3VuZENvbG9yID0gImJsdWUiOworCit2YXIgZGl2MiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworZGl2Mi5pZCA9ICJ0YXJnZXRCIjsKK2RpdjIuc3R5bGUud2lk
dGggPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOworCitkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0
YXJnZXRzRGl2LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpKTsKK3RhcmdldHNE
aXYuYXBwZW5kQ2hpbGQoZGl2MSk7Cit0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2JyJykpOwordGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkaXYyKTsKKworZnVu
Y3Rpb24gZGVjbGFyZVRvdWNoSGFuZGxlcihkaXZfaWQsIGV4cGVjdGVkVGFyZ2V0VG91Y2hlcykK
K3sKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCB1c2Ug
dGhlIHBhcmFtZXRlcnMgKGRpdl9pZCwgZXhwZWN0ZWRUYXJnZXRUb3VjaGVzKSBpbiBzaG91bGRC
ZS4uIGNhbGxzLCBhcworICAgICAgICAvLyB0aGUgb3JkZXIgb2YgZXZlbnQgZGlzcGF0Y2ggaXMg
bm90IGRldGVybWluaXN0aWMgYWNyb3NzIGV4ZWN1dGlvbnMgYW5kIHJlb3JkZXJpbmcKKyAgICAg
ICAgLy8gb2Z0aGUgUEFTUyBkZWJ1ZyBvdXRwdXQgZGV0YWlscyB3b3VsZCBjYXVzZSB0aGUgdGVz
dCB0byBiZSB1bnJlbGlhYmxlLgorICAgICAgICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5n
dGgnLCAnMycpOworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggIT0gZXhw
ZWN0ZWRUYXJnZXRUb3VjaGVzKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgnV3JvbmcgdGFyZ2V0
VG91Y2ggbGVuZ3RoOiAnICsgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggKyAnIHZzICcgKyBl
eHBlY3RlZFRhcmdldFRvdWNoZXMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50
LnRhcmdldFRvdWNoZXMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChl
dmVudC50YXJnZXRUb3VjaGVzW2ldLnRhcmdldC5pZCAhPSBkaXZfaWQpCisgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgnSW5jb3JyZWN0IHRhcmdldFRvdWNoIElEOiAnICsgZXZlbnQudGFyZ2V0
VG91Y2hlc1tpXS50YXJnZXQuaWQgKyAnIHZzICcgKyBkaXZfaWQpOworICAgICAgICB9CisgICAg
ICAgIHNob3VsZEJlKCdldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGgnLCAnMycpOworICAgIH0K
K30KKwordmFyIGVuZENvdW50ID0gMDsKK2Z1bmN0aW9uIHRvdWNoRW5kSGFuZGxlcigpCit7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNoZW5kJyk7CisKKyAg
ICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5ndGgnLCAnMCcpOworICAgIHNob3VsZEJlKCdl
dmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcwJyk7CisgICAgc2hvdWxkQmUoJ2V2ZW50LmNo
YW5nZWRUb3VjaGVzLmxlbmd0aCcsICczJyk7CisKKyAgICBpZiAoKytlbmRDb3VudCA9PSAyKQor
ICAgIHsKKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgIH0KK30KKworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVj
bGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyksIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRM
aXN0ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyks
IGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRs
ZXIsIGZhbHNlKTsKKworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFy
ZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZhbHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0
ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZh
bHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRsZXIs
IGZhbHNlKTsKKworZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIGFuIGV2ZW50IGlzIHNlbnQg
Zm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0IHRvdWNoZXMgY29udGFpbnMgYWxs
IHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0Iik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNo
UG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg1MCwgMTUwKTsKKyAgICBl
dmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDUwLCAyNTApOworICAgIGV2ZW50U2VuZGVyLmFkZFRv
dWNoUG9pbnQoNTAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAg
ZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAyMDAsIDE1MCk7CisgICAgZXZlbnRTZW5k
ZXIudXBkYXRlVG91Y2hQb2ludCgxLCAzMDAsIDI1MCk7CisgICAgZXZlbnRTZW5kZXIudXBkYXRl
VG91Y2hQb2ludCgyLCA0MDAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisK
KyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci5y
ZWxlYXNlVG91Y2hQb2ludCgxKTsKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgy
KTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworfSBlbHNlCisgICAgZGVidWcoJ1RoaXMg
dGVzdCByZXF1aXJlcyBEUlQuJyk7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5q
cwppbmRleCBmZDM0MDBjLi41NWNlZWJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanMKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC1saW1p
dGVkLmpzCkBAIC0xMyw1OSArMTMsNjYgQEAgZGl2Mi5zdHlsZS53aWR0aCA9ICIxMDBweCI7CiBk
aXYyLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CiBkaXYyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9
ICJncmVlbiI7CiAKLXZhciB0b3VjaFN0YXJ0Q291bnQgPSAwOwotdmFyIHRvdWNoTW92ZUNvdW50
ID0gMDsKLQogZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodGFyZ2V0c0RpdiwgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjEp
OwogdGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsK
IHRhcmdldHNEaXYuYXBwZW5kQ2hpbGQoZGl2Mik7CiAKLWZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5k
bGVyKCkKK2Z1bmN0aW9uIGRlY2xhcmVUb3VjaFN0YXJ0KCkKIHsKLSAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCAndG91Y2hzdGFydCcpOwotICAgIHN3aXRjaCAodG91Y2hT
dGFydENvdW50KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2
Mi5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNb
MV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICB2YXIgdG91
Y2hTdGFydENvdW50ID0gMDsKKyAgICByZXR1cm4gZnVuY3Rpb24gdG91Y2hTdGFydEhhbmRsZXIo
KQorICAgIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3Rv
dWNoc3RhcnQnKTsKKyAgICAgICAgc3dpdGNoICh0b3VjaFN0YXJ0Q291bnQpIHsKKyAgICAgICAg
ICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoJywg
JzEnKTsKKworICAgICAgICB0b3VjaFN0YXJ0Q291bnQrKzsKICAgICB9Ci0KLSAgICB0b3VjaFN0
YXJ0Q291bnQrKzsKIH0KIAotZnVuY3Rpb24gdG91Y2hNb3ZlSGFuZGxlcigpCitmdW5jdGlvbiBk
ZWNsYXJlVG91Y2hNb3ZlKGRpdl9pZCkKIHsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2
ZW50LnR5cGUnLCAndG91Y2htb3ZlJyk7Ci0gICAgc3dpdGNoICh0b3VjaE1vdmVDb3VudCkgewot
ICAgICAgICBjYXNlIDA6Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQn
LCBkaXYyLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywg
ZGl2Mi5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNo
ZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBpZiAoKyt0b3VjaE1vdmVDb3VudCA9PSAzKQorICAgIHZhciB0b3VjaE1vdmVDb3VudCA9
IDA7CisgICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoTW92ZUhhbmRsZXIoKQogICAgIHsKLSAgICAg
ICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOwotICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCAndG91Y2htb3ZlJyk7CisgICAg
ICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291bnQpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2
ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQn
LCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3Ro
JywgJzEnKTsKKworICAgICAgICBpZiAoKyt0b3VjaE1vdmVDb3VudCA9PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVs
bHlQYXJzZWQoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotZGl2MS5hZGRFdmVudExpc3RlbmVy
KCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhhbmRsZXIsIGZhbHNlKTsKLWRpdjEuYWRkRXZlbnRM
aXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hNb3ZlSGFuZGxlciwgZmFsc2UpOworZGl2MS5hZGRF
dmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOwor
ZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZh
bHNlKTsKIAotZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhh
bmRsZXIsIGZhbHNlKTsKLWRpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hN
b3ZlSGFuZGxlciwgZmFsc2UpOworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iiwg
ZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3Vj
aG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZhbHNlKTsKIAogZGVzY3JpcHRpb24oIlRlc3Rz
IHRoYXQgdGhlIHRhcmdldCBvZiB0b3VjaGVzIG1hdGNoIHRoZSBlbGVtZW50IHdoZXJlIHRoZSBl
dmVudCBvcmlnaW5hdGVkLCBub3Qgd2hlcmUgdGhlIHRvdWNoIGlzIGN1cnJlbnRseSBvY2N1cnJp
bmcuIFRoaXMgaXMgYSBsaW1pdGVkIHZlcnNpb24gb2YgdGVzdCB0b3VjaC10YXJnZXQuaHRtbCB0
aGF0IGF2b2lkcyB0aGUgc2l0dWF0aW9uIHdoZXJlIG9uZSB0b3VjaCBwb2ludCBpcyByZWxlYXNl
ZCB3aGlsZSBhbm90aGVyIGlzIG1haW50YWluZWQuIik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzCmlu
ZGV4IDhlNDdmMjMuLjViMzc5YmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC5qcwpAQCAtMTMsNTkgKzEz
LDY2IEBAIGRpdjIuc3R5bGUud2lkdGggPSAiMTAwcHgiOwogZGl2Mi5zdHlsZS5oZWlnaHQgPSAi
MTAwcHgiOwogZGl2Mi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOwogCi12YXIgdG91
Y2hTdGFydENvdW50ID0gMDsKLXZhciB0b3VjaE1vdmVDb3VudCA9IDA7Ci0KIGRvY3VtZW50LmJv
ZHkuaW5zZXJ0QmVmb3JlKHRhcmdldHNEaXYsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykpOwogdGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkaXYxKTsKIHRhcmdldHNEaXYuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENo
aWxkKGRpdjIpOwogCi1mdW5jdGlvbiB0b3VjaFN0YXJ0SGFuZGxlcigpCitmdW5jdGlvbiBkZWNs
YXJlVG91Y2hTdGFydCgpCiB7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBl
JywgJ3RvdWNoc3RhcnQnKTsKLSAgICBzd2l0Y2ggKHRvdWNoU3RhcnRDb3VudCkgewotICAgICAg
ICBjYXNlIDA6Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNo
ZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEu
aWQpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgdmFyIHRvdWNoU3RhcnRDb3VudCA9IDA7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudHlwZScsICd0b3VjaHN0YXJ0Jyk7CisgICAgICAg
IHN3aXRjaCAodG91Y2hTdGFydENvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZl
bnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcs
IGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNo
b3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAgdG91
Y2hTdGFydENvdW50Kys7CiAgICAgfQotCi0gICAgdG91Y2hTdGFydENvdW50Kys7CiB9CiAKLWZ1
bmN0aW9uIHRvdWNoTW92ZUhhbmRsZXIoKQorZnVuY3Rpb24gZGVjbGFyZVRvdWNoTW92ZShkaXZf
aWQpCiB7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92
ZScpOwotICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291bnQpIHsKLSAgICAgICAgY2FzZSAwOgotICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRp
djEuaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCsrdG91Y2hNb3Zl
Q291bnQgPT0gMykKKyAgICB2YXIgdG91Y2hNb3ZlQ291bnQgPSAwOworICAgIHJldHVybiBmdW5j
dGlvbiB0b3VjaE1vdmVIYW5kbGVyKCkKICAgICB7Ci0gICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAg
ICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92ZScpOworICAgICAgICBzd2l0Y2ggKHRvdWNoTW92
ZUNvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdl
dC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygn
ZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5p
ZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHNob3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAg
aWYgKCsrdG91Y2hNb3ZlQ291bnQgPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgICAg
IH0KICAgICB9CiB9CiAKLWRpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRvdWNo
U3RhcnRIYW5kbGVyLCBmYWxzZSk7Ci1kaXYxLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIs
IHRvdWNoTW92ZUhhbmRsZXIsIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hz
dGFydCIsIGRlY2xhcmVUb3VjaFN0YXJ0KCksIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5l
cigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoTW92ZSgpLCBmYWxzZSk7CiAKLWRpdjIuYWRkRXZl
bnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRvdWNoU3RhcnRIYW5kbGVyLCBmYWxzZSk7Ci1kaXYy
LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIHRvdWNoTW92ZUhhbmRsZXIsIGZhbHNlKTsK
K2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIGRlY2xhcmVUb3VjaFN0YXJ0KCks
IGZhbHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNo
TW92ZSgpLCBmYWxzZSk7CiAKIGRlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHRoZSB0YXJnZXQgb2Yg
dG91Y2hlcyBtYXRjaCB0aGUgZWxlbWVudCB3aGVyZSB0aGUgZXZlbnQgb3JpZ2luYXRlZCwgbm90
IHdoZXJlIHRoZSB0b3VjaCBpcyBjdXJyZW50bHkgb2NjdXJyaW5nLiIpOwogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4
dAppbmRleCA2MGE0YzM3Li44ZGJiZDc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1leHBlY3RlZC50eHQKQEAgLTcsMTggKzcsNDIg
QEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUKIFBBU1MgZXZlbnQudHlwZSBpcyAidG91Y2hzdGFy
dCIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2
ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRU
b3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCitQQVNT
IGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50b3Vj
aGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5s
ZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRh
cmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMg
MQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0u
dGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBp
cyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBl
dmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0Lmlk
IGlzICJ0YXJnZXRBIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0
QiIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBl
IGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJn
ZXRBIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1Mg
ZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBldmVudC50eXBlIGlzICJ0b3Vj
aHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKIFBB
U1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRh
cmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgor
UEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQu
dG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNo
ZXMubGVuZ3RoIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNo
ZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdl
dC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtbGltaXRlZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQt
bGltaXRlZC1leHBlY3RlZC50eHQKaW5kZXggMGMxZWZkMC4uZDE4OWI4YiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1s
aW1pdGVkLWV4cGVjdGVkLnR4dApAQCAtNywxOCArNyw0NiBAQCBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVz
WzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQu
aWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BB
U1MgZXZlbnQudHlwZSBpcyAidG91Y2hzdGFydCIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJn
ZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0
YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50
LnR5cGUgaXMgInRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMg
InRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgor
UEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMg
InRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEi
CitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVu
dC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92
ZSIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2
ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRU
b3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92ZSIKIFBBU1Mg
ZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2ZW50LnRvdWNo
ZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxl
bmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCiBQQVNTIGV2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRh
cmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMg
MQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgorUEFTUyBldmVudC50b3VjaGVzWzBd
LnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQg
aXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1Mg
ZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdl
dEEiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0
b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgog
UEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQu
dGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDdlNjgwNzkuLjUzMjRiYjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAt
MTItMjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qg
c3VwcG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAor
CisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRzL3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFy
Z2V0cy5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpldmVudE5hbWVGb3JUb3VjaFBvaW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgUmVkZXNpZ25lZCBldmVu
dCBoYW5kbGVyIHRvIGVuc3VyZSBhbGwgZXZlbnQgdGFyZ2V0cyBpbnZvbHZlZCBpbiBhIGdpdmVu
CisgICAgICAgIG11bHRpdG91Y2ggZXZlbnQgZ2V0IHRoZSBhcHByb3ByaWF0ZSBldmVudChzKSBm
aXJlZC4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oOiBBZGRlZCBl
bmQtc3RvcCBtYXJrZXIgZm9yIFN0YXRlIGVudW0uCisKIDIwMTAtMTItMDkgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMzI4YmU2My4uMjcwMzQ2ZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKQEAgLTI3ODYsMzMgKzI3ODYsNTMgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUxh
c3RTY3JvbGxiYXJVbmRlck1vdXNlKFNjcm9sbGJhciogc2Nyb2xsYmFyLCBib29sIHNldEwKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKLXN0YXRpYyBQYXNzUmVmUHRyPFRvdWNoTGlzdD4g
YXNzZW1ibGVUYXJnZXRUb3VjaGVzKFRvdWNoKiB0b3VjaFRhcmdldCwgVG91Y2hMaXN0KiB0b3Vj
aGVzKQorc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lRm9yVG91Y2hQb2ludFN0
YXRlKFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGUgc3RhdGUpCiB7Ci0gICAgUmVmUHRyPFRvdWNo
TGlzdD4gdGFyZ2V0VG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hlcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAo
dG91Y2hlcy0+aXRlbShpKS0+dGFyZ2V0KCktPnRvTm9kZSgpLT5pc1NhbWVOb2RlKHRvdWNoVGFy
Z2V0LT50YXJnZXQoKS0+dG9Ob2RlKCkpKQotICAgICAgICAgICAgdGFyZ2V0VG91Y2hlcy0+YXBw
ZW5kKHRvdWNoZXMtPml0ZW0oaSkpOworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFt
ZXMoKS50b3VjaGVuZEV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENh
bmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS50b3VjaGNhbmNlbEV2ZW50Owor
ICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQ6CisgICAgICAgIHJldHVy
biBldmVudE5hbWVzKCkudG91Y2hzdGFydEV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaE1vdmVkOgorICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLnRvdWNobW92ZUV2
ZW50OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gZW1wdHlBdG9tOwogICAgIH0KLQotICAgIHJldHVybiB0YXJnZXRUb3VjaGVzLnJl
bGVhc2UoKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKIHsKKyAgICAvLyBGaXJzdCBidWlsZCB1cCB0aGUg
bGlzdHMgdG8gdXNlIGZvciB0aGUgJ3RvdWNoZXMnLCAndGFyZ2V0VG91Y2hlcycgYW5kICdjaGFu
Z2VkVG91Y2hlcycgYXR0cmlidXRlcworICAgIC8vIGluIHRoZSBKUyBldmVudC4gU2VlIGh0dHA6
Ly93d3cuc2l0ZXBlbi5jb20vYmxvZy8yMDA4LzA3LzEwL3RvdWNoaW5nLWFuZC1nZXN0dXJpbmct
b24tdGhlLWlwaG9uZS8KKyAgICAvLyBmb3IgYW4gb3ZlcnZpZXcgb2YgaG93IHRoZXNlIGxpc3Rz
IGZpdCB0b2dldGhlci4KKworICAgIC8vIEhvbGRzIHRoZSBjb21wbGV0ZSBzZXQgb2YgdG91Y2hl
cyBvbiB0aGUgc2NyZWVuIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlICd0b3VjaGVzJyBsaXN0IGlu
IHRoZSBKUyBldmVudC4KICAgICBSZWZQdHI8VG91Y2hMaXN0PiB0b3VjaGVzID0gVG91Y2hMaXN0
OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8VG91Y2hMaXN0PiBwcmVzc2VkVG91Y2hlcyA9IFRvdWNo
TGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPFRvdWNoTGlzdD4gcmVsZWFzZWRUb3VjaGVzID0g
VG91Y2hMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8VG91Y2hMaXN0PiBtb3ZlZFRvdWNoZXMg
PSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxUb3VjaExpc3Q+IGNhbmNlbFRvdWNo
ZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOworCisgICAgLy8gQSBkaWZmZXJlbnQgdmlldyBvbiB0
aGUgJ3RvdWNoZXMnIGxpc3QgYWJvdmUsIGZpbHRlcmVkIGFuZCBncm91cGVkIGJ5IGV2ZW50IHRh
cmdldC4gVXNlZCBmb3IgdGhlCisgICAgLy8gJ3RhcmdldFRvdWNoZXMnIGxpc3QgaW4gdGhlIEpT
IGV2ZW50LgorICAgIHR5cGVkZWYgSGFzaE1hcDxFdmVudFRhcmdldCosIFJlZlB0cjxUb3VjaExp
c3Q+ID4gVGFyZ2V0VG91Y2hlc01hcDsKKyAgICBUYXJnZXRUb3VjaGVzTWFwIHRvdWNoZXNCeVRh
cmdldDsKKworICAgIC8vIEFycmF5IG9mIHRvdWNoZXMgcGVyIHN0YXRlLCB1c2VkIHRvIGFzc2Vt
YmxlIHRoZSAnY2hhbmdlZFRvdWNoZXMnIGxpc3QgaW4gdGhlIEpTIGV2ZW50LgorICAgIHR5cGVk
ZWYgSGFzaFNldDxSZWZQdHI8RXZlbnRUYXJnZXQ+ID4gRXZlbnRUYXJnZXRTZXQ7CisgICAgc3Ry
dWN0IHsKKyAgICAgICAgLy8gVGhlIHRvdWNoZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFydGlj
dWxhciBjaGFuZ2Ugc3RhdGUgdGhpcyBzdHJ1Y3QgaW5zdGFuY2UgcmVwcmVzZW50cy4KKyAgICAg
ICAgUmVmUHRyPFRvdWNoTGlzdD4gbV90b3VjaGVzOworICAgICAgICAvLyBTZXQgb2YgdGFyZ2V0
cyBpbnZvbHZlZCBpbiBtX3RvdWNoZXMuCisgICAgICAgIEV2ZW50VGFyZ2V0U2V0IG1fdGFyZ2V0
czsKKyAgICB9IGNoYW5nZWRUb3VjaGVzW1BsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0ZUVu
ZF07CiAKICAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1Ub3VjaFBvaW50PiYgcG9pbnRzID0gZXZl
bnQudG91Y2hQb2ludHMoKTsKLSAgICBBdG9taWNTdHJpbmcqIGV2ZW50TmFtZSA9IDA7CiAKICAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNz
aW5nVXNlckdlc3R1cmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaW50cy5z
aXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50ID0g
cG9pbnRzW2ldOworICAgICAgICBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHBvaW50U3RhdGUg
PSBwb2ludC5zdGF0ZSgpOwogICAgICAgICBJbnRQb2ludCBwYWdlUG9pbnQgPSBkb2N1bWVudFBv
aW50Rm9yV2luZG93UG9pbnQobV9mcmFtZSwgcG9pbnQucG9zKCkpOwogCiAgICAgICAgIEhpdFRl
c3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpB
Y3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHk7CkBAIC0yODIxLDcgKzI4NDEsNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZl
bnQmIGV2ZW50KQogICAgICAgICAvLyBzaG91bGQgYWZmZWN0IHRoZSBhY3RpdmUgc3RhdGUgb2Yg
dGhlIGN1cnJlbnQgbm9kZSBpZiBuZWNlc3NhcnksCiAgICAgICAgIC8vIEhpdFRlc3RSZXF1ZXN0
OjpBY3RpdmUgc2lnbmlmaWVzIHRoYXQgdGhlIGhpdCB0ZXN0IGlzIHRha2luZyBwbGFjZQogICAg
ICAgICAvLyB3aXRoIHRoZSBtb3VzZSAob3IgZmluZ2VyIGluIHRoaXMgY2FzZSkgYmVpbmcgcHJl
c3NlZC4KLSAgICAgICAgc3dpdGNoIChwb2ludC5zdGF0ZSgpKSB7CisgICAgICAgIHN3aXRjaCAo
cG9pbnRTdGF0ZSkgewogICAgICAgICBjYXNlIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVz
c2VkOgogICAgICAgICAgICAgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTI4MzcsMTMgKzI4NTcsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAg
ICAgfQogCiAgICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEF0UG9p
bnQocGFnZVBvaW50LCAvKmFsbG93U2hhZG93Q29udGVudCovIGZhbHNlLCBmYWxzZSwgRG9udEhp
dFRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlKTsKLSAgICAgICAgTm9kZSogdGFyZ2V0ID0gcmVzdWx0
LmlubmVyTm9kZSgpOworICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJlc3VsdC5pbm5lck5v
ZGUoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUpOwogCiAgICAgICAgIC8vIFRvdWNoIGV2ZW50cyBz
aG91bGQgbm90IGdvIHRvIHRleHQgbm9kZXMKLSAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQt
PmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC0+cGFyZW50Tm9kZSgp
OworICAgICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKIAotICAgICAgICBEb2N1bWVudCogZG9jID0gdGFyZ2V0LT5kb2N1
bWVudCgpOworICAgICAgICBEb2N1bWVudCogZG9jID0gbm9kZS0+ZG9jdW1lbnQoKTsKICAgICAg
ICAgaWYgKCFkb2MpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFkb2MtPmhh
c0xpc3RlbmVyVHlwZShEb2N1bWVudDo6VE9VQ0hfTElTVEVORVIpKQpAQCAtMjg2MCwxMCArMjg4
MSwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHBsYXRmb3JtIHRv
dWNoIGlkIGJ5IDEgdG8gYXZvaWQgc3RvcmluZyBhIGtleSBvZiAwIGluIHRoZSBoYXNobWFwLgog
ICAgICAgICB1bnNpZ25lZCB0b3VjaFBvaW50VGFyZ2V0S2V5ID0gcG9pbnQuaWQoKSArIDE7CiAg
ICAgICAgIFJlZlB0cjxFdmVudFRhcmdldD4gdG91Y2hUYXJnZXQ7Ci0gICAgICAgIGlmIChwb2lu
dC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkKSB7Ci0gICAgICAg
ICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRL
ZXksIHRhcmdldCk7Ci0gICAgICAgICAgICB0b3VjaFRhcmdldCA9IHRhcmdldDsKLSAgICAgICAg
fSBlbHNlIGlmIChwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxl
YXNlZCB8fCBwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxs
ZWQpIHsKKyAgICAgICAgaWYgKHBvaW50U3RhdGUgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFByZXNzZWQpIHsKKyAgICAgICAgICAgIG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy5z
ZXQodG91Y2hQb2ludFRhcmdldEtleSwgbm9kZS5nZXQoKSk7CisgICAgICAgICAgICB0b3VjaFRh
cmdldCA9IG5vZGU7CisgICAgICAgIH0gZWxzZSBpZiAocG9pbnRTdGF0ZSA9PSBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgfHwgcG9pbnRTdGF0ZSA9PSBQbGF0Zm9ybVRvdWNoUG9p
bnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAgICAgICAgICAvLyBUaGUgdGFyZ2V0IHNob3VsZCBi
ZSB0aGUgb3JpZ2luYWwgdGFyZ2V0IGZvciB0aGlzIHRvdWNoLCBzbyBnZXQgaXQgZnJvbSB0aGUg
aGFzaG1hcC4gQXMgaXQncyBhIHJlbGVhc2Ugb3IgY2FuY2VsCiAgICAgICAgICAgICAvLyB3ZSBh
bHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAuCiAgICAgICAgICAgICB0b3VjaFRhcmdldCA9IG1f
b3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy50YWtlKHRvdWNoUG9pbnRUYXJnZXRLZXkpOwpA
QCAtMjg3NywxMTAgKzI4OTgsNTkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuc2NyZWVuUG9zKCkueCgpLCBwb2ludC5zY3Jl
ZW5Qb3MoKS55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFkanVzdGVkUGFnZVgsIGFkanVzdGVkUGFnZVkpOwogCi0gICAgICAgIC8vIHRvdWNoZXMgc2hv
dWxkIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgZXZlcnkgdG91Y2ggY3VycmVudGx5IG9uIHRo
ZSBzY3JlZW4uCi0gICAgICAgIGlmIChwb2ludC5zdGF0ZSgpICE9IFBsYXRmb3JtVG91Y2hQb2lu
dDo6VG91Y2hSZWxlYXNlZCkKKyAgICAgICAgLy8gRW5zdXJlIHRoaXMgdGFyZ2V0J3MgdG91Y2gg
bGlzdCBleGlzdHMsIGV2ZW4gaWYgaXQgZW5kcyB1cCBlbXB0eSwgc28gaXQgY2FuIGFsd2F5cyBi
ZSBwYXNzZWQgdG8gVG91Y2hFdmVudDo6Q3JlYXRlIGJlbG93LgorICAgICAgICBUYXJnZXRUb3Vj
aGVzTWFwOjppdGVyYXRvciB0YXJnZXRUb3VjaGVzSXRlcmF0b3IgPSB0b3VjaGVzQnlUYXJnZXQu
ZmluZCh0b3VjaFRhcmdldC5nZXQoKSk7CisgICAgICAgIGlmICh0YXJnZXRUb3VjaGVzSXRlcmF0
b3IgPT0gdG91Y2hlc0J5VGFyZ2V0LmVuZCgpKQorICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0
ZXJhdG9yID0gdG91Y2hlc0J5VGFyZ2V0LnNldCh0b3VjaFRhcmdldC5nZXQoKSwgVG91Y2hMaXN0
OjpjcmVhdGUoKSkuZmlyc3Q7CisKKyAgICAgICAgLy8gdG91Y2hlcyBhbmQgdGFyZ2V0VG91Y2hl
cyBzaG91bGQgb25seSBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRvdWNoZXMgc3RpbGwgb24g
dGhlIHNjcmVlbiwgc28gaWYgdGhpcyBwb2ludCBpcworICAgICAgICAvLyByZWxlYXNlZCBvciBj
YW5jZWxsZWQgaXQgd2lsbCBvbmx5IGFwcGVhciBpbiB0aGUgY2hhbmdlZFRvdWNoZXMgbGlzdC4K
KyAgICAgICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVh
c2VkICYmIHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkg
ewogICAgICAgICAgICAgdG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKKyAgICAgICAgICAgIHRhcmdl
dFRvdWNoZXNJdGVyYXRvci0+c2Vjb25kLT5hcHBlbmQodG91Y2gpOworICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBjb3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVz
LgogICAgICAgICAvLyBOb3RlIHRoYXQgIGFueSB0b3VjaGVzIHRoYXQgYXJlIGluIHRoZSBUb3Vj
aFN0YXRpb25hcnkgc3RhdGUgKGUuZy4gaWYKICAgICAgICAgLy8gdGhlIHVzZXIgaGFkIHNldmVy
YWwgcG9pbnRzIHRvdWNoZWQgYnV0IGRpZCBub3QgbW92ZSB0aGVtIGFsbCkgc2hvdWxkCi0gICAg
ICAgIC8vIG9ubHkgYmUgcHJlc2VudCBpbiB0aGUgdG91Y2hlcyBsaXN0LiBUaGV5IG1heSBhbHNv
IGJlIGFkZGVkIHRvIHRoZQotICAgICAgICAvLyB0YXJnZXRUb3VjaGVzIGxpc3QgbGF0ZXIsIGJ1
dCBzaG91bGQgbmV2ZXIgYmUgaW4gdGhlIGNoYW5nZWRUb3VjaGVzCi0gICAgICAgIC8vIGxpc3Qg
c28gd2UgZG8gbm90IGhhbmRsZSB0aGVtIGV4cGxpY2l0bHkgaGVyZS4KKyAgICAgICAgLy8gbmV2
ZXIgYmUgaW4gdGhlIGNoYW5nZWRUb3VjaGVzIGxpc3Qgc28gd2UgZG8gbm90IGhhbmRsZSB0aGVt
IGV4cGxpY2l0bHkgaGVyZS4KICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNzYwOSBmb3IgZnVydGhlciBkaXNjdXNzaW9uCiAgICAgICAgIC8v
IGFib3V0IHRoZSBUb3VjaFN0YXRpb25hcnkgc3RhdGUuCi0gICAgICAgIGlmIChwb2ludC5zdGF0
ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCkKLSAgICAgICAgICAgIHJl
bGVhc2VkVG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAgZWxzZSBpZiAocG9pbnQuc3Rh
dGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKQotICAgICAgICAgICAg
Y2FuY2VsVG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAgZWxzZSBpZiAocG9pbnQuc3Rh
dGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUHJlc3NlZCkKLSAgICAgICAgICAgIHBy
ZXNzZWRUb3VjaGVzLT5hcHBlbmQodG91Y2gpOwotICAgICAgICBlbHNlIGlmIChwb2ludC5zdGF0
ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZCkKLSAgICAgICAgICAgIG1vdmVk
VG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKKyAgICAgICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25hcnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChwb2lu
dFN0YXRlIDwgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRlRW5kKTsKKyAgICAgICAgICAg
IGlmICghY2hhbmdlZFRvdWNoZXNbcG9pbnRTdGF0ZV0ubV90b3VjaGVzKQorICAgICAgICAgICAg
ICAgIGNoYW5nZWRUb3VjaGVzW3BvaW50U3RhdGVdLm1fdG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBjaGFuZ2VkVG91Y2hlc1twb2ludFN0YXRlXS5tX3RvdWNoZXMt
PmFwcGVuZCh0b3VjaCk7CisgICAgICAgICAgICBjaGFuZ2VkVG91Y2hlc1twb2ludFN0YXRlXS5t
X3RhcmdldHMuYWRkKHRvdWNoVGFyZ2V0KTsKKyAgICAgICAgfQogICAgIH0KLQogICAgIG1fdG91
Y2hQcmVzc2VkID0gdG91Y2hlcy0+bGVuZ3RoKCkgPiAwOwogCisgICAgLy8gTm93IGl0ZXJhdGUg
dGhlIGNoYW5nZWRUb3VjaGVzIGxpc3QgYW5kIG1fdGFyZ2V0cyB3aXRoaW4gaXQsIHNlbmRpbmcg
ZXZlbnRzIHRvIHRoZSB0YWdldHMgYXMgcmVxdWlyZWQuCiAgICAgYm9vbCBkZWZhdWx0UHJldmVu
dGVkID0gZmFsc2U7Ci0gICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IDA7Ci0gICAgRXZlbnRUYXJn
ZXQqIHRvdWNoRXZlbnRUYXJnZXQgPSAwOwotCi0gICAgaWYgKGNhbmNlbFRvdWNoZXMtPmxlbmd0
aCgpID4gMCkgewotICAgICAgICAvLyBXZSBkaXNwYXRjaCB0aGUgZXZlbnQgdG8gdGhlIHRhcmdl
dCBvZiB0aGUgdG91Y2ggdGhhdCBjYXVzZWQgdGhpcyB0b3VjaCBldmVudCB0byBiZSBnZW5lcmF0
ZWQsIGkuZS4KLSAgICAgICAgLy8gd2UgdGFrZSBpdCBmcm9tIHRoZSBsaXN0IHRoYXQgd2lsbCBi
ZSB1c2VkIGFzIHRoZSBjaGFuZ2VkVG91Y2hlcyBwcm9wZXJ0eSBvZiB0aGUgZXZlbnQuCi0gICAg
ICAgIC8vIFRoZSBjaG9pY2UgdG8gdXNlIHRoZSB0b3VjaCBhdCBpbmRleCAwIGd1YXJhbnRlZXMg
dGhhdCB0aGVyZSBpcyBhIHRhcmdldCAoYXMgd2UgY2hlY2tlZCB0aGUgbGVuZ3RoCi0gICAgICAg
IC8vIGFib3ZlKS4gSW4gdGhlIGNhc2UgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgdG91Y2hlcyBp
biB3aGF0IGJlY29tZXMgdGhlIGNoYW5nZWRUb3VjaGVzIGxpc3QsIGl0IGlzCi0gICAgICAgIC8v
IGRpZmZpY3VsdCB0byBzYXkgaG93IHdlIHNob3VsZCBwcmlvcml0aXNlIHRvdWNoZXMgYW5kIGFz
IHN1Y2gsIGl0ZW0gMCBpcyBhbiBhcmJpdHJhcnkgY2hvaWNlLgotICAgICAgICBjaGFuZ2VkVG91
Y2ggPSBjYW5jZWxUb3VjaGVzLT5pdGVtKDApOwotICAgICAgICBBU1NFUlQoY2hhbmdlZFRvdWNo
KTsKLSAgICAgICAgdG91Y2hFdmVudFRhcmdldCA9IGNoYW5nZWRUb3VjaC0+dGFyZ2V0KCk7Ci0g
ICAgICAgIEFTU0VSVCh0b3VjaEV2ZW50VGFyZ2V0KTsKLQotICAgICAgICBldmVudE5hbWUgPSAm
ZXZlbnROYW1lcygpLnRvdWNoY2FuY2VsRXZlbnQ7Ci0gICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50
PiBjYW5jZWxFdiA9Ci0gICAgICAgICAgICBUb3VjaEV2ZW50OjpjcmVhdGUoVG91Y2hMaXN0Ojpj
cmVhdGUoKS5nZXQoKSwgVG91Y2hMaXN0OjpjcmVhdGUoKS5nZXQoKSwgY2FuY2VsVG91Y2hlcy5n
ZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICpldmVudE5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5kZWZh
dWx0VmlldygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgMCwgMCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZlbnQu
c2hpZnRLZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50Lm1ldGFLZXkoKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGNhbmNlbEV2LmdldCgpLCBl
Yyk7Ci0gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgfD0gY2FuY2VsRXYtPmRlZmF1bHRQcmV2ZW50
ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAocmVsZWFzZWRUb3VjaGVzLT5sZW5ndGgoKSA+IDApIHsK
LSAgICAgICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IHJlbGVhc2VkVG91Y2hlcy0+aXRlbSgwKTsK
LSAgICAgICAgQVNTRVJUKGNoYW5nZWRUb3VjaCk7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQg
PSBjaGFuZ2VkVG91Y2gtPnRhcmdldCgpOwotICAgICAgICBBU1NFUlQodG91Y2hFdmVudFRhcmdl
dCk7Ci0KLSAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyA9IGFzc2VtYmxl
VGFyZ2V0VG91Y2hlcyhjaGFuZ2VkVG91Y2gsIHRvdWNoZXMuZ2V0KCkpOwotCi0gICAgICAgIGV2
ZW50TmFtZSA9ICZldmVudE5hbWVzKCkudG91Y2hlbmRFdmVudDsKLSAgICAgICAgUmVmUHRyPFRv
dWNoRXZlbnQ+IGVuZEV2ID0gCi0gICAgICAgICAgICBUb3VjaEV2ZW50OjpjcmVhdGUodG91Y2hl
cy5nZXQoKSwgdGFyZ2V0VG91Y2hlcy5nZXQoKSwgcmVsZWFzZWRUb3VjaGVzLmdldCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV2ZW50TmFt
ZSwgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQubWV0YUtleSgpKTsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHRv
dWNoRXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoZW5kRXYuZ2V0KCksIGVjKTsKLSAgICAgICAg
ZGVmYXVsdFByZXZlbnRlZCB8PSBlbmRFdi0+ZGVmYXVsdFByZXZlbnRlZCgpOwotICAgIH0KLSAg
ICBpZiAocHJlc3NlZFRvdWNoZXMtPmxlbmd0aCgpID4gMCkgewotICAgICAgICBUb3VjaCogY2hh
bmdlZFRvdWNoID0gcHJlc3NlZFRvdWNoZXMtPml0ZW0oMCk7Ci0gICAgICAgIEFTU0VSVChjaGFu
Z2VkVG91Y2gpOwotICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0ID0gY2hhbmdlZFRvdWNoLT50YXJn
ZXQoKTsKLSAgICAgICAgQVNTRVJUKHRvdWNoRXZlbnRUYXJnZXQpOwotCi0gICAgICAgIFJlZlB0
cjxUb3VjaExpc3Q+IHRhcmdldFRvdWNoZXMgPSBhc3NlbWJsZVRhcmdldFRvdWNoZXMoY2hhbmdl
ZFRvdWNoLCB0b3VjaGVzLmdldCgpKTsKLQotICAgICAgICBldmVudE5hbWUgPSAmZXZlbnROYW1l
cygpLnRvdWNoc3RhcnRFdmVudDsKLSAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IHN0YXJ0RXYg
PQotICAgICAgICAgICAgVG91Y2hFdmVudDo6Y3JlYXRlKHRvdWNoZXMuZ2V0KCksIHRhcmdldFRv
dWNoZXMuZ2V0KCksIHByZXNzZWRUb3VjaGVzLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmV2ZW50TmFtZSwgdG91Y2hFdmVudFRhcmdl
dC0+dG9Ob2RlKCktPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJs
S2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubWV0YUtleSgpKTsKLSAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPmRp
c3BhdGNoRXZlbnQoc3RhcnRFdi5nZXQoKSwgZWMpOwotICAgICAgICBkZWZhdWx0UHJldmVudGVk
IHw9IHN0YXJ0RXYtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAobW92ZWRU
b3VjaGVzLT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IG1v
dmVkVG91Y2hlcy0+aXRlbSgwKTsKLSAgICAgICAgQVNTRVJUKGNoYW5nZWRUb3VjaCk7Ci0gICAg
ICAgIHRvdWNoRXZlbnRUYXJnZXQgPSBjaGFuZ2VkVG91Y2gtPnRhcmdldCgpOwotICAgICAgICBB
U1NFUlQodG91Y2hFdmVudFRhcmdldCk7Ci0KLSAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFy
Z2V0VG91Y2hlcyA9IGFzc2VtYmxlVGFyZ2V0VG91Y2hlcyhjaGFuZ2VkVG91Y2gsIHRvdWNoZXMu
Z2V0KCkpOwotCi0gICAgICAgIGV2ZW50TmFtZSA9ICZldmVudE5hbWVzKCkudG91Y2htb3ZlRXZl
bnQ7Ci0gICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50PiBtb3ZlRXYgPSAKLSAgICAgICAgICAgIFRv
dWNoRXZlbnQ6OmNyZWF0ZSh0b3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBtb3Zl
ZFRvdWNoZXMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqZXZlbnROYW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5
KCksIGV2ZW50LnNoaWZ0S2V5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBldmVudC5tZXRhS2V5KCkpOwotICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChtb3ZlRXYu
Z2V0KCksIGVjKTsKLSAgICAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBtb3ZlRXYtPmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKKyAgICBSZWZQdHI8VG91Y2hMaXN0PiBlbXB0eUxpc3QgPSBUb3VjaExpc3Q6
OmNyZWF0ZSgpOworICAgIGZvciAodW5zaWduZWQgc3RhdGUgPSAwOyBzdGF0ZSAhPSBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGVFbmQ7ICsrc3RhdGUpIHsKKyAgICAgICAgaWYgKCFjaGFu
Z2VkVG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgLy8gV2hlbiBzZW5kaW5nIGEgdG91Y2ggY2FuY2VsIGV2ZW50LCB1c2UgZW1wdHkgdG91
Y2hlcyBhbmQgdGFyZ2V0VG91Y2hlcyBsaXN0cy4KKyAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4m
IGVmZmVjdGl2ZVRvdWNoZXMoc3RhdGUgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNl
bGxlZCA/IGVtcHR5TGlzdCA6IHRvdWNoZXMpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHN0YXRlTmFtZShldmVudE5hbWVGb3JUb3VjaFBvaW50U3RhdGUoc3RhdGljX2Nhc3Q8UGxhdGZv
cm1Ub3VjaFBvaW50OjpTdGF0ZT4oc3RhdGUpKSk7CisgICAgICAgIGNvbnN0IEV2ZW50VGFyZ2V0
U2V0JiB0YXJnZXRzRm9yU3RhdGUgPSBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90YXJnZXRzOwor
CisgICAgICAgIGZvciAoRXZlbnRUYXJnZXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0
c0ZvclN0YXRlLmJlZ2luKCk7IGl0ICE9IHRhcmdldHNGb3JTdGF0ZS5lbmQoKTsgKytpdCkgewor
ICAgICAgICAgICAgRXZlbnRUYXJnZXQqIHRvdWNoRXZlbnRUYXJnZXQgPSBpdC0+Z2V0KCk7Cisg
ICAgICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzKHN0YXRlID09IFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzQnlUYXJn
ZXQuZ2V0KHRvdWNoRXZlbnRUYXJnZXQpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRUb3Vj
aGVzKTsKKworICAgICAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IHRvdWNoRXZlbnQgPQorICAg
ICAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZShlZmZlY3RpdmVUb3VjaGVzLmdldCgpLCB0
YXJnZXRUb3VjaGVzLmdldCgpLCBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVzLmdldCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZl
bnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2
ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCkpOworICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KHRvdWNoRXZlbnQuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGRlZmF1
bHRQcmV2ZW50ZWQgfD0gdG91Y2hFdmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgcmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVRvdWNoUG9pbnQuaAppbmRleCA4MmM4ZDc4Li41NzQ2YjE4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hQb2ludC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1Ub3VjaFBvaW50LmgKQEAgLTQwLDcgKzQwLDggQEAgcHVibGljOgogICAgICAgICBU
b3VjaFByZXNzZWQsCiAgICAgICAgIFRvdWNoTW92ZWQsCiAgICAgICAgIFRvdWNoU3RhdGlvbmFy
eSwKLSAgICAgICAgVG91Y2hDYW5jZWxsZWQKKyAgICAgICAgVG91Y2hDYW5jZWxsZWQsCisgICAg
ICAgIFRvdWNoU3RhdGVFbmQgLy8gUGxhY2Vob2xkZXI6IG11c3QgcmVtYWluIHRoZSBsYXN0IGl0
ZW0uCiAgICAgfTsKIAogI2lmIFBMQVRGT1JNKFFUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77201</attachid>
            <date>2010-12-22 03:30:54 -0800</date>
            <delta_ts>2010-12-22 08:26:37 -0800</delta_ts>
            <desc>Patch 4 - corrects expected results to only have one TEST COMPLETE</desc>
            <filename>bug51258_patch.txt</filename>
            <type>text/plain</type>
            <size>35801</size>
            <attacher name="Jonathan Dixon">joth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1OTA4MmUwLi4yNjdiOTY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTIt
MjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qgc3Vw
cG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAorCisg
ICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gtZ3JvdXBlZC10YXJnZXRzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91
Y2gtZ3JvdXBlZC10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Rv
dWNoL3NjcmlwdC10ZXN0cy9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuanM6IEFkZGVkLgor
ICAgICAgICAoZGVjbGFyZVRvdWNoSGFuZGxlci5yZXR1cm4uc2hvdWxkQmUpOgorICAgICAgICAo
ZGVjbGFyZVRvdWNoSGFuZGxlcik6CisgICAgICAgICh0b3VjaEVuZEhhbmRsZXIpOgorICAgICAg
ICBBZGRlZCBuZXcgdGVzdCB0aGF0IGVuc3VyZXMgYm90aCB0ZXN0IHRhcmdldHMgcmVjZWl2ZSBl
dmVudHMgd2hlbiBoaXQgYnkgbXVsdGlwbGUKKyAgICAgICAgdG91Y2ggcG9pbnRzIGZyb20gdGhl
IHNhbWUgcGxhdGZvcm0gZXZlbnQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9zY3Jp
cHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanM6CisgICAgICAgIChkZWNsYXJlVG91Y2hT
dGFydC5yZXR1cm4udG91Y2hTdGFydEhhbmRsZXIpOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQpOgorICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZS5yZXR1cm4udG91Y2hNb3ZlSGFuZGxlcik6
CisgICAgICAgIChkZWNsYXJlVG91Y2hNb3ZlKToKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3Vj
aC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQucmV0dXJuLnRvdWNoU3RhcnRIYW5kbGVyKToKKyAgICAgICAgKGRlY2xhcmVUb3VjaFN0YXJ0
KToKKyAgICAgICAgKGRlY2xhcmVUb3VjaE1vdmUucmV0dXJuLnRvdWNoTW92ZUhhbmRsZXIpOgor
ICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZSk6CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC10YXJnZXQtbGltaXRlZC1leHBlY3RlZC50eHQ6CisgICAgICAgIFVwZGF0ZWQgJiByZWJh
c2VsaW5lZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IG5ldyBleHBlY3RhdGlvbnMuCisKIDIw
MTAtMTItMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDAzMmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1n
cm91cGVkLXRhcmdldHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1Rlc3RzIHRoYXQg
dGhlIGFuIGV2ZW50IGlzIHNlbnQgZm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0
IHRvdWNoZXMgY29udGFpbnMgYWxsIHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0CisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMg
MworUEFTUyBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50b3Vj
aGVzLmxlbmd0aCBpcyAzCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQ
QVNTIGV2ZW50LnRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQuY2hhbmdlZFRvdWNoZXMu
bGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC5j
aGFuZ2VkVG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaGVuZCIK
K1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMAorUEFTUyBldmVudC50YXJnZXRUb3VjaGVz
Lmxlbmd0aCBpcyAwCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQQVNT
IGV2ZW50LnR5cGUgaXMgInRvdWNoZW5kIgorUEFTUyBldmVudC50b3VjaGVzLmxlbmd0aCBpcyAw
CitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDAKK1BBU1MgZXZlbnQuY2hhbmdl
ZFRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuaHRtbApA
QCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8IS0tCisg
IFRvdWNoIHRlc3RzIHRoYXQgaW52b2x2ZSB0aGUgb250b3VjaHN0YXJ0LCBvbnRvdWNobW92ZSwg
b250b3VjaGVuZCBvciBvbnRvdWNoY2FuY2VsIGNhbGxiYWNrcworICBzaG91bGQgYmUgd3JpdHRl
biBpbiBhbiBhc3luY2hyb25vdXMgZmFzaGlvbiBzbyB0aGV5IGNhbiBiZSBydW4gb24gbW9iaWxl
IHBsYXRmb3JtcyBsaWtlIEFuZHJvaWQuCisgIFRoaXMgdGVtcGxhdGUgd2lsbCBnZW5lcmF0ZSBh
biBhc3luY2hyb25vdXMgc3R5bGUgdGVzdCBieSB1c2luZyB0aGUganMtdGVzdC1wb3N0LWZ1bmN0
aW9uIHNjcmlwdC4KKyAgWW91IHdpbGwgbmVlZCB0byBpbnZva2UgaXNTdWNjZXNzZnVsbHlQYXJz
ZWQoKSBpbiB5b3VyIHRlc3Qgc2NyaXB0IHdoZW4gdGhlIHRlc3QgY29tcGxldGVzLgorLS0+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQt
dGFyZ2V0cy5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvbXVsdGktdG91Y2gtZ3JvdXBl
ZC10YXJnZXRzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3Rz
L211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZDI2ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcwpA
QCAtMCwwICsxLDg5IEBACit2YXIgdGFyZ2V0c0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwordGFyZ2V0c0Rpdi5pZCA9ICJ0YXJnZXRzRGl2IjsKKwordmFyIGRpdjEgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RpdjEuaWQgPSAidGFyZ2V0QSI7CitkaXYxLnN0
eWxlLndpZHRoID0gIjEwMHB4IjsKK2RpdjEuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKK2RpdjEu
c3R5bGUuYmFja2dyb3VuZENvbG9yID0gImJsdWUiOworCit2YXIgZGl2MiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworZGl2Mi5pZCA9ICJ0YXJnZXRCIjsKK2RpdjIuc3R5bGUud2lk
dGggPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworZGl2Mi5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOworCitkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh0
YXJnZXRzRGl2LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpKTsKK3RhcmdldHNE
aXYuYXBwZW5kQ2hpbGQoZGl2MSk7Cit0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2JyJykpOwordGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkaXYyKTsKKworZnVu
Y3Rpb24gZGVjbGFyZVRvdWNoSGFuZGxlcihkaXZfaWQsIGV4cGVjdGVkVGFyZ2V0VG91Y2hlcykK
K3sKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkKKyAgICB7CisgICAgICAgIC8vIERvIG5vdCB1c2Ug
dGhlIHBhcmFtZXRlcnMgKGRpdl9pZCwgZXhwZWN0ZWRUYXJnZXRUb3VjaGVzKSBpbiBzaG91bGRC
ZS4uIGNhbGxzLCBhcworICAgICAgICAvLyB0aGUgb3JkZXIgb2YgZXZlbnQgZGlzcGF0Y2ggaXMg
bm90IGRldGVybWluaXN0aWMgYWNyb3NzIGV4ZWN1dGlvbnMgYW5kIHJlb3JkZXJpbmcKKyAgICAg
ICAgLy8gb2Z0aGUgUEFTUyBkZWJ1ZyBvdXRwdXQgZGV0YWlscyB3b3VsZCBjYXVzZSB0aGUgdGVz
dCB0byBiZSB1bnJlbGlhYmxlLgorICAgICAgICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5n
dGgnLCAnMycpOworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggIT0gZXhw
ZWN0ZWRUYXJnZXRUb3VjaGVzKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgnV3JvbmcgdGFyZ2V0
VG91Y2ggbGVuZ3RoOiAnICsgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggKyAnIHZzICcgKyBl
eHBlY3RlZFRhcmdldFRvdWNoZXMpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50
LnRhcmdldFRvdWNoZXMubGVuZ3RoOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChl
dmVudC50YXJnZXRUb3VjaGVzW2ldLnRhcmdldC5pZCAhPSBkaXZfaWQpCisgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgnSW5jb3JyZWN0IHRhcmdldFRvdWNoIElEOiAnICsgZXZlbnQudGFyZ2V0
VG91Y2hlc1tpXS50YXJnZXQuaWQgKyAnIHZzICcgKyBkaXZfaWQpOworICAgICAgICB9CisgICAg
ICAgIHNob3VsZEJlKCdldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGgnLCAnMycpOworICAgIH0K
K30KKwordmFyIGVuZENvdW50ID0gMDsKK2Z1bmN0aW9uIHRvdWNoRW5kSGFuZGxlcigpCit7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNoZW5kJyk7CisKKyAg
ICBzaG91bGRCZSgnZXZlbnQudG91Y2hlcy5sZW5ndGgnLCAnMCcpOworICAgIHNob3VsZEJlKCdl
dmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcwJyk7CisgICAgc2hvdWxkQmUoJ2V2ZW50LmNo
YW5nZWRUb3VjaGVzLmxlbmd0aCcsICczJyk7CisKKyAgICBpZiAoKytlbmRDb3VudCA9PSAyKQor
ICAgIHsKKyAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgIH0KK30KKworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVj
bGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyksIGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRM
aXN0ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QScsICcyJyks
IGZhbHNlKTsKK2RpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRs
ZXIsIGZhbHNlKTsKKworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFy
ZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZhbHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0
ZW5lcigidG91Y2htb3ZlIiwgZGVjbGFyZVRvdWNoSGFuZGxlcigndGFyZ2V0QicsICcxJyksIGZh
bHNlKTsKK2RpdjIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0b3VjaEVuZEhhbmRsZXIs
IGZhbHNlKTsKKworZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIGFuIGV2ZW50IGlzIHNlbnQg
Zm9yIGV2ZXJ5IHRvdWNoIGxpc3RlbmVyLCBhbmQgdGFyZ2V0IHRvdWNoZXMgY29udGFpbnMgYWxs
IHRoZSBwb2ludHMgZm9yIHRoYXQgdGFyZ2V0Iik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRlci5jbGVhclRvdWNo
UG9pbnRzKCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg1MCwgMTUwKTsKKyAgICBl
dmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDUwLCAyNTApOworICAgIGV2ZW50U2VuZGVyLmFkZFRv
dWNoUG9pbnQoNTAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hTdGFydCgpOworCisgICAg
ZXZlbnRTZW5kZXIudXBkYXRlVG91Y2hQb2ludCgwLCAyMDAsIDE1MCk7CisgICAgZXZlbnRTZW5k
ZXIudXBkYXRlVG91Y2hQb2ludCgxLCAzMDAsIDI1MCk7CisgICAgZXZlbnRTZW5kZXIudXBkYXRl
VG91Y2hQb2ludCgyLCA0MDAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIudG91Y2hNb3ZlKCk7CisK
KyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgwKTsKKyAgICBldmVudFNlbmRlci5y
ZWxlYXNlVG91Y2hQb2ludCgxKTsKKyAgICBldmVudFNlbmRlci5yZWxlYXNlVG91Y2hQb2ludCgy
KTsKKyAgICBldmVudFNlbmRlci50b3VjaEVuZCgpOworfSBlbHNlCisgICAgZGVidWcoJ1RoaXMg
dGVzdCByZXF1aXJlcyBEUlQuJyk7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5q
cwppbmRleCBmZDM0MDBjLi4zYWFlNDdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanMKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC1saW1p
dGVkLmpzCkBAIC0xMyw1OSArMTMsNjkgQEAgZGl2Mi5zdHlsZS53aWR0aCA9ICIxMDBweCI7CiBk
aXYyLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CiBkaXYyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9
ICJncmVlbiI7CiAKLXZhciB0b3VjaFN0YXJ0Q291bnQgPSAwOwotdmFyIHRvdWNoTW92ZUNvdW50
ID0gMDsKLQogZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodGFyZ2V0c0RpdiwgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjEp
OwogdGFyZ2V0c0Rpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsK
IHRhcmdldHNEaXYuYXBwZW5kQ2hpbGQoZGl2Mik7CiAKLWZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5k
bGVyKCkKK2Z1bmN0aW9uIGRlY2xhcmVUb3VjaFN0YXJ0KCkKIHsKLSAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2V2ZW50LnR5cGUnLCAndG91Y2hzdGFydCcpOwotICAgIHN3aXRjaCAodG91Y2hT
dGFydENvdW50KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2
Mi5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNb
MV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICB2YXIgdG91
Y2hTdGFydENvdW50ID0gMDsKKyAgICByZXR1cm4gZnVuY3Rpb24gdG91Y2hTdGFydEhhbmRsZXIo
KQorICAgIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3Rv
dWNoc3RhcnQnKTsKKyAgICAgICAgc3dpdGNoICh0b3VjaFN0YXJ0Q291bnQpIHsKKyAgICAgICAg
ICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoJywg
JzEnKTsKKworICAgICAgICB0b3VjaFN0YXJ0Q291bnQrKzsKICAgICB9Ci0KLSAgICB0b3VjaFN0
YXJ0Q291bnQrKzsKIH0KIAotZnVuY3Rpb24gdG91Y2hNb3ZlSGFuZGxlcigpCi17Ci0gICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92ZScpOwotICAgIHN3aXRj
aCAodG91Y2hNb3ZlQ291bnQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICBjYXNlIDE6Ci0g
ICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0
LmlkJywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50
LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAyOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50
b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEuaWQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQordmFyIHRvdGFsVG91Y2hNb3ZlQ291bnQgPSAwOwogCi0gICAg
aWYgKCsrdG91Y2hNb3ZlQ291bnQgPT0gMykKK2Z1bmN0aW9uIGRlY2xhcmVUb3VjaE1vdmUoZGl2
X2lkKQoreworICAgIHZhciB0b3VjaE1vdmVDb3VudCA9IDA7CisgICAgcmV0dXJuIGZ1bmN0aW9u
IHRvdWNoTW92ZUhhbmRsZXIoKQogICAgIHsKLSAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotICAgICAg
ICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2V2ZW50LnR5cGUnLCAndG91Y2htb3ZlJyk7CisgICAgICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291
bnQpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0Lmlk
JywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVu
dC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywg
ZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2hv
dWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgKyt0b3Vj
aE1vdmVDb3VudDsKKworICAgICAgICBpZiAoKyt0b3RhbFRvdWNoTW92ZUNvdW50ID09IDYpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICBpc1N1
Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgICAgICB9CiAgICAgfQogfQogCi1kaXYxLmFkZEV2ZW50
TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3VjaFN0YXJ0SGFuZGxlciwgZmFsc2UpOwotZGl2MS5h
ZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCB0b3VjaE1vdmVIYW5kbGVyLCBmYWxzZSk7Citk
aXYxLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCBkZWNsYXJlVG91Y2hTdGFydCgpLCBm
YWxzZSk7CitkaXYxLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGRlY2xhcmVUb3VjaE1v
dmUoKSwgZmFsc2UpOwogCi1kaXYyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3Vj
aFN0YXJ0SGFuZGxlciwgZmFsc2UpOwotZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUi
LCB0b3VjaE1vdmVIYW5kbGVyLCBmYWxzZSk7CitkaXYyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNo
c3RhcnQiLCBkZWNsYXJlVG91Y2hTdGFydCgpLCBmYWxzZSk7CitkaXYyLmFkZEV2ZW50TGlzdGVu
ZXIoInRvdWNobW92ZSIsIGRlY2xhcmVUb3VjaE1vdmUoKSwgZmFsc2UpOwogCiBkZXNjcmlwdGlv
bigiVGVzdHMgdGhhdCB0aGUgdGFyZ2V0IG9mIHRvdWNoZXMgbWF0Y2ggdGhlIGVsZW1lbnQgd2hl
cmUgdGhlIGV2ZW50IG9yaWdpbmF0ZWQsIG5vdCB3aGVyZSB0aGUgdG91Y2ggaXMgY3VycmVudGx5
IG9jY3VycmluZy4gVGhpcyBpcyBhIGxpbWl0ZWQgdmVyc2lvbiBvZiB0ZXN0IHRvdWNoLXRhcmdl
dC5odG1sIHRoYXQgYXZvaWRzIHRoZSBzaXR1YXRpb24gd2hlcmUgb25lIHRvdWNoIHBvaW50IGlz
IHJlbGVhc2VkIHdoaWxlIGFub3RoZXIgaXMgbWFpbnRhaW5lZC4iKTsKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC5q
cyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10YXJn
ZXQuanMKaW5kZXggOGU0N2YyMy4uZGU1ODYwNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdldC5qcworKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzCkBAIC0x
Myw1OSArMTMsNjkgQEAgZGl2Mi5zdHlsZS53aWR0aCA9ICIxMDBweCI7CiBkaXYyLnN0eWxlLmhl
aWdodCA9ICIxMDBweCI7CiBkaXYyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJncmVlbiI7CiAK
LXZhciB0b3VjaFN0YXJ0Q291bnQgPSAwOwotdmFyIHRvdWNoTW92ZUNvdW50ID0gMDsKLQogZG9j
dW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodGFyZ2V0c0RpdiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjEpOwogdGFyZ2V0c0Rp
di5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKIHRhcmdldHNEaXYu
YXBwZW5kQ2hpbGQoZGl2Mik7CiAKLWZ1bmN0aW9uIHRvdWNoU3RhcnRIYW5kbGVyKCkKK2Z1bmN0
aW9uIGRlY2xhcmVUb3VjaFN0YXJ0KCkKIHsKLSAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2
ZW50LnR5cGUnLCAndG91Y2hzdGFydCcpOwotICAgIHN3aXRjaCAodG91Y2hTdGFydENvdW50KSB7
Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZl
bnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYxLmlkKTsKLSAgICAgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0Lmlk
JywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICB2YXIgdG91Y2hTdGFydENvdW50
ID0gMDsKKyAgICByZXR1cm4gZnVuY3Rpb24gdG91Y2hTdGFydEhhbmRsZXIoKQorICAgIHsKKyAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNoc3RhcnQnKTsK
KyAgICAgICAgc3dpdGNoICh0b3VjaFN0YXJ0Q291bnQpIHsKKyAgICAgICAgICAgIGNhc2UgMDoK
KyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0u
dGFyZ2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAg
ICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFy
Z2V0LmlkJywgZGl2MS5pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc2hvdWxkQmUoJ2V2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoJywgJzEnKTsKKworICAg
ICAgICB0b3VjaFN0YXJ0Q291bnQrKzsKICAgICB9Ci0KLSAgICB0b3VjaFN0YXJ0Q291bnQrKzsK
IH0KIAotZnVuY3Rpb24gdG91Y2hNb3ZlSGFuZGxlcigpCi17Ci0gICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92ZScpOwotICAgIHN3aXRjaCAodG91Y2hNb3Zl
Q291bnQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5p
ZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0u
dGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAy
OgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRh
cmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdl
dmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEuaWQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgfQordmFyIHRvdGFsVG91Y2hNb3ZlQ291bnQgPSAwOwogCi0gICAgaWYgKCsrdG91Y2hN
b3ZlQ291bnQgPT0gMykKK2Z1bmN0aW9uIGRlY2xhcmVUb3VjaE1vdmUoZGl2X2lkKQoreworICAg
IHZhciB0b3VjaE1vdmVDb3VudCA9IDA7CisgICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoTW92ZUhh
bmRsZXIoKQogICAgIHsKLSAgICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLSAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotICAgICAgICBpc1N1Y2Nlc3Nm
dWxseVBhcnNlZCgpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnR5cGUn
LCAndG91Y2htb3ZlJyk7CisgICAgICAgIHN3aXRjaCAodG91Y2hNb3ZlQ291bnQpIHsKKyAgICAg
ICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7
CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFd
LnRhcmdldC5pZCcsIGRpdjIuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQu
dG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2MS5pZCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2hvdWxkQmUoJ2V2ZW50
LnRhcmdldFRvdWNoZXMubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgKyt0b3VjaE1vdmVDb3VudDsK
KworICAgICAgICBpZiAoKyt0b3RhbFRvdWNoTW92ZUNvdW50ID09IDYpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICBpc1N1Y2Nlc3NmdWxseVBh
cnNlZCgpOworICAgICAgICB9CiAgICAgfQogfQogCi1kaXYxLmFkZEV2ZW50TGlzdGVuZXIoInRv
dWNoc3RhcnQiLCB0b3VjaFN0YXJ0SGFuZGxlciwgZmFsc2UpOwotZGl2MS5hZGRFdmVudExpc3Rl
bmVyKCJ0b3VjaG1vdmUiLCB0b3VjaE1vdmVIYW5kbGVyLCBmYWxzZSk7CitkaXYxLmFkZEV2ZW50
TGlzdGVuZXIoInRvdWNoc3RhcnQiLCBkZWNsYXJlVG91Y2hTdGFydCgpLCBmYWxzZSk7CitkaXYx
LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGRlY2xhcmVUb3VjaE1vdmUoKSwgZmFsc2Up
OwogCi1kaXYyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCB0b3VjaFN0YXJ0SGFuZGxl
ciwgZmFsc2UpOwotZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCB0b3VjaE1vdmVI
YW5kbGVyLCBmYWxzZSk7CitkaXYyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCBkZWNs
YXJlVG91Y2hTdGFydCgpLCBmYWxzZSk7CitkaXYyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92
ZSIsIGRlY2xhcmVUb3VjaE1vdmUoKSwgZmFsc2UpOwogCiBkZXNjcmlwdGlvbigiVGVzdHMgdGhh
dCB0aGUgdGFyZ2V0IG9mIHRvdWNoZXMgbWF0Y2ggdGhlIGVsZW1lbnQgd2hlcmUgdGhlIGV2ZW50
IG9yaWdpbmF0ZWQsIG5vdCB3aGVyZSB0aGUgdG91Y2ggaXMgY3VycmVudGx5IG9jY3VycmluZy4i
KTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFy
Z2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRh
cmdldC1leHBlY3RlZC50eHQKaW5kZXggNjBhNGMzNy4uYjFjODY1ZCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0
CkBAIC03LDE4ICs3LDM5IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiBQQVNTIGV2ZW50LnR5
cGUgaXMgInRvdWNoc3RhcnQiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0
YXJnZXRBIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BB
U1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBlIGlzICJ0
b3VjaHN0YXJ0IgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIK
K1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50
LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3Zl
IgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZl
bnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRv
dWNoZXMubGVuZ3RoIGlzIDEKIFBBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgogUEFTUyBl
dmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hl
c1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVu
Z3RoIGlzIDEKIFBBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgogUEFTUyBldmVudC50b3Vj
aGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJn
ZXQuaWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEK
K1BBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRh
cmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMg
InRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKIFBBU1MgZXZl
bnQudHlwZSBpcyAidG91Y2hzdGFydCIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQg
aXMgInRhcmdldEIiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRB
IgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUg
aXMgInRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdl
dEIiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBl
dmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNo
bW92ZSIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEIiCiBQQVNT
IGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50YXJn
ZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
IFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L3RvdWNoLXRhcmdldC1saW1pdGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL3RvdWNoLXRhcmdldC1saW1pdGVkLWV4cGVjdGVkLnR4dAppbmRleCAwYzFlZmQw
Li5mNzc0NDM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3Vj
aC10YXJnZXQtbGltaXRlZC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQtZXhwZWN0ZWQudHh0CkBAIC03LDE4ICs3LDQz
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3Rh
cnQiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgogUEFTUyBl
dmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKK1BBU1MgZXZlbnQudGFyZ2V0
VG91Y2hlcy5sZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgorUEFT
UyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudG91
Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMu
bGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgorUEFTUyBldmVudC50
b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50
YXJnZXQuaWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlz
IDEKIFBBU1MgZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgogUEFTUyBldmVudC50b3VjaGVzWzBd
LnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQg
aXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKIFBBU1Mg
ZXZlbnQudHlwZSBpcyAidG91Y2htb3ZlIgogUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdl
dEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlw
ZSBpcyAidG91Y2htb3ZlIgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFy
Z2V0QSIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEIiCitQQVNT
IGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlwZSBpcyAidG91
Y2hzdGFydCIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEIiCitQ
QVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRBIgorUEFTUyBldmVudC50
YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQi
CiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVu
dC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91
Y2hlcy5sZW5ndGggaXMgMQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2
ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50b3VjaGVz
WzFdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5n
dGggaXMgMQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNo
ZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdl
dC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlNjgwNzku
LjUzMjRiYjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMTItMjEgIEpvbmF0aGFuIERpeG9uICA8am90
aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS10b3VjaCBvbiBhIHBh
Z2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZlbnRz
L3RvdWNoL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5odG1sCisKKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudE5hbWVGb3JUb3VjaFBv
aW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2
ZW50KToKKyAgICAgICAgUmVkZXNpZ25lZCBldmVudCBoYW5kbGVyIHRvIGVuc3VyZSBhbGwgZXZl
bnQgdGFyZ2V0cyBpbnZvbHZlZCBpbiBhIGdpdmVuCisgICAgICAgIG11bHRpdG91Y2ggZXZlbnQg
Z2V0IHRoZSBhcHByb3ByaWF0ZSBldmVudChzKSBmaXJlZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtVG91Y2hQb2ludC5oOiBBZGRlZCBlbmQtc3RvcCBtYXJrZXIgZm9yIFN0YXRlIGVu
dW0uCisKIDIwMTAtMTItMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMzI4
YmU2My4uMjcwMzQ2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI3ODYsMzMgKzI3ODYsNTMg
QEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZUxhc3RTY3JvbGxiYXJVbmRlck1vdXNlKFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBib29sIHNldEwKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAK
LXN0YXRpYyBQYXNzUmVmUHRyPFRvdWNoTGlzdD4gYXNzZW1ibGVUYXJnZXRUb3VjaGVzKFRvdWNo
KiB0b3VjaFRhcmdldCwgVG91Y2hMaXN0KiB0b3VjaGVzKQorc3RhdGljIGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnROYW1lRm9yVG91Y2hQb2ludFN0YXRlKFBsYXRmb3JtVG91Y2hQb2ludDo6U3Rh
dGUgc3RhdGUpCiB7Ci0gICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyA9IFRvdWNo
TGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hlcy0+
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAodG91Y2hlcy0+aXRlbShpKS0+dGFyZ2V0KCkt
PnRvTm9kZSgpLT5pc1NhbWVOb2RlKHRvdWNoVGFyZ2V0LT50YXJnZXQoKS0+dG9Ob2RlKCkpKQot
ICAgICAgICAgICAgdGFyZ2V0VG91Y2hlcy0+YXBwZW5kKHRvdWNoZXMtPml0ZW0oaSkpOworICAg
IHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxl
YXNlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS50b3VjaGVuZEV2ZW50OworICAgIGNh
c2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIGV2
ZW50TmFtZXMoKS50b3VjaGNhbmNlbEV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50
OjpUb3VjaFByZXNzZWQ6CisgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkudG91Y2hzdGFydEV2
ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaE1vdmVkOgorICAgICAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLnRvdWNobW92ZUV2ZW50OworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwogICAgIH0K
LQotICAgIHJldHVybiB0YXJnZXRUb3VjaGVzLnJlbGVhc2UoKTsKIH0KIAogYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkK
IHsKKyAgICAvLyBGaXJzdCBidWlsZCB1cCB0aGUgbGlzdHMgdG8gdXNlIGZvciB0aGUgJ3RvdWNo
ZXMnLCAndGFyZ2V0VG91Y2hlcycgYW5kICdjaGFuZ2VkVG91Y2hlcycgYXR0cmlidXRlcworICAg
IC8vIGluIHRoZSBKUyBldmVudC4gU2VlIGh0dHA6Ly93d3cuc2l0ZXBlbi5jb20vYmxvZy8yMDA4
LzA3LzEwL3RvdWNoaW5nLWFuZC1nZXN0dXJpbmctb24tdGhlLWlwaG9uZS8KKyAgICAvLyBmb3Ig
YW4gb3ZlcnZpZXcgb2YgaG93IHRoZXNlIGxpc3RzIGZpdCB0b2dldGhlci4KKworICAgIC8vIEhv
bGRzIHRoZSBjb21wbGV0ZSBzZXQgb2YgdG91Y2hlcyBvbiB0aGUgc2NyZWVuIGFuZCB3aWxsIGJl
IHVzZWQgYXMgdGhlICd0b3VjaGVzJyBsaXN0IGluIHRoZSBKUyBldmVudC4KICAgICBSZWZQdHI8
VG91Y2hMaXN0PiB0b3VjaGVzID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8VG91
Y2hMaXN0PiBwcmVzc2VkVG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PFRvdWNoTGlzdD4gcmVsZWFzZWRUb3VjaGVzID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKLSAgICBS
ZWZQdHI8VG91Y2hMaXN0PiBtb3ZlZFRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwotICAg
IFJlZlB0cjxUb3VjaExpc3Q+IGNhbmNlbFRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwor
CisgICAgLy8gQSBkaWZmZXJlbnQgdmlldyBvbiB0aGUgJ3RvdWNoZXMnIGxpc3QgYWJvdmUsIGZp
bHRlcmVkIGFuZCBncm91cGVkIGJ5IGV2ZW50IHRhcmdldC4gVXNlZCBmb3IgdGhlCisgICAgLy8g
J3RhcmdldFRvdWNoZXMnIGxpc3QgaW4gdGhlIEpTIGV2ZW50LgorICAgIHR5cGVkZWYgSGFzaE1h
cDxFdmVudFRhcmdldCosIFJlZlB0cjxUb3VjaExpc3Q+ID4gVGFyZ2V0VG91Y2hlc01hcDsKKyAg
ICBUYXJnZXRUb3VjaGVzTWFwIHRvdWNoZXNCeVRhcmdldDsKKworICAgIC8vIEFycmF5IG9mIHRv
dWNoZXMgcGVyIHN0YXRlLCB1c2VkIHRvIGFzc2VtYmxlIHRoZSAnY2hhbmdlZFRvdWNoZXMnIGxp
c3QgaW4gdGhlIEpTIGV2ZW50LgorICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8RXZlbnRUYXJn
ZXQ+ID4gRXZlbnRUYXJnZXRTZXQ7CisgICAgc3RydWN0IHsKKyAgICAgICAgLy8gVGhlIHRvdWNo
ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFydGljdWxhciBjaGFuZ2Ugc3RhdGUgdGhpcyBzdHJ1
Y3QgaW5zdGFuY2UgcmVwcmVzZW50cy4KKyAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV90b3Vj
aGVzOworICAgICAgICAvLyBTZXQgb2YgdGFyZ2V0cyBpbnZvbHZlZCBpbiBtX3RvdWNoZXMuCisg
ICAgICAgIEV2ZW50VGFyZ2V0U2V0IG1fdGFyZ2V0czsKKyAgICB9IGNoYW5nZWRUb3VjaGVzW1Bs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0ZUVuZF07CiAKICAgICBjb25zdCBWZWN0b3I8UGxh
dGZvcm1Ub3VjaFBvaW50PiYgcG9pbnRzID0gZXZlbnQudG91Y2hQb2ludHMoKTsKLSAgICBBdG9t
aWNTdHJpbmcqIGV2ZW50TmFtZSA9IDA7CiAKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25z
dCBQbGF0Zm9ybVRvdWNoUG9pbnQmIHBvaW50ID0gcG9pbnRzW2ldOworICAgICAgICBQbGF0Zm9y
bVRvdWNoUG9pbnQ6OlN0YXRlIHBvaW50U3RhdGUgPSBwb2ludC5zdGF0ZSgpOwogICAgICAgICBJ
bnRQb2ludCBwYWdlUG9pbnQgPSBkb2N1bWVudFBvaW50Rm9yV2luZG93UG9pbnQobV9mcmFtZSwg
cG9pbnQucG9zKCkpOwogCiAgICAgICAgIEhpdFRlc3RSZXF1ZXN0OjpIaXRUZXN0UmVxdWVzdFR5
cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6UmVh
ZE9ubHk7CkBAIC0yODIxLDcgKzI4NDEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91
Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICAvLyBzaG91
bGQgYWZmZWN0IHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBuZWNlc3Nh
cnksCiAgICAgICAgIC8vIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgc2lnbmlmaWVzIHRoYXQgdGhl
IGhpdCB0ZXN0IGlzIHRha2luZyBwbGFjZQogICAgICAgICAvLyB3aXRoIHRoZSBtb3VzZSAob3Ig
ZmluZ2VyIGluIHRoaXMgY2FzZSkgYmVpbmcgcHJlc3NlZC4KLSAgICAgICAgc3dpdGNoIChwb2lu
dC5zdGF0ZSgpKSB7CisgICAgICAgIHN3aXRjaCAocG9pbnRTdGF0ZSkgewogICAgICAgICBjYXNl
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOgogICAgICAgICAgICAgaGl0VHlwZSA9
IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI4MzcsMTMg
KzI4NTcsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgfQogCiAgICAgICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdEF0UG9pbnQocGFnZVBvaW50LCAvKmFsbG93U2hhZG93
Q29udGVudCovIGZhbHNlLCBmYWxzZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlKTsK
LSAgICAgICAgTm9kZSogdGFyZ2V0ID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgICAgICBSZWZQ
dHI8Tm9kZT4gbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUp
OwogCiAgICAgICAgIC8vIFRvdWNoIGV2ZW50cyBzaG91bGQgbm90IGdvIHRvIHRleHQgbm9kZXMK
LSAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQtPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAg
IHRhcmdldCA9IHRhcmdldC0+cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAobm9kZS0+aXNUZXh0
Tm9kZSgpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKIAotICAgICAg
ICBEb2N1bWVudCogZG9jID0gdGFyZ2V0LT5kb2N1bWVudCgpOworICAgICAgICBEb2N1bWVudCog
ZG9jID0gbm9kZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKCFkb2MpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKCFkb2MtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6VE9V
Q0hfTElTVEVORVIpKQpAQCAtMjg2MCwxMCArMjg4MSwxMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAg
ICAvLyBJbmNyZW1lbnQgdGhlIHBsYXRmb3JtIHRvdWNoIGlkIGJ5IDEgdG8gYXZvaWQgc3Rvcmlu
ZyBhIGtleSBvZiAwIGluIHRoZSBoYXNobWFwLgogICAgICAgICB1bnNpZ25lZCB0b3VjaFBvaW50
VGFyZ2V0S2V5ID0gcG9pbnQuaWQoKSArIDE7CiAgICAgICAgIFJlZlB0cjxFdmVudFRhcmdldD4g
dG91Y2hUYXJnZXQ7Ci0gICAgICAgIGlmIChwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQ
b2ludDo6VG91Y2hQcmVzc2VkKSB7Ci0gICAgICAgICAgICBtX29yaWdpbmF0aW5nVG91Y2hQb2lu
dFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIHRhcmdldCk7Ci0gICAgICAgICAgICB0
b3VjaFRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgfSBlbHNlIGlmIChwb2ludC5zdGF0ZSgpID09
IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCB8fCBwb2ludC5zdGF0ZSgpID09IFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpIHsKKyAgICAgICAgaWYgKHBvaW50U3Rh
dGUgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQpIHsKKyAgICAgICAgICAgIG1f
b3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0cy5zZXQodG91Y2hQb2ludFRhcmdldEtleSwgbm9k
ZS5nZXQoKSk7CisgICAgICAgICAgICB0b3VjaFRhcmdldCA9IG5vZGU7CisgICAgICAgIH0gZWxz
ZSBpZiAocG9pbnRTdGF0ZSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgfHwg
cG9pbnRTdGF0ZSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CiAgICAg
ICAgICAgICAvLyBUaGUgdGFyZ2V0IHNob3VsZCBiZSB0aGUgb3JpZ2luYWwgdGFyZ2V0IGZvciB0
aGlzIHRvdWNoLCBzbyBnZXQgaXQgZnJvbSB0aGUgaGFzaG1hcC4gQXMgaXQncyBhIHJlbGVhc2Ug
b3IgY2FuY2VsCiAgICAgICAgICAgICAvLyB3ZSBhbHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAu
CiAgICAgICAgICAgICB0b3VjaFRhcmdldCA9IG1fb3JpZ2luYXRpbmdUb3VjaFBvaW50VGFyZ2V0
cy50YWtlKHRvdWNoUG9pbnRUYXJnZXRLZXkpOwpAQCAtMjg3NywxMTAgKzI4OTgsNTkgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50
JiBldmVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9p
bnQuc2NyZWVuUG9zKCkueCgpLCBwb2ludC5zY3JlZW5Qb3MoKS55KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUGFnZVgsIGFkanVzdGVkUGFn
ZVkpOwogCi0gICAgICAgIC8vIHRvdWNoZXMgc2hvdWxkIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJv
dXQgZXZlcnkgdG91Y2ggY3VycmVudGx5IG9uIHRoZSBzY3JlZW4uCi0gICAgICAgIGlmIChwb2lu
dC5zdGF0ZSgpICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZCkKKyAgICAgICAg
Ly8gRW5zdXJlIHRoaXMgdGFyZ2V0J3MgdG91Y2ggbGlzdCBleGlzdHMsIGV2ZW4gaWYgaXQgZW5k
cyB1cCBlbXB0eSwgc28gaXQgY2FuIGFsd2F5cyBiZSBwYXNzZWQgdG8gVG91Y2hFdmVudDo6Q3Jl
YXRlIGJlbG93LgorICAgICAgICBUYXJnZXRUb3VjaGVzTWFwOjppdGVyYXRvciB0YXJnZXRUb3Vj
aGVzSXRlcmF0b3IgPSB0b3VjaGVzQnlUYXJnZXQuZmluZCh0b3VjaFRhcmdldC5nZXQoKSk7Cisg
ICAgICAgIGlmICh0YXJnZXRUb3VjaGVzSXRlcmF0b3IgPT0gdG91Y2hlc0J5VGFyZ2V0LmVuZCgp
KQorICAgICAgICAgICAgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yID0gdG91Y2hlc0J5VGFyZ2V0LnNl
dCh0b3VjaFRhcmdldC5nZXQoKSwgVG91Y2hMaXN0OjpjcmVhdGUoKSkuZmlyc3Q7CisKKyAgICAg
ICAgLy8gdG91Y2hlcyBhbmQgdGFyZ2V0VG91Y2hlcyBzaG91bGQgb25seSBjb250YWluIGluZm9y
bWF0aW9uIGFib3V0IHRvdWNoZXMgc3RpbGwgb24gdGhlIHNjcmVlbiwgc28gaWYgdGhpcyBwb2lu
dCBpcworICAgICAgICAvLyByZWxlYXNlZCBvciBjYW5jZWxsZWQgaXQgd2lsbCBvbmx5IGFwcGVh
ciBpbiB0aGUgY2hhbmdlZFRvdWNoZXMgbGlzdC4KKyAgICAgICAgaWYgKHBvaW50U3RhdGUgIT0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkICYmIHBvaW50U3RhdGUgIT0gUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkgewogICAgICAgICAgICAgdG91Y2hlcy0+YXBw
ZW5kKHRvdWNoKTsKKyAgICAgICAgICAgIHRhcmdldFRvdWNoZXNJdGVyYXRvci0+c2Vjb25kLT5h
cHBlbmQodG91Y2gpOworICAgICAgICB9CiAKICAgICAgICAgLy8gTm93IGJ1aWxkIHVwIHRoZSBj
b3JyZWN0IGxpc3QgZm9yIGNoYW5nZWRUb3VjaGVzLgogICAgICAgICAvLyBOb3RlIHRoYXQgIGFu
eSB0b3VjaGVzIHRoYXQgYXJlIGluIHRoZSBUb3VjaFN0YXRpb25hcnkgc3RhdGUgKGUuZy4gaWYK
ICAgICAgICAgLy8gdGhlIHVzZXIgaGFkIHNldmVyYWwgcG9pbnRzIHRvdWNoZWQgYnV0IGRpZCBu
b3QgbW92ZSB0aGVtIGFsbCkgc2hvdWxkCi0gICAgICAgIC8vIG9ubHkgYmUgcHJlc2VudCBpbiB0
aGUgdG91Y2hlcyBsaXN0LiBUaGV5IG1heSBhbHNvIGJlIGFkZGVkIHRvIHRoZQotICAgICAgICAv
LyB0YXJnZXRUb3VjaGVzIGxpc3QgbGF0ZXIsIGJ1dCBzaG91bGQgbmV2ZXIgYmUgaW4gdGhlIGNo
YW5nZWRUb3VjaGVzCi0gICAgICAgIC8vIGxpc3Qgc28gd2UgZG8gbm90IGhhbmRsZSB0aGVtIGV4
cGxpY2l0bHkgaGVyZS4KKyAgICAgICAgLy8gbmV2ZXIgYmUgaW4gdGhlIGNoYW5nZWRUb3VjaGVz
IGxpc3Qgc28gd2UgZG8gbm90IGhhbmRsZSB0aGVtIGV4cGxpY2l0bHkgaGVyZS4KICAgICAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzYwOSBmb3Ig
ZnVydGhlciBkaXNjdXNzaW9uCiAgICAgICAgIC8vIGFib3V0IHRoZSBUb3VjaFN0YXRpb25hcnkg
c3RhdGUuCi0gICAgICAgIGlmIChwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hSZWxlYXNlZCkKLSAgICAgICAgICAgIHJlbGVhc2VkVG91Y2hlcy0+YXBwZW5kKHRvdWNo
KTsKLSAgICAgICAgZWxzZSBpZiAocG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6
OlRvdWNoQ2FuY2VsbGVkKQotICAgICAgICAgICAgY2FuY2VsVG91Y2hlcy0+YXBwZW5kKHRvdWNo
KTsKLSAgICAgICAgZWxzZSBpZiAocG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6
OlRvdWNoUHJlc3NlZCkKLSAgICAgICAgICAgIHByZXNzZWRUb3VjaGVzLT5hcHBlbmQodG91Y2gp
OwotICAgICAgICBlbHNlIGlmIChwb2ludC5zdGF0ZSgpID09IFBsYXRmb3JtVG91Y2hQb2ludDo6
VG91Y2hNb3ZlZCkKLSAgICAgICAgICAgIG1vdmVkVG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKKyAg
ICAgICAgaWYgKHBvaW50U3RhdGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRpb25h
cnkpIHsKKyAgICAgICAgICAgIEFTU0VSVChwb2ludFN0YXRlIDwgUGxhdGZvcm1Ub3VjaFBvaW50
OjpUb3VjaFN0YXRlRW5kKTsKKyAgICAgICAgICAgIGlmICghY2hhbmdlZFRvdWNoZXNbcG9pbnRT
dGF0ZV0ubV90b3VjaGVzKQorICAgICAgICAgICAgICAgIGNoYW5nZWRUb3VjaGVzW3BvaW50U3Rh
dGVdLm1fdG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBjaGFuZ2Vk
VG91Y2hlc1twb2ludFN0YXRlXS5tX3RvdWNoZXMtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgICAg
ICBjaGFuZ2VkVG91Y2hlc1twb2ludFN0YXRlXS5tX3RhcmdldHMuYWRkKHRvdWNoVGFyZ2V0KTsK
KyAgICAgICAgfQogICAgIH0KLQogICAgIG1fdG91Y2hQcmVzc2VkID0gdG91Y2hlcy0+bGVuZ3Ro
KCkgPiAwOwogCisgICAgLy8gTm93IGl0ZXJhdGUgdGhlIGNoYW5nZWRUb3VjaGVzIGxpc3QgYW5k
IG1fdGFyZ2V0cyB3aXRoaW4gaXQsIHNlbmRpbmcgZXZlbnRzIHRvIHRoZSB0YWdldHMgYXMgcmVx
dWlyZWQuCiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7Ci0gICAgVG91Y2gqIGNo
YW5nZWRUb3VjaCA9IDA7Ci0gICAgRXZlbnRUYXJnZXQqIHRvdWNoRXZlbnRUYXJnZXQgPSAwOwot
Ci0gICAgaWYgKGNhbmNlbFRvdWNoZXMtPmxlbmd0aCgpID4gMCkgewotICAgICAgICAvLyBXZSBk
aXNwYXRjaCB0aGUgZXZlbnQgdG8gdGhlIHRhcmdldCBvZiB0aGUgdG91Y2ggdGhhdCBjYXVzZWQg
dGhpcyB0b3VjaCBldmVudCB0byBiZSBnZW5lcmF0ZWQsIGkuZS4KLSAgICAgICAgLy8gd2UgdGFr
ZSBpdCBmcm9tIHRoZSBsaXN0IHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBjaGFuZ2VkVG91Y2hl
cyBwcm9wZXJ0eSBvZiB0aGUgZXZlbnQuCi0gICAgICAgIC8vIFRoZSBjaG9pY2UgdG8gdXNlIHRo
ZSB0b3VjaCBhdCBpbmRleCAwIGd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBhIHRhcmdldCAoYXMg
d2UgY2hlY2tlZCB0aGUgbGVuZ3RoCi0gICAgICAgIC8vIGFib3ZlKS4gSW4gdGhlIGNhc2UgdGhh
dCB0aGVyZSBhcmUgbXVsdGlwbGUgdG91Y2hlcyBpbiB3aGF0IGJlY29tZXMgdGhlIGNoYW5nZWRU
b3VjaGVzIGxpc3QsIGl0IGlzCi0gICAgICAgIC8vIGRpZmZpY3VsdCB0byBzYXkgaG93IHdlIHNo
b3VsZCBwcmlvcml0aXNlIHRvdWNoZXMgYW5kIGFzIHN1Y2gsIGl0ZW0gMCBpcyBhbiBhcmJpdHJh
cnkgY2hvaWNlLgotICAgICAgICBjaGFuZ2VkVG91Y2ggPSBjYW5jZWxUb3VjaGVzLT5pdGVtKDAp
OwotICAgICAgICBBU1NFUlQoY2hhbmdlZFRvdWNoKTsKLSAgICAgICAgdG91Y2hFdmVudFRhcmdl
dCA9IGNoYW5nZWRUb3VjaC0+dGFyZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCh0b3VjaEV2ZW50VGFy
Z2V0KTsKLQotICAgICAgICBldmVudE5hbWUgPSAmZXZlbnROYW1lcygpLnRvdWNoY2FuY2VsRXZl
bnQ7Ci0gICAgICAgIFJlZlB0cjxUb3VjaEV2ZW50PiBjYW5jZWxFdiA9Ci0gICAgICAgICAgICBU
b3VjaEV2ZW50OjpjcmVhdGUoVG91Y2hMaXN0OjpjcmVhdGUoKS5nZXQoKSwgVG91Y2hMaXN0Ojpj
cmVhdGUoKS5nZXQoKSwgY2FuY2VsVG91Y2hlcy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpldmVudE5hbWUsIHRvdWNoRXZlbnRUYXJn
ZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgZXZlbnQuY3Ry
bEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkoKSk7Ci0g
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT5k
aXNwYXRjaEV2ZW50KGNhbmNlbEV2LmdldCgpLCBlYyk7Ci0gICAgICAgIGRlZmF1bHRQcmV2ZW50
ZWQgfD0gY2FuY2VsRXYtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAocmVs
ZWFzZWRUb3VjaGVzLT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgVG91Y2gqIGNoYW5nZWRUb3Vj
aCA9IHJlbGVhc2VkVG91Y2hlcy0+aXRlbSgwKTsKLSAgICAgICAgQVNTRVJUKGNoYW5nZWRUb3Vj
aCk7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQgPSBjaGFuZ2VkVG91Y2gtPnRhcmdldCgpOwot
ICAgICAgICBBU1NFUlQodG91Y2hFdmVudFRhcmdldCk7Ci0KLSAgICAgICAgUmVmUHRyPFRvdWNo
TGlzdD4gdGFyZ2V0VG91Y2hlcyA9IGFzc2VtYmxlVGFyZ2V0VG91Y2hlcyhjaGFuZ2VkVG91Y2gs
IHRvdWNoZXMuZ2V0KCkpOwotCi0gICAgICAgIGV2ZW50TmFtZSA9ICZldmVudE5hbWVzKCkudG91
Y2hlbmRFdmVudDsKLSAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IGVuZEV2ID0gCi0gICAgICAg
ICAgICBUb3VjaEV2ZW50OjpjcmVhdGUodG91Y2hlcy5nZXQoKSwgdGFyZ2V0VG91Y2hlcy5nZXQo
KSwgcmVsZWFzZWRUb3VjaGVzLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKmV2ZW50TmFtZSwgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2Rl
KCktPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2
ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZl
bnQoZW5kRXYuZ2V0KCksIGVjKTsKLSAgICAgICAgZGVmYXVsdFByZXZlbnRlZCB8PSBlbmRFdi0+
ZGVmYXVsdFByZXZlbnRlZCgpOwotICAgIH0KLSAgICBpZiAocHJlc3NlZFRvdWNoZXMtPmxlbmd0
aCgpID4gMCkgewotICAgICAgICBUb3VjaCogY2hhbmdlZFRvdWNoID0gcHJlc3NlZFRvdWNoZXMt
Pml0ZW0oMCk7Ci0gICAgICAgIEFTU0VSVChjaGFuZ2VkVG91Y2gpOwotICAgICAgICB0b3VjaEV2
ZW50VGFyZ2V0ID0gY2hhbmdlZFRvdWNoLT50YXJnZXQoKTsKLSAgICAgICAgQVNTRVJUKHRvdWNo
RXZlbnRUYXJnZXQpOwotCi0gICAgICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRhcmdldFRvdWNoZXMg
PSBhc3NlbWJsZVRhcmdldFRvdWNoZXMoY2hhbmdlZFRvdWNoLCB0b3VjaGVzLmdldCgpKTsKLQot
ICAgICAgICBldmVudE5hbWUgPSAmZXZlbnROYW1lcygpLnRvdWNoc3RhcnRFdmVudDsKLSAgICAg
ICAgUmVmUHRyPFRvdWNoRXZlbnQ+IHN0YXJ0RXYgPQotICAgICAgICAgICAgVG91Y2hFdmVudDo6
Y3JlYXRlKHRvdWNoZXMuZ2V0KCksIHRhcmdldFRvdWNoZXMuZ2V0KCksIHByZXNzZWRUb3VjaGVz
LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKmV2ZW50TmFtZSwgdG91Y2hFdmVudFRhcmdldC0+dG9Ob2RlKCktPmRvY3VtZW50KCktPmRl
ZmF1bHRWaWV3KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVu
dC5zaGlmdEtleSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoc3RhcnRFdi5nZXQoKSwg
ZWMpOwotICAgICAgICBkZWZhdWx0UHJldmVudGVkIHw9IHN0YXJ0RXYtPmRlZmF1bHRQcmV2ZW50
ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAobW92ZWRUb3VjaGVzLT5sZW5ndGgoKSA+IDApIHsKLSAg
ICAgICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IG1vdmVkVG91Y2hlcy0+aXRlbSgwKTsKLSAgICAg
ICAgQVNTRVJUKGNoYW5nZWRUb3VjaCk7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQgPSBjaGFu
Z2VkVG91Y2gtPnRhcmdldCgpOwotICAgICAgICBBU1NFUlQodG91Y2hFdmVudFRhcmdldCk7Ci0K
LSAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyA9IGFzc2VtYmxlVGFyZ2V0
VG91Y2hlcyhjaGFuZ2VkVG91Y2gsIHRvdWNoZXMuZ2V0KCkpOwotCi0gICAgICAgIGV2ZW50TmFt
ZSA9ICZldmVudE5hbWVzKCkudG91Y2htb3ZlRXZlbnQ7Ci0gICAgICAgIFJlZlB0cjxUb3VjaEV2
ZW50PiBtb3ZlRXYgPSAKLSAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZSh0b3VjaGVzLmdl
dCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBtb3ZlZFRvdWNoZXMuZ2V0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZXZlbnROYW1lLCB0b3Vj
aEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAs
IGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2ZW50LnNoaWZ0S2V5KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5tZXRh
S2V5KCkpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgdG91Y2hFdmVu
dFRhcmdldC0+ZGlzcGF0Y2hFdmVudChtb3ZlRXYuZ2V0KCksIGVjKTsKLSAgICAgICAgZGVmYXVs
dFByZXZlbnRlZCB8PSBtb3ZlRXYtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICBSZWZQdHI8VG91
Y2hMaXN0PiBlbXB0eUxpc3QgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgc3RhdGUgPSAwOyBzdGF0ZSAhPSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoU3RhdGVFbmQ7
ICsrc3RhdGUpIHsKKyAgICAgICAgaWYgKCFjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVz
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2hlbiBzZW5kaW5nIGEgdG91
Y2ggY2FuY2VsIGV2ZW50LCB1c2UgZW1wdHkgdG91Y2hlcyBhbmQgdGFyZ2V0VG91Y2hlcyBsaXN0
cy4KKyAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4mIGVmZmVjdGl2ZVRvdWNoZXMoc3RhdGUgPT0g
UGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCA/IGVtcHR5TGlzdCA6IHRvdWNoZXMp
OworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YXRlTmFtZShldmVudE5hbWVGb3JUb3Vj
aFBvaW50U3RhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZT4oc3RhdGUp
KSk7CisgICAgICAgIGNvbnN0IEV2ZW50VGFyZ2V0U2V0JiB0YXJnZXRzRm9yU3RhdGUgPSBjaGFu
Z2VkVG91Y2hlc1tzdGF0ZV0ubV90YXJnZXRzOworCisgICAgICAgIGZvciAoRXZlbnRUYXJnZXRT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGFyZ2V0c0ZvclN0YXRlLmJlZ2luKCk7IGl0ICE9IHRh
cmdldHNGb3JTdGF0ZS5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgRXZlbnRUYXJnZXQqIHRv
dWNoRXZlbnRUYXJnZXQgPSBpdC0+Z2V0KCk7CisgICAgICAgICAgICBSZWZQdHI8VG91Y2hMaXN0
PiB0YXJnZXRUb3VjaGVzKHN0YXRlID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxs
ZWQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzQnlUYXJnZXQuZ2V0KHRvdWNoRXZlbnRUYXJnZXQpKTsK
KyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRUb3VjaGVzKTsKKworICAgICAgICAgICAgUmVmUHRy
PFRvdWNoRXZlbnQ+IHRvdWNoRXZlbnQgPQorICAgICAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNy
ZWF0ZShlZmZlY3RpdmVUb3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBjaGFuZ2Vk
VG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVzLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVu
dCgpLT5kZWZhdWx0VmlldygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtl
eSgpLCBldmVudC5tZXRhS2V5KCkpOworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KHRvdWNoRXZlbnQu
Z2V0KCksIGVjKTsKKyAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgfD0gdG91Y2hFdmVudC0+
ZGVmYXVsdFByZXZlbnRlZCgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGRlZmF1
bHRQcmV2ZW50ZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hQ
b2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaAppbmRleCA4MmM4
ZDc4Li41NzQ2YjE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtVG91Y2hQ
b2ludC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Ub3VjaFBvaW50LmgKQEAgLTQw
LDcgKzQwLDggQEAgcHVibGljOgogICAgICAgICBUb3VjaFByZXNzZWQsCiAgICAgICAgIFRvdWNo
TW92ZWQsCiAgICAgICAgIFRvdWNoU3RhdGlvbmFyeSwKLSAgICAgICAgVG91Y2hDYW5jZWxsZWQK
KyAgICAgICAgVG91Y2hDYW5jZWxsZWQsCisgICAgICAgIFRvdWNoU3RhdGVFbmQgLy8gUGxhY2Vo
b2xkZXI6IG11c3QgcmVtYWluIHRoZSBsYXN0IGl0ZW0uCiAgICAgfTsKIAogI2lmIFBMQVRGT1JN
KFFUKQo=
</data>
<flag name="review"
          id="68260"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77219</attachid>
            <date>2010-12-22 08:26:37 -0800</date>
            <delta_ts>2011-05-09 00:22:18 -0700</delta_ts>
            <desc>Patch 5 - steveblock comments</desc>
            <filename>bug51258_patch.txt</filename>
            <type>text/plain</type>
            <size>35873</size>
            <attacher name="Jonathan Dixon">joth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjYmFkOWExLi40NjE2MWRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTIt
MjEgIEpvbmF0aGFuIERpeG9uICA8am90aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG91Y2hFdmVudHMgZG9lcyBub3Qgc3Vw
cG9ydCBtdWx0aS10b3VjaCBvbiBhIHBhZ2Ugd2l0aCBtdWx0aXBsZSB0b3VjaCB0YXJnZXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTI1OAorCisg
ICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gtZ3JvdXBlZC10YXJnZXRzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91
Y2gtZ3JvdXBlZC10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3Rv
dWNoL3NjcmlwdC10ZXN0cy9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuanM6IEFkZGVkLgor
ICAgICAgICAoZGVjbGFyZVRvdWNoSGFuZGxlci5yZXR1cm4uc2hvdWxkQmUpOgorICAgICAgICAo
ZGVjbGFyZVRvdWNoSGFuZGxlcik6CisgICAgICAgICh0b3VjaEVuZEhhbmRsZXIpOgorICAgICAg
ICBBZGRlZCBuZXcgdGVzdCB0aGF0IGVuc3VyZXMgYm90aCB0ZXN0IHRhcmdldHMgcmVjZWl2ZSBl
dmVudHMgd2hlbiBoaXQgYnkgbXVsdGlwbGUKKyAgICAgICAgdG91Y2ggcG9pbnRzIGZyb20gdGhl
IHNhbWUgcGxhdGZvcm0gZXZlbnQuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9zY3Jp
cHQtdGVzdHMvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanM6CisgICAgICAgIChkZWNsYXJlVG91Y2hT
dGFydC5yZXR1cm4udG91Y2hTdGFydEhhbmRsZXIpOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQpOgorICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZS5yZXR1cm4udG91Y2hNb3ZlSGFuZGxlcik6
CisgICAgICAgIChkZWNsYXJlVG91Y2hNb3ZlKToKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3Vj
aC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzOgorICAgICAgICAoZGVjbGFyZVRvdWNoU3Rh
cnQucmV0dXJuLnRvdWNoU3RhcnRIYW5kbGVyKToKKyAgICAgICAgKGRlY2xhcmVUb3VjaFN0YXJ0
KToKKyAgICAgICAgKGRlY2xhcmVUb3VjaE1vdmUucmV0dXJuLnRvdWNoTW92ZUhhbmRsZXIpOgor
ICAgICAgICAoZGVjbGFyZVRvdWNoTW92ZSk6CisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
dG91Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC90
b3VjaC10YXJnZXQtbGltaXRlZC1leHBlY3RlZC50eHQ6CisgICAgICAgIFVwZGF0ZWQgJiByZWJh
c2VsaW5lZCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IG5ldyBleHBlY3RhdGlvbnMuCisKIDIw
MTAtMTItMTYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQuIFVwZGF0ZWQgY2hyb21pdW0gdGVzdCBleHBlY3RhdGlvbnMuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gt
Z3JvdXBlZC10YXJnZXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMWQwMzJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvbXVsdGktdG91Y2gtZ3JvdXBlZC10YXJnZXRzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI2IEBACitUZXN0cyB0aGF0IHRoZSBhbiBldmVudCBpcyBzZW50IGZvciBldmVyeSB0b3Vj
aCBsaXN0ZW5lciwgYW5kIHRhcmdldCB0b3VjaGVzIGNvbnRhaW5zIGFsbCB0aGUgcG9pbnRzIGZv
ciB0aGF0IHRhcmdldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitQQVNTIGV2
ZW50LnRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1MgZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3Ro
IGlzIDMKK1BBU1MgZXZlbnQudG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC5jaGFuZ2Vk
VG91Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50b3VjaGVzLmxlbmd0aCBpcyAzCitQQVNT
IGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQQVNTIGV2ZW50LnRvdWNoZXMubGVu
Z3RoIGlzIDMKK1BBU1MgZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoIGlzIDMKK1BBU1MgZXZl
bnQudHlwZSBpcyAidG91Y2hlbmQiCitQQVNTIGV2ZW50LnRvdWNoZXMubGVuZ3RoIGlzIDAKK1BB
U1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMAorUEFTUyBldmVudC5jaGFuZ2VkVG91
Y2hlcy5sZW5ndGggaXMgMworUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaGVuZCIKK1BBU1MgZXZl
bnQudG91Y2hlcy5sZW5ndGggaXMgMAorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBp
cyAwCitQQVNTIGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCBpcyAzCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gtZ3JvdXBlZC10YXJnZXRzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdl
dHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjk2NWMxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvbXVsdGktdG91Y2gt
Z3JvdXBlZC10YXJnZXRzLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24u
anMiPjwvc2NyaXB0PgorPCEtLQorICBUb3VjaCB0ZXN0cyB0aGF0IGludm9sdmUgdGhlIG9udG91
Y2hzdGFydCwgb250b3VjaG1vdmUsIG9udG91Y2hlbmQgb3Igb250b3VjaGNhbmNlbCBjYWxsYmFj
a3MKKyAgc2hvdWxkIGJlIHdyaXR0ZW4gaW4gYW4gYXN5bmNocm9ub3VzIGZhc2hpb24gc28gdGhl
eSBjYW4gYmUgcnVuIG9uIG1vYmlsZSBwbGF0Zm9ybXMgbGlrZSBBbmRyb2lkLgorICBUaGlzIHRl
bXBsYXRlIHdpbGwgZ2VuZXJhdGUgYW4gYXN5bmNocm9ub3VzIHN0eWxlIHRlc3QgYnkgdXNpbmcg
dGhlIGpzLXRlc3QtcG9zdC1mdW5jdGlvbiBzY3JpcHQuCisgIFlvdSB3aWxsIG5lZWQgdG8gaW52
b2tlIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCkgaW4geW91ciB0ZXN0IHNjcmlwdCB3aGVuIHRoZSB0
ZXN0IGNvbXBsZXRlcy4KKy0tPgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRl
c3RzL211bHRpLXRvdWNoLWdyb3VwZWQtdGFyZ2V0cy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3RvdWNoL3NjcmlwdC10ZXN0cy9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyNmRhYwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy9tdWx0aS10b3Vj
aC1ncm91cGVkLXRhcmdldHMuanMKQEAgLTAsMCArMSw4OSBAQAordmFyIHRhcmdldHNEaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK3RhcmdldHNEaXYuaWQgPSAidGFyZ2V0c0Rp
diI7CisKK3ZhciBkaXYxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CitkaXYxLmlk
ID0gInRhcmdldEEiOworZGl2MS5zdHlsZS53aWR0aCA9ICIxMDBweCI7CitkaXYxLnN0eWxlLmhl
aWdodCA9ICIxMDBweCI7CitkaXYxLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJibHVlIjsKKwor
dmFyIGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RpdjIuaWQgPSAidGFy
Z2V0QiI7CitkaXYyLnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2RpdjIuc3R5bGUuaGVpZ2h0ID0g
IjEwMHB4IjsKK2RpdjIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gImdyZWVuIjsKKworZG9jdW1l
bnQuYm9keS5pbnNlcnRCZWZvcmUodGFyZ2V0c0RpdiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2NvbnNvbGUnKSk7Cit0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjEpOwordGFyZ2V0c0Rpdi5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK3RhcmdldHNEaXYuYXBw
ZW5kQ2hpbGQoZGl2Mik7CisKK2Z1bmN0aW9uIGRlY2xhcmVUb3VjaEhhbmRsZXIoZGl2X2lkLCBl
eHBlY3RlZFRhcmdldFRvdWNoZXMpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uICgpCisgICAgewor
ICAgICAgICAvLyBEbyBub3QgdXNlIHRoZSBwYXJhbWV0ZXJzIChkaXZfaWQsIGV4cGVjdGVkVGFy
Z2V0VG91Y2hlcykgaW4gc2hvdWxkQmUuLiBjYWxscywgYXMKKyAgICAgICAgLy8gdGhlIG9yZGVy
IG9mIGV2ZW50IGRpc3BhdGNoIGlzIG5vdCBkZXRlcm1pbmlzdGljIGFjcm9zcyBleGVjdXRpb25z
IGFuZCByZW9yZGVyaW5nCisgICAgICAgIC8vIG9mdGhlIFBBU1MgZGVidWcgb3V0cHV0IGRldGFp
bHMgd291bGQgY2F1c2UgdGhlIHRlc3QgdG8gYmUgdW5yZWxpYWJsZS4KKyAgICAgICAgc2hvdWxk
QmUoJ2V2ZW50LnRvdWNoZXMubGVuZ3RoJywgJzMnKTsKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdl
dFRvdWNoZXMubGVuZ3RoICE9IGV4cGVjdGVkVGFyZ2V0VG91Y2hlcykKKyAgICAgICAgICAgIHRl
c3RGYWlsZWQoJ1dyb25nIHRhcmdldFRvdWNoIGxlbmd0aDogJyArIGV2ZW50LnRhcmdldFRvdWNo
ZXMubGVuZ3RoICsgJyB2cyAnICsgZXhwZWN0ZWRUYXJnZXRUb3VjaGVzKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aDsgaSsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0VG91Y2hlc1tpXS50YXJnZXQuaWQgIT0g
ZGl2X2lkKQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ0luY29ycmVjdCB0YXJnZXRUb3Vj
aCBJRDogJyArIGV2ZW50LnRhcmdldFRvdWNoZXNbaV0udGFyZ2V0LmlkICsgJyB2cyAnICsgZGl2
X2lkKTsKKyAgICAgICAgfQorICAgICAgICBzaG91bGRCZSgnZXZlbnQuY2hhbmdlZFRvdWNoZXMu
bGVuZ3RoJywgJzMnKTsKKyAgICB9Cit9CisKK3ZhciBlbmRDb3VudCA9IDA7CitmdW5jdGlvbiB0
b3VjaEVuZEhhbmRsZXIoKQoreworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudHlw
ZScsICd0b3VjaGVuZCcpOworCisgICAgc2hvdWxkQmUoJ2V2ZW50LnRvdWNoZXMubGVuZ3RoJywg
JzAnKTsKKyAgICBzaG91bGRCZSgnZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGgnLCAnMCcpOwor
ICAgIHNob3VsZEJlKCdldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGgnLCAnMycpOworCisgICAg
aWYgKCsrZW5kQ291bnQgPT0gMikKKyAgICB7CisgICAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICB9Cit9CisKK2RpdjEuYWRkRXZlbnRMaXN0
ZW5lcigidG91Y2hzdGFydCIsIGRlY2xhcmVUb3VjaEhhbmRsZXIoJ3RhcmdldEEnLCAnMicpLCBm
YWxzZSk7CitkaXYxLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGRlY2xhcmVUb3VjaEhh
bmRsZXIoJ3RhcmdldEEnLCAnMicpLCBmYWxzZSk7CitkaXYxLmFkZEV2ZW50TGlzdGVuZXIoInRv
dWNoZW5kIiwgdG91Y2hFbmRIYW5kbGVyLCBmYWxzZSk7CisKK2RpdjIuYWRkRXZlbnRMaXN0ZW5l
cigidG91Y2hzdGFydCIsIGRlY2xhcmVUb3VjaEhhbmRsZXIoJ3RhcmdldEInLCAnMScpLCBmYWxz
ZSk7CitkaXYyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGRlY2xhcmVUb3VjaEhhbmRs
ZXIoJ3RhcmdldEInLCAnMScpLCBmYWxzZSk7CitkaXYyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNo
ZW5kIiwgdG91Y2hFbmRIYW5kbGVyLCBmYWxzZSk7CisKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0
IHRoZSBhbiBldmVudCBpcyBzZW50IGZvciBldmVyeSB0b3VjaCBsaXN0ZW5lciwgYW5kIHRhcmdl
dCB0b3VjaGVzIGNvbnRhaW5zIGFsbCB0aGUgcG9pbnRzIGZvciB0aGF0IHRhcmdldCIpOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworfQorCitpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAg
ZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cygpOworICAgIGV2ZW50U2VuZGVyLmFkZFRvdWNo
UG9pbnQoNTAsIDE1MCk7CisgICAgZXZlbnRTZW5kZXIuYWRkVG91Y2hQb2ludCg1MCwgMjUwKTsK
KyAgICBldmVudFNlbmRlci5hZGRUb3VjaFBvaW50KDUwLCAxNTApOworICAgIGV2ZW50U2VuZGVy
LnRvdWNoU3RhcnQoKTsKKworICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMCwgMjAw
LCAxNTApOworICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMSwgMzAwLCAyNTApOwor
ICAgIGV2ZW50U2VuZGVyLnVwZGF0ZVRvdWNoUG9pbnQoMiwgNDAwLCAxNTApOworICAgIGV2ZW50
U2VuZGVyLnRvdWNoTW92ZSgpOworCisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQo
MCk7CisgICAgZXZlbnRTZW5kZXIucmVsZWFzZVRvdWNoUG9pbnQoMSk7CisgICAgZXZlbnRTZW5k
ZXIucmVsZWFzZVRvdWNoUG9pbnQoMik7CisgICAgZXZlbnRTZW5kZXIudG91Y2hFbmQoKTsKK30g
ZWxzZQorICAgIGRlYnVnKCdUaGlzIHRlc3QgcmVxdWlyZXMgRFJULicpOworCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0
LWxpbWl0ZWQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9zY3JpcHQtdGVzdHMv
dG91Y2gtdGFyZ2V0LWxpbWl0ZWQuanMKaW5kZXggZmQzNDAwYy4uM2FhZTQ3YSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3RzL3RvdWNoLXRhcmdl
dC1saW1pdGVkLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10
ZXN0cy90b3VjaC10YXJnZXQtbGltaXRlZC5qcwpAQCAtMTMsNTkgKzEzLDY5IEBAIGRpdjIuc3R5
bGUud2lkdGggPSAiMTAwcHgiOwogZGl2Mi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOwogZGl2Mi5z
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiZ3JlZW4iOwogCi12YXIgdG91Y2hTdGFydENvdW50ID0g
MDsKLXZhciB0b3VjaE1vdmVDb3VudCA9IDA7Ci0KIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3Jl
KHRhcmdldHNEaXYsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykpOwogdGFyZ2V0
c0Rpdi5hcHBlbmRDaGlsZChkaXYxKTsKIHRhcmdldHNEaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYnInKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjIpOwogCi1m
dW5jdGlvbiB0b3VjaFN0YXJ0SGFuZGxlcigpCitmdW5jdGlvbiBkZWNsYXJlVG91Y2hTdGFydCgp
CiB7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNoc3RhcnQn
KTsKLSAgICBzd2l0Y2ggKHRvdWNoU3RhcnRDb3VudCkgewotICAgICAgICBjYXNlIDA6Ci0gICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0Lmlk
JywgZGl2MS5pZCk7Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMV0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSAxOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3Vj
aGVzWzBdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEuaWQpOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgdmFyIHRvdWNoU3RhcnRDb3VudCA9IDA7CisgICAgcmV0dXJuIGZ1bmN0
aW9uIHRvdWNoU3RhcnRIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnZXZlbnQudHlwZScsICd0b3VjaHN0YXJ0Jyk7CisgICAgICAgIHN3aXRjaCAodG91Y2hT
dGFydENvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjEuaWQpOwor
ICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50
YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRv
dWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEuaWQpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNob3VsZEJlKCdldmVudC50
YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAgdG91Y2hTdGFydENvdW50Kys7
CiAgICAgfQotCi0gICAgdG91Y2hTdGFydENvdW50Kys7CiB9CiAKLWZ1bmN0aW9uIHRvdWNoTW92
ZUhhbmRsZXIoKQotewotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudHlwZScsICd0
b3VjaG1vdmUnKTsKLSAgICBzd2l0Y2ggKHRvdWNoTW92ZUNvdW50KSB7Ci0gICAgICAgIGNhc2Ug
MDoKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdl
dmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjEuaWQpOwotICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKLSAg
ICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQu
aWQnLCBkaXYxLmlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KK3ZhciB0b3RhbFRvdWNo
TW92ZUNvdW50ID0gMDsKIAotICAgIGlmICgrK3RvdWNoTW92ZUNvdW50ID09IDMpCitmdW5jdGlv
biBkZWNsYXJlVG91Y2hNb3ZlKGRpdl9pZCkKK3sKKyAgICB2YXIgdG91Y2hNb3ZlQ291bnQgPSAw
OworICAgIHJldHVybiBmdW5jdGlvbiB0b3VjaE1vdmVIYW5kbGVyKCkKICAgICB7Ci0gICAgICAg
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKLSAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92ZScpOworICAgICAg
ICBzd2l0Y2ggKHRvdWNoTW92ZUNvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVu
dC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywg
ZGl2Mi5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50
b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHNob3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcs
ICcxJyk7CisgICAgICAgICsrdG91Y2hNb3ZlQ291bnQ7CisKKyAgICAgICAgaWYgKCsrdG90YWxU
b3VjaE1vdmVDb3VudCA9PSA2KQorICAgICAgICB7CisgICAgICAgICAgICBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgICAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgfQogICAg
IH0KIH0KIAotZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhh
bmRsZXIsIGZhbHNlKTsKLWRpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hN
b3ZlSGFuZGxlciwgZmFsc2UpOworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iiwg
ZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3Vj
aG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZhbHNlKTsKIAotZGl2Mi5hZGRFdmVudExpc3Rl
bmVyKCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhhbmRsZXIsIGZhbHNlKTsKLWRpdjIuYWRkRXZl
bnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hNb3ZlSGFuZGxlciwgZmFsc2UpOworZGl2Mi5h
ZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2Up
OworZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCks
IGZhbHNlKTsKIAogZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIHRhcmdldCBvZiB0b3VjaGVz
IG1hdGNoIHRoZSBlbGVtZW50IHdoZXJlIHRoZSBldmVudCBvcmlnaW5hdGVkLCBub3Qgd2hlcmUg
dGhlIHRvdWNoIGlzIGN1cnJlbnRseSBvY2N1cnJpbmcuIFRoaXMgaXMgYSBsaW1pdGVkIHZlcnNp
b24gb2YgdGVzdCB0b3VjaC10YXJnZXQuaHRtbCB0aGF0IGF2b2lkcyB0aGUgc2l0dWF0aW9uIHdo
ZXJlIG9uZSB0b3VjaCBwb2ludCBpcyByZWxlYXNlZCB3aGlsZSBhbm90aGVyIGlzIG1haW50YWlu
ZWQuIik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3Njcmlw
dC10ZXN0cy90b3VjaC10YXJnZXQuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9z
Y3JpcHQtdGVzdHMvdG91Y2gtdGFyZ2V0LmpzCmluZGV4IDhlNDdmMjMuLmRlNTg2MDYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3NjcmlwdC10ZXN0cy90b3VjaC10
YXJnZXQuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvc2NyaXB0LXRlc3Rz
L3RvdWNoLXRhcmdldC5qcwpAQCAtMTMsNTkgKzEzLDY5IEBAIGRpdjIuc3R5bGUud2lkdGggPSAi
MTAwcHgiOwogZGl2Mi5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOwogZGl2Mi5zdHlsZS5iYWNrZ3Jv
dW5kQ29sb3IgPSAiZ3JlZW4iOwogCi12YXIgdG91Y2hTdGFydENvdW50ID0gMDsKLXZhciB0b3Vj
aE1vdmVDb3VudCA9IDA7Ci0KIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHRhcmdldHNEaXYs
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykpOwogdGFyZ2V0c0Rpdi5hcHBlbmRD
aGlsZChkaXYxKTsKIHRhcmdldHNEaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnYnInKSk7CiB0YXJnZXRzRGl2LmFwcGVuZENoaWxkKGRpdjIpOwogCi1mdW5jdGlvbiB0b3Vj
aFN0YXJ0SGFuZGxlcigpCitmdW5jdGlvbiBkZWNsYXJlVG91Y2hTdGFydCgpCiB7Ci0gICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNoc3RhcnQnKTsKLSAgICBzd2l0
Y2ggKHRvdWNoU3RhcnRDb3VudCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2MS5pZCk7
Ci0gICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMV0udGFy
Z2V0LmlkJywgZGl2Mi5pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgot
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdl
dC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVu
dC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEuaWQpOwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgdmFyIHRvdWNoU3RhcnRDb3VudCA9IDA7CisgICAgcmV0dXJuIGZ1bmN0aW9uIHRvdWNoU3Rh
cnRIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQu
dHlwZScsICd0b3VjaHN0YXJ0Jyk7CisgICAgICAgIHN3aXRjaCAodG91Y2hTdGFydENvdW50KSB7
CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBk
aXYyLmlkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFy
Z2V0LmlkJywgZGl2Mi5pZCk7CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNob3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVz
Lmxlbmd0aCcsICcxJyk7CisKKyAgICAgICAgdG91Y2hTdGFydENvdW50Kys7CiAgICAgfQotCi0g
ICAgdG91Y2hTdGFydENvdW50Kys7CiB9CiAKLWZ1bmN0aW9uIHRvdWNoTW92ZUhhbmRsZXIoKQot
ewotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudHlwZScsICd0b3VjaG1vdmUnKTsK
LSAgICBzd2l0Y2ggKHRvdWNoTW92ZUNvdW50KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAg
Y2FzZSAxOgotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVz
WzBdLnRhcmdldC5pZCcsIGRpdjEuaWQpOwotICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCcsIGRpdjIuaWQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKLSAgICAgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYxLmlk
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KK3ZhciB0b3RhbFRvdWNoTW92ZUNvdW50ID0g
MDsKIAotICAgIGlmICgrK3RvdWNoTW92ZUNvdW50ID09IDMpCitmdW5jdGlvbiBkZWNsYXJlVG91
Y2hNb3ZlKGRpdl9pZCkKK3sKKyAgICB2YXIgdG91Y2hNb3ZlQ291bnQgPSAwOworICAgIHJldHVy
biBmdW5jdGlvbiB0b3VjaE1vdmVIYW5kbGVyKCkKICAgICB7Ci0gICAgICAgIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKLSAgICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdldmVudC50eXBlJywgJ3RvdWNobW92ZScpOworICAgICAgICBzd2l0Y2ggKHRv
dWNoTW92ZUNvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzBd
LnRhcmdldC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQnLCBkaXYyLmlkKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ2V2ZW50LnRvdWNoZXNbMF0udGFyZ2V0LmlkJywgZGl2Mi5pZCk7Cisg
ICAgICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC50b3VjaGVzWzFdLnRh
cmdldC5pZCcsIGRpdjEuaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIHNob3VsZEJlKCdldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCcsICcxJyk7CisgICAg
ICAgICsrdG91Y2hNb3ZlQ291bnQ7CisKKyAgICAgICAgaWYgKCsrdG90YWxUb3VjaE1vdmVDb3Vu
dCA9PSA2KQorICAgICAgICB7CisgICAgICAgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICAgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIAotZGl2
MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgdG91Y2hTdGFydEhhbmRsZXIsIGZhbHNl
KTsKLWRpdjEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwgdG91Y2hNb3ZlSGFuZGxlciwg
ZmFsc2UpOworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFyZVRvdWNo
U3RhcnQoKSwgZmFsc2UpOworZGl2MS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBkZWNs
YXJlVG91Y2hNb3ZlKCksIGZhbHNlKTsKIAotZGl2Mi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0
YXJ0IiwgdG91Y2hTdGFydEhhbmRsZXIsIGZhbHNlKTsKLWRpdjIuYWRkRXZlbnRMaXN0ZW5lcigi
dG91Y2htb3ZlIiwgdG91Y2hNb3ZlSGFuZGxlciwgZmFsc2UpOworZGl2Mi5hZGRFdmVudExpc3Rl
bmVyKCJ0b3VjaHN0YXJ0IiwgZGVjbGFyZVRvdWNoU3RhcnQoKSwgZmFsc2UpOworZGl2Mi5hZGRF
dmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBkZWNsYXJlVG91Y2hNb3ZlKCksIGZhbHNlKTsKIAog
ZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIHRhcmdldCBvZiB0b3VjaGVzIG1hdGNoIHRoZSBl
bGVtZW50IHdoZXJlIHRoZSBldmVudCBvcmlnaW5hdGVkLCBub3Qgd2hlcmUgdGhlIHRvdWNoIGlz
IGN1cnJlbnRseSBvY2N1cnJpbmcuIik7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtZXhwZWN0ZWQudHh0CmluZGV4IDYwYTRjMzcuLmIx
Yzg2NWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRh
cmdldC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvdG91
Y2gtdGFyZ2V0LWV4cGVjdGVkLnR4dApAQCAtNywxOCArNywzOSBAQCBPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURQogUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgogUEFTUyBldmVudC50b3Vj
aGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJn
ZXQuaWQgaXMgInRhcmdldEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEK
K1BBU1MgZXZlbnQudHlwZSBpcyAidG91Y2hzdGFydCIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50
YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlz
ICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2
ZW50LnR5cGUgaXMgInRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQg
aXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRC
IgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUg
aXMgInRvdWNobW92ZSIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdl
dEEiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBl
dmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNo
bW92ZSIKIFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNT
IGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJn
ZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92ZSIKK1BB
U1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRv
dWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVz
Lmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCiBQQVNTIGV2ZW50
LnRvdWNoZXNbMF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFd
LnRhcmdldC5pZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGgg
aXMgMQorUEFTUyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCitQQVNTIGV2ZW50LnRvdWNoZXNb
MF0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5p
ZCBpcyAidGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFT
UyBldmVudC50eXBlIGlzICJ0b3VjaG1vdmUiCiBQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFyZ2V0
LmlkIGlzICJ0YXJnZXRCIgogUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAidGFy
Z2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtbGltaXRlZC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC90b3VjaC10YXJnZXQtbGltaXRlZC1leHBl
Y3RlZC50eHQKaW5kZXggMGMxZWZkMC4uZjc3NDQzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvdG91Y2gvdG91Y2gtdGFyZ2V0LWxpbWl0ZWQtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL3RvdWNoLXRhcmdldC1saW1pdGVkLWV4cGVj
dGVkLnR4dApAQCAtNywxOCArNyw0MyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogUEFTUyBl
dmVudC50eXBlIGlzICJ0b3VjaHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5p
ZCBpcyAidGFyZ2V0QSIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdl
dEIiCitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlw
ZSBpcyAidG91Y2hzdGFydCIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRh
cmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFT
UyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMgInRv
dWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQ
QVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50
YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92ZSIK
IFBBU1MgZXZlbnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2ZW50
LnRvdWNoZXNbMV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3Vj
aGVzLmxlbmd0aCBpcyAxCiBQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92ZSIKIFBBU1MgZXZl
bnQudG91Y2hlc1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCiBQQVNTIGV2ZW50LnRvdWNoZXNb
MV0udGFyZ2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0
aCBpcyAxCitQQVNTIGV2ZW50LnR5cGUgaXMgInRvdWNobW92ZSIKK1BBU1MgZXZlbnQudG91Y2hl
c1swXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRvdWNoZXNbMV0udGFyZ2V0
LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50YXJnZXRUb3VjaGVzLmxlbmd0aCBpcyAxCitQ
QVNTIGV2ZW50LnR5cGUgaXMgInRvdWNoc3RhcnQiCitQQVNTIGV2ZW50LnRvdWNoZXNbMF0udGFy
Z2V0LmlkIGlzICJ0YXJnZXRCIgorUEFTUyBldmVudC50b3VjaGVzWzFdLnRhcmdldC5pZCBpcyAi
dGFyZ2V0QSIKK1BBU1MgZXZlbnQudGFyZ2V0VG91Y2hlcy5sZW5ndGggaXMgMQogUEFTUyBldmVu
dC50eXBlIGlzICJ0b3VjaHN0YXJ0IgogUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBp
cyAidGFyZ2V0QiIKIFBBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEi
CitQQVNTIGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKK1BBU1MgZXZlbnQudHlwZSBp
cyAidG91Y2htb3ZlIgorUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0
QiIKK1BBU1MgZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2
ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoIGlzIDEKIFBBU1MgZXZlbnQudHlwZSBpcyAidG91Y2ht
b3ZlIgogUEFTUyBldmVudC50b3VjaGVzWzBdLnRhcmdldC5pZCBpcyAidGFyZ2V0QiIKIFBBU1Mg
ZXZlbnQudG91Y2hlc1sxXS50YXJnZXQuaWQgaXMgInRhcmdldEEiCitQQVNTIGV2ZW50LnRhcmdl
dFRvdWNoZXMubGVuZ3RoIGlzIDEKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAog
VEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMmYyMjk2Li42MTMyZDhhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTEyLTIx
ICBKb25hdGhhbiBEaXhvbiAgPGpvdGhAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRvdWNoRXZlbnRzIGRvZXMgbm90IHN1cHBv
cnQgbXVsdGktdG91Y2ggb24gYSBwYWdlIHdpdGggbXVsdGlwbGUgdG91Y2ggdGFyZ2V0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTEyNTgKKworICAg
ICAgICBUZXN0OiBmYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRhcmdldHMu
aHRtbAorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZXZlbnROYW1lRm9yVG91Y2hQb2ludFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIFJlZGVzaWduZWQgZXZlbnQgaGFu
ZGxlciB0byBlbnN1cmUgYWxsIGV2ZW50IHRhcmdldHMgaW52b2x2ZWQgaW4gYSBnaXZlbgorICAg
ICAgICBtdWx0aXRvdWNoIGV2ZW50IGdldCB0aGUgYXBwcm9wcmlhdGUgZXZlbnQocykgZmlyZWQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9pbnQuaDogQWRkZWQgZW5kLXN0
b3AgbWFya2VyIGZvciBTdGF0ZSBlbnVtLgorCiAyMDEwLTEyLTE2ICBKaWFuIExpICA8amlhbmxp
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXhlZCBjaHJvbWl1bSBidWls
ZCBicmVhayBjYXVzZWQgYnkgcjc0MjA3LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAyODE0OThh
Li44NjI2MTgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjgzMCwzMyArMjgzMCw1MyBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlTGFzdFNjcm9sbGJhclVuZGVyTW91c2UoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGJvb2wgc2V0TAogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIAotc3Rh
dGljIFBhc3NSZWZQdHI8VG91Y2hMaXN0PiBhc3NlbWJsZVRhcmdldFRvdWNoZXMoVG91Y2gqIHRv
dWNoVGFyZ2V0LCBUb3VjaExpc3QqIHRvdWNoZXMpCitzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudE5hbWVGb3JUb3VjaFBvaW50U3RhdGUoUGxhdGZvcm1Ub3VjaFBvaW50OjpTdGF0ZSBz
dGF0ZSkKIHsKLSAgICBSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzID0gVG91Y2hMaXN0
OjpjcmVhdGUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3VjaGVzLT5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICh0b3VjaGVzLT5pdGVtKGkpLT50YXJnZXQoKS0+dG9O
b2RlKCktPmlzU2FtZU5vZGUodG91Y2hUYXJnZXQtPnRhcmdldCgpLT50b05vZGUoKSkpCi0gICAg
ICAgICAgICB0YXJnZXRUb3VjaGVzLT5hcHBlbmQodG91Y2hlcy0+aXRlbShpKSk7CisgICAgc3dp
dGNoIChzdGF0ZSkgeworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2Vk
OgorICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQ7CisgICAgY2FzZSBQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoQ2FuY2VsbGVkOgorICAgICAgICByZXR1cm4gZXZlbnRO
YW1lcygpLnRvdWNoY2FuY2VsRXZlbnQ7CisgICAgY2FzZSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRv
dWNoUHJlc3NlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS50b3VjaHN0YXJ0RXZlbnQ7
CisgICAgY2FzZSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQ6CisgICAgICAgIHJldHVy
biBldmVudE5hbWVzKCkudG91Y2htb3ZlRXZlbnQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBlbXB0eUF0b207CiAgICAgfQotCi0g
ICAgcmV0dXJuIHRhcmdldFRvdWNoZXMucmVsZWFzZSgpOwogfQogCiBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIGV2ZW50KQogewor
ICAgIC8vIEZpcnN0IGJ1aWxkIHVwIHRoZSBsaXN0cyB0byB1c2UgZm9yIHRoZSAndG91Y2hlcycs
ICd0YXJnZXRUb3VjaGVzJyBhbmQgJ2NoYW5nZWRUb3VjaGVzJyBhdHRyaWJ1dGVzCisgICAgLy8g
aW4gdGhlIEpTIGV2ZW50LiBTZWUgaHR0cDovL3d3dy5zaXRlcGVuLmNvbS9ibG9nLzIwMDgvMDcv
MTAvdG91Y2hpbmctYW5kLWdlc3R1cmluZy1vbi10aGUtaXBob25lLworICAgIC8vIGZvciBhbiBv
dmVydmlldyBvZiBob3cgdGhlc2UgbGlzdHMgZml0IHRvZ2V0aGVyLgorCisgICAgLy8gSG9sZHMg
dGhlIGNvbXBsZXRlIHNldCBvZiB0b3VjaGVzIG9uIHRoZSBzY3JlZW4gYW5kIHdpbGwgYmUgdXNl
ZCBhcyB0aGUgJ3RvdWNoZXMnIGxpc3QgaW4gdGhlIEpTIGV2ZW50LgogICAgIFJlZlB0cjxUb3Vj
aExpc3Q+IHRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxUb3VjaExp
c3Q+IHByZXNzZWRUb3VjaGVzID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8VG91
Y2hMaXN0PiByZWxlYXNlZFRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0
cjxUb3VjaExpc3Q+IG1vdmVkVG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVm
UHRyPFRvdWNoTGlzdD4gY2FuY2VsVG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7CisKKyAg
ICAvLyBBIGRpZmZlcmVudCB2aWV3IG9uIHRoZSAndG91Y2hlcycgbGlzdCBhYm92ZSwgZmlsdGVy
ZWQgYW5kIGdyb3VwZWQgYnkgZXZlbnQgdGFyZ2V0LiBVc2VkIGZvciB0aGUKKyAgICAvLyAndGFy
Z2V0VG91Y2hlcycgbGlzdCBpbiB0aGUgSlMgZXZlbnQuCisgICAgdHlwZWRlZiBIYXNoTWFwPEV2
ZW50VGFyZ2V0KiwgUmVmUHRyPFRvdWNoTGlzdD4gPiBUYXJnZXRUb3VjaGVzTWFwOworICAgIFRh
cmdldFRvdWNoZXNNYXAgdG91Y2hlc0J5VGFyZ2V0OworCisgICAgLy8gQXJyYXkgb2YgdG91Y2hl
cyBwZXIgc3RhdGUsIHVzZWQgdG8gYXNzZW1ibGUgdGhlICdjaGFuZ2VkVG91Y2hlcycgbGlzdCBp
biB0aGUgSlMgZXZlbnQuCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxFdmVudFRhcmdldD4g
PiBFdmVudFRhcmdldFNldDsKKyAgICBzdHJ1Y3QgeworICAgICAgICAvLyBUaGUgdG91Y2hlcyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBwYXJ0aWN1bGFyIGNoYW5nZSBzdGF0ZSB0aGlzIHN0cnVjdCBp
bnN0YW5jZSByZXByZXNlbnRzLgorICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiBtX3RvdWNoZXM7
CisgICAgICAgIC8vIFNldCBvZiB0YXJnZXRzIGludm9sdmVkIGluIG1fdG91Y2hlcy4KKyAgICAg
ICAgRXZlbnRUYXJnZXRTZXQgbV90YXJnZXRzOworICAgIH0gY2hhbmdlZFRvdWNoZXNbUGxhdGZv
cm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRlRW5kXTsKIAogICAgIGNvbnN0IFZlY3RvcjxQbGF0Zm9y
bVRvdWNoUG9pbnQ+JiBwb2ludHMgPSBldmVudC50b3VjaFBvaW50cygpOwotICAgIEF0b21pY1N0
cmluZyogZXZlbnROYW1lID0gMDsKIAogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJ
bmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcG9pbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFBs
YXRmb3JtVG91Y2hQb2ludCYgcG9pbnQgPSBwb2ludHNbaV07CisgICAgICAgIFBsYXRmb3JtVG91
Y2hQb2ludDo6U3RhdGUgcG9pbnRTdGF0ZSA9IHBvaW50LnN0YXRlKCk7CiAgICAgICAgIEludFBv
aW50IHBhZ2VQb2ludCA9IGRvY3VtZW50UG9pbnRGb3JXaW5kb3dQb2ludChtX2ZyYW1lLCBwb2lu
dC5wb3MoKSk7CiAKICAgICAgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBo
aXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25s
eTsKQEAgLTI4NjUsNyArMjg4NSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2
ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAgIC8vIHNob3VsZCBh
ZmZlY3QgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBub2RlIGlmIG5lY2Vzc2FyeSwK
ICAgICAgICAgLy8gSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSBzaWduaWZpZXMgdGhhdCB0aGUgaGl0
IHRlc3QgaXMgdGFraW5nIHBsYWNlCiAgICAgICAgIC8vIHdpdGggdGhlIG1vdXNlIChvciBmaW5n
ZXIgaW4gdGhpcyBjYXNlKSBiZWluZyBwcmVzc2VkLgotICAgICAgICBzd2l0Y2ggKHBvaW50LnN0
YXRlKCkpIHsKKyAgICAgICAgc3dpdGNoIChwb2ludFN0YXRlKSB7CiAgICAgICAgIGNhc2UgUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQ6CiAgICAgICAgICAgICBoaXRUeXBlID0gSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg4MSwxMyArMjkw
MSwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICB9CiAKICAgICAgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBoaXRUZXN0UmVzdWx0QXRQb2ludChwYWdlUG9pbnQsIC8qYWxsb3dTaGFkb3dDb250
ZW50Ki8gZmFsc2UsIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUpOwotICAg
ICAgICBOb2RlKiB0YXJnZXQgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgICAgIEFTU0VSVChub2RlKTsKIAogICAgICAg
ICAvLyBUb3VjaCBldmVudHMgc2hvdWxkIG5vdCBnbyB0byB0ZXh0IG5vZGVzCi0gICAgICAgIGlm
ICh0YXJnZXQgJiYgdGFyZ2V0LT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICB0YXJnZXQgPSB0
YXJnZXQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKKyAg
ICAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAKLSAgICAgICAgRG9jdW1lbnQq
IGRvYyA9IHRhcmdldC0+ZG9jdW1lbnQoKTsKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IG5vZGUt
PmRvY3VtZW50KCk7CiAgICAgICAgIGlmICghZG9jKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGlmICghZG9jLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OlRPVUNIX0xJU1RFTkVS
KSkKQEAgLTI5MDQsMTAgKzI5MjUsMTAgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNo
RXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKICAgICAgICAgLy8gSW5jcmVt
ZW50IHRoZSBwbGF0Zm9ybSB0b3VjaCBpZCBieSAxIHRvIGF2b2lkIHN0b3JpbmcgYSBrZXkgb2Yg
MCBpbiB0aGUgaGFzaG1hcC4KICAgICAgICAgdW5zaWduZWQgdG91Y2hQb2ludFRhcmdldEtleSA9
IHBvaW50LmlkKCkgKyAxOwogICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IHRvdWNoVGFyZ2V0
OwotICAgICAgICBpZiAocG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNo
UHJlc3NlZCkgewotICAgICAgICAgICAgbV9vcmlnaW5hdGluZ1RvdWNoUG9pbnRUYXJnZXRzLnNl
dCh0b3VjaFBvaW50VGFyZ2V0S2V5LCB0YXJnZXQpOwotICAgICAgICAgICAgdG91Y2hUYXJnZXQg
PSB0YXJnZXQ7Ci0gICAgICAgIH0gZWxzZSBpZiAocG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRv
dWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQgfHwgcG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoQ2FuY2VsbGVkKSB7CisgICAgICAgIGlmIChwb2ludFN0YXRlID09IFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkKSB7CisgICAgICAgICAgICBtX29yaWdpbmF0aW5n
VG91Y2hQb2ludFRhcmdldHMuc2V0KHRvdWNoUG9pbnRUYXJnZXRLZXksIG5vZGUpOworICAgICAg
ICAgICAgdG91Y2hUYXJnZXQgPSBub2RlOworICAgICAgICB9IGVsc2UgaWYgKHBvaW50U3RhdGUg
PT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFJlbGVhc2VkIHx8IHBvaW50U3RhdGUgPT0gUGxh
dGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkgewogICAgICAgICAgICAgLy8gVGhlIHRh
cmdldCBzaG91bGQgYmUgdGhlIG9yaWdpbmFsIHRhcmdldCBmb3IgdGhpcyB0b3VjaCwgc28gZ2V0
IGl0IGZyb20gdGhlIGhhc2htYXAuIEFzIGl0J3MgYSByZWxlYXNlIG9yIGNhbmNlbAogICAgICAg
ICAgICAgLy8gd2UgYWxzbyByZW1vdmUgaXQgZnJvbSB0aGUgbWFwLgogICAgICAgICAgICAgdG91
Y2hUYXJnZXQgPSBtX29yaWdpbmF0aW5nVG91Y2hQb2ludFRhcmdldHMudGFrZSh0b3VjaFBvaW50
VGFyZ2V0S2V5KTsKQEAgLTI5MjEsMTEwICsyOTQyLDYwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LnNjcmVlblBvcygpLngo
KSwgcG9pbnQuc2NyZWVuUG9zKCkueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGp1c3RlZFBhZ2VYLCBhZGp1c3RlZFBhZ2VZKTsKIAotICAgICAgICAv
LyB0b3VjaGVzIHNob3VsZCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGV2ZXJ5IHRvdWNoIGN1
cnJlbnRseSBvbiB0aGUgc2NyZWVuLgotICAgICAgICBpZiAocG9pbnQuc3RhdGUoKSAhPSBQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQpCisgICAgICAgIC8vIEVuc3VyZSB0aGlzIHRh
cmdldCdzIHRvdWNoIGxpc3QgZXhpc3RzLCBldmVuIGlmIGl0IGVuZHMgdXAgZW1wdHksIHNvIGl0
IGNhbiBhbHdheXMgYmUgcGFzc2VkIHRvIFRvdWNoRXZlbnQ6OkNyZWF0ZSBiZWxvdy4KKyAgICAg
ICAgVGFyZ2V0VG91Y2hlc01hcDo6aXRlcmF0b3IgdGFyZ2V0VG91Y2hlc0l0ZXJhdG9yID0gdG91
Y2hlc0J5VGFyZ2V0LmZpbmQodG91Y2hUYXJnZXQuZ2V0KCkpOworICAgICAgICBpZiAodGFyZ2V0
VG91Y2hlc0l0ZXJhdG9yID09IHRvdWNoZXNCeVRhcmdldC5lbmQoKSkKKyAgICAgICAgICAgIHRh
cmdldFRvdWNoZXNJdGVyYXRvciA9IHRvdWNoZXNCeVRhcmdldC5zZXQodG91Y2hUYXJnZXQuZ2V0
KCksIFRvdWNoTGlzdDo6Y3JlYXRlKCkpLmZpcnN0OworCisgICAgICAgIC8vIHRvdWNoZXMgYW5k
IHRhcmdldFRvdWNoZXMgc2hvdWxkIG9ubHkgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0b3Vj
aGVzIHN0aWxsIG9uIHRoZSBzY3JlZW4sIHNvIGlmIHRoaXMgcG9pbnQgaXMKKyAgICAgICAgLy8g
cmVsZWFzZWQgb3IgY2FuY2VsbGVkIGl0IHdpbGwgb25seSBhcHBlYXIgaW4gdGhlIGNoYW5nZWRU
b3VjaGVzIGxpc3QuCisgICAgICAgIGlmIChwb2ludFN0YXRlICE9IFBsYXRmb3JtVG91Y2hQb2lu
dDo6VG91Y2hSZWxlYXNlZCAmJiBwb2ludFN0YXRlICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91
Y2hDYW5jZWxsZWQpIHsKICAgICAgICAgICAgIHRvdWNoZXMtPmFwcGVuZCh0b3VjaCk7CisgICAg
ICAgICAgICB0YXJnZXRUb3VjaGVzSXRlcmF0b3ItPnNlY29uZC0+YXBwZW5kKHRvdWNoKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIC8vIE5vdyBidWlsZCB1cCB0aGUgY29ycmVjdCBsaXN0IGZvciBj
aGFuZ2VkVG91Y2hlcy4KICAgICAgICAgLy8gTm90ZSB0aGF0ICBhbnkgdG91Y2hlcyB0aGF0IGFy
ZSBpbiB0aGUgVG91Y2hTdGF0aW9uYXJ5IHN0YXRlIChlLmcuIGlmCiAgICAgICAgIC8vIHRoZSB1
c2VyIGhhZCBzZXZlcmFsIHBvaW50cyB0b3VjaGVkIGJ1dCBkaWQgbm90IG1vdmUgdGhlbSBhbGwp
IHNob3VsZAotICAgICAgICAvLyBvbmx5IGJlIHByZXNlbnQgaW4gdGhlIHRvdWNoZXMgbGlzdC4g
VGhleSBtYXkgYWxzbyBiZSBhZGRlZCB0byB0aGUKLSAgICAgICAgLy8gdGFyZ2V0VG91Y2hlcyBs
aXN0IGxhdGVyLCBidXQgc2hvdWxkIG5ldmVyIGJlIGluIHRoZSBjaGFuZ2VkVG91Y2hlcwotICAg
ICAgICAvLyBsaXN0IHNvIHdlIGRvIG5vdCBoYW5kbGUgdGhlbSBleHBsaWNpdGx5IGhlcmUuCisg
ICAgICAgIC8vIG5ldmVyIGJlIGluIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0IHNvIHdlIGRvIG5v
dCBoYW5kbGUgdGhlbSBleHBsaWNpdGx5IGhlcmUuCiAgICAgICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzc2MDkgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lv
bgogICAgICAgICAvLyBhYm91dCB0aGUgVG91Y2hTdGF0aW9uYXJ5IHN0YXRlLgotICAgICAgICBp
ZiAocG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQpCi0g
ICAgICAgICAgICByZWxlYXNlZFRvdWNoZXMtPmFwcGVuZCh0b3VjaCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaENhbmNlbGxlZCkK
LSAgICAgICAgICAgIGNhbmNlbFRvdWNoZXMtPmFwcGVuZCh0b3VjaCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHBvaW50LnN0YXRlKCkgPT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQpCi0g
ICAgICAgICAgICBwcmVzc2VkVG91Y2hlcy0+YXBwZW5kKHRvdWNoKTsKLSAgICAgICAgZWxzZSBp
ZiAocG9pbnQuc3RhdGUoKSA9PSBQbGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQpCi0gICAg
ICAgICAgICBtb3ZlZFRvdWNoZXMtPmFwcGVuZCh0b3VjaCk7CisgICAgICAgIGlmIChwb2ludFN0
YXRlICE9IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0aW9uYXJ5KSB7CisgICAgICAgICAg
ICBBU1NFUlQocG9pbnRTdGF0ZSA8IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hTdGF0ZUVuZCk7
CisgICAgICAgICAgICBpZiAoIWNoYW5nZWRUb3VjaGVzW3BvaW50U3RhdGVdLm1fdG91Y2hlcykK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkVG91Y2hlc1twb2ludFN0YXRlXS5tX3RvdWNoZXMgPSBU
b3VjaExpc3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgY2hhbmdlZFRvdWNoZXNbcG9pbnRTdGF0
ZV0ubV90b3VjaGVzLT5hcHBlbmQodG91Y2gpOworICAgICAgICAgICAgY2hhbmdlZFRvdWNoZXNb
cG9pbnRTdGF0ZV0ubV90YXJnZXRzLmFkZCh0b3VjaFRhcmdldCk7CisgICAgICAgIH0KICAgICB9
Ci0KICAgICBtX3RvdWNoUHJlc3NlZCA9IHRvdWNoZXMtPmxlbmd0aCgpID4gMDsKIAorICAgIC8v
IE5vdyBpdGVyYXRlIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0IGFuZCBtX3RhcmdldHMgd2l0aGlu
IGl0LCBzZW5kaW5nIGV2ZW50cyB0byB0aGUgdGFnZXRzIGFzIHJlcXVpcmVkLgogICAgIGJvb2wg
ZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwotICAgIFRvdWNoKiBjaGFuZ2VkVG91Y2ggPSAwOwot
ICAgIEV2ZW50VGFyZ2V0KiB0b3VjaEV2ZW50VGFyZ2V0ID0gMDsKLQotICAgIGlmIChjYW5jZWxU
b3VjaGVzLT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgLy8gV2UgZGlzcGF0Y2ggdGhlIGV2ZW50
IHRvIHRoZSB0YXJnZXQgb2YgdGhlIHRvdWNoIHRoYXQgY2F1c2VkIHRoaXMgdG91Y2ggZXZlbnQg
dG8gYmUgZ2VuZXJhdGVkLCBpLmUuCi0gICAgICAgIC8vIHdlIHRha2UgaXQgZnJvbSB0aGUgbGlz
dCB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgY2hhbmdlZFRvdWNoZXMgcHJvcGVydHkgb2YgdGhl
IGV2ZW50LgotICAgICAgICAvLyBUaGUgY2hvaWNlIHRvIHVzZSB0aGUgdG91Y2ggYXQgaW5kZXgg
MCBndWFyYW50ZWVzIHRoYXQgdGhlcmUgaXMgYSB0YXJnZXQgKGFzIHdlIGNoZWNrZWQgdGhlIGxl
bmd0aAotICAgICAgICAvLyBhYm92ZSkuIEluIHRoZSBjYXNlIHRoYXQgdGhlcmUgYXJlIG11bHRp
cGxlIHRvdWNoZXMgaW4gd2hhdCBiZWNvbWVzIHRoZSBjaGFuZ2VkVG91Y2hlcyBsaXN0LCBpdCBp
cwotICAgICAgICAvLyBkaWZmaWN1bHQgdG8gc2F5IGhvdyB3ZSBzaG91bGQgcHJpb3JpdGlzZSB0
b3VjaGVzIGFuZCBhcyBzdWNoLCBpdGVtIDAgaXMgYW4gYXJiaXRyYXJ5IGNob2ljZS4KLSAgICAg
ICAgY2hhbmdlZFRvdWNoID0gY2FuY2VsVG91Y2hlcy0+aXRlbSgwKTsKLSAgICAgICAgQVNTRVJU
KGNoYW5nZWRUb3VjaCk7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQgPSBjaGFuZ2VkVG91Y2gt
PnRhcmdldCgpOwotICAgICAgICBBU1NFUlQodG91Y2hFdmVudFRhcmdldCk7Ci0KLSAgICAgICAg
ZXZlbnROYW1lID0gJmV2ZW50TmFtZXMoKS50b3VjaGNhbmNlbEV2ZW50OwotICAgICAgICBSZWZQ
dHI8VG91Y2hFdmVudD4gY2FuY2VsRXYgPQotICAgICAgICAgICAgVG91Y2hFdmVudDo6Y3JlYXRl
KFRvdWNoTGlzdDo6Y3JlYXRlKCkuZ2V0KCksIFRvdWNoTGlzdDo6Y3JlYXRlKCkuZ2V0KCksIGNh
bmNlbFRvdWNoZXMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqZXZlbnROYW1lLCB0b3VjaEV2ZW50VGFyZ2V0LT50b05vZGUoKS0+ZG9j
dW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0
S2V5KCksIGV2ZW50LnNoaWZ0S2V5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5tZXRhS2V5KCkpOwotICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgdG91Y2hFdmVudFRhcmdldC0+ZGlzcGF0Y2hFdmVudChjYW5j
ZWxFdi5nZXQoKSwgZWMpOwotICAgICAgICBkZWZhdWx0UHJldmVudGVkIHw9IGNhbmNlbEV2LT5k
ZWZhdWx0UHJldmVudGVkKCk7Ci0gICAgfQotCi0gICAgaWYgKHJlbGVhc2VkVG91Y2hlcy0+bGVu
Z3RoKCkgPiAwKSB7Ci0gICAgICAgIFRvdWNoKiBjaGFuZ2VkVG91Y2ggPSByZWxlYXNlZFRvdWNo
ZXMtPml0ZW0oMCk7Ci0gICAgICAgIEFTU0VSVChjaGFuZ2VkVG91Y2gpOwotICAgICAgICB0b3Vj
aEV2ZW50VGFyZ2V0ID0gY2hhbmdlZFRvdWNoLT50YXJnZXQoKTsKLSAgICAgICAgQVNTRVJUKHRv
dWNoRXZlbnRUYXJnZXQpOwotCi0gICAgICAgIFJlZlB0cjxUb3VjaExpc3Q+IHRhcmdldFRvdWNo
ZXMgPSBhc3NlbWJsZVRhcmdldFRvdWNoZXMoY2hhbmdlZFRvdWNoLCB0b3VjaGVzLmdldCgpKTsK
LQotICAgICAgICBldmVudE5hbWUgPSAmZXZlbnROYW1lcygpLnRvdWNoZW5kRXZlbnQ7Ci0gICAg
ICAgIFJlZlB0cjxUb3VjaEV2ZW50PiBlbmRFdiA9IAotICAgICAgICAgICAgVG91Y2hFdmVudDo6
Y3JlYXRlKHRvdWNoZXMuZ2V0KCksIHRhcmdldFRvdWNoZXMuZ2V0KCksIHJlbGVhc2VkVG91Y2hl
cy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpldmVudE5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5k
ZWZhdWx0VmlldygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgMCwgMCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZl
bnQuc2hpZnRLZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50Lm1ldGFLZXkoKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGVuZEV2LmdldCgpLCBl
Yyk7Ci0gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgfD0gZW5kRXYtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKLSAgICB9Ci0gICAgaWYgKHByZXNzZWRUb3VjaGVzLT5sZW5ndGgoKSA+IDApIHsKLSAgICAg
ICAgVG91Y2gqIGNoYW5nZWRUb3VjaCA9IHByZXNzZWRUb3VjaGVzLT5pdGVtKDApOwotICAgICAg
ICBBU1NFUlQoY2hhbmdlZFRvdWNoKTsKLSAgICAgICAgdG91Y2hFdmVudFRhcmdldCA9IGNoYW5n
ZWRUb3VjaC0+dGFyZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCh0b3VjaEV2ZW50VGFyZ2V0KTsKLQot
ICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiB0YXJnZXRUb3VjaGVzID0gYXNzZW1ibGVUYXJnZXRU
b3VjaGVzKGNoYW5nZWRUb3VjaCwgdG91Y2hlcy5nZXQoKSk7Ci0KLSAgICAgICAgZXZlbnROYW1l
ID0gJmV2ZW50TmFtZXMoKS50b3VjaHN0YXJ0RXZlbnQ7Ci0gICAgICAgIFJlZlB0cjxUb3VjaEV2
ZW50PiBzdGFydEV2ID0KLSAgICAgICAgICAgIFRvdWNoRXZlbnQ6OmNyZWF0ZSh0b3VjaGVzLmdl
dCgpLCB0YXJnZXRUb3VjaGVzLmdldCgpLCBwcmVzc2VkVG91Y2hlcy5nZXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpldmVudE5hbWUsIHRv
dWNoRXZlbnRUYXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwg
MCwgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRLZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1l
dGFLZXkoKSk7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICB0b3VjaEV2
ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KHN0YXJ0RXYuZ2V0KCksIGVjKTsKLSAgICAgICAgZGVm
YXVsdFByZXZlbnRlZCB8PSBzdGFydEV2LT5kZWZhdWx0UHJldmVudGVkKCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1vdmVkVG91Y2hlcy0+bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIFRvdWNoKiBjaGFu
Z2VkVG91Y2ggPSBtb3ZlZFRvdWNoZXMtPml0ZW0oMCk7Ci0gICAgICAgIEFTU0VSVChjaGFuZ2Vk
VG91Y2gpOwotICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0ID0gY2hhbmdlZFRvdWNoLT50YXJnZXQo
KTsKLSAgICAgICAgQVNTRVJUKHRvdWNoRXZlbnRUYXJnZXQpOwotCi0gICAgICAgIFJlZlB0cjxU
b3VjaExpc3Q+IHRhcmdldFRvdWNoZXMgPSBhc3NlbWJsZVRhcmdldFRvdWNoZXMoY2hhbmdlZFRv
dWNoLCB0b3VjaGVzLmdldCgpKTsKLQotICAgICAgICBldmVudE5hbWUgPSAmZXZlbnROYW1lcygp
LnRvdWNobW92ZUV2ZW50OwotICAgICAgICBSZWZQdHI8VG91Y2hFdmVudD4gbW92ZUV2ID0gCi0g
ICAgICAgICAgICBUb3VjaEV2ZW50OjpjcmVhdGUodG91Y2hlcy5nZXQoKSwgdGFyZ2V0VG91Y2hl
cy5nZXQoKSwgbW92ZWRUb3VjaGVzLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmV2ZW50TmFtZSwgdG91Y2hFdmVudFRhcmdldC0+dG9O
b2RlKCktPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCks
IGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIHRvdWNoRXZlbnRUYXJnZXQtPmRpc3BhdGNo
RXZlbnQobW92ZUV2LmdldCgpLCBlYyk7Ci0gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgfD0gbW92
ZUV2LT5kZWZhdWx0UHJldmVudGVkKCk7CisgICAgUmVmUHRyPFRvdWNoTGlzdD4gZW1wdHlMaXN0
ID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHN0YXRlID0gMDsgc3Rh
dGUgIT0gUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0YXRlRW5kOyArK3N0YXRlKSB7CisgICAg
ICAgIGlmICghY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1fdG91Y2hlcykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIC8vIFdoZW4gc2VuZGluZyBhIHRvdWNoIGNhbmNlbCBldmVudCwg
dXNlIGVtcHR5IHRvdWNoZXMgYW5kIHRhcmdldFRvdWNoZXMgbGlzdHMuCisgICAgICAgIGJvb2wg
aXNUb3VjaENhbmNlbEV2ZW50ID0gKHN0YXRlID09IFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hD
YW5jZWxsZWQpOworICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiYgZWZmZWN0aXZlVG91Y2hlcyhp
c1RvdWNoQ2FuY2VsRXZlbnQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBzdGF0ZU5hbWUoZXZlbnROYW1lRm9yVG91Y2hQb2ludFN0YXRlKHN0YXRp
Y19jYXN0PFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGU+KHN0YXRlKSkpOworICAgICAgICBjb25z
dCBFdmVudFRhcmdldFNldCYgdGFyZ2V0c0ZvclN0YXRlID0gY2hhbmdlZFRvdWNoZXNbc3RhdGVd
Lm1fdGFyZ2V0czsKKworICAgICAgICBmb3IgKEV2ZW50VGFyZ2V0U2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHRhcmdldHNGb3JTdGF0ZS5iZWdpbigpOyBpdCAhPSB0YXJnZXRzRm9yU3RhdGUuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgICAgIEV2ZW50VGFyZ2V0KiB0b3VjaEV2ZW50VGFyZ2V0ID0g
aXQtPmdldCgpOworICAgICAgICAgICAgUmVmUHRyPFRvdWNoTGlzdD4gdGFyZ2V0VG91Y2hlcyhp
c1RvdWNoQ2FuY2VsRXZlbnQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzQnlUYXJnZXQuZ2V0KHRvdWNo
RXZlbnRUYXJnZXQpKTsKKyAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRUb3VjaGVzKTsKKworICAg
ICAgICAgICAgUmVmUHRyPFRvdWNoRXZlbnQ+IHRvdWNoRXZlbnQgPQorICAgICAgICAgICAgICAg
IFRvdWNoRXZlbnQ6OmNyZWF0ZShlZmZlY3RpdmVUb3VjaGVzLmdldCgpLCB0YXJnZXRUb3VjaGVz
LmdldCgpLCBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0ubV90b3VjaGVzLmdldCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUsIHRvdWNoRXZlbnRUYXJnZXQtPnRv
Tm9kZSgpLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgp
LCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCkpOworICAgICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICB0b3VjaEV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2
ZW50KHRvdWNoRXZlbnQuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQg
fD0gdG91Y2hFdmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgcmV0dXJuIGRlZmF1bHRQcmV2ZW50ZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtVG91Y2hQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVRvdWNoUG9p
bnQuaAppbmRleCA4MmM4ZDc4Li41NzQ2YjE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtVG91Y2hQb2ludC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Ub3Vj
aFBvaW50LmgKQEAgLTQwLDcgKzQwLDggQEAgcHVibGljOgogICAgICAgICBUb3VjaFByZXNzZWQs
CiAgICAgICAgIFRvdWNoTW92ZWQsCiAgICAgICAgIFRvdWNoU3RhdGlvbmFyeSwKLSAgICAgICAg
VG91Y2hDYW5jZWxsZWQKKyAgICAgICAgVG91Y2hDYW5jZWxsZWQsCisgICAgICAgIFRvdWNoU3Rh
dGVFbmQgLy8gUGxhY2Vob2xkZXI6IG11c3QgcmVtYWluIHRoZSBsYXN0IGl0ZW0uCiAgICAgfTsK
IAogI2lmIFBMQVRGT1JNKFFUKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>