<?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>66771</bug_id>
          
          <creation_ts>2011-08-23 06:17:15 -0700</creation_ts>
          <short_desc>[Qt][WK2] Drive tiling from the WebProcess and reuse TiledBackingStore.</short_desc>
          <delta_ts>2011-08-25 05:52:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66760</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jocelyn Turcotte">jturcotte</reporter>
          <assigned_to name="Jocelyn Turcotte">jturcotte</assigned_to>
          <cc>benjamin</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>455363</commentid>
    <comment_count>0</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-23 06:17:15 -0700</bug_when>
    <thetext>[Qt][WK2] Drive tiling from the WebProcess and reuse TiledBackingStore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455403</commentid>
    <comment_count>1</comment_count>
      <attachid>104844</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-23 07:51:55 -0700</bug_when>
    <thetext>Created attachment 104844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455411</commentid>
    <comment_count>2</comment_count>
      <attachid>104844</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-23 08:10:30 -0700</bug_when>
    <thetext>Comment on attachment 104844
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebview.cpp:60
&gt;  void QTouchWebViewPrivate::updateViewportState()
&gt;  {
&gt;      QSize availableSize = q-&gt;boundingRect().size().toSize();
&gt; +    if (availableSize.isEmpty())
&gt; +        return;

Please ignore that part, it was just to fix an assert and should be done in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455992</commentid>
    <comment_count>3</comment_count>
      <attachid>104844</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-08-24 00:23:17 -0700</bug_when>
    <thetext>Comment on attachment 104844
Patch

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

Overall pretty good stuff. The naming issue is cosmetic, but I think that the m_tilesToNodes map handling is buggy. I&apos;m not 100% sure about the QPainter::end() issue, maybe it&apos;s not a real problem.

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:100
&gt; +    if (!m_client-&gt;tiledBackingStoreIsUpdatingAllowed() || m_contentsFrozen)

I suggest to call this tiledBackingStoreUpdatesAllowed() or tiledBackingStoreRepaintsAllowed()

&gt; Source/WebCore/platform/graphics/TiledBackingStoreClient.h:34
&gt; +    virtual bool tiledBackingStoreIsUpdatingAllowed() { return true; }

Missing const in the declaration?

&gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:79
&gt; +    if (d-&gt;sgAgent.isSwapPending())
&gt; +        // The UI thread is currently locked and calling this from the rendering thread didn&apos;t crash
&gt; +        // yet, so I&apos;m assuming that this is OK. Else we have to wait until the SG update is over
&gt; +        // and the UI thread returns to the event loop picking our event before it can be sent to
&gt; +        // the web process. This would increase our chances of missing a frame.
&gt; +        d-&gt;page-&gt;renderNextFrame();

I suggest to add opening curly braces and closing braces around the block, even though to the compiler it&apos;s just a one-line body.

&gt; Source/WebKit2/UIProcess/qt/TiledDrawingAreaProxyQt.cpp:79
&gt; +    int nodeID = m_tilesToNodes.get(tileID);

Shouldn&apos;t this be m_tilesToNodes.take(tileId) instead of get?

&gt; Source/WebKit2/WebProcess/WebPage/TiledBackingStoreRemoteTile.cpp:87
&gt; +    m_tiledBackingStore-&gt;client()-&gt;tiledBackingStorePaint(m_localBuffer-&gt;context(), m_tiledBackingStore-&gt;mapToContents(m_dirtyRect));
&gt; +
&gt; +    RefPtr&lt;ShareableBitmap&gt; bitmap = ShareableBitmap::createShareable(m_rect.size(), ShareableBitmap::SupportsAlpha);
&gt; +    OwnPtr&lt;GraphicsContext&gt; graphicsContext(bitmap-&gt;createGraphicsContext());
&gt; +    graphicsContext-&gt;drawImageBuffer(m_localBuffer.get(), ColorSpaceDeviceRGB, IntPoint(0, 0));

Between the tiledBackingStorePaint() and the graphicsContext-&gt;drawImageBuffer, shouldn&apos;t we make sure that the QPainter behind m_localBuffer-&gt;context() is end()&apos;ed properly? I might be missing something here :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456011</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-08-24 01:41:42 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:100
&gt; &gt; +    if (!m_client-&gt;tiledBackingStoreIsUpdatingAllowed() || m_contentsFrozen)
&gt; 
&gt; I suggest to call this tiledBackingStoreUpdatesAllowed() or tiledBackingStoreRepaintsAllowed()

It has to read as a sentence if you add if in front; that is the general WebKit rule. So yes, the new name is definitely better, but I wonder whether we should add an &quot;Are&quot; in there, but then again we don&apos;t do that for &quot;Enabled&quot; methods, so...

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp:79
&gt; &gt; +    if (d-&gt;sgAgent.isSwapPending())
&gt; &gt; +        // The UI thread is currently locked and calling this from the rendering thread didn&apos;t crash
&gt; &gt; +        // yet, so I&apos;m assuming that this is OK. Else we have to wait until the SG update is over
&gt; &gt; +        // and the UI thread returns to the event loop picking our event before it can be sent to
&gt; &gt; +        // the web process. This would increase our chances of missing a frame.
&gt; &gt; +        d-&gt;page-&gt;renderNextFrame();
&gt; 
&gt; I suggest to add opening curly braces and closing braces around the block, even though to the compiler it&apos;s just a one-line body.

This is actually in the style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456124</commentid>
    <comment_count>5</comment_count>
      <attachid>105006</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-24 09:10:36 -0700</bug_when>
    <thetext>Created attachment 105006
Patch

- Removed the part I asked to ignore.
- Fixed raised issues, checked for the painter end() issue, it should be alright for Qt and added a comment to clarify how this might be a problem for other platforms.
- Clarified the ChangeLog and comments here and there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456196</commentid>
    <comment_count>6</comment_count>
      <attachid>105006</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-08-24 10:54:15 -0700</bug_when>
    <thetext>Comment on attachment 105006
Patch

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

I am not capable of reviewing this (yet) but here is a few mini comment while looking at it

&gt; Source/WebCore/ChangeLog:20
&gt; +        - TiledBackingStoreRemoteTile forwards tile creations, update and removals to the proxy.

RemoteTile? Any reasons why this is not called TileProxy or so?

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:206
&gt;  
&gt; +float TiledBackingStore::coverageRatio(const WebCore::IntRect&amp; contentsRect)

Maybe it would be good with a short comment showing what the purpose are of these methods.

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:69
&gt; +    // FIXME: Since the visibleContentRect size depends on the scale, they should get to the web process in
&gt; +    //        one single message to avoid unecessary tile rendering because of a possibly very
&gt; +    //        oversized calculated visible rect.

Good idea

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:75
&gt; +    page()-&gt;process()-&gt;send(Messages::DrawingArea::RenderNextFrame(), page()-&gt;pageID());

Frame is a pretty overloaded word :-( specially in web/graphics technology

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:105
&gt; +    HashMap&lt;int, int&gt; m_tilesToNodes;

I think it is more common in WebKit to call it someting like tileNodeMap. But maybe just adding Map to the end would make this more clear

&gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:48
&gt; +struct NodeUpdateSetBackBuffer : public NodeUpdate {

When we do a code camp next time, someone will have to explain to me how this scene graph works :-)

&gt; Source/WebKit2/UIProcess/qt/SGTileNode.h:39
&gt; +    void swapIfNeeded();

swapBuffersIfNeeded?

&gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp:127
&gt; +    return !(m_suspended || m_isWaitingForUIProcess);

I would prefer without the () ... makes the code easier to read

&gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp:132
&gt; +    return IntRect(IntPoint(0, 0), m_webPage-&gt;size());

IntPoint::zero() :-)

&gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp:135
&gt; +IntRect TiledDrawingArea::tiledBackingStoreVisibleRect()

const ?

&gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.h:58
&gt; +    virtual void setVisibleContentRect(const WebCore::IntRect&amp;);
&gt; +    virtual void setContentsScale(float);

contentRect but content*S*Scale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456323</commentid>
    <comment_count>7</comment_count>
      <attachid>105047</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-24 12:47:18 -0700</bug_when>
    <thetext>Created attachment 105047
Patch

(In reply to comment #6)
&gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; +        - TiledBackingStoreRemoteTile forwards tile creations, update and removals to the proxy.
&gt; 
&gt; RemoteTile? Any reasons why this is not called TileProxy or so?
This is not a proxy itself but only an intermediate that output calls through it&apos;s interface. The goal is to use the same class both for tiling in GraphicLayers and in the DrawingArea for a while.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:206
&gt; &gt;  
&gt; &gt; +float TiledBackingStore::coverageRatio(const WebCore::IntRect&amp; contentsRect)
&gt; 
&gt; Maybe it would be good with a short comment showing what the purpose are of these methods.
Fixed

&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:105
&gt; &gt; +    HashMap&lt;int, int&gt; m_tilesToNodes;
&gt; 
&gt; I think it is more common in WebKit to call it someting like tileNodeMap. But maybe just adding Map to the end would make this more clear
Fixed

&gt; &gt; Source/WebKit2/UIProcess/qt/SGAgent.cpp:48
&gt; &gt; +struct NodeUpdateSetBackBuffer : public NodeUpdate {
&gt; 
&gt; When we do a code camp next time, someone will have to explain to me how this scene graph works :-)
Sure :)

&gt; &gt; Source/WebKit2/UIProcess/qt/SGTileNode.h:39
&gt; &gt; +    void swapIfNeeded();
&gt; 
&gt; swapBuffersIfNeeded?
Fixed

&gt; &gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp:127
&gt; &gt; +    return !(m_suspended || m_isWaitingForUIProcess);
&gt; 
&gt; I would prefer without the () ... makes the code easier to read
Fixed

&gt; &gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp:132
&gt; &gt; +    return IntRect(IntPoint(0, 0), m_webPage-&gt;size());
&gt; 
&gt; IntPoint::zero() :-)
Fixed

&gt; &gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.cpp:135
&gt; &gt; +IntRect TiledDrawingArea::tiledBackingStoreVisibleRect()
&gt; 
&gt; const ?
This is an implemented method from the interface, since it can be more than a simple accessor I&apos;d prefer not to force the const contract on all (possible) implementations.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/TiledDrawingArea.h:58
&gt; &gt; +    virtual void setVisibleContentRect(const WebCore::IntRect&amp;);
&gt; &gt; +    virtual void setContentsScale(float);
&gt; 
&gt; contentRect but content*S*Scale.
visibleContentRect is written everywhere without the s, and contentsScale is written everywhere with the s.
For grep efficiency I&apos;d keep it that way, but it would be nice to clean this up once for all one day.

&gt; &gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp:75
&gt; &gt; +    page()-&gt;process()-&gt;send(Messages::DrawingArea::RenderNextFrame(), page()-&gt;pageID());
&gt; 
&gt; Frame is a pretty overloaded word :-( specially in web/graphics technology
Humm, RenderNextDocumentState? RenderNextContentsState? I think RenderNextFrame isn&apos;t so ambiguous so I&apos;d keep it, tell me what you would prefer.
The same should be applied to DidRenderFrame if we change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456364</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-08-24 13:21:01 -0700</bug_when>
    <thetext>
&gt; &gt; RemoteTile? Any reasons why this is not called TileProxy or so?
&gt; This is not a proxy itself but only an intermediate that output calls through it&apos;s interface. The goal is to use the same class both for tiling in GraphicLayers and in the DrawingArea for a while.

Aha, I hope that is possible in a clean way

&gt; &gt; When we do a code camp next time, someone will have to explain to me how this scene graph works :-)
&gt; Sure :)

Looking forward to that!

&gt; &gt; const ?
&gt; This is an implemented method from the interface, since it can be more than a simple accessor I&apos;d prefer not to force the const contract on all (possible) implementations.

Makes sense

&gt; &gt; contentRect but content*S*Scale.
&gt; visibleContentRect is written everywhere without the s, and contentsScale is written everywhere with the s.
&gt; For grep efficiency I&apos;d keep it that way, but it would be nice to clean this up once for all one day.

Yeah, contents vs content story all over. :/

&gt; &gt; Frame is a pretty overloaded word :-( specially in web/graphics technology
&gt; Humm, RenderNextDocumentState? RenderNextContentsState? I think RenderNextFrame isn&apos;t so ambiguous so I&apos;d keep it, tell me what you would prefer.
&gt; The same should be applied to DidRenderFrame if we change it.

Just keep it, it is OK, I was just pointing out that it is a bit overloaded :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456755</commentid>
    <comment_count>9</comment_count>
      <attachid>105047</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-08-25 03:47:49 -0700</bug_when>
    <thetext>Comment on attachment 105047
Patch

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

Nice stuff!! A few fixes before landing:

&gt; Source/WebKit2/UIProcess/TiledDrawingAreaProxy.h:105
&gt; +    HashMap&lt;int, int&gt; m_tileNodeMap;

Comment please about what the two ints represent

&gt; Source/WebKit2/UIProcess/qt/SGTileNode.cpp:33
&gt; +    , m_material(0)
&gt; +    , m_opaqueMaterial(0)

I think it would be better with a single boolean, as these two are acting as booleans in the code below, and might become dangling pointers if someone calls setMaterial() without updating m_material.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456795</commentid>
    <comment_count>10</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-08-25 05:52:44 -0700</bug_when>
    <thetext>Committed r93780: &lt;http://trac.webkit.org/changeset/93780&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104844</attachid>
            <date>2011-08-23 07:51:55 -0700</date>
            <delta_ts>2011-08-24 09:10:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66771-20110823165228.patch</filename>
            <type>text/plain</type>
            <size>101916</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI5NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlN2ZhMGZmNmE5M2EyYzI3
NWMyMjg4ODRlMTk2MjFiOTFlNTYxYWJmLi5iODk5NGMzNGY1YmQ5NTY1NTAwNTQ3NjVkMTdiNjZk
Y2M1ZGYyODgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDAgQEAKIDIwMTEtMDgtMjMgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAorICAgICAgICBbUXRd
W1dLMl0gRHJpdmUgdGlsaW5nIGZyb20gdGhlIFdlYlByb2Nlc3MgYW5kIHJldXNlIFRpbGVkQmFj
a2luZ1N0b3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZSBuZWVkIHRoZSB0aWxpbmcgbG9naWMgdG8gYmUgbW92ZWQgdG8gdGhlIHdlYiBwcm9jZXNz
IHRvIGFsbG93IHN5bmNocm9ub3VzCisgICAgICAgIGludmFsaWRhdGVzLiBUaGlzIHdpbGwgYWxz
byBhbGxvdyB0aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRpbGVzIGludG8gYnVmZmVycworICAg
ICAgICByZWFkYWJsZSBkaXJlY3RseSBieSB0aGUgR1BVIChvbiBtb2JpbGUgcGxhdGZvcm1zKS4g
V2UgYWxzbyB0YWtlIHRoZSBvcHBvcnR1bml0eQorICAgICAgICB0byB1c2UgdGhlIFRpbGVkQmFj
a2luZ1N0b3JlIGluIFdlYkNvcmUgdG8gaGF2ZSBvbmx5IG9uZSB0aWxpbmcgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgQmVmb3JlIHRoaXMgcGF0Y2g6CisgICAgICAgIC0gVGlsZWREcmF3aW5n
QXJlYVByb3h5IGNvbnRhaW5zIGFsbCB0aGUgdGlsZSBtYW5hZ2VtZW50IGxvZ2ljLgorICAgICAg
ICAtIFRpbGVkRHJhd2luZ0FyZWEgcmVjZWl2ZWQgcmVuZGVyaW5nIHJlcXVlc3RzIGZvciBhIHJl
Y3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdAorICAgICAgICAgIHRvIHRoZSBwcm94eSB0aHJvdWdo
IHNoYXJlZCBtZW1vcnkuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaDoKKyAgICAgICAgLSBU
aWxlZERyYXdpbmdBcmVhIHVzZXMgYSBUaWxlZEJhY2tpbmdTdG9yZSB0byBtYW5hZ2UgdGlsZXMu
CisgICAgICAgIC0gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlIGZvcndhcmRzIHRpbGUgY3Jl
YXRpb25zLCB1cGRhdGUgYW5kIHJlbW92YWxzIHRvIHRoZSBwcm94eS4KKyAgICAgICAgLSBUaWxl
ZERyYXdpbmdBcmVhUHJveHkgdXBkYXRlcyB0aGUgc2NlbmUgZ3JhcGggZGlyZWN0bHkgZnJvbSBy
ZXF1ZXN0cy4KKworICAgICAgICBJdCBhbHNvIGltcGxlbWVudHMgdGlsZSBidWZmZXIgc3dhcHBp
bmcgY29ycmVjdGx5IGluIFNHVGlsZU5vZGUsIHRyaWdnZXJlZCBieSB0aGUgRGlkUmVuZGVyRnJh
bWUgbWVzc2FnZS4KKyAgICAgICAgUmVuZGVyIHRocm90dGxpbmcgaXMgaW1wbGVtZW50ZWQgYnkg
d2FpdGluZyBpbiBUaWxlZERyYXdpbmdBcmVhIGZvciB0aGUgVUkgcHJvY2VzcyB0bworICAgICAg
ICBub3RpZnkgdXMgd2hlbiB0aGUgbGFzdCByZW5kZXJlZCBmcmFtZSBpcyByZWFkeSB0byBtYWtl
IGl0IHRvIHRoZSBzY3JlZW4uCisgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0cyBoYXZl
IGJlZW4gcmVwbGFjZWQgYnkgdXNpbmcgdHdvIGluc3RhbmNlcyBvZiBUaWxlZEJhY2tpbmdTdG9y
ZSBpbnN0ZWFkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVC
dWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpjb3ZlcmFnZVJh
dGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpzdGFydFRpbGVCdWZm
ZXJVcGRhdGVUaW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNs
aWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVDbGllbnQ6OnRpbGVk
QmFja2luZ1N0b3JlSXNVcGRhdGluZ0FsbG93ZWQpOgorCisyMDExLTA4LTIzICBKb2NlbHluIFR1
cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CisKICAgICAgICAgVGlsZWRCYWNr
aW5nU3RvcmU6IFVudGllIHRoZSB0aWxlIGltcGxlbWVudGF0aW9uIGZyb20gdGhlIHBsYXRmb3Jt
LgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3NjAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IGFhZDZjNDQ3ZjJiNDBiYzQ4MGJmN2YxYjE2YmEzZWNhODdlOWE3
MGQuLmU1N2YyY2FlZWNjNzQ4NDgwZTIzMjE2ZmU4NjUwMjBiMThhNjA0ZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5j
cHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6aW52YWxpZGF0ZShj
b25zdCBJbnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKIAogdm9pZCBUaWxlZEJhY2tpbmdTdG9y
ZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogewotICAgIGlmIChtX2NvbnRlbnRzRnJvemVuKQorICAg
IGlmICghbV9jbGllbnQtPnRpbGVkQmFja2luZ1N0b3JlSXNVcGRhdGluZ0FsbG93ZWQoKSB8fCBt
X2NvbnRlbnRzRnJvemVuKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgbV9jbGllbnQtPnRp
bGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOwpAQCAtMjAzLDYgKzIwMywyOCBAQCBkb3VibGUg
VGlsZWRCYWNraW5nU3RvcmU6OnRpbGVEaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydCwg
Y29uc3QgVGlsZTo6Q29vcgogICAgIHJldHVybiBhYnMoY2VudGVyQ29vcmRpbmF0ZS55KCkgLSB0
aWxlQ29vcmRpbmF0ZS55KCkpICsgaG9yaXpvbnRhbEJpYXMgKiBhYnMoY2VudGVyQ29vcmRpbmF0
ZS54KCkgLSB0aWxlQ29vcmRpbmF0ZS54KCkpOwogfQogCitmbG9hdCBUaWxlZEJhY2tpbmdTdG9y
ZTo6Y292ZXJhZ2VSYXRpbyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50c1JlY3QpCit7
CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tQ29udGVudHMoY29udGVudHNSZWN0KTsK
KyAgICBmbG9hdCByZWN0QXJlYSA9IGRpcnR5UmVjdC53aWR0aCgpICogZGlydHlSZWN0LmhlaWdo
dCgpOworICAgIGZsb2F0IGNvdmVyQXJlYSA9IDAuMGY7CisKKyAgICBUaWxlOjpDb29yZGluYXRl
IHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsK
KyAgICBUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2lu
dChpbm5lckJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkpOworCisgICAgZm9yICh1bnNpZ25lZCB5Q29v
cmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsr
eUNvb3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExl
ZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsK
KyAgICAgICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY3VycmVudENvb3JkaW5hdGUoeENvb3JkaW5h
dGUsIHlDb29yZGluYXRlKTsKKyAgICAgICAgICAgIFJlZlB0cjxUaWxlPiBjdXJyZW50VGlsZSA9
IHRpbGVBdChUaWxlOjpDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSkpOworICAg
ICAgICAgICAgaWYgKGN1cnJlbnRUaWxlICYmIGN1cnJlbnRUaWxlLT5pc1JlYWR5VG9QYWludCgp
KSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCBjb3ZlclJlY3QgPSBpbnRlcnNlY3Rpb24oZGly
dHlSZWN0LCBjdXJyZW50VGlsZS0+cmVjdCgpKTsKKyAgICAgICAgICAgICAgICBjb3ZlckFyZWEg
Kz0gY292ZXJSZWN0LndpZHRoKCkgKiBjb3ZlclJlY3QuaGVpZ2h0KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdmVyQXJlYSAvIHJlY3RBcmVhOworfQor
CiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlcygpCiB7CiAgICAgaWYgKG1fY29u
dGVudHNGcm96ZW4pCkBAIC0zNjUsNyArMzg3LDcgQEAgVGlsZTo6Q29vcmRpbmF0ZSBUaWxlZEJh
Y2tpbmdTdG9yZTo6dGlsZUNvb3JkaW5hdGVGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQK
IAogdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKQog
ewotICAgIGlmIChtX3RpbGVCdWZmZXJVcGRhdGVUaW1lci0+aXNBY3RpdmUoKSB8fCBtX2NvbnRl
bnRzRnJvemVuKQorICAgIGlmIChtX3RpbGVCdWZmZXJVcGRhdGVUaW1lci0+aXNBY3RpdmUoKSB8
fCAhbV9jbGllbnQtPnRpbGVkQmFja2luZ1N0b3JlSXNVcGRhdGluZ0FsbG93ZWQoKSB8fCBtX2Nv
bnRlbnRzRnJvemVuKQogICAgICAgICByZXR1cm47CiAgICAgbV90aWxlQnVmZmVyVXBkYXRlVGlt
ZXItPnN0YXJ0T25lU2hvdCgwKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCmluZGV4IGJlNGRkMTkwYTIyZmYxZGZjYTk1
NmE2NTczN2UyODczMDQ5ZGM2NDEuLjJkMzRlYTk2N2QxNGI0YThlOGFmNGFhYTc1MGViZjM2NGZl
MzgxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVk
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGls
ZWRCYWNraW5nU3RvcmUuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9v
bCBjb250ZW50c0Zyb3plbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNGcm96ZW47IH0KICAg
ICB2b2lkIHNldENvbnRlbnRzRnJvemVuKGJvb2wpOworICAgIHZvaWQgdXBkYXRlVGlsZUJ1ZmZl
cnMoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwog
ICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwpAQCAtNzYs
NiArNzcsNyBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCB0aWxlUmVjdEZvckNvb3JkaW5hdGUoY29u
c3QgVGlsZTo6Q29vcmRpbmF0ZSYpIGNvbnN0OwogICAgIFRpbGU6OkNvb3JkaW5hdGUgdGlsZUNv
b3JkaW5hdGVGb3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIGRvdWJsZSB0aWxl
RGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUm
KTsKKyAgICBmbG9hdCBjb3ZlcmFnZVJhdGlvKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvbnRl
bnRzUmVjdCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1l
cigpOwpAQCAtODYsNyArODgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdGlsZUJ1ZmZlclVwZGF0
ZVRpbWVyRmlyZWQoVGlsZVRpbWVyKik7CiAgICAgdm9pZCB0aWxlQ3JlYXRpb25UaW1lckZpcmVk
KFRpbGVUaW1lciopOwogICAgIAotICAgIHZvaWQgdXBkYXRlVGlsZUJ1ZmZlcnMoKTsKICAgICB2
b2lkIGNyZWF0ZVRpbGVzKCk7CiAgICAgCiAgICAgdm9pZCBjb21taXRTY2FsZUNoYW5nZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFj
a2luZ1N0b3JlQ2xpZW50LmgKaW5kZXggNjA4N2VjMzBhZmU0MjQwYTUxYWMwOGU1MTYyMzg4OThi
NzZmN2M2My4uMGU1MDllM2M0YzQ1NGEyYmE4OWFmYTQxYTU0MzAwNjllZTI1ZjExOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tp
bmdTdG9yZUNsaWVudC5oCkBAIC0yMywxMSArMjMsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorY2xhc3MgQ29sb3I7CitjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CisKIGNsYXNzIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCB0aWxlZEJhY2tpbmdTdG9yZUlzVXBkYXRpbmdBbGxvd2VkKCkgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVj
dCgpID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVj
dCgpID0gMDsKICAgICB2aXJ0dWFsIENvbG9yIHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENv
bG9yKCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDMxNTQ3MzVjNjBiNzY2ODNhZWM1ZDcyZDFl
YTUzNGE0ZDhkNjQ0NmUuLjRkNzkzMDFhZTIxMjcwNTA0MGZiZmI1MGRkNmM2OTlkYWVmODlmNTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzIgQEAKKzIwMTEtMDgtMjMgIEpvY2VseW4gVHVyY290
dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gRHJp
dmUgdGlsaW5nIGZyb20gdGhlIFdlYlByb2Nlc3MgYW5kIHJldXNlIFRpbGVkQmFja2luZ1N0b3Jl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3NzEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBuZWVk
IHRoZSB0aWxpbmcgbG9naWMgdG8gYmUgbW92ZWQgdG8gdGhlIHdlYiBwcm9jZXNzIHRvIGFsbG93
IHN5bmNocm9ub3VzIAorICAgICAgICBpbnZhbGlkYXRlcy4gVGhpcyB3aWxsIGFsc28gYWxsb3cg
dGhlIHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aWxlcyBpbnRvIGJ1ZmZlcnMgCisgICAgICAgIHJl
YWRhYmxlIGRpcmVjdGx5IGJ5IHRoZSBHUFUgKG9uIG1vYmlsZSBwbGF0Zm9ybXMpLiBXZSBhbHNv
IHRha2UgdGhlIG9wcG9ydHVuaXR5IAorICAgICAgICB0byB1c2UgdGhlIFRpbGVkQmFja2luZ1N0
b3JlIGluIFdlYkNvcmUgdG8gaGF2ZSBvbmx5IG9uZSB0aWxpbmcgaW1wbGVtZW50YXRpb24uCisK
KyAgICAgICAgQmVmb3JlIHRoaXMgcGF0Y2g6CisgICAgICAgIC0gVGlsZWREcmF3aW5nQXJlYVBy
b3h5IGNvbnRhaW5zIGFsbCB0aGUgdGlsZSBtYW5hZ2VtZW50IGxvZ2ljLgorICAgICAgICAtIFRp
bGVkRHJhd2luZ0FyZWEgcmVjZWl2ZWQgcmVuZGVyaW5nIHJlcXVlc3RzIGZvciBhIHJlY3QgYW5k
IHJldHVybnMgdGhlIHJlc3VsdCAKKyAgICAgICAgICB0byB0aGUgcHJveHkgdGhyb3VnaCBzaGFy
ZWQgbWVtb3J5LgorCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2g6CisgICAgICAgIC0gVGlsZWRE
cmF3aW5nQXJlYSB1c2VzIGEgVGlsZWRCYWNraW5nU3RvcmUgdG8gbWFuYWdlIHRpbGVzLgorICAg
ICAgICAtIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZSBmb3J3YXJkcyB0aWxlIGNyZWF0aW9u
cywgdXBkYXRlIGFuZCByZW1vdmFscyB0byB0aGUgcHJveHkuCisgICAgICAgIC0gVGlsZWREcmF3
aW5nQXJlYVByb3h5IHVwZGF0ZXMgdGhlIHNjZW5lIGdyYXBoIGRpcmVjdGx5IGZyb20gcmVxdWVz
dHMuCisKKyAgICAgICAgSXQgYWxzbyBpbXBsZW1lbnRzIHRpbGUgYnVmZmVyIHN3YXBwaW5nIGNv
cnJlY3RseSBpbiBTR1RpbGVOb2RlLCB0cmlnZ2VyZWQgYnkgdGhlIERpZFJlbmRlckZyYW1lIG1l
c3NhZ2UuCisgICAgICAgIFJlbmRlciB0aHJvdHRsaW5nIGlzIGltcGxlbWVudGVkIGJ5IHdhaXRp
bmcgaW4gVGlsZWREcmF3aW5nQXJlYSBmb3IgdGhlIFVJIHByb2Nlc3MgdG8gCisgICAgICAgIG5v
dGlmeSB1cyB3aGVuIHRoZSBsYXN0IHJlbmRlcmVkIGZyYW1lIGlzIHJlYWR5IHRvIG1ha2UgaXQg
dG8gdGhlIHNjcmVlbi4KKyAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXRzIGhhdmUgYmVl
biByZXBsYWNlZCBieSB1c2luZyB0d28gaW5zdGFuY2VzIG9mIFRpbGVkQmFja2luZ1N0b3JlIGlu
c3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwOgor
ICAgICAgICAoUVRvdWNoV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuY3BwOgorICAgICAgICAoUVRvdWNoV2ViVmlld1By
aXZhdGU6OnVwZGF0ZVZpZXdwb3J0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVUaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVuZGVyRnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVUaWxlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
VGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYVByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OlRpbGVkRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6flRpbGVkRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNpemVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1RpbGVk
RHJhd2luZ0FyZWFUaWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0L1NHQWdl
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb2RlVXBkYXRlQ3JlYXRlVGlsZTo6Tm9kZVVwZGF0
ZUNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpOb2RlVXBkYXRlUmVtb3ZlVGlsZTo6Tm9k
ZVVwZGF0ZVJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpOb2RlVXBkYXRlU2V0QmFja0J1
ZmZlcjo6Tm9kZVVwZGF0ZVNldEJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpOb2RlVXBk
YXRlU3dhcFRpbGVCdWZmZXJzOjpOb2RlVXBkYXRlU3dhcFRpbGVCdWZmZXJzKToKKyAgICAgICAg
KFdlYktpdDo6U0dBZ2VudDo6U0dBZ2VudCk6CisgICAgICAgIChXZWJLaXQ6OlNHQWdlbnQ6OmNy
ZWF0ZVRpbGVOb2RlKToKKyAgICAgICAgKFdlYktpdDo6U0dBZ2VudDo6cmVtb3ZlVGlsZU5vZGUp
OgorICAgICAgICAoV2ViS2l0OjpTR0FnZW50OjpzZXROb2RlQmFja0J1ZmZlcik6CisgICAgICAg
IChXZWJLaXQ6OlNHQWdlbnQ6OnN3YXBUaWxlQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlNH
QWdlbnQ6OnVwZGF0ZVBhaW50Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlNHQWdlbnQ6OmdldFNj
YWxlTm9kZSk6CisgICAgICAgIE1ha2UgdGhlIHBhcmVudGluZyBsb2dpYyBtb3JlIHN0cmljdCB0
byBhbGxvdyBTR0FnZW50IHRvIGhhbmRsZSB0aGUgc2NhbGUgbm9kZXMgaXRzZWxmIChyZW1vdmUg
Tm9kZVVwZGF0ZUNyZWF0ZVNjYWxlIGFuZCB1c2UgdGhlIHNjYWxlIGluIENyZWF0ZVRpbGUpLgor
ICAgICAgICBEZWxldGUgdGhlIHNjYWxlIG5vZGUgd2hlbiB0aGUgbGFzdCBvZiBpdHMgY2hpbGQg
dGlsZXMgaGFzIGJlZW4gcmVtb3ZlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR0FnZW50
Lmg6CisgICAgICAgIChXZWJLaXQ6OlNHQWdlbnQ6OmlzU3dhcFBlbmRpbmcpOgorCisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpTR1RpbGVO
b2RlOjpTR1RpbGVOb2RlKToKKyAgICAgICAgKFdlYktpdDo6U0dUaWxlTm9kZTo6c2V0QmFja0J1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlNHVGlsZU5vZGU6OnN3YXBJZk5lZWRlZCk6CisgICAg
ICAgIFJlcGxhY2Ugc2V0VGFyZ2V0UmVjdCwgc2V0U291cmNlUmVjdCBhbmQgc2V0VGV4dHVyZSBi
eSBhIHNpbmdsZSBzZXRCYWNrQnVmZmVyIG1ldGhvZC4KKyAgICAgICAgVGhpcyBhbGxvd3MgYWxs
IHRob3NlIHZhbHVlcyB0byBiZSB1c2VkIG9ubHkgd2hlbiBzd2FwSWZOZWVkZWQgaXMgY2FsbGVk
IGxhdGVyLgorCisgICAgICAgICogVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVUaWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHA6CisgICAgICAgIChRVG91Y2hXZWJQYWdlUHJv
eHk6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBh
Z2Vwcm94eS5oOgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OnNldENv
bnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6cmVuZGVyTmV4dEZy
YW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGU6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6flRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZSk6
CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aXNEaXJ0eSk6
CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6dXBkYXRl
QmFja0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZTo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlOjppc1JlYWR5VG9QYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUJhY2tlbmQ6OnBhaW50Q2hlY2tlclBhdHRlcm4pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpjb29yZGluYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpyZWN0KToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ojp+VGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvVGlsZWREcmF3aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWE6OlRpbGVkRHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
OjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjpz
ZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6c2V0VmlzaWJsZUNv
bnRlbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6c2V0Q29udGVu
dHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnJlbmRlck5leHRG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnN1c3BlbmRQYWludGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnJlc3VtZVBhaW50aW5nKToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVQYWlu
dEJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5n
U3RvcmVQYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjp0
aWxlZEJhY2tpbmdTdG9yZUlzVXBkYXRpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGls
ZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QpOgorICAgICAgICAo
V2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVCYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjpjcmVhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dXBkYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnJlbW92ZVRpbGUpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL3F0L1RpbGVkRHJhd2luZ0FyZWFRdC5jcHA6IFJlbW92ZWQuCisKIDIwMTEt
MDgtMTEgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tp
YS5jb20+CiAKICAgICAgICAgVmVjdG9yQXJndW1lbnRDb2RlciBkb2Vzbid0IGVuY29kZS9kZWNv
ZGUgZW5vdWdoIGRhdGEgZm9yIG1vcmUgdGhhbiBvbmUgYnl0ZSB2ZWN0b3IgZWxlbWVudHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwCmlu
ZGV4IDE5NGMxOWMzMDYwNDUxMDE4ZjQ0M2FjZDk4NWU3MTlhZTEyMTlmNGUuLjQyNmY5NjJiOGIw
OTIyZmQ5ZTE1MzhlZDBjYzU1NTEzMzE4ZmE4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcApAQCAtNjcsNiArNjcsMTYgQEAgUVNH
Tm9kZSogUVRvdWNoV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVw
ZGF0ZVBhaW50Tm9kZURhdGEqKQogewogICAgIGlmICghb2xkTm9kZSkKICAgICAgICAgb2xkTm9k
ZSA9IG5ldyBRU0dOb2RlOworCisgICAgLy8gQSBzd2FwIGlzIG9uIHRoZSBxdWV1ZSwgYW5kIFNH
QWdlbnQ6OnVwZGF0ZVBhaW50Tm9kZSB3aWxsIGVtcHR5IHRoZSBxdWV1ZSwgc28gd2Uga25vdyB0
aGF0CisgICAgLy8gdGhlIG9sZCBmcmFtZSdzIGJ1ZmZlcnMgd29uJ3QgYmUgdXNlZCBhbnltb3Jl
IChmb3IgYnVmZmVycyB1c2VkIGFsbCB0aGUgd2F5IGZyb20gdGhlIHdlYiBwcm9jZXNzCisgICAg
Ly8gdG8gdGhlIGdyYXBoaWMgY2FyZCkuIE5vdGlmeSB0aGUgd2ViIHByb2Nlc3MgdGhhdCBpdCBj
YW4gcmVuZGVyIHRoZSBuZXh0IGZyYW1lLgorICAgIGlmIChkLT5zZ0FnZW50LmlzU3dhcFBlbmRp
bmcoKSkKKyAgICAgICAgLy8gVGhlIFVJIHRocmVhZCBpcyBjdXJyZW50bHkgbG9ja2VkIGFuZCBj
YWxsaW5nIHRoaXMgZnJvbSB0aGUgcmVuZGVyaW5nIHRocmVhZCBkaWRuJ3QgY3Jhc2gKKyAgICAg
ICAgLy8geWV0LCBzbyBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIE9LLiBFbHNlIHdlIGhhdmUg
dG8gd2FpdCB1bnRpbCB0aGUgU0cgdXBkYXRlIGlzIG92ZXIKKyAgICAgICAgLy8gYW5kIHRoZSBV
SSB0aHJlYWQgcmV0dXJucyB0byB0aGUgZXZlbnQgbG9vcCBwaWNraW5nIG91ciBldmVudCBiZWZv
cmUgaXQgY2FuIGJlIHNlbnQgdG8KKyAgICAgICAgLy8gdGhlIHdlYiBwcm9jZXNzLiBUaGlzIHdv
dWxkIGluY3JlYXNlIG91ciBjaGFuY2VzIG9mIG1pc3NpbmcgYSBmcmFtZS4KKyAgICAgICAgZC0+
cGFnZS0+cmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgZC0+c2dBZ2VudC51cGRhdGVQYWludE5vZGUo
b2xkTm9kZSk7CiAKICAgICAvLyBRU0dJdGVtIHRha2VzIG93bmVyc2hpcCBvZiB0aGlzIHJldHVy
biB2YWx1ZSBhbmQgaXQncyBjaGlsZHJlbiBiZXR3ZWVuIGFuZCBhZnRlciB1cGRhdGVQYWludE5v
ZGUgY2FsbHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0
b3VjaHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJ2aWV3LmNwcAppbmRleCAyNDVhYWJmZjQyYzFhZTAwYTI0Y2RhNTU5ZmUxMjBlMWEyMTg5NDIy
Li5lMjQzZjUwNTA1ZmIwYjllM2I5MTRhZWYxZGNiNzhmMTdlMTQ3NmU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2Vidmlldy5jcHAKQEAgLTU2LDYg
KzU2LDggQEAgdm9pZCBRVG91Y2hXZWJWaWV3UHJpdmF0ZTo6dmlld3BvcnRSZWN0VXBkYXRlZCgp
CiB2b2lkIFFUb3VjaFdlYlZpZXdQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFN0YXRlKCkKIHsKICAg
ICBRU2l6ZSBhdmFpbGFibGVTaXplID0gcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgp
OworICAgIGlmIChhdmFpbGFibGVTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgV2ViUGFnZVByb3h5KiB3a1BhZ2UgPSB0b0ltcGwocGFnZS5wYWdlUmVmKCkpOwogICAgIFdl
YlByZWZlcmVuY2VzKiB3a1ByZWZzID0gd2tQYWdlLT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDJh
MWVhNWQ4ODc0NmE4NjBmYTllNjcyY2JlZDY1NmM1N2NlZDA0MTAuLmZiMDFjY2I5NTQ4M2Y0OTI3
YTNlNTY0YjE0MWQ2OTEyNGYwNzQzODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuaApAQCAtMTA5LDEwICsxMDksMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSB7IH0KICNlbmRpZgogI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHZpcnR1YWwgdm9pZCBkaWRTZXRTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNuYXBzaG90VGFrZW4oY29u
c3QgVXBkYXRlSW5mbyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB0aWxlVXBkYXRlZChpbnQgdGls
ZUlELCBjb25zdCBVcGRhdGVJbmZvJiwgZmxvYXQgc2NhbGUsIHVuc2lnbmVkIHBlbmRpbmdVcGRh
dGVDb3VudCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRp
bGUoaW50IHRpbGVJRCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFsbFRpbGVVcGRhdGVzUHJvY2Vz
c2VkKCkgeyB9CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGUxMTJhZDZkNTEzYTg2YWVjYTRl
MTgzM2VkZDRjZTM0YWNlOGYzY2MuLmM1MjRjYzg5MDY4YjFmYTYwOTI3ZjM3YjNkZjVkMjIwN2Yx
MDI3OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yOCwxMCArMjgsMTAgQEAgbWVzc2FnZXMgLT4gRHJhd2lu
Z0FyZWFQcm94eSB7CiAgICAgRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90
IGJhY2tpbmdTdG9yZVN0YXRlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW52YWxpZGF0ZShXZWJD
b3JlOjpJbnRSZWN0IGRpcnR5UmVjdCkKLSAgICBEaWRTZXRTaXplKFdlYkNvcmU6OkludFNpemUg
dmlld1NpemUpCi0gICAgVGlsZVVwZGF0ZWQoaW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZv
IHVwZGF0ZUluZm8sIGZsb2F0IHNjYWxlLCB1bnNpZ25lZCBwZW5kaW5nVXBkYXRlQ291bnQpCi0g
ICAgQWxsVGlsZVVwZGF0ZXNQcm9jZXNzZWQoKQorICAgIENyZWF0ZVRpbGUoaW50IHRpbGVJRCwg
V2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZShpbnQgdGlsZUlE
LCBXZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBEaWRSZW5kZXJGcmFtZSgpCisg
ICAgUmVtb3ZlVGlsZShpbnQgdGlsZUlEKQogICAgIFNuYXBzaG90VGFrZW4oV2ViS2l0OjpVcGRh
dGVJbmZvIHVwZGF0ZUluZm8pCiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKaW5kZXggMWZhODA2YmYzYThmYWY5OTAz
YmJjNTQ3ZjE4YTMyOWJhNTVlNDY0Ni4uNjE3M2VhZDNjZGY5ZTg5ZThiMWIwODM0ZDc2ZTBhNjM4
ZGUwMjNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2lu
Z0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2lu
Z0FyZWFQcm94eS5jcHAKQEAgLTMwLDExNyArMzAsNDkgQEAKICNpbmNsdWRlICJEcmF3aW5nQXJl
YU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZUlELmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAKLSNp
ZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJTR0FnZW50LmgiCi0jaW5jbHVkZSAiVG91Y2hWaWV3
SW50ZXJmYWNlLmgiCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lkdGggPSAxMDI0
Owotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZUhlaWdodCA9IDEwMjQ7Ci0KLQotLy8gVGhl
IFRpbGVTZXQncyByZXNwb25zaWJpbGl0eSBpcyB0byBob2xkIGEgZ3JvdXAgb2YgdGlsZXMgd2l0
aCB0aGUgc2FtZSBjb250ZW50cyBzY2FsZSB0b2dldGhlci4KLWNsYXNzIFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZWREcmF3aW5nQXJl
YVRpbGU6OkNvb3JkaW5hdGUsIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiBUaWxlTWFw
OwotCi0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoUGxhdGZvcm1XZWJWaWV3KiwgZmxvYXQg
Y29udGVudHNTY2FsZSA9IDEuMGYpOwotICAgIH5UaWxlZERyYXdpbmdBcmVhVGlsZVNldCgpOwot
Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtYXBUb0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21Db250ZW50cyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7Ci0KLSAgICBUaWxlTWFwJiB0aWxlcygpIHsgcmV0dXJu
IG1fdGlsZXM7IH0KLSAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50c1NjYWxlOyB9Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgaW50IHNnTm9kZUlEKCkgY29u
c3QgeyByZXR1cm4gbV9zZ05vZGVJRDsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgVGlsZU1h
cCBtX3RpbGVzOwotICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKLSNpZiBQTEFURk9STShRVCkK
LSAgICBTR0FnZW50KiBtX3NnQWdlbnQ7Ci0gICAgaW50IG1fc2dOb2RlSUQ7Ci0jZW5kaWYKLX07
Ci0KLVRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlZERyYXdpbmdBcmVhVGlsZVNldChQbGF0
Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIGZsb2F0IGNvbnRlbnRzU2NhbGUpCi0gICAgOiBtX2NvbnRl
bnRzU2NhbGUoY29udGVudHNTY2FsZSkKLSNpZiBQTEFURk9STShRVCkKLSAgICAsIG1fc2dBZ2Vu
dCh3ZWJWaWV3LT5zY2VuZUdyYXBoQWdlbnQoKSkKLSAgICAsIG1fc2dOb2RlSUQobV9zZ0FnZW50
LT5jcmVhdGVTY2FsZU5vZGUoMCwgMSAvIGNvbnRlbnRzU2NhbGUpKQotI2VuZGlmCi17Ci19Ci0K
LVRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Ojp+VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoKQotewot
I2lmIFBMQVRGT1JNKFFUKQotICAgIC8vIEZvcmNpbmcgdGhlIHRpbGVzIGRlc3RydWN0aW9uIHRv
IHJlbW92ZSB0aGVpciBzZyBub2RlIGJlZm9yZSByZW1vdmluZyB0aGVpciBwYXJlbnQgbm9kZS4K
LSAgICBtX3RpbGVzLmNsZWFyKCk7Ci0gICAgbV9zZ0FnZW50LT5yZW1vdmVOb2RlKG1fc2dOb2Rl
SUQpOwotI2VuZGlmCi19Ci0KLUludFJlY3QgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6Om1hcFRv
Q29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK1Bhc3NPd25QdHI8VGlsZWREcmF3
aW5nQXJlYVByb3h5PiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZShQbGF0Zm9ybVdlYlZp
ZXcqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogewotICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgLyBtX2NvbnRlbnRz
U2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgo
KSAvIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVjdC5oZWlnaHQoKSAvIG1fY29udGVudHNTY2FsZSkpOworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVGlsZWREcmF3aW5nQXJlYVByb3h5KHdlYlZpZXcsIHdlYlBhZ2VQcm94eSkpOwogfQog
Ci1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjptYXBGcm9tQ29udGVudHMoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK1RpbGVkRHJhd2luZ0FyZWFQcm94eTo6VGlsZWREcmF3aW5n
QXJlYVByb3h5KFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV2ViUGFnZVByb3h5KiB3ZWJQYWdl
UHJveHkpCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZVRpbGVkLCB3ZWJQ
YWdlUHJveHkpCisgICAgLCBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9uKGZh
bHNlKQorICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKKyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQog
ewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChyZWN0LngoKSAqIG1fY29u
dGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55
KCkgKiBtX2NvbnRlbnRzU2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlY3Qud2lkdGgoKSAqIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAqIG1fY29udGVudHNTY2FsZSkpOwogfQog
Ci0KLXN0YXRpYyBJbnRQb2ludCBpbm5lckJvdHRvbVJpZ2h0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CitUaWxlZERyYXdpbmdBcmVhUHJveHk6On5UaWxlZERyYXdpbmdBcmVhUHJveHkoKQogewotICAg
IC8vIEFjdHVhbGx5LCB0aGUgcmVjdCBkb2VzIG5vdCBjb250YWluIHJlY3QubWF4WCgpLiBSZWZl
ciB0byBJbnRSZWN0Ojpjb250YWluLgotICAgIHJldHVybiBJbnRQb2ludChyZWN0Lm1heFgoKSAt
IDEsIHJlY3QubWF4WSgpIC0gMSk7CiB9CiAKLVBhc3NPd25QdHI8VGlsZWREcmF3aW5nQXJlYVBy
b3h5PiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZShQbGF0Zm9ybVdlYlZpZXcqIHdlYlZp
ZXcsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OnNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxl
Q29udGVudHNSZWN0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJl
YVByb3h5KHdlYlZpZXcsIHdlYlBhZ2VQcm94eSkpOworICAgIC8vIEZJWE1FOiBEb24ndCBzZW5k
IG1vcmUgdGhhbiBuZWNlc3NhcnkgKGUuZy4gZXZlcnkgMTAwbXMgb3IgMjAwbXMpLgorICAgIHBh
Z2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6U2V0VmlzaWJsZUNv
bnRlbnRSZWN0KHZpc2libGVDb250ZW50c1JlY3QpLCBwYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAot
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpUaWxlZERyYXdpbmdBcmVhUHJveHkoUGxhdGZvcm1XZWJW
aWV3KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKLSAgICA6IERyYXdpbmdB
cmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlVGlsZWQsIHdlYlBhZ2VQcm94eSkKLSAgICAsIG1faXNX
YWl0aW5nRm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24oZmFsc2UpCi0gICAgLCBtX2lzVmlzaWJs
ZSh0cnVlKQotICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX2N1cnJlbnRUaWxlU2V0
KGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCh3ZWJWaWV3KSkpCi0gICAgLCBt
X3RpbGVCdWZmZXJVcGRhdGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKQotICAgICwgbV90aWxlQ3Jl
YXRpb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnRpbGVDcmVhdGlvblRpbWVyRmlyZWQpCi0gICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlV2lk
dGgsIGRlZmF1bHRUaWxlSGVpZ2h0KQotICAgICwgbV90aWxlQ3JlYXRpb25EZWxheSgwLjAxKQot
ICAgICwgbV9rZWVwQXJlYU11bHRpcGxpZXIoMi41LCA0LjUpCi0gICAgLCBtX2NvdmVyQXJlYU11
bHRpcGxpZXIoMiwgMykKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1Nj
YWxlKGZsb2F0IHNjYWxlKQogeworICAgIC8vIEZJWE1FOiBTaW5jZSB0aGUgdmlzaWJsZUNvbnRl
bnRSZWN0IHNpemUgZGVwZW5kcyBvbiB0aGUgc2NhbGUsIHRoZXkgc2hvdWxkIGdldCB0byB0aGUg
d2ViIHByb2Nlc3MgaW4KKyAgICAvLyAgICAgICAgb25lIHNpbmdsZSBtZXNzYWdlIHRvIGF2b2lk
IHVuZWNlc3NhcnkgdGlsZSByZW5kZXJpbmcgYmVjYXVzZSBvZiBhIHBvc3NpYmx5IHZlcnkKKyAg
ICAvLyAgICAgICAgb3ZlcnNpemVkIGNhbGN1bGF0ZWQgdmlzaWJsZSByZWN0LgorICAgIHBhZ2Uo
KS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6U2V0Q29udGVudHNTY2Fs
ZShzY2FsZSksIHBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi1UaWxlZERyYXdpbmdBcmVhUHJveHk6
On5UaWxlZERyYXdpbmdBcmVhUHJveHkoKQordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJl
bmRlck5leHRGcmFtZSgpCiB7Ci0gICAgLy8gRGlzYWJsZSB1cGRhdGVzIG9uIHRpbGVzIHRvIGRl
dGFjaCB0aGVtIGZyb20gdGhlIHByb3h5IGFuZCBjdXQgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3ku
Ci0gICAgaWYgKG1fcHJldmlvdXNUaWxlU2V0KQotICAgICAgICBkaXNhYmxlVGlsZVNldFVwZGF0
ZXMobV9wcmV2aW91c1RpbGVTZXQuZ2V0KCkpOwotICAgIGRpc2FibGVUaWxlU2V0VXBkYXRlcyht
X2N1cnJlbnRUaWxlU2V0LmdldCgpKTsKKyAgICBwYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6RHJhd2luZ0FyZWE6OlJlbmRlck5leHRGcmFtZSgpLCBwYWdlKCktPnBhZ2VJRCgpKTsK
IH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNpemVEaWRDaGFuZ2UoKQpAQCAtMTUy
LDkgKzg0LDYgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNpemVEaWRDaGFuZ2UoKQog
ICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3ZpZXdT
aXplID0gbV9zaXplOwotICAgIG1fbGFzdFNldFZpZXdTaXplID0gbV9zaXplOwotCiAgICAgaWYg
KG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybjsK
ICAgICBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9uID0gdHJ1ZTsKQEAgLTE4
Niw0NzkgKzExNSwxMyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0UGFnZUlzVmlz
aWJsZShib29sIGlzVmlzaWJsZSkKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlcXVlc3QgYSBm
dWxsIHJlcGFpbnQgaGVyZSBpZiBuZWVkZWQuCiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYVBy
b3h5OjpkaWRTZXRTaXplKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQotewotICAgIEFTU0VSVCht
X2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9uKTsKLSAgICBtX2lzV2FpdGluZ0Zv
ckRpZFNldEZyYW1lTm90aWZpY2F0aW9uID0gZmFsc2U7Ci0KLSAgICBpZiAodmlld1NpemUgIT0g
bV9sYXN0U2V0Vmlld1NpemUpCi0gICAgICAgIHNldFNpemUobV9sYXN0U2V0Vmlld1NpemUsIElu
dFNpemUoKSk7Ci0KLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAg
cGFnZS0+cHJvY2VzcygpLT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0b3AoKTsKLX0KLQotdm9p
ZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVVcGRhdGVkKGludCB0aWxlSUQsIGNvbnN0IFVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0IHNjYWxlLCB1bnNpZ25lZCBwZW5kaW5nVXBkYXRl
Q291bnQpCi17Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGUqIHRpbGUgPSBtX3RpbGVzQnlJRC5n
ZXQodGlsZUlEKTsKLSAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+SUQoKSA9PSB0aWxlSUQpOwot
ICAgIGlmICh0aWxlKQotICAgICAgICB0aWxlLT5pbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZv
LCBzY2FsZSk7Ci0gICAgdGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjphbGxUaWxlVXBkYXRlc1Byb2Nlc3NlZCgpCi17Ci0gICAgdGls
ZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5
OjpyZWdpc3RlclRpbGUoaW50IHRpbGVJRCwgVGlsZWREcmF3aW5nQXJlYVRpbGUqIHRpbGUpCi17
Ci0gICAgbV90aWxlc0J5SUQuc2V0KHRpbGVJRCwgdGlsZSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3
aW5nQXJlYVByb3h5Ojp1bnJlZ2lzdGVyVGlsZShpbnQgdGlsZUlEKQotewotICAgIG1fdGlsZXNC
eUlELnJlbW92ZSh0aWxlSUQpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVx
dWVzdFRpbGVVcGRhdGUoaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewot
ICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdp
bmdBcmVhOjpSZXF1ZXN0VGlsZVVwZGF0ZSh0aWxlSUQsIGRpcnR5UmVjdCwgbV9jdXJyZW50VGls
ZVNldC0+Y29udGVudHNTY2FsZSgpKSwgcGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjpjYW5jZWxUaWxlVXBkYXRlKGludCB0aWxlSUQpCi17Ci0gICAg
aWYgKCFwYWdlKCktPnByb2Nlc3MoKS0+aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpDYW5jZWxUaWxl
VXBkYXRlKHRpbGVJRCksIHBhZ2UoKS0+cGFnZUlEKCkpOwotfQotCi12b2lkIFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAo
bV90aWxlU2l6ZSA9PSBzaXplKQotICAgICAgICByZXR1cm47Ci0gICAgbV90aWxlU2l6ZSA9IHNp
emU7Ci0gICAgcmVtb3ZlQWxsVGlsZXMoKTsKLSAgICBzdGFydFRpbGVDcmVhdGlvblRpbWVyKCk7
Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRUaWxlQ3JlYXRpb25EZWxheShk
b3VibGUgZGVsYXkpCi17Ci0gICAgbV90aWxlQ3JlYXRpb25EZWxheSA9IGRlbGF5OwotfQotCi12
b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJz
KGNvbnN0IEZsb2F0U2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY292ZXJN
dWx0aXBsaWVyKQotewotICAgIG1fa2VlcEFyZWFNdWx0aXBsaWVyID0ga2VlcE11bHRpcGxpZXI7
Ci0gICAgbV9jb3ZlckFyZWFNdWx0aXBsaWVyID0gY292ZXJNdWx0aXBsaWVyOwotICAgIHN0YXJ0
VGlsZUNyZWF0aW9uVGltZXIoKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6Omlu
dmFsaWRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudHNEaXJ0eVJlY3QpCi17Ci0gICAgSW50UmVj
dCBkaXJ0eVJlY3QobV9jdXJyZW50VGlsZVNldC0+bWFwRnJvbUNvbnRlbnRzKGNvbnRlbnRzRGly
dHlSZWN0KSk7Ci0KLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0
ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7Ci0gICAgVGls
ZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSB0aWxlQ29vcmRpbmF0
ZUZvclBvaW50KGlubmVyQm90dG9tUmlnaHQoZGlydHlSZWN0KSk7Ci0KLSAgICBJbnRSZWN0IGNv
dmVyUmVjdCA9IGNhbGN1bGF0ZUNvdmVyUmVjdCh2aXNpYmxlUmVjdCgpKTsKLQotICAgIFZlY3Rv
cjxUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNUb1JlbW92ZTsKLQotICAg
IGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPD0g
Ym90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
eENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueCgp
OyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRp
bGU+IGN1cnJlbnRUaWxlID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5nZXQoVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKSk7Ci0gICAg
ICAgICAgICBpZiAoIWN1cnJlbnRUaWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaWYgKCFjdXJyZW50VGlsZS0+cmVjdCgpLmludGVyc2VjdHMoZGlydHlSZWN0KSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIElmIGEgdGlsZSBvdXRz
aWRlIG91dCBjdXJyZW50IGNvdmVyIHJlY3QgZ2V0cyBpbnZhbGlkYXRlZCwganVzdCBkcm9wIGl0
IGluc3RlYWQgb2YgdXBkYXRpbmcuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnRUaWxlLT5yZWN0
KCkuaW50ZXJzZWN0cyhjb3ZlclJlY3QpKSB7Ci0gICAgICAgICAgICAgICAgdGlsZXNUb1JlbW92
ZS5hcHBlbmQoY3VycmVudFRpbGUtPmNvb3JkaW5hdGUoKSk7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50VGlsZS0+aW52YWxpZGF0
ZShkaXJ0eVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcmVtb3ZlQ291
bnQgPSB0aWxlc1RvUmVtb3ZlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwg
cmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5yZW1v
dmUodGlsZXNUb1JlbW92ZVtuXSk7Ci0KLSAgICBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigp
OwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQot
ewotICAgIFZlY3RvcjxSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+ID4gbmV3RGlydHlUaWxl
czsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgZW5kID0g
bV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5lbmQoKTsKLSAgICBmb3IgKFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVz
KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxUaWxlZERyYXdp
bmdBcmVhVGlsZT4mIGN1cnJlbnQgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoIWN1cnJlbnQt
PmlzRGlydHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBuZXdEaXJ0eVRpbGVz
LmFwcGVuZChpdC0+c2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3RGlydHlUaWxlcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBuZXdEaXJ0eVRp
bGVzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKQotICAg
ICAgICBuZXdEaXJ0eVRpbGVzW25dLT51cGRhdGVCYWNrQnVmZmVyKCk7Ci19Ci0KLXZvaWQgVGls
ZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQnVmZmVyVXBkYXRlQ29tcGxldGUoKQotewotICAgIC8v
IEJhaWwgb3V0IGlmIGFsbCB0aWxlIGJhY2sgYnVmZmVycyBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQu
Ci0gICAgVmVjdG9yPFRpbGVkRHJhd2luZ0FyZWFUaWxlKj4gdGlsZXNUb0ZsaXA7Ci0gICAgVGls
ZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRp
bGVTZXQtPnRpbGVzKCkuZW5kKCk7Ci0gICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+
JiBjdXJyZW50ID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzUmVhZHlUb1Bh
aW50KCkgJiYgKGN1cnJlbnQtPmlzRGlydHkoKSB8fCBjdXJyZW50LT5oYXNCYWNrQnVmZmVyVXBk
YXRlUGVuZGluZygpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1JlYWR5QmFja0J1ZmZlcigpKQotICAgICAgICAgICAgdGlsZXNUb0ZsaXAuYXBwZW5kKGN1
cnJlbnQuZ2V0KCkpOwotICAgIH0KLSAgICAvLyBFdmVyeXRoaW5nIGRvbmUsIG1vdmUgYmFjayBi
dWZmZXJzIHRvIGZyb250LgotICAgIFZlY3RvcjxJbnRSZWN0PiBwYWludGVkQXJlYTsKLSAgICB1
bnNpZ25lZCBzaXplID0gdGlsZXNUb0ZsaXAuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9
IDA7IG4gPCBzaXplOyArK24pIHsKLSAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGUqIHRpbGUg
PSB0aWxlc1RvRmxpcFtuXTsKLSAgICAgICAgdGlsZS0+c3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7
Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IHJlcXVlc3Qgc3lzdGVtIHJlcGFpbnQgZm9y
IHRoZSBmdWxsIHRpbGUuCi0gICAgICAgIHBhaW50ZWRBcmVhLmFwcGVuZChtX2N1cnJlbnRUaWxl
U2V0LT5tYXBUb0NvbnRlbnRzKHRpbGUtPnJlY3QoKSkpOwotICAgIH0KLQotICAgIGlmIChtX3By
ZXZpb3VzVGlsZVNldCAmJiAoY292ZXJhZ2VSYXRpbyhtX2N1cnJlbnRUaWxlU2V0LmdldCgpLCB2
aXNpYmxlUmVjdCgpKSA+PSAxLjBmIHx8ICFoYXNQZW5kaW5nVXBkYXRlcygpKSkgewotICAgICAg
ICBwYWludGVkQXJlYS5jbGVhcigpOwotICAgICAgICBwYWludGVkQXJlYS5hcHBlbmQobV92aXNp
YmxlQ29udGVudFJlY3QpOwotICAgICAgICBtX3ByZXZpb3VzVGlsZVNldC5jbGVhcigpOwotICAg
IH0KLQotICAgIGlmICghcGFpbnRlZEFyZWEuaXNFbXB0eSgpKQotICAgICAgICB1cGRhdGVXZWJW
aWV3KHBhaW50ZWRBcmVhKTsKLQotICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90
KDApOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFpbnQoVGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQqIHRpbGVTZXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgZ2MpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB0aWxlU2V0LT5tYXBG
cm9tQ29udGVudHMocmVjdCk7Ci0KLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0
ZSB0b3BMZWZ0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7
Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSB0aWxl
Q29vcmRpbmF0ZUZvclBvaW50KGlubmVyQm90dG9tUmlnaHQoZGlydHlSZWN0KSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9wTGVmdC55KCk7IHlDb29yZGluYXRlIDw9IGJv
dHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHhD
b29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LngoKTsg
Kyt4Q29vcmRpbmF0ZSkgewotICAgICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3Jk
aW5hdGUgY3VycmVudENvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKTsKLSAgICAg
ICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxlU2V0
LT50aWxlcygpLmdldChjdXJyZW50Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVu
dFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkpCi0gICAgICAgICAgICAgICAg
Y3VycmVudFRpbGUtPnBhaW50KCZnYywgZGlydHlSZWN0KTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQogYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3QsIFBsYXRmb3JtRHJhd2luZ0NvbnRleHQgY29udGV4dCkKIHsKLSAgICBpZiAobV9p
c1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbikgewotICAgICAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgICAgIGlmICghcGFnZS0+aXNWYWxpZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChwYWdlLT5wcm9jZXNzKCkt
PmlzTGF1bmNoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
R3JhcGhpY3NDb250ZXh0IGdjKGNvbnRleHQpOwotICAgIGdjLnNhdmUoKTsKLQotICAgIC8vIEFz
c3VtZXMgdGhlIGJhY2tpbmcgc3RvcmUgaXMgcGFpbnRlZCB3aXRoIHRoZSBzY2FsZSB0cmFuc2Zv
cm0gYXBwbGllZC4KLSAgICAvLyBTaW5jZSB0aWxlIGNvbnRlbnQgaXMgYWxyZWFkeSBzY2FsZWQs
IGZpcnN0IHJldmVydCB0aGUgc2NhbGluZyBmcm9tIHRoZSBwYWludGVyLgotICAgIGdjLnNjYWxl
KEZsb2F0U2l6ZSgxIC8gbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpLCAxIC8gbV9j
dXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpKSk7Ci0gICAgcGFpbnQobV9jdXJyZW50VGls
ZVNldC5nZXQoKSwgcmVjdCwgZ2MpOwotCi0gICAgLy8gUGFpbnQgdGhlIHByZXZpb3VzIHNjYWxl
IHRpbGVzLCBpZiBhbnksIG92ZXIgdGhlIGN1cnJlbnRseSB1cGRhdGluZyB0aWxlcy4KLSAgICBp
ZiAobV9wcmV2aW91c1RpbGVTZXQpIHsKLSAgICAgICAgLy8gUmUtYXBwbHkgdGhlIHJldmVydGVk
IGN1cnJlbnQgdGlsZXMgc2NhbGluZyBhbmQgdGhlbgotICAgICAgICAvLyByZXZlcnQgdGhlIHBy
ZXZpb3VzIHRpbGVzIHNjYWxpbmcgdG8gZ2V0IG1hdGNoZWQgY29udGVudHMgc2NhbGUuCi0gICAg
ICAgIGZsb2F0IGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSA9IG1fY3VycmVudFRpbGVT
ZXQtPmNvbnRlbnRzU2NhbGUoKSAvIG1fcHJldmlvdXNUaWxlU2V0LT5jb250ZW50c1NjYWxlKCk7
Ci0gICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShjdXJyZW50VG9QcmV2aW91c1JldmVydGVkU2Nh
bGUsIGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSkpOwotICAgICAgICBwYWludChtX3By
ZXZpb3VzVGlsZVNldC5nZXQoKSwgcmVjdCwgZ2MpOwotICAgIH0KLQotICAgIGdjLnJlc3RvcmUo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNl
dFZpc2libGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVu
dFJlY3QpCi17Ci0gICAgaWYgKG1fdmlzaWJsZUNvbnRlbnRSZWN0ICE9IHZpc2libGVDb250ZW50
UmVjdCkgewotICAgICAgICBtX3Zpc2libGVDb250ZW50UmVjdCA9IHZpc2libGVDb250ZW50UmVj
dDsKLSAgICAgICAgc3RhcnRUaWxlQ3JlYXRpb25UaW1lcigpOwotICAgIH0KLX0KLQotZmxvYXQg
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojpjb3ZlcmFnZVJhdGlvKFRpbGVkRHJhd2luZ0FyZWFUaWxl
U2V0KiB0aWxlU2V0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIEludFJl
Y3QgZGlydHlSZWN0ID0gdGlsZVNldC0+bWFwRnJvbUNvbnRlbnRzKHJlY3QpOwotICAgIGZsb2F0
IHJlY3RBcmVhID0gZGlydHlSZWN0LndpZHRoKCkgKiBkaXJ0eVJlY3QuaGVpZ2h0KCk7Ci0gICAg
ZmxvYXQgY292ZXJBcmVhID0gMC4wZjsKLQotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29y
ZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5sb2NhdGlv
bigpKTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBib3R0b21SaWdodCA9
IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoaW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsKLQot
ICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUg
PD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQu
eCgpOyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6
Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpOwot
ICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IHRp
bGVTZXQtPnRpbGVzKCkuZ2V0KFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlKHhDb29y
ZGluYXRlLCB5Q29vcmRpbmF0ZSkpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRUaWxlICYmIGN1
cnJlbnRUaWxlLT5pc1JlYWR5VG9QYWludCgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBj
b3ZlclJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBjdXJyZW50VGlsZS0+cmVjdCgpKTsK
LSAgICAgICAgICAgICAgICBjb3ZlckFyZWEgKz0gY292ZXJSZWN0LndpZHRoKCkgKiBjb3ZlclJl
Y3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGNvdmVyQXJlYSAvIHJlY3RBcmVhOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKLXsKLSAgICBpZiAobV9jdXJyZW50VGlsZVNl
dC0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBL
ZWVwIHRoZSBjdXJyZW50IHRpbGVzIGluIG1fcHJldmlvdXNUaWxlU2V0IHdoaWxlIHRoZSBuZXcg
c2NhbGUgdGlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQuCi0gICAgLy8gSWYgbV9jdXJyZW50VGlsZVNl
dCBzdGlsbCBoYXNuJ3QgbW9yZSBwYWludGFibGUgY29udGVudCBmb3IgdGhlIGN1cnJlbnQgdmll
d3BvcnQgcmVjdAotICAgIC8vIHRoYW4gbV9wcmV2aW91c1RpbGVTZXQsIHRoZW4ga2VlcCB0aGUg
b2xkIG1fcHJldmlvdXNUaWxlU2V0LiBUaGlzIGhhcHBlbnMgd2hlbgotICAgIC8vIHNldENvbnRl
bnRzU2NhbGUgaXMgY2FsbGVkIHR3aWNlIHdoaWxlIG1fY3VycmVudFRpbGVTZXQgc3RpbGwgY29u
dGFpbnMgZmV3IG9yIG5vIHJlbmRlcmVkIHRpbGVzLgotICAgIGlmICghbV9wcmV2aW91c1RpbGVT
ZXQgfHwgY292ZXJhZ2VSYXRpbyhtX3ByZXZpb3VzVGlsZVNldC5nZXQoKSwgdmlzaWJsZVJlY3Qo
KSkgPCBjb3ZlcmFnZVJhdGlvKG1fY3VycmVudFRpbGVTZXQuZ2V0KCksIHZpc2libGVSZWN0KCkp
KSB7Ci0gICAgICAgIG1fcHJldmlvdXNUaWxlU2V0ID0gbV9jdXJyZW50VGlsZVNldC5yZWxlYXNl
KCk7Ci0gICAgICAgIGRpc2FibGVUaWxlU2V0VXBkYXRlcyhtX3ByZXZpb3VzVGlsZVNldC5nZXQo
KSk7Ci0gICAgfQotICAgIG1fY3VycmVudFRpbGVTZXQgPSBhZG9wdFB0cihuZXcgVGlsZWREcmF3
aW5nQXJlYVRpbGVTZXQobV93ZWJWaWV3LCBzY2FsZSkpOwotICAgIGNyZWF0ZVRpbGVzKCk7Ci19
Ci0KLWRvdWJsZSBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVEaXN0YW5jZShjb25zdCBJbnRS
ZWN0JiB2aWV3cG9ydCwgY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIHRp
bGVDb29yZGluYXRlKQotewotICAgIGlmICh2aWV3cG9ydC5pbnRlcnNlY3RzKHRpbGVSZWN0Rm9y
Q29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIElu
dFBvaW50IHZpZXdDZW50ZXIgPSB2aWV3cG9ydC5sb2NhdGlvbigpICsgSW50U2l6ZSh2aWV3cG9y
dC53aWR0aCgpIC8gMiwgdmlld3BvcnQuaGVpZ2h0KCkgLyAyKTsKLSAgICBUaWxlZERyYXdpbmdB
cmVhVGlsZTo6Q29vcmRpbmF0ZSBjZW50ZXJDb29yZGluYXRlID0gdGlsZUNvb3JkaW5hdGVGb3JQ
b2ludCh2aWV3Q2VudGVyKTsKLQotICAgIC8vIE1hbmhhdHRhbiBkaXN0YW5jZSwgYmlhc2VkIHNv
IHRoYXQgdmVydGljYWwgZGlzdGFuY2VzIGFyZSBzaG9ydGVyLgotICAgIGNvbnN0IGRvdWJsZSBo
b3Jpem9udGFsQmlhcyA9IDEuMzsKLSAgICByZXR1cm4gYWJzKGNlbnRlckNvb3JkaW5hdGUueSgp
IC0gdGlsZUNvb3JkaW5hdGUueSgpKSArIGhvcml6b250YWxCaWFzICogYWJzKGNlbnRlckNvb3Jk
aW5hdGUueCgpIC0gdGlsZUNvb3JkaW5hdGUueCgpKTsKLX0KLQotSW50UmVjdCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OmNhbGN1bGF0ZUtlZXBSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0
KSBjb25zdAotewotICAgIEludFJlY3QgcmVzdWx0ID0gdmlzaWJsZVJlY3Q7Ci0gICAgLy8gSW5m
bGF0ZXMgdG8gYm90aCBzaWRlcywgc28gZGl2aWRlIGluZmxhdGUgZGVsdGEgYnkgMgotICAgIHJl
c3VsdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpICogKG1fa2VlcEFyZWFNdWx0aXBsaWVy
LndpZHRoKCkgLSAxKSAvIDIpOwotICAgIHJlc3VsdC5pbmZsYXRlWSh2aXNpYmxlUmVjdC5oZWln
aHQoKSAqIChtX2tlZXBBcmVhTXVsdGlwbGllci5oZWlnaHQoKSAtIDEpIC8gMik7Ci0gICAgcmVz
dWx0LmludGVyc2VjdChjb250ZW50c1JlY3QoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
SW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlc3VsdCA9IHZpc2li
bGVSZWN0OwotICAgIC8vIEluZmxhdGVzIHRvIGJvdGggc2lkZXMsIHNvIGRpdmlkZSBpbmZsYXRl
IGRlbHRhIGJ5IDIKLSAgICByZXN1bHQuaW5mbGF0ZVgodmlzaWJsZVJlY3Qud2lkdGgoKSAqICht
X2NvdmVyQXJlYU11bHRpcGxpZXIud2lkdGgoKSAtIDEpIC8gMik7Ci0gICAgcmVzdWx0LmluZmxh
dGVZKHZpc2libGVSZWN0LmhlaWdodCgpICogKG1fY292ZXJBcmVhTXVsdGlwbGllci5oZWlnaHQo
KSAtIDEpIC8gMik7Ci0gICAgcmVzdWx0LmludGVyc2VjdChjb250ZW50c1JlY3QoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRp
bGVzKCkKLXsKLSAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdGhpcy0+dmlzaWJsZVJlY3QoKTsK
LSAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBSZXNpemUgdGlsZXMgb24gZWRnZXMgaW4gY2FzZSB0aGUgY29udGVudHMgc2l6ZSBoYXMgY2hh
bmdlZC4KLSAgICBib29sIGRpZFJlc2l6ZVRpbGVzID0gcmVzaXplRWRnZVRpbGVzKCk7Ci0KLSAg
ICAvLyBSZW1vdmUgdGlsZXMgb3V0c2lkZSBvdXQgY3VycmVudCBtYXhpbXVtIGtlZXAgcmVjdC4K
LSAgICBkcm9wVGlsZXNPdXRzaWRlUmVjdChjYWxjdWxhdGVLZWVwUmVjdCh2aXNpYmxlUmVjdCkp
OwotCi0gICAgLy8gU2VhcmNoIGZvciB0aGUgdGlsZSBwb3NpdGlvbiBjbG9zZXN0IHRvIHRoZSB2
aWV3cG9ydCBjZW50ZXIgdGhhdCBkb2VzIG5vdCB5ZXQgY29udGFpbiBhIHRpbGUuCi0gICAgLy8g
V2hpY2ggcG9zaXRpb24gaXMgY29uc2lkZXJlZCB0aGUgY2xvc2VzdCBkZXBlbmRzIG9uIHRoZSB0
aWxlRGlzdGFuY2UgZnVuY3Rpb24uCi0gICAgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0gICAgVmVjdG9yPFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpDb29yZGluYXRlPiB0aWxlc1RvQ3JlYXRlOwotICAgIHVuc2lnbmVkIHJl
cXVpcmVkVGlsZUNvdW50ID0gMDsKLSAgICBib29sIGhhc1Zpc2libGVDaGVja2VycyA9IGZhbHNl
OwotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29v
cmRpbmF0ZUZvclBvaW50KHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwotICAgIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2lu
dChpbm5lckJvdHRvbVJpZ2h0KHZpc2libGVSZWN0KSk7Ci0gICAgZm9yICh1bnNpZ25lZCB5Q29v
cmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsr
eUNvb3JkaW5hdGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExl
ZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsK
LSAgICAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGN1cnJlbnRDb29y
ZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICAvLyBEaXN0YW5j
ZSBpcyAwIGZvciBhbGwgY3VycmVudGx5IHZpc2libGUgdGlsZXMuCi0gICAgICAgICAgICBkb3Vi
bGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2UodmlzaWJsZVJlY3QsIGN1cnJlbnRDb29yZGluYXRl
KTsKLQotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0gbV9j
dXJyZW50VGlsZVNldC0+dGlsZXMoKS5nZXQoY3VycmVudENvb3JkaW5hdGUpOwotICAgICAgICAg
ICAgaWYgKCFkaXN0YW5jZSAmJiAoIXRpbGUgfHwgIXRpbGUtPmlzUmVhZHlUb1BhaW50KCkpKQot
ICAgICAgICAgICAgICAgIGhhc1Zpc2libGVDaGVja2VycyA9IHRydWU7Ci0gICAgICAgICAgICBp
ZiAodGlsZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgKytyZXF1
aXJlZFRpbGVDb3VudDsKLQotICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gc2hvcnRlc3REaXN0
YW5jZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChkaXN0YW5j
ZSA8IHNob3J0ZXN0RGlzdGFuY2UpIHsKLSAgICAgICAgICAgICAgICB0aWxlc1RvQ3JlYXRlLmNs
ZWFyKCk7Ci0gICAgICAgICAgICAgICAgc2hvcnRlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdGlsZXNUb0NyZWF0ZS5hcHBlbmQoY3VycmVudENvb3Jk
aW5hdGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhhc1Zpc2libGVDaGVja2VycyAm
JiBzaG9ydGVzdERpc3RhbmNlID4gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm93IGNv
bnN0cnVjdCB0aGUgdGlsZShzKS4KLSAgICB1bnNpZ25lZCB0aWxlc1RvQ3JlYXRlQ291bnQgPSB0
aWxlc1RvQ3JlYXRlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdGlsZXNU
b0NyZWF0ZUNvdW50OyArK24pIHsKLSAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3Jk
aW5hdGUgY29vcmRpbmF0ZSA9IHRpbGVzVG9DcmVhdGVbbl07Ci0gICAgICAgIFJlZlB0cjxUaWxl
ZERyYXdpbmdBcmVhVGlsZT4gdGlsZSA9IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpjcmVhdGUodGhp
cywgbV93ZWJWaWV3LCBjb29yZGluYXRlKTsKLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgQVNT
RVJUKG1fY3VycmVudFRpbGVTZXQtPnNnTm9kZUlEKCkpOwotICAgICAgICB0aWxlLT5zZXRQYXJl
bnROb2RlSUQobV9jdXJyZW50VGlsZVNldC0+c2dOb2RlSUQoKSk7Ci0jZW5kaWYKLSAgICAgICAg
bV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5zZXQoY29vcmRpbmF0ZSwgdGlsZSk7Ci0gICAgfQot
Ci0gICAgcmVxdWlyZWRUaWxlQ291bnQgLT0gdGlsZXNUb0NyZWF0ZUNvdW50OwotCi0gICAgLy8g
UGFpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgdGlsZXMuCi0gICAgaWYgKHRp
bGVzVG9DcmVhdGVDb3VudCB8fCBkaWRSZXNpemVUaWxlcykKLSAgICAgICAgdXBkYXRlVGlsZUJ1
ZmZlcnMoKTsKLQotICAgIC8vIEtlZXAgY3JlYXRpbmcgdGlsZXMgdW50aWwgdGhlIHdob2xlIGNv
dmVyUmVjdCBpcyBjb3ZlcmVkLgotICAgIGlmIChyZXF1aXJlZFRpbGVDb3VudCkKLSAgICAgICAg
bV90aWxlQ3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QobV90aWxlQ3JlYXRpb25EZWxheSk7Ci19
Ci0KLWJvb2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXNpemVFZGdlVGlsZXMoKQotewotICAg
IEludFJlY3QgY29udGVudHNSZWN0ID0gdGhpcy0+Y29udGVudHNSZWN0KCk7Ci0gICAgYm9vbCB3
YXNSZXNpemVkID0gZmFsc2U7Ci0KLSAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNv
b3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRp
bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuZW5kKCk7Ci0g
ICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0
LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IGl0LT5z
ZWNvbmQtPnJlY3QoKTsKLSAgICAgICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJl
Y3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKTsKLSAgICAgICAgaWYgKCFjb250ZW50c1Jl
Y3QuY29udGFpbnModGlsZVJlY3QpKQotICAgICAgICAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQo
dGlsZUNvb3JkaW5hdGUpOwotICAgICAgICBlbHNlIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRp
bGVSZWN0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5yZXNpemUoZXhwZWN0ZWRUaWxlUmVj
dC5zaXplKCkpOwotICAgICAgICAgICAgd2FzUmVzaXplZCA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgdW5zaWduZWQgcmVtb3ZlQ291bnQgPSB0aWxlc1RvUmVtb3ZlLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgbV9j
dXJyZW50VGlsZVNldC0+dGlsZXMoKS5yZW1vdmUodGlsZXNUb1JlbW92ZVtuXSk7Ci0gICAgcmV0
dXJuIHdhc1Jlc2l6ZWQ7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpkcm9wVGls
ZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKLXsKLSAgICBGbG9hdFJlY3Qg
a2VlcFJlY3RGID0ga2VlcFJlY3Q7Ci0KLSAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxl
TWFwOjppdGVyYXRvciBlbmQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmVuZCgpOwotICAg
IGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9j
dXJyZW50VGlsZVNldC0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNv
bmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29u
ZC0+cmVjdCgpOwotICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkK
LSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsKLSAgICB9Ci0gICAgdW5z
aWduZWQgcmVtb3ZlQ291bnQgPSB0b1JlbW92ZS5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBu
ID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCi0gICAgICAgIG1fY3VycmVudFRpbGVTZXQtPnRp
bGVzKCkucmVtb3ZlKHRvUmVtb3ZlW25dKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OmRpc2FibGVUaWxlU2V0VXBkYXRlcyhUaWxlZERyYXdpbmdBcmVhVGlsZVNldCogdGlsZVNl
dCkKLXsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdGlsZVNldC0+dGlsZXMoKS5lbmQoKTsKLSAgICBmb3IgKFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRpbGVTZXQtPnRpbGVzKCku
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5kaXNhYmxlVXBk
YXRlcygpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlQWxsVGlsZXMo
KQotewotICAgIG1fY3VycmVudFRpbGVTZXQgPSBhZG9wdFB0cihuZXcgVGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQobV93ZWJWaWV3LCBtX2N1cnJlbnRUaWxlU2V0LT5jb250ZW50c1NjYWxlKCkpKTsK
LX0KLQotCi1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jdXJyZW50VGlsZVNldC0+bWFwRnJvbUNvbnRlbnRzKEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIG1fdmlld1NpemUpKTsKLX0KLQotSW50UmVjdCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnZpc2libGVSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jdXJyZW50
VGlsZVNldC0+bWFwRnJvbUNvbnRlbnRzKG1fdmlzaWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotSW50
UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZShjb25zdCBU
aWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkgY29uc3QKLXsKLSAg
ICBJbnRSZWN0IHJlY3QoY29vcmRpbmF0ZS54KCkgKiBtX3RpbGVTaXplLndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgIGNvb3JkaW5hdGUueSgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgbV90aWxlU2l6ZS53aWR0aCgpLAotICAgICAgICAgICAgICAgICBtX3RpbGVT
aXplLmhlaWdodCgpKTsKLQotICAgIHJlY3QuaW50ZXJzZWN0KGNvbnRlbnRzUmVjdCgpKTsKLSAg
ICByZXR1cm4gcmVjdDsKLX0KLQotVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgVGls
ZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKLXsKLSAgICBpbnQgeCA9IHBvaW50LngoKSAvIG1fdGlsZVNpemUud2lk
dGgoKTsKLSAgICBpbnQgeSA9IHBvaW50LnkoKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7Ci0gICAg
cmV0dXJuIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlKHN0ZDo6bWF4KHgsIDApLCBz
dGQ6Om1heCh5LCAwKSk7Ci19Ci0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnN0YXJ0
VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCkKLXsKLSAgICBpZiAobV90aWxlQnVmZmVyVXBkYXRlVGlt
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGlsZUJ1ZmZlclVwZGF0ZVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRp
bGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKCkKLXsKLSAgICB1cGRhdGVUaWxlQnVmZmVycygpOwot
fQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c3RhcnRUaWxlQ3JlYXRpb25UaW1lcigp
Ci17Ci0gICAgaWYgKG1fdGlsZUNyZWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAg
Y3JlYXRlVGlsZXMoKTsKLX0KLQotYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6Omhhc1BlbmRp
bmdVcGRhdGVzKCkgY29uc3QKLXsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5lbmQoKTsK
LSAgICBmb3IgKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4mIGN1cnJlbnQg
PSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoY3VycmVudC0+aGFzQmFja0J1ZmZlclVwZGF0ZVBl
bmRpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmgKaW5kZXggZjllOGQ5NDRiZmEzOTcxYjBmYTI4ODE2OGI4ZjlhYTI5YmRmYmRkZi4u
YTU0ZjljMDVmZjk5OGQ3MTI0MTA4ZjliYjc0NmNjZWY5MTdjZTdlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtMzQsNyArMzQs
NiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpbmNsdWRlICJSdW5Mb29wLmgiCi0j
aW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVRpbGUuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykKICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC03NCwzMCArNzMsMTMgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwog
ICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CisgICAgdm9pZCByZW5kZXJOZXh0RnJh
bWUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoQ29tcG9zaXRpbmdDb250ZXh0KHVpbnQzMl90IC8qIGNvbnRleHRJRCAqLykgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaENvbXBvc2l0aW5nQ29udGV4dCgpIHsgfQogI2VuZGlm
CiAKLSAgICBXZWJDb3JlOjpJbnRTaXplIHRpbGVTaXplKCkgeyByZXR1cm4gbV90aWxlU2l6ZTsg
fQotICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi0gICAg
ZG91YmxlIHRpbGVDcmVhdGlvbkRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ3JlYXRpb25E
ZWxheTsgfQotICAgIHZvaWQgc2V0VGlsZUNyZWF0aW9uRGVsYXkoZG91YmxlIGRlbGF5KTsKLQot
ICAgIC8vIFRpbGVkIGFyZSBkcm9wcGVkIG91dHNpZGUgdGhlIGtlZXAgYXJlYSwgYW5kIGNyZWF0
ZWQgZm9yIGNvdmVyIGFyZWEuIFRoZSB2YWx1ZXMgYSByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQg
c2l6ZS4KLSAgICB2b2lkIGdldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhXZWJDb3JlOjpG
bG9hdFNpemUmIGtlZXBNdWx0aXBsaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUmIGNvdmVyTXVsdGlw
bGllcikKLSAgICB7Ci0gICAgICAgIGtlZXBNdWx0aXBsaWVyID0gbV9rZWVwQXJlYU11bHRpcGxp
ZXI7Ci0gICAgICAgIGNvdmVyTXVsdGlwbGllciA9IG1fY292ZXJBcmVhTXVsdGlwbGllcjsKLSAg
ICB9Ci0gICAgdm9pZCBzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBrZWVwTXVsdGlwbGllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBj
b3Zlck11bHRpcGxpZXIpOwotCi0gICAgdm9pZCB0aWxlQnVmZmVyVXBkYXRlQ29tcGxldGUoKTsK
LQotICAgIGJvb2wgaGFzUGVuZGluZ1VwZGF0ZXMoKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICBX
ZWJQYWdlUHJveHkqIHBhZ2UoKTsKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXcoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkludFJlY3Q+JiBwYWludGVkQXJlYSk7CkBAIC0xMDcsNzAgKzg5LDIwIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UGFnZUlzVmlzaWJsZShib29sIGlzVmlzaWJsZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkU2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCk7Ci0gICAgdmlydHVhbCB2b2lk
IHRpbGVVcGRhdGVkKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZs
b2F0IHNjYWxlLCB1bnNpZ25lZCBwZW5kaW5nVXBkYXRlQ291bnQpOwotICAgIHZpcnR1YWwgdm9p
ZCBhbGxUaWxlVXBkYXRlc1Byb2Nlc3NlZCgpOwotCi0gICAgdm9pZCByZWdpc3RlclRpbGUoaW50
IHRpbGVJRCwgVGlsZWREcmF3aW5nQXJlYVRpbGUqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJUaWxl
KGludCB0aWxlSUQpOwotICAgIHZvaWQgcmVxdWVzdFRpbGVVcGRhdGUoaW50IHRpbGVJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIGNhbmNlbFRpbGVVcGRh
dGUoaW50IHRpbGVJRCk7Ci0KLSAgICB2b2lkIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7
Ci0gICAgdm9pZCBzdGFydFRpbGVDcmVhdGlvblRpbWVyKCk7Ci0KLSAgICB2b2lkIHRpbGVCdWZm
ZXJVcGRhdGVUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCB0aWxlQ3JlYXRpb25UaW1lckZpcmVkKCk7
Ci0KLSAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlcygp
OwotCi0gICAgYm9vbCByZXNpemVFZGdlVGlsZXMoKTsKLSAgICB2b2lkIGRyb3BUaWxlc091dHNp
ZGVSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIHZvaWQgZGlzYWJsZVRpbGVT
ZXRVcGRhdGVzKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Kik7Ci0gICAgdm9pZCByZW1vdmVBbGxU
aWxlcygpOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVw
ZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25z
dCBVcGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCk7CiAKLSAgICB2b2lkIHBhaW50KFRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYpOwotICAgIGZsb2F0IGNvdmVyYWdlUmF0aW8oVGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJs
ZVJlY3QoKSBjb25zdDsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgY2FsY3VsYXRlS2VlcFJlY3Qo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0OwotICAgIFdlYkNvcmU6
OkludFJlY3QgY2FsY3VsYXRlQ292ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2li
bGVSZWN0KSBjb25zdDsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3RGb3JDb29yZGlu
YXRlKGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7Ci0gICAg
VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdGlsZUNvb3JkaW5hdGVGb3JQb2ludChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgIGRvdWJsZSB0aWxlRGlzdGFuY2Uo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpDb29yZGluYXRlJik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRp
ZFNldEZyYW1lTm90aWZpY2F0aW9uOwogICAgIGJvb2wgbV9pc1Zpc2libGU7CiAKLSAgICBXZWJD
b3JlOjpJbnRTaXplIG1fdmlld1NpemU7IC8vIFNpemUgb2YgdGhlIEJhY2tpbmdTdG9yZSBhcyB3
ZWxsLgotICAgIFdlYkNvcmU6OkludFNpemUgbV9sYXN0U2V0Vmlld1NpemU7Ci0KICAgICBQbGF0
Zm9ybVdlYlZpZXcqIG1fd2ViVmlldzsKLQotICAgIE93blB0cjxUaWxlZERyYXdpbmdBcmVhVGls
ZVNldD4gbV9jdXJyZW50VGlsZVNldDsKLSAgICBPd25QdHI8VGlsZWREcmF3aW5nQXJlYVRpbGVT
ZXQ+IG1fcHJldmlvdXNUaWxlU2V0OwotCi0gICAgV1RGOjpIYXNoTWFwPGludCwgVGlsZWREcmF3
aW5nQXJlYVRpbGUqPiBtX3RpbGVzQnlJRDsKLQotICAgIHR5cGVkZWYgUnVuTG9vcDo6VGltZXI8
VGlsZWREcmF3aW5nQXJlYVByb3h5PiBUaWxlVGltZXI7Ci0gICAgVGlsZVRpbWVyIG1fdGlsZUJ1
ZmZlclVwZGF0ZVRpbWVyOwotICAgIFRpbGVUaW1lciBtX3RpbGVDcmVhdGlvblRpbWVyOwotCi0g
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3RpbGVTaXplOwotICAgIGRvdWJsZSBtX3RpbGVDcmVhdGlv
bkRlbGF5OwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2tlZXBBcmVhTXVsdGlwbGllcjsKLSAg
ICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb3ZlckFyZWFNdWx0aXBsaWVyOwotCi0gICAgV2ViQ29y
ZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKLQotICAgIGZyaWVuZCBjbGFzcyBUaWxl
ZERyYXdpbmdBcmVhVGlsZTsKKyNpZiBQTEFURk9STShRVCkKKyAgICBIYXNoTWFwPGludCwgaW50
PiBtX3RpbGVzVG9Ob2RlczsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVRpbGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTUzNzhjMWFjMWRlMDJiM2ZkMWIwODExYWZiZGM5
NTgwZWRkNzIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgVGlsZWREcmF3aW5nQXJlYVRpbGVfaAotI2RlZmluZSBUaWxlZERyYXdpbmdBcmVhVGlsZV9o
Ci0KLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBQ
TEFURk9STShRVCkKLSNpbmNsdWRlIDxRUGl4bWFwPgotI2luY2x1ZGUgPFFSZWdpb24+Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFRpbGVkRHJhd2luZ0FyZWFQcm94eTsK
LWNsYXNzIFVwZGF0ZUluZm87Ci0KLSNpZiBQTEFURk9STShNQUMpCi10eXBlZGVmIFdLVmlldyBQ
bGF0Zm9ybVdlYlZpZXc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi1jbGFzcyBXZWJWaWV3OwotdHlw
ZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKLSNlbGlmIFBMQVRGT1JNKFFUKQotY2xhc3Mg
U0dBZ2VudDsKLWNsYXNzIFRvdWNoVmlld0ludGVyZmFjZTsKLXR5cGVkZWYgVG91Y2hWaWV3SW50
ZXJmYWNlIFBsYXRmb3JtV2ViVmlldzsKLSNlbmRpZgotCi1jbGFzcyBUaWxlZERyYXdpbmdBcmVh
VGlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB7Ci1wdWJsaWM6
Ci0gICAgdHlwZWRlZiBXZWJDb3JlOjpJbnRQb2ludCBDb29yZGluYXRlOwotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGNyZWF0ZShUaWxlZERyYXdpbmdBcmVh
UHJveHkqIHByb3h5LCBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENvb3JkaW5hdGUm
IHRpbGVDb29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGlsZWREcmF3aW5nQXJlYVRp
bGUocHJveHksIHdlYlZpZXcsIHRpbGVDb29yZGluYXRlKSk7IH0KLSAgICB+VGlsZWREcmF3aW5n
QXJlYVRpbGUoKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxp
ZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCB1cGRhdGVCYWNrQnVmZmVy
KCk7Ci0gICAgYm9vbCBoYXNSZWFkeUJhY2tCdWZmZXIoKSBjb25zdDsKLSAgICB2b2lkIHN3YXBC
YWNrQnVmZmVyVG9Gcm9udCgpOwotICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKLSAg
ICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKLSAgICBib29sIGhhc0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNVcGRhdGVQZW5kaW5nOyB9Ci0KLSAgICBjb25zdCBUaWxlZERyYXdpbmdBcmVh
VGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0
ZTsgfQotICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KLSAgICB2b2lkIHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0KLSAg
ICB2b2lkIGluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mLCBmbG9hdCBzY2FsZSk7
Ci0gICAgdm9pZCBkaXNhYmxlVXBkYXRlcygpOwotCi0gICAgaW50IElEKCkgY29uc3QgeyByZXR1
cm4gbV9JRDsgfQotI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgc2V0UGFyZW50Tm9kZUlEKGlu
dCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZShUaWxlZERy
YXdpbmdBcmVhUHJveHkqLCBQbGF0Zm9ybVdlYlZpZXcqLCBjb25zdCBUaWxlZERyYXdpbmdBcmVh
VGlsZTo6Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpOwotCi0gICAgVGlsZWREcmF3aW5nQXJl
YVByb3h5KiBtX3Byb3h5OwotICAgIENvb3JkaW5hdGUgbV9jb29yZGluYXRlOwotICAgIFdlYkNv
cmU6OkludFJlY3QgbV9yZWN0OwotCi0gICAgaW50IG1fSUQ7Ci0gICAgYm9vbCBtX2hhc1VwZGF0
ZVBlbmRpbmc7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRSW1hZ2UgbV9iYWNrQnVmZmVyOwot
ICAgIFNHQWdlbnQqIG1fc2dBZ2VudDsKLSAgICBpbnQgbV9ub2RlSUQ7Ci0gICAgaW50IG1fcGFy
ZW50Tm9kZUlEOwotICAgIGJvb2wgbV9pc0JhY2tCdWZmZXJWYWxpZDsKLSAgICBRUmVnaW9uIG1f
ZGlydHlSZWdpb247Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvU0dBZ2VudC5jcHAKaW5kZXggOGYwNGM3MzQ0NTM4MTE1ZjQwMjFmOGZmZTI3MGFj
ODFjODhkMDI3Mi4uY2M3OGY1MzJjZjIyYjNhNTRkYzBkMDc0NTM5NDM2M2U3ODAyNDA0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR0FnZW50LmNwcApAQCAtMjMsODggKzIzLDgxIEBA
CiAKICNpbmNsdWRlICJQYXNzT3duUHRyLmgiCiAjaW5jbHVkZSAiU0dUaWxlTm9kZS5oIgotI2lu
Y2x1ZGUgPFFTR0VuZ2luZT4KICNpbmNsdWRlIDxRU0dJdGVtPgotI2luY2x1ZGUgPFFTR1RleHR1
cmU+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUg
OiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUoaW50IG5vZGVJ
RCwgaW50IHBhcmVudE5vZGVJRCkKKyAgICBOb2RlVXBkYXRlQ3JlYXRlVGlsZShpbnQgbm9kZUlE
LCBmbG9hdCBzY2FsZSkKICAgICAgICAgOiBOb2RlVXBkYXRlKENyZWF0ZVRpbGUpCiAgICAgICAg
ICwgbm9kZUlEKG5vZGVJRCkKLSAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlEKQot
ICAgIHsgfQotICAgIGludCBub2RlSUQ7Ci0gICAgaW50IHBhcmVudE5vZGVJRDsKLX07Ci0KLXN0
cnVjdCBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9k
ZVVwZGF0ZUNyZWF0ZVNjYWxlKGludCBub2RlSUQsIGludCBwYXJlbnROb2RlSUQsIGZsb2F0IHNj
YWxlKQotICAgICAgICA6IE5vZGVVcGRhdGUoQ3JlYXRlU2NhbGUpCi0gICAgICAgICwgbm9kZUlE
KG5vZGVJRCkKLSAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlEKQogICAgICAgICAs
IHNjYWxlKHNjYWxlKQogICAgIHsgfQogICAgIGludCBub2RlSUQ7Ci0gICAgaW50IHBhcmVudE5v
ZGVJRDsKICAgICBmbG9hdCBzY2FsZTsKIH07CiAKLXN0cnVjdCBOb2RlVXBkYXRlUmVtb3ZlIDog
cHVibGljIE5vZGVVcGRhdGUgewotICAgIE5vZGVVcGRhdGVSZW1vdmUoaW50IG5vZGVJRCkKLSAg
ICAgICAgOiBOb2RlVXBkYXRlKFJlbW92ZSkKK3N0cnVjdCBOb2RlVXBkYXRlUmVtb3ZlVGlsZSA6
IHB1YmxpYyBOb2RlVXBkYXRlIHsKKyAgICBOb2RlVXBkYXRlUmVtb3ZlVGlsZShpbnQgbm9kZUlE
KQorICAgICAgICA6IE5vZGVVcGRhdGUoUmVtb3ZlVGlsZSkKICAgICAgICAgLCBub2RlSUQobm9k
ZUlEKQogICAgIHsgfQogICAgIGludCBub2RlSUQ7CiB9OwogCi1zdHJ1Y3QgTm9kZVVwZGF0ZVNl
dFRleHR1cmUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9kZVVwZGF0ZVNldFRleHR1cmUo
aW50IG5vZGVJRCwgY29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVj
dCwgY29uc3QgUVJlY3QmIHRhcmdldFJlY3QpCi0gICAgICAgIDogTm9kZVVwZGF0ZShTZXRUZXh0
dXJlKQorc3RydWN0IE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyIDogcHVibGljIE5vZGVVcGRhdGUg
eworICAgIE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyKGludCBub2RlSUQsIGNvbnN0IFFJbWFnZSYg
YmFja0J1ZmZlciwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0JiB0YXJnZXRS
ZWN0KQorICAgICAgICA6IE5vZGVVcGRhdGUoU2V0QmFja0J1ZmZlcikKICAgICAgICAgLCBub2Rl
SUQobm9kZUlEKQotICAgICAgICAsIHRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgLCBiYWNrQnVm
ZmVyKGJhY2tCdWZmZXIpCiAgICAgICAgICwgc291cmNlUmVjdChzb3VyY2VSZWN0KQogICAgICAg
ICAsIHRhcmdldFJlY3QodGFyZ2V0UmVjdCkKICAgICB7IH0KICAgICBpbnQgbm9kZUlEOwotICAg
IFFJbWFnZSB0ZXh0dXJlOworICAgIFFJbWFnZSBiYWNrQnVmZmVyOwogICAgIFFSZWN0IHNvdXJj
ZVJlY3Q7CiAgICAgUVJlY3QgdGFyZ2V0UmVjdDsKIH07CiAKK3N0cnVjdCBOb2RlVXBkYXRlU3dh
cFRpbGVCdWZmZXJzIDogcHVibGljIE5vZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVTd2FwVGls
ZUJ1ZmZlcnMoKQorICAgICAgICA6IE5vZGVVcGRhdGUoU3dhcFRpbGVCdWZmZXJzKQorICAgIHsg
fQorfTsKIAogU0dBZ2VudDo6U0dBZ2VudChRU0dJdGVtKiBpdGVtKQogICAgIDogaXRlbShpdGVt
KQorICAgICwgbGFzdFNjYWxlKDApCisgICAgLCBsYXN0U2NhbGVOb2RlKDApCiAgICAgLCBuZXh0
Tm9kZUlEKDEpCisgICAgLCBtX2lzU3dhcFBlbmRpbmcoZmFsc2UpCiB7CiB9CiAKLWludCBTR0Fn
ZW50OjpjcmVhdGVUaWxlTm9kZShpbnQgcGFyZW50Tm9kZUlEKQoraW50IFNHQWdlbnQ6OmNyZWF0
ZVRpbGVOb2RlKGZsb2F0IHNjYWxlKQogewogICAgIGludCBub2RlSUQgPSBuZXh0Tm9kZUlEKys7
Ci0gICAgbm9kZVVwZGF0ZXNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vZGVVcGRhdGVDcmVh
dGVUaWxlKG5vZGVJRCwgcGFyZW50Tm9kZUlEKSkpOworICAgIG5vZGVVcGRhdGVzUXVldWUuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBOb2RlVXBkYXRlQ3JlYXRlVGlsZShub2RlSUQsIHNjYWxlKSkpOwog
ICAgIGl0ZW0tPnVwZGF0ZSgpOwogICAgIHJldHVybiBub2RlSUQ7CiB9CiAKLWludCBTR0FnZW50
OjpjcmVhdGVTY2FsZU5vZGUoaW50IHBhcmVudE5vZGVJRCwgZmxvYXQgc2NhbGUpCit2b2lkIFNH
QWdlbnQ6OnJlbW92ZVRpbGVOb2RlKGludCBub2RlSUQpCiB7Ci0gICAgaW50IG5vZGVJRCA9IG5l
eHROb2RlSUQrKzsKLSAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9k
ZVVwZGF0ZUNyZWF0ZVNjYWxlKG5vZGVJRCwgcGFyZW50Tm9kZUlELCBzY2FsZSkpKTsKKyAgICBu
b2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVJlbW92ZVRpbGUo
bm9kZUlEKSkpOwogICAgIGl0ZW0tPnVwZGF0ZSgpOwotICAgIHJldHVybiBub2RlSUQ7CiB9CiAK
LXZvaWQgU0dBZ2VudDo6cmVtb3ZlTm9kZShpbnQgbm9kZUlEKQordm9pZCBTR0FnZW50OjpzZXRO
b2RlQmFja0J1ZmZlcihpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIGJhY2tCdWZmZXIsIGNvbnN0
IFFSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBub2Rl
VXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVJlbW92ZShub2RlSUQp
KSk7CisgICAgbm9kZVVwZGF0ZXNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vZGVVcGRhdGVT
ZXRCYWNrQnVmZmVyKG5vZGVJRCwgYmFja0J1ZmZlciwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCkp
KTsKICAgICBpdGVtLT51cGRhdGUoKTsKIH0KIAotdm9pZCBTR0FnZW50OjpzZXROb2RlVGV4dHVy
ZShpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIHRleHR1cmUsIGNvbnN0IFFSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKK3ZvaWQgU0dBZ2VudDo6c3dhcFRpbGVCdWZm
ZXJzKCkKIHsKLSAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVw
ZGF0ZVNldFRleHR1cmUobm9kZUlELCB0ZXh0dXJlLCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0KSkp
OworICAgIG5vZGVVcGRhdGVzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBOb2RlVXBkYXRlU3dh
cFRpbGVCdWZmZXJzKCkpKTsKKyAgICBtX2lzU3dhcFBlbmRpbmcgPSB0cnVlOwogICAgIGl0ZW0t
PnVwZGF0ZSgpOwogfQogCkBAIC0xMTUsMzkgKzEwOCwzOCBAQCB2b2lkIFNHQWdlbnQ6OnVwZGF0
ZVBhaW50Tm9kZShRU0dOb2RlKiBpdGVtTm9kZSkKICAgICAgICAgc3dpdGNoIChub2RlVXBkYXRl
LT50eXBlKSB7CiAgICAgICAgIGNhc2UgTm9kZVVwZGF0ZTo6Q3JlYXRlVGlsZTogewogICAgICAg
ICAgICAgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUqIGNyZWF0ZVRpbGVVcGRhdGUgPSBzdGF0aWNfY2Fz
dDxOb2RlVXBkYXRlQ3JlYXRlVGlsZSo+KG5vZGVVcGRhdGUuZ2V0KCkpOwotICAgICAgICAgICAg
U0dUaWxlTm9kZSogdGlsZU5vZGUgPSBuZXcgU0dUaWxlTm9kZTsKLSAgICAgICAgICAgIFFTR05v
ZGUqIHBhcmVudE5vZGUgPSBjcmVhdGVUaWxlVXBkYXRlLT5wYXJlbnROb2RlSUQgPyBub2Rlcy5n
ZXQoY3JlYXRlVGlsZVVwZGF0ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOwotICAgICAgICAg
ICAgcGFyZW50Tm9kZS0+cHJlcGVuZENoaWxkTm9kZSh0aWxlTm9kZSk7CisgICAgICAgICAgICBT
R1RpbGVOb2RlKiB0aWxlTm9kZSA9IG5ldyBTR1RpbGVOb2RlKGl0ZW0tPnNjZW5lR3JhcGhFbmdp
bmUoKSk7CisgICAgICAgICAgICBnZXRTY2FsZU5vZGUoY3JlYXRlVGlsZVVwZGF0ZS0+c2NhbGUs
IGl0ZW1Ob2RlKS0+cHJlcGVuZENoaWxkTm9kZSh0aWxlTm9kZSk7CiAgICAgICAgICAgICBub2Rl
cy5zZXQoY3JlYXRlVGlsZVVwZGF0ZS0+bm9kZUlELCB0aWxlTm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OkNyZWF0ZVNjYWxlOiB7
Ci0gICAgICAgICAgICBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUqIGNyZWF0ZVNjYWxlVXBkYXRlID0g
c3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZUNyZWF0ZVNjYWxlKj4obm9kZVVwZGF0ZS5nZXQoKSk7Ci0g
ICAgICAgICAgICBRU0dUcmFuc2Zvcm1Ob2RlKiBzY2FsZU5vZGUgPSBuZXcgUVNHVHJhbnNmb3Jt
Tm9kZTsKLSAgICAgICAgICAgIFFNYXRyaXg0eDQgc2NhbGVNYXRyaXg7Ci0gICAgICAgICAgICAv
LyBVc2Ugc2NhbGUoZmxvYXQsZmxvYXQpIHRvIHByZXZlbnQgc2NhbGluZyB0aGUgWiBjb21wb25l
bnQuCi0gICAgICAgICAgICBzY2FsZU1hdHJpeC5zY2FsZShjcmVhdGVTY2FsZVVwZGF0ZS0+c2Nh
bGUsIGNyZWF0ZVNjYWxlVXBkYXRlLT5zY2FsZSk7Ci0gICAgICAgICAgICBzY2FsZU5vZGUtPnNl
dE1hdHJpeChzY2FsZU1hdHJpeCk7Ci0gICAgICAgICAgICBRU0dOb2RlKiBwYXJlbnROb2RlID0g
Y3JlYXRlU2NhbGVVcGRhdGUtPnBhcmVudE5vZGVJRCA/IG5vZGVzLmdldChjcmVhdGVTY2FsZVVw
ZGF0ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOwotICAgICAgICAgICAgLy8gUHJlcGVuZCBp
bnN0ZWFkIG9mIGFwcGVuZCB0byBwYWludCB0aGUgbmV3LCBpbmNvbXBsZXRlLCB0aWxlc2V0IGJl
Zm9yZS9iZWhpbmQgdGhlIHByZXZpb3VzIG9uZS4KLSAgICAgICAgICAgIHBhcmVudE5vZGUtPnBy
ZXBlbmRDaGlsZE5vZGUoc2NhbGVOb2RlKTsKLSAgICAgICAgICAgIG5vZGVzLnNldChjcmVhdGVT
Y2FsZVVwZGF0ZS0+bm9kZUlELCBzY2FsZU5vZGUpOworICAgICAgICBjYXNlIE5vZGVVcGRhdGU6
OlJlbW92ZVRpbGU6IHsKKyAgICAgICAgICAgIE5vZGVVcGRhdGVSZW1vdmVUaWxlKiByZW1vdmVV
cGRhdGUgPSBzdGF0aWNfY2FzdDxOb2RlVXBkYXRlUmVtb3ZlVGlsZSo+KG5vZGVVcGRhdGUuZ2V0
KCkpOworICAgICAgICAgICAgUVNHTm9kZSogbm9kZSA9IG5vZGVzLnRha2UocmVtb3ZlVXBkYXRl
LT5ub2RlSUQpOworICAgICAgICAgICAgUVNHTm9kZSogc2NhbGVOb2RlID0gbm9kZS0+cGFyZW50
KCk7CisKKyAgICAgICAgICAgIHNjYWxlTm9kZS0+cmVtb3ZlQ2hpbGROb2RlKG5vZGUpOworICAg
ICAgICAgICAgaWYgKCFzY2FsZU5vZGUtPmNoaWxkQ291bnQoKSkgeworICAgICAgICAgICAgICAg
IGlmIChzY2FsZU5vZGUgPT0gbGFzdFNjYWxlTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBs
YXN0U2NhbGUgPSAwOworICAgICAgICAgICAgICAgICAgICBsYXN0U2NhbGVOb2RlID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVsZXRlIHNjYWxlTm9kZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBub2RlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpSZW1vdmU6IHsKLSAgICAgICAgICAg
IE5vZGVVcGRhdGVSZW1vdmUqIHJlbW92ZVVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVVcGRhdGVS
ZW1vdmUqPihub2RlVXBkYXRlLmdldCgpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBub2Rlcy50YWtl
KHJlbW92ZVVwZGF0ZS0+bm9kZUlEKTsKKyAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpTZXRCYWNr
QnVmZmVyOiB7CisgICAgICAgICAgICBOb2RlVXBkYXRlU2V0QmFja0J1ZmZlciogc2V0QmFja0J1
ZmZlclVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyKj4obm9kZVVw
ZGF0ZS5nZXQoKSk7CisgICAgICAgICAgICBTR1RpbGVOb2RlKiB0aWxlTm9kZSA9IG5vZGVzLmdl
dChzZXRCYWNrQnVmZmVyVXBkYXRlLT5ub2RlSUQpOworICAgICAgICAgICAgdGlsZU5vZGUtPnNl
dEJhY2tCdWZmZXIoc2V0QmFja0J1ZmZlclVwZGF0ZS0+YmFja0J1ZmZlciwgc2V0QmFja0J1ZmZl
clVwZGF0ZS0+c291cmNlUmVjdCwgc2V0QmFja0J1ZmZlclVwZGF0ZS0+dGFyZ2V0UmVjdCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OlNl
dFRleHR1cmU6IHsKLSAgICAgICAgICAgIE5vZGVVcGRhdGVTZXRUZXh0dXJlKiBzZXRUZXh0dXJl
VXBkYXRlID0gc3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZVNldFRleHR1cmUqPihub2RlVXBkYXRlLmdl
dCgpKTsKLSAgICAgICAgICAgIFNHVGlsZU5vZGUqIHRpbGVOb2RlID0gc3RhdGljX2Nhc3Q8U0dU
aWxlTm9kZSo+KG5vZGVzLmdldChzZXRUZXh0dXJlVXBkYXRlLT5ub2RlSUQpKTsKLSAgICAgICAg
ICAgIGlmICh0aWxlTm9kZSkgewotICAgICAgICAgICAgICAgIFFTR1RleHR1cmUqIHRleHR1cmUg
PSBpdGVtLT5zY2VuZUdyYXBoRW5naW5lKCktPmNyZWF0ZVRleHR1cmVGcm9tSW1hZ2Uoc2V0VGV4
dHVyZVVwZGF0ZS0+dGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRleHR1
cmUodGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRhcmdldFJlY3Qoc2V0
VGV4dHVyZVVwZGF0ZS0+dGFyZ2V0UmVjdCk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNl
dFNvdXJjZVJlY3QodGV4dHVyZS0+Y29udmVydFRvTm9ybWFsaXplZFNvdXJjZVJlY3Qoc2V0VGV4
dHVyZVVwZGF0ZS0+c291cmNlUmVjdCkpOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE5v
ZGVVcGRhdGU6OlN3YXBUaWxlQnVmZmVyczogeworICAgICAgICAgICAgSGFzaE1hcDxpbnQsIFNH
VGlsZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbm9kZXMuZW5kKCk7CisgICAgICAgICAgICBmb3Ig
KEhhc2hNYXA8aW50LCBTR1RpbGVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbm9kZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnN3YXBJZk5lZWRl
ZCgpOworICAgICAgICAgICAgbV9pc1N3YXBQZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtMTU2LDQgKzE0OCwyMyBAQCB2
b2lkIFNHQWdlbnQ6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBpdGVtTm9kZSkKICAgICB9CiB9
CiAKK1FTR05vZGUqIFNHQWdlbnQ6OmdldFNjYWxlTm9kZShmbG9hdCBzY2FsZSwgUVNHTm9kZSog
aXRlbU5vZGUpCit7CisgICAgaWYgKHNjYWxlID09IGxhc3RTY2FsZSkKKyAgICAgICAgcmV0dXJu
IGxhc3RTY2FsZU5vZGU7CisKKyAgICBRU0dUcmFuc2Zvcm1Ob2RlKiBzY2FsZU5vZGUgPSBuZXcg
UVNHVHJhbnNmb3JtTm9kZTsKKyAgICBRTWF0cml4NHg0IHNjYWxlTWF0cml4OworICAgIC8vIFVz
ZSBzY2FsZShmbG9hdCxmbG9hdCkgdG8gcHJldmVudCBzY2FsaW5nIHRoZSBaIGNvbXBvbmVudC4K
KyAgICAvLyBSZXZlcnNlIHRoZSBpdGVtJ3MgdHJhbnNmb3JtIHNjYWxlIHNpbmNlIG91ciB0aWxl
cyB3ZXJlIGdlbmVyYXRlZCBmb3IgdGhpcyBzcGVjaWZpYyBzY2FsZS4KKyAgICBzY2FsZU1hdHJp
eC5zY2FsZSgxIC8gc2NhbGUsIDEgLyBzY2FsZSk7CisgICAgc2NhbGVOb2RlLT5zZXRNYXRyaXgo
c2NhbGVNYXRyaXgpOworICAgIC8vIFByZXBlbmQgaW5zdGVhZCBvZiBhcHBlbmQgdG8gcGFpbnQg
dGhlIG5ldywgaW5jb21wbGV0ZSwgc2NhbGUgYmVmb3JlL2JlaGluZCB0aGUgcHJldmlvdXMgb25l
LgorICAgIGl0ZW1Ob2RlLT5wcmVwZW5kQ2hpbGROb2RlKHNjYWxlTm9kZSk7CisKKyAgICBsYXN0
U2NhbGUgPSBzY2FsZTsKKyAgICBsYXN0U2NhbGVOb2RlID0gc2NhbGVOb2RlOworICAgIHJldHVy
biBsYXN0U2NhbGVOb2RlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvU0dBZ2VudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQu
aAppbmRleCBjOWM0NzcxN2NkOTVhYmU3OTAwODRiYjFhOWM2N2I3MmMwNzNlMWMwLi5hZjJmOTM5
NzU5YjJiZmQ1NTFiODQ4MjU4YmJkOTAyNjYyNTg5YThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9TR0FnZW50LmgKQEAgLTM1LDMzICszNSw0MCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgTm9kZVVwZGF0ZTsKIGNsYXNzIFBhZ2VOb2RlOworY2xhc3MgU0dUaWxlTm9kZTsKIAog
Ly8gVGFrZXMgY2FyZSBvZiB0YWtpbmcgdXBkYXRlIHJlcXVlc3RzIHRoZW4gZnVsZmlsbGluZyB0
aGVtIGFzeW5jaHJvbm91c2x5IG9uIHRoZSBzY2VuZSBncmFwaCB0aHJlYWQuCiBjbGFzcyBTR0Fn
ZW50IHsKIHB1YmxpYzoKICAgICBTR0FnZW50KFFTR0l0ZW0qKTsKIAotICAgIGludCBjcmVhdGVU
aWxlTm9kZShpbnQgcGFyZW50Tm9kZUlEKTsKLSAgICBpbnQgY3JlYXRlU2NhbGVOb2RlKGludCBw
YXJlbnROb2RlSUQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZU5vZGUoaW50IG5vZGVJ
RCk7Ci0gICAgdm9pZCBzZXROb2RlVGV4dHVyZShpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIHRl
eHR1cmUsIGNvbnN0IFFSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCk7
CisgICAgaW50IGNyZWF0ZVRpbGVOb2RlKGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZVRp
bGVOb2RlKGludCBub2RlSUQpOworICAgIHZvaWQgc2V0Tm9kZUJhY2tCdWZmZXIoaW50IG5vZGVJ
RCwgY29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
UVJlY3QmIHRhcmdldFJlY3QpOworICAgIHZvaWQgc3dhcFRpbGVCdWZmZXJzKCk7CiAKICAgICAv
LyBDYWxsZWQgYnkgdGhlIFFTR0l0ZW0uCiAgICAgdm9pZCB1cGRhdGVQYWludE5vZGUoUVNHTm9k
ZSogaXRlbU5vZGUpOworICAgIGJvb2wgaXNTd2FwUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNTd2FwUGVuZGluZzsgfQogCiBwcml2YXRlOgorICAgIFFTR05vZGUqIGdldFNjYWxlTm9kZShm
bG9hdCBzY2FsZSwgUVNHTm9kZSogaXRlbU5vZGUpOworCiAgICAgUVNHSXRlbSogaXRlbTsKICAg
ICBEZXF1ZTxPd25QdHI8Tm9kZVVwZGF0ZT4gPiBub2RlVXBkYXRlc1F1ZXVlOwotICAgIEhhc2hN
YXA8aW50LCBRU0dOb2RlKj4gbm9kZXM7CisgICAgSGFzaE1hcDxpbnQsIFNHVGlsZU5vZGUqPiBu
b2RlczsKKyAgICBmbG9hdCBsYXN0U2NhbGU7CisgICAgUVNHTm9kZSogbGFzdFNjYWxlTm9kZTsK
ICAgICBpbnQgbmV4dE5vZGVJRDsKKyAgICBib29sIG1faXNTd2FwUGVuZGluZzsKIH07CiAKIHN0
cnVjdCBOb2RlVXBkYXRlIHsKICAgICBlbnVtIFR5cGUgewogICAgICAgICBDcmVhdGVUaWxlLAot
ICAgICAgICBDcmVhdGVTY2FsZSwKLSAgICAgICAgUmVtb3ZlLAotICAgICAgICBTZXRUZXh0dXJl
CisgICAgICAgIFJlbW92ZVRpbGUsCisgICAgICAgIFNldEJhY2tCdWZmZXIsCisgICAgICAgIFN3
YXBUaWxlQnVmZmVycwogICAgIH07CiAgICAgTm9kZVVwZGF0ZShUeXBlIHR5cGUpCiAgICAgICAg
IDogdHlwZSh0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NH
VGlsZU5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuY3Bw
CmluZGV4IDQ3N2I4YzMzN2EzZjljZWVkOTUxZmNmNjE1Yjg1N2RlZjNmMDZlYjMuLjU2N2MwMzIy
YzcyNGRiOTYwMDQ3MmU3OGM2OTAxYzhmOWQxOWI0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvU0dUaWxlTm9kZS5jcHAKQEAgLTIwLDQzICsyMCw1NyBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU0dUaWxlTm9kZS5oIgorI2luY2x1ZGUgPFFTR0VuZ2luZT4K
KyNpbmNsdWRlIDxRU0dGbGF0Q29sb3JNYXRlcmlhbD4KKyNpbmNsdWRlIDxRU0dUZXh0dXJlPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotU0dUaWxlTm9kZTo6U0dUaWxlTm9kZSgpCi0gICAgOiBt
X2dlb21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZhdWx0QXR0cmlidXRlc19UZXh0dXJlZFBvaW50MkQo
KSwgNCkKK1NHVGlsZU5vZGU6OlNHVGlsZU5vZGUoUVNHRW5naW5lKiBlbmdpbmUpCisgICAgOiBt
X2VuZ2luZShlbmdpbmUpCisgICAgLCBtX2dlb21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZhdWx0QXR0
cmlidXRlc19UZXh0dXJlZFBvaW50MkQoKSwgNCkKKyAgICAsIG1fbWF0ZXJpYWwoMCkKKyAgICAs
IG1fb3BhcXVlTWF0ZXJpYWwoMCkKIHsKKyAgICBzZXRGbGFncyhPd25zTWF0ZXJpYWwgfCBPd25z
T3BhcXVlTWF0ZXJpYWwpOwogICAgIHNldEdlb21ldHJ5KCZtX2dlb21ldHJ5KTsKLSAgICBzZXRN
YXRlcmlhbCgmbV9tYXRlcmlhbCk7Ci0gICAgc2V0T3BhcXVlTWF0ZXJpYWwoJm1fb3BhcXVlTWF0
ZXJpYWwpOworICAgIHNldE1hdGVyaWFsKG5ldyBRU0dGbGF0Q29sb3JNYXRlcmlhbCk7CisgICAg
c2V0T3BhcXVlTWF0ZXJpYWwobmV3IFFTR0ZsYXRDb2xvck1hdGVyaWFsKTsKIH0KIAotdm9pZCBT
R1RpbGVOb2RlOjpzZXRUYXJnZXRSZWN0KGNvbnN0IFFSZWN0RiYgcikKK3ZvaWQgU0dUaWxlTm9k
ZTo6c2V0QmFja0J1ZmZlcihjb25zdCBRSW1hZ2UmIGJhY2tCdWZmZXIsIGNvbnN0IFFSZWN0RiYg
c291cmNlUmVjdCwgY29uc3QgUVJlY3RGJiB0YXJnZXRSZWN0KQogewotICAgIGlmIChtX3Rhcmdl
dFJlY3QgPT0gcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGFyZ2V0UmVjdCA9IHI7Ci0gICAg
UVNHR2VvbWV0cnk6OnVwZGF0ZVRleHR1cmVkUmVjdEdlb21ldHJ5KCZtX2dlb21ldHJ5LCBtX3Rh
cmdldFJlY3QsIG1fc291cmNlUmVjdCk7Ci0gICAgbWFya0RpcnR5KERpcnR5R2VvbWV0cnkpOwot
fQorICAgIG1fYmFja0J1ZmZlclRleHR1cmUucmVzZXQobV9lbmdpbmUtPmNyZWF0ZVRleHR1cmVG
cm9tSW1hZ2UoYmFja0J1ZmZlcikpOworICAgIG1fYmFja0J1ZmZlclRhcmdldFJlY3QgPSB0YXJn
ZXRSZWN0OworICAgIG1fYmFja0J1ZmZlclNvdXJjZVJlY3QgPSBtX2JhY2tCdWZmZXJUZXh0dXJl
LT5jb252ZXJ0VG9Ob3JtYWxpemVkU291cmNlUmVjdChzb3VyY2VSZWN0KTsKIAotdm9pZCBTR1Rp
bGVOb2RlOjpzZXRTb3VyY2VSZWN0KGNvbnN0IFFSZWN0RiYgcikKLXsKLSAgICBpZiAobV9zb3Vy
Y2VSZWN0ID09IHIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3NvdXJjZVJlY3QgPSByOwotICAg
IFFTR0dlb21ldHJ5Ojp1cGRhdGVUZXh0dXJlZFJlY3RHZW9tZXRyeSgmbV9nZW9tZXRyeSwgbV90
YXJnZXRSZWN0LCBtX3NvdXJjZVJlY3QpOwotICAgIG1hcmtEaXJ0eShEaXJ0eUdlb21ldHJ5KTsK
KyAgICAvLyBGb3JjZSB0aGUgdGV4dHVyZSB1cGxvYWQuCisgICAgbV9iYWNrQnVmZmVyVGV4dHVy
ZS0+YmluZCgpOwogfQogCi12b2lkIFNHVGlsZU5vZGU6OnNldFRleHR1cmUoUVNHVGV4dHVyZSog
dGV4dHVyZSkKK3ZvaWQgU0dUaWxlTm9kZTo6c3dhcElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9t
YXRlcmlhbC50ZXh0dXJlKCkgPT0gdGV4dHVyZSkKKyAgICBpZiAoIW1fYmFja0J1ZmZlclRleHR1
cmUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX21hdGVyaWFsLnNldFRleHR1cmUodGV4dHVyZSk7
Ci0gICAgbV9vcGFxdWVNYXRlcmlhbC5zZXRUZXh0dXJlKHRleHR1cmUpOwotICAgIG1fdGV4dHVy
ZS5yZXNldCh0ZXh0dXJlKTsKKworICAgIGlmICghbV9vcGFxdWVNYXRlcmlhbCkgeworICAgICAg
ICBtX29wYXF1ZU1hdGVyaWFsID0gbmV3IFFTR09wYXF1ZVRleHR1cmVNYXRlcmlhbDsKKyAgICAg
ICAgc2V0T3BhcXVlTWF0ZXJpYWwobV9vcGFxdWVNYXRlcmlhbCk7CisgICAgfQorICAgIGlmICgh
bV9tYXRlcmlhbCkgeworICAgICAgICBtX21hdGVyaWFsID0gbmV3IFFTR1RleHR1cmVNYXRlcmlh
bDsKKyAgICAgICAgc2V0TWF0ZXJpYWwobV9tYXRlcmlhbCk7CisgICAgfQorICAgIEFTU0VSVCht
X21hdGVyaWFsLT50ZXh0dXJlKCkgIT0gbV9iYWNrQnVmZmVyVGV4dHVyZS5kYXRhKCkpOworICAg
IG1fbWF0ZXJpYWwtPnNldFRleHR1cmUobV9iYWNrQnVmZmVyVGV4dHVyZS5kYXRhKCkpOworICAg
IG1fb3BhcXVlTWF0ZXJpYWwtPnNldFRleHR1cmUobV9iYWNrQnVmZmVyVGV4dHVyZS5kYXRhKCkp
OwogICAgIG1hcmtEaXJ0eShEaXJ0eU1hdGVyaWFsKTsKKworICAgIFFTR0dlb21ldHJ5Ojp1cGRh
dGVUZXh0dXJlZFJlY3RHZW9tZXRyeSgmbV9nZW9tZXRyeSwgbV9iYWNrQnVmZmVyVGFyZ2V0UmVj
dCwgbV9iYWNrQnVmZmVyU291cmNlUmVjdCk7CisgICAgbWFya0RpcnR5KERpcnR5R2VvbWV0cnkp
OworCisgICAgbV9mcm9udEJ1ZmZlclRleHR1cmUuc3dhcChtX2JhY2tCdWZmZXJUZXh0dXJlKTsK
KyAgICBtX2JhY2tCdWZmZXJUZXh0dXJlLnJlc2V0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5oCmluZGV4IDE5YWI2NWJjYWM3ODRjZWYzZjY0NTY5YjU4
MTk4YWE1MWU3NmNjODcuLmMxNjI5NmQwYzRiYTU5MGI4N2UzMWIxZGFkMDdjODcxN2IwMTYxZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaApAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgPFFTR1RleHR1cmVNYXRlcmlhbD4KIAogUVRfQkVHSU5fTkFNRVNQQUNF
CitjbGFzcyBRU0dFbmdpbmU7CiBjbGFzcyBRU0dUZXh0dXJlOwogUVRfRU5EX05BTUVTUEFDRQog
CkBAIC0zMywyMSArMzQsMjAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNHVGlsZU5v
ZGUgOiBwdWJsaWMgUVNHR2VvbWV0cnlOb2RlIHsKIHB1YmxpYzoKLSAgICBTR1RpbGVOb2RlKCk7
Ci0KLSAgICB2b2lkIHNldFRhcmdldFJlY3QoY29uc3QgUVJlY3RGJik7Ci0gICAgdm9pZCBzZXRT
b3VyY2VSZWN0KGNvbnN0IFFSZWN0RiYpOwotICAgIC8vIFRoaXMgdGFrZXMgb3duZXJzaGlwIG9m
IHRoZSB0ZXh0dXJlLgotICAgIHZvaWQgc2V0VGV4dHVyZShRU0dUZXh0dXJlKik7CisgICAgU0dU
aWxlTm9kZShRU0dFbmdpbmUqKTsKKyAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgUUltYWdl
JiwgY29uc3QgUVJlY3RGJiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdEYmIHRhcmdldFJlY3QpOwor
ICAgIHZvaWQgc3dhcElmTmVlZGVkKCk7CiAKIHByaXZhdGU6CisgICAgUVNHRW5naW5lKiBtX2Vu
Z2luZTsKICAgICBRU0dHZW9tZXRyeSBtX2dlb21ldHJ5OwotICAgIFFTR09wYXF1ZVRleHR1cmVN
YXRlcmlhbCBtX29wYXF1ZU1hdGVyaWFsOwotICAgIFFTR1RleHR1cmVNYXRlcmlhbCBtX21hdGVy
aWFsOwotICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBRU0dU
ZXh0dXJlTWF0ZXJpYWwqIG1fbWF0ZXJpYWw7CisgICAgUVNHT3BhcXVlVGV4dHVyZU1hdGVyaWFs
KiBtX29wYXF1ZU1hdGVyaWFsOworICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fZnJv
bnRCdWZmZXJUZXh0dXJlOworICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fYmFja0J1
ZmZlclRleHR1cmU7CiAKLSAgICBRUmVjdEYgbV90YXJnZXRSZWN0OwotICAgIFFSZWN0RiBtX3Nv
dXJjZVJlY3Q7CisgICAgUVJlY3RGIG1fYmFja0J1ZmZlclRhcmdldFJlY3Q7CisgICAgUVJlY3RG
IG1fYmFja0J1ZmZlclNvdXJjZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcAppbmRleCAzMGFl
YTZhMzkwNzYyZDMxMDdlNGMyODk5NzA4MTljMTcwNzg1ZjUwLi41M2MyOGZlZmUxMTU5MjlhOTU3
NGIxNDYxMTYxZWY2MzZmNWM4MDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5Lmgi
CiAKKyNpbmNsdWRlICJTR0FnZW50LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiVG91Y2hWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgog
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogCkBAIC00
Nyw0ICs0OSwzNSBAQCBXZWJQYWdlUHJveHkqIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFnZSgp
CiAgICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5OwogfQogCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQoreworICAgIGludCBub2RlSUQgPSBtX3dlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpLT5jcmVh
dGVUaWxlTm9kZSh1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKTsKKyAgICBtX3RpbGVzVG9Ob2Rlcy5z
ZXQodGlsZUlELCBub2RlSUQpOworICAgIHVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGVJbmZvKTsK
K30KKwordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwg
Y29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBpbnQgbm9kZUlEID0gbV90aWxl
c1RvTm9kZXMuZ2V0KHRpbGVJRCk7CisgICAgQVNTRVJUKG5vZGVJRCk7CisKKyAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRhdGVJ
bmZvLmJpdG1hcEhhbmRsZSk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2b2lkIHRoaXMgY29w
eSBieSBjYXJ5aW5nIHRoZSBTaGFyZWFibGVCaXRtYXAgYWxsIHRoZSB3YXkgdXAgdG8gdGV4dHVy
ZSB1cGxvYWRpbmcuCisgICAgLy8gICAgICAgIEN1cnJlbnRseSB3b24ndCB3b3JrIHNpbmNlIHRo
ZSBTaGFyZWRNZW1vcnkgaGFuZGxlIGlzIG93bmVkIGJ5IHVwZGF0ZUluZm8uCisgICAgUUltYWdl
IGltYWdlKGJpdG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpKTsKKyAgICBRUmVjdCBzb3VyY2VS
ZWN0KDAsIDAsIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy53aWR0aCgpLCB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOworICAgIG1fd2ViVmlldy0+c2NlbmVHcmFwaEFn
ZW50KCktPnNldE5vZGVCYWNrQnVmZmVyKG5vZGVJRCwgaW1hZ2UsIHNvdXJjZVJlY3QsIHVwZGF0
ZUluZm8udXBkYXRlUmVjdEJvdW5kcyk7Cit9CisKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5
OjpkaWRSZW5kZXJGcmFtZSgpCit7CisgICAgbV93ZWJWaWV3LT5zY2VuZUdyYXBoQWdlbnQoKS0+
c3dhcFRpbGVCdWZmZXJzKCk7Cit9CisKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1v
dmVUaWxlKGludCB0aWxlSUQpCit7CisgICAgaW50IG5vZGVJRCA9IG1fdGlsZXNUb05vZGVzLmdl
dCh0aWxlSUQpOworICAgIG1fd2ViVmlldy0+c2NlbmVHcmFwaEFnZW50KCktPnJlbW92ZVRpbGVO
b2RlKG5vZGVJRCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxlUXQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTQ3OWFlOGQ4Y2UxOGE0M2VmNzMyOTViY2Q5MDFi
NjI1NDc4ODhkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVRpbGUuaCIK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlNHQWdlbnQuaCIKLSNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUaWxlZERyYXdpbmdBcmVhUHJv
eHkuaCIKLSNpbmNsdWRlICJUb3VjaFZpZXdJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJVcGRhdGVJ
bmZvLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFPYmplY3Q+Ci0jaW5j
bHVkZSA8UVBhaW50ZXI+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotVGlsZWREcmF3aW5nQXJlYVRpbGU6OlRpbGVkRHJhd2luZ0FyZWFUaWxlKFRp
bGVkRHJhd2luZ0FyZWFQcm94eSogcHJveHksIFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgY29u
c3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCi0gICAgOiBtX3Byb3h5KHByb3h5KQotICAg
ICwgbV9jb29yZGluYXRlKHRpbGVDb29yZGluYXRlKQotICAgICwgbV9yZWN0KHByb3h5LT50aWxl
UmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQotICAgICwgbV9oYXNVcGRhdGVQZW5k
aW5nKGZhbHNlKQotICAgICwgbV9zZ0FnZW50KHdlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpKQot
ICAgICwgbV9ub2RlSUQoMCkKLSAgICAsIG1fcGFyZW50Tm9kZUlEKDApCi0gICAgLCBtX2lzQmFj
a0J1ZmZlclZhbGlkKGZhbHNlKQotICAgICwgbV9kaXJ0eVJlZ2lvbihtX3JlY3QpCi17Ci0gICAg
c3RhdGljIGludCBpZCA9IDA7Ci0gICAgbV9JRCA9ICsraWQ7Ci0gICAgbV9wcm94eS0+cmVnaXN0
ZXJUaWxlKG1fSUQsIHRoaXMpOwotI2lmZGVmIFRJTEVfREVCVUdfTE9HCi0gICAgcURlYnVnKCkg
PDwgImRlbGV0aW5nIHRpbGUgaWQ9IiA8PCBtX0lEOwotI2VuZGlmCi19Ci0KLVRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjp+VGlsZWREcmF3aW5nQXJlYVRpbGUoKQotewotI2lmZGVmIFRJTEVfREVCVUdf
TE9HCi0gICAgcURlYnVnKCkgPDwgImRlbGV0aW5nIHRpbGUgaWQ9IiA8PCBtX0lEOwotI2VuZGlm
Ci0gICAgZGlzYWJsZVVwZGF0ZXMoKTsKLSAgICBpZiAobV9ub2RlSUQpCi0gICAgICAgIG1fc2dB
Z2VudC0+cmVtb3ZlTm9kZShtX25vZGVJRCk7Ci19Ci0KLWJvb2wgVGlsZWREcmF3aW5nQXJlYVRp
bGU6OmlzRGlydHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9kaXJ0eVJlZ2lvbi5pc0VtcHR5
KCk7Ci19Ci0KLWJvb2wgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gISFtX25vZGVJRDsKLX0KLQotYm9vbCBUaWxlZERyYXdpbmdBcmVh
VGlsZTo6aGFzUmVhZHlCYWNrQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pc0JhY2tC
dWZmZXJWYWxpZCAmJiAhbV9oYXNVcGRhdGVQZW5kaW5nOwotfQotCi12b2lkIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBJ
bnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOwot
ICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9kaXJ0eVJlZ2lvbiArPSB0aWxlRGlydHlSZWN0OwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpyZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBJbnRSZWN0IG9s
ZFJlY3QgPSBtX3JlY3Q7Ci0gICAgbV9yZWN0ID0gSW50UmVjdChtX3JlY3QubG9jYXRpb24oKSwg
bmV3U2l6ZSk7Ci0gICAgaWYgKG1fcmVjdC5tYXhYKCkgPiBvbGRSZWN0Lm1heFgoKSkKLSAgICAg
ICAgaW52YWxpZGF0ZShJbnRSZWN0KG9sZFJlY3QubWF4WCgpLCBvbGRSZWN0LnkoKSwgbV9yZWN0
Lm1heFgoKSAtIG9sZFJlY3QubWF4WCgpLCBtX3JlY3QuaGVpZ2h0KCkpKTsKLSAgICBpZiAobV9y
ZWN0Lm1heFkoKSA+IG9sZFJlY3QubWF4WSgpKQotICAgICAgICBpbnZhbGlkYXRlKEludFJlY3Qo
b2xkUmVjdC54KCksIG9sZFJlY3QubWF4WSgpLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0Lm1heFko
KSAtIG9sZFJlY3QubWF4WSgpKSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnN3
YXBCYWNrQnVmZmVyVG9Gcm9udCgpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBvbmNlIHdl
IGNhbiB0aWdodCBpbnZhbGlkYXRlZCB0aWxlIHVwZGF0ZXMgdG9nZXRoZXIuCi19Ci0KLXZvaWQg
VGlsZWREcmF3aW5nQXJlYVRpbGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9p
ZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aW5jb3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5m
byYgdXBkYXRlSW5mbywgZmxvYXQpCi17Ci0gICAgQVNTRVJUKG1fcHJveHkpOwotICAgIG1faXNC
YWNrQnVmZmVyVmFsaWQgPSB0cnVlOwotICAgIG1faGFzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwot
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOwotICAgIFFJbWFnZSBpbWFnZShiaXRtYXAt
PmNyZWF0ZVFJbWFnZSgpKTsKLSAgICBjb25zdCBJbnRSZWN0JiB1cGRhdGVDaHVua1JlY3QgPSB1
cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHM7Ci0KLSAgICBjb25zdCBRU2l6ZSB0aWxlU2l6ZSA9
IG1fcHJveHktPnRpbGVTaXplKCk7Ci0KLSAgICBpZiAobV9iYWNrQnVmZmVyLnNpemUoKSAhPSB0
aWxlU2l6ZSkgewotICAgICAgICBtX2JhY2tCdWZmZXIgPSBRSW1hZ2UodGlsZVNpemUsIGltYWdl
LmZvcm1hdCgpKTsKLSAgICAgICAgbV9iYWNrQnVmZmVyLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsK
LSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFFQYWludGVyIHBhaW50ZXIoJm1fYmFja0J1ZmZlcik7
Ci0gICAgICAgIEludFNpemUgZHJhd1BvaW50ID0gdXBkYXRlQ2h1bmtSZWN0LmxvY2F0aW9uKCkg
LSBtX3JlY3QubG9jYXRpb24oKTsKLSAgICAgICAgcGFpbnRlci5kcmF3SW1hZ2UoUVBvaW50KGRy
YXdQb2ludC53aWR0aCgpLCBkcmF3UG9pbnQuaGVpZ2h0KCkpLCBpbWFnZSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFtX25vZGVJRCkKLSAgICAgICAgbV9ub2RlSUQgPSBtX3NnQWdlbnQtPmNyZWF0ZVRp
bGVOb2RlKG1fcGFyZW50Tm9kZUlEKTsKLSAgICBBU1NFUlQobV9ub2RlSUQpOwotICAgIFFSZWN0
IHNvdXJjZVJlY3QoMCwgMCwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSk7Ci0gICAg
bV9zZ0FnZW50LT5zZXROb2RlVGV4dHVyZShtX25vZGVJRCwgbV9iYWNrQnVmZmVyLCBzb3VyY2VS
ZWN0LCBtX3JlY3QpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpkaXNhYmxlVXBk
YXRlcygpCi17Ci0gICAgaWYgKCFtX3Byb3h5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9oYXNVcGRhdGVQZW5kaW5nKSB7Ci0gICAgICAgIG1fcHJveHktPmNhbmNlbFRpbGVVcGRhdGUo
bV9JRCk7Ci0gICAgICAgIG1faGFzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwotICAgIH0KLQotICAg
IG1fcHJveHktPnVucmVnaXN0ZXJUaWxlKG1fSUQpOwotICAgIG1fYmFja0J1ZmZlciA9IFFJbWFn
ZSgpOwotICAgIG1faXNCYWNrQnVmZmVyVmFsaWQgPSBmYWxzZTsKLSAgICBtX3Byb3h5ID0gMDsK
LX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6c2V0UGFyZW50Tm9kZUlEKGludCBub2Rl
SUQpCi17Ci0gICAgQVNTRVJUKCFtX25vZGVJRCk7Ci0gICAgbV9wYXJlbnROb2RlSUQgPSBub2Rl
SUQ7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQot
ewotICAgIEFTU0VSVChtX3Byb3h5KTsKLSAgICBpZiAoaXNSZWFkeVRvUGFpbnQoKSAmJiAhaXNE
aXJ0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogaW5kaXZpZHVhbCByZWN0
cwotICAgIEludFJlY3QgZGlydHlSZWN0ID0gbV9kaXJ0eVJlZ2lvbi5ib3VuZGluZ1JlY3QoKTsK
LSAgICBtX2RpcnR5UmVnaW9uID0gUVJlZ2lvbigpOwotCi0jaWZkZWYgVElMRV9ERUJVR19MT0cK
LSAgICBxRGVidWcoKSA8PCAicmVxdWVzdGluZyB0aWxlIHVwZGF0ZSBpZD0iIDw8IG1fSUQgPDwg
IiByZWN0PSIgPDwgUVJlY3QoZGlydHlSZWN0KSA8PCAiIHNjYWxlPSIgPDwgbV9wcm94eS0+Y29u
dGVudHNTY2FsZSgpOwotI2VuZGlmCi0gICAgaWYgKCFtX3Byb3h5LT5wYWdlKCktPnByb2Nlc3Mo
KS0+aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9wcm94eS0+cmVxdWVzdFRpbGVV
cGRhdGUobV9JRCwgZGlydHlSZWN0KTsKLQotICAgIG1faGFzVXBkYXRlUGVuZGluZyA9IHRydWU7
Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3
ZWJwYWdlcHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBh
Z2Vwcm94eS5jcHAKaW5kZXggOTgyY2I0MGZjOWQ3YWNjZTBhZDNkZmQ5YmVmY2YzMDY3MTkwNWNm
YS4uNDQxZTkwZDUyZjJmYTdmNjM3ZmJiOTRmYzAyNDU1MWVmMjMxOTBjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHAKQEAgLTEx
MiwzICsxMTIsOCBAQCB2b2lkIFFUb3VjaFdlYlBhZ2VQcm94eTo6c2V0Q29udGVudHNTY2FsZShx
cmVhbCBzY2FsZSkKIHsKICAgICBkcmF3aW5nQXJlYSgpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxl
KTsKIH0KKwordm9pZCBRVG91Y2hXZWJQYWdlUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCit7Cisg
ICAgZHJhd2luZ0FyZWEoKS0+cmVuZGVyTmV4dEZyYW1lKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmgKaW5kZXggNzllYjBlNjZkZWRi
YzI1Y2EyNmFiYWRjOTczNDNiMDI3ZWJhMjU3Zi4uMTIyOGIzOTM3OWVlNzM1NDE1NGIyNTYzOGJk
NjZmZWI3NTY1NTg3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0
b3VjaHdlYnBhZ2Vwcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91
Y2h3ZWJwYWdlcHJveHkuaApAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRS
ZXNpemVzVG9Db250ZW50c1VzaW5nTGF5b3V0U2l6ZShjb25zdCBRU2l6ZSYgdGFyZ2V0TGF5b3V0
U2l6ZSk7CiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgUVBvaW50Jik7
CiAgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKHFyZWFsKTsKKyAgICB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIGFyZWEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCA0NGVi
YjY5Y2RjMmRkZDI1YWExMjU4M2FiZGI5NWRmMTEzOGM2Mjc0Li45MTJmNTQ0YjY0YTI0YmUzNWEx
Y2Q4ODA5ZWY3ODg4NDRmYTkyNmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAtNDgxLDcgKzQ4MSw2IEBA
IFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9TR0FnZW50LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1NHVGlsZU5vZGUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJl
YVByb3h5UXQuY3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5j
cHAgXAogICAgIFVJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNz
L3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250
ZXh0UXQuY3BwIFwKQEAgLTU2MCw2ICs1NTksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5j
cHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgXApAQCAtNTcxLDcgKzU3MSw2IEBA
IFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJJbnNwZWN0b3JRdC5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwIFwKLSAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAg
XAogICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCBjNTZjNjJjMjZj
NDY5OTdiMGQ1NzFlMDRlYzZkNGQyMTJlZTFjYTllLi5kZWQ2NTA0M2Q5MGI1NzQ4M2JkYjc4Njdk
N2E5NWE5YWQ0YzEyODM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEuaApAQCAtOTksOCArOTksOSBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgdmlld1NpemUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxUaWxl
VXBkYXRlKGludCB0aWxlSUQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0VGlsZVVwZGF0
ZShpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QsIGZsb2F0IHNj
YWxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShm
bG9hdCBzY2FsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB0YWtlU25hcHNob3QoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdGFy
Z2V0U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY29udGVudHNSZWN0KSB7IH0KICNlbmRp
ZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbgppbmRleCA4OWFlMWExZmI1NDY3NmI4YjgwOGQ0Y2QxYzkz
YWI2NTAwYjFiYjQyLi4xMDA5OWYzOGM1MzcxODEzOTZjYjhjZGRjMzNhYWRlYTQ1MDVkNzlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhLm1lc3NhZ2VzLmluCkBAIC0yOCw4ICsyOCw5IEBAIG1lc3NhZ2VzIC0+IERyYXdpbmdB
cmVhIHsKIAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIFNldFNpemUoV2Vi
Q29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkKLSAgICBSZXF1ZXN0VGlsZVVwZGF0ZShpbnQgdGlsZUlE
LCBXZWJDb3JlOjpJbnRSZWN0IGRpcnR5UmVjdCwgZmxvYXQgc2NhbGUpCi0gICAgQ2FuY2VsVGls
ZVVwZGF0ZShpbnQgdGlsZUlEKQorICAgIFNldFZpc2libGVDb250ZW50UmVjdChXZWJDb3JlOjpJ
bnRSZWN0IHZpc2libGVDb250ZW50UmVjdCkKKyAgICBTZXRDb250ZW50c1NjYWxlKGZsb2F0IHNj
YWxlKQorICAgIFJlbmRlck5leHRGcmFtZSgpCiAgICAgVGFrZVNuYXBzaG90KFdlYkNvcmU6Oklu
dFNpemUgc2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QpCiAjZW5kaWYKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjljYzBjNGNmOWUwYzJl
OTUzNWNiNjc0ODk3NTNiYzJmNmFlOGVmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwCkBA
IC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCisKKyNpZiBF
TkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVD
bGllbnQuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
Q2xpZW50KiBjbGllbnQsIFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29u
c3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisg
ICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlKHRpbGVkQmFja2luZ1N0b3JlKQorICAgICwgbV9jb29y
ZGluYXRlKHRpbGVDb29yZGluYXRlKQorICAgICwgbV9yZWN0KHRpbGVkQmFja2luZ1N0b3JlLT50
aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQorICAgICwgbV9JRCgwKQorICAg
ICwgbV9kaXJ0eVJlY3QobV9yZWN0KQoreworfQorCitUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGU6On5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoKQoreworICAgIGlmIChtX0lEKQorICAg
ICAgICBtX2NsaWVudC0+cmVtb3ZlVGlsZShtX0lEKTsKK30KKworYm9vbCBUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGU6OmlzRGlydHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9kaXJ0eVJl
Y3QuaXNFbXB0eSgpOworfQorCit2b2lkIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aW52
YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCB0aWxlRGly
dHlSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsKKyAgICBpZiAodGlsZURp
cnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGlydHlSZWN0LnVu
aXRlKHRpbGVEaXJ0eVJlY3QpOworfQorCitWZWN0b3I8SW50UmVjdD4gVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKK3sKKyAgICBpZiAoIWlzRGlydHkoKSkK
KyAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOworCisgICAgLy8gRklYTUU6IE9ubHkg
dXNlIGEgbG9jYWwgYnVmZmVyIHdoZW4gd2Uga25vdyB0aGUgdGlsZSBpcyBhbmltYXRlZCAoYWZ0
ZXIgdGhlIGZpcnN0IGludmFsaWRhdGUpCisgICAgLy8gICAgICAgIGFuZCBkZXN0cm95IGl0IGFm
dGVyIGEgZmV3IHNlY29uZHMgb2YgaW5hY3Rpdml0eS4gV2UgY2FuIHJlbmRlciBkaXJlY3RseQor
ICAgIC8vICAgICAgICB0byBzaGFyZWQgbWVtb3J5IGluIG90aGVyIGNhc2VzLgorICAgIGlmICgh
bV9sb2NhbEJ1ZmZlcikgeworICAgICAgICBtX2xvY2FsQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShtX3JlY3Quc2l6ZSgpKTsKKyAgICAgICAgbV9sb2NhbEJ1ZmZlci0+Y29udGV4dCgpLT50
cmFuc2xhdGUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKKyAgICAgICAgbV9sb2NhbEJ1ZmZl
ci0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUobV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVu
dHNTY2FsZSgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkpKTsKKyAgICB9
CisgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y2xpZW50KCktPnRpbGVkQmFja2luZ1N0b3JlUGFp
bnQobV9sb2NhbEJ1ZmZlci0+Y29udGV4dCgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5tYXBUb0Nv
bnRlbnRzKG1fZGlydHlSZWN0KSk7CisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShtX3JlY3Quc2l6ZSgpLCBTaGFy
ZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+
IGdyYXBoaWNzQ29udGV4dChiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICBn
cmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xvY2FsQnVmZmVyLmdldCgpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSk7CisKKyAgICBVcGRhdGVJbmZvIHVwZGF0
ZUluZm87CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzID0gbV9yZWN0OworICAgIHVw
ZGF0ZUluZm8uc2NhbGVGYWN0b3IgPSBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxl
KCk7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOwor
CisgICAgc3RhdGljIGludCBpZCA9IDA7CisgICAgaWYgKCFtX0lEKSB7CisgICAgICAgIG1fSUQg
PSArK2lkOworICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVRpbGUobV9JRCwgdXBkYXRlSW5m
byk7CisKKyAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKKyAgICByZXR1cm4gVmVjdG9yPElu
dFJlY3Q+KCk7Cit9CisKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpzd2FwQmFj
a0J1ZmZlclRvRnJvbnQoKQoreworICAgIC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5nU3RvcmVQ
YWludEVuZC4KK30KKworYm9vbCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmlzUmVhZHlU
b1BhaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX0lEOworfQorCit2b2lkIFRpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitUaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGVCYWNrZW5kKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50KQorICAg
IDogbV9jbGllbnQoY2xpZW50KQoreworfQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoV2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpD
b29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK3sKKyAgICByZXR1cm4gVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29v
cmRpbmF0ZSk7Cit9CisKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6
cGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFRJTEVEX0JBQ0tJTkdfU1RPUkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MjQzM2JhNTcxMjAyM2I3NGM2NDI2NGRmN2MwMjdmYjNhNDMyNGQ4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlX2gKKyNkZWZpbmUgVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlX2gKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQorCisjaW5jbHVkZSAiVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgi
CisjaW5jbHVkZSAiV2ViQ29yZS9JbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEltYWdlQnVmZmVyOworY2xhc3MgVGlsZWRCYWNraW5nU3RvcmU7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQ7Citj
bGFzcyBVcGRhdGVJbmZvOworCitjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUgOiBw
dWJsaWMgV2ViQ29yZTo6VGlsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGls
ZT4gY3JlYXRlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50LCBXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IENvb3JkaW5h
dGUmIHRpbGVDb29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlKGNsaWVudCwgdGlsZWRCYWNraW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKSk7
IH0KKyAgICB+VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlKCk7CisKKyAgICBib29sIGlzRGly
dHkoKSBjb25zdDsKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiB1cGRhdGVCYWNrQnVmZmVyKCk7CisgICAg
dm9pZCBzd2FwQmFja0J1ZmZlclRvRnJvbnQoKTsKKyAgICBib29sIGlzUmVhZHlUb1BhaW50KCkg
Y29uc3Q7CisgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICBjb25zdCBDb29yZGluYXRlJiBjb29yZGluYXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlOyB9CisgICAgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZShUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQq
LCBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKKworICAg
IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViQ29y
ZTo6VGlsZWRCYWNraW5nU3RvcmUqIG1fdGlsZWRCYWNraW5nU3RvcmU7CisgICAgQ29vcmRpbmF0
ZSBtX2Nvb3JkaW5hdGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7CisKKyAgICBpbnQg
bV9JRDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OworCisgICAgT3duUHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiBtX2xvY2FsQnVmZmVyOworfTsKKworY2xhc3MgVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCkgPSAwOworfTsKKworY2xhc3MgVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tp
bmdTdG9yZUJhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4gY3JlYXRlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlQmFja2VuZChjbGllbnQpKTsgfQorICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
VGlsZT4gY3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IFdlYkNv
cmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsKKyAgICB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisKK3By
aXZhdGU6CisgICAgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZChUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqKTsKKyAgICBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGVDbGllbnQqIG1fY2xpZW50OworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFRJTEVEX0JBQ0tJTkdfU1RPUkUKKworI2VuZGlmIC8vIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1RpbGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1RpbGVkRHJhd2luZ0FyZWEuY3BwCmluZGV4IGQ0MDJjNTAwNzhlODRmZGZlOWZlYWY4MDcyMzI3
MGU4M2MwYjE4OTAuLmYxMDg0N2FiMzA0NzJhNzg2MDAzZGE4MTg5NDI1ZTkzOGM1MjI4NTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdB
cmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3
aW5nQXJlYS5jcHAKQEAgLTMxLDEwICszMSw3IEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5m
by5oIgotI2luY2x1ZGUgIldlYkNvcmUvRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJDb3JlL0ZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldl
YkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
IApAQCAtNDQsMTAgKzQxLDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFRpbGVkRHJhd2luZ0Fy
ZWE6OlRpbGVkRHJhd2luZ0FyZWEoV2ViUGFnZSogd2ViUGFnZSkKICAgICA6IERyYXdpbmdBcmVh
KERyYXdpbmdBcmVhVHlwZVRpbGVkLCB3ZWJQYWdlKQotICAgICwgbV9pc1dhaXRpbmdGb3JVcGRh
dGUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFBhaW50KHRydWUpCi0gICAgLCBtX2Rpc3BsYXlUaW1l
cihXZWJQcm9jZXNzOjpzaGFyZWQoKS5ydW5Mb29wKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVh
OjpkaXNwbGF5KQotICAgICwgbV90aWxlVXBkYXRlVGltZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCku
cnVuTG9vcCgpLCB0aGlzLCAmVGlsZWREcmF3aW5nQXJlYTo6dGlsZVVwZGF0ZVRpbWVyRmlyZWQp
CisgICAgLCBtX3N1c3BlbmRlZChmYWxzZSkKKyAgICAsIG1faXNXYWl0aW5nRm9yVUlQcm9jZXNz
KGZhbHNlKQorICAgICwgbV9tYWluQmFja2luZ1N0b3JlKGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tp
bmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUo
dGhpcykpKSkKIHsKIH0KIApAQCAtNjMsMTUwICs1OSwxMDMgQEAgdm9pZCBUaWxlZERyYXdpbmdB
cmVhOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGUKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBGSVhNRTogQ29sbGVjdCBhIHNldCBvZiByZWN0cy9yZWdp
b24gaW5zdGVhZCBvZiBqdXN0IHRoZSB1bmlvbiBvZiBhbGwgcmVjdHMuCi0gICAgbV9kaXJ0eVJl
Y3QudW5pdGUocmVjdCk7Ci0gICAgc2NoZWR1bGVEaXNwbGF5KCk7CisgICAgbV9tYWluQmFja2lu
Z1N0b3JlLT5pbnZhbGlkYXRlKHJlY3QpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OmRp
c3BsYXkoKQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHZp
ZXdTaXplKQogewotICAgIGlmICghbV9zaG91bGRQYWludCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93
ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtX2Rp
cnR5UmVjdDsKLSAgICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKLQotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6SW52YWxpZGF0ZShkaXJ0eVJlY3QpKTsK
KyAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKKyAgICBBU1NFUlRfQVJHKHZpZXdTaXplLCAhdmll
d1NpemUuaXNFbXB0eSgpKTsKIAotICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKKyAgICBtX3dl
YlBhZ2UtPnNldFNpemUodmlld1NpemUpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNj
aGVkdWxlRGlzcGxheSgpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldFZpc2libGVDb250ZW50
UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0KQogewotICAg
IGlmICghbV9zaG91bGRQYWludCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGlzcGxh
eVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlzcGxheVRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKKyAgICBtX3Zpc2libGVDb250ZW50UmVjdCA9IHZpc2libGVDb250
ZW50c1JlY3Q7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwog
fQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgdmlld1Np
emUpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUp
CiB7Ci0gICAgQVNTRVJUKG1fc2hvdWxkUGFpbnQpOwotICAgIEFTU0VSVF9BUkcodmlld1NpemUs
ICF2aWV3U2l6ZS5pc0VtcHR5KCkpOwotCi0gICAgbV93ZWJQYWdlLT5zZXRTaXplKHZpZXdTaXpl
KTsKLQotICAgIHNjaGVkdWxlRGlzcGxheSgpOworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUg
PSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9
IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUt
PnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworfQogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRTZXRTaXplKHZpZXdTaXplKSk7Cit2b2lkIFRpbGVk
RHJhd2luZ0FyZWE6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9pc1dhaXRpbmdGb3JVSVBy
b2Nlc3MgPSBmYWxzZTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJz
KCk7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c3VzcGVuZFBhaW50aW5nKCkKIHsKLSAg
ICBBU1NFUlQobV9zaG91bGRQYWludCk7CisgICAgQVNTRVJUKCFtX3N1c3BlbmRlZCk7CiAKLSAg
ICBtX3Nob3VsZFBhaW50ID0gZmFsc2U7Ci0gICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOwotICAg
IG1fdGlsZVVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBtX3N1c3BlbmRlZCA9IHRydWU7CiB9CiAK
IHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cmVzdW1lUGFpbnRpbmcoKQogewotICAgIEFTU0VSVCgh
bV9zaG91bGRQYWludCk7CisgICAgQVNTRVJUKG1fc3VzcGVuZGVkKTsKIAotICAgIG1fc2hvdWxk
UGFpbnQgPSB0cnVlOwotCi0gICAgLy8gRGlzcGxheSBpZiBuZWVkZWQuCi0gICAgZGlzcGxheSgp
OwotICAgIGlmICghbV9wZW5kaW5nVXBkYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHNjaGVkdWxl
VGlsZVVwZGF0ZSgpOworICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7CisgICAgbV9tYWluQmFja2lu
Z1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6
OmRpZFVwZGF0ZSgpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFp
bnRCZWdpbigpCiB7Ci0gICAgLy8gRGlzcGxheSBpZiBuZWVkZWQuCi0gICAgZGlzcGxheSgpOwor
ICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKIH0KIAotdm9pZCBUaWxlZERyYXdpbmdB
cmVhOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgZmxv
YXQgc2NhbGUpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQogewotICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKLQotICAgIFVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbzsKLSAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBkaXJ0eVJl
Y3Q7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoZGlydHlSZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBw
b3J0c0FscGhhKTsKLSAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZSh1cGRhdGVJbmZvLmJpdG1hcEhh
bmRsZSk7Ci0gICAgcGFpbnRJbnRvQml0bWFwKGJpdG1hcC5nZXQoKSwgZGlydHlSZWN0LCBzY2Fs
ZSk7Ci0KLSAgICB1bnNpZ25lZCBwZW5kaW5nVXBkYXRlQ291bnQgPSBtX3BlbmRpbmdVcGRhdGVz
LnNpemUoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6
OlRpbGVVcGRhdGVkKHRpbGVJRCwgdXBkYXRlSW5mbywgc2NhbGUsIHBlbmRpbmdVcGRhdGVDb3Vu
dCkpOworICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoKmdyYXBoaWNzQ29udGV4dCwgY29udGVudFJl
Y3QpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxlVGlsZVVwZGF0ZSgpCit2
b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVj
dG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkKIHsKLSAgICBpZiAoIW1fc2hvdWxkUGFpbnQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3RpbGVVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RpbGVVcGRhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7
CisgICAgLy8gU2luY2Ugd2Uga25vdyB0aGF0IGFsbCB0aWxlIHVwZGF0ZXMgZm9sbG93aW5nIGEg
cGFnZSBpbnZhbGlkYXRlIHdpbGwgYWxsIGJlIHJlbmRlcmVkCisgICAgLy8gaW4gb25lIHBhaW50
IHBhc3MgZm9yIGFsbCB0aGUgdGlsZXMsIHdlIGNhbiBzZW5kIHRoZSBzd2FwIHRpbGUgbWVzc2Fn
ZSBoZXJlLgorICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6
RGlkUmVuZGVyRnJhbWUoKSk7CisgICAgbV9pc1dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwog
fQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVVcGRhdGVUaW1lckZpcmVkKCkKK2Jvb2wg
VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVJc1VwZGF0aW5nQWxsb3dlZCgpCiB7
Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdVcGRhdGVzLmlzRW1wdHkoKSk7Ci0KLSAgICBPd25QdHI8
VGlsZVVwZGF0ZT4gdXBkYXRlID0gbV9wZW5kaW5nVXBkYXRlcy5maXJzdCgpLnJlbGVhc2UoKTsK
LSAgICBtX3BlbmRpbmdVcGRhdGVzLnJlbW92ZUZpcnN0KCk7CisgICAgcmV0dXJuICEobV9zdXNw
ZW5kZWQgfHwgbV9pc1dhaXRpbmdGb3JVSVByb2Nlc3MpOworfQogCi0gICAgdXBkYXRlVGlsZSh1
cGRhdGUtPnRpbGVJRCwgdXBkYXRlLT5kaXJ0eVJlY3QsIHVwZGF0ZS0+c2NhbGUpOworSW50UmVj
dCBUaWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCit7Cisg
ICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fd2ViUGFnZS0+c2l6ZSgpKTsKK30K
IAotICAgIGlmIChtX3BlbmRpbmdVcGRhdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpBbGxUaWxlVXBkYXRlc1Byb2Nlc3Nl
ZCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjaGVkdWxlVGlsZVVwZGF0ZSgpOworSW50UmVjdCBU
aWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkKK3sKKyAgICBy
ZXR1cm4gbV92aXNpYmxlQ29udGVudFJlY3Q7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6
Y2FuY2VsVGlsZVVwZGF0ZShpbnQgdGlsZUlEKQorQ29sb3IgVGlsZWREcmF3aW5nQXJlYTo6dGls
ZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAgIFVwZGF0ZUxpc3Q6
Oml0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ1VwZGF0ZXMuZW5kKCk7Ci0gICAgZm9yIChVcGRhdGVM
aXN0OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1VwZGF0ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+dGlsZUlEID09IHRpbGVJRCkgewotICAgICAgICAg
ICAgbV9wZW5kaW5nVXBkYXRlcy5yZW1vdmUoaXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fcGVuZGluZ1VwZGF0ZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6QWxsVGlsZVVw
ZGF0ZXNQcm9jZXNzZWQoKSk7Ci0gICAgICAgIG1fdGlsZVVwZGF0ZVRpbWVyLnN0b3AoKTsKLSAg
ICB9CisgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKIH0KIAotdm9pZCBUaWxlZERyYXdp
bmdBcmVhOjpyZXF1ZXN0VGlsZVVwZGF0ZShpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBkaXJ0eVJlY3QsIGZsb2F0IHNjYWxlKQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpjcmVh
dGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAg
VXBkYXRlTGlzdDo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nVXBkYXRlcy5lbmQoKTsKLSAgICBm
b3IgKFVwZGF0ZUxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVXBkYXRlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT50aWxlSUQgPT0gdGlsZUlEKSB7
Ci0gICAgICAgICAgICAoKml0KS0+ZGlydHlSZWN0LnVuaXRlKGRpcnR5UmVjdCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpEcmF3aW5nQXJlYVByb3h5OjpDcmVhdGVUaWxlKHRpbGVJRCwgdXBkYXRlSW5mbykpOwog
Ci0gICAgT3duUHRyPFRpbGVVcGRhdGU+IHVwZGF0ZShhZG9wdFB0cihuZXcgVGlsZVVwZGF0ZSkp
OwotICAgIHVwZGF0ZS0+dGlsZUlEID0gdGlsZUlEOwotICAgIHVwZGF0ZS0+ZGlydHlSZWN0ID0g
ZGlydHlSZWN0OwotICAgIHVwZGF0ZS0+c2NhbGUgPSBzY2FsZTsKLSAgICBtX3BlbmRpbmdVcGRh
dGVzLmFwcGVuZCh1cGRhdGUucmVsZWFzZSgpKTsKLSAgICBzY2hlZHVsZVRpbGVVcGRhdGUoKTsK
KyAgICBpZiAobV9wcmV2aW91c0JhY2tpbmdTdG9yZSAmJiBtX21haW5CYWNraW5nU3RvcmUtPmNv
dmVyYWdlUmF0aW8obV92aXNpYmxlQ29udGVudFJlY3QpID49IDEuMGYpCisgICAgICAgIG1fcHJl
dmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKK30KK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dXBk
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlVGlsZSh0
aWxlSUQsIHVwZGF0ZUluZm8pKTsKK30KK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cmVtb3ZlVGls
ZShpbnQgdGlsZUlEKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0Fy
ZWFQcm94eTo6UmVtb3ZlVGlsZSh0aWxlSUQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3
aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2lu
Z0FyZWEuaAppbmRleCBmMTBmODhhYTZkYWJhMTRhNzJiMTgwNTc5ZWJmYzZjMjc2OTRlN2U2Li5i
YmI2YjVlYTY0YjhmY2NlNDEwNTJiY2Q5YTE5MTAzNzllY2ExMjE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKQEAgLTI5
LDIyICsyOSwxOSBAQAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWEuaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiVGlsZWRC
YWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFNoYXJlYWJsZUJpdG1hcDsKLQotY2xh
c3MgVGlsZWREcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSB7CitjbGFzcyBUaWxlZERy
YXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhLCBwdWJsaWMgV2ViQ29yZTo6VGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQg
ewogcHVibGljOgogICAgIGV4cGxpY2l0IFRpbGVkRHJhd2luZ0FyZWEoV2ViUGFnZSopOwogICAg
IHZpcnR1YWwgflRpbGVkRHJhd2luZ0FyZWEoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsRGVsdGEpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5KCk7CiAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaENvbXBv
c2l0aW5nQ29udGV4dCgpIHsgfQpAQCAtNTUsMzcgKzUyLDM0IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHZvaWQgc2NoZWR1bGVEaXNwbGF5KCk7Ci0KICAgICAvLyBDb3JlSVBD
IG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgdmlld1NpemUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1NjYWxlKGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVQYWludGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGUoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsVGlsZVVwZGF0ZShpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdFRpbGVVcGRhdGUoaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlS
ZWN0LCBmbG9hdCBzY2FsZSk7Ci0KLSAgICAvLyBQbGF0Zm9ybSBvdmVycmlkZXMKLSAgICB2b2lk
IHBhaW50SW50b0JpdG1hcChTaGFyZWFibGVCaXRtYXAqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB0aWxlUmVjdCwgZmxvYXQgc2NhbGUpOwotCi0gICAgdm9pZCBzY2hlZHVsZVRpbGVVcGRhdGUo
KTsKLSAgICB2b2lkIHRpbGVVcGRhdGVUaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0LCBmbG9hdCBz
Y2FsZSk7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OwotICAgIGJvb2wgbV9p
c1dhaXRpbmdGb3JVcGRhdGU7Ci0gICAgYm9vbCBtX3Nob3VsZFBhaW50OwotICAgIFJ1bkxvb3A6
OlRpbWVyPFRpbGVkRHJhd2luZ0FyZWE+IG1fZGlzcGxheVRpbWVyOwogCi0gICAgc3RydWN0IFRp
bGVVcGRhdGUgewotICAgICAgICBpbnQgdGlsZUlEOwotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0
IGRpcnR5UmVjdDsKLSAgICAgICAgZmxvYXQgc2NhbGU7Ci0gICAgfTsKLSAgICB0eXBlZGVmIERl
cXVlPE93blB0cjxUaWxlVXBkYXRlPiA+IFVwZGF0ZUxpc3Q7Ci0gICAgVXBkYXRlTGlzdCBtX3Bl
bmRpbmdVcGRhdGVzOwotICAgIFJ1bkxvb3A6OlRpbWVyPFRpbGVkRHJhd2luZ0FyZWE+IG1fdGls
ZVVwZGF0ZVRpbWVyOworICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgdmlydHVh
bCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCB0
aWxlZEJhY2tpbmdTdG9yZVBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNr
aW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHBhaW50ZWRB
cmVhKTsKKyAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVJc1VwZGF0aW5nQWxsb3dl
ZCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRl
bnRzUmVjdCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB0aWxlZEJhY2tpbmdTdG9y
ZVZpc2libGVSZWN0KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpDb2xvciB0aWxlZEJhY2tpbmdT
dG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwg
Y29uc3QgVXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxl
SUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQg
dGlsZUlEKTsKKworICAgIGJvb2wgbV9zdXNwZW5kZWQ7CisgICAgYm9vbCBtX2lzV2FpdGluZ0Zv
clVJUHJvY2VzczsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0Owor
CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3Rv
cmU7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFj
a2luZ1N0b3JlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9UaWxlZERyYXdpbmdBcmVhUXQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODZjMzA5ZDk0Nzk5ZTc4Y2I2NTIw
YzFhY2VmZmNhZThjZDlmNDlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9UaWxlZERyYXdp
bmdBcmVhUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRpbGVkRHJhd2lu
Z0FyZWEuaCIKLQotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIldlYlBh
Z2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotCi0jaW5jbHVkZSA8
UUltYWdlPgotI2luY2x1ZGUgPFFQYWludGVyPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cGFpbnRJbnRv
Qml0bWFwKFNoYXJlYWJsZUJpdG1hcCogYml0bWFwLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0
aWxlUmVjdCwgZmxvYXQgc2NhbGUpCi17Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0KGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOwotICAgIGdyYXBo
aWNzQ29udGV4dC0+dHJhbnNsYXRlKC10aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwotICAg
IGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNjYWxlLCBzY2FsZSkpOwotICAgIElu
dFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh0aWxlUmVjdC54
KCkgLyBzY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGlsZVJlY3QueSgpIC8gc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgLyBzY2FsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJl
Y3QuaGVpZ2h0KCkgLyBzY2FsZSkpOwotICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoKmdyYXBoaWNz
Q29udGV4dC5nZXQoKSwgY29udGVudFJlY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105006</attachid>
            <date>2011-08-24 09:10:36 -0700</date>
            <delta_ts>2011-08-24 12:47:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66771-20110824181036.patch</filename>
            <type>text/plain</type>
            <size>103010</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM0MDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjNGUwYjk2NGJhMmI0OWEx
MGM2NDU1YWVmMzJjMTNmNTM4NWQwZDY2Li5iM2EzYTA2NGI4MWU1MGEzNTc0NGY0MjAwOTc5ZGEx
YTgyMTZkZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDAgQEAKIDIwMTEtMDgtMjMgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAorICAgICAgICBbUXRd
W1dLMl0gRHJpdmUgdGlsaW5nIGZyb20gdGhlIFdlYlByb2Nlc3MgYW5kIHJldXNlIFRpbGVkQmFj
a2luZ1N0b3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZSBuZWVkIHRoZSB0aWxpbmcgbG9naWMgdG8gYmUgbW92ZWQgdG8gdGhlIHdlYiBwcm9jZXNz
IHRvIGFsbG93IGludmFsaWRhdGVkIHRpbGUgcmVjdHMgdG8gYmUKKyAgICAgICAgcmVuZGVyZWQg
d2l0aCB0aGUgc2FtZSBsYXlvdXQuIFRoaXMgYWxzbyBhbGxvd3MgdGhlIHdlYiBwcm9jZXNzIHRv
IHJlbmRlciB0aWxlcyBpbnRvCisgICAgICAgIGJ1ZmZlcnMgcmVhZGFibGUgZGlyZWN0bHkgYnkg
dGhlIEdQVSAob24gc3VwcG9ydGVkIHBsYXRmb3JtcykuIFdlIGFsc28gdGFrZSB0aGUgb3Bwb3J0
dW5pdHkKKyAgICAgICAgdG8gdXNlIHRoZSBUaWxlZEJhY2tpbmdTdG9yZSBpbiBXZWJDb3JlIHRv
IGhhdmUgb25seSBvbmUgdGlsaW5nIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIEJlZm9yZSB0
aGlzIHBhdGNoOgorICAgICAgICAtIFRpbGVkRHJhd2luZ0FyZWFQcm94eSBjb250YWlucyBhbGwg
dGhlIHRpbGUgbWFuYWdlbWVudCBsb2dpYy4KKyAgICAgICAgLSBUaWxlZERyYXdpbmdBcmVhIHJl
Y2VpdmVkIHJlbmRlcmluZyByZXF1ZXN0cyBmb3IgYSByZWN0IGFuZCByZXR1cm5zIHRoZSByZXN1
bHQKKyAgICAgICAgICB0byB0aGUgcHJveHkgdGhyb3VnaCBzaGFyZWQgbWVtb3J5LgorCisgICAg
ICAgIEFmdGVyIHRoaXMgcGF0Y2g6CisgICAgICAgIC0gVGlsZWREcmF3aW5nQXJlYSB1c2VzIGEg
VGlsZWRCYWNraW5nU3RvcmUgdG8gbWFuYWdlIHRpbGVzLgorICAgICAgICAtIFRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZSBmb3J3YXJkcyB0aWxlIGNyZWF0aW9ucywgdXBkYXRlIGFuZCByZW1v
dmFscyB0byB0aGUgcHJveHkuCisgICAgICAgIC0gVGlsZWREcmF3aW5nQXJlYVByb3h5IHVwZGF0
ZXMgdGhlIHNjZW5lIGdyYXBoIGRpcmVjdGx5IGZyb20gcmVxdWVzdHMuCisKKyAgICAgICAgSXQg
YWxzbyBpbXBsZW1lbnRzIHRpbGUgYnVmZmVyIHN3YXBwaW5nIGNvcnJlY3RseSBpbiBTR1RpbGVO
b2RlLCB0cmlnZ2VyZWQgYnkgdGhlIERpZFJlbmRlckZyYW1lIG1lc3NhZ2UuCisgICAgICAgIFJl
bmRlciB0aHJvdHRsaW5nIGlzIGltcGxlbWVudGVkIGJ5IHdhaXRpbmcgaW4gVGlsZWREcmF3aW5n
QXJlYSBmb3IgdGhlIFVJIHByb2Nlc3MgdG8KKyAgICAgICAgbm90aWZ5IHVzIHdoZW4gdGhlIGxh
c3QgcmVuZGVyZWQgZnJhbWUgaXMgcmVhZHkgdG8gbWFrZSBpdCB0byB0aGUgc2NyZWVuLgorICAg
ICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldHMgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IHVzaW5n
IHR3byBpbnN0YW5jZXMgb2YgVGlsZWRCYWNraW5nU3RvcmUgaW5zdGVhZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6Y292ZXJhZ2VSYXRpbyk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlZEJhY2tpbmdTdG9yZTo6c3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ojp0aWxlZEJhY2tpbmdTdG9yZUlzVXBkYXRpbmdB
bGxvd2VkKToKKworMjAxMS0wOC0yMyAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290
dGVAbm9raWEuY29tPgorCiAgICAgICAgIFRpbGVkQmFja2luZ1N0b3JlOiBVbnRpZSB0aGUgdGls
ZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBwbGF0Zm9ybS4KICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzYwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCAxOGQ2
YjRhYmUwYjg2MWMzN2ZiYzE3Y2U1ZmNiZjBiMDQ1ODU4OGY3Li42YTUzNWU4M2MyYjZjYTAzN2Qw
OWYyNDlmNWFkYTk3MjBiM2IxZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZv
aWQgVGlsZWRCYWNraW5nU3RvcmU6OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudHNE
aXJ0eVJlY3QpCiAKIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJzKCkK
IHsKLSAgICBpZiAobV9jb250ZW50c0Zyb3plbikKKyAgICBpZiAoIW1fY2xpZW50LT50aWxlZEJh
Y2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgfHwgbV9jb250ZW50c0Zyb3plbikKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIG1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4o
KTsKQEAgLTIwMyw2ICsyMDMsMjggQEAgZG91YmxlIFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlRGlz
dGFuY2UoY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IFRpbGU6OkNvb3IKICAgICByZXR1
cm4gYWJzKGNlbnRlckNvb3JkaW5hdGUueSgpIC0gdGlsZUNvb3JkaW5hdGUueSgpKSArIGhvcml6
b250YWxCaWFzICogYWJzKGNlbnRlckNvb3JkaW5hdGUueCgpIC0gdGlsZUNvb3JkaW5hdGUueCgp
KTsKIH0KIAorZmxvYXQgVGlsZWRCYWNraW5nU3RvcmU6OmNvdmVyYWdlUmF0aW8oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY29udGVudHNSZWN0KQoreworICAgIEludFJlY3QgZGlydHlSZWN0ID0g
bWFwRnJvbUNvbnRlbnRzKGNvbnRlbnRzUmVjdCk7CisgICAgZmxvYXQgcmVjdEFyZWEgPSBkaXJ0
eVJlY3Qud2lkdGgoKSAqIGRpcnR5UmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCBjb3ZlckFyZWEg
PSAwLjBmOworCisgICAgVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gdGlsZUNvb3JkaW5hdGVG
b3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7CisgICAgVGlsZTo6Q29vcmRpbmF0ZSBib3R0
b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoaW5uZXJCb3R0b21SaWdodChkaXJ0eVJl
Y3QpKTsKKworICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNv
b3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90
dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7CisgICAgICAgICAgICBUaWxlOjpDb29yZGlu
YXRlIGN1cnJlbnRDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSk7CisgICAgICAg
ICAgICBSZWZQdHI8VGlsZT4gY3VycmVudFRpbGUgPSB0aWxlQXQoVGlsZTo6Q29vcmRpbmF0ZSh4
Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VGlsZSAm
JiBjdXJyZW50VGlsZS0+aXNSZWFkeVRvUGFpbnQoKSkgeworICAgICAgICAgICAgICAgIEludFJl
Y3QgY292ZXJSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgY3VycmVudFRpbGUtPnJlY3Qo
KSk7CisgICAgICAgICAgICAgICAgY292ZXJBcmVhICs9IGNvdmVyUmVjdC53aWR0aCgpICogY292
ZXJSZWN0LmhlaWdodCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBjb3ZlckFyZWEgLyByZWN0QXJlYTsKK30KKwogdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6
Y3JlYXRlVGlsZXMoKQogewogICAgIGlmIChtX2NvbnRlbnRzRnJvemVuKQpAQCAtMzY1LDcgKzM4
Nyw3IEBAIFRpbGU6OkNvb3JkaW5hdGUgVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVDb29yZGluYXRl
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50CiAKIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6
OnN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCkKIHsKLSAgICBpZiAobV90aWxlQnVmZmVyVXBk
YXRlVGltZXItPmlzQWN0aXZlKCkgfHwgbV9jb250ZW50c0Zyb3plbikKKyAgICBpZiAobV90aWxl
QnVmZmVyVXBkYXRlVGltZXItPmlzQWN0aXZlKCkgfHwgIW1fY2xpZW50LT50aWxlZEJhY2tpbmdT
dG9yZVVwZGF0ZXNBbGxvd2VkKCkgfHwgbV9jb250ZW50c0Zyb3plbikKICAgICAgICAgcmV0dXJu
OwogICAgIG1fdGlsZUJ1ZmZlclVwZGF0ZVRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9y
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
aAppbmRleCA3NTU4YWUxNWZjNGVkNGNjZWY4MzdkODlmNmZmYmNlMTQ0OTljNTZkLi44ODlhNjUx
MDhlYmJmM2QxY2FhNzU3YjIzOTY0M2QwZDA1YjhmMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgKQEAgLTUyLDYgKzUy
LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgY29udGVudHNGcm96ZW4oKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRlbnRzRnJvemVuOyB9CiAgICAgdm9pZCBzZXRDb250ZW50c0Zyb3plbihib29s
KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzKCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKQEAgLTc2LDYgKzc3LDcgQEAgcHVibGljOgogICAgIEludFJl
Y3QgdGlsZVJlY3RGb3JDb29yZGluYXRlKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmKSBjb25zdDsK
ICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmKSBjb25zdDsKICAgICBkb3VibGUgdGlsZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpZXdw
b3J0LCBjb25zdCBUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7CisgICAgZmxvYXQgY292ZXJhZ2VS
YXRpbyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50c1JlY3QpOwogCiBwcml2YXRlOgog
ICAgIHZvaWQgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKQEAgLTg2LDcgKzg4LDYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKFRpbGVUaW1lciop
OwogICAgIHZvaWQgdGlsZUNyZWF0aW9uVGltZXJGaXJlZChUaWxlVGltZXIqKTsKICAgICAKLSAg
ICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzKCk7CiAgICAgdm9pZCBjcmVhdGVUaWxlcygpOwogICAg
IAogICAgIHZvaWQgY29tbWl0U2NhbGVDaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCmluZGV4
IDYwODdlYzMwYWZlNDI0MGE1MWFjMDhlNTE2MjM4ODk4Yjc2ZjdjNjMuLjIzOWQyODMwNTczZjk2
ZjIzZDI1NWViYTdhNzNiNTgwZGJiYjhlNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaApAQCAtMjMs
MTEgKzIzLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKK2NsYXNzIENvbG9yOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCiBjbGFz
cyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRp
bGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRC
YWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYgcGFpbnRlZEFyZWEpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5n
U3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSA9IDA7CiAgICAgdmlydHVh
bCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKSA9IDA7CiAgICAgdmlydHVh
bCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA4YjRkZmUwYmUzMWEwY2Q3YmUzOGZjOTJkYjQ3ODdiYmQxNzM5M2VkLi4yYTgy
NTYyZGI4MjQyZjdhZjQwM2JiZDlmZjg5OThiMGQwMzE0NDRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMyIEBACisyMDExLTA4LTIzICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0
ZUBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIERyaXZlIHRpbGluZyBmcm9tIHRoZSBX
ZWJQcm9jZXNzIGFuZCByZXVzZSBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzcxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgbmVlZCB0aGUgdGlsaW5nIGxvZ2ljIHRv
IGJlIG1vdmVkIHRvIHRoZSB3ZWIgcHJvY2VzcyB0byBhbGxvdyBpbnZhbGlkYXRlZCB0aWxlIHJl
Y3RzIHRvIGJlCisgICAgICAgIHJlbmRlcmVkIHdpdGggdGhlIHNhbWUgbGF5b3V0LiBUaGlzIGFs
c28gYWxsb3dzIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGlsZXMgaW50bworICAgICAgICBi
dWZmZXJzIHJlYWRhYmxlIGRpcmVjdGx5IGJ5IHRoZSBHUFUgKG9uIHN1cHBvcnRlZCBwbGF0Zm9y
bXMpLiBXZSBhbHNvIHRha2UgdGhlIG9wcG9ydHVuaXR5CisgICAgICAgIHRvIHVzZSB0aGUgVGls
ZWRCYWNraW5nU3RvcmUgaW4gV2ViQ29yZSB0byBoYXZlIG9ubHkgb25lIHRpbGluZyBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICBCZWZvcmUgdGhpcyBwYXRjaDoKKyAgICAgICAgLSBUaWxlZERy
YXdpbmdBcmVhUHJveHkgY29udGFpbnMgYWxsIHRoZSB0aWxlIG1hbmFnZW1lbnQgbG9naWMuCisg
ICAgICAgIC0gVGlsZWREcmF3aW5nQXJlYSByZWNlaXZlZCByZW5kZXJpbmcgcmVxdWVzdHMgZm9y
IGEgcmVjdCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0CisgICAgICAgICAgdG8gdGhlIHByb3h5IHRo
cm91Z2ggc2hhcmVkIG1lbW9yeS4KKworICAgICAgICBBZnRlciB0aGlzIHBhdGNoOgorICAgICAg
ICAtIFRpbGVkRHJhd2luZ0FyZWEgdXNlcyBhIFRpbGVkQmFja2luZ1N0b3JlIHRvIG1hbmFnZSB0
aWxlcy4KKyAgICAgICAgLSBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUgZm9yd2FyZHMgdGls
ZSBjcmVhdGlvbnMsIHVwZGF0ZSBhbmQgcmVtb3ZhbHMgdG8gdGhlIHByb3h5LgorICAgICAgICAt
IFRpbGVkRHJhd2luZ0FyZWFQcm94eSB1cGRhdGVzIHRoZSBzY2VuZSBncmFwaCBkaXJlY3RseSBm
cm9tIHJlcXVlc3RzLgorCisgICAgICAgIEl0IGFsc28gaW1wbGVtZW50cyB0aWxlIGJ1ZmZlciBz
d2FwcGluZyBjb3JyZWN0bHkgaW4gU0dUaWxlTm9kZSwgdHJpZ2dlcmVkIGJ5IHRoZSBEaWRSZW5k
ZXJGcmFtZSBtZXNzYWdlLgorICAgICAgICBSZW5kZXIgdGhyb3R0bGluZyBpcyBpbXBsZW1lbnRl
ZCBieSB3YWl0aW5nIGluIFRpbGVkRHJhd2luZ0FyZWEgZm9yIHRoZSBVSSBwcm9jZXNzIHRvCisg
ICAgICAgIG5vdGlmeSB1cyB3aGVuIHRoZSBsYXN0IHJlbmRlcmVkIGZyYW1lIGlzIHJlYWR5IHRv
IG1ha2UgaXQgdG8gdGhlIHNjcmVlbi4KKyAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXRz
IGhhdmUgYmVlbiByZXBsYWNlZCBieSB1c2luZyB0d28gaW5zdGFuY2VzIG9mIFRpbGVkQmFja2lu
Z1N0b3JlIGluc3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBh
Z2UuY3BwOgorICAgICAgICAoUVRvdWNoV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnZpZXcuY3BwOgorICAgICAgICAoUVRvdWNo
V2ViVmlld1ByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6
OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVU
aWxlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVuZGVyRnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVUaWxlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBV
SVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGls
ZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhUHJveHk6OlRpbGVkRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6flRpbGVkRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxlKToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW5kZXJOZXh0RnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNpemVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L3F0L1NHQWdlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb2RlVXBkYXRlQ3JlYXRlVGlsZTo6
Tm9kZVVwZGF0ZUNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpOb2RlVXBkYXRlUmVtb3Zl
VGlsZTo6Tm9kZVVwZGF0ZVJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpOb2RlVXBkYXRl
U2V0QmFja0J1ZmZlcjo6Tm9kZVVwZGF0ZVNldEJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpOb2RlVXBkYXRlU3dhcFRpbGVCdWZmZXJzOjpOb2RlVXBkYXRlU3dhcFRpbGVCdWZmZXJzKToK
KyAgICAgICAgKFdlYktpdDo6U0dBZ2VudDo6U0dBZ2VudCk6CisgICAgICAgIChXZWJLaXQ6OlNH
QWdlbnQ6OmNyZWF0ZVRpbGVOb2RlKToKKyAgICAgICAgKFdlYktpdDo6U0dBZ2VudDo6cmVtb3Zl
VGlsZU5vZGUpOgorICAgICAgICAoV2ViS2l0OjpTR0FnZW50OjpzZXROb2RlQmFja0J1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OlNHQWdlbnQ6OnN3YXBUaWxlQnVmZmVycyk6CisgICAgICAgIChX
ZWJLaXQ6OlNHQWdlbnQ6OnVwZGF0ZVBhaW50Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlNHQWdl
bnQ6OmdldFNjYWxlTm9kZSk6CisgICAgICAgIE1ha2UgdGhlIHBhcmVudGluZyBsb2dpYyBtb3Jl
IHN0cmljdCB0byBhbGxvdyBTR0FnZW50IHRvIGhhbmRsZSB0aGUgc2NhbGUgbm9kZXMgaXRzZWxm
IChyZW1vdmUgTm9kZVVwZGF0ZUNyZWF0ZVNjYWxlIGFuZCB1c2UgdGhlIHNjYWxlIGluIENyZWF0
ZVRpbGUpLgorICAgICAgICBEZWxldGUgdGhlIHNjYWxlIG5vZGUgd2hlbiB0aGUgbGFzdCBvZiBp
dHMgY2hpbGQgdGlsZXMgaGFzIGJlZW4gcmVtb3ZlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9TR0FnZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OlNHQWdlbnQ6OmlzU3dhcFBlbmRpbmcpOgor
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpTR1RpbGVOb2RlOjpTR1RpbGVOb2RlKToKKyAgICAgICAgKFdlYktpdDo6U0dUaWxlTm9kZTo6
c2V0QmFja0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlNHVGlsZU5vZGU6OnN3YXBJZk5lZWRl
ZCk6CisgICAgICAgIFJlcGxhY2Ugc2V0VGFyZ2V0UmVjdCwgc2V0U291cmNlUmVjdCBhbmQgc2V0
VGV4dHVyZSBieSBhIHNpbmdsZSBzZXRCYWNrQnVmZmVyIG1ldGhvZC4KKyAgICAgICAgVGhpcyBh
bGxvd3MgYWxsIHRob3NlIHZhbHVlcyB0byBiZSB1c2VkIG9ubHkgd2hlbiBzd2FwSWZOZWVkZWQg
aXMgY2FsbGVkIGxhdGVyLgorCisgICAgICAgICogVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGUpOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRpbGUpOgorICAgICAgICAo
V2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVUaWxlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5jcHA6CisgICAgICAgIChRVG91Y2hX
ZWJQYWdlUHJveHk6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L3F0
b3VjaHdlYnBhZ2Vwcm94eS5oOgorICAgICAgICAqIFdlYktpdDIucHJvOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWE6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYTo6cmVu
ZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGU6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6flRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6
aXNEaXJ0eSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6
aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZTo6dXBkYXRlQmFja0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZTo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6VGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjppc1JlYWR5VG9QYWludCk6CisgICAgICAgIChXZWJL
aXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlQmFja2VuZDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OnBhaW50Q2hlY2tlclBhdHRlcm4pOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpjb29yZGluYXRl
KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpyZWN0KToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ojp+VGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
RHJhd2luZ0FyZWE6OlRpbGVkRHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERy
YXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhOjpzZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6
c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnJl
bmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnN1c3Bl
bmRQYWludGluZyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnJlc3VtZVBh
aW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5n
U3RvcmVQYWludEJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGls
ZWRCYWNraW5nU3RvcmVQYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZUlzVXBkYXRpbmdBbGxvd2VkKToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2li
bGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5n
U3RvcmVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dXBkYXRl
VGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnJlbW92ZVRpbGUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1RpbGVkRHJhd2luZ0FyZWFRdC5jcHA6IFJlbW92ZWQu
CisKIDIwMTEtMDgtMTkgIExhcnMgS251ZHNlbiAgPGxhcnMua251ZHNlbkBub2tpYS5jb20+CiAK
ICAgICAgICAgW1F0XVtXSzJdIENoYW5nZSB0aGUgcmVjdCBhcmd1bWVudCBvZiBRdFdlYlBhZ2VQ
cm94eTo6cGFpbnQoKSB0byBjb25zdCByZWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9VcGRhdGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmNw
cAppbmRleCAzNmExYzYzZjQ3MTQ5ODRkZjZjZTJmOTNhMWE3YTcyYzA1OWI4YTc2Li5hMTVkNzE2
YjEzZjM2NjUzYzRiZTA4NTQ2NWNjNTM0YmQ4MGZkMTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Vw
ZGF0ZUluZm8uY3BwCkBAIC0zOCw2ICszOCw3IEBAIHZvaWQgVXBkYXRlSW5mbzo6ZW5jb2RlKENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyLT5lbmNv
ZGUoc2Nyb2xsT2Zmc2V0KTsKICAgICBlbmNvZGVyLT5lbmNvZGUodXBkYXRlUmVjdEJvdW5kcyk7
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVwZGF0ZVJlY3RzKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUo
dXBkYXRlU2NhbGVGYWN0b3IpOwogICAgIGVuY29kZXItPmVuY29kZShiaXRtYXBIYW5kbGUpOwog
fQogCkBAIC01NSw2ICs1Niw4IEBAIGJvb2wgVXBkYXRlSW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgVXBkYXRlSW5mbyYgcmVzdWx0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LnVwZGF0ZVJlY3RzKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC51
cGRhdGVTY2FsZUZhY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShyZXN1bHQuYml0bWFwSGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uaAppbmRleCAzMDE3YmJlZmY3NzJiNTcwN2M5ZjUz
ZGMxYTZlZWNmYWMwNDk2NjE0Li4yMTM4ZmIwMzFjMzJhMWNlYjQxMTJlZTE5NjZhYmE2NTQ0M2Yw
NTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgKQEAgLTYwLDYgKzYwLDggQEAgcHVi
bGljOgogICAgIC8vIEFsbCB0aGUgdXBkYXRlIHJlY3RzLCBpbiB2aWV3IGNvb3JkaW5hdGVzLgog
ICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiB1cGRhdGVSZWN0czsKIAorICAgIGZsb2F0IHVw
ZGF0ZVNjYWxlRmFjdG9yOworCiAgICAgLy8gVGhlIGhhbmRsZSBvZiB0aGUgc2hhcmVhYmxlIGJp
dG1hcCBjb250YWluaW5nIHRoZSB1cGRhdGVzLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUgYXJlIG5v
IHVwZGF0ZXMuCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0bWFwSGFuZGxlOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3Bw
CmluZGV4IDE5NGMxOWMzMDYwNDUxMDE4ZjQ0M2FjZDk4NWU3MTlhZTEyMTlmNGUuLjQyNmY5NjJi
OGIwOTIyZmQ5ZTE1MzhlZDBjYzU1NTEzMzE4ZmE4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcApAQCAtNjcsNiArNjcsMTYgQEAg
UVNHTm9kZSogUVRvdWNoV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUs
IFVwZGF0ZVBhaW50Tm9kZURhdGEqKQogewogICAgIGlmICghb2xkTm9kZSkKICAgICAgICAgb2xk
Tm9kZSA9IG5ldyBRU0dOb2RlOworCisgICAgLy8gQSBzd2FwIGlzIG9uIHRoZSBxdWV1ZSwgYW5k
IFNHQWdlbnQ6OnVwZGF0ZVBhaW50Tm9kZSB3aWxsIGVtcHR5IHRoZSBxdWV1ZSwgc28gd2Uga25v
dyB0aGF0CisgICAgLy8gdGhlIG9sZCBmcmFtZSdzIGJ1ZmZlcnMgd29uJ3QgYmUgdXNlZCBhbnlt
b3JlIChmb3IgYnVmZmVycyB1c2VkIGFsbCB0aGUgd2F5IGZyb20gdGhlIHdlYiBwcm9jZXNzCisg
ICAgLy8gdG8gdGhlIGdyYXBoaWMgY2FyZCkuIE5vdGlmeSB0aGUgd2ViIHByb2Nlc3MgdGhhdCBp
dCBjYW4gcmVuZGVyIHRoZSBuZXh0IGZyYW1lLgorICAgIGlmIChkLT5zZ0FnZW50LmlzU3dhcFBl
bmRpbmcoKSkKKyAgICAgICAgLy8gVGhlIFVJIHRocmVhZCBpcyBjdXJyZW50bHkgbG9ja2VkIGFu
ZCBjYWxsaW5nIHRoaXMgZnJvbSB0aGUgcmVuZGVyaW5nIHRocmVhZCBkaWRuJ3QgY3Jhc2gKKyAg
ICAgICAgLy8geWV0LCBzbyBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIE9LLiBFbHNlIHdlIGhh
dmUgdG8gd2FpdCB1bnRpbCB0aGUgU0cgdXBkYXRlIGlzIG92ZXIKKyAgICAgICAgLy8gYW5kIHRo
ZSBVSSB0aHJlYWQgcmV0dXJucyB0byB0aGUgZXZlbnQgbG9vcCBwaWNraW5nIG91ciBldmVudCBi
ZWZvcmUgaXQgY2FuIGJlIHNlbnQgdG8KKyAgICAgICAgLy8gdGhlIHdlYiBwcm9jZXNzLiBUaGlz
IHdvdWxkIGluY3JlYXNlIG91ciBjaGFuY2VzIG9mIG1pc3NpbmcgYSBmcmFtZS4KKyAgICAgICAg
ZC0+cGFnZS0+cmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgZC0+c2dBZ2VudC51cGRhdGVQYWludE5v
ZGUob2xkTm9kZSk7CiAKICAgICAvLyBRU0dJdGVtIHRha2VzIG93bmVyc2hpcCBvZiB0aGlzIHJl
dHVybiB2YWx1ZSBhbmQgaXQncyBjaGlsZHJlbiBiZXR3ZWVuIGFuZCBhZnRlciB1cGRhdGVQYWlu
dE5vZGUgY2FsbHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aAppbmRleCA2MjdhZmZkNDU2NWM1M2Q5YjUwYzIzNmI4MmVlMDRmMDZhYmZlZDQ1Li40ZDBjZDMw
NWM4NTkyZGFlN2IwMmVhMzM5MzMwZTA5M2UzZDkyNGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTExMSwxMCArMTExLDExIEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRf
dCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgeyB9CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzbmFwc2hv
dFRha2VuKGNvbnN0IFVwZGF0ZUluZm8mKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdGlsZVVwZGF0
ZWQoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYsIGZsb2F0IHNjYWxlLCB1bnNpZ25lZCBw
ZW5kaW5nVXBkYXRlQ291bnQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0
aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZW5kZXJGcmFtZSgpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVUaWxlKGludCB0aWxlSUQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhbGxUaWxlVXBk
YXRlc1Byb2Nlc3NlZCgpIHsgfQogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgppbmRleCBlMTEyYWQ2ZDUx
M2E4NmFlY2E0ZTE4MzNlZGQ0Y2UzNGFjZThmM2NjLi5jNTI0Y2M4OTA2OGIxZmE2MDkyN2YzN2Iz
ZGY1ZDIyMDdmMTAyNzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjgsMTAgKzI4LDEwIEBAIG1lc3NhZ2Vz
IC0+IERyYXdpbmdBcmVhUHJveHkgewogICAgIEV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRl
SW5mbykKICNlbmRpZgogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIEludmFs
aWRhdGUoV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3QpCi0gICAgRGlkU2V0U2l6ZShXZWJDb3Jl
OjpJbnRTaXplIHZpZXdTaXplKQotICAgIFRpbGVVcGRhdGVkKGludCB0aWxlSUQsIFdlYktpdDo6
VXBkYXRlSW5mbyB1cGRhdGVJbmZvLCBmbG9hdCBzY2FsZSwgdW5zaWduZWQgcGVuZGluZ1VwZGF0
ZUNvdW50KQotICAgIEFsbFRpbGVVcGRhdGVzUHJvY2Vzc2VkKCkKKyAgICBDcmVhdGVUaWxlKGlu
dCB0aWxlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVwZGF0ZVRpbGUo
aW50IHRpbGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgRGlkUmVuZGVy
RnJhbWUoKQorICAgIFJlbW92ZVRpbGUoaW50IHRpbGVJRCkKICAgICBTbmFwc2hvdFRha2VuKFdl
YktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGE4NWViODc2
ZDc2NjJjNzJmNzI0YzlmNmQzZGJmYTE3ZjhmZTcwNWUuLjRiNmQyZDMwNTQwMzdkM2NmZjFjZDNl
ZjQ1NGMyYWNkODE5ZDZkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
aWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
aWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0zMCwxMTkgKzMwLDQ5IEBACiAjaW5jbHVkZSAi
RHJhd2luZ0FyZWFNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94
eS5oIgogCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiU0dBZ2VudC5oIgotI2luY2x1ZGUg
IlRvdWNoVmlld0ludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+Ci0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZVdpZHRoID0gMTAyNDsKLXN0YXRp
YyBjb25zdCBpbnQgZGVmYXVsdFRpbGVIZWlnaHQgPSAxMDI0OwotCi0KLS8vIFRoZSBUaWxlU2V0
J3MgcmVzcG9uc2liaWxpdHkgaXMgdG8gaG9sZCBhIGdyb3VwIG9mIHRpbGVzIHdpdGggdGhlIHNh
bWUgY29udGVudHMgc2NhbGUgdG9nZXRoZXIuCi1jbGFzcyBUaWxlZERyYXdpbmdBcmVhVGlsZVNl
dCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpD
b29yZGluYXRlLCBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+ID4gVGlsZU1hcDsKLQotICAg
IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KFBsYXRmb3JtV2ViVmlldyosIGZsb2F0IGNvbnRlbnRz
U2NhbGUgPSAxLjBmKTsKLSAgICB+VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoKTsKLQotICAgIFdl
YkNvcmU6OkludFJlY3QgbWFwVG9Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29u
c3Q7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtYXBGcm9tQ29udGVudHMoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIGNvbnN0OwotCi0gICAgVGlsZU1hcCYgdGlsZXMoKSB7IHJldHVybiBtX3RpbGVz
OyB9Ci0gICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNT
Y2FsZTsgfQotI2lmIFBMQVRGT1JNKFFUKQotICAgIGludCBzZ05vZGVJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2dOb2RlSUQ7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFRpbGVNYXAgbV90aWxl
czsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgU0dB
Z2VudCogbV9zZ0FnZW50OwotICAgIGludCBtX3NnTm9kZUlEOwotI2VuZGlmCi19OwotCi1UaWxl
ZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQoUGxhdGZvcm1XZWJW
aWV3KiB3ZWJWaWV3LCBmbG9hdCBjb250ZW50c1NjYWxlKQotICAgIDogbV9jb250ZW50c1NjYWxl
KGNvbnRlbnRzU2NhbGUpCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgLCBtX3NnQWdlbnQod2ViVmll
dy0+c2NlbmVHcmFwaEFnZW50KCkpCi0gICAgLCBtX3NnTm9kZUlEKG1fc2dBZ2VudC0+Y3JlYXRl
U2NhbGVOb2RlKDAsIDEgLyBjb250ZW50c1NjYWxlKSkKLSNlbmRpZgotewotfQotCi1UaWxlZERy
YXdpbmdBcmVhVGlsZVNldDo6flRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KCkKLXsKLSNpZiBQTEFU
Rk9STShRVCkKLSAgICAvLyBGb3JjaW5nIHRoZSB0aWxlcyBkZXN0cnVjdGlvbiB0byByZW1vdmUg
dGhlaXIgc2cgbm9kZSBiZWZvcmUgcmVtb3ZpbmcgdGhlaXIgcGFyZW50IG5vZGUuCi0gICAgbV90
aWxlcy5jbGVhcigpOwotICAgIG1fc2dBZ2VudC0+cmVtb3ZlTm9kZShtX3NnTm9kZUlEKTsKLSNl
bmRpZgotfQotCi1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjptYXBUb0NvbnRlbnRz
KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitQYXNzT3duUHRyPFRpbGVkRHJhd2luZ0FyZWFQ
cm94eT4gVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUoUGxhdGZvcm1XZWJWaWV3KiB3ZWJW
aWV3LCBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkgLyBtX2NvbnRlbnRzU2NhbGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpIC8gbV9jb250ZW50c1NjYWxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLyBtX2Nv
bnRlbnRzU2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
aGVpZ2h0KCkgLyBtX2NvbnRlbnRzU2NhbGUpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRp
bGVkRHJhd2luZ0FyZWFQcm94eSh3ZWJWaWV3LCB3ZWJQYWdlUHJveHkpKTsKIH0KIAotSW50UmVj
dCBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6bWFwRnJvbUNvbnRlbnRzKGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0CitUaWxlZERyYXdpbmdBcmVhUHJveHk6OlRpbGVkRHJhd2luZ0FyZWFQcm94
eShQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQor
ICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5cGVUaWxlZCwgd2ViUGFnZVByb3h5
KQorICAgICwgbV9pc1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKKyAg
ICAsIG1faXNWaXNpYmxlKHRydWUpCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKIHsKLSAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkgKiBtX2NvbnRlbnRzU2Nh
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICogbV9j
b250ZW50c1NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0
LndpZHRoKCkgKiBtX2NvbnRlbnRzU2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgKiBtX2NvbnRlbnRzU2NhbGUpKTsKIH0KIAotCi1zdGF0
aWMgSW50UG9pbnQgaW5uZXJCb3R0b21SaWdodChjb25zdCBJbnRSZWN0JiByZWN0KQorVGlsZWRE
cmF3aW5nQXJlYVByb3h5Ojp+VGlsZWREcmF3aW5nQXJlYVByb3h5KCkKIHsKLSAgICAvLyBBY3R1
YWxseSwgdGhlIHJlY3QgZG9lcyBub3QgY29udGFpbiByZWN0Lm1heFgoKS4gUmVmZXIgdG8gSW50
UmVjdDo6Y29udGFpbi4KLSAgICByZXR1cm4gSW50UG9pbnQocmVjdC5tYXhYKCkgLSAxLCByZWN0
Lm1heFkoKSAtIDEpOwogfQogCi1QYXNzT3duUHRyPFRpbGVkRHJhd2luZ0FyZWFQcm94eT4gVGls
ZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBXZWJQ
YWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRW
aXNpYmxlQ29udGVudFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRz
UmVjdCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVkRHJhd2luZ0FyZWFQcm94eSh3
ZWJWaWV3LCB3ZWJQYWdlUHJveHkpKTsKKyAgICAvLyBGSVhNRTogVGhyb3R0bGUgdGhvc2UgbWVz
c2FnZSBlbm91Z2ggbm90IHRvIG92ZXJsb2FkIHRoZSBtZXNzYWdlIHBpcGUgYW5kIHRvIGdldCBn
b29kIHRpbGUgY3JlYXRpb24gcmVzcG9uc2l2ZW5lc3MuCisgICAgcGFnZSgpLT5wcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpTZXRWaXNpYmxlQ29udGVudFJlY3QodmlzaWJs
ZUNvbnRlbnRzUmVjdCksIHBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi1UaWxlZERyYXdpbmdBcmVh
UHJveHk6OlRpbGVkRHJhd2luZ0FyZWFQcm94eShQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIFdl
YlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQotICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5n
QXJlYVR5cGVUaWxlZCwgd2ViUGFnZVByb3h5KQotICAgICwgbV9pc1dhaXRpbmdGb3JEaWRTZXRG
cmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKLSAgICAsIG1faXNWaXNpYmxlKHRydWUpCi0gICAgLCBt
X3dlYlZpZXcod2ViVmlldykKLSAgICAsIG1fY3VycmVudFRpbGVTZXQoYWRvcHRQdHIobmV3IFRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0KHdlYlZpZXcpKSkKLSAgICAsIG1fdGlsZUJ1ZmZlclVwZGF0
ZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGls
ZUJ1ZmZlclVwZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX3RpbGVDcmVhdGlvblRpbWVyKFJ1bkxv
b3A6Om1haW4oKSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUNyZWF0aW9uVGlt
ZXJGaXJlZCkKLSAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRpbGVXaWR0aCwgZGVmYXVsdFRpbGVI
ZWlnaHQpCi0gICAgLCBtX3RpbGVDcmVhdGlvbkRlbGF5KDAuMDEpCi0gICAgLCBtX2tlZXBBcmVh
TXVsdGlwbGllcigyLjUsIDQuNSkKLSAgICAsIG1fY292ZXJBcmVhTXVsdGlwbGllcigyLCAzKQor
dm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUp
CiB7CisgICAgLy8gRklYTUU6IFNpbmNlIHRoZSB2aXNpYmxlQ29udGVudFJlY3Qgc2l6ZSBkZXBl
bmRzIG9uIHRoZSBzY2FsZSwgdGhleSBzaG91bGQgZ2V0IHRvIHRoZSB3ZWIgcHJvY2VzcyBpbgor
ICAgIC8vICAgICAgICBvbmUgc2luZ2xlIG1lc3NhZ2UgdG8gYXZvaWQgdW5lY2Vzc2FyeSB0aWxl
IHJlbmRlcmluZyBiZWNhdXNlIG9mIGEgcG9zc2libHkgdmVyeQorICAgIC8vICAgICAgICBvdmVy
c2l6ZWQgY2FsY3VsYXRlZCB2aXNpYmxlIHJlY3QuCisgICAgcGFnZSgpLT5wcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpTZXRDb250ZW50c1NjYWxlKHNjYWxlKSwgcGFnZSgp
LT5wYWdlSUQoKSk7CiB9CiAKLVRpbGVkRHJhd2luZ0FyZWFQcm94eTo6flRpbGVkRHJhd2luZ0Fy
ZWFQcm94eSgpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkK
IHsKLSAgICAvLyBEaXNhYmxlIHVwZGF0ZXMgb24gdGlsZXMgdG8gZGV0YWNoIHRoZW0gZnJvbSB0
aGUgcHJveHkgYW5kIGN1dCB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeS4KLSAgICBpZiAobV9wcmV2
aW91c1RpbGVTZXQpCi0gICAgICAgIGRpc2FibGVUaWxlU2V0VXBkYXRlcyhtX3ByZXZpb3VzVGls
ZVNldC5nZXQoKSk7Ci0gICAgZGlzYWJsZVRpbGVTZXRVcGRhdGVzKG1fY3VycmVudFRpbGVTZXQu
Z2V0KCkpOworICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJl
YTo6UmVuZGVyTmV4dEZyYW1lKCksIHBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFRpbGVk
RHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgpCkBAIC0xNTQsOSArODQsNiBAQCB2b2lk
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2l6ZURpZENoYW5nZSgpCiAgICAgaWYgKG1fc2l6ZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdmlld1NpemUgPSBtX3NpemU7Ci0g
ICAgbV9sYXN0U2V0Vmlld1NpemUgPSBtX3NpemU7Ci0KICAgICBpZiAobV9pc1dhaXRpbmdGb3JE
aWRTZXRGcmFtZU5vdGlmaWNhdGlvbikKICAgICAgICAgcmV0dXJuOwogICAgIG1faXNXYWl0aW5n
Rm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24gPSB0cnVlOwpAQCAtMTkzLDQ3OSArMTIwLDEzIEBA
IHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRQYWdlSXNWaXNpYmxlKGJvb2wgaXNWaXNp
YmxlKQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVxdWVzdCBhIGZ1bGwgcmVwYWludCBoZXJl
IGlmIG5lZWRlZC4KIH0KIAotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRpZFNldFNpemUo
Y29uc3QgSW50U2l6ZSYgdmlld1NpemUpCi17Ci0gICAgQVNTRVJUKG1faXNXYWl0aW5nRm9yRGlk
U2V0RnJhbWVOb3RpZmljYXRpb24pOwotICAgIG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVOb3Rp
ZmljYXRpb24gPSBmYWxzZTsKLQotICAgIGlmICh2aWV3U2l6ZSAhPSBtX2xhc3RTZXRWaWV3U2l6
ZSkKLSAgICAgICAgc2V0U2l6ZShtX2xhc3RTZXRWaWV3U2l6ZSwgSW50U2l6ZSgpKTsKLQotICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBwYWdlLT5wcm9jZXNzKCkt
PnJlc3BvbnNpdmVuZXNzVGltZXIoKS0+c3RvcCgpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6dGlsZVVwZGF0ZWQoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbywgZmxvYXQgc2NhbGUsIHVuc2lnbmVkIHBlbmRpbmdVcGRhdGVDb3VudCkKLXsKLSAgICBU
aWxlZERyYXdpbmdBcmVhVGlsZSogdGlsZSA9IG1fdGlsZXNCeUlELmdldCh0aWxlSUQpOwotICAg
IEFTU0VSVCghdGlsZSB8fCB0aWxlLT5JRCgpID09IHRpbGVJRCk7Ci0gICAgaWYgKHRpbGUpCi0g
ICAgICAgIHRpbGUtPmluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8sIHNjYWxlKTsKLSAgICB0
aWxlQnVmZmVyVXBkYXRlQ29tcGxldGUoKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OmFsbFRpbGVVcGRhdGVzUHJvY2Vzc2VkKCkKLXsKLSAgICB0aWxlQnVmZmVyVXBkYXRlQ29t
cGxldGUoKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlZ2lzdGVyVGlsZShp
bnQgdGlsZUlELCBUaWxlZERyYXdpbmdBcmVhVGlsZSogdGlsZSkKLXsKLSAgICBtX3RpbGVzQnlJ
RC5zZXQodGlsZUlELCB0aWxlKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVu
cmVnaXN0ZXJUaWxlKGludCB0aWxlSUQpCi17Ci0gICAgbV90aWxlc0J5SUQucmVtb3ZlKHRpbGVJ
RCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXF1ZXN0VGlsZVVwZGF0ZShp
bnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgcGFnZSgpLT5wcm9j
ZXNzKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlJlcXVlc3RU
aWxlVXBkYXRlKHRpbGVJRCwgZGlydHlSZWN0LCBtX2N1cnJlbnRUaWxlU2V0LT5jb250ZW50c1Nj
YWxlKCkpLCBwYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OmNhbmNlbFRpbGVVcGRhdGUoaW50IHRpbGVJRCkKLXsKLSAgICBpZiAoIXBhZ2UoKS0+cHJv
Y2VzcygpLT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwYWdlKCktPnByb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkNhbmNlbFRpbGVVcGRhdGUodGlsZUlEKSwg
cGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRU
aWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlmIChtX3RpbGVTaXplID09IHNp
emUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3RpbGVTaXplID0gc2l6ZTsKLSAgICByZW1vdmVB
bGxUaWxlcygpOwotICAgIHN0YXJ0VGlsZUNyZWF0aW9uVGltZXIoKTsKLX0KLQotdm9pZCBUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OnNldFRpbGVDcmVhdGlvbkRlbGF5KGRvdWJsZSBkZWxheSkKLXsK
LSAgICBtX3RpbGVDcmVhdGlvbkRlbGF5ID0gZGVsYXk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5OjpzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3QgRmxvYXRTaXpl
JiBrZWVwTXVsdGlwbGllciwgY29uc3QgRmxvYXRTaXplJiBjb3Zlck11bHRpcGxpZXIpCi17Ci0g
ICAgbV9rZWVwQXJlYU11bHRpcGxpZXIgPSBrZWVwTXVsdGlwbGllcjsKLSAgICBtX2NvdmVyQXJl
YU11bHRpcGxpZXIgPSBjb3Zlck11bHRpcGxpZXI7Ci0gICAgc3RhcnRUaWxlQ3JlYXRpb25UaW1l
cigpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6aW52YWxpZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKLXsKLSAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2N1
cnJlbnRUaWxlU2V0LT5tYXBGcm9tQ29udGVudHMoY29udGVudHNEaXJ0eVJlY3QpKTsKLQotICAg
IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0
ZUZvclBvaW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoaW5uZXJC
b3R0b21SaWdodChkaXJ0eVJlY3QpKTsKLQotICAgIEludFJlY3QgY292ZXJSZWN0ID0gY2FsY3Vs
YXRlQ292ZXJSZWN0KHZpc2libGVSZWN0KCkpOwotCi0gICAgVmVjdG9yPFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpDb29yZGluYXRlPiB0aWxlc1RvUmVtb3ZlOwotCi0gICAgZm9yICh1bnNpZ25lZCB5
Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55KCk7
ICsreUNvb3JkaW5hdGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRv
cExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5hdGUp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVudFRpbGUg
PSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmdldChUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpKTsKLSAgICAgICAgICAgIGlmICghY3Vy
cmVudFRpbGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIWN1
cnJlbnRUaWxlLT5yZWN0KCkuaW50ZXJzZWN0cyhkaXJ0eVJlY3QpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gSWYgYSB0aWxlIG91dHNpZGUgb3V0IGN1cnJlbnQg
Y292ZXIgcmVjdCBnZXRzIGludmFsaWRhdGVkLCBqdXN0IGRyb3AgaXQgaW5zdGVhZCBvZiB1cGRh
dGluZy4KLSAgICAgICAgICAgIGlmICghY3VycmVudFRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKGNv
dmVyUmVjdCkpIHsKLSAgICAgICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLmFwcGVuZChjdXJyZW50
VGlsZS0+Y29vcmRpbmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnRUaWxlLT5pbnZhbGlkYXRlKGRpcnR5UmVjdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRpbGVzVG9SZW1v
dmUuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytu
KQotICAgICAgICBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLnJlbW92ZSh0aWxlc1RvUmVtb3Zl
W25dKTsKLQotICAgIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7Ci19Ci0KLXZvaWQgVGls
ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVUaWxlQnVmZmVycygpCi17Ci0gICAgVmVjdG9yPFJl
ZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gPiBuZXdEaXJ0eVRpbGVzOwotICAgIFRpbGVkRHJh
d2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX2N1cnJlbnRUaWxlU2V0
LT50aWxlcygpLmVuZCgpOwotICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiYgY3Vy
cmVudCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmICghY3VycmVudC0+aXNEaXJ0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG5ld0RpcnR5VGlsZXMuYXBwZW5kKGl0LT5zZWNv
bmQpOwotICAgIH0KLQotICAgIGlmIChuZXdEaXJ0eVRpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG5ld0RpcnR5VGlsZXMuc2l6ZSgpOwotICAg
IGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pCi0gICAgICAgIG5ld0RpcnR5VGls
ZXNbbl0tPnVwZGF0ZUJhY2tCdWZmZXIoKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OnRpbGVCdWZmZXJVcGRhdGVDb21wbGV0ZSgpCi17Ci0gICAgLy8gQmFpbCBvdXQgaWYgYWxs
IHRpbGUgYmFjayBidWZmZXJzIGhhdmUgbm90IGJlZW4gdXBkYXRlZC4KLSAgICBWZWN0b3I8VGls
ZWREcmF3aW5nQXJlYVRpbGUqPiB0aWxlc1RvRmxpcDsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGls
ZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5l
bmQoKTsKLSAgICBmb3IgKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRv
ciBpdCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4mIGN1cnJlbnQgPSBpdC0+
c2Vjb25kOwotICAgICAgICBpZiAoY3VycmVudC0+aXNSZWFkeVRvUGFpbnQoKSAmJiAoY3VycmVu
dC0+aXNEaXJ0eSgpIHx8IGN1cnJlbnQtPmhhc0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5nKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoY3VycmVudC0+aGFzUmVhZHlCYWNrQnVm
ZmVyKCkpCi0gICAgICAgICAgICB0aWxlc1RvRmxpcC5hcHBlbmQoY3VycmVudC5nZXQoKSk7Ci0g
ICAgfQotICAgIC8vIEV2ZXJ5dGhpbmcgZG9uZSwgbW92ZSBiYWNrIGJ1ZmZlcnMgdG8gZnJvbnQu
Ci0gICAgVmVjdG9yPEludFJlY3Q+IHBhaW50ZWRBcmVhOwotICAgIHVuc2lnbmVkIHNpemUgPSB0
aWxlc1RvRmxpcC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsr
bikgewotICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZSogdGlsZSA9IHRpbGVzVG9GbGlwW25d
OwotICAgICAgICB0aWxlLT5zd2FwQmFja0J1ZmZlclRvRnJvbnQoKTsKLSAgICAgICAgLy8gRklY
TUU6IHNob3VsZCBub3QgcmVxdWVzdCBzeXN0ZW0gcmVwYWludCBmb3IgdGhlIGZ1bGwgdGlsZS4K
LSAgICAgICAgcGFpbnRlZEFyZWEuYXBwZW5kKG1fY3VycmVudFRpbGVTZXQtPm1hcFRvQ29udGVu
dHModGlsZS0+cmVjdCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fcHJldmlvdXNUaWxlU2V0ICYm
IChjb3ZlcmFnZVJhdGlvKG1fY3VycmVudFRpbGVTZXQuZ2V0KCksIHZpc2libGVSZWN0KCkpID49
IDEuMGYgfHwgIWhhc1BlbmRpbmdVcGRhdGVzKCkpKSB7Ci0gICAgICAgIHBhaW50ZWRBcmVhLmNs
ZWFyKCk7Ci0gICAgICAgIHBhaW50ZWRBcmVhLmFwcGVuZChtX3Zpc2libGVDb250ZW50UmVjdCk7
Ci0gICAgICAgIG1fcHJldmlvdXNUaWxlU2V0LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgaWYgKCFw
YWludGVkQXJlYS5pc0VtcHR5KCkpCi0gICAgICAgIHVwZGF0ZVdlYlZpZXcocGFpbnRlZEFyZWEp
OwotCi0gICAgbV90aWxlQ3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpwYWludChUaWxlZERyYXdpbmdBcmVhVGlsZVNldCogdGls
ZVNldCwgY29uc3QgSW50UmVjdCYgcmVjdCwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBnYykK
LXsKLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHRpbGVTZXQtPm1hcEZyb21Db250ZW50cyhyZWN0
KTsKLQotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxl
Q29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsKLSAgICBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9p
bnQoaW5uZXJCb3R0b21SaWdodChkaXJ0eVJlY3QpKTsKLQotICAgIGZvciAodW5zaWduZWQgeUNv
b3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyAr
K3lDb29yZGluYXRlKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BM
ZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7
Ci0gICAgICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29v
cmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpOwotICAgICAgICAgICAgUmVmUHRyPFRp
bGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IHRpbGVTZXQtPnRpbGVzKCkuZ2V0KGN1
cnJlbnRDb29yZGluYXRlKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50VGlsZSAmJiBjdXJyZW50
VGlsZS0+aXNSZWFkeVRvUGFpbnQoKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50VGlsZS0+cGFp
bnQoJmdjLCBkaXJ0eVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBib29sIFRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6cGFpbnQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgUGxhdGZv
cm1EcmF3aW5nQ29udGV4dCBjb250ZXh0KQogewotICAgIGlmIChtX2lzV2FpdGluZ0ZvckRpZFNl
dEZyYW1lTm90aWZpY2F0aW9uKSB7Ci0gICAgICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHRoaXMt
PnBhZ2UoKTsKLSAgICAgICAgaWYgKCFwYWdlLT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHBhZ2UtPnByb2Nlc3MoKS0+aXNMYXVuY2hpbmcoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHQg
Z2MoY29udGV4dCk7Ci0gICAgZ2Muc2F2ZSgpOwotCi0gICAgLy8gQXNzdW1lcyB0aGUgYmFja2lu
ZyBzdG9yZSBpcyBwYWludGVkIHdpdGggdGhlIHNjYWxlIHRyYW5zZm9ybSBhcHBsaWVkLgotICAg
IC8vIFNpbmNlIHRpbGUgY29udGVudCBpcyBhbHJlYWR5IHNjYWxlZCwgZmlyc3QgcmV2ZXJ0IHRo
ZSBzY2FsaW5nIGZyb20gdGhlIHBhaW50ZXIuCi0gICAgZ2Muc2NhbGUoRmxvYXRTaXplKDEgLyBt
X2N1cnJlbnRUaWxlU2V0LT5jb250ZW50c1NjYWxlKCksIDEgLyBtX2N1cnJlbnRUaWxlU2V0LT5j
b250ZW50c1NjYWxlKCkpKTsKLSAgICBwYWludChtX2N1cnJlbnRUaWxlU2V0LmdldCgpLCByZWN0
LCBnYyk7Ci0KLSAgICAvLyBQYWludCB0aGUgcHJldmlvdXMgc2NhbGUgdGlsZXMsIGlmIGFueSwg
b3ZlciB0aGUgY3VycmVudGx5IHVwZGF0aW5nIHRpbGVzLgotICAgIGlmIChtX3ByZXZpb3VzVGls
ZVNldCkgewotICAgICAgICAvLyBSZS1hcHBseSB0aGUgcmV2ZXJ0ZWQgY3VycmVudCB0aWxlcyBz
Y2FsaW5nIGFuZCB0aGVuCi0gICAgICAgIC8vIHJldmVydCB0aGUgcHJldmlvdXMgdGlsZXMgc2Nh
bGluZyB0byBnZXQgbWF0Y2hlZCBjb250ZW50cyBzY2FsZS4KLSAgICAgICAgZmxvYXQgY3VycmVu
dFRvUHJldmlvdXNSZXZlcnRlZFNjYWxlID0gbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2Fs
ZSgpIC8gbV9wcmV2aW91c1RpbGVTZXQtPmNvbnRlbnRzU2NhbGUoKTsKLSAgICAgICAgZ2Muc2Nh
bGUoRmxvYXRTaXplKGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSwgY3VycmVudFRvUHJl
dmlvdXNSZXZlcnRlZFNjYWxlKSk7Ci0gICAgICAgIHBhaW50KG1fcHJldmlvdXNUaWxlU2V0Lmdl
dCgpLCByZWN0LCBnYyk7Ci0gICAgfQotCi0gICAgZ2MucmVzdG9yZSgpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKLXsKLSAgICBp
ZiAobV92aXNpYmxlQ29udGVudFJlY3QgIT0gdmlzaWJsZUNvbnRlbnRSZWN0KSB7Ci0gICAgICAg
IG1fdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0OwotICAgICAgICBzdGFy
dFRpbGVDcmVhdGlvblRpbWVyKCk7Ci0gICAgfQotfQotCi1mbG9hdCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OmNvdmVyYWdlUmF0aW8oVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQqIHRpbGVTZXQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB0
aWxlU2V0LT5tYXBGcm9tQ29udGVudHMocmVjdCk7Ci0gICAgZmxvYXQgcmVjdEFyZWEgPSBkaXJ0
eVJlY3Qud2lkdGgoKSAqIGRpcnR5UmVjdC5oZWlnaHQoKTsKLSAgICBmbG9hdCBjb3ZlckFyZWEg
PSAwLjBmOwotCi0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9
IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0LmxvY2F0aW9uKCkpOwotICAgIFRpbGVk
RHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVG
b3JQb2ludChpbm5lckJvdHRvbVJpZ2h0KGRpcnR5UmVjdCkpOwotCi0gICAgZm9yICh1bnNpZ25l
ZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55
KCk7ICsreUNvb3JkaW5hdGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9
IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5h
dGUpIHsKLSAgICAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGN1cnJl
bnRDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICBSZWZQ
dHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxlID0gdGlsZVNldC0+dGlsZXMoKS5n
ZXQoVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGlu
YXRlKSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVh
ZHlUb1BhaW50KCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IGludGVy
c2VjdGlvbihkaXJ0eVJlY3QsIGN1cnJlbnRUaWxlLT5yZWN0KCkpOwotICAgICAgICAgICAgICAg
IGNvdmVyQXJlYSArPSBjb3ZlclJlY3Qud2lkdGgoKSAqIGNvdmVyUmVjdC5oZWlnaHQoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY292ZXJBcmVhIC8gcmVj
dEFyZWE7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRDb250ZW50c1NjYWxl
KGZsb2F0IHNjYWxlKQotewotICAgIGlmIChtX2N1cnJlbnRUaWxlU2V0LT5jb250ZW50c1NjYWxl
KCkgPT0gc2NhbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEtlZXAgdGhlIGN1cnJlbnQg
dGlsZXMgaW4gbV9wcmV2aW91c1RpbGVTZXQgd2hpbGUgdGhlIG5ldyBzY2FsZSB0aWxlcyBhcmUg
YmVpbmcgdXBkYXRlZC4KLSAgICAvLyBJZiBtX2N1cnJlbnRUaWxlU2V0IHN0aWxsIGhhc24ndCBt
b3JlIHBhaW50YWJsZSBjb250ZW50IGZvciB0aGUgY3VycmVudCB2aWV3cG9ydCByZWN0Ci0gICAg
Ly8gdGhhbiBtX3ByZXZpb3VzVGlsZVNldCwgdGhlbiBrZWVwIHRoZSBvbGQgbV9wcmV2aW91c1Rp
bGVTZXQuIFRoaXMgaGFwcGVucyB3aGVuCi0gICAgLy8gc2V0Q29udGVudHNTY2FsZSBpcyBjYWxs
ZWQgdHdpY2Ugd2hpbGUgbV9jdXJyZW50VGlsZVNldCBzdGlsbCBjb250YWlucyBmZXcgb3Igbm8g
cmVuZGVyZWQgdGlsZXMuCi0gICAgaWYgKCFtX3ByZXZpb3VzVGlsZVNldCB8fCBjb3ZlcmFnZVJh
dGlvKG1fcHJldmlvdXNUaWxlU2V0LmdldCgpLCB2aXNpYmxlUmVjdCgpKSA8IGNvdmVyYWdlUmF0
aW8obV9jdXJyZW50VGlsZVNldC5nZXQoKSwgdmlzaWJsZVJlY3QoKSkpIHsKLSAgICAgICAgbV9w
cmV2aW91c1RpbGVTZXQgPSBtX2N1cnJlbnRUaWxlU2V0LnJlbGVhc2UoKTsKLSAgICAgICAgZGlz
YWJsZVRpbGVTZXRVcGRhdGVzKG1fcHJldmlvdXNUaWxlU2V0LmdldCgpKTsKLSAgICB9Ci0gICAg
bV9jdXJyZW50VGlsZVNldCA9IGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCht
X3dlYlZpZXcsIHNjYWxlKSk7Ci0gICAgY3JlYXRlVGlsZXMoKTsKLX0KLQotZG91YmxlIFRpbGVk
RHJhd2luZ0FyZWFQcm94eTo6dGlsZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0LCBj
b25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCi17
Ci0gICAgaWYgKHZpZXdwb3J0LmludGVyc2VjdHModGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVD
b29yZGluYXRlKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgSW50UG9pbnQgdmlld0NlbnRl
ciA9IHZpZXdwb3J0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpZXdwb3J0LndpZHRoKCkgLyAyLCB2
aWV3cG9ydC5oZWlnaHQoKSAvIDIpOwotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGlu
YXRlIGNlbnRlckNvb3JkaW5hdGUgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KHZpZXdDZW50ZXIp
OwotCi0gICAgLy8gTWFuaGF0dGFuIGRpc3RhbmNlLCBiaWFzZWQgc28gdGhhdCB2ZXJ0aWNhbCBk
aXN0YW5jZXMgYXJlIHNob3J0ZXIuCi0gICAgY29uc3QgZG91YmxlIGhvcml6b250YWxCaWFzID0g
MS4zOwotICAgIHJldHVybiBhYnMoY2VudGVyQ29vcmRpbmF0ZS55KCkgLSB0aWxlQ29vcmRpbmF0
ZS55KCkpICsgaG9yaXpvbnRhbEJpYXMgKiBhYnMoY2VudGVyQ29vcmRpbmF0ZS54KCkgLSB0aWxl
Q29vcmRpbmF0ZS54KCkpOwotfQotCi1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y2Fs
Y3VsYXRlS2VlcFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0Ci17Ci0gICAg
SW50UmVjdCByZXN1bHQgPSB2aXNpYmxlUmVjdDsKLSAgICAvLyBJbmZsYXRlcyB0byBib3RoIHNp
ZGVzLCBzbyBkaXZpZGUgaW5mbGF0ZSBkZWx0YSBieSAyCi0gICAgcmVzdWx0LmluZmxhdGVYKHZp
c2libGVSZWN0LndpZHRoKCkgKiAobV9rZWVwQXJlYU11bHRpcGxpZXIud2lkdGgoKSAtIDEpIC8g
Mik7Ci0gICAgcmVzdWx0LmluZmxhdGVZKHZpc2libGVSZWN0LmhlaWdodCgpICogKG1fa2VlcEFy
ZWFNdWx0aXBsaWVyLmhlaWdodCgpIC0gMSkgLyAyKTsKLSAgICByZXN1bHQuaW50ZXJzZWN0KGNv
bnRlbnRzUmVjdCgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRSZWN0IFRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6Y2FsY3VsYXRlQ292ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVzdWx0ID0gdmlzaWJsZVJlY3Q7Ci0gICAgLy8g
SW5mbGF0ZXMgdG8gYm90aCBzaWRlcywgc28gZGl2aWRlIGluZmxhdGUgZGVsdGEgYnkgMgotICAg
IHJlc3VsdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpICogKG1fY292ZXJBcmVhTXVsdGlw
bGllci53aWR0aCgpIC0gMSkgLyAyKTsKLSAgICByZXN1bHQuaW5mbGF0ZVkodmlzaWJsZVJlY3Qu
aGVpZ2h0KCkgKiAobV9jb3ZlckFyZWFNdWx0aXBsaWVyLmhlaWdodCgpIC0gMSkgLyAyKTsKLSAg
ICByZXN1bHQuaW50ZXJzZWN0KGNvbnRlbnRzUmVjdCgpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlVGlsZXMoKQotewotICAgIElu
dFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOwotICAgIGlmICh2aXNpYmxl
UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJlc2l6ZSB0aWxlcyBv
biBlZGdlcyBpbiBjYXNlIHRoZSBjb250ZW50cyBzaXplIGhhcyBjaGFuZ2VkLgotICAgIGJvb2wg
ZGlkUmVzaXplVGlsZXMgPSByZXNpemVFZGdlVGlsZXMoKTsKLQotICAgIC8vIFJlbW92ZSB0aWxl
cyBvdXRzaWRlIG91dCBjdXJyZW50IG1heGltdW0ga2VlcCByZWN0LgotICAgIGRyb3BUaWxlc091
dHNpZGVSZWN0KGNhbGN1bGF0ZUtlZXBSZWN0KHZpc2libGVSZWN0KSk7Ci0KLSAgICAvLyBTZWFy
Y2ggZm9yIHRoZSB0aWxlIHBvc2l0aW9uIGNsb3Nlc3QgdG8gdGhlIHZpZXdwb3J0IGNlbnRlciB0
aGF0IGRvZXMgbm90IHlldCBjb250YWluIGEgdGlsZS4KLSAgICAvLyBXaGljaCBwb3NpdGlvbiBp
cyBjb25zaWRlcmVkIHRoZSBjbG9zZXN0IGRlcGVuZHMgb24gdGhlIHRpbGVEaXN0YW5jZSBmdW5j
dGlvbi4KLSAgICBkb3VibGUgc2hvcnRlc3REaXN0YW5jZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNv
b3JkaW5hdGU+IHRpbGVzVG9DcmVhdGU7Ci0gICAgdW5zaWduZWQgcmVxdWlyZWRUaWxlQ291bnQg
PSAwOwotICAgIGJvb2wgaGFzVmlzaWJsZUNoZWNrZXJzID0gZmFsc2U7Ci0gICAgVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQo
dmlzaWJsZVJlY3QubG9jYXRpb24oKSk7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3Jk
aW5hdGUgYm90dG9tUmlnaHQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGlubmVyQm90dG9tUmln
aHQodmlzaWJsZVJlY3QpKTsKLSAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9wTGVm
dC55KCk7IHlDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29yZGlu
YXRlIDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgewotICAgICAgICAgICAgVGls
ZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgY3VycmVudENvb3JkaW5hdGUoeENvb3JkaW5h
dGUsIHlDb29yZGluYXRlKTsKLSAgICAgICAgICAgIC8vIERpc3RhbmNlIGlzIDAgZm9yIGFsbCBj
dXJyZW50bHkgdmlzaWJsZSB0aWxlcy4KLSAgICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IHRp
bGVEaXN0YW5jZSh2aXNpYmxlUmVjdCwgY3VycmVudENvb3JkaW5hdGUpOwotCi0gICAgICAgICAg
ICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IHRpbGUgPSBtX2N1cnJlbnRUaWxlU2V0LT50
aWxlcygpLmdldChjdXJyZW50Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICBpZiAoIWRpc3RhbmNl
ICYmICghdGlsZSB8fCAhdGlsZS0+aXNSZWFkeVRvUGFpbnQoKSkpCi0gICAgICAgICAgICAgICAg
aGFzVmlzaWJsZUNoZWNrZXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICh0aWxlKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICArK3JlcXVpcmVkVGlsZUNvdW50Owot
Ci0gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBzaG9ydGVzdERpc3RhbmNlKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgc2hvcnRlc3REaXN0
YW5jZSkgewotICAgICAgICAgICAgICAgIHRpbGVzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICAgICAg
ICAgICAgICBzaG9ydGVzdERpc3RhbmNlID0gZGlzdGFuY2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB0aWxlc1RvQ3JlYXRlLmFwcGVuZChjdXJyZW50Q29vcmRpbmF0ZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoaGFzVmlzaWJsZUNoZWNrZXJzICYmIHNob3J0ZXN0RGlzdGFu
Y2UgPiAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOb3cgY29uc3RydWN0IHRoZSB0aWxl
KHMpLgotICAgIHVuc2lnbmVkIHRpbGVzVG9DcmVhdGVDb3VudCA9IHRpbGVzVG9DcmVhdGUuc2l6
ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aWxlc1RvQ3JlYXRlQ291bnQ7ICsr
bikgewotICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRl
ID0gdGlsZXNUb0NyZWF0ZVtuXTsKLSAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxl
PiB0aWxlID0gVGlsZWREcmF3aW5nQXJlYVRpbGU6OmNyZWF0ZSh0aGlzLCBtX3dlYlZpZXcsIGNv
b3JkaW5hdGUpOwotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICBBU1NFUlQobV9jdXJyZW50VGls
ZVNldC0+c2dOb2RlSUQoKSk7Ci0gICAgICAgIHRpbGUtPnNldFBhcmVudE5vZGVJRChtX2N1cnJl
bnRUaWxlU2V0LT5zZ05vZGVJRCgpKTsKLSNlbmRpZgotICAgICAgICBtX2N1cnJlbnRUaWxlU2V0
LT50aWxlcygpLnNldChjb29yZGluYXRlLCB0aWxlKTsKLSAgICB9Ci0KLSAgICByZXF1aXJlZFRp
bGVDb3VudCAtPSB0aWxlc1RvQ3JlYXRlQ291bnQ7Ci0KLSAgICAvLyBQYWludCB0aGUgY29udGVu
dCBvZiB0aGUgbmV3bHkgY3JlYXRlZCB0aWxlcy4KLSAgICBpZiAodGlsZXNUb0NyZWF0ZUNvdW50
IHx8IGRpZFJlc2l6ZVRpbGVzKQotICAgICAgICB1cGRhdGVUaWxlQnVmZmVycygpOwotCi0gICAg
Ly8gS2VlcCBjcmVhdGluZyB0aWxlcyB1bnRpbCB0aGUgd2hvbGUgY292ZXJSZWN0IGlzIGNvdmVy
ZWQuCi0gICAgaWYgKHJlcXVpcmVkVGlsZUNvdW50KQotICAgICAgICBtX3RpbGVDcmVhdGlvblRp
bWVyLnN0YXJ0T25lU2hvdChtX3RpbGVDcmVhdGlvbkRlbGF5KTsKLX0KLQotYm9vbCBUaWxlZERy
YXdpbmdBcmVhUHJveHk6OnJlc2l6ZUVkZ2VUaWxlcygpCi17Ci0gICAgSW50UmVjdCBjb250ZW50
c1JlY3QgPSB0aGlzLT5jb250ZW50c1JlY3QoKTsKLSAgICBib29sIHdhc1Jlc2l6ZWQgPSBmYWxz
ZTsKLQotICAgIFZlY3RvcjxUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNU
b1JlbW92ZTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5lbmQoKTsKLSAgICBmb3IgKFRpbGVkRHJh
d2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVudFRpbGVTZXQt
PnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+Y29vcmRp
bmF0ZSgpOwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOwot
ICAgICAgICBJbnRSZWN0IGV4cGVjdGVkVGlsZVJlY3QgPSB0aWxlUmVjdEZvckNvb3JkaW5hdGUo
dGlsZUNvb3JkaW5hdGUpOwotICAgICAgICBpZiAoIWNvbnRlbnRzUmVjdC5jb250YWlucyh0aWxl
UmVjdCkpCi0gICAgICAgICAgICB0aWxlc1RvUmVtb3ZlLmFwcGVuZCh0aWxlQ29vcmRpbmF0ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkVGlsZVJlY3QgIT0gdGlsZVJlY3QpIHsKLSAgICAg
ICAgICAgIGl0LT5zZWNvbmQtPnJlc2l6ZShleHBlY3RlZFRpbGVSZWN0LnNpemUoKSk7Ci0gICAg
ICAgICAgICB3YXNSZXNpemVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICB1bnNpZ25l
ZCByZW1vdmVDb3VudCA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQotICAgICAgICBtX2N1cnJlbnRUaWxlU2V0LT50
aWxlcygpLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW25dKTsKLSAgICByZXR1cm4gd2FzUmVzaXplZDsK
LX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRyb3BUaWxlc091dHNpZGVSZWN0KGNv
bnN0IEludFJlY3QmIGtlZXBSZWN0KQotewotICAgIEZsb2F0UmVjdCBrZWVwUmVjdEYgPSBrZWVw
UmVjdDsKLQotICAgIFZlY3RvcjxUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZT4gdG9S
ZW1vdmU7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuZW5kKCk7Ci0gICAgZm9yIChUaWxlZERyYXdp
bmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRUaWxlU2V0LT50
aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlZERyYXdpbmdB
cmVhVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgp
OwotICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpdC0+c2Vjb25kLT5yZWN0KCk7Ci0gICAg
ICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQotICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwotICAgIH0KLSAgICB1bnNpZ25lZCByZW1vdmVDb3Vu
dCA9IHRvUmVtb3ZlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3Zl
Q291bnQ7ICsrbikKLSAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5yZW1vdmUodG9S
ZW1vdmVbbl0pOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlzYWJsZVRpbGVT
ZXRVcGRhdGVzKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KiB0aWxlU2V0KQotewotICAgIFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aWxlU2V0
LT50aWxlcygpLmVuZCgpOwotICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZVNldC0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmRpc2FibGVVcGRhdGVzKCk7Ci19Ci0KLXZv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZW1vdmVBbGxUaWxlcygpCi17Ci0gICAgbV9jdXJy
ZW50VGlsZVNldCA9IGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldChtX3dlYlZp
ZXcsIG1fY3VycmVudFRpbGVTZXQtPmNvbnRlbnRzU2NhbGUoKSkpOwotfQotCi0KLUludFJlY3Qg
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25zdAotewotICAgIHJldHVy
biBtX2N1cnJlbnRUaWxlU2V0LT5tYXBGcm9tQ29udGVudHMoSW50UmVjdChJbnRQb2ludCgwLCAw
KSwgbV92aWV3U2l6ZSkpOwotfQotCi1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dmlz
aWJsZVJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRUaWxlU2V0LT5tYXBGcm9t
Q29udGVudHMobV92aXNpYmxlQ29udGVudFJlY3QpOwotfQotCi1JbnRSZWN0IFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6dGlsZVJlY3RGb3JDb29yZGluYXRlKGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpDb29yZGluYXRlJiBjb29yZGluYXRlKSBjb25zdAotewotICAgIEludFJlY3QgcmVjdChj
b29yZGluYXRlLngoKSAqIG1fdGlsZVNpemUud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgY29v
cmRpbmF0ZS55KCkgKiBtX3RpbGVTaXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICBtX3Rp
bGVTaXplLndpZHRoKCksCi0gICAgICAgICAgICAgICAgIG1fdGlsZVNpemUuaGVpZ2h0KCkpOwot
Ci0gICAgcmVjdC5pbnRlcnNlY3QoY29udGVudHNSZWN0KCkpOwotICAgIHJldHVybiByZWN0Owot
fQotCi1UaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OnRpbGVDb29yZGluYXRlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAot
ewotICAgIGludCB4ID0gcG9pbnQueCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpOwotICAgIGludCB5
ID0gcG9pbnQueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gVGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoc3RkOjptYXgoeCwgMCksIHN0ZDo6bWF4KHksIDApKTsK
LX0KLQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c3RhcnRUaWxlQnVmZmVyVXBkYXRl
VGltZXIoKQotewotICAgIGlmIChtX3RpbGVCdWZmZXJVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV90aWxlQnVmZmVyVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90
KDApOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUJ1ZmZlclVwZGF0ZVRp
bWVyRmlyZWQoKQotewotICAgIHVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci19Ci0KLXZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpzdGFydFRpbGVDcmVhdGlvblRpbWVyKCkKLXsKLSAgICBpZiAobV90
aWxlQ3JlYXRpb25UaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV90aWxl
Q3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJl
YVByb3h5Ojp0aWxlQ3JlYXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICBjcmVhdGVUaWxlcygpOwot
fQotCi1ib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6aGFzUGVuZGluZ1VwZGF0ZXMoKSBjb25z
dAotewotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmVuZCgpOwotICAgIGZvciAoVGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jdXJyZW50
VGlsZVNldC0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29u
c3QgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiYgY3VycmVudCA9IGl0LT5zZWNvbmQ7Ci0g
ICAgICAgIGlmIChjdXJyZW50LT5oYXNCYWNrQnVmZmVyVXBkYXRlUGVuZGluZygpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaAppbmRleCAz
MTBkZjM0MmU4ZDhlMzJlYTdhNGJjMGVkMjc2NGYxNDI2ZDY5NTRhLi43YjlmZDVhZTYyNzM0MzIw
N2YwYmY5ZGIyYjc4OTQ5ZTk5YzYzZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KIAogI2luY2x1ZGUgIlJ1bkxvb3AuaCIKLSNpbmNsdWRlICJUaWxlZERy
YXdpbmdBcmVhVGlsZS5oIgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KQEAgLTc0LDMwICs3MywxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZpc2li
bGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRDb250
ZW50c1NjYWxlKGZsb2F0KTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hDb21wb3Np
dGluZ0NvbnRleHQodWludDMyX3QgLyogY29udGV4dElEICovKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0KCkgeyB9CiAjZW5kaWYKIAotICAgIFdlYkNvcmU6
OkludFNpemUgdGlsZVNpemUoKSB7IHJldHVybiBtX3RpbGVTaXplOyB9Ci0gICAgdm9pZCBzZXRU
aWxlU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0KLSAgICBkb3VibGUgdGlsZUNyZWF0
aW9uRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX3RpbGVDcmVhdGlvbkRlbGF5OyB9Ci0gICAgdm9p
ZCBzZXRUaWxlQ3JlYXRpb25EZWxheShkb3VibGUgZGVsYXkpOwotCi0gICAgLy8gVGlsZWQgYXJl
IGRyb3BwZWQgb3V0c2lkZSB0aGUga2VlcCBhcmVhLCBhbmQgY3JlYXRlZCBmb3IgY292ZXIgYXJl
YS4gVGhlIHZhbHVlcyBhIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBzaXplLgotICAgIHZvaWQg
Z2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKFdlYkNvcmU6OkZsb2F0U2l6ZSYga2VlcE11
bHRpcGxpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQotICAgIHsKLSAg
ICAgICAga2VlcE11bHRpcGxpZXIgPSBtX2tlZXBBcmVhTXVsdGlwbGllcjsKLSAgICAgICAgY292
ZXJNdWx0aXBsaWVyID0gbV9jb3ZlckFyZWFNdWx0aXBsaWVyOwotICAgIH0KLSAgICB2b2lkIHNl
dEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGtl
ZXBNdWx0aXBsaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGllcik7
Ci0KLSAgICB2b2lkIHRpbGVCdWZmZXJVcGRhdGVDb21wbGV0ZSgpOwotCi0gICAgYm9vbCBoYXNQ
ZW5kaW5nVXBkYXRlcygpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eSogcGFn
ZSgpOwogICAgIHZvaWQgdXBkYXRlV2ViVmlldyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4mIHBhaW50ZWRBcmVhKTsKQEAgLTEwOCw3MCArOTAsMjAgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0UGFnZUlzVmlzaWJsZShib29sIGlzVmlzaWJsZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
U2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHRp
bGVVcGRhdGVkKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0
IHNjYWxlLCB1bnNpZ25lZCBwZW5kaW5nVXBkYXRlQ291bnQpOwotICAgIHZpcnR1YWwgdm9pZCBh
bGxUaWxlVXBkYXRlc1Byb2Nlc3NlZCgpOwotCi0gICAgdm9pZCByZWdpc3RlclRpbGUoaW50IHRp
bGVJRCwgVGlsZWREcmF3aW5nQXJlYVRpbGUqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJUaWxlKGlu
dCB0aWxlSUQpOwotICAgIHZvaWQgcmVxdWVzdFRpbGVVcGRhdGUoaW50IHRpbGVJRCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIGNhbmNlbFRpbGVVcGRhdGUo
aW50IHRpbGVJRCk7Ci0KLSAgICB2b2lkIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7Ci0g
ICAgdm9pZCBzdGFydFRpbGVDcmVhdGlvblRpbWVyKCk7Ci0KLSAgICB2b2lkIHRpbGVCdWZmZXJV
cGRhdGVUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCB0aWxlQ3JlYXRpb25UaW1lckZpcmVkKCk7Ci0K
LSAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlcygpOwot
Ci0gICAgYm9vbCByZXNpemVFZGdlVGlsZXMoKTsKLSAgICB2b2lkIGRyb3BUaWxlc091dHNpZGVS
ZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIHZvaWQgZGlzYWJsZVRpbGVTZXRV
cGRhdGVzKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Kik7Ci0gICAgdm9pZCByZW1vdmVBbGxUaWxl
cygpOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0
ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBV
cGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCk7CiAKLSAgICB2b2lkIHBhaW50KFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYpOwotICAgIGZsb2F0IGNvdmVyYWdlUmF0aW8oVGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICBXZWJDb3JlOjpJbnRS
ZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZVJl
Y3QoKSBjb25zdDsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgY2FsY3VsYXRlS2VlcFJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0OwotICAgIFdlYkNvcmU6Oklu
dFJlY3QgY2FsY3VsYXRlQ292ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVS
ZWN0KSBjb25zdDsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3RGb3JDb29yZGluYXRl
KGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7Ci0gICAgVGls
ZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgdGlsZUNvb3JkaW5hdGVGb3JQb2ludChjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgIGRvdWJsZSB0aWxlRGlzdGFuY2UoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxl
OjpDb29yZGluYXRlJik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFNl
dEZyYW1lTm90aWZpY2F0aW9uOwogICAgIGJvb2wgbV9pc1Zpc2libGU7CiAKLSAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fdmlld1NpemU7IC8vIFNpemUgb2YgdGhlIEJhY2tpbmdTdG9yZSBhcyB3ZWxs
LgotICAgIFdlYkNvcmU6OkludFNpemUgbV9sYXN0U2V0Vmlld1NpemU7Ci0KICAgICBQbGF0Zm9y
bVdlYlZpZXcqIG1fd2ViVmlldzsKLQotICAgIE93blB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZVNl
dD4gbV9jdXJyZW50VGlsZVNldDsKLSAgICBPd25QdHI8VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ+
IG1fcHJldmlvdXNUaWxlU2V0OwotCi0gICAgV1RGOjpIYXNoTWFwPGludCwgVGlsZWREcmF3aW5n
QXJlYVRpbGUqPiBtX3RpbGVzQnlJRDsKLQotICAgIHR5cGVkZWYgUnVuTG9vcDo6VGltZXI8VGls
ZWREcmF3aW5nQXJlYVByb3h5PiBUaWxlVGltZXI7Ci0gICAgVGlsZVRpbWVyIG1fdGlsZUJ1ZmZl
clVwZGF0ZVRpbWVyOwotICAgIFRpbGVUaW1lciBtX3RpbGVDcmVhdGlvblRpbWVyOwotCi0gICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3RpbGVTaXplOwotICAgIGRvdWJsZSBtX3RpbGVDcmVhdGlvbkRl
bGF5OwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2tlZXBBcmVhTXVsdGlwbGllcjsKLSAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgbV9jb3ZlckFyZWFNdWx0aXBsaWVyOwotCi0gICAgV2ViQ29yZTo6
SW50UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKLQotICAgIGZyaWVuZCBjbGFzcyBUaWxlZERy
YXdpbmdBcmVhVGlsZTsKKyNpZiBQTEFURk9STShRVCkKKyAgICBIYXNoTWFwPGludCwgaW50PiBt
X3RpbGVzVG9Ob2RlczsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTUzNzhjMWFjMWRlMDJiM2ZkMWIwODExYWZiZGM5NTgw
ZWRkNzIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
VGlsZWREcmF3aW5nQXJlYVRpbGVfaAotI2RlZmluZSBUaWxlZERyYXdpbmdBcmVhVGlsZV9oCi0K
LSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBQTEFU
Rk9STShRVCkKLSNpbmNsdWRlIDxRUGl4bWFwPgotI2luY2x1ZGUgPFFSZWdpb24+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFRpbGVkRHJhd2luZ0FyZWFQcm94eTsKLWNs
YXNzIFVwZGF0ZUluZm87Ci0KLSNpZiBQTEFURk9STShNQUMpCi10eXBlZGVmIFdLVmlldyBQbGF0
Zm9ybVdlYlZpZXc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi1jbGFzcyBXZWJWaWV3OwotdHlwZWRl
ZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKLSNlbGlmIFBMQVRGT1JNKFFUKQotY2xhc3MgU0dB
Z2VudDsKLWNsYXNzIFRvdWNoVmlld0ludGVyZmFjZTsKLXR5cGVkZWYgVG91Y2hWaWV3SW50ZXJm
YWNlIFBsYXRmb3JtV2ViVmlldzsKLSNlbmRpZgotCi1jbGFzcyBUaWxlZERyYXdpbmdBcmVhVGls
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBXZWJDb3JlOjpJbnRQb2ludCBDb29yZGluYXRlOwotCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGNyZWF0ZShUaWxlZERyYXdpbmdBcmVhUHJv
eHkqIHByb3h5LCBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENvb3JkaW5hdGUmIHRp
bGVDb29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGlsZWREcmF3aW5nQXJlYVRpbGUo
cHJveHksIHdlYlZpZXcsIHRpbGVDb29yZGluYXRlKSk7IH0KLSAgICB+VGlsZWREcmF3aW5nQXJl
YVRpbGUoKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCB1cGRhdGVCYWNrQnVmZmVyKCk7
Ci0gICAgYm9vbCBoYXNSZWFkeUJhY2tCdWZmZXIoKSBjb25zdDsKLSAgICB2b2lkIHN3YXBCYWNr
QnVmZmVyVG9Gcm9udCgpOwotICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKLSAgICB2
b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKLSAgICBib29sIGhhc0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNVcGRhdGVQZW5kaW5nOyB9Ci0KLSAgICBjb25zdCBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsg
fQotICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KLSAgICB2b2lkIHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0KLSAgICB2
b2lkIGluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mLCBmbG9hdCBzY2FsZSk7Ci0g
ICAgdm9pZCBkaXNhYmxlVXBkYXRlcygpOwotCi0gICAgaW50IElEKCkgY29uc3QgeyByZXR1cm4g
bV9JRDsgfQotI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgc2V0UGFyZW50Tm9kZUlEKGludCk7
Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZShUaWxlZERyYXdp
bmdBcmVhUHJveHkqLCBQbGF0Zm9ybVdlYlZpZXcqLCBjb25zdCBUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpOwotCi0gICAgVGlsZWREcmF3aW5nQXJlYVBy
b3h5KiBtX3Byb3h5OwotICAgIENvb3JkaW5hdGUgbV9jb29yZGluYXRlOwotICAgIFdlYkNvcmU6
OkludFJlY3QgbV9yZWN0OwotCi0gICAgaW50IG1fSUQ7Ci0gICAgYm9vbCBtX2hhc1VwZGF0ZVBl
bmRpbmc7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRSW1hZ2UgbV9iYWNrQnVmZmVyOwotICAg
IFNHQWdlbnQqIG1fc2dBZ2VudDsKLSAgICBpbnQgbV9ub2RlSUQ7Ci0gICAgaW50IG1fcGFyZW50
Tm9kZUlEOwotICAgIGJvb2wgbV9pc0JhY2tCdWZmZXJWYWxpZDsKLSAgICBRUmVnaW9uIG1fZGly
dHlSZWdpb247Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvU0dBZ2VudC5jcHAKaW5kZXggOGYwNGM3MzQ0NTM4MTE1ZjQwMjFmOGZmZTI3MGFjODFj
ODhkMDI3Mi4uY2M3OGY1MzJjZjIyYjNhNTRkYzBkMDc0NTM5NDM2M2U3ODAyNDA0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR0FnZW50LmNwcApAQCAtMjMsODggKzIzLDgxIEBACiAK
ICNpbmNsdWRlICJQYXNzT3duUHRyLmgiCiAjaW5jbHVkZSAiU0dUaWxlTm9kZS5oIgotI2luY2x1
ZGUgPFFTR0VuZ2luZT4KICNpbmNsdWRlIDxRU0dJdGVtPgotI2luY2x1ZGUgPFFTR1RleHR1cmU+
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUgOiBw
dWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUoaW50IG5vZGVJRCwg
aW50IHBhcmVudE5vZGVJRCkKKyAgICBOb2RlVXBkYXRlQ3JlYXRlVGlsZShpbnQgbm9kZUlELCBm
bG9hdCBzY2FsZSkKICAgICAgICAgOiBOb2RlVXBkYXRlKENyZWF0ZVRpbGUpCiAgICAgICAgICwg
bm9kZUlEKG5vZGVJRCkKLSAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlEKQotICAg
IHsgfQotICAgIGludCBub2RlSUQ7Ci0gICAgaW50IHBhcmVudE5vZGVJRDsKLX07Ci0KLXN0cnVj
dCBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9kZVVw
ZGF0ZUNyZWF0ZVNjYWxlKGludCBub2RlSUQsIGludCBwYXJlbnROb2RlSUQsIGZsb2F0IHNjYWxl
KQotICAgICAgICA6IE5vZGVVcGRhdGUoQ3JlYXRlU2NhbGUpCi0gICAgICAgICwgbm9kZUlEKG5v
ZGVJRCkKLSAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlEKQogICAgICAgICAsIHNj
YWxlKHNjYWxlKQogICAgIHsgfQogICAgIGludCBub2RlSUQ7Ci0gICAgaW50IHBhcmVudE5vZGVJ
RDsKICAgICBmbG9hdCBzY2FsZTsKIH07CiAKLXN0cnVjdCBOb2RlVXBkYXRlUmVtb3ZlIDogcHVi
bGljIE5vZGVVcGRhdGUgewotICAgIE5vZGVVcGRhdGVSZW1vdmUoaW50IG5vZGVJRCkKLSAgICAg
ICAgOiBOb2RlVXBkYXRlKFJlbW92ZSkKK3N0cnVjdCBOb2RlVXBkYXRlUmVtb3ZlVGlsZSA6IHB1
YmxpYyBOb2RlVXBkYXRlIHsKKyAgICBOb2RlVXBkYXRlUmVtb3ZlVGlsZShpbnQgbm9kZUlEKQor
ICAgICAgICA6IE5vZGVVcGRhdGUoUmVtb3ZlVGlsZSkKICAgICAgICAgLCBub2RlSUQobm9kZUlE
KQogICAgIHsgfQogICAgIGludCBub2RlSUQ7CiB9OwogCi1zdHJ1Y3QgTm9kZVVwZGF0ZVNldFRl
eHR1cmUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9kZVVwZGF0ZVNldFRleHR1cmUoaW50
IG5vZGVJRCwgY29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgUVJlY3QmIHRhcmdldFJlY3QpCi0gICAgICAgIDogTm9kZVVwZGF0ZShTZXRUZXh0dXJl
KQorc3RydWN0IE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyIDogcHVibGljIE5vZGVVcGRhdGUgewor
ICAgIE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyKGludCBub2RlSUQsIGNvbnN0IFFJbWFnZSYgYmFj
a0J1ZmZlciwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0JiB0YXJnZXRSZWN0
KQorICAgICAgICA6IE5vZGVVcGRhdGUoU2V0QmFja0J1ZmZlcikKICAgICAgICAgLCBub2RlSUQo
bm9kZUlEKQotICAgICAgICAsIHRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgLCBiYWNrQnVmZmVy
KGJhY2tCdWZmZXIpCiAgICAgICAgICwgc291cmNlUmVjdChzb3VyY2VSZWN0KQogICAgICAgICAs
IHRhcmdldFJlY3QodGFyZ2V0UmVjdCkKICAgICB7IH0KICAgICBpbnQgbm9kZUlEOwotICAgIFFJ
bWFnZSB0ZXh0dXJlOworICAgIFFJbWFnZSBiYWNrQnVmZmVyOwogICAgIFFSZWN0IHNvdXJjZVJl
Y3Q7CiAgICAgUVJlY3QgdGFyZ2V0UmVjdDsKIH07CiAKK3N0cnVjdCBOb2RlVXBkYXRlU3dhcFRp
bGVCdWZmZXJzIDogcHVibGljIE5vZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVTd2FwVGlsZUJ1
ZmZlcnMoKQorICAgICAgICA6IE5vZGVVcGRhdGUoU3dhcFRpbGVCdWZmZXJzKQorICAgIHsgfQor
fTsKIAogU0dBZ2VudDo6U0dBZ2VudChRU0dJdGVtKiBpdGVtKQogICAgIDogaXRlbShpdGVtKQor
ICAgICwgbGFzdFNjYWxlKDApCisgICAgLCBsYXN0U2NhbGVOb2RlKDApCiAgICAgLCBuZXh0Tm9k
ZUlEKDEpCisgICAgLCBtX2lzU3dhcFBlbmRpbmcoZmFsc2UpCiB7CiB9CiAKLWludCBTR0FnZW50
OjpjcmVhdGVUaWxlTm9kZShpbnQgcGFyZW50Tm9kZUlEKQoraW50IFNHQWdlbnQ6OmNyZWF0ZVRp
bGVOb2RlKGZsb2F0IHNjYWxlKQogewogICAgIGludCBub2RlSUQgPSBuZXh0Tm9kZUlEKys7Ci0g
ICAgbm9kZVVwZGF0ZXNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vZGVVcGRhdGVDcmVhdGVU
aWxlKG5vZGVJRCwgcGFyZW50Tm9kZUlEKSkpOworICAgIG5vZGVVcGRhdGVzUXVldWUuYXBwZW5k
KGFkb3B0UHRyKG5ldyBOb2RlVXBkYXRlQ3JlYXRlVGlsZShub2RlSUQsIHNjYWxlKSkpOwogICAg
IGl0ZW0tPnVwZGF0ZSgpOwogICAgIHJldHVybiBub2RlSUQ7CiB9CiAKLWludCBTR0FnZW50Ojpj
cmVhdGVTY2FsZU5vZGUoaW50IHBhcmVudE5vZGVJRCwgZmxvYXQgc2NhbGUpCit2b2lkIFNHQWdl
bnQ6OnJlbW92ZVRpbGVOb2RlKGludCBub2RlSUQpCiB7Ci0gICAgaW50IG5vZGVJRCA9IG5leHRO
b2RlSUQrKzsKLSAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVw
ZGF0ZUNyZWF0ZVNjYWxlKG5vZGVJRCwgcGFyZW50Tm9kZUlELCBzY2FsZSkpKTsKKyAgICBub2Rl
VXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVJlbW92ZVRpbGUobm9k
ZUlEKSkpOwogICAgIGl0ZW0tPnVwZGF0ZSgpOwotICAgIHJldHVybiBub2RlSUQ7CiB9CiAKLXZv
aWQgU0dBZ2VudDo6cmVtb3ZlTm9kZShpbnQgbm9kZUlEKQordm9pZCBTR0FnZW50OjpzZXROb2Rl
QmFja0J1ZmZlcihpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIGJhY2tCdWZmZXIsIGNvbnN0IFFS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBub2RlVXBk
YXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVJlbW92ZShub2RlSUQpKSk7
CisgICAgbm9kZVVwZGF0ZXNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vZGVVcGRhdGVTZXRC
YWNrQnVmZmVyKG5vZGVJRCwgYmFja0J1ZmZlciwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCkpKTsK
ICAgICBpdGVtLT51cGRhdGUoKTsKIH0KIAotdm9pZCBTR0FnZW50OjpzZXROb2RlVGV4dHVyZShp
bnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIHRleHR1cmUsIGNvbnN0IFFSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKK3ZvaWQgU0dBZ2VudDo6c3dhcFRpbGVCdWZmZXJz
KCkKIHsKLSAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0
ZVNldFRleHR1cmUobm9kZUlELCB0ZXh0dXJlLCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0KSkpOwor
ICAgIG5vZGVVcGRhdGVzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBOb2RlVXBkYXRlU3dhcFRp
bGVCdWZmZXJzKCkpKTsKKyAgICBtX2lzU3dhcFBlbmRpbmcgPSB0cnVlOwogICAgIGl0ZW0tPnVw
ZGF0ZSgpOwogfQogCkBAIC0xMTUsMzkgKzEwOCwzOCBAQCB2b2lkIFNHQWdlbnQ6OnVwZGF0ZVBh
aW50Tm9kZShRU0dOb2RlKiBpdGVtTm9kZSkKICAgICAgICAgc3dpdGNoIChub2RlVXBkYXRlLT50
eXBlKSB7CiAgICAgICAgIGNhc2UgTm9kZVVwZGF0ZTo6Q3JlYXRlVGlsZTogewogICAgICAgICAg
ICAgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUqIGNyZWF0ZVRpbGVVcGRhdGUgPSBzdGF0aWNfY2FzdDxO
b2RlVXBkYXRlQ3JlYXRlVGlsZSo+KG5vZGVVcGRhdGUuZ2V0KCkpOwotICAgICAgICAgICAgU0dU
aWxlTm9kZSogdGlsZU5vZGUgPSBuZXcgU0dUaWxlTm9kZTsKLSAgICAgICAgICAgIFFTR05vZGUq
IHBhcmVudE5vZGUgPSBjcmVhdGVUaWxlVXBkYXRlLT5wYXJlbnROb2RlSUQgPyBub2Rlcy5nZXQo
Y3JlYXRlVGlsZVVwZGF0ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOwotICAgICAgICAgICAg
cGFyZW50Tm9kZS0+cHJlcGVuZENoaWxkTm9kZSh0aWxlTm9kZSk7CisgICAgICAgICAgICBTR1Rp
bGVOb2RlKiB0aWxlTm9kZSA9IG5ldyBTR1RpbGVOb2RlKGl0ZW0tPnNjZW5lR3JhcGhFbmdpbmUo
KSk7CisgICAgICAgICAgICBnZXRTY2FsZU5vZGUoY3JlYXRlVGlsZVVwZGF0ZS0+c2NhbGUsIGl0
ZW1Ob2RlKS0+cHJlcGVuZENoaWxkTm9kZSh0aWxlTm9kZSk7CiAgICAgICAgICAgICBub2Rlcy5z
ZXQoY3JlYXRlVGlsZVVwZGF0ZS0+bm9kZUlELCB0aWxlTm9kZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OkNyZWF0ZVNjYWxlOiB7Ci0g
ICAgICAgICAgICBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUqIGNyZWF0ZVNjYWxlVXBkYXRlID0gc3Rh
dGljX2Nhc3Q8Tm9kZVVwZGF0ZUNyZWF0ZVNjYWxlKj4obm9kZVVwZGF0ZS5nZXQoKSk7Ci0gICAg
ICAgICAgICBRU0dUcmFuc2Zvcm1Ob2RlKiBzY2FsZU5vZGUgPSBuZXcgUVNHVHJhbnNmb3JtTm9k
ZTsKLSAgICAgICAgICAgIFFNYXRyaXg0eDQgc2NhbGVNYXRyaXg7Ci0gICAgICAgICAgICAvLyBV
c2Ugc2NhbGUoZmxvYXQsZmxvYXQpIHRvIHByZXZlbnQgc2NhbGluZyB0aGUgWiBjb21wb25lbnQu
Ci0gICAgICAgICAgICBzY2FsZU1hdHJpeC5zY2FsZShjcmVhdGVTY2FsZVVwZGF0ZS0+c2NhbGUs
IGNyZWF0ZVNjYWxlVXBkYXRlLT5zY2FsZSk7Ci0gICAgICAgICAgICBzY2FsZU5vZGUtPnNldE1h
dHJpeChzY2FsZU1hdHJpeCk7Ci0gICAgICAgICAgICBRU0dOb2RlKiBwYXJlbnROb2RlID0gY3Jl
YXRlU2NhbGVVcGRhdGUtPnBhcmVudE5vZGVJRCA/IG5vZGVzLmdldChjcmVhdGVTY2FsZVVwZGF0
ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOwotICAgICAgICAgICAgLy8gUHJlcGVuZCBpbnN0
ZWFkIG9mIGFwcGVuZCB0byBwYWludCB0aGUgbmV3LCBpbmNvbXBsZXRlLCB0aWxlc2V0IGJlZm9y
ZS9iZWhpbmQgdGhlIHByZXZpb3VzIG9uZS4KLSAgICAgICAgICAgIHBhcmVudE5vZGUtPnByZXBl
bmRDaGlsZE5vZGUoc2NhbGVOb2RlKTsKLSAgICAgICAgICAgIG5vZGVzLnNldChjcmVhdGVTY2Fs
ZVVwZGF0ZS0+bm9kZUlELCBzY2FsZU5vZGUpOworICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OlJl
bW92ZVRpbGU6IHsKKyAgICAgICAgICAgIE5vZGVVcGRhdGVSZW1vdmVUaWxlKiByZW1vdmVVcGRh
dGUgPSBzdGF0aWNfY2FzdDxOb2RlVXBkYXRlUmVtb3ZlVGlsZSo+KG5vZGVVcGRhdGUuZ2V0KCkp
OworICAgICAgICAgICAgUVNHTm9kZSogbm9kZSA9IG5vZGVzLnRha2UocmVtb3ZlVXBkYXRlLT5u
b2RlSUQpOworICAgICAgICAgICAgUVNHTm9kZSogc2NhbGVOb2RlID0gbm9kZS0+cGFyZW50KCk7
CisKKyAgICAgICAgICAgIHNjYWxlTm9kZS0+cmVtb3ZlQ2hpbGROb2RlKG5vZGUpOworICAgICAg
ICAgICAgaWYgKCFzY2FsZU5vZGUtPmNoaWxkQ291bnQoKSkgeworICAgICAgICAgICAgICAgIGlm
IChzY2FsZU5vZGUgPT0gbGFzdFNjYWxlTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBsYXN0
U2NhbGUgPSAwOworICAgICAgICAgICAgICAgICAgICBsYXN0U2NhbGVOb2RlID0gMDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVsZXRlIHNjYWxlTm9kZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBub2RlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpSZW1vdmU6IHsKLSAgICAgICAgICAgIE5v
ZGVVcGRhdGVSZW1vdmUqIHJlbW92ZVVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVVcGRhdGVSZW1v
dmUqPihub2RlVXBkYXRlLmdldCgpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBub2Rlcy50YWtlKHJl
bW92ZVVwZGF0ZS0+bm9kZUlEKTsKKyAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpTZXRCYWNrQnVm
ZmVyOiB7CisgICAgICAgICAgICBOb2RlVXBkYXRlU2V0QmFja0J1ZmZlciogc2V0QmFja0J1ZmZl
clVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyKj4obm9kZVVwZGF0
ZS5nZXQoKSk7CisgICAgICAgICAgICBTR1RpbGVOb2RlKiB0aWxlTm9kZSA9IG5vZGVzLmdldChz
ZXRCYWNrQnVmZmVyVXBkYXRlLT5ub2RlSUQpOworICAgICAgICAgICAgdGlsZU5vZGUtPnNldEJh
Y2tCdWZmZXIoc2V0QmFja0J1ZmZlclVwZGF0ZS0+YmFja0J1ZmZlciwgc2V0QmFja0J1ZmZlclVw
ZGF0ZS0+c291cmNlUmVjdCwgc2V0QmFja0J1ZmZlclVwZGF0ZS0+dGFyZ2V0UmVjdCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OlNldFRl
eHR1cmU6IHsKLSAgICAgICAgICAgIE5vZGVVcGRhdGVTZXRUZXh0dXJlKiBzZXRUZXh0dXJlVXBk
YXRlID0gc3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZVNldFRleHR1cmUqPihub2RlVXBkYXRlLmdldCgp
KTsKLSAgICAgICAgICAgIFNHVGlsZU5vZGUqIHRpbGVOb2RlID0gc3RhdGljX2Nhc3Q8U0dUaWxl
Tm9kZSo+KG5vZGVzLmdldChzZXRUZXh0dXJlVXBkYXRlLT5ub2RlSUQpKTsKLSAgICAgICAgICAg
IGlmICh0aWxlTm9kZSkgewotICAgICAgICAgICAgICAgIFFTR1RleHR1cmUqIHRleHR1cmUgPSBp
dGVtLT5zY2VuZUdyYXBoRW5naW5lKCktPmNyZWF0ZVRleHR1cmVGcm9tSW1hZ2Uoc2V0VGV4dHVy
ZVVwZGF0ZS0+dGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRleHR1cmUo
dGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRhcmdldFJlY3Qoc2V0VGV4
dHVyZVVwZGF0ZS0+dGFyZ2V0UmVjdCk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFNv
dXJjZVJlY3QodGV4dHVyZS0+Y29udmVydFRvTm9ybWFsaXplZFNvdXJjZVJlY3Qoc2V0VGV4dHVy
ZVVwZGF0ZS0+c291cmNlUmVjdCkpOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE5vZGVV
cGRhdGU6OlN3YXBUaWxlQnVmZmVyczogeworICAgICAgICAgICAgSGFzaE1hcDxpbnQsIFNHVGls
ZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbm9kZXMuZW5kKCk7CisgICAgICAgICAgICBmb3IgKEhh
c2hNYXA8aW50LCBTR1RpbGVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbm9kZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnN3YXBJZk5lZWRlZCgp
OworICAgICAgICAgICAgbV9pc1N3YXBQZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtMTU2LDQgKzE0OCwyMyBAQCB2b2lk
IFNHQWdlbnQ6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBpdGVtTm9kZSkKICAgICB9CiB9CiAK
K1FTR05vZGUqIFNHQWdlbnQ6OmdldFNjYWxlTm9kZShmbG9hdCBzY2FsZSwgUVNHTm9kZSogaXRl
bU5vZGUpCit7CisgICAgaWYgKHNjYWxlID09IGxhc3RTY2FsZSkKKyAgICAgICAgcmV0dXJuIGxh
c3RTY2FsZU5vZGU7CisKKyAgICBRU0dUcmFuc2Zvcm1Ob2RlKiBzY2FsZU5vZGUgPSBuZXcgUVNH
VHJhbnNmb3JtTm9kZTsKKyAgICBRTWF0cml4NHg0IHNjYWxlTWF0cml4OworICAgIC8vIFVzZSBz
Y2FsZShmbG9hdCxmbG9hdCkgdG8gcHJldmVudCBzY2FsaW5nIHRoZSBaIGNvbXBvbmVudC4KKyAg
ICAvLyBSZXZlcnNlIHRoZSBpdGVtJ3MgdHJhbnNmb3JtIHNjYWxlIHNpbmNlIG91ciB0aWxlcyB3
ZXJlIGdlbmVyYXRlZCBmb3IgdGhpcyBzcGVjaWZpYyBzY2FsZS4KKyAgICBzY2FsZU1hdHJpeC5z
Y2FsZSgxIC8gc2NhbGUsIDEgLyBzY2FsZSk7CisgICAgc2NhbGVOb2RlLT5zZXRNYXRyaXgoc2Nh
bGVNYXRyaXgpOworICAgIC8vIFByZXBlbmQgaW5zdGVhZCBvZiBhcHBlbmQgdG8gcGFpbnQgdGhl
IG5ldywgaW5jb21wbGV0ZSwgc2NhbGUgYmVmb3JlL2JlaGluZCB0aGUgcHJldmlvdXMgb25lLgor
ICAgIGl0ZW1Ob2RlLT5wcmVwZW5kQ2hpbGROb2RlKHNjYWxlTm9kZSk7CisKKyAgICBsYXN0U2Nh
bGUgPSBzY2FsZTsKKyAgICBsYXN0U2NhbGVOb2RlID0gc2NhbGVOb2RlOworICAgIHJldHVybiBs
YXN0U2NhbGVOb2RlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvU0dBZ2VudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuaApp
bmRleCBjOWM0NzcxN2NkOTVhYmU3OTAwODRiYjFhOWM2N2I3MmMwNzNlMWMwLi5hZjJmOTM5NzU5
YjJiZmQ1NTFiODQ4MjU4YmJkOTAyNjYyNTg5YThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9TR0FnZW50LmgKQEAgLTM1LDMzICszNSw0MCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgTm9kZVVwZGF0ZTsKIGNsYXNzIFBhZ2VOb2RlOworY2xhc3MgU0dUaWxlTm9kZTsKIAogLy8g
VGFrZXMgY2FyZSBvZiB0YWtpbmcgdXBkYXRlIHJlcXVlc3RzIHRoZW4gZnVsZmlsbGluZyB0aGVt
IGFzeW5jaHJvbm91c2x5IG9uIHRoZSBzY2VuZSBncmFwaCB0aHJlYWQuCiBjbGFzcyBTR0FnZW50
IHsKIHB1YmxpYzoKICAgICBTR0FnZW50KFFTR0l0ZW0qKTsKIAotICAgIGludCBjcmVhdGVUaWxl
Tm9kZShpbnQgcGFyZW50Tm9kZUlEKTsKLSAgICBpbnQgY3JlYXRlU2NhbGVOb2RlKGludCBwYXJl
bnROb2RlSUQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZU5vZGUoaW50IG5vZGVJRCk7
Ci0gICAgdm9pZCBzZXROb2RlVGV4dHVyZShpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIHRleHR1
cmUsIGNvbnN0IFFSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCk7Cisg
ICAgaW50IGNyZWF0ZVRpbGVOb2RlKGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVO
b2RlKGludCBub2RlSUQpOworICAgIHZvaWQgc2V0Tm9kZUJhY2tCdWZmZXIoaW50IG5vZGVJRCwg
Y29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVjdCwgY29uc3QgUVJl
Y3QmIHRhcmdldFJlY3QpOworICAgIHZvaWQgc3dhcFRpbGVCdWZmZXJzKCk7CiAKICAgICAvLyBD
YWxsZWQgYnkgdGhlIFFTR0l0ZW0uCiAgICAgdm9pZCB1cGRhdGVQYWludE5vZGUoUVNHTm9kZSog
aXRlbU5vZGUpOworICAgIGJvb2wgaXNTd2FwUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNT
d2FwUGVuZGluZzsgfQogCiBwcml2YXRlOgorICAgIFFTR05vZGUqIGdldFNjYWxlTm9kZShmbG9h
dCBzY2FsZSwgUVNHTm9kZSogaXRlbU5vZGUpOworCiAgICAgUVNHSXRlbSogaXRlbTsKICAgICBE
ZXF1ZTxPd25QdHI8Tm9kZVVwZGF0ZT4gPiBub2RlVXBkYXRlc1F1ZXVlOwotICAgIEhhc2hNYXA8
aW50LCBRU0dOb2RlKj4gbm9kZXM7CisgICAgSGFzaE1hcDxpbnQsIFNHVGlsZU5vZGUqPiBub2Rl
czsKKyAgICBmbG9hdCBsYXN0U2NhbGU7CisgICAgUVNHTm9kZSogbGFzdFNjYWxlTm9kZTsKICAg
ICBpbnQgbmV4dE5vZGVJRDsKKyAgICBib29sIG1faXNTd2FwUGVuZGluZzsKIH07CiAKIHN0cnVj
dCBOb2RlVXBkYXRlIHsKICAgICBlbnVtIFR5cGUgewogICAgICAgICBDcmVhdGVUaWxlLAotICAg
ICAgICBDcmVhdGVTY2FsZSwKLSAgICAgICAgUmVtb3ZlLAotICAgICAgICBTZXRUZXh0dXJlCisg
ICAgICAgIFJlbW92ZVRpbGUsCisgICAgICAgIFNldEJhY2tCdWZmZXIsCisgICAgICAgIFN3YXBU
aWxlQnVmZmVycwogICAgIH07CiAgICAgTm9kZVVwZGF0ZShUeXBlIHR5cGUpCiAgICAgICAgIDog
dHlwZSh0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGls
ZU5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuY3BwCmlu
ZGV4IDQ3N2I4YzMzN2EzZjljZWVkOTUxZmNmNjE1Yjg1N2RlZjNmMDZlYjMuLjU2N2MwMzIyYzcy
NGRiOTYwMDQ3MmU3OGM2OTAxYzhmOWQxOWI0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvU0dUaWxlTm9kZS5jcHAKQEAgLTIwLDQzICsyMCw1NyBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU0dUaWxlTm9kZS5oIgorI2luY2x1ZGUgPFFTR0VuZ2luZT4KKyNp
bmNsdWRlIDxRU0dGbGF0Q29sb3JNYXRlcmlhbD4KKyNpbmNsdWRlIDxRU0dUZXh0dXJlPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotU0dUaWxlTm9kZTo6U0dUaWxlTm9kZSgpCi0gICAgOiBtX2dl
b21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZhdWx0QXR0cmlidXRlc19UZXh0dXJlZFBvaW50MkQoKSwg
NCkKK1NHVGlsZU5vZGU6OlNHVGlsZU5vZGUoUVNHRW5naW5lKiBlbmdpbmUpCisgICAgOiBtX2Vu
Z2luZShlbmdpbmUpCisgICAgLCBtX2dlb21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZhdWx0QXR0cmli
dXRlc19UZXh0dXJlZFBvaW50MkQoKSwgNCkKKyAgICAsIG1fbWF0ZXJpYWwoMCkKKyAgICAsIG1f
b3BhcXVlTWF0ZXJpYWwoMCkKIHsKKyAgICBzZXRGbGFncyhPd25zTWF0ZXJpYWwgfCBPd25zT3Bh
cXVlTWF0ZXJpYWwpOwogICAgIHNldEdlb21ldHJ5KCZtX2dlb21ldHJ5KTsKLSAgICBzZXRNYXRl
cmlhbCgmbV9tYXRlcmlhbCk7Ci0gICAgc2V0T3BhcXVlTWF0ZXJpYWwoJm1fb3BhcXVlTWF0ZXJp
YWwpOworICAgIHNldE1hdGVyaWFsKG5ldyBRU0dGbGF0Q29sb3JNYXRlcmlhbCk7CisgICAgc2V0
T3BhcXVlTWF0ZXJpYWwobmV3IFFTR0ZsYXRDb2xvck1hdGVyaWFsKTsKIH0KIAotdm9pZCBTR1Rp
bGVOb2RlOjpzZXRUYXJnZXRSZWN0KGNvbnN0IFFSZWN0RiYgcikKK3ZvaWQgU0dUaWxlTm9kZTo6
c2V0QmFja0J1ZmZlcihjb25zdCBRSW1hZ2UmIGJhY2tCdWZmZXIsIGNvbnN0IFFSZWN0RiYgc291
cmNlUmVjdCwgY29uc3QgUVJlY3RGJiB0YXJnZXRSZWN0KQogewotICAgIGlmIChtX3RhcmdldFJl
Y3QgPT0gcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGFyZ2V0UmVjdCA9IHI7Ci0gICAgUVNH
R2VvbWV0cnk6OnVwZGF0ZVRleHR1cmVkUmVjdEdlb21ldHJ5KCZtX2dlb21ldHJ5LCBtX3Rhcmdl
dFJlY3QsIG1fc291cmNlUmVjdCk7Ci0gICAgbWFya0RpcnR5KERpcnR5R2VvbWV0cnkpOwotfQor
ICAgIG1fYmFja0J1ZmZlclRleHR1cmUucmVzZXQobV9lbmdpbmUtPmNyZWF0ZVRleHR1cmVGcm9t
SW1hZ2UoYmFja0J1ZmZlcikpOworICAgIG1fYmFja0J1ZmZlclRhcmdldFJlY3QgPSB0YXJnZXRS
ZWN0OworICAgIG1fYmFja0J1ZmZlclNvdXJjZVJlY3QgPSBtX2JhY2tCdWZmZXJUZXh0dXJlLT5j
b252ZXJ0VG9Ob3JtYWxpemVkU291cmNlUmVjdChzb3VyY2VSZWN0KTsKIAotdm9pZCBTR1RpbGVO
b2RlOjpzZXRTb3VyY2VSZWN0KGNvbnN0IFFSZWN0RiYgcikKLXsKLSAgICBpZiAobV9zb3VyY2VS
ZWN0ID09IHIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3NvdXJjZVJlY3QgPSByOwotICAgIFFT
R0dlb21ldHJ5Ojp1cGRhdGVUZXh0dXJlZFJlY3RHZW9tZXRyeSgmbV9nZW9tZXRyeSwgbV90YXJn
ZXRSZWN0LCBtX3NvdXJjZVJlY3QpOwotICAgIG1hcmtEaXJ0eShEaXJ0eUdlb21ldHJ5KTsKKyAg
ICAvLyBGb3JjZSB0aGUgdGV4dHVyZSB1cGxvYWQuCisgICAgbV9iYWNrQnVmZmVyVGV4dHVyZS0+
YmluZCgpOwogfQogCi12b2lkIFNHVGlsZU5vZGU6OnNldFRleHR1cmUoUVNHVGV4dHVyZSogdGV4
dHVyZSkKK3ZvaWQgU0dUaWxlTm9kZTo6c3dhcElmTmVlZGVkKCkKIHsKLSAgICBpZiAobV9tYXRl
cmlhbC50ZXh0dXJlKCkgPT0gdGV4dHVyZSkKKyAgICBpZiAoIW1fYmFja0J1ZmZlclRleHR1cmUp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX21hdGVyaWFsLnNldFRleHR1cmUodGV4dHVyZSk7Ci0g
ICAgbV9vcGFxdWVNYXRlcmlhbC5zZXRUZXh0dXJlKHRleHR1cmUpOwotICAgIG1fdGV4dHVyZS5y
ZXNldCh0ZXh0dXJlKTsKKworICAgIGlmICghbV9vcGFxdWVNYXRlcmlhbCkgeworICAgICAgICBt
X29wYXF1ZU1hdGVyaWFsID0gbmV3IFFTR09wYXF1ZVRleHR1cmVNYXRlcmlhbDsKKyAgICAgICAg
c2V0T3BhcXVlTWF0ZXJpYWwobV9vcGFxdWVNYXRlcmlhbCk7CisgICAgfQorICAgIGlmICghbV9t
YXRlcmlhbCkgeworICAgICAgICBtX21hdGVyaWFsID0gbmV3IFFTR1RleHR1cmVNYXRlcmlhbDsK
KyAgICAgICAgc2V0TWF0ZXJpYWwobV9tYXRlcmlhbCk7CisgICAgfQorICAgIEFTU0VSVChtX21h
dGVyaWFsLT50ZXh0dXJlKCkgIT0gbV9iYWNrQnVmZmVyVGV4dHVyZS5kYXRhKCkpOworICAgIG1f
bWF0ZXJpYWwtPnNldFRleHR1cmUobV9iYWNrQnVmZmVyVGV4dHVyZS5kYXRhKCkpOworICAgIG1f
b3BhcXVlTWF0ZXJpYWwtPnNldFRleHR1cmUobV9iYWNrQnVmZmVyVGV4dHVyZS5kYXRhKCkpOwog
ICAgIG1hcmtEaXJ0eShEaXJ0eU1hdGVyaWFsKTsKKworICAgIFFTR0dlb21ldHJ5Ojp1cGRhdGVU
ZXh0dXJlZFJlY3RHZW9tZXRyeSgmbV9nZW9tZXRyeSwgbV9iYWNrQnVmZmVyVGFyZ2V0UmVjdCwg
bV9iYWNrQnVmZmVyU291cmNlUmVjdCk7CisgICAgbWFya0RpcnR5KERpcnR5R2VvbWV0cnkpOwor
CisgICAgbV9mcm9udEJ1ZmZlclRleHR1cmUuc3dhcChtX2JhY2tCdWZmZXJUZXh0dXJlKTsKKyAg
ICBtX2JhY2tCdWZmZXJUZXh0dXJlLnJlc2V0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvU0dUaWxlTm9kZS5oCmluZGV4IDE5YWI2NWJjYWM3ODRjZWYzZjY0NTY5YjU4MTk4
YWE1MWU3NmNjODcuLmMxNjI5NmQwYzRiYTU5MGI4N2UzMWIxZGFkMDdjODcxN2IwMTYxZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaApAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgPFFTR1RleHR1cmVNYXRlcmlhbD4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCitj
bGFzcyBRU0dFbmdpbmU7CiBjbGFzcyBRU0dUZXh0dXJlOwogUVRfRU5EX05BTUVTUEFDRQogCkBA
IC0zMywyMSArMzQsMjAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNHVGlsZU5vZGUg
OiBwdWJsaWMgUVNHR2VvbWV0cnlOb2RlIHsKIHB1YmxpYzoKLSAgICBTR1RpbGVOb2RlKCk7Ci0K
LSAgICB2b2lkIHNldFRhcmdldFJlY3QoY29uc3QgUVJlY3RGJik7Ci0gICAgdm9pZCBzZXRTb3Vy
Y2VSZWN0KGNvbnN0IFFSZWN0RiYpOwotICAgIC8vIFRoaXMgdGFrZXMgb3duZXJzaGlwIG9mIHRo
ZSB0ZXh0dXJlLgotICAgIHZvaWQgc2V0VGV4dHVyZShRU0dUZXh0dXJlKik7CisgICAgU0dUaWxl
Tm9kZShRU0dFbmdpbmUqKTsKKyAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgUUltYWdlJiwg
Y29uc3QgUVJlY3RGJiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdEYmIHRhcmdldFJlY3QpOworICAg
IHZvaWQgc3dhcElmTmVlZGVkKCk7CiAKIHByaXZhdGU6CisgICAgUVNHRW5naW5lKiBtX2VuZ2lu
ZTsKICAgICBRU0dHZW9tZXRyeSBtX2dlb21ldHJ5OwotICAgIFFTR09wYXF1ZVRleHR1cmVNYXRl
cmlhbCBtX29wYXF1ZU1hdGVyaWFsOwotICAgIFFTR1RleHR1cmVNYXRlcmlhbCBtX21hdGVyaWFs
OwotICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBRU0dUZXh0
dXJlTWF0ZXJpYWwqIG1fbWF0ZXJpYWw7CisgICAgUVNHT3BhcXVlVGV4dHVyZU1hdGVyaWFsKiBt
X29wYXF1ZU1hdGVyaWFsOworICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fZnJvbnRC
dWZmZXJUZXh0dXJlOworICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fYmFja0J1ZmZl
clRleHR1cmU7CiAKLSAgICBRUmVjdEYgbV90YXJnZXRSZWN0OwotICAgIFFSZWN0RiBtX3NvdXJj
ZVJlY3Q7CisgICAgUVJlY3RGIG1fYmFja0J1ZmZlclRhcmdldFJlY3Q7CisgICAgUVJlY3RGIG1f
YmFja0J1ZmZlclNvdXJjZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcAppbmRleCAzMGFlYTZh
MzkwNzYyZDMxMDdlNGMyODk5NzA4MTljMTcwNzg1ZjUwLi4yMzY4Njk0NTUwODIwMGVlNDhkMTBj
ZGQ4MjY3Yzg2MWMwNTM0OTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCiAK
KyNpbmNsdWRlICJTR0FnZW50LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5j
bHVkZSAiVG91Y2hWaWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogCkBAIC00Nyw0
ICs0OSwzNSBAQCBXZWJQYWdlUHJveHkqIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFnZSgpCiAg
ICAgcmV0dXJuIG1fd2ViUGFnZVByb3h5OwogfQogCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQor
eworICAgIGludCBub2RlSUQgPSBtX3dlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpLT5jcmVhdGVU
aWxlTm9kZSh1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yKTsKKyAgICBtX3RpbGVzVG9Ob2Rl
cy5zZXQodGlsZUlELCBub2RlSUQpOworICAgIHVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGVJbmZv
KTsKK30KKwordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRpbGUoaW50IHRpbGVJ
RCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBpbnQgbm9kZUlEID0gbV90
aWxlc1RvTm9kZXMuZ2V0KHRpbGVJRCk7CisgICAgQVNTRVJUKG5vZGVJRCk7CisKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRh
dGVJbmZvLmJpdG1hcEhhbmRsZSk7CisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2b2lkIHRoaXMg
Y29weSBieSBjYXJ5aW5nIHRoZSBTaGFyZWFibGVCaXRtYXAgYWxsIHRoZSB3YXkgdXAgdG8gdGV4
dHVyZSB1cGxvYWRpbmcuCisgICAgLy8gICAgICAgIEN1cnJlbnRseSB3b24ndCB3b3JrIHNpbmNl
IHRoZSBTaGFyZWRNZW1vcnkgaGFuZGxlIGlzIG93bmVkIGJ5IHVwZGF0ZUluZm8uCisgICAgUUlt
YWdlIGltYWdlKGJpdG1hcC0+Y3JlYXRlUUltYWdlKCkuY29weSgpKTsKKyAgICBRUmVjdCBzb3Vy
Y2VSZWN0KDAsIDAsIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy53aWR0aCgpLCB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHMuaGVpZ2h0KCkpOworICAgIG1fd2ViVmlldy0+c2NlbmVHcmFw
aEFnZW50KCktPnNldE5vZGVCYWNrQnVmZmVyKG5vZGVJRCwgaW1hZ2UsIHNvdXJjZVJlY3QsIHVw
ZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcyk7Cit9CisKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVBy
b3h5OjpkaWRSZW5kZXJGcmFtZSgpCit7CisgICAgbV93ZWJWaWV3LT5zY2VuZUdyYXBoQWdlbnQo
KS0+c3dhcFRpbGVCdWZmZXJzKCk7Cit9CisKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpy
ZW1vdmVUaWxlKGludCB0aWxlSUQpCit7CisgICAgaW50IG5vZGVJRCA9IG1fdGlsZXNUb05vZGVz
LnRha2UodGlsZUlEKTsKKyAgICBtX3dlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpLT5yZW1vdmVU
aWxlTm9kZShub2RlSUQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0NzlhZThkOGNlMThhNDNlZjczMjk1YmNk
OTAxYjYyNTQ3ODg4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRpbGVkRHJhd2luZ0FyZWFUaWxl
LmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJTR0FnZW50Lmgi
Ci0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJl
YVByb3h5LmgiCi0jaW5jbHVkZSAiVG91Y2hWaWV3SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiVXBk
YXRlSW5mby5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgotI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRT2JqZWN0Pgot
I2luY2x1ZGUgPFFQYWludGVyPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVRpbGVkRHJhd2luZ0FyZWFUaWxlOjpUaWxlZERyYXdpbmdBcmVhVGls
ZShUaWxlZERyYXdpbmdBcmVhUHJveHkqIHByb3h5LCBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcs
IGNvbnN0IENvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQotICAgIDogbV9wcm94eShwcm94eSkK
LSAgICAsIG1fY29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkKLSAgICAsIG1fcmVjdChwcm94eS0+
dGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKSkKLSAgICAsIG1faGFzVXBkYXRl
UGVuZGluZyhmYWxzZSkKLSAgICAsIG1fc2dBZ2VudCh3ZWJWaWV3LT5zY2VuZUdyYXBoQWdlbnQo
KSkKLSAgICAsIG1fbm9kZUlEKDApCi0gICAgLCBtX3BhcmVudE5vZGVJRCgwKQotICAgICwgbV9p
c0JhY2tCdWZmZXJWYWxpZChmYWxzZSkKLSAgICAsIG1fZGlydHlSZWdpb24obV9yZWN0KQotewot
ICAgIHN0YXRpYyBpbnQgaWQgPSAwOwotICAgIG1fSUQgPSArK2lkOwotICAgIG1fcHJveHktPnJl
Z2lzdGVyVGlsZShtX0lELCB0aGlzKTsKLSNpZmRlZiBUSUxFX0RFQlVHX0xPRwotICAgIHFEZWJ1
ZygpIDw8ICJkZWxldGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKLSNlbmRpZgotfQotCi1UaWxlZERy
YXdpbmdBcmVhVGlsZTo6flRpbGVkRHJhd2luZ0FyZWFUaWxlKCkKLXsKLSNpZmRlZiBUSUxFX0RF
QlVHX0xPRwotICAgIHFEZWJ1ZygpIDw8ICJkZWxldGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKLSNl
bmRpZgotICAgIGRpc2FibGVVcGRhdGVzKCk7Ci0gICAgaWYgKG1fbm9kZUlEKQotICAgICAgICBt
X3NnQWdlbnQtPnJlbW92ZU5vZGUobV9ub2RlSUQpOwotfQotCi1ib29sIFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjppc0RpcnR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fZGlydHlSZWdpb24uaXNF
bXB0eSgpOwotfQotCi1ib29sIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjppc1JlYWR5VG9QYWludCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9ub2RlSUQ7Ci19Ci0KLWJvb2wgVGlsZWREcmF3aW5n
QXJlYVRpbGU6Omhhc1JlYWR5QmFja0J1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNC
YWNrQnVmZmVyVmFsaWQgJiYgIW1faGFzVXBkYXRlUGVuZGluZzsKLX0KLQotdm9pZCBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0g
ICAgSW50UmVjdCB0aWxlRGlydHlSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0
KTsKLSAgICBpZiAodGlsZURpcnR5UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fZGlydHlSZWdpb24gKz0gdGlsZURpcnR5UmVjdDsKLX0KLQotdm9pZCBUaWxlZERyYXdp
bmdBcmVhVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCi17Ci0gICAgSW50UmVj
dCBvbGRSZWN0ID0gbV9yZWN0OwotICAgIG1fcmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9u
KCksIG5ld1NpemUpOwotICAgIGlmIChtX3JlY3QubWF4WCgpID4gb2xkUmVjdC5tYXhYKCkpCi0g
ICAgICAgIGludmFsaWRhdGUoSW50UmVjdChvbGRSZWN0Lm1heFgoKSwgb2xkUmVjdC55KCksIG1f
cmVjdC5tYXhYKCkgLSBvbGRSZWN0Lm1heFgoKSwgbV9yZWN0LmhlaWdodCgpKSk7Ci0gICAgaWYg
KG1fcmVjdC5tYXhZKCkgPiBvbGRSZWN0Lm1heFkoKSkKLSAgICAgICAgaW52YWxpZGF0ZShJbnRS
ZWN0KG9sZFJlY3QueCgpLCBvbGRSZWN0Lm1heFkoKSwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5t
YXhZKCkgLSBvbGRSZWN0Lm1heFkoKSkpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxl
Ojpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb25j
ZSB3ZSBjYW4gdGlnaHQgaW52YWxpZGF0ZWQgdGlsZSB1cGRhdGVzIHRvZ2V0aGVyLgotfQotCi12
b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
LXZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0KQotewotICAgIEFTU0VSVChtX3Byb3h5KTsKLSAgICBt
X2lzQmFja0J1ZmZlclZhbGlkID0gdHJ1ZTsKLSAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSBmYWxz
ZTsKLQotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKLSAgICBRSW1hZ2UgaW1hZ2UoYml0
bWFwLT5jcmVhdGVRSW1hZ2UoKSk7Ci0gICAgY29uc3QgSW50UmVjdCYgdXBkYXRlQ2h1bmtSZWN0
ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOwotCi0gICAgY29uc3QgUVNpemUgdGlsZVNp
emUgPSBtX3Byb3h5LT50aWxlU2l6ZSgpOwotCi0gICAgaWYgKG1fYmFja0J1ZmZlci5zaXplKCkg
IT0gdGlsZVNpemUpIHsKLSAgICAgICAgbV9iYWNrQnVmZmVyID0gUUltYWdlKHRpbGVTaXplLCBp
bWFnZS5mb3JtYXQoKSk7Ci0gICAgICAgIG1fYmFja0J1ZmZlci5maWxsKFF0Ojp0cmFuc3BhcmVu
dCk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBRUGFpbnRlciBwYWludGVyKCZtX2JhY2tCdWZm
ZXIpOwotICAgICAgICBJbnRTaXplIGRyYXdQb2ludCA9IHVwZGF0ZUNodW5rUmVjdC5sb2NhdGlv
bigpIC0gbV9yZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgIHBhaW50ZXIuZHJhd0ltYWdlKFFQb2lu
dChkcmF3UG9pbnQud2lkdGgoKSwgZHJhd1BvaW50LmhlaWdodCgpKSwgaW1hZ2UpOwotICAgIH0K
LQotICAgIGlmICghbV9ub2RlSUQpCi0gICAgICAgIG1fbm9kZUlEID0gbV9zZ0FnZW50LT5jcmVh
dGVUaWxlTm9kZShtX3BhcmVudE5vZGVJRCk7Ci0gICAgQVNTRVJUKG1fbm9kZUlEKTsKLSAgICBR
UmVjdCBzb3VyY2VSZWN0KDAsIDAsIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCkpOwot
ICAgIG1fc2dBZ2VudC0+c2V0Tm9kZVRleHR1cmUobV9ub2RlSUQsIG1fYmFja0J1ZmZlciwgc291
cmNlUmVjdCwgbV9yZWN0KTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6ZGlzYWJs
ZVVwZGF0ZXMoKQotewotICAgIGlmICghbV9wcm94eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faGFzVXBkYXRlUGVuZGluZykgewotICAgICAgICBtX3Byb3h5LT5jYW5jZWxUaWxlVXBk
YXRlKG1fSUQpOwotICAgICAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBtX3Byb3h5LT51bnJlZ2lzdGVyVGlsZShtX0lEKTsKLSAgICBtX2JhY2tCdWZmZXIgPSBR
SW1hZ2UoKTsKLSAgICBtX2lzQmFja0J1ZmZlclZhbGlkID0gZmFsc2U7Ci0gICAgbV9wcm94eSA9
IDA7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnNldFBhcmVudE5vZGVJRChpbnQg
bm9kZUlEKQotewotICAgIEFTU0VSVCghbV9ub2RlSUQpOwotICAgIG1fcGFyZW50Tm9kZUlEID0g
bm9kZUlEOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjp1cGRhdGVCYWNrQnVmZmVy
KCkKLXsKLSAgICBBU1NFUlQobV9wcm94eSk7Ci0gICAgaWYgKGlzUmVhZHlUb1BhaW50KCkgJiYg
IWlzRGlydHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IGluZGl2aWR1YWwg
cmVjdHMKLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1fZGlydHlSZWdpb24uYm91bmRpbmdSZWN0
KCk7Ci0gICAgbV9kaXJ0eVJlZ2lvbiA9IFFSZWdpb24oKTsKLQotI2lmZGVmIFRJTEVfREVCVUdf
TE9HCi0gICAgcURlYnVnKCkgPDwgInJlcXVlc3RpbmcgdGlsZSB1cGRhdGUgaWQ9IiA8PCBtX0lE
IDw8ICIgcmVjdD0iIDw8IFFSZWN0KGRpcnR5UmVjdCkgPDwgIiBzY2FsZT0iIDw8IG1fcHJveHkt
PmNvbnRlbnRzU2NhbGUoKTsKLSNlbmRpZgotICAgIGlmICghbV9wcm94eS0+cGFnZSgpLT5wcm9j
ZXNzKCktPmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJveHktPnJlcXVlc3RU
aWxlVXBkYXRlKG1fSUQsIGRpcnR5UmVjdCk7Ci0KLSAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSB0
cnVlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXRv
dWNod2VicGFnZXByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3
ZWJwYWdlcHJveHkuY3BwCmluZGV4IDk4MmNiNDBmYzlkN2FjY2UwYWQzZGZkOWJlZmNmMzA2NzE5
MDVjZmEuLjQ0MWU5MGQ1MmYyZmE3ZjYzN2ZiYjk0ZmMwMjQ1NTFlZjIzMTkwY2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuY3BwCkBA
IC0xMTIsMyArMTEyLDggQEAgdm9pZCBRVG91Y2hXZWJQYWdlUHJveHk6OnNldENvbnRlbnRzU2Nh
bGUocXJlYWwgc2NhbGUpCiB7CiAgICAgZHJhd2luZ0FyZWEoKS0+c2V0Q29udGVudHNTY2FsZShz
Y2FsZSk7CiB9CisKK3ZvaWQgUVRvdWNoV2ViUGFnZVByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQor
eworICAgIGRyYXdpbmdBcmVhKCktPnJlbmRlck5leHRGcmFtZSgpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBhZ2Vwcm94eS5oCmluZGV4IDc5ZWIwZTY2
ZGVkYmMyNWNhMjZhYmFkYzk3MzQzYjAyN2ViYTI1N2YuLjEyMjhiMzkzNzllZTczNTQxNTRiMjU2
MzhiZDY2ZmViNzU2NTU4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9xdG91Y2h3ZWJwYWdlcHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
cXRvdWNod2VicGFnZXByb3h5LmgKQEAgLTQzLDYgKzQzLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0UmVzaXplc1RvQ29udGVudHNVc2luZ0xheW91dFNpemUoY29uc3QgUVNpemUmIHRhcmdldExh
eW91dFNpemUpOwogICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFFQb2lu
dCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShxcmVhbCk7CisgICAgdm9pZCByZW5kZXJO
ZXh0RnJhbWUoKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnQo
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiBhcmVhKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5kZXgg
NDRlYmI2OWNkYzJkZGQyNWFhMTI1ODNhYmRiOTVkZjExMzhjNjI3NC4uOTEyZjU0NGI2NGEyNGJl
MzVhMWNkODgwOWVmNzg4ODQ0ZmE5MjZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTQ4MSw3ICs0ODEs
NiBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvU0dBZ2VudC5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2lu
Z0FyZWFQcm94eVF0LmNwcCBcCi0gICAgVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFUaWxl
UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvV2Vi
Q29udGV4dFF0LmNwcCBcCkBAIC01NjAsNiArNTU5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXkuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIFwKQEAgLTU3MSw3ICs1NzEs
NiBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViSW5zcGVjdG9yUXQuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBcCi0gICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L1RpbGVkRHJhd2luZ0FyZWFRdC5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggZDliZWQ5
NzJhNjM0NmQ5NTAxOWUzZmUzNDhhZTgxMWVhMzU0YThlNC4uYWQxYzE3NTE5NzVmZmI3YjUxMWRk
MzQ2OTE0NDU4MzI0NmFlMjRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTk5LDggKzk5LDkgQEAgcHJpdmF0ZToKIAogI2lmIEVO
QUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHZpZXdTaXplKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2Vs
VGlsZVVwZGF0ZShpbnQgdGlsZUlEKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFRpbGVV
cGRhdGUoaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0LCBmbG9h
dCBzY2FsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2Nh
bGUoZmxvYXQgc2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdGFrZVNuYXBzaG90KGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHRhcmdldFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvbnRlbnRzUmVjdCkgeyB9CiAj
ZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5kZXggNTliYmY1OGYxNzVkZmUwMjJlNmU0MTQ4
YzYzZTM0ZTk0ZmEwMTk5ZC4uOTUzZDM1OWU5YWYyMmY5OTM0MDAxYmYyZDJkM2M5YWIzYWQ3Nzc2
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbgpAQCAtMjgsOCArMjgsOSBAQCBtZXNzYWdlcyAtPiBEcmF3
aW5nQXJlYSB7CiAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBTZXRTaXpl
KFdlYkNvcmU6OkludFNpemUgdmlld1NpemUpCi0gICAgUmVxdWVzdFRpbGVVcGRhdGUoaW50IHRp
bGVJRCwgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3QsIGZsb2F0IHNjYWxlKQotICAgIENhbmNl
bFRpbGVVcGRhdGUoaW50IHRpbGVJRCkKKyAgICBTZXRWaXNpYmxlQ29udGVudFJlY3QoV2ViQ29y
ZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3QpCisgICAgU2V0Q29udGVudHNTY2FsZShmbG9h
dCBzY2FsZSkKKyAgICBSZW5kZXJOZXh0RnJhbWUoKQogICAgIFRha2VTbmFwc2hvdChXZWJDb3Jl
OjpJbnRTaXplIHNpemUsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNSZWN0KQogI2VuZGlmCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3ZTA4M2Y3ZDEy
MTA2NGM3ZTMyMzhhNTIyMzEyNmRhZDUxYjViMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNw
cApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgorCisj
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1RpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZTo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZUNsaWVudCogY2xpZW50LCBUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUs
IGNvbnN0IENvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQorICAgIDogbV9jbGllbnQoY2xpZW50
KQorICAgICwgbV90aWxlZEJhY2tpbmdTdG9yZSh0aWxlZEJhY2tpbmdTdG9yZSkKKyAgICAsIG1f
Y29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkKKyAgICAsIG1fcmVjdCh0aWxlZEJhY2tpbmdTdG9y
ZS0+dGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKSkKKyAgICAsIG1fSUQoMCkK
KyAgICAsIG1fZGlydHlSZWN0KG1fcmVjdCkKK3sKK30KKworVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlOjp+VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlKCkKK3sKKyAgICBpZiAobV9JRCkK
KyAgICAgICAgbV9jbGllbnQtPnJlbW92ZVRpbGUobV9JRCk7Cit9CisKK2Jvb2wgVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlOjppc0RpcnR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fZGly
dHlSZWN0LmlzRW1wdHkoKTsKK30KKwordm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6
OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIEludFJlY3QgdGls
ZURpcnR5UmVjdCA9IGludGVyc2VjdGlvbihkaXJ0eVJlY3QsIG1fcmVjdCk7CisgICAgaWYgKHRp
bGVEaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RpcnR5UmVj
dC51bml0ZSh0aWxlRGlydHlSZWN0KTsKK30KKworVmVjdG9yPEludFJlY3Q+IFRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCit7CisgICAgaWYgKCFpc0RpcnR5
KCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKKworICAgIC8vIEZJWE1FOiBP
bmx5IHVzZSBhIGxvY2FsIGJ1ZmZlciB3aGVuIHdlIGtub3cgdGhlIHRpbGUgaXMgYW5pbWF0ZWQg
KGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkYXRlKQorICAgIC8vICAgICAgICBhbmQgZGVzdHJveSBp
dCBhZnRlciBhIGZldyBzZWNvbmRzIG9mIGluYWN0aXZpdHkuIFdlIGNhbiByZW5kZXIgZGlyZWN0
bHkgdG8gc2hhcmVkCisgICAgLy8gICAgICAgIG1lbW9yeSBpbiBvdGhlciBjYXNlcy4KKyAgICBp
ZiAoIW1fbG9jYWxCdWZmZXIpIHsKKyAgICAgICAgbV9sb2NhbEJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUobV9yZWN0LnNpemUoKSk7CisgICAgICAgIG1fbG9jYWxCdWZmZXItPmNvbnRleHQo
KS0+dHJhbnNsYXRlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CisgICAgICAgIG1fbG9jYWxC
dWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKG1fdGlsZWRCYWNraW5nU3RvcmUtPmNv
bnRlbnRzU2NhbGUoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7Cisg
ICAgfQorICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHcmFwaGljc0NvbnRleHQgb24gdGhl
IEltYWdlQnVmZmVyIGFjdHMgc3luY2hyb25vdXNseQorICAgIC8vIGZvciB1cyB0byBiZSBhYmxl
IHRvIGRyYXcgdGhpcyBidWZmZXIgb24gdGhlIFNoYXJlYWJsZUJpdG1hcCByaWdodCBhZnRlci4K
KyAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5jbGllbnQoKS0+dGlsZWRCYWNraW5nU3RvcmVQYWlu
dChtX2xvY2FsQnVmZmVyLT5jb250ZXh0KCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPm1hcFRvQ29u
dGVudHMobV9kaXJ0eVJlY3QpKTsKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1h
cCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKG1fcmVjdC5zaXplKCksIFNoYXJl
YWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
Z3JhcGhpY3NDb250ZXh0KGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOworICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbG9jYWxCdWZmZXIuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIEludFBvaW50KDAsIDApKTsKKworICAgIFVwZGF0ZUluZm8gdXBkYXRl
SW5mbzsKKyAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBtX3JlY3Q7CisgICAgdXBk
YXRlSW5mby51cGRhdGVTY2FsZUZhY3RvciA9IG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRz
U2NhbGUoKTsKKyAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRs
ZSk7CisKKyAgICBzdGF0aWMgaW50IGlkID0gMDsKKyAgICBpZiAoIW1fSUQpIHsKKyAgICAgICAg
bV9JRCA9ICsraWQ7CisgICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUlu
Zm8pOworICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+dXBkYXRlVGlsZShtX0lELCB1cGRh
dGVJbmZvKTsKKworICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOworICAgIHJldHVybiBWZWN0
b3I8SW50UmVjdD4oKTsKK30KKwordm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnN3
YXBCYWNrQnVmZmVyVG9Gcm9udCgpCit7CisgICAgLy8gSGFuZGxlZCBieSB0aWxlZEJhY2tpbmdT
dG9yZVBhaW50RW5kLgorfQorCitib29sIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aXNS
ZWFkeVRvUGFpbnQoKSBjb25zdAoreworICAgIHJldHVybiAhIW1fSUQ7Cit9CisKK3ZvaWQgVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OlRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUJhY2tlbmQoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiBjbGllbnQp
CisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6VGls
ZT4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRlVGlsZShXZWJDb3Jl
OjpUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IFdlYkNvcmU6OlRp
bGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQoreworICAgIHJldHVybiBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGU6OmNyZWF0ZShtX2NsaWVudCwgdGlsZWRCYWNraW5nU3RvcmUsIHRp
bGVDb29yZGluYXRlKTsKK30KKwordm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNr
ZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVElMRURfQkFDS0lOR19TVE9SRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjkyNDMzYmE1NzEyMDIzYjc0YzY0MjY0ZGY3YzAyN2ZiM2E0MzI0ZDgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVfaAorI2RlZmlu
ZSBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVfaAorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCisKKyNpbmNsdWRlICJUaWxlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3Rv
cmUuaCIKKyNpbmNsdWRlICJXZWJDb3JlL0ludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZTsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVu
dDsKK2NsYXNzIFVwZGF0ZUluZm87CisKK2NsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZSA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUaWxlPiBjcmVhdGUoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiBjbGllbnQs
IFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgQ29v
cmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGUoY2xpZW50LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5h
dGUpKTsgfQorICAgIH5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoKTsKKworICAgIGJvb2wg
aXNEaXJ0eSgpIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CisgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHVwZGF0ZUJhY2tCdWZmZXIoKTsK
KyAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOworICAgIGJvb2wgaXNSZWFkeVRvUGFp
bnQoKSBjb25zdDsKKyAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIGNvbnN0IENvb3JkaW5hdGUmIGNvb3JkaW5h
dGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAg
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNs
aWVudCosIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgQ29vcmRpbmF0ZSYpOwor
CisgICAgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBX
ZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogbV90aWxlZEJhY2tpbmdTdG9yZTsKKyAgICBDb29y
ZGluYXRlIG1fY29vcmRpbmF0ZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcmVjdDsKKworICAg
IGludCBtX0lEOworICAgIFdlYkNvcmU6OkludFJlY3QgbV9kaXJ0eVJlY3Q7CisKKyAgICBPd25Q
dHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1fbG9jYWxCdWZmZXI7Cit9OworCitjbGFzcyBUaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKSA9IDA7Cit9OworCitjbGFzcyBU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlRpbGVk
QmFja2luZ1N0b3JlQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2Vi
Q29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kPiBjcmVhdGUoVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kKGNsaWVudCkpOyB9CisgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpUaWxlPiBjcmVhdGVUaWxlKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3Qg
V2ViQ29yZTo6VGlsZTo6Q29vcmRpbmF0ZSYpOworICAgIHZvaWQgcGFpbnRDaGVja2VyUGF0dGVy
bihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
KworcHJpdmF0ZToKKyAgICBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kKFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCopOworICAgIFRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUNsaWVudCogbV9jbGllbnQ7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gVElMRURfQkFDS0lOR19TVE9SRQorCisjZW5kaWYgLy8gVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggZDQwMmM1MDA3OGU4NGZkZmU5ZmVhZjgw
NzIzMjcwZTgzYzBiMTg5MC4uNDQzZDYxNGVmMDYyNjk3YTEwNWMyODlkZjMyNDliODQ3NjYwNWU5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJh
d2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxl
ZERyYXdpbmdBcmVhLmNwcApAQCAtMzEsMTAgKzMxLDcgQEAKICNpbmNsdWRlICJEcmF3aW5nQXJl
YVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJVcGRh
dGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZS9GcmFtZS5oIgotI2luY2x1ZGUgIldlYkNvcmUv
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vz
cy5oIgogCkBAIC00NCwxMCArNDEsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogVGlsZWREcmF3
aW5nQXJlYTo6VGlsZWREcmF3aW5nQXJlYShXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogRHJhd2lu
Z0FyZWEoRHJhd2luZ0FyZWFUeXBlVGlsZWQsIHdlYlBhZ2UpCi0gICAgLCBtX2lzV2FpdGluZ0Zv
clVwZGF0ZShmYWxzZSkKLSAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKLSAgICAsIG1fZGlzcGxh
eVRpbWVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJ1bkxvb3AoKSwgdGhpcywgJlRpbGVkRHJhd2lu
Z0FyZWE6OmRpc3BsYXkpCi0gICAgLCBtX3RpbGVVcGRhdGVUaW1lcihXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5ydW5Mb29wKCksIHRoaXMsICZUaWxlZERyYXdpbmdBcmVhOjp0aWxlVXBkYXRlVGltZXJG
aXJlZCkKKyAgICAsIG1fc3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdGb3JVSVBy
b2Nlc3MoZmFsc2UpCisgICAgLCBtX21haW5CYWNraW5nU3RvcmUoYWRvcHRQdHIobmV3IFRpbGVk
QmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNy
ZWF0ZSh0aGlzKSkpKQogewogfQogCkBAIC02MywxNTAgKzU5LDEwMyBAQCB2b2lkIFRpbGVkRHJh
d2luZ0FyZWE6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXpl
JiBzY3JvbGxEZQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlzcGxheShjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIC8vIEZJWE1FOiBDb2xsZWN0IGEgc2V0IG9mIHJlY3Rz
L3JlZ2lvbiBpbnN0ZWFkIG9mIGp1c3QgdGhlIHVuaW9uIG9mIGFsbCByZWN0cy4KLSAgICBtX2Rp
cnR5UmVjdC51bml0ZShyZWN0KTsKLSAgICBzY2hlZHVsZURpc3BsYXkoKTsKKyAgICBtX21haW5C
YWNraW5nU3RvcmUtPmludmFsaWRhdGUocmVjdCk7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJl
YTo6ZGlzcGxheSgpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldFNpemUoY29uc3QgSW50U2l6
ZSYgdmlld1NpemUpCiB7Ci0gICAgaWYgKCFtX3Nob3VsZFBhaW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9kaXJ0eVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9
IG1fZGlydHlSZWN0OwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwotCi0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpJbnZhbGlkYXRlKGRpcnR5UmVj
dCkpOworICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOworICAgIEFTU0VSVF9BUkcodmlld1NpemUs
ICF2aWV3U2l6ZS5pc0VtcHR5KCkpOwogCi0gICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOworICAg
IG1fd2ViUGFnZS0+c2V0U2l6ZSh2aWV3U2l6ZSk7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJl
YTo6c2NoZWR1bGVEaXNwbGF5KCkKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2V0VmlzaWJsZUNv
bnRlbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QpCiB7
Ci0gICAgaWYgKCFtX3Nob3VsZFBhaW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9k
aXNwbGF5VGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXNwbGF5
VGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIG1fdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlzaWJs
ZUNvbnRlbnRzUmVjdDsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPmFkanVzdFZpc2libGVSZWN0
KCk7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiB2
aWV3U2l6ZSkKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBz
Y2FsZSkKIHsKLSAgICBBU1NFUlQobV9zaG91bGRQYWludCk7Ci0gICAgQVNTRVJUX0FSRyh2aWV3
U2l6ZSwgIXZpZXdTaXplLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3dlYlBhZ2UtPnNldFNpemUodmll
d1NpemUpOwotCi0gICAgc2NoZWR1bGVEaXNwbGF5KCk7CisgICAgbV9wcmV2aW91c0JhY2tpbmdT
dG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisgICAgbV9tYWluQmFja2luZ1N0
b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOworICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7Cit9CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRpZFNldFNpemUodmlld1NpemUpKTsKK3ZvaWQg
VGlsZWREcmF3aW5nQXJlYTo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBtX2lzV2FpdGluZ0Zv
clVJUHJvY2VzcyA9IGZhbHNlOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1
ZmZlcnMoKTsKIH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpzdXNwZW5kUGFpbnRpbmcoKQog
ewotICAgIEFTU0VSVChtX3Nob3VsZFBhaW50KTsKKyAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsK
IAotICAgIG1fc2hvdWxkUGFpbnQgPSBmYWxzZTsKLSAgICBtX2Rpc3BsYXlUaW1lci5zdG9wKCk7
Ci0gICAgbV90aWxlVXBkYXRlVGltZXIuc3RvcCgpOworICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsK
IH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpyZXN1bWVQYWludGluZygpCiB7Ci0gICAgQVNT
RVJUKCFtX3Nob3VsZFBhaW50KTsKKyAgICBBU1NFUlQobV9zdXNwZW5kZWQpOwogCi0gICAgbV9z
aG91bGRQYWludCA9IHRydWU7Ci0KLSAgICAvLyBEaXNwbGF5IGlmIG5lZWRlZC4KLSAgICBkaXNw
bGF5KCk7Ci0gICAgaWYgKCFtX3BlbmRpbmdVcGRhdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgc2No
ZWR1bGVUaWxlVXBkYXRlKCk7CisgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKKyAgICBtX21haW5C
YWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5n
QXJlYTo6ZGlkVXBkYXRlKCkKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3Rv
cmVQYWludEJlZ2luKCkKIHsKLSAgICAvLyBEaXNwbGF5IGlmIG5lZWRlZC4KLSAgICBkaXNwbGF5
KCk7CisgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwogfQogCi12b2lkIFRpbGVkRHJh
d2luZ0FyZWE6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
LCBmbG9hdCBzY2FsZSkKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVQ
YWludChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpCiB7Ci0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgVXBk
YXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcyA9IGRp
cnR5UmVjdDsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShkaXJ0eVJlY3Quc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6
OlN1cHBvcnRzQWxwaGEpOwotICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKHVwZGF0ZUluZm8uYml0
bWFwSGFuZGxlKTsKLSAgICBwYWludEludG9CaXRtYXAoYml0bWFwLmdldCgpLCBkaXJ0eVJlY3Qs
IHNjYWxlKTsKLQotICAgIHVuc2lnbmVkIHBlbmRpbmdVcGRhdGVDb3VudCA9IG1fcGVuZGluZ1Vw
ZGF0ZXMuc2l6ZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQ
cm94eTo6VGlsZVVwZGF0ZWQodGlsZUlELCB1cGRhdGVJbmZvLCBzY2FsZSwgcGVuZGluZ1VwZGF0
ZUNvdW50KSk7CisgICAgbV93ZWJQYWdlLT5kcmF3UmVjdCgqZ3JhcGhpY3NDb250ZXh0LCBjb250
ZW50UmVjdCk7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6c2NoZWR1bGVUaWxlVXBkYXRl
KCkKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25z
dCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKQogewotICAgIGlmICghbV9zaG91bGRQYWlu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdGlsZVVwZGF0ZVRpbWVyLmlzQWN0aXZl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGlsZVVwZGF0ZVRpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKKyAgICAvLyBTaW5jZSB3ZSBrbm93IHRoYXQgYWxsIHRpbGUgdXBkYXRlcyBmb2xsb3dp
bmcgYSBwYWdlIGludmFsaWRhdGUgd2lsbCBhbGwgYmUgcmVuZGVyZWQKKyAgICAvLyBpbiBvbmUg
cGFpbnQgcGFzcyBmb3IgYWxsIHRoZSB0aWxlcywgd2UgY2FuIHNlbmQgdGhlIHN3YXAgdGlsZSBt
ZXNzYWdlIGhlcmUuCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVBy
b3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsKKyAgICBtX2lzV2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRy
dWU7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dGlsZVVwZGF0ZVRpbWVyRmlyZWQoKQor
Ym9vbCBUaWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ1VwZGF0ZXMuaXNFbXB0eSgpKTsKLQotICAg
IE93blB0cjxUaWxlVXBkYXRlPiB1cGRhdGUgPSBtX3BlbmRpbmdVcGRhdGVzLmZpcnN0KCkucmVs
ZWFzZSgpOwotICAgIG1fcGVuZGluZ1VwZGF0ZXMucmVtb3ZlRmlyc3QoKTsKKyAgICByZXR1cm4g
IShtX3N1c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0ZvclVJUHJvY2Vzcyk7Cit9CiAKLSAgICB1cGRh
dGVUaWxlKHVwZGF0ZS0+dGlsZUlELCB1cGRhdGUtPmRpcnR5UmVjdCwgdXBkYXRlLT5zY2FsZSk7
CitJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0
KCkKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV93ZWJQYWdlLT5zaXpl
KCkpOworfQogCi0gICAgaWYgKG1fcGVuZGluZ1VwZGF0ZXMuaXNFbXB0eSgpKQotICAgICAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkFsbFRpbGVVcGRhdGVz
UHJvY2Vzc2VkKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2NoZWR1bGVUaWxlVXBkYXRlKCk7CitJ
bnRSZWN0IFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQor
eworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50UmVjdDsKIH0KIAotdm9pZCBUaWxlZERyYXdp
bmdBcmVhOjpjYW5jZWxUaWxlVXBkYXRlKGludCB0aWxlSUQpCitDb2xvciBUaWxlZERyYXdpbmdB
cmVhOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgVXBk
YXRlTGlzdDo6aXRlcmF0b3IgZW5kID0gbV9wZW5kaW5nVXBkYXRlcy5lbmQoKTsKLSAgICBmb3Ig
KFVwZGF0ZUxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVXBkYXRlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT50aWxlSUQgPT0gdGlsZUlEKSB7Ci0g
ICAgICAgICAgICBtX3BlbmRpbmdVcGRhdGVzLnJlbW92ZShpdCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobV9wZW5kaW5nVXBkYXRlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpB
bGxUaWxlVXBkYXRlc1Byb2Nlc3NlZCgpKTsKLSAgICAgICAgbV90aWxlVXBkYXRlVGltZXIuc3Rv
cCgpOwotICAgIH0KKyAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogfQogCi12b2lkIFRp
bGVkRHJhd2luZ0FyZWE6OnJlcXVlc3RUaWxlVXBkYXRlKGludCB0aWxlSUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGRpcnR5UmVjdCwgZmxvYXQgc2NhbGUpCit2b2lkIFRpbGVkRHJhd2luZ0Fy
ZWE6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
IHsKLSAgICBVcGRhdGVMaXN0OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdVcGRhdGVzLmVuZCgp
OwotICAgIGZvciAoVXBkYXRlTGlzdDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdVcGRhdGVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPnRpbGVJRCA9PSB0
aWxlSUQpIHsKLSAgICAgICAgICAgICgqaXQpLT5kaXJ0eVJlY3QudW5pdGUoZGlydHlSZWN0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkNyZWF0ZVRpbGUodGlsZUlELCB1cGRhdGVJ
bmZvKSk7CiAKLSAgICBPd25QdHI8VGlsZVVwZGF0ZT4gdXBkYXRlKGFkb3B0UHRyKG5ldyBUaWxl
VXBkYXRlKSk7Ci0gICAgdXBkYXRlLT50aWxlSUQgPSB0aWxlSUQ7Ci0gICAgdXBkYXRlLT5kaXJ0
eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgdXBkYXRlLT5zY2FsZSA9IHNjYWxlOwotICAgIG1fcGVu
ZGluZ1VwZGF0ZXMuYXBwZW5kKHVwZGF0ZS5yZWxlYXNlKCkpOwotICAgIHNjaGVkdWxlVGlsZVVw
ZGF0ZSgpOworICAgIGlmIChtX3ByZXZpb3VzQmFja2luZ1N0b3JlICYmIG1fbWFpbkJhY2tpbmdT
dG9yZS0+Y292ZXJhZ2VSYXRpbyhtX3Zpc2libGVDb250ZW50UmVjdCkgPj0gMS4wZikKKyAgICAg
ICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOworfQordm9pZCBUaWxlZERyYXdpbmdB
cmVhOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8p
Cit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpVcGRh
dGVUaWxlKHRpbGVJRCwgdXBkYXRlSW5mbykpOworfQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpy
ZW1vdmVUaWxlKGludCB0aWxlSUQpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYVByb3h5OjpSZW1vdmVUaWxlKHRpbGVJRCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9U
aWxlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWREcmF3aW5nQXJlYS5oCmluZGV4IGYxMGY4OGFhNmRhYmExNGE3MmIxODA1NzllYmZjNmMyNzY5
NGU3ZTYuLjMxNzkyY2RhOGI2NDUzMzAyOGI1MTk5NGM5ODI2YjRlZDVjOWNjY2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
aApAQCAtMjksMjIgKzI5LDE5IEBACiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAK
ICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRl
ICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgU2hhcmVhYmxlQml0bWFw
OwotCi1jbGFzcyBUaWxlZERyYXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhIHsKK2NsYXNz
IFRpbGVkRHJhd2luZ0FyZWEgOiBwdWJsaWMgRHJhd2luZ0FyZWEsIHB1YmxpYyBXZWJDb3JlOjpU
aWxlZEJhY2tpbmdTdG9yZUNsaWVudCwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGlsZWREcmF3aW5nQXJlYShXZWJQYWdl
Kik7CiAgICAgdmlydHVhbCB+VGlsZWREcmF3aW5nQXJlYSgpOwogCiAgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BsYXkoKTsK
IAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoQ29tcG9zaXRpbmdDb250ZXh0KCkgeyB9CkBAIC01NSwzNyArNTIsMzQgQEAgcHVibGljOgog
I2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzY2hlZHVsZURpc3BsYXkoKTsKLQogICAgIC8v
IENvcmVJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2li
bGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJh
bWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBhaW50aW5nKCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlc3VtZVBhaW50aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOwotICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxUaWxlVXBkYXRlKGludCB0aWxlSUQpOwotICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0VGlsZVVwZGF0ZShpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBkaXJ0eVJlY3QsIGZsb2F0IHNjYWxlKTsKLQotICAgIC8vIFBsYXRmb3JtIG92ZXJyaWRlcwot
ICAgIHZvaWQgcGFpbnRJbnRvQml0bWFwKFNoYXJlYWJsZUJpdG1hcCosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHRpbGVSZWN0LCBmbG9hdCBzY2FsZSk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlVGls
ZVVwZGF0ZSgpOwotICAgIHZvaWQgdGlsZVVwZGF0ZVRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQg
dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3Qs
IGZsb2F0IHNjYWxlKTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0gICAg
Ym9vbCBtX2lzV2FpdGluZ0ZvclVwZGF0ZTsKLSAgICBib29sIG1fc2hvdWxkUGFpbnQ7Ci0gICAg
UnVuTG9vcDo6VGltZXI8VGlsZWREcmF3aW5nQXJlYT4gbV9kaXNwbGF5VGltZXI7CiAKLSAgICBz
dHJ1Y3QgVGlsZVVwZGF0ZSB7Ci0gICAgICAgIGludCB0aWxlSUQ7Ci0gICAgICAgIFdlYkNvcmU6
OkludFJlY3QgZGlydHlSZWN0OwotICAgICAgICBmbG9hdCBzY2FsZTsKLSAgICB9OwotICAgIHR5
cGVkZWYgRGVxdWU8T3duUHRyPFRpbGVVcGRhdGU+ID4gVXBkYXRlTGlzdDsKLSAgICBVcGRhdGVM
aXN0IG1fcGVuZGluZ1VwZGF0ZXM7Ci0gICAgUnVuTG9vcDo6VGltZXI8VGlsZWREcmF3aW5nQXJl
YT4gbV90aWxlVXBkYXRlVGltZXI7CisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKKyAg
ICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCk7CisgICAgdmlydHVh
bCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY29udGVudFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCB0
aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYg
cGFpbnRlZEFyZWEpOworICAgIHZpcnR1YWwgYm9vbCB0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNB
bGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVkQmFja2lu
Z1N0b3JlQ29udGVudHNSZWN0KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVk
QmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvbG9yIHRp
bGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICAvLyBUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShp
bnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVUaWxlKGludCB0aWxlSUQpOworCisgICAgYm9vbCBtX3N1c3BlbmRlZDsKKyAgICBib29sIG1f
aXNXYWl0aW5nRm9yVUlQcm9jZXNzOworICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29u
dGVudFJlY3Q7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFp
bkJhY2tpbmdTdG9yZTsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1f
cHJldmlvdXNCYWNraW5nU3RvcmU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9UaWxlZERyYXdpbmdB
cmVhUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1RpbGVkRHJh
d2luZ0FyZWFRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NmMzMDlkOTQ3
OTllNzhjYjY1MjBjMWFjZWZmY2FlOGNkOWY0OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0
L1RpbGVkRHJhd2luZ0FyZWFRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGlsZWREcmF3aW5nQXJlYS5oIgotCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0K
LSNpbmNsdWRlIDxRSW1hZ2U+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBUaWxlZERyYXdpbmdBcmVh
OjpwYWludEludG9CaXRtYXAoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHRpbGVSZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBncmFwaGljc0NvbnRleHQoYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7
Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLXRpbGVSZWN0LngoKSwgLXRpbGVSZWN0
LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoc2NhbGUsIHNjYWxl
KSk7Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0
KHRpbGVSZWN0LngoKSAvIHNjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC55KCkgLyBzY2FsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlY3Qud2lkdGgoKSAv
IHNjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aWxlUmVjdC5oZWlnaHQoKSAvIHNjYWxlKSk7Ci0gICAgbV93ZWJQYWdlLT5kcmF3UmVj
dCgqZ3JhcGhpY3NDb250ZXh0LmdldCgpLCBjb250ZW50UmVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105047</attachid>
            <date>2011-08-24 12:47:18 -0700</date>
            <delta_ts>2011-08-25 03:47:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wpDrivenTiles.patch</filename>
            <type>text/plain</type>
            <size>101188</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNGUwYjk2Li5iM2EzYTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDAg
QEAKIDIwMTEtMDgtMjMgIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lh
LmNvbT4KIAorICAgICAgICBbUXRdW1dLMl0gRHJpdmUgdGlsaW5nIGZyb20gdGhlIFdlYlByb2Nl
c3MgYW5kIHJldXNlIFRpbGVkQmFja2luZ1N0b3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZSBuZWVkIHRoZSB0aWxpbmcgbG9naWMgdG8gYmUgbW92
ZWQgdG8gdGhlIHdlYiBwcm9jZXNzIHRvIGFsbG93IGludmFsaWRhdGVkIHRpbGUgcmVjdHMgdG8g
YmUKKyAgICAgICAgcmVuZGVyZWQgd2l0aCB0aGUgc2FtZSBsYXlvdXQuIFRoaXMgYWxzbyBhbGxv
d3MgdGhlIHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aWxlcyBpbnRvCisgICAgICAgIGJ1ZmZlcnMg
cmVhZGFibGUgZGlyZWN0bHkgYnkgdGhlIEdQVSAob24gc3VwcG9ydGVkIHBsYXRmb3JtcykuIFdl
IGFsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkKKyAgICAgICAgdG8gdXNlIHRoZSBUaWxlZEJhY2tp
bmdTdG9yZSBpbiBXZWJDb3JlIHRvIGhhdmUgb25seSBvbmUgdGlsaW5nIGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgIEJlZm9yZSB0aGlzIHBhdGNoOgorICAgICAgICAtIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eSBjb250YWlucyBhbGwgdGhlIHRpbGUgbWFuYWdlbWVudCBsb2dpYy4KKyAgICAgICAg
LSBUaWxlZERyYXdpbmdBcmVhIHJlY2VpdmVkIHJlbmRlcmluZyByZXF1ZXN0cyBmb3IgYSByZWN0
IGFuZCByZXR1cm5zIHRoZSByZXN1bHQKKyAgICAgICAgICB0byB0aGUgcHJveHkgdGhyb3VnaCBz
aGFyZWQgbWVtb3J5LgorCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2g6CisgICAgICAgIC0gVGls
ZWREcmF3aW5nQXJlYSB1c2VzIGEgVGlsZWRCYWNraW5nU3RvcmUgdG8gbWFuYWdlIHRpbGVzLgor
ICAgICAgICAtIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZSBmb3J3YXJkcyB0aWxlIGNyZWF0
aW9ucywgdXBkYXRlIGFuZCByZW1vdmFscyB0byB0aGUgcHJveHkuCisgICAgICAgIC0gVGlsZWRE
cmF3aW5nQXJlYVByb3h5IHVwZGF0ZXMgdGhlIHNjZW5lIGdyYXBoIGRpcmVjdGx5IGZyb20gcmVx
dWVzdHMuCisKKyAgICAgICAgSXQgYWxzbyBpbXBsZW1lbnRzIHRpbGUgYnVmZmVyIHN3YXBwaW5n
IGNvcnJlY3RseSBpbiBTR1RpbGVOb2RlLCB0cmlnZ2VyZWQgYnkgdGhlIERpZFJlbmRlckZyYW1l
IG1lc3NhZ2UuCisgICAgICAgIFJlbmRlciB0aHJvdHRsaW5nIGlzIGltcGxlbWVudGVkIGJ5IHdh
aXRpbmcgaW4gVGlsZWREcmF3aW5nQXJlYSBmb3IgdGhlIFVJIHByb2Nlc3MgdG8KKyAgICAgICAg
bm90aWZ5IHVzIHdoZW4gdGhlIGxhc3QgcmVuZGVyZWQgZnJhbWUgaXMgcmVhZHkgdG8gbWFrZSBp
dCB0byB0aGUgc2NyZWVuLgorICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldHMgaGF2ZSBi
ZWVuIHJlcGxhY2VkIGJ5IHVzaW5nIHR3byBpbnN0YW5jZXMgb2YgVGlsZWRCYWNraW5nU3RvcmUg
aW5zdGVhZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVm
ZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6Y292ZXJhZ2VSYXRp
byk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6c3RhcnRUaWxlQnVmZmVy
VXBkYXRlVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0
b3JlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ojp0aWxlZEJh
Y2tpbmdTdG9yZUlzVXBkYXRpbmdBbGxvd2VkKToKKworMjAxMS0wOC0yMyAgSm9jZWx5biBUdXJj
b3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgorCiAgICAgICAgIFRpbGVkQmFja2lu
Z1N0b3JlOiBVbnRpZSB0aGUgdGlsZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBwbGF0Zm9ybS4K
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzYwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmNwcAppbmRleCAxOGQ2YjRhLi4wNDNhZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC05Nyw3
ICs5Nyw3IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OmludmFsaWRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudHNEaXJ0eVJlY3QpCiAKIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGVCdWZmZXJzKCkKIHsKLSAgICBpZiAobV9jb250ZW50c0Zyb3plbikKKyAgICBpZiAoIW1fY2xp
ZW50LT50aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgfHwgbV9jb250ZW50c0Zyb3pl
bikKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9y
ZVBhaW50QmVnaW4oKTsKQEAgLTIwMyw2ICsyMDMsMjkgQEAgZG91YmxlIFRpbGVkQmFja2luZ1N0
b3JlOjp0aWxlRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IFRpbGU6OkNv
b3IKICAgICByZXR1cm4gYWJzKGNlbnRlckNvb3JkaW5hdGUueSgpIC0gdGlsZUNvb3JkaW5hdGUu
eSgpKSArIGhvcml6b250YWxCaWFzICogYWJzKGNlbnRlckNvb3JkaW5hdGUueCgpIC0gdGlsZUNv
b3JkaW5hdGUueCgpKTsKIH0KIAorLy8gUmV0dXJucyBhIHJhdGlvIGJldHdlZW4gMC4wZiBhbmQg
MS4wZiBvZiB0aGUgc3VyZmFjZSBvZiBjb250ZW50c1JlY3QgY292ZXJlZCBieSByZW5kZXJlZCB0
aWxlcy4KK2Zsb2F0IFRpbGVkQmFja2luZ1N0b3JlOjpjb3ZlcmFnZVJhdGlvKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGNvbnRlbnRzUmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1h
cEZyb21Db250ZW50cyhjb250ZW50c1JlY3QpOworICAgIGZsb2F0IHJlY3RBcmVhID0gZGlydHlS
ZWN0LndpZHRoKCkgKiBkaXJ0eVJlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgY292ZXJBcmVhID0g
MC4wZjsKKworICAgIFRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9y
UG9pbnQoZGlydHlSZWN0LmxvY2F0aW9uKCkpOworICAgIFRpbGU6OkNvb3JkaW5hdGUgYm90dG9t
UmlnaHQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGlubmVyQm90dG9tUmlnaHQoZGlydHlSZWN0
KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9wTGVmdC55KCk7IHlDb29y
ZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29yZGluYXRlIDw9IGJvdHRv
bVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgeworICAgICAgICAgICAgVGlsZTo6Q29vcmRpbmF0
ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5hdGUpOworICAgICAgICAg
ICAgUmVmUHRyPFRpbGU+IGN1cnJlbnRUaWxlID0gdGlsZUF0KFRpbGU6OkNvb3JkaW5hdGUoeENv
b3JkaW5hdGUsIHlDb29yZGluYXRlKSk7CisgICAgICAgICAgICBpZiAoY3VycmVudFRpbGUgJiYg
Y3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0
IGNvdmVyUmVjdCA9IGludGVyc2VjdGlvbihkaXJ0eVJlY3QsIGN1cnJlbnRUaWxlLT5yZWN0KCkp
OworICAgICAgICAgICAgICAgIGNvdmVyQXJlYSArPSBjb3ZlclJlY3Qud2lkdGgoKSAqIGNvdmVy
UmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gY292ZXJBcmVhIC8gcmVjdEFyZWE7Cit9CisKIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OmNy
ZWF0ZVRpbGVzKCkKIHsKICAgICBpZiAobV9jb250ZW50c0Zyb3plbikKQEAgLTM2NSw3ICszODgs
NyBAQCBUaWxlOjpDb29yZGluYXRlIFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlQ29vcmRpbmF0ZUZv
clBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludAogCiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpz
dGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigpCiB7Ci0gICAgaWYgKG1fdGlsZUJ1ZmZlclVwZGF0
ZVRpbWVyLT5pc0FjdGl2ZSgpIHx8IG1fY29udGVudHNGcm96ZW4pCisgICAgaWYgKG1fdGlsZUJ1
ZmZlclVwZGF0ZVRpbWVyLT5pc0FjdGl2ZSgpIHx8ICFtX2NsaWVudC0+dGlsZWRCYWNraW5nU3Rv
cmVVcGRhdGVzQWxsb3dlZCgpIHx8IG1fY29udGVudHNGcm96ZW4pCiAgICAgICAgIHJldHVybjsK
ICAgICBtX3RpbGVCdWZmZXJVcGRhdGVUaW1lci0+c3RhcnRPbmVTaG90KDApOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgK
aW5kZXggNzU1OGFlMS4uODg5YTY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCkBAIC01Miw2ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBib29sIGNvbnRlbnRzRnJvemVuKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50c0Zyb3plbjsgfQogICAgIHZvaWQgc2V0Q29udGVudHNGcm96ZW4oYm9vbCk7CisgICAgdm9p
ZCB1cGRhdGVUaWxlQnVmZmVycygpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCk7CiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7CkBAIC03Niw2ICs3Nyw3IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IHRpbGVSZWN0
Rm9yQ29vcmRpbmF0ZShjb25zdCBUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7CiAgICAgVGlsZTo6
Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CiAgICAgZG91YmxlIHRpbGVEaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydCwgY29uc3Qg
VGlsZTo6Q29vcmRpbmF0ZSYpIGNvbnN0OworICAgIGZsb2F0IGNvdmVyYWdlUmF0aW8oY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY29udGVudHNSZWN0KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHN0
YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7CkBAIC04Niw3ICs4OCw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0aWxlQnVmZmVyVXBkYXRlVGltZXJGaXJlZChUaWxlVGltZXIqKTsKICAgICB2b2lk
IHRpbGVDcmVhdGlvblRpbWVyRmlyZWQoVGlsZVRpbWVyKik7CiAgICAgCi0gICAgdm9pZCB1cGRh
dGVUaWxlQnVmZmVycygpOwogICAgIHZvaWQgY3JlYXRlVGlsZXMoKTsKICAgICAKICAgICB2b2lk
IGNvbW1pdFNjYWxlQ2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaAppbmRleCA2MDg3ZWMzLi4y
MzlkMjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKQEAgLTIzLDExICsyMywxNSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCitjbGFzcyBD
b2xvcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKwogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVD
bGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50
QmVnaW4oKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdGls
ZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVh
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2lu
Z1N0b3JlQ29udGVudHNSZWN0KCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tp
bmdTdG9yZVZpc2libGVSZWN0KCkgPSAwOwogICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5n
U3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGI0ZGZlMC4u
MmE4MjU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMiBAQAorMjAxMS0wOC0yMyAgSm9jZWx5
biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgorCisgICAgICAgIFtRdF1b
V0syXSBEcml2ZSB0aWxpbmcgZnJvbSB0aGUgV2ViUHJvY2VzcyBhbmQgcmV1c2UgVGlsZWRCYWNr
aW5nU3RvcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02Njc3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlIG5lZWQgdGhlIHRpbGluZyBsb2dpYyB0byBiZSBtb3ZlZCB0byB0aGUgd2ViIHByb2Nlc3Mg
dG8gYWxsb3cgaW52YWxpZGF0ZWQgdGlsZSByZWN0cyB0byBiZQorICAgICAgICByZW5kZXJlZCB3
aXRoIHRoZSBzYW1lIGxheW91dC4gVGhpcyBhbHNvIGFsbG93cyB0aGUgd2ViIHByb2Nlc3MgdG8g
cmVuZGVyIHRpbGVzIGludG8KKyAgICAgICAgYnVmZmVycyByZWFkYWJsZSBkaXJlY3RseSBieSB0
aGUgR1BVIChvbiBzdXBwb3J0ZWQgcGxhdGZvcm1zKS4gV2UgYWxzbyB0YWtlIHRoZSBvcHBvcnR1
bml0eQorICAgICAgICB0byB1c2UgdGhlIFRpbGVkQmFja2luZ1N0b3JlIGluIFdlYkNvcmUgdG8g
aGF2ZSBvbmx5IG9uZSB0aWxpbmcgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQmVmb3JlIHRo
aXMgcGF0Y2g6CisgICAgICAgIC0gVGlsZWREcmF3aW5nQXJlYVByb3h5IGNvbnRhaW5zIGFsbCB0
aGUgdGlsZSBtYW5hZ2VtZW50IGxvZ2ljLgorICAgICAgICAtIFRpbGVkRHJhd2luZ0FyZWEgcmVj
ZWl2ZWQgcmVuZGVyaW5nIHJlcXVlc3RzIGZvciBhIHJlY3QgYW5kIHJldHVybnMgdGhlIHJlc3Vs
dAorICAgICAgICAgIHRvIHRoZSBwcm94eSB0aHJvdWdoIHNoYXJlZCBtZW1vcnkuCisKKyAgICAg
ICAgQWZ0ZXIgdGhpcyBwYXRjaDoKKyAgICAgICAgLSBUaWxlZERyYXdpbmdBcmVhIHVzZXMgYSBU
aWxlZEJhY2tpbmdTdG9yZSB0byBtYW5hZ2UgdGlsZXMuCisgICAgICAgIC0gVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlIGZvcndhcmRzIHRpbGUgY3JlYXRpb25zLCB1cGRhdGUgYW5kIHJlbW92
YWxzIHRvIHRoZSBwcm94eS4KKyAgICAgICAgLSBUaWxlZERyYXdpbmdBcmVhUHJveHkgdXBkYXRl
cyB0aGUgc2NlbmUgZ3JhcGggZGlyZWN0bHkgZnJvbSByZXF1ZXN0cy4KKworICAgICAgICBJdCBh
bHNvIGltcGxlbWVudHMgdGlsZSBidWZmZXIgc3dhcHBpbmcgY29ycmVjdGx5IGluIFNHVGlsZU5v
ZGUsIHRyaWdnZXJlZCBieSB0aGUgRGlkUmVuZGVyRnJhbWUgbWVzc2FnZS4KKyAgICAgICAgUmVu
ZGVyIHRocm90dGxpbmcgaXMgaW1wbGVtZW50ZWQgYnkgd2FpdGluZyBpbiBUaWxlZERyYXdpbmdB
cmVhIGZvciB0aGUgVUkgcHJvY2VzcyB0bworICAgICAgICBub3RpZnkgdXMgd2hlbiB0aGUgbGFz
dCByZW5kZXJlZCBmcmFtZSBpcyByZWFkeSB0byBtYWtlIGl0IHRvIHRoZSBzY3JlZW4uCisgICAg
ICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0cyBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgdXNpbmcg
dHdvIGluc3RhbmNlcyBvZiBUaWxlZEJhY2tpbmdTdG9yZSBpbnN0ZWFkLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFUb3VjaFdlYlBh
Z2U6OnVwZGF0ZVBhaW50Tm9kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFUb3VjaFdlYlZpZXdQcml2YXRlOjp1cGRhdGVWaWV3cG9y
dFN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6cmVtb3ZlVGlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpUaWxlZERyYXdpbmdBcmVh
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6On5UaWxlZERy
YXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnNldFZpc2libGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYVByb3h5OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYVByb3h5OjpwYWludCk6CisgICAgICAgICogVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0Fy
ZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR0FnZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Tm9kZVVwZGF0ZUNyZWF0ZVRpbGU6Ok5vZGVVcGRhdGVDcmVhdGVUaWxlKToKKyAgICAg
ICAgKFdlYktpdDo6Tm9kZVVwZGF0ZVJlbW92ZVRpbGU6Ok5vZGVVcGRhdGVSZW1vdmVUaWxlKToK
KyAgICAgICAgKFdlYktpdDo6Tm9kZVVwZGF0ZVNldEJhY2tCdWZmZXI6Ok5vZGVVcGRhdGVTZXRC
YWNrQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6Tm9kZVVwZGF0ZVN3YXBUaWxlQnVmZmVyczo6
Tm9kZVVwZGF0ZVN3YXBUaWxlQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlNHQWdlbnQ6OlNH
QWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpTR0FnZW50OjpjcmVhdGVUaWxlTm9kZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNHQWdlbnQ6OnJlbW92ZVRpbGVOb2RlKToKKyAgICAgICAgKFdlYktpdDo6
U0dBZ2VudDo6c2V0Tm9kZUJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpTR0FnZW50Ojpz
d2FwVGlsZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpTR0FnZW50Ojp1cGRhdGVQYWludE5v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpTR0FnZW50OjpnZXRTY2FsZU5vZGUpOgorICAgICAgICBN
YWtlIHRoZSBwYXJlbnRpbmcgbG9naWMgbW9yZSBzdHJpY3QgdG8gYWxsb3cgU0dBZ2VudCB0byBo
YW5kbGUgdGhlIHNjYWxlIG5vZGVzIGl0c2VsZiAocmVtb3ZlIE5vZGVVcGRhdGVDcmVhdGVTY2Fs
ZSBhbmQgdXNlIHRoZSBzY2FsZSBpbiBDcmVhdGVUaWxlKS4KKyAgICAgICAgRGVsZXRlIHRoZSBz
Y2FsZSBub2RlIHdoZW4gdGhlIGxhc3Qgb2YgaXRzIGNoaWxkIHRpbGVzIGhhcyBiZWVuIHJlbW92
ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvU0dBZ2VudC5oOgorICAgICAgICAoV2ViS2l0
OjpTR0FnZW50Ojppc1N3YXBQZW5kaW5nKToKKworICAgICAgICAqIFVJUHJvY2Vzcy9xdC9TR1Rp
bGVOb2RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U0dUaWxlTm9kZTo6U0dUaWxlTm9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlNHVGlsZU5vZGU6OnNldEJhY2tCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpTR1RpbGVOb2RlOjpzd2FwSWZOZWVkZWQpOgorICAgICAgICBSZXBsYWNlIHNldFRhcmdl
dFJlY3QsIHNldFNvdXJjZVJlY3QgYW5kIHNldFRleHR1cmUgYnkgYSBzaW5nbGUgc2V0QmFja0J1
ZmZlciBtZXRob2QuCisgICAgICAgIFRoaXMgYWxsb3dzIGFsbCB0aG9zZSB2YWx1ZXMgdG8gYmUg
dXNlZCBvbmx5IHdoZW4gc3dhcElmTmVlZGVkIGlzIGNhbGxlZCBsYXRlci4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1RpbGVk
RHJhd2luZ0FyZWFQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVByb3h5OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVBy
b3h5Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5
OjpkaWRSZW5kZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6cmVtb3ZlVGlsZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFU
aWxlUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdl
cHJveHkuY3BwOgorICAgICAgICAoUVRvdWNoV2ViUGFnZVByb3h5OjpyZW5kZXJOZXh0RnJhbWUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuaDoKKyAgICAgICAg
KiBXZWJLaXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OnNldFZpc2libGVDb250ZW50UmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGU6On5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmlzRGlydHkpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnN3YXBCYWNrQnVmZmVyVG9G
cm9udCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aXNS
ZWFkeVRvUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGU6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
QmFja2VuZDo6VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZCk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUpOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpwYWlu
dENoZWNrZXJQYXR0ZXJuKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZTo6Y29vcmRpbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZTo6cmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZUNsaWVudDo6flRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6
OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjpUaWxlZERyYXdpbmdBcmVh
KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6c2V0U2l6ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnNldFZpc2libGVDb250ZW50UmVjdCk6CisgICAgICAg
IChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAo
V2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2Vi
S2l0OjpUaWxlZERyYXdpbmdBcmVhOjpzdXNwZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhOjpyZXN1bWVQYWludGluZyk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbik6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAg
ICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3RvcmVJc1Vw
ZGF0aW5nQWxsb3dlZCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnRpbGVk
QmFja2luZ1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYTo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRp
bGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJL
aXQ6OlRpbGVkRHJhd2luZ0FyZWE6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxl
ZERyYXdpbmdBcmVhOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
VGlsZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9UaWxl
ZERyYXdpbmdBcmVhUXQuY3BwOiBSZW1vdmVkLgorCiAyMDExLTA4LTE5ICBMYXJzIEtudWRzZW4g
IDxsYXJzLmtudWRzZW5Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBDaGFuZ2UgdGhl
IHJlY3QgYXJndW1lbnQgb2YgUXRXZWJQYWdlUHJveHk6OnBhaW50KCkgdG8gY29uc3QgcmVmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5jcHAKaW5kZXggMzZhMWM2My4uYTE1ZDcxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUluZm8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmNwcApAQCAtMzgsNiArMzgsNyBAQCB2b2lkIFVw
ZGF0ZUluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNjcm9sbE9mZnNldCk7CiAgICAgZW5jb2Rlci0+ZW5jb2Rl
KHVwZGF0ZVJlY3RCb3VuZHMpOwogICAgIGVuY29kZXItPmVuY29kZSh1cGRhdGVSZWN0cyk7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKHVwZGF0ZVNjYWxlRmFjdG9yKTsKICAgICBlbmNvZGVyLT5lbmNv
ZGUoYml0bWFwSGFuZGxlKTsKIH0KIApAQCAtNTUsNiArNTYsOCBAQCBib29sIFVwZGF0ZUluZm86
OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFVwZGF0ZUluZm8mIHJl
c3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJl
c3VsdC51cGRhdGVSZWN0cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShyZXN1bHQudXBkYXRlU2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVzdWx0LmJpdG1hcEhhbmRsZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Vw
ZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9VcGRhdGVJbmZvLmgKaW5kZXggMzAx
N2JiZS4uMjEzOGZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1VwZGF0ZUlu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVXBkYXRlSW5mby5oCkBAIC02MCw2ICs2
MCw4IEBAIHB1YmxpYzoKICAgICAvLyBBbGwgdGhlIHVwZGF0ZSByZWN0cywgaW4gdmlldyBjb29y
ZGluYXRlcy4KICAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gdXBkYXRlUmVjdHM7CiAKKyAg
ICBmbG9hdCB1cGRhdGVTY2FsZUZhY3RvcjsKKwogICAgIC8vIFRoZSBoYW5kbGUgb2YgdGhlIHNo
YXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBkYXRlcy4gV2lsbCBiZSBudWxsIGlmIHRo
ZXJlIGFyZSBubyB1cGRhdGVzLgogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGJpdG1hcEhh
bmRsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0
b3VjaHdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xdG91Y2h3
ZWJwYWdlLmNwcAppbmRleCAxOTRjMTljLi40MjZmOTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F0b3VjaHdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXRvdWNod2VicGFnZS5jcHAKQEAgLTY3LDYgKzY3LDE2IEBA
IFFTR05vZGUqIFFUb3VjaFdlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2Rl
LCBVcGRhdGVQYWludE5vZGVEYXRhKikKIHsKICAgICBpZiAoIW9sZE5vZGUpCiAgICAgICAgIG9s
ZE5vZGUgPSBuZXcgUVNHTm9kZTsKKworICAgIC8vIEEgc3dhcCBpcyBvbiB0aGUgcXVldWUsIGFu
ZCBTR0FnZW50Ojp1cGRhdGVQYWludE5vZGUgd2lsbCBlbXB0eSB0aGUgcXVldWUsIHNvIHdlIGtu
b3cgdGhhdAorICAgIC8vIHRoZSBvbGQgZnJhbWUncyBidWZmZXJzIHdvbid0IGJlIHVzZWQgYW55
bW9yZSAoZm9yIGJ1ZmZlcnMgdXNlZCBhbGwgdGhlIHdheSBmcm9tIHRoZSB3ZWIgcHJvY2Vzcwor
ICAgIC8vIHRvIHRoZSBncmFwaGljIGNhcmQpLiBOb3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRoYXQg
aXQgY2FuIHJlbmRlciB0aGUgbmV4dCBmcmFtZS4KKyAgICBpZiAoZC0+c2dBZ2VudC5pc1N3YXBQ
ZW5kaW5nKCkpCisgICAgICAgIC8vIFRoZSBVSSB0aHJlYWQgaXMgY3VycmVudGx5IGxvY2tlZCBh
bmQgY2FsbGluZyB0aGlzIGZyb20gdGhlIHJlbmRlcmluZyB0aHJlYWQgZGlkbid0IGNyYXNoCisg
ICAgICAgIC8vIHlldCwgc28gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBPSy4gRWxzZSB3ZSBo
YXZlIHRvIHdhaXQgdW50aWwgdGhlIFNHIHVwZGF0ZSBpcyBvdmVyCisgICAgICAgIC8vIGFuZCB0
aGUgVUkgdGhyZWFkIHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3AgcGlja2luZyBvdXIgZXZlbnQg
YmVmb3JlIGl0IGNhbiBiZSBzZW50IHRvCisgICAgICAgIC8vIHRoZSB3ZWIgcHJvY2Vzcy4gVGhp
cyB3b3VsZCBpbmNyZWFzZSBvdXIgY2hhbmNlcyBvZiBtaXNzaW5nIGEgZnJhbWUuCisgICAgICAg
IGQtPnBhZ2UtPnJlbmRlck5leHRGcmFtZSgpOwogICAgIGQtPnNnQWdlbnQudXBkYXRlUGFpbnRO
b2RlKG9sZE5vZGUpOwogCiAgICAgLy8gUVNHSXRlbSB0YWtlcyBvd25lcnNoaXAgb2YgdGhpcyBy
ZXR1cm4gdmFsdWUgYW5kIGl0J3MgY2hpbGRyZW4gYmV0d2VlbiBhbmQgYWZ0ZXIgdXBkYXRlUGFp
bnROb2RlIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmgKaW5kZXggNjI3YWZmZC4uNGQwY2QzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5oCkBAIC0xMTEsMTAgKzExMSwxMSBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2lu
Z1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpIHsgfQogI2VuZGlmCiAjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdmlydHVhbCB2b2lkIGRpZFNldFNpemUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc25hcHNob3RUYWtlbihj
b25zdCBVcGRhdGVJbmZvJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVVcGRhdGVkKGludCB0
aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mLCBmbG9hdCBzY2FsZSwgdW5zaWduZWQgcGVuZGluZ1Vw
ZGF0ZUNvdW50KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBj
b25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGlsZShpbnQgdGlsZUlEKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWxsVGlsZVVwZGF0ZXNQcm9j
ZXNzZWQoKSB7IH0KICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KaW5kZXggZTExMmFkNi4uYzUyNGNjOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
bWVzc2FnZXMuaW4KQEAgLTI4LDEwICsyOCwxMCBAQCBtZXNzYWdlcyAtPiBEcmF3aW5nQXJlYVBy
b3h5IHsKICAgICBFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2lu
Z1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAjZW5kaWYKICNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBJbnZhbGlkYXRlKFdlYkNvcmU6Oklu
dFJlY3QgZGlydHlSZWN0KQotICAgIERpZFNldFNpemUoV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6
ZSkKLSAgICBUaWxlVXBkYXRlZChpbnQgdGlsZUlELCBXZWJLaXQ6OlVwZGF0ZUluZm8gdXBkYXRl
SW5mbywgZmxvYXQgc2NhbGUsIHVuc2lnbmVkIHBlbmRpbmdVcGRhdGVDb3VudCkKLSAgICBBbGxU
aWxlVXBkYXRlc1Byb2Nlc3NlZCgpCisgICAgQ3JlYXRlVGlsZShpbnQgdGlsZUlELCBXZWJLaXQ6
OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlKGludCB0aWxlSUQsIFdlYktp
dDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIERpZFJlbmRlckZyYW1lKCkKKyAgICBSZW1v
dmVUaWxlKGludCB0aWxlSUQpCiAgICAgU25hcHNob3RUYWtlbihXZWJLaXQ6OlVwZGF0ZUluZm8g
dXBkYXRlSW5mbykKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCBhODVlYjg3Li40YjZkMmQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcApA
QCAtMzAsMTE5ICszMCw0OSBAQAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKIAotI2lmIFBMQVRGT1JNKFFUKQot
I2luY2x1ZGUgIlNHQWdlbnQuaCIKLSNpbmNsdWRlICJUb3VjaFZpZXdJbnRlcmZhY2UuaCIKLSNl
bmRpZgotCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBjb25zdCBpbnQg
ZGVmYXVsdFRpbGVXaWR0aCA9IDEwMjQ7Ci1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlSGVp
Z2h0ID0gMTAyNDsKLQotCi0vLyBUaGUgVGlsZVNldCdzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGhv
bGQgYSBncm91cCBvZiB0aWxlcyB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzIHNjYWxlIHRvZ2V0aGVy
LgotY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQgewotcHVibGljOgotICAgIHR5cGVkZWYg
SGFzaE1hcDxUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSwgUmVmUHRyPFRpbGVkRHJh
d2luZ0FyZWFUaWxlPiA+IFRpbGVNYXA7Ci0KLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldChQ
bGF0Zm9ybVdlYlZpZXcqLCBmbG9hdCBjb250ZW50c1NjYWxlID0gMS4wZik7Ci0gICAgflRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0KCk7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcFRvQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFJlY3Qg
bWFwRnJvbUNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKLQotICAgIFRp
bGVNYXAmIHRpbGVzKCkgeyByZXR1cm4gbV90aWxlczsgfQotICAgIGZsb2F0IGNvbnRlbnRzU2Nh
bGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2NhbGU7IH0KLSNpZiBQTEFURk9STShRVCkK
LSAgICBpbnQgc2dOb2RlSUQoKSBjb25zdCB7IHJldHVybiBtX3NnTm9kZUlEOyB9Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBUaWxlTWFwIG1fdGlsZXM7Ci0gICAgZmxvYXQgbV9jb250ZW50c1Nj
YWxlOwotI2lmIFBMQVRGT1JNKFFUKQotICAgIFNHQWdlbnQqIG1fc2dBZ2VudDsKLSAgICBpbnQg
bV9zZ05vZGVJRDsKLSNlbmRpZgotfTsKLQotVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0KFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgZmxvYXQgY29udGVu
dHNTY2FsZSkKLSAgICA6IG1fY29udGVudHNTY2FsZShjb250ZW50c1NjYWxlKQotI2lmIFBMQVRG
T1JNKFFUKQotICAgICwgbV9zZ0FnZW50KHdlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpKQotICAg
ICwgbV9zZ05vZGVJRChtX3NnQWdlbnQtPmNyZWF0ZVNjYWxlTm9kZSgwLCAxIC8gY29udGVudHNT
Y2FsZSkpCi0jZW5kaWYKLXsKLX0KLQotVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6On5UaWxlZERy
YXdpbmdBcmVhVGlsZVNldCgpCi17Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgLy8gRm9yY2luZyB0
aGUgdGlsZXMgZGVzdHJ1Y3Rpb24gdG8gcmVtb3ZlIHRoZWlyIHNnIG5vZGUgYmVmb3JlIHJlbW92
aW5nIHRoZWlyIHBhcmVudCBub2RlLgotICAgIG1fdGlsZXMuY2xlYXIoKTsKLSAgICBtX3NnQWdl
bnQtPnJlbW92ZU5vZGUobV9zZ05vZGVJRCk7Ci0jZW5kaWYKLX0KLQotSW50UmVjdCBUaWxlZERy
YXdpbmdBcmVhVGlsZVNldDo6bWFwVG9Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAorUGFzc093blB0cjxUaWxlZERyYXdpbmdBcmVhUHJveHk+IFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6Y3JlYXRlKFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV2ViUGFnZVByb3h5KiB3ZWJQYWdl
UHJveHkpCiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgp
IC8gbV9jb250ZW50c1NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LnkoKSAvIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC53aWR0aCgpIC8gbV9jb250ZW50c1NjYWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpIC8gbV9jb250ZW50c1NjYWxl
KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhUHJveHkod2ViVmll
dywgd2ViUGFnZVByb3h5KSk7CiB9CiAKLUludFJlY3QgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6
Om1hcEZyb21Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorVGlsZWREcmF3aW5n
QXJlYVByb3h5OjpUaWxlZERyYXdpbmdBcmVhUHJveHkoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3
LCBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKKyAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJh
d2luZ0FyZWFUeXBlVGlsZWQsIHdlYlBhZ2VQcm94eSkKKyAgICAsIG1faXNXYWl0aW5nRm9yRGlk
U2V0RnJhbWVOb3RpZmljYXRpb24oZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZSh0cnVlKQorICAg
ICwgbV93ZWJWaWV3KHdlYlZpZXcpCiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxv
YXRSZWN0KHJlY3QueCgpICogbV9jb250ZW50c1NjYWxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LnkoKSAqIG1fY29udGVudHNTY2FsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpICogbV9jb250ZW50c1NjYWxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpICog
bV9jb250ZW50c1NjYWxlKSk7CiB9CiAKLQotc3RhdGljIEludFBvaW50IGlubmVyQm90dG9tUmln
aHQoY29uc3QgSW50UmVjdCYgcmVjdCkKK1RpbGVkRHJhd2luZ0FyZWFQcm94eTo6flRpbGVkRHJh
d2luZ0FyZWFQcm94eSgpCiB7Ci0gICAgLy8gQWN0dWFsbHksIHRoZSByZWN0IGRvZXMgbm90IGNv
bnRhaW4gcmVjdC5tYXhYKCkuIFJlZmVyIHRvIEludFJlY3Q6OmNvbnRhaW4uCi0gICAgcmV0dXJu
IEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKTsKIH0KIAotUGFzc093
blB0cjxUaWxlZERyYXdpbmdBcmVhUHJveHk+IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRl
KFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCit2
b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhUHJveHkod2ViVmlldywgd2ViUGFnZVByb3h5KSk7Cisg
ICAgLy8gRklYTUU6IFRocm90dGxlIHRob3NlIG1lc3NhZ2UgZW5vdWdoIG5vdCB0byBvdmVybG9h
ZCB0aGUgbWVzc2FnZSBwaXBlIGFuZCB0byBnZXQgZ29vZCB0aWxlIGNyZWF0aW9uIHJlc3BvbnNp
dmVuZXNzLgorICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJl
YTo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0KHZpc2libGVDb250ZW50c1JlY3QpLCBwYWdlKCktPnBh
Z2VJRCgpKTsKIH0KIAotVGlsZWREcmF3aW5nQXJlYVByb3h5OjpUaWxlZERyYXdpbmdBcmVhUHJv
eHkoUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3LCBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkK
LSAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlVGlsZWQsIHdlYlBhZ2VQcm94
eSkKLSAgICAsIG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24oZmFsc2UpCi0g
ICAgLCBtX2lzVmlzaWJsZSh0cnVlKQotICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBt
X2N1cnJlbnRUaWxlU2V0KGFkb3B0UHRyKG5ldyBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCh3ZWJW
aWV3KSkpCi0gICAgLCBtX3RpbGVCdWZmZXJVcGRhdGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRo
aXMsICZUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKQot
ICAgICwgbV90aWxlQ3JlYXRpb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUaWxlZERy
YXdpbmdBcmVhUHJveHk6OnRpbGVDcmVhdGlvblRpbWVyRmlyZWQpCi0gICAgLCBtX3RpbGVTaXpl
KGRlZmF1bHRUaWxlV2lkdGgsIGRlZmF1bHRUaWxlSGVpZ2h0KQotICAgICwgbV90aWxlQ3JlYXRp
b25EZWxheSgwLjAxKQotICAgICwgbV9rZWVwQXJlYU11bHRpcGxpZXIoMi41LCA0LjUpCi0gICAg
LCBtX2NvdmVyQXJlYU11bHRpcGxpZXIoMiwgMykKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5
OjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQogeworICAgIC8vIEZJWE1FOiBTaW5jZSB0
aGUgdmlzaWJsZUNvbnRlbnRSZWN0IHNpemUgZGVwZW5kcyBvbiB0aGUgc2NhbGUsIHRoZXkgc2hv
dWxkIGdldCB0byB0aGUgd2ViIHByb2Nlc3MgaW4KKyAgICAvLyAgICAgICAgb25lIHNpbmdsZSBt
ZXNzYWdlIHRvIGF2b2lkIHVuZWNlc3NhcnkgdGlsZSByZW5kZXJpbmcgYmVjYXVzZSBvZiBhIHBv
c3NpYmx5IHZlcnkKKyAgICAvLyAgICAgICAgb3ZlcnNpemVkIGNhbGN1bGF0ZWQgdmlzaWJsZSBy
ZWN0LgorICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6
U2V0Q29udGVudHNTY2FsZShzY2FsZSksIHBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi1UaWxlZERy
YXdpbmdBcmVhUHJveHk6On5UaWxlZERyYXdpbmdBcmVhUHJveHkoKQordm9pZCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0gICAgLy8gRGlzYWJsZSB1cGRhdGVz
IG9uIHRpbGVzIHRvIGRldGFjaCB0aGVtIGZyb20gdGhlIHByb3h5IGFuZCBjdXQgdGhlIGNpcmN1
bGFyIGRlcGVuZGVuY3kuCi0gICAgaWYgKG1fcHJldmlvdXNUaWxlU2V0KQotICAgICAgICBkaXNh
YmxlVGlsZVNldFVwZGF0ZXMobV9wcmV2aW91c1RpbGVTZXQuZ2V0KCkpOwotICAgIGRpc2FibGVU
aWxlU2V0VXBkYXRlcyhtX2N1cnJlbnRUaWxlU2V0LmdldCgpKTsKKyAgICBwYWdlKCktPnByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlJlbmRlck5leHRGcmFtZSgpLCBwYWdl
KCktPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNpemVEaWRD
aGFuZ2UoKQpAQCAtMTU0LDkgKzg0LDYgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNp
emVEaWRDaGFuZ2UoKQogICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3ZpZXdTaXplID0gbV9zaXplOwotICAgIG1fbGFzdFNldFZpZXdTaXplID0gbV9z
aXplOwotCiAgICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkU2V0RnJhbWVOb3RpZmljYXRpb24pCiAg
ICAgICAgIHJldHVybjsKICAgICBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9u
ID0gdHJ1ZTsKQEAgLTE5Myw0NzkgKzEyMCwxMyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6c2V0UGFnZUlzVmlzaWJsZShib29sIGlzVmlzaWJsZSkKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHJlcXVlc3QgYSBmdWxsIHJlcGFpbnQgaGVyZSBpZiBuZWVkZWQuCiB9CiAKLXZvaWQgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjpkaWRTZXRTaXplKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQot
ewotICAgIEFTU0VSVChtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9uKTsKLSAg
ICBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0aW9uID0gZmFsc2U7Ci0KLSAgICBp
ZiAodmlld1NpemUgIT0gbV9sYXN0U2V0Vmlld1NpemUpCi0gICAgICAgIHNldFNpemUobV9sYXN0
U2V0Vmlld1NpemUsIEludFNpemUoKSk7Ci0KLSAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7Ci0gICAgcGFnZS0+cHJvY2VzcygpLT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0
b3AoKTsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVVcGRhdGVkKGludCB0
aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0IHNjYWxlLCB1bnNpZ25l
ZCBwZW5kaW5nVXBkYXRlQ291bnQpCi17Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGUqIHRpbGUg
PSBtX3RpbGVzQnlJRC5nZXQodGlsZUlEKTsKLSAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+SUQo
KSA9PSB0aWxlSUQpOwotICAgIGlmICh0aWxlKQotICAgICAgICB0aWxlLT5pbmNvcnBvcmF0ZVVw
ZGF0ZSh1cGRhdGVJbmZvLCBzY2FsZSk7Ci0gICAgdGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCk7
Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjphbGxUaWxlVXBkYXRlc1Byb2Nlc3Nl
ZCgpCi17Ci0gICAgdGlsZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpyZWdpc3RlclRpbGUoaW50IHRpbGVJRCwgVGlsZWREcmF3aW5nQXJl
YVRpbGUqIHRpbGUpCi17Ci0gICAgbV90aWxlc0J5SUQuc2V0KHRpbGVJRCwgdGlsZSk7Ci19Ci0K
LXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp1bnJlZ2lzdGVyVGlsZShpbnQgdGlsZUlEKQot
ewotICAgIG1fdGlsZXNCeUlELnJlbW92ZSh0aWxlSUQpOwotfQotCi12b2lkIFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6cmVxdWVzdFRpbGVVcGRhdGUoaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQotewotICAgIHBhZ2UoKS0+cHJvY2VzcygpLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpSZXF1ZXN0VGlsZVVwZGF0ZSh0aWxlSUQsIGRpcnR5UmVj
dCwgbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpKSwgcGFnZSgpLT5wYWdlSUQoKSk7
Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpjYW5jZWxUaWxlVXBkYXRlKGludCB0
aWxlSUQpCi17Ci0gICAgaWYgKCFwYWdlKCktPnByb2Nlc3MoKS0+aXNWYWxpZCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgcGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhOjpDYW5jZWxUaWxlVXBkYXRlKHRpbGVJRCksIHBhZ2UoKS0+cGFnZUlEKCkpOwotfQotCi12
b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKLXsKLSAgICBpZiAobV90aWxlU2l6ZSA9PSBzaXplKQotICAgICAgICByZXR1cm47Ci0gICAg
bV90aWxlU2l6ZSA9IHNpemU7Ci0gICAgcmVtb3ZlQWxsVGlsZXMoKTsKLSAgICBzdGFydFRpbGVD
cmVhdGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRUaWxl
Q3JlYXRpb25EZWxheShkb3VibGUgZGVsYXkpCi17Ci0gICAgbV90aWxlQ3JlYXRpb25EZWxheSA9
IGRlbGF5OwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0S2VlcEFuZENvdmVy
QXJlYU11bHRpcGxpZXJzKGNvbnN0IEZsb2F0U2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQotewotICAgIG1fa2VlcEFyZWFNdWx0aXBsaWVyID0g
a2VlcE11bHRpcGxpZXI7Ci0gICAgbV9jb3ZlckFyZWFNdWx0aXBsaWVyID0gY292ZXJNdWx0aXBs
aWVyOwotICAgIHN0YXJ0VGlsZUNyZWF0aW9uVGltZXIoKTsKLX0KLQotdm9pZCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudHNEaXJ0eVJlY3Qp
Ci17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QobV9jdXJyZW50VGlsZVNldC0+bWFwRnJvbUNvbnRl
bnRzKGNvbnRlbnRzRGlydHlSZWN0KSk7Ci0KLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSB0b3BMZWZ0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRp
b24oKSk7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQg
PSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGlubmVyQm90dG9tUmlnaHQoZGlydHlSZWN0KSk7Ci0K
LSAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IGNhbGN1bGF0ZUNvdmVyUmVjdCh2aXNpYmxlUmVjdCgp
KTsKLQotICAgIFZlY3RvcjxUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZT4gdGlsZXNU
b1JlbW92ZTsKLQotICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsg
eUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0g
Ym90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBSZWZQdHI8VGls
ZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxlID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMo
KS5nZXQoVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29y
ZGluYXRlKSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRUaWxlKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50VGlsZS0+cmVjdCgpLmludGVyc2Vj
dHMoZGlydHlSZWN0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8v
IElmIGEgdGlsZSBvdXRzaWRlIG91dCBjdXJyZW50IGNvdmVyIHJlY3QgZ2V0cyBpbnZhbGlkYXRl
ZCwganVzdCBkcm9wIGl0IGluc3RlYWQgb2YgdXBkYXRpbmcuCi0gICAgICAgICAgICBpZiAoIWN1
cnJlbnRUaWxlLT5yZWN0KCkuaW50ZXJzZWN0cyhjb3ZlclJlY3QpKSB7Ci0gICAgICAgICAgICAg
ICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQoY3VycmVudFRpbGUtPmNvb3JkaW5hdGUoKSk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50
VGlsZS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgcmVtb3ZlQ291bnQgPSB0aWxlc1RvUmVtb3ZlLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgbV9jdXJyZW50VGlsZVNl
dC0+dGlsZXMoKS5yZW1vdmUodGlsZXNUb1JlbW92ZVtuXSk7Ci0KLSAgICBzdGFydFRpbGVCdWZm
ZXJVcGRhdGVUaW1lcigpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRl
VGlsZUJ1ZmZlcnMoKQotewotICAgIFZlY3RvcjxSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+
ID4gbmV3RGlydHlUaWxlczsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6
aXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5lbmQoKTsKLSAgICBmb3Ig
KFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fY3VycmVu
dFRpbGVTZXQtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJl
ZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4mIGN1cnJlbnQgPSBpdC0+c2Vjb25kOwotICAgICAg
ICBpZiAoIWN1cnJlbnQtPmlzRGlydHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBuZXdEaXJ0eVRpbGVzLmFwcGVuZChpdC0+c2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3
RGlydHlUaWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHNp
emUgPSBuZXdEaXJ0eVRpbGVzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwg
c2l6ZTsgKytuKQotICAgICAgICBuZXdEaXJ0eVRpbGVzW25dLT51cGRhdGVCYWNrQnVmZmVyKCk7
Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQnVmZmVyVXBkYXRlQ29tcGxl
dGUoKQotewotICAgIC8vIEJhaWwgb3V0IGlmIGFsbCB0aWxlIGJhY2sgYnVmZmVycyBoYXZlIG5v
dCBiZWVuIHVwZGF0ZWQuCi0gICAgVmVjdG9yPFRpbGVkRHJhd2luZ0FyZWFUaWxlKj4gdGlsZXNU
b0ZsaXA7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuZW5kKCk7Ci0gICAgZm9yIChUaWxlZERyYXdp
bmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRUaWxlU2V0LT50
aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8VGlsZWRE
cmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50ID0gaXQtPnNlY29uZDsKLSAgICAgICAgaWYgKGN1cnJl
bnQtPmlzUmVhZHlUb1BhaW50KCkgJiYgKGN1cnJlbnQtPmlzRGlydHkoKSB8fCBjdXJyZW50LT5o
YXNCYWNrQnVmZmVyVXBkYXRlUGVuZGluZygpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKGN1cnJlbnQtPmhhc1JlYWR5QmFja0J1ZmZlcigpKQotICAgICAgICAgICAgdGlsZXNU
b0ZsaXAuYXBwZW5kKGN1cnJlbnQuZ2V0KCkpOwotICAgIH0KLSAgICAvLyBFdmVyeXRoaW5nIGRv
bmUsIG1vdmUgYmFjayBidWZmZXJzIHRvIGZyb250LgotICAgIFZlY3RvcjxJbnRSZWN0PiBwYWlu
dGVkQXJlYTsKLSAgICB1bnNpZ25lZCBzaXplID0gdGlsZXNUb0ZsaXAuc2l6ZSgpOwotICAgIGZv
ciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKLSAgICAgICAgVGlsZWREcmF3aW5n
QXJlYVRpbGUqIHRpbGUgPSB0aWxlc1RvRmxpcFtuXTsKLSAgICAgICAgdGlsZS0+c3dhcEJhY2tC
dWZmZXJUb0Zyb250KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IHJlcXVlc3Qgc3lz
dGVtIHJlcGFpbnQgZm9yIHRoZSBmdWxsIHRpbGUuCi0gICAgICAgIHBhaW50ZWRBcmVhLmFwcGVu
ZChtX2N1cnJlbnRUaWxlU2V0LT5tYXBUb0NvbnRlbnRzKHRpbGUtPnJlY3QoKSkpOwotICAgIH0K
LQotICAgIGlmIChtX3ByZXZpb3VzVGlsZVNldCAmJiAoY292ZXJhZ2VSYXRpbyhtX2N1cnJlbnRU
aWxlU2V0LmdldCgpLCB2aXNpYmxlUmVjdCgpKSA+PSAxLjBmIHx8ICFoYXNQZW5kaW5nVXBkYXRl
cygpKSkgewotICAgICAgICBwYWludGVkQXJlYS5jbGVhcigpOwotICAgICAgICBwYWludGVkQXJl
YS5hcHBlbmQobV92aXNpYmxlQ29udGVudFJlY3QpOwotICAgICAgICBtX3ByZXZpb3VzVGlsZVNl
dC5jbGVhcigpOwotICAgIH0KLQotICAgIGlmICghcGFpbnRlZEFyZWEuaXNFbXB0eSgpKQotICAg
ICAgICB1cGRhdGVXZWJWaWV3KHBhaW50ZWRBcmVhKTsKLQotICAgIG1fdGlsZUNyZWF0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFp
bnQoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQqIHRpbGVTZXQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ2MpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3Qg
PSB0aWxlU2V0LT5tYXBGcm9tQ29udGVudHMocmVjdCk7Ci0KLSAgICBUaWxlZERyYXdpbmdBcmVh
VGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJl
Y3QubG9jYXRpb24oKSk7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90
dG9tUmlnaHQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGlubmVyQm90dG9tUmlnaHQoZGlydHlS
ZWN0KSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9wTGVmdC55KCk7IHlD
b29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29yZGluYXRlIDw9IGJv
dHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgewotICAgICAgICAgICAgVGlsZWREcmF3aW5n
QXJlYVRpbGU6OkNvb3JkaW5hdGUgY3VycmVudENvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29y
ZGluYXRlKTsKLSAgICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVu
dFRpbGUgPSB0aWxlU2V0LT50aWxlcygpLmdldChjdXJyZW50Q29vcmRpbmF0ZSk7Ci0gICAgICAg
ICAgICBpZiAoY3VycmVudFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkpCi0g
ICAgICAgICAgICAgICAgY3VycmVudFRpbGUtPnBhaW50KCZnYywgZGlydHlSZWN0KTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQogYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QsIFBsYXRmb3JtRHJhd2luZ0NvbnRleHQgY29udGV4dCkK
IHsKLSAgICBpZiAobV9pc1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbikgewotICAg
ICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgICAgIGlmICghcGFn
ZS0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChw
YWdlLT5wcm9jZXNzKCktPmlzTGF1bmNoaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNvbnRleHQpOwotICAgIGdjLnNhdmUo
KTsKLQotICAgIC8vIEFzc3VtZXMgdGhlIGJhY2tpbmcgc3RvcmUgaXMgcGFpbnRlZCB3aXRoIHRo
ZSBzY2FsZSB0cmFuc2Zvcm0gYXBwbGllZC4KLSAgICAvLyBTaW5jZSB0aWxlIGNvbnRlbnQgaXMg
YWxyZWFkeSBzY2FsZWQsIGZpcnN0IHJldmVydCB0aGUgc2NhbGluZyBmcm9tIHRoZSBwYWludGVy
LgotICAgIGdjLnNjYWxlKEZsb2F0U2l6ZSgxIC8gbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNT
Y2FsZSgpLCAxIC8gbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpKSk7Ci0gICAgcGFp
bnQobV9jdXJyZW50VGlsZVNldC5nZXQoKSwgcmVjdCwgZ2MpOwotCi0gICAgLy8gUGFpbnQgdGhl
IHByZXZpb3VzIHNjYWxlIHRpbGVzLCBpZiBhbnksIG92ZXIgdGhlIGN1cnJlbnRseSB1cGRhdGlu
ZyB0aWxlcy4KLSAgICBpZiAobV9wcmV2aW91c1RpbGVTZXQpIHsKLSAgICAgICAgLy8gUmUtYXBw
bHkgdGhlIHJldmVydGVkIGN1cnJlbnQgdGlsZXMgc2NhbGluZyBhbmQgdGhlbgotICAgICAgICAv
LyByZXZlcnQgdGhlIHByZXZpb3VzIHRpbGVzIHNjYWxpbmcgdG8gZ2V0IG1hdGNoZWQgY29udGVu
dHMgc2NhbGUuCi0gICAgICAgIGZsb2F0IGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSA9
IG1fY3VycmVudFRpbGVTZXQtPmNvbnRlbnRzU2NhbGUoKSAvIG1fcHJldmlvdXNUaWxlU2V0LT5j
b250ZW50c1NjYWxlKCk7Ci0gICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShjdXJyZW50VG9QcmV2
aW91c1JldmVydGVkU2NhbGUsIGN1cnJlbnRUb1ByZXZpb3VzUmV2ZXJ0ZWRTY2FsZSkpOwotICAg
ICAgICBwYWludChtX3ByZXZpb3VzVGlsZVNldC5nZXQoKSwgcmVjdCwgZ2MpOwotICAgIH0KLQot
ICAgIGdjLnJlc3RvcmUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB2aXNpYmxlQ29udGVudFJlY3QpCi17Ci0gICAgaWYgKG1fdmlzaWJsZUNvbnRlbnRSZWN0ICE9
IHZpc2libGVDb250ZW50UmVjdCkgewotICAgICAgICBtX3Zpc2libGVDb250ZW50UmVjdCA9IHZp
c2libGVDb250ZW50UmVjdDsKLSAgICAgICAgc3RhcnRUaWxlQ3JlYXRpb25UaW1lcigpOwotICAg
IH0KLX0KLQotZmxvYXQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpjb3ZlcmFnZVJhdGlvKFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0KiB0aWxlU2V0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0
KQotewotICAgIEludFJlY3QgZGlydHlSZWN0ID0gdGlsZVNldC0+bWFwRnJvbUNvbnRlbnRzKHJl
Y3QpOwotICAgIGZsb2F0IHJlY3RBcmVhID0gZGlydHlSZWN0LndpZHRoKCkgKiBkaXJ0eVJlY3Qu
aGVpZ2h0KCk7Ci0gICAgZmxvYXQgY292ZXJBcmVhID0gMC4wZjsKLQotICAgIFRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRp
cnR5UmVjdC5sb2NhdGlvbigpKTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0
ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoaW5uZXJCb3R0b21SaWdodChk
aXJ0eVJlY3QpKTsKLQotICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0Lnko
KTsgeUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUg
PD0gYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwg
eUNvb3JkaW5hdGUpOwotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBj
dXJyZW50VGlsZSA9IHRpbGVTZXQtPnRpbGVzKCkuZ2V0KFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpD
b29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSkpOwotICAgICAgICAgICAgaWYgKGN1
cnJlbnRUaWxlICYmIGN1cnJlbnRUaWxlLT5pc1JlYWR5VG9QYWludCgpKSB7Ci0gICAgICAgICAg
ICAgICAgSW50UmVjdCBjb3ZlclJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBjdXJyZW50
VGlsZS0+cmVjdCgpKTsKLSAgICAgICAgICAgICAgICBjb3ZlckFyZWEgKz0gY292ZXJSZWN0Lndp
ZHRoKCkgKiBjb3ZlclJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGNvdmVyQXJlYSAvIHJlY3RBcmVhOwotfQotCi12b2lkIFRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKLXsKLSAgICBpZiAo
bV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBLZWVwIHRoZSBjdXJyZW50IHRpbGVzIGluIG1fcHJldmlvdXNUaWxlU2V0
IHdoaWxlIHRoZSBuZXcgc2NhbGUgdGlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQuCi0gICAgLy8gSWYg
bV9jdXJyZW50VGlsZVNldCBzdGlsbCBoYXNuJ3QgbW9yZSBwYWludGFibGUgY29udGVudCBmb3Ig
dGhlIGN1cnJlbnQgdmlld3BvcnQgcmVjdAotICAgIC8vIHRoYW4gbV9wcmV2aW91c1RpbGVTZXQs
IHRoZW4ga2VlcCB0aGUgb2xkIG1fcHJldmlvdXNUaWxlU2V0LiBUaGlzIGhhcHBlbnMgd2hlbgot
ICAgIC8vIHNldENvbnRlbnRzU2NhbGUgaXMgY2FsbGVkIHR3aWNlIHdoaWxlIG1fY3VycmVudFRp
bGVTZXQgc3RpbGwgY29udGFpbnMgZmV3IG9yIG5vIHJlbmRlcmVkIHRpbGVzLgotICAgIGlmICgh
bV9wcmV2aW91c1RpbGVTZXQgfHwgY292ZXJhZ2VSYXRpbyhtX3ByZXZpb3VzVGlsZVNldC5nZXQo
KSwgdmlzaWJsZVJlY3QoKSkgPCBjb3ZlcmFnZVJhdGlvKG1fY3VycmVudFRpbGVTZXQuZ2V0KCks
IHZpc2libGVSZWN0KCkpKSB7Ci0gICAgICAgIG1fcHJldmlvdXNUaWxlU2V0ID0gbV9jdXJyZW50
VGlsZVNldC5yZWxlYXNlKCk7Ci0gICAgICAgIGRpc2FibGVUaWxlU2V0VXBkYXRlcyhtX3ByZXZp
b3VzVGlsZVNldC5nZXQoKSk7Ci0gICAgfQotICAgIG1fY3VycmVudFRpbGVTZXQgPSBhZG9wdFB0
cihuZXcgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQobV93ZWJWaWV3LCBzY2FsZSkpOwotICAgIGNy
ZWF0ZVRpbGVzKCk7Ci19Ci0KLWRvdWJsZSBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVEaXN0
YW5jZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydCwgY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQotewotICAgIGlmICh2aWV3cG9ydC5pbnRlcnNl
Y3RzKHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIEludFBvaW50IHZpZXdDZW50ZXIgPSB2aWV3cG9ydC5sb2NhdGlvbigpICsg
SW50U2l6ZSh2aWV3cG9ydC53aWR0aCgpIC8gMiwgdmlld3BvcnQuaGVpZ2h0KCkgLyAyKTsKLSAg
ICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjZW50ZXJDb29yZGluYXRlID0gdGls
ZUNvb3JkaW5hdGVGb3JQb2ludCh2aWV3Q2VudGVyKTsKLQotICAgIC8vIE1hbmhhdHRhbiBkaXN0
YW5jZSwgYmlhc2VkIHNvIHRoYXQgdmVydGljYWwgZGlzdGFuY2VzIGFyZSBzaG9ydGVyLgotICAg
IGNvbnN0IGRvdWJsZSBob3Jpem9udGFsQmlhcyA9IDEuMzsKLSAgICByZXR1cm4gYWJzKGNlbnRl
ckNvb3JkaW5hdGUueSgpIC0gdGlsZUNvb3JkaW5hdGUueSgpKSArIGhvcml6b250YWxCaWFzICog
YWJzKGNlbnRlckNvb3JkaW5hdGUueCgpIC0gdGlsZUNvb3JkaW5hdGUueCgpKTsKLX0KLQotSW50
UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNhbGN1bGF0ZUtlZXBSZWN0KGNvbnN0IEludFJl
Y3QmIHZpc2libGVSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVzdWx0ID0gdmlzaWJsZVJl
Y3Q7Ci0gICAgLy8gSW5mbGF0ZXMgdG8gYm90aCBzaWRlcywgc28gZGl2aWRlIGluZmxhdGUgZGVs
dGEgYnkgMgotICAgIHJlc3VsdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpICogKG1fa2Vl
cEFyZWFNdWx0aXBsaWVyLndpZHRoKCkgLSAxKSAvIDIpOwotICAgIHJlc3VsdC5pbmZsYXRlWSh2
aXNpYmxlUmVjdC5oZWlnaHQoKSAqIChtX2tlZXBBcmVhTXVsdGlwbGllci5oZWlnaHQoKSAtIDEp
IC8gMik7Ci0gICAgcmVzdWx0LmludGVyc2VjdChjb250ZW50c1JlY3QoKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNhbGN1bGF0ZUNv
dmVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0
IHJlc3VsdCA9IHZpc2libGVSZWN0OwotICAgIC8vIEluZmxhdGVzIHRvIGJvdGggc2lkZXMsIHNv
IGRpdmlkZSBpbmZsYXRlIGRlbHRhIGJ5IDIKLSAgICByZXN1bHQuaW5mbGF0ZVgodmlzaWJsZVJl
Y3Qud2lkdGgoKSAqIChtX2NvdmVyQXJlYU11bHRpcGxpZXIud2lkdGgoKSAtIDEpIC8gMik7Ci0g
ICAgcmVzdWx0LmluZmxhdGVZKHZpc2libGVSZWN0LmhlaWdodCgpICogKG1fY292ZXJBcmVhTXVs
dGlwbGllci5oZWlnaHQoKSAtIDEpIC8gMik7Ci0gICAgcmVzdWx0LmludGVyc2VjdChjb250ZW50
c1JlY3QoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OmNyZWF0ZVRpbGVzKCkKLXsKLSAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdGhpcy0+
dmlzaWJsZVJlY3QoKTsKLSAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBSZXNpemUgdGlsZXMgb24gZWRnZXMgaW4gY2FzZSB0aGUgY29udGVu
dHMgc2l6ZSBoYXMgY2hhbmdlZC4KLSAgICBib29sIGRpZFJlc2l6ZVRpbGVzID0gcmVzaXplRWRn
ZVRpbGVzKCk7Ci0KLSAgICAvLyBSZW1vdmUgdGlsZXMgb3V0c2lkZSBvdXQgY3VycmVudCBtYXhp
bXVtIGtlZXAgcmVjdC4KLSAgICBkcm9wVGlsZXNPdXRzaWRlUmVjdChjYWxjdWxhdGVLZWVwUmVj
dCh2aXNpYmxlUmVjdCkpOwotCi0gICAgLy8gU2VhcmNoIGZvciB0aGUgdGlsZSBwb3NpdGlvbiBj
bG9zZXN0IHRvIHRoZSB2aWV3cG9ydCBjZW50ZXIgdGhhdCBkb2VzIG5vdCB5ZXQgY29udGFpbiBh
IHRpbGUuCi0gICAgLy8gV2hpY2ggcG9zaXRpb24gaXMgY29uc2lkZXJlZCB0aGUgY2xvc2VzdCBk
ZXBlbmRzIG9uIHRoZSB0aWxlRGlzdGFuY2UgZnVuY3Rpb24uCi0gICAgZG91YmxlIHNob3J0ZXN0
RGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0gICAg
VmVjdG9yPFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlPiB0aWxlc1RvQ3JlYXRlOwot
ICAgIHVuc2lnbmVkIHJlcXVpcmVkVGlsZUNvdW50ID0gMDsKLSAgICBib29sIGhhc1Zpc2libGVD
aGVja2VycyA9IGZhbHNlOwotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRv
cExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwot
ICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNv
b3JkaW5hdGVGb3JQb2ludChpbm5lckJvdHRvbVJpZ2h0KHZpc2libGVSZWN0KSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0
b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29v
cmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsr
eENvb3JkaW5hdGUpIHsKLSAgICAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGlu
YXRlIGN1cnJlbnRDb29yZGluYXRlKHhDb29yZGluYXRlLCB5Q29vcmRpbmF0ZSk7Ci0gICAgICAg
ICAgICAvLyBEaXN0YW5jZSBpcyAwIGZvciBhbGwgY3VycmVudGx5IHZpc2libGUgdGlsZXMuCi0g
ICAgICAgICAgICBkb3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2UodmlzaWJsZVJlY3QsIGN1
cnJlbnRDb29yZGluYXRlKTsKLQotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFU
aWxlPiB0aWxlID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5nZXQoY3VycmVudENvb3JkaW5h
dGUpOwotICAgICAgICAgICAgaWYgKCFkaXN0YW5jZSAmJiAoIXRpbGUgfHwgIXRpbGUtPmlzUmVh
ZHlUb1BhaW50KCkpKQotICAgICAgICAgICAgICAgIGhhc1Zpc2libGVDaGVja2VycyA9IHRydWU7
Ci0gICAgICAgICAgICBpZiAodGlsZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgKytyZXF1aXJlZFRpbGVDb3VudDsKLQotICAgICAgICAgICAgaWYgKGRpc3RhbmNl
ID4gc2hvcnRlc3REaXN0YW5jZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChkaXN0YW5jZSA8IHNob3J0ZXN0RGlzdGFuY2UpIHsKLSAgICAgICAgICAgICAgICB0
aWxlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgc2hvcnRlc3REaXN0YW5jZSA9
IGRpc3RhbmNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGlsZXNUb0NyZWF0ZS5hcHBl
bmQoY3VycmVudENvb3JkaW5hdGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhhc1Zp
c2libGVDaGVja2VycyAmJiBzaG9ydGVzdERpc3RhbmNlID4gMCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gTm93IGNvbnN0cnVjdCB0aGUgdGlsZShzKS4KLSAgICB1bnNpZ25lZCB0aWxlc1Rv
Q3JlYXRlQ291bnQgPSB0aWxlc1RvQ3JlYXRlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4g
PSAwOyBuIDwgdGlsZXNUb0NyZWF0ZUNvdW50OyArK24pIHsKLSAgICAgICAgVGlsZWREcmF3aW5n
QXJlYVRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IHRpbGVzVG9DcmVhdGVbbl07Ci0gICAg
ICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSA9IFRpbGVkRHJhd2luZ0FyZWFU
aWxlOjpjcmVhdGUodGhpcywgbV93ZWJWaWV3LCBjb29yZGluYXRlKTsKLSNpZiBQTEFURk9STShR
VCkKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudFRpbGVTZXQtPnNnTm9kZUlEKCkpOwotICAgICAg
ICB0aWxlLT5zZXRQYXJlbnROb2RlSUQobV9jdXJyZW50VGlsZVNldC0+c2dOb2RlSUQoKSk7Ci0j
ZW5kaWYKLSAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5zZXQoY29vcmRpbmF0ZSwg
dGlsZSk7Ci0gICAgfQotCi0gICAgcmVxdWlyZWRUaWxlQ291bnQgLT0gdGlsZXNUb0NyZWF0ZUNv
dW50OwotCi0gICAgLy8gUGFpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgdGls
ZXMuCi0gICAgaWYgKHRpbGVzVG9DcmVhdGVDb3VudCB8fCBkaWRSZXNpemVUaWxlcykKLSAgICAg
ICAgdXBkYXRlVGlsZUJ1ZmZlcnMoKTsKLQotICAgIC8vIEtlZXAgY3JlYXRpbmcgdGlsZXMgdW50
aWwgdGhlIHdob2xlIGNvdmVyUmVjdCBpcyBjb3ZlcmVkLgotICAgIGlmIChyZXF1aXJlZFRpbGVD
b3VudCkKLSAgICAgICAgbV90aWxlQ3JlYXRpb25UaW1lci5zdGFydE9uZVNob3QobV90aWxlQ3Jl
YXRpb25EZWxheSk7Ci19Ci0KLWJvb2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXNpemVFZGdl
VGlsZXMoKQotewotICAgIEludFJlY3QgY29udGVudHNSZWN0ID0gdGhpcy0+Y29udGVudHNSZWN0
KCk7Ci0gICAgYm9vbCB3YXNSZXNpemVkID0gZmFsc2U7Ci0KLSAgICBWZWN0b3I8VGlsZWREcmF3
aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9SZW1vdmU7Ci0gICAgVGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY3VycmVudFRpbGVTZXQtPnRp
bGVzKCkuZW5kKCk7Ci0gICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0aWxl
Q29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgSW50UmVjdCB0
aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKLSAgICAgICAgSW50UmVjdCBleHBlY3RlZFRp
bGVSZWN0ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKTsKLSAgICAgICAg
aWYgKCFjb250ZW50c1JlY3QuY29udGFpbnModGlsZVJlY3QpKQotICAgICAgICAgICAgdGlsZXNU
b1JlbW92ZS5hcHBlbmQodGlsZUNvb3JkaW5hdGUpOwotICAgICAgICBlbHNlIGlmIChleHBlY3Rl
ZFRpbGVSZWN0ICE9IHRpbGVSZWN0KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLT5yZXNpemUo
ZXhwZWN0ZWRUaWxlUmVjdC5zaXplKCkpOwotICAgICAgICAgICAgd2FzUmVzaXplZCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdW5zaWduZWQgcmVtb3ZlQ291bnQgPSB0aWxlc1RvUmVt
b3ZlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsr
bikKLSAgICAgICAgbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5yZW1vdmUodGlsZXNUb1JlbW92
ZVtuXSk7Ci0gICAgcmV0dXJuIHdhc1Jlc2l6ZWQ7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJl
YVByb3h5Ojpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKLXsK
LSAgICBGbG9hdFJlY3Qga2VlcFJlY3RGID0ga2VlcFJlY3Q7Ci0KLSAgICBWZWN0b3I8VGlsZWRE
cmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwotICAgIFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX2N1cnJlbnRUaWxlU2V0LT50aWxl
cygpLmVuZCgpOwotICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9jdXJyZW50VGlsZVNldC0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgY29vcmRp
bmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVS
ZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOwotICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2Vj
dHMoa2VlcFJlY3RGKSkKLSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsK
LSAgICB9Ci0gICAgdW5zaWduZWQgcmVtb3ZlQ291bnQgPSB0b1JlbW92ZS5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCi0gICAgICAgIG1fY3Vy
cmVudFRpbGVTZXQtPnRpbGVzKCkucmVtb3ZlKHRvUmVtb3ZlW25dKTsKLX0KLQotdm9pZCBUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OmRpc2FibGVUaWxlU2V0VXBkYXRlcyhUaWxlZERyYXdpbmdBcmVh
VGlsZVNldCogdGlsZVNldCkKLXsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGlsZVNldC0+dGlsZXMoKS5lbmQoKTsKLSAgICBmb3Ig
KFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRp
bGVTZXQtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT5kaXNhYmxlVXBkYXRlcygpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
cmVtb3ZlQWxsVGlsZXMoKQotewotICAgIG1fY3VycmVudFRpbGVTZXQgPSBhZG9wdFB0cihuZXcg
VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQobV93ZWJWaWV3LCBtX2N1cnJlbnRUaWxlU2V0LT5jb250
ZW50c1NjYWxlKCkpKTsKLX0KLQotCi1JbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y29u
dGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jdXJyZW50VGlsZVNldC0+bWFwRnJv
bUNvbnRlbnRzKEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld1NpemUpKTsKLX0KLQotSW50
UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnZpc2libGVSZWN0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9jdXJyZW50VGlsZVNldC0+bWFwRnJvbUNvbnRlbnRzKG1fdmlzaWJsZUNvbnRlbnRS
ZWN0KTsKLX0KLQotSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVSZWN0Rm9yQ29v
cmRpbmF0ZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0
ZSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QoY29vcmRpbmF0ZS54KCkgKiBtX3RpbGVTaXpl
LndpZHRoKCksCi0gICAgICAgICAgICAgICAgIGNvb3JkaW5hdGUueSgpICogbV90aWxlU2l6ZS5o
ZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgbV90aWxlU2l6ZS53aWR0aCgpLAotICAgICAgICAg
ICAgICAgICBtX3RpbGVTaXplLmhlaWdodCgpKTsKLQotICAgIHJlY3QuaW50ZXJzZWN0KGNvbnRl
bnRzUmVjdCgpKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQ29vcmRpbmF0ZUZvclBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBpbnQgeCA9IHBvaW50LngoKSAv
IG1fdGlsZVNpemUud2lkdGgoKTsKLSAgICBpbnQgeSA9IHBvaW50LnkoKSAvIG1fdGlsZVNpemUu
aGVpZ2h0KCk7Ci0gICAgcmV0dXJuIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlKHN0
ZDo6bWF4KHgsIDApLCBzdGQ6Om1heCh5LCAwKSk7Ci19Ci0KLQotdm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCkKLXsKLSAgICBpZiAobV90aWxl
QnVmZmVyVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGls
ZUJ1ZmZlclVwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKCkKLXsKLSAgICB1cGRhdGVU
aWxlQnVmZmVycygpOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c3RhcnRUaWxl
Q3JlYXRpb25UaW1lcigpCi17Ci0gICAgaWYgKG1fdGlsZUNyZWF0aW9uVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90
KDApOwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUNyZWF0aW9uVGltZXJG
aXJlZCgpCi17Ci0gICAgY3JlYXRlVGlsZXMoKTsKLX0KLQotYm9vbCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6Omhhc1BlbmRpbmdVcGRhdGVzKCkgY29uc3QKLXsKLSAgICBUaWxlZERyYXdpbmdBcmVh
VGlsZVNldDo6VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9jdXJyZW50VGlsZVNldC0+
dGlsZXMoKS5lbmQoKTsKLSAgICBmb3IgKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY3VycmVudFRpbGVTZXQtPnRpbGVzKCkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxUaWxlZERyYXdpbmdBcmVh
VGlsZT4mIGN1cnJlbnQgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoY3VycmVudC0+aGFzQmFj
a0J1ZmZlclVwZGF0ZVBlbmRpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VGlsZWREcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggMzEwZGYzNC4uOTU4NjQ5YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtMzQs
NyArMzQsNiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpbmNsdWRlICJSdW5Mb29w
LmgiCi0jaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVRpbGUuaCIKIAogI2lmIFBMQVRGT1JNKE1B
QykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC03NCwzMCArNzMsMTMgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CisgICAgdm9pZCByZW5kZXJO
ZXh0RnJhbWUoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoQ29tcG9zaXRpbmdDb250ZXh0KHVpbnQzMl90IC8qIGNvbnRleHRJRCAq
LykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaENvbXBvc2l0aW5nQ29udGV4dCgpIHsgfQog
I2VuZGlmCiAKLSAgICBXZWJDb3JlOjpJbnRTaXplIHRpbGVTaXplKCkgeyByZXR1cm4gbV90aWxl
U2l6ZTsgfQotICAgIHZvaWQgc2V0VGlsZVNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwot
Ci0gICAgZG91YmxlIHRpbGVDcmVhdGlvbkRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ3Jl
YXRpb25EZWxheTsgfQotICAgIHZvaWQgc2V0VGlsZUNyZWF0aW9uRGVsYXkoZG91YmxlIGRlbGF5
KTsKLQotICAgIC8vIFRpbGVkIGFyZSBkcm9wcGVkIG91dHNpZGUgdGhlIGtlZXAgYXJlYSwgYW5k
IGNyZWF0ZWQgZm9yIGNvdmVyIGFyZWEuIFRoZSB2YWx1ZXMgYSByZWxhdGl2ZSB0byB0aGUgdmll
d3BvcnQgc2l6ZS4KLSAgICB2b2lkIGdldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhXZWJD
b3JlOjpGbG9hdFNpemUmIGtlZXBNdWx0aXBsaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUmIGNvdmVy
TXVsdGlwbGllcikKLSAgICB7Ci0gICAgICAgIGtlZXBNdWx0aXBsaWVyID0gbV9rZWVwQXJlYU11
bHRpcGxpZXI7Ci0gICAgICAgIGNvdmVyTXVsdGlwbGllciA9IG1fY292ZXJBcmVhTXVsdGlwbGll
cjsKLSAgICB9Ci0gICAgdm9pZCBzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBrZWVwTXVsdGlwbGllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBjb3Zlck11bHRpcGxpZXIpOwotCi0gICAgdm9pZCB0aWxlQnVmZmVyVXBkYXRlQ29tcGxl
dGUoKTsKLQotICAgIGJvb2wgaGFzUGVuZGluZ1VwZGF0ZXMoKSBjb25zdDsKLQogcHJpdmF0ZToK
ICAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKTsKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXcoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWludGVkQXJlYSk7CkBAIC0xMDgsNzAgKzkwLDIw
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdl
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VJc1Zpc2libGUoYm9vbCBpc1Zpc2libGUpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwot
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3Qp
OwotICAgIHZpcnR1YWwgdm9pZCB0aWxlVXBkYXRlZChpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvLCBmbG9hdCBzY2FsZSwgdW5zaWduZWQgcGVuZGluZ1VwZGF0ZUNvdW50
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWxsVGlsZVVwZGF0ZXNQcm9jZXNzZWQoKTsKLQotICAgIHZv
aWQgcmVnaXN0ZXJUaWxlKGludCB0aWxlSUQsIFRpbGVkRHJhd2luZ0FyZWFUaWxlKik7Ci0gICAg
dm9pZCB1bnJlZ2lzdGVyVGlsZShpbnQgdGlsZUlEKTsKLSAgICB2b2lkIHJlcXVlc3RUaWxlVXBk
YXRlKGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAg
dm9pZCBjYW5jZWxUaWxlVXBkYXRlKGludCB0aWxlSUQpOwotCi0gICAgdm9pZCBzdGFydFRpbGVC
dWZmZXJVcGRhdGVUaW1lcigpOwotICAgIHZvaWQgc3RhcnRUaWxlQ3JlYXRpb25UaW1lcigpOwot
Ci0gICAgdm9pZCB0aWxlQnVmZmVyVXBkYXRlVGltZXJGaXJlZCgpOwotICAgIHZvaWQgdGlsZUNy
ZWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCB1cGRhdGVUaWxlQnVmZmVycygpOwotICAg
IHZvaWQgY3JlYXRlVGlsZXMoKTsKLQotICAgIGJvb2wgcmVzaXplRWRnZVRpbGVzKCk7Ci0gICAg
dm9pZCBkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAg
ICB2b2lkIGRpc2FibGVUaWxlU2V0VXBkYXRlcyhUaWxlZERyYXdpbmdBcmVhVGlsZVNldCopOwot
ICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShp
bnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgVXBkYXRlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZW5kZXJGcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOwog
Ci0gICAgdm9pZCBwYWludChUaWxlZERyYXdpbmdBcmVhVGlsZVNldCosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKLSAgICBmbG9hdCBjb3ZlcmFn
ZVJhdGlvKFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICBXZWJD
b3JlOjpJbnRSZWN0IHZpc2libGVSZWN0KCkgY29uc3Q7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0
IGNhbGN1bGF0ZUtlZXBSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVSZWN0KSBj
b25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB2aXNpYmxlUmVjdCkgY29uc3Q7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0
IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRp
bmF0ZSYpIGNvbnN0OwotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRpbGVD
b29yZGluYXRlRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBk
b3VibGUgdGlsZURpc3RhbmNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdwb3J0LCBjb25z
dCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYpOwogCiBwcml2YXRlOgogICAgIGJv
b2wgbV9pc1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbjsKICAgICBib29sIG1faXNW
aXNpYmxlOwogCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdTaXplOyAvLyBTaXplIG9mIHRo
ZSBCYWNraW5nU3RvcmUgYXMgd2VsbC4KLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fbGFzdFNldFZp
ZXdTaXplOwotCiAgICAgUGxhdGZvcm1XZWJWaWV3KiBtX3dlYlZpZXc7Ci0KLSAgICBPd25QdHI8
VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ+IG1fY3VycmVudFRpbGVTZXQ7Ci0gICAgT3duUHRyPFRp
bGVkRHJhd2luZ0FyZWFUaWxlU2V0PiBtX3ByZXZpb3VzVGlsZVNldDsKLQotICAgIFdURjo6SGFz
aE1hcDxpbnQsIFRpbGVkRHJhd2luZ0FyZWFUaWxlKj4gbV90aWxlc0J5SUQ7Ci0KLSAgICB0eXBl
ZGVmIFJ1bkxvb3A6OlRpbWVyPFRpbGVkRHJhd2luZ0FyZWFQcm94eT4gVGlsZVRpbWVyOwotICAg
IFRpbGVUaW1lciBtX3RpbGVCdWZmZXJVcGRhdGVUaW1lcjsKLSAgICBUaWxlVGltZXIgbV90aWxl
Q3JlYXRpb25UaW1lcjsKLQotICAgIFdlYkNvcmU6OkludFNpemUgbV90aWxlU2l6ZTsKLSAgICBk
b3VibGUgbV90aWxlQ3JlYXRpb25EZWxheTsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9rZWVw
QXJlYU11bHRpcGxpZXI7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY292ZXJBcmVhTXVsdGlw
bGllcjsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudFJlY3Q7Ci0KLSAg
ICBmcmllbmQgY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRpbGU7CisjaWYgUExBVEZPUk0oUVQpCisg
ICAgSGFzaE1hcDxpbnQsIGludD4gbV90aWxlTm9kZU1hcDsKKyNlbmRpZgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGls
ZWREcmF3aW5nQXJlYVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdp
bmdBcmVhVGlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTUzNzhjLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgVGlsZWREcmF3aW5nQXJlYVRpbGVfaAotI2RlZmluZSBUaWxlZERyYXdpbmdB
cmVhVGlsZV9oCi0KLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgIkludFBvaW50SGFz
aC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxRUGl4bWFwPgotI2luY2x1ZGUgPFFSZWdp
b24+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTsKLWNsYXNzIFVwZGF0ZUluZm87Ci0KLSNpZiBQTEFURk9STShNQUMpCi10eXBlZGVm
IFdLVmlldyBQbGF0Zm9ybVdlYlZpZXc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi1jbGFzcyBXZWJW
aWV3OwotdHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKLSNlbGlmIFBMQVRGT1JNKFFU
KQotY2xhc3MgU0dBZ2VudDsKLWNsYXNzIFRvdWNoVmlld0ludGVyZmFjZTsKLXR5cGVkZWYgVG91
Y2hWaWV3SW50ZXJmYWNlIFBsYXRmb3JtV2ViVmlldzsKLSNlbmRpZgotCi1jbGFzcyBUaWxlZERy
YXdpbmdBcmVhVGlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBXZWJDb3JlOjpJbnRQb2ludCBDb29yZGluYXRlOwotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGNyZWF0ZShUaWxlZERy
YXdpbmdBcmVhUHJveHkqIHByb3h5LCBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENv
b3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGlsZWREcmF3
aW5nQXJlYVRpbGUocHJveHksIHdlYlZpZXcsIHRpbGVDb29yZGluYXRlKSk7IH0KLSAgICB+VGls
ZWREcmF3aW5nQXJlYVRpbGUoKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotICAgIHZv
aWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCB1cGRhdGVC
YWNrQnVmZmVyKCk7Ci0gICAgYm9vbCBoYXNSZWFkeUJhY2tCdWZmZXIoKSBjb25zdDsKLSAgICB2
b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwotICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBj
b25zdDsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICBib29sIGhhc0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNVcGRhdGVQZW5kaW5nOyB9Ci0KLSAgICBjb25zdCBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29vcmRpbmF0ZTsgfQotICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KLSAgICB2b2lkIHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7Ci0KLSAgICB2b2lkIGluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mLCBmbG9h
dCBzY2FsZSk7Ci0gICAgdm9pZCBkaXNhYmxlVXBkYXRlcygpOwotCi0gICAgaW50IElEKCkgY29u
c3QgeyByZXR1cm4gbV9JRDsgfQotI2lmIFBMQVRGT1JNKFFUKQotICAgIHZvaWQgc2V0UGFyZW50
Tm9kZUlEKGludCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBUaWxlZERyYXdpbmdBcmVhVGls
ZShUaWxlZERyYXdpbmdBcmVhUHJveHkqLCBQbGF0Zm9ybVdlYlZpZXcqLCBjb25zdCBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpOwotCi0gICAgVGlsZWRE
cmF3aW5nQXJlYVByb3h5KiBtX3Byb3h5OwotICAgIENvb3JkaW5hdGUgbV9jb29yZGluYXRlOwot
ICAgIFdlYkNvcmU6OkludFJlY3QgbV9yZWN0OwotCi0gICAgaW50IG1fSUQ7Ci0gICAgYm9vbCBt
X2hhc1VwZGF0ZVBlbmRpbmc7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRSW1hZ2UgbV9iYWNr
QnVmZmVyOwotICAgIFNHQWdlbnQqIG1fc2dBZ2VudDsKLSAgICBpbnQgbV9ub2RlSUQ7Ci0gICAg
aW50IG1fcGFyZW50Tm9kZUlEOwotICAgIGJvb2wgbV9pc0JhY2tCdWZmZXJWYWxpZDsKLSAgICBR
UmVnaW9uIG1fZGlydHlSZWdpb247Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvU0dBZ2VudC5jcHAKaW5kZXggOGYwNGM3My4uYzkzM2NjZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR0FnZW50LmNwcApAQCAtMjMsODggKzIzLDgxIEBA
CiAKICNpbmNsdWRlICJQYXNzT3duUHRyLmgiCiAjaW5jbHVkZSAiU0dUaWxlTm9kZS5oIgotI2lu
Y2x1ZGUgPFFTR0VuZ2luZT4KICNpbmNsdWRlIDxRU0dJdGVtPgotI2luY2x1ZGUgPFFTR1RleHR1
cmU+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUg
OiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUoaW50IG5vZGVJ
RCwgaW50IHBhcmVudE5vZGVJRCkKKyAgICBOb2RlVXBkYXRlQ3JlYXRlVGlsZShpbnQgbm9kZUlE
LCBmbG9hdCBzY2FsZSkKICAgICAgICAgOiBOb2RlVXBkYXRlKENyZWF0ZVRpbGUpCiAgICAgICAg
ICwgbm9kZUlEKG5vZGVJRCkKLSAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlEKQot
ICAgIHsgfQotICAgIGludCBub2RlSUQ7Ci0gICAgaW50IHBhcmVudE5vZGVJRDsKLX07Ci0KLXN0
cnVjdCBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9k
ZVVwZGF0ZUNyZWF0ZVNjYWxlKGludCBub2RlSUQsIGludCBwYXJlbnROb2RlSUQsIGZsb2F0IHNj
YWxlKQotICAgICAgICA6IE5vZGVVcGRhdGUoQ3JlYXRlU2NhbGUpCi0gICAgICAgICwgbm9kZUlE
KG5vZGVJRCkKLSAgICAgICAgLCBwYXJlbnROb2RlSUQocGFyZW50Tm9kZUlEKQogICAgICAgICAs
IHNjYWxlKHNjYWxlKQogICAgIHsgfQogICAgIGludCBub2RlSUQ7Ci0gICAgaW50IHBhcmVudE5v
ZGVJRDsKICAgICBmbG9hdCBzY2FsZTsKIH07CiAKLXN0cnVjdCBOb2RlVXBkYXRlUmVtb3ZlIDog
cHVibGljIE5vZGVVcGRhdGUgewotICAgIE5vZGVVcGRhdGVSZW1vdmUoaW50IG5vZGVJRCkKLSAg
ICAgICAgOiBOb2RlVXBkYXRlKFJlbW92ZSkKK3N0cnVjdCBOb2RlVXBkYXRlUmVtb3ZlVGlsZSA6
IHB1YmxpYyBOb2RlVXBkYXRlIHsKKyAgICBOb2RlVXBkYXRlUmVtb3ZlVGlsZShpbnQgbm9kZUlE
KQorICAgICAgICA6IE5vZGVVcGRhdGUoUmVtb3ZlVGlsZSkKICAgICAgICAgLCBub2RlSUQobm9k
ZUlEKQogICAgIHsgfQogICAgIGludCBub2RlSUQ7CiB9OwogCi1zdHJ1Y3QgTm9kZVVwZGF0ZVNl
dFRleHR1cmUgOiBwdWJsaWMgTm9kZVVwZGF0ZSB7Ci0gICAgTm9kZVVwZGF0ZVNldFRleHR1cmUo
aW50IG5vZGVJRCwgY29uc3QgUUltYWdlJiB0ZXh0dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVj
dCwgY29uc3QgUVJlY3QmIHRhcmdldFJlY3QpCi0gICAgICAgIDogTm9kZVVwZGF0ZShTZXRUZXh0
dXJlKQorc3RydWN0IE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyIDogcHVibGljIE5vZGVVcGRhdGUg
eworICAgIE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyKGludCBub2RlSUQsIGNvbnN0IFFJbWFnZSYg
YmFja0J1ZmZlciwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0JiB0YXJnZXRS
ZWN0KQorICAgICAgICA6IE5vZGVVcGRhdGUoU2V0QmFja0J1ZmZlcikKICAgICAgICAgLCBub2Rl
SUQobm9kZUlEKQotICAgICAgICAsIHRleHR1cmUodGV4dHVyZSkKKyAgICAgICAgLCBiYWNrQnVm
ZmVyKGJhY2tCdWZmZXIpCiAgICAgICAgICwgc291cmNlUmVjdChzb3VyY2VSZWN0KQogICAgICAg
ICAsIHRhcmdldFJlY3QodGFyZ2V0UmVjdCkKICAgICB7IH0KICAgICBpbnQgbm9kZUlEOwotICAg
IFFJbWFnZSB0ZXh0dXJlOworICAgIFFJbWFnZSBiYWNrQnVmZmVyOwogICAgIFFSZWN0IHNvdXJj
ZVJlY3Q7CiAgICAgUVJlY3QgdGFyZ2V0UmVjdDsKIH07CiAKK3N0cnVjdCBOb2RlVXBkYXRlU3dh
cFRpbGVCdWZmZXJzIDogcHVibGljIE5vZGVVcGRhdGUgeworICAgIE5vZGVVcGRhdGVTd2FwVGls
ZUJ1ZmZlcnMoKQorICAgICAgICA6IE5vZGVVcGRhdGUoU3dhcFRpbGVCdWZmZXJzKQorICAgIHsg
fQorfTsKIAogU0dBZ2VudDo6U0dBZ2VudChRU0dJdGVtKiBpdGVtKQogICAgIDogaXRlbShpdGVt
KQorICAgICwgbGFzdFNjYWxlKDApCisgICAgLCBsYXN0U2NhbGVOb2RlKDApCiAgICAgLCBuZXh0
Tm9kZUlEKDEpCisgICAgLCBtX2lzU3dhcFBlbmRpbmcoZmFsc2UpCiB7CiB9CiAKLWludCBTR0Fn
ZW50OjpjcmVhdGVUaWxlTm9kZShpbnQgcGFyZW50Tm9kZUlEKQoraW50IFNHQWdlbnQ6OmNyZWF0
ZVRpbGVOb2RlKGZsb2F0IHNjYWxlKQogewogICAgIGludCBub2RlSUQgPSBuZXh0Tm9kZUlEKys7
Ci0gICAgbm9kZVVwZGF0ZXNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vZGVVcGRhdGVDcmVh
dGVUaWxlKG5vZGVJRCwgcGFyZW50Tm9kZUlEKSkpOworICAgIG5vZGVVcGRhdGVzUXVldWUuYXBw
ZW5kKGFkb3B0UHRyKG5ldyBOb2RlVXBkYXRlQ3JlYXRlVGlsZShub2RlSUQsIHNjYWxlKSkpOwog
ICAgIGl0ZW0tPnVwZGF0ZSgpOwogICAgIHJldHVybiBub2RlSUQ7CiB9CiAKLWludCBTR0FnZW50
OjpjcmVhdGVTY2FsZU5vZGUoaW50IHBhcmVudE5vZGVJRCwgZmxvYXQgc2NhbGUpCit2b2lkIFNH
QWdlbnQ6OnJlbW92ZVRpbGVOb2RlKGludCBub2RlSUQpCiB7Ci0gICAgaW50IG5vZGVJRCA9IG5l
eHROb2RlSUQrKzsKLSAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9k
ZVVwZGF0ZUNyZWF0ZVNjYWxlKG5vZGVJRCwgcGFyZW50Tm9kZUlELCBzY2FsZSkpKTsKKyAgICBu
b2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVJlbW92ZVRpbGUo
bm9kZUlEKSkpOwogICAgIGl0ZW0tPnVwZGF0ZSgpOwotICAgIHJldHVybiBub2RlSUQ7CiB9CiAK
LXZvaWQgU0dBZ2VudDo6cmVtb3ZlTm9kZShpbnQgbm9kZUlEKQordm9pZCBTR0FnZW50OjpzZXRO
b2RlQmFja0J1ZmZlcihpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIGJhY2tCdWZmZXIsIGNvbnN0
IFFSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBub2Rl
VXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVwZGF0ZVJlbW92ZShub2RlSUQp
KSk7CisgICAgbm9kZVVwZGF0ZXNRdWV1ZS5hcHBlbmQoYWRvcHRQdHIobmV3IE5vZGVVcGRhdGVT
ZXRCYWNrQnVmZmVyKG5vZGVJRCwgYmFja0J1ZmZlciwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCkp
KTsKICAgICBpdGVtLT51cGRhdGUoKTsKIH0KIAotdm9pZCBTR0FnZW50OjpzZXROb2RlVGV4dHVy
ZShpbnQgbm9kZUlELCBjb25zdCBRSW1hZ2UmIHRleHR1cmUsIGNvbnN0IFFSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBRUmVjdCYgdGFyZ2V0UmVjdCkKK3ZvaWQgU0dBZ2VudDo6c3dhcFRpbGVCdWZm
ZXJzKCkKIHsKLSAgICBub2RlVXBkYXRlc1F1ZXVlLmFwcGVuZChhZG9wdFB0cihuZXcgTm9kZVVw
ZGF0ZVNldFRleHR1cmUobm9kZUlELCB0ZXh0dXJlLCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0KSkp
OworICAgIG5vZGVVcGRhdGVzUXVldWUuYXBwZW5kKGFkb3B0UHRyKG5ldyBOb2RlVXBkYXRlU3dh
cFRpbGVCdWZmZXJzKCkpKTsKKyAgICBtX2lzU3dhcFBlbmRpbmcgPSB0cnVlOwogICAgIGl0ZW0t
PnVwZGF0ZSgpOwogfQogCkBAIC0xMTUsMzkgKzEwOCwzOCBAQCB2b2lkIFNHQWdlbnQ6OnVwZGF0
ZVBhaW50Tm9kZShRU0dOb2RlKiBpdGVtTm9kZSkKICAgICAgICAgc3dpdGNoIChub2RlVXBkYXRl
LT50eXBlKSB7CiAgICAgICAgIGNhc2UgTm9kZVVwZGF0ZTo6Q3JlYXRlVGlsZTogewogICAgICAg
ICAgICAgTm9kZVVwZGF0ZUNyZWF0ZVRpbGUqIGNyZWF0ZVRpbGVVcGRhdGUgPSBzdGF0aWNfY2Fz
dDxOb2RlVXBkYXRlQ3JlYXRlVGlsZSo+KG5vZGVVcGRhdGUuZ2V0KCkpOwotICAgICAgICAgICAg
U0dUaWxlTm9kZSogdGlsZU5vZGUgPSBuZXcgU0dUaWxlTm9kZTsKLSAgICAgICAgICAgIFFTR05v
ZGUqIHBhcmVudE5vZGUgPSBjcmVhdGVUaWxlVXBkYXRlLT5wYXJlbnROb2RlSUQgPyBub2Rlcy5n
ZXQoY3JlYXRlVGlsZVVwZGF0ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOwotICAgICAgICAg
ICAgcGFyZW50Tm9kZS0+cHJlcGVuZENoaWxkTm9kZSh0aWxlTm9kZSk7CisgICAgICAgICAgICBT
R1RpbGVOb2RlKiB0aWxlTm9kZSA9IG5ldyBTR1RpbGVOb2RlKGl0ZW0tPnNjZW5lR3JhcGhFbmdp
bmUoKSk7CisgICAgICAgICAgICBnZXRTY2FsZU5vZGUoY3JlYXRlVGlsZVVwZGF0ZS0+c2NhbGUs
IGl0ZW1Ob2RlKS0+cHJlcGVuZENoaWxkTm9kZSh0aWxlTm9kZSk7CiAgICAgICAgICAgICBub2Rl
cy5zZXQoY3JlYXRlVGlsZVVwZGF0ZS0+bm9kZUlELCB0aWxlTm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OkNyZWF0ZVNjYWxlOiB7
Ci0gICAgICAgICAgICBOb2RlVXBkYXRlQ3JlYXRlU2NhbGUqIGNyZWF0ZVNjYWxlVXBkYXRlID0g
c3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZUNyZWF0ZVNjYWxlKj4obm9kZVVwZGF0ZS5nZXQoKSk7Ci0g
ICAgICAgICAgICBRU0dUcmFuc2Zvcm1Ob2RlKiBzY2FsZU5vZGUgPSBuZXcgUVNHVHJhbnNmb3Jt
Tm9kZTsKLSAgICAgICAgICAgIFFNYXRyaXg0eDQgc2NhbGVNYXRyaXg7Ci0gICAgICAgICAgICAv
LyBVc2Ugc2NhbGUoZmxvYXQsZmxvYXQpIHRvIHByZXZlbnQgc2NhbGluZyB0aGUgWiBjb21wb25l
bnQuCi0gICAgICAgICAgICBzY2FsZU1hdHJpeC5zY2FsZShjcmVhdGVTY2FsZVVwZGF0ZS0+c2Nh
bGUsIGNyZWF0ZVNjYWxlVXBkYXRlLT5zY2FsZSk7Ci0gICAgICAgICAgICBzY2FsZU5vZGUtPnNl
dE1hdHJpeChzY2FsZU1hdHJpeCk7Ci0gICAgICAgICAgICBRU0dOb2RlKiBwYXJlbnROb2RlID0g
Y3JlYXRlU2NhbGVVcGRhdGUtPnBhcmVudE5vZGVJRCA/IG5vZGVzLmdldChjcmVhdGVTY2FsZVVw
ZGF0ZS0+cGFyZW50Tm9kZUlEKSA6IGl0ZW1Ob2RlOwotICAgICAgICAgICAgLy8gUHJlcGVuZCBp
bnN0ZWFkIG9mIGFwcGVuZCB0byBwYWludCB0aGUgbmV3LCBpbmNvbXBsZXRlLCB0aWxlc2V0IGJl
Zm9yZS9iZWhpbmQgdGhlIHByZXZpb3VzIG9uZS4KLSAgICAgICAgICAgIHBhcmVudE5vZGUtPnBy
ZXBlbmRDaGlsZE5vZGUoc2NhbGVOb2RlKTsKLSAgICAgICAgICAgIG5vZGVzLnNldChjcmVhdGVT
Y2FsZVVwZGF0ZS0+bm9kZUlELCBzY2FsZU5vZGUpOworICAgICAgICBjYXNlIE5vZGVVcGRhdGU6
OlJlbW92ZVRpbGU6IHsKKyAgICAgICAgICAgIE5vZGVVcGRhdGVSZW1vdmVUaWxlKiByZW1vdmVV
cGRhdGUgPSBzdGF0aWNfY2FzdDxOb2RlVXBkYXRlUmVtb3ZlVGlsZSo+KG5vZGVVcGRhdGUuZ2V0
KCkpOworICAgICAgICAgICAgUVNHTm9kZSogbm9kZSA9IG5vZGVzLnRha2UocmVtb3ZlVXBkYXRl
LT5ub2RlSUQpOworICAgICAgICAgICAgUVNHTm9kZSogc2NhbGVOb2RlID0gbm9kZS0+cGFyZW50
KCk7CisKKyAgICAgICAgICAgIHNjYWxlTm9kZS0+cmVtb3ZlQ2hpbGROb2RlKG5vZGUpOworICAg
ICAgICAgICAgaWYgKCFzY2FsZU5vZGUtPmNoaWxkQ291bnQoKSkgeworICAgICAgICAgICAgICAg
IGlmIChzY2FsZU5vZGUgPT0gbGFzdFNjYWxlTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBs
YXN0U2NhbGUgPSAwOworICAgICAgICAgICAgICAgICAgICBsYXN0U2NhbGVOb2RlID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVsZXRlIHNjYWxlTm9kZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBub2RlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpSZW1vdmU6IHsKLSAgICAgICAgICAg
IE5vZGVVcGRhdGVSZW1vdmUqIHJlbW92ZVVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVVcGRhdGVS
ZW1vdmUqPihub2RlVXBkYXRlLmdldCgpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBub2Rlcy50YWtl
KHJlbW92ZVVwZGF0ZS0+bm9kZUlEKTsKKyAgICAgICAgY2FzZSBOb2RlVXBkYXRlOjpTZXRCYWNr
QnVmZmVyOiB7CisgICAgICAgICAgICBOb2RlVXBkYXRlU2V0QmFja0J1ZmZlciogc2V0QmFja0J1
ZmZlclVwZGF0ZSA9IHN0YXRpY19jYXN0PE5vZGVVcGRhdGVTZXRCYWNrQnVmZmVyKj4obm9kZVVw
ZGF0ZS5nZXQoKSk7CisgICAgICAgICAgICBTR1RpbGVOb2RlKiB0aWxlTm9kZSA9IG5vZGVzLmdl
dChzZXRCYWNrQnVmZmVyVXBkYXRlLT5ub2RlSUQpOworICAgICAgICAgICAgdGlsZU5vZGUtPnNl
dEJhY2tCdWZmZXIoc2V0QmFja0J1ZmZlclVwZGF0ZS0+YmFja0J1ZmZlciwgc2V0QmFja0J1ZmZl
clVwZGF0ZS0+c291cmNlUmVjdCwgc2V0QmFja0J1ZmZlclVwZGF0ZS0+dGFyZ2V0UmVjdCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGVVcGRhdGU6OlNl
dFRleHR1cmU6IHsKLSAgICAgICAgICAgIE5vZGVVcGRhdGVTZXRUZXh0dXJlKiBzZXRUZXh0dXJl
VXBkYXRlID0gc3RhdGljX2Nhc3Q8Tm9kZVVwZGF0ZVNldFRleHR1cmUqPihub2RlVXBkYXRlLmdl
dCgpKTsKLSAgICAgICAgICAgIFNHVGlsZU5vZGUqIHRpbGVOb2RlID0gc3RhdGljX2Nhc3Q8U0dU
aWxlTm9kZSo+KG5vZGVzLmdldChzZXRUZXh0dXJlVXBkYXRlLT5ub2RlSUQpKTsKLSAgICAgICAg
ICAgIGlmICh0aWxlTm9kZSkgewotICAgICAgICAgICAgICAgIFFTR1RleHR1cmUqIHRleHR1cmUg
PSBpdGVtLT5zY2VuZUdyYXBoRW5naW5lKCktPmNyZWF0ZVRleHR1cmVGcm9tSW1hZ2Uoc2V0VGV4
dHVyZVVwZGF0ZS0+dGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRleHR1
cmUodGV4dHVyZSk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNldFRhcmdldFJlY3Qoc2V0
VGV4dHVyZVVwZGF0ZS0+dGFyZ2V0UmVjdCk7Ci0gICAgICAgICAgICAgICAgdGlsZU5vZGUtPnNl
dFNvdXJjZVJlY3QodGV4dHVyZS0+Y29udmVydFRvTm9ybWFsaXplZFNvdXJjZVJlY3Qoc2V0VGV4
dHVyZVVwZGF0ZS0+c291cmNlUmVjdCkpOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE5v
ZGVVcGRhdGU6OlN3YXBUaWxlQnVmZmVyczogeworICAgICAgICAgICAgSGFzaE1hcDxpbnQsIFNH
VGlsZU5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbm9kZXMuZW5kKCk7CisgICAgICAgICAgICBmb3Ig
KEhhc2hNYXA8aW50LCBTR1RpbGVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbm9kZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQtPnN3YXBCdWZmZXJz
SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIG1faXNTd2FwUGVuZGluZyA9IGZhbHNlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKQEAgLTE1Niw0ICsxNDgs
MjMgQEAgdm9pZCBTR0FnZW50Ojp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogaXRlbU5vZGUpCiAg
ICAgfQogfQogCitRU0dOb2RlKiBTR0FnZW50OjpnZXRTY2FsZU5vZGUoZmxvYXQgc2NhbGUsIFFT
R05vZGUqIGl0ZW1Ob2RlKQoreworICAgIGlmIChzY2FsZSA9PSBsYXN0U2NhbGUpCisgICAgICAg
IHJldHVybiBsYXN0U2NhbGVOb2RlOworCisgICAgUVNHVHJhbnNmb3JtTm9kZSogc2NhbGVOb2Rl
ID0gbmV3IFFTR1RyYW5zZm9ybU5vZGU7CisgICAgUU1hdHJpeDR4NCBzY2FsZU1hdHJpeDsKKyAg
ICAvLyBVc2Ugc2NhbGUoZmxvYXQsZmxvYXQpIHRvIHByZXZlbnQgc2NhbGluZyB0aGUgWiBjb21w
b25lbnQuCisgICAgLy8gUmV2ZXJzZSB0aGUgaXRlbSdzIHRyYW5zZm9ybSBzY2FsZSBzaW5jZSBv
dXIgdGlsZXMgd2VyZSBnZW5lcmF0ZWQgZm9yIHRoaXMgc3BlY2lmaWMgc2NhbGUuCisgICAgc2Nh
bGVNYXRyaXguc2NhbGUoMSAvIHNjYWxlLCAxIC8gc2NhbGUpOworICAgIHNjYWxlTm9kZS0+c2V0
TWF0cml4KHNjYWxlTWF0cml4KTsKKyAgICAvLyBQcmVwZW5kIGluc3RlYWQgb2YgYXBwZW5kIHRv
IHBhaW50IHRoZSBuZXcsIGluY29tcGxldGUsIHNjYWxlIGJlZm9yZS9iZWhpbmQgdGhlIHByZXZp
b3VzIG9uZS4KKyAgICBpdGVtTm9kZS0+cHJlcGVuZENoaWxkTm9kZShzY2FsZU5vZGUpOworCisg
ICAgbGFzdFNjYWxlID0gc2NhbGU7CisgICAgbGFzdFNjYWxlTm9kZSA9IHNjYWxlTm9kZTsKKyAg
ICByZXR1cm4gbGFzdFNjYWxlTm9kZTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9T
R0FnZW50LmgKaW5kZXggYzljNDc3MS4uYWYyZjkzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1NHQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvU0dBZ2VudC5oCkBAIC0zNSwzMyArMzUsNDAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIE5vZGVVcGRhdGU7CiBjbGFzcyBQYWdlTm9kZTsKK2NsYXNzIFNHVGlsZU5vZGU7CiAKIC8v
IFRha2VzIGNhcmUgb2YgdGFraW5nIHVwZGF0ZSByZXF1ZXN0cyB0aGVuIGZ1bGZpbGxpbmcgdGhl
bSBhc3luY2hyb25vdXNseSBvbiB0aGUgc2NlbmUgZ3JhcGggdGhyZWFkLgogY2xhc3MgU0dBZ2Vu
dCB7CiBwdWJsaWM6CiAgICAgU0dBZ2VudChRU0dJdGVtKik7CiAKLSAgICBpbnQgY3JlYXRlVGls
ZU5vZGUoaW50IHBhcmVudE5vZGVJRCk7Ci0gICAgaW50IGNyZWF0ZVNjYWxlTm9kZShpbnQgcGFy
ZW50Tm9kZUlELCBmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVOb2RlKGludCBub2RlSUQp
OwotICAgIHZvaWQgc2V0Tm9kZVRleHR1cmUoaW50IG5vZGVJRCwgY29uc3QgUUltYWdlJiB0ZXh0
dXJlLCBjb25zdCBRUmVjdCYgc291cmNlUmVjdCwgY29uc3QgUVJlY3QmIHRhcmdldFJlY3QpOwor
ICAgIGludCBjcmVhdGVUaWxlTm9kZShmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxl
Tm9kZShpbnQgbm9kZUlEKTsKKyAgICB2b2lkIHNldE5vZGVCYWNrQnVmZmVyKGludCBub2RlSUQs
IGNvbnN0IFFJbWFnZSYgdGV4dHVyZSwgY29uc3QgUVJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFFS
ZWN0JiB0YXJnZXRSZWN0KTsKKyAgICB2b2lkIHN3YXBUaWxlQnVmZmVycygpOwogCiAgICAgLy8g
Q2FsbGVkIGJ5IHRoZSBRU0dJdGVtLgogICAgIHZvaWQgdXBkYXRlUGFpbnROb2RlKFFTR05vZGUq
IGl0ZW1Ob2RlKTsKKyAgICBib29sIGlzU3dhcFBlbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lz
U3dhcFBlbmRpbmc7IH0KIAogcHJpdmF0ZToKKyAgICBRU0dOb2RlKiBnZXRTY2FsZU5vZGUoZmxv
YXQgc2NhbGUsIFFTR05vZGUqIGl0ZW1Ob2RlKTsKKwogICAgIFFTR0l0ZW0qIGl0ZW07CiAgICAg
RGVxdWU8T3duUHRyPE5vZGVVcGRhdGU+ID4gbm9kZVVwZGF0ZXNRdWV1ZTsKLSAgICBIYXNoTWFw
PGludCwgUVNHTm9kZSo+IG5vZGVzOworICAgIEhhc2hNYXA8aW50LCBTR1RpbGVOb2RlKj4gbm9k
ZXM7CisgICAgZmxvYXQgbGFzdFNjYWxlOworICAgIFFTR05vZGUqIGxhc3RTY2FsZU5vZGU7CiAg
ICAgaW50IG5leHROb2RlSUQ7CisgICAgYm9vbCBtX2lzU3dhcFBlbmRpbmc7CiB9OwogCiBzdHJ1
Y3QgTm9kZVVwZGF0ZSB7CiAgICAgZW51bSBUeXBlIHsKICAgICAgICAgQ3JlYXRlVGlsZSwKLSAg
ICAgICAgQ3JlYXRlU2NhbGUsCi0gICAgICAgIFJlbW92ZSwKLSAgICAgICAgU2V0VGV4dHVyZQor
ICAgICAgICBSZW1vdmVUaWxlLAorICAgICAgICBTZXRCYWNrQnVmZmVyLAorICAgICAgICBTd2Fw
VGlsZUJ1ZmZlcnMKICAgICB9OwogICAgIE5vZGVVcGRhdGUoVHlwZSB0eXBlKQogICAgICAgICA6
IHR5cGUodHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1Rp
bGVOb2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcApp
bmRleCA0NzdiOGMzLi5hNThmYjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvU0dUaWxlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NH
VGlsZU5vZGUuY3BwCkBAIC0yMCw0MyArMjAsNTcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNHVGlsZU5vZGUuaCIKKyNpbmNsdWRlIDxRU0dFbmdpbmU+CisjaW5jbHVkZSA8
UVNHRmxhdENvbG9yTWF0ZXJpYWw+CisjaW5jbHVkZSA8UVNHVGV4dHVyZT4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLVNHVGlsZU5vZGU6OlNHVGlsZU5vZGUoKQotICAgIDogbV9nZW9tZXRyeShR
U0dHZW9tZXRyeTo6ZGVmYXVsdEF0dHJpYnV0ZXNfVGV4dHVyZWRQb2ludDJEKCksIDQpCitTR1Rp
bGVOb2RlOjpTR1RpbGVOb2RlKFFTR0VuZ2luZSogZW5naW5lKQorICAgIDogbV9lbmdpbmUoZW5n
aW5lKQorICAgICwgbV9nZW9tZXRyeShRU0dHZW9tZXRyeTo6ZGVmYXVsdEF0dHJpYnV0ZXNfVGV4
dHVyZWRQb2ludDJEKCksIDQpCisgICAgLCBtX21hdGVyaWFsKDApCisgICAgLCBtX29wYXF1ZU1h
dGVyaWFsKDApCiB7CisgICAgc2V0RmxhZ3MoT3duc01hdGVyaWFsIHwgT3duc09wYXF1ZU1hdGVy
aWFsKTsKICAgICBzZXRHZW9tZXRyeSgmbV9nZW9tZXRyeSk7Ci0gICAgc2V0TWF0ZXJpYWwoJm1f
bWF0ZXJpYWwpOwotICAgIHNldE9wYXF1ZU1hdGVyaWFsKCZtX29wYXF1ZU1hdGVyaWFsKTsKKyAg
ICBzZXRNYXRlcmlhbChuZXcgUVNHRmxhdENvbG9yTWF0ZXJpYWwpOworICAgIHNldE9wYXF1ZU1h
dGVyaWFsKG5ldyBRU0dGbGF0Q29sb3JNYXRlcmlhbCk7CiB9CiAKLXZvaWQgU0dUaWxlTm9kZTo6
c2V0VGFyZ2V0UmVjdChjb25zdCBRUmVjdEYmIHIpCit2b2lkIFNHVGlsZU5vZGU6OnNldEJhY2tC
dWZmZXIoY29uc3QgUUltYWdlJiBiYWNrQnVmZmVyLCBjb25zdCBRUmVjdEYmIHNvdXJjZVJlY3Qs
IGNvbnN0IFFSZWN0RiYgdGFyZ2V0UmVjdCkKIHsKLSAgICBpZiAobV90YXJnZXRSZWN0ID09IHIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3RhcmdldFJlY3QgPSByOwotICAgIFFTR0dlb21ldHJ5
Ojp1cGRhdGVUZXh0dXJlZFJlY3RHZW9tZXRyeSgmbV9nZW9tZXRyeSwgbV90YXJnZXRSZWN0LCBt
X3NvdXJjZVJlY3QpOwotICAgIG1hcmtEaXJ0eShEaXJ0eUdlb21ldHJ5KTsKLX0KKyAgICBtX2Jh
Y2tCdWZmZXJUZXh0dXJlLnJlc2V0KG1fZW5naW5lLT5jcmVhdGVUZXh0dXJlRnJvbUltYWdlKGJh
Y2tCdWZmZXIpKTsKKyAgICBtX2JhY2tCdWZmZXJUYXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKKyAg
ICBtX2JhY2tCdWZmZXJTb3VyY2VSZWN0ID0gbV9iYWNrQnVmZmVyVGV4dHVyZS0+Y29udmVydFRv
Tm9ybWFsaXplZFNvdXJjZVJlY3Qoc291cmNlUmVjdCk7CiAKLXZvaWQgU0dUaWxlTm9kZTo6c2V0
U291cmNlUmVjdChjb25zdCBRUmVjdEYmIHIpCi17Ci0gICAgaWYgKG1fc291cmNlUmVjdCA9PSBy
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zb3VyY2VSZWN0ID0gcjsKLSAgICBRU0dHZW9tZXRy
eTo6dXBkYXRlVGV4dHVyZWRSZWN0R2VvbWV0cnkoJm1fZ2VvbWV0cnksIG1fdGFyZ2V0UmVjdCwg
bV9zb3VyY2VSZWN0KTsKLSAgICBtYXJrRGlydHkoRGlydHlHZW9tZXRyeSk7CisgICAgLy8gRm9y
Y2UgdGhlIHRleHR1cmUgdXBsb2FkLgorICAgIG1fYmFja0J1ZmZlclRleHR1cmUtPmJpbmQoKTsK
IH0KIAotdm9pZCBTR1RpbGVOb2RlOjpzZXRUZXh0dXJlKFFTR1RleHR1cmUqIHRleHR1cmUpCit2
b2lkIFNHVGlsZU5vZGU6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQogewotICAgIGlmIChtX21hdGVy
aWFsLnRleHR1cmUoKSA9PSB0ZXh0dXJlKQorICAgIGlmICghbV9iYWNrQnVmZmVyVGV4dHVyZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fbWF0ZXJpYWwuc2V0VGV4dHVyZSh0ZXh0dXJlKTsKLSAg
ICBtX29wYXF1ZU1hdGVyaWFsLnNldFRleHR1cmUodGV4dHVyZSk7Ci0gICAgbV90ZXh0dXJlLnJl
c2V0KHRleHR1cmUpOworCisgICAgaWYgKCFtX29wYXF1ZU1hdGVyaWFsKSB7CisgICAgICAgIG1f
b3BhcXVlTWF0ZXJpYWwgPSBuZXcgUVNHT3BhcXVlVGV4dHVyZU1hdGVyaWFsOworICAgICAgICBz
ZXRPcGFxdWVNYXRlcmlhbChtX29wYXF1ZU1hdGVyaWFsKTsKKyAgICB9CisgICAgaWYgKCFtX21h
dGVyaWFsKSB7CisgICAgICAgIG1fbWF0ZXJpYWwgPSBuZXcgUVNHVGV4dHVyZU1hdGVyaWFsOwor
ICAgICAgICBzZXRNYXRlcmlhbChtX21hdGVyaWFsKTsKKyAgICB9CisgICAgQVNTRVJUKG1fbWF0
ZXJpYWwtPnRleHR1cmUoKSAhPSBtX2JhY2tCdWZmZXJUZXh0dXJlLmRhdGEoKSk7CisgICAgbV9t
YXRlcmlhbC0+c2V0VGV4dHVyZShtX2JhY2tCdWZmZXJUZXh0dXJlLmRhdGEoKSk7CisgICAgbV9v
cGFxdWVNYXRlcmlhbC0+c2V0VGV4dHVyZShtX2JhY2tCdWZmZXJUZXh0dXJlLmRhdGEoKSk7CiAg
ICAgbWFya0RpcnR5KERpcnR5TWF0ZXJpYWwpOworCisgICAgUVNHR2VvbWV0cnk6OnVwZGF0ZVRl
eHR1cmVkUmVjdEdlb21ldHJ5KCZtX2dlb21ldHJ5LCBtX2JhY2tCdWZmZXJUYXJnZXRSZWN0LCBt
X2JhY2tCdWZmZXJTb3VyY2VSZWN0KTsKKyAgICBtYXJrRGlydHkoRGlydHlHZW9tZXRyeSk7CisK
KyAgICBtX2Zyb250QnVmZmVyVGV4dHVyZS5zd2FwKG1fYmFja0J1ZmZlclRleHR1cmUpOworICAg
IG1fYmFja0J1ZmZlclRleHR1cmUucmVzZXQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9TR1RpbGVOb2RlLmgKaW5kZXggMTlhYjY1Yi4uNTZmMDAxOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1NHVGlsZU5vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvU0dUaWxlTm9kZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSA8UVNHVGV4dHVyZU1hdGVyaWFsPgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFTR0Vu
Z2luZTsKIGNsYXNzIFFTR1RleHR1cmU7CiBRVF9FTkRfTkFNRVNQQUNFCiAKQEAgLTMzLDIxICsz
NCwyMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU0dUaWxlTm9kZSA6IHB1YmxpYyBR
U0dHZW9tZXRyeU5vZGUgewogcHVibGljOgotICAgIFNHVGlsZU5vZGUoKTsKLQotICAgIHZvaWQg
c2V0VGFyZ2V0UmVjdChjb25zdCBRUmVjdEYmKTsKLSAgICB2b2lkIHNldFNvdXJjZVJlY3QoY29u
c3QgUVJlY3RGJik7Ci0gICAgLy8gVGhpcyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHRleHR1cmUu
Ci0gICAgdm9pZCBzZXRUZXh0dXJlKFFTR1RleHR1cmUqKTsKKyAgICBTR1RpbGVOb2RlKFFTR0Vu
Z2luZSopOworICAgIHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBRSW1hZ2UmLCBjb25zdCBRUmVj
dEYmIHNvdXJjZVJlY3QsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0UmVjdCk7CisgICAgdm9pZCBzd2Fw
QnVmZmVyc0lmTmVlZGVkKCk7CiAKIHByaXZhdGU6CisgICAgUVNHRW5naW5lKiBtX2VuZ2luZTsK
ICAgICBRU0dHZW9tZXRyeSBtX2dlb21ldHJ5OwotICAgIFFTR09wYXF1ZVRleHR1cmVNYXRlcmlh
bCBtX29wYXF1ZU1hdGVyaWFsOwotICAgIFFTR1RleHR1cmVNYXRlcmlhbCBtX21hdGVyaWFsOwot
ICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBRU0dUZXh0dXJl
TWF0ZXJpYWwqIG1fbWF0ZXJpYWw7CisgICAgUVNHT3BhcXVlVGV4dHVyZU1hdGVyaWFsKiBtX29w
YXF1ZU1hdGVyaWFsOworICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fZnJvbnRCdWZm
ZXJUZXh0dXJlOworICAgIFFTY29wZWRQb2ludGVyPFFTR1RleHR1cmU+IG1fYmFja0J1ZmZlclRl
eHR1cmU7CiAKLSAgICBRUmVjdEYgbV90YXJnZXRSZWN0OwotICAgIFFSZWN0RiBtX3NvdXJjZVJl
Y3Q7CisgICAgUVJlY3RGIG1fYmFja0J1ZmZlclRhcmdldFJlY3Q7CisgICAgUVJlY3RGIG1fYmFj
a0J1ZmZlclNvdXJjZVJlY3Q7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcAppbmRleCAzMGFlYTZhLi45
OTU1ZWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3
aW5nQXJlYVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxl
ZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCiAKKyNpbmNsdWRlICJT
R0FnZW50LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVG91Y2hW
aWV3SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldLQVBJ
Q2FzdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogCkBAIC00Nyw0ICs0OSwzNSBAQCBX
ZWJQYWdlUHJveHkqIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFnZSgpCiAgICAgcmV0dXJuIG1f
d2ViUGFnZVByb3h5OwogfQogCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlVGls
ZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGludCBu
b2RlSUQgPSBtX3dlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpLT5jcmVhdGVUaWxlTm9kZSh1cGRh
dGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9yKTsKKyAgICBtX3RpbGVOb2RlTWFwLnNldCh0aWxlSUQs
IG5vZGVJRCk7CisgICAgdXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZUluZm8pOworfQorCit2b2lk
IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGludCBub2RlSUQgPSBtX3RpbGVOb2RlTWFwLmdl
dCh0aWxlSUQpOworICAgIEFTU0VSVChub2RlSUQpOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUodXBkYXRlSW5mby5iaXRtYXBI
YW5kbGUpOworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBhdm9pZCB0aGlzIGNvcHkgYnkgY2FyeWlu
ZyB0aGUgU2hhcmVhYmxlQml0bWFwIGFsbCB0aGUgd2F5IHVwIHRvIHRleHR1cmUgdXBsb2FkaW5n
LgorICAgIC8vICAgICAgICBDdXJyZW50bHkgd29uJ3Qgd29yayBzaW5jZSB0aGUgU2hhcmVkTWVt
b3J5IGhhbmRsZSBpcyBvd25lZCBieSB1cGRhdGVJbmZvLgorICAgIFFJbWFnZSBpbWFnZShiaXRt
YXAtPmNyZWF0ZVFJbWFnZSgpLmNvcHkoKSk7CisgICAgUVJlY3Qgc291cmNlUmVjdCgwLCAwLCB1
cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMud2lkdGgoKSwgdXBkYXRlSW5mby51cGRhdGVSZWN0
Qm91bmRzLmhlaWdodCgpKTsKKyAgICBtX3dlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpLT5zZXRO
b2RlQmFja0J1ZmZlcihub2RlSUQsIGltYWdlLCBzb3VyY2VSZWN0LCB1cGRhdGVJbmZvLnVwZGF0
ZVJlY3RCb3VuZHMpOworfQorCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVuZGVy
RnJhbWUoKQoreworICAgIG1fd2ViVmlldy0+c2NlbmVHcmFwaEFnZW50KCktPnN3YXBUaWxlQnVm
ZmVycygpOworfQorCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlVGlsZShpbnQg
dGlsZUlEKQoreworICAgIGludCBub2RlSUQgPSBtX3RpbGVOb2RlTWFwLnRha2UodGlsZUlEKTsK
KyAgICBtX3dlYlZpZXctPnNjZW5lR3JhcGhBZ2VudCgpLT5yZW1vdmVUaWxlTm9kZShub2RlSUQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDE0NzlhZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
OTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRpbGVkRHJhd2luZ0FyZWFUaWxlLmgiCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJTR0FnZW50LmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0
bWFwLmgiCi0jaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiVG91
Y2hWaWV3SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFFB
cHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRT2JqZWN0PgotI2luY2x1ZGUgPFFQYWludGVyPgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpUaWxlZERyYXdpbmdBcmVhVGlsZShUaWxlZERyYXdpbmdBcmVhUHJveHkq
IHByb3h5LCBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IENvb3JkaW5hdGUmIHRpbGVD
b29yZGluYXRlKQotICAgIDogbV9wcm94eShwcm94eSkKLSAgICAsIG1fY29vcmRpbmF0ZSh0aWxl
Q29vcmRpbmF0ZSkKLSAgICAsIG1fcmVjdChwcm94eS0+dGlsZVJlY3RGb3JDb29yZGluYXRlKHRp
bGVDb29yZGluYXRlKSkKLSAgICAsIG1faGFzVXBkYXRlUGVuZGluZyhmYWxzZSkKLSAgICAsIG1f
c2dBZ2VudCh3ZWJWaWV3LT5zY2VuZUdyYXBoQWdlbnQoKSkKLSAgICAsIG1fbm9kZUlEKDApCi0g
ICAgLCBtX3BhcmVudE5vZGVJRCgwKQotICAgICwgbV9pc0JhY2tCdWZmZXJWYWxpZChmYWxzZSkK
LSAgICAsIG1fZGlydHlSZWdpb24obV9yZWN0KQotewotICAgIHN0YXRpYyBpbnQgaWQgPSAwOwot
ICAgIG1fSUQgPSArK2lkOwotICAgIG1fcHJveHktPnJlZ2lzdGVyVGlsZShtX0lELCB0aGlzKTsK
LSNpZmRlZiBUSUxFX0RFQlVHX0xPRwotICAgIHFEZWJ1ZygpIDw8ICJkZWxldGluZyB0aWxlIGlk
PSIgPDwgbV9JRDsKLSNlbmRpZgotfQotCi1UaWxlZERyYXdpbmdBcmVhVGlsZTo6flRpbGVkRHJh
d2luZ0FyZWFUaWxlKCkKLXsKLSNpZmRlZiBUSUxFX0RFQlVHX0xPRwotICAgIHFEZWJ1ZygpIDw8
ICJkZWxldGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKLSNlbmRpZgotICAgIGRpc2FibGVVcGRhdGVz
KCk7Ci0gICAgaWYgKG1fbm9kZUlEKQotICAgICAgICBtX3NnQWdlbnQtPnJlbW92ZU5vZGUobV9u
b2RlSUQpOwotfQotCi1ib29sIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjppc0RpcnR5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIW1fZGlydHlSZWdpb24uaXNFbXB0eSgpOwotfQotCi1ib29sIFRpbGVk
RHJhd2luZ0FyZWFUaWxlOjppc1JlYWR5VG9QYWludCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEh
bV9ub2RlSUQ7Ci19Ci0KLWJvb2wgVGlsZWREcmF3aW5nQXJlYVRpbGU6Omhhc1JlYWR5QmFja0J1
ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNCYWNrQnVmZmVyVmFsaWQgJiYgIW1faGFz
VXBkYXRlUGVuZGluZzsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aW52YWxpZGF0
ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgSW50UmVjdCB0aWxlRGlydHlSZWN0
ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsKLSAgICBpZiAodGlsZURpcnR5UmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlydHlSZWdpb24gKz0gdGls
ZURpcnR5UmVjdDsKLX0KLQotdm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6cmVzaXplKGNvbnN0
IEludFNpemUmIG5ld1NpemUpCi17Ci0gICAgSW50UmVjdCBvbGRSZWN0ID0gbV9yZWN0OwotICAg
IG1fcmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOwotICAgIGlmICht
X3JlY3QubWF4WCgpID4gb2xkUmVjdC5tYXhYKCkpCi0gICAgICAgIGludmFsaWRhdGUoSW50UmVj
dChvbGRSZWN0Lm1heFgoKSwgb2xkUmVjdC55KCksIG1fcmVjdC5tYXhYKCkgLSBvbGRSZWN0Lm1h
eFgoKSwgbV9yZWN0LmhlaWdodCgpKSk7Ci0gICAgaWYgKG1fcmVjdC5tYXhZKCkgPiBvbGRSZWN0
Lm1heFkoKSkKLSAgICAgICAgaW52YWxpZGF0ZShJbnRSZWN0KG9sZFJlY3QueCgpLCBvbGRSZWN0
Lm1heFkoKSwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5tYXhZKCkgLSBvbGRSZWN0Lm1heFkoKSkp
OwotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQo
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb25jZSB3ZSBjYW4gdGlnaHQgaW52YWxpZGF0
ZWQgdGlsZSB1cGRhdGVzIHRvZ2V0aGVyLgotfQotCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxl
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgVGlsZWREcmF3aW5nQXJlYVRp
bGU6OmluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGZsb2F0
KQotewotICAgIEFTU0VSVChtX3Byb3h5KTsKLSAgICBtX2lzQmFja0J1ZmZlclZhbGlkID0gdHJ1
ZTsKLSAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0
bWFwSGFuZGxlKTsKLSAgICBRSW1hZ2UgaW1hZ2UoYml0bWFwLT5jcmVhdGVRSW1hZ2UoKSk7Ci0g
ICAgY29uc3QgSW50UmVjdCYgdXBkYXRlQ2h1bmtSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0
Qm91bmRzOwotCi0gICAgY29uc3QgUVNpemUgdGlsZVNpemUgPSBtX3Byb3h5LT50aWxlU2l6ZSgp
OwotCi0gICAgaWYgKG1fYmFja0J1ZmZlci5zaXplKCkgIT0gdGlsZVNpemUpIHsKLSAgICAgICAg
bV9iYWNrQnVmZmVyID0gUUltYWdlKHRpbGVTaXplLCBpbWFnZS5mb3JtYXQoKSk7Ci0gICAgICAg
IG1fYmFja0J1ZmZlci5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgfQotCi0gICAgewotICAg
ICAgICBRUGFpbnRlciBwYWludGVyKCZtX2JhY2tCdWZmZXIpOwotICAgICAgICBJbnRTaXplIGRy
YXdQb2ludCA9IHVwZGF0ZUNodW5rUmVjdC5sb2NhdGlvbigpIC0gbV9yZWN0LmxvY2F0aW9uKCk7
Ci0gICAgICAgIHBhaW50ZXIuZHJhd0ltYWdlKFFQb2ludChkcmF3UG9pbnQud2lkdGgoKSwgZHJh
d1BvaW50LmhlaWdodCgpKSwgaW1hZ2UpOwotICAgIH0KLQotICAgIGlmICghbV9ub2RlSUQpCi0g
ICAgICAgIG1fbm9kZUlEID0gbV9zZ0FnZW50LT5jcmVhdGVUaWxlTm9kZShtX3BhcmVudE5vZGVJ
RCk7Ci0gICAgQVNTRVJUKG1fbm9kZUlEKTsKLSAgICBRUmVjdCBzb3VyY2VSZWN0KDAsIDAsIG1f
cmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCkpOwotICAgIG1fc2dBZ2VudC0+c2V0Tm9kZVRl
eHR1cmUobV9ub2RlSUQsIG1fYmFja0J1ZmZlciwgc291cmNlUmVjdCwgbV9yZWN0KTsKLX0KLQot
dm9pZCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6ZGlzYWJsZVVwZGF0ZXMoKQotewotICAgIGlmICgh
bV9wcm94eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faGFzVXBkYXRlUGVuZGluZykg
ewotICAgICAgICBtX3Byb3h5LT5jYW5jZWxUaWxlVXBkYXRlKG1fSUQpOwotICAgICAgICBtX2hh
c1VwZGF0ZVBlbmRpbmcgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3Byb3h5LT51bnJlZ2lzdGVy
VGlsZShtX0lEKTsKLSAgICBtX2JhY2tCdWZmZXIgPSBRSW1hZ2UoKTsKLSAgICBtX2lzQmFja0J1
ZmZlclZhbGlkID0gZmFsc2U7Ci0gICAgbV9wcm94eSA9IDA7Ci19Ci0KLXZvaWQgVGlsZWREcmF3
aW5nQXJlYVRpbGU6OnNldFBhcmVudE5vZGVJRChpbnQgbm9kZUlEKQotewotICAgIEFTU0VSVCgh
bV9ub2RlSUQpOwotICAgIG1fcGFyZW50Tm9kZUlEID0gbm9kZUlEOwotfQotCi12b2lkIFRpbGVk
RHJhd2luZ0FyZWFUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKLXsKLSAgICBBU1NFUlQobV9wcm94
eSk7Ci0gICAgaWYgKGlzUmVhZHlUb1BhaW50KCkgJiYgIWlzRGlydHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRklYTUU6IGluZGl2aWR1YWwgcmVjdHMKLSAgICBJbnRSZWN0IGRpcnR5
UmVjdCA9IG1fZGlydHlSZWdpb24uYm91bmRpbmdSZWN0KCk7Ci0gICAgbV9kaXJ0eVJlZ2lvbiA9
IFFSZWdpb24oKTsKLQotI2lmZGVmIFRJTEVfREVCVUdfTE9HCi0gICAgcURlYnVnKCkgPDwgInJl
cXVlc3RpbmcgdGlsZSB1cGRhdGUgaWQ9IiA8PCBtX0lEIDw8ICIgcmVjdD0iIDw8IFFSZWN0KGRp
cnR5UmVjdCkgPDwgIiBzY2FsZT0iIDw8IG1fcHJveHktPmNvbnRlbnRzU2NhbGUoKTsKLSNlbmRp
ZgotICAgIGlmICghbV9wcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fcHJveHktPnJlcXVlc3RUaWxlVXBkYXRlKG1fSUQsIGRpcnR5UmVj
dCk7Ci0KLSAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSB0cnVlOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuY3BwCmluZGV4IDk4
MmNiNDAuLjQ0MWU5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9x
dG91Y2h3ZWJwYWdlcHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9x
dG91Y2h3ZWJwYWdlcHJveHkuY3BwCkBAIC0xMTIsMyArMTEyLDggQEAgdm9pZCBRVG91Y2hXZWJQ
YWdlUHJveHk6OnNldENvbnRlbnRzU2NhbGUocXJlYWwgc2NhbGUpCiB7CiAgICAgZHJhd2luZ0Fy
ZWEoKS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CiB9CisKK3ZvaWQgUVRvdWNoV2ViUGFnZVBy
b3h5OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIGRyYXdpbmdBcmVhKCktPnJlbmRlck5leHRG
cmFtZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0b3Vj
aHdlYnBhZ2Vwcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L3F0b3VjaHdlYnBh
Z2Vwcm94eS5oCmluZGV4IDc5ZWIwZTYuLjEyMjhiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9xdG91Y2h3ZWJwYWdlcHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvcXRvdWNod2VicGFnZXByb3h5LmgKQEAgLTQzLDYgKzQzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0UmVzaXplc1RvQ29udGVudHNVc2luZ0xheW91dFNpemUoY29uc3Qg
UVNpemUmIHRhcmdldExheW91dFNpemUpOwogICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBv
aW50KGNvbnN0IFFQb2ludCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShxcmVhbCk7Cisg
ICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiBhcmVhKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcm8KaW5kZXggNDRlYmI2OS4uOTEyZjU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi5wcm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTQ4MSw3
ICs0ODEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvU0dBZ2VudC5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9xdC9TR1RpbGVOb2RlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1RpbGVk
RHJhd2luZ0FyZWFQcm94eVF0LmNwcCBcCi0gICAgVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0Fy
ZWFUaWxlUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAgXAogICAg
IFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3Mv
cXQvV2ViQ29udGV4dFF0LmNwcCBcCkBAIC01NjAsNiArNTU5LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFn
ZU92ZXJsYXkuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIFwKQEAgLTU3MSw3
ICs1NzEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdy
b3VwUHJveHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViSW5zcGVjdG9yUXQu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBcCi0g
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1RpbGVkRHJhd2luZ0FyZWFRdC5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXgg
ZDliZWQ5Ny4uYWQxYzE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLmgKQEAgLTk5LDggKzk5LDkgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJM
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHZpZXdTaXplKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsVGls
ZVVwZGF0ZShpbnQgdGlsZUlEKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFRpbGVVcGRh
dGUoaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0LCBmbG9hdCBz
Y2FsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUo
ZmxvYXQgc2NhbGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgdGFrZVNuYXBzaG90KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRh
cmdldFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvbnRlbnRzUmVjdCkgeyB9CiAjZW5k
aWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5kZXggNTliYmY1OGYuLjk1M2QzNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW4KQEAgLTI4LDggKzI4LDkgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgewog
CiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgU2V0U2l6ZShXZWJDb3JlOjpJ
bnRTaXplIHZpZXdTaXplKQotICAgIFJlcXVlc3RUaWxlVXBkYXRlKGludCB0aWxlSUQsIFdlYkNv
cmU6OkludFJlY3QgZGlydHlSZWN0LCBmbG9hdCBzY2FsZSkKLSAgICBDYW5jZWxUaWxlVXBkYXRl
KGludCB0aWxlSUQpCisgICAgU2V0VmlzaWJsZUNvbnRlbnRSZWN0KFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRSZWN0KQorICAgIFNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCisg
ICAgUmVuZGVyTmV4dEZyYW1lKCkKICAgICBUYWtlU25hcHNob3QoV2ViQ29yZTo6SW50U2l6ZSBz
aXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCkKICNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43N2UwODNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKQEAgLTAsMCArMSwxMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKKworI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1
ZGUgIlVwZGF0ZUluZm8uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OlRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZShUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIGNsaWVudCwg
VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0
aWxlQ29vcmRpbmF0ZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fdGlsZWRCYWNr
aW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCisgICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3Jk
aW5hdGUpCisgICAgLCBtX3JlY3QodGlsZWRCYWNraW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRp
bmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCisgICAgLCBtX0lEKDApCisgICAgLCBtX2RpcnR5UmVjdCht
X3JlY3QpCit7Cit9CisKK1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6flRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZSgpCit7CisgICAgaWYgKG1fSUQpCisgICAgICAgIG1fY2xpZW50LT5y
ZW1vdmVUaWxlKG1fSUQpOworfQorCitib29sIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6
aXNEaXJ0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Cit9
CisKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjppbnZhbGlkYXRlKGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNl
Y3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOworICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kaXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVj
dCk7Cit9CisKK1ZlY3RvcjxJbnRSZWN0PiBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnVw
ZGF0ZUJhY2tCdWZmZXIoKQoreworICAgIGlmICghaXNEaXJ0eSgpKQorICAgICAgICByZXR1cm4g
VmVjdG9yPEludFJlY3Q+KCk7CisKKyAgICAvLyBGSVhNRTogT25seSB1c2UgYSBsb2NhbCBidWZm
ZXIgd2hlbiB3ZSBrbm93IHRoZSB0aWxlIGlzIGFuaW1hdGVkIChhZnRlciB0aGUgZmlyc3QgaW52
YWxpZGF0ZSkKKyAgICAvLyAgICAgICAgYW5kIGRlc3Ryb3kgaXQgYWZ0ZXIgYSBmZXcgc2Vjb25k
cyBvZiBpbmFjdGl2aXR5LiBXZSBjYW4gcmVuZGVyIGRpcmVjdGx5IHRvIHNoYXJlZAorICAgIC8v
ICAgICAgICBtZW1vcnkgaW4gb3RoZXIgY2FzZXMuCisgICAgaWYgKCFtX2xvY2FsQnVmZmVyKSB7
CisgICAgICAgIG1fbG9jYWxCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fcmVjdC5zaXpl
KCkpOworICAgICAgICBtX2xvY2FsQnVmZmVyLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgtbV9yZWN0
LngoKSwgLW1fcmVjdC55KCkpOworICAgICAgICBtX2xvY2FsQnVmZmVyLT5jb250ZXh0KCktPnNj
YWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCksIG1fdGls
ZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOworICAgIH0KKyAgICAvLyBUaGlzIGFz
c3VtZXMgdGhhdCB0aGUgR3JhcGhpY3NDb250ZXh0IG9uIHRoZSBJbWFnZUJ1ZmZlciBhY3RzIHN5
bmNocm9ub3VzbHkKKyAgICAvLyBmb3IgdXMgdG8gYmUgYWJsZSB0byBkcmF3IHRoaXMgYnVmZmVy
IG9uIHRoZSBTaGFyZWFibGVCaXRtYXAgcmlnaHQgYWZ0ZXIuCisgICAgbV90aWxlZEJhY2tpbmdT
dG9yZS0+Y2xpZW50KCktPnRpbGVkQmFja2luZ1N0b3JlUGFpbnQobV9sb2NhbEJ1ZmZlci0+Y29u
dGV4dCgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fZGlydHlSZWN0KSk7
CisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVNoYXJlYWJsZShtX3JlY3Quc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRz
QWxwaGEpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dChiaXRt
YXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihtX2xvY2FsQnVmZmVyLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQ
b2ludCgwLCAwKSk7CisKKyAgICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgdXBkYXRlSW5m
by51cGRhdGVSZWN0Qm91bmRzID0gbV9yZWN0OworICAgIHVwZGF0ZUluZm8udXBkYXRlU2NhbGVG
YWN0b3IgPSBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCk7CisgICAgYml0bWFw
LT5jcmVhdGVIYW5kbGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOworCisgICAgc3RhdGljIGlu
dCBpZCA9IDA7CisgICAgaWYgKCFtX0lEKSB7CisgICAgICAgIG1fSUQgPSArK2lkOworICAgICAg
ICBtX2NsaWVudC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9jbGllbnQtPnVwZGF0ZVRpbGUobV9JRCwgdXBkYXRlSW5mbyk7CisKKyAgICBtX2Rp
cnR5UmVjdCA9IEludFJlY3QoKTsKKyAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Cit9CisK
K3ZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQo
KQoreworICAgIC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4KK30KKwor
Ym9vbCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gISFtX0lEOworfQorCit2b2lkIFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVCYWNrZW5kOjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kKFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xp
ZW50KQoreworfQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUq
IHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJiB0aWxl
Q29vcmRpbmF0ZSkKK3sKKyAgICByZXR1cm4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpj
cmVhdGUobV9jbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Cit9CisK
K3ZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6cGFpbnRDaGVja2VyUGF0
dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFRJTEVEX0JBQ0tJ
TkdfU1RPUkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9U
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45MjQzM2JhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCkBAIC0w
LDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlX2gKKyNkZWZpbmUgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
X2gKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorCisjaW5jbHVkZSAiVGlsZS5o
IgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViQ29yZS9JbnRS
ZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3Mg
VGlsZWRCYWNraW5nU3RvcmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBUaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQ7CitjbGFzcyBVcGRhdGVJbmZvOworCitjbGFz
cyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUgOiBwdWJsaWMgV2ViQ29yZTo6VGlsZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZT4gY3JlYXRlKFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50LCBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSog
dGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IENvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlKGNsaWVudCwgdGls
ZWRCYWNraW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKSk7IH0KKyAgICB+VGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlKCk7CisKKyAgICBib29sIGlzRGlydHkoKSBjb25zdDsKKyAgICB2b2lkIGlu
dmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiB1cGRhdGVCYWNrQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQmFja0J1ZmZlclRvRnJv
bnQoKTsKKyAgICBib29sIGlzUmVhZHlUb1BhaW50KCkgY29uc3Q7CisgICAgdm9pZCBwYWludChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAg
ICBjb25zdCBDb29yZGluYXRlJiBjb29yZGluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGlu
YXRlOyB9CisgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZShU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqLCBXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKKworICAgIFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZUNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIG1f
dGlsZWRCYWNraW5nU3RvcmU7CisgICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5hdGU7CisgICAgV2Vi
Q29yZTo6SW50UmVjdCBtX3JlY3Q7CisKKyAgICBpbnQgbV9JRDsKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IG1fZGlydHlSZWN0OworCisgICAgT3duUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2xv
Y2FsQnVmZmVyOworfTsKKworY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGll
bnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBV
cGRhdGVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFVwZGF0ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50
IHRpbGVJRCkgPSAwOworfTsKKworY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQmFja2Vu
ZD4gY3JlYXRlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50KSB7IHJl
dHVybiBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZChjbGll
bnQpKTsgfQorICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGlsZShXZWJDb3Jl
OjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsK
KyAgICB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlQmFja2VuZChUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQq
KTsKKyAgICBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIG1fY2xpZW50OworfTsK
KworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFRJTEVEX0JBQ0tJTkdfU1RP
UkUKKworI2VuZGlmIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCmlu
ZGV4IGQ0MDJjNTAuLjgxZGZiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKQEAgLTMxLDEwICszMSw3IEBACiAj
aW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmUvRnJhbWUuaCIK
LSNpbmNsdWRlICJXZWJDb3JlL0ZyYW1lVmlldy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKIApAQCAtNDQsMTAgKzQxLDkgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIFRpbGVkRHJhd2luZ0FyZWE6OlRpbGVkRHJhd2luZ0FyZWEoV2ViUGFnZSogd2Vi
UGFnZSkKICAgICA6IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZVRpbGVkLCB3ZWJQYWdlKQot
ICAgICwgbV9pc1dhaXRpbmdGb3JVcGRhdGUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFBhaW50KHRy
dWUpCi0gICAgLCBtX2Rpc3BsYXlUaW1lcihXZWJQcm9jZXNzOjpzaGFyZWQoKS5ydW5Mb29wKCks
IHRoaXMsICZUaWxlZERyYXdpbmdBcmVhOjpkaXNwbGF5KQotICAgICwgbV90aWxlVXBkYXRlVGlt
ZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCkucnVuTG9vcCgpLCB0aGlzLCAmVGlsZWREcmF3aW5nQXJl
YTo6dGlsZVVwZGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3N1c3BlbmRlZChmYWxzZSkKKyAgICAs
IG1faXNXYWl0aW5nRm9yVUlQcm9jZXNzKGZhbHNlKQorICAgICwgbV9tYWluQmFja2luZ1N0b3Jl
KGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKSkKIHsKIH0KIApAQCAtNjMsMTUwICs1OSwx
MDMgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xs
UmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGUKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpz
ZXROZWVkc0Rpc3BsYXkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBGSVhNRTogQ29s
bGVjdCBhIHNldCBvZiByZWN0cy9yZWdpb24gaW5zdGVhZCBvZiBqdXN0IHRoZSB1bmlvbiBvZiBh
bGwgcmVjdHMuCi0gICAgbV9kaXJ0eVJlY3QudW5pdGUocmVjdCk7Ci0gICAgc2NoZWR1bGVEaXNw
bGF5KCk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKHJlY3QpOwogfQogCi12
b2lkIFRpbGVkRHJhd2luZ0FyZWE6OmRpc3BsYXkoKQordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpz
ZXRTaXplKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogewotICAgIGlmICghbV9zaG91bGRQYWlu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAg
SW50UmVjdCBkaXJ0eVJlY3QgPSBtX2RpcnR5UmVjdDsKLSAgICBtX2RpcnR5UmVjdCA9IEludFJl
Y3QoKTsKLQotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6
SW52YWxpZGF0ZShkaXJ0eVJlY3QpKTsKKyAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKKyAgICBB
U1NFUlRfQVJHKHZpZXdTaXplLCAhdmlld1NpemUuaXNFbXB0eSgpKTsKIAotICAgIG1fZGlzcGxh
eVRpbWVyLnN0b3AoKTsKKyAgICBtX3dlYlBhZ2UtPnNldFNpemUodmlld1NpemUpOwogfQogCi12
b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxlRGlzcGxheSgpCit2b2lkIFRpbGVkRHJhd2lu
Z0FyZWE6OnNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNp
YmxlQ29udGVudHNSZWN0KQogewotICAgIGlmICghbV9zaG91bGRQYWludCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZGlzcGxheVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICBtX3Zpc2libGVD
b250ZW50UmVjdCA9IHZpc2libGVDb250ZW50c1JlY3Q7CisgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5hZGp1c3RWaXNpYmxlUmVjdCgpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldFNp
emUoY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldENv
bnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCiB7Ci0gICAgQVNTRVJUKG1fc2hvdWxkUGFpbnQpOwot
ICAgIEFTU0VSVF9BUkcodmlld1NpemUsICF2aWV3U2l6ZS5pc0VtcHR5KCkpOwotCi0gICAgbV93
ZWJQYWdlLT5zZXRTaXplKHZpZXdTaXplKTsKLQotICAgIHNjaGVkdWxlRGlzcGxheSgpOworICAg
IG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOwor
ICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0
aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsK
KyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworfQogCi0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRTZXRTaXpl
KHZpZXdTaXplKSk7Cit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnJlbmRlck5leHRGcmFtZSgpCit7
CisgICAgbV9pc1dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKKyAgICBtX21haW5CYWNraW5n
U3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6
c3VzcGVuZFBhaW50aW5nKCkKIHsKLSAgICBBU1NFUlQobV9zaG91bGRQYWludCk7CisgICAgQVNT
RVJUKCFtX3N1c3BlbmRlZCk7CiAKLSAgICBtX3Nob3VsZFBhaW50ID0gZmFsc2U7Ci0gICAgbV9k
aXNwbGF5VGltZXIuc3RvcCgpOwotICAgIG1fdGlsZVVwZGF0ZVRpbWVyLnN0b3AoKTsKKyAgICBt
X3N1c3BlbmRlZCA9IHRydWU7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cmVzdW1lUGFp
bnRpbmcoKQogewotICAgIEFTU0VSVCghbV9zaG91bGRQYWludCk7CisgICAgQVNTRVJUKG1fc3Vz
cGVuZGVkKTsKIAotICAgIG1fc2hvdWxkUGFpbnQgPSB0cnVlOwotCi0gICAgLy8gRGlzcGxheSBp
ZiBuZWVkZWQuCi0gICAgZGlzcGxheSgpOwotICAgIGlmICghbV9wZW5kaW5nVXBkYXRlcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHNjaGVkdWxlVGlsZVVwZGF0ZSgpOworICAgIG1fc3VzcGVuZGVkID0g
ZmFsc2U7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOwogfQog
Ci12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCit2b2lkIFRpbGVkRHJhd2luZ0Fy
ZWE6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCiB7Ci0gICAgLy8gRGlzcGxheSBpZiBu
ZWVkZWQuCi0gICAgZGlzcGxheSgpOworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsK
IH0KIAotdm9pZCBUaWxlZERyYXdpbmdBcmVhOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCwgZmxvYXQgc2NhbGUpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewotICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZO
ZWVkZWQoKTsKLQotICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKLSAgICB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RCb3VuZHMgPSBkaXJ0eVJlY3Q7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoZGlydHlSZWN0LnNpemUo
KSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBiaXRtYXAtPmNyZWF0ZUhh
bmRsZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7Ci0gICAgcGFpbnRJbnRvQml0bWFwKGJpdG1h
cC5nZXQoKSwgZGlydHlSZWN0LCBzY2FsZSk7Ci0KLSAgICB1bnNpZ25lZCBwZW5kaW5nVXBkYXRl
Q291bnQgPSBtX3BlbmRpbmdVcGRhdGVzLnNpemUoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlRpbGVVcGRhdGVkKHRpbGVJRCwgdXBkYXRlSW5mbywg
c2NhbGUsIHBlbmRpbmdVcGRhdGVDb3VudCkpOworICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoKmdy
YXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QpOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6
OnNjaGVkdWxlVGlsZVVwZGF0ZSgpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkKIHsKLSAg
ICBpZiAoIW1fc2hvdWxkUGFpbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3RpbGVV
cGRhdGVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RpbGVVcGRh
dGVUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgLy8gU2luY2Ugd2Uga25vdyB0aGF0IGFsbCB0
aWxlIHVwZGF0ZXMgZm9sbG93aW5nIGEgcGFnZSBpbnZhbGlkYXRlIHdpbGwgYWxsIGJlIHJlbmRl
cmVkCisgICAgLy8gaW4gb25lIHBhaW50IHBhc3MgZm9yIGFsbCB0aGUgdGlsZXMsIHdlIGNhbiBz
ZW5kIHRoZSBzd2FwIHRpbGUgbWVzc2FnZSBoZXJlLgorICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6RHJhd2luZ0FyZWFQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7CisgICAgbV9pc1dhaXRp
bmdGb3JVSVByb2Nlc3MgPSB0cnVlOwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVV
cGRhdGVUaW1lckZpcmVkKCkKK2Jvb2wgVGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5nU3Rv
cmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdVcGRhdGVz
LmlzRW1wdHkoKSk7Ci0KLSAgICBPd25QdHI8VGlsZVVwZGF0ZT4gdXBkYXRlID0gbV9wZW5kaW5n
VXBkYXRlcy5maXJzdCgpLnJlbGVhc2UoKTsKLSAgICBtX3BlbmRpbmdVcGRhdGVzLnJlbW92ZUZp
cnN0KCk7CisgICAgcmV0dXJuICFtX3N1c3BlbmRlZCAmJiAhbV9pc1dhaXRpbmdGb3JVSVByb2Nl
c3M7Cit9CiAKLSAgICB1cGRhdGVUaWxlKHVwZGF0ZS0+dGlsZUlELCB1cGRhdGUtPmRpcnR5UmVj
dCwgdXBkYXRlLT5zY2FsZSk7CitJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2lu
Z1N0b3JlQ29udGVudHNSZWN0KCkKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBtX3dlYlBhZ2UtPnNpemUoKSk7Cit9CiAKLSAgICBpZiAobV9wZW5kaW5nVXBkYXRlcy5p
c0VtcHR5KCkpCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQ
cm94eTo6QWxsVGlsZVVwZGF0ZXNQcm9jZXNzZWQoKSk7Ci0gICAgZWxzZQotICAgICAgICBzY2hl
ZHVsZVRpbGVVcGRhdGUoKTsKK0ludFJlY3QgVGlsZWREcmF3aW5nQXJlYTo6dGlsZWRCYWNraW5n
U3RvcmVWaXNpYmxlUmVjdCgpCit7CisgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRSZWN0Owog
fQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWE6OmNhbmNlbFRpbGVVcGRhdGUoaW50IHRpbGVJRCkK
K0NvbG9yIFRpbGVkRHJhd2luZ0FyZWE6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9y
KCkgY29uc3QKIHsKLSAgICBVcGRhdGVMaXN0OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdVcGRh
dGVzLmVuZCgpOwotICAgIGZvciAoVXBkYXRlTGlzdDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdV
cGRhdGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPnRp
bGVJRCA9PSB0aWxlSUQpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1VwZGF0ZXMucmVtb3ZlKGl0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3BlbmRp
bmdVcGRhdGVzLmlzRW1wdHkoKSkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkRyYXdpbmdBcmVhUHJveHk6OkFsbFRpbGVVcGRhdGVzUHJvY2Vzc2VkKCkpOwotICAgICAgICBt
X3RpbGVVcGRhdGVUaW1lci5zdG9wKCk7Ci0gICAgfQorICAgIHJldHVybiBDb2xvcjo6dHJhbnNw
YXJlbnQ7CiB9CiAKLXZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cmVxdWVzdFRpbGVVcGRhdGUoaW50
IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0LCBmbG9hdCBzY2FsZSkK
K3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQogewotICAgIFVwZGF0ZUxpc3Q6Oml0ZXJhdG9yIGVuZCA9IG1f
cGVuZGluZ1VwZGF0ZXMuZW5kKCk7Ci0gICAgZm9yIChVcGRhdGVMaXN0OjppdGVyYXRvciBpdCA9
IG1fcGVuZGluZ1VwZGF0ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
ICgoKml0KS0+dGlsZUlEID09IHRpbGVJRCkgewotICAgICAgICAgICAgKCppdCktPmRpcnR5UmVj
dC51bml0ZShkaXJ0eVJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQorICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6Q3JlYXRl
VGlsZSh0aWxlSUQsIHVwZGF0ZUluZm8pKTsKIAotICAgIE93blB0cjxUaWxlVXBkYXRlPiB1cGRh
dGUoYWRvcHRQdHIobmV3IFRpbGVVcGRhdGUpKTsKLSAgICB1cGRhdGUtPnRpbGVJRCA9IHRpbGVJ
RDsKLSAgICB1cGRhdGUtPmRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICB1cGRhdGUtPnNjYWxl
ID0gc2NhbGU7Ci0gICAgbV9wZW5kaW5nVXBkYXRlcy5hcHBlbmQodXBkYXRlLnJlbGVhc2UoKSk7
Ci0gICAgc2NoZWR1bGVUaWxlVXBkYXRlKCk7CisgICAgaWYgKG1fcHJldmlvdXNCYWNraW5nU3Rv
cmUgJiYgbV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcmFnZVJhdGlvKG1fdmlzaWJsZUNvbnRlbnRS
ZWN0KSA+PSAxLjBmKQorICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Cit9
Cit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRy
YXdpbmdBcmVhUHJveHk6OlVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGVJbmZvKSk7Cit9Cit2b2lk
IFRpbGVkRHJhd2luZ0FyZWE6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlJlbW92ZVRpbGUodGlsZUlEKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgKaW5kZXggZjEwZjg4YS4uMzE3OTJj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJh
d2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRE
cmF3aW5nQXJlYS5oCkBAIC0yOSwyMiArMjksMTkgQEAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCi0jaW5jbHVkZSAiUnVuTG9vcC5o
IgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0j
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBTaGFy
ZWFibGVCaXRtYXA7Ci0KLWNsYXNzIFRpbGVkRHJhd2luZ0FyZWEgOiBwdWJsaWMgRHJhd2luZ0Fy
ZWEgeworY2xhc3MgVGlsZWREcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSwgcHVibGlj
IFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LCBwdWJsaWMgVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBUaWxlZERyYXdpbmdB
cmVhKFdlYlBhZ2UqKTsKICAgICB2aXJ0dWFsIH5UaWxlZERyYXdpbmdBcmVhKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGxheSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hDb21wb3NpdGluZ0NvbnRleHQoKSB7IH0KQEAgLTU1LDM3ICs1MiwzNCBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNjaGVkdWxlRGlzcGxheSgp
OwotCiAgICAgLy8gQ29yZUlQQyBtZXNzYWdlIGhhbmRsZXJzLgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHZpZXdTaXplKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIHJl
bmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVXBk
YXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFRpbGVVcGRhdGUoaW50IHRpbGVJRCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RUaWxlVXBkYXRlKGludCB0aWxlSUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGRpcnR5UmVjdCwgZmxvYXQgc2NhbGUpOwotCi0gICAgLy8gUGxhdGZvcm0g
b3ZlcnJpZGVzCi0gICAgdm9pZCBwYWludEludG9CaXRtYXAoU2hhcmVhYmxlQml0bWFwKiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QsIGZsb2F0IHNjYWxlKTsKLQotICAgIHZvaWQg
c2NoZWR1bGVUaWxlVXBkYXRlKCk7Ci0gICAgdm9pZCB0aWxlVXBkYXRlVGltZXJGaXJlZCgpOwot
Ci0gICAgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGRpcnR5UmVjdCwgZmxvYXQgc2NhbGUpOwotCi0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2RpcnR5
UmVjdDsKLSAgICBib29sIG1faXNXYWl0aW5nRm9yVXBkYXRlOwotICAgIGJvb2wgbV9zaG91bGRQ
YWludDsKLSAgICBSdW5Mb29wOjpUaW1lcjxUaWxlZERyYXdpbmdBcmVhPiBtX2Rpc3BsYXlUaW1l
cjsKIAotICAgIHN0cnVjdCBUaWxlVXBkYXRlIHsKLSAgICAgICAgaW50IHRpbGVJRDsKLSAgICAg
ICAgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3Q7Ci0gICAgICAgIGZsb2F0IHNjYWxlOwotICAg
IH07Ci0gICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8VGlsZVVwZGF0ZT4gPiBVcGRhdGVMaXN0Owot
ICAgIFVwZGF0ZUxpc3QgbV9wZW5kaW5nVXBkYXRlczsKLSAgICBSdW5Mb29wOjpUaW1lcjxUaWxl
ZERyYXdpbmdBcmVhPiBtX3RpbGVVcGRhdGVUaW1lcjsKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9y
ZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+JiBwYWludGVkQXJlYSk7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0
b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6Q29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAg
IC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFVwZGF0ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCk7CisKKyAgICBib29sIG1fc3VzcGVuZGVkOwor
ICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JVSVByb2Nlc3M7CisgICAgV2ViQ29yZTo6SW50UmVjdCBt
X3Zpc2libGVDb250ZW50UmVjdDsKKworICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZT4gbV9tYWluQmFja2luZ1N0b3JlOworICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tp
bmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1Rp
bGVkRHJhd2luZ0FyZWFRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Njg2YzMwOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUaWxlZERyYXdpbmdBcmVhLmgiCi0KLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNp
bmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
LQotI2luY2x1ZGUgPFFJbWFnZT4KLSNpbmNsdWRlIDxRUGFpbnRlcj4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFRpbGVkRHJhd2luZ0Fy
ZWE6OnBhaW50SW50b0JpdG1hcChTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdGlsZVJlY3QsIGZsb2F0IHNjYWxlKQotewotICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dChiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
KTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtdGlsZVJlY3QueCgpLCAtdGlsZVJl
Y3QueSgpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShzY2FsZSwgc2Nh
bGUpKTsKLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJl
Y3QodGlsZVJlY3QueCgpIC8gc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LnkoKSAvIHNjYWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgp
IC8gc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbGVSZWN0LmhlaWdodCgpIC8gc2NhbGUpKTsKLSAgICBtX3dlYlBhZ2UtPmRyYXdS
ZWN0KCpncmFwaGljc0NvbnRleHQuZ2V0KCksIGNvbnRlbnRSZWN0KTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="101083"
          type_id="1"
          status="+"
          setter="vestbo"
    />
          </attachment>
      

    </bug>

</bugzilla>