<?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>101815</bug_id>
          
          <creation_ts>2012-11-09 16:47:16 -0800</creation_ts>
          <short_desc>Add basic implementation for MediaStreamAudioDestinationNode</short_desc>
          <delta_ts>2012-11-28 01:05:21 -0800</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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fishd</cc>
    
    <cc>hta</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ojan</cc>
    
    <cc>philn</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>763458</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-11-09 16:47:16 -0800</bug_when>
    <thetext>Add basic implementation for MediaStreamAudioDestinationNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763465</commentid>
    <comment_count>1</comment_count>
      <attachid>173403</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-11-09 16:58:44 -0800</bug_when>
    <thetext>Created attachment 173403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763469</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 17:02:28 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763893</commentid>
    <comment_count>3</comment_count>
      <attachid>173403</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-11 15:11:20 -0800</bug_when>
    <thetext>Comment on attachment 173403
Patch

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

Below are some random nitpicks.  This patch doesn&apos;t look quite ready.

&gt; Source/Platform/chromium/public/WebRTCPeerConnectionHandler.h:69
&gt; +    virtual void consumeAudio(const WebKit::WebVector&lt;const float*&gt;&amp;, size_t number_of_frames) { };

number_of_frames -&gt; numberOfFrames

&gt; Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp:375
&gt; +        MediaStreamSource* source = audioTrackList-&gt;item(0)-&gt;component()-&gt;source();

Why only the 0th item?

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:426
&gt; +    // FIXME: support optional argument for number of channels.
&gt; +    // FIXME: default should probably be stereo.

Please use complete sentences in comments.

&gt; Source/WebCore/Modules/webaudio/AudioContext.cpp:427
&gt; +    return MediaStreamAudioDestinationNode::create(this, 1);

What does 1 mean here?

&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp:54
&gt; +    RefPtr&lt;MediaStreamSource&gt; source = MediaStreamSource::create(&quot;xyz&quot;, MediaStreamSource::TypeAudio, &quot;MediaStreamAudioDestinationNode&quot;);

&quot;xyz&quot;  ???

&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp:68
&gt; +    return audioTrackList-&gt;item(0)-&gt;component()-&gt;source();

Why item 0?

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:87
&gt; +    // FIXME: deal better with lifetime issues.

Please use complete sentences in comments.

&gt; Source/WebCore/platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:189
&gt; +    m_webHandler-&gt;consumeAudio(busVector, numberOfFrames);

Isn&apos;t passing numberOfFrames here redundant with busVector since busVector.length() == numberOfFrames?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764146</commentid>
    <comment_count>4</comment_count>
      <attachid>173403</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-12 01:21:05 -0800</bug_when>
    <thetext>Comment on attachment 173403
Patch

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

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:99
&gt; +    RTCPeerConnectionHandler* m_peerHandler; // FIXME: lifetime!

I really don&apos;t like this. The direct issue here is lifetime which this patch doesn&apos;t deal with at all but there is a larger issue here as well:
A RTCPeerConnectionHandler has a 1..1 relation with a RTCPeerConnection but a source can be indirectly related to 0..N peer connections, it can even be related more than once to a single peer connection (mad but valid). Therefore it must not have any kind of relation with RTCPeerConnectionHandler. The data channel is the only class that has a RTCPeerConnectionHandler and that is because it belong to, and only to, the RTCPeerConnection it was created on.
Also shouldn&apos;t this work even without a peer connection by getting a LocalMediaStream, doing something with it and then playing out the result through an &lt;audio&gt; tag for example? 
This far we have used MediaStreamCenter for communication between the UA and classes other than RTCPeerConnection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770739</commentid>
    <comment_count>5</comment_count>
      <attachid>174979</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-19 07:37:42 -0800</bug_when>
    <thetext>Created attachment 174979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770745</commentid>
    <comment_count>6</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-19 07:41:44 -0800</bug_when>
    <thetext>After discussion with Chris and Per from the chromium side we decided that I would try to rewrite the mediastream code to get rid of the design issues in the previous patch. This is not in any way criticism on Chris but rather a bi-effect of the extremely rich (and therefore complex) API of WebRTC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770939</commentid>
    <comment_count>7</comment_count>
      <attachid>174979</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-19 12:27:22 -0800</bug_when>
    <thetext>Comment on attachment 174979
Patch

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

&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:51
&gt; +    virtual void consumeAudio(const WebVector&lt;const float*&gt;&amp;, size_t number_of_frames) = 0;

number_of_frames -&gt; numberOfFrames

Can you add a comment that explains what numberOfFrames counts?  I presume it&apos;s the size of the array that the float*s point to.  Is the implementation of this function expected to delete these arrays?  That might be worth documenting either way.

&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:103
&gt; +    // Only used if if this is a WebAudio source.
&gt; +    // The WebMediaStreamSourceConsumer is not owned, and has to be disposed of separately.

Is there an obvious time after which it is safe for the embedder to delete the WebMediaStreamSourceConsumer?

&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp:52
&gt; +    m_source = MediaStreamSource::create(ASCIILiteral(&quot;WebAudio-&quot;) + createCanonicalUUIDString(), MediaStreamSource::TypeAudio, &quot;MediaStreamAudioDestinationNode&quot;, MediaStreamSource::ReadyStateLive, true);

Does the name of this stream need to be unique?  What happens if there&apos;s a collision (e.g., maliciously)?

&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.idl:27
&gt; +    JSGenerateToJSObject

Why do you need this attribute?

&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:161
&gt; +    ASSERT(bus);
&gt; +    if (!bus)
&gt; +        return;

Why do we both ASSERT and handle the case when the ASSERT fails?  We should either remove the ASSERT or not handle the case when it fails.

&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:176
&gt; +    m_private-&gt;addConsumer(adoptRef(new ConsumerWrapper(consumer)));

ConsumerWrapper should have a create method that hides the adoptRef

&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:185
&gt; +        ConsumerWrapper* wrapper = reinterpret_cast&lt;ConsumerWrapper*&gt;((*it).get());

reinterpret_cast?  Do you mean static_cast?

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:97
&gt; +    Vector&lt;RefPtr&lt;MediaStreamSourceConsumer&gt; &gt; consumers() { return m_consumers; }

This makes a copy of the Vector and churns the ref counts of all the MediaStreamSourceConsumer.  Perhaps we should return a reference (or a const reference)?  If you really want the copy behavior, perhaps we should instead make this function copy out the vector into an out parameter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771036</commentid>
    <comment_count>8</comment_count>
      <attachid>174979</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-11-19 14:40:12 -0800</bug_when>
    <thetext>Comment on attachment 174979
Patch

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

Tommy, thanks for taking the initiative to iterate on this!

&gt;&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:51
&gt;&gt; +    virtual void consumeAudio(const WebVector&lt;const float*&gt;&amp;, size_t number_of_frames) = 0;
&gt; 
&gt; number_of_frames -&gt; numberOfFrames
&gt; 
&gt; Can you add a comment that explains what numberOfFrames counts?  I presume it&apos;s the size of the array that the float*s point to.  Is the implementation of this function expected to delete these arrays?  That might be worth documenting either way.

Just to help clarify, the size of the vector is the number of audio channels.  numberOfFrames is the number of audio frames in the (possibly multi-channel) buffer in a planar format.

&gt;&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:103
&gt;&gt; +    // The WebMediaStreamSourceConsumer is not owned, and has to be disposed of separately.
&gt; 
&gt; Is there an obvious time after which it is safe for the embedder to delete the WebMediaStreamSourceConsumer?

Tommy can answer, but it looks like it&apos;s simply a requirement that the embedder must call removeConsumer() before the embedder is allowed to delete it,
and that this is the only thing that matters from our point of view.

&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:187
&gt; +            m_private-&gt;removeConsumer(wrapper);

Do we want to break after the first occurrence is found?  It looks like m_private-&gt;removeConsumer() will modify the |consumers| vector, so it may not be safe to continue iterating on this vector

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:89
&gt; +{

We need to add an auto-locker here and in addConsumer() and removeConsumer() since consumeAudio() is being called on a different thread from the others.

In fact, it looks like WebMediaStreamSource::removeConsumer() also accesses this vector so the locking needs to extend to that level.  So we&apos;ll 
probably need to expose a lock() and unlock() method (or something similar)

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:51
&gt; +};

Since this is a very basic abstract interface related to audio and might be useful in other places unrelated to MediaStream, I recommend moving it to WebCore/platform/audio and
renaming the class &quot;AudioConsumer&quot; or &quot;AudioDestinationConsumer&quot;

This interface is very similar to (but the opposite of) WebCore/platform/AudioSourceProvider
where AudioDestinationConsumer represents a &quot;push&quot; model and AudioSourceProvider represents a &quot;pull&quot; model  (the flow-control is the opposite)

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:96
&gt; +    void removeConsumer(MediaStreamSourceConsumer*);

I recommend we be more explicit, using &quot;audio&quot; in these names, for example:
requiresAudioConsumer()
addAudioConsumer()
removeAudioConsumer()

Who knows, maybe we&apos;ll add hooks in here for video/graphics later on...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771899</commentid>
    <comment_count>9</comment_count>
      <attachid>175226</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-20 08:38:20 -0800</bug_when>
    <thetext>Created attachment 175226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771901</commentid>
    <comment_count>10</comment_count>
      <attachid>174979</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-20 08:44:44 -0800</bug_when>
    <thetext>Comment on attachment 174979
Patch

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

&gt;&gt;&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:51
&gt;&gt;&gt; +    virtual void consumeAudio(const WebVector&lt;const float*&gt;&amp;, size_t number_of_frames) = 0;
&gt;&gt; 
&gt;&gt; number_of_frames -&gt; numberOfFrames
&gt;&gt; 
&gt;&gt; Can you add a comment that explains what numberOfFrames counts?  I presume it&apos;s the size of the array that the float*s point to.  Is the implementation of this function expected to delete these arrays?  That might be worth documenting either way.
&gt; 
&gt; Just to help clarify, the size of the vector is the number of audio channels.  numberOfFrames is the number of audio frames in the (possibly multi-channel) buffer in a planar format.

Chris, could you provide a short description?

Fixed number_of_frames -&gt; numberOfFrames.

&gt;&gt;&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:103
&gt;&gt;&gt; +    // The WebMediaStreamSourceConsumer is not owned, and has to be disposed of separately.
&gt;&gt; 
&gt;&gt; Is there an obvious time after which it is safe for the embedder to delete the WebMediaStreamSourceConsumer?
&gt; 
&gt; Tommy can answer, but it looks like it&apos;s simply a requirement that the embedder must call removeConsumer() before the embedder is allowed to delete it,
&gt; and that this is the only thing that matters from our point of view.

Yeah, that&apos;s right. The intended use case is that the embedded inherits from this as well as other classes and therefore don&apos;t want to be cleaned away here.

&gt;&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp:52
&gt;&gt; +    m_source = MediaStreamSource::create(ASCIILiteral(&quot;WebAudio-&quot;) + createCanonicalUUIDString(), MediaStreamSource::TypeAudio, &quot;MediaStreamAudioDestinationNode&quot;, MediaStreamSource::ReadyStateLive, true);
&gt; 
&gt; Does the name of this stream need to be unique?  What happens if there&apos;s a collision (e.g., maliciously)?

The name is really unimportant and is only provided as information to the web developer.

&gt;&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.idl:27
&gt;&gt; +    JSGenerateToJSObject
&gt; 
&gt; Why do you need this attribute?

Chris?

&gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:161
&gt;&gt; +        return;
&gt; 
&gt; Why do we both ASSERT and handle the case when the ASSERT fails?  We should either remove the ASSERT or not handle the case when it fails.

Fixed, kept the if statement.

&gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:176
&gt;&gt; +    m_private-&gt;addConsumer(adoptRef(new ConsumerWrapper(consumer)));
&gt; 
&gt; ConsumerWrapper should have a create method that hides the adoptRef

Done.

&gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:185
&gt;&gt; +        ConsumerWrapper* wrapper = reinterpret_cast&lt;ConsumerWrapper*&gt;((*it).get());
&gt; 
&gt; reinterpret_cast?  Do you mean static_cast?

Yes, both seems to work though.

&gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:187
&gt;&gt; +            m_private-&gt;removeConsumer(wrapper);
&gt; 
&gt; Do we want to break after the first occurrence is found?  It looks like m_private-&gt;removeConsumer() will modify the |consumers| vector, so it may not be safe to continue iterating on this vector

Fixed, don&apos;t think anyone wants to subscribe twice.

&gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:89
&gt;&gt; +{
&gt; 
&gt; We need to add an auto-locker here and in addConsumer() and removeConsumer() since consumeAudio() is being called on a different thread from the others.
&gt; 
&gt; In fact, it looks like WebMediaStreamSource::removeConsumer() also accesses this vector so the locking needs to extend to that level.  So we&apos;ll 
&gt; probably need to expose a lock() and unlock() method (or something similar)

Done.

&gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:51
&gt;&gt; +};
&gt; 
&gt; Since this is a very basic abstract interface related to audio and might be useful in other places unrelated to MediaStream, I recommend moving it to WebCore/platform/audio and
&gt; renaming the class &quot;AudioConsumer&quot; or &quot;AudioDestinationConsumer&quot;
&gt; 
&gt; This interface is very similar to (but the opposite of) WebCore/platform/AudioSourceProvider
&gt; where AudioDestinationConsumer represents a &quot;push&quot; model and AudioSourceProvider represents a &quot;pull&quot; model  (the flow-control is the opposite)

Done.

&gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:96
&gt;&gt; +    void removeConsumer(MediaStreamSourceConsumer*);
&gt; 
&gt; I recommend we be more explicit, using &quot;audio&quot; in these names, for example:
&gt; requiresAudioConsumer()
&gt; addAudioConsumer()
&gt; removeAudioConsumer()
&gt; 
&gt; Who knows, maybe we&apos;ll add hooks in here for video/graphics later on...

Done.

&gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:97
&gt;&gt; +    Vector&lt;RefPtr&lt;MediaStreamSourceConsumer&gt; &gt; consumers() { return m_consumers; }
&gt; 
&gt; This makes a copy of the Vector and churns the ref counts of all the MediaStreamSourceConsumer.  Perhaps we should return a reference (or a const reference)?  If you really want the copy behavior, perhaps we should instead make this function copy out the vector into an out parameter?

I know, I wanted to be ultra safe and this is a not a function that is called many times. Have changed so that it exits after the first hit and changed consumers() to return a const reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772345</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-11-20 18:03:08 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 174979 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174979&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:51
&gt; &gt;&gt;&gt; +    virtual void consumeAudio(const WebVector&lt;const float*&gt;&amp;, size_t number_of_frames) = 0;
&gt; &gt;&gt; 
&gt; &gt;&gt; number_of_frames -&gt; numberOfFrames
&gt; &gt;&gt; 
&gt; &gt;&gt; Can you add a comment that explains what numberOfFrames counts?  I presume it&apos;s the size of the array that the float*s point to.  Is the implementation of this function expected to delete these arrays?  That might be worth documenting either way.
&gt; &gt; 
&gt; &gt; Just to help clarify, the size of the vector is the number of audio channels.  numberOfFrames is the number of audio frames in the (possibly multi-channel) buffer in a planar format.
&gt; 
&gt; Chris, could you provide a short description?
&gt; 
&gt; Fixed number_of_frames -&gt; numberOfFrames.
&gt; 
&gt; &gt;&gt;&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:103
&gt; &gt;&gt;&gt; +    // The WebMediaStreamSourceConsumer is not owned, and has to be disposed of separately.
&gt; &gt;&gt; 
&gt; &gt;&gt; Is there an obvious time after which it is safe for the embedder to delete the WebMediaStreamSourceConsumer?
&gt; &gt; 
&gt; &gt; Tommy can answer, but it looks like it&apos;s simply a requirement that the embedder must call removeConsumer() before the embedder is allowed to delete it,
&gt; &gt; and that this is the only thing that matters from our point of view.
&gt; 
&gt; Yeah, that&apos;s right. The intended use case is that the embedded inherits from this as well as other classes and therefore don&apos;t want to be cleaned away here.
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.cpp:52
&gt; &gt;&gt; +    m_source = MediaStreamSource::create(ASCIILiteral(&quot;WebAudio-&quot;) + createCanonicalUUIDString(), MediaStreamSource::TypeAudio, &quot;MediaStreamAudioDestinationNode&quot;, MediaStreamSource::ReadyStateLive, true);
&gt; &gt; 
&gt; &gt; Does the name of this stream need to be unique?  What happens if there&apos;s a collision (e.g., maliciously)?
&gt; 
&gt; The name is really unimportant and is only provided as information to the web developer.
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.idl:27
&gt; &gt;&gt; +    JSGenerateToJSObject
&gt; &gt; 
&gt; &gt; Why do you need this attribute?
&gt; 
&gt; Chris?

I&apos;m following the same pattern I&apos;ve used for the other AudioNodes.  Perhaps it&apos;s no longer necessary, but I had found (and I can&apos;t remember the details)
that for either JSC or V8 that JSGenerateToJSObject was necessary or bad things were happening.  I&apos;m just trying to keep this new node the same as all
the others.


&gt; 
&gt; &gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:161
&gt; &gt;&gt; +        return;
&gt; &gt; 
&gt; &gt; Why do we both ASSERT and handle the case when the ASSERT fails?  We should either remove the ASSERT or not handle the case when it fails.
&gt; 
&gt; Fixed, kept the if statement.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:176
&gt; &gt;&gt; +    m_private-&gt;addConsumer(adoptRef(new ConsumerWrapper(consumer)));
&gt; &gt; 
&gt; &gt; ConsumerWrapper should have a create method that hides the adoptRef
&gt; 
&gt; Done.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:185
&gt; &gt;&gt; +        ConsumerWrapper* wrapper = reinterpret_cast&lt;ConsumerWrapper*&gt;((*it).get());
&gt; &gt; 
&gt; &gt; reinterpret_cast?  Do you mean static_cast?
&gt; 
&gt; Yes, both seems to work though.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/chromium/support/WebMediaStreamSource.cpp:187
&gt; &gt;&gt; +            m_private-&gt;removeConsumer(wrapper);
&gt; &gt; 
&gt; &gt; Do we want to break after the first occurrence is found?  It looks like m_private-&gt;removeConsumer() will modify the |consumers| vector, so it may not be safe to continue iterating on this vector
&gt; 
&gt; Fixed, don&apos;t think anyone wants to subscribe twice.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.cpp:89
&gt; &gt;&gt; +{
&gt; &gt; 
&gt; &gt; We need to add an auto-locker here and in addConsumer() and removeConsumer() since consumeAudio() is being called on a different thread from the others.
&gt; &gt; 
&gt; &gt; In fact, it looks like WebMediaStreamSource::removeConsumer() also accesses this vector so the locking needs to extend to that level.  So we&apos;ll 
&gt; &gt; probably need to expose a lock() and unlock() method (or something similar)
&gt; 
&gt; Done.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:51
&gt; &gt;&gt; +};
&gt; &gt; 
&gt; &gt; Since this is a very basic abstract interface related to audio and might be useful in other places unrelated to MediaStream, I recommend moving it to WebCore/platform/audio and
&gt; &gt; renaming the class &quot;AudioConsumer&quot; or &quot;AudioDestinationConsumer&quot;
&gt; &gt; 
&gt; &gt; This interface is very similar to (but the opposite of) WebCore/platform/AudioSourceProvider
&gt; &gt; where AudioDestinationConsumer represents a &quot;push&quot; model and AudioSourceProvider represents a &quot;pull&quot; model  (the flow-control is the opposite)
&gt; 
&gt; Done.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:96
&gt; &gt;&gt; +    void removeConsumer(MediaStreamSourceConsumer*);
&gt; &gt; 
&gt; &gt; I recommend we be more explicit, using &quot;audio&quot; in these names, for example:
&gt; &gt; requiresAudioConsumer()
&gt; &gt; addAudioConsumer()
&gt; &gt; removeAudioConsumer()
&gt; &gt; 
&gt; &gt; Who knows, maybe we&apos;ll add hooks in here for video/graphics later on...
&gt; 
&gt; Done.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:97
&gt; &gt;&gt; +    Vector&lt;RefPtr&lt;MediaStreamSourceConsumer&gt; &gt; consumers() { return m_consumers; }
&gt; &gt; 
&gt; &gt; This makes a copy of the Vector and churns the ref counts of all the MediaStreamSourceConsumer.  Perhaps we should return a reference (or a const reference)?  If you really want the copy behavior, perhaps we should instead make this function copy out the vector into an out parameter?
&gt; 
&gt; I know, I wanted to be ultra safe and this is a not a function that is called many times. Have changed so that it exits after the first hit and changed consumers() to return a const reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775271</commentid>
    <comment_count>12</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-26 02:08:35 -0800</bug_when>
    <thetext>(In reply to comment #11)

&gt; &gt; &gt;&gt; Source/WebCore/Modules/webaudio/MediaStreamAudioDestinationNode.idl:27
&gt; &gt; &gt;&gt; +    JSGenerateToJSObject
&gt; &gt; &gt; 
&gt; &gt; &gt; Why do you need this attribute?
&gt; &gt; 
&gt; &gt; Chris?
&gt; 
&gt; I&apos;m following the same pattern I&apos;ve used for the other AudioNodes.  Perhaps it&apos;s no longer necessary, but I had found (and I can&apos;t remember the details)
&gt; that for either JSC or V8 that JSGenerateToJSObject was necessary or bad things were happening.  I&apos;m just trying to keep this new node the same as all
&gt; the others.
&gt; 

JSGenerateToJSObject (JSC specific) creates the toJS() function for classes that have a parent if you don&apos;t specify it the toJS() of the parent class is used instead which might cause type issues. V8 always creates a toV8().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775300</commentid>
    <comment_count>13</comment_count>
      <attachid>175954</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-26 02:53:42 -0800</bug_when>
    <thetext>Created attachment 175954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775304</commentid>
    <comment_count>14</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-26 02:55:41 -0800</bug_when>
    <thetext>I added more/better comments and added checks for main thread in the add/removeConsumer functionality in WebMediaStreamSource to be safer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775641</commentid>
    <comment_count>15</comment_count>
      <attachid>175954</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-26 10:44:10 -0800</bug_when>
    <thetext>Comment on attachment 175954
Patch

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

API change LGTM with some naming nits below.

&gt; Source/Platform/chromium/public/WebAudioDestinationConsumer.h:32
&gt; +class WebAudioDestinationConsumer {

What does the word &quot;destination&quot; mean here?  This seems like it could be sensibly called a WebAudioConsumer.

&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:95
&gt; +    // Only used if if this is a WebAudio source.

We should have an ASSERT that verifies this property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775956</commentid>
    <comment_count>16</comment_count>
      <attachid>175954</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-11-26 15:18:03 -0800</bug_when>
    <thetext>Comment on attachment 175954
Patch

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

looks good

&gt;&gt; Source/Platform/chromium/public/WebAudioDestinationConsumer.h:32
&gt;&gt; +class WebAudioDestinationConsumer {
&gt; 
&gt; What does the word &quot;destination&quot; mean here?  This seems like it could be sensibly called a WebAudioConsumer.

This seems fine to me since AudioDestinationConsumer is symmetric/consistent with AudioSourceProvider.
From WebKit&apos;s (WebAudio&apos;s) point of view, there are nodes which represent sources and destinations.  The naming comes from there.
An AudioSourceNode gets its audio data from a provider, and an AudioDestinationNode &quot;sends&quot; its audio data to a consumer

&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:44
&gt; +class RTCPeerConnectionHandler;

Is this needed anymore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776648</commentid>
    <comment_count>17</comment_count>
      <attachid>176240</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-27 05:17:07 -0800</bug_when>
    <thetext>Created attachment 176240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776649</commentid>
    <comment_count>18</comment_count>
      <attachid>175954</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2012-11-27 05:19:04 -0800</bug_when>
    <thetext>Comment on attachment 175954
Patch

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

&gt;&gt; Source/Platform/chromium/public/WebMediaStreamSource.h:95
&gt;&gt; +    // Only used if if this is a WebAudio source.
&gt; 
&gt; We should have an ASSERT that verifies this property.

I added ASSERTs in MediaStreamSource.cpp.

&gt;&gt; Source/WebCore/platform/mediastream/MediaStreamSource.h:44
&gt;&gt; +class RTCPeerConnectionHandler;
&gt; 
&gt; Is this needed anymore?

Nope, removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776862</commentid>
    <comment_count>19</comment_count>
      <attachid>176240</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-27 09:33:01 -0800</bug_when>
    <thetext>Comment on attachment 176240
Patch

API change LGTM.  I&apos;ll let crogers have the final say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777609</commentid>
    <comment_count>20</comment_count>
      <attachid>176240</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 01:05:15 -0800</bug_when>
    <thetext>Comment on attachment 176240
Patch

Clearing flags on attachment: 176240

Committed r135985: &lt;http://trac.webkit.org/changeset/135985&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777610</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 01:05:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173403</attachid>
            <date>2012-11-09 16:58:44 -0800</date>
            <delta_ts>2012-11-19 07:37:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101815-20121109165651.patch</filename>
            <type>text/plain</type>
            <size>32433</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzODEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAzYTNmODVhZGFmZTcy
MTA4Y2NiMGFmYzQ2OWUwYjBkNGVmMjg5Y2QzLi42MzU1Mjc3MTIzOGZmNWY3ZjE5ZWRmNTc1MTZj
MDEyMzk2MGZjMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMS0wOSAg
Q2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBiYXNpYyBp
bXBsZW1lbnRhdGlvbiBmb3IgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJs
aWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaDoKKyAgICAgICAgKFdlYk1lZGlhU3RyZWFtU291cmNl
KToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y29uc3Vt
ZUF1ZGlvKToKKyAgICAgICAgKFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcik6CisKIDIwMTIt
MTEtMDcgIFl1c3VmIE96dXlzYWwgIDx5dXN1Zm9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBBZGQg
QVBJIGZvciB0b3VjaEV2ZW50SGFuZGxlclJlZ2lvbiB0byBXZWJMYXllcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDZmZjIzNTJmMjY1NGYwOWNkMTUzZDk5NjU1NDk0MjlkNjc4ZjM3NzkuLmY2OGE2ZTY4ODMwNjVk
YzkxMDM2MTZkYjc1ZTRjMGZkOGEwZDRhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAor
MjAxMi0xMS0wOSAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgorCisgICAgICAg
IEFkZCBiYXNpYyBpbXBsZW1lbnRhdGlvbiBmb3IgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAx
ODE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50cyBhbiBhdWRpbyBkZXN0aW5hdGlvbiBub2RlIHdoaWNoIGhhcyBhIE1lZGlhU3RyZWFt
LgorICAgICAgICBUaGlzIGNhbiBiZSBhZGRlZCB0byBhIFBlZXJDb25uZWN0aW9uIHdpdGggcGVl
ckNvbm5lY3Rpb24uYWRkU3RyZWFtKCkuCisgICAgICAgIFBsZWFzZSBzZWUgdXNlIGNhc2UgKDMp
OgorICAgICAgICBodHRwczovL2R2Y3MudzMub3JnL2hnL2F1ZGlvL3Jhdy1maWxlL3RpcC93ZWJh
dWRpby93ZWJydGMtaW50ZWdyYXRpb24uaHRtbAorCisgICAgICAgIFRlc3Q6IHdlYmF1ZGlvL21l
ZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQ
ZWVyQ29ubmVjdGlvbjo6YWRkU3RyZWFtKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbik6CisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQXVkaW9Db250ZXh0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5pZGw6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1B
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6bWVk
aWFTdHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6fk1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZXNldCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2Rl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZWRpYVN0cmVhbUF1ZGlv
RGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGU6OnN0cmVhbSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0
cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1T
b3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVNvdXJjZTo6aXNXZWJB
dWRpb1NvdXJjZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtU291cmNlOjpNZWRpYVN0cmVhbVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnNldElzV2ViQXVkaW9Tb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OmlzV2ViQXVkaW9Tb3VyY2UpOgorICAgICAg
ICAoTWVkaWFTdHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3Vy
Y2U6OnNldFBlZXJIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNl
OjpwZWVySGFuZGxlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyLmNwcDoKKyAgICAgICAgKFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckR1
bW15KToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckR1bW15Ojpj
b25zdW1lQXVkaW8pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcik6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vY2hyb21pdW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OmNv
bnN1bWVBdWRpbyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9jaHJvbWl1bS9SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0pOgorCiAyMDEyLTExLTA3ICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1Y4XSBJbnRydXNpdmVE
T01XcmFwcGVyTWFwIHNob3VsZCBiZSB1c2FibGUgZm9yIG1vcmUgdGhhbiBqdXN0IE5vZGVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
U291cmNlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFt
U291cmNlLmgKaW5kZXggM2E5NzJmMWQ4NTU0YzI4MTA1YzhkYzQ4ZjdjMDEzMzI5MDUzZDI3MC4u
NTNlNDNiYTdmMmFmODI0MDAxMDU0MTU3NmVmNmYwY2RmZWNlM2ZhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaApA
QCAtOTEsNiArOTEsOCBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCBFeHRyYURhdGEqIGV4
dHJhRGF0YSgpIGNvbnN0OwogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRFeHRyYURhdGEoRXh0
cmFEYXRhKik7CiAKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNXZWJBdWRpb1NvdXJjZSgpIGNv
bnN0OworCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgV2ViTWVkaWFTdHJlYW1Tb3Vy
Y2UoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlPiYpOwog
ICAgIFdlYk1lZGlhU3RyZWFtU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1T
b3VyY2UqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oCmluZGV4IDMxNzAyMTQxMjQzMGIzMzFi
YTMyNTk1MGNlMjQwNTg3YmMyM2RmOGIuLjFlZTRmOWVkNWFhYjVkZTlkODcyOGY5MGE4NTljNGI0
MDZlYzlkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaApAQCAtMzEsNiArMzEsOCBAQAog
I2lmbmRlZiBXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJfaAogI2RlZmluZSBXZWJSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXJfaAogCisjaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgorCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYk1lZGlhQ29uc3RyYWludHM7CiBjbGFzcyBXZWJN
ZWRpYVN0cmVhbURlc2NyaXB0b3I7CkBAIC02NCw2ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0U3RhdHMoY29uc3QgV2ViUlRDU3RhdHNSZXF1ZXN0JikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIHN0b3AoKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZUF1ZGlvKGNv
bnN0IFdlYktpdDo6V2ViVmVjdG9yPGNvbnN0IGZsb2F0Kj4mLCBzaXplX3QgbnVtYmVyX29mX2Zy
YW1lcykgeyB9OworCiAgICAgLy8gUlRDRGF0YUNoYW5uZWwKICAgICB2aXJ0dWFsIGJvb2wgb3Bl
bkRhdGFDaGFubmVsKGNvbnN0IFdlYlJUQ0RhdGFDaGFubmVsJikgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgc2VuZFN0cmluZ0RhdGEoY29uc3QgV2ViUlRDRGF0YUNoYW5uZWwm
LCBjb25zdCBXZWJTdHJpbmcmKSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRl
eCA0NjEyZTFmYzgxYTQ0ZGU3MjAzYWQ4Y2YwMGM2MmY1ZGFhYmRlOWY3Li4wMzlhZmIyZWQ4ZmQw
OTU4MWQzN2M2NTMyMWJlM2UyYjJkMTRiNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtMzY5LDYg
KzM2OSwxNCBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjphZGRTdHJlYW0oUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbT4gcHJwU3RyZWFtLCBjb25zdCBEaWN0aQogCiAgICAgbV9sb2NhbFN0cmVhbXMt
PmFwcGVuZChzdHJlYW0pOwogCisgICAgLy8gQ2hlY2sgaWYgYW55IGF1ZGlvIHRyYWNrIGlzIGZl
ZCBmcm9tIGEgV2ViQXVkaW8gZGVzdGluYXRpb24uCisgICAgTWVkaWFTdHJlYW1UcmFja0xpc3Qq
IGF1ZGlvVHJhY2tMaXN0ID0gc3RyZWFtLT5hdWRpb1RyYWNrcygpOworICAgIGlmIChhdWRpb1Ry
YWNrTGlzdC0+bGVuZ3RoKCkpIHsKKyAgICAgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIHNvdXJjZSA9
IGF1ZGlvVHJhY2tMaXN0LT5pdGVtKDApLT5jb21wb25lbnQoKS0+c291cmNlKCk7CisgICAgICAg
IGlmIChzb3VyY2UtPmlzV2ViQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgICAgIHNvdXJjZS0+c2V0
UGVlckhhbmRsZXIobV9wZWVySGFuZGxlci5nZXQoKSk7CisgICAgfQorCiAgICAgYm9vbCB2YWxp
ZCA9IG1fcGVlckhhbmRsZXItPmFkZFN0cmVhbShzdHJlYW0tPmRlc2NyaXB0b3IoKSwgY29uc3Ry
YWludHMpOwogICAgIGlmICghdmFsaWQpCiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAppbmRleCA5
ZjY1ODgwMTY5MzdkYWY3MTY3NjFkMjdkMmY3N2VhNzZkMGU1YTZhLi4xZGZkZDU0MDZlZWNhMmZk
ODc0NzdmOWZlZWVkNmM5Mzc5Mzk4MDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC02MCw2ICs2MCw3IEBACiAKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSAiTWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlLmgiCiAjZW5kaWYKIApAQCAtNDE4LDYgKzQxOSwxNCBAQCBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3Ry
ZWFtU291cmNlKE1lZAogICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2VlcHMg
cmVmZXJlbmNlIHVudGlsIG5vZGUgaXMgZGlzY29ubmVjdGVkCiAgICAgcmV0dXJuIG5vZGU7CiB9
CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gQXVkaW9Db250
ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogc3Vw
cG9ydCBvcHRpb25hbCBhcmd1bWVudCBmb3IgbnVtYmVyIG9mIGNoYW5uZWxzLgorICAgIC8vIEZJ
WE1FOiBkZWZhdWx0IHNob3VsZCBwcm9iYWJseSBiZSBzdGVyZW8uCisgICAgcmV0dXJuIE1lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSh0aGlzLCAxKTsKK30KKwogI2VuZGlm
CiAKIFBhc3NSZWZQdHI8U2NyaXB0UHJvY2Vzc29yTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVT
Y3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKaW5kZXggMzA5
OGQ4ZWM2YzEwYjdkNjZjNWI5NjgyZTBkOTIwNDFiYTg2NDE5OC4uYjUyMDM5MmZhYWQ4NzYyZTgw
MjQ4MzkwNmZiMDYyODA5ZTc0ZDIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIEF1ZGlvQnVmZmVy
OwogY2xhc3MgQXVkaW9CdWZmZXJDYWxsYmFjazsKIGNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9k
ZTsKIGNsYXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTsKK2NsYXNzIE1lZGlhU3RyZWFt
QXVkaW9EZXN0aW5hdGlvbk5vZGU7CiBjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZTsK
IGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBDaGFubmVsTWVyZ2VyTm9kZTsKQEAgLTEx
OCw2ICsxMTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
ICAgIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZU1lZGlhU3Ry
ZWFtU291cmNlKE1lZGlhU3RyZWFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5h
dGlvbigpOwogI2VuZGlmCiAgICAgUGFzc1JlZlB0cjxHYWluTm9kZT4gY3JlYXRlR2FpbigpOwog
ICAgIFBhc3NSZWZQdHI8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKaW5k
ZXggMDBmNDljZmUzNDM1Y2VmZjg0ZTc5MjFmNDVjYjllOTk2MjM3YzBhYS4uZDUxMmQ1ZGYwYjUy
MTUyZjc4NjRlNDljZDAxYTI3NDQ3NmExMWNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbApAQCAtNjYsNiArNjYsNyBAQAogI2lmIGRl
ZmluZWQoRU5BQkxFX01FRElBX1NUUkVBTSkgJiYgRU5BQkxFX01FRElBX1NUUkVBTQogICAgIE1l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKGluIE1lZGlh
U3RyZWFtIG1lZGlhU3RyZWFtKQogICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICBN
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlIGNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRp
b24oKTsKICNlbmRpZgogCiAgICAgLy8gUHJvY2Vzc2luZyBub2RlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKaW5kZXggNGVmM2U2NTYwYjdmZmU4ZDljMDdk
MGM3MjRmZGU5YzRiM2NkYzA4OS4uMmQwYWVlNWQyM2I5OGM3MmNhMzU2Y2NjNThiYmIyZGNhZDA4
YmRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCkBA
IC02Myw2ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgTm9kZVR5cGVPc2NpbGxhdG9yLAogICAg
ICAgICBOb2RlVHlwZUF1ZGlvQnVmZmVyU291cmNlLAogICAgICAgICBOb2RlVHlwZU1lZGlhRWxl
bWVudEF1ZGlvU291cmNlLAorICAgICAgICBOb2RlVHlwZU1lZGlhU3RyZWFtQXVkaW9EZXN0aW5h
dGlvbiwKICAgICAgICAgTm9kZVR5cGVNZWRpYVN0cmVhbUF1ZGlvU291cmNlLAogICAgICAgICBO
b2RlVHlwZUphdmFTY3JpcHQsCiAgICAgICAgIE5vZGVUeXBlQmlxdWFkRmlsdGVyLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M4ZDc1N2M4NWVmMjA0
Y2FjNjQ2NGE0NzIyOWQ0MTE2NTc5NWM1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAK
QEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJN
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUgIkxvY2FsTWVkaWFT
dHJlYW0uaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRl
IDx3dGYvTG9ja2VyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBzaXplX3QgbnVtYmVyT2ZDaGFubmVs
cykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUoY29udGV4dCwgbnVtYmVyT2ZDaGFubmVscykpOworfQorCitNZWRpYVN0cmVhbUF1ZGlv
RGVzdGluYXRpb25Ob2RlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29u
dGV4dCogY29udGV4dCwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpCisgICAgOiBBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZShjb250ZXh0LCBjb250ZXh0LT5zYW1wbGVSYXRlKCkpCisgICAgLCBtX21p
eEJ1cyhudW1iZXJPZkNoYW5uZWxzLCBQcm9jZXNzaW5nU2l6ZUluRnJhbWVzKQoreworICAgIHNl
dE5vZGVUeXBlKE5vZGVUeXBlTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uKTsKKworICAgIE1l
ZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNlczsKKyAgICBNZWRpYVN0cmVhbVNvdXJj
ZVZlY3RvciB2aWRlb1NvdXJjZXM7CisKKyAgICAvLyBGSVhNRTogc2VlZSBpZiB0aGUgJ2lkJyBy
ZWFsbHkgbmVlZHMgdG8gYmUgdW5pcXVlLgorICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4g
c291cmNlID0gTWVkaWFTdHJlYW1Tb3VyY2U6OmNyZWF0ZSgieHl6IiwgTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlR5cGVBdWRpbywgIk1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUiKTsKKyAgICBh
dWRpb1NvdXJjZXMuYXBwZW5kKHNvdXJjZSk7CisKKyAgICBtX3N0cmVhbSA9IExvY2FsTWVkaWFT
dHJlYW06OmNyZWF0ZShjb250ZXh0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGF1ZGlvU291
cmNlcywgdmlkZW9Tb3VyY2VzKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0byBpbmZvcm0gdGhlIE1l
ZGlhU3RyZWFtU291cmNlIHRoYXQgd2UncmUgdXNlZCB3aXRoIFdlYiBBdWRpby4KKyAgICBtZWRp
YVN0cmVhbVNvdXJjZSgpLT5zZXRJc1dlYkF1ZGlvU291cmNlKHRydWUpOworCisgICAgaW5pdGlh
bGl6ZSgpOworfQorCitNZWRpYVN0cmVhbVNvdXJjZSogTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6bWVkaWFTdHJlYW1Tb3VyY2UoKQoreworICAgIE1lZGlhU3RyZWFtVHJhY2tMaXN0
KiBhdWRpb1RyYWNrTGlzdCA9IG1fc3RyZWFtLT5hdWRpb1RyYWNrcygpOworICAgIHJldHVybiBh
dWRpb1RyYWNrTGlzdC0+aXRlbSgwKS0+Y29tcG9uZW50KCktPnNvdXJjZSgpOworfQorCitNZWRp
YVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZSgpCit7CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1BdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7CisgICAg
bV9taXhCdXMuY29weUZyb20oKmlucHV0KDApLT5idXMoKSk7CisKKyAgICAvLyBOb3csIHB1c2gg
dG8gb3VyIGF1ZGlvIHNpbmsuCisgICAgaWYgKG1lZGlhU3RyZWFtU291cmNlKCktPnBlZXJIYW5k
bGVyKCkpCisgICAgICAgIG1lZGlhU3RyZWFtU291cmNlKCktPnBlZXJIYW5kbGVyKCktPmNvbnN1
bWVBdWRpbygmbV9taXhCdXMsIG51bWJlck9mRnJhbWVzKTsKK30KKwordm9pZCBNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZXNldCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkODQ4MzYy
NjFjYzFkN2RkNWQ1NTM3MjcxNGYxZDFkZjQ2ZTE1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVN0cmVhbUF1
ZGlvRGVzdGluYXRpb25Ob2RlX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZV9oCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
CisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0J1
cy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQXVkaW9Db250ZXh0OworCitjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2Rl
IDogcHVibGljIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9D
b250ZXh0Kiwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgdmlydHVhbCB+TWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSgpOworCisgICAgTWVkaWFTdHJlYW0qIHN0cmVhbSgp
IHsgcmV0dXJuIG1fc3RyZWFtLmdldCgpOyB9CisKKyAgICAvLyBBdWRpb05vZGUuCisgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2
b2lkIHJlc2V0KCk7CisgICAgCisgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIG1lZGlhU3RyZWFtU291
cmNlKCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShB
dWRpb0NvbnRleHQqLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICB2aXJ0dWFsIGRv
dWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKworICAg
IC8vIEFzIGFuIGF1ZGlvIHNvdXJjZSwgd2Ugd2lsbCBuZXZlciBwcm9wYWdhdGUgc2lsZW5jZS4K
KyAgICB2aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1NpbGVuY2UoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBtX3N0cmVhbTsKKyAgICBB
dWRpb0J1cyBtX21peEJ1czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAv
LyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MWJiYTQxYWRiMTFjMzkwNzk2MWU3MGM1ZDI2
YWUwYjk2YzM4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCkBAIC0wLDAgKzEsMzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPJk1FRElBX1NUUkVB
TSwKKyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorXSBpbnRlcmZhY2UgTWVkaWFTdHJlYW1BdWRp
b0Rlc3RpbmF0aW9uTm9kZSA6IEF1ZGlvU291cmNlTm9kZSB7CisgICAgcmVhZG9ubHkgYXR0cmli
dXRlIE1lZGlhU3RyZWFtIHN0cmVhbTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYzU3YjdhNTZh
ZTQ3NDcyNmQ1MTZhMGVhZDRjYjc1ZWYyZjg3ZDBhZS4uNTcwZDE0MmQ0MmYwYjA1MTRhZDNmMWNh
ZTdjMjhiNjczYjg5MWIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTI1LDYgKzkyNSw3IEBACiAg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmlkbCcs
CiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlh
U3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVz
L3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbCcsCkBAIC0xNzU2LDYgKzE3NTcsOCBAQAogICAg
ICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oJywKICAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAn
LAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1
ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oJywKICAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0
cmVhbVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcAppbmRleCBhNTE2OTM2MTAyMGE0Zjk5MmZkY2Q3YjZm
YzM4M2RiMTg4ZDJhZjlkLi4zMWMyOTI3NTk4OGMzM2I3YTBmYTA0NjlmODQ2MWY2Zjk3MTEzNzk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
Yk1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMTMyLDYgKzEzMiwxMiBA
QCB2b2lkIFdlYk1lZGlhU3RyZWFtU291cmNlOjpzZXRFeHRyYURhdGEoRXh0cmFEYXRhKiBleHRy
YURhdGEpCiAgICAgbV9wcml2YXRlLT5zZXRFeHRyYURhdGEoYWRvcHRSZWYobmV3IEV4dHJhRGF0
YUNvbnRhaW5lcihleHRyYURhdGEpKSk7CiB9CiAKK2Jvb2wgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6
OmlzV2ViQXVkaW9Tb3VyY2UoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVs
bCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpLT5pc1dlYkF1ZGlvU291cmNlKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtU291cmNlLmNwcAppbmRleCAxNzIwNDg3ZGMxMjU0YTRjMjM0MjRjYjEwMDFlYWY2
MjljOTI4NTFkLi5iMzJjOGI5YjY0NzdjYjk1MTNlNDE1YTM2N2QzYmM5MDM2YzA5NmI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1Tb3VyY2UuY3BwCkBAIC00Niw2ICs0Niw4IEBAIE1lZGlhU3RyZWFtU291cmNlOjpNZWRp
YVN0cmVhbVNvdXJjZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYK
ICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX3JlYWR5U3Rh
dGUocmVhZHlTdGF0ZSkKKyAgICAsIG1faXNXZWJBdWRpb1NvdXJjZShmYWxzZSkKKyAgICAsIG1f
cGVlckhhbmRsZXIoMCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgKaW5kZXggYmY3MTEwZWRjMDkwOTM1
M2VmMTk1OWEwZDk0ZGE2NGU4MjM2MzY3Yy4uNGQxZTc5YjE4MjE4ZTU1Y2UwYzQ2YTM1OTgzYzNi
Nzk4YjJhNDJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1Tb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oCkBAIC00MCw2ICs0MCw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOworCiBjbGFzcyBN
ZWRpYVN0cmVhbVNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhU3RyZWFtU291cmNlPiB7
CiBwdWJsaWM6CiAgICAgY2xhc3MgT2JzZXJ2ZXIgewpAQCAtNzksNiArODEsMTMgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBleHRyYURhdGEoKSBjb25zdCB7IHJldHVybiBt
X2V4dHJhRGF0YTsgfQogICAgIHZvaWQgc2V0RXh0cmFEYXRhKFBhc3NSZWZQdHI8RXh0cmFEYXRh
PiBleHRyYURhdGEpIHsgbV9leHRyYURhdGEgPSBleHRyYURhdGE7IH0KIAorICAgIHZvaWQgc2V0
SXNXZWJBdWRpb1NvdXJjZShib29sIGlzV2ViQXVkaW9Tb3VyY2UpIHsgbV9pc1dlYkF1ZGlvU291
cmNlID0gaXNXZWJBdWRpb1NvdXJjZTsgfQorICAgIGJvb2wgaXNXZWJBdWRpb1NvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNXZWJBdWRpb1NvdXJjZTsgfQorCisgICAgLy8gRklYTUU6IGRlYWwg
YmV0dGVyIHdpdGggbGlmZXRpbWUgaXNzdWVzLgorICAgIHZvaWQgc2V0UGVlckhhbmRsZXIoUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyKiBoYW5kbGVyKSB7IG1fcGVlckhhbmRsZXIgPSBoYW5kbGVy
OyB9CisgICAgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKiBwZWVySGFuZGxlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcGVlckhhbmRsZXI7IH0KKwogcHJpdmF0ZToKICAgICBNZWRpYVN0cmVhbVNvdXJj
ZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFJlYWR5U3RhdGUp
OwogCkBAIC04Niw2ICs5NSw4IEBAIHByaXZhdGU6CiAgICAgVHlwZSBtX3R5cGU7CiAgICAgU3Ry
aW5nIG1fbmFtZTsKICAgICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKyAgICBib29sIG1faXNX
ZWJBdWRpb1NvdXJjZTsKKyAgICBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIG1fcGVlckhhbmRs
ZXI7IC8vIEZJWE1FOiBsaWZldGltZSEKICAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBtX29ic2VydmVy
czsKICAgICBSZWZQdHI8RXh0cmFEYXRhPiBtX2V4dHJhRGF0YTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkhhbmRs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb25IYW5kbGVyLmNwcAppbmRleCA4NTA5ZjJlOTQyNzU2OGJhNjI3OTk4MGRhMzYwYzYxZjFh
NDVjNDUzLi4wNmYxMDFhNTI3MGUxOGQwZTk0NGE4MTFjZDYzNzgxNzE1YTFlMDU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bkhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0
b3I+KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3RhdHMoUGFzc1JlZlB0cjxSVENT
dGF0c1JlcXVlc3Q+KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lQXVkaW8oQXVkaW9CdXMqLCBzaXplX3QgbnVtYmVy
T2ZGcmFtZXMpOwogCiAgICAgLy8gUlRDRGF0YUNoYW5uZWwuCiAgICAgdmlydHVhbCBib29sIG9w
ZW5EYXRhQ2hhbm5lbChQYXNzUmVmUHRyPFJUQ0RhdGFDaGFubmVsRGVzY3JpcHRvcj4pIE9WRVJS
SURFOwpAQCAtMTQ1LDYgKzE0NiwxMCBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckR1
bW15OjpzdG9wKCkKIHsKIH0KIAordm9pZCBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJEdW1teTo6
Y29uc3VtZUF1ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90KQoreworfQorCiBib29sIFJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlckR1bW15OjpvcGVuRGF0YUNoYW5uZWwoUGFzc1JlZlB0cjxSVENEYXRhQ2hh
bm5lbERlc2NyaXB0b3I+KQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyLmgKaW5kZXggZmJhNDU4ODdlNjc5OTY1NmYyNjYzN2U0ZWZkZWE0ZTk2NTY2MDMyZC4u
NDI2NGZlZjYxODI4N2Q4YzhiMTJiOThhNzA2YmM1NjZjMzk1MDdhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb25IYW5kbGVyLmgKQEAgLTM5LDYgKzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBBdWRpb0J1czsKIGNsYXNzIE1lZGlhQ29uc3RyYWludHM7CiBjbGFzcyBSVENDb25m
aWd1cmF0aW9uOwogY2xhc3MgUlRDRGF0YUNoYW5uZWxEZXNjcmlwdG9yOwpAQCAtNjksNiArNzAs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldFN0YXRzKFBhc3NSZWZQdHI8UlRDU3Rh
dHNSZXF1ZXN0PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOwogCisgICAgdmly
dHVhbCB2b2lkIGNvbnN1bWVBdWRpbyhBdWRpb0J1cyosIHNpemVfdCBudW1iZXJPZkZyYW1lcykg
PSAwOworCiAgICAgLy8gUlRDRGF0YUNoYW5uZWwuCiAgICAgdmlydHVhbCBib29sIG9wZW5EYXRh
Q2hhbm5lbChQYXNzUmVmUHRyPFJUQ0RhdGFDaGFubmVsRGVzY3JpcHRvcj4pID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgc2VuZFN0cmluZ0RhdGEoUGFzc1JlZlB0cjxSVENEYXRhQ2hhbm5lbERlc2Ny
aXB0b3I+LCBjb25zdCBTdHJpbmcmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9S
VENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bS5jcHAKaW5kZXggZThkMTY3Y2FlMzE2YzIx
YmMwYWQzMDhkZTMzNWFkZTY1ZTk4YjkxYi4uZWY5MDUwMzE1MGNkMWU4MWUzMjMxODU2OTI1MDA5
MzBjMzRlYTlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vY2hyb21pdW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1JUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlckNocm9taXVtLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkF1ZGlvQnVzLmgi
CiAjaW5jbHVkZSAiTWVkaWFDb25zdHJhaW50cy5oIgogI2luY2x1ZGUgIlJUQ0NvbmZpZ3VyYXRp
b24uaCIKICNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbERlc2NyaXB0b3IuaCIKQEAgLTE3Myw2ICsx
NzQsMjEgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bTo6c3RvcCgpCiAg
ICAgbV93ZWJIYW5kbGVyLT5zdG9wKCk7CiB9CiAKK3ZvaWQgUlRDUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2hyb21pdW06OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVzLCBzaXplX3QgbnVtYmVyT2ZG
cmFtZXMpCit7CisgICAgQVNTRVJUKGJ1cyk7CisgICAgaWYgKCFidXMpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFdyYXAgQXVkaW9CdXMuCisgICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMg
PSBidXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3Rvcjxjb25zdCBm
bG9hdCo+IGJ1c1ZlY3RvcihudW1iZXJPZkNoYW5uZWxzKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKKyAgICAgICAgYnVzVmVjdG9yW2ldID0gYnVz
LT5jaGFubmVsKGkpLT5kYXRhKCk7CisKKyAgICBtX3dlYkhhbmRsZXItPmNvbnN1bWVBdWRpbyhi
dXNWZWN0b3IsIG51bWJlck9mRnJhbWVzKTsKK30KKwogdm9pZCBSVENQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDaHJvbWl1bTo6bmVnb3RpYXRpb25OZWVkZWQoKQogewogICAgIG1fY2xpZW50LT5uZWdv
dGlhdGlvbk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY2hyb21pdW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1JUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlckNocm9taXVtLmgKaW5kZXggMzZlOTJkNDQ0N2YzYzY2Yzc5NDY3YThmMjVjYjU4
OGRkODZjMmE0NC4uNDE2OGJhNDRkZjQ3MmNlZGY4MTA3MzkyNTczYzU0NjdkYThmNTcyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1
bS5oCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3RhdHMo
UGFzc1JlZlB0cjxSVENTdGF0c1JlcXVlc3Q+KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpIE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVBdWRpbyhBdWRpb0J1
cyosIHNpemVfdCBudW1iZXJPZkZyYW1lcykgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIGJvb2wg
b3BlbkRhdGFDaGFubmVsKFBhc3NSZWZQdHI8UlRDRGF0YUNoYW5uZWxEZXNjcmlwdG9yPikgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBib29sIHNlbmRTdHJpbmdEYXRhKFBhc3NSZWZQdHI8UlRDRGF0
YUNoYW5uZWxEZXNjcmlwdG9yPiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIHNlbmRSYXdEYXRhKFBhc3NSZWZQdHI8UlRDRGF0YUNoYW5uZWxEZXNjcmlwdG9yPiwg
Y29uc3QgY2hhciosIHNpemVfdCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzMwNGQwNTg0NGYxZDBlZDQ3OTg3ODM2MmYzYzA0
MWYyZGVlYjZlYS4uYzJkMmM3ZjY0Nzk2ZWNhZWRhMzdhMzkyMTczNTQ0ZjU2MzMzYjEwZiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDEyLTExLTA5ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CisK
KyAgICAgICAgQWRkIGJhc2ljIGltcGxlbWVudGF0aW9uIGZvciBNZWRpYVN0cmVhbUF1ZGlvRGVz
dGluYXRpb25Ob2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDE4MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhh
bmRsZXIuY3BwOgorICAgICAgICAoTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y29u
c3VtZUF1ZGlvKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyLmg6CisgICAgICAgIChNb2NrV2ViUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyKToKKwogMjAxMi0xMS0wNyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBnYXJkZW4tby1tYXRpYyBzaG91bGQgaGFuZGxlIGNvbmN1cnJlbnQg
cmVxdWVzdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKaW5kZXggY2ExZTYwNDNm
Y2Y2NTFkNmI0NmFkOWFiZThiOGVlNjFiMGE1ZDY4Mi4uMGVhZDNlZjY4NDNmZjdhOTJiOTRiNGI3
OGVmODJiOTljNzQ1MzIzNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKQEAg
LTMzMiw2ICszMzIsMTAgQEAgdm9pZCBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpz
dG9wKCkKICAgICBtX3N0b3BwZWQgPSB0cnVlOwogfQogCit2b2lkIE1vY2tXZWJSVENQZWVyQ29u
bmVjdGlvbkhhbmRsZXI6OmNvbnN1bWVBdWRpbyhjb25zdCBXZWJLaXQ6OldlYlZlY3Rvcjxjb25z
dCBmbG9hdCo+Jiwgc2l6ZV90KQoreworfQorCiBib29sIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlv
bkhhbmRsZXI6Om9wZW5EYXRhQ2hhbm5lbChjb25zdCBXZWJSVENEYXRhQ2hhbm5lbCYgZGF0YUNo
YW5uZWwpCiB7CiAgICAgaWYgKG1fc3RvcHBlZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIu
aAppbmRleCBhMTUyMmY0ZmJlNmZlM2I1ZmE0NDIyZDVlZDcwOThmMGIzMjhhYzA1Li4wOTFmYTU5
MWQ0NGY4MDM5ZWRiZjBlYjZmZjNmNjFjMGU4NTEzZDg1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlci5oCkBAIC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0
U3RhdHMoY29uc3QgV2ViS2l0OjpXZWJSVENTdGF0c1JlcXVlc3QmKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVB
dWRpbyhjb25zdCBXZWJLaXQ6OldlYlZlY3Rvcjxjb25zdCBmbG9hdCo+Jiwgc2l6ZV90IG51bWJl
cl9vZl9mcmFtZXMpIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBib29sIG9wZW5EYXRhQ2hhbm5l
bChjb25zdCBXZWJLaXQ6OldlYlJUQ0RhdGFDaGFubmVsJikgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIHNlbmRTdHJpbmdEYXRhKGNvbnN0IFdlYktpdDo6V2ViUlRDRGF0YUNoYW5uZWwmLCBj
b25zdCBXZWJLaXQ6OldlYlN0cmluZyYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzZW5k
UmF3RGF0YShjb25zdCBXZWJLaXQ6OldlYlJUQ0RhdGFDaGFubmVsJiwgY29uc3QgY2hhciosIHNp
emVfdCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjBhMDNiNjdhZmY2MDkyZDM5NDczMTlkNGUzZTM0OGRl
Yjk5NmFmYi4uZGNkOGMyOGMyNTRjOWU5MjE4NjljYzUyNmE4OTBlOGM0NmIwNmJkMSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDEyLTExLTA5ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQWRkIGJhc2ljIGltcGxlbWVudGF0aW9uIGZvciBNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDE4MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHdlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlv
ZGVzdGluYXRpb25ub2RlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTExLTA3ICBKb3NodWEgQmVsbCAg
PGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBVbnJldmlld2VkIGdh
cmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVk
aW9kZXN0aW5hdGlvbm5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVk
aWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg5
Y2MwOTFjNzEyYmI1NzRjMjE5YTg0ZGY0YWNjZTNlYTg1YzQyZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorQmFzaWMgdGVzdHMgZm9yIE1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGUgQVBJLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BB
U1MgRGVzdGluYXRpb24gQXVkaW9Ob2RlIGhhcyBvbmUgaW5wdXQuCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjg4YmE4NGUxNWQ4MDliYmIwMDFjZDk3NzBiYTJlMTNjYTE4MTQwOTMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlvZGVzdGluYXRp
b25ub2RlLmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJCYXNpYyB0
ZXN0cyBmb3IgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSBBUEkuIik7CisKK3ZhciBj
b250ZXh0ID0gMDsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgfQorCisgICAg
Y29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsKKworICAgIHZhciBtZWRpYVN0cmVh
bURlc3RpbmF0aW9uID0gY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7CisK
KyAgICAvLyBDaGVjayBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzLgorICAgIGlmIChtZWRp
YVN0cmVhbURlc3RpbmF0aW9uLm51bWJlck9mSW5wdXRzID09IDEpCisgICAgICAgIHRlc3RQYXNz
ZWQoIkRlc3RpbmF0aW9uIEF1ZGlvTm9kZSBoYXMgb25lIGlucHV0LiIpOworICAgIGVsc2UKKyAg
ICAgICAgdGVzdEZhaWxlZCgiRGVzdGluYXRpb24gQXVkaW9Ob2RlIHNob3VsZCBoYXZlIG9uZSBp
bnB1dC4iKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBubyBvdXRwdXRzLCBidXQg
c2luY2Ugd2UncmUgaW1wbGVtZW50ZWQgdXNpbmcgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUKKyAg
ICAvLyB3ZSBoYXZlIG9uZS4KKyAgICAvLyBpZiAobWVkaWFTdHJlYW1EZXN0aW5hdGlvbi5udW1i
ZXJPZk91dHB1dHMgPT0gMCkKKyAgICAvLyAgICAgdGVzdFBhc3NlZCgiRGVzdGluYXRpb24gQXVk
aW9Ob2RlIGhhcyBubyBvdXRwdXRzLiIpOworICAgIC8vIGVsc2UKKyAgICAvLyAgICAgdGVzdEZh
aWxlZCgiRGVzdGluYXRpb24gQXVkaW9Ob2RlIHNob3VsZCBub3QgaGF2ZSBvdXRwdXRzLiIpOwor
CisgICAgLy8gRklYTUU6IGFkZCBhIHRlc3Qgd2hlcmUgd2UgY3JlYXRlIGEgUGVlckNvbm5lY3Rp
b24gYW5kIGNhbGwgYWRkU3RyZWFtKG1lZGlhU3RyZWFtRGVzdGluYXRpb24uc3RyZWFtKS4KKyAg
ICAKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgpOword2luZG93LnN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174979</attachid>
            <date>2012-11-19 07:37:42 -0800</date>
            <delta_ts>2012-11-20 08:44:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101815-20121119163532.patch</filename>
            <type>text/plain</type>
            <size>32082</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0M2NmZDA3MzhkZTM0
MTM5NWEyOWVkZTY5MWM5YjVlYjRkOTliODIxLi4yZjNhYWU1YWI1MGZlYjdiZTAyZmQ0MzAwMjVm
YjhjYWEzNTNlYjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMS0xOSAg
VG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgYmFz
aWMgaW1wbGVtZW50YXRpb24gZm9yIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgxNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhlIGNv
bnN1bWVyIGludGVyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRvIFdlYk1lZGlhU3Ry
ZWFtU291cmNlLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtU291
cmNlLmg6CisgICAgICAgIChXZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lcjo6fldlYk1lZGlhU3RyZWFtU291
cmNlQ29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYk1lZGlhU3RyZWFt
U291cmNlKToKKwogMjAxMi0xMS0xNiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBjb252ZXJzaW9uIGJldHdlZW4gV2ViVHJhbnNm
b3JtYXRpb24gYW5kIGdmeDo6VHJhbnNmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmU3NDU3YzFhM2M5Zjhi
MTNmYTNjNzM4ZWQ1NTA5YzQyNTdkMWZkYS4uMzhiYjZiMDgwNmU1MzRkZmUzZGZhZDRlODllOWM5
NWJkOWY0NjMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTExLTE5ICBUb21t
eSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBiYXNpYyBp
bXBsZW1lbnRhdGlvbiBmb3IgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxODE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50cyBhbiBh
dWRpbyBkZXN0aW5hdGlvbiBub2RlIHdoaWNoIGhhcyBhIE1lZGlhU3RyZWFtLgorICAgICAgICBU
aGlzIGNhbiBiZSBhZGRlZCB0byBhIFBlZXJDb25uZWN0aW9uIHdpdGggcGVlckNvbm5lY3Rpb24u
YWRkU3RyZWFtKCkuCisgICAgICAgIFBsZWFzZSBzZWUgdXNlIGNhc2UgKDMpOgorICAgICAgICBo
dHRwczovL2R2Y3MudzMub3JnL2hnL2F1ZGlvL3Jhdy1maWxlL3RpcC93ZWJhdWRpby93ZWJydGMt
aW50ZWdyYXRpb24uaHRtbAorCisgICAgICAgIFRlc3Q6IHdlYmF1ZGlvL21lZGlhc3RyZWFtYXVk
aW9kZXN0aW5hdGlvbm5vZGUuaHRtbAorCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24pOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
aWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om1lZGlh
U3RyZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5h
dGlvbk5vZGU6On5NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnByb2Nlc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVzZXQpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlOjpzdHJlYW0pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGw6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmV4dHJhRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtU291cmNlOjpzZXRFeHRyYURhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVNvdXJjZTo6cmVxdWlyZXNDb25zdW1l
cik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29uc3VtZXJXcmFwcGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q29uc3VtZXJXcmFwcGVyOjpDb25zdW1lcldyYXBwZXIpOgorICAgICAgICAo
V2ViS2l0OjpDb25zdW1lcldyYXBwZXI6OmNvbnN1bWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29u
c3VtZXJXcmFwcGVyOjpjb25zdW1lQXVkaW8pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0
cmVhbVNvdXJjZTo6YWRkQ29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVh
bVNvdXJjZTo6cmVtb3ZlQ29uc3VtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291
cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6Ok1lZGlh
U3RyZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjphZGRD
b25zdW1lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3Ry
ZWFtU291cmNlOjpyZW1vdmVDb25zdW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bVNvdXJjZTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChNZWRpYVN0
cmVhbVNvdXJjZUNvbnN1bWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNl
Q29uc3VtZXI6On5NZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyKToKKyAgICAgICAgKE1lZGlhU3Ry
ZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpyZXF1aXJl
c0NvbnN1bWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpjb25zdW1l
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uSGFu
ZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJEdW1t
eTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTExLTE5ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTM1MTE0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oCmluZGV4IDNhOTcyZjFkODU1NGMyODEwNWM4
ZGM0OGY3YzAxMzMyOTA1M2QyNzAuLjBlZjU5YTc4ZDhlNmRlOTY2MTcwNTQ4M2RjODNkNjBlNjM2
ZjBlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVk
aWFTdHJlYW1Tb3VyY2UuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
Yk1lZGlhU3RyZWFtU291cmNlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJDb21t
b24uaCIKICNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgogI2luY2x1ZGUgIldlYlByaXZhdGVQ
dHIuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgTWVkaWFTdHJlYW1Tb3VyY2U7CkBAIC00Myw2ICs0NCwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgV2ViU3RyaW5nOwogCitjbGFzcyBXZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1
bWVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVy
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZUF1ZGlvKGNvbnN0IFdlYlZlY3Rvcjxj
b25zdCBmbG9hdCo+Jiwgc2l6ZV90IG51bWJlcl9vZl9mcmFtZXMpID0gMDsKK307CisKIGNsYXNz
IFdlYk1lZGlhU3RyZWFtU291cmNlIHsKIHB1YmxpYzoKICAgICBjbGFzcyBFeHRyYURhdGEgewpA
QCAtOTEsNiArOTksMTIgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgRXh0cmFEYXRhKiBl
eHRyYURhdGEoKSBjb25zdDsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RXh0cmFEYXRhKEV4
dHJhRGF0YSopOwogCisgICAgLy8gT25seSB1c2VkIGlmIGlmIHRoaXMgaXMgYSBXZWJBdWRpbyBz
b3VyY2UuCisgICAgLy8gVGhlIFdlYk1lZGlhU3RyZWFtU291cmNlQ29uc3VtZXIgaXMgbm90IG93
bmVkLCBhbmQgaGFzIHRvIGJlIGRpc3Bvc2VkIG9mIHNlcGFyYXRlbHkuCisgICAgV0VCS0lUX0VY
UE9SVCBib29sIHJlcXVpcmVzQ29uc3VtZXIoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgYWRkQ29uc3VtZXIoV2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lciopOworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCByZW1vdmVDb25zdW1lcihXZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVy
Kik7CisKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJNZWRpYVN0cmVhbVNvdXJj
ZShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U+Jik7CiAg
ICAgV2ViTWVkaWFTdHJlYW1Tb3VyY2UmIG9wZXJhdG9yPShXZWJDb3JlOjpNZWRpYVN0cmVhbVNv
dXJjZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuY3BwCmluZGV4IGE3MmI0ZjIyZDA0YjQxNGZjNzczMDE2NmJhZjA1MWMxNzI0ZjE5MWIuLjI2
ZTVkMThmNzA3ZmM2MGNhOTY1NDllNzY0NzdkZTkwYWNkNjBjMzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTYzLDYgKzYzLDcg
QEAKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIK
KyNpbmNsdWRlICJNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCiAjaW5jbHVkZSAi
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaCIKICNlbmRpZgogCkBAIC00MzAsNiArNDMxLDE0
IEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6
Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkCiAgICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8g
Y29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKICAgICBy
ZXR1cm4gbm9kZTsKIH0KKworUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKQoreworICAg
IC8vIEZJWE1FOiBzdXBwb3J0IG9wdGlvbmFsIGFyZ3VtZW50IGZvciBudW1iZXIgb2YgY2hhbm5l
bHMuCisgICAgLy8gRklYTUU6IGRlZmF1bHQgc2hvdWxkIHByb2JhYmx5IGJlIHN0ZXJlby4KKyAg
ICByZXR1cm4gTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKHRoaXMsIDEp
OworfQorCiAjZW5kaWYKIAogUGFzc1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0Nv
bnRleHQ6OmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaAppbmRleCA4MDQ2YWNjOTgyODE1YWU5NWE0YmZjMjE4NjViNDg0YTcwYjRkZDNkLi42ZGEz
YzEyYTlmNWVkMzUwZDQzOWZkOGY5MDUxYmViZTQ2YzE3MWY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xh
c3MgQXVkaW9CdWZmZXI7CiBjbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNrOwogY2xhc3MgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlOwogY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOworY2xh
c3MgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTsKIGNsYXNzIE1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlOwogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIENoYW5uZWxNZXJn
ZXJOb2RlOwpAQCAtMTE4LDYgKzExOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCiAgICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4g
Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkaWFTdHJlYW0qLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGVNZWRp
YVN0cmVhbURlc3RpbmF0aW9uKCk7CiAjZW5kaWYKICAgICBQYXNzUmVmUHRyPEdhaW5Ob2RlPiBj
cmVhdGVHYWluKCk7CiAgICAgUGFzc1JlZlB0cjxCaXF1YWRGaWx0ZXJOb2RlPiBjcmVhdGVCaXF1
YWRGaWx0ZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmlkbAppbmRleCAxNzMzMTNmOTVlZGZmNjNjZDgwMDg0OGIwZjgxNjI2YzEyZjAwYWI0
Li5mMmQ4ZjRjMmIwYjA5ZjdjMGIyMjZiOWE1NmQxNjY1MTJkZDQwMzE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCkBAIC02Niw2ICs2
Niw3IEBACiAjaWYgZGVmaW5lZChFTkFCTEVfTUVESUFfU1RSRUFNKSAmJiBFTkFCTEVfTUVESUFf
U1RSRUFNCiAgICAgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUgY3JlYXRlTWVkaWFTdHJlYW1T
b3VyY2UoaW4gTWVkaWFTdHJlYW0gbWVkaWFTdHJlYW0pCiAgICAgICAgIHJhaXNlcyhET01FeGNl
cHRpb24pOworICAgIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgY3JlYXRlTWVkaWFT
dHJlYW1EZXN0aW5hdGlvbigpOwogI2VuZGlmCiAKICAgICAvLyBQcm9jZXNzaW5nIG5vZGVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAppbmRleCA2MWI1YTIw
YjE1NDE5NTc1MDU5MzFkNGZmMTg1ODg2OTExZGIzNmUyLi4zMGI4ZWIzMWM4NDMwOWMyNDNlNjYw
NDgwODU2MTMxZjM3NDdmYzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Ob2RlLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogICAgICAgICBOb2RlVHlwZU9z
Y2lsbGF0b3IsCiAgICAgICAgIE5vZGVUeXBlQXVkaW9CdWZmZXJTb3VyY2UsCiAgICAgICAgIE5v
ZGVUeXBlTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2UsCisgICAgICAgIE5vZGVUeXBlTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uLAogICAgICAgICBOb2RlVHlwZU1lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2UsCiAgICAgICAgIE5vZGVUeXBlSmF2YVNjcmlwdCwKICAgICAgICAgTm9kZVR5cGVCaXF1YWRG
aWx0ZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
NzQ1ZjJmNWYxMWY0MGFiNDZkMDdkZTUyOTc1MjAwMDE2YmU1YWMzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2luY2x1ZGUgIk1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVk
ZSAiTG9jYWxNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyLmgiCisj
aW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCisjaW5jbHVkZSAiVVVJRC5oIgor
I2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IE1lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIHNpemVfdCBudW1iZXJP
ZkNoYW5uZWxzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZShjb250ZXh0LCBudW1iZXJPZkNoYW5uZWxzKSk7Cit9CisKK01lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscykKKyAgICA6IEF1
ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKGNvbnRleHQsIGNvbnRleHQtPnNhbXBsZVJhdGUoKSkKKyAg
ICAsIG1fbWl4QnVzKG51bWJlck9mQ2hhbm5lbHMsIFByb2Nlc3NpbmdTaXplSW5GcmFtZXMpCit7
CisgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb24pOwor
CisgICAgbV9zb3VyY2UgPSBNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKEFTQ0lJTGl0ZXJhbCgi
V2ViQXVkaW8tIikgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIE1lZGlhU3RyZWFtU291
cmNlOjpUeXBlQXVkaW8sICJNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlIiwgTWVkaWFT
dHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGVMaXZlLCB0cnVlKTsKKyAgICBNZWRpYVN0cmVhbVNvdXJj
ZVZlY3RvciBhdWRpb1NvdXJjZXM7CisgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChtX3NvdXJjZSk7
CisgICAgTWVkaWFTdHJlYW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOworICAgIG1fc3RyZWFt
ID0gTG9jYWxNZWRpYVN0cmVhbTo6Y3JlYXRlKGNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXMpOworICAgIE1lZGlhU3RyZWFtQ2VudGVy
OjppbnN0YW5jZSgpLmRpZENyZWF0ZU1lZGlhU3RyZWFtKG1fc3RyZWFtLT5kZXNjcmlwdG9yKCkp
OworCisgICAgaW5pdGlhbGl6ZSgpOworfQorCitNZWRpYVN0cmVhbVNvdXJjZSogTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6bWVkaWFTdHJlYW1Tb3VyY2UoKQoreworICAgIHJldHVy
biBtX3NvdXJjZS5nZXQoKTsKK30KKworTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
fk1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoKQoreworICAgIHVuaW5pdGlhbGl6ZSgp
OworfQorCit2b2lkIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnByb2Nlc3Moc2l6
ZV90IG51bWJlck9mRnJhbWVzKQoreworICAgIG1fbWl4QnVzLmNvcHlGcm9tKCppbnB1dCgwKS0+
YnVzKCkpOworICAgIG1fc291cmNlLT5jb25zdW1lQXVkaW8oJm1fbWl4QnVzLCBudW1iZXJPZkZy
YW1lcyk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVzZXQo
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40YTlhMjc2NWU4YWIwNDllZTRjNTQ2MDg2NWVkZTFiY2Q1NjU1
ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCisjZGVmaW5l
IE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorCisjaWYgRU5BQkxFKFdFQl9BVURJ
TykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlLmgiCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbS5o
IgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKworY2xhc3MgTWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljSW5zcGVjdG9y
Tm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCosIHNpemVfdCBudW1iZXJPZkNoYW5u
ZWxzKTsKKworICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoKTsK
KworICAgIE1lZGlhU3RyZWFtKiBzdHJlYW0oKSB7IHJldHVybiBtX3N0cmVhbS5nZXQoKTsgfQor
CisgICAgLy8gQXVkaW9Ob2RlLgorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIAorICAgIE1lZGlh
U3RyZWFtU291cmNlKiBtZWRpYVN0cmVhbVNvdXJjZSgpOworCitwcml2YXRlOgorICAgIE1lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0Kiwgc2l6ZV90IG51bWJlck9m
Q2hhbm5lbHMpOworCisgICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBBcyBhbiBhdWRpbyBzb3VyY2UsIHdlIHdp
bGwgbmV2ZXIgcHJvcGFnYXRlIHNpbGVuY2UuCisgICAgdmlydHVhbCBib29sIHByb3BhZ2F0ZXNT
aWxlbmNlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbT4gbV9zdHJlYW07CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBtX3Nv
dXJjZTsKKyAgICBBdWRpb0J1cyBtX21peEJ1czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisKKyNlbmRpZiAvLyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MWJiYTQxYWRiMTFjMzkw
Nzk2MWU3MGM1ZDI2YWUwYjk2YzM4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCkBA
IC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElP
Jk1FRElBX1NUUkVBTSwKKyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorXSBpbnRlcmZhY2UgTWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSA6IEF1ZGlvU291cmNlTm9kZSB7CisgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIE1lZGlhU3RyZWFtIHN0cmVhbTsKK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggN2VkZDkzY2RlN2Q1ZmE3ZjhhZTYzZGJmMTBhNDg0MmU2NzgyZDI0OS4uNDYwYzIzOGYwMGFh
ZTZjYTc1NGQzOTJjYjk5ODMxMWM4MWQ4MDliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTE3LDYg
KzkxNyw3IEBACiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNz
b3JOb2RlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmlkbCcsCiAgICAgICAgICAgICAnTW9k
dWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsJywKICAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbCcsCkBAIC0xNzQxLDYgKzE3
NDIsOCBAQAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9k
ZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2Vi
YXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKICAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCcsCiAgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oJywKICAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcAppbmRleCBhNTE2OTM2MTAyMGE0
Zjk5MmZkY2Q3YjZmYzM4M2RiMTg4ZDJhZjlkLi45MzQyYWY3MGYzYzFlYjY4Y2NlNDY2MjUwMWIz
NDcwYWVkMTAwY2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMzQs
NiArMzQsNyBAQAogCiAjaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlLmg+CiAK
KyNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCiAj
aW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CkBAIC0xMjEsNiArMTIyLDcgQEAgcHJpdmF0ZToKIAogV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OkV4
dHJhRGF0YSogV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmV4dHJhRGF0YSgpIGNvbnN0CiB7CisgICAg
QVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOwogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJj
ZTo6RXh0cmFEYXRhPiBkYXRhID0gbV9wcml2YXRlLT5leHRyYURhdGEoKTsKICAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTI5LDkgKzEzMSw2MyBAQCBXZWJNZWRpYVN0cmVh
bVNvdXJjZTo6RXh0cmFEYXRhKiBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6ZXh0cmFEYXRhKCkgY29u
c3QKIAogdm9pZCBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6c2V0RXh0cmFEYXRhKEV4dHJhRGF0YSog
ZXh0cmFEYXRhKQogeworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKICAgICBtX3By
aXZhdGUtPnNldEV4dHJhRGF0YShhZG9wdFJlZihuZXcgRXh0cmFEYXRhQ29udGFpbmVyKGV4dHJh
RGF0YSkpKTsKIH0KIAorYm9vbCBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6cmVxdWlyZXNDb25zdW1l
cigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAgIHJldHVy
biBtX3ByaXZhdGUtPnJlcXVpcmVzQ29uc3VtZXIoKTsKK30KKworY2xhc3MgQ29uc3VtZXJXcmFw
cGVyIDogcHVibGljIFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlQ29uc3VtZXIgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENvbnN1bWVyV3JhcHBlcihXZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1
bWVyKiBjb25zdW1lcikgOiBtX2NvbnN1bWVyKGNvbnN1bWVyKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBjb25zdW1lQXVkaW8oQXVkaW9CdXMqLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpIE9WRVJS
SURFOworCisgICAgV2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lciogY29uc3VtZXIoKSB7IHJl
dHVybiBtX2NvbnN1bWVyOyB9CisKK3ByaXZhdGU6CisgICAgLy8gbV9jb25zdW1lciBpcyBub3Qg
b3duZWQgYnkgdGhpcyBjbGFzcy4KKyAgICBXZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyKiBt
X2NvbnN1bWVyOworfTsKKwordm9pZCBDb25zdW1lcldyYXBwZXI6OmNvbnN1bWVBdWRpbyhBdWRp
b0J1cyogYnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7CisgICAgQVNTRVJUKGJ1cyk7Cisg
ICAgaWYgKCFidXMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdyYXAgQXVkaW9CdXMuCisg
ICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBidXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAg
ICBXZWJLaXQ6OldlYlZlY3Rvcjxjb25zdCBmbG9hdCo+IGJ1c1ZlY3RvcihudW1iZXJPZkNoYW5u
ZWxzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkK
KyAgICAgICAgYnVzVmVjdG9yW2ldID0gYnVzLT5jaGFubmVsKGkpLT5kYXRhKCk7CisKKyAgICBt
X2NvbnN1bWVyLT5jb25zdW1lQXVkaW8oYnVzVmVjdG9yLCBudW1iZXJPZkZyYW1lcyk7Cit9CisK
K3ZvaWQgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmFkZENvbnN1bWVyKFdlYk1lZGlhU3RyZWFtU291
cmNlQ29uc3VtZXIqIGNvbnN1bWVyKQoreworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgp
ICYmIGNvbnN1bWVyKTsKKworICAgIG1fcHJpdmF0ZS0+YWRkQ29uc3VtZXIoYWRvcHRSZWYobmV3
IENvbnN1bWVyV3JhcHBlcihjb25zdW1lcikpKTsKK30KKwordm9pZCBXZWJNZWRpYVN0cmVhbVNv
dXJjZTo6cmVtb3ZlQ29uc3VtZXIoV2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lciogY29uc3Vt
ZXIpCit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkgJiYgY29uc3VtZXIpOworCisg
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyPiA+IGNvbnN1bWVycyA9
IG1fcHJpdmF0ZS0+Y29uc3VtZXJzKCk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPE1lZGlhU3Ry
ZWFtU291cmNlQ29uc3VtZXI+ID46Oml0ZXJhdG9yIGl0ID0gY29uc3VtZXJzLmJlZ2luKCk7IGl0
ICE9IGNvbnN1bWVycy5lbmQoKTsgKytpdCkgeworICAgICAgICBDb25zdW1lcldyYXBwZXIqIHdy
YXBwZXIgPSByZWludGVycHJldF9jYXN0PENvbnN1bWVyV3JhcHBlcio+KCgqaXQpLmdldCgpKTsK
KyAgICAgICAgaWYgKHdyYXBwZXItPmNvbnN1bWVyKCkgPT0gY29uc3VtZXIpCisgICAgICAgICAg
ICBtX3ByaXZhdGUtPnJlbW92ZUNvbnN1bWVyKHdyYXBwZXIpOworICAgIH0KK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1T
b3VyY2UuY3BwCmluZGV4IDE3MjA0ODdkYzEyNTRhNGMyMzQyNGNiMTAwMWVhZjYyOWM5Mjg1MWQu
LjNkNTIzODA5M2YzNDY3MjkxMWRjYjFhYWRjZTgyODA4ZDM4NDE4MzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJj
ZS5jcHAKQEAgLTMzLDE5ICszMywyMSBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNp
bmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4g
TWVkaWFTdHJlYW1Tb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKQorUGFzc1JlZlB0cjxNZWRp
YVN0cmVhbVNvdXJjZT4gTWVkaWFTdHJlYW1Tb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGlk
LCBUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSByZWFkeVN0YXRlLCBi
b29sIHJlcXVpcmVzQ29uc3VtZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0
cmVhbVNvdXJjZShpZCwgdHlwZSwgbmFtZSwgcmVhZHlTdGF0ZSkpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVkaWFTdHJlYW1Tb3VyY2UoaWQsIHR5cGUsIG5hbWUsIHJlYWR5U3RhdGUsIHJl
cXVpcmVzQ29uc3VtZXIpKTsKIH0KIAotTWVkaWFTdHJlYW1Tb3VyY2U6Ok1lZGlhU3RyZWFtU291
cmNlKGNvbnN0IFN0cmluZyYgaWQsIFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFk
eVN0YXRlIHJlYWR5U3RhdGUpCitNZWRpYVN0cmVhbVNvdXJjZTo6TWVkaWFTdHJlYW1Tb3VyY2Uo
Y29uc3QgU3RyaW5nJiBpZCwgVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSwgYm9vbCByZXF1aXJlc0NvbnN1bWVyKQogICAgIDogbV9pZChpZCkKICAg
ICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX3JlYWR5U3RhdGUo
cmVhZHlTdGF0ZSkKKyAgICAsIG1fcmVxdWlyZXNDb25zdW1lcihyZXF1aXJlc0NvbnN1bWVyKQog
ewogfQogCkBAIC03MSw2ICs3MywyNCBAQCB2b2lkIE1lZGlhU3RyZWFtU291cmNlOjpyZW1vdmVP
YnNlcnZlcihNZWRpYVN0cmVhbVNvdXJjZTo6T2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgICAgICBt
X29ic2VydmVycy5yZW1vdmUocG9zKTsKIH0KIAordm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6YWRk
Q29uc3VtZXIoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyPiBjb25zdW1lcikK
K3sKKyAgICBtX2NvbnN1bWVycy5hcHBlbmQoY29uc3VtZXIpOworfQorCit2b2lkIE1lZGlhU3Ry
ZWFtU291cmNlOjpyZW1vdmVDb25zdW1lcihNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyKiBjb25z
dW1lcikKK3sKKyAgICBzaXplX3QgcG9zID0gbV9jb25zdW1lcnMuZmluZChjb25zdW1lcik7Cisg
ICAgaWYgKHBvcyAhPSBub3RGb3VuZCkKKyAgICAgICAgbV9jb25zdW1lcnMucmVtb3ZlKHBvcyk7
Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVz
LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPE1lZGlh
U3RyZWFtU291cmNlQ29uc3VtZXI+ID46Oml0ZXJhdG9yIGl0ID0gbV9jb25zdW1lcnMuYmVnaW4o
KTsgaXQgIT0gbV9jb25zdW1lcnMuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQpLT5jb25zdW1l
QXVkaW8oYnVzLCBudW1iZXJPZkZyYW1lcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaAppbmRleCBiZjcx
MTBlZGMwOTA5MzUzZWYxOTU5YTBkOTRkYTY0ZTgyMzYzNjdjLi4yMDM4ZjljNGE2YjdhZDhhNjk4
MWVmZmFkMzBhNTZjM2Q0Njk2YmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgKQEAgLTQwLDYgKzQwLDE2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXVkaW9CdXM7CitjbGFzcyBSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXI7CisKK2NsYXNzIE1lZGlhU3RyZWFtU291cmNlQ29uc3VtZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyPiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+TWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lcigpIHsgfQorCisgICAgdmlydHVh
bCB2b2lkIGNvbnN1bWVBdWRpbyhBdWRpb0J1cyosIHNpemVfdCBudW1iZXJPZkZyYW1lcykgPSAw
OworfTsKKwogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRp
YVN0cmVhbVNvdXJjZT4gewogcHVibGljOgogICAgIGNsYXNzIE9ic2VydmVyIHsKQEAgLTY0LDcg
Kzc0LDcgQEAgcHVibGljOgogICAgICAgICBSZWFkeVN0YXRlRW5kZWQgPSAyCiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBpZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlID0gUmVhZHlTdGF0
ZUxpdmUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBpZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlID0g
UmVhZHlTdGF0ZUxpdmUsIGJvb2wgcmVxdWlyZXNDb25zdW1lciA9IGZhbHNlKTsKIAogICAgIGNv
bnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkBAIC03OSwxNCArODksMjMgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBleHRyYURhdGEoKSBjb25zdCB7IHJldHVybiBtX2V4dHJh
RGF0YTsgfQogICAgIHZvaWQgc2V0RXh0cmFEYXRhKFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBleHRy
YURhdGEpIHsgbV9leHRyYURhdGEgPSBleHRyYURhdGE7IH0KIAorICAgIHZvaWQgY29uc3VtZUF1
ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKKworICAgIGJvb2wgcmVxdWly
ZXNDb25zdW1lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNDb25zdW1lcjsgfQorICAgIHZv
aWQgYWRkQ29uc3VtZXIoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyPik7Cisg
ICAgdm9pZCByZW1vdmVDb25zdW1lcihNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyKik7CisgICAg
VmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyPiA+IGNvbnN1bWVycygpIHsg
cmV0dXJuIG1fY29uc3VtZXJzOyB9CisKIHByaXZhdGU6Ci0gICAgTWVkaWFTdHJlYW1Tb3VyY2Uo
Y29uc3QgU3RyaW5nJiBpZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlKTsK
KyAgICBNZWRpYVN0cmVhbVNvdXJjZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJp
bmcmIG5hbWUsIFJlYWR5U3RhdGUsIGJvb2wgcmVxdWlyZXNDb25zdW1lcik7CiAKICAgICBTdHJp
bmcgbV9pZDsKICAgICBUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFJlYWR5
U3RhdGUgbV9yZWFkeVN0YXRlOworICAgIGJvb2wgbV9yZXF1aXJlc0NvbnN1bWVyOwogICAgIFZl
Y3RvcjxPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2VDb25zdW1lcj4gPiBtX2NvbnN1bWVyczsKICAgICBSZWZQdHI8RXh0cmFEYXRhPiBt
X2V4dHJhRGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwCmluZGV4IDg1
MDlmMmU5NDI3NTY4YmE2Mjc5OTgwZGEzNjBjNjFmMWE0NWM0NTMuLjhiYjQwZmZjM2E0NWQzNWMw
YzczOWNjYzc1NGYwOGUwZThjMDg3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNw
cApAQCAtMTQ1LDYgKzE0NSwxMCBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckR1bW15
OjpzdG9wKCkKIHsKIH0KIAordm9pZCBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJEdW1teTo6Y29u
c3VtZUF1ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90KQoreworfQorCiBib29sIFJUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlckR1bW15OjpvcGVuRGF0YUNoYW5uZWwoUGFzc1JlZlB0cjxSVENEYXRhQ2hhbm5l
bERlc2NyaXB0b3I+KQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0MGYyNzg0ODMzNzFlYjM2YzA3MTY2NzYw
NDcwNzg1YjI1Nzc2MDEzLi4wOTgwODVlOWU3MTk5ODNkYTZhYTE2M2E2ZmM4M2Q3YzI2MTQ4ZGU2
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTItMTEtMTkgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQWRkIGJhc2ljIGltcGxlbWVudGF0aW9uIGZvciBNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDE4MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRzIGEgYml0IG9mIGNvZGUgdGhhdCBleGVyY2lzZXMgdGhlIFdlYktp
dCBBUEkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViTWVkaWFT
dHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoTW9ja1dlYk1lZGlhU3RyZWFtU291cmNlQ29uc3Vt
ZXIpOgorICAgICAgICAoTW9ja1dlYk1lZGlhU3RyZWFtU291cmNlQ29uc3VtZXI6On5Nb2NrV2Vi
TWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lcik6CisgICAgICAgIChNb2NrV2ViTWVkaWFTdHJlYW1D
ZW50ZXI6OmRpZENyZWF0ZU1lZGlhU3RyZWFtKToKKwogMjAxMi0xMS0xOCAgS3l1bmdUYWUgS2lt
ICA8a3RmLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBOb3QgdG8gaW5jbHVkZSAi
ZXdrX3ZpZXdfcHJpdmF0ZS5oIiBpbiBUb29scwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJNZWRpYVN0cmVhbUNlbnRlci5jcHAKaW5kZXggYjcx
NzhmMDk5MTQ2NmJlYWJmMDYwMzY5ZGVjZjU1NTBhNTgxMzBhNS4uYTI2ZTZlM2UyNzhjNGQ0MDM5
YjE1YWViMGI2ZjljYWY4MGExNWViZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuY3BwCkBAIC04NSw4ICs4
NSwyNSBAQCB2b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkU3RvcExvY2FsTWVkaWFT
dHJlYW0oY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcgogICAgICAgICB2aWRlb0NvbXBvbmVudHNb
aV0uc291cmNlKCkuc2V0UmVhZHlTdGF0ZShXZWJNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0
ZUVuZGVkKTsKIH0KIAotdm9pZCBNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6OmRpZENyZWF0ZU1l
ZGlhU3RyZWFtKFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpCitjbGFzcyBNb2NrV2ViTWVkaWFT
dHJlYW1Tb3VyY2VDb25zdW1lciA6IHB1YmxpYyBXZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Nb2NrV2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1l
cigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lQXVkaW8oY29uc3QgV2ViVmVjdG9yPGNv
bnN0IGZsb2F0Kj4mLCBzaXplX3QgbnVtYmVyX29mX2ZyYW1lcykgT1ZFUlJJREUgeyB9Cit9Owor
Cit2b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkQ3JlYXRlTWVkaWFTdHJlYW0oV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBzdHJlYW0pCiB7CisgICAgV2ViVmVjdG9yPFdlYk1lZGlh
U3RyZWFtQ29tcG9uZW50PiBhdWRpb0NvbXBvbmVudHM7CisgICAgc3RyZWFtLmF1ZGlvU291cmNl
cyhhdWRpb0NvbXBvbmVudHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Db21w
b25lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYk1lZGlhU3RyZWFtU291cmNlIHNvdXJj
ZSA9IGF1ZGlvQ29tcG9uZW50c1tpXS5zb3VyY2UoKTsKKyAgICAgICAgaWYgKHNvdXJjZS5yZXF1
aXJlc0NvbnN1bWVyKCkpIHsKKyAgICAgICAgICAgIE1vY2tXZWJNZWRpYVN0cmVhbVNvdXJjZUNv
bnN1bWVyKiBjb25zdW1lciA9IG5ldyBNb2NrV2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lcigp
OworICAgICAgICAgICAgc291cmNlLmFkZENvbnN1bWVyKGNvbnN1bWVyKTsKKyAgICAgICAgICAg
IHNvdXJjZS5yZW1vdmVDb25zdW1lcihjb25zdW1lcik7CisgICAgICAgICAgICBkZWxldGUgY29u
c3VtZXI7CisgICAgICAgIH0KKyAgICB9CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDk5YWJhM2ViYjc0MGI1ODg4MDA4MjJjYTY0YTJhYTU4MDU5NTU4NDYuLjUy
MjgwNDQzY2ViYmJlYzhlZmFiNDVmOGI4ZmI4MjVkNjk5NzI0ZjUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxMi0xMS0xOSAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4K
KworICAgICAgICBBZGQgYmFzaWMgaW1wbGVtZW50YXRpb24gZm9yIE1lZGlhU3RyZWFtQXVkaW9E
ZXN0aW5hdGlvbk5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMTgxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5h
dGlvbm5vZGUuaHRtbDogQWRkZWQuCisKIDIwMTItMTEtMTkgIENocmlzdG9waGUgRHVtZXogIDxj
aHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBVcGRhdGUgZXhwZWN0
YXRpb24gZm9yIGZhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy5odG1sIGFmdGVyIHIxMzUwOTMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5h
dGlvbm5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1h
dWRpb2Rlc3RpbmF0aW9ubm9kZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg5Y2MwOTFjNzEy
YmI1NzRjMjE5YTg0ZGY0YWNjZTNlYTg1YzQyZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsOSBAQAorQmFzaWMgdGVzdHMgZm9yIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5h
dGlvbk5vZGUgQVBJLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgRGVzdGlu
YXRpb24gQXVkaW9Ob2RlIGhhcyBvbmUgaW5wdXQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4
YmE4NGUxNWQ4MDliYmIwMDFjZDk3NzBiYTJlMTNjYTE4MTQwOTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlvZGVzdGluYXRpb25ub2RlLmh0
bWwKQEAgLTAsMCArMSw1MiBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJCYXNpYyB0ZXN0cyBmb3Ig
TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSBBUEkuIik7CisKK3ZhciBjb250ZXh0ID0g
MDsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
KyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgfQorCisgICAgY29udGV4dCA9
IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsKKworICAgIHZhciBtZWRpYVN0cmVhbURlc3RpbmF0
aW9uID0gY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7CisKKyAgICAvLyBD
aGVjayBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzLgorICAgIGlmIChtZWRpYVN0cmVhbURl
c3RpbmF0aW9uLm51bWJlck9mSW5wdXRzID09IDEpCisgICAgICAgIHRlc3RQYXNzZWQoIkRlc3Rp
bmF0aW9uIEF1ZGlvTm9kZSBoYXMgb25lIGlucHV0LiIpOworICAgIGVsc2UKKyAgICAgICAgdGVz
dEZhaWxlZCgiRGVzdGluYXRpb24gQXVkaW9Ob2RlIHNob3VsZCBoYXZlIG9uZSBpbnB1dC4iKTsK
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBubyBvdXRwdXRzLCBidXQgc2luY2Ugd2Un
cmUgaW1wbGVtZW50ZWQgdXNpbmcgQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUKKyAgICAvLyB3ZSBo
YXZlIG9uZS4KKyAgICAvLyBpZiAobWVkaWFTdHJlYW1EZXN0aW5hdGlvbi5udW1iZXJPZk91dHB1
dHMgPT0gMCkKKyAgICAvLyAgICAgdGVzdFBhc3NlZCgiRGVzdGluYXRpb24gQXVkaW9Ob2RlIGhh
cyBubyBvdXRwdXRzLiIpOworICAgIC8vIGVsc2UKKyAgICAvLyAgICAgdGVzdEZhaWxlZCgiRGVz
dGluYXRpb24gQXVkaW9Ob2RlIHNob3VsZCBub3QgaGF2ZSBvdXRwdXRzLiIpOworCisgICAgLy8g
RklYTUU6IGFkZCBhIHRlc3Qgd2hlcmUgd2UgY3JlYXRlIGEgUGVlckNvbm5lY3Rpb24gYW5kIGNh
bGwgYWRkU3RyZWFtKG1lZGlhU3RyZWFtRGVzdGluYXRpb24uc3RyZWFtKS4KKyAgICAKKyAgICBm
aW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgpOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175226</attachid>
            <date>2012-11-20 08:38:20 -0800</date>
            <delta_ts>2012-11-26 02:53:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101815-20121120173608.patch</filename>
            <type>text/plain</type>
            <size>36655</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0M2NmZDA3MzhkZTM0
MTM5NWEyOWVkZTY5MWM5YjVlYjRkOTliODIxLi4yOTdkMTE3MmRkMzk4MWMwZDFlNzM5YTBmOTIy
N2ZmMDViYTBlZWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0yMCAg
VG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgYmFz
aWMgaW1wbGVtZW50YXRpb24gZm9yIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgxNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhlIGNv
bnN1bWVyIGludGVyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRvIFdlYk1lZGlhU3Ry
ZWFtU291cmNlLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkF1ZGlvRGVzdGluYXRp
b25Db25zdW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJBdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXI6On5XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYk1lZGlhU3RyZWFtU291cmNlKToKKwogMjAxMi0xMS0xNiAgRGFuYSBKYW5z
ZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBjb252
ZXJzaW9uIGJldHdlZW4gV2ViVHJhbnNmb3JtYXRpb24gYW5kIGdmeDo6VHJhbnNmb3JtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZmU3NDU3YzFhM2M5ZjhiMTNmYTNjNzM4ZWQ1NTA5YzQyNTdkMWZkYS4uMGIxZmYw
ZDJkOTIwYjZhMWQ4OWI5YTZiZGU4NzI3ZGY0Y2JiNmJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY4IEBACisyMDEyLTExLTIwICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29t
PgorCisgICAgICAgIEFkZCBiYXNpYyBpbXBsZW1lbnRhdGlvbiBmb3IgTWVkaWFTdHJlYW1BdWRp
b0Rlc3RpbmF0aW9uTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAxODE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW1wbGVtZW50cyBhbiBhdWRpbyBkZXN0aW5hdGlvbiBub2RlIHdoaWNoIGhhcyBh
IE1lZGlhU3RyZWFtLgorICAgICAgICBUaGlzIGNhbiBiZSBhZGRlZCB0byBhIFBlZXJDb25uZWN0
aW9uIHdpdGggcGVlckNvbm5lY3Rpb24uYWRkU3RyZWFtKCkuCisgICAgICAgIFBsZWFzZSBzZWUg
dXNlIGNhc2UgKDMpOgorICAgICAgICBodHRwczovL2R2Y3MudzMub3JnL2hnL2F1ZGlvL3Jhdy1m
aWxlL3RpcC93ZWJhdWRpby93ZWJydGMtaW50ZWdyYXRpb24uaHRtbAorCisgICAgICAgIFRlc3Q6
IHdlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUuaHRtbAorCisgICAgICAg
ICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGlu
YXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Ob2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGU6Om1lZGlhU3RyZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6On5NZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGU6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6cmVzZXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzdHJlYW0pOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGw6IEFkZGVk
LgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyOjp+QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmV4dHJhRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtU291cmNlOjpzZXRFeHRyYURhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVNvdXJjZTo6cmVxdWlyZXNBdWRpb0NvbnN1bWVy
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb25zdW1lcldyYXBwZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDb25zdW1lcldyYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNv
bnN1bWVyV3JhcHBlcjo6Y29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0OjpDb25zdW1lcldyYXBw
ZXI6OkNvbnN1bWVyV3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6OkNvbnN1bWVyV3JhcHBlcjo6
Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmFk
ZEF1ZGlvQ29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVNvdXJjZTo6
cmVtb3ZlQXVkaW9Db25zdW1lcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6TWVkaWFTdHJl
YW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OmFkZEF1ZGlv
Q29uc3VtZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0
cmVhbVNvdXJjZTo6cmVtb3ZlQXVkaW9Db25zdW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbVNvdXJjZTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChN
ZWRpYVN0cmVhbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6
cmVxdWlyZXNBdWRpb0NvbnN1bWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291
cmNlOjphdWRpb0NvbnN1bWVycyk6CisKIDIwMTItMTEtMTkgIEtlbnRhcm8gSGFyYSAgPGhhcmFr
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzUx
MTQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkF1ZGlv
RGVzdGluYXRpb25Db25zdW1lci5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQ1MWFkNjE5ZWYwYTQw
ZmM5Zjc5YWNmMjVmYjRhZjgzMzA5MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaApAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkF1ZGlvRGVzdGluYXRpb25Db25z
dW1lcl9oCisjZGVmaW5lIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCisKKyNpbmNsdWRl
ICJXZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkF1ZGlvRGVz
dGluYXRpb25Db25zdW1lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViQXVkaW9EZXN0aW5h
dGlvbkNvbnN1bWVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZUF1ZGlvKGNvbnN0
IFdlYlZlY3Rvcjxjb25zdCBmbG9hdCo+Jiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKSA9IDA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkF1ZGlvRGVzdGluYXRp
b25Db25zdW1lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYk1lZGlhU3RyZWFtU291cmNlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYk1lZGlhU3RyZWFtU291cmNlLmgKaW5kZXggM2E5NzJmMWQ4NTU0YzI4MTA1YzhkYzQ4Zjdj
MDEzMzI5MDUzZDI3MC4uNGI4MjcxZWVkMTNhMzc5ZDk5Yjg0Y2E2OWY2NzZkMTZlZmVkYzdjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVh
bVNvdXJjZS5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFT
dHJlYW1Tb3VyY2UuaApAQCAtMzQsMTMgKzM0LDE0IEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgi
CiAjaW5jbHVkZSAiV2ViTm9uQ29weWFibGUuaCIKICNpbmNsdWRlICJXZWJQcml2YXRlUHRyLmgi
CisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE1l
ZGlhU3RyZWFtU291cmNlOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLQorY2xhc3MgV2ViQXVk
aW9EZXN0aW5hdGlvbkNvbnN1bWVyOwogY2xhc3MgV2ViU3RyaW5nOwogCiBjbGFzcyBXZWJNZWRp
YVN0cmVhbVNvdXJjZSB7CkBAIC05MSw2ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VY
UE9SVCBFeHRyYURhdGEqIGV4dHJhRGF0YSgpIGNvbnN0OwogICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXRFeHRyYURhdGEoRXh0cmFEYXRhKik7CiAKKyAgICAvLyBPbmx5IHVzZWQgaWYgaWYgdGhp
cyBpcyBhIFdlYkF1ZGlvIHNvdXJjZS4KKyAgICAvLyBUaGUgV2ViQXVkaW9EZXN0aW5hdGlvbkNv
bnN1bWVyIGlzIG5vdCBvd25lZCwgYW5kIGhhcyB0byBiZSBkaXNwb3NlZCBvZiBzZXBhcmF0ZWx5
LgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCByZXF1aXJlc0F1ZGlvQ29uc3VtZXIoKSBjb25zdDsK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkQXVkaW9Db25zdW1lcihXZWJBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXIqKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgcmVtb3ZlQXVkaW9Db25zdW1l
cihXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqKTsKKwogI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgogICAgIFdlYk1lZGlhU3RyZWFtU291cmNlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpNZWRpYVN0cmVhbVNvdXJjZT4mKTsKICAgICBXZWJNZWRpYVN0cmVhbVNvdXJjZSYgb3Bl
cmF0b3I9KFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggYTcyYjRmMjJkMDRiNDE0
ZmM3NzMwMTY2YmFmMDUxYzE3MjRmMTkxYi4uMjZlNWQxOGY3MDdmYzYwY2E5NjU0OWU3NjQ3N2Rl
OTBhY2Q2MGMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcApAQCAtNjMsNiArNjMsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5o
IgogI2VuZGlmCiAKQEAgLTQzMCw2ICs0MzEsMTQgQEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1
ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWQK
ICAgICByZWZOb2RlKG5vZGUuZ2V0KCkpOyAvLyBjb250ZXh0IGtlZXBzIHJlZmVyZW5jZSB1bnRp
bCBub2RlIGlzIGRpc2Nvbm5lY3RlZAogICAgIHJldHVybiBub2RlOwogfQorCitQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVk
aWFTdHJlYW1EZXN0aW5hdGlvbigpCit7CisgICAgLy8gRklYTUU6IHN1cHBvcnQgb3B0aW9uYWwg
YXJndW1lbnQgZm9yIG51bWJlciBvZiBjaGFubmVscy4KKyAgICAvLyBGSVhNRTogZGVmYXVsdCBz
aG91bGQgcHJvYmFibHkgYmUgc3RlcmVvLgorICAgIHJldHVybiBNZWRpYVN0cmVhbUF1ZGlvRGVz
dGluYXRpb25Ob2RlOjpjcmVhdGUodGhpcywgMSk7Cit9CisKICNlbmRpZgogCiBQYXNzUmVmUHRy
PFNjcmlwdFByb2Nlc3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0UHJvY2Vzc29y
KHNpemVfdCBidWZmZXJTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDgwNDZhY2M5ODI4MTVhZTk1
YTRiZmMyMTg2NWI0ODRhNzBiNGRkM2QuLjZkYTNjMTJhOWY1ZWQzNTBkNDM5ZmQ4ZjkwNTFiZWJl
NDZjMTcxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Nv
bnRleHQuaApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBBdWRpb0J1ZmZlcjsKIGNsYXNzIEF1ZGlv
QnVmZmVyQ2FsbGJhY2s7CiBjbGFzcyBBdWRpb0J1ZmZlclNvdXJjZU5vZGU7CiBjbGFzcyBNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU7CitjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlOwogY2xhc3MgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU7CiBjbGFzcyBIVE1MTWVk
aWFFbGVtZW50OwogY2xhc3MgQ2hhbm5lbE1lcmdlck5vZGU7CkBAIC0xMTgsNiArMTE5LDcgQEAg
cHVibGljOgogI2VuZGlmCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRp
YVN0cmVhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGU+IGNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKTsKICNlbmRp
ZgogICAgIFBhc3NSZWZQdHI8R2Fpbk5vZGU+IGNyZWF0ZUdhaW4oKTsKICAgICBQYXNzUmVmUHRy
PEJpcXVhZEZpbHRlck5vZGU+IGNyZWF0ZUJpcXVhZEZpbHRlcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmluZGV4IDE3MzMxM2Y5NWVk
ZmY2M2NkODAwODQ4YjBmODE2MjZjMTJmMDBhYjQuLmYyZDhmNGMyYjBiMDlmN2MwYjIyNmI5YTU2
ZDE2NjUxMmRkNDAzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5pZGwKQEAgLTY2LDYgKzY2LDcgQEAKICNpZiBkZWZpbmVkKEVOQUJMRV9N
RURJQV9TVFJFQU0pICYmIEVOQUJMRV9NRURJQV9TVFJFQU0KICAgICBNZWRpYVN0cmVhbUF1ZGlv
U291cmNlTm9kZSBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShpbiBNZWRpYVN0cmVhbSBtZWRpYVN0
cmVhbSkKICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgTWVkaWFTdHJlYW1BdWRp
b0Rlc3RpbmF0aW9uTm9kZSBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7CiAjZW5kaWYK
IAogICAgIC8vIFByb2Nlc3Npbmcgbm9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvTm9kZS5oCmluZGV4IDYxYjVhMjBiMTU0MTk1NzUwNTkzMWQ0ZmYxODU4ODY5MTFk
YjM2ZTIuLjMwYjhlYjMxYzg0MzA5YzI0M2U2NjA0ODA4NTYxMzFmMzc0N2ZjNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaApAQCAtNjQsNiArNjQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIE5vZGVUeXBlT3NjaWxsYXRvciwKICAgICAgICAgTm9kZVR5cGVB
dWRpb0J1ZmZlclNvdXJjZSwKICAgICAgICAgTm9kZVR5cGVNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZSwKKyAgICAgICAgTm9kZVR5cGVNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb24sCiAgICAgICAg
IE5vZGVUeXBlTWVkaWFTdHJlYW1BdWRpb1NvdXJjZSwKICAgICAgICAgTm9kZVR5cGVKYXZhU2Ny
aXB0LAogICAgICAgICBOb2RlVHlwZUJpcXVhZEZpbHRlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3NDVmMmY1ZjExZjQwYWI0NmQwN2RlNTI5NzUy
MDAwMTZiZTVhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC0wLDAgKzEsODQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FV
RElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVk
ZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRlICJMb2NhbE1lZGlhU3RyZWFtLmgiCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkhh
bmRsZXIuaCIKKyNpbmNsdWRlICJVVUlELmgiCisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uTm9kZT4gTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKEF1ZGlvQ29u
dGV4dCogY29udGV4dCwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIG51bWJl
ck9mQ2hhbm5lbHMpKTsKK30KKworTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6TWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIHNpemVf
dCBudW1iZXJPZkNoYW5uZWxzKQorICAgIDogQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUoY29udGV4
dCwgY29udGV4dC0+c2FtcGxlUmF0ZSgpKQorICAgICwgbV9taXhCdXMobnVtYmVyT2ZDaGFubmVs
cywgUHJvY2Vzc2luZ1NpemVJbkZyYW1lcykKK3sKKyAgICBzZXROb2RlVHlwZShOb2RlVHlwZU1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbik7CisKKyAgICBtX3NvdXJjZSA9IE1lZGlhU3RyZWFt
U291cmNlOjpjcmVhdGUoQVNDSUlMaXRlcmFsKCJXZWJBdWRpby0iKSArIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbywgIk1lZGlhU3RyZWFt
QXVkaW9EZXN0aW5hdGlvbk5vZGUiLCBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUxpdmUs
IHRydWUpOworICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNlczsKKyAgICBh
dWRpb1NvdXJjZXMuYXBwZW5kKG1fc291cmNlKTsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3Rv
ciB2aWRlb1NvdXJjZXM7CisgICAgbV9zdHJlYW0gPSBMb2NhbE1lZGlhU3RyZWFtOjpjcmVhdGUo
Y29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBhdWRpb1NvdXJjZXMsIHZpZGVvU291
cmNlcyk7CisgICAgTWVkaWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlKCkuZGlkQ3JlYXRlTWVkaWFT
dHJlYW0obV9zdHJlYW0tPmRlc2NyaXB0b3IoKSk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisK
K01lZGlhU3RyZWFtU291cmNlKiBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjptZWRp
YVN0cmVhbVNvdXJjZSgpCit7CisgICAgcmV0dXJuIG1fc291cmNlLmdldCgpOworfQorCitNZWRp
YVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZSgpCit7CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgTWVkaWFTdHJlYW1BdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7CisgICAg
bV9taXhCdXMuY29weUZyb20oKmlucHV0KDApLT5idXMoKSk7CisgICAgbV9zb3VyY2UtPmNvbnN1
bWVBdWRpbygmbV9taXhCdXMsIG51bWJlck9mRnJhbWVzKTsKK30KKwordm9pZCBNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZXNldCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhOWEyNzY1
ZThhYjA0OWVlNGM1NDYwODY1ZWRlMWJjZDU2NTVmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRpYVN0cmVhbUF1
ZGlvRGVzdGluYXRpb25Ob2RlX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZV9oCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
CisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb0J1
cy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQXVkaW9Db250ZXh0OworCitjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2Rl
IDogcHVibGljIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9D
b250ZXh0Kiwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgdmlydHVhbCB+TWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSgpOworCisgICAgTWVkaWFTdHJlYW0qIHN0cmVhbSgp
IHsgcmV0dXJuIG1fc3RyZWFtLmdldCgpOyB9CisKKyAgICAvLyBBdWRpb05vZGUuCisgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2
b2lkIHJlc2V0KCk7CisgICAgCisgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIG1lZGlhU3RyZWFtU291
cmNlKCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShB
dWRpb0NvbnRleHQqLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICB2aXJ0dWFsIGRv
dWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKworICAg
IC8vIEFzIGFuIGF1ZGlvIHNvdXJjZSwgd2Ugd2lsbCBuZXZlciBwcm9wYWdhdGUgc2lsZW5jZS4K
KyAgICB2aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1NpbGVuY2UoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBtX3N0cmVhbTsKKyAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IG1fc291cmNlOworICAgIEF1ZGlvQnVzIG1fbWl4QnVz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzcxYmJhNDFhZGIxMWMzOTA3OTYxZTcwYzVkMjZhZTBiOTZjMzgyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1sKKyAgICBDb25kaXRpb25hbD1XRUJfQVVESU8mTUVESUFfU1RSRUFNLAorICAgIEpTR2VuZXJh
dGVUb0pTT2JqZWN0CitdIGludGVyZmFjZSBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2Rl
IDogQXVkaW9Tb3VyY2VOb2RlIHsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVkaWFTdHJlYW0g
c3RyZWFtOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3ZWRkOTNjZGU3ZDVmYTdmOGFlNjNkYmYx
MGE0ODQyZTY3ODJkMjQ5Li40NjBjMjM4ZjAwYWFlNmNhNzU0ZDM5MmNiOTk4MzExYzgxZDgwOWJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC05MTcsNiArOTE3LDcgQEAKICAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsJywKICAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuaWRsJywKICAgICAgICAgICAgICdN
b2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5p
ZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJj
ZU5vZGUuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudC5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vT3NjaWxs
YXRvck5vZGUuaWRsJywKQEAgLTE3NDEsNiArMTc0Miw4IEBACiAgICAgICAgICAgICAnTW9kdWxl
cy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCcsCiAgICAgICAgICAgICAn
TW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNw
cCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGUuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlh
U3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb25Db25zdW1lci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVjYmEwOGZmYzg4Yjc4YTNkNjYzZTUzMGZlMTE2Yjc0YmM2N2MwNzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uQ29u
c3VtZXIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0Rlc3RpbmF0aW9u
Q29uc3VtZXJfaAorI2RlZmluZSBBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJfaAorCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRp
b0J1czsKKworY2xhc3MgQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyIDogcHVibGljIFJlZkNvdW50
ZWQ8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QXVk
aW9EZXN0aW5hdGlvbkNvbnN1bWVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZUF1
ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKSA9IDA7Cit9OworCit9IC8vIFdl
YkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFt
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
TWVkaWFTdHJlYW1Tb3VyY2UuY3BwCmluZGV4IGE1MTY5MzYxMDIwYTRmOTkyZmRjZDdiNmZjMzgz
ZGIxODhkMmFmOWQuLmJjZDNhYWJjNjg5OWZmZGE4MDc2Y2U4NmJkYTRmYTcxNjk5ZDc4MjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVk
aWFTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCw3ICszNCw5IEBACiAKICNp
bmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaD4KIAorI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlN0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgpAQCAtMTIxLDYgKzEyMyw3IEBAIHByaXZhdGU6CiAKIFdlYk1lZGlhU3RyZWFtU291cmNlOjpF
eHRyYURhdGEqIFdlYk1lZGlhU3RyZWFtU291cmNlOjpleHRyYURhdGEoKSBjb25zdAogeworICAg
IEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3Vy
Y2U6OkV4dHJhRGF0YT4gZGF0YSA9IG1fcHJpdmF0ZS0+ZXh0cmFEYXRhKCk7CiAgICAgaWYgKCFk
YXRhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEyOSw5ICsxMzIsNzAgQEAgV2ViTWVkaWFTdHJl
YW1Tb3VyY2U6OkV4dHJhRGF0YSogV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmV4dHJhRGF0YSgpIGNv
bnN0CiAKIHZvaWQgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnNldEV4dHJhRGF0YShFeHRyYURhdGEq
IGV4dHJhRGF0YSkKIHsKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7CiAgICAgbV9w
cml2YXRlLT5zZXRFeHRyYURhdGEoYWRvcHRSZWYobmV3IEV4dHJhRGF0YUNvbnRhaW5lcihleHRy
YURhdGEpKSk7CiB9CiAKK2Jvb2wgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnJlcXVpcmVzQXVkaW9D
b25zdW1lcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPnJlcXVpcmVzQXVkaW9Db25zdW1lcigpOworfQorCitjbGFzcyBD
b25zdW1lcldyYXBwZXIgOiBwdWJsaWMgV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb25zdW1lcldyYXBwZXI+IGNyZWF0
ZShXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqIGNvbnN1bWVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDb25zdW1lcldyYXBwZXIoY29uc3VtZXIpKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZUF1ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9m
RnJhbWVzKSBPVkVSUklERTsKKworICAgIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29u
c3VtZXIoKSB7IHJldHVybiBtX2NvbnN1bWVyOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
Q29uc3VtZXJXcmFwcGVyKFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIpIDog
bV9jb25zdW1lcihjb25zdW1lcikgeyB9CisKKyAgICAvLyBtX2NvbnN1bWVyIGlzIG5vdCBvd25l
ZCBieSB0aGlzIGNsYXNzLgorICAgIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogbV9jb25z
dW1lcjsKK307CisKK3ZvaWQgQ29uc3VtZXJXcmFwcGVyOjpjb25zdW1lQXVkaW8oQXVkaW9CdXMq
IGJ1cywgc2l6ZV90IG51bWJlck9mRnJhbWVzKQoreworICAgIGlmICghYnVzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBXcmFwIEF1ZGlvQnVzLgorICAgIHNpemVfdCBudW1iZXJPZkNoYW5u
ZWxzID0gYnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgV2ViS2l0OjpXZWJWZWN0b3I8Y29u
c3QgZmxvYXQqPiBidXNWZWN0b3IobnVtYmVyT2ZDaGFubmVscyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCisgICAgICAgIGJ1c1ZlY3RvcltpXSA9
IGJ1cy0+Y2hhbm5lbChpKS0+ZGF0YSgpOworCisgICAgbV9jb25zdW1lci0+Y29uc3VtZUF1ZGlv
KGJ1c1ZlY3RvciwgbnVtYmVyT2ZGcmFtZXMpOworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtU291
cmNlOjphZGRBdWRpb0NvbnN1bWVyKFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3Vt
ZXIpCit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkgJiYgY29uc3VtZXIpOworCisg
ICAgbV9wcml2YXRlLT5hZGRBdWRpb0NvbnN1bWVyKENvbnN1bWVyV3JhcHBlcjo6Y3JlYXRlKGNv
bnN1bWVyKSk7Cit9CisKK2Jvb2wgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnJlbW92ZUF1ZGlvQ29u
c3VtZXIoV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKiBjb25zdW1lcikKK3sKKyAgICBBU1NF
UlQoIW1fcHJpdmF0ZS5pc051bGwoKSAmJiBjb25zdW1lcik7CisKKyAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcj4gPiYgY29uc3VtZXJzID0gbV9wcml2YXRl
LT5hdWRpb0NvbnN1bWVycygpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXI+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29uc3VtZXJzLmJlZ2luKCk7IGl0
ICE9IGNvbnN1bWVycy5lbmQoKTsgKytpdCkgeworICAgICAgICBSZWZQdHI8Q29uc3VtZXJXcmFw
cGVyPiB3cmFwcGVyID0gc3RhdGljX2Nhc3Q8Q29uc3VtZXJXcmFwcGVyKj4oKCppdCkuZ2V0KCkp
OworICAgICAgICBpZiAod3JhcHBlci0+Y29uc3VtZXIoKSA9PSBjb25zdW1lcikgeworICAgICAg
ICAgICAgbV9wcml2YXRlLT5yZW1vdmVBdWRpb0NvbnN1bWVyKHdyYXBwZXIuZ2V0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggMTcyMDQ4N2RjMTI1NGE0YzIzNDI0Y2IxMDAx
ZWFmNjI5YzkyODUxZC4uYzkzZDgxODdiMmNiNmM5ZDdjNDZmMzQ5YTc5NDc3MWExYTJmNTcyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMzMsMTkgKzMzLDIxIEBACiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKIAogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPE1lZGlh
U3RyZWFtU291cmNlPiBNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaWQs
IFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCitQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgaWQsIFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRl
IHJlYWR5U3RhdGUsIGJvb2wgcmVxdWlyZXNDb25zdW1lcikKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lZGlhU3RyZWFtU291cmNlKGlkLCB0eXBlLCBuYW1lLCByZWFkeVN0YXRlKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbVNvdXJjZShpZCwgdHlwZSwgbmFtZSwg
cmVhZHlTdGF0ZSwgcmVxdWlyZXNDb25zdW1lcikpOwogfQogCi1NZWRpYVN0cmVhbVNvdXJjZTo6
TWVkaWFTdHJlYW1Tb3VyY2UoY29uc3QgU3RyaW5nJiBpZCwgVHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIG5hbWUsIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK01lZGlhU3RyZWFtU291cmNlOjpNZWRp
YVN0cmVhbVNvdXJjZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSwgUmVhZHlTdGF0ZSByZWFkeVN0YXRlLCBib29sIHJlcXVpcmVzQ29uc3VtZXIpCiAgICAg
OiBtX2lkKGlkKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAs
IG1fcmVhZHlTdGF0ZShyZWFkeVN0YXRlKQorICAgICwgbV9yZXF1aXJlc0NvbnN1bWVyKHJlcXVp
cmVzQ29uc3VtZXIpCiB7CiB9CiAKQEAgLTcxLDYgKzczLDMwIEBAIHZvaWQgTWVkaWFTdHJlYW1T
b3VyY2U6OnJlbW92ZU9ic2VydmVyKE1lZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciogb2JzZXJ2
ZXIpCiAgICAgICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZShwb3MpOwogfQogCit2b2lkIE1lZGlhU3Ry
ZWFtU291cmNlOjphZGRBdWRpb0NvbnN1bWVyKFBhc3NSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNv
bnN1bWVyPiBjb25zdW1lcikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9hdWRpb0NvbnN1
bWVyc0xvY2spOworICAgIG1fYXVkaW9Db25zdW1lcnMuYXBwZW5kKGNvbnN1bWVyKTsKK30KKwor
Ym9vbCBNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3ZlQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXIqIGNvbnN1bWVyKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1ZGlv
Q29uc3VtZXJzTG9jayk7CisgICAgc2l6ZV90IHBvcyA9IG1fYXVkaW9Db25zdW1lcnMuZmluZChj
b25zdW1lcik7CisgICAgaWYgKHBvcyAhPSBub3RGb3VuZCkgeworICAgICAgICBtX2F1ZGlvQ29u
c3VtZXJzLnJlbW92ZShwb3MpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIE1lZGlhU3RyZWFtU291cmNlOjpjb25zdW1lQXVkaW8oQXVk
aW9CdXMqIGJ1cywgc2l6ZV90IG51bWJlck9mRnJhbWVzKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2F1ZGlvQ29uc3VtZXJzTG9jayk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPEF1ZGlv
RGVzdGluYXRpb25Db25zdW1lcj4gPjo6aXRlcmF0b3IgaXQgPSBtX2F1ZGlvQ29uc3VtZXJzLmJl
Z2luKCk7IGl0ICE9IG1fYXVkaW9Db25zdW1lcnMuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQp
LT5jb25zdW1lQXVkaW8oYnVzLCBudW1iZXJPZkZyYW1lcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaApp
bmRleCBiZjcxMTBlZGMwOTA5MzUzZWYxOTU5YTBkOTRkYTY0ZTgyMzYzNjdjLi5lZGJlMGU5MGJk
ZGM5Mjk5OTEzN2E2ZDM3MTRkNzcwZmQ3YTA3MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgKQEAgLTM0LDEy
ICszNCwxNSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25Db25zdW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjsKKwog
Y2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVNv
dXJjZT4gewogcHVibGljOgogICAgIGNsYXNzIE9ic2VydmVyIHsKQEAgLTY0LDcgKzY3LDcgQEAg
cHVibGljOgogICAgICAgICBSZWFkeVN0YXRlRW5kZWQgPSAyCiAgICAgfTsKIAotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwg
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlID0gUmVhZHlTdGF0ZUxpdmUpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBpZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlID0gUmVhZHlTdGF0
ZUxpdmUsIGJvb2wgcmVxdWlyZXNDb25zdW1lciA9IGZhbHNlKTsKIAogICAgIGNvbnN0IFN0cmlu
ZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CkBAIC03OSwxNCArODIsMjQgQEAgcHVibGljOgogICAgIFBhc3NSZWZQ
dHI8RXh0cmFEYXRhPiBleHRyYURhdGEoKSBjb25zdCB7IHJldHVybiBtX2V4dHJhRGF0YTsgfQog
ICAgIHZvaWQgc2V0RXh0cmFEYXRhKFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBleHRyYURhdGEpIHsg
bV9leHRyYURhdGEgPSBleHRyYURhdGE7IH0KIAorICAgIHZvaWQgY29uc3VtZUF1ZGlvKEF1ZGlv
QnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKTsKKworICAgIGJvb2wgcmVxdWlyZXNBdWRpb0Nv
bnN1bWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc0NvbnN1bWVyOyB9CisgICAgdm9pZCBh
ZGRBdWRpb0NvbnN1bWVyKFBhc3NSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPik7Cisg
ICAgYm9vbCByZW1vdmVBdWRpb0NvbnN1bWVyKEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciopOwor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiA+JiBhdWRp
b0NvbnN1bWVycygpIHsgcmV0dXJuIG1fYXVkaW9Db25zdW1lcnM7IH0KKwogcHJpdmF0ZToKLSAg
ICBNZWRpYVN0cmVhbVNvdXJjZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUsIFJlYWR5U3RhdGUpOworICAgIE1lZGlhU3RyZWFtU291cmNlKGNvbnN0IFN0cmluZyYg
aWQsIFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSwgYm9vbCByZXF1aXJlc0Nv
bnN1bWVyKTsKIAogICAgIFN0cmluZyBtX2lkOwogICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmlu
ZyBtX25hbWU7CiAgICAgUmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisgICAgYm9vbCBtX3JlcXVp
cmVzQ29uc3VtZXI7CiAgICAgVmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CisgICAgTXV0
ZXggbV9hdWRpb0NvbnN1bWVyc0xvY2s7CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXI+ID4gbV9hdWRpb0NvbnN1bWVyczsKICAgICBSZWZQdHI8RXh0cmFEYXRhPiBt
X2V4dHJhRGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA0MGYyNzg0ODMzNzFlYjM2YzA3MTY2NzYwNDcwNzg1YjI1Nzc2MDEzLi4w
OTgwODVlOWU3MTk5ODNkYTZhYTE2M2E2ZmM4M2Q3YzI2MTQ4ZGU2IDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTIt
MTEtMTkgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAg
QWRkIGJhc2ljIGltcGxlbWVudGF0aW9uIGZvciBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4
MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRz
IGEgYml0IG9mIGNvZGUgdGhhdCBleGVyY2lzZXMgdGhlIFdlYktpdCBBUEkuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuY3BwOgor
ICAgICAgICAoTW9ja1dlYk1lZGlhU3RyZWFtU291cmNlQ29uc3VtZXIpOgorICAgICAgICAoTW9j
a1dlYk1lZGlhU3RyZWFtU291cmNlQ29uc3VtZXI6On5Nb2NrV2ViTWVkaWFTdHJlYW1Tb3VyY2VD
b25zdW1lcik6CisgICAgICAgIChNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6OmRpZENyZWF0ZU1l
ZGlhU3RyZWFtKToKKwogMjAxMi0xMS0xOCAgS3l1bmdUYWUgS2ltICA8a3RmLmtpbUBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbRUZMXSBOb3QgdG8gaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5o
IiBpbiBUb29scwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L01vY2tXZWJNZWRpYVN0cmVhbUNlbnRlci5jcHAKaW5kZXggYjcxNzhmMDk5MTQ2NmJlYWJmMDYw
MzY5ZGVjZjU1NTBhNTgxMzBhNS4uZTBmNzYxOTM0MzUwNzY4NTZhMDVmMGJkMTJmMTM5MmQ2YTk5
OGRhMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYk1l
ZGlhU3RyZWFtQ2VudGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRl
ICJNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJBdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXIuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1D
ZW50ZXJDbGllbnQuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1Db21wb25lbnQu
aD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg+CkBAIC04NSw4
ICs4NiwyNSBAQCB2b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkU3RvcExvY2FsTWVk
aWFTdHJlYW0oY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcgogICAgICAgICB2aWRlb0NvbXBvbmVu
dHNbaV0uc291cmNlKCkuc2V0UmVhZHlTdGF0ZShXZWJNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlT
dGF0ZUVuZGVkKTsKIH0KIAotdm9pZCBNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6OmRpZENyZWF0
ZU1lZGlhU3RyZWFtKFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpCitjbGFzcyBNb2NrV2ViQXVk
aW9EZXN0aW5hdGlvbkNvbnN1bWVyIDogcHVibGljIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1l
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TW9ja1dlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1l
cigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lQXVkaW8oY29uc3QgV2ViVmVjdG9yPGNv
bnN0IGZsb2F0Kj4mLCBzaXplX3QgbnVtYmVyX29mX2ZyYW1lcykgT1ZFUlJJREUgeyB9Cit9Owor
Cit2b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkQ3JlYXRlTWVkaWFTdHJlYW0oV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBzdHJlYW0pCiB7CisgICAgV2ViVmVjdG9yPFdlYk1lZGlh
U3RyZWFtQ29tcG9uZW50PiBhdWRpb0NvbXBvbmVudHM7CisgICAgc3RyZWFtLmF1ZGlvU291cmNl
cyhhdWRpb0NvbXBvbmVudHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Db21w
b25lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYk1lZGlhU3RyZWFtU291cmNlIHNvdXJj
ZSA9IGF1ZGlvQ29tcG9uZW50c1tpXS5zb3VyY2UoKTsKKyAgICAgICAgaWYgKHNvdXJjZS5yZXF1
aXJlc0F1ZGlvQ29uc3VtZXIoKSkgeworICAgICAgICAgICAgTW9ja1dlYkF1ZGlvRGVzdGluYXRp
b25Db25zdW1lciogY29uc3VtZXIgPSBuZXcgTW9ja1dlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1l
cigpOworICAgICAgICAgICAgc291cmNlLmFkZEF1ZGlvQ29uc3VtZXIoY29uc3VtZXIpOworICAg
ICAgICAgICAgc291cmNlLnJlbW92ZUF1ZGlvQ29uc3VtZXIoY29uc3VtZXIpOworICAgICAgICAg
ICAgZGVsZXRlIGNvbnN1bWVyOworICAgICAgICB9CisgICAgfQogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5OWFiYTNlYmI3NDBiNTg4ODAwODIyY2E2NGEyYWE1
ODA1OTU1ODQ2Li41MjI4MDQ0M2NlYmJiZWM4ZWZhYjQ1ZjhiOGZiODI1ZDY5OTcyNGY1IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTEtMTkgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3
QGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGJhc2ljIGltcGxlbWVudGF0aW9uIGZvciBNZWRp
YVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHdlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlv
bm5vZGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9tZWRpYXN0cmVh
bWF1ZGlvZGVzdGluYXRpb25ub2RlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTExLTE5ICBDaHJpc3Rv
cGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0g
VXBkYXRlIGV4cGVjdGF0aW9uIGZvciBmYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMuaHRtbCBh
ZnRlciByMTM1MDkzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYXN0cmVh
bWF1ZGlvZGVzdGluYXRpb25ub2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg4OWNjMDkxYzcxMmJiNTc0YzIxOWE4NGRmNGFjY2UzZWE4NWM0MmUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlvZGVzdGluYXRpb25ub2Rl
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK0Jhc2ljIHRlc3RzIGZvciBNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlIEFQSS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CitQQVNTIERlc3RpbmF0aW9uIEF1ZGlvTm9kZSBoYXMgb25lIGlucHV0LgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44OGJhODRlMTVkODA5YmJiMDAxY2Q5NzcwYmEyZTEzY2ExODE0MDkzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3Rp
bmF0aW9ubm9kZS5odG1sCkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQmFz
aWMgdGVzdHMgZm9yIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgQVBJLiIpOworCit2
YXIgY29udGV4dCA9IDA7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKwor
ICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KCk7CisKKyAgICB2YXIgbWVkaWFT
dHJlYW1EZXN0aW5hdGlvbiA9IGNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigp
OworCisgICAgLy8gQ2hlY2sgbnVtYmVyIG9mIGlucHV0cyBhbmQgb3V0cHV0cy4KKyAgICBpZiAo
bWVkaWFTdHJlYW1EZXN0aW5hdGlvbi5udW1iZXJPZklucHV0cyA9PSAxKQorICAgICAgICB0ZXN0
UGFzc2VkKCJEZXN0aW5hdGlvbiBBdWRpb05vZGUgaGFzIG9uZSBpbnB1dC4iKTsKKyAgICBlbHNl
CisgICAgICAgIHRlc3RGYWlsZWQoIkRlc3RpbmF0aW9uIEF1ZGlvTm9kZSBzaG91bGQgaGF2ZSBv
bmUgaW5wdXQuIik7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbm8gb3V0cHV0cywg
YnV0IHNpbmNlIHdlJ3JlIGltcGxlbWVudGVkIHVzaW5nIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
CisgICAgLy8gd2UgaGF2ZSBvbmUuCisgICAgLy8gaWYgKG1lZGlhU3RyZWFtRGVzdGluYXRpb24u
bnVtYmVyT2ZPdXRwdXRzID09IDApCisgICAgLy8gICAgIHRlc3RQYXNzZWQoIkRlc3RpbmF0aW9u
IEF1ZGlvTm9kZSBoYXMgbm8gb3V0cHV0cy4iKTsKKyAgICAvLyBlbHNlCisgICAgLy8gICAgIHRl
c3RGYWlsZWQoIkRlc3RpbmF0aW9uIEF1ZGlvTm9kZSBzaG91bGQgbm90IGhhdmUgb3V0cHV0cy4i
KTsKKworICAgIC8vIEZJWE1FOiBhZGQgYSB0ZXN0IHdoZXJlIHdlIGNyZWF0ZSBhIFBlZXJDb25u
ZWN0aW9uIGFuZCBjYWxsIGFkZFN0cmVhbShtZWRpYVN0cmVhbURlc3RpbmF0aW9uLnN0cmVhbSku
CisgICAgCisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3J1blRlc3QoKTsKK3dpbmRvdy5zdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175954</attachid>
            <date>2012-11-26 02:53:42 -0800</date>
            <delta_ts>2012-11-27 05:19:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101815-20121126115120.patch</filename>
            <type>text/plain</type>
            <size>37062</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA3ZTdlMTBkYTI1MmY5
ODYzMDYzZTNhY2FkZDk2NzlhYTg0N2NiYjg1Li4wZTM2NDg5NzEzY2U1ZjJiOGE5ZTdkMjUzZTRk
NDE0ZjNjMmFlMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0yMCAg
VG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgYmFz
aWMgaW1wbGVtZW50YXRpb24gZm9yIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgxNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhlIGNv
bnN1bWVyIGludGVyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRvIFdlYk1lZGlhU3Ry
ZWFtU291cmNlLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkF1ZGlvRGVzdGluYXRp
b25Db25zdW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJBdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXI6On5XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYk1lZGlhU3RyZWFtU291cmNlKToKKwogMjAxMi0xMS0yMyAgU2FtaSBLeW9z
dGlsYSAgPHNreW9zdGlsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlbW92
ZSBXZWJTY3JlZW5JbmZvLntob3Jpem9udGFsLHZlcnRpY2FsfURQSQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM4
NDdhNTI5MjliOTc1NjlhNTBkZTdiOTRmMjY2NzNjOWIxODQyNDYuLjU2NDgwYWU1YjA3YzhjM2E2
NDg2MGNkZTlmOTA2OGM4NTZjMGI3NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBAQAorMjAx
Mi0xMS0yMCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBBZGQgYmFzaWMgaW1wbGVtZW50YXRpb24gZm9yIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MTgxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudHMgYW4gYXVkaW8gZGVzdGluYXRpb24gbm9kZSB3aGljaCBoYXMgYSBNZWRpYVN0cmVh
bS4KKyAgICAgICAgVGhpcyBjYW4gYmUgYWRkZWQgdG8gYSBQZWVyQ29ubmVjdGlvbiB3aXRoIHBl
ZXJDb25uZWN0aW9uLmFkZFN0cmVhbSgpLgorICAgICAgICBQbGVhc2Ugc2VlIHVzZSBjYXNlICgz
KToKKyAgICAgICAgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9hdWRpby9yYXctZmlsZS90aXAvd2Vi
YXVkaW8vd2VicnRjLWludGVncmF0aW9uLmh0bWwKKworICAgICAgICBUZXN0OiB3ZWJhdWRpby9t
ZWRpYXN0cmVhbWF1ZGlvZGVzdGluYXRpb25ub2RlLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChBdWRpb0NvbnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5o
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3Rp
bmF0aW9uTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlOjptZWRpYVN0cmVhbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpwcm9j
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6
OnJlc2V0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE1lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RyZWFtKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EZXN0aW5hdGlv
bkNvbnN1bWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25Db25zdW1lcjo6fkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcik6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtU291cmNlOjpleHRyYURhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbVNvdXJjZTo6c2V0RXh0cmFEYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnJlcXVpcmVzQXVkaW9Db25zdW1lcik6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoQ29uc3VtZXJXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6
Q29uc3VtZXJXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb25zdW1lcldyYXBw
ZXI6OmNvbnN1bWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29uc3VtZXJXcmFwcGVyOjpDb25zdW1l
cldyYXBwZXIpOgorICAgICAgICAoV2ViS2l0OjpDb25zdW1lcldyYXBwZXI6OmNvbnN1bWVBdWRp
byk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtU291cmNlOjphZGRBdWRpb0NvbnN1
bWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnJlbW92ZUF1ZGlv
Q29uc3VtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6Ok1lZGlhU3RyZWFtU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjphZGRBdWRpb0NvbnN1bWVyKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6
OnJlbW92ZUF1ZGlvQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3Vy
Y2U6OmNvbnN1bWVBdWRpbyk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFT
dHJlYW1Tb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVkaWFTdHJlYW1T
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OnJlcXVpcmVzQXVk
aW9Db25zdW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZTo6YXVkaW9D
b25zdW1lcnMpOgorCiAyMDEyLTExLTI2ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAog
ICAgICAgICBFeHRlbmQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNpbXVsYXRlZENsaWNrIHRv
IGFsbG93IHNlbmRpbmcgYSBtb3VzZW92ZXIgZXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVjMWU1NzMzNmQyMzQ0OGM4NjczOTQyNWEyOTc5NTY1YTdhZjQ1N2QKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkF1ZGlv
RGVzdGluYXRpb25Db25zdW1lci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyX2gKKyNkZWZpbmUgV2ViQXVkaW9EZXN0
aW5hdGlvbkNvbnN1bWVyX2gKKworI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIoKSB7IH0KKworICAgIC8v
IFRoZSBzaXplIG9mIHRoZSB2ZWN0b3IgaXMgdGhlIG51bWJlciBvZiBhdWRpbyBjaGFubmVscywg
YW5kIG51bWJlck9mRnJhbWVzIGlzIHRoZQorICAgIC8vIG51bWJlciBvZiBhdWRpbyBmcmFtZXMg
aW4gdGhlIChwb3NzaWJseSBtdWx0aS1jaGFubmVsKSBidWZmZXIgaW4gYSBwbGFuYXIgZm9ybWF0
LgorICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lQXVkaW8oY29uc3QgV2ViVmVjdG9yPGNvbnN0IGZs
b2F0Kj4mLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3Vy
Y2UuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3Vy
Y2UuaAppbmRleCAzYTk3MmYxZDg1NTRjMjgxMDVjOGRjNDhmN2MwMTMzMjkwNTNkMjcwLi5jZmY5
ZmNlMjA3ZWM3ZTA5MWE3MWUxYjJlZjI2OGUzNWFlMDcxZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlLmgKKysrIGIvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oCkBAIC0z
NCwxMyArMzQsMTQgQEAKICNpbmNsdWRlICJXZWJDb21tb24uaCIKICNpbmNsdWRlICJXZWJOb25D
b3B5YWJsZS5oIgogI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKyNpbmNsdWRlICJXZWJWZWN0
b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2U7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCitjbGFzcyBXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3Vt
ZXI7CiBjbGFzcyBXZWJTdHJpbmc7CiAKIGNsYXNzIFdlYk1lZGlhU3RyZWFtU291cmNlIHsKQEAg
LTkxLDYgKzkyLDEzIEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JUIEV4dHJhRGF0YSogZXh0
cmFEYXRhKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEV4dHJhRGF0YShFeHRy
YURhdGEqKTsKIAorICAgIC8vIE9ubHkgdXNlZCBpZiBpZiB0aGlzIGlzIGEgV2ViQXVkaW8gc291
cmNlLgorICAgIC8vIFRoZSBXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIgaXMgbm90IG93bmVk
LCBhbmQgaGFzIHRvIGJlIGRpc3Bvc2VkIG9mIHNlcGFyYXRlbHkKKyAgICAvLyBhZnRlciBjYWxs
aW5nIHJlbW92ZUF1ZGlvQ29uc3VtZXIuCisgICAgV0VCS0lUX0VYUE9SVCBib29sIHJlcXVpcmVz
QXVkaW9Db25zdW1lcigpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGRBdWRpb0Nv
bnN1bWVyKFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciopOworICAgIFdFQktJVF9FWFBPUlQg
Ym9vbCByZW1vdmVBdWRpb0NvbnN1bWVyKFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciopOwor
CiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgV2ViTWVkaWFTdHJlYW1Tb3VyY2UoY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlPiYpOwogICAgIFdl
Yk1lZGlhU3RyZWFtU291cmNlJiBvcGVyYXRvcj0oV2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2Uq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNw
cAppbmRleCAwNzhlMTYxY2E4OGIzOTM1OTMyZWRiZmYxMDcyMmMzNGU5NjhiMzI5Li43MTRhYjUy
MGVlMzkyZjk3NmRiNGVmMDM0ZTNjNzMwNTA2MmM4NzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC02Myw2ICs2Myw3IEBACiAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIk1lZGlh
U3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmgiCiAjZW5kaWYKIApAQCAtNDMwLDYgKzQzMSwxNCBAQCBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0
ZU1lZGlhU3RyZWFtU291cmNlKE1lZAogICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRl
eHQga2VlcHMgcmVmZXJlbmNlIHVudGlsIG5vZGUgaXMgZGlzY29ubmVjdGVkCiAgICAgcmV0dXJu
IG5vZGU7CiB9CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCkKK3sKKyAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHdoaWNoIHNwZWNpZmll
cyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLgorICAgIC8vIEZJWE1FOiBUaGUgZGVmYXVsdCBzaG91
bGQgcHJvYmFibHkgYmUgc3RlcmVvIGluc3RlYWQgb2YgbW9uby4KKyAgICByZXR1cm4gTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKHRoaXMsIDEpOworfQorCiAjZW5kaWYK
IAogUGFzc1JlZlB0cjxTY3JpcHRQcm9jZXNzb3JOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVNj
cmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRleCA4MDQ2
YWNjOTgyODE1YWU5NWE0YmZjMjE4NjViNDg0YTcwYjRkZDNkLi42ZGEzYzEyYTlmNWVkMzUwZDQz
OWZkOGY5MDUxYmViZTQ2YzE3MWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTQ5LDYgKzQ5LDcgQEAgY2xhc3MgQXVkaW9CdWZmZXI7
CiBjbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNrOwogY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
OwogY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOworY2xhc3MgTWVkaWFTdHJlYW1B
dWRpb0Rlc3RpbmF0aW9uTm9kZTsKIGNsYXNzIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOwog
Y2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIENoYW5uZWxNZXJnZXJOb2RlOwpAQCAtMTE4
LDYgKzExOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFTdHJl
YW1Tb3VyY2UoTWVkaWFTdHJlYW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxN
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0
aW9uKCk7CiAjZW5kaWYKICAgICBQYXNzUmVmUHRyPEdhaW5Ob2RlPiBjcmVhdGVHYWluKCk7CiAg
ICAgUGFzc1JlZlB0cjxCaXF1YWRGaWx0ZXJOb2RlPiBjcmVhdGVCaXF1YWRGaWx0ZXIoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAppbmRl
eCAxNzMzMTNmOTVlZGZmNjNjZDgwMDg0OGIwZjgxNjI2YzEyZjAwYWI0Li5mMmQ4ZjRjMmIwYjA5
ZjdjMGIyMjZiOWE1NmQxNjY1MTJkZDQwMzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCkBAIC02Niw2ICs2Niw3IEBACiAjaWYgZGVm
aW5lZChFTkFCTEVfTUVESUFfU1RSRUFNKSAmJiBFTkFCTEVfTUVESUFfU1RSRUFNCiAgICAgTWVk
aWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUgY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoaW4gTWVkaWFT
dHJlYW0gbWVkaWFTdHJlYW0pCiAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgIE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlv
bigpOwogI2VuZGlmCiAKICAgICAvLyBQcm9jZXNzaW5nIG5vZGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAppbmRleCA2MWI1YTIwYjE1NDE5NTc1MDU5MzFk
NGZmMTg1ODg2OTExZGIzNmUyLi4zMGI4ZWIzMWM4NDMwOWMyNDNlNjYwNDgwODU2MTMxZjM3NDdm
YzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKQEAg
LTY0LDYgKzY0LDcgQEAgcHVibGljOgogICAgICAgICBOb2RlVHlwZU9zY2lsbGF0b3IsCiAgICAg
ICAgIE5vZGVUeXBlQXVkaW9CdWZmZXJTb3VyY2UsCiAgICAgICAgIE5vZGVUeXBlTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2UsCisgICAgICAgIE5vZGVUeXBlTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uLAogICAgICAgICBOb2RlVHlwZU1lZGlhU3RyZWFtQXVkaW9Tb3VyY2UsCiAgICAgICAgIE5v
ZGVUeXBlSmF2YVNjcmlwdCwKICAgICAgICAgTm9kZVR5cGVCaXF1YWRGaWx0ZXIsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0
cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzQ1ZjJmNWYxMWY0MGFi
NDZkMDdkZTUyOTc1MjAwMDE2YmU1YWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApA
QCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQ29udGV4
dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiTG9jYWxNZWRpYVN0
cmVhbS5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtQ2VudGVyLmgiCisjaW5jbHVkZSAiUlRDUGVl
ckNvbm5lY3Rpb25IYW5kbGVyLmgiCisjaW5jbHVkZSAiVVVJRC5oIgorI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
QXVkaW9EZXN0aW5hdGlvbk5vZGU+IE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNy
ZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShj
b250ZXh0LCBudW1iZXJPZkNoYW5uZWxzKSk7Cit9CisKK01lZGlhU3RyZWFtQXVkaW9EZXN0aW5h
dGlvbk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscykKKyAgICA6IEF1ZGlvQmFzaWNJbnNwZWN0
b3JOb2RlKGNvbnRleHQsIGNvbnRleHQtPnNhbXBsZVJhdGUoKSkKKyAgICAsIG1fbWl4QnVzKG51
bWJlck9mQ2hhbm5lbHMsIFByb2Nlc3NpbmdTaXplSW5GcmFtZXMpCit7CisgICAgc2V0Tm9kZVR5
cGUoTm9kZVR5cGVNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb24pOworCisgICAgbV9zb3VyY2Ug
PSBNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKEFTQ0lJTGl0ZXJhbCgiV2ViQXVkaW8tIikgKyBj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIE1lZGlhU3RyZWFtU291cmNlOjpUeXBlQXVkaW8s
ICJNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlIiwgTWVkaWFTdHJlYW1Tb3VyY2U6OlJl
YWR5U3RhdGVMaXZlLCB0cnVlKTsKKyAgICBNZWRpYVN0cmVhbVNvdXJjZVZlY3RvciBhdWRpb1Nv
dXJjZXM7CisgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChtX3NvdXJjZSk7CisgICAgTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3IgdmlkZW9Tb3VyY2VzOworICAgIG1fc3RyZWFtID0gTG9jYWxNZWRpYVN0
cmVhbTo6Y3JlYXRlKGNvbnRleHQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYXVkaW9Tb3Vy
Y2VzLCB2aWRlb1NvdXJjZXMpOworICAgIE1lZGlhU3RyZWFtQ2VudGVyOjppbnN0YW5jZSgpLmRp
ZENyZWF0ZU1lZGlhU3RyZWFtKG1fc3RyZWFtLT5kZXNjcmlwdG9yKCkpOworCisgICAgaW5pdGlh
bGl6ZSgpOworfQorCitNZWRpYVN0cmVhbVNvdXJjZSogTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6bWVkaWFTdHJlYW1Tb3VyY2UoKQoreworICAgIHJldHVybiBtX3NvdXJjZS5nZXQo
KTsKK30KKworTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fk1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGUoKQoreworICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9mRnJh
bWVzKQoreworICAgIG1fbWl4QnVzLmNvcHlGcm9tKCppbnB1dCgwKS0+YnVzKCkpOworICAgIG1f
c291cmNlLT5jb25zdW1lQXVkaW8oJm1fbWl4QnVzLCBudW1iZXJPZkZyYW1lcyk7Cit9CisKK3Zv
aWQgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVzZXQoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFC
TEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YTlhMjc2NWU4YWIwNDllZTRjNTQ2MDg2NWVkZTFiY2Q1NjU1ZjkyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlv
RGVzdGluYXRpb25Ob2RlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCisjZGVmaW5lIE1lZGlhU3RyZWFtQXVk
aW9EZXN0aW5hdGlvbk5vZGVfaAorCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlLmgiCisjaW5j
bHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKworY2xhc3MgTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4g
Y3JlYXRlKEF1ZGlvQ29udGV4dCosIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzKTsKKworICAgIHZp
cnR1YWwgfk1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoKTsKKworICAgIE1lZGlhU3Ry
ZWFtKiBzdHJlYW0oKSB7IHJldHVybiBtX3N0cmVhbS5nZXQoKTsgfQorCisgICAgLy8gQXVkaW9O
b2RlLgorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwor
ICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIAorICAgIE1lZGlhU3RyZWFtU291cmNlKiBt
ZWRpYVN0cmVhbVNvdXJjZSgpOworCitwcml2YXRlOgorICAgIE1lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0Kiwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpOworCisg
ICAgdmlydHVhbCBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biAwOyB9CisKKyAgICAvLyBBcyBhbiBhdWRpbyBzb3VyY2UsIHdlIHdpbGwgbmV2ZXIgcHJvcGFn
YXRlIHNpbGVuY2UuCisgICAgdmlydHVhbCBib29sIHByb3BhZ2F0ZXNTaWxlbmNlKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4gbV9z
dHJlYW07CisgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBtX3NvdXJjZTsKKyAgICBBdWRp
b0J1cyBtX21peEJ1czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAvLyBN
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5h
dGlvbk5vZGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MWJiYTQxYWRiMTFjMzkwNzk2MWU3MGM1ZDI2YWUw
Yjk2YzM4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaWRsCkBAIC0wLDAgKzEsMzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPJk1FRElBX1NUUkVBTSwK
KyAgICBKU0dlbmVyYXRlVG9KU09iamVjdAorXSBpbnRlcmZhY2UgTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZSA6IEF1ZGlvU291cmNlTm9kZSB7CisgICAgcmVhZG9ubHkgYXR0cmlidXRl
IE1lZGlhU3RyZWFtIHN0cmVhbTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjk0ODg1Y2RlYzAx
NjhjMWI5NjIwM2M3NjY1Y2FhMjIzOTVmY2RmZS4uNjViNWRkNzc5ZmUzMTE3Yjg2ZWJmOWFmMThh
M2Q1ZGMwZGJmY2NhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtOTIwLDYgKzkyMCw3IEBACiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCcsCiAg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmlkbCcsCiAg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VOb2RlLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dl
YmF1ZGlvL09zY2lsbGF0b3JOb2RlLmlkbCcsCkBAIC0xNzQ1LDYgKzE3NDYsOCBAQAogICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oJywKICAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlv
L01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oJywKICAgICAgICAgICAgICdNb2R1
bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uQ29uc3Vt
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lY2JhMDhmZmM4OGI3OGEzZDY2M2U1MzBmZTExNmI3NGJjNjdjMDc1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbkNvbnN1bWVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVk
aW9EZXN0aW5hdGlvbkNvbnN1bWVyX2gKKyNkZWZpbmUgQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVy
X2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQXVkaW9CdXM7CisKK2NsYXNzIEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciA6IHB1
YmxpYyBSZWZDb3VudGVkPEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcj4geworcHVibGljOgorICAg
IHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcigpIHsgfQorCisgICAgdmlydHVhbCB2
b2lkIGNvbnN1bWVBdWRpbyhBdWRpb0J1cyosIHNpemVfdCBudW1iZXJPZkZyYW1lcykgPSAwOwor
fTsKKworfSAvLyBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcAppbmRleCBhNTE2OTM2MTAyMGE0Zjk5
MmZkY2Q3YjZmYzM4M2RiMTg4ZDJhZjlkLi4wNWNlN2QwNjhmNTZmZGJkYThjODNiOWE1NTMxMTFm
MjkyMGU2OTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMzQsOCAr
MzQsMTEgQEAKIAogI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oPgogCisj
aW5jbHVkZSAiQXVkaW9CdXMuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaD4KICNpbmNsdWRlIDxw
dWJsaWMvV2ViU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTIxLDYg
KzEyNCw3IEBAIHByaXZhdGU6CiAKIFdlYk1lZGlhU3RyZWFtU291cmNlOjpFeHRyYURhdGEqIFdl
Yk1lZGlhU3RyZWFtU291cmNlOjpleHRyYURhdGEoKSBjb25zdAogeworICAgIEFTU0VSVCghbV9w
cml2YXRlLmlzTnVsbCgpKTsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U6OkV4dHJhRGF0
YT4gZGF0YSA9IG1fcHJpdmF0ZS0+ZXh0cmFEYXRhKCk7CiAgICAgaWYgKCFkYXRhKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTEyOSw5ICsxMzMsNzIgQEAgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OkV4
dHJhRGF0YSogV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmV4dHJhRGF0YSgpIGNvbnN0CiAKIHZvaWQg
V2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnNldEV4dHJhRGF0YShFeHRyYURhdGEqIGV4dHJhRGF0YSkK
IHsKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7CiAgICAgbV9wcml2YXRlLT5zZXRF
eHRyYURhdGEoYWRvcHRSZWYobmV3IEV4dHJhRGF0YUNvbnRhaW5lcihleHRyYURhdGEpKSk7CiB9
CiAKK2Jvb2wgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnJlcXVpcmVzQXVkaW9Db25zdW1lcigpIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAgIHJldHVybiBtX3By
aXZhdGUtPnJlcXVpcmVzQXVkaW9Db25zdW1lcigpOworfQorCitjbGFzcyBDb25zdW1lcldyYXBw
ZXIgOiBwdWJsaWMgV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb25zdW1lcldyYXBwZXI+IGNyZWF0ZShXZWJBdWRpb0Rl
c3RpbmF0aW9uQ29uc3VtZXIqIGNvbnN1bWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb25zdW1lcldyYXBwZXIoY29uc3VtZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgY29uc3VtZUF1ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKSBPVkVS
UklERTsKKworICAgIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIoKSB7IHJl
dHVybiBtX2NvbnN1bWVyOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ29uc3VtZXJXcmFw
cGVyKFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIpIDogbV9jb25zdW1lcihj
b25zdW1lcikgeyB9CisKKyAgICAvLyBtX2NvbnN1bWVyIGlzIG5vdCBvd25lZCBieSB0aGlzIGNs
YXNzLgorICAgIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogbV9jb25zdW1lcjsKK307CisK
K3ZvaWQgQ29uc3VtZXJXcmFwcGVyOjpjb25zdW1lQXVkaW8oQXVkaW9CdXMqIGJ1cywgc2l6ZV90
IG51bWJlck9mRnJhbWVzKQoreworICAgIGlmICghYnVzKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBXcmFwIEF1ZGlvQnVzLgorICAgIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzID0gYnVzLT5u
dW1iZXJPZkNoYW5uZWxzKCk7CisgICAgV2ViS2l0OjpXZWJWZWN0b3I8Y29uc3QgZmxvYXQqPiBi
dXNWZWN0b3IobnVtYmVyT2ZDaGFubmVscyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkNoYW5uZWxzOyArK2kpCisgICAgICAgIGJ1c1ZlY3RvcltpXSA9IGJ1cy0+Y2hhbm5l
bChpKS0+ZGF0YSgpOworCisgICAgbV9jb25zdW1lci0+Y29uc3VtZUF1ZGlvKGJ1c1ZlY3Rvciwg
bnVtYmVyT2ZGcmFtZXMpOworfQorCit2b2lkIFdlYk1lZGlhU3RyZWFtU291cmNlOjphZGRBdWRp
b0NvbnN1bWVyKFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSAm
JiBjb25zdW1lcik7CisKKyAgICBtX3ByaXZhdGUtPmFkZEF1ZGlvQ29uc3VtZXIoQ29uc3VtZXJX
cmFwcGVyOjpjcmVhdGUoY29uc3VtZXIpKTsKK30KKworYm9vbCBXZWJNZWRpYVN0cmVhbVNvdXJj
ZTo6cmVtb3ZlQXVkaW9Db25zdW1lcihXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqIGNvbnN1
bWVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX3ByaXZh
dGUuaXNOdWxsKCkgJiYgY29uc3VtZXIpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxBdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXI+ID4mIGNvbnN1bWVycyA9IG1fcHJpdmF0ZS0+YXVkaW9Db25z
dW1lcnMoKTsKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVy
PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvbnN1bWVycy5iZWdpbigpOyBpdCAhPSBjb25zdW1l
cnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgQ29uc3VtZXJXcmFwcGVyKiB3cmFwcGVyID0gc3Rh
dGljX2Nhc3Q8Q29uc3VtZXJXcmFwcGVyKj4oKCppdCkuZ2V0KCkpOworICAgICAgICBpZiAod3Jh
cHBlci0+Y29uc3VtZXIoKSA9PSBjb25zdW1lcikgeworICAgICAgICAgICAgbV9wcml2YXRlLT5y
ZW1vdmVBdWRpb0NvbnN1bWVyKHdyYXBwZXIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHAK
aW5kZXggMTcyMDQ4N2RjMTI1NGE0YzIzNDI0Y2IxMDAxZWFmNjI5YzkyODUxZC4uYzkzZDgxODdi
MmNiNmM5ZDdjNDZmMzQ5YTc5NDc3MWExYTJmNTcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcApAQCAt
MzMsMTkgKzMzLDIxIEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIk1l
ZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBNZWRpYVN0cmVh
bVNvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIFR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lLCBSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCitQYXNzUmVmUHRyPE1lZGlhU3RyZWFtU291
cmNlPiBNZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIFR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlIHJlYWR5U3RhdGUsIGJvb2wgcmVxdWly
ZXNDb25zdW1lcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhU3RyZWFtU291cmNl
KGlkLCB0eXBlLCBuYW1lLCByZWFkeVN0YXRlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
ZWRpYVN0cmVhbVNvdXJjZShpZCwgdHlwZSwgbmFtZSwgcmVhZHlTdGF0ZSwgcmVxdWlyZXNDb25z
dW1lcikpOwogfQogCi1NZWRpYVN0cmVhbVNvdXJjZTo6TWVkaWFTdHJlYW1Tb3VyY2UoY29uc3Qg
U3RyaW5nJiBpZCwgVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSkKK01lZGlhU3RyZWFtU291cmNlOjpNZWRpYVN0cmVhbVNvdXJjZShjb25zdCBTdHJp
bmcmIGlkLCBUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSByZWFkeVN0
YXRlLCBib29sIHJlcXVpcmVzQ29uc3VtZXIpCiAgICAgOiBtX2lkKGlkKQogICAgICwgbV90eXBl
KHR5cGUpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fcmVhZHlTdGF0ZShyZWFkeVN0YXRl
KQorICAgICwgbV9yZXF1aXJlc0NvbnN1bWVyKHJlcXVpcmVzQ29uc3VtZXIpCiB7CiB9CiAKQEAg
LTcxLDYgKzczLDMwIEBAIHZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OnJlbW92ZU9ic2VydmVyKE1l
ZGlhU3RyZWFtU291cmNlOjpPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgICAgIG1fb2JzZXJ2ZXJz
LnJlbW92ZShwb3MpOwogfQogCit2b2lkIE1lZGlhU3RyZWFtU291cmNlOjphZGRBdWRpb0NvbnN1
bWVyKFBhc3NSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiBjb25zdW1lcikKK3sKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9hdWRpb0NvbnN1bWVyc0xvY2spOworICAgIG1fYXVkaW9D
b25zdW1lcnMuYXBwZW5kKGNvbnN1bWVyKTsKK30KKworYm9vbCBNZWRpYVN0cmVhbVNvdXJjZTo6
cmVtb3ZlQXVkaW9Db25zdW1lcihBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqIGNvbnN1bWVyKQor
eworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1ZGlvQ29uc3VtZXJzTG9jayk7CisgICAgc2l6
ZV90IHBvcyA9IG1fYXVkaW9Db25zdW1lcnMuZmluZChjb25zdW1lcik7CisgICAgaWYgKHBvcyAh
PSBub3RGb3VuZCkgeworICAgICAgICBtX2F1ZGlvQ29uc3VtZXJzLnJlbW92ZShwb3MpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1l
ZGlhU3RyZWFtU291cmNlOjpjb25zdW1lQXVkaW8oQXVkaW9CdXMqIGJ1cywgc2l6ZV90IG51bWJl
ck9mRnJhbWVzKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1ZGlvQ29uc3VtZXJzTG9j
ayk7CisgICAgZm9yIChWZWN0b3I8UmVmUHRyPEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcj4gPjo6
aXRlcmF0b3IgaXQgPSBtX2F1ZGlvQ29uc3VtZXJzLmJlZ2luKCk7IGl0ICE9IG1fYXVkaW9Db25z
dW1lcnMuZW5kKCk7ICsraXQpCisgICAgICAgICgqaXQpLT5jb25zdW1lQXVkaW8oYnVzLCBudW1i
ZXJPZkZyYW1lcyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuaAppbmRleCBiZjcxMTBlZGMwOTA5MzUzZWYx
OTU5YTBkOTRkYTY0ZTgyMzYzNjdjLi5lZGJlMGU5MGJkZGM5Mjk5OTEzN2E2ZDM3MTRkNzcwZmQ3
YTA3MjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL01lZGlhU3RyZWFtU291cmNlLmgKQEAgLTM0LDEyICszNCwxNSBAQAogCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db25zdW1lci5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjsKKwogY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2Ug
OiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVN0cmVhbVNvdXJjZT4gewogcHVibGljOgogICAgIGNs
YXNzIE9ic2VydmVyIHsKQEAgLTY0LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICBSZWFkeVN0
YXRlRW5kZWQgPSAyCiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhU3RyZWFt
U291cmNlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBSZWFkeVN0YXRlID0gUmVhZHlTdGF0ZUxpdmUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBSZWFkeVN0YXRlID0gUmVhZHlTdGF0ZUxpdmUsIGJvb2wgcmVxdWlyZXNDb25z
dW1lciA9IGZhbHNlKTsKIAogICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkBAIC03OSwx
NCArODIsMjQgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBleHRyYURhdGEo
KSBjb25zdCB7IHJldHVybiBtX2V4dHJhRGF0YTsgfQogICAgIHZvaWQgc2V0RXh0cmFEYXRhKFBh
c3NSZWZQdHI8RXh0cmFEYXRhPiBleHRyYURhdGEpIHsgbV9leHRyYURhdGEgPSBleHRyYURhdGE7
IH0KIAorICAgIHZvaWQgY29uc3VtZUF1ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJh
bWVzKTsKKworICAgIGJvb2wgcmVxdWlyZXNBdWRpb0NvbnN1bWVyKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1aXJlc0NvbnN1bWVyOyB9CisgICAgdm9pZCBhZGRBdWRpb0NvbnN1bWVyKFBhc3NSZWZQ
dHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPik7CisgICAgYm9vbCByZW1vdmVBdWRpb0NvbnN1
bWVyKEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciopOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiA+JiBhdWRpb0NvbnN1bWVycygpIHsgcmV0dXJuIG1f
YXVkaW9Db25zdW1lcnM7IH0KKwogcHJpdmF0ZToKLSAgICBNZWRpYVN0cmVhbVNvdXJjZShjb25z
dCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFJlYWR5U3RhdGUpOworICAg
IE1lZGlhU3RyZWFtU291cmNlKGNvbnN0IFN0cmluZyYgaWQsIFR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSwgUmVhZHlTdGF0ZSwgYm9vbCByZXF1aXJlc0NvbnN1bWVyKTsKIAogICAgIFN0cmluZyBt
X2lkOwogICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgUmVhZHlTdGF0
ZSBtX3JlYWR5U3RhdGU7CisgICAgYm9vbCBtX3JlcXVpcmVzQ29uc3VtZXI7CiAgICAgVmVjdG9y
PE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CisgICAgTXV0ZXggbV9hdWRpb0NvbnN1bWVyc0xvY2s7
CisgICAgVmVjdG9yPFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI+ID4gbV9hdWRpb0Nv
bnN1bWVyczsKICAgICBSZWZQdHI8RXh0cmFEYXRhPiBtX2V4dHJhRGF0YTsKIH07CiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4ODAzYTZmNDdh
MzdiMWJlOTZhZDVmMDNlNDUyM2RkYTE0YmYyMjg4Li5kZmJkNjEwN2JhYzNhZmI1YzBhNDQxODNm
MjZhZTI0MzhkNGZlM2MyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTItMTEtMTkgIFRvbW15IFdpZGVuZmx5Y2h0
ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGJhc2ljIGltcGxlbWVudGF0aW9u
IGZvciBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4MTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGEgYml0IG9mIGNvZGUgdGhhdCBleGVy
Y2lzZXMgdGhlIFdlYktpdCBBUEkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuY3BwOgorICAgICAgICAoTW9ja1dlYk1lZGlhU3Ry
ZWFtU291cmNlQ29uc3VtZXIpOgorICAgICAgICAoTW9ja1dlYk1lZGlhU3RyZWFtU291cmNlQ29u
c3VtZXI6On5Nb2NrV2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lcik6CisgICAgICAgIChNb2Nr
V2ViTWVkaWFTdHJlYW1DZW50ZXI6OmRpZENyZWF0ZU1lZGlhU3RyZWFtKToKKwogMjAxMi0xMS0y
NCAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIEFkZCB0
aGUgLS1vcmRlciBvcHRpb24gdG8gTlJXVApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL01vY2tXZWJNZWRpYVN0cmVhbUNlbnRlci5jcHAKaW5kZXggYjcxNzhm
MDk5MTQ2NmJlYWJmMDYwMzY5ZGVjZjU1NTBhNTgxMzBhNS4uZTBmNzYxOTM0MzUwNzY4NTZhMDVm
MGJkMTJmMTM5MmQ2YTk5OGRhMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuY3BwCkBAIC0zMyw2ICszMyw3
IEBACiAKICNpbmNsdWRlICJNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuaCIKIAorI2luY2x1ZGUg
PHB1YmxpYy9XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaD4KICNpbmNsdWRlIDxwdWJsaWMv
V2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFT
dHJlYW1Db21wb25lbnQuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1EZXNjcmlw
dG9yLmg+CkBAIC04NSw4ICs4NiwyNSBAQCB2b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6
ZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0oY29uc3QgV2ViTWVkaWFTdHJlYW1EZXNjcgogICAgICAg
ICB2aWRlb0NvbXBvbmVudHNbaV0uc291cmNlKCkuc2V0UmVhZHlTdGF0ZShXZWJNZWRpYVN0cmVh
bVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkKTsKIH0KIAotdm9pZCBNb2NrV2ViTWVkaWFTdHJlYW1D
ZW50ZXI6OmRpZENyZWF0ZU1lZGlhU3RyZWFtKFdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvciYpCitj
bGFzcyBNb2NrV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyIDogcHVibGljIFdlYkF1ZGlvRGVz
dGluYXRpb25Db25zdW1lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TW9ja1dlYkF1ZGlvRGVz
dGluYXRpb25Db25zdW1lcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lQXVkaW8oY29u
c3QgV2ViVmVjdG9yPGNvbnN0IGZsb2F0Kj4mLCBzaXplX3QgbnVtYmVyX29mX2ZyYW1lcykgT1ZF
UlJJREUgeyB9Cit9OworCit2b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkQ3JlYXRl
TWVkaWFTdHJlYW0oV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBzdHJlYW0pCiB7CisgICAgV2Vi
VmVjdG9yPFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50PiBhdWRpb0NvbXBvbmVudHM7CisgICAgc3Ry
ZWFtLmF1ZGlvU291cmNlcyhhdWRpb0NvbXBvbmVudHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXVkaW9Db21wb25lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYk1lZGlhU3Ry
ZWFtU291cmNlIHNvdXJjZSA9IGF1ZGlvQ29tcG9uZW50c1tpXS5zb3VyY2UoKTsKKyAgICAgICAg
aWYgKHNvdXJjZS5yZXF1aXJlc0F1ZGlvQ29uc3VtZXIoKSkgeworICAgICAgICAgICAgTW9ja1dl
YkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIgPSBuZXcgTW9ja1dlYkF1ZGlvRGVz
dGluYXRpb25Db25zdW1lcigpOworICAgICAgICAgICAgc291cmNlLmFkZEF1ZGlvQ29uc3VtZXIo
Y29uc3VtZXIpOworICAgICAgICAgICAgc291cmNlLnJlbW92ZUF1ZGlvQ29uc3VtZXIoY29uc3Vt
ZXIpOworICAgICAgICAgICAgZGVsZXRlIGNvbnN1bWVyOworICAgICAgICB9CisgICAgfQogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MDRlMDYxMDY0MjBjZTg5
ZDc2MTZlM2JmODZiMDFkNTBjYjI1MmUzLi4wMWYyZDhmNGZkMjIxMGNjYjRjYmI3MjcwOWU2NmRi
ZjBjNDU3OGNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTEtMTkgIFRvbW15IFdpZGVu
Zmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGJhc2ljIGltcGxlbWVu
dGF0aW9uIGZvciBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4MTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmF1ZGlvL21lZGlhc3RyZWFt
YXVkaW9kZXN0aW5hdGlvbm5vZGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9tZWRpYXN0cmVhbWF1ZGlvZGVzdGluYXRpb25ub2RlLmh0bWw6IEFkZGVkLgorCiAyMDEy
LTExLTI2ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtXSBVbnJldmlld2VkLCBtYXJrIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZm9y
bXMvY2FsZW5kYXItcGlja2VyL3dlZWstcGlja2VyLWtleS1vcGVyYXRpb25zLmh0bWwgYXMgZmxh
a3kgKGRhdGUtZGVwZW5kZW50KS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL21l
ZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODg5Y2MwOTFjNzEyYmI1NzRjMjE5YTg0ZGY0YWNjZTNlYTg1YzQyZQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5h
dGlvbm5vZGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorQmFzaWMgdGVzdHMgZm9yIE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgQVBJLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKK1BBU1MgRGVzdGluYXRpb24gQXVkaW9Ob2RlIGhhcyBvbmUgaW5wdXQuCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9k
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg4YmE4NGUxNWQ4MDliYmIwMDFjZDk3NzBiYTJlMTNjYTE4MTQw
OTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYXN0cmVhbWF1
ZGlvZGVzdGluYXRpb25ub2RlLmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPCFET0NUWVBFIGh0bWw+
CisKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0
aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0
aW9uKCJCYXNpYyB0ZXN0cyBmb3IgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSBBUEku
Iik7CisKK3ZhciBjb250ZXh0ID0gMDsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgfQorCisgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsKKworICAgIHZh
ciBtZWRpYVN0cmVhbURlc3RpbmF0aW9uID0gY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3Rp
bmF0aW9uKCk7CisKKyAgICAvLyBDaGVjayBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzLgor
ICAgIGlmIChtZWRpYVN0cmVhbURlc3RpbmF0aW9uLm51bWJlck9mSW5wdXRzID09IDEpCisgICAg
ICAgIHRlc3RQYXNzZWQoIkRlc3RpbmF0aW9uIEF1ZGlvTm9kZSBoYXMgb25lIGlucHV0LiIpOwor
ICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiRGVzdGluYXRpb24gQXVkaW9Ob2RlIHNob3Vs
ZCBoYXZlIG9uZSBpbnB1dC4iKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBubyBv
dXRwdXRzLCBidXQgc2luY2Ugd2UncmUgaW1wbGVtZW50ZWQgdXNpbmcgQXVkaW9CYXNpY0luc3Bl
Y3Rvck5vZGUKKyAgICAvLyB3ZSBoYXZlIG9uZS4KKyAgICAvLyBpZiAobWVkaWFTdHJlYW1EZXN0
aW5hdGlvbi5udW1iZXJPZk91dHB1dHMgPT0gMCkKKyAgICAvLyAgICAgdGVzdFBhc3NlZCgiRGVz
dGluYXRpb24gQXVkaW9Ob2RlIGhhcyBubyBvdXRwdXRzLiIpOworICAgIC8vIGVsc2UKKyAgICAv
LyAgICAgdGVzdEZhaWxlZCgiRGVzdGluYXRpb24gQXVkaW9Ob2RlIHNob3VsZCBub3QgaGF2ZSBv
dXRwdXRzLiIpOworCisgICAgLy8gRklYTUU6IGFkZCBhIHRlc3Qgd2hlcmUgd2UgY3JlYXRlIGEg
UGVlckNvbm5lY3Rpb24gYW5kIGNhbGwgYWRkU3RyZWFtKG1lZGlhU3RyZWFtRGVzdGluYXRpb24u
c3RyZWFtKS4KKyAgICAKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgpOword2lu
ZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNy
Yz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176240</attachid>
            <date>2012-11-27 05:17:07 -0800</date>
            <delta_ts>2012-11-28 01:05:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101815-20121127141443.patch</filename>
            <type>text/plain</type>
            <size>37042</size>
            <attacher name="Tommy Widenflycht">tommyw</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAzNDBhYjg5YmU4ZTUy
MzNkNGI1OGY3YjE1YTMzYzkyMmU0YWRhMzMxLi41MTM5MjRiMGE4OGNhMmRiNGE5MTk5ZmM4M2U3
ZjcxZWJmMDQyODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0yMCAg
VG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgYmFz
aWMgaW1wbGVtZW50YXRpb24gZm9yIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgxNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgdGhlIGNv
bnN1bWVyIGludGVyZmFjZSBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRvIFdlYk1lZGlhU3Ry
ZWFtU291cmNlLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkF1ZGlvRGVzdGluYXRp
b25Db25zdW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJBdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXI6On5XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYk1lZGlhU3RyZWFtU291cmNlKToKKwogMjAxMi0xMS0yNiAgSmFtZXMgUm9i
aW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3Zl
IGRlcHJlY2F0ZWQgYW5kIHVudXNlZCBXZWJHcmFwaGljc0NvbnRleHQzRCBjb21wb3NpdG9yIGJp
bmRpbmcgY2FsbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkY2FmYjg1OGZjODNkYTNmYjc5NjljZThiODExNjA3
ZmUxMmU0MmNlLi5kMjk3YTk0N2UyNGY2MDIwYTAxYjk4ZTA4YjVlYzE3OGQyMzFhNzJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTItMTEtMjAgIFRvbW15IFdpZGVuZmx5Y2h0ICA8
dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGJhc2ljIGltcGxlbWVudGF0aW9uIGZv
ciBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4MTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIGFuIGF1ZGlvIGRlc3RpbmF0aW9u
IG5vZGUgd2hpY2ggaGFzIGEgTWVkaWFTdHJlYW0uCisgICAgICAgIFRoaXMgY2FuIGJlIGFkZGVk
IHRvIGEgUGVlckNvbm5lY3Rpb24gd2l0aCBwZWVyQ29ubmVjdGlvbi5hZGRTdHJlYW0oKS4KKyAg
ICAgICAgUGxlYXNlIHNlZSB1c2UgY2FzZSAoMyk6CisgICAgICAgIGh0dHBzOi8vZHZjcy53My5v
cmcvaGcvYXVkaW8vcmF3LWZpbGUvdGlwL3dlYmF1ZGlvL3dlYnJ0Yy1pbnRlZ3JhdGlvbi5odG1s
CisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9k
ZS5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRl
TWVkaWFTdHJlYW1EZXN0aW5hdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQXVkaW9Db250ZXh0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGw6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9k
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6bWVkaWFTdHJlYW1Tb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fk1lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJl
YW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZXNldCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnN0cmVh
bSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlLmlkbDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb25Db25zdW1lci5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI6On5BdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViTWVk
aWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVNvdXJj
ZTo6ZXh0cmFEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2U6OnNl
dEV4dHJhRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhU3RyZWFtU291cmNlOjpyZXF1
aXJlc0F1ZGlvQ29uc3VtZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKENvbnN1bWVy
V3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6OkNvbnN1bWVyV3JhcHBlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6Q29uc3VtZXJXcmFwcGVyOjpjb25zdW1lcik6CisgICAgICAgIChXZWJL
aXQ6OkNvbnN1bWVyV3JhcHBlcjo6Q29uc3VtZXJXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6
Q29uc3VtZXJXcmFwcGVyOjpjb25zdW1lQXVkaW8pOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbVNvdXJjZTo6YWRkQXVkaW9Db25zdW1lcik6CisgICAgICAgIChXZWJLaXQ6OldlYk1l
ZGlhU3RyZWFtU291cmNlOjpyZW1vdmVBdWRpb0NvbnN1bWVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVN0cmVhbVNvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
U291cmNlOjpNZWRpYVN0cmVhbVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVh
bVNvdXJjZTo6YWRkQXVkaW9Db25zdW1lcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpyZW1vdmVBdWRpb0NvbnN1bWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtU291cmNlOjpjb25zdW1lQXVkaW8pOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKE1lZGlhU3RyZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtU291cmNlOjpyZXF1aXJlc0F1ZGlvQ29uc3VtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1Tb3VyY2U6OmF1ZGlvQ29uc3VtZXJzKToKKwogMjAxMi0xMS0yNyAgQWxl
eGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluY29ycmVj
dCB2YWx1ZSBvZiBDU1NTdHlsZURlY2xhcmF0aW9uI2xlbmd0aCB3aGVuIGEgc2hvcnRoYW5kIHBy
b3BlcnR5IGlzIGluaGVyaXQgb3IgaW5pdGlhbApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaCBiL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWMxZTU3MzM2ZDIzNDQ4Yzg2NzM5NDI1YTI5Nzk1NjVhN2FmNDU3ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQXVkaW9EZXN0
aW5hdGlvbkNvbnN1bWVyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJfaAorI2RlZmluZSBXZWJBdWRpb0Rlc3RpbmF0
aW9uQ29uc3VtZXJfaAorCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgfldlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcigpIHsgfQorCisgICAgLy8gVGhl
IHNpemUgb2YgdGhlIHZlY3RvciBpcyB0aGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLCBhbmQg
bnVtYmVyT2ZGcmFtZXMgaXMgdGhlCisgICAgLy8gbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBpbiB0
aGUgKHBvc3NpYmx5IG11bHRpLWNoYW5uZWwpIGJ1ZmZlciBpbiBhIHBsYW5hciBmb3JtYXQuCisg
ICAgdmlydHVhbCB2b2lkIGNvbnN1bWVBdWRpbyhjb25zdCBXZWJWZWN0b3I8Y29uc3QgZmxvYXQq
PiYsIHNpemVfdCBudW1iZXJPZkZyYW1lcykgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5o
IGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJNZWRpYVN0cmVhbVNvdXJjZS5o
CmluZGV4IDNhOTcyZjFkODU1NGMyODEwNWM4ZGM0OGY3YzAxMzMyOTA1M2QyNzAuLmNmZjlmY2Uy
MDdlYzdlMDkxYTcxZTFiMmVmMjY4ZTM1YWUwNzFkNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlLmgKQEAgLTM0LDEz
ICszNCwxNCBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogI2luY2x1ZGUgIldlYk5vbkNvcHlh
YmxlLmgiCiAjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorI2luY2x1ZGUgIldlYlZlY3Rvci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBNZWRpYVN0cmVhbVNvdXJjZTsKIH0KIAog
bmFtZXNwYWNlIFdlYktpdCB7Ci0KK2NsYXNzIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcjsK
IGNsYXNzIFdlYlN0cmluZzsKIAogY2xhc3MgV2ViTWVkaWFTdHJlYW1Tb3VyY2UgewpAQCAtOTEs
NiArOTIsMTMgQEAgcHVibGljOgogICAgIFdFQktJVF9FWFBPUlQgRXh0cmFEYXRhKiBleHRyYURh
dGEoKSBjb25zdDsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RXh0cmFEYXRhKEV4dHJhRGF0
YSopOwogCisgICAgLy8gT25seSB1c2VkIGlmIGlmIHRoaXMgaXMgYSBXZWJBdWRpbyBzb3VyY2Uu
CisgICAgLy8gVGhlIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciBpcyBub3Qgb3duZWQsIGFu
ZCBoYXMgdG8gYmUgZGlzcG9zZWQgb2Ygc2VwYXJhdGVseQorICAgIC8vIGFmdGVyIGNhbGxpbmcg
cmVtb3ZlQXVkaW9Db25zdW1lci4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgcmVxdWlyZXNBdWRp
b0NvbnN1bWVyKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZEF1ZGlvQ29uc3Vt
ZXIoV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKik7CisgICAgV0VCS0lUX0VYUE9SVCBib29s
IHJlbW92ZUF1ZGlvQ29uc3VtZXIoV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKik7CisKICNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJNZWRpYVN0cmVhbVNvdXJjZShjb25zdCBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6TWVkaWFTdHJlYW1Tb3VyY2U+Jik7CiAgICAgV2ViTWVk
aWFTdHJlYW1Tb3VyY2UmIG9wZXJhdG9yPShXZWJDb3JlOjpNZWRpYVN0cmVhbVNvdXJjZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmlu
ZGV4IDA3OGUxNjFjYTg4YjM5MzU5MzJlZGJmZjEwNzIyYzM0ZTk2OGIzMjkuLjcxNGFiNTIwZWUz
OTJmOTc2ZGI0ZWYwMzRlM2M3MzA1MDYyYzg3MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKKyNpbmNsdWRl
ICJNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW1BdWRpb1NvdXJjZU5vZGUuaCIKICNlbmRpZgogCkBAIC00MzAsNiArNDMxLDE0IEBAIFBhc3NS
ZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVk
aWFTdHJlYW1Tb3VyY2UoTWVkCiAgICAgcmVmTm9kZShub2RlLmdldCgpKTsgLy8gY29udGV4dCBr
ZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25uZWN0ZWQKICAgICByZXR1cm4gbm9k
ZTsKIH0KKworUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBBdWRp
b0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKQoreworICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRo
ZSBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgLy8gRklYTUU6IFRoZSBkZWZhdWx0IHNob3VsZCBw
cm9iYWJseSBiZSBzdGVyZW8gaW5zdGVhZCBvZiBtb25vLgorICAgIHJldHVybiBNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUodGhpcywgMSk7Cit9CisKICNlbmRpZgogCiBQ
YXNzUmVmUHRyPFNjcmlwdFByb2Nlc3Nvck5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlU2NyaXB0
UHJvY2Vzc29yKHNpemVfdCBidWZmZXJTaXplLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IDgwNDZhY2M5
ODI4MTVhZTk1YTRiZmMyMTg2NWI0ODRhNzBiNGRkM2QuLjZkYTNjMTJhOWY1ZWQzNTBkNDM5ZmQ4
ZjkwNTFiZWJlNDZjMTcxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaApAQCAtNDksNiArNDksNyBAQCBjbGFzcyBBdWRpb0J1ZmZlcjsKIGNs
YXNzIEF1ZGlvQnVmZmVyQ2FsbGJhY2s7CiBjbGFzcyBBdWRpb0J1ZmZlclNvdXJjZU5vZGU7CiBj
bGFzcyBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU7CitjbGFzcyBNZWRpYVN0cmVhbUF1ZGlv
RGVzdGluYXRpb25Ob2RlOwogY2xhc3MgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU7CiBjbGFz
cyBIVE1MTWVkaWFFbGVtZW50OwogY2xhc3MgQ2hhbm5lbE1lcmdlck5vZGU7CkBAIC0xMTgsNiAr
MTE5LDcgQEAgcHVibGljOgogI2VuZGlmCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGVNZWRpYVN0cmVhbVNv
dXJjZShNZWRpYVN0cmVhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IGNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24o
KTsKICNlbmRpZgogICAgIFBhc3NSZWZQdHI8R2Fpbk5vZGU+IGNyZWF0ZUdhaW4oKTsKICAgICBQ
YXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IGNyZWF0ZUJpcXVhZEZpbHRlcigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmluZGV4IDE3
MzMxM2Y5NWVkZmY2M2NkODAwODQ4YjBmODE2MjZjMTJmMDBhYjQuLmYyZDhmNGMyYjBiMDlmN2Mw
YjIyNmI5YTU2ZDE2NjUxMmRkNDAzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKQEAgLTY2LDYgKzY2LDcgQEAKICNpZiBkZWZpbmVk
KEVOQUJMRV9NRURJQV9TVFJFQU0pICYmIEVOQUJMRV9NRURJQV9TVFJFQU0KICAgICBNZWRpYVN0
cmVhbUF1ZGlvU291cmNlTm9kZSBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShpbiBNZWRpYVN0cmVh
bSBtZWRpYVN0cmVhbSkKICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSBjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCk7
CiAjZW5kaWYKIAogICAgIC8vIFByb2Nlc3Npbmcgbm9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCmluZGV4IDYxYjVhMjBiMTU0MTk1NzUwNTkzMWQ0ZmYx
ODU4ODY5MTFkYjM2ZTIuLjMwYjhlYjMxYzg0MzA5YzI0M2U2NjA0ODA4NTYxMzFmMzc0N2ZjNDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaApAQCAtNjQs
NiArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIE5vZGVUeXBlT3NjaWxsYXRvciwKICAgICAgICAg
Tm9kZVR5cGVBdWRpb0J1ZmZlclNvdXJjZSwKICAgICAgICAgTm9kZVR5cGVNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZSwKKyAgICAgICAgTm9kZVR5cGVNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb24s
CiAgICAgICAgIE5vZGVUeXBlTWVkaWFTdHJlYW1BdWRpb1NvdXJjZSwKICAgICAgICAgTm9kZVR5
cGVKYXZhU2NyaXB0LAogICAgICAgICBOb2RlVHlwZUJpcXVhZEZpbHRlciwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFt
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3NDVmMmY1ZjExZjQwYWI0NmQw
N2RlNTI5NzUyMDAwMTZiZTVhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC0w
LDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKKyNpbmNsdWRlICJMb2NhbE1lZGlhU3RyZWFt
LmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29u
bmVjdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJVVUlELmgiCisjaW5jbHVkZSA8d3RmL0xvY2tl
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRp
b0Rlc3RpbmF0aW9uTm9kZT4gTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRl
KEF1ZGlvQ29udGV4dCogY29udGV4dCwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRl
eHQsIG51bWJlck9mQ2hhbm5lbHMpKTsKK30KKworTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGNvbnRl
eHQsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzKQorICAgIDogQXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUoY29udGV4dCwgY29udGV4dC0+c2FtcGxlUmF0ZSgpKQorICAgICwgbV9taXhCdXMobnVtYmVy
T2ZDaGFubmVscywgUHJvY2Vzc2luZ1NpemVJbkZyYW1lcykKK3sKKyAgICBzZXROb2RlVHlwZShO
b2RlVHlwZU1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbik7CisKKyAgICBtX3NvdXJjZSA9IE1l
ZGlhU3RyZWFtU291cmNlOjpjcmVhdGUoQVNDSUlMaXRlcmFsKCJXZWJBdWRpby0iKSArIGNyZWF0
ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwgTWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbywgIk1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUiLCBNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlT
dGF0ZUxpdmUsIHRydWUpOworICAgIE1lZGlhU3RyZWFtU291cmNlVmVjdG9yIGF1ZGlvU291cmNl
czsKKyAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKG1fc291cmNlKTsKKyAgICBNZWRpYVN0cmVhbVNv
dXJjZVZlY3RvciB2aWRlb1NvdXJjZXM7CisgICAgbV9zdHJlYW0gPSBMb2NhbE1lZGlhU3RyZWFt
OjpjcmVhdGUoY29udGV4dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBhdWRpb1NvdXJjZXMs
IHZpZGVvU291cmNlcyk7CisgICAgTWVkaWFTdHJlYW1DZW50ZXI6Omluc3RhbmNlKCkuZGlkQ3Jl
YXRlTWVkaWFTdHJlYW0obV9zdHJlYW0tPmRlc2NyaXB0b3IoKSk7CisKKyAgICBpbml0aWFsaXpl
KCk7Cit9CisKK01lZGlhU3RyZWFtU291cmNlKiBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlOjptZWRpYVN0cmVhbVNvdXJjZSgpCit7CisgICAgcmV0dXJuIG1fc291cmNlLmdldCgpOwor
fQorCitNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+TWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZSgpCit7CisgICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgTWVkaWFT
dHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFtZXMp
Cit7CisgICAgbV9taXhCdXMuY29weUZyb20oKmlucHV0KDApLT5idXMoKSk7CisgICAgbV9zb3Vy
Y2UtPmNvbnN1bWVBdWRpbygmbV9taXhCdXMsIG51bWJlck9mRnJhbWVzKTsKK30KKwordm9pZCBN
ZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZXNldCgpCit7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShN
RURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRhOWEyNzY1ZThhYjA0OWVlNGM1NDYwODY1ZWRlMWJjZDU2NTVmOTIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNZWRp
YVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKKyNkZWZpbmUgTWVkaWFTdHJlYW1BdWRpb0Rl
c3RpbmF0aW9uTm9kZV9oCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjaW5jbHVkZSAiQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUuaCIKKyNpbmNsdWRl
ICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQXVkaW9Db250ZXh0OworCitjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlIDogcHVibGljIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVh
dGUoQXVkaW9Db250ZXh0Kiwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpOworCisgICAgdmlydHVh
bCB+TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZSgpOworCisgICAgTWVkaWFTdHJlYW0q
IHN0cmVhbSgpIHsgcmV0dXJuIG1fc3RyZWFtLmdldCgpOyB9CisKKyAgICAvLyBBdWRpb05vZGUu
CisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CisgICAg
dmlydHVhbCB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgTWVkaWFTdHJlYW1Tb3VyY2UqIG1lZGlh
U3RyZWFtU291cmNlKCk7CisKK3ByaXZhdGU6CisgICAgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uTm9kZShBdWRpb0NvbnRleHQqLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyk7CisKKyAgICB2
aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7
IH0KKworICAgIC8vIEFzIGFuIGF1ZGlvIHNvdXJjZSwgd2Ugd2lsbCBuZXZlciBwcm9wYWdhdGUg
c2lsZW5jZS4KKyAgICB2aXJ0dWFsIGJvb2wgcHJvcGFnYXRlc1NpbGVuY2UoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgUmVmUHRyPE1lZGlhU3RyZWFtPiBtX3N0cmVh
bTsKKyAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IG1fc291cmNlOworICAgIEF1ZGlvQnVz
IG1fbWl4QnVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8vIE1lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcxYmJhNDFhZGIxMWMzOTA3OTYxZTcwYzVkMjZhZTBiOTZj
MzgyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5pZGwKQEAgLTAsMCArMSwzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK1sKKyAgICBDb25kaXRpb25hbD1XRUJfQVVESU8mTUVESUFfU1RSRUFNLAorICAg
IEpTR2VuZXJhdGVUb0pTT2JqZWN0CitdIGludGVyZmFjZSBNZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlIDogQXVkaW9Tb3VyY2VOb2RlIHsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVk
aWFTdHJlYW0gc3RyZWFtOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5NTljZTVkNzY1MDcyODZi
OWM5YzYwMGI2MjA4ZGY3M2M1YzhiNTU1Li5hMzViM2JjMGMwNDI4Mjc1MzIzNjg5NGNiYzUzYjNh
ZDA1M2Y1YTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC05MjAsNiArOTIwLDcgQEAKICAgICAgICAg
ICAgICdNb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsJywKICAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuaWRsJywKICAgICAg
ICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5pZGwn
LAorICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGUuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudC5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVk
aW8vT3NjaWxsYXRvck5vZGUuaWRsJywKQEAgLTE3NDYsNiArMTc0Nyw4IEBACiAgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmgnLAogICAgICAgICAgICAg
J01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCcs
CisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1
ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViYXVkaW8vTWVk
aWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmF1
ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmgnLAogICAgICAgICAgICAgJ01vZHVsZXMv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb25Db25zdW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVjYmEwOGZmYzg4Yjc4YTNkNjYzZTUzMGZlMTE2Yjc0YmM2N2MwNzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3Rp
bmF0aW9uQ29uc3VtZXIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0Rl
c3RpbmF0aW9uQ29uc3VtZXJfaAorI2RlZmluZSBBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXJfaAor
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBdWRpb0J1czsKKworY2xhc3MgQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29uc3VtZUF1ZGlvKEF1ZGlvQnVzKiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKSA9IDA7Cit9Owor
Cit9IC8vIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYk1l
ZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCmluZGV4IGE1MTY5MzYxMDIwYTRmOTkyZmRj
ZDdiNmZjMzgzZGIxODhkMmFmOWQuLjA1Y2U3ZDA2OGY1NmZkYmRhOGM4M2I5YTU1MzExMWYyOTIw
ZTY5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCw4ICszNCwx
MSBAQAogCiAjaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtU291cmNlLmg+CiAKKyNpbmNs
dWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFtU291cmNlLmgiCisjaW5jbHVk
ZSA8cHVibGljL1dlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lci5oPgogI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xMjEsNiArMTI0
LDcgQEAgcHJpdmF0ZToKIAogV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OkV4dHJhRGF0YSogV2ViTWVk
aWFTdHJlYW1Tb3VyY2U6OmV4dHJhRGF0YSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX3ByaXZh
dGUuaXNOdWxsKCkpOwogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZTo6RXh0cmFEYXRhPiBk
YXRhID0gbV9wcml2YXRlLT5leHRyYURhdGEoKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTI5LDkgKzEzMyw3MiBAQCBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6RXh0cmFE
YXRhKiBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6ZXh0cmFEYXRhKCkgY29uc3QKIAogdm9pZCBXZWJN
ZWRpYVN0cmVhbVNvdXJjZTo6c2V0RXh0cmFEYXRhKEV4dHJhRGF0YSogZXh0cmFEYXRhKQogewor
ICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKICAgICBtX3ByaXZhdGUtPnNldEV4dHJh
RGF0YShhZG9wdFJlZihuZXcgRXh0cmFEYXRhQ29udGFpbmVyKGV4dHJhRGF0YSkpKTsKIH0KIAor
Ym9vbCBXZWJNZWRpYVN0cmVhbVNvdXJjZTo6cmVxdWlyZXNBdWRpb0NvbnN1bWVyKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+cmVxdWlyZXNBdWRpb0NvbnN1bWVyKCk7Cit9CisKK2NsYXNzIENvbnN1bWVyV3JhcHBlciA6
IHB1YmxpYyBXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENvbnN1bWVyV3JhcHBlcj4gY3JlYXRlKFdlYkF1ZGlvRGVzdGlu
YXRpb25Db25zdW1lciogY29uc3VtZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENvbnN1bWVyV3JhcHBlcihjb25zdW1lcikpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBjb25zdW1lQXVkaW8oQXVkaW9CdXMqLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpIE9WRVJSSURF
OworCisgICAgV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKiBjb25zdW1lcigpIHsgcmV0dXJu
IG1fY29uc3VtZXI7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDb25zdW1lcldyYXBwZXIo
V2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKiBjb25zdW1lcikgOiBtX2NvbnN1bWVyKGNvbnN1
bWVyKSB7IH0KKworICAgIC8vIG1fY29uc3VtZXIgaXMgbm90IG93bmVkIGJ5IHRoaXMgY2xhc3Mu
CisgICAgV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKiBtX2NvbnN1bWVyOworfTsKKwordm9p
ZCBDb25zdW1lcldyYXBwZXI6OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVzLCBzaXplX3QgbnVt
YmVyT2ZGcmFtZXMpCit7CisgICAgaWYgKCFidXMpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFdyYXAgQXVkaW9CdXMuCisgICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBidXMtPm51bWJl
ck9mQ2hhbm5lbHMoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3Rvcjxjb25zdCBmbG9hdCo+IGJ1c1Zl
Y3RvcihudW1iZXJPZkNoYW5uZWxzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsraSkKKyAgICAgICAgYnVzVmVjdG9yW2ldID0gYnVzLT5jaGFubmVsKGkp
LT5kYXRhKCk7CisKKyAgICBtX2NvbnN1bWVyLT5jb25zdW1lQXVkaW8oYnVzVmVjdG9yLCBudW1i
ZXJPZkZyYW1lcyk7Cit9CisKK3ZvaWQgV2ViTWVkaWFTdHJlYW1Tb3VyY2U6OmFkZEF1ZGlvQ29u
c3VtZXIoV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyKiBjb25zdW1lcikKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpICYmIGNv
bnN1bWVyKTsKKworICAgIG1fcHJpdmF0ZS0+YWRkQXVkaW9Db25zdW1lcihDb25zdW1lcldyYXBw
ZXI6OmNyZWF0ZShjb25zdW1lcikpOworfQorCitib29sIFdlYk1lZGlhU3RyZWFtU291cmNlOjpy
ZW1vdmVBdWRpb0NvbnN1bWVyKFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5p
c051bGwoKSAmJiBjb25zdW1lcik7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEF1ZGlvRGVz
dGluYXRpb25Db25zdW1lcj4gPiYgY29uc3VtZXJzID0gbV9wcml2YXRlLT5hdWRpb0NvbnN1bWVy
cygpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY29uc3VtZXJzLmJlZ2luKCk7IGl0ICE9IGNvbnN1bWVycy5l
bmQoKTsgKytpdCkgeworICAgICAgICBDb25zdW1lcldyYXBwZXIqIHdyYXBwZXIgPSBzdGF0aWNf
Y2FzdDxDb25zdW1lcldyYXBwZXIqPigoKml0KS5nZXQoKSk7CisgICAgICAgIGlmICh3cmFwcGVy
LT5jb25zdW1lcigpID09IGNvbnN1bWVyKSB7CisgICAgICAgICAgICBtX3ByaXZhdGUtPnJlbW92
ZUF1ZGlvQ29uc3VtZXIod3JhcHBlcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmNwcAppbmRl
eCAxNzIwNDg3ZGMxMjU0YTRjMjM0MjRjYjEwMDFlYWY2MjljOTI4NTFkLi5mMjM0MDVjMDcyMGUy
MTY4OWMzNDZiOTU3NmIyZGNlNTA1ZGJmZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zMywx
OSArMzMsMjEgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW1Tb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IE1lZGlhU3RyZWFtU291
cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKK1Bhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+
IE1lZGlhU3RyZWFtU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgVHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUsIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSwgYm9vbCByZXF1aXJlc0Nv
bnN1bWVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFTdHJlYW1Tb3VyY2UoaWQs
IHR5cGUsIG5hbWUsIHJlYWR5U3RhdGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlh
U3RyZWFtU291cmNlKGlkLCB0eXBlLCBuYW1lLCByZWFkeVN0YXRlLCByZXF1aXJlc0NvbnN1bWVy
KSk7CiB9CiAKLU1lZGlhU3RyZWFtU291cmNlOjpNZWRpYVN0cmVhbVNvdXJjZShjb25zdCBTdHJp
bmcmIGlkLCBUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSByZWFkeVN0
YXRlKQorTWVkaWFTdHJlYW1Tb3VyY2U6Ok1lZGlhU3RyZWFtU291cmNlKGNvbnN0IFN0cmluZyYg
aWQsIFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBSZWFkeVN0YXRlIHJlYWR5U3RhdGUs
IGJvb2wgcmVxdWlyZXNDb25zdW1lcikKICAgICA6IG1faWQoaWQpCiAgICAgLCBtX3R5cGUodHlw
ZSkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9yZWFkeVN0YXRlKHJlYWR5U3RhdGUpCisg
ICAgLCBtX3JlcXVpcmVzQ29uc3VtZXIocmVxdWlyZXNDb25zdW1lcikKIHsKIH0KIApAQCAtNzEs
NiArNzMsMzMgQEAgdm9pZCBNZWRpYVN0cmVhbVNvdXJjZTo6cmVtb3ZlT2JzZXJ2ZXIoTWVkaWFT
dHJlYW1Tb3VyY2U6Ok9ic2VydmVyKiBvYnNlcnZlcikKICAgICAgICAgbV9vYnNlcnZlcnMucmVt
b3ZlKHBvcyk7CiB9CiAKK3ZvaWQgTWVkaWFTdHJlYW1Tb3VyY2U6OmFkZEF1ZGlvQ29uc3VtZXIo
UGFzc1JlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXI+IGNvbnN1bWVyKQoreworICAgIEFT
U0VSVChtX3JlcXVpcmVzQ29uc3VtZXIpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1ZGlv
Q29uc3VtZXJzTG9jayk7CisgICAgbV9hdWRpb0NvbnN1bWVycy5hcHBlbmQoY29uc3VtZXIpOwor
fQorCitib29sIE1lZGlhU3RyZWFtU291cmNlOjpyZW1vdmVBdWRpb0NvbnN1bWVyKEF1ZGlvRGVz
dGluYXRpb25Db25zdW1lciogY29uc3VtZXIpCit7CisgICAgQVNTRVJUKG1fcmVxdWlyZXNDb25z
dW1lcik7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKKyAg
ICBzaXplX3QgcG9zID0gbV9hdWRpb0NvbnN1bWVycy5maW5kKGNvbnN1bWVyKTsKKyAgICBpZiAo
cG9zICE9IG5vdEZvdW5kKSB7CisgICAgICAgIG1fYXVkaW9Db25zdW1lcnMucmVtb3ZlKHBvcyk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgTWVkaWFTdHJlYW1Tb3VyY2U6OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVzLCBzaXplX3Qg
bnVtYmVyT2ZGcmFtZXMpCit7CisgICAgQVNTRVJUKG1fcmVxdWlyZXNDb25zdW1lcik7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKKyAgICBmb3IgKFZlY3Rv
cjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPiA+OjppdGVyYXRvciBpdCA9IG1fYXVk
aW9Db25zdW1lcnMuYmVnaW4oKTsgaXQgIT0gbV9hdWRpb0NvbnN1bWVycy5lbmQoKTsgKytpdCkK
KyAgICAgICAgKCppdCktPmNvbnN1bWVBdWRpbyhidXMsIG51bWJlck9mRnJhbWVzKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVNvdXJjZS5oCmluZGV4IGJmNzExMGVkYzA5MDkzNTNlZjE5NTlhMGQ5NGRhNjRlODIzNjM2
N2MuLjc2Mjg3MGE5Y2I3MTIyYjU2YmFmZWU0ZmJhMjVhOWQ5YzYyMWU4YWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtU291cmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Tb3Vy
Y2UuaApAQCAtMzQsNiArMzQsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorI2lu
Y2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db25zdW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgpAQCAtNjQsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJlYWR5U3RhdGVFbmRl
ZCA9IDIKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIFJlYWR5
U3RhdGUgPSBSZWFkeVN0YXRlTGl2ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFTdHJl
YW1Tb3VyY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBUeXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIFJlYWR5U3RhdGUgPSBSZWFkeVN0YXRlTGl2ZSwgYm9vbCByZXF1aXJlc0NvbnN1bWVyID0g
ZmFsc2UpOwogCiAgICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0K
ICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KQEAgLTc5LDE0ICs4MCwy
NCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxFeHRyYURhdGE+IGV4dHJhRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZXh0cmFEYXRhOyB9CiAgICAgdm9pZCBzZXRFeHRyYURhdGEoUGFzc1JlZlB0
cjxFeHRyYURhdGE+IGV4dHJhRGF0YSkgeyBtX2V4dHJhRGF0YSA9IGV4dHJhRGF0YTsgfQogCisg
ICAgdm9pZCBjb25zdW1lQXVkaW8oQXVkaW9CdXMqLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpOwor
CisgICAgYm9vbCByZXF1aXJlc0F1ZGlvQ29uc3VtZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcXVp
cmVzQ29uc3VtZXI7IH0KKyAgICB2b2lkIGFkZEF1ZGlvQ29uc3VtZXIoUGFzc1JlZlB0cjxBdWRp
b0Rlc3RpbmF0aW9uQ29uc3VtZXI+KTsKKyAgICBib29sIHJlbW92ZUF1ZGlvQ29uc3VtZXIoQXVk
aW9EZXN0aW5hdGlvbkNvbnN1bWVyKik7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxBdWRpb0Rl
c3RpbmF0aW9uQ29uc3VtZXI+ID4mIGF1ZGlvQ29uc3VtZXJzKCkgeyByZXR1cm4gbV9hdWRpb0Nv
bnN1bWVyczsgfQorCiBwcml2YXRlOgotICAgIE1lZGlhU3RyZWFtU291cmNlKGNvbnN0IFN0cmlu
ZyYgaWQsIFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgUmVhZHlTdGF0ZSk7CisgICAgTWVkaWFT
dHJlYW1Tb3VyY2UoY29uc3QgU3RyaW5nJiBpZCwgVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBS
ZWFkeVN0YXRlLCBib29sIHJlcXVpcmVzQ29uc3VtZXIpOwogCiAgICAgU3RyaW5nIG1faWQ7CiAg
ICAgVHlwZSBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBSZWFkeVN0YXRlIG1fcmVh
ZHlTdGF0ZTsKKyAgICBib29sIG1fcmVxdWlyZXNDb25zdW1lcjsKICAgICBWZWN0b3I8T2JzZXJ2
ZXIqPiBtX29ic2VydmVyczsKKyAgICBNdXRleCBtX2F1ZGlvQ29uc3VtZXJzTG9jazsKKyAgICBW
ZWN0b3I8UmVmUHRyPEF1ZGlvRGVzdGluYXRpb25Db25zdW1lcj4gPiBtX2F1ZGlvQ29uc3VtZXJz
OwogICAgIFJlZlB0cjxFeHRyYURhdGE+IG1fZXh0cmFEYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU2NzQ5YTUzYWExOGRlNDFm
OGJjZDg2YTJiMDg2NGMxZTViMTI5OGIuLmNkYWZkMzBkYWE2Y2UwOWYwMDExNjAzZjg0ZTQ5YzUy
YjM3NGQwYjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMS0xOSAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21t
eXdAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgYmFzaWMgaW1wbGVtZW50YXRpb24gZm9yIE1l
ZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBiaXQgb2YgY29kZSB0aGF0IGV4ZXJjaXNlcyB0
aGUgV2ViS2l0IEFQSS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tX
ZWJNZWRpYVN0cmVhbUNlbnRlci5jcHA6CisgICAgICAgIChNb2NrV2ViTWVkaWFTdHJlYW1Tb3Vy
Y2VDb25zdW1lcik6CisgICAgICAgIChNb2NrV2ViTWVkaWFTdHJlYW1Tb3VyY2VDb25zdW1lcjo6
fk1vY2tXZWJNZWRpYVN0cmVhbVNvdXJjZUNvbnN1bWVyKToKKyAgICAgICAgKE1vY2tXZWJNZWRp
YVN0cmVhbUNlbnRlcjo6ZGlkQ3JlYXRlTWVkaWFTdHJlYW0pOgorCiAyMDEyLTExLTI3ICBTYWRy
dWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbc3R5
bGVdIEFkZCBhIHN0eWxlLWNoZWNrIGZvciBlbnVtLW1lbWJlciBuYW1lcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJNZWRpYVN0cmVhbUNlbnRl
ci5jcHAKaW5kZXggYjcxNzhmMDk5MTQ2NmJlYWJmMDYwMzY5ZGVjZjU1NTBhNTgxMzBhNS4uZTBm
NzYxOTM0MzUwNzY4NTZhMDVmMGJkMTJmMTM5MmQ2YTk5OGRhMyAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJNb2NrV2ViTWVkaWFTdHJlYW1DZW50
ZXIuaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIuaD4K
ICNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQuaD4KICNpbmNsdWRl
IDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1Db21wb25lbnQuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
TWVkaWFTdHJlYW1EZXNjcmlwdG9yLmg+CkBAIC04NSw4ICs4NiwyNSBAQCB2b2lkIE1vY2tXZWJN
ZWRpYVN0cmVhbUNlbnRlcjo6ZGlkU3RvcExvY2FsTWVkaWFTdHJlYW0oY29uc3QgV2ViTWVkaWFT
dHJlYW1EZXNjcgogICAgICAgICB2aWRlb0NvbXBvbmVudHNbaV0uc291cmNlKCkuc2V0UmVhZHlT
dGF0ZShXZWJNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkKTsKIH0KIAotdm9pZCBN
b2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6OmRpZENyZWF0ZU1lZGlhU3RyZWFtKFdlYk1lZGlhU3Ry
ZWFtRGVzY3JpcHRvciYpCitjbGFzcyBNb2NrV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyIDog
cHVibGljIFdlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+TW9ja1dlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcigpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjb25zdW1lQXVkaW8oY29uc3QgV2ViVmVjdG9yPGNvbnN0IGZsb2F0Kj4mLCBzaXplX3QgbnVt
YmVyX29mX2ZyYW1lcykgT1ZFUlJJREUgeyB9Cit9OworCit2b2lkIE1vY2tXZWJNZWRpYVN0cmVh
bUNlbnRlcjo6ZGlkQ3JlYXRlTWVkaWFTdHJlYW0oV2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yJiBz
dHJlYW0pCiB7CisgICAgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtQ29tcG9uZW50PiBhdWRpb0Nv
bXBvbmVudHM7CisgICAgc3RyZWFtLmF1ZGlvU291cmNlcyhhdWRpb0NvbXBvbmVudHMpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9Db21wb25lbnRzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFdlYk1lZGlhU3RyZWFtU291cmNlIHNvdXJjZSA9IGF1ZGlvQ29tcG9uZW50c1tpXS5z
b3VyY2UoKTsKKyAgICAgICAgaWYgKHNvdXJjZS5yZXF1aXJlc0F1ZGlvQ29uc3VtZXIoKSkgewor
ICAgICAgICAgICAgTW9ja1dlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3VtZXIgPSBu
ZXcgTW9ja1dlYkF1ZGlvRGVzdGluYXRpb25Db25zdW1lcigpOworICAgICAgICAgICAgc291cmNl
LmFkZEF1ZGlvQ29uc3VtZXIoY29uc3VtZXIpOworICAgICAgICAgICAgc291cmNlLnJlbW92ZUF1
ZGlvQ29uc3VtZXIoY29uc3VtZXIpOworICAgICAgICAgICAgZGVsZXRlIGNvbnN1bWVyOworICAg
ICAgICB9CisgICAgfQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAwMWI0OGM1MDExZDIzMTdmYjY1MWNjYzVhZWY0MzZmMmRkMGU5NDE0Li4zOGY1ZDIwY2IyNjEz
ZmQ3NWZiYTQ0MWYyOTVkNmFjYjczNGZhMWEyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTIt
MTEtMTkgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CisKKyAgICAgICAg
QWRkIGJhc2ljIGltcGxlbWVudGF0aW9uIGZvciBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE4
MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdl
YmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlvZGVzdGluYXRpb25ub2RlLmh0
bWw6IEFkZGVkLgorCiAyMDEyLTExLTI3ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW5jb3JyZWN0IHZhbHVlIG9mIENTU1N0eWxlRGVjbGFyYXRp
b24jbGVuZ3RoIHdoZW4gYSBzaG9ydGhhbmQgcHJvcGVydHkgaXMgaW5oZXJpdCBvciBpbml0aWFs
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlvZGVzdGlu
YXRpb25ub2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFt
YXVkaW9kZXN0aW5hdGlvbm5vZGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4OWNjMDkxYzcx
MmJiNTc0YzIxOWE4NGRmNGFjY2UzZWE4NWM0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9tZWRpYXN0cmVhbWF1ZGlvZGVzdGluYXRpb25ub2RlLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDkgQEAKK0Jhc2ljIHRlc3RzIGZvciBNZWRpYVN0cmVhbUF1ZGlvRGVzdGlu
YXRpb25Ob2RlIEFQSS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIERlc3Rp
bmF0aW9uIEF1ZGlvTm9kZSBoYXMgb25lIGlucHV0LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
OGJhODRlMTVkODA5YmJiMDAxY2Q5NzcwYmEyZTEzY2ExODE0MDkzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb2Rlc3RpbmF0aW9ubm9kZS5o
dG1sCkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQmFzaWMgdGVzdHMgZm9y
IE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgQVBJLiIpOworCit2YXIgY29udGV4dCA9
IDA7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKworICAgIGNvbnRleHQg
PSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KCk7CisKKyAgICB2YXIgbWVkaWFTdHJlYW1EZXN0aW5h
dGlvbiA9IGNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpOworCisgICAgLy8g
Q2hlY2sgbnVtYmVyIG9mIGlucHV0cyBhbmQgb3V0cHV0cy4KKyAgICBpZiAobWVkaWFTdHJlYW1E
ZXN0aW5hdGlvbi5udW1iZXJPZklucHV0cyA9PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCJEZXN0
aW5hdGlvbiBBdWRpb05vZGUgaGFzIG9uZSBpbnB1dC4iKTsKKyAgICBlbHNlCisgICAgICAgIHRl
c3RGYWlsZWQoIkRlc3RpbmF0aW9uIEF1ZGlvTm9kZSBzaG91bGQgaGF2ZSBvbmUgaW5wdXQuIik7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbm8gb3V0cHV0cywgYnV0IHNpbmNlIHdl
J3JlIGltcGxlbWVudGVkIHVzaW5nIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlCisgICAgLy8gd2Ug
aGF2ZSBvbmUuCisgICAgLy8gaWYgKG1lZGlhU3RyZWFtRGVzdGluYXRpb24ubnVtYmVyT2ZPdXRw
dXRzID09IDApCisgICAgLy8gICAgIHRlc3RQYXNzZWQoIkRlc3RpbmF0aW9uIEF1ZGlvTm9kZSBo
YXMgbm8gb3V0cHV0cy4iKTsKKyAgICAvLyBlbHNlCisgICAgLy8gICAgIHRlc3RGYWlsZWQoIkRl
c3RpbmF0aW9uIEF1ZGlvTm9kZSBzaG91bGQgbm90IGhhdmUgb3V0cHV0cy4iKTsKKworICAgIC8v
IEZJWE1FOiBhZGQgYSB0ZXN0IHdoZXJlIHdlIGNyZWF0ZSBhIFBlZXJDb25uZWN0aW9uIGFuZCBj
YWxsIGFkZFN0cmVhbShtZWRpYVN0cmVhbURlc3RpbmF0aW9uLnN0cmVhbSkuCisgICAgCisgICAg
ZmluaXNoSlNUZXN0KCk7Cit9CisKK3J1blRlc3QoKTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>