<?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>88363</bug_id>
          
          <creation_ts>2012-06-05 14:00:22 -0700</creation_ts>
          <short_desc>[chromium] Separate CCVideoDrawQuad and from the layer tree and video provider by removing ManagedTexture and WebVideoFrame pointers from the quad</short_desc>
          <delta_ts>2012-06-11 18:08:38 -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>88435</dependson>
          <blocked>88814</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>abarth</cc>
    
    <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fischman</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>tdresser</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>641871</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 14:00:22 -0700</bug_when>
    <thetext>[chromium] Separate CCVideoDrawQuad and from the layer tree and video provider by removing ManagedTexture and WebVideoFrame pointers from the quad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641881</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 14:14:59 -0700</bug_when>
    <thetext>I&apos;ve tested this by running a html5 player on vimeo.com and killing the GPU process mid playback, testing the MediaTest.* browser_tests, and layout tests. Any other testing suggestions welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641882</commentid>
    <comment_count>2</comment_count>
      <attachid>145869</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 14:15:09 -0700</bug_when>
    <thetext>Created attachment 145869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641969</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 15:56:07 -0700</bug_when>
    <thetext>Hm, are we doing a texture copy in the externally decoded video case today?  This code is a bit confusing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641974</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 15:57:37 -0700</bug_when>
    <thetext>I believe we are, since we copy the data() pointer for each plane, then don&apos;t use the textures anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641979</commentid>
    <comment_count>5</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 16:02:31 -0700</bug_when>
    <thetext>Well, I guess it depends if m_frame-&gt;planes() &gt; 0. Maybe it&apos;s always 0 when a format with external texture is used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641980</commentid>
    <comment_count>6</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-06-05 16:05:19 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Well, I guess it depends if m_frame-&gt;planes() &gt; 0. Maybe it&apos;s always 0 when a format with external texture is used?

Yep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641981</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 16:05:47 -0700</bug_when>
    <thetext>Ah. I&apos;ll remove my FIXME :) Thanks Ami</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641983</commentid>
    <comment_count>8</comment_count>
      <attachid>145889</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 16:07:43 -0700</bug_when>
    <thetext>Created attachment 145889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642025</commentid>
    <comment_count>9</comment_count>
      <attachid>145889</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 17:13:36 -0700</bug_when>
    <thetext>Comment on attachment 145889
Patch

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

The division of responsibilities here doesn&apos;t seem quite right (see inline comments).  Moving GC3D-aware stuff up to CC*LayerImpls is the wrong direction to be moving in.  We&apos;re syncing quads, not layers - right?  When we go to serialize the quads for a given video layer, we can take care of any uploads that need to happen at that point.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:82
&gt; +    ASSERT(MaxPlanes == WebKit::WebVideoFrame::maxPlanes);

Both of these values are compile-time assertions, so this should also be a compile-time assertion (and probably not in this file).

Why do we even need a different enum - can&apos;t we just use WebKit::WebVideoFrame::maxPlanes directly?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:264
&gt; +void CCVideoLayerImpl::copyPlaneToTexture(GraphicsContext3D* context3d, const void* planeTextureData, int toPlaneIndex)

Having the texture copies on the CCVideoLayerImpl seems a lot worse than having it in LRC.  The layer impls shouldn&apos;t care what the context implementation is, that&apos;s a concern for the CCRenderer implementation (or something it holds on to, like a texture uploader class) to figure out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642087</commentid>
    <comment_count>10</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 18:50:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 145889 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145889&amp;action=review
&gt; 
&gt; The division of responsibilities here doesn&apos;t seem quite right (see inline comments).  Moving GC3D-aware stuff up to CC*LayerImpls is the wrong direction to be moving in.  We&apos;re syncing quads, not layers - right?  When we go to serialize the quads for a given video layer, we can take care of any uploads that need to happen at that point.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:82
&gt; &gt; +    ASSERT(MaxPlanes == WebKit::WebVideoFrame::maxPlanes);
&gt; 
&gt; Both of these values are compile-time assertions, so this should also be a compile-time assertion (and probably not in this file).

Oh.. COMPILE_ASSERT I guess? Fancy.

&gt; Why do we even need a different enum - can&apos;t we just use WebKit::WebVideoFrame::maxPlanes directly?

Because we have m_textures[MaxPlanes] and it won&apos;t let us make it from a static const int. We could make the value in WebVideoFrame an enum instead of a static const, would that be a good thing to do?

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:264
&gt; &gt; +void CCVideoLayerImpl::copyPlaneToTexture(GraphicsContext3D* context3d, const void* planeTextureData, int toPlaneIndex)
&gt; 
&gt; Having the texture copies on the CCVideoLayerImpl seems a lot worse than having it in LRC.  The layer impls shouldn&apos;t care what the context implementation is, that&apos;s a concern for the CCRenderer implementation (or something it holds on to, like a texture uploader class) to figure out.

Hm, I was trying to more or less mimic the division of labour for other layers (CCTiledLayerImpl etc). The layer makes textures and puts contents into them as it deems appropriate, then puts texture ids into the quads. The quads/textures end up in an LRC somewhere and it sticks them all in a render target.

I was imagining the quad serializer being more simple I think, just put the quads into some pipe and ship it off over IPC. You are imagining this as being a texture upload step? Are you thinking of this also for tiled layers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642097</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 19:03:45 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 145889 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145889&amp;action=review
&gt; &gt; 
&gt; &gt; The division of responsibilities here doesn&apos;t seem quite right (see inline comments).  Moving GC3D-aware stuff up to CC*LayerImpls is the wrong direction to be moving in.  We&apos;re syncing quads, not layers - right?  When we go to serialize the quads for a given video layer, we can take care of any uploads that need to happen at that point.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:82
&gt; &gt; &gt; +    ASSERT(MaxPlanes == WebKit::WebVideoFrame::maxPlanes);
&gt; &gt; 
&gt; &gt; Both of these values are compile-time assertions, so this should also be a compile-time assertion (and probably not in this file).
&gt; 
&gt; Oh.. COMPILE_ASSERT I guess? Fancy.
&gt; 
&gt; &gt; Why do we even need a different enum - can&apos;t we just use WebKit::WebVideoFrame::maxPlanes directly?
&gt; 
&gt; Because we have m_textures[MaxPlanes] and it won&apos;t let us make it from a static const int. We could make the value in WebVideoFrame an enum instead of a static const, would that be a good thing to do?
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:264
&gt; &gt; &gt; +void CCVideoLayerImpl::copyPlaneToTexture(GraphicsContext3D* context3d, const void* planeTextureData, int toPlaneIndex)
&gt; &gt; 
&gt; &gt; Having the texture copies on the CCVideoLayerImpl seems a lot worse than having it in LRC.  The layer impls shouldn&apos;t care what the context implementation is, that&apos;s a concern for the CCRenderer implementation (or something it holds on to, like a texture uploader class) to figure out.
&gt; 
&gt; Hm, I was trying to more or less mimic the division of labour for other layers (CCTiledLayerImpl etc). The layer makes textures and puts contents into them as it deems appropriate, then puts texture ids into the quads. The quads/textures end up in an LRC somewhere and it sticks them all in a render target.
&gt; 
&gt; I was imagining the quad serializer being more simple I think, just put the quads into some pipe and ship it off over IPC. You are imagining this as being a texture upload step? Are you thinking of this also for tiled layers?

Thinking further.. I do agree about doing this work in LRC. That seems right, I guess I was thinking we don&apos;t need to worry about it atm and just copying code. The &quot;division of labour&quot; issue seems unclear to me still - but with the current approach I can see adding/using public methods on the layerRenderer to copy the texture data into the GL textures (from CCVideoLayerImpl?) instead of accessing the context directly. I can try that out tomorrow, but I&apos;d like to discuss further about deferring the uploads until serialization. I feel like we shouldn&apos;t have any pointers in Quads at all - including the texture data pointer from WebVideoFrame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642099</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 19:04:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 145889 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145889&amp;action=review
&gt; &gt; 
&gt; &gt; The division of responsibilities here doesn&apos;t seem quite right (see inline comments).  Moving GC3D-aware stuff up to CC*LayerImpls is the wrong direction to be moving in.  We&apos;re syncing quads, not layers - right?  When we go to serialize the quads for a given video layer, we can take care of any uploads that need to happen at that point.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:82
&gt; &gt; &gt; +    ASSERT(MaxPlanes == WebKit::WebVideoFrame::maxPlanes);
&gt; &gt; 
&gt; &gt; Both of these values are compile-time assertions, so this should also be a compile-time assertion (and probably not in this file).
&gt; 
&gt; Oh.. COMPILE_ASSERT I guess? Fancy.

Yes, see Source/WebKit/chromium/src/AssertMatchingEnums.cpp

&gt; 
&gt; &gt; Why do we even need a different enum - can&apos;t we just use WebKit::WebVideoFrame::maxPlanes directly?
&gt; 
&gt; Because we have m_textures[MaxPlanes] and it won&apos;t let us make it from a static const int. We could make the value in WebVideoFrame an enum instead of a static const, would that be a good thing to do?

D&apos;oh.  Not sure about that - do you know of any particular reason this value is a const int instead of an enum, Ami?


&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:264
&gt; &gt; &gt; +void CCVideoLayerImpl::copyPlaneToTexture(GraphicsContext3D* context3d, const void* planeTextureData, int toPlaneIndex)
&gt; &gt; 
&gt; &gt; Having the texture copies on the CCVideoLayerImpl seems a lot worse than having it in LRC.  The layer impls shouldn&apos;t care what the context implementation is, that&apos;s a concern for the CCRenderer implementation (or something it holds on to, like a texture uploader class) to figure out.
&gt; 
&gt; Hm, I was trying to more or less mimic the division of labour for other layers (CCTiledLayerImpl etc). The layer makes textures and puts contents into them as it deems appropriate, then puts texture ids into the quads. The quads/textures end up in an LRC somewhere and it sticks them all in a render target.
&gt; 
&gt; I was imagining the quad serializer being more simple I think, just put the quads into some pipe and ship it off over IPC. You are imagining this as being a texture upload step? Are you thinking of this also for tiled layers?

I&apos;m imagining that sometime has to figure out how to package up the quads into a pipe and send them over - it seems reasonable to me for that step to also take care of &quot;serializing&quot; the pixels into an appropriate format (stick them in shared memory, upload them to a texture, or whatever else is appropriate).  The layer should simply put enough information in the quad for this serialization to be possible.

One reason to do it this way is that we don&apos;t determine culling info, etc, until after we calculate the quads and passes.  CCLayerImpl::willDraw() is called for every layer in the tree.  This means it&apos;s quite common for us to call willDraw() on a video layer, then later realize that it&apos;s completely obscured by another layer or completely out of the viewport or whatnot.  In that case, we shouldn&apos;t bother with actually uploading the software-decoded contents into a texture - we should just release the frame back to the provider once the frame is over.  This sort of optimization is only possible if we make the decision about how to handle the resources when we&apos;re going through quads.

Tiled layers are different in that the texture resource decisions are made on the main thread, not the impl thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642100</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-05 19:06:45 -0700</bug_when>
    <thetext>We could add some other indirection between the WebVideoFrame&apos;s data pointer and the Quad if it proves helpful, but think be sure to think about how to handle the culled/out of viewport quad case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642101</commentid>
    <comment_count>14</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-05 19:08:59 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; We could add some other indirection between the WebVideoFrame&apos;s data pointer and the Quad if it proves helpful, but think be sure to think about how to handle the culled/out of viewport quad case.

Ok yeh, good point thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642117</commentid>
    <comment_count>15</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-06-05 20:16:10 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; &gt; Why do we even need a different enum - can&apos;t we just use WebKit::WebVideoFrame::maxPlanes directly?
&gt; &gt; Because we have m_textures[MaxPlanes] and it won&apos;t let us make it from a static const int. We could make the value in WebVideoFrame an enum instead of a static const, would that be a good thing to do?
&gt; D&apos;oh.  Not sure about that - do you know of any particular reason this value is a const int instead of an enum, Ami?

Probably the only reason is that those static const int&apos;s predate my involvement with the project.
Please change them to enums.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642818</commentid>
    <comment_count>16</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-06 14:32:59 -0700</bug_when>
    <thetext>So I think there&apos;s lots of ways we could approach this, and deferring upload to later is totally valid. But if we&apos;re going to go that route I&apos;d like to do that at a later time. My goal right now is to make the separation between LRC/drawing and the layer tree complete, so that we can draw (without any serialization) without needing anything in the layer tree. Then start poking at serialization after.

Can we agree on that as a goal?

If so, I propose we control the texture upload in the layer&apos;s willDraw() using the CCRenderer&apos;s public APIs. Then the video quad will avoid any pointers. Bug #88435 will prevent this texture copy when the layer is occluded.

I used/added to the TextureCopier to copy the pixels into a texture. I&apos;m not sure if there&apos;s a better place right now.

I moved one FIXME: I don&apos;t think we want to hold a lock on the WebVideoFrame until the host compositor is done with it. Instead, we want to double-buffer (or otherwise synchronize use of) the texture that a hardware decoding provider is giving us.

I wanted to get rid of the public use of &quot;GC3Denum format&quot; but we don&apos;t have the test infrastructure in place to do that with any kind of confidence, so I&apos;ll postpone trying to make it completely GC3D/GC2D agnostic until later.

I wanted to make the CCVideoLayerImpl code a bit more understandable and less GC3D&apos;ish in its naming though, so I changed some variable names. So we now have an array &quot;FramePlanes&quot; instead of &quot;Textures&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642819</commentid>
    <comment_count>17</comment_count>
      <attachid>146111</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-06 14:33:22 -0700</bug_when>
    <thetext>Created attachment 146111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642820</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-06 14:36:31 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642821</commentid>
    <comment_count>19</comment_count>
      <attachid>146112</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-06 14:37:10 -0700</bug_when>
    <thetext>Created attachment 146112
Patch

missed removing the assert in the last upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642934</commentid>
    <comment_count>20</comment_count>
      <attachid>146140</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-06 16:24:22 -0700</bug_when>
    <thetext>Created attachment 146140
Patch

Please compare this with the previous patch. This version moves the texture upload out of TextureCopier and makes use of LayerTextureSubImage instead, as per some discussion with reveman.

The CCVideoLayerImpl then has to bind the textures itself, as we don&apos;t have any infrastructure that would take a textureId and do the upload. We also discussed the possibility of doing this texture upload outside of willDraw(), in some other scheduler upload state (like an impl-&gt;impl commit sorta), so that the time to draw a frame is predictable and does not include suddenly texture uploads as it would for video. This is something we should persue afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645101</commentid>
    <comment_count>21</comment_count>
      <attachid>146140</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-08 16:00:20 -0700</bug_when>
    <thetext>Comment on attachment 146140
Patch

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

I agree with the general direction here, that uploading should be moved out of the quad and into the layer.  I&apos;m still wrapping my head around how to solve the double buffering/synchronization FIXME, but it&apos;s clear to me that the quad can&apos;t be the responsible party.

&gt; Source/WebCore/ChangeLog:22
&gt; +        class. Instead, this method makes use of the LayerTextureSubImage class
&gt; +        to copy the pixel data into the texture.

\o/

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:52
&gt; +    CCVideoLayerImpl::FramePlane* m_planes;

Whoa there.  The ChangeLog says &quot;CCVideoDrawQuad should not contain any pointers&quot;.  m_planes is owned by the video layer.  m_frame used to be owned by the video layer.  Seems about the same to me.

I was expecting this patch to make CCVideoLayerImpl be a quad that directly contains all the data it needs with no pointer indirection.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:53
&gt; +    unsigned m_frameProviderTextureId;

So, now that the quad doesn&apos;t do the upload, we have a quad that&apos;s overloaded for drawing two different things.  Can the single texture case just use CCTextureDrawQuad?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:55
&gt;      const float* m_matrix;

Should this also not be a pointer and instead be a WebTransformationMatrix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645105</commentid>
    <comment_count>22</comment_count>
      <attachid>146140</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-08 16:05:43 -0700</bug_when>
    <thetext>Comment on attachment 146140
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:52
&gt;&gt; +    CCVideoLayerImpl::FramePlane* m_planes;
&gt; 
&gt; Whoa there.  The ChangeLog says &quot;CCVideoDrawQuad should not contain any pointers&quot;.  m_planes is owned by the video layer.  m_frame used to be owned by the video layer.  Seems about the same to me.
&gt; 
&gt; I was expecting this patch to make CCVideoLayerImpl be a quad that directly contains all the data it needs with no pointer indirection.

Oh, hm. I was thinking &quot;this is an array not a pointer&quot;. But yeh it&apos;s still owned by the layer, thanks.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:53
&gt;&gt; +    unsigned m_frameProviderTextureId;
&gt; 
&gt; So, now that the quad doesn&apos;t do the upload, we have a quad that&apos;s overloaded for drawing two different things.  Can the single texture case just use CCTextureDrawQuad?

hmm I&apos;ll take a peek

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:55
&gt;&gt;      const float* m_matrix;
&gt; 
&gt; Should this also not be a pointer and instead be a WebTransformationMatrix?

Ya same here, we should have our own array, or a WebTransformationMatrix as you say.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646221</commentid>
    <comment_count>23</comment_count>
      <attachid>146897</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-11 13:48:13 -0700</bug_when>
    <thetext>Created attachment 146897
Patch

Right-o here&apos;s a new version without any pointer copies into the CCVideoDrawQuad. We have our own array of FrameData in there now, and we&apos;re using the pleasant WebTransformationMatrix as well.

Also got rid of the setMatrix() method on the quad - everything comes in thru the constructor!

Also also moved the static constants used during draw out of the CCVideoLayerImpl class into LRC where they are used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646250</commentid>
    <comment_count>24</comment_count>
      <attachid>146897</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-11 14:14:54 -0700</bug_when>
    <thetext>Comment on attachment 146897
Patch

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

R=me.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:53
&gt; +    unsigned m_frameProviderTextureId;
&gt;      GC3Denum m_format;

I&apos;m still interested in having fewer overloaded quads, but maybe that can be a follow-up patch.  I think we could have a YUV video quad (3 planes), streaming texture (id and matrix), and use CCTextureDrawQuad (id, texture transform) for RGBA and native.  I also wonder if anybody is using that texture matrix for anything more than uv translation and scale.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:248
&gt; +void CCVideoLayerImpl::FramePlane::freeData(CCRenderer* layerRenderer)

Can you assert in the FramePlane destructor that this function has been called and textureId is 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646269</commentid>
    <comment_count>25</comment_count>
      <attachid>146897</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-11 14:29:30 -0700</bug_when>
    <thetext>Comment on attachment 146897
Patch

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

thanks.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoDrawQuad.h:53
&gt;&gt;      GC3Denum m_format;
&gt; 
&gt; I&apos;m still interested in having fewer overloaded quads, but maybe that can be a follow-up patch.  I think we could have a YUV video quad (3 planes), streaming texture (id and matrix), and use CCTextureDrawQuad (id, texture transform) for RGBA and native.  I also wonder if anybody is using that texture matrix for anything more than uv translation and scale.

I&apos;ll do the CCTextureDrawQuad first.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:248
&gt;&gt; +void CCVideoLayerImpl::FramePlane::freeData(CCRenderer* layerRenderer)
&gt; 
&gt; Can you assert in the FramePlane destructor that this function has been called and textureId is 0?

yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646291</commentid>
    <comment_count>26</comment_count>
      <attachid>146919</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-11 14:53:22 -0700</bug_when>
    <thetext>Created attachment 146919
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646371</commentid>
    <comment_count>27</comment_count>
      <attachid>146919</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-11 15:58:33 -0700</bug_when>
    <thetext>Comment on attachment 146919
Patch for landing

Clearing flags on attachment: 146919

Committed r120015: &lt;http://trac.webkit.org/changeset/120015&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>646372</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-11 15:58:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145869</attachid>
            <date>2012-06-05 14:15:09 -0700</date>
            <delta_ts>2012-06-05 16:07:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88363-20120605171508.patch</filename>
            <type>text/plain</type>
            <size>25905</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZkZjE1M2Q4M2Q3ZWRj
NjM5NmEzZmNjM2JiMTA5ZWJlZGZkMmU2Mi4uYjg2ODY1ZTc5ZWE4OWY4Y2ZmZDAxYjY1NWFiYmEx
Yzg5NWQ5MTMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTA2LTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2Vw
YXJhdGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBmcm9tIHRoZSBsYXllciB0cmVlIGFuZCB2aWRlbyBw
cm92aWRlciBieSByZW1vdmluZyBNYW5hZ2VkVGV4dHVyZSBhbmQgV2ViVmlkZW9GcmFtZSBwb2lu
dGVycyBmcm9tIHRoZSBxdWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04ODM2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENDVmlkZW9EcmF3UXVhZCBzaG91bGQgbm90IGNvbnRhaW4gYW55IHBvaW50ZXJz
IHNvIHdlIGFyZSBhYmxlIHRvCisgICAgICAgIHNlcmlhbGl6ZSBpdCBhY3Jvc3MgcHJvY2VzcyBi
b3VuZGFyaWVzLiBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlCisgICAgICAgIE1hbmFnZWRUZXh0dXJl
IHBvaW50ZXJzIGZyb20gdGhlIHF1YWQgY2xhc3MsIHJlcGxhY2luZyB0aGVtIHdpdGgKKyAgICAg
ICAgdGV4dHVyZSBpZHMsIGFuZCByZW1vdmVzIHRoZSBXZWJWaWRlb0ZyYW1lKiBmcm9tIHRoZSBx
dWFkLCByZXBsYWNpbmcKKyAgICAgICAgaXQgd2l0aCB0aGUgZnJhbWUgcHJvdmlkZXIncyB0ZXh0
dXJlIGlkIGluY2x1ZGVkIGluIHRoZSBXZWJWaWRlb0ZyYW1lCisgICAgICAgIHN0cnVjdHVyZS4K
KworICAgICAgICBUZXh0dXJlIGFsbG9jYXRpb24gaXMgZG9uZSBpbiBDQ1ZpZGVvTGF5ZXJJbXBs
IHZpYSB0aGUKKyAgICAgICAgY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLCBzbyB0aGF0IHRoZSBt
ZW1vcnkgdXNhZ2UgY2FuIGJlIHRyYWNrZWQuCisKKyAgICAgICAgV2UgbW92ZSB0aGUgY29weVBs
YW5lVG9UZXh0dXJlcygpIG1ldGhvZCBiYWNrIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisg
ICAgICAgIHRvIENDVmlkZW9MYXllckltcGwsIGFzIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHRleHR1
cmUgZGF0YSBwb2ludGVyIGluIHRoZQorICAgICAgICBXZWJWaWRlb0ZyYW1lLCBhbmQgd2UgZG8g
bm90IHdhbnQgdG8gZ2l2ZSB0aGlzIHBvaW50ZXIgdG8gdGhlIHF1YWQKKyAgICAgICAgY2xhc3Mu
CisKKyAgICAgICAgUmVmYWN0b3IsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TmF0aXZlVGV4dHVyZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1N0cmVhbVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VmlkZW9R
dWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFj
ZUxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0lPU3VyZmFjZUxheWVySW1wbDo6
d2lsbERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9EcmF3UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFk
Lmg6CisgICAgICAgIChDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0RyYXdRdWFkOjpmcmFtZVByb3ZpZGVyVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NWaWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJ
bXBsOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlG
cmFtZVRvVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpjb3B5UGxhbmVUb1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZTo6YWxsb2NhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZTo6ZnJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Zp
ZGVvTGF5ZXJJbXBsOjphbGxvY2F0ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlk
ZW9MYXllckltcGw6OmZyZWVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5
ZXJJbXBsOjpmcmVlVW51c2VkVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xh
eWVySW1wbDo6ZGlkTG9zZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKFRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAg
IChDQ1ZpZGVvTGF5ZXJJbXBsKToKKwogMjAxMi0wNi0wMSAgT2phbiBWYWZhaSAgPG9qYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIENoYW5nZSBvdmVycmlkZVNpemVzIHRvIGJlIGNvbnRlbnQt
Ym94IGluc3RlYWQgb2YgYm9yZGVyLWJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAw
MmIzYTk1NjdhOWU0YTg2M2M0ZWQ2MzQ3YzY5Y2M0MTE3NjY5Y2NhLi4wNjU2NDVhNWM0OGEzYmMx
ZTI4MzljODllNGQyYWVkMzc5OTY4YTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDEyLTA2LTA1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2VwYXJhdGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBm
cm9tIHRoZSBsYXllciB0cmVlIGFuZCB2aWRlbyBwcm92aWRlciBieSByZW1vdmluZyBNYW5hZ2Vk
VGV4dHVyZSBhbmQgV2ViVmlkZW9GcmFtZSBwb2ludGVycyBmcm9tIHRoZSBxdWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODM2MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICBTZXQgdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwg
b24gb3VyIHRlc3QncyBDQ1ZpZGVvTGF5ZXJJbXBsLCBhcyBpdAorICAgICAgICBleHBlY3RzIHRo
ZSBwb2ludGVyIHRvIGV4aXN0IGluIGl0cyBkZXN0cnVjdG9yLgorCiAyMDEyLTA2LTA1ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGwgQ2hyb21pdW0gREVQ
UyBmcm9tIHIxNDA0OTIgdG8gcjE0MDUyOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCmluZGV4IDhkZTQ0OWMwMzRkMDhlZDUyNzk3ZmNjZGMyYTViNWY1MTRkYjM2NzYuLjU4
NGRlMmIyYTRmYmU2MjIzMzY2YTNlNzhhNjNiNTQzM2QwZGIzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtOTcxLDE3ICs5NzEsMTcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+dGV4dHVy
ZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnZQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7
Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIHlUZXh0dXJlLnRleHR1cmVJZCkpOwogICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKLSAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdVRleHR1cmUudGV4dHVyZUlkKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB2VGV4dHVyZS50ZXh0dXJlSWQpKTsKIAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKIAotICAgIGZsb2F0IHlXaWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lk
dGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIGZsb2F0IHlX
aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLnZpc2libGVTaXpl
LndpZHRoKCkpIC8geVRleHR1cmUuc2l6ZS53aWR0aCgpOwogICAgIC8vIEFyYml0cmFyaWx5IHRh
a2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4K
LSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1
cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndp
ZHRoKCk7CisgICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHVUZXh0dXJlLnZpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUuc2l6ZS53aWR0aCgpOwog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNo
YWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsK
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3Ip
KTsKIApAQCAtMTAyNSwxMyArMTAyNSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIGNvbnN0IFRleHR1
cmVQcm9ncmFtKiBwcm9ncmFtID0gdGV4dHVyZVByb2dyYW0oKTsKICAgICBjb25zdCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6Oldl
YlZpZGVvRnJhbWU6OnJnYlBsYW5lXTsKLSAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUu
bV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVh
ZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVyZS0+dGV4
dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKKyAgICBmbG9hdCB3aWR0
aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUudmlzaWJsZVNpemUud2lk
dGgoKSkgLyB0ZXh0dXJlLnNpemUud2lkdGgoKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVv
UXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLnRleHR1cmVJZCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd05hdGl2ZVRleHR1cmUyRChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQp
CiB7Ci0gICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQocXVhZCwgdGV4dHVyZVByb2dyYW0o
KSwgMSwgcXVhZC0+ZnJhbWUoKS0+dGV4dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCB0ZXh0dXJlUHJv
Z3JhbSgpLCAxLCBxdWFkLT5mcmFtZVByb3ZpZGVyVGV4dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdT
dHJlYW1UZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKQEAgLTEwNDMsNTQgKzEw
NDMsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1UZXh0dXJlKGNv
bnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKICAgICBBU1NFUlQocXVhZC0+bWF0cml4KCkpOwog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS50ZXhNYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxm
bG9hdCo+KHF1YWQtPm1hdHJpeCgpKSkpOwogCi0gICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1
YWQocXVhZCwgcHJvZ3JhbSwgMSwgcXVhZC0+ZnJhbWUoKS0+dGV4dHVyZUlkKCksIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7Ci19Ci0KLWJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IENDVmlkZW9EcmF3UXVh
ZCogcXVhZCkKLXsKLSAgICBjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIGZyYW1lID0gcXVh
ZC0+ZnJhbWUoKTsKLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1l
LT5wbGFuZXMoKTsgKytwbGFuZSkKLSAgICAgICAgY29weVBsYW5lVG9UZXh0dXJlKHF1YWQsIGZy
YW1lLT5kYXRhKHBsYW5lKSwgcGxhbmUpOwotCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IGZy
YW1lLT5wbGFuZXMoKTsgcGxhbmUgPCBDQ1ZpZGVvTGF5ZXJJbXBsOjpNYXhQbGFuZXM7ICsrcGxh
bmUpIHsKLSAgICAgICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZSA9ICZxdWFk
LT50ZXh0dXJlcygpW3BsYW5lXTsKLSAgICAgICAgdGV4dHVyZS0+bV90ZXh0dXJlLmNsZWFyKCk7
Ci0gICAgICAgIHRleHR1cmUtPm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weVBsYW5l
VG9UZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCwgY29uc3Qgdm9pZCogcGxhbmUs
IGludCBpbmRleCkKLXsKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0g
cXVhZC0+dGV4dHVyZXMoKVtpbmRleF07Ci0gICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBj
Y0NvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QobV9jb250ZXh0KTsKLSAgICB0
ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY2NDb250ZXh0LmdldCgpLCBtX2ltcGxUZXh0
dXJlQWxsb2NhdG9yLmdldCgpKTsKLSAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4
dHVyZS0+Zm9ybWF0KCk7Ci0gICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1
cmUtPnNpemUoKTsKLQotICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hS
T01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMu
d2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwotICAgIGlm
IChtZW0pIHsKLSAgICAgICAgbWVtY3B5KG1lbSwgcGxhbmUsIGRpbWVuc2lvbnMud2lkdGgoKSAq
IGRpbWVuc2lvbnMuaGVpZ2h0KCkpOwotICAgICAgICBHTEMoY29udGV4dCgpLCBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4
U3ViSW1hZ2UyRAotICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVz
IGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCi0gICAgICAgIC8vIGluIHRoZSBjb21t
YW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBsYW5lKSk7Ci0gICAgfQor
ICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1YWQtPmZy
YW1lUHJvdmlkZXJUZXh0dXJlSWQoKSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVf
RVhURVJOQUxfT0VTKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRl
b1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAKLSAgICBpZiAoIXF1YWQtPmZyYW1lKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJlcyhxdWFkKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgc3dpdGNoIChxdWFkLT5mb3JtYXQoKSkgewogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRToKICAgICAgICAgZHJhd1lVVihxdWFkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3
UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvRHJhd1F1YWQuY3BwCmluZGV4IDljY2E3MTQxMmFjZDdmNWJjNjc4Yzg1NGRjYjJkNWQ1
ZTAyYThjMmEuLjY0Nzc1ZmJmMGYxZDFhMDJiMTIxODMyNmRhN2U5OTFkOTZjMzk3NGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9EcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcApAQCAtMjksMTUgKzI5LDE1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3
UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJl
cywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQorUGFzc093
blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgdW5zaWduZWQgZnJhbWVQcm92aWRl
clRleHR1cmVJZCwgR0MzRGVudW0gZm9ybWF0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NWaWRlb0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRleHR1cmVzLCBmcmFt
ZSwgZm9ybWF0KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ZpZGVvRHJhd1F1YWQoc2hh
cmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGV4dHVyZXMsIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQs
IGZvcm1hdCkpOwogfQogCi1DQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZChjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVj
dCwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFdlYktpdDo6V2ViVmlkZW9G
cmFtZSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCkKK0NDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0Ry
YXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgdW5z
aWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCwgR0MzRGVudW0gZm9ybWF0KQogICAgIDogQ0NE
cmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlZpZGVvQ29udGVudCwgcXVhZFJl
Y3QpCiAgICAgLCBtX3RleHR1cmVzKHRleHR1cmVzKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAg
ICAsIG1fZnJhbWVQcm92aWRlclRleHR1cmVJZChmcmFtZVByb3ZpZGVyVGV4dHVyZUlkKQogICAg
ICwgbV9mb3JtYXQoZm9ybWF0KQogICAgICwgbV9tYXRyaXgoMCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0RyYXdRdWFkLmgKaW5kZXggOWViMzU3ZmM4NmI1YTQ0OWE5MmNjZWVkMTY1M2M5ZGQ4MmMyNWQz
OS4uYjljODdkZmQwYTg3MGExNGIyYWM0NjM0ZmMyZTJiNmQ4NmUwOWE1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdR
dWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0RyYXdRdWFkLmgKQEAgLTMxLDI5ICszMSwyNiBAQAogI2luY2x1ZGUgImNjL0NDVmlk
ZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLWNsYXNzIFdlYlZpZGVvRnJhbWU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFdl
YktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBj
b25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIHVuc2ln
bmVkIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCk7CiAKKyAgICAvLyBB
biBhcnJheSBvZiB0ZXh0dXJlcywgd2hlcmUgZWFjaCBpbmRleCBjb3JyZXNwb25kcyB0byBhIHBs
YW5lIGluIFdlYktpdDo6V2ViVmlkZW9GcmFtZS4KICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0
dXJlKiB0ZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZXM7IH0KLSAgICBXZWJLaXQ6
OldlYlZpZGVvRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIHVu
c2lnbmVkIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUHJv
dmlkZXJUZXh0dXJlSWQ7IH0KICAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdDsgfQogICAgIGNvbnN0IGZsb2F0KiBtYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX21h
dHJpeDsgfQogCiAgICAgdm9pZCBzZXRNYXRyaXgoY29uc3QgZmxvYXQqIG1hdHJpeCkgeyBtX21h
dHJpeCA9IG1hdHJpeDsgfQogCiBwcml2YXRlOgotICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0
dXJlKiB0ZXh0dXJlcywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiwgR0MzRGVudW0gZm9ybWF0KTsK
KyAgICBDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRS
ZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIHVuc2lnbmVkIGZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCk7CiAKICAgICBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpUZXh0dXJlKiBtX3RleHR1cmVzOwotICAgIFdlYktpdDo6V2ViVmlkZW9GcmFtZSogbV9m
cmFtZTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lUHJvdmlkZXJUZXh0dXJlSWQ7CiAgICAgR0MzRGVu
dW0gbV9mb3JtYXQ7CiAgICAgY29uc3QgZmxvYXQqIG1fbWF0cml4OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggMTA1YzExOWY0Zjk1NjA4YTY4MGE2NmIzOTVkMjZl
ZjExOTI5NWU3Zi4uNzM0OTI2ZTQ2NmUwYjliYzcxNDFiZWQ3MmZiN2VkZjA3MTViZmQ1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIu
aCIgLy8gRm9yIFRleHR1cmVBbGxvY2F0b3IKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxl
ci5oIgpAQCAtNzgsNiArNzksOCBAQCBDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBs
KGludCBpZCwgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lUHJvdmlkZXIqIHByb3ZpZAogICAgICwgbV9w
cm92aWRlcihwcm92aWRlcikKICAgICAsIG1fZnJhbWUoMCkKIHsKKyAgICBBU1NFUlQoTWF4UGxh
bmVzID09IFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzKTsKKwogICAgIG1lbWNweSht
X3N0cmVhbVRleHR1cmVNYXRyaXgsIGZsaXBUcmFuc2Zvcm0sIHNpemVvZihtX3N0cmVhbVRleHR1
cmVNYXRyaXgpKTsKIAogICAgIC8vIFRoaXMgb25seSBoYXBwZW5zIGR1cmluZyBhIGNvbW1pdCBv
biB0aGUgY29tcG9zaXRvciB0aHJlYWQgd2hpbGUgdGhlIG1haW4KQEAgLTk2LDggKzk5LDcgQEAg
Q0NWaWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwoKQogICAgICAgICBtX3Byb3ZpZGVy
LT5zZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoMCk7CiAgICAgICAgIG1fcHJvdmlkZXIgPSAw
OwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpCi0g
ICAgICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFyKCk7CisgICAgZnJlZVRleHR1cmVz
KGxheWVyVHJlZUhvc3RJbXBsKCktPmxheWVyUmVuZGVyZXIoKSk7CiB9CiAKIHZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6c3RvcFVzaW5nUHJvdmlkZXIoKQpAQCAtMTQxLDEzICsxNDMsMTQgQEAgdm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjp3aWxsRHJhdyhDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyLCBD
Q0dyYXBoaWNzQ29udGV4dCogY28KICAgICAvLyBsb2NrIHNob3VsZCBub3QgY2F1c2UgYSBkZWFk
bG9jay4KICAgICBtX3Byb3ZpZGVyTXV0ZXgubG9jaygpOwogCi0gICAgd2lsbERyYXdJbnRlcm5h
bChsYXllclJlbmRlcmVyKTsKKyAgICB3aWxsRHJhd0ludGVybmFsKGxheWVyUmVuZGVyZXIsIGNv
bnRleHQpOworICAgIGZyZWVVbnVzZWRUZXh0dXJlcyhsYXllclJlbmRlcmVyKTsKIAogICAgIGlm
ICghbV9mcmFtZSkKICAgICAgICAgbV9wcm92aWRlck11dGV4LnVubG9jaygpOwogfQogCi12b2lk
IENDVmlkZW9MYXllckltcGw6OndpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciogbGF5ZXJSZW5k
ZXJlcikKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVy
KiBsYXllclJlbmRlcmVyLCBDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCkBAIC0xNTYsNiArMTU5LDEyIEBAIHZvaWQg
Q0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVyKiBsYXllclJlbmRl
cmVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQzZCA9IGNvbnRleHQtPmNvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dDNkKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3Np
dGluZy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG1fZnJhbWUgPSBtX3Byb3ZpZGVy
LT5nZXRDdXJyZW50RnJhbWUoKTsKIAogICAgIGlmICghbV9mcmFtZSkKQEAgLTE2OSwxMCArMTc4
LDE1IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVy
KiBsYXllclJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFyZXNl
cnZlVGV4dHVyZXMoKm1fZnJhbWUsIG1fZm9ybWF0LCBsYXllclJlbmRlcmVyKSkgeworICAgIGlm
ICghYWxsb2NhdGVUZXh0dXJlcygqbV9mcmFtZSwgbV9mb3JtYXQsIGxheWVyUmVuZGVyZXIpKSB7
CiAgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKICAgICAgICAg
bV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ug
ZG9uJ3QgbmVlZCB0byBkbyB0aGlzIGNvcHkgZm9yIHNvbWUgdmFsdWVzIG9mIG1fZm9ybWF0LCB3
aGVuIHdlCisgICAgLy8gd2lsbCBkcmF3IHRoZSBmcmFtZSBwcm92aWRlcidzIHRleHR1cmUgZGly
ZWN0bHkuCisgICAgY29weUZyYW1lVG9UZXh0dXJlcyhjb250ZXh0M2QpOwogfQogCiB2b2lkIEND
VmlkZW9MYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGJvb2wmKQpAQCAtMTgzLDcgKzE5
Nyw3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBx
dWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhCiAgICAgICAgIHJldHVybjsKIAogICAgIElu
dFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIE93blB0cjxDQ1ZpZGVv
RHJhd1F1YWQ+IHZpZGVvUXVhZCA9IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZSwgcXVhZFJlY3QsIG1fdGV4dHVyZXMsIG1fZnJhbWUsIG1fZm9ybWF0KTsKKyAgICBPd25Q
dHI8Q0NWaWRlb0RyYXdRdWFkPiB2aWRlb1F1YWQgPSBDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShz
aGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBtX3RleHR1cmVzLCBtX2ZyYW1lLT50ZXh0dXJlSWQo
KSwgbV9mb3JtYXQpOwogCiAgICAgaWYgKG1fZm9ybWF0ID09IEV4dGVuc2lvbnMzRENocm9taXVt
OjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUykKICAgICAgICAgdmlkZW9RdWFkLT5zZXRNYXRyaXgo
bV9zdHJlYW1UZXh0dXJlTWF0cml4KTsKQEAgLTE5OSw4ICsyMTMsOCBAQCB2b2lkIENDVmlkZW9M
YXllckltcGw6OmRpZERyYXcoKQogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9mcmFtZS0+cGxhbmVzKCk7
ICsrcGxhbmUpCi0gICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZl
KCk7CisgICAgLy8gRklYTUU6IFdoZW4gd2UgcGFzcyBxdWFkcyBvdXQgb2YgcHJvY2Vzcywgd2Ug
bmVlZCB0byBkZWxheSB0aGlzIHVudGlsIHdlIGtub3cgdGhlIGhvc3QKKyAgICAvLyBoYXMgZGVz
dHJveWVkIGl0cyBjb3B5IG9mIHRoZSBDQ1ZpZGVvRHJhd1F1YWQgcHJvZHVjZWQgd2l0aCB0aGlz
IGZyYW1lLgogICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKICAgICBt
X2ZyYW1lID0gMDsKIApAQCAtMjQzLDkgKzI1Nyw0OSBAQCBJbnRTaXplIENDVmlkZW9MYXllcklt
cGw6OmNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUmIGZyYW1l
LAogICAgIHJldHVybiBJbnRTaXplKHZpc2libGVXaWR0aCwgdmlzaWJsZUhlaWdodCk7CiB9CiAK
LWJvb2wgQ0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6V2Vi
VmlkZW9GcmFtZSYgZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZW5kZXJlciogbGF5ZXJSZW5k
ZXJlcikKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6Y29weUZyYW1lVG9UZXh0dXJlcyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkKQogewotICAgIGlmIChmcmFtZS5wbGFuZXMoKSA+IE1heFBs
YW5lcykKKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX2ZyYW1lLT5wbGFu
ZXMoKTsgKytwbGFuZSkKKyAgICAgICAgY29weVBsYW5lVG9UZXh0dXJlKGNvbnRleHQzZCwgbV9m
cmFtZS0+ZGF0YShwbGFuZSksIHBsYW5lKTsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpj
b3B5UGxhbmVUb1RleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgY29uc3Qgdm9p
ZCogcGxhbmVUZXh0dXJlRGF0YSwgaW50IHRvUGxhbmVJbmRleCkKK3sKKyAgICBDQ1ZpZGVvTGF5
ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1t0b1BsYW5lSW5kZXhdOworICAg
IEFTU0VSVCh0ZXh0dXJlLnRleHR1cmVJZCk7CisgICAgY29udGV4dDNkLT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZS50ZXh0dXJlSWQpOworCisgICAg
dm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0M2Qt
PmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgdGV4dHVyZS5zaXplLndpZHRoKCksIHRleHR1cmUu
c2l6ZS5oZWlnaHQoKSwgdGV4dHVyZS5mb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSk7CisgICAgaWYgKG1lbSkg
eworICAgICAgICBtZW1jcHkobWVtLCBwbGFuZVRleHR1cmVEYXRhLCB0ZXh0dXJlLnNpemUud2lk
dGgoKSAqIHRleHR1cmUuc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dDNkLT5nZXRFeHRlbnNpb25z
KCkpLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtZW0pKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBJZiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNs
b3dlciB0ZXhTdWJJbWFnZTJECisgICAgICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRo
ZSBjb3BpZXMgYXMgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBvbmUKKyAgICAgICAgLy8gaW4g
dGhlIGNvbW1hbmQgYnVmZmVyIGFuZCBhbm90aGVyIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICBH
TEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIDAsIDAsIHRleHR1cmUuc2l6ZS53aWR0aCgpLCB0ZXh0dXJlLnNpemUu
aGVpZ2h0KCksIHRleHR1cmUuZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgcGxhbmVUZXh0dXJlRGF0YSkpOworICAgIH0KK30KKworYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpUZXh0dXJlOjphbGxvY2F0ZShDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQoreworICAgIC8v
IEZJWE1FOiBEbyB0aGlzIGluIGEgd2F5IHRoYXQgd2UgY2FuIHRyYWNrIG1lbW9yeSB1c2FnZS4K
KyAgICB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3Io
KS0+Y3JlYXRlVGV4dHVyZShzaXplLCBmb3JtYXQpOworICAgIHJldHVybiB0ZXh0dXJlSWQ7Cit9
CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZTo6ZnJlZShDQ1JlbmRlcmVyKiBsYXll
clJlbmRlcmVyKQoreworICAgIGlmICghdGV4dHVyZUlkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBsYXllclJlbmRlcmVyLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKS0+ZGVsZXRlVGV4dHVy
ZSh0ZXh0dXJlSWQsIHNpemUsIGZvcm1hdCk7CisgICAgdGV4dHVyZUlkID0gMDsKK30KKworYm9v
bCBDQ1ZpZGVvTGF5ZXJJbXBsOjphbGxvY2F0ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6V2ViVmlk
ZW9GcmFtZSYgZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJl
cikKK3sKKyAgICBpZiAoZnJhbWUucGxhbmVzKCkgPiBXZWJLaXQ6OldlYlZpZGVvRnJhbWU6Om1h
eFBsYW5lcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9
IGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOwogICAgIGZvciAo
dW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLnBsYW5lcygpOyArK3BsYW5lKSB7CkBA
IC0yNTQsMjQgKzMwOCwzNSBAQCBib29sIENDVmlkZW9MYXllckltcGw6OnJlc2VydmVUZXh0dXJl
cyhjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUmIGZyYW1lLCBHQzNEZQogICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQu
CiAgICAgICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4
dHVyZVNpemUud2lkdGgoKSA+IG1heFRleHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUu
aGVpZ2h0KCkgPiBtYXhUZXh0dXJlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUpIHsKLSAgICAgICAgICAgIG1f
dGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJS
ZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCkpOwotICAgICAgICAgICAgaWYgKCFtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUpCisKKyAgICAgICAgaWYgKG1fdGV4dHVyZXNbcGxhbmVdLnNp
emUgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSB8fCBtX3RleHR1cmVzW3BsYW5lXS5mb3JtYXQgIT0g
Zm9ybWF0KSB7CisgICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5mcmVlKGxheWVyUmVuZGVy
ZXIpOworICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0uc2l6ZSA9IHJlcXVpcmVkVGV4dHVy
ZVNpemU7CisgICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5mb3JtYXQgPSBmb3JtYXQ7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLnRleHR1cmVJZCkgewor
ICAgICAgICAgICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5hbGxvY2F0ZShsYXllclJlbmRlcmVy
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBtX3RleHR1cmVz
W3BsYW5lXS5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gVGhlIGltcGxUZXh0dXJlTWFuYWdlciBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3ll
ZCBhbmQgcmVjcmVhdGVkIHNpbmNlIHRoZSBsYXN0IGZyYW1lLCBzbyBwYXNzIHRoZSBuZXcgb25l
LgotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGlmIHRoZSBUZXh0dXJlTWFuYWdlciBp
cyBzdGlsbCBhcm91bmQuCi0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUt
PnNldFRleHR1cmVNYW5hZ2VyKGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigpKTsK
KyAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLnZpc2libGVTaXplID0gY29tcHV0ZVZpc2li
bGVTaXplKGZyYW1lLCBwbGFuZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fdGV4dHVyZXNb
cGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkVGV4dHVyZVNpemUpCi0gICAgICAg
ICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVTaXplID0gY29tcHV0ZVZpc2libGVTaXpl
KGZyYW1lLCBwbGFuZSk7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJl
LT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNpemUsIGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIENDVmlkZW9MYXll
ckltcGw6OmZyZWVUZXh0dXJlcyhDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBXZWJLaXQ6OldlYlZpZGVvRnJhbWU6Om1heFBsYW5lczsg
KytpKQorICAgICAgICBtX3RleHR1cmVzW2ldLmZyZWUobGF5ZXJSZW5kZXJlcik7Cit9CisKK3Zv
aWQgQ0NWaWRlb0xheWVySW1wbDo6ZnJlZVVudXNlZFRleHR1cmVzKENDUmVuZGVyZXIqIGxheWVy
UmVuZGVyZXIpCit7CisgICAgdW5zaWduZWQgZmlyc3RVbnVzZWRQbGFuZSA9IG1fZnJhbWUgPyBt
X2ZyYW1lLT5wbGFuZXMoKSA6IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3RVbnVzZWRQ
bGFuZTsgaSA8IFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisgICAgICAg
IG1fdGV4dHVyZXNbaV0uZnJlZShsYXllclJlbmRlcmVyKTsKK30KKwogdm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpkaWRSZWNlaXZlRnJhbWUoKQogewogICAgIHNldE5lZWRzUmVkcmF3KCk7CkBAIC0y
ODUsOCArMzUwLDggQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRVcGRhdGVNYXRyaXgoY29u
c3QgZmxvYXQgbWF0cml4WzE2XSkKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRMb3NlQ29u
dGV4dCgpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQot
ICAgICAgICBtX3RleHR1cmVzW2ldLm1fdGV4dHVyZS5jbGVhcigpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBXZWJLaXQ6OldlYlZpZGVvRnJhbWU6Om1heFBsYW5lczsgKytpKQorICAg
ICAgICBtX3RleHR1cmVzW2ldLmZyZWUobGF5ZXJUcmVlSG9zdEltcGwoKS0+bGF5ZXJSZW5kZXJl
cigpKTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXROZWVkc1JlZHJhdygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggMjIxZjYwMGFjZWI4YTMxOTlmNmQ3ODY4YTRj
MWQ2ZGZlYjY4YmVhNi4uZDI1NDUyMmU2N2U0NTI2YzdmZTIzMmU0Y2QyZTg2MThjMzUzYWVlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRl
ZiBDQ1ZpZGVvTGF5ZXJJbXBsX2gKICNkZWZpbmUgQ0NWaWRlb0xheWVySW1wbF9oCiAKLSNpbmNs
dWRlICJNYW5hZ2VkVGV4dHVyZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVk
ZSA8cHVibGljL1dlYlZpZGVvRnJhbWVQcm92aWRlci5oPgogCkBAIC03MCw5ICs3MSwxNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGZsaXBUcmFuc2Zvcm1bMTZdOwogCiAgICAg
c3RydWN0IFRleHR1cmUgewotICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVy
ZTsKLSAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOworICAgICAgICB1bnNpZ25lZCB0ZXh0
dXJlSWQ7CisgICAgICAgIEludFNpemUgc2l6ZTsKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0Owor
ICAgICAgICBJbnRTaXplIHZpc2libGVTaXplOworCisgICAgICAgIFRleHR1cmUoKSA6IHRleHR1
cmVJZCgwKSB7IH0KKworICAgICAgICBib29sIGFsbG9jYXRlKENDUmVuZGVyZXIqKTsKKyAgICAg
ICAgdm9pZCBmcmVlKENDUmVuZGVyZXIqKTsKICAgICB9OworICAgIC8vIFRoaXMgdmFsdWUgc2hv
dWxkIG1hdGNoIFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzLgogICAgIGVudW0geyBN
YXhQbGFuZXMgPSAzIH07CiAKIHByaXZhdGU6CkBAIC04MSwxMyArOTAsMTggQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgV2ViS2l0OjpXZWJW
aWRlb0ZyYW1lJiwgdW5zaWduZWQgcGxhbmUpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5
ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiVmlkZW9MYXllciI7IH0K
IAotICAgIHZvaWQgd2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVyKik7Ci0gICAgYm9vbCByZXNl
cnZlVGV4dHVyZXMoY29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiwgR0MzRGVudW0gZm9ybWF0
LCBDQ1JlbmRlcmVyKik7CisgICAgdm9pZCB3aWxsRHJhd0ludGVybmFsKENDUmVuZGVyZXIqLCBD
Q0dyYXBoaWNzQ29udGV4dCopOworICAgIHZvaWQgY29weUZyYW1lVG9UZXh0dXJlcyhHcmFwaGlj
c0NvbnRleHQzRCopOworICAgIHZvaWQgY29weVBsYW5lVG9UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEKiwgY29uc3Qgdm9pZCogcGxhbmVUZXh0dXJlRGF0YSwgaW50IHRvUGxhbmVJbmRleCk7Cisg
ICAgYm9vbCBhbGxvY2F0ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6V2ViVmlkZW9GcmFtZSYsIEdD
M0RlbnVtIGZvcm1hdCwgQ0NSZW5kZXJlciopOworICAgIHZvaWQgZnJlZVRleHR1cmVzKENDUmVu
ZGVyZXIqKTsKKyAgICB2b2lkIGZyZWVVbnVzZWRUZXh0dXJlcyhDQ1JlbmRlcmVyKik7CiAKICAg
ICAvLyBHdWFyZHMgdGhlIGRlc3RydWN0aW9uIG9mIG1fcHJvdmlkZXIgYW5kIHRoZSBmcmFtZSB0
aGF0IGl0IHByb3ZpZGVzCiAgICAgTXV0ZXggbV9wcm92aWRlck11dGV4OwogICAgIFdlYktpdDo6
V2ViVmlkZW9GcmFtZVByb3ZpZGVyKiBtX3Byb3ZpZGVyOwogCisgICAgLy8gRWFjaCBpbmRleCBp
biB0aGlzIGFycmF5IGNvcnJlc3BvbmRzIHRvIGEgcGxhbmUgaW4gV2ViS2l0OjpXZWJWaWRlb0Zy
YW1lLgogICAgIFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFuZXNdOwogCiAgICAgZmxvYXQgbV9z
dHJlYW1UZXh0dXJlTWF0cml4WzE2XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZTYyMzFkMzRmMTE3
YTg2MTk4YTFlZjVmMjY2Y2U4NzZhODg3OWViZS4uNGRmOGJhZTZkZjFlNGQ4ZWY1YmJlODU0Yjgx
NWZiYzk5ODQ5OGZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTE2NTYsNiArMTY1Niw3IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZG9udFVzZU9sZFJlc291cmNlc0FmdGVyTG9z
dENvbnRleHQpCiAgICAgdmlkZW9MYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAw
KSk7CiAgICAgdmlkZW9MYXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwog
ICAgIHZpZGVvTGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICB2aWRlb0xheWVyLT5z
ZXRMYXllclRyZWVIb3N0SW1wbChtX2hvc3RJbXBsLmdldCgpKTsKICAgICByb290TGF5ZXItPmFk
ZENoaWxkKHZpZGVvTGF5ZXIucmVsZWFzZSgpKTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihyb290TGF5ZXIucmVsZWFzZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145889</attachid>
            <date>2012-06-05 16:07:43 -0700</date>
            <delta_ts>2012-06-06 14:33:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88363-20120605190743.patch</filename>
            <type>text/plain</type>
            <size>25766</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZkZjE1M2Q4M2Q3ZWRj
NjM5NmEzZmNjM2JiMTA5ZWJlZGZkMmU2Mi4uYjg2ODY1ZTc5ZWE4OWY4Y2ZmZDAxYjY1NWFiYmEx
Yzg5NWQ5MTMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTA2LTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2Vw
YXJhdGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBmcm9tIHRoZSBsYXllciB0cmVlIGFuZCB2aWRlbyBw
cm92aWRlciBieSByZW1vdmluZyBNYW5hZ2VkVGV4dHVyZSBhbmQgV2ViVmlkZW9GcmFtZSBwb2lu
dGVycyBmcm9tIHRoZSBxdWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04ODM2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENDVmlkZW9EcmF3UXVhZCBzaG91bGQgbm90IGNvbnRhaW4gYW55IHBvaW50ZXJz
IHNvIHdlIGFyZSBhYmxlIHRvCisgICAgICAgIHNlcmlhbGl6ZSBpdCBhY3Jvc3MgcHJvY2VzcyBi
b3VuZGFyaWVzLiBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlCisgICAgICAgIE1hbmFnZWRUZXh0dXJl
IHBvaW50ZXJzIGZyb20gdGhlIHF1YWQgY2xhc3MsIHJlcGxhY2luZyB0aGVtIHdpdGgKKyAgICAg
ICAgdGV4dHVyZSBpZHMsIGFuZCByZW1vdmVzIHRoZSBXZWJWaWRlb0ZyYW1lKiBmcm9tIHRoZSBx
dWFkLCByZXBsYWNpbmcKKyAgICAgICAgaXQgd2l0aCB0aGUgZnJhbWUgcHJvdmlkZXIncyB0ZXh0
dXJlIGlkIGluY2x1ZGVkIGluIHRoZSBXZWJWaWRlb0ZyYW1lCisgICAgICAgIHN0cnVjdHVyZS4K
KworICAgICAgICBUZXh0dXJlIGFsbG9jYXRpb24gaXMgZG9uZSBpbiBDQ1ZpZGVvTGF5ZXJJbXBs
IHZpYSB0aGUKKyAgICAgICAgY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLCBzbyB0aGF0IHRoZSBt
ZW1vcnkgdXNhZ2UgY2FuIGJlIHRyYWNrZWQuCisKKyAgICAgICAgV2UgbW92ZSB0aGUgY29weVBs
YW5lVG9UZXh0dXJlcygpIG1ldGhvZCBiYWNrIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisg
ICAgICAgIHRvIENDVmlkZW9MYXllckltcGwsIGFzIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHRleHR1
cmUgZGF0YSBwb2ludGVyIGluIHRoZQorICAgICAgICBXZWJWaWRlb0ZyYW1lLCBhbmQgd2UgZG8g
bm90IHdhbnQgdG8gZ2l2ZSB0aGlzIHBvaW50ZXIgdG8gdGhlIHF1YWQKKyAgICAgICAgY2xhc3Mu
CisKKyAgICAgICAgUmVmYWN0b3IsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TmF0aXZlVGV4dHVyZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1N0cmVhbVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VmlkZW9R
dWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0lPU3VyZmFj
ZUxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0lPU3VyZmFjZUxheWVySW1wbDo6
d2lsbERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9EcmF3UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFk
Lmg6CisgICAgICAgIChDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0RyYXdRdWFkOjpmcmFtZVByb3ZpZGVyVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NWaWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJ
bXBsOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlG
cmFtZVRvVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpjb3B5UGxhbmVUb1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZTo6YWxsb2NhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZTo6ZnJlZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Zp
ZGVvTGF5ZXJJbXBsOjphbGxvY2F0ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlk
ZW9MYXllckltcGw6OmZyZWVUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5
ZXJJbXBsOjpmcmVlVW51c2VkVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xh
eWVySW1wbDo6ZGlkTG9zZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKFRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZTo6VGV4dHVyZSk6CisgICAgICAg
IChDQ1ZpZGVvTGF5ZXJJbXBsKToKKwogMjAxMi0wNi0wMSAgT2phbiBWYWZhaSAgPG9qYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIENoYW5nZSBvdmVycmlkZVNpemVzIHRvIGJlIGNvbnRlbnQt
Ym94IGluc3RlYWQgb2YgYm9yZGVyLWJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAw
MmIzYTk1NjdhOWU0YTg2M2M0ZWQ2MzQ3YzY5Y2M0MTE3NjY5Y2NhLi4wNjU2NDVhNWM0OGEzYmMx
ZTI4MzljODllNGQyYWVkMzc5OTY4YTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDEyLTA2LTA1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2VwYXJhdGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBm
cm9tIHRoZSBsYXllciB0cmVlIGFuZCB2aWRlbyBwcm92aWRlciBieSByZW1vdmluZyBNYW5hZ2Vk
VGV4dHVyZSBhbmQgV2ViVmlkZW9GcmFtZSBwb2ludGVycyBmcm9tIHRoZSBxdWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODM2MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAgICBTZXQgdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwg
b24gb3VyIHRlc3QncyBDQ1ZpZGVvTGF5ZXJJbXBsLCBhcyBpdAorICAgICAgICBleHBlY3RzIHRo
ZSBwb2ludGVyIHRvIGV4aXN0IGluIGl0cyBkZXN0cnVjdG9yLgorCiAyMDEyLTA2LTA1ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGwgQ2hyb21pdW0gREVQ
UyBmcm9tIHIxNDA0OTIgdG8gcjE0MDUyOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCmluZGV4IDhkZTQ0OWMwMzRkMDhlZDUyNzk3ZmNjZGMyYTViNWY1MTRkYjM2NzYuLjU4
NGRlMmIyYTRmYmU2MjIzMzY2YTNlNzhhNjNiNTQzM2QwZGIzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtOTcxLDE3ICs5NzEsMTcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+dGV4dHVy
ZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnZQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7
Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIHlUZXh0dXJlLnRleHR1cmVJZCkpOwogICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKLSAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdVRleHR1cmUudGV4dHVyZUlkKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB2VGV4dHVyZS50ZXh0dXJlSWQpKTsKIAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKIAotICAgIGZsb2F0IHlXaWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lk
dGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIGZsb2F0IHlX
aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLnZpc2libGVTaXpl
LndpZHRoKCkpIC8geVRleHR1cmUuc2l6ZS53aWR0aCgpOwogICAgIC8vIEFyYml0cmFyaWx5IHRh
a2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4K
LSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1
cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndp
ZHRoKCk7CisgICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHVUZXh0dXJlLnZpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUuc2l6ZS53aWR0aCgpOwog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNo
YWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsK
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3Ip
KTsKIApAQCAtMTAyNSwxMyArMTAyNSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIGNvbnN0IFRleHR1
cmVQcm9ncmFtKiBwcm9ncmFtID0gdGV4dHVyZVByb2dyYW0oKTsKICAgICBjb25zdCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6Oldl
YlZpZGVvRnJhbWU6OnJnYlBsYW5lXTsKLSAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUu
bV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVh
ZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVyZS0+dGV4
dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKKyAgICBmbG9hdCB3aWR0
aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUudmlzaWJsZVNpemUud2lk
dGgoKSkgLyB0ZXh0dXJlLnNpemUud2lkdGgoKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVv
UXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLnRleHR1cmVJZCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd05hdGl2ZVRleHR1cmUyRChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQp
CiB7Ci0gICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQocXVhZCwgdGV4dHVyZVByb2dyYW0o
KSwgMSwgcXVhZC0+ZnJhbWUoKS0+dGV4dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCB0ZXh0dXJlUHJv
Z3JhbSgpLCAxLCBxdWFkLT5mcmFtZVByb3ZpZGVyVGV4dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdT
dHJlYW1UZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKQEAgLTEwNDMsNTQgKzEw
NDMsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1UZXh0dXJlKGNv
bnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKICAgICBBU1NFUlQocXVhZC0+bWF0cml4KCkpOwog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS50ZXhNYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgY29uc3RfY2FzdDxm
bG9hdCo+KHF1YWQtPm1hdHJpeCgpKSkpOwogCi0gICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1
YWQocXVhZCwgcHJvZ3JhbSwgMSwgcXVhZC0+ZnJhbWUoKS0+dGV4dHVyZUlkKCksIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7Ci19Ci0KLWJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IENDVmlkZW9EcmF3UXVh
ZCogcXVhZCkKLXsKLSAgICBjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIGZyYW1lID0gcXVh
ZC0+ZnJhbWUoKTsKLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1l
LT5wbGFuZXMoKTsgKytwbGFuZSkKLSAgICAgICAgY29weVBsYW5lVG9UZXh0dXJlKHF1YWQsIGZy
YW1lLT5kYXRhKHBsYW5lKSwgcGxhbmUpOwotCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IGZy
YW1lLT5wbGFuZXMoKTsgcGxhbmUgPCBDQ1ZpZGVvTGF5ZXJJbXBsOjpNYXhQbGFuZXM7ICsrcGxh
bmUpIHsKLSAgICAgICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZSA9ICZxdWFk
LT50ZXh0dXJlcygpW3BsYW5lXTsKLSAgICAgICAgdGV4dHVyZS0+bV90ZXh0dXJlLmNsZWFyKCk7
Ci0gICAgICAgIHRleHR1cmUtPm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weVBsYW5l
VG9UZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCwgY29uc3Qgdm9pZCogcGxhbmUs
IGludCBpbmRleCkKLXsKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0g
cXVhZC0+dGV4dHVyZXMoKVtpbmRleF07Ci0gICAgUmVmUHRyPENDR3JhcGhpY3NDb250ZXh0PiBj
Y0NvbnRleHQgPSBDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QobV9jb250ZXh0KTsKLSAgICB0
ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY2NDb250ZXh0LmdldCgpLCBtX2ltcGxUZXh0
dXJlQWxsb2NhdG9yLmdldCgpKTsKLSAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4
dHVyZS0+Zm9ybWF0KCk7Ci0gICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1
cmUtPnNpemUoKTsKLQotICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hS
T01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMu
d2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwotICAgIGlm
IChtZW0pIHsKLSAgICAgICAgbWVtY3B5KG1lbSwgcGxhbmUsIGRpbWVuc2lvbnMud2lkdGgoKSAq
IGRpbWVuc2lvbnMuaGVpZ2h0KCkpOwotICAgICAgICBHTEMoY29udGV4dCgpLCBzdGF0aWNfY2Fz
dDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4
U3ViSW1hZ2UyRAotICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVz
IGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCi0gICAgICAgIC8vIGluIHRoZSBjb21t
YW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBsYW5lKSk7Ci0gICAgfQor
ICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1YWQtPmZy
YW1lUHJvdmlkZXJUZXh0dXJlSWQoKSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVf
RVhURVJOQUxfT0VTKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRl
b1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAKLSAgICBpZiAoIXF1YWQtPmZyYW1lKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJlcyhxdWFkKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgc3dpdGNoIChxdWFkLT5mb3JtYXQoKSkgewogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRToKICAgICAgICAgZHJhd1lVVihxdWFkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3
UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvRHJhd1F1YWQuY3BwCmluZGV4IDljY2E3MTQxMmFjZDdmNWJjNjc4Yzg1NGRjYjJkNWQ1
ZTAyYThjMmEuLjY0Nzc1ZmJmMGYxZDFhMDJiMTIxODMyNmRhN2U5OTFkOTZjMzk3NGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9EcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcApAQCAtMjksMTUgKzI5LDE1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3
UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJl
cywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQorUGFzc093
blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgdW5zaWduZWQgZnJhbWVQcm92aWRl
clRleHR1cmVJZCwgR0MzRGVudW0gZm9ybWF0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NWaWRlb0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRleHR1cmVzLCBmcmFt
ZSwgZm9ybWF0KSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ZpZGVvRHJhd1F1YWQoc2hh
cmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGV4dHVyZXMsIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQs
IGZvcm1hdCkpOwogfQogCi1DQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZChjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVj
dCwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFdlYktpdDo6V2ViVmlkZW9G
cmFtZSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCkKK0NDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0Ry
YXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgdW5z
aWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCwgR0MzRGVudW0gZm9ybWF0KQogICAgIDogQ0NE
cmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlZpZGVvQ29udGVudCwgcXVhZFJl
Y3QpCiAgICAgLCBtX3RleHR1cmVzKHRleHR1cmVzKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAg
ICAsIG1fZnJhbWVQcm92aWRlclRleHR1cmVJZChmcmFtZVByb3ZpZGVyVGV4dHVyZUlkKQogICAg
ICwgbV9mb3JtYXQoZm9ybWF0KQogICAgICwgbV9tYXRyaXgoMCkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0RyYXdRdWFkLmgKaW5kZXggOWViMzU3ZmM4NmI1YTQ0OWE5MmNjZWVkMTY1M2M5ZGQ4MmMyNWQz
OS4uYjljODdkZmQwYTg3MGExNGIyYWM0NjM0ZmMyZTJiNmQ4NmUwOWE1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdR
dWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0RyYXdRdWFkLmgKQEAgLTMxLDI5ICszMSwyNiBAQAogI2luY2x1ZGUgImNjL0NDVmlk
ZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLWNsYXNzIFdlYlZpZGVvRnJhbWU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFdl
YktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBj
b25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIHVuc2ln
bmVkIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCk7CiAKKyAgICAvLyBB
biBhcnJheSBvZiB0ZXh0dXJlcywgd2hlcmUgZWFjaCBpbmRleCBjb3JyZXNwb25kcyB0byBhIHBs
YW5lIGluIFdlYktpdDo6V2ViVmlkZW9GcmFtZS4KICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0
dXJlKiB0ZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZXM7IH0KLSAgICBXZWJLaXQ6
OldlYlZpZGVvRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIHVu
c2lnbmVkIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUHJv
dmlkZXJUZXh0dXJlSWQ7IH0KICAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdDsgfQogICAgIGNvbnN0IGZsb2F0KiBtYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX21h
dHJpeDsgfQogCiAgICAgdm9pZCBzZXRNYXRyaXgoY29uc3QgZmxvYXQqIG1hdHJpeCkgeyBtX21h
dHJpeCA9IG1hdHJpeDsgfQogCiBwcml2YXRlOgotICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0
dXJlKiB0ZXh0dXJlcywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiwgR0MzRGVudW0gZm9ybWF0KTsK
KyAgICBDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRS
ZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIHVuc2lnbmVkIGZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCk7CiAKICAgICBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpUZXh0dXJlKiBtX3RleHR1cmVzOwotICAgIFdlYktpdDo6V2ViVmlkZW9GcmFtZSogbV9m
cmFtZTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lUHJvdmlkZXJUZXh0dXJlSWQ7CiAgICAgR0MzRGVu
dW0gbV9mb3JtYXQ7CiAgICAgY29uc3QgZmxvYXQqIG1fbWF0cml4OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggMTA1YzExOWY0Zjk1NjA4YTY4MGE2NmIzOTVkMjZl
ZjExOTI5NWU3Zi4uYzU1NGMzN2NjYWYxMDllMjc2MTM0ZDIzOWQzZjQ5YTE1OGQ0NjlhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIu
aCIgLy8gRm9yIFRleHR1cmVBbGxvY2F0b3IKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxl
ci5oIgpAQCAtNzgsNiArNzksOCBAQCBDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBs
KGludCBpZCwgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lUHJvdmlkZXIqIHByb3ZpZAogICAgICwgbV9w
cm92aWRlcihwcm92aWRlcikKICAgICAsIG1fZnJhbWUoMCkKIHsKKyAgICBBU1NFUlQoTWF4UGxh
bmVzID09IFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzKTsKKwogICAgIG1lbWNweSht
X3N0cmVhbVRleHR1cmVNYXRyaXgsIGZsaXBUcmFuc2Zvcm0sIHNpemVvZihtX3N0cmVhbVRleHR1
cmVNYXRyaXgpKTsKIAogICAgIC8vIFRoaXMgb25seSBoYXBwZW5zIGR1cmluZyBhIGNvbW1pdCBv
biB0aGUgY29tcG9zaXRvciB0aHJlYWQgd2hpbGUgdGhlIG1haW4KQEAgLTk2LDggKzk5LDcgQEAg
Q0NWaWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwoKQogICAgICAgICBtX3Byb3ZpZGVy
LT5zZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoMCk7CiAgICAgICAgIG1fcHJvdmlkZXIgPSAw
OwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpCi0g
ICAgICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFyKCk7CisgICAgZnJlZVRleHR1cmVz
KGxheWVyVHJlZUhvc3RJbXBsKCktPmxheWVyUmVuZGVyZXIoKSk7CiB9CiAKIHZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6c3RvcFVzaW5nUHJvdmlkZXIoKQpAQCAtMTQxLDEzICsxNDMsMTQgQEAgdm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjp3aWxsRHJhdyhDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyLCBD
Q0dyYXBoaWNzQ29udGV4dCogY28KICAgICAvLyBsb2NrIHNob3VsZCBub3QgY2F1c2UgYSBkZWFk
bG9jay4KICAgICBtX3Byb3ZpZGVyTXV0ZXgubG9jaygpOwogCi0gICAgd2lsbERyYXdJbnRlcm5h
bChsYXllclJlbmRlcmVyKTsKKyAgICB3aWxsRHJhd0ludGVybmFsKGxheWVyUmVuZGVyZXIsIGNv
bnRleHQpOworICAgIGZyZWVVbnVzZWRUZXh0dXJlcyhsYXllclJlbmRlcmVyKTsKIAogICAgIGlm
ICghbV9mcmFtZSkKICAgICAgICAgbV9wcm92aWRlck11dGV4LnVubG9jaygpOwogfQogCi12b2lk
IENDVmlkZW9MYXllckltcGw6OndpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciogbGF5ZXJSZW5k
ZXJlcikKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVy
KiBsYXllclJlbmRlcmVyLCBDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCkBAIC0xNTYsNiArMTU5LDEyIEBAIHZvaWQg
Q0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVyKiBsYXllclJlbmRl
cmVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQzZCA9IGNvbnRleHQtPmNvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dDNkKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3Np
dGluZy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIG1fZnJhbWUgPSBtX3Byb3ZpZGVy
LT5nZXRDdXJyZW50RnJhbWUoKTsKIAogICAgIGlmICghbV9mcmFtZSkKQEAgLTE2OSwxMCArMTc4
LDEzIEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVy
KiBsYXllclJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFyZXNl
cnZlVGV4dHVyZXMoKm1fZnJhbWUsIG1fZm9ybWF0LCBsYXllclJlbmRlcmVyKSkgeworICAgIGlm
ICghYWxsb2NhdGVUZXh0dXJlcygqbV9mcmFtZSwgbV9mb3JtYXQsIGxheWVyUmVuZGVyZXIpKSB7
CiAgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKICAgICAgICAg
bV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBjb3B5RnJhbWVUb1Rl
eHR1cmVzKGNvbnRleHQzZCk7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6YXBwZW5kUXVh
ZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgYm9vbCYpCkBAIC0xODMsNyArMTk1LDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1
YWRTdGEKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgp
LCBib3VuZHMoKSk7Ci0gICAgT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gdmlkZW9RdWFkID0gQ0NW
aWRlb0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV90ZXh0dXJl
cywgbV9mcmFtZSwgbV9mb3JtYXQpOworICAgIE93blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IHZpZGVv
UXVhZCA9IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3Qs
IG1fdGV4dHVyZXMsIG1fZnJhbWUtPnRleHR1cmVJZCgpLCBtX2Zvcm1hdCk7CiAKICAgICBpZiAo
bV9mb3JtYXQgPT0gRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfRVhURVJOQUxfT0VT
KQogICAgICAgICB2aWRlb1F1YWQtPnNldE1hdHJpeChtX3N0cmVhbVRleHR1cmVNYXRyaXgpOwpA
QCAtMTk5LDggKzIxMSw4IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZGlkRHJhdygpCiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIHBsYW5l
ID0gMDsgcGxhbmUgPCBtX2ZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkKLSAgICAgICAgbV90ZXh0
dXJlc1twbGFuZV0ubV90ZXh0dXJlLT51bnJlc2VydmUoKTsKKyAgICAvLyBGSVhNRTogV2hlbiB3
ZSBwYXNzIHF1YWRzIG91dCBvZiBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRlbGF5IHRoaXMgdW50aWwg
d2Uga25vdyB0aGUgaG9zdAorICAgIC8vIGhhcyBkZXN0cm95ZWQgaXRzIGNvcHkgb2YgdGhlIEND
VmlkZW9EcmF3UXVhZCBwcm9kdWNlZCB3aXRoIHRoaXMgZnJhbWUuCiAgICAgbV9wcm92aWRlci0+
cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOwogICAgIG1fZnJhbWUgPSAwOwogCkBAIC0yNDMsOSAr
MjU1LDQ5IEBAIEludFNpemUgQ0NWaWRlb0xheWVySW1wbDo6Y29tcHV0ZVZpc2libGVTaXplKGNv
bnN0IFdlYktpdDo6V2ViVmlkZW9GcmFtZSYgZnJhbWUsCiAgICAgcmV0dXJuIEludFNpemUodmlz
aWJsZVdpZHRoLCB2aXNpYmxlSGVpZ2h0KTsKIH0KIAotYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpy
ZXNlcnZlVGV4dHVyZXMoY29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiBmcmFtZSwgR0MzRGVu
dW0gZm9ybWF0LCBDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCiB7
Ci0gICAgaWYgKGZyYW1lLnBsYW5lcygpID4gTWF4UGxhbmVzKQorICAgIGZvciAodW5zaWduZWQg
cGxhbmUgPSAwOyBwbGFuZSA8IG1fZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKQorICAgICAgICBj
b3B5UGxhbmVUb1RleHR1cmUoY29udGV4dDNkLCBtX2ZyYW1lLT5kYXRhKHBsYW5lKSwgcGxhbmUp
OworfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkLCBjb25zdCB2b2lkKiBwbGFuZVRleHR1cmVEYXRhLCBpbnQg
dG9QbGFuZUluZGV4KQoreworICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHRleHR1cmUg
PSBtX3RleHR1cmVzW3RvUGxhbmVJbmRleF07CisgICAgQVNTRVJUKHRleHR1cmUudGV4dHVyZUlk
KTsKKyAgICBjb250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB0ZXh0dXJlLnRleHR1cmVJZCk7CisKKyAgICB2b2lkKiBtZW0gPSBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQzZC0+Z2V0RXh0ZW5zaW9ucygpKS0+bWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAw
LCB0ZXh0dXJlLnNpemUud2lkdGgoKSwgdGV4dHVyZS5zaXplLmhlaWdodCgpLCB0ZXh0dXJlLmZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9t
aXVtOjpXUklURV9PTkxZKTsKKyAgICBpZiAobWVtKSB7CisgICAgICAgIG1lbWNweShtZW0sIHBs
YW5lVGV4dHVyZURhdGEsIHRleHR1cmUuc2l6ZS53aWR0aCgpICogdGV4dHVyZS5zaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hy
b21pdW0qPihjb250ZXh0M2QtPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENI
Uk9NSVVNKG1lbSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKKyAgICAg
ICAgLy8gdXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0sIG9uZQorICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFu
b3RoZXIgdG8gdGhlIHRleHR1cmUuCisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+
dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgdGV4
dHVyZS5zaXplLndpZHRoKCksIHRleHR1cmUuc2l6ZS5oZWlnaHQoKSwgdGV4dHVyZS5mb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwbGFuZVRleHR1cmVEYXRhKSk7Cisg
ICAgfQorfQorCitib29sIENDVmlkZW9MYXllckltcGw6OlRleHR1cmU6OmFsbG9jYXRlKENDUmVu
ZGVyZXIqIGxheWVyUmVuZGVyZXIpCit7CisgICAgLy8gRklYTUU6IERvIHRoaXMgaW4gYSB3YXkg
dGhhdCB3ZSBjYW4gdHJhY2sgbWVtb3J5IHVzYWdlLgorICAgIHRleHR1cmVJZCA9IGxheWVyUmVu
ZGVyZXItPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpLT5jcmVhdGVUZXh0dXJlKHNpemUsIGZv
cm1hdCk7CisgICAgcmV0dXJuIHRleHR1cmVJZDsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpUZXh0dXJlOjpmcmVlKENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKCF0
ZXh0dXJlSWQpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyUmVuZGVyZXItPmNvbnRlbnRz
VGV4dHVyZUFsbG9jYXRvcigpLT5kZWxldGVUZXh0dXJlKHRleHR1cmVJZCwgc2l6ZSwgZm9ybWF0
KTsKKyAgICB0ZXh0dXJlSWQgPSAwOworfQorCitib29sIENDVmlkZW9MYXllckltcGw6OmFsbG9j
YXRlVGV4dHVyZXMoY29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiBmcmFtZSwgR0MzRGVudW0g
Zm9ybWF0LCBDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQoreworICAgIGlmIChmcmFtZS5wbGFu
ZXMoKSA+IFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW50IG1heFRleHR1cmVTaXplID0gbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0
aWVzKCkubWF4VGV4dHVyZVNpemU7CiAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5l
IDwgZnJhbWUucGxhbmVzKCk7ICsrcGxhbmUpIHsKQEAgLTI1NCwyNCArMzA2LDM1IEBAIGJvb2wg
Q0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6V2ViVmlkZW9G
cmFtZSYgZnJhbWUsIEdDM0RlCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdo
ZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KICAgICAgICAgaWYgKHJlcXVpcmVkVGV4
dHVyZVNpemUuaXNaZXJvKCkgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpID4gbWF4VGV4
dHVyZVNpemUgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1cmVTaXpl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxh
bmVdLm1fdGV4dHVyZSkgewotICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJl
ID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFn
ZXIoKSk7Ci0gICAgICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkKKwor
ICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0uc2l6ZSAhPSByZXF1aXJlZFRleHR1cmVTaXpl
IHx8IG1fdGV4dHVyZXNbcGxhbmVdLmZvcm1hdCAhPSBmb3JtYXQpIHsKKyAgICAgICAgICAgIG1f
dGV4dHVyZXNbcGxhbmVdLmZyZWUobGF5ZXJSZW5kZXJlcik7CisgICAgICAgICAgICBtX3RleHR1
cmVzW3BsYW5lXS5zaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKKyAgICAgICAgICAgIG1fdGV4
dHVyZXNbcGxhbmVdLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
bV90ZXh0dXJlc1twbGFuZV0udGV4dHVyZUlkKSB7CisgICAgICAgICAgICBpZiAoIW1fdGV4dHVy
ZXNbcGxhbmVdLmFsbG9jYXRlKGxheWVyUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBJ
bnRTaXplKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW1wbFRleHR1
cmVNYW5hZ2VyIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQgc2luY2UgdGhl
IGxhc3QgZnJhbWUsIHNvIHBhc3MgdGhlIG5ldyBvbmUuCi0gICAgICAgICAgICAvLyBUaGlzIGlz
IGEgbm8tb3AgaWYgdGhlIFRleHR1cmVNYW5hZ2VyIGlzIHN0aWxsIGFyb3VuZC4KLSAgICAgICAg
ICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIobGF5ZXJS
ZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCkpOworICAgICAgICAgICAgbV90ZXh0dXJlc1tw
bGFuZV0udmlzaWJsZVNpemUgPSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKICAg
ICAgICAgfQotICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkg
IT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1f
dmlzaWJsZVNpemUgPSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKLSAgICAgICAg
aWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRUZXh0dXJl
U2l6ZSwgZm9ybWF0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZnJlZVRleHR1cmVzKENDUmVu
ZGVyZXIqIGxheWVyUmVuZGVyZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdl
YktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fdGV4dHVyZXNb
aV0uZnJlZShsYXllclJlbmRlcmVyKTsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpmcmVl
VW51c2VkVGV4dHVyZXMoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICB1bnNpZ25l
ZCBmaXJzdFVudXNlZFBsYW5lID0gbV9mcmFtZSA/IG1fZnJhbWUtPnBsYW5lcygpIDogMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdFVudXNlZFBsYW5lOyBpIDwgV2ViS2l0OjpXZWJWaWRl
b0ZyYW1lOjptYXhQbGFuZXM7ICsraSkKKyAgICAgICAgbV90ZXh0dXJlc1tpXS5mcmVlKGxheWVy
UmVuZGVyZXIpOworfQorCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZFJlY2VpdmVGcmFtZSgp
CiB7CiAgICAgc2V0TmVlZHNSZWRyYXcoKTsKQEAgLTI4NSw4ICszNDgsOCBAQCB2b2lkIENDVmlk
ZW9MYXllckltcGw6OmRpZFVwZGF0ZU1hdHJpeChjb25zdCBmbG9hdCBtYXRyaXhbMTZdKQogCiB2
b2lkIENDVmlkZW9MYXllckltcGw6OmRpZExvc2VDb250ZXh0KCkKIHsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpCi0gICAgICAgIG1fdGV4dHVyZXNbaV0ubV90
ZXh0dXJlLmNsZWFyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdlYktpdDo6V2Vi
VmlkZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fdGV4dHVyZXNbaV0uZnJlZShs
YXllclRyZWVIb3N0SW1wbCgpLT5sYXllclJlbmRlcmVyKCkpOwogfQogCiB2b2lkIENDVmlkZW9M
YXllckltcGw6OnNldE5lZWRzUmVkcmF3KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApp
bmRleCAyMjFmNjAwYWNlYjhhMzE5OWY2ZDc4NjhhNGMxZDZkZmViNjhiZWE2Li5kMjU0NTIyZTY3
ZTQ1MjZjN2ZlMjMyZTRjZDJlODYxOGMzNTNhZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oCkBAIC0yNiw3ICsyNiw4IEBACiAjaWZuZGVmIENDVmlkZW9MYXllckltcGxfaAogI2Rl
ZmluZSBDQ1ZpZGVvTGF5ZXJJbXBsX2gKIAotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZVBy
b3ZpZGVyLmg+CiAKQEAgLTcwLDkgKzcxLDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXQgZmxpcFRyYW5zZm9ybVsxNl07CiAKICAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAg
IE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOwotICAgICAgICBJbnRTaXplIG1fdmlz
aWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsKKyAgICAgICAgSW50U2l6ZSBz
aXplOworICAgICAgICBHQzNEZW51bSBmb3JtYXQ7CisgICAgICAgIEludFNpemUgdmlzaWJsZVNp
emU7CisKKyAgICAgICAgVGV4dHVyZSgpIDogdGV4dHVyZUlkKDApIHsgfQorCisgICAgICAgIGJv
b2wgYWxsb2NhdGUoQ0NSZW5kZXJlciopOworICAgICAgICB2b2lkIGZyZWUoQ0NSZW5kZXJlciop
OwogICAgIH07CisgICAgLy8gVGhpcyB2YWx1ZSBzaG91bGQgbWF0Y2ggV2ViS2l0OjpXZWJWaWRl
b0ZyYW1lOjptYXhQbGFuZXMuCiAgICAgZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKIAogcHJpdmF0
ZToKQEAgLTgxLDEzICs5MCwxOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBJbnRTaXplIGNvbXB1
dGVWaXNpYmxlU2l6ZShjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUmLCB1bnNpZ25lZCBwbGFu
ZSk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuICJWaWRlb0xheWVyIjsgfQogCi0gICAgdm9pZCB3aWxsRHJhd0ludGVy
bmFsKENDUmVuZGVyZXIqKTsKLSAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBXZWJLaXQ6
OldlYlZpZGVvRnJhbWUmLCBHQzNEZW51bSBmb3JtYXQsIENDUmVuZGVyZXIqKTsKKyAgICB2b2lk
IHdpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciosIENDR3JhcGhpY3NDb250ZXh0Kik7CisgICAg
dm9pZCBjb3B5RnJhbWVUb1RleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdm9pZCBj
b3B5UGxhbmVUb1RleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCB2b2lkKiBwbGFuZVRl
eHR1cmVEYXRhLCBpbnQgdG9QbGFuZUluZGV4KTsKKyAgICBib29sIGFsbG9jYXRlVGV4dHVyZXMo
Y29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiwgR0MzRGVudW0gZm9ybWF0LCBDQ1JlbmRlcmVy
Kik7CisgICAgdm9pZCBmcmVlVGV4dHVyZXMoQ0NSZW5kZXJlciopOworICAgIHZvaWQgZnJlZVVu
dXNlZFRleHR1cmVzKENDUmVuZGVyZXIqKTsKIAogICAgIC8vIEd1YXJkcyB0aGUgZGVzdHJ1Y3Rp
b24gb2YgbV9wcm92aWRlciBhbmQgdGhlIGZyYW1lIHRoYXQgaXQgcHJvdmlkZXMKICAgICBNdXRl
eCBtX3Byb3ZpZGVyTXV0ZXg7CiAgICAgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lUHJvdmlkZXIqIG1f
cHJvdmlkZXI7CiAKKyAgICAvLyBFYWNoIGluZGV4IGluIHRoaXMgYXJyYXkgY29ycmVzcG9uZHMg
dG8gYSBwbGFuZSBpbiBXZWJLaXQ6OldlYlZpZGVvRnJhbWUuCiAgICAgVGV4dHVyZSBtX3RleHR1
cmVzW01heFBsYW5lc107CiAKICAgICBmbG9hdCBtX3N0cmVhbVRleHR1cmVNYXRyaXhbMTZdOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LmNwcAppbmRleCBlNjIzMWQzNGYxMTdhODYxOThhMWVmNWYyNjZjZTg3NmE4ODc5
ZWJlLi40ZGY4YmFlNmRmMWU0ZDhlZjViYmU4NTRiODE1ZmJjOTk4NDk4ZmJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcApAQCAtMTY1Niw2ICsxNjU2LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBkb250VXNlT2xkUmVzb3VyY2VzQWZ0ZXJMb3N0Q29udGV4dCkKICAgICB2aWRlb0xheWVy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICB2aWRlb0xheWVyLT5zZXRD
b250ZW50Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgdmlkZW9MYXllci0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworICAgIHZpZGVvTGF5ZXItPnNldExheWVyVHJlZUhvc3RJbXBsKG1faG9z
dEltcGwuZ2V0KCkpOwogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodmlkZW9MYXllci5yZWxlYXNl
KCkpOwogCiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3RMYXllci5yZWxlYXNlKCkp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146111</attachid>
            <date>2012-06-06 14:33:22 -0700</date>
            <delta_ts>2012-06-06 14:37:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88363-20120606173321.patch</filename>
            <type>text/plain</type>
            <size>35448</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0YThkMGExMWNhMmMy
MThkYzkxZWFjY2NlNTk0YmU2MDIwYTU5ZDY5Li5lYTJhNDQyMDE1MDI4MTk1NzJlZDE2MjkwYjQ0
N2U1ZjY0ODM2ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNiAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5ZXIgdHJlZSBhbmQgdmlk
ZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5kIFdlYlZpZGVvRnJhbWUg
cG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGlj
L1dlYlZpZGVvRnJhbWUuaDoKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5j
cHA6IFJlbW92ZWQuCisKIDIwMTItMDYtMDEgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU29mdHdhcmUgY29tcG9zaXRvciBpbml0aWFs
aXphdGlvbiBhbmQgYmFzZSBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZkZjE1M2Q4M2Q3ZWRjNjM5
NmEzZmNjM2JiMTA5ZWJlZGZkMmU2Mi4uOTJmNjU0YmU3MDRkZmIyMTQyY2ZhNjRkOWRkZDA1NzM2
ZmE1ZWJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA2LTA2ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2VwYXJh
dGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBmcm9tIHRoZSBsYXllciB0cmVlIGFuZCB2aWRlbyBwcm92
aWRlciBieSByZW1vdmluZyBNYW5hZ2VkVGV4dHVyZSBhbmQgV2ViVmlkZW9GcmFtZSBwb2ludGVy
cyBmcm9tIHRoZSBxdWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODM2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENDVmlkZW9EcmF3UXVhZCBzaG91bGQgbm90IGNvbnRhaW4gYW55IHBvaW50ZXJzIHNv
IHdlIGFyZSBhYmxlIHRvCisgICAgICAgIHNlcmlhbGl6ZSBpdCBhY3Jvc3MgcHJvY2VzcyBib3Vu
ZGFyaWVzLiBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlCisgICAgICAgIE1hbmFnZWRUZXh0dXJlIHBv
aW50ZXJzIGZyb20gdGhlIHF1YWQgY2xhc3MsIHJlcGxhY2luZyB0aGVtIHdpdGgKKyAgICAgICAg
dGV4dHVyZSBpZHMsIGFuZCByZW1vdmVzIHRoZSBXZWJWaWRlb0ZyYW1lKiBmcm9tIHRoZSBxdWFk
LCByZXBsYWNpbmcKKyAgICAgICAgaXQgd2l0aCB0aGUgZnJhbWUgcHJvdmlkZXIncyB0ZXh0dXJl
IGlkIGluY2x1ZGVkIGluIHRoZSBXZWJWaWRlb0ZyYW1lCisgICAgICAgIHN0cnVjdHVyZS4KKwor
ICAgICAgICBUZXh0dXJlIGFsbG9jYXRpb24gaXMgZG9uZSBpbiBDQ1ZpZGVvTGF5ZXJJbXBsIHZp
YSB0aGUKKyAgICAgICAgY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLCBzbyB0aGF0IHRoZSBtZW1v
cnkgdXNhZ2UgY2FuIGJlIHRyYWNrZWQuCisKKyAgICAgICAgV2UgbW92ZSB0aGUgY29weVBsYW5l
VG9UZXh0dXJlcygpIG1ldGhvZCBiYWNrIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAg
ICAgIHRvIENDVmlkZW9MYXllckltcGwsIGFzIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHRleHR1cmUg
ZGF0YSBwb2ludGVyIGluIHRoZQorICAgICAgICBXZWJWaWRlb0ZyYW1lLCBhbmQgd2UgZG8gbm90
IHdhbnQgdG8gZ2l2ZSB0aGlzIHBvaW50ZXIgdG8gdGhlIHF1YWQKKyAgICAgICAgY2xhc3MuIElu
c3RlYWQsIHRoaXMgbWV0aG9kIG1ha2VzIHVzZSBvZiB0aGUgQ0NSZW5kZXJlcidzIFRleHR1cmVD
b3BpZXIKKyAgICAgICAgY2xhc3MgdG8gY29weSB0aGUgcGl4ZWwgZGF0YSBpbnRvIHRoZSB0ZXh0
dXJlLgorCisgICAgICAgIFRleHR1cmVDb3BpZXIgZ2V0cyBhIG5ldyBjb3B5VG9UZXh0dXJlKCkg
bWV0aG9kIHRvIGNvcHkgZnJvbSBtYWluIG1lbW9yeQorICAgICAgICBpbnN0ZWFkIG9mIGZyb20g
YW5vdGhlciBHUFUgdGV4dHVyZS4KKworICAgICAgICBSZWZhY3RvciwgY292ZXJlZCBieSBleGlz
dGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdOYXRpdmVUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3U3RyZWFtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVDb3BpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpjb3B5VG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDoKKyAgICAgICAg
KFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAg
ICAgIChDQ1JlbmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJh
d1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9E
cmF3UXVhZC5oOgorICAgICAgICAoQ0NWaWRlb0RyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVmlkZW9EcmF3UXVhZDo6cGxhbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3
UXVhZDo6ZnJhbWVQcm92aWRlclRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6On5DQ1ZpZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OndpbGxEcmF3SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVy
SW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5l
OjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lOjpmcmVlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvTGF5ZXJJbXBsOjphbGxvY2F0ZVBsYW5lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvTGF5ZXJJbXBsOjpmcmVlUGxhbmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OmZyZWVVbnVzZWRQbGFuZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0xheWVySW1wbDo6ZGlkTG9zZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKEZyYW1lUGxh
bmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6RnJh
bWVQbGFuZSk6CisKIDIwMTItMDYtMDEgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDaGFuZ2Ugb3ZlcnJpZGVTaXplcyB0byBiZSBjb250ZW50LWJveCBpbnN0ZWFk
IG9mIGJvcmRlci1ib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDJiM2E5NTY3YTll
NGE4NjNjNGVkNjM0N2M2OWNjNDExNzY2OWNjYS4uYTFiYzM3NWE2MzdkZTIwYjVhMDE1MGQ0OGJm
OTBhOTE2NzVkMmM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxMi0wNi0wNiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5
ZXIgdHJlZSBhbmQgdmlkZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5k
IFdlYlZpZGVvRnJhbWUgcG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUpOgorICAg
ICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA2LTA1
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGwgQ2hyb21p
dW0gREVQUyBmcm9tIHIxNDA0OTIgdG8gcjE0MDUyOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKaW5kZXgg
NTRhZjE5NjIzZjJlZDZmMDc4ZThlMGI3Yjg4NTZmNGJkN2I5ZDBkZS4uMzg5NmRiZWJiNjhjNzNm
ZGU0OTFlMTZmMGZiOGFhZjJjNmMzNzRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1Bs
YXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAgLTEyNyw3
ICsxMjcsNiBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJGbG9hdFF1YWQuY3BwJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9zcmMvV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5jcHAnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwJywKLSAgICAgICAgICAgICdj
aHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAnLAogICAgICAgICBdCiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAppbmRleCBk
YjBhYTdkNTQyODRkZjhkZmZhY2NmZjU0NTc2ZDRmZmMyMmMzNjlmLi43NDc5OWJiNzE3MWNmMjZi
ZDU1NzhlNjRhMTMzZTExODI5YTYyOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaApAQCAtMzgsMTMgKzM4LDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogLy8gS2VlcCBpbiBzeW5jIHdpdGggY2hyb21pdW0ncyBtZWRpYTo6VmlkZW9GcmFt
ZTo6Rm9ybWF0LgogY2xhc3MgV2ViVmlkZW9GcmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFBsYW5lczsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtUkdC
UGxhbmVzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCByZ2JQbGFuZTsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtWVVWUGxhbmVzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB5
UGxhbmU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVQbGFuZTsKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdlBsYW5lOworICAgIGVudW0geworICAgICAgICByZ2JQbGFuZSA9IDAsCisg
ICAgICAgIG51bVJHQlBsYW5lcyA9IDEKKyAgICB9OworICAgIGVudW0geworICAgICAgICB5UGxh
bmUgPSAwLAorICAgICAgICB1UGxhbmUgPSAxLAorICAgICAgICB2UGxhbmUgPSAyLAorICAgICAg
ICBudW1ZVVZQbGFuZXMgPSAzCisgICAgfTsKKyAgICBlbnVtIHsgbWF4UGxhbmVzID0gMyB9Owog
CiAgICAgZW51bSBGb3JtYXQgewogICAgICAgICBGb3JtYXRJbnZhbGlkID0gMCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlZpZGVvRnJhbWUuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Yzg2NjU5MzM2YmNmNWVhMTlhM2YxMmIyMjhhZTRmMWU3MDM2ZmZm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYlZp
ZGVvRnJhbWUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNvbnN0IHVuc2lnbmVkIFdlYlZp
ZGVvRnJhbWU6Om1heFBsYW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBXZWJWaWRlb0ZyYW1lOjpu
dW1SR0JQbGFuZXMgPSAxOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6cmdiUGxhbmUg
PSAwOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6bnVtWVVWUGxhbmVzID0gMzsKLWNv
bnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJhbWU6OnlQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBX
ZWJWaWRlb0ZyYW1lOjp1UGxhbmUgPSAxOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6
dlBsYW5lID0gMjsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDhkZTQ0OWMwMzRkMDhlZDUyNzk3ZmNjZGMyYTViNWY1
MTRkYjM2NzYuLjkzZmNlYmQzMTZlODZhOWMwZDE1OTI5ZTAyNTFmNDc3MDVjNWRjNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtOTY2LDIyICs5NjYsMjIgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFk
KiBxdWFkKQogICAgIGNvbnN0IFZpZGVvWVVWUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvWVVWUHJv
Z3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwog
Ci0gICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgeVRleHR1cmUgPSBxdWFkLT50
ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6eVBsYW5lXTsKLSAgICBjb25zdCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB1VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbV2ViS2l0
OjpXZWJWaWRlb0ZyYW1lOjp1UGxhbmVdOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRl
eHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6
OnZQbGFuZV07CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgeVBsYW5l
ID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjp5UGxhbmVdOworICAgIGNv
bnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUmIHVQbGFuZSA9IHF1YWQtPnBsYW5lcygp
W1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6dVBsYW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpGcmFtZVBsYW5lJiB2UGxhbmUgPSBxdWFkLT5wbGFuZXMoKVtXZWJLaXQ6OldlYlZpZGVv
RnJhbWU6OnZQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRl
eHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlQbGFuZS50
ZXh0dXJlSWQpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1cmUu
bV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVQbGFuZS50ZXh0dXJl
SWQpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRleHR1cmUubV90ZXh0
dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZQbGFuZS50ZXh0dXJlSWQpKTsK
IAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKIAotICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKS53aWR0aCgpOworICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHlQbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlQbGFuZS5zaXplLndpZHRo
KCk7CiAgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYg
ZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgotICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9
IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVG
YWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVBsYW5lLnZpc2libGVTaXplLndpZHRoKCkpIC8g
dVBsYW5lLnNpemUud2lkdGgoKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZv
cm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCks
IHlXaWR0aFNjYWxlRmFjdG9yKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlm
b3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24o
KSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7CiAKQEAgLTEwMjQsMTQgKzEwMjQsMTQgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKGNvbnN0IEND
VmlkZW9EcmF3UXVhZCogcXUKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQShj
b25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgVGV4dHVyZVByb2dyYW0q
IHByb2dyYW0gPSB0ZXh0dXJlUHJvZ3JhbSgpOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlkZW9GcmFt
ZTo6cmdiUGxhbmVdOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxm
bG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKS53aWR0aCgpOwotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHBy
b2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworICAgIGNvbnN0IENDVmlkZW9MYXllcklt
cGw6OkZyYW1lUGxhbmUmIHBsYW5lID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpXZWJWaWRlb0Zy
YW1lOjpyZ2JQbGFuZV07CisgICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0
PGZsb2F0PihwbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHBsYW5lLnNpemUud2lkdGgoKTsK
KyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxl
RmFjdG9yLCBwbGFuZS50ZXh0dXJlSWQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsK
IH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlMkQoY29u
c3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9R
dWFkKHF1YWQsIHRleHR1cmVQcm9ncmFtKCksIDEsIHF1YWQtPmZyYW1lKCktPnRleHR1cmVJZCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CisgICAgZHJhd1NpbmdsZVRleHR1cmVW
aWRlb1F1YWQocXVhZCwgdGV4dHVyZVByb2dyYW0oKSwgMSwgcXVhZC0+ZnJhbWVQcm92aWRlclRl
eHR1cmVJZCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiB9CiAKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1
YWQqIHF1YWQpCkBAIC0xMDQzLDU0ICsxMDQzLDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3U3RyZWFtVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAgICAg
QVNTRVJUKHF1YWQtPm1hdHJpeCgpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4TWF0cml4TG9jYXRpb24o
KSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihxdWFkLT5tYXRyaXgoKSkpKTsKIAotICAg
IGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1YWQtPmZyYW1l
KCktPnRleHR1cmVJZCgpLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9FWFRFUk5B
TF9PRVMpOwotfQotCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1lVG9UZXh0
dXJlcyhjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgY29uc3QgV2ViS2l0OjpX
ZWJWaWRlb0ZyYW1lKiBmcmFtZSA9IHF1YWQtPmZyYW1lKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpCi0gICAgICAgIGNv
cHlQbGFuZVRvVGV4dHVyZShxdWFkLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5lKTsKLQotICAg
IGZvciAodW5zaWduZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lIDwgQ0NWaWRlb0xh
eWVySW1wbDo6TWF4UGxhbmVzOyArK3BsYW5lKSB7Ci0gICAgICAgIENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUqIHRleHR1cmUgPSAmcXVhZC0+dGV4dHVyZXMoKVtwbGFuZV07Ci0gICAgICAgIHRl
eHR1cmUtPm1fdGV4dHVyZS5jbGVhcigpOwotICAgICAgICB0ZXh0dXJlLT5tX3Zpc2libGVTaXpl
ID0gSW50U2l6ZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQq
IHF1YWQsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCi17Ci0gICAgQ0NWaWRlb0xheWVy
SW1wbDo6VGV4dHVyZSYgdGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbaW5kZXhdOwotICAgIFJl
ZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6OmNy
ZWF0ZTNEKG1fY29udGV4dCk7Ci0gICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNj
Q29udGV4dC5nZXQoKSwgbV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7Ci0gICAgR0MzRGVu
dW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwotICAgIEludFNpemUgZGlt
ZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7Ci0KLSAgICB2b2lkKiBtZW0gPSBz
dGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9u
cygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9t
aXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAgICAgIG1lbWNweShtZW0sIHBs
YW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKLSAgICAgICAg
R0xDKGNvbnRleHQoKSwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0
KCktPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWls
cywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKLSAgICAgICAgLy8gdXBsb2FkLiBU
aGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9u
ZQotICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRl
eHR1cmUuCi0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgp
LCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBwbGFuZSkpOwotICAgIH0KKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChx
dWFkLCBwcm9ncmFtLCAxLCBxdWFkLT5mcmFtZVByb3ZpZGVyVGV4dHVyZUlkKCksIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3VmlkZW9RdWFkKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVh
ZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaWYgKCFx
dWFkLT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNvcHlGcmFtZVRvVGV4
dHVyZXMocXVhZCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHN3aXRjaCAocXVhZC0+Zm9ybWF0
KCkpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CiAgICAgICAgIGRy
YXdZVVYocXVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCmluZGV4IGJkOGMzM2E5YTI1MGEwNTJh
NmVkNjBjZGNjOGQ5NzAxMjk2YzBmOTYuLmViZDk2ZGE3N2VmZDY0YmI1NjhmYTVjMjA0ZTUxZjQ1
Y2MzOTQ3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNp
bmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgdGhlIEdMQygp
IG1hY3JvCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiw2ICsxMTMsMzAgQEAgdm9pZCBB
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNvcHlUZXh0dXJlKENDR3JhcGhpY3NDb250ZXh0KiBj
Y0NvbnRleHQsIHVuc2lnbmUKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApKTsKIH0KIAordm9pZCBBY2NlbGVyYXRl
ZFRleHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUoQ0NHcmFwaGljc0NvbnRleHQqIGNjQ29udGV4
dCwgY29uc3Qgdm9pZCogc291cmNlUGl4ZWxzLCB1bnNpZ25lZCBkZXN0VGV4dHVyZUlkLCBjb25z
dCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgVFJBQ0VfRVZFTlQoIlRl
eHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUiLCB0aGlzLCAwKTsKKworICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0ID0gY2NDb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJl
IGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlc3RUZXh0dXJlSWQpOwor
CisgICAgdm9pZCogbWFwcGVkUGl4ZWxzID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21p
dW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOworICAgIGlmIChtYXBwZWRQaXhlbHMpIHsK
KyAgICAgICAgbWVtY3B5KG1hcHBlZFBpeGVscywgc291cmNlUGl4ZWxzLCBzaXplLndpZHRoKCkg
KiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0PEV4dGVu
c2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBUZXhTdWJJ
bWFnZTJEQ0hST01JVU0obWFwcGVkUGl4ZWxzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
SWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4
U3ViSW1hZ2UyRAorICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVz
IGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCisgICAgICAgIC8vIGluIHRoZSBjb21t
YW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgc291cmNlUGl4ZWxzKSk7CisgICAgfQorfQorCiB9CiAK
ICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgK
aW5kZXggM2FjMmQxMTkxNGZmYTE1ZjhkZWMyY2FiM2RmNWNkMjgwYTNhNmY5MC4uZjBmYjg0MTJl
NDJmYjM0NGU4NjBlNWIyODNhMWMwNzQ5MTZiMWEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaApAQCAt
NDAsNiArNDAsMTAgQEAgcHVibGljOgogICAgIC8vIHRvIG1hdGNoLCBidXQgfGRlc3RUZXh0dXJl
SWR8IG11c3QgaGF2ZSBhIHJlbmRlcmFibGUgZm9ybWF0LgogICAgIHZpcnR1YWwgdm9pZCBjb3B5
VGV4dHVyZShDQ0dyYXBoaWNzQ29udGV4dCosIHVuc2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5z
aWduZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYpID0gMDsKIAorICAgIC8vIENvcHkg
dGhlIHBpeGVscyBmcm9tIG1haW4gbWVtb3J5IGludG8gYSB0ZXh0dXJlLgorICAgIC8vIEZJWE1F
OiBXZSBuZWVkIGludGVyZmFjZSB3aXRoIGEgZm9ybWF0IHR5cGUgdGhhdCB3aWxsIGFsc28gd29y
ayBmb3Igc29mdHdhcmUgbW9kZS4KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4dHVyZShDQ0dy
YXBoaWNzQ29udGV4dCosIGNvbnN0IHZvaWQqIHNvdXJjZVBpeGVscywgdW5zaWduZWQgZGVzdFRl
eHR1cmVJZCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCkgPSAwOworCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB+VGV4dHVyZUNvcGllcigpIHsgfQogfTsKQEAgLTU2LDYgKzYwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcigpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKENDR3JhcGhpY3NDb250ZXh0KiwgdW5zaWduZWQg
c291cmNlVGV4dHVyZUlkLCB1bnNpZ25lZCBkZXN0VGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJik7
CisgICAgdmlydHVhbCB2b2lkIGNvcHlUb1RleHR1cmUoQ0NHcmFwaGljc0NvbnRleHQqLCBjb25z
dCB2b2lkKiBzb3VyY2VQaXhlbHMsIHVuc2lnbmVkIGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNp
emUmLCBHQzNEZW51bSBmb3JtYXQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWNjZWxl
cmF0ZWRUZXh0dXJlQ29waWVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9EcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwCmluZGV4IDljY2E3MTQxMmFjZDdmNWJjNjc4Yzg1NGRj
YjJkNWQ1ZTAyYThjMmEuLjRmYTY2Mjc2MjgxM2QxNWRkZmFhYzk1N2Y3OTVjMzQ4NmU4ZWM0MTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9EcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcApAQCAtMjksMTUgKzI5LDE1IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlk
ZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0
ZXh0dXJlcywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQor
UGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRS
ZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lKiBwbGFuZXMsIHVuc2lnbmVkIGZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCkKIHsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0ZXh0dXJl
cywgZnJhbWUsIGZvcm1hdCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWRlb0RyYXdR
dWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHBsYW5lcywgZnJhbWVQcm92aWRlclRleHR1
cmVJZCwgZm9ybWF0KSk7CiB9CiAKLUNDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0RyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgV2ViS2l0OjpXZWJW
aWRlb0ZyYW1lKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQorQ0NWaWRlb0RyYXdRdWFkOjpDQ1Zp
ZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29u
c3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUqIHBsYW5l
cywgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCwgR0MzRGVudW0gZm9ybWF0KQogICAg
IDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlZpZGVvQ29udGVudCwg
cXVhZFJlY3QpCi0gICAgLCBtX3RleHR1cmVzKHRleHR1cmVzKQotICAgICwgbV9mcmFtZShmcmFt
ZSkKKyAgICAsIG1fcGxhbmVzKHBsYW5lcykKKyAgICAsIG1fZnJhbWVQcm92aWRlclRleHR1cmVJ
ZChmcmFtZVByb3ZpZGVyVGV4dHVyZUlkKQogICAgICwgbV9mb3JtYXQoZm9ybWF0KQogICAgICwg
bV9tYXRyaXgoMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKaW5kZXggOWViMzU3ZmM4
NmI1YTQ0OWE5MmNjZWVkMTY1M2M5ZGQ4MmMyNWQzOS4uOTFiODgzNjczMzJkYWViZWExMTQzNjdk
ZDdmMzBkOGRlYjk4MWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKQEAgLTMxLDI5
ICszMSwyNiBAQAogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlZpZGVvRnJh
bWU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDog
cHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3
UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBj
cmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xh
eWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFdlYktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0Rl
bnVtIGZvcm1hdCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVh
dGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVy
SW1wbDo6RnJhbWVQbGFuZSogcGxhbmVzLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4dHVyZUlk
LCBHQzNEZW51bSBmb3JtYXQpOwogCi0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4
dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVzOyB9Ci0gICAgV2ViS2l0OjpXZWJWaWRl
b0ZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICAvLyBBbiBhcnJh
eSBvZiB0ZXh0dXJlcywgd2hlcmUgZWFjaCBpbmRleCBjb3JyZXNwb25kcyB0byBhIHBsYW5lIGlu
IFdlYktpdDo6V2ViVmlkZW9GcmFtZS4KKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5l
KiBwbGFuZXMoKSBjb25zdCB7IHJldHVybiBtX3BsYW5lczsgfQorICAgIHVuc2lnbmVkIGZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUHJvdmlkZXJUZXh0dXJl
SWQ7IH0KICAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQog
ICAgIGNvbnN0IGZsb2F0KiBtYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeDsgfQogCiAg
ICAgdm9pZCBzZXRNYXRyaXgoY29uc3QgZmxvYXQqIG1hdHJpeCkgeyBtX21hdHJpeCA9IG1hdHJp
eDsgfQogCiBwcml2YXRlOgotICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJl
cywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiwgR0MzRGVudW0gZm9ybWF0KTsKKyAgICBDQ1ZpZGVv
RHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRl
b0xheWVySW1wbDo6RnJhbWVQbGFuZSogcGxhbmVzLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4
dHVyZUlkLCBHQzNEZW51bSBmb3JtYXQpOwogCi0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVy
ZSogbV90ZXh0dXJlczsKLSAgICBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIG1fZnJhbWU7CisgICAg
Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSogbV9wbGFuZXM7CisgICAgdW5zaWduZWQgbV9m
cmFtZVByb3ZpZGVyVGV4dHVyZUlkOwogICAgIEdDM0RlbnVtIG1fZm9ybWF0OwogICAgIGNvbnN0
IGZsb2F0KiBtX21hdHJpeDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmlu
ZGV4IDEwNWMxMTlmNGY5NTYwOGE2ODBhNjZiMzk1ZDI2ZWYxMTkyOTVlN2YuLjIxOGI4Y2JiMjc3
MGIxN2VjYzc1MzMyMGY1MTVkYWVjMDA3NmMxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQcm9ncmFtQmlu
ZGluZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiIC8vIEZvciBUZXh0dXJlQWxsb2Nh
dG9yCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
UHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKQEAgLTc4LDYgKzc5LDggQEAg
Q0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChpbnQgaWQsIFdlYktpdDo6V2ViVmlk
ZW9GcmFtZVByb3ZpZGVyKiBwcm92aWQKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCiAgICAg
LCBtX2ZyYW1lKDApCiB7CisgICAgQVNTRVJUKE1heFBsYW5lcyA9PSBXZWJLaXQ6OldlYlZpZGVv
RnJhbWU6Om1heFBsYW5lcyk7CisKICAgICBtZW1jcHkobV9zdHJlYW1UZXh0dXJlTWF0cml4LCBm
bGlwVHJhbnNmb3JtLCBzaXplb2YobV9zdHJlYW1UZXh0dXJlTWF0cml4KSk7CiAKICAgICAvLyBU
aGlzIG9ubHkgaGFwcGVucyBkdXJpbmcgYSBjb21taXQgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFk
IHdoaWxlIHRoZSBtYWluCkBAIC05Niw4ICs5OSw3IEBAIENDVmlkZW9MYXllckltcGw6On5DQ1Zp
ZGVvTGF5ZXJJbXBsKCkKICAgICAgICAgbV9wcm92aWRlci0+c2V0VmlkZW9GcmFtZVByb3ZpZGVy
Q2xpZW50KDApOwogICAgICAgICBtX3Byb3ZpZGVyID0gMDsKICAgICB9Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQotICAgICAgICBtX3RleHR1cmVzW2ldLm1f
dGV4dHVyZS5jbGVhcigpOworICAgIGZyZWVQbGFuZURhdGEobGF5ZXJUcmVlSG9zdEltcGwoKS0+
bGF5ZXJSZW5kZXJlcigpKTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzdG9wVXNpbmdQ
cm92aWRlcigpCkBAIC0xNDEsMTMgKzE0MywxNCBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6Ondp
bGxEcmF3KENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIsIENDR3JhcGhpY3NDb250ZXh0KiBjbwog
ICAgIC8vIGxvY2sgc2hvdWxkIG5vdCBjYXVzZSBhIGRlYWRsb2NrLgogICAgIG1fcHJvdmlkZXJN
dXRleC5sb2NrKCk7CiAKLSAgICB3aWxsRHJhd0ludGVybmFsKGxheWVyUmVuZGVyZXIpOworICAg
IHdpbGxEcmF3SW50ZXJuYWwobGF5ZXJSZW5kZXJlciwgY29udGV4dCk7CisgICAgZnJlZVVudXNl
ZFBsYW5lRGF0YShsYXllclJlbmRlcmVyKTsKIAogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAg
bV9wcm92aWRlck11dGV4LnVubG9jaygpOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6Ondp
bGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NWaWRlb0xh
eWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyLCBDQ0dy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOwogCkBAIC0xNjksOSArMTcyLDI3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2ls
bERyYXdJbnRlcm5hbChDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKCFyZXNlcnZlVGV4dHVyZXMoKm1fZnJhbWUsIG1fZm9ybWF0LCBs
YXllclJlbmRlcmVyKSkgeworICAgIGlmIChtX2ZyYW1lLT5wbGFuZXMoKSA+IFdlYktpdDo6V2Vi
VmlkZW9GcmFtZTo6bWF4UGxhbmVzKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRG
cmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIWFsbG9jYXRlUGxhbmVEYXRhKGxheWVyUmVuZGVyZXIpKSB7CiAgICAg
ICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKICAgICAgICAgbV9mcmFt
ZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBw
YXNzIHF1YWRzIG91dCBvZiBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRvdWJsZS1idWZmZXIsIG9yCisg
ICAgLy8gb3RoZXJ3aXNlIHN5bmNob25pemUgdXNlIG9mIHRoZSBoYXJkd2FyZS1kZWNvZGVyIHRl
eHR1cmUgZ2l2ZW4gdG8gdXMKKyAgICAvLyBmcm9tIHRoZSBXZWJWaWRlb0ZyYW1lUHJvdmlkZXIg
d2hlbiBpdCBpcyBwcmVzZW50LgorCisgICAgc2l6ZV90IHNvZnR3YXJlUGxhbmVDb3VudCA9IG1f
ZnJhbWUtPnBsYW5lcygpOworICAgIGZvciAoc2l6ZV90IHNvZnR3YXJlUGxhbmVJbmRleCA9IDA7
IHNvZnR3YXJlUGxhbmVJbmRleCA8IHNvZnR3YXJlUGxhbmVDb3VudDsgKytzb2Z0d2FyZVBsYW5l
SW5kZXgpIHsKKyAgICAgICAgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgcGxhbmUgPSBt
X2ZyYW1lUGxhbmVzW3NvZnR3YXJlUGxhbmVJbmRleF07CisgICAgICAgIGNvbnN0IHZvaWQqIHNv
ZnR3YXJlUGxhbmVQaXhlbHMgPSBtX2ZyYW1lLT5kYXRhKHNvZnR3YXJlUGxhbmVJbmRleCk7Cisg
ICAgICAgIGxheWVyUmVuZGVyZXItPnRleHR1cmVDb3BpZXIoKS0+Y29weVRvVGV4dHVyZShjb250
ZXh0LCBzb2Z0d2FyZVBsYW5lUGl4ZWxzLCBwbGFuZS50ZXh0dXJlSWQsIHBsYW5lLnNpemUsIHBs
YW5lLmZvcm1hdCk7CiAgICAgfQogfQogCkBAIC0xODMsNyArMjA0LDcgQEAgdm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25zdCBDQ1No
YXJlZFF1YWRTdGEKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQ
b2ludCgpLCBib3VuZHMoKSk7Ci0gICAgT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gdmlkZW9RdWFk
ID0gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV90
ZXh0dXJlcywgbV9mcmFtZSwgbV9mb3JtYXQpOworICAgIE93blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+
IHZpZGVvUXVhZCA9IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVh
ZFJlY3QsIG1fZnJhbWVQbGFuZXMsIG1fZnJhbWUtPnRleHR1cmVJZCgpLCBtX2Zvcm1hdCk7CiAK
ICAgICBpZiAobV9mb3JtYXQgPT0gRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfRVhU
RVJOQUxfT0VTKQogICAgICAgICB2aWRlb1F1YWQtPnNldE1hdHJpeChtX3N0cmVhbVRleHR1cmVN
YXRyaXgpOwpAQCAtMTk5LDggKzIyMCw2IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZGlkRHJh
dygpCiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2ln
bmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX2ZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkKLSAgICAg
ICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT51bnJlc2VydmUoKTsKICAgICBtX3Byb3Zp
ZGVyLT5wdXRDdXJyZW50RnJhbWUobV9mcmFtZSk7CiAgICAgbV9mcmFtZSA9IDA7CiAKQEAgLTI0
MywzNSArMjYyLDYzIEBAIEludFNpemUgQ0NWaWRlb0xheWVySW1wbDo6Y29tcHV0ZVZpc2libGVT
aXplKGNvbnN0IFdlYktpdDo6V2ViVmlkZW9GcmFtZSYgZnJhbWUsCiAgICAgcmV0dXJuIEludFNp
emUodmlzaWJsZVdpZHRoLCB2aXNpYmxlSGVpZ2h0KTsKIH0KIAotYm9vbCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiBmcmFtZSwg
R0MzRGVudW0gZm9ybWF0LCBDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQorYm9vbCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpGcmFtZVBsYW5lOjphbGxvY2F0ZURhdGEoQ0NSZW5kZXJlciogbGF5ZXJSZW5k
ZXJlcikKK3sKKyAgICBpZiAodGV4dHVyZUlkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHRleHR1cmVJZCA9IGxheWVyUmVuZGVyZXItPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpLT5j
cmVhdGVUZXh0dXJlKHNpemUsIGZvcm1hdCk7CisgICAgcmV0dXJuIHRleHR1cmVJZDsKK30KKwor
dm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lOjpmcmVlRGF0YShDQ1JlbmRlcmVyKiBs
YXllclJlbmRlcmVyKQoreworICAgIGlmICghdGV4dHVyZUlkKQorICAgICAgICByZXR1cm47CisK
KyAgICBsYXllclJlbmRlcmVyLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKS0+ZGVsZXRlVGV4
dHVyZSh0ZXh0dXJlSWQsIHNpemUsIGZvcm1hdCk7CisgICAgdGV4dHVyZUlkID0gMDsKK30KKwor
Ym9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjphbGxvY2F0ZVBsYW5lRGF0YShDQ1JlbmRlcmVyKiBsYXll
clJlbmRlcmVyKQogewotICAgIGlmIChmcmFtZS5wbGFuZXMoKSA+IE1heFBsYW5lcykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyUmVuZGVyZXIt
PmNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOwotICAgIGZvciAodW5zaWduZWQgcGxhbmUg
PSAwOyBwbGFuZSA8IGZyYW1lLnBsYW5lcygpOyArK3BsYW5lKSB7Ci0gICAgICAgIEludFNpemUg
cmVxdWlyZWRUZXh0dXJlU2l6ZShmcmFtZS5zdHJpZGUocGxhbmUpLCB2aWRlb0ZyYW1lRGltZW5z
aW9uKGZyYW1lLmhlaWdodCgpLCBwbGFuZSwgZnJhbWUuZm9ybWF0KCkpKTsKLSAgICAgICAgLy8g
SWYgdGhlIHJlbmRlcmVyIGNhbm5vdCBoYW5kbGUgdGhpcyBsYXJnZSBvZiBhIHRleHR1cmUsIHJl
dHVybiBmYWxzZS4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxl
ZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgorICAgIGZvciAodW5zaWduZWQgcGxhbmVJbmRleCA9
IDA7IHBsYW5lSW5kZXggPCBtX2ZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZUluZGV4KSB7CisgICAg
ICAgIENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUmIHBsYW5lID0gbV9mcmFtZVBsYW5lc1tw
bGFuZUluZGV4XTsKKworICAgICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUobV9mcmFt
ZS0+c3RyaWRlKHBsYW5lSW5kZXgpLCB2aWRlb0ZyYW1lRGltZW5zaW9uKG1fZnJhbWUtPmhlaWdo
dCgpLCBwbGFuZUluZGV4LCBtX2ZyYW1lLT5mb3JtYXQoKSkpOworICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoZSB0ZXN0IGFnYWluc3QgbWF4VGV4dHVyZVNpemUgd2hlbiB0aWxlZCBsYXllcnMg
YXJlIGltcGxlbWVudGVkLgogICAgICAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc1plcm8o
KSB8fCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgPiBtYXhUZXh0dXJlU2l6ZSB8fCByZXF1
aXJlZFRleHR1cmVTaXplLmhlaWdodCgpID4gbWF4VGV4dHVyZVNpemUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlKSB7
Ci0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVy
ZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigpKTsKLSAgICAgICAg
ICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlKQorCisgICAgICAgIGlmIChwbGFu
ZS5zaXplICE9IHJlcXVpcmVkVGV4dHVyZVNpemUgfHwgcGxhbmUuZm9ybWF0ICE9IG1fZm9ybWF0
KSB7CisgICAgICAgICAgICBwbGFuZS5mcmVlRGF0YShsYXllclJlbmRlcmVyKTsKKyAgICAgICAg
ICAgIHBsYW5lLnNpemUgPSByZXF1aXJlZFRleHR1cmVTaXplOworICAgICAgICAgICAgcGxhbmUu
Zm9ybWF0ID0gbV9mb3JtYXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXBsYW5lLnRleHR1
cmVJZCkgeworICAgICAgICAgICAgaWYgKCFwbGFuZS5hbGxvY2F0ZURhdGEobGF5ZXJSZW5kZXJl
cikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbV90ZXh0dXJl
c1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFRoZSBpbXBsVGV4dHVyZU1hbmFnZXIgbWF5IGhhdmUgYmVlbiBkZXN0cm95
ZWQgYW5kIHJlY3JlYXRlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZSwgc28gcGFzcyB0aGUgbmV3IG9u
ZS4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcCBpZiB0aGUgVGV4dHVyZU1hbmFnZXIg
aXMgc3RpbGwgYXJvdW5kLgotICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJl
LT5zZXRUZXh0dXJlTWFuYWdlcihsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIoKSk7
CisgICAgICAgICAgICBwbGFuZS52aXNpYmxlU2l6ZSA9IGNvbXB1dGVWaXNpYmxlU2l6ZSgqbV9m
cmFtZSwgcGxhbmVJbmRleCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1fdGV4dHVyZXNbcGxh
bmVdLm1fdGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkVGV4dHVyZVNpemUpCi0gICAgICAgICAg
ICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVTaXplID0gY29tcHV0ZVZpc2libGVTaXplKGZy
YW1lLCBwbGFuZSk7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5y
ZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNpemUsIGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIENDVmlkZW9MYXllcklt
cGw6OmZyZWVQbGFuZURhdGEoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFuZXM7ICsr
aSkKKyAgICAgICAgbV9mcmFtZVBsYW5lc1tpXS5mcmVlRGF0YShsYXllclJlbmRlcmVyKTsKK30K
Kwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpmcmVlVW51c2VkUGxhbmVEYXRhKENDUmVuZGVyZXIq
IGxheWVyUmVuZGVyZXIpCit7CisgICAgdW5zaWduZWQgZmlyc3RVbnVzZWRQbGFuZSA9IG1fZnJh
bWUgPyBtX2ZyYW1lLT5wbGFuZXMoKSA6IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3RV
bnVzZWRQbGFuZTsgaSA8IFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisg
ICAgICAgIG1fZnJhbWVQbGFuZXNbaV0uZnJlZURhdGEobGF5ZXJSZW5kZXJlcik7Cit9CisKIHZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6ZGlkUmVjZWl2ZUZyYW1lKCkKIHsKICAgICBzZXROZWVkc1Jl
ZHJhdygpOwpAQCAtMjg1LDggKzMzMiw3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZGlkVXBk
YXRlTWF0cml4KGNvbnN0IGZsb2F0IG1hdHJpeFsxNl0pCiAKIHZvaWQgQ0NWaWRlb0xheWVySW1w
bDo6ZGlkTG9zZUNvbnRleHQoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQ
bGFuZXM7ICsraSkKLSAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUuY2xlYXIoKTsKKyAg
ICBmcmVlUGxhbmVEYXRhKGxheWVyVHJlZUhvc3RJbXBsKCktPmxheWVyUmVuZGVyZXIoKSk7CiB9
CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0TmVlZHNSZWRyYXcoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5oCmluZGV4IDIyMWY2MDBhY2ViOGEzMTk5ZjZkNzg2OGE0YzFkNmRmZWI2
OGJlYTYuLmVlMWMwYWZmODgxMzJjNjRhZTAwZTI2MDM2YTZjZTJmNzYxZGM0YWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYgQ0NWaWRl
b0xheWVySW1wbF9oCiAjZGVmaW5lIENDVmlkZW9MYXllckltcGxfaAogCi0jaW5jbHVkZSAiTWFu
YWdlZFRleHR1cmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJWaWRlb0ZyYW1lUHJvdmlkZXIuaD4KIApAQCAtNjksMTEgKzcwLDE3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOwogICAgIHN0YXRpYyBjb25zdCBm
bG9hdCBmbGlwVHJhbnNmb3JtWzE2XTsKIAotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAg
T3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7Ci0gICAgICAgIEludFNpemUgbV92aXNp
YmxlU2l6ZTsKKyAgICBzdHJ1Y3QgRnJhbWVQbGFuZSB7CisgICAgICAgIHVuc2lnbmVkIHRleHR1
cmVJZDsKKyAgICAgICAgSW50U2l6ZSBzaXplOworICAgICAgICBHQzNEZW51bSBmb3JtYXQ7Cisg
ICAgICAgIEludFNpemUgdmlzaWJsZVNpemU7CisKKyAgICAgICAgRnJhbWVQbGFuZSgpIDogdGV4
dHVyZUlkKDApIHsgfQorCisgICAgICAgIGJvb2wgYWxsb2NhdGVEYXRhKENDUmVuZGVyZXIqKTsK
KyAgICAgICAgdm9pZCBmcmVlRGF0YShDQ1JlbmRlcmVyKik7CiAgICAgfTsKLSAgICBlbnVtIHsg
TWF4UGxhbmVzID0gMyB9OwogCiBwcml2YXRlOgogICAgIENDVmlkZW9MYXllckltcGwoaW50LCBX
ZWJLaXQ6OldlYlZpZGVvRnJhbWVQcm92aWRlciopOwpAQCAtODEsMTkgKzg4LDIyIEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIEludFNpemUgY29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFdlYktpdDo6
V2ViVmlkZW9GcmFtZSYsIHVuc2lnbmVkIHBsYW5lKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gIlZpZGVvTGF5ZXIi
OyB9CiAKLSAgICB2b2lkIHdpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciopOwotICAgIGJvb2wg
cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6V2ViVmlkZW9GcmFtZSYsIEdDM0RlbnVtIGZv
cm1hdCwgQ0NSZW5kZXJlciopOworICAgIHZvaWQgd2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVy
KiwgQ0NHcmFwaGljc0NvbnRleHQqKTsKKyAgICBib29sIGFsbG9jYXRlUGxhbmVEYXRhKENDUmVu
ZGVyZXIqKTsKKyAgICB2b2lkIGZyZWVQbGFuZURhdGEoQ0NSZW5kZXJlciopOworICAgIHZvaWQg
ZnJlZVVudXNlZFBsYW5lRGF0YShDQ1JlbmRlcmVyKik7CiAKICAgICAvLyBHdWFyZHMgdGhlIGRl
c3RydWN0aW9uIG9mIG1fcHJvdmlkZXIgYW5kIHRoZSBmcmFtZSB0aGF0IGl0IHByb3ZpZGVzCiAg
ICAgTXV0ZXggbV9wcm92aWRlck11dGV4OwogICAgIFdlYktpdDo6V2ViVmlkZW9GcmFtZVByb3Zp
ZGVyKiBtX3Byb3ZpZGVyOwogCi0gICAgVGV4dHVyZSBtX3RleHR1cmVzW01heFBsYW5lc107Ci0K
ICAgICBmbG9hdCBtX3N0cmVhbVRleHR1cmVNYXRyaXhbMTZdOwogCiAgICAgV2ViS2l0OjpXZWJW
aWRlb0ZyYW1lKiBtX2ZyYW1lOwogICAgIEdDM0RlbnVtIG1fZm9ybWF0OworCisgICAgLy8gRWFj
aCBpbmRleCBpbiB0aGlzIGFycmF5IGNvcnJlc3BvbmRzIHRvIGEgcGxhbmUgaW4gV2ViS2l0OjpX
ZWJWaWRlb0ZyYW1lLgorICAgIEZyYW1lUGxhbmUgbV9mcmFtZVBsYW5lc1tXZWJLaXQ6OldlYlZp
ZGVvRnJhbWU6Om1heFBsYW5lc107CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IGU2MjMx
ZDM0ZjExN2E4NjE5OGExZWY1ZjI2NmNlODc2YTg4NzllYmUuLjRkZjhiYWU2ZGYxZTRkOGVmNWJi
ZTg1NGI4MTVmYmM5OTg0OThmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xNjU2LDYgKzE2NTYs
NyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNB
ZnRlckxvc3RDb250ZXh0KQogICAgIHZpZGVvTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQoMCwgMCkpOwogICAgIHZpZGVvTGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMCwg
MTApKTsKICAgICB2aWRlb0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgdmlkZW9M
YXllci0+c2V0TGF5ZXJUcmVlSG9zdEltcGwobV9ob3N0SW1wbC5nZXQoKSk7CiAgICAgcm9vdExh
eWVyLT5hZGRDaGlsZCh2aWRlb0xheWVyLnJlbGVhc2UoKSk7CiAKICAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIocm9vdExheWVyLnJlbGVhc2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCmluZGV4IDk4MjRkOGMw
NjRmZDQwN2FhMjdjYWVlMzhkMDcwOTBlN2ZiMmRjZTAuLmYxNTIwMWE4NGQxZTNkNmRiNWMzM2U5
MDIxNWMzODc4YTJlZTA2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVibGlj
OgogY2xhc3MgRmFrZVRleHR1cmVDb3BpZXIgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZUNvcGll
ciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKFdlYkNvcmU6OkNDR3Jh
cGhpY3NDb250ZXh0KiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvcHlUb1RleHR1cmUoV2ViQ29yZTo6Q0NHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCB2b2lkKiwgdW5zaWduZWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBHQzNEZW51bSkgeyB9CiB9OwogCiBjbGFzcyBGYWtlVGV4dHVyZVVwbG9hZGVyIDogcHVibGlj
IFdlYkNvcmU6OlRleHR1cmVVcGxvYWRlciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBhNTY1
MTQ2YTVkNDkxOTY1YjdiMWFkMjVkNmZlNjljNTE1MTU0MGY5Li4wNDJhYTExOTVjZWM0MWU2NzZm
MDU5MDE3ZWFlNzVlZmVkYmI4NDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTg2LDYgKzg2
LDcgQEAgcHVibGljOgogY2xhc3MgTW9ja1RleHR1cmVDb3BpZXIgOiBwdWJsaWMgVGV4dHVyZUNv
cGllciB7CiBwdWJsaWM6CiAgICAgTU9DS19NRVRIT0Q0KGNvcHlUZXh0dXJlLCB2b2lkKENDR3Jh
cGhpY3NDb250ZXh0KiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJikpOworICAg
IE1PQ0tfTUVUSE9ENShjb3B5VG9UZXh0dXJlLCB2b2lkKENDR3JhcGhpY3NDb250ZXh0KiwgY29u
c3Qgdm9pZCosIHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKIH07CiAKIGNs
YXNzIE1vY2tUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgVGV4dHVyZVVwbG9hZGVyIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146112</attachid>
            <date>2012-06-06 14:37:10 -0700</date>
            <delta_ts>2012-06-06 16:24:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88363-20120606173709.patch</filename>
            <type>text/plain</type>
            <size>35072</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0YThkMGExMWNhMmMy
MThkYzkxZWFjY2NlNTk0YmU2MDIwYTU5ZDY5Li5lYTJhNDQyMDE1MDI4MTk1NzJlZDE2MjkwYjQ0
N2U1ZjY0ODM2ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNiAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5ZXIgdHJlZSBhbmQgdmlk
ZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5kIFdlYlZpZGVvRnJhbWUg
cG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGlj
L1dlYlZpZGVvRnJhbWUuaDoKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5j
cHA6IFJlbW92ZWQuCisKIDIwMTItMDYtMDEgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU29mdHdhcmUgY29tcG9zaXRvciBpbml0aWFs
aXphdGlvbiBhbmQgYmFzZSBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZkZjE1M2Q4M2Q3ZWRjNjM5
NmEzZmNjM2JiMTA5ZWJlZGZkMmU2Mi4uOTJmNjU0YmU3MDRkZmIyMTQyY2ZhNjRkOWRkZDA1NzM2
ZmE1ZWJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA2LTA2ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2VwYXJh
dGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBmcm9tIHRoZSBsYXllciB0cmVlIGFuZCB2aWRlbyBwcm92
aWRlciBieSByZW1vdmluZyBNYW5hZ2VkVGV4dHVyZSBhbmQgV2ViVmlkZW9GcmFtZSBwb2ludGVy
cyBmcm9tIHRoZSBxdWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODM2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENDVmlkZW9EcmF3UXVhZCBzaG91bGQgbm90IGNvbnRhaW4gYW55IHBvaW50ZXJzIHNv
IHdlIGFyZSBhYmxlIHRvCisgICAgICAgIHNlcmlhbGl6ZSBpdCBhY3Jvc3MgcHJvY2VzcyBib3Vu
ZGFyaWVzLiBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlCisgICAgICAgIE1hbmFnZWRUZXh0dXJlIHBv
aW50ZXJzIGZyb20gdGhlIHF1YWQgY2xhc3MsIHJlcGxhY2luZyB0aGVtIHdpdGgKKyAgICAgICAg
dGV4dHVyZSBpZHMsIGFuZCByZW1vdmVzIHRoZSBXZWJWaWRlb0ZyYW1lKiBmcm9tIHRoZSBxdWFk
LCByZXBsYWNpbmcKKyAgICAgICAgaXQgd2l0aCB0aGUgZnJhbWUgcHJvdmlkZXIncyB0ZXh0dXJl
IGlkIGluY2x1ZGVkIGluIHRoZSBXZWJWaWRlb0ZyYW1lCisgICAgICAgIHN0cnVjdHVyZS4KKwor
ICAgICAgICBUZXh0dXJlIGFsbG9jYXRpb24gaXMgZG9uZSBpbiBDQ1ZpZGVvTGF5ZXJJbXBsIHZp
YSB0aGUKKyAgICAgICAgY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLCBzbyB0aGF0IHRoZSBtZW1v
cnkgdXNhZ2UgY2FuIGJlIHRyYWNrZWQuCisKKyAgICAgICAgV2UgbW92ZSB0aGUgY29weVBsYW5l
VG9UZXh0dXJlcygpIG1ldGhvZCBiYWNrIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAg
ICAgIHRvIENDVmlkZW9MYXllckltcGwsIGFzIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHRleHR1cmUg
ZGF0YSBwb2ludGVyIGluIHRoZQorICAgICAgICBXZWJWaWRlb0ZyYW1lLCBhbmQgd2UgZG8gbm90
IHdhbnQgdG8gZ2l2ZSB0aGlzIHBvaW50ZXIgdG8gdGhlIHF1YWQKKyAgICAgICAgY2xhc3MuIElu
c3RlYWQsIHRoaXMgbWV0aG9kIG1ha2VzIHVzZSBvZiB0aGUgQ0NSZW5kZXJlcidzIFRleHR1cmVD
b3BpZXIKKyAgICAgICAgY2xhc3MgdG8gY29weSB0aGUgcGl4ZWwgZGF0YSBpbnRvIHRoZSB0ZXh0
dXJlLgorCisgICAgICAgIFRleHR1cmVDb3BpZXIgZ2V0cyBhIG5ldyBjb3B5VG9UZXh0dXJlKCkg
bWV0aG9kIHRvIGNvcHkgZnJvbSBtYWluIG1lbW9yeQorICAgICAgICBpbnN0ZWFkIG9mIGZyb20g
YW5vdGhlciBHUFUgdGV4dHVyZS4KKworICAgICAgICBSZWZhY3RvciwgY292ZXJlZCBieSBleGlz
dGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdOYXRpdmVUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3U3RyZWFtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVDb3BpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZWxlcmF0ZWRU
ZXh0dXJlQ29waWVyOjpjb3B5VG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDoKKyAgICAgICAg
KFRleHR1cmVDb3BpZXIpOgorICAgICAgICAoQWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAg
ICAgIChDQ1JlbmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJh
d1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9E
cmF3UXVhZC5oOgorICAgICAgICAoQ0NWaWRlb0RyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVmlkZW9EcmF3UXVhZDo6cGxhbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3
UXVhZDo6ZnJhbWVQcm92aWRlclRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6On5DQ1ZpZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OndpbGxEcmF3SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVy
SW1wbDo6YXBwZW5kUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5l
OjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lOjpmcmVlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvTGF5ZXJJbXBsOjphbGxvY2F0ZVBsYW5lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvTGF5ZXJJbXBsOjpmcmVlUGxhbmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OmZyZWVVbnVzZWRQbGFuZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0xheWVySW1wbDo6ZGlkTG9zZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKEZyYW1lUGxh
bmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6RnJh
bWVQbGFuZSk6CisKIDIwMTItMDYtMDEgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDaGFuZ2Ugb3ZlcnJpZGVTaXplcyB0byBiZSBjb250ZW50LWJveCBpbnN0ZWFk
IG9mIGJvcmRlci1ib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDJiM2E5NTY3YTll
NGE4NjNjNGVkNjM0N2M2OWNjNDExNzY2OWNjYS4uYTFiYzM3NWE2MzdkZTIwYjVhMDE1MGQ0OGJm
OTBhOTE2NzVkMmM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxMi0wNi0wNiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5
ZXIgdHJlZSBhbmQgdmlkZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5k
IFdlYlZpZGVvRnJhbWUgcG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUpOgorICAg
ICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA2LTA1
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGwgQ2hyb21p
dW0gREVQUyBmcm9tIHIxNDA0OTIgdG8gcjE0MDUyOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKaW5kZXgg
NTRhZjE5NjIzZjJlZDZmMDc4ZThlMGI3Yjg4NTZmNGJkN2I5ZDBkZS4uMzg5NmRiZWJiNjhjNzNm
ZGU0OTFlMTZmMGZiOGFhZjJjNmMzNzRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1Bs
YXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAgLTEyNyw3
ICsxMjcsNiBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJGbG9hdFF1YWQuY3BwJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9zcmMvV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5jcHAnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9XZWJTdHJpbmcuY3BwJywKLSAgICAgICAgICAgICdj
aHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAnLAogICAgICAgICBdCiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAppbmRleCBk
YjBhYTdkNTQyODRkZjhkZmZhY2NmZjU0NTc2ZDRmZmMyMmMzNjlmLi43NDc5OWJiNzE3MWNmMjZi
ZDU1NzhlNjRhMTMzZTExODI5YTYyOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaApAQCAtMzgsMTMgKzM4LDE3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogLy8gS2VlcCBpbiBzeW5jIHdpdGggY2hyb21pdW0ncyBtZWRpYTo6VmlkZW9GcmFt
ZTo6Rm9ybWF0LgogY2xhc3MgV2ViVmlkZW9GcmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heFBsYW5lczsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtUkdC
UGxhbmVzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCByZ2JQbGFuZTsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtWVVWUGxhbmVzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB5
UGxhbmU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVQbGFuZTsKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdlBsYW5lOworICAgIGVudW0geworICAgICAgICByZ2JQbGFuZSA9IDAsCisg
ICAgICAgIG51bVJHQlBsYW5lcyA9IDEKKyAgICB9OworICAgIGVudW0geworICAgICAgICB5UGxh
bmUgPSAwLAorICAgICAgICB1UGxhbmUgPSAxLAorICAgICAgICB2UGxhbmUgPSAyLAorICAgICAg
ICBudW1ZVVZQbGFuZXMgPSAzCisgICAgfTsKKyAgICBlbnVtIHsgbWF4UGxhbmVzID0gMyB9Owog
CiAgICAgZW51bSBGb3JtYXQgewogICAgICAgICBGb3JtYXRJbnZhbGlkID0gMCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dlYlZpZGVvRnJhbWUuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Yzg2NjU5MzM2YmNmNWVhMTlhM2YxMmIyMjhhZTRmMWU3MDM2ZmZm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYlZp
ZGVvRnJhbWUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNvbnN0IHVuc2lnbmVkIFdlYlZp
ZGVvRnJhbWU6Om1heFBsYW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBXZWJWaWRlb0ZyYW1lOjpu
dW1SR0JQbGFuZXMgPSAxOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6cmdiUGxhbmUg
PSAwOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6bnVtWVVWUGxhbmVzID0gMzsKLWNv
bnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJhbWU6OnlQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBX
ZWJWaWRlb0ZyYW1lOjp1UGxhbmUgPSAxOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6
dlBsYW5lID0gMjsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDhkZTQ0OWMwMzRkMDhlZDUyNzk3ZmNjZGMyYTViNWY1
MTRkYjM2NzYuLjkzZmNlYmQzMTZlODZhOWMwZDE1OTI5ZTAyNTFmNDc3MDVjNWRjNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtOTY2LDIyICs5NjYsMjIgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFk
KiBxdWFkKQogICAgIGNvbnN0IFZpZGVvWVVWUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvWVVWUHJv
Z3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwog
Ci0gICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgeVRleHR1cmUgPSBxdWFkLT50
ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6eVBsYW5lXTsKLSAgICBjb25zdCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB1VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbV2ViS2l0
OjpXZWJWaWRlb0ZyYW1lOjp1UGxhbmVdOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRl
eHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6
OnZQbGFuZV07CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgeVBsYW5l
ID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjp5UGxhbmVdOworICAgIGNv
bnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUmIHVQbGFuZSA9IHF1YWQtPnBsYW5lcygp
W1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6dVBsYW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpGcmFtZVBsYW5lJiB2UGxhbmUgPSBxdWFkLT5wbGFuZXMoKVtXZWJLaXQ6OldlYlZpZGVv
RnJhbWU6OnZQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRl
eHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlQbGFuZS50
ZXh0dXJlSWQpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1cmUu
bV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVQbGFuZS50ZXh0dXJl
SWQpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRleHR1cmUubV90ZXh0
dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZQbGFuZS50ZXh0dXJlSWQpKTsK
IAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKIAotICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKS53aWR0aCgpOworICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHlQbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlQbGFuZS5zaXplLndpZHRo
KCk7CiAgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYg
ZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgotICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9
IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVG
YWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVBsYW5lLnZpc2libGVTaXplLndpZHRoKCkpIC8g
dVBsYW5lLnNpemUud2lkdGgoKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZv
cm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCks
IHlXaWR0aFNjYWxlRmFjdG9yKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlm
b3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24o
KSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7CiAKQEAgLTEwMjQsMTQgKzEwMjQsMTQgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKGNvbnN0IEND
VmlkZW9EcmF3UXVhZCogcXUKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQShj
b25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgVGV4dHVyZVByb2dyYW0q
IHByb2dyYW0gPSB0ZXh0dXJlUHJvZ3JhbSgpOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlkZW9GcmFt
ZTo6cmdiUGxhbmVdOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxm
bG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKS53aWR0aCgpOwotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHBy
b2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworICAgIGNvbnN0IENDVmlkZW9MYXllcklt
cGw6OkZyYW1lUGxhbmUmIHBsYW5lID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpXZWJWaWRlb0Zy
YW1lOjpyZ2JQbGFuZV07CisgICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0
PGZsb2F0PihwbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHBsYW5lLnNpemUud2lkdGgoKTsK
KyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxl
RmFjdG9yLCBwbGFuZS50ZXh0dXJlSWQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsK
IH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlMkQoY29u
c3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9R
dWFkKHF1YWQsIHRleHR1cmVQcm9ncmFtKCksIDEsIHF1YWQtPmZyYW1lKCktPnRleHR1cmVJZCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CisgICAgZHJhd1NpbmdsZVRleHR1cmVW
aWRlb1F1YWQocXVhZCwgdGV4dHVyZVByb2dyYW0oKSwgMSwgcXVhZC0+ZnJhbWVQcm92aWRlclRl
eHR1cmVJZCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiB9CiAKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1
YWQqIHF1YWQpCkBAIC0xMDQzLDU0ICsxMDQzLDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3U3RyZWFtVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAgICAg
QVNTRVJUKHF1YWQtPm1hdHJpeCgpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4TWF0cml4TG9jYXRpb24o
KSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihxdWFkLT5tYXRyaXgoKSkpKTsKIAotICAg
IGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1YWQtPmZyYW1l
KCktPnRleHR1cmVJZCgpLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9FWFRFUk5B
TF9PRVMpOwotfQotCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1lVG9UZXh0
dXJlcyhjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgY29uc3QgV2ViS2l0OjpX
ZWJWaWRlb0ZyYW1lKiBmcmFtZSA9IHF1YWQtPmZyYW1lKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpCi0gICAgICAgIGNv
cHlQbGFuZVRvVGV4dHVyZShxdWFkLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5lKTsKLQotICAg
IGZvciAodW5zaWduZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lIDwgQ0NWaWRlb0xh
eWVySW1wbDo6TWF4UGxhbmVzOyArK3BsYW5lKSB7Ci0gICAgICAgIENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUqIHRleHR1cmUgPSAmcXVhZC0+dGV4dHVyZXMoKVtwbGFuZV07Ci0gICAgICAgIHRl
eHR1cmUtPm1fdGV4dHVyZS5jbGVhcigpOwotICAgICAgICB0ZXh0dXJlLT5tX3Zpc2libGVTaXpl
ID0gSW50U2l6ZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQq
IHF1YWQsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCi17Ci0gICAgQ0NWaWRlb0xheWVy
SW1wbDo6VGV4dHVyZSYgdGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbaW5kZXhdOwotICAgIFJl
ZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6OmNy
ZWF0ZTNEKG1fY29udGV4dCk7Ci0gICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNj
Q29udGV4dC5nZXQoKSwgbV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7Ci0gICAgR0MzRGVu
dW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwotICAgIEludFNpemUgZGlt
ZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7Ci0KLSAgICB2b2lkKiBtZW0gPSBz
dGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9u
cygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9t
aXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAgICAgIG1lbWNweShtZW0sIHBs
YW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKLSAgICAgICAg
R0xDKGNvbnRleHQoKSwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0
KCktPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWls
cywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKLSAgICAgICAgLy8gdXBsb2FkLiBU
aGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9u
ZQotICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRl
eHR1cmUuCi0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgp
LCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBwbGFuZSkpOwotICAgIH0KKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChx
dWFkLCBwcm9ncmFtLCAxLCBxdWFkLT5mcmFtZVByb3ZpZGVyVGV4dHVyZUlkKCksIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3VmlkZW9RdWFkKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVh
ZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaWYgKCFx
dWFkLT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNvcHlGcmFtZVRvVGV4
dHVyZXMocXVhZCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHN3aXRjaCAocXVhZC0+Zm9ybWF0
KCkpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CiAgICAgICAgIGRy
YXdZVVYocXVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCmluZGV4IGJkOGMzM2E5YTI1MGEwNTJh
NmVkNjBjZGNjOGQ5NzAxMjk2YzBmOTYuLmViZDk2ZGE3N2VmZDY0YmI1NjhmYTVjMjA0ZTUxZjQ1
Y2MzOTQ3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNp
bmNsdWRlICJUZXh0dXJlQ29waWVyLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgdGhlIEdMQygp
IG1hY3JvCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMiw2ICsxMTMsMzAgQEAgdm9pZCBB
Y2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNvcHlUZXh0dXJlKENDR3JhcGhpY3NDb250ZXh0KiBj
Y0NvbnRleHQsIHVuc2lnbmUKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApKTsKIH0KIAordm9pZCBBY2NlbGVyYXRl
ZFRleHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUoQ0NHcmFwaGljc0NvbnRleHQqIGNjQ29udGV4
dCwgY29uc3Qgdm9pZCogc291cmNlUGl4ZWxzLCB1bnNpZ25lZCBkZXN0VGV4dHVyZUlkLCBjb25z
dCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgVFJBQ0VfRVZFTlQoIlRl
eHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUiLCB0aGlzLCAwKTsKKworICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0ID0gY2NDb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJl
IGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlc3RUZXh0dXJlSWQpOwor
CisgICAgdm9pZCogbWFwcGVkUGl4ZWxzID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21p
dW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOworICAgIGlmIChtYXBwZWRQaXhlbHMpIHsK
KyAgICAgICAgbWVtY3B5KG1hcHBlZFBpeGVscywgc291cmNlUGl4ZWxzLCBzaXplLndpZHRoKCkg
KiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0PEV4dGVu
c2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBUZXhTdWJJ
bWFnZTJEQ0hST01JVU0obWFwcGVkUGl4ZWxzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
SWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4
U3ViSW1hZ2UyRAorICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVz
IGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCisgICAgICAgIC8vIGluIHRoZSBjb21t
YW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgc291cmNlUGl4ZWxzKSk7CisgICAgfQorfQorCiB9CiAK
ICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgK
aW5kZXggM2FjMmQxMTkxNGZmYTE1ZjhkZWMyY2FiM2RmNWNkMjgwYTNhNmY5MC4uZjBmYjg0MTJl
NDJmYjM0NGU4NjBlNWIyODNhMWMwNzQ5MTZiMWEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaApAQCAt
NDAsNiArNDAsMTAgQEAgcHVibGljOgogICAgIC8vIHRvIG1hdGNoLCBidXQgfGRlc3RUZXh0dXJl
SWR8IG11c3QgaGF2ZSBhIHJlbmRlcmFibGUgZm9ybWF0LgogICAgIHZpcnR1YWwgdm9pZCBjb3B5
VGV4dHVyZShDQ0dyYXBoaWNzQ29udGV4dCosIHVuc2lnbmVkIHNvdXJjZVRleHR1cmVJZCwgdW5z
aWduZWQgZGVzdFRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYpID0gMDsKIAorICAgIC8vIENvcHkg
dGhlIHBpeGVscyBmcm9tIG1haW4gbWVtb3J5IGludG8gYSB0ZXh0dXJlLgorICAgIC8vIEZJWE1F
OiBXZSBuZWVkIGludGVyZmFjZSB3aXRoIGEgZm9ybWF0IHR5cGUgdGhhdCB3aWxsIGFsc28gd29y
ayBmb3Igc29mdHdhcmUgbW9kZS4KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4dHVyZShDQ0dy
YXBoaWNzQ29udGV4dCosIGNvbnN0IHZvaWQqIHNvdXJjZVBpeGVscywgdW5zaWduZWQgZGVzdFRl
eHR1cmVJZCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCkgPSAwOworCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB+VGV4dHVyZUNvcGllcigpIHsgfQogfTsKQEAgLTU2LDYgKzYwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfkFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcigpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKENDR3JhcGhpY3NDb250ZXh0KiwgdW5zaWduZWQg
c291cmNlVGV4dHVyZUlkLCB1bnNpZ25lZCBkZXN0VGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJik7
CisgICAgdmlydHVhbCB2b2lkIGNvcHlUb1RleHR1cmUoQ0NHcmFwaGljc0NvbnRleHQqLCBjb25z
dCB2b2lkKiBzb3VyY2VQaXhlbHMsIHVuc2lnbmVkIGRlc3RUZXh0dXJlSWQsIGNvbnN0IEludFNp
emUmLCBHQzNEZW51bSBmb3JtYXQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWNjZWxl
cmF0ZWRUZXh0dXJlQ29waWVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9EcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwCmluZGV4IDljY2E3MTQxMmFjZDdmNWJjNjc4Yzg1NGRj
YjJkNWQ1ZTAyYThjMmEuLjRmYTY2Mjc2MjgxM2QxNWRkZmFhYzk1N2Y3OTVjMzQ4NmU4ZWM0MTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9EcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcApAQCAtMjksMTUgKzI5LDE1IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlk
ZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0
ZXh0dXJlcywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQor
UGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRS
ZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lKiBwbGFuZXMsIHVuc2lnbmVkIGZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCkKIHsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0ZXh0dXJl
cywgZnJhbWUsIGZvcm1hdCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWRlb0RyYXdR
dWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHBsYW5lcywgZnJhbWVQcm92aWRlclRleHR1
cmVJZCwgZm9ybWF0KSk7CiB9CiAKLUNDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0RyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgV2ViS2l0OjpXZWJW
aWRlb0ZyYW1lKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQorQ0NWaWRlb0RyYXdRdWFkOjpDQ1Zp
ZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29u
c3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUqIHBsYW5l
cywgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCwgR0MzRGVudW0gZm9ybWF0KQogICAg
IDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlZpZGVvQ29udGVudCwg
cXVhZFJlY3QpCi0gICAgLCBtX3RleHR1cmVzKHRleHR1cmVzKQotICAgICwgbV9mcmFtZShmcmFt
ZSkKKyAgICAsIG1fcGxhbmVzKHBsYW5lcykKKyAgICAsIG1fZnJhbWVQcm92aWRlclRleHR1cmVJ
ZChmcmFtZVByb3ZpZGVyVGV4dHVyZUlkKQogICAgICwgbV9mb3JtYXQoZm9ybWF0KQogICAgICwg
bV9tYXRyaXgoMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKaW5kZXggOWViMzU3ZmM4
NmI1YTQ0OWE5MmNjZWVkMTY1M2M5ZGQ4MmMyNWQzOS4uOTFiODgzNjczMzJkYWViZWExMTQzNjdk
ZDdmMzBkOGRlYjk4MWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKQEAgLTMxLDI5
ICszMSwyNiBAQAogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlZpZGVvRnJh
bWU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDog
cHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3
UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBj
cmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xh
eWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFdlYktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0Rl
bnVtIGZvcm1hdCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVh
dGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVy
SW1wbDo6RnJhbWVQbGFuZSogcGxhbmVzLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4dHVyZUlk
LCBHQzNEZW51bSBmb3JtYXQpOwogCi0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4
dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVzOyB9Ci0gICAgV2ViS2l0OjpXZWJWaWRl
b0ZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICAvLyBBbiBhcnJh
eSBvZiB0ZXh0dXJlcywgd2hlcmUgZWFjaCBpbmRleCBjb3JyZXNwb25kcyB0byBhIHBsYW5lIGlu
IFdlYktpdDo6V2ViVmlkZW9GcmFtZS4KKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5l
KiBwbGFuZXMoKSBjb25zdCB7IHJldHVybiBtX3BsYW5lczsgfQorICAgIHVuc2lnbmVkIGZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUHJvdmlkZXJUZXh0dXJl
SWQ7IH0KICAgICBHQzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQog
ICAgIGNvbnN0IGZsb2F0KiBtYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeDsgfQogCiAg
ICAgdm9pZCBzZXRNYXRyaXgoY29uc3QgZmxvYXQqIG1hdHJpeCkgeyBtX21hdHJpeCA9IG1hdHJp
eDsgfQogCiBwcml2YXRlOgotICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJl
cywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiwgR0MzRGVudW0gZm9ybWF0KTsKKyAgICBDQ1ZpZGVv
RHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRl
b0xheWVySW1wbDo6RnJhbWVQbGFuZSogcGxhbmVzLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4
dHVyZUlkLCBHQzNEZW51bSBmb3JtYXQpOwogCi0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVy
ZSogbV90ZXh0dXJlczsKLSAgICBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIG1fZnJhbWU7CisgICAg
Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSogbV9wbGFuZXM7CisgICAgdW5zaWduZWQgbV9m
cmFtZVByb3ZpZGVyVGV4dHVyZUlkOwogICAgIEdDM0RlbnVtIG1fZm9ybWF0OwogICAgIGNvbnN0
IGZsb2F0KiBtX21hdHJpeDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmlu
ZGV4IDEwNWMxMTlmNGY5NTYwOGE2ODBhNjZiMzk1ZDI2ZWYxMTkyOTVlN2YuLmU3NjliZGU0MGZh
ZjEyZDcxMzk2ODNiYzY1OTM2OGM2MTI3M2UzNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQcm9ncmFtQmlu
ZGluZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiIC8vIEZvciBUZXh0dXJlQWxsb2Nh
dG9yCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
UHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKQEAgLTk2LDggKzk3LDcgQEAg
Q0NWaWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwoKQogICAgICAgICBtX3Byb3ZpZGVy
LT5zZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoMCk7CiAgICAgICAgIG1fcHJvdmlkZXIgPSAw
OwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpCi0g
ICAgICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFyKCk7CisgICAgZnJlZVBsYW5lRGF0
YShsYXllclRyZWVIb3N0SW1wbCgpLT5sYXllclJlbmRlcmVyKCkpOwogfQogCiB2b2lkIENDVmlk
ZW9MYXllckltcGw6OnN0b3BVc2luZ1Byb3ZpZGVyKCkKQEAgLTE0MSwxMyArMTQxLDE0IEBAIHZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXcoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlciwg
Q0NHcmFwaGljc0NvbnRleHQqIGNvCiAgICAgLy8gbG9jayBzaG91bGQgbm90IGNhdXNlIGEgZGVh
ZGxvY2suCiAgICAgbV9wcm92aWRlck11dGV4LmxvY2soKTsKIAotICAgIHdpbGxEcmF3SW50ZXJu
YWwobGF5ZXJSZW5kZXJlcik7CisgICAgd2lsbERyYXdJbnRlcm5hbChsYXllclJlbmRlcmVyLCBj
b250ZXh0KTsKKyAgICBmcmVlVW51c2VkUGxhbmVEYXRhKGxheWVyUmVuZGVyZXIpOwogCiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICBtX3Byb3ZpZGVyTXV0ZXgudW5sb2NrKCk7CiB9CiAKLXZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVyKiBsYXllclJl
bmRlcmVyKQordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjp3aWxsRHJhd0ludGVybmFsKENDUmVuZGVy
ZXIqIGxheWVyUmVuZGVyZXIsIENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKQEAgLTE2OSw5ICsxNzAsMjcgQEAgdm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjp3aWxsRHJhd0ludGVybmFsKENDUmVuZGVyZXIqIGxheWVyUmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXJlc2VydmVUZXh0dXJl
cygqbV9mcmFtZSwgbV9mb3JtYXQsIGxheWVyUmVuZGVyZXIpKSB7CisgICAgaWYgKG1fZnJhbWUt
PnBsYW5lcygpID4gV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFuZXMpIHsKICAgICAgICAg
bV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOwogICAgICAgICBtX2ZyYW1lID0g
MDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYWxsb2NhdGVQbGFuZURhdGEo
bGF5ZXJSZW5kZXJlcikpIHsKKyAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1f
ZnJhbWUpOworICAgICAgICBtX2ZyYW1lID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBXaGVuIHdlIHBhc3MgcXVhZHMgb3V0IG9mIHByb2Nlc3MsIHdlIG5lZWQg
dG8gZG91YmxlLWJ1ZmZlciwgb3IKKyAgICAvLyBvdGhlcndpc2Ugc3luY2hvbml6ZSB1c2Ugb2Yg
dGhlIGhhcmR3YXJlLWRlY29kZXIgdGV4dHVyZSBnaXZlbiB0byB1cworICAgIC8vIGZyb20gdGhl
IFdlYlZpZGVvRnJhbWVQcm92aWRlciB3aGVuIGl0IGlzIHByZXNlbnQuCisKKyAgICBzaXplX3Qg
c29mdHdhcmVQbGFuZUNvdW50ID0gbV9mcmFtZS0+cGxhbmVzKCk7CisgICAgZm9yIChzaXplX3Qg
c29mdHdhcmVQbGFuZUluZGV4ID0gMDsgc29mdHdhcmVQbGFuZUluZGV4IDwgc29mdHdhcmVQbGFu
ZUNvdW50OyArK3NvZnR3YXJlUGxhbmVJbmRleCkgeworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBs
OjpGcmFtZVBsYW5lJiBwbGFuZSA9IG1fZnJhbWVQbGFuZXNbc29mdHdhcmVQbGFuZUluZGV4XTsK
KyAgICAgICAgY29uc3Qgdm9pZCogc29mdHdhcmVQbGFuZVBpeGVscyA9IG1fZnJhbWUtPmRhdGEo
c29mdHdhcmVQbGFuZUluZGV4KTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlci0+dGV4dHVyZUNvcGll
cigpLT5jb3B5VG9UZXh0dXJlKGNvbnRleHQsIHNvZnR3YXJlUGxhbmVQaXhlbHMsIHBsYW5lLnRl
eHR1cmVJZCwgcGxhbmUuc2l6ZSwgcGxhbmUuZm9ybWF0KTsKICAgICB9CiB9CiAKQEAgLTE4Myw3
ICsyMDIsNyBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxl
ciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YQogICAgICAgICByZXR1cm47CiAKICAg
ICBJbnRSZWN0IHF1YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBPd25QdHI8Q0NW
aWRlb0RyYXdRdWFkPiB2aWRlb1F1YWQgPSBDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRR
dWFkU3RhdGUsIHF1YWRSZWN0LCBtX3RleHR1cmVzLCBtX2ZyYW1lLCBtX2Zvcm1hdCk7CisgICAg
T3duUHRyPENDVmlkZW9EcmF3UXVhZD4gdmlkZW9RdWFkID0gQ0NWaWRlb0RyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV9mcmFtZVBsYW5lcywgbV9mcmFtZS0+dGV4
dHVyZUlkKCksIG1fZm9ybWF0KTsKIAogICAgIGlmIChtX2Zvcm1hdCA9PSBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6R0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMpCiAgICAgICAgIHZpZGVvUXVhZC0+c2V0
TWF0cml4KG1fc3RyZWFtVGV4dHVyZU1hdHJpeCk7CkBAIC0xOTksOCArMjE4LDYgQEAgdm9pZCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpkaWREcmF3KCkKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1fZnJhbWUtPnBs
YW5lcygpOyArK3BsYW5lKQotICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVu
cmVzZXJ2ZSgpOwogICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKICAg
ICBtX2ZyYW1lID0gMDsKIApAQCAtMjQzLDM1ICsyNjAsNjMgQEAgSW50U2l6ZSBDQ1ZpZGVvTGF5
ZXJJbXBsOjpjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiBm
cmFtZSwKICAgICByZXR1cm4gSW50U2l6ZSh2aXNpYmxlV2lkdGgsIHZpc2libGVIZWlnaHQpOwog
fQogCi1ib29sIENDVmlkZW9MYXllckltcGw6OnJlc2VydmVUZXh0dXJlcyhjb25zdCBXZWJLaXQ6
OldlYlZpZGVvRnJhbWUmIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQsIENDUmVuZGVyZXIqIGxheWVy
UmVuZGVyZXIpCitib29sIENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmU6OmFsbG9jYXRlRGF0
YShDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQoreworICAgIGlmICh0ZXh0dXJlSWQpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgdGV4dHVyZUlkID0gbGF5ZXJSZW5kZXJlci0+Y29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yKCktPmNyZWF0ZVRleHR1cmUoc2l6ZSwgZm9ybWF0KTsKKyAgICBy
ZXR1cm4gdGV4dHVyZUlkOworfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmU6
OmZyZWVEYXRhKENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKCF0ZXh0dXJl
SWQpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyUmVuZGVyZXItPmNvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvcigpLT5kZWxldGVUZXh0dXJlKHRleHR1cmVJZCwgc2l6ZSwgZm9ybWF0KTsKKyAg
ICB0ZXh0dXJlSWQgPSAwOworfQorCitib29sIENDVmlkZW9MYXllckltcGw6OmFsbG9jYXRlUGxh
bmVEYXRhKENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIpCiB7Ci0gICAgaWYgKGZyYW1lLnBsYW5l
cygpID4gTWF4UGxhbmVzKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW50IG1heFRleHR1
cmVTaXplID0gbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7Ci0g
ICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUucGxhbmVzKCk7ICsrcGxh
bmUpIHsKLSAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKGZyYW1lLnN0cmlkZShw
bGFuZSksIHZpZGVvRnJhbWVEaW1lbnNpb24oZnJhbWUuaGVpZ2h0KCksIHBsYW5lLCBmcmFtZS5m
b3JtYXQoKSkpOwotICAgICAgICAvLyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90IGhhbmRsZSB0aGlz
IGxhcmdlIG9mIGEgdGV4dHVyZSwgcmV0dXJuIGZhbHNlLgotICAgICAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCisgICAgZm9y
ICh1bnNpZ25lZCBwbGFuZUluZGV4ID0gMDsgcGxhbmVJbmRleCA8IG1fZnJhbWUtPnBsYW5lcygp
OyArK3BsYW5lSW5kZXgpIHsKKyAgICAgICAgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYg
cGxhbmUgPSBtX2ZyYW1lUGxhbmVzW3BsYW5lSW5kZXhdOworCisgICAgICAgIEludFNpemUgcmVx
dWlyZWRUZXh0dXJlU2l6ZShtX2ZyYW1lLT5zdHJpZGUocGxhbmVJbmRleCksIHZpZGVvRnJhbWVE
aW1lbnNpb24obV9mcmFtZS0+aGVpZ2h0KCksIHBsYW5lSW5kZXgsIG1fZnJhbWUtPmZvcm1hdCgp
KSk7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIHRlc3QgYWdhaW5zdCBtYXhUZXh0dXJl
U2l6ZSB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCiAgICAgICAgIGlmIChyZXF1
aXJlZFRleHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSA+
IG1heFRleHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgPiBtYXhUZXh0
dXJlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUpIHsKLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1f
dGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1
cmVNYW5hZ2VyKCkpOwotICAgICAgICAgICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1
cmUpCisKKyAgICAgICAgaWYgKHBsYW5lLnNpemUgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSB8fCBw
bGFuZS5mb3JtYXQgIT0gbV9mb3JtYXQpIHsKKyAgICAgICAgICAgIHBsYW5lLmZyZWVEYXRhKGxh
eWVyUmVuZGVyZXIpOworICAgICAgICAgICAgcGxhbmUuc2l6ZSA9IHJlcXVpcmVkVGV4dHVyZVNp
emU7CisgICAgICAgICAgICBwbGFuZS5mb3JtYXQgPSBtX2Zvcm1hdDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghcGxhbmUudGV4dHVyZUlkKSB7CisgICAgICAgICAgICBpZiAoIXBsYW5lLmFs
bG9jYXRlRGF0YShsYXllclJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhlIGltcGxUZXh0dXJlTWFuYWdl
ciBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCBhbmQgcmVjcmVhdGVkIHNpbmNlIHRoZSBsYXN0IGZy
YW1lLCBzbyBwYXNzIHRoZSBuZXcgb25lLgotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9w
IGlmIHRoZSBUZXh0dXJlTWFuYWdlciBpcyBzdGlsbCBhcm91bmQuCi0gICAgICAgICAgICBtX3Rl
eHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKGxheWVyUmVuZGVyZXIt
PmltcGxUZXh0dXJlTWFuYWdlcigpKTsKKyAgICAgICAgICAgIHBsYW5lLnZpc2libGVTaXplID0g
Y29tcHV0ZVZpc2libGVTaXplKCptX2ZyYW1lLCBwbGFuZUluZGV4KTsKICAgICAgICAgfQotICAg
ICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRU
ZXh0dXJlU2l6ZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUg
PSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKLSAgICAgICAgaWYgKCFtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwgZm9ybWF0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZnJlZVBsYW5lRGF0YShDQ1JlbmRlcmVyKiBsYXll
clJlbmRlcmVyKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXZWJLaXQ6OldlYlZp
ZGVvRnJhbWU6Om1heFBsYW5lczsgKytpKQorICAgICAgICBtX2ZyYW1lUGxhbmVzW2ldLmZyZWVE
YXRhKGxheWVyUmVuZGVyZXIpOworfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OmZyZWVVbnVz
ZWRQbGFuZURhdGEoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICB1bnNpZ25lZCBm
aXJzdFVudXNlZFBsYW5lID0gbV9mcmFtZSA/IG1fZnJhbWUtPnBsYW5lcygpIDogMDsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBmaXJzdFVudXNlZFBsYW5lOyBpIDwgV2ViS2l0OjpXZWJWaWRlb0Zy
YW1lOjptYXhQbGFuZXM7ICsraSkKKyAgICAgICAgbV9mcmFtZVBsYW5lc1tpXS5mcmVlRGF0YShs
YXllclJlbmRlcmVyKTsKK30KKwogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRSZWNlaXZlRnJh
bWUoKQogewogICAgIHNldE5lZWRzUmVkcmF3KCk7CkBAIC0yODUsOCArMzMwLDcgQEAgdm9pZCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpkaWRVcGRhdGVNYXRyaXgoY29uc3QgZmxvYXQgbWF0cml4WzE2XSkK
IAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRMb3NlQ29udGV4dCgpCiB7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQotICAgICAgICBtX3RleHR1cmVzW2ld
Lm1fdGV4dHVyZS5jbGVhcigpOworICAgIGZyZWVQbGFuZURhdGEobGF5ZXJUcmVlSG9zdEltcGwo
KS0+bGF5ZXJSZW5kZXJlcigpKTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXROZWVk
c1JlZHJhdygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggMjIxZjYwMGFjZWI4
YTMxOTlmNmQ3ODY4YTRjMWQ2ZGZlYjY4YmVhNi4uZWUxYzBhZmY4ODEzMmM2NGFlMDBlMjYwMzZh
NmNlMmY3NjFkYzRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtMjYsNyAr
MjYsOCBAQAogI2lmbmRlZiBDQ1ZpZGVvTGF5ZXJJbXBsX2gKICNkZWZpbmUgQ0NWaWRlb0xheWVy
SW1wbF9oCiAKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYlZpZGVvRnJhbWVQcm92aWRlci5oPgogCkBAIC02
OSwxMSArNzAsMTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3Rb
M107CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGZsaXBUcmFuc2Zvcm1bMTZdOwogCi0gICAgc3Ry
dWN0IFRleHR1cmUgewotICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsK
LSAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOworICAgIHN0cnVjdCBGcmFtZVBsYW5lIHsK
KyAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOworICAgICAgICBJbnRTaXplIHNpemU7CisgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdDsKKyAgICAgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZTsKKworICAg
ICAgICBGcmFtZVBsYW5lKCkgOiB0ZXh0dXJlSWQoMCkgeyB9CisKKyAgICAgICAgYm9vbCBhbGxv
Y2F0ZURhdGEoQ0NSZW5kZXJlciopOworICAgICAgICB2b2lkIGZyZWVEYXRhKENDUmVuZGVyZXIq
KTsKICAgICB9OwotICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07CiAKIHByaXZhdGU6CiAgICAg
Q0NWaWRlb0xheWVySW1wbChpbnQsIFdlYktpdDo6V2ViVmlkZW9GcmFtZVByb3ZpZGVyKik7CkBA
IC04MSwxOSArODgsMjIgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlz
aWJsZVNpemUoY29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiwgdW5zaWduZWQgcGxhbmUpOwog
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KIAotICAgIHZvaWQgd2lsbERyYXdJbnRlcm5hbChD
Q1JlbmRlcmVyKik7Ci0gICAgYm9vbCByZXNlcnZlVGV4dHVyZXMoY29uc3QgV2ViS2l0OjpXZWJW
aWRlb0ZyYW1lJiwgR0MzRGVudW0gZm9ybWF0LCBDQ1JlbmRlcmVyKik7CisgICAgdm9pZCB3aWxs
RHJhd0ludGVybmFsKENDUmVuZGVyZXIqLCBDQ0dyYXBoaWNzQ29udGV4dCopOworICAgIGJvb2wg
YWxsb2NhdGVQbGFuZURhdGEoQ0NSZW5kZXJlciopOworICAgIHZvaWQgZnJlZVBsYW5lRGF0YShD
Q1JlbmRlcmVyKik7CisgICAgdm9pZCBmcmVlVW51c2VkUGxhbmVEYXRhKENDUmVuZGVyZXIqKTsK
IAogICAgIC8vIEd1YXJkcyB0aGUgZGVzdHJ1Y3Rpb24gb2YgbV9wcm92aWRlciBhbmQgdGhlIGZy
YW1lIHRoYXQgaXQgcHJvdmlkZXMKICAgICBNdXRleCBtX3Byb3ZpZGVyTXV0ZXg7CiAgICAgV2Vi
S2l0OjpXZWJWaWRlb0ZyYW1lUHJvdmlkZXIqIG1fcHJvdmlkZXI7CiAKLSAgICBUZXh0dXJlIG1f
dGV4dHVyZXNbTWF4UGxhbmVzXTsKLQogICAgIGZsb2F0IG1fc3RyZWFtVGV4dHVyZU1hdHJpeFsx
Nl07CiAKICAgICBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIG1fZnJhbWU7CiAgICAgR0MzRGVudW0g
bV9mb3JtYXQ7CisKKyAgICAvLyBFYWNoIGluZGV4IGluIHRoaXMgYXJyYXkgY29ycmVzcG9uZHMg
dG8gYSBwbGFuZSBpbiBXZWJLaXQ6OldlYlZpZGVvRnJhbWUuCisgICAgRnJhbWVQbGFuZSBtX2Zy
YW1lUGxhbmVzW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzXTsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHAKaW5kZXggZTYyMzFkMzRmMTE3YTg2MTk4YTFlZjVmMjY2Y2U4NzZhODg3OWVi
ZS4uNGRmOGJhZTZkZjFlNGQ4ZWY1YmJlODU0YjgxNWZiYzk5ODQ5OGZiZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAKQEAgLTE2NTYsNiArMTY1Niw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgZG9udFVzZU9sZFJlc291cmNlc0FmdGVyTG9zdENvbnRleHQpCiAgICAgdmlkZW9MYXllci0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAgICAgdmlkZW9MYXllci0+c2V0Q29u
dGVudEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHZpZGVvTGF5ZXItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKyAgICB2aWRlb0xheWVyLT5zZXRMYXllclRyZWVIb3N0SW1wbChtX2hvc3RJ
bXBsLmdldCgpKTsKICAgICByb290TGF5ZXItPmFkZENoaWxkKHZpZGVvTGF5ZXIucmVsZWFzZSgp
KTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290TGF5ZXIucmVsZWFzZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVz
dENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0
Q29tbW9uLmgKaW5kZXggOTgyNGQ4YzA2NGZkNDA3YWEyN2NhZWUzOGQwNzA5MGU3ZmIyZGNlMC4u
ZjE1MjAxYTg0ZDFlM2Q2ZGI1YzMzZTkwMjE1YzM4NzhhMmVlMDZiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKQEAg
LTE1Nyw2ICsxNTcsNyBAQCBwdWJsaWM6CiBjbGFzcyBGYWtlVGV4dHVyZUNvcGllciA6IHB1Ymxp
YyBXZWJDb3JlOjpUZXh0dXJlQ29waWVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29w
eVRleHR1cmUoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQqLCB1bnNpZ25lZCwgdW5zaWduZWQs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4
dHVyZShXZWJDb3JlOjpDQ0dyYXBoaWNzQ29udGV4dCosIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSB7IH0KIH07CiAKIGNsYXNzIEZha2VU
ZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZVVwbG9hZGVyIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVt
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCmluZGV4IGE1NjUxNDZhNWQ0OTE5NjViN2IxYWQyNWQ2ZmU2OWM1MTUxNTQw
ZjkuLjA0MmFhMTE5NWNlYzQxZTY3NmYwNTkwMTdlYWU3NWVmZWRiYjg0NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21p
dW1UZXN0LmNwcApAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiBjbGFzcyBNb2NrVGV4dHVyZUNv
cGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsKIHB1YmxpYzoKICAgICBNT0NLX01FVEhPRDQo
Y29weVRleHR1cmUsIHZvaWQoQ0NHcmFwaGljc0NvbnRleHQqLCB1bnNpZ25lZCwgdW5zaWduZWQs
IGNvbnN0IEludFNpemUmKSk7CisgICAgTU9DS19NRVRIT0Q1KGNvcHlUb1RleHR1cmUsIHZvaWQo
Q0NHcmFwaGljc0NvbnRleHQqLCBjb25zdCB2b2lkKiwgdW5zaWduZWQsIGNvbnN0IEludFNpemUm
LCBHQzNEZW51bSkpOwogfTsKIAogY2xhc3MgTW9ja1RleHR1cmVVcGxvYWRlciA6IHB1YmxpYyBU
ZXh0dXJlVXBsb2FkZXIgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146140</attachid>
            <date>2012-06-06 16:24:22 -0700</date>
            <delta_ts>2012-06-11 13:48:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88363-20120606192421.patch</filename>
            <type>text/plain</type>
            <size>35024</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0YThkMGExMWNhMmMy
MThkYzkxZWFjY2NlNTk0YmU2MDIwYTU5ZDY5Li5lYTJhNDQyMDE1MDI4MTk1NzJlZDE2MjkwYjQ0
N2U1ZjY0ODM2ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNiAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5ZXIgdHJlZSBhbmQgdmlk
ZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5kIFdlYlZpZGVvRnJhbWUg
cG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGlj
L1dlYlZpZGVvRnJhbWUuaDoKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5j
cHA6IFJlbW92ZWQuCisKIDIwMTItMDYtMDEgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU29mdHdhcmUgY29tcG9zaXRvciBpbml0aWFs
aXphdGlvbiBhbmQgYmFzZSBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZkZjE1M2Q4M2Q3ZWRjNjM5
NmEzZmNjM2JiMTA5ZWJlZGZkMmU2Mi4uMTgwMmNlNmMwZTRiMWJkMzdmZGNlMDA1ZjNhN2Q3ZjVm
Y2VkMTljMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTA2LTA2ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2VwYXJh
dGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBmcm9tIHRoZSBsYXllciB0cmVlIGFuZCB2aWRlbyBwcm92
aWRlciBieSByZW1vdmluZyBNYW5hZ2VkVGV4dHVyZSBhbmQgV2ViVmlkZW9GcmFtZSBwb2ludGVy
cyBmcm9tIHRoZSBxdWFkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODM2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENDVmlkZW9EcmF3UXVhZCBzaG91bGQgbm90IGNvbnRhaW4gYW55IHBvaW50ZXJzIHNv
IHdlIGFyZSBhYmxlIHRvCisgICAgICAgIHNlcmlhbGl6ZSBpdCBhY3Jvc3MgcHJvY2VzcyBib3Vu
ZGFyaWVzLiBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlCisgICAgICAgIE1hbmFnZWRUZXh0dXJlIHBv
aW50ZXJzIGZyb20gdGhlIHF1YWQgY2xhc3MsIHJlcGxhY2luZyB0aGVtIHdpdGgKKyAgICAgICAg
dGV4dHVyZSBpZHMsIGFuZCByZW1vdmVzIHRoZSBXZWJWaWRlb0ZyYW1lKiBmcm9tIHRoZSBxdWFk
LCByZXBsYWNpbmcKKyAgICAgICAgaXQgd2l0aCB0aGUgZnJhbWUgcHJvdmlkZXIncyB0ZXh0dXJl
IGlkIGluY2x1ZGVkIGluIHRoZSBXZWJWaWRlb0ZyYW1lCisgICAgICAgIHN0cnVjdHVyZS4KKwor
ICAgICAgICBUZXh0dXJlIGFsbG9jYXRpb24gaXMgZG9uZSBpbiBDQ1ZpZGVvTGF5ZXJJbXBsIHZp
YSB0aGUKKyAgICAgICAgY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLCBzbyB0aGF0IHRoZSBtZW1v
cnkgdXNhZ2UgY2FuIGJlIHRyYWNrZWQuCisKKyAgICAgICAgV2UgbW92ZSB0aGUgY29weVBsYW5l
VG9UZXh0dXJlcygpIG1ldGhvZCBiYWNrIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAg
ICAgIHRvIENDVmlkZW9MYXllckltcGwsIGFzIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHRleHR1cmUg
ZGF0YSBwb2ludGVyIGluIHRoZQorICAgICAgICBXZWJWaWRlb0ZyYW1lLCBhbmQgd2UgZG8gbm90
IHdhbnQgdG8gZ2l2ZSB0aGlzIHBvaW50ZXIgdG8gdGhlIHF1YWQKKyAgICAgICAgY2xhc3MuIElu
c3RlYWQsIHRoaXMgbWV0aG9kIG1ha2VzIHVzZSBvZiB0aGUgTGF5ZXJUZXh0dXJlU3ViSW1hZ2Ug
Y2xhc3MKKyAgICAgICAgdG8gY29weSB0aGUgcGl4ZWwgZGF0YSBpbnRvIHRoZSB0ZXh0dXJlLgor
CisgICAgICAgIExheWVyVGV4dHVyZVN1YkltYWdlIGlzIHVwZGF0ZWQgdG8gYWxsb3cgbm9uLTRi
eXRlIHRleHR1cmUgZm9ybWF0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdOYXRpdmVUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoVGV4U3ViSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhNYXBUZXhTdWJJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdR
dWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0RyYXdRdWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaDoKKyAg
ICAgICAgKENDVmlkZW9EcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1
YWQ6OnBsYW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmZyYW1lUHJv
dmlkZXJUZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1w
bDo6fkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1w
bDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6d2lsbERy
YXdJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjphcHBlbmRR
dWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWREcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmU6OmFsbG9jYXRlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllcklt
cGw6OkZyYW1lUGxhbmU6OmZyZWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OmFsbG9jYXRlUGxhbmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OmNvcHlQbGFuZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1w
bDo6ZnJlZVBsYW5lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpm
cmVlVW51c2VkUGxhbmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6
OmRpZExvc2VDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6CisgICAgICAgIChGcmFtZVBsYW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmU6OkZyYW1lUGxhbmUpOgorCiAyMDEy
LTA2LTAxICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2hhbmdl
IG92ZXJyaWRlU2l6ZXMgdG8gYmUgY29udGVudC1ib3ggaW5zdGVhZCBvZiBib3JkZXItYm94CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDAyYjNhOTU2N2E5ZTRhODYzYzRlZDYzNDdjNjlj
YzQxMTc2NjljY2EuLmExYmMzNzVhNjM3ZGUyMGI1YTAxNTBkNDhiZjkwYTkxNjc1ZDJjNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDYtMDYgIERh
bmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
ZXBhcmF0ZSBDQ1ZpZGVvRHJhd1F1YWQgYW5kIGZyb20gdGhlIGxheWVyIHRyZWUgYW5kIHZpZGVv
IHByb3ZpZGVyIGJ5IHJlbW92aW5nIE1hbmFnZWRUZXh0dXJlIGFuZCBXZWJWaWRlb0ZyYW1lIHBv
aW50ZXJzIGZyb20gdGhlIHF1YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg4MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAg
ICogdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkZha2VUZXh0dXJlQ29waWVyOjpjb3B5VG9UZXh0dXJlKToKKyAgICAgICAgKiB0ZXN0cy9DYW52
YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcDoKKwogMjAxMi0wNi0wNSAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSb2xsIENocm9taXVtIERFUFMgZnJvbSByMTQw
NDkyIHRvIHIxNDA1MjguCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lw
aSBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCmluZGV4IDU0YWYxOTYyM2YyZWQ2ZjA3
OGU4ZTBiN2I4ODU2ZjRiZDdiOWQwZGUuLjM4OTZkYmViYjY4YzczZmRlNDkxZTE2ZjBmYjhhYWYy
YzZjMzc0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCkBAIC0xMjcsNyArMTI3LDYgQEAKICAgICAg
ICAgICAgICdjaHJvbWl1bS9zcmMvV2ViRmxvYXRRdWFkLmNwcCcsCiAgICAgICAgICAgICAnY2hy
b21pdW0vc3JjL1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuY3BwJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9zcmMvV2ViU3RyaW5nLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYlZp
ZGVvRnJhbWUuY3BwJywKICAgICAgICAgXQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVmlkZW9GcmFtZS5oIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmgKaW5kZXggZGIwYWE3ZDU0Mjg0ZGY4ZGZm
YWNjZmY1NDU3NmQ0ZmZjMjJjMzY5Zi4uNzQ3OTliYjcxNzFjZjI2YmQ1NTc4ZTY0YTEzM2UxMTgy
OWE2Mjk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJW
aWRlb0ZyYW1lLmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJWaWRl
b0ZyYW1lLmgKQEAgLTM4LDEzICszOCwxNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIC8vIEtlZXAg
aW4gc3luYyB3aXRoIGNocm9taXVtJ3MgbWVkaWE6OlZpZGVvRnJhbWU6OkZvcm1hdC4KIGNsYXNz
IFdlYlZpZGVvRnJhbWUgewogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhQ
bGFuZXM7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVJHQlBsYW5lczsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgcmdiUGxhbmU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bVlVVlBsYW5lczsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgeVBsYW5lOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB1UGxhbmU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZQbGFu
ZTsKKyAgICBlbnVtIHsKKyAgICAgICAgcmdiUGxhbmUgPSAwLAorICAgICAgICBudW1SR0JQbGFu
ZXMgPSAxCisgICAgfTsKKyAgICBlbnVtIHsKKyAgICAgICAgeVBsYW5lID0gMCwKKyAgICAgICAg
dVBsYW5lID0gMSwKKyAgICAgICAgdlBsYW5lID0gMiwKKyAgICAgICAgbnVtWVVWUGxhbmVzID0g
MworICAgIH07CisgICAgZW51bSB7IG1heFBsYW5lcyA9IDMgfTsKIAogICAgIGVudW0gRm9ybWF0
IHsKICAgICAgICAgRm9ybWF0SW52YWxpZCA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vc3JjL1dlYlZpZGVvRnJhbWUuY3BwIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3NyYy9XZWJWaWRlb0ZyYW1lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGM4NjY1OTMzNmJjZjVlYTE5YTNmMTJiMjI4YWU0ZjFlNzAzNmZmZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0v
c3JjL1dlYlZpZGVvRnJhbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jb25zdCB1bnNpZ25lZCBXZWJWaWRlb0ZyYW1lOjptYXhQbGFu
ZXMgPSAzOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6bnVtUkdCUGxhbmVzID0gMTsK
LWNvbnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJhbWU6OnJnYlBsYW5lID0gMDsKLWNvbnN0IHVuc2ln
bmVkIFdlYlZpZGVvRnJhbWU6Om51bVlVVlBsYW5lcyA9IDM7Ci1jb25zdCB1bnNpZ25lZCBXZWJW
aWRlb0ZyYW1lOjp5UGxhbmUgPSAwOwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6dVBs
YW5lID0gMTsKLWNvbnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJhbWU6OnZQbGFuZSA9IDI7Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAppbmRleCA4ZGU0NDljMDM0ZDA4ZWQ1Mjc5N2ZjY2RjMmE1YjVmNTE0ZGIzNjc2Li45M2ZjZWJk
MzE2ZTg2YTljMGQxNTkyOWUwMjUxZjQ3NzA1YzVkYzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTk2NiwyMiArOTY2LDIyIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKICAgICBjb25z
dCBWaWRlb1lVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRlb1lVVlByb2dyYW0oKTsKICAgICBBU1NF
UlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKIAotICAgIGNvbnN0IENDVmlk
ZW9MYXllckltcGw6OlRleHR1cmUmIHlUZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6
OldlYlZpZGVvRnJhbWU6OnlQbGFuZV07Ci0gICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4
dHVyZSYgdVRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6
dVBsYW5lXTsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB2VGV4dHVyZSA9
IHF1YWQtPnRleHR1cmVzKClbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjp2UGxhbmVdOworICAgIGNv
bnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUmIHlQbGFuZSA9IHF1YWQtPnBsYW5lcygp
W1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6eVBsYW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpGcmFtZVBsYW5lJiB1UGxhbmUgPSBxdWFkLT5wbGFuZXMoKVtXZWJLaXQ6OldlYlZpZGVv
RnJhbWU6OnVQbGFuZV07CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYg
dlBsYW5lID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjp2UGxhbmVdOwog
CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMSkpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLm1fdGV4dHVyZS0+
dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5UGxhbmUudGV4dHVyZUlkKSk7CiAgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMikpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVy
ZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1UGxhbmUudGV4dHVyZUlkKSk7CiAgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMykpOwotICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkp
KTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB2UGxhbmUudGV4dHVyZUlkKSk7CiAKICAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAKLSAgICBm
bG9hdCB5V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5VGV4dHVyZS5tX3Zp
c2libGVTaXplLndpZHRoKCkpIC8geVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsK
KyAgICBmbG9hdCB5V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5UGxhbmUu
dmlzaWJsZVNpemUud2lkdGgoKSkgLyB5UGxhbmUuc2l6ZS53aWR0aCgpOwogICAgIC8vIEFyYml0
cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlk
ZW50aWNhbC4KLSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9h
dD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+
c2l6ZSgpLndpZHRoKCk7CisgICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHVQbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVQbGFuZS5zaXplLndpZHRo
KCk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkueVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB5V2lkdGhTY2FsZUZhY3Rv
cikpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPnZl
cnRleFNoYWRlcigpLnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2V2lkdGhTY2FsZUZh
Y3RvcikpOwogCkBAIC0xMDI0LDE0ICsxMDI0LDE0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0RyYXdR
dWFkKiBxdWFkKQogewogICAgIGNvbnN0IFRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gdGV4dHVy
ZVByb2dyYW0oKTsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJl
ID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnJnYlBsYW5lXTsKLSAg
ICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92
aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsK
LSAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxl
RmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJEKTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lJiBw
bGFuZSA9IHF1YWQtPnBsYW5lcygpW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6cmdiUGxhbmVdOwor
ICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4ocGxhbmUudmlz
aWJsZVNpemUud2lkdGgoKSkgLyBwbGFuZS5zaXplLndpZHRoKCk7CisgICAgZHJhd1NpbmdsZVRl
eHR1cmVWaWRlb1F1YWQocXVhZCwgcHJvZ3JhbSwgd2lkdGhTY2FsZUZhY3RvciwgcGxhbmUudGV4
dHVyZUlkLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TmF0aXZlVGV4dHVyZTJEKGNvbnN0IENDVmlkZW9EcmF3UXVh
ZCogcXVhZCkKIHsKLSAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCB0ZXh0dXJl
UHJvZ3JhbSgpLCAxLCBxdWFkLT5mcmFtZSgpLT50ZXh0dXJlSWQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQpOworICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHRl
eHR1cmVQcm9ncmFtKCksIDEsIHF1YWQtPmZyYW1lUHJvdmlkZXJUZXh0dXJlSWQoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1N0cmVhbVRleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQpAQCAtMTA0
Myw1NCArMTA0MywxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1N0cmVhbVRl
eHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAgIEFTU0VSVChxdWFkLT5tYXRy
aXgoKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4NGZ2KHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLnRleE1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCBjb25z
dF9jYXN0PGZsb2F0Kj4ocXVhZC0+bWF0cml4KCkpKSk7CiAKLSAgICBkcmF3U2luZ2xlVGV4dHVy
ZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCAxLCBxdWFkLT5mcmFtZSgpLT50ZXh0dXJlSWQoKSwg
RXh0ZW5zaW9uczNEQ2hyb21pdW06OkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTKTsKLX0KLQotYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgQ0NWaWRl
b0RyYXdRdWFkKiBxdWFkKQotewotICAgIGNvbnN0IFdlYktpdDo6V2ViVmlkZW9GcmFtZSogZnJh
bWUgPSBxdWFkLT5mcmFtZSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5l
IDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKQotICAgICAgICBjb3B5UGxhbmVUb1RleHR1cmUo
cXVhZCwgZnJhbWUtPmRhdGEocGxhbmUpLCBwbGFuZSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIHBs
YW5lID0gZnJhbWUtPnBsYW5lcygpOyBwbGFuZSA8IENDVmlkZW9MYXllckltcGw6Ok1heFBsYW5l
czsgKytwbGFuZSkgewotICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJl
ID0gJnF1YWQtPnRleHR1cmVzKClbcGxhbmVdOwotICAgICAgICB0ZXh0dXJlLT5tX3RleHR1cmUu
Y2xlYXIoKTsKLSAgICAgICAgdGV4dHVyZS0+bV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
b3B5UGxhbmVUb1RleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkLCBjb25zdCB2b2lk
KiBwbGFuZSwgaW50IGluZGV4KQotewotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHRl
eHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW2luZGV4XTsKLSAgICBSZWZQdHI8Q0NHcmFwaGljc0Nv
bnRleHQ+IGNjQ29udGV4dCA9IENDR3JhcGhpY3NDb250ZXh0OjpjcmVhdGUzRChtX2NvbnRleHQp
OwotICAgIHRleHR1cmUubV90ZXh0dXJlLT5iaW5kVGV4dHVyZShjY0NvbnRleHQuZ2V0KCksIG1f
aW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwotICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1
cmUubV90ZXh0dXJlLT5mb3JtYXQoKTsKLSAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJl
Lm1fdGV4dHVyZS0+c2l6ZSgpOwotCi0gICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5z
aW9uczNEQ2hyb21pdW0qPihjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGlt
ZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSk7
Ci0gICAgaWYgKG1lbSkgewotICAgICAgICBtZW1jcHkobWVtLCBwbGFuZSwgZGltZW5zaW9ucy53
aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0KCksIHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dCgpLT5nZXRFeHRlbnNpb25z
KCkpLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtZW0pKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBJZiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNs
b3dlciB0ZXhTdWJJbWFnZTJECi0gICAgICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRo
ZSBjb3BpZXMgYXMgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBvbmUKLSAgICAgICAgLy8gaW4g
dGhlIGNvbW1hbmQgYnVmZmVyIGFuZCBhbm90aGVyIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWln
aHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGxhbmUpKTsK
LSAgICB9CisgICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQocXVhZCwgcHJvZ3JhbSwgMSwg
cXVhZC0+ZnJhbWVQcm92aWRlclRleHR1cmVJZCgpLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xf
VEVYVFVSRV9FWFRFUk5BTF9PRVMpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1ZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAotICAgIGlmICghcXVhZC0+ZnJhbWUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjb3B5RnJhbWVUb1RleHR1cmVzKHF1YWQpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBzd2l0Y2ggKHF1YWQtPmZvcm1hdCgpKSB7CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgogICAgICAgICBkcmF3WVVWKHF1YWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlU3ViSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCmluZGV4IDVkOTEyZWFlYzY5ZTY0NDMzODkx
YzQyNTg0MjllMmE1MDFjMzAxNTkuLjRiZWE5MDQyZjgyZjQ1NzQ4ZjAwM2UzNDY2ZGI2M2RiNjM0
NDBhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgogCiAjaW5jbHVkZSAiRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIg
Ly8gRm9yIEdMQygpIG1hY3JvCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNj
L0NDR3JhcGhpY3NDb250ZXh0LmgiCiAKQEAgLTkzLDcgKzk0LDcgQEAgdm9pZCBMYXllclRleHR1
cmVTdWJJbWFnZTo6dXBsb2FkV2l0aFRleFN1YkltYWdlKGNvbnN0IHVpbnQ4X3QqIGltYWdlLCBj
b25zdCBJbnQKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3
YXJlIGNvbXBvc2l0aW5nLgogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNvbnRleHQzZC0+
dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3Qu
eCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBm
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbFNvdXJjZSk7Cisg
ICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qu
d2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKSk7CiB9CiAKIHZvaWQgTGF5ZXJUZXh0dXJlU3ViSW1h
Z2U6OnVwbG9hZFdpdGhNYXBUZXhTdWJJbWFnZShjb25zdCB1aW50OF90KiBpbWFnZSwgY29uc3Qg
SW50UmVjdCYgaW1hZ2VSZWN0LApAQCAtMTE5LDE3ICsxMjAsMjQgQEAgdm9pZCBMYXllclRleHR1
cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKGNvbnN0IHVpbnQ4X3QqIGltYWdl
LCBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgdW5zaWduZWQgaW50IGNvbXBv
bmVudHNQZXJQaXhlbDsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAg
aWYgKCFHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRzUGVyUGl4
ZWwsICZieXRlc1BlckNvbXBvbmVudCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoaW1hZ2VSZWN0LndpZHRoKCkgPT0g
c291cmNlUmVjdC53aWR0aCgpICYmICFvZmZzZXQueCgpKQotICAgICAgICBtZW1jcHkocGl4ZWxE
ZXN0LCAmaW1hZ2VbNCAqIG9mZnNldC55KCkgKiBpbWFnZVJlY3Qud2lkdGgoKV0sIGltYWdlUmVj
dC53aWR0aCgpICogZGVzdFJlY3QuaGVpZ2h0KCkgKiA0KTsKKyAgICAgICAgbWVtY3B5KHBpeGVs
RGVzdCwgJmltYWdlW29mZnNldC55KCkgKiBpbWFnZVJlY3Qud2lkdGgoKSAqIGNvbXBvbmVudHNQ
ZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50XSwgaW1hZ2VSZWN0LndpZHRoKCkgKiBkZXN0UmVj
dC5oZWlnaHQoKSAqIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50KTsKICAg
ICBlbHNlIHsKICAgICAgICAgLy8gU3RyaWRlcyBub3QgZXF1YWwsIHNvIGRvIGEgcm93LWJ5LXJv
dyBtZW1jcHkgZnJvbSB0aGUKICAgICAgICAgLy8gcGFpbnQgcmVzdWx0cyBpbnRvIHRoZSBwaXhl
bERlc3QKICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGVzdFJlY3QuaGVpZ2h0KCk7
ICsrcm93KQotICAgICAgICAgICAgbWVtY3B5KCZwaXhlbERlc3RbZGVzdFJlY3Qud2lkdGgoKSAq
IDQgKiByb3ddLAorICAgICAgICAgICAgbWVtY3B5KCZwaXhlbERlc3RbZGVzdFJlY3Qud2lkdGgo
KSAqIHJvdyAqIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50XSwKICAgICAg
ICAgICAgICAgICAgICAmaW1hZ2VbNCAqIChvZmZzZXQueCgpICsgKG9mZnNldC55KCkgKyByb3cp
ICogaW1hZ2VSZWN0LndpZHRoKCkpXSwKLSAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0
aCgpICogNCk7CisgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIGNvbXBvbmVu
dHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50KTsKICAgICB9Ci0gICAgZXh0ZW5zaW9ucy0+
dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0ocGl4ZWxEZXN0KTsKKyAgICBHTEMoY29udGV4dDNk
LCBleHRlbnNpb25zLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShwaXhlbERlc3QpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAK
aW5kZXggOWNjYTcxNDEyYWNkN2Y1YmM2NzhjODU0ZGNiMmQ1ZDVlMDJhOGMyYS4uNGZhNjYyNzYy
ODEzZDE1ZGRmYWFjOTU3Zjc5NWMzNDg2ZThlYzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJh
d1F1YWQuY3BwCkBAIC0yOSwxNSArMjksMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJl
Y3QsIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzLCBXZWJLaXQ6OldlYlZpZGVv
RnJhbWUqIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQpCitQYXNzT3duUHRyPENDVmlkZW9EcmF3UXVh
ZD4gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6OkZy
YW1lUGxhbmUqIHBsYW5lcywgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCwgR0MzRGVu
dW0gZm9ybWF0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWRlb0RyYXdRdWFkKHNo
YXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRleHR1cmVzLCBmcmFtZSwgZm9ybWF0KSk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ZpZGVvRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFk
UmVjdCwgcGxhbmVzLCBmcmFtZVByb3ZpZGVyVGV4dHVyZUlkLCBmb3JtYXQpKTsKIH0KIAotQ0NW
aWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNo
YXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUqIHRleHR1cmVzLCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIGZyYW1lLCBHQzNEZW51
bSBmb3JtYXQpCitDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NW
aWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSogcGxhbmVzLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVy
VGV4dHVyZUlkLCBHQzNEZW51bSBmb3JtYXQpCiAgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRT
dGF0ZSwgQ0NEcmF3UXVhZDo6VmlkZW9Db250ZW50LCBxdWFkUmVjdCkKLSAgICAsIG1fdGV4dHVy
ZXModGV4dHVyZXMpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbGFuZXMocGxhbmVz
KQorICAgICwgbV9mcmFtZVByb3ZpZGVyVGV4dHVyZUlkKGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQp
CiAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCiAgICAgLCBtX21hdHJpeCgwKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0Ry
YXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvRHJhd1F1YWQuaAppbmRleCA5ZWIzNTdmYzg2YjVhNDQ5YTkyY2NlZWQxNjUzYzlkZDgy
YzI1ZDM5Li45MWI4ODM2NzMzMmRhZWJlYTExNDM2N2RkN2YzMGQ4ZGViOTgxZWFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
RHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaApAQCAtMzEsMjkgKzMxLDI2IEBACiAjaW5jbHVkZSAiY2Mv
Q0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKLW5hbWVz
cGFjZSBXZWJLaXQgewotY2xhc3MgV2ViVmlkZW9GcmFtZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDQ1ZpZGVvRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3UXVhZCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NWaWRlb0RyYXdRdWFkKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJl
cywgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiwgR0MzRGVudW0gZm9ybWF0KTsKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lKiBwbGFuZXMs
IHVuc2lnbmVkIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCk7CiAKLSAg
ICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dHVyZXM7IH0KLSAgICBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIGZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQorICAgIC8vIEFuIGFycmF5IG9mIHRleHR1cmVzLCB3aGVyZSBlYWNo
IGluZGV4IGNvcnJlc3BvbmRzIHRvIGEgcGxhbmUgaW4gV2ViS2l0OjpXZWJWaWRlb0ZyYW1lLgor
ICAgIENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUqIHBsYW5lcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGxhbmVzOyB9CisgICAgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVQcm92aWRlclRleHR1cmVJZDsgfQogICAgIEdDM0RlbnVtIGZvcm1h
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CiAgICAgY29uc3QgZmxvYXQqIG1hdHJpeCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4OyB9CiAKICAgICB2b2lkIHNldE1hdHJpeChjb25zdCBm
bG9hdCogbWF0cml4KSB7IG1fbWF0cml4ID0gbWF0cml4OyB9CiAKIHByaXZhdGU6Ci0gICAgQ0NW
aWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIEND
VmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzLCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUq
LCBHQzNEZW51bSBmb3JtYXQpOworICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lKiBw
bGFuZXMsIHVuc2lnbmVkIGZyYW1lUHJvdmlkZXJUZXh0dXJlSWQsIEdDM0RlbnVtIGZvcm1hdCk7
CiAKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiBtX3RleHR1cmVzOwotICAgIFdlYktp
dDo6V2ViVmlkZW9GcmFtZSogbV9mcmFtZTsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBs
YW5lKiBtX3BsYW5lczsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lUHJvdmlkZXJUZXh0dXJlSWQ7CiAg
ICAgR0MzRGVudW0gbV9mb3JtYXQ7CiAgICAgY29uc3QgZmxvYXQqIG1fbWF0cml4OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggMTA1YzExOWY0Zjk1NjA4YTY4MGE2
NmIzOTVkMjZlZjExOTI5NWU3Zi4uOTkwZWEwOGZiMTUwMDU4ZDU3Zjk0MzkzNGU4NzZlYmJlYTBh
ZjZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTMyLDggKzMyLDEw
IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgi
IC8vIEZvciBUZXh0dXJlQWxsb2NhdG9yCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIu
aCIKQEAgLTk2LDggKzk4LDcgQEAgQ0NWaWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwo
KQogICAgICAgICBtX3Byb3ZpZGVyLT5zZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoMCk7CiAg
ICAgICAgIG1fcHJvdmlkZXIgPSAwOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgTWF4UGxhbmVzOyArK2kpCi0gICAgICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFy
KCk7CisgICAgZnJlZVBsYW5lRGF0YShsYXllclRyZWVIb3N0SW1wbCgpLT5sYXllclJlbmRlcmVy
KCkpOwogfQogCiB2b2lkIENDVmlkZW9MYXllckltcGw6OnN0b3BVc2luZ1Byb3ZpZGVyKCkKQEAg
LTE0MSwxMyArMTQyLDE0IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXcoQ0NSZW5k
ZXJlciogbGF5ZXJSZW5kZXJlciwgQ0NHcmFwaGljc0NvbnRleHQqIGNvCiAgICAgLy8gbG9jayBz
aG91bGQgbm90IGNhdXNlIGEgZGVhZGxvY2suCiAgICAgbV9wcm92aWRlck11dGV4LmxvY2soKTsK
IAotICAgIHdpbGxEcmF3SW50ZXJuYWwobGF5ZXJSZW5kZXJlcik7CisgICAgd2lsbERyYXdJbnRl
cm5hbChsYXllclJlbmRlcmVyLCBjb250ZXh0KTsKKyAgICBmcmVlVW51c2VkUGxhbmVEYXRhKGxh
eWVyUmVuZGVyZXIpOwogCiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICBtX3Byb3ZpZGVyTXV0
ZXgudW5sb2NrKCk7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5h
bChDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjp3aWxs
RHJhd0ludGVybmFsKENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIsIENDR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKQEAg
LTE2OSw5ICsxNzEsMjIgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjp3aWxsRHJhd0ludGVybmFs
KENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoIXJlc2VydmVUZXh0dXJlcygqbV9mcmFtZSwgbV9mb3JtYXQsIGxheWVyUmVuZGVyZXIp
KSB7CisgICAgaWYgKG1fZnJhbWUtPnBsYW5lcygpID4gV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjpt
YXhQbGFuZXMpIHsKICAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUp
OwogICAgICAgICBtX2ZyYW1lID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghYWxsb2NhdGVQbGFuZURhdGEobGF5ZXJSZW5kZXJlcikpIHsKKyAgICAgICAgbV9wcm92aWRl
ci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOworICAgICAgICBtX2ZyYW1lID0gMDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY29weVBsYW5lRGF0YShsYXllclJlbmRlcmVy
LCBjb250ZXh0KSkgeworICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUobV9mcmFt
ZSk7CisgICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICByZXR1cm47CiAgICAgfQogfQogCkBA
IC0xODIsOCArMTk3LDExIEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NR
dWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhCiAgICAgaWYgKCFtX2Zy
YW1lKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBwYXNzIHF1YWRz
IG91dCBvZiBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRvdWJsZS1idWZmZXIsIG9yCisgICAgLy8gb3Ro
ZXJ3aXNlIHN5bmNob25pemUgdXNlIG9mIGFsbCB0ZXh0dXJlcyBpbiB0aGUgcXVhZC4KKwogICAg
IEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIE93blB0cjxDQ1Zp
ZGVvRHJhd1F1YWQ+IHZpZGVvUXVhZCA9IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZSwgcXVhZFJlY3QsIG1fdGV4dHVyZXMsIG1fZnJhbWUsIG1fZm9ybWF0KTsKKyAgICBP
d25QdHI8Q0NWaWRlb0RyYXdRdWFkPiB2aWRlb1F1YWQgPSBDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0
ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBtX2ZyYW1lUGxhbmVzLCBtX2ZyYW1lLT50ZXh0
dXJlSWQoKSwgbV9mb3JtYXQpOwogCiAgICAgaWYgKG1fZm9ybWF0ID09IEV4dGVuc2lvbnMzRENo
cm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUykKICAgICAgICAgdmlkZW9RdWFkLT5zZXRN
YXRyaXgobV9zdHJlYW1UZXh0dXJlTWF0cml4KTsKQEAgLTE5OSw4ICsyMTcsNiBAQCB2b2lkIEND
VmlkZW9MYXllckltcGw6OmRpZERyYXcoKQogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9mcmFtZS0+cGxh
bmVzKCk7ICsrcGxhbmUpCi0gICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5y
ZXNlcnZlKCk7CiAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOwogICAg
IG1fZnJhbWUgPSAwOwogCkBAIC0yNDMsMzUgKzI1OSw4OCBAQCBJbnRTaXplIENDVmlkZW9MYXll
ckltcGw6OmNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUmIGZy
YW1lLAogICAgIHJldHVybiBJbnRTaXplKHZpc2libGVXaWR0aCwgdmlzaWJsZUhlaWdodCk7CiB9
CiAKLWJvb2wgQ0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6
V2ViVmlkZW9GcmFtZSYgZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZW5kZXJlciogbGF5ZXJS
ZW5kZXJlcikKK2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6YWxsb2NhdGVEYXRh
KENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKHRleHR1cmVJZCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyLT5jb250ZW50
c1RleHR1cmVBbGxvY2F0b3IoKS0+Y3JlYXRlVGV4dHVyZShzaXplLCBmb3JtYXQpOworICAgIHJl
dHVybiB0ZXh0dXJlSWQ7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6
ZnJlZURhdGEoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBpZiAoIXRleHR1cmVJ
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXJSZW5kZXJlci0+Y29udGVudHNUZXh0dXJl
QWxsb2NhdG9yKCktPmRlbGV0ZVRleHR1cmUodGV4dHVyZUlkLCBzaXplLCBmb3JtYXQpOworICAg
IHRleHR1cmVJZCA9IDA7Cit9CisKK2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6YWxsb2NhdGVQbGFu
ZURhdGEoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKIHsKLSAgICBpZiAoZnJhbWUucGxhbmVz
KCkgPiBNYXhQbGFuZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbnQgbWF4VGV4dHVy
ZVNpemUgPSBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS5wbGFuZXMoKTsgKytwbGFu
ZSkgewotICAgICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUoZnJhbWUuc3RyaWRlKHBs
YW5lKSwgdmlkZW9GcmFtZURpbWVuc2lvbihmcmFtZS5oZWlnaHQoKSwgcGxhbmUsIGZyYW1lLmZv
cm1hdCgpKSk7Ci0gICAgICAgIC8vIElmIHRoZSByZW5kZXJlciBjYW5ub3QgaGFuZGxlIHRoaXMg
bGFyZ2Ugb2YgYSB0ZXh0dXJlLCByZXR1cm4gZmFsc2UuCi0gICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICBmb3Ig
KHVuc2lnbmVkIHBsYW5lSW5kZXggPSAwOyBwbGFuZUluZGV4IDwgbV9mcmFtZS0+cGxhbmVzKCk7
ICsrcGxhbmVJbmRleCkgeworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lJiBw
bGFuZSA9IG1fZnJhbWVQbGFuZXNbcGxhbmVJbmRleF07CisKKyAgICAgICAgSW50U2l6ZSByZXF1
aXJlZFRleHR1cmVTaXplKG1fZnJhbWUtPnN0cmlkZShwbGFuZUluZGV4KSwgdmlkZW9GcmFtZURp
bWVuc2lvbihtX2ZyYW1lLT5oZWlnaHQoKSwgcGxhbmVJbmRleCwgbV9mcmFtZS0+Zm9ybWF0KCkp
KTsKKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgdGVzdCBhZ2FpbnN0IG1heFRleHR1cmVT
aXplIHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KICAgICAgICAgaWYgKHJlcXVp
cmVkVGV4dHVyZVNpemUuaXNaZXJvKCkgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpID4g
bWF4VGV4dHVyZVNpemUgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1
cmVTaXplKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fdGV4dHVy
ZXNbcGxhbmVdLm1fdGV4dHVyZSkgewotICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90
ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVy
ZU1hbmFnZXIoKSk7Ci0gICAgICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVy
ZSkKKworICAgICAgICBpZiAocGxhbmUuc2l6ZSAhPSByZXF1aXJlZFRleHR1cmVTaXplIHx8IHBs
YW5lLmZvcm1hdCAhPSBtX2Zvcm1hdCkgeworICAgICAgICAgICAgcGxhbmUuZnJlZURhdGEobGF5
ZXJSZW5kZXJlcik7CisgICAgICAgICAgICBwbGFuZS5zaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6
ZTsKKyAgICAgICAgICAgIHBsYW5lLmZvcm1hdCA9IG1fZm9ybWF0OworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFwbGFuZS50ZXh0dXJlSWQpIHsKKyAgICAgICAgICAgIGlmICghcGxhbmUuYWxs
b2NhdGVEYXRhKGxheWVyUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW1wbFRleHR1cmVNYW5hZ2Vy
IG1heSBoYXZlIGJlZW4gZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQgc2luY2UgdGhlIGxhc3QgZnJh
bWUsIHNvIHBhc3MgdGhlIG5ldyBvbmUuCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3Ag
aWYgdGhlIFRleHR1cmVNYW5hZ2VyIGlzIHN0aWxsIGFyb3VuZC4KLSAgICAgICAgICAgIG1fdGV4
dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIobGF5ZXJSZW5kZXJlci0+
aW1wbFRleHR1cmVNYW5hZ2VyKCkpOworICAgICAgICAgICAgcGxhbmUudmlzaWJsZVNpemUgPSBj
b21wdXRlVmlzaWJsZVNpemUoKm1fZnJhbWUsIHBsYW5lSW5kZXgpOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFRl
eHR1cmVTaXplKQotICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9
IGNvbXB1dGVWaXNpYmxlU2l6ZShmcmFtZSwgcGxhbmUpOwotICAgICAgICBpZiAoIW1fdGV4dHVy
ZXNbcGxhbmVdLm1fdGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFRleHR1cmVTaXplLCBmb3JtYXQp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5UGxhbmVEYXRhKENDUmVuZGVyZXIqIGxheWVy
UmVuZGVyZXIsIENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIHNpemVfdCBzb2Z0
d2FyZVBsYW5lQ291bnQgPSBtX2ZyYW1lLT5wbGFuZXMoKTsKKyAgICBpZiAoIXNvZnR3YXJlUGxh
bmVDb3VudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkID0gY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QpIHsK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBv
c2l0aW5nLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgTGF5ZXJUZXh0dXJl
U3ViSW1hZ2UgdXBsb2FkZXIodHJ1ZSk7CisgICAgZm9yIChzaXplX3Qgc29mdHdhcmVQbGFuZUlu
ZGV4ID0gMDsgc29mdHdhcmVQbGFuZUluZGV4IDwgc29mdHdhcmVQbGFuZUNvdW50OyArK3NvZnR3
YXJlUGxhbmVJbmRleCkgeworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lJiBw
bGFuZSA9IG1fZnJhbWVQbGFuZXNbc29mdHdhcmVQbGFuZUluZGV4XTsKKyAgICAgICAgY29uc3Qg
dWludDhfdCogc29mdHdhcmVQbGFuZVBpeGVscyA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihtX2ZyYW1lLT5kYXRhKHNvZnR3YXJlUGxhbmVJbmRleCkpOworICAgICAgICBJbnRSZWN0IHBs
YW5lUmVjdChJbnRQb2ludCgpLCBwbGFuZS5zaXplKTsKKworICAgICAgICBjb250ZXh0M2QtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBwbGFuZS50ZXh0dXJlSWQp
OworICAgICAgICB1cGxvYWRlci5zZXRTdWJJbWFnZVNpemUocGxhbmUuc2l6ZSk7CisgICAgICAg
IHVwbG9hZGVyLnVwbG9hZChzb2Z0d2FyZVBsYW5lUGl4ZWxzLCBwbGFuZVJlY3QsIHBsYW5lUmVj
dCwgcGxhbmVSZWN0LCBwbGFuZS5mb3JtYXQsIGNvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpmcmVlUGxhbmVEYXRhKENDUmVuZGVy
ZXIqIGxheWVyUmVuZGVyZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdlYktp
dDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fZnJhbWVQbGFuZXNb
aV0uZnJlZURhdGEobGF5ZXJSZW5kZXJlcik7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6
ZnJlZVVudXNlZFBsYW5lRGF0YShDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQoreworICAgIHVu
c2lnbmVkIGZpcnN0VW51c2VkUGxhbmUgPSBtX2ZyYW1lID8gbV9mcmFtZS0+cGxhbmVzKCkgOiAw
OworICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0VW51c2VkUGxhbmU7IGkgPCBXZWJLaXQ6Oldl
YlZpZGVvRnJhbWU6Om1heFBsYW5lczsgKytpKQorICAgICAgICBtX2ZyYW1lUGxhbmVzW2ldLmZy
ZWVEYXRhKGxheWVyUmVuZGVyZXIpOworfQorCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZFJl
Y2VpdmVGcmFtZSgpCiB7CiAgICAgc2V0TmVlZHNSZWRyYXcoKTsKQEAgLTI4NSw4ICszNTQsNyBA
QCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZFVwZGF0ZU1hdHJpeChjb25zdCBmbG9hdCBtYXRy
aXhbMTZdKQogCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZExvc2VDb250ZXh0KCkKIHsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpCi0gICAgICAgIG1fdGV4
dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFyKCk7CisgICAgZnJlZVBsYW5lRGF0YShsYXllclRyZWVI
b3N0SW1wbCgpLT5sYXllclJlbmRlcmVyKCkpOwogfQogCiB2b2lkIENDVmlkZW9MYXllckltcGw6
OnNldE5lZWRzUmVkcmF3KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCAyMjFm
NjAwYWNlYjhhMzE5OWY2ZDc4NjhhNGMxZDZkZmViNjhiZWE2Li44MmM2YTA0MWM4YTAxMTU5ZWZm
YTBmZjc3OWI3MzJkYjliMGE4NGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBA
IC0yNiw3ICsyNiw4IEBACiAjaWZuZGVmIENDVmlkZW9MYXllckltcGxfaAogI2RlZmluZSBDQ1Zp
ZGVvTGF5ZXJJbXBsX2gKIAotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZVByb3ZpZGVyLmg+
CiAKQEAgLTY5LDExICs3MCwxNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1
dkFkanVzdFszXTsKICAgICBzdGF0aWMgY29uc3QgZmxvYXQgZmxpcFRyYW5zZm9ybVsxNl07CiAK
LSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90
ZXh0dXJlOwotICAgICAgICBJbnRTaXplIG1fdmlzaWJsZVNpemU7CisgICAgc3RydWN0IEZyYW1l
UGxhbmUgeworICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQ7CisgICAgICAgIEludFNpemUgc2l6
ZTsKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0OworICAgICAgICBJbnRTaXplIHZpc2libGVTaXpl
OworCisgICAgICAgIEZyYW1lUGxhbmUoKSA6IHRleHR1cmVJZCgwKSB7IH0KKworICAgICAgICBi
b29sIGFsbG9jYXRlRGF0YShDQ1JlbmRlcmVyKik7CisgICAgICAgIHZvaWQgZnJlZURhdGEoQ0NS
ZW5kZXJlciopOwogICAgIH07Ci0gICAgZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKIAogcHJpdmF0
ZToKICAgICBDQ1ZpZGVvTGF5ZXJJbXBsKGludCwgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lUHJvdmlk
ZXIqKTsKQEAgLTgxLDE5ICs4OCwyMyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBJbnRTaXplIGNv
bXB1dGVWaXNpYmxlU2l6ZShjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUmLCB1bnNpZ25lZCBw
bGFuZSk7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuICJWaWRlb0xheWVyIjsgfQogCi0gICAgdm9pZCB3aWxsRHJhd0lu
dGVybmFsKENDUmVuZGVyZXIqKTsKLSAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBXZWJL
aXQ6OldlYlZpZGVvRnJhbWUmLCBHQzNEZW51bSBmb3JtYXQsIENDUmVuZGVyZXIqKTsKKyAgICB2
b2lkIHdpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciosIENDR3JhcGhpY3NDb250ZXh0Kik7Cisg
ICAgYm9vbCBhbGxvY2F0ZVBsYW5lRGF0YShDQ1JlbmRlcmVyKik7CisgICAgYm9vbCBjb3B5UGxh
bmVEYXRhKENDUmVuZGVyZXIqLCBDQ0dyYXBoaWNzQ29udGV4dCopOworICAgIHZvaWQgZnJlZVBs
YW5lRGF0YShDQ1JlbmRlcmVyKik7CisgICAgdm9pZCBmcmVlVW51c2VkUGxhbmVEYXRhKENDUmVu
ZGVyZXIqKTsKIAogICAgIC8vIEd1YXJkcyB0aGUgZGVzdHJ1Y3Rpb24gb2YgbV9wcm92aWRlciBh
bmQgdGhlIGZyYW1lIHRoYXQgaXQgcHJvdmlkZXMKICAgICBNdXRleCBtX3Byb3ZpZGVyTXV0ZXg7
CiAgICAgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lUHJvdmlkZXIqIG1fcHJvdmlkZXI7CiAKLSAgICBU
ZXh0dXJlIG1fdGV4dHVyZXNbTWF4UGxhbmVzXTsKLQogICAgIGZsb2F0IG1fc3RyZWFtVGV4dHVy
ZU1hdHJpeFsxNl07CiAKICAgICBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIG1fZnJhbWU7CiAgICAg
R0MzRGVudW0gbV9mb3JtYXQ7CisKKyAgICAvLyBFYWNoIGluZGV4IGluIHRoaXMgYXJyYXkgY29y
cmVzcG9uZHMgdG8gYSBwbGFuZSBpbiBXZWJLaXQ6OldlYlZpZGVvRnJhbWUuCisgICAgRnJhbWVQ
bGFuZSBtX2ZyYW1lUGxhbmVzW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzXTsKIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggZTYyMzFkMzRmMTE3YTg2MTk4YTFlZjVmMjY2Y2U4
NzZhODg3OWViZS4uNGRmOGJhZTZkZjFlNGQ4ZWY1YmJlODU0YjgxNWZiYzk5ODQ5OGZiZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKQEAgLTE2NTYsNiArMTY1Niw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgZG9udFVzZU9sZFJlc291cmNlc0FmdGVyTG9zdENvbnRleHQpCiAgICAgdmlk
ZW9MYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAgICAgdmlkZW9MYXll
ci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHZpZGVvTGF5ZXItPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICB2aWRlb0xheWVyLT5zZXRMYXllclRyZWVIb3N0SW1w
bChtX2hvc3RJbXBsLmdldCgpKTsKICAgICByb290TGF5ZXItPmFkZENoaWxkKHZpZGVvTGF5ZXIu
cmVsZWFzZSgpKTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290TGF5ZXIucmVs
ZWFzZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxl
ZExheWVyVGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVk
TGF5ZXJUZXN0Q29tbW9uLmgKaW5kZXggOTgyNGQ4YzA2NGZkNDA3YWEyN2NhZWUzOGQwNzA5MGU3
ZmIyZGNlMC4uZjE1MjAxYTg0ZDFlM2Q2ZGI1YzMzZTkwMjE1YzM4NzhhMmVlMDZiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9u
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29t
bW9uLmgKQEAgLTE1Nyw2ICsxNTcsNyBAQCBwdWJsaWM6CiBjbGFzcyBGYWtlVGV4dHVyZUNvcGll
ciA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlQ29waWVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgY29weVRleHR1cmUoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQqLCB1bnNpZ25lZCwg
dW5zaWduZWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y29weVRvVGV4dHVyZShXZWJDb3JlOjpDQ0dyYXBoaWNzQ29udGV4dCosIGNvbnN0IHZvaWQqLCB1
bnNpZ25lZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSB7IH0KIH07CiAKIGNs
YXNzIEZha2VUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZVVwbG9hZGVy
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXll
ckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGE1NjUxNDZhNWQ0OTE5NjViN2IxYWQyNWQ2ZmU2
OWM1MTUxNTQwZjkuLjA0MmFhMTE5NWNlYzQxZTY3NmYwNTkwMTdlYWU3NWVmZWRiYjg0NmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9t
aXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiBjbGFzcyBNb2Nr
VGV4dHVyZUNvcGllciA6IHB1YmxpYyBUZXh0dXJlQ29waWVyIHsKIHB1YmxpYzoKICAgICBNT0NL
X01FVEhPRDQoY29weVRleHR1cmUsIHZvaWQoQ0NHcmFwaGljc0NvbnRleHQqLCB1bnNpZ25lZCwg
dW5zaWduZWQsIGNvbnN0IEludFNpemUmKSk7CisgICAgTU9DS19NRVRIT0Q1KGNvcHlUb1RleHR1
cmUsIHZvaWQoQ0NHcmFwaGljc0NvbnRleHQqLCBjb25zdCB2b2lkKiwgdW5zaWduZWQsIGNvbnN0
IEludFNpemUmLCBHQzNEZW51bSkpOwogfTsKIAogY2xhc3MgTW9ja1RleHR1cmVVcGxvYWRlciA6
IHB1YmxpYyBUZXh0dXJlVXBsb2FkZXIgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146897</attachid>
            <date>2012-06-11 13:48:13 -0700</date>
            <delta_ts>2012-06-11 14:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88363-20120611164813.patch</filename>
            <type>text/plain</type>
            <size>39771</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4Yjg0Y2UyYzNhZWM2
ZTIxZDJjODJmM2Y5MjAzZjc4NjgxM2UzNmRiLi5jM2Y5MDI5MWVhYmRlYTU0NDQ5M2ZhMDJhZWFk
Mjc3YTJlMmYwNDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNiAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5ZXIgdHJlZSBhbmQgdmlk
ZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5kIFdlYlZpZGVvRnJhbWUg
cG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtLmd5cGk6CisgICAgICAgICogY2hyb21pdW0vcHVibGlj
L1dlYlZpZGVvRnJhbWUuaDoKKyAgICAgICAgKiBjaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5j
cHA6IFJlbW92ZWQuCisKIDIwMTItMDYtMDggIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIENvbXBvc2l0b3IgZG9lc24ndCBzdXBwb3J0
IHRyYW5zbHVjZW50IHJvb3QgbGF5ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFjYWM5NmNkN2UzNTNiZjg0
ZTY3ZjMzM2U4NDI4MGMxNjNiMjJkN2UuLmZmZTRlNzVhMzhmOWNmOTYyYmY4ZTJmNjllMjkxZmE2
NGVhNzUzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMi0wNi0wNiAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNlcGFy
YXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5ZXIgdHJlZSBhbmQgdmlkZW8gcHJv
dmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5kIFdlYlZpZGVvRnJhbWUgcG9pbnRl
cnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDQ1ZpZGVvRHJhd1F1YWQgc2hvdWxkIG5vdCBjb250YWluIGFueSBwb2ludGVycyB0
byBkYXRhIGluIHRoZSBsYXllcgorICAgICAgICB0cmVlIHNvIHdlIGFyZSBhYmxlIHRvIHNlcmlh
bGl6ZSBpdCBhY3Jvc3MgcHJvY2VzcyBib3VuZGFyaWVzLiBUaGlzCisgICAgICAgIHBhdGNoIHJl
bW92ZXMgdGhlIE1hbmFnZWRUZXh0dXJlIHBvaW50ZXJzIGZyb20gdGhlIHF1YWQgY2xhc3MsCisg
ICAgICAgIHJlcGxhY2luZyB0aGVtIHdpdGggdGV4dHVyZSBpZHMuIEl0IHJlbW92ZXMgdGhlIFdl
YlZpZGVvRnJhbWUqIGZyb20KKyAgICAgICAgdGhlIHF1YWQsIHJlcGxhY2luZyBpdCB3aXRoIHRo
ZSBmcmFtZSBwcm92aWRlcidzIHRleHR1cmUgaWQgaW5jbHVkZWQKKyAgICAgICAgaW4gdGhlIFdl
YlZpZGVvRnJhbWUgc3RydWN0dXJlLiBBbmQgaXQgdXNlcyBhIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4CisgICAgICAgIGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGZsb2F0cy4K
KworICAgICAgICBUZXh0dXJlIGFsbG9jYXRpb24gaXMgZG9uZSBpbiBDQ1ZpZGVvTGF5ZXJJbXBs
IHZpYSB0aGUKKyAgICAgICAgY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLCBzbyB0aGF0IHRoZSBt
ZW1vcnkgdXNhZ2UgY2FuIGJlIHRyYWNrZWQuCisKKyAgICAgICAgV2UgbW92ZSB0aGUgY29weVBs
YW5lVG9UZXh0dXJlcygpIG1ldGhvZCBiYWNrIGZyb20gTGF5ZXJSZW5kZXJlckNocm9taXVtCisg
ICAgICAgIHRvIENDVmlkZW9MYXllckltcGwsIGFzIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHRleHR1
cmUgZGF0YSBwb2ludGVyIGluIHRoZQorICAgICAgICBXZWJWaWRlb0ZyYW1lLCBhbmQgd2UgZG8g
bm90IHdhbnQgdG8gZ2l2ZSB0aGlzIHBvaW50ZXIgdG8gdGhlIHF1YWQKKyAgICAgICAgY2xhc3Mu
IEluc3RlYWQsIHRoaXMgbWV0aG9kIG1ha2VzIHVzZSBvZiB0aGUgTGF5ZXJUZXh0dXJlU3ViSW1h
Z2UgY2xhc3MKKyAgICAgICAgdG8gY29weSB0aGUgcGl4ZWwgZGF0YSBpbnRvIHRoZSB0ZXh0dXJl
LgorCisgICAgICAgIExheWVyVGV4dHVyZVN1YkltYWdlIGlzIHVwZGF0ZWQgdG8gYWxsb3cgbm9u
LTRieXRlIHRleHR1cmUgZm9ybWF0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoVGV4U3ViSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhNYXBUZXhTdWJJ
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGll
ci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0Ry
YXdRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0RyYXdRdWFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaDoK
KyAgICAgICAgKENDVmlkZW9EcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJh
d1F1YWQ6OnBsYW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVy
SW1wbDo6fkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVy
SW1wbDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6d2ls
bERyYXdJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjphcHBl
bmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWREcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmU6OmFsbG9jYXRl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OkZyYW1lUGxhbmU6OmZyZWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmFsbG9jYXRlUGxhbmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmNvcHlQbGFuZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVy
SW1wbDo6ZnJlZVBsYW5lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBs
OjpmcmVlVW51c2VkUGxhbmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllcklt
cGw6OmRpZExvc2VDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6CisgICAgICAgIChGcmFtZVBsYW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmU6OkZyYW1lUGxhbmUpOgorCiAy
MDEyLTA2LTA1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtjaHJvbWl1bV0gRnJlZSB0ZXh0dXJlIGZyb20gQ0NJT1N1cmZhY2VMYXllckltcGwgd2hlbiBp
dCBpcyBkZXN0cm95ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTMxN2VkYTVlODc4
ZjUyY2IzMGE1YjIzZGUwYjI2N2ZmZTY5MzhlOC4uNGNhODIyYWZiMjYyY2UyMzhlNzc5NmNlMThi
N2MwMTZhNDY5Njc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxMi0wNi0wNiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5
ZXIgdHJlZSBhbmQgdmlkZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5k
IFdlYlZpZGVvRnJhbWUgcG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6CisgICAg
ICAgIChXZWJLaXRUZXN0czo6RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUpOgorICAg
ICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA2LTA1
ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gRnJlZSB0ZXh0dXJlIGZyb20gQ0NJT1N1cmZhY2VMYXllckltcGwgd2hlbiBpdCBpcyBkZXN0
cm95ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNl
L1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKaW5kZXggYWFmMmVlODk0MzMzYzVhOWVkYzc3NjcxMTk2
OTc3MjYxNDk2NGI0Ny4uYWVkZWUyNmM3ZDBmN2QyNWUxYTJiOGNkODA4MWJlMzEwY2Y4NDYwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1Bs
YXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAgLTEzMSw3ICsxMzEsNiBAQAogICAgICAgICAgICAgJ2No
cm9taXVtL3NyYy9XZWJGbG9hdFF1YWQuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9zcmMv
V2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3NyYy9X
ZWJTdHJpbmcuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5j
cHAnLAogICAgICAgICBdCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0v
cHVibGljL1dlYlZpZGVvRnJhbWUuaAppbmRleCBkYjBhYTdkNTQyODRkZjhkZmZhY2NmZjU0NTc2
ZDRmZmMyMmMzNjlmLi43NDc5OWJiNzE3MWNmMjZiZDU1NzhlNjRhMTMzZTExODI5YTYyOTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUu
aAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaApA
QCAtMzgsMTMgKzM4LDE3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gS2VlcCBpbiBzeW5jIHdp
dGggY2hyb21pdW0ncyBtZWRpYTo6VmlkZW9GcmFtZTo6Rm9ybWF0LgogY2xhc3MgV2ViVmlkZW9G
cmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFBsYW5lczsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtUkdCUGxhbmVzOwotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCByZ2JQbGFuZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtWVVWUGxhbmVz
OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB5UGxhbmU7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHVQbGFuZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdlBsYW5lOworICAgIGVu
dW0geworICAgICAgICByZ2JQbGFuZSA9IDAsCisgICAgICAgIG51bVJHQlBsYW5lcyA9IDEKKyAg
ICB9OworICAgIGVudW0geworICAgICAgICB5UGxhbmUgPSAwLAorICAgICAgICB1UGxhbmUgPSAx
LAorICAgICAgICB2UGxhbmUgPSAyLAorICAgICAgICBudW1ZVVZQbGFuZXMgPSAzCisgICAgfTsK
KyAgICBlbnVtIHsgbWF4UGxhbmVzID0gMyB9OwogCiAgICAgZW51bSBGb3JtYXQgewogICAgICAg
ICBGb3JtYXRJbnZhbGlkID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1
bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3JjL1dl
YlZpZGVvRnJhbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yzg2NjU5MzM2
YmNmNWVhMTlhM2YxMmIyMjhhZTRmMWU3MDM2ZmZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2ViVmlk
ZW9GcmFtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYlZpZGVvRnJhbWUuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNvbnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJhbWU6Om1heFBsYW5lcyA9IDM7Ci1j
b25zdCB1bnNpZ25lZCBXZWJWaWRlb0ZyYW1lOjpudW1SR0JQbGFuZXMgPSAxOwotY29uc3QgdW5z
aWduZWQgV2ViVmlkZW9GcmFtZTo6cmdiUGxhbmUgPSAwOwotY29uc3QgdW5zaWduZWQgV2ViVmlk
ZW9GcmFtZTo6bnVtWVVWUGxhbmVzID0gMzsKLWNvbnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJhbWU6
OnlQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBXZWJWaWRlb0ZyYW1lOjp1UGxhbmUgPSAxOwot
Y29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6dlBsYW5lID0gMjsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDc4
MGZjMzJlM2EzZjNmMTEwODhhZDY2NWNhZGZiOWUwMDUwZDdiODQuLjEyMGNiYmViZDdjNmVmNWVi
MDRlMzVmZDBhMjk0ZjYzZjZhN2NlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcApAQCAtOTgzLDIyICs5ODMsMjIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAgIGNvbnN0IFZpZGVvWVVW
UHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvWVVWUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFt
ICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwogCi0gICAgY29uc3QgQ0NWaWRlb0xheWVySW1w
bDo6VGV4dHVyZSYgeVRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlkZW9G
cmFtZTo6eVBsYW5lXTsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB1VGV4
dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjp1UGxhbmVdOwot
ICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+dGV4
dHVyZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnZQbGFuZV07CisgICAgY29uc3QgQ0NWaWRl
b0xheWVySW1wbDo6RnJhbWVQbGFuZSYgeVBsYW5lID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpX
ZWJWaWRlb0ZyYW1lOjp5UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1l
UGxhbmUmIHVQbGFuZSA9IHF1YWQtPnBsYW5lcygpW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6dVBs
YW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lJiB2UGxhbmUgPSBx
dWFkLT5wbGFuZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnZQbGFuZV07CiAKICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQo
KSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlQbGFuZS50ZXh0dXJlSWQpKTsKICAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUy
KSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwor
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHVQbGFuZS50ZXh0dXJlSWQpKTsKICAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0g
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdlRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHZQbGFuZS50ZXh0dXJlSWQpKTsKIAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKIAotICAgIGZsb2F0IHlXaWR0
aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUu
d2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIGZsb2F0
IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlQbGFuZS52aXNpYmxlU2l6
ZS53aWR0aCgpKSAvIHlQbGFuZS5zaXplLndpZHRoKCk7CiAgICAgLy8gQXJiaXRyYXJpbHkgdGFr
ZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgot
ICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVy
ZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lk
dGgoKTsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
dVBsYW5lLnZpc2libGVTaXplLndpZHRoKCkpIC8gdVBsYW5lLnNpemUud2lkdGgoKTsKICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7CiAgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7CiAK
QEAgLTEwMDYsOCArMTAwNiwyNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lV
Vihjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0aW9u
KCksIDIpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOwogCi0gICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4M2Z2KHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAxLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4oQ0NWaWRl
b0xheWVySW1wbDo6eXV2MlJHQikpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCAxLCBj
b25zdF9jYXN0PGZsb2F0Kj4oQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0KSkpOworICAgIC8v
IFRoZXNlIHZhbHVlcyBhcmUgbWFnaWMgbnVtYmVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0cmFu
c2Zvcm1hdGlvbiBmcm9tIFlVViB0byBSR0IgY29sb3IgdmFsdWVzLgorICAgIC8vIFRoZXkgYXJl
IHRha2VuIGZyb20gdGhlIGZvbGxvd2luZyB3ZWJwYWdlOiBodHRwOi8vd3d3LmZvdXJjYy5vcmcv
ZmNjeXZyZ2IucGhwCisgICAgZmxvYXQgeXV2MlJHQls5XSA9IHsKKyAgICAgICAgMS4xNjRmLCAx
LjE2NGYsIDEuMTY0ZiwKKyAgICAgICAgMC5mLCAtLjM5MWYsIDIuMDE4ZiwKKyAgICAgICAgMS41
OTZmLCAtLjgxM2YsIDAuZiwKKyAgICB9OworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRp
b24oKSwgMSwgMCwgeXV2MlJHQikpOworCisgICAgLy8gVGhlc2UgdmFsdWVzIG1hcCB0byAxNiwg
MTI4LCBhbmQgMTI4IHJlc3BlY3RpdmVseSwgYW5kIGFyZSBjb21wdXRlZAorICAgIC8vIGFzIGEg
ZnJhY3Rpb24gb3ZlciAyNTYgKGUuZy4gMTYgLyAyNTYgPSAwLjA2MjUpLgorICAgIC8vIFRoZXkg
YXJlIHVzZWQgaW4gdGhlIFlVViB0byBSR0JBIGNvbnZlcnNpb24gZm9ybXVsYToKKyAgICAvLyAg
IFkgLSAxNiAgIDogR2l2ZXMgMTYgdmFsdWVzIG9mIGhlYWQgYW5kIGZvb3Ryb29tIGZvciBvdmVy
c2hvb3RpbmcKKyAgICAvLyAgIFUgLSAxMjggIDogVHVybnMgdW5zaWduZWQgVSBpbnRvIHNpZ25l
ZCBVIFstMTI4LDEyN10KKyAgICAvLyAgIFYgLSAxMjggIDogVHVybnMgdW5zaWduZWQgViBpbnRv
IHNpZ25lZCBWIFstMTI4LDEyN10KKyAgICBmbG9hdCB5dXZBZGp1c3RbM10gPSB7CisgICAgICAg
IC0wLjA2MjVmLAorICAgICAgICAtMC41ZiwKKyAgICAgICAgLTAuNWYsCisgICAgfTsKKyAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS55dXZBZGpMb2NhdGlvbigpLCAxLCB5dXZBZGp1c3QpKTsKIAogICAgIGNvbnN0IEludFNp
emUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOwogICAgIGRyYXdUZXh0dXJlZFF1
YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQo
KSwgcXVhZC0+b3BhY2l0eSgpLCBGbG9hdFF1YWQoKSwKQEAgLTEwNDEsNzMgKzEwNjAsMzUgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKGNv
bnN0IENDVmlkZW9EcmF3UXVhZCogcXUKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UkdCQShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgVGV4dHVyZVBy
b2dyYW0qIHByb2dyYW0gPSB0ZXh0dXJlUHJvZ3JhbSgpOwotICAgIGNvbnN0IENDVmlkZW9MYXll
ckltcGw6OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlk
ZW9GcmFtZTo6cmdiUGxhbmVdOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3Rl
eHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1
YWQsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJl
SWQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworICAgIGNvbnN0IENDVmlkZW9M
YXllckltcGw6OkZyYW1lUGxhbmUmIHBsYW5lID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpXZWJW
aWRlb0ZyYW1lOjpyZ2JQbGFuZV07CisgICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRp
Y19jYXN0PGZsb2F0PihwbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHBsYW5lLnNpemUud2lk
dGgoKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0
aFNjYWxlRmFjdG9yLCBwbGFuZS50ZXh0dXJlSWQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJEKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJl
MkQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewotICAgIGRyYXdTaW5nbGVUZXh0dXJl
VmlkZW9RdWFkKHF1YWQsIHRleHR1cmVQcm9ncmFtKCksIDEsIHF1YWQtPmZyYW1lKCktPnRleHR1
cmVJZCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CisgICAgZHJhd1NpbmdsZVRl
eHR1cmVWaWRlb1F1YWQocXVhZCwgdGV4dHVyZVByb2dyYW0oKSwgMSwgcXVhZC0+ZnJhbWVQcm92
aWRlclRleHR1cmVJZCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVGV4dHVyZShjb25zdCBDQ1ZpZGVv
RHJhd1F1YWQqIHF1YWQpCiB7CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKKwogICAg
IEFTU0VSVChjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19FR0xf
aW1hZ2VfZXh0ZXJuYWwiKSAmJiBjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVk
KCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpOwogCiAgICAgY29uc3QgVmlkZW9TdHJlYW1U
ZXh0dXJlUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0oKTsKICAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7Ci0gICAgQVNTRVJUKHF1YWQtPm1hdHJpeCgpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4TWF0cml4
TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihxdWFkLT5tYXRyaXgoKSkp
KTsKIAotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1
YWQtPmZyYW1lKCktPnRleHR1cmVJZCgpLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVS
RV9FWFRFUk5BTF9PRVMpOwotfQotCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZy
YW1lVG9UZXh0dXJlcyhjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgY29uc3Qg
V2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiBmcmFtZSA9IHF1YWQtPmZyYW1lKCk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpCi0g
ICAgICAgIGNvcHlQbGFuZVRvVGV4dHVyZShxdWFkLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5l
KTsKLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lIDwg
Q0NWaWRlb0xheWVySW1wbDo6TWF4UGxhbmVzOyArK3BsYW5lKSB7Ci0gICAgICAgIENDVmlkZW9M
YXllckltcGw6OlRleHR1cmUqIHRleHR1cmUgPSAmcXVhZC0+dGV4dHVyZXMoKVtwbGFuZV07Ci0g
ICAgICAgIHRleHR1cmUtPm1fdGV4dHVyZS5jbGVhcigpOwotICAgICAgICB0ZXh0dXJlLT5tX3Zp
c2libGVTaXplID0gSW50U2l6ZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICB0
b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgcXVhZC0+bWF0cml4KCkpOworICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50
ZXhNYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgZ2xNYXRyaXgpKTsKIAotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQq
IHF1YWQsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCi17Ci0gICAgQ0NWaWRlb0xheWVy
SW1wbDo6VGV4dHVyZSYgdGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbaW5kZXhdOwotICAgIFJl
ZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6OmNy
ZWF0ZTNEKG1fY29udGV4dCk7Ci0gICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNj
Q29udGV4dC5nZXQoKSwgbV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7Ci0gICAgR0MzRGVu
dW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwotICAgIEludFNpemUgZGlt
ZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7Ci0KLSAgICB2b2lkKiBtZW0gPSBz
dGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9u
cygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9t
aXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAgICAgIG1lbWNweShtZW0sIHBs
YW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKLSAgICAgICAg
R0xDKGNvbnRleHQoKSwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0
KCktPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWls
cywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKLSAgICAgICAgLy8gdXBsb2FkLiBU
aGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9u
ZQotICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRl
eHR1cmUuCi0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgp
LCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBwbGFuZSkpOwotICAgIH0KKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChx
dWFkLCBwcm9ncmFtLCAxLCBxdWFkLT5mcmFtZVByb3ZpZGVyVGV4dHVyZUlkKCksIEV4dGVuc2lv
bnMzRENocm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3VmlkZW9RdWFkKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVh
ZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaWYgKCFx
dWFkLT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNvcHlGcmFtZVRvVGV4
dHVyZXMocXVhZCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHN3aXRjaCAocXVhZC0+Zm9ybWF0
KCkpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CiAgICAgICAgIGRy
YXdZVVYocXVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKaW5kZXggNWQ5
MTJlYWVjNjllNjQ0MzM4OTFjNDI1ODQyOWUyYTUwMWMzMDE1OS4uNGJlYTkwNDJmODJmNDU3NDhm
MDAzZTM0NjZkYjYzZGI2MzQ0MGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1YkltYWdl
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgi
CiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgR0xDKCkgbWFjcm8KICNpbmNsdWRlICJUcmFjZUV2ZW50
LmgiCiAjaW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKIApAQCAtOTMsNyArOTQsNyBA
QCB2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoVGV4U3ViSW1hZ2UoY29uc3Qg
dWludDhfdCogaW1hZ2UsIGNvbnN0IEludAogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcuCiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgY29udGV4dDNkLT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVz
dFJlY3QuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IHBpeGVsU291cmNlKTsKKyAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleFN1YkltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJl
Y3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgZm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxTb3VyY2UpKTsKIH0KIAogdm9pZCBM
YXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKGNvbnN0IHVpbnQ4
X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCkBAIC0xMTksMTcgKzEyMCwyNCBA
QCB2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoTWFwVGV4U3ViSW1hZ2UoY29u
c3QgdWludDhfdCogaW1hZ2UsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICB1
bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsOworICAgIHVuc2lnbmVkIGludCBieXRlc1Bl
ckNvbXBvbmVudDsKKyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5k
VHlwZVBhcmFtZXRlcnMoZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
JmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChpbWFn
ZVJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIW9mZnNldC54KCkpCi0gICAg
ICAgIG1lbWNweShwaXhlbERlc3QsICZpbWFnZVs0ICogb2Zmc2V0LnkoKSAqIGltYWdlUmVjdC53
aWR0aCgpXSwgaW1hZ2VSZWN0LndpZHRoKCkgKiBkZXN0UmVjdC5oZWlnaHQoKSAqIDQpOworICAg
ICAgICBtZW1jcHkocGl4ZWxEZXN0LCAmaW1hZ2Vbb2Zmc2V0LnkoKSAqIGltYWdlUmVjdC53aWR0
aCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnRdLCBpbWFnZVJlY3Qu
d2lkdGgoKSAqIGRlc3RSZWN0LmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQ
ZXJDb21wb25lbnQpOwogICAgIGVsc2UgewogICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwg
c28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQogICAgICAgICAvLyBwYWludCByZXN1
bHRzIGludG8gdGhlIHBpeGVsRGVzdAogICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBk
ZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAgICBtZW1jcHkoJnBpeGVsRGVzdFtk
ZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICBtZW1jcHkoJnBpeGVsRGVz
dFtkZXN0UmVjdC53aWR0aCgpICogcm93ICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJD
b21wb25lbnRdLAogICAgICAgICAgICAgICAgICAgICZpbWFnZVs0ICogKG9mZnNldC54KCkgKyAo
b2Zmc2V0LnkoKSArIHJvdykgKiBpbWFnZVJlY3Qud2lkdGgoKSldLAotICAgICAgICAgICAgICAg
ICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKKyAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53
aWR0aCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQpOwogICAgIH0K
LSAgICBleHRlbnNpb25zLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShwaXhlbERlc3QpOwor
ICAgIEdMQyhjb250ZXh0M2QsIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVN
KHBpeGVsRGVzdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1
YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0RyYXdRdWFkLmNwcAppbmRleCA5Y2NhNzE0MTJhY2Q3ZjViYzY3OGM4NTRkY2IyZDVkNWUw
MmE4YzJhLi5jOTA1YzAyNjBmMWVkNjdiNGNiZDJjYjdmZDdkNjAxMGE1ZDhjNzNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
RHJhd1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAKQEAgLTI5LDE4ICsyOSwyMCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1ZpZGVvRHJhd1F1
YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25z
dCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMs
IFdlYktpdDo6V2ViVmlkZW9GcmFtZSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCkKK1Bhc3NPd25Q
dHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NW
aWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSBwbGFuZXNbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjpt
YXhQbGFuZXNdLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4dHVyZUlkLCBHQzNEZW51bSBmb3Jt
YXQsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1
YWRSZWN0LCB0ZXh0dXJlcywgZnJhbWUsIGZvcm1hdCkpOworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NWaWRlb0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHBsYW5lcywgZnJh
bWVQcm92aWRlclRleHR1cmVJZCwgZm9ybWF0LCBtYXRyaXgpKTsKIH0KIAotQ0NWaWRlb0RyYXdR
dWFkOjpDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRT
dGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUq
IHRleHR1cmVzLCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQp
CitDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NWaWRlb0xheWVy
SW1wbDo6RnJhbWVQbGFuZSBwbGFuZXNbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFuZXNd
LCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4dHVyZUlkLCBHQzNEZW51bSBmb3JtYXQsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKICAgICA6IENDRHJhd1F1
YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpWaWRlb0NvbnRlbnQsIHF1YWRSZWN0KQot
ICAgICwgbV90ZXh0dXJlcyh0ZXh0dXJlcykKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBt
X2ZyYW1lUHJvdmlkZXJUZXh0dXJlSWQoZnJhbWVQcm92aWRlclRleHR1cmVJZCkKICAgICAsIG1f
Zm9ybWF0KGZvcm1hdCkKLSAgICAsIG1fbWF0cml4KDApCisgICAgLCBtX21hdHJpeChtYXRyaXgp
CiB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXZWJLaXQ6OldlYlZpZGVvRnJhbWU6Om1h
eFBsYW5lczsgKytpKQorICAgICAgbV9wbGFuZXNbaV0gPSBwbGFuZXNbaV07CisKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaAppbmRleCA5ZWIzNTdmYzg2YjVhNDQ5YTkyY2NlZWQx
NjUzYzlkZDgyYzI1ZDM5Li45ODViNTQ0ZjBkMTMxM2I1YTRiMzM3NWQzZTk1NjhhMjM0NDJlY2Fl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaApAQCAtMjksMzMgKzI5LDI5IEBACiAjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgogI2lu
Y2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLWNsYXNzIFdlYlZpZGVvRnJhbWU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMs
IFdlYktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSBwbGFuZXNbV2Vi
S2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFuZXNdLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4
dHVyZUlkLCBHQzNEZW51bSBmb3JtYXQsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKIAotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlczsgfQotICAgIFdlYktpdDo6V2ViVmlkZW9GcmFtZSogZnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgLy8gRWFjaCBpbmRleCBpbiB0aGlz
IGFycmF5IGNvcnJlc3BvbmRzIHRvIGEgcGxhbmUgaW4gV2ViS2l0OjpXZWJWaWRlb0ZyYW1lLgor
ICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUqIHBsYW5lcygpIGNvbnN0IHsg
cmV0dXJuIG1fcGxhbmVzOyB9CisgICAgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVQcm92aWRlclRleHR1cmVJZDsgfQogICAgIEdDM0RlbnVt
IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9Ci0gICAgY29uc3QgZmxvYXQqIG1h
dHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4OyB9Ci0KLSAgICB2b2lkIHNldE1hdHJpeChj
b25zdCBmbG9hdCogbWF0cml4KSB7IG1fbWF0cml4ID0gbWF0cml4OyB9CisgICAgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9t
YXRyaXg7IH0KIAogcHJpdmF0ZToKLSAgICBDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4
dHVyZXMsIFdlYktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgQ0NW
aWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIEND
VmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUgcGxhbmVzW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6
bWF4UGxhbmVzXSwgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCwgR0MzRGVudW0gZm9y
bWF0LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiBtX3RleHR1cmVzOwotICAgIFdlYktpdDo6V2ViVmlkZW9G
cmFtZSogbV9mcmFtZTsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lIG1fcGxhbmVz
W1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzXTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1l
UHJvdmlkZXJUZXh0dXJlSWQ7CiAgICAgR0MzRGVudW0gbV9mb3JtYXQ7Ci0gICAgY29uc3QgZmxv
YXQqIG1fbWF0cml4OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9tYXRy
aXg7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDEwNWMx
MTlmNGY5NTYwOGE2ODBhNjZiMzk1ZDI2ZWYxMTkyOTVlN2YuLjg3MGI3Mzc3NjFhNDY1M2UzMmM4
YzMyZWFjOWRhYjc2NjJhZDc0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CkBAIC0zMiw4ICszMiwxMCBAQAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFuYWdlci5oIiAvLyBGb3IgVGV4dHVyZUFsbG9jYXRvcgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAi
Y2MvQ0NRdWFkQ3VsbGVyLmgiCkBAIC00Myw0MiArNDUsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0vLyBUaGVzZSB2YWx1ZXMgYXJlIG1hZ2ljIG51bWJlcnMgdGhhdCBhcmUgdXNlZCBp
biB0aGUgdHJhbnNmb3JtYXRpb24KLS8vIGZyb20gWVVWIHRvIFJHQiBjb2xvciB2YWx1ZXMuCi0v
LyBUaGV5IGFyZSB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgd2VicGFnZToKLS8vIGh0dHA6Ly93
d3cuZm91cmNjLm9yZy9mY2N5dnJnYi5waHAKLWNvbnN0IGZsb2F0IENDVmlkZW9MYXllckltcGw6
Onl1djJSR0JbOV0gPSB7Ci0gICAgMS4xNjRmLCAxLjE2NGYsIDEuMTY0ZiwKLSAgICAwLmYsIC0u
MzkxZiwgMi4wMThmLAotICAgIDEuNTk2ZiwgLS44MTNmLCAwLmYsCi19OwotCi0vLyBUaGVzZSB2
YWx1ZXMgbWFwIHRvIDE2LCAxMjgsIGFuZCAxMjggcmVzcGVjdGl2ZWx5LCBhbmQgYXJlIGNvbXB1
dGVkCi0vLyBhcyBhIGZyYWN0aW9uIG92ZXIgMjU2IChlLmcuIDE2IC8gMjU2ID0gMC4wNjI1KS4K
LS8vIFRoZXkgYXJlIHVzZWQgaW4gdGhlIFlVViB0byBSR0JBIGNvbnZlcnNpb24gZm9ybXVsYToK
LS8vICAgWSAtIDE2ICAgOiBHaXZlcyAxNiB2YWx1ZXMgb2YgaGVhZCBhbmQgZm9vdHJvb20gZm9y
IG92ZXJzaG9vdGluZwotLy8gICBVIC0gMTI4ICA6IFR1cm5zIHVuc2lnbmVkIFUgaW50byBzaWdu
ZWQgVSBbLTEyOCwxMjddCi0vLyAgIFYgLSAxMjggIDogVHVybnMgdW5zaWduZWQgViBpbnRvIHNp
Z25lZCBWIFstMTI4LDEyN10KLWNvbnN0IGZsb2F0IENDVmlkZW9MYXllckltcGw6Onl1dkFkanVz
dFszXSA9IHsKLSAgICAtMC4wNjI1ZiwKLSAgICAtMC41ZiwKLSAgICAtMC41ZiwKLX07Ci0KLS8v
IFRoaXMgbWF0cml4IGlzIHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9uIGZvciBzdHJlYW0gdGV4
dHVyZXMuCi1jb25zdCBmbG9hdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpmbGlwVHJhbnNmb3JtWzE2XSA9
IHsKLSAgICAxLCAwLCAwLCAwLAotICAgIDAsIC0xLCAwLCAwLAotICAgIDAsIDAsIDEsIDAsCi0g
ICAgMCwgMSwgMCwgMSwKLX07Ci0KIENDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwo
aW50IGlkLCBXZWJLaXQ6OldlYlZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIpCiAgICAgOiBD
Q0xheWVySW1wbChpZCkKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCiAgICAgLCBtX2ZyYW1l
KDApCiB7Ci0gICAgbWVtY3B5KG1fc3RyZWFtVGV4dHVyZU1hdHJpeCwgZmxpcFRyYW5zZm9ybSwg
c2l6ZW9mKG1fc3RyZWFtVGV4dHVyZU1hdHJpeCkpOworICAgIC8vIFRoaXMgbWF0cml4IGlzIHRo
ZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9uIGZvciBzdHJlYW0gdGV4dHVyZXMsIGFuZCBmbGlwcyBv
biB0aGUgWSBheGlzLgorICAgIG1fc3RyZWFtVGV4dHVyZU1hdHJpeCA9IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgIDEsIDAsIDAsIDAsCisgICAgICAgIDAsIC0xLCAw
LCAwLAorICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAwLCAxLCAwLCAxKTsKIAogICAgIC8v
IFRoaXMgb25seSBoYXBwZW5zIGR1cmluZyBhIGNvbW1pdCBvbiB0aGUgY29tcG9zaXRvciB0aHJl
YWQgd2hpbGUgdGhlIG1haW4KICAgICAvLyB0aHJlYWQgaXMgYmxvY2tlZC4gVGhhdCBtYWtlcyB0
aGlzIGEgdGhyZWFkLXNhZmUgY2FsbCB0byBzZXQgdGhlIHZpZGVvCkBAIC05Niw4ICs3Myw3IEBA
IENDVmlkZW9MYXllckltcGw6On5DQ1ZpZGVvTGF5ZXJJbXBsKCkKICAgICAgICAgbV9wcm92aWRl
ci0+c2V0VmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KDApOwogICAgICAgICBtX3Byb3ZpZGVyID0g
MDsKICAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQot
ICAgICAgICBtX3RleHR1cmVzW2ldLm1fdGV4dHVyZS5jbGVhcigpOworICAgIGZyZWVQbGFuZURh
dGEobGF5ZXJUcmVlSG9zdEltcGwoKS0+bGF5ZXJSZW5kZXJlcigpKTsKIH0KIAogdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpzdG9wVXNpbmdQcm92aWRlcigpCkBAIC0xNDEsMTMgKzExNywxNCBAQCB2
b2lkIENDVmlkZW9MYXllckltcGw6OndpbGxEcmF3KENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIs
IENDR3JhcGhpY3NDb250ZXh0KiBjbwogICAgIC8vIGxvY2sgc2hvdWxkIG5vdCBjYXVzZSBhIGRl
YWRsb2NrLgogICAgIG1fcHJvdmlkZXJNdXRleC5sb2NrKCk7CiAKLSAgICB3aWxsRHJhd0ludGVy
bmFsKGxheWVyUmVuZGVyZXIpOworICAgIHdpbGxEcmF3SW50ZXJuYWwobGF5ZXJSZW5kZXJlciwg
Y29udGV4dCk7CisgICAgZnJlZVVudXNlZFBsYW5lRGF0YShsYXllclJlbmRlcmVyKTsKIAogICAg
IGlmICghbV9mcmFtZSkKICAgICAgICAgbV9wcm92aWRlck11dGV4LnVubG9jaygpOwogfQogCi12
b2lkIENDVmlkZW9MYXllckltcGw6OndpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciogbGF5ZXJS
ZW5kZXJlcikKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRl
cmVyKiBsYXllclJlbmRlcmVyLCBDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCkBAIC0xNjksOSArMTQ2LDIyIEBAIHZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXdJbnRlcm5hbChDQ1JlbmRlcmVyKiBsYXllclJl
bmRlcmVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFyZXNlcnZlVGV4dHVy
ZXMoKm1fZnJhbWUsIG1fZm9ybWF0LCBsYXllclJlbmRlcmVyKSkgeworICAgIGlmIChtX2ZyYW1l
LT5wbGFuZXMoKSA+IFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzKSB7CisgICAgICAg
IG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9
IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWFsbG9jYXRlUGxhbmVEYXRh
KGxheWVyUmVuZGVyZXIpKSB7CiAgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZSht
X2ZyYW1lKTsKICAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIWNvcHlQbGFuZURhdGEobGF5ZXJSZW5kZXJlciwgY29udGV4dCkpIHsKKyAgICAg
ICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOworICAgICAgICBtX2ZyYW1l
ID0gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIApAQCAtMTgyLDExICsxNzIsMTYgQEAg
dm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0
LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGEKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIC8vIEZJWE1FOiBXaGVuIHdlIHBhc3MgcXVhZHMgb3V0IG9mIHByb2Nlc3MsIHdl
IG5lZWQgdG8gZG91YmxlLWJ1ZmZlciwgb3IKKyAgICAvLyBvdGhlcndpc2Ugc3luY2hvbml6ZSB1
c2Ugb2YgYWxsIHRleHR1cmVzIGluIHRoZSBxdWFkLgorCiAgICAgSW50UmVjdCBxdWFkUmVjdChJ
bnRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gdmlkZW9R
dWFkID0gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwg
bV90ZXh0dXJlcywgbV9mcmFtZSwgbV9mb3JtYXQpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4OwogCiAgICAgaWYgKG1fZm9ybWF0ID09IEV4dGVuc2lvbnMzRENo
cm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUykKLSAgICAgICAgdmlkZW9RdWFkLT5zZXRN
YXRyaXgobV9zdHJlYW1UZXh0dXJlTWF0cml4KTsKKyAgICAgICAgbWF0cml4ID0gbV9zdHJlYW1U
ZXh0dXJlTWF0cml4OworCisgICAgT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gdmlkZW9RdWFkID0g
Q0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV9mcmFt
ZVBsYW5lcywgbV9mcmFtZS0+dGV4dHVyZUlkKCksIG1fZm9ybWF0LCBtYXRyaXgpOwogCiAgICAg
cXVhZExpc3QuYXBwZW5kKHZpZGVvUXVhZC5yZWxlYXNlKCkpOwogfQpAQCAtMTk5LDggKzE5NCw2
IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZGlkRHJhdygpCiAgICAgaWYgKCFtX2ZyYW1lKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBt
X2ZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkKLSAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90
ZXh0dXJlLT51bnJlc2VydmUoKTsKICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUobV9m
cmFtZSk7CiAgICAgbV9mcmFtZSA9IDA7CiAKQEAgLTI0MywzNSArMjM2LDg4IEBAIEludFNpemUg
Q0NWaWRlb0xheWVySW1wbDo6Y29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFdlYktpdDo6V2ViVmlk
ZW9GcmFtZSYgZnJhbWUsCiAgICAgcmV0dXJuIEludFNpemUodmlzaWJsZVdpZHRoLCB2aXNpYmxl
SGVpZ2h0KTsKIH0KIAotYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpyZXNlcnZlVGV4dHVyZXMoY29u
c3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1JlbmRl
cmVyKiBsYXllclJlbmRlcmVyKQorYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lOjph
bGxvY2F0ZURhdGEoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBpZiAodGV4dHVy
ZUlkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHRleHR1cmVJZCA9IGxheWVyUmVuZGVy
ZXItPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpLT5jcmVhdGVUZXh0dXJlKHNpemUsIGZvcm1h
dCk7CisgICAgcmV0dXJuIHRleHR1cmVJZDsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpG
cmFtZVBsYW5lOjpmcmVlRGF0YShDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQoreworICAgIGlm
ICghdGV4dHVyZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllclJlbmRlcmVyLT5jb250
ZW50c1RleHR1cmVBbGxvY2F0b3IoKS0+ZGVsZXRlVGV4dHVyZSh0ZXh0dXJlSWQsIHNpemUsIGZv
cm1hdCk7CisgICAgdGV4dHVyZUlkID0gMDsKK30KKworYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjph
bGxvY2F0ZVBsYW5lRGF0YShDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQogewotICAgIGlmIChm
cmFtZS5wbGFuZXMoKSA+IE1heFBsYW5lcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlu
dCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLm1heFRleHR1
cmVTaXplOwotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLnBsYW5l
cygpOyArK3BsYW5lKSB7Ci0gICAgICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZShmcmFt
ZS5zdHJpZGUocGxhbmUpLCB2aWRlb0ZyYW1lRGltZW5zaW9uKGZyYW1lLmhlaWdodCgpLCBwbGFu
ZSwgZnJhbWUuZm9ybWF0KCkpKTsKLSAgICAgICAgLy8gSWYgdGhlIHJlbmRlcmVyIGNhbm5vdCBo
YW5kbGUgdGhpcyBsYXJnZSBvZiBhIHRleHR1cmUsIHJldHVybiBmYWxzZS4KLSAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVk
LgorICAgIGZvciAodW5zaWduZWQgcGxhbmVJbmRleCA9IDA7IHBsYW5lSW5kZXggPCBtX2ZyYW1l
LT5wbGFuZXMoKTsgKytwbGFuZUluZGV4KSB7CisgICAgICAgIENDVmlkZW9MYXllckltcGw6OkZy
YW1lUGxhbmUmIHBsYW5lID0gbV9mcmFtZVBsYW5lc1twbGFuZUluZGV4XTsKKworICAgICAgICBJ
bnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUobV9mcmFtZS0+c3RyaWRlKHBsYW5lSW5kZXgpLCB2
aWRlb0ZyYW1lRGltZW5zaW9uKG1fZnJhbWUtPmhlaWdodCgpLCBwbGFuZUluZGV4LCBtX2ZyYW1l
LT5mb3JtYXQoKSkpOworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSB0ZXN0IGFnYWluc3Qg
bWF4VGV4dHVyZVNpemUgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgogICAgICAg
ICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc1plcm8oKSB8fCByZXF1aXJlZFRleHR1cmVTaXpl
LndpZHRoKCkgPiBtYXhUZXh0dXJlU2l6ZSB8fCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgp
ID4gbWF4VGV4dHVyZVNpemUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlKSB7Ci0gICAgICAgICAgICBtX3RleHR1cmVz
W3BsYW5lXS5tX3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXIt
PmltcGxUZXh0dXJlTWFuYWdlcigpKTsKLSAgICAgICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFu
ZV0ubV90ZXh0dXJlKQorCisgICAgICAgIGlmIChwbGFuZS5zaXplICE9IHJlcXVpcmVkVGV4dHVy
ZVNpemUgfHwgcGxhbmUuZm9ybWF0ICE9IG1fZm9ybWF0KSB7CisgICAgICAgICAgICBwbGFuZS5m
cmVlRGF0YShsYXllclJlbmRlcmVyKTsKKyAgICAgICAgICAgIHBsYW5lLnNpemUgPSByZXF1aXJl
ZFRleHR1cmVTaXplOworICAgICAgICAgICAgcGxhbmUuZm9ybWF0ID0gbV9mb3JtYXQ7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIXBsYW5lLnRleHR1cmVJZCkgeworICAgICAgICAgICAgaWYg
KCFwbGFuZS5hbGxvY2F0ZURhdGEobGF5ZXJSZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9
IEludFNpemUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoZSBpbXBsVGV4
dHVyZU1hbmFnZXIgbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQgYW5kIHJlY3JlYXRlZCBzaW5jZSB0
aGUgbGFzdCBmcmFtZSwgc28gcGFzcyB0aGUgbmV3IG9uZS4KLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSBuby1vcCBpZiB0aGUgVGV4dHVyZU1hbmFnZXIgaXMgc3RpbGwgYXJvdW5kLgotICAgICAg
ICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5zZXRUZXh0dXJlTWFuYWdlcihsYXll
clJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIoKSk7CisgICAgICAgICAgICBwbGFuZS52aXNp
YmxlU2l6ZSA9IGNvbXB1dGVWaXNpYmxlU2l6ZSgqbV9mcmFtZSwgcGxhbmVJbmRleCk7CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpICE9
IHJlcXVpcmVkVGV4dHVyZVNpemUpCi0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zp
c2libGVTaXplID0gY29tcHV0ZVZpc2libGVTaXplKGZyYW1lLCBwbGFuZSk7Ci0gICAgICAgIGlm
ICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNp
emUsIGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIENDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZURhdGEoQ0NSZW5k
ZXJlciogbGF5ZXJSZW5kZXJlciwgQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
c2l6ZV90IHNvZnR3YXJlUGxhbmVDb3VudCA9IG1fZnJhbWUtPnBsYW5lcygpOworICAgIGlmICgh
c29mdHdhcmVQbGFuZUNvdW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0M2QgPSBjb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBpZiAoIWNv
bnRleHQzZCkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29m
dHdhcmUgY29tcG9zaXRpbmcuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBM
YXllclRleHR1cmVTdWJJbWFnZSB1cGxvYWRlcih0cnVlKTsKKyAgICBmb3IgKHNpemVfdCBzb2Z0
d2FyZVBsYW5lSW5kZXggPSAwOyBzb2Z0d2FyZVBsYW5lSW5kZXggPCBzb2Z0d2FyZVBsYW5lQ291
bnQ7ICsrc29mdHdhcmVQbGFuZUluZGV4KSB7CisgICAgICAgIENDVmlkZW9MYXllckltcGw6OkZy
YW1lUGxhbmUmIHBsYW5lID0gbV9mcmFtZVBsYW5lc1tzb2Z0d2FyZVBsYW5lSW5kZXhdOworICAg
ICAgICBjb25zdCB1aW50OF90KiBzb2Z0d2FyZVBsYW5lUGl4ZWxzID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KG1fZnJhbWUtPmRhdGEoc29mdHdhcmVQbGFuZUluZGV4KSk7CisgICAgICAg
IEludFJlY3QgcGxhbmVSZWN0KEludFBvaW50KCksIHBsYW5lLnNpemUpOworCisgICAgICAgIGNv
bnRleHQzZC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHBsYW5l
LnRleHR1cmVJZCk7CisgICAgICAgIHVwbG9hZGVyLnNldFN1YkltYWdlU2l6ZShwbGFuZS5zaXpl
KTsKKyAgICAgICAgdXBsb2FkZXIudXBsb2FkKHNvZnR3YXJlUGxhbmVQaXhlbHMsIHBsYW5lUmVj
dCwgcGxhbmVSZWN0LCBwbGFuZVJlY3QsIHBsYW5lLmZvcm1hdCwgY29udGV4dCk7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OmZyZWVQbGFuZURh
dGEoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFuZXM7ICsraSkKKyAgICAgICAgbV9m
cmFtZVBsYW5lc1tpXS5mcmVlRGF0YShsYXllclJlbmRlcmVyKTsKK30KKwordm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpmcmVlVW51c2VkUGxhbmVEYXRhKENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIp
Cit7CisgICAgdW5zaWduZWQgZmlyc3RVbnVzZWRQbGFuZSA9IG1fZnJhbWUgPyBtX2ZyYW1lLT5w
bGFuZXMoKSA6IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3RVbnVzZWRQbGFuZTsgaSA8
IFdlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fZnJhbWVQ
bGFuZXNbaV0uZnJlZURhdGEobGF5ZXJSZW5kZXJlcik7Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVy
SW1wbDo6ZGlkUmVjZWl2ZUZyYW1lKCkKIHsKICAgICBzZXROZWVkc1JlZHJhdygpOwpAQCAtMjc5
LDE0ICszMjUsMTcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRSZWNlaXZlRnJhbWUoKQog
CiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZFVwZGF0ZU1hdHJpeChjb25zdCBmbG9hdCBtYXRy
aXhbMTZdKQogewotICAgIG1lbWNweShtX3N0cmVhbVRleHR1cmVNYXRyaXgsIG1hdHJpeCwgc2l6
ZW9mKG1fc3RyZWFtVGV4dHVyZU1hdHJpeCkpOworICAgIG1fc3RyZWFtVGV4dHVyZU1hdHJpeCA9
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgIG1hdHJpeFswXSwgbWF0
cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwKKyAgICAgICAgbWF0cml4WzRdLCBtYXRyaXhb
NV0sIG1hdHJpeFs2XSwgbWF0cml4WzddLAorICAgICAgICBtYXRyaXhbOF0sIG1hdHJpeFs5XSwg
bWF0cml4WzEwXSwgbWF0cml4WzExXSwKKyAgICAgICAgbWF0cml4WzEyXSwgbWF0cml4WzEzXSwg
bWF0cml4WzE0XSwgbWF0cml4WzE1XSk7CiAgICAgc2V0TmVlZHNSZWRyYXcoKTsKIH0KIAogdm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRMb3NlQ29udGV4dCgpCiB7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQotICAgICAgICBtX3RleHR1cmVzW2ldLm1fdGV4
dHVyZS5jbGVhcigpOworICAgIGZyZWVQbGFuZURhdGEobGF5ZXJUcmVlSG9zdEltcGwoKS0+bGF5
ZXJSZW5kZXJlcigpKTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXROZWVkc1JlZHJh
dygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggMjIxZjYwMGFjZWI4YTMxOTlm
NmQ3ODY4YTRjMWQ2ZGZlYjY4YmVhNi4uYmVmMWQ1ZjA5ZTU1NDE3OGVlMTUxMDI3NGM1MGQ4MjYw
NWM1MzYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtMjYsOCArMjYsMTAg
QEAKICNpZm5kZWYgQ0NWaWRlb0xheWVySW1wbF9oCiAjZGVmaW5lIENDVmlkZW9MYXllckltcGxf
aAogCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUg
PHB1YmxpYy9XZWJWaWRlb0ZyYW1lUHJvdmlkZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC02NSwxNSArNjcsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwog
Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1djJSR0JbOV07Ci0gICAgc3RhdGljIGNvbnN0IGZs
b2F0IHl1dkFkanVzdFszXTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZmxpcFRyYW5zZm9ybVsx
Nl07CisgICAgc3RydWN0IEZyYW1lUGxhbmUgeworICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQ7
CisgICAgICAgIEludFNpemUgc2l6ZTsKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0OworICAgICAg
ICBJbnRTaXplIHZpc2libGVTaXplOwogCi0gICAgc3RydWN0IFRleHR1cmUgewotICAgICAgICBP
d25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsKLSAgICAgICAgSW50U2l6ZSBtX3Zpc2li
bGVTaXplOworICAgICAgICBGcmFtZVBsYW5lKCkgOiB0ZXh0dXJlSWQoMCkgeyB9CisKKyAgICAg
ICAgYm9vbCBhbGxvY2F0ZURhdGEoQ0NSZW5kZXJlciopOworICAgICAgICB2b2lkIGZyZWVEYXRh
KENDUmVuZGVyZXIqKTsKICAgICB9OwotICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07CiAKIHBy
aXZhdGU6CiAgICAgQ0NWaWRlb0xheWVySW1wbChpbnQsIFdlYktpdDo6V2ViVmlkZW9GcmFtZVBy
b3ZpZGVyKik7CkBAIC04MSwxOSArODUsMjMgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSW50U2l6
ZSBjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiwgdW5zaWdu
ZWQgcGxhbmUpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KIAotICAgIHZvaWQgd2lsbERy
YXdJbnRlcm5hbChDQ1JlbmRlcmVyKik7Ci0gICAgYm9vbCByZXNlcnZlVGV4dHVyZXMoY29uc3Qg
V2ViS2l0OjpXZWJWaWRlb0ZyYW1lJiwgR0MzRGVudW0gZm9ybWF0LCBDQ1JlbmRlcmVyKik7Cisg
ICAgdm9pZCB3aWxsRHJhd0ludGVybmFsKENDUmVuZGVyZXIqLCBDQ0dyYXBoaWNzQ29udGV4dCop
OworICAgIGJvb2wgYWxsb2NhdGVQbGFuZURhdGEoQ0NSZW5kZXJlciopOworICAgIGJvb2wgY29w
eVBsYW5lRGF0YShDQ1JlbmRlcmVyKiwgQ0NHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2b2lkIGZy
ZWVQbGFuZURhdGEoQ0NSZW5kZXJlciopOworICAgIHZvaWQgZnJlZVVudXNlZFBsYW5lRGF0YShD
Q1JlbmRlcmVyKik7CiAKICAgICAvLyBHdWFyZHMgdGhlIGRlc3RydWN0aW9uIG9mIG1fcHJvdmlk
ZXIgYW5kIHRoZSBmcmFtZSB0aGF0IGl0IHByb3ZpZGVzCiAgICAgTXV0ZXggbV9wcm92aWRlck11
dGV4OwogICAgIFdlYktpdDo6V2ViVmlkZW9GcmFtZVByb3ZpZGVyKiBtX3Byb3ZpZGVyOwogCi0g
ICAgVGV4dHVyZSBtX3RleHR1cmVzW01heFBsYW5lc107Ci0KLSAgICBmbG9hdCBtX3N0cmVhbVRl
eHR1cmVNYXRyaXhbMTZdOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9z
dHJlYW1UZXh0dXJlTWF0cml4OwogCiAgICAgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiBtX2ZyYW1l
OwogICAgIEdDM0RlbnVtIG1fZm9ybWF0OworCisgICAgLy8gRWFjaCBpbmRleCBpbiB0aGlzIGFy
cmF5IGNvcnJlc3BvbmRzIHRvIGEgcGxhbmUgaW4gV2ViS2l0OjpXZWJWaWRlb0ZyYW1lLgorICAg
IEZyYW1lUGxhbmUgbV9mcmFtZVBsYW5lc1tXZWJLaXQ6OldlYlZpZGVvRnJhbWU6Om1heFBsYW5l
c107CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDVjOGYwMmIzYzVkNWMxMTQ0YTM3YTE5
MjNmN2FhNTg4MGYxY2ZkY2UuLmFiOWEwODhjYWQxMWRhYmEwNGNiMWNkNjkxYzE2MWFhZGYyMTg4
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xNzg5LDYgKzE3ODksNyBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0KQog
ICAgIHZpZGVvTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAgIHZp
ZGVvTGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB2aWRlb0xh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgdmlkZW9MYXllci0+c2V0TGF5ZXJUcmVl
SG9zdEltcGwobV9ob3N0SW1wbC5nZXQoKSk7CiAgICAgcm9vdExheWVyLT5hZGRDaGlsZCh2aWRl
b0xheWVyLnJlbGVhc2UoKSk7CiAKICAgICBPd25QdHI8Q0NJT1N1cmZhY2VMYXllckltcGw+IGlv
U3VyZmFjZUxheWVyID0gQ0NJT1N1cmZhY2VMYXllckltcGw6OmNyZWF0ZSg0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgK
aW5kZXggOTgyNGQ4YzA2NGZkNDA3YWEyN2NhZWUzOGQwNzA5MGU3ZmIyZGNlMC4uZjE1MjAxYTg0
ZDFlM2Q2ZGI1YzMzZTkwMjE1YzM4NzhhMmVlMDZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgKQEAgLTE1Nyw2ICsx
NTcsNyBAQCBwdWJsaWM6CiBjbGFzcyBGYWtlVGV4dHVyZUNvcGllciA6IHB1YmxpYyBXZWJDb3Jl
OjpUZXh0dXJlQ29waWVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUo
V2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRleHQqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4dHVyZShXZWJD
b3JlOjpDQ0dyYXBoaWNzQ29udGV4dCosIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIEdDM0RlbnVtKSB7IH0KIH07CiAKIGNsYXNzIEZha2VUZXh0dXJlVXBs
b2FkZXIgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZVVwbG9hZGVyIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146919</attachid>
            <date>2012-06-11 14:53:22 -0700</date>
            <delta_ts>2012-06-11 15:58:33 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-88363-20120611175321.patch</filename>
            <type>text/plain</type>
            <size>39922</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5OTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4Yjg0Y2UyYzNhZWM2
ZTIxZDJjODJmM2Y5MjAzZjc4NjgxM2UzNmRiLi42MGU0OTQyZWY0YThjMjU4MWRmNzMwZmEzZjMx
ZmJiYzY3NjEwYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNi0wNiAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNlcGFyYXRlIENDVmlkZW9EcmF3UXVhZCBhbmQgZnJvbSB0aGUgbGF5ZXIgdHJlZSBhbmQgdmlk
ZW8gcHJvdmlkZXIgYnkgcmVtb3ZpbmcgTWFuYWdlZFRleHR1cmUgYW5kIFdlYlZpZGVvRnJhbWUg
cG9pbnRlcnMgZnJvbSB0aGUgcXVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODgzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxr
ZXIuCisKKyAgICAgICAgKiBQbGF0Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1Ymxp
Yy9XZWJWaWRlb0ZyYW1lLmg6CisgICAgICAgICogY2hyb21pdW0vc3JjL1dlYlZpZGVvRnJhbWUu
Y3BwOiBSZW1vdmVkLgorCiAyMDEyLTA2LTA4ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBDb21wb3NpdG9yIGRvZXNuJ3Qgc3VwcG9y
dCB0cmFuc2x1Y2VudCByb290IGxheWVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhY2FjOTZjZDdlMzUzYmY4
NGU2N2YzMzNlODQyODBjMTYzYjIyZDdlLi5iY2RiZGVmODgwZjU5OGUwYThiOTU0NWExOTc4YWEw
ODNiZjMyZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTItMDYtMDYgIERhbmEg
SmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBTZXBh
cmF0ZSBDQ1ZpZGVvRHJhd1F1YWQgYW5kIGZyb20gdGhlIGxheWVyIHRyZWUgYW5kIHZpZGVvIHBy
b3ZpZGVyIGJ5IHJlbW92aW5nIE1hbmFnZWRUZXh0dXJlIGFuZCBXZWJWaWRlb0ZyYW1lIHBvaW50
ZXJzIGZyb20gdGhlIHF1YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg4MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRyaWVubmUgV2Fsa2VyLgor
CisgICAgICAgIENDVmlkZW9EcmF3UXVhZCBzaG91bGQgbm90IGNvbnRhaW4gYW55IHBvaW50ZXJz
IHRvIGRhdGEgaW4gdGhlIGxheWVyCisgICAgICAgIHRyZWUgc28gd2UgYXJlIGFibGUgdG8gc2Vy
aWFsaXplIGl0IGFjcm9zcyBwcm9jZXNzIGJvdW5kYXJpZXMuIFRoaXMKKyAgICAgICAgcGF0Y2gg
cmVtb3ZlcyB0aGUgTWFuYWdlZFRleHR1cmUgcG9pbnRlcnMgZnJvbSB0aGUgcXVhZCBjbGFzcywK
KyAgICAgICAgcmVwbGFjaW5nIHRoZW0gd2l0aCB0ZXh0dXJlIGlkcy4gSXQgcmVtb3ZlcyB0aGUg
V2ViVmlkZW9GcmFtZSogZnJvbQorICAgICAgICB0aGUgcXVhZCwgcmVwbGFjaW5nIGl0IHdpdGgg
dGhlIGZyYW1lIHByb3ZpZGVyJ3MgdGV4dHVyZSBpZCBpbmNsdWRlZAorICAgICAgICBpbiB0aGUg
V2ViVmlkZW9GcmFtZSBzdHJ1Y3R1cmUuIEFuZCBpdCB1c2VzIGEgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgZmxvYXRz
LgorCisgICAgICAgIFRleHR1cmUgYWxsb2NhdGlvbiBpcyBkb25lIGluIENDVmlkZW9MYXllcklt
cGwgdmlhIHRoZQorICAgICAgICBjb250ZW50c1RleHR1cmVBbGxvY2F0b3IsIHNvIHRoYXQgdGhl
IG1lbW9yeSB1c2FnZSBjYW4gYmUgdHJhY2tlZC4KKworICAgICAgICBXZSBtb3ZlIHRoZSBjb3B5
UGxhbmVUb1RleHR1cmVzKCkgbWV0aG9kIGJhY2sgZnJvbSBMYXllclJlbmRlcmVyQ2hyb21pdW0K
KyAgICAgICAgdG8gQ0NWaWRlb0xheWVySW1wbCwgYXMgdGhpcyBtZXRob2QgdXNlcyB0aGUgdGV4
dHVyZSBkYXRhIHBvaW50ZXIgaW4gdGhlCisgICAgICAgIFdlYlZpZGVvRnJhbWUsIGFuZCB3ZSBk
byBub3Qgd2FudCB0byBnaXZlIHRoaXMgcG9pbnRlciB0byB0aGUgcXVhZAorICAgICAgICBjbGFz
cy4gSW5zdGVhZCwgdGhpcyBtZXRob2QgbWFrZXMgdXNlIG9mIHRoZSBMYXllclRleHR1cmVTdWJJ
bWFnZSBjbGFzcworICAgICAgICB0byBjb3B5IHRoZSBwaXhlbCBkYXRhIGludG8gdGhlIHRleHR1
cmUuCisKKyAgICAgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgaXMgdXBkYXRlZCB0byBhbGxvdyBu
b24tNGJ5dGUgdGV4dHVyZSBmb3JtYXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd05hdGl2ZVRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUZXh0dXJlU3ViSW1hZ2U6OnVwbG9hZFdpdGhUZXhTdWJJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1
YkltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29w
aWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
RHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5o
OgorICAgICAgICAoQ0NWaWRlb0RyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9E
cmF3UXVhZDo6cGxhbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6ZnJh
bWVQcm92aWRlclRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5
ZXJJbXBsOjp+Q0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5
ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjp3
aWxsRHJhd0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmFw
cGVuZFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRpZERyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6YWxsb2Nh
dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xh
eWVySW1wbDo6RnJhbWVQbGFuZTo6ZnJlZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6YWxsb2NhdGVQbGFuZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6Y29weVBsYW5lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5
ZXJJbXBsOjpmcmVlUGxhbmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllcklt
cGw6OmZyZWVVbnVzZWRQbGFuZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVy
SW1wbDo6ZGlkTG9zZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKEZyYW1lUGxhbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6RnJhbWVQbGFuZSk6CisK
IDIwMTItMDYtMDUgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBGcmVlIHRleHR1cmUgZnJvbSBDQ0lPU3VyZmFjZUxheWVySW1wbCB3aGVu
IGl0IGlzIGRlc3Ryb3llZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MzE3ZWRhNWU4
NzhmNTJjYjMwYTViMjNkZTBiMjY3ZmZlNjkzOGU4Li4yNGU2ODcxMWYyYWE2MTA0Y2I0MWE4Y2Y1
NjFlMDRhYTFjYTFjZmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDEyLTA2LTA2ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gU2VwYXJhdGUgQ0NWaWRlb0RyYXdRdWFkIGFuZCBmcm9tIHRoZSBs
YXllciB0cmVlIGFuZCB2aWRlbyBwcm92aWRlciBieSByZW1vdmluZyBNYW5hZ2VkVGV4dHVyZSBh
bmQgV2ViVmlkZW9GcmFtZSBwb2ludGVycyBmcm9tIHRoZSBxdWFkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODM2MworCisgICAgICAgIFJldmlld2Vk
IGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmg6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6RmFrZVRleHR1cmVDb3BpZXI6OmNvcHlUb1RleHR1cmUpOgor
ICAgICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA2
LTA1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gRnJlZSB0ZXh0dXJlIGZyb20gQ0NJT1N1cmZhY2VMYXllckltcGwgd2hlbiBpdCBpcyBk
ZXN0cm95ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291
cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKaW5kZXggYWFmMmVlODk0MzMzYzVhOWVkYzc3Njcx
MTk2OTc3MjYxNDk2NGI0Ny4uYWVkZWUyNmM3ZDBmN2QyNWUxYTJiOGNkODA4MWJlMzEwY2Y4NDYw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNl
L1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAgLTEzMSw3ICsxMzEsNiBAQAogICAgICAgICAgICAg
J2Nocm9taXVtL3NyYy9XZWJGbG9hdFF1YWQuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9z
cmMvV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3Ny
Yy9XZWJTdHJpbmcuY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9zcmMvV2ViVmlkZW9GcmFt
ZS5jcHAnLAogICAgICAgICBdCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAppbmRleCBkYjBhYTdkNTQyODRkZjhkZmZhY2NmZjU0
NTc2ZDRmZmMyMmMzNjlmLi43NDc5OWJiNzE3MWNmMjZiZDU1NzhlNjRhMTMzZTExODI5YTYyOTY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJh
bWUuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUu
aApAQCAtMzgsMTMgKzM4LDE3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gS2VlcCBpbiBzeW5j
IHdpdGggY2hyb21pdW0ncyBtZWRpYTo6VmlkZW9GcmFtZTo6Rm9ybWF0LgogY2xhc3MgV2ViVmlk
ZW9GcmFtZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFBsYW5lczsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtUkdCUGxhbmVzOwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCByZ2JQbGFuZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtWVVWUGxh
bmVzOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB5UGxhbmU7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHVQbGFuZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdlBsYW5lOworICAg
IGVudW0geworICAgICAgICByZ2JQbGFuZSA9IDAsCisgICAgICAgIG51bVJHQlBsYW5lcyA9IDEK
KyAgICB9OworICAgIGVudW0geworICAgICAgICB5UGxhbmUgPSAwLAorICAgICAgICB1UGxhbmUg
PSAxLAorICAgICAgICB2UGxhbmUgPSAyLAorICAgICAgICBudW1ZVVZQbGFuZXMgPSAzCisgICAg
fTsKKyAgICBlbnVtIHsgbWF4UGxhbmVzID0gMyB9OwogCiAgICAgZW51bSBGb3JtYXQgewogICAg
ICAgICBGb3JtYXRJbnZhbGlkID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9zcmMvV2ViVmlkZW9GcmFtZS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vc3Jj
L1dlYlZpZGVvRnJhbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yzg2NjU5
MzM2YmNmNWVhMTlhM2YxMmIyMjhhZTRmMWU3MDM2ZmZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9zcmMvV2Vi
VmlkZW9GcmFtZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYlZpZGVvRnJhbWUuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNvbnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJhbWU6Om1heFBsYW5lcyA9IDM7
Ci1jb25zdCB1bnNpZ25lZCBXZWJWaWRlb0ZyYW1lOjpudW1SR0JQbGFuZXMgPSAxOwotY29uc3Qg
dW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6cmdiUGxhbmUgPSAwOwotY29uc3QgdW5zaWduZWQgV2Vi
VmlkZW9GcmFtZTo6bnVtWVVWUGxhbmVzID0gMzsKLWNvbnN0IHVuc2lnbmVkIFdlYlZpZGVvRnJh
bWU6OnlQbGFuZSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBXZWJWaWRlb0ZyYW1lOjp1UGxhbmUgPSAx
OwotY29uc3QgdW5zaWduZWQgV2ViVmlkZW9GcmFtZTo6dlBsYW5lID0gMjsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4
IDc4MGZjMzJlM2EzZjNmMTEwODhhZDY2NWNhZGZiOWUwMDUwZDdiODQuLjEyMGNiYmViZDdjNmVm
NWViMDRlMzVmZDBhMjk0ZjYzZjZhN2NlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcApAQCAtOTgzLDIyICs5ODMsMjIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAgIGNvbnN0IFZpZGVv
WVVWUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvWVVWUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9n
cmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwogCi0gICAgY29uc3QgQ0NWaWRlb0xheWVy
SW1wbDo6VGV4dHVyZSYgeVRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlk
ZW9GcmFtZTo6eVBsYW5lXTsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB1
VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjp1UGxhbmVd
OwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+
dGV4dHVyZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnZQbGFuZV07CisgICAgY29uc3QgQ0NW
aWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSYgeVBsYW5lID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0
OjpXZWJWaWRlb0ZyYW1lOjp5UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OkZy
YW1lUGxhbmUmIHVQbGFuZSA9IHF1YWQtPnBsYW5lcygpW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6
dVBsYW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lJiB2UGxhbmUg
PSBxdWFkLT5wbGFuZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnZQbGFuZV07CiAKICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJl
SWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlQbGFuZS50ZXh0dXJlSWQpKTsKICAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUyKSk7Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkp
OworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHVQbGFuZS50ZXh0dXJlSWQpKTsKICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7
Ci0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgdlRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIHZQbGFuZS50ZXh0dXJlSWQpKTsKIAogICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKIAotICAgIGZsb2F0IHlX
aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNp
emUud2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIGZs
b2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlQbGFuZS52aXNpYmxl
U2l6ZS53aWR0aCgpKSAvIHlQbGFuZS5zaXplLndpZHRoKCk7CiAgICAgLy8gQXJiaXRyYXJpbHkg
dGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2Fs
LgotICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4
dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCku
d2lkdGgoKTsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9h
dD4odVBsYW5lLnZpc2libGVTaXplLndpZHRoKCkpIC8gdVBsYW5lLnNpemUud2lkdGgoKTsKICAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFk
ZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7CiAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7
CiAKQEAgLTEwMDYsOCArMTAwNiwyNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1lVVihjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0
aW9uKCksIDIpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOwogCi0gICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4M2Z2KHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAxLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4oQ0NW
aWRlb0xheWVySW1wbDo6eXV2MlJHQikpKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCAx
LCBjb25zdF9jYXN0PGZsb2F0Kj4oQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0KSkpOworICAg
IC8vIFRoZXNlIHZhbHVlcyBhcmUgbWFnaWMgbnVtYmVycyB0aGF0IGFyZSB1c2VkIGluIHRoZSB0
cmFuc2Zvcm1hdGlvbiBmcm9tIFlVViB0byBSR0IgY29sb3IgdmFsdWVzLgorICAgIC8vIFRoZXkg
YXJlIHRha2VuIGZyb20gdGhlIGZvbGxvd2luZyB3ZWJwYWdlOiBodHRwOi8vd3d3LmZvdXJjYy5v
cmcvZmNjeXZyZ2IucGhwCisgICAgZmxvYXQgeXV2MlJHQls5XSA9IHsKKyAgICAgICAgMS4xNjRm
LCAxLjE2NGYsIDEuMTY0ZiwKKyAgICAgICAgMC5mLCAtLjM5MWYsIDIuMDE4ZiwKKyAgICAgICAg
MS41OTZmLCAtLjgxM2YsIDAuZiwKKyAgICB9OworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9j
YXRpb24oKSwgMSwgMCwgeXV2MlJHQikpOworCisgICAgLy8gVGhlc2UgdmFsdWVzIG1hcCB0byAx
NiwgMTI4LCBhbmQgMTI4IHJlc3BlY3RpdmVseSwgYW5kIGFyZSBjb21wdXRlZAorICAgIC8vIGFz
IGEgZnJhY3Rpb24gb3ZlciAyNTYgKGUuZy4gMTYgLyAyNTYgPSAwLjA2MjUpLgorICAgIC8vIFRo
ZXkgYXJlIHVzZWQgaW4gdGhlIFlVViB0byBSR0JBIGNvbnZlcnNpb24gZm9ybXVsYToKKyAgICAv
LyAgIFkgLSAxNiAgIDogR2l2ZXMgMTYgdmFsdWVzIG9mIGhlYWQgYW5kIGZvb3Ryb29tIGZvciBv
dmVyc2hvb3RpbmcKKyAgICAvLyAgIFUgLSAxMjggIDogVHVybnMgdW5zaWduZWQgVSBpbnRvIHNp
Z25lZCBVIFstMTI4LDEyN10KKyAgICAvLyAgIFYgLSAxMjggIDogVHVybnMgdW5zaWduZWQgViBp
bnRvIHNpZ25lZCBWIFstMTI4LDEyN10KKyAgICBmbG9hdCB5dXZBZGp1c3RbM10gPSB7CisgICAg
ICAgIC0wLjA2MjVmLAorICAgICAgICAtMC41ZiwKKyAgICAgICAgLTAuNWYsCisgICAgfTsKKyAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCAxLCB5dXZBZGp1c3QpKTsKIAogICAgIGNvbnN0IElu
dFNpemUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOwogICAgIGRyYXdUZXh0dXJl
ZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBGbG9hdFF1YWQoKSwKQEAgLTEwNDEsNzMgKzEwNjAsMzUg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFk
KGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXUKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UkdCQShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgVGV4dHVy
ZVByb2dyYW0qIHByb2dyYW0gPSB0ZXh0dXJlUHJvZ3JhbSgpOwotICAgIGNvbnN0IENDVmlkZW9M
YXllckltcGw6OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2Vi
VmlkZW9GcmFtZTo6cmdiUGxhbmVdOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0
aWNfY2FzdDxmbG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5t
X3RleHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFk
KHF1YWQsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0
dXJlSWQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworICAgIGNvbnN0IENDVmlk
ZW9MYXllckltcGw6OkZyYW1lUGxhbmUmIHBsYW5lID0gcXVhZC0+cGxhbmVzKClbV2ViS2l0OjpX
ZWJWaWRlb0ZyYW1lOjpyZ2JQbGFuZV07CisgICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0
YXRpY19jYXN0PGZsb2F0PihwbGFuZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHBsYW5lLnNpemUu
d2lkdGgoKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3
aWR0aFNjYWxlRmFjdG9yLCBwbGFuZS50ZXh0dXJlSWQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0
dXJlMkQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewotICAgIGRyYXdTaW5nbGVUZXh0
dXJlVmlkZW9RdWFkKHF1YWQsIHRleHR1cmVQcm9ncmFtKCksIDEsIHF1YWQtPmZyYW1lKCktPnRl
eHR1cmVJZCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CisgICAgZHJhd1Npbmds
ZVRleHR1cmVWaWRlb1F1YWQocXVhZCwgdGV4dHVyZVByb2dyYW0oKSwgMSwgcXVhZC0+ZnJhbWVQ
cm92aWRlclRleHR1cmVJZCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CiB9CiAK
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVGV4dHVyZShjb25zdCBDQ1Zp
ZGVvRHJhd1F1YWQqIHF1YWQpCiB7CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKKwog
ICAgIEFTU0VSVChjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19F
R0xfaW1hZ2VfZXh0ZXJuYWwiKSAmJiBjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFi
bGVkKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpOwogCiAgICAgY29uc3QgVmlkZW9TdHJl
YW1UZXh0dXJlUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0oKTsK
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bSgpKSk7Ci0gICAgQVNTRVJUKHF1YWQtPm1hdHJpeCgpKTsKLSAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4TWF0
cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihxdWFkLT5tYXRyaXgo
KSkpKTsKIAotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEs
IHF1YWQtPmZyYW1lKCktPnRleHR1cmVJZCgpLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVY
VFVSRV9FWFRFUk5BTF9PRVMpOwotfQotCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29w
eUZyYW1lVG9UZXh0dXJlcyhjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCi17Ci0gICAgY29u
c3QgV2ViS2l0OjpXZWJWaWRlb0ZyYW1lKiBmcmFtZSA9IHF1YWQtPmZyYW1lKCk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUp
Ci0gICAgICAgIGNvcHlQbGFuZVRvVGV4dHVyZShxdWFkLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBs
YW5lKTsKLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5l
IDwgQ0NWaWRlb0xheWVySW1wbDo6TWF4UGxhbmVzOyArK3BsYW5lKSB7Ci0gICAgICAgIENDVmlk
ZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmUgPSAmcXVhZC0+dGV4dHVyZXMoKVtwbGFuZV07
Ci0gICAgICAgIHRleHR1cmUtPm1fdGV4dHVyZS5jbGVhcigpOwotICAgICAgICB0ZXh0dXJlLT5t
X3Zpc2libGVTaXplID0gSW50U2l6ZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAg
ICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgcXVhZC0+bWF0cml4KCkpOworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS50ZXhNYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgZ2xNYXRyaXgpKTsKIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1
YWQqIHF1YWQsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCi17Ci0gICAgQ0NWaWRlb0xh
eWVySW1wbDo6VGV4dHVyZSYgdGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbaW5kZXhdOwotICAg
IFJlZlB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gY2NDb250ZXh0ID0gQ0NHcmFwaGljc0NvbnRleHQ6
OmNyZWF0ZTNEKG1fY29udGV4dCk7Ci0gICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJl
KGNjQ29udGV4dC5nZXQoKSwgbV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7Ci0gICAgR0Mz
RGVudW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwotICAgIEludFNpemUg
ZGltZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7Ci0KLSAgICB2b2lkKiBtZW0g
PSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5z
aW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCks
IGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENo
cm9taXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAgICAgIG1lbWNweShtZW0s
IHBsYW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKLSAgICAg
ICAgR0xDKGNvbnRleHQoKSwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250
ZXh0KCktPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBm
YWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKLSAgICAgICAgLy8gdXBsb2Fk
LiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0s
IG9uZQotICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhl
IHRleHR1cmUuCi0gICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4U3ViSW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0
aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBwbGFuZSkpOwotICAgIH0KKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVh
ZChxdWFkLCBwcm9ncmFtLCAxLCBxdWFkLT5mcmFtZVByb3ZpZGVyVGV4dHVyZUlkKCksIEV4dGVu
c2lvbnMzRENocm9taXVtOjpHTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7CiB9CiAKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VmlkZW9RdWFkKGNvbnN0IENDVmlkZW9EcmF3UXVhZCog
cXVhZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaWYg
KCFxdWFkLT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNvcHlGcmFtZVRv
VGV4dHVyZXMocXVhZCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHN3aXRjaCAocXVhZC0+Zm9y
bWF0KCkpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CiAgICAgICAg
IGRyYXdZVVYocXVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVTdWJJbWFnZS5jcHAKaW5kZXgg
NWQ5MTJlYWVjNjllNjQ0MzM4OTFjNDI1ODQyOWUyYTUwMWMzMDE1OS4uNGJlYTkwNDJmODJmNDU3
NDhmMDAzZTM0NjZkYjYzZGI2MzQ0MGE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVN1Yklt
YWdlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdl
LmgiCiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIiAvLyBGb3IgR0xDKCkgbWFjcm8KICNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKIApAQCAtOTMsNyArOTQs
NyBAQCB2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoVGV4U3ViSW1hZ2UoY29u
c3QgdWludDhfdCogaW1hZ2UsIGNvbnN0IEludAogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcuCiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgY29udGV4dDNkLT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwg
ZGVzdFJlY3QuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIHBpeGVsU291cmNlKTsKKyAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleFN1Yklt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVz
dFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgZm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxTb3VyY2UpKTsKIH0KIAogdm9p
ZCBMYXllclRleHR1cmVTdWJJbWFnZTo6dXBsb2FkV2l0aE1hcFRleFN1YkltYWdlKGNvbnN0IHVp
bnQ4X3QqIGltYWdlLCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsCkBAIC0xMTksMTcgKzEyMCwy
NCBAQCB2b2lkIExheWVyVGV4dHVyZVN1YkltYWdlOjp1cGxvYWRXaXRoTWFwVGV4U3ViSW1hZ2Uo
Y29uc3QgdWludDhfdCogaW1hZ2UsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAg
ICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVsOworICAgIHVuc2lnbmVkIGludCBieXRl
c1BlckNvbXBvbmVudDsKKyAgICBpZiAoIUdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0
QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChp
bWFnZVJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0LndpZHRoKCkgJiYgIW9mZnNldC54KCkpCi0g
ICAgICAgIG1lbWNweShwaXhlbERlc3QsICZpbWFnZVs0ICogb2Zmc2V0LnkoKSAqIGltYWdlUmVj
dC53aWR0aCgpXSwgaW1hZ2VSZWN0LndpZHRoKCkgKiBkZXN0UmVjdC5oZWlnaHQoKSAqIDQpOwor
ICAgICAgICBtZW1jcHkocGl4ZWxEZXN0LCAmaW1hZ2Vbb2Zmc2V0LnkoKSAqIGltYWdlUmVjdC53
aWR0aCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnRdLCBpbWFnZVJl
Y3Qud2lkdGgoKSAqIGRlc3RSZWN0LmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0
ZXNQZXJDb21wb25lbnQpOwogICAgIGVsc2UgewogICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVh
bCwgc28gZG8gYSByb3ctYnktcm93IG1lbWNweSBmcm9tIHRoZQogICAgICAgICAvLyBwYWludCBy
ZXN1bHRzIGludG8gdGhlIHBpeGVsRGVzdAogICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCBkZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCi0gICAgICAgICAgICBtZW1jcHkoJnBpeGVsRGVz
dFtkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICBtZW1jcHkoJnBpeGVs
RGVzdFtkZXN0UmVjdC53aWR0aCgpICogcm93ICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQ
ZXJDb21wb25lbnRdLAogICAgICAgICAgICAgICAgICAgICZpbWFnZVs0ICogKG9mZnNldC54KCkg
KyAob2Zmc2V0LnkoKSArIHJvdykgKiBpbWFnZVJlY3Qud2lkdGgoKSldLAotICAgICAgICAgICAg
ICAgICAgIGRlc3RSZWN0LndpZHRoKCkgKiA0KTsKKyAgICAgICAgICAgICAgICAgICBkZXN0UmVj
dC53aWR0aCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQpOwogICAg
IH0KLSAgICBleHRlbnNpb25zLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShwaXhlbERlc3Qp
OworICAgIEdMQyhjb250ZXh0M2QsIGV4dGVuc2lvbnMtPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9N
SVVNKHBpeGVsRGVzdCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJh
d1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0RyYXdRdWFkLmNwcAppbmRleCA5Y2NhNzE0MTJhY2Q3ZjViYzY3OGM4NTRkY2IyZDVk
NWUwMmE4YzJhLi5jOTA1YzAyNjBmMWVkNjdiNGNiZDJjYjdmZDdkNjAxMGE1ZDhjNzNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvRHJhd1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAKQEAgLTI5LDE4ICsyOSwyMCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1ZpZGVvRHJh
d1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBj
b25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVy
ZXMsIFdlYktpdDo6V2ViVmlkZW9GcmFtZSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCkKK1Bhc3NP
d25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwg
Q0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSBwbGFuZXNbV2ViS2l0OjpXZWJWaWRlb0ZyYW1l
OjptYXhQbGFuZXNdLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4dHVyZUlkLCBHQzNEZW51bSBm
b3JtYXQsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKIHsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUs
IHF1YWRSZWN0LCB0ZXh0dXJlcywgZnJhbWUsIGZvcm1hdCkpOworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NWaWRlb0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHBsYW5lcywg
ZnJhbWVQcm92aWRlclRleHR1cmVJZCwgZm9ybWF0LCBtYXRyaXgpKTsKIH0KIAotQ0NWaWRlb0Ry
YXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1
YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6OlRleHR1
cmUqIHRleHR1cmVzLCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUqIGZyYW1lLCBHQzNEZW51bSBmb3Jt
YXQpCitDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NWaWRlb0xh
eWVySW1wbDo6RnJhbWVQbGFuZSBwbGFuZXNbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFu
ZXNdLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVyVGV4dHVyZUlkLCBHQzNEZW51bSBmb3JtYXQsIGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKICAgICA6IENDRHJh
d1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpWaWRlb0NvbnRlbnQsIHF1YWRSZWN0
KQotICAgICwgbV90ZXh0dXJlcyh0ZXh0dXJlcykKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAg
LCBtX2ZyYW1lUHJvdmlkZXJUZXh0dXJlSWQoZnJhbWVQcm92aWRlclRleHR1cmVJZCkKICAgICAs
IG1fZm9ybWF0KGZvcm1hdCkKLSAgICAsIG1fbWF0cml4KDApCisgICAgLCBtX21hdHJpeChtYXRy
aXgpCiB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXZWJLaXQ6OldlYlZpZGVvRnJhbWU6
Om1heFBsYW5lczsgKytpKQorICAgICAgbV9wbGFuZXNbaV0gPSBwbGFuZXNbaV07CisKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaAppbmRleCA5ZWIzNTdmYzg2YjVhNDQ5YTkyY2Nl
ZWQxNjUzYzlkZDgyYzI1ZDM5Li45ODViNTQ0ZjBkMTMxM2I1YTRiMzM3NWQzZTk1NjhhMjM0NDJl
Y2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaApAQCAtMjksMzMgKzI5LDI5IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgog
I2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlZpZGVvRnJhbWU7Ci19Ci0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFk
U3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVy
ZXMsIFdlYktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZSBwbGFuZXNb
V2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFuZXNdLCB1bnNpZ25lZCBmcmFtZVByb3ZpZGVy
VGV4dHVyZUlkLCBHQzNEZW51bSBmb3JtYXQsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKIAotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlczsgfQotICAgIFdlYktpdDo6V2ViVmlkZW9GcmFtZSog
ZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgLy8gRWFjaCBpbmRleCBpbiB0
aGlzIGFycmF5IGNvcnJlc3BvbmRzIHRvIGEgcGxhbmUgaW4gV2ViS2l0OjpXZWJWaWRlb0ZyYW1l
LgorICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUqIHBsYW5lcygpIGNvbnN0
IHsgcmV0dXJuIG1fcGxhbmVzOyB9CisgICAgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJ
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVQcm92aWRlclRleHR1cmVJZDsgfQogICAgIEdDM0Rl
bnVtIGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9Ci0gICAgY29uc3QgZmxvYXQq
IG1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4OyB9Ci0KLSAgICB2b2lkIHNldE1hdHJp
eChjb25zdCBmbG9hdCogbWF0cml4KSB7IG1fbWF0cml4ID0gbWF0cml4OyB9CisgICAgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KCkgY29uc3QgeyByZXR1cm4g
bV9tYXRyaXg7IH0KIAogcHJpdmF0ZToKLSAgICBDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSog
dGV4dHVyZXMsIFdlYktpdDo6V2ViVmlkZW9GcmFtZSosIEdDM0RlbnVtIGZvcm1hdCk7CisgICAg
Q0NWaWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYs
IENDVmlkZW9MYXllckltcGw6OkZyYW1lUGxhbmUgcGxhbmVzW1dlYktpdDo6V2ViVmlkZW9GcmFt
ZTo6bWF4UGxhbmVzXSwgdW5zaWduZWQgZnJhbWVQcm92aWRlclRleHR1cmVJZCwgR0MzRGVudW0g
Zm9ybWF0LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICBD
Q1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiBtX3RleHR1cmVzOwotICAgIFdlYktpdDo6V2ViVmlk
ZW9GcmFtZSogbV9mcmFtZTsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lIG1fcGxh
bmVzW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6bWF4UGxhbmVzXTsKKyAgICB1bnNpZ25lZCBtX2Zy
YW1lUHJvdmlkZXJUZXh0dXJlSWQ7CiAgICAgR0MzRGVudW0gbV9mb3JtYXQ7Ci0gICAgY29uc3Qg
ZmxvYXQqIG1fbWF0cml4OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9t
YXRyaXg7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDEw
NWMxMTlmNGY5NTYwOGE2ODBhNjZiMzk1ZDI2ZWYxMTkyOTVlN2YuLmE2MDQxM2M2Y2QyZmYxMWQ1
ZjhlYTJhMWQ0MjNkMDI0NTQ3MTUxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
Y3BwCkBAIC0zMiw4ICszMiwxMCBAQAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVTdWJJbWFnZS5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFuYWdlci5oIiAvLyBGb3IgVGV4dHVyZUFsbG9jYXRvcgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVk
ZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCkBAIC00Myw0MiArNDUsMTcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0vLyBUaGVzZSB2YWx1ZXMgYXJlIG1hZ2ljIG51bWJlcnMgdGhhdCBhcmUgdXNl
ZCBpbiB0aGUgdHJhbnNmb3JtYXRpb24KLS8vIGZyb20gWVVWIHRvIFJHQiBjb2xvciB2YWx1ZXMu
Ci0vLyBUaGV5IGFyZSB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgd2VicGFnZToKLS8vIGh0dHA6
Ly93d3cuZm91cmNjLm9yZy9mY2N5dnJnYi5waHAKLWNvbnN0IGZsb2F0IENDVmlkZW9MYXllcklt
cGw6Onl1djJSR0JbOV0gPSB7Ci0gICAgMS4xNjRmLCAxLjE2NGYsIDEuMTY0ZiwKLSAgICAwLmYs
IC0uMzkxZiwgMi4wMThmLAotICAgIDEuNTk2ZiwgLS44MTNmLCAwLmYsCi19OwotCi0vLyBUaGVz
ZSB2YWx1ZXMgbWFwIHRvIDE2LCAxMjgsIGFuZCAxMjggcmVzcGVjdGl2ZWx5LCBhbmQgYXJlIGNv
bXB1dGVkCi0vLyBhcyBhIGZyYWN0aW9uIG92ZXIgMjU2IChlLmcuIDE2IC8gMjU2ID0gMC4wNjI1
KS4KLS8vIFRoZXkgYXJlIHVzZWQgaW4gdGhlIFlVViB0byBSR0JBIGNvbnZlcnNpb24gZm9ybXVs
YToKLS8vICAgWSAtIDE2ICAgOiBHaXZlcyAxNiB2YWx1ZXMgb2YgaGVhZCBhbmQgZm9vdHJvb20g
Zm9yIG92ZXJzaG9vdGluZwotLy8gICBVIC0gMTI4ICA6IFR1cm5zIHVuc2lnbmVkIFUgaW50byBz
aWduZWQgVSBbLTEyOCwxMjddCi0vLyAgIFYgLSAxMjggIDogVHVybnMgdW5zaWduZWQgViBpbnRv
IHNpZ25lZCBWIFstMTI4LDEyN10KLWNvbnN0IGZsb2F0IENDVmlkZW9MYXllckltcGw6Onl1dkFk
anVzdFszXSA9IHsKLSAgICAtMC4wNjI1ZiwKLSAgICAtMC41ZiwKLSAgICAtMC41ZiwKLX07Ci0K
LS8vIFRoaXMgbWF0cml4IGlzIHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9uIGZvciBzdHJlYW0g
dGV4dHVyZXMuCi1jb25zdCBmbG9hdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpmbGlwVHJhbnNmb3JtWzE2
XSA9IHsKLSAgICAxLCAwLCAwLCAwLAotICAgIDAsIC0xLCAwLCAwLAotICAgIDAsIDAsIDEsIDAs
Ci0gICAgMCwgMSwgMCwgMSwKLX07Ci0KIENDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllcklt
cGwoaW50IGlkLCBXZWJLaXQ6OldlYlZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIpCiAgICAg
OiBDQ0xheWVySW1wbChpZCkKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCiAgICAgLCBtX2Zy
YW1lKDApCiB7Ci0gICAgbWVtY3B5KG1fc3RyZWFtVGV4dHVyZU1hdHJpeCwgZmxpcFRyYW5zZm9y
bSwgc2l6ZW9mKG1fc3RyZWFtVGV4dHVyZU1hdHJpeCkpOworICAgIC8vIFRoaXMgbWF0cml4IGlz
IHRoZSBkZWZhdWx0IHRyYW5zZm9ybWF0aW9uIGZvciBzdHJlYW0gdGV4dHVyZXMsIGFuZCBmbGlw
cyBvbiB0aGUgWSBheGlzLgorICAgIG1fc3RyZWFtVGV4dHVyZU1hdHJpeCA9IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgoCisgICAgICAgIDEsIDAsIDAsIDAsCisgICAgICAgIDAsIC0x
LCAwLCAwLAorICAgICAgICAwLCAwLCAxLCAwLAorICAgICAgICAwLCAxLCAwLCAxKTsKIAogICAg
IC8vIFRoaXMgb25seSBoYXBwZW5zIGR1cmluZyBhIGNvbW1pdCBvbiB0aGUgY29tcG9zaXRvciB0
aHJlYWQgd2hpbGUgdGhlIG1haW4KICAgICAvLyB0aHJlYWQgaXMgYmxvY2tlZC4gVGhhdCBtYWtl
cyB0aGlzIGEgdGhyZWFkLXNhZmUgY2FsbCB0byBzZXQgdGhlIHZpZGVvCkBAIC05Niw4ICs3Mywx
MiBAQCBDQ1ZpZGVvTGF5ZXJJbXBsOjp+Q0NWaWRlb0xheWVySW1wbCgpCiAgICAgICAgIG1fcHJv
dmlkZXItPnNldFZpZGVvRnJhbWVQcm92aWRlckNsaWVudCgwKTsKICAgICAgICAgbV9wcm92aWRl
ciA9IDA7CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFuZXM7ICsr
aSkKLSAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUuY2xlYXIoKTsKKyAgICBmcmVlUGxh
bmVEYXRhKGxheWVyVHJlZUhvc3RJbXBsKCktPmxheWVyUmVuZGVyZXIoKSk7CisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdlYktpdDo6V2ViVmlk
ZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisgICAgICAgIEFTU0VSVCghbV9mcmFtZVBsYW5lc1tp
XS50ZXh0dXJlSWQpOworI2VuZGlmCiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c3RvcFVz
aW5nUHJvdmlkZXIoKQpAQCAtMTQxLDEzICsxMjIsMTQgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
Ojp3aWxsRHJhdyhDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyLCBDQ0dyYXBoaWNzQ29udGV4dCog
Y28KICAgICAvLyBsb2NrIHNob3VsZCBub3QgY2F1c2UgYSBkZWFkbG9jay4KICAgICBtX3Byb3Zp
ZGVyTXV0ZXgubG9jaygpOwogCi0gICAgd2lsbERyYXdJbnRlcm5hbChsYXllclJlbmRlcmVyKTsK
KyAgICB3aWxsRHJhd0ludGVybmFsKGxheWVyUmVuZGVyZXIsIGNvbnRleHQpOworICAgIGZyZWVV
bnVzZWRQbGFuZURhdGEobGF5ZXJSZW5kZXJlcik7CiAKICAgICBpZiAoIW1fZnJhbWUpCiAgICAg
ICAgIG1fcHJvdmlkZXJNdXRleC51bmxvY2soKTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
Ojp3aWxsRHJhd0ludGVybmFsKENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIpCit2b2lkIENDVmlk
ZW9MYXllckltcGw6OndpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlciwg
Q0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKIApAQCAtMTY5LDkgKzE1MSwyMiBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6
OndpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmICghcmVzZXJ2ZVRleHR1cmVzKCptX2ZyYW1lLCBtX2Zvcm1h
dCwgbGF5ZXJSZW5kZXJlcikpIHsKKyAgICBpZiAobV9mcmFtZS0+cGxhbmVzKCkgPiBXZWJLaXQ6
OldlYlZpZGVvRnJhbWU6Om1heFBsYW5lcykgeworICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJy
ZW50RnJhbWUobV9mcmFtZSk7CisgICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFhbGxvY2F0ZVBsYW5lRGF0YShsYXllclJlbmRlcmVyKSkgewog
ICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUobV9mcmFtZSk7CiAgICAgICAgIG1f
ZnJhbWUgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjb3B5UGxhbmVE
YXRhKGxheWVyUmVuZGVyZXIsIGNvbnRleHQpKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1
cnJlbnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiB9CiAKQEAgLTE4MiwxMSArMTc3LDE2IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1w
bDo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRRdWFk
U3RhCiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTog
V2hlbiB3ZSBwYXNzIHF1YWRzIG91dCBvZiBwcm9jZXNzLCB3ZSBuZWVkIHRvIGRvdWJsZS1idWZm
ZXIsIG9yCisgICAgLy8gb3RoZXJ3aXNlIHN5bmNob25pemUgdXNlIG9mIGFsbCB0ZXh0dXJlcyBp
biB0aGUgcXVhZC4KKwogICAgIEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkp
OwotICAgIE93blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IHZpZGVvUXVhZCA9IENDVmlkZW9EcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIG1fdGV4dHVyZXMsIG1fZnJhbWUs
IG1fZm9ybWF0KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsK
IAogICAgIGlmIChtX2Zvcm1hdCA9PSBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R0xfVEVYVFVSRV9F
WFRFUk5BTF9PRVMpCi0gICAgICAgIHZpZGVvUXVhZC0+c2V0TWF0cml4KG1fc3RyZWFtVGV4dHVy
ZU1hdHJpeCk7CisgICAgICAgIG1hdHJpeCA9IG1fc3RyZWFtVGV4dHVyZU1hdHJpeDsKKworICAg
IE93blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IHZpZGVvUXVhZCA9IENDVmlkZW9EcmF3UXVhZDo6Y3Jl
YXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIG1fZnJhbWVQbGFuZXMsIG1fZnJhbWUtPnRl
eHR1cmVJZCgpLCBtX2Zvcm1hdCwgbWF0cml4KTsKIAogICAgIHF1YWRMaXN0LmFwcGVuZCh2aWRl
b1F1YWQucmVsZWFzZSgpKTsKIH0KQEAgLTE5OSw4ICsxOTksNiBAQCB2b2lkIENDVmlkZW9MYXll
ckltcGw6OmRpZERyYXcoKQogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9mcmFtZS0+cGxhbmVzKCk7ICsr
cGxhbmUpCi0gICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7
CiAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOwogICAgIG1fZnJhbWUg
PSAwOwogCkBAIC0yNDMsMzUgKzI0MSw4OCBAQCBJbnRTaXplIENDVmlkZW9MYXllckltcGw6OmNv
bXB1dGVWaXNpYmxlU2l6ZShjb25zdCBXZWJLaXQ6OldlYlZpZGVvRnJhbWUmIGZyYW1lLAogICAg
IHJldHVybiBJbnRTaXplKHZpc2libGVXaWR0aCwgdmlzaWJsZUhlaWdodCk7CiB9CiAKLWJvb2wg
Q0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6V2ViVmlkZW9G
cmFtZSYgZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikK
K2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6YWxsb2NhdGVEYXRhKENDUmVuZGVy
ZXIqIGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKHRleHR1cmVJZCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyLT5jb250ZW50c1RleHR1cmVB
bGxvY2F0b3IoKS0+Y3JlYXRlVGV4dHVyZShzaXplLCBmb3JtYXQpOworICAgIHJldHVybiB0ZXh0
dXJlSWQ7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6RnJhbWVQbGFuZTo6ZnJlZURhdGEo
Q0NSZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBpZiAoIXRleHR1cmVJZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbGF5ZXJSZW5kZXJlci0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9y
KCktPmRlbGV0ZVRleHR1cmUodGV4dHVyZUlkLCBzaXplLCBmb3JtYXQpOworICAgIHRleHR1cmVJ
ZCA9IDA7Cit9CisKK2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6YWxsb2NhdGVQbGFuZURhdGEoQ0NS
ZW5kZXJlciogbGF5ZXJSZW5kZXJlcikKIHsKLSAgICBpZiAoZnJhbWUucGxhbmVzKCkgPiBNYXhQ
bGFuZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBs
YXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKLSAgICBmb3IgKHVu
c2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS5wbGFuZXMoKTsgKytwbGFuZSkgewotICAg
ICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUoZnJhbWUuc3RyaWRlKHBsYW5lKSwgdmlk
ZW9GcmFtZURpbWVuc2lvbihmcmFtZS5oZWlnaHQoKSwgcGxhbmUsIGZyYW1lLmZvcm1hdCgpKSk7
Ci0gICAgICAgIC8vIElmIHRoZSByZW5kZXJlciBjYW5ub3QgaGFuZGxlIHRoaXMgbGFyZ2Ugb2Yg
YSB0ZXh0dXJlLCByZXR1cm4gZmFsc2UuCi0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0
ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICBmb3IgKHVuc2lnbmVk
IHBsYW5lSW5kZXggPSAwOyBwbGFuZUluZGV4IDwgbV9mcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmVJ
bmRleCkgeworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lJiBwbGFuZSA9IG1f
ZnJhbWVQbGFuZXNbcGxhbmVJbmRleF07CisKKyAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1
cmVTaXplKG1fZnJhbWUtPnN0cmlkZShwbGFuZUluZGV4KSwgdmlkZW9GcmFtZURpbWVuc2lvbiht
X2ZyYW1lLT5oZWlnaHQoKSwgcGxhbmVJbmRleCwgbV9mcmFtZS0+Zm9ybWF0KCkpKTsKKyAgICAg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgdGVzdCBhZ2FpbnN0IG1heFRleHR1cmVTaXplIHdoZW4g
dGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KICAgICAgICAgaWYgKHJlcXVpcmVkVGV4dHVy
ZVNpemUuaXNaZXJvKCkgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpID4gbWF4VGV4dHVy
ZVNpemUgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1cmVTaXplKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVd
Lm1fdGV4dHVyZSkgewotICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlID0g
TWFuYWdlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIo
KSk7Ci0gICAgICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkKKworICAg
ICAgICBpZiAocGxhbmUuc2l6ZSAhPSByZXF1aXJlZFRleHR1cmVTaXplIHx8IHBsYW5lLmZvcm1h
dCAhPSBtX2Zvcm1hdCkgeworICAgICAgICAgICAgcGxhbmUuZnJlZURhdGEobGF5ZXJSZW5kZXJl
cik7CisgICAgICAgICAgICBwbGFuZS5zaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKKyAgICAg
ICAgICAgIHBsYW5lLmZvcm1hdCA9IG1fZm9ybWF0OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFwbGFuZS50ZXh0dXJlSWQpIHsKKyAgICAgICAgICAgIGlmICghcGxhbmUuYWxsb2NhdGVEYXRh
KGxheWVyUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW1wbFRleHR1cmVNYW5hZ2VyIG1heSBoYXZl
IGJlZW4gZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUsIHNvIHBh
c3MgdGhlIG5ldyBvbmUuCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgaWYgdGhlIFRl
eHR1cmVNYW5hZ2VyIGlzIHN0aWxsIGFyb3VuZC4KLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxh
bmVdLm1fdGV4dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIobGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1
cmVNYW5hZ2VyKCkpOworICAgICAgICAgICAgcGxhbmUudmlzaWJsZVNpemUgPSBjb21wdXRlVmlz
aWJsZVNpemUoKm1fZnJhbWUsIHBsYW5lSW5kZXgpOwogICAgICAgICB9Ci0gICAgICAgIGlmICht
X3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFRleHR1cmVTaXpl
KQotICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9IGNvbXB1dGVW
aXNpYmxlU2l6ZShmcmFtZSwgcGxhbmUpOwotICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVd
Lm1fdGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFRleHR1cmVTaXplLCBmb3JtYXQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpjb3B5UGxhbmVEYXRhKENDUmVuZGVyZXIqIGxheWVyUmVuZGVyZXIs
IENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIHNpemVfdCBzb2Z0d2FyZVBsYW5l
Q291bnQgPSBtX2ZyYW1lLT5wbGFuZXMoKTsKKyAgICBpZiAoIXNvZnR3YXJlUGxhbmVDb3VudCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNk
ID0gY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QpIHsKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2Ug
dXBsb2FkZXIodHJ1ZSk7CisgICAgZm9yIChzaXplX3Qgc29mdHdhcmVQbGFuZUluZGV4ID0gMDsg
c29mdHdhcmVQbGFuZUluZGV4IDwgc29mdHdhcmVQbGFuZUNvdW50OyArK3NvZnR3YXJlUGxhbmVJ
bmRleCkgeworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpGcmFtZVBsYW5lJiBwbGFuZSA9IG1f
ZnJhbWVQbGFuZXNbc29mdHdhcmVQbGFuZUluZGV4XTsKKyAgICAgICAgY29uc3QgdWludDhfdCog
c29mdHdhcmVQbGFuZVBpeGVscyA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2ZyYW1l
LT5kYXRhKHNvZnR3YXJlUGxhbmVJbmRleCkpOworICAgICAgICBJbnRSZWN0IHBsYW5lUmVjdChJ
bnRQb2ludCgpLCBwbGFuZS5zaXplKTsKKworICAgICAgICBjb250ZXh0M2QtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBwbGFuZS50ZXh0dXJlSWQpOworICAgICAg
ICB1cGxvYWRlci5zZXRTdWJJbWFnZVNpemUocGxhbmUuc2l6ZSk7CisgICAgICAgIHVwbG9hZGVy
LnVwbG9hZChzb2Z0d2FyZVBsYW5lUGl4ZWxzLCBwbGFuZVJlY3QsIHBsYW5lUmVjdCwgcGxhbmVS
ZWN0LCBwbGFuZS5mb3JtYXQsIGNvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpmcmVlUGxhbmVEYXRhKENDUmVuZGVyZXIqIGxheWVy
UmVuZGVyZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdlYktpdDo6V2ViVmlk
ZW9GcmFtZTo6bWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fZnJhbWVQbGFuZXNbaV0uZnJlZURh
dGEobGF5ZXJSZW5kZXJlcik7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZnJlZVVudXNl
ZFBsYW5lRGF0YShDQ1JlbmRlcmVyKiBsYXllclJlbmRlcmVyKQoreworICAgIHVuc2lnbmVkIGZp
cnN0VW51c2VkUGxhbmUgPSBtX2ZyYW1lID8gbV9mcmFtZS0+cGxhbmVzKCkgOiAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IGZpcnN0VW51c2VkUGxhbmU7IGkgPCBXZWJLaXQ6OldlYlZpZGVvRnJh
bWU6Om1heFBsYW5lczsgKytpKQorICAgICAgICBtX2ZyYW1lUGxhbmVzW2ldLmZyZWVEYXRhKGxh
eWVyUmVuZGVyZXIpOworfQorCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZFJlY2VpdmVGcmFt
ZSgpCiB7CiAgICAgc2V0TmVlZHNSZWRyYXcoKTsKQEAgLTI3OSwxNCArMzMwLDE3IEBAIHZvaWQg
Q0NWaWRlb0xheWVySW1wbDo6ZGlkUmVjZWl2ZUZyYW1lKCkKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpkaWRVcGRhdGVNYXRyaXgoY29uc3QgZmxvYXQgbWF0cml4WzE2XSkKIHsKLSAgICBtZW1j
cHkobV9zdHJlYW1UZXh0dXJlTWF0cml4LCBtYXRyaXgsIHNpemVvZihtX3N0cmVhbVRleHR1cmVN
YXRyaXgpKTsKKyAgICBtX3N0cmVhbVRleHR1cmVNYXRyaXggPSBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KAorICAgICAgICBtYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzJdLCBt
YXRyaXhbM10sCisgICAgICAgIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBtYXRyaXhbNl0sIG1hdHJp
eFs3XSwKKyAgICAgICAgbWF0cml4WzhdLCBtYXRyaXhbOV0sIG1hdHJpeFsxMF0sIG1hdHJpeFsx
MV0sCisgICAgICAgIG1hdHJpeFsxMl0sIG1hdHJpeFsxM10sIG1hdHJpeFsxNF0sIG1hdHJpeFsx
NV0pOwogICAgIHNldE5lZWRzUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6
ZGlkTG9zZUNvbnRleHQoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFu
ZXM7ICsraSkKLSAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUuY2xlYXIoKTsKKyAgICBm
cmVlUGxhbmVEYXRhKGxheWVyVHJlZUhvc3RJbXBsKCktPmxheWVyUmVuZGVyZXIoKSk7CiB9CiAK
IHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0TmVlZHNSZWRyYXcoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5oCmluZGV4IDIyMWY2MDBhY2ViOGEzMTk5ZjZkNzg2OGE0YzFkNmRmZWI2OGJl
YTYuLmJlZjFkNWYwOWU1NTQxNzhlZTE1MTAyNzRjNTBkODI2MDVjNTM2MDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTI2LDggKzI2LDEwIEBACiAjaWZuZGVmIENDVmlkZW9M
YXllckltcGxfaAogI2RlZmluZSBDQ1ZpZGVvTGF5ZXJJbXBsX2gKIAotI2luY2x1ZGUgIk1hbmFn
ZWRUZXh0dXJlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFt
ZVByb3ZpZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNjUsMTUgKzY3LDE3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIAotICAgIHN0YXRpYyBjb25zdCBm
bG9hdCB5dXYyUkdCWzldOwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107Ci0g
ICAgc3RhdGljIGNvbnN0IGZsb2F0IGZsaXBUcmFuc2Zvcm1bMTZdOworICAgIHN0cnVjdCBGcmFt
ZVBsYW5lIHsKKyAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOworICAgICAgICBJbnRTaXplIHNp
emU7CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKKyAgICAgICAgSW50U2l6ZSB2aXNpYmxlU2l6
ZTsKIAotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiBtX3RleHR1cmU7Ci0gICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsKKyAgICAgICAgRnJh
bWVQbGFuZSgpIDogdGV4dHVyZUlkKDApIHsgfQorCisgICAgICAgIGJvb2wgYWxsb2NhdGVEYXRh
KENDUmVuZGVyZXIqKTsKKyAgICAgICAgdm9pZCBmcmVlRGF0YShDQ1JlbmRlcmVyKik7CiAgICAg
fTsKLSAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9OwogCiBwcml2YXRlOgogICAgIENDVmlkZW9M
YXllckltcGwoaW50LCBXZWJLaXQ6OldlYlZpZGVvRnJhbWVQcm92aWRlciopOwpAQCAtODEsMTkg
Kzg1LDIzIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEludFNpemUgY29tcHV0ZVZpc2libGVTaXpl
KGNvbnN0IFdlYktpdDo6V2ViVmlkZW9GcmFtZSYsIHVuc2lnbmVkIHBsYW5lKTsKICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gIlZpZGVvTGF5ZXIiOyB9CiAKLSAgICB2b2lkIHdpbGxEcmF3SW50ZXJuYWwoQ0NSZW5kZXJl
ciopOwotICAgIGJvb2wgcmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFdlYktpdDo6V2ViVmlkZW9GcmFt
ZSYsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZW5kZXJlciopOworICAgIHZvaWQgd2lsbERyYXdJbnRl
cm5hbChDQ1JlbmRlcmVyKiwgQ0NHcmFwaGljc0NvbnRleHQqKTsKKyAgICBib29sIGFsbG9jYXRl
UGxhbmVEYXRhKENDUmVuZGVyZXIqKTsKKyAgICBib29sIGNvcHlQbGFuZURhdGEoQ0NSZW5kZXJl
ciosIENDR3JhcGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBmcmVlUGxhbmVEYXRhKENDUmVuZGVy
ZXIqKTsKKyAgICB2b2lkIGZyZWVVbnVzZWRQbGFuZURhdGEoQ0NSZW5kZXJlciopOwogCiAgICAg
Ly8gR3VhcmRzIHRoZSBkZXN0cnVjdGlvbiBvZiBtX3Byb3ZpZGVyIGFuZCB0aGUgZnJhbWUgdGhh
dCBpdCBwcm92aWRlcwogICAgIE11dGV4IG1fcHJvdmlkZXJNdXRleDsKICAgICBXZWJLaXQ6Oldl
YlZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsKIAotICAgIFRleHR1cmUgbV90ZXh0dXJl
c1tNYXhQbGFuZXNdOwotCi0gICAgZmxvYXQgbV9zdHJlYW1UZXh0dXJlTWF0cml4WzE2XTsKKyAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3RyZWFtVGV4dHVyZU1hdHJpeDsK
IAogICAgIFdlYktpdDo6V2ViVmlkZW9GcmFtZSogbV9mcmFtZTsKICAgICBHQzNEZW51bSBtX2Zv
cm1hdDsKKworICAgIC8vIEVhY2ggaW5kZXggaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcyB0byBh
IHBsYW5lIGluIFdlYktpdDo6V2ViVmlkZW9GcmFtZS4KKyAgICBGcmFtZVBsYW5lIG1fZnJhbWVQ
bGFuZXNbV2ViS2l0OjpXZWJWaWRlb0ZyYW1lOjptYXhQbGFuZXNdOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LmNwcAppbmRleCA1YzhmMDJiM2M1ZDVjMTE0NGEzN2ExOTIzZjdhYTU4ODBmMWNmZGNlLi5h
YjlhMDg4Y2FkMTFkYWJhMDRjYjFjZDY5MWMxNjFhYWRmMjE4ODhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cApAQCAtMTc4OSw2ICsxNzg5LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBk
b250VXNlT2xkUmVzb3VyY2VzQWZ0ZXJMb3N0Q29udGV4dCkKICAgICB2aWRlb0xheWVyLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICB2aWRlb0xheWVyLT5zZXRDb250ZW50
Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgdmlkZW9MYXllci0+c2V0RHJhd3NDb250ZW50
KHRydWUpOworICAgIHZpZGVvTGF5ZXItPnNldExheWVyVHJlZUhvc3RJbXBsKG1faG9zdEltcGwu
Z2V0KCkpOwogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodmlkZW9MYXllci5yZWxlYXNlKCkpOwog
CiAgICAgT3duUHRyPENDSU9TdXJmYWNlTGF5ZXJJbXBsPiBpb1N1cmZhY2VMYXllciA9IENDSU9T
dXJmYWNlTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCmluZGV4IDk4MjRkOGMwNjRmZDQw
N2FhMjdjYWVlMzhkMDcwOTBlN2ZiMmRjZTAuLmYxNTIwMWE4NGQxZTNkNmRiNWMzM2U5MDIxNWMz
ODc4YTJlZTA2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NU
aWxlZExheWVyVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0xNTcsNiArMTU3LDcgQEAgcHVibGljOgogY2xh
c3MgRmFrZVRleHR1cmVDb3BpZXIgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZUNvcGllciB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKFdlYkNvcmU6OkNDR3JhcGhpY3ND
b250ZXh0KiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGNvcHlUb1RleHR1cmUoV2ViQ29yZTo6Q0NHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCB2b2lkKiwgdW5zaWduZWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBHQzNE
ZW51bSkgeyB9CiB9OwogCiBjbGFzcyBGYWtlVGV4dHVyZVVwbG9hZGVyIDogcHVibGljIFdlYkNv
cmU6OlRleHR1cmVVcGxvYWRlciB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>