<?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>76720</bug_id>
          
          <creation_ts>2012-01-20 11:28:01 -0800</creation_ts>
          <short_desc>[chromium] Refactor video drawing to be more data driven</short_desc>
          <delta_ts>2012-02-17 10:27:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Tim Dresser">tdresser</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>fischman</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>539647</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-20 11:28:01 -0800</bug_when>
    <thetext>From bug 73059:

CCLayerImpl-derived classes all currently handle drawing themselves internally, making direct GL calls.  This is problematic for several reasons.  Testing these layers is tricky because testing must be done at a mock GL interface level rather than at a higher abstract level.  It makes culling closely dependent on how each layer draws.  It also makes some optimizations like layer squashing impossible.

To fix this, CCLayerImpl-derived classes should produce a set of quads to render with some basic information in them about how they are to be drawn.  This list can then be processed and drawn in a more data-driven and abstract manner.


CCVideoLayerImpl still handles drawing internally and should be transitioned to the data-driven approach.
This builds on the initial refactor from bug 76274 and is closely related to bug 76635, which refactors CCCanvasLayerImpl, and bug 76715, which refactors CCPluginLayerImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540692</commentid>
    <comment_count>1</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-23 11:29:05 -0800</bug_when>
    <thetext>I&apos;m not sure that its possible to avoid quads sharing writable objects in this case.

In the draw code for video quads, the VideoFrameProvider is guarded by a Mutex, with a lock that lasts from the time a frame is requested from the VideoFrameProvider, until the time that the frame has been drawn and given back to the VideoFrameProvider. Based on the documentation in VideoFrameProvider.h, it sounds to me like this lock has to last this long, and encompass the actual drawing code.

If this is true, I don&apos;t see how to avoid sharing the VideoFrameProvider and its associated Mutex. In addition, since copyFrameToTextures needs to be called within the lock, nativeTextureSize and nativeTextureId must be shared and writable. 

If these assumptions are true (which I hope they aren&apos;t), then I think that a backpointer to the layer might be the least ugly approach.

Any ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540738</commentid>
    <comment_count>2</comment_count>
      <attachid>123595</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-23 12:16:35 -0800</bug_when>
    <thetext>Created attachment 123595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541011</commentid>
    <comment_count>3</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-23 17:20:02 -0800</bug_when>
    <thetext>This suggestion might be a solution for the plugin layer as well, but I think this would be a whole lot cleaner if you separated out texture upload from quad drawing.

I think it&apos;d be way better to add a CCLayerImpl::updateCompositorResources function and call it on each layer in calculateRenderPasses before you append quads.  I am nearly positive that the lock only needs to last through the uploads and not through the drawing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541018</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-23 17:22:41 -0800</bug_when>
    <thetext>In the H/W decoded case, there is no upload and the put() call has to be deferred until the draw is issued, IIUC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541019</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-23 17:22:41 -0800</bug_when>
    <thetext>In the H/W decoded case, there is no upload and the put() call has to be deferred until the draw is issued, IIUC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541081</commentid>
    <comment_count>6</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-01-23 19:30:36 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; In the H/W decoded case, there is no upload and the put() call has to be deferred until the draw is issued, IIUC.

That&apos;s right.

To recap: the {get,put}CurrentFrame() calls have acquire/release semantics for the frame involved.  The frame handed back by getCF() is only valid until it is returned by putCF() (at which point the underlying texture or memory can be reused for another frame).

(In reply to comment #1)
{get,put}CF() do not require holding a lock.
CCVLI::m_providerMutex is there to guard the m_provider member (so that it can be cleared safely), not individual frames.  Unless you&apos;re trying to enable clearing (deleting) a provider between getCF &amp; putCF, I don&apos;t expect this to be relevant.

Happy to chat if this is confusing or seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541515</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-24 11:32:26 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; In the H/W decoded case, there is no upload and the put() call has to be deferred until the draw is issued, IIUC.
&gt; 
&gt; That&apos;s right.

Thanks for the clarification! :)

At an abstraction level, I feel like it&apos;s LayerRendererChromium&apos;s job to only turn quads into GL calls.  I think it&apos;s the layer&apos;s job to manage resources and generate quads.  That&apos;s why pushing all of that code into LayerRendererChromium feels like a layering violation to me.

I think texture upload could still be separated out from drawing if we added a CCLayerImpl::postDraw() function then, instead of a pre-draw one.  The guarantee would be that any layer that had appendQuads called on it would also get a postDraw() call.  Then, CCVideoLayerImpl::appendQuads could upload textures and take a lock, generating quads with not much more than texture ids and rects, while CCVideoLayerImpl::postDraw() would be able to hand back the frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541658</commentid>
    <comment_count>8</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-01-24 13:58:58 -0800</bug_when>
    <thetext>It&apos;s potentially interesting that CCVLI::draw() has two, assymetric, codepaths:
1) NativeTexture frames: there is no &quot;upload&quot; needed, since the frame is already on a texture, but the underlying texture is reused as soon as putCurrentFrame() is called, so pCF() *must not* be called until the draw is done.
2) Non-NativeTexture frames: these must be uploaded to textures before pCF() is called, but then pCF() *can* be called *before* the draw is done, b/c CCVLI owns the texture in question, not the frame provider.

Today both paths through CCVLI::draw() have the same serialization look:
getCF() -&gt; upload (no-op for native textures) -&gt; draw -&gt; putCF()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542282</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-25 08:09:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think texture upload could still be separated out from drawing if we added a CCLayerImpl::postDraw() function then, instead of a pre-draw one.  The guarantee would be that any layer that had appendQuads called on it would also get a postDraw() call.  Then, CCVideoLayerImpl::appendQuads could upload textures and take a lock, generating quads with not much more than texture ids and rects, while CCVideoLayerImpl::postDraw() would be able to hand back the frame.

appendQuads can&apos;t upload the textures, since it doesn&apos;t have access to the GraphicsContext3D, TextureAllocator, LayerRenderCapabilities, or TextureManager. 

Based on the comments on bug 76715, it feels like the texture upload should happen in LayerChromium::updateCompositorResources. I don&apos;t see how I can do this, as the TextureAllocator (required by CCVideoLayerImpl::copyPlaneToTexture)  is created in LayerRendererChromium::initializeSharedObjects, so I can&apos;t access it in updateCompositorResources.

I don&apos;t see how textures can be uploaded in either appendQuads or in updateCompositorResources. 

If we can figure out how to upload textures in updateCompositorResources, then I think we would want to create LayerChromium::postDraw() instead of CCLayerImpl::postDraw().

Any suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542310</commentid>
    <comment_count>10</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-25 08:49:09 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; I think texture upload could still be separated out from drawing if we added a CCLayerImpl::postDraw() function then, instead of a pre-draw one.  The guarantee would be that any layer that had appendQuads called on it would also get a postDraw() call.  Then, CCVideoLayerImpl::appendQuads could upload textures and take a lock, generating quads with not much more than texture ids and rects, while CCVideoLayerImpl::postDraw() would be able to hand back the frame.
&gt; 
&gt; appendQuads can&apos;t upload the textures, since it doesn&apos;t have access to the GraphicsContext3D, TextureAllocator, LayerRenderCapabilities, or TextureManager. 
&gt; 
&gt; Based on the comments on bug 76715, it feels like the texture upload should happen in LayerChromium::updateCompositorResources. I don&apos;t see how I can do this, as the TextureAllocator (required by CCVideoLayerImpl::copyPlaneToTexture)  is created in LayerRendererChromium::initializeSharedObjects, so I can&apos;t access it in updateCompositorResources.

updateCompositorResources is where textures are uploaded that are painted on the main/webkit thread. IIUC video is creating frames on the impl/draw thread so it wouldn&apos;t belong in here.

&gt; I don&apos;t see how textures can be uploaded in either appendQuads or in updateCompositorResources. 
&gt; 
&gt; If we can figure out how to upload textures in updateCompositorResources, then I think we would want to create LayerChromium::postDraw() instead of CCLayerImpl::postDraw().

LayerChromium exists on the main thread side (hence no Impl suffix) so it is not part of the &quot;draw&quot; process at all.

&gt; Any suggestions?

TextureManager/Allocator are also constructs from the main thread side of the compositor. Without digging deeper I think you probably want to take how the CCVLI draw stuff was uploading textures and just move that into appendQuads modulo appropriate plumbing.

Hope this helps until enne gets in :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542410</commentid>
    <comment_count>11</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-25 10:13:35 -0800</bug_when>
    <thetext>(In reply to comment #10)

&gt; TextureManager/Allocator are also constructs from the main thread side of the compositor. Without digging deeper I think you probably want to take how the CCVLI draw stuff was uploading textures and just move that into appendQuads modulo appropriate plumbing.

Yeah, exactly.  All of this needs to stay on the CCLayerImpl side of the fence.

The only thing appendQuads is missing is a GraphicsContext3D*.  So, maybe add a CCLayerImpl::preDraw(LayerRendererChromium*) as well as a CCLayerImpl::postDraw(LayerRendererChromium*).  Call preDraw immediately before appendQuads and postDraw on all layers after the render passes have been sent to the LayerRendererChromium.

That&apos;ll keep appendQuads from being too overloaded, but it&apos;s effectively the same as moving it there with additional plumbing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542524</commentid>
    <comment_count>12</comment_count>
      <attachid>123988</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-25 12:17:38 -0800</bug_when>
    <thetext>Created attachment 123988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542530</commentid>
    <comment_count>13</comment_count>
      <attachid>123988</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-01-25 12:26:29 -0800</bug_when>
    <thetext>Comment on attachment 123988
Patch

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

drive-by

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:191
&gt; +        m_provider-&gt;putCurrentFrame(m_frame);

Here and in the other early return below, 
m_frame = 0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542533</commentid>
    <comment_count>14</comment_count>
      <attachid>123989</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-25 12:35:52 -0800</bug_when>
    <thetext>Created attachment 123989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542888</commentid>
    <comment_count>15</comment_count>
      <attachid>123989</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-25 22:40:37 -0800</bug_when>
    <thetext>Comment on attachment 123989
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:77
&gt; +    virtual void preDraw(LayerRendererChromium*) { };
&gt; +    virtual void postDraw() { };

nit: we typically don&apos;t put trailing semicolons on the end of lines like this, since they don&apos;t do anything

WebKit&apos;s typical terminology for these sorts of calls is &quot;willDraw(...) / didDraw()&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:268
&gt; +    for (unsigned layerIndex = 0; layerIndex &lt; layerList.size(); ++layerIndex) {

this looks like it&apos;ll only visit layers that are in the root layer&apos;s render surface, and not layers in other render surfaces. that can&apos;t be right!

can we use the layer iterators for this?

can we have tests for postDraw() being called on layers in render surfaces other than the root?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:196
&gt; +    if (!copyFrameToTextures(m_frame, format, layerRendererChromium)) {

why do we have to do this here? this means we&apos;ll be doing uploads even if we end up not drawing the quad (say it&apos;s culled out)

what about having this function just call getCurrentFrame() and give a pointer to the frame object to the quad. then, if we do draw the quad, we can copyFrameToTexture() at draw time where we already have access to the LRC.

if we do that then we don&apos;t need the LRC at all until we draw the quad, and we can in fact fold this entire function into appendQuads() and not need an additional pre-draw pass at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543220</commentid>
    <comment_count>16</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-26 09:58:58 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; what about having this function just call getCurrentFrame() and give a pointer to the frame object to the quad. then, if we do draw the quad, we can copyFrameToTexture() at draw time where we already have access to the LRC.

copyFrameToTexture() requires mutating the layer. The layer&apos;s list of textures, nativeTextureId, m_nativeTextureSize, etc. have to be modified, and the results need to be shared among the quads. To call copyFrameToTexture() at draw time would require quads to have a backpointer to the layer, which we&apos;re trying to avoid.

Any suggestions on how to move the copyFrameToTexture() call into LayerRendererChromium::drawVideoQuad() without requiring a backpointer to the layer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543457</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-26 14:02:46 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; what about having this function just call getCurrentFrame() and give a pointer to the frame object to the quad. then, if we do draw the quad, we can copyFrameToTexture() at draw time where we already have access to the LRC.
&gt; 
&gt; copyFrameToTexture() requires mutating the layer. The layer&apos;s list of textures, nativeTextureId, m_nativeTextureSize, etc. have to be modified, and the results need to be shared among the quads.

No, these are all draw-only state and they should live on the one quad that the video layer produces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544026</commentid>
    <comment_count>18</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-27 06:35:34 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; No, these are all draw-only state and they should live on the one quad that the video layer produces.

I was under the impression that each frame, the CCVideoLayerImpl produces a brand new quad, but the ManagedTexture objects are used in multiple frames.

Currently, the ManagedTexture objects are allocated in CCVideoLayerImpl::reserveTextures. A new ManagedTexture is only created if the layer doesn&apos;t have a texture for a specific plane. If my understanding is correct, that means that ManagedTexture objects will be reused for multiple frames. If we switch to calling reserveTextures in the quad, without a backpointer to the layer, then we&apos;ll only be able to use each ManagedTexture for one frame.

Does that sound correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545420</commentid>
    <comment_count>19</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-30 14:30:03 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; No, these are all draw-only state and they should live on the one quad that the video layer produces.
&gt; 
&gt; I was under the impression that each frame, the CCVideoLayerImpl produces a brand new quad, but the ManagedTexture objects are used in multiple frames.
&gt; 
&gt; Currently, the ManagedTexture objects are allocated in CCVideoLayerImpl::reserveTextures. A new ManagedTexture is only created if the layer doesn&apos;t have a texture for a specific plane. If my understanding is correct, that means that ManagedTexture objects will be reused for multiple frames. If we switch to calling reserveTextures in the quad, without a backpointer to the layer, then we&apos;ll only be able to use each ManagedTexture for one frame.
&gt; 
&gt; Does that sound correct?

Yeah, you have the right picture.  We shouldn&apos;t need to get a new ManagedTexture each frame.

I think you could just call reserveTextures as a part of the willDraw() function, and pass the texture ids and frame to the quad, where it can do the upload as needed without needing to touch the layer anymore.

Or, in other words, separate out copyFrameToTexture&apos;s responsibilities into two pieces: the layer mutation piece (which lives on the layer) and the upload piece (which could live in LRC as a part of quad drawing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546101</commentid>
    <comment_count>20</comment_count>
      <attachid>124742</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-31 08:48:03 -0800</bug_when>
    <thetext>Created attachment 124742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546106</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 08:51:23 -0800</bug_when>
    <thetext>Attachment 124742 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
From git://git.webkit.org/WebKit
   7140fe4..dad6b22  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 106360 = 7140fe4a50c1f3a4ce373c6fcee4f0968c84e929
r106361 = dad6b22a289679e959ba3d3a10e83d72b2ea315c
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546691</commentid>
    <comment_count>22</comment_count>
      <attachid>124742</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-31 17:41:41 -0800</bug_when>
    <thetext>Comment on attachment 124742
Patch

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

Thanks for all of this.  Since you added willDraw in both this patch and the plugin patch, I think you&apos;ll have to let one of them land first and then rebase the other on top of ToT.

jamesr, what do you think?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:739
&gt; +void LayerRendererChromium::drawCommon(const CCVideoDrawQuad* quad, Program* program, float widthScaleFactor, Platform3DObject textureId)

nit: Can you call this something else, like drawSingleTextureVideoQuad? drawCommon is a lot less meaningful of a name when moved to LRC.

(I also feel like this is yet another set of Programs that could be merged together, but I suppose those can all be done in another changelist.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547029</commentid>
    <comment_count>23</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-02-01 05:36:03 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 124742 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124742&amp;action=review
&gt; 
&gt; Thanks for all of this.  Since you added willDraw in both this patch and the plugin patch, I think you&apos;ll have to let one of them land first and then rebase the other on top of ToT.
&gt; 
&gt; jamesr, what do you think?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:739
&gt; &gt; +void LayerRendererChromium::drawCommon(const CCVideoDrawQuad* quad, Program* program, float widthScaleFactor, Platform3DObject textureId)
&gt; 
&gt; nit: Can you call this something else, like drawSingleTextureVideoQuad? drawCommon is a lot less meaningful of a name when moved to LRC.
&gt; 
&gt; (I also feel like this is yet another set of Programs that could be merged together, but I suppose those can all be done in another changelist.)

Yeah, I&apos;ve been expecting to land the plugin patch first, and then resubmit the video patch. 

I&apos;ll submit 4 new bugs when this and the plugin patch have landed.

1. Merge PluginProgramBindings.
2. Merge Programs for Video.
3. Double Buffer Plugin Layer.
4. Remove the draw call from CCLayerImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547345</commentid>
    <comment_count>24</comment_count>
      <attachid>125010</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-02-01 13:55:54 -0800</bug_when>
    <thetext>Created attachment 125010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548722</commentid>
    <comment_count>25</comment_count>
      <attachid>125331</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-02-03 08:08:37 -0800</bug_when>
    <thetext>Created attachment 125331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548723</commentid>
    <comment_count>26</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-02-03 08:09:49 -0800</bug_when>
    <thetext>Note: this patch also removes CCLayerImpl::draw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550276</commentid>
    <comment_count>27</comment_count>
      <attachid>125331</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-06 14:15:43 -0800</bug_when>
    <thetext>Comment on attachment 125331
Patch

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

Other than the one below comment, this looks good to me.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:191
&gt; -void CCLayerTreeHostImpl::calculateRenderPasses(CCRenderPassList&amp; passes)
&gt; +PassOwnPtr&lt;CCLayerTreeHostImpl::CCLayerList&gt; CCLayerTreeHostImpl::calculateRenderPasses(CCRenderPassList&amp; passes)

style nit: It&apos;s weird to have this function return one value as a return value and another value by modifying a reference.  I kind of feel like the caller should create the CCLayerList on the stack and pass that in as a reference along with CCRenderPassList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550282</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-06 14:26:34 -0800</bug_when>
    <thetext>I&apos;d prefer to hold off on this until we resolve a few other bugs with video for m18, to keep merges saner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551046</commentid>
    <comment_count>29</comment_count>
      <attachid>125858</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-02-07 09:08:51 -0800</bug_when>
    <thetext>Created attachment 125858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558176</commentid>
    <comment_count>30</comment_count>
      <attachid>127375</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-02-16 07:30:59 -0800</bug_when>
    <thetext>Created attachment 127375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558839</commentid>
    <comment_count>31</comment_count>
      <attachid>127375</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-16 20:05:29 -0800</bug_when>
    <thetext>Comment on attachment 127375
Patch

Good stuff!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559292</commentid>
    <comment_count>32</comment_count>
      <attachid>127375</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-17 10:27:48 -0800</bug_when>
    <thetext>Comment on attachment 127375
Patch

Clearing flags on attachment: 127375

Committed r108093: &lt;http://trac.webkit.org/changeset/108093&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559293</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-17 10:27:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123595</attachid>
            <date>2012-01-23 12:16:35 -0800</date>
            <delta_ts>2012-01-25 12:17:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120123151634.patch</filename>
            <type>text/plain</type>
            <size>30680</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzEzMzg1MWYwNTg5Yzgx
YTkzZWM0YzQ0ZWFiYzE4OGJkNjU4MTBiMS4uODA5ZGQ2YTYxMmM0ZjRiNzU2MTQwZTQ4NTgxYWZm
MzdlYjE1ZDc5YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTIzICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsIG5vIGxv
bmdlciBoYW5kbGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDVmlk
ZW9EcmF3UXVhZHMuCisgICAgICAgIFRoZXNlIHF1YWRzIGFyZSB0aGVuIGRyYXduIGJ5IExheWVy
UmVuZGVyZXJDaHJvbWl1bS4KKworICAgICAgICBUaGlzIGlzIGEgcmVmYWN0b3IsIHNvIG5vIG5l
dyB0ZXN0cyB3ZXJlIGFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdOYXRpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29weVBsYW5lVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6cmVzZXJ2ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1lVG9UZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvRHJhd1F1YWQ6OnNldExheWVyUGxhbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9EcmF3UXVhZDo6bGF5ZXJOYXRpdmVUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NWaWRlb0RyYXdRdWFkOjpzZXRMYXllck5hdGl2ZVRleHR1cmVJZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmxheWVyTmF0aXZlVGV4dHVyZVNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpzZXRMYXllck5hdGl2ZVRleHR1cmVTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6bGF5ZXJQcm92aWRlck11dGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6bGF5ZXJQcm92aWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmxheWVyVGV4dHVyZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6Y29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpjb21wdXRlVmlzaWJsZVNp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6Om5hdGl2ZVRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXROYXRpdmVUZXh0
dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6bmF0aXZlVGV4dHVy
ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6c2V0TmF0aXZlVGV4
dHVyZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6cHJvdmlkZXJN
dXRleCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpwcm92aWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRQbGFuZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6dGV4dHVyZXMpOgorCiAyMDEyLTAxLTIwICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZWZhY3RvciBjYW52
YXMgZHJhd2luZyB0byBiZSBtb3JlIGRhdGEgZHJpdmVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAppbmRleCBiYmRmODlkYWYwMTY4Y2M4MDQxOTZiZDlmMzEzYjMwYTg5ZjMz
MWM2Li5hYjg2MGZiNzNhNWM5ZDFhN2FmNGExNzMwZmQyMzBmNGM1OTNiZWI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTY5MiwxMCArNjkyLDE4NSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NhbnZhc1F1YWQoY29uc3QgQ0NDYW52YXNEcmF3
UXVhZCogcXVhZCkKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJsZW5kRnVu
YyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NS
Q19BTFBIQSkpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVihjb25z
dCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6
WVVWUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7CisgICAgQVNTRVJU
KHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBjb25zdCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpUZXh0dXJlJiB5VGV4dHVyZSA9IHF1YWQtPmxheWVyVGV4dHVyZXMoKVtWaWRl
b0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4
dHVyZSYgdVRleHR1cmUgPSBxdWFkLT5sYXllclRleHR1cmVzKClbVmlkZW9GcmFtZUNocm9taXVt
Ojp1UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHZUZXh0dXJl
ID0gcXVhZC0+bGF5ZXJUZXh0dXJlcygpW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXTsKKwor
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRl
eHR1cmVJZCgpKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJl
Lm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7CisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgdlRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworCisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAg
ZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUubV92
aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7
CisgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGlt
ZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgorICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0
YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1
cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3Rvckxv
Y2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9y
TG9jYXRpb24oKSwgdXZXaWR0aFNjYWxlRmFjdG9yKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJlTG9j
YXRpb24oKSwgMSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudVRleHR1cmVMb2NhdGlvbigpLCAyKSk7CisgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS52VGV4dHVyZUxvY2F0aW9uKCksIDMpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9j
YXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+KENDVmlkZW9MYXllckltcGw6Onl1djJSR0Ip
LCAxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtM2Z2KHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkueXV2QWRqTG9jYXRpb24oKSwgY29uc3RfY2FzdDxmbG9hdCo+KEND
VmlkZW9MYXllckltcGw6Onl1dkFkanVzdCksIDEpKTsKKworICAgIGNvbnN0IEludFNpemUmIGJv
dW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVh
ZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVh
ZC0+b3BhY2l0eSgpLCBGbG9hdFF1YWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFs
cGhhTG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsK
KworICAgIC8vIFJlc2V0IGFjdGl2ZSB0ZXh0dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgorICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4KK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3Q29tbW9uKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCwgUHJv
Z3JhbSogcHJvZ3JhbSwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlSWQpCit7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQo
KSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CisK
KyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bSgpKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZh
Y3RvciwgMSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgIGNvbnN0
IEludFNpemUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAgIGRyYXdUZXh0
dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5o
ZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJp
eExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdSR0JBKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKK3sKKyAgICBjb25zdCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgp
OworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT5s
YXllclRleHR1cmVzKClbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07CisgICAgZmxvYXQg
d2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJlLm1fdmlzaWJsZVNp
emUud2lkdGgoKSkgLyB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CisgICAgZHJh
d0NvbW1vbihxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVy
ZS0+dGV4dHVyZUlkKCkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd05h
dGl2ZVRleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IEND
VmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9MYXll
ck5hdGl2ZVRleHR1cmVQcm9ncmFtKCk7CisgICAgZHJhd0NvbW1vbihxdWFkLCBwcm9ncmFtLCAx
LCBxdWFkLT5sYXllck5hdGl2ZVRleHR1cmVJZCgpKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQs
IGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCit7CisgICAgQ0NWaWRlb0xheWVySW1wbDo6
VGV4dHVyZSYgdGV4dHVyZSA9IHF1YWQtPmxheWVyVGV4dHVyZXMoKVtpbmRleF07CisgICAgVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yID0gcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3Io
KTsKKyAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCgpLCBhbGxvY2F0
b3IpOworICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90ZXh0dXJlLT5mb3JtYXQoKTsK
KyAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpOworCisg
ICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0
KCktPmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNp
b25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBF
eHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSk7CisgICAgaWYgKG1lbSkgeworICAgICAg
ICBtZW1jcHkobWVtLCBwbGFuZSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWln
aHQoKSk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpLT51bm1hcFRleFN1YkltYWdlMkRD
SFJPTUlVTShtZW0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiBtYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0ZXhTdWJJbWFnZTJECisgICAg
ICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3BpZXMgYXMgbWFwVGV4U3ViSW1h
Z2UyRENIUk9NSVVNLCBvbmUKKyAgICAgICAgLy8gaW4gdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCBh
bm90aGVyIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRp
bWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgcGxhbmUpKTsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBx
dWFkLCBjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQpCit7
CisgICAgaWYgKGZyYW1lLT5wbGFuZXMoKSA+IENDVmlkZW9MYXllckltcGw6Ok1heFBsYW5lcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IGNhcGFiaWxp
dGllcygpLm1heFRleHR1cmVTaXplOworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFu
ZSA8IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkgeworICAgICAgICBJbnRTaXplIHJlcXVpcmVk
VGV4dHVyZVNpemUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSk7CisgICAgICAg
IC8vIElmIHRoZSByZW5kZXJlciBjYW5ub3QgaGFuZGxlIHRoaXMgbGFyZ2Ugb2YgYSB0ZXh0dXJl
LCByZXR1cm4gZmFsc2UuCisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4g
dGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICAgICAgaWYgKHJlcXVpcmVkVGV4dHVy
ZVNpemUuaXNaZXJvKCkgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpID4gbWF4VGV4dHVy
ZVNpemUgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1cmVTaXplKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXF1YWQtPmxheWVyVGV4dHVy
ZXMoKVtwbGFuZV0ubV90ZXh0dXJlKSB7CisgICAgICAgICAgICBxdWFkLT5sYXllclRleHR1cmVz
KClbcGxhbmVdLm1fdGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUocmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyKCkpOworICAgICAgICAgICAgaWYgKCFxdWFkLT5sYXllclRleHR1cmVz
KClbcGxhbmVdLm1fdGV4dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBxdWFkLT5sYXllclRleHR1cmVzKClbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBJbnRT
aXplKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHF1YWQtPmxheWVyVGV4dHVyZXMoKVtwbGFu
ZV0ubV90ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkKKyAgICAgICAgICAg
IHF1YWQtPmxheWVyVGV4dHVyZXMoKVtwbGFuZV0ubV92aXNpYmxlU2l6ZSA9IENDVmlkZW9MYXll
ckltcGw6OmNvbXB1dGVWaXNpYmxlU2l6ZShmcmFtZSwgcGxhbmUpOworICAgICAgICBxdWFkLT5s
YXllclRleHR1cmVzKClbcGxhbmVdLm1fdGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFRleHR1cmVT
aXplLCBmb3JtYXQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgQ0NWaWRlb0RyYXdRdWFk
KiBxdWFkLCBjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQp
Cit7CisgICAgaWYgKGZyYW1lLT5mb3JtYXQoKSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2
ZVRleHR1cmUpIHsKKyAgICAgICAgcXVhZC0+c2V0TGF5ZXJOYXRpdmVUZXh0dXJlSWQoZnJhbWUt
PnRleHR1cmVJZCgpKTsKKyAgICAgICAgcXVhZC0+c2V0TGF5ZXJOYXRpdmVUZXh0dXJlU2l6ZShJ
bnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKCFyZXNlcnZlVGV4dHVyZXMocXVhZCwgZnJhbWUsIGZv
cm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgcGxhbmUg
PSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkgeworICAgICAgICBBU1NFUlQo
ZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpID09IHF1YWQtPmxheWVyVGV4dHVyZXMo
KVtwbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkpOworICAgICAgICBjb3B5UGxhbmVUb1RleHR1cmUo
cXVhZCwgZnJhbWUtPmRhdGEocGxhbmUpLCBwbGFuZSk7CisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lIDwgQ0NWaWRlb0xheWVySW1wbDo6TWF4
UGxhbmVzOyArK3BsYW5lKSB7CisgICAgICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHRl
eHR1cmUgPSBxdWFkLT5sYXllclRleHR1cmVzKClbcGxhbmVdOyAgICAgICAgCisgICAgICAgIHRl
eHR1cmUubV90ZXh0dXJlLmNsZWFyKCk7CisgICAgICAgIHRleHR1cmUubV92aXNpYmxlU2l6ZSA9
IEludFNpemUoKTsKKyAgICB9CisgICAgcXVhZC0+c2V0TGF5ZXJQbGFuZXMoZnJhbWUtPnBsYW5l
cygpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewotICAgIENDTGF5
ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7Ci0gICAgbGF5ZXItPmRyYXcodGhpcyk7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihxdWFkLT5sYXllclByb3ZpZGVyTXV0ZXgoKSk7CisKKyAgICBpZiAoIXF1YWQtPmxheWVy
UHJvdmlkZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmlkZW9GcmFtZUNocm9taXVtKiBm
cmFtZSA9IHF1YWQtPmxheWVyUHJvdmlkZXIoKS0+Z2V0Q3VycmVudEZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEdDM0RlbnVtIGZvcm1hdCA9IENDVmlkZW9M
YXllckltcGw6OmNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoZnJhbWUtPmZvcm1hdCgpKTsK
KworICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJlcyhxdWFkLCBmcmFt
ZSwgZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CisgICAgICAgIGRyYXdZVVYocXVh
ZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Cisg
ICAgICAgIGRyYXdSR0JBKHF1YWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShxdWFkKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsgLy8gU29tZW9u
ZSB1cGRhdGVkIGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0ZSB0
aGlzIQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1l
LT5wbGFuZXMoKTsgKytwbGFuZSkKKyAgICAgICAgcXVhZC0+bGF5ZXJUZXh0dXJlcygpW3BsYW5l
XS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOworICAgIHF1YWQtPmxheWVyUHJvdmlkZXIoKS0+cHV0
Q3VycmVudEZyYW1lKGZyYW1lKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqIHF1YWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGM4OTZiMWRmMjZmM2VmZWFjMTFiMzI3MWM1OTU3YTJm
NGJmNThlOTIuLjJmY2U1NjY1ZmMxYzNlODk4MWE1MjdkNmM5OGMxYmY3MTk5MWI5YTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNzIsNiArMTcyLDE0IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBkcmF3UGx1Z2luUXVhZChjb25zdCBDQ1BsdWdpbkRyYXdRdWFkKik7CiAK
ICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CisgICAgYm9v
bCBjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IENDVmlkZW9EcmF3UXVhZCosIGNvbnN0IFZpZGVv
RnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgdm9pZCBjb3B5UGxhbmVUb1Rl
eHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRl
eCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9uKGNvbnN0IEND
VmlkZW9EcmF3UXVhZCosIFByb2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmVJZCk7CisgICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVyZShjb25zdCBD
Q1ZpZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IENDVmlkZW9EcmF3UXVh
ZCopOworICAgIHZvaWQgZHJhd1lVVihjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsKKyAgICBib29s
IHJlc2VydmVUZXh0dXJlcyhjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBjb25zdCBWaWRlb0ZyYW1l
Q2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQpOworCiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4
dHVyZVRvRGlzcGxheSgpOwogCiAgICAgdm9pZCBzZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IElu
dFJlY3QmLCBib29sIGZsaXBZKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwCmluZGV4
IDNkZTM4ZTkwZjg2M2YxZjM4NzA4NDhjZjEwOTIzODk5ZGU5NzdjMTUuLjQ3YWRlZWNjMzgwOTVk
YTE5YTQzY2YzMmY4ZTQyNWU2M2Q3NTI1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFk
LmNwcApAQCAtMjksMTIgKzI5LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093
blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBD
Q0xheWVySW1wbCogbGF5ZXIpCitQYXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gQ0NWaWRlb0Ry
YXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwg
Y29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGwqIGxheWVyKQogewogICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWRlb0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVh
ZFJlY3QsIGxheWVyKSk7CiB9CiAKLUNDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0RyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIpCitDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3
UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRS
ZWN0JiBxdWFkUmVjdCwgQ0NWaWRlb0xheWVySW1wbCogbGF5ZXIpCiAgICAgOiBDQ0RyYXdRdWFk
KHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6VmlkZW9Db250ZW50LCBxdWFkUmVjdCkKICAg
ICAsIG1fbGF5ZXIobGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCmluZGV4IGIx
OGJjNTU0MWNkMmJjZjdmYzEyZmJmOTNiZGIzNDM4OTY0Zjk4NGEuLjgxZWY1NzRlNDk5YzFlN2U2
ODZlZWI0Mzc0NjY3MThiYjlkZjQzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCkBA
IC0yNiwyMyArMjYsMzIgQEAKICNpZm5kZWYgQ0NWaWRlb0RyYXdRdWFkX2gKICNkZWZpbmUgQ0NW
aWRlb0RyYXdRdWFkX2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUg
ImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBD
Q0xheWVySW1wbDsKIGNsYXNzIENDVmlkZW9EcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1ZpZGVvRHJhd1F1YWQpOwogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbCopOwogCi0gICAgQ0NMYXllckltcGwq
IGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQorICAgIHZvaWQgc2V0TGF5ZXJQbGFu
ZXMoaW50IHBsYW5lcykgY29uc3QgeyBtX2xheWVyLT5zZXRQbGFuZXMocGxhbmVzKTsgfQorICAg
IFBsYXRmb3JtM0RPYmplY3QgbGF5ZXJOYXRpdmVUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyLT5uYXRpdmVUZXh0dXJlSWQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJOYXRpdmVUZXh0
dXJlSWQoUGxhdGZvcm0zRE9iamVjdCBuYXRpdmVUZXh0dXJlSWQpIGNvbnN0IHsgbV9sYXllci0+
c2V0TmF0aXZlVGV4dHVyZUlkKG5hdGl2ZVRleHR1cmVJZCk7IH0KKyAgICBJbnRTaXplIGxheWVy
TmF0aXZlVGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLT5uYXRpdmVUZXh0dXJl
U2l6ZSgpOyB9CisgICAgdm9pZCBzZXRMYXllck5hdGl2ZVRleHR1cmVTaXplKEludFNpemUgbmF0
aXZlVGV4dHVyZVNpemUpIGNvbnN0IHsgbV9sYXllci0+c2V0TmF0aXZlVGV4dHVyZVNpemUobmF0
aXZlVGV4dHVyZVNpemUpOyB9CisKKyAgICBNdXRleCYgbGF5ZXJQcm92aWRlck11dGV4KCkgY29u
c3QgeyByZXR1cm4gbV9sYXllci0+cHJvdmlkZXJNdXRleCgpOyB9CisgICAgVmlkZW9GcmFtZVBy
b3ZpZGVyKiBsYXllclByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllci0+cHJvdmlkZXIo
KTsgfQorICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIGxheWVyVGV4dHVyZXMoKSBjb25z
dCB7IHJldHVybiBtX2xheWVyLT50ZXh0dXJlcygpOyB9CiAKIHByaXZhdGU6Ci0gICAgQ0NWaWRl
b0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5
ZXJJbXBsKik7CisgICAgQ0NWaWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwg
Y29uc3QgSW50UmVjdCYsIENDVmlkZW9MYXllckltcGwqKTsKIAotICAgIENDTGF5ZXJJbXBsKiBt
X2xheWVyOworICAgIENDVmlkZW9MYXllckltcGwqIG1fbGF5ZXI7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IGJhMTI5MGViMGJkYTNjNzk3Yjg4OTZkODNh
ZGZjZjhjY2UzNzZjN2MuLjNjZjc4OTNlNTg0YTJjYjVlNDY3NjE5OTE4NjgwZGUxODBmYTQ4OGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6c3RvcFVzaW5nUHJvdmlkZXIoKQogfQogCiAvLyBDb252ZXJ0
IFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IHRvIEdyYXBoaWNzQ29udGV4dDNEJ3MgZm9ybWF0
IGVudW0gdmFsdWVzLgotc3RhdGljIEdDM0RlbnVtIGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3Jt
YXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0KQorR0MzRGVudW0gQ0NWaWRlb0xh
eWVySW1wbDo6Y29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdChWaWRlb0ZyYW1lQ2hyb21pdW06
OkZvcm1hdCBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIFZpZGVv
RnJhbWVDaHJvbWl1bTo6WVYxMjoKQEAgLTExMiw5NyArMTEyLDEzIEBAIHN0YXRpYyBHQzNEZW51
bSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0
IGZvcm1hdCkKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU7CiB9
CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLQot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb3ZpZGVyTXV0ZXgpOwotCi0gICAgaWYgKCFtX3By
b3ZpZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1l
ID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIEdDM0RlbnVtIGZvcm1hdCA9IGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RG
b3JtYXQoZnJhbWUtPmZvcm1hdCgpKTsKLQotICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghY29weUZy
YW1lVG9UZXh0dXJlcyhmcmFtZSwgZm9ybWF0LCBsYXllclJlbmRlcmVyKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U6Ci0gICAgICAgIGRyYXdZVVYobGF5ZXJSZW5kZXJlcik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGRyYXdSR0JB
KGxheWVyUmVuZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgotICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShsYXllclJlbmRlcmVy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsgLy8gU29t
ZW9uZSB1cGRhdGVkIGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0
ZSB0aGlzIQotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZy
YW1lLT5wbGFuZXMoKTsgKytwbGFuZSkKLSAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0
dXJlLT51bnJlc2VydmUoKTsKLSAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUp
OwotfQotCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1
YWRMaXN0LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQogewogICAg
IEludFJlY3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOwogICAgIHF1YWRMaXN0LmFw
cGVuZChDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0
aGlzKSk7CiB9CiAKLWJvb2wgQ0NWaWRlb0xheWVySW1wbDo6Y29weUZyYW1lVG9UZXh0dXJlcyhj
b25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLXsKLSAgICBpZiAoZnJhbWUtPmZvcm1hdCgp
ID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkgewotICAgICAgICBtX25hdGl2
ZVRleHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJl
U2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghcmVzZXJ2ZVRleHR1cmVzKGZyYW1lLCBm
b3JtYXQsIGxheWVyUmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsK
LSAgICAgICAgQVNTRVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKSA9PSBtX3Rl
eHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSk7Ci0gICAgICAgIGNvcHlQbGFuZVRvVGV4
dHVyZShsYXllclJlbmRlcmVyLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5lKTsKLSAgICB9Ci0g
ICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUgPCBNYXhQbGFu
ZXM7ICsrcGxhbmUpIHsKLSAgICAgICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbcGxh
bmVdOwotICAgICAgICB0ZXh0dXJlLm1fdGV4dHVyZS5jbGVhcigpOwotICAgICAgICB0ZXh0dXJl
Lm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7Ci0gICAgfQotICAgIG1fcGxhbmVzID0gZnJhbWUt
PnBsYW5lcygpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENDVmlkZW9MYXllckltcGw6
OmNvcHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCi17Ci0gICAgVGV4dHVyZSYgdGV4dHVyZSA9
IG1fdGV4dHVyZXNbaW5kZXhdOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciA9
IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yKCk7Ci0gICAgdGV4
dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7Ci0gICAgR0Mz
RGVudW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwotICAgIEludFNpemUg
ZGltZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7Ci0KLSAgICB2b2lkKiBtZW0g
PSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lv
bnMoKSktPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBm
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6V1JJVEVfT05MWSk7Ci0gICAgaWYgKG1lbSkgewotICAgICAgICBtZW1jcHkobWVtLCBw
bGFuZSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7Ci0gICAgICAg
IEdMQyhjb250ZXh0LCBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQt
PmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWlscywg
dGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKLSAgICAgICAgLy8gdXBsb2FkLiBUaGlz
IGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9uZQot
ICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRleHR1
cmUuCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVu
c2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IHBsYW5lKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJsZVNpemUo
Y29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCitJbnRTaXpl
IENDVmlkZW9MYXllckltcGw6OmNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hy
b21pdW0qIGZyYW1lLCB1bnNpZ25lZCBwbGFuZSkKIHsKICAgICBpbnQgdmlzaWJsZVdpZHRoID0g
ZnJhbWUtPndpZHRoKHBsYW5lKTsKICAgICBpbnQgdmlzaWJsZUhlaWdodCA9IGZyYW1lLT5oZWln
aHQocGxhbmUpOwpAQCAtMjI2LDEwNSArMTQyLDYgQEAgc3RhdGljIEludFNpemUgY29tcHV0ZVZp
c2libGVTaXplKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIHVuc2lnbmVkIHBsYW4K
ICAgICByZXR1cm4gSW50U2l6ZSh2aXNpYmxlV2lkdGgsIHZpc2libGVIZWlnaHQpOwogfQogCi1i
b29sIENDVmlkZW9MYXllckltcGw6OnJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hy
b21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlcikKLXsKLSAgICBpZiAoZnJhbWUtPnBsYW5lcygpID4gTWF4UGxhbmVzKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IG1heFRleHR1cmVTaXplID0gbGF5ZXJSZW5kZXJl
ci0+Y2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7Ci0gICAgZm9yICh1bnNpZ25lZCBwbGFu
ZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7Ci0gICAgICAgIEludFNp
emUgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5l
KTsKLSAgICAgICAgLy8gSWYgdGhlIHJlbmRlcmVyIGNhbm5vdCBoYW5kbGUgdGhpcyBsYXJnZSBv
ZiBhIHRleHR1cmUsIHJldHVybiBmYWxzZS4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlz
IHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgotICAgICAgICBpZiAocmVx
dWlyZWRUZXh0dXJlU2l6ZS5pc1plcm8oKSB8fCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkg
PiBtYXhUZXh0dXJlU2l6ZSB8fCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpID4gbWF4VGV4
dHVyZVNpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV90ZXh0
dXJlc1twbGFuZV0ubV90ZXh0dXJlKSB7Ci0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5t
X3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXItPnJlbmRlclN1
cmZhY2VUZXh0dXJlTWFuYWdlcigpKTsKLSAgICAgICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFu
ZV0ubV90ZXh0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVp
cmVkVGV4dHVyZVNpemUpCi0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVT
aXplID0gY29tcHV0ZVZpc2libGVTaXplKGZyYW1lLCBwbGFuZSk7Ci0gICAgICAgIG1fdGV4dHVy
ZXNbcGxhbmVdLm1fdGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFRleHR1cmVTaXplLCBmb3JtYXQp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpk
cmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKLXsKLSAg
ICBjb25zdCBZVVZQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllcllV
VlByb2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgp
KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29u
dGV4dCgpOwotICAgIGNvbnN0IFRleHR1cmUmIHlUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0Zy
YW1lQ2hyb21pdW06OnlQbGFuZV07Ci0gICAgY29uc3QgVGV4dHVyZSYgdVRleHR1cmUgPSBtX3Rl
eHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKLSAgICBjb25zdCBUZXh0dXJlJiB2
VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxhbmVdOwotCi0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJ
ZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB2VGV4dHVyZS5tX3RleHR1cmUtPnRl
eHR1cmVJZCgpKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5wcm9ncmFtKCkpKTsKLQotICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5t
X3RleHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUg
c2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4KLSAgICBmbG9h
dCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNp
YmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7Ci0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51
dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKLQotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS55VGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudVRleHR1cmVMb2NhdGlvbigpLCAyKSk7
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5jY01hdHJpeExv
Y2F0aW9uKCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPih5dXYyUkdCKSwgMSkpOwotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51bmlmb3JtM2Z2KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueXV2
QWRqTG9jYXRpb24oKSwgY29uc3RfY2FzdDxmbG9hdCo+KHl1dkFkanVzdCksIDEpKTsKLQotICAg
IGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgRmxvYXRRdWFkKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFk
ZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci0KLSAgICAvLyBSZXNldCBhY3RpdmUgdGV4
dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgUHJvZ3JhbT4KLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd0NvbW1vbihMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIFByb2dyYW0qIHByb2dyYW0sIGZsb2F0IHdpZHRo
U2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdAotewotICAgIEFT
U0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0KLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2Nh
dGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlv
bigpLCAwKSk7Ci0KLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRyYXdUcmFu
c2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5
KCksIGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRp
b24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLTEpOwotfQotCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKLXsKLSAgICBjb25zdCBSR0JB
UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgp
OwotICAgIGNvbnN0IFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6cmdiUGxhbmVdOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3RleHR1
cmUtPnNpemUoKS53aWR0aCgpOwotICAgIGRyYXdDb21tb24obGF5ZXJSZW5kZXJlciwgcHJvZ3Jh
bSwgd2lkdGhTY2FsZUZhY3RvciwgdGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKLX0K
LQotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVyZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Ci17Ci0gICAgY29uc3QgTmF0aXZlVGV4dHVy
ZVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyTmF0aXZlVGV4dHVy
ZVByb2dyYW0oKTsKLSAgICBkcmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHByb2dyYW0sIDEsIG1f
bmF0aXZlVGV4dHVyZUlkKTsKLX0KLQogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogewogICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IDE4
MmY3YjU4MjdjOTFjYmZmZWU1ZDNiYWVhZDEwODUxZjZmZmJhOTUuLjc1NGVlN2JhZTNjMmNkYWUz
ZWFiYTNlOTk0ZTk2OWY4NGNlM2IwZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgK
QEAgLTUyLDM3ICs1Miw0NCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxW
ZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoLCBGcmFnbWVudFNoYWRlcllVVlZpZGVvPiBZVVZQ
cm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJh
bnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IE5hdGl2ZVRleHR1cmVQcm9n
cmFtOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Cisg
ICAgc3RhdGljIEdDM0RlbnVtIGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoVmlkZW9GcmFt
ZUNocm9taXVtOjpGb3JtYXQpOworICAgIHN0YXRpYyBJbnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6
ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCB1bnNpZ25lZCBwbGFuZSk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29u
c3Q7CiAKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG5hdGl2ZVRleHR1cmVJZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbmF0aXZlVGV4dHVyZUlkOyB9CisgICAgdm9pZCBzZXROYXRpdmVUZXh0dXJlSWQoUGxh
dGZvcm0zRE9iamVjdCBuYXRpdmVUZXh0dXJlSWQpIHsgbV9uYXRpdmVUZXh0dXJlSWQgPSBuYXRp
dmVUZXh0dXJlSWQ7IH0KKyAgICBJbnRTaXplIG5hdGl2ZVRleHR1cmVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYXRpdmVUZXh0dXJlU2l6ZTsgfQorICAgIHZvaWQgc2V0TmF0aXZlVGV4dHVyZVNp
emUoSW50U2l6ZSBuYXRpdmVUZXh0dXJlU2l6ZSkgeyBtX25hdGl2ZVRleHR1cmVTaXplID0gbmF0
aXZlVGV4dHVyZVNpemU7IH0KKworICAgIE11dGV4JiBwcm92aWRlck11dGV4KCkgeyByZXR1cm4g
bV9wcm92aWRlck11dGV4OyB9CisgICAgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcigpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvdmlkZXI7IH0KKworICAgIHZvaWQgc2V0UGxhbmVzKGludCBwbGFu
ZXMpIHsgbV9wbGFuZXMgPSBwbGFuZXM7IH0KKwogICAgIC8vIFZpZGVvRnJhbWVQcm92aWRlcjo6
Q2xpZW50IGltcGxlbWVudGF0aW9uIChjYWxsYWJsZSBvbiBhbnkgdGhyZWFkKS4KICAgICB2aXJ0
dWFsIHZvaWQgc3RvcFVzaW5nUHJvdmlkZXIoKTsKIAorICAgIHN0cnVjdCBUZXh0dXJlIHsKKyAg
ICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgICAgIEludFNpemUg
bV92aXNpYmxlU2l6ZTsKKyAgICB9OworCisgICAgZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKKwor
ICAgIFRleHR1cmUqIHRleHR1cmVzKCkgeyByZXR1cm4gbV90ZXh0dXJlczsgfQorCisgICAgc3Rh
dGljIGNvbnN0IGZsb2F0IHl1djJSR0JbOV07CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1dkFk
anVzdFszXTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKGludCwg
VmlkZW9GcmFtZVByb3ZpZGVyKik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlw
ZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvTGF5ZXIiOyB9CiAKLSAgICBib29sIGNv
cHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9y
bWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLSAgICB2b2lkIGNvcHlQbGFuZVRvVGV4dHVy
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KTsK
LSAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNE
ZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZvaWQgZHJhd1lVVihM
YXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKLSAgICB2b2lkIGRyYXdSR0JBKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopIGNvbnN0OwotICAgIHZvaWQgZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9p
ZCBkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFByb2dyYW0qLCBmbG9hdCB3aWR0
aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgY29uc3Q7Ci0KICAgICBN
dXRleCBtX3Byb3ZpZGVyTXV0ZXg7IC8vIEd1YXJkcyBtX3Byb3ZpZGVyIGJlbG93LgogICAgIFZp
ZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsKIAotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5
dXYyUkdCWzldOwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107Ci0KLSAgICBz
dHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJl
OwotICAgICAgICBJbnRTaXplIG1fdmlzaWJsZVNpemU7Ci0gICAgfTsKLSAgICBlbnVtIHsgTWF4
UGxhbmVzID0gMyB9OwogICAgIFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFuZXNdOwogICAgIGlu
dCBtX3BsYW5lczsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123988</attachid>
            <date>2012-01-25 12:17:38 -0800</date>
            <delta_ts>2012-01-25 12:35:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120125151737.patch</filename>
            <type>text/plain</type>
            <size>25495</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzAxNzI5YWJiNDI2NGI1
NWE5MGQwM2UwZTNhMWE3YjFhZjUyNGIzMy4uYTllZThlN2Y4MDIzYzhmZGU4NTM1ZjVjZWFhM2Yy
M2MwZDU0ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTAxLTI1ICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgQ0NWaWRlb0xheWVySW1wbCBubyBsb25n
ZXIgaGFuZGxlcyBkcmF3aW5nIGl0c2VsZiwgYnV0IHByb2R1Y2VzIGEgbGlzdCBvZiBDQ1ZpZGVv
RHJhd1F1YWRzLgorICAgICAgICBUaGVzZSBxdWFkcyBhcmUgdGhlbiBkcmF3biBieSBMYXllclJl
bmRlcmVyQ2hyb21pdW0uCisKKyAgICAgICAgQ0NMYXllckltcGw6OnByZURyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKikgaXMgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZSBhcHBlbmRRdWFkcy4KKyAg
ICAgICAgQ0NMYXllckltcGw6OnBvc3REcmF3KCkgaXMgY2FsbGVkIGRpcmVjdGx5IGFmdGVyIGFs
bCBkcmF3aW5nIGhhcyBiZWVuIGNvbXBsZXRlZC4KKworICAgICAgICBwcmVEcmF3IGFuZCBwb3N0
RHJhdyBhcmUgdXNlZCB0byBoYW5kbGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVmlkZW9GcmFtZVBy
b3ZpZGVyCisgICAgICAgIGluIENDVmlkZW9MYXllckltcGwuIHByZURyYXcgZ2V0cyBhIGZyYW1l
IGZyb20gdGhlIFZpZGVvRnJhbWVQcm92aWRlciwgYW5kCisgICAgICAgIHBvc3REcmF3IHJldHVy
bnMgaXQuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yLCBzbyBubyBuZXcgdGVzdHMgd2Vy
ZSBhZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJl
bmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cHJlRHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cG9zdERyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmg6CisgICAgICAg
IChDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpm
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpuYXRpdmVUZXh0dXJl
SWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjp0ZXh0dXJlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpwcmVEcmF3KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6cG9zdERyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZVZpc2libGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ1ZpZGVv
TGF5ZXJJbXBsKToKKyAgICAgICAgKFRleHR1cmUpOgorICAgICAgICAoKToKKwogMjAxMi0wMS0y
NSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAg
ICBib3JkZXItaW1hZ2Ugc2hvdWxkIG5vdCBjcmFzaCB3aGVuIHRoZSBzb3VyY2UgaXMgbm90IHNw
ZWNpZmllZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGJiZGY4
OWRhZjAxNjhjYzgwNDE5NmJkOWYzMTNiMzBhODlmMzMxYzYuLmQ1ZmEwNjA3MDI1MjA3Y2UyMmIy
OWVlZThkZDFhNDIwZmNlOTIyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcApAQCAtNjkyLDEwICs2OTIsOTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdDYW52YXNRdWFkKGNvbnN0IENDQ2FudmFzRHJhd1F1YWQqIHF1YWQpCiAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKIH0KIAordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQor
eworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRl
b0xheWVyWVVWUHJvZ3JhbSgpOworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRp
YWxpemVkKCkpOworCisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgeVRleHR1
cmUgPSBxdWFkLT50ZXh0dXJlcygpW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXTsKKyAgICBj
b25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB1VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVz
KClbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllcklt
cGw6OlRleHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21p
dW06OnZQbGFuZV07CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1
cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKKyAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MykpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsK
KworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKKworICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKS53aWR0aCgpOworICAgIC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVj
YXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4KKyAgICBmbG9hdCB1dldpZHRo
U2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53
aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkueVdp
ZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB5V2lkdGhTY2FsZUZhY3RvcikpOworICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2
V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOworCisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS55VGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnVUZXh0dXJlTG9jYXRpb24o
KSwgMikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkudlRleHR1cmVMb2NhdGlvbigpLCAzKSk7CisKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm1NYXRyaXgzZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5jY01hdHJpeExvY2F0aW9uKCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihDQ1ZpZGVvTGF5
ZXJJbXBsOjp5dXYyUkdCKSwgMSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5p
Zm9ybTNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIGNvbnN0
X2Nhc3Q8ZmxvYXQqPihDQ1ZpZGVvTGF5ZXJJbXBsOjp5dXZBZGp1c3QpLCAxKSk7CisKKyAgICBj
b25zdCBJbnRTaXplJiBib3VuZHMgPSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKKyAgICBkcmF3
VGV4dHVyZWRRdWFkKHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3Vu
ZHMuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgRmxvYXRRdWFkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2Nh
dGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtMSk7CisKKyAgICAvLyBSZXNldCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRl
eHR1cmUgMC4KKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFByb2dyYW0+
Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NvbW1vbihjb25zdCBDQ1ZpZGVvRHJh
d1F1YWQqIHF1YWQsIFByb2dyYW0qIHByb2dyYW0sIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQoreworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dy
YW0tPmluaXRpYWxpemVkKCkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHRleHR1cmVJZCkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5p
Zm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAs
IDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAw
KSk7CisKKyAgICBjb25zdCBJbnRTaXplJiBib3VuZHMgPSBxdWFkLT5xdWFkUmVjdCgpLnNpemUo
KTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53
aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlR
dWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UkdCQShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0qIHByb2dyYW0gPSB2aWRlb0xh
eWVyUkdCQVByb2dyYW0oKTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB0
ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsK
KyAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUu
bV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgo
KTsKKyAgICBkcmF3Q29tbW9uKHF1YWQsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1
cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TmF0aXZlVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0g
PSB2aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKKyAgICBkcmF3Q29tbW9uKHF1YWQs
IHByb2dyYW0sIDEsIHF1YWQtPm5hdGl2ZVRleHR1cmVJZCgpKTsKK30KKwogdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFk
KQogewotICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7Ci0gICAgbGF5ZXIt
PmRyYXcodGhpcyk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKworICAg
IHN3aXRjaCAocXVhZC0+Zm9ybWF0KCkpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
VU1JTkFOQ0U6CisgICAgICAgIGRyYXdZVVYocXVhZCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGRyYXdSR0JBKHF1YWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAg
ICAgICBkcmF3TmF0aXZlVGV4dHVyZShxdWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQ1JBU0goKTsgLy8gU29tZW9uZSB1cGRhdGVkIGNvbnZlcnRWRkNGb3JtYXRU
b0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0ZSB0aGlzIQorICAgIH0KIH0KIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQq
IHF1YWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGM4OTZiMWRmMjZm
M2VmZWFjMTFiMzI3MWM1OTU3YTJmNGJmNThlOTIuLmRhODcyOTNmYTY0ZmQ5NjU2MmVhMjA3ODcx
NjVjNGI4YjRlNWJiNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0x
NzIsNiArMTcyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3UGx1Z2luUXVhZChjb25zdCBD
Q1BsdWdpbkRyYXdRdWFkKik7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5
ZXJUZXh0dXJlKCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9u
KGNvbnN0IENDVmlkZW9EcmF3UXVhZCosIFByb2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9y
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCk7CisgICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVy
ZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IENDVmlk
ZW9EcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1lVVihjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsK
KwogICAgIHZvaWQgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIAogICAgIHZvaWQg
c2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAppbmRleCAwMGUwYWRmOGE1MWZkZWMwNGE5ZjQyNWYwNDU3YWEzMzg4Y2VhM2Fh
Li43ODA5YTNlN2MzNzNiZWY2OTk1MDNmYmVhOGEzYTBmODcwOTFhMDQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKQEAgLTczLDYgKzczLDggQEAgcHVibGljOgogCiAgICAgUGFzc093blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSop
OworICAgIHZpcnR1YWwgdm9pZCBwcmVEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopIHsgfTsK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXcoKSB7IH07CiAgICAgdm9pZCBhcHBlbmREZWJ1Z0Jv
cmRlclF1YWQoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNmMyYzc0MjZmYzBiOTUwMDFkZWVl
OGE3MDk0ZWM5Y2Q4ZjUwYzk1Zi4uOGQ1NzljYjVhMDY4YWRjNjU3MTc4NWM3ZWUyZWFjZTkyZWQ2
NTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTIyNiw2
ICsyMjYsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiAgICAgICAgICAgICBpZiAobGF5ZXItPnZpc2li
bGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgICAgIGxheWVyLT5wcmVEcmF3KG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CisKICAgICAg
ICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRl
c1RvVGFyZ2V0KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKSB7CiAgICAgICAgICAg
ICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIobGF5ZXIpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjYwLDYgKzI2MiwxNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3
aW5nRnJhbWUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7ICsr
aSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhwYXNzZXNbaV0uZ2V0
KCkpOworCisgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJvb3RMYXllcigpLT5y
ZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpOworCisgICAgZm9yICh1bnNpZ25lZCBsYXllcklu
ZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewor
ICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdl
dCgpOworICAgICAgICAgICAgaWYgKGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBsYXllci0+cG9zdERy
YXcoKTsKKyAgICB9CisKICAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaERyYXdpbmdGcmFtZSgp
OwogCiAgICAgKyttX2ZyYW1lTnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAK
aW5kZXggM2RlMzhlOTBmODYzZjFmMzg3MDg0OGNmMTA5MjM4OTlkZTk3N2MxNS4uYjlhZmE0ZTY2
M2ZmNTMzNWU5MzBlZjZlNDkxMTQ5NzIwZDg0OThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJh
d1F1YWQuY3BwCkBAIC0yOSwxNiArMjksMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJl
Y3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK1Bhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1Zp
ZGVvRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0
YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4
dHVyZSogdGV4dHVyZXMsIEdDM0RlbnVtIGZvcm1hdCwgUGxhdGZvcm0zRE9iamVjdCBuYXRpdmVU
ZXh0dXJlSWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ZpZGVvRHJhd1F1YWQoc2hh
cmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0ZXh0dXJlcywgZm9y
bWF0LCBuYXRpdmVUZXh0dXJlSWQpKTsKIH0KIAotQ0NWaWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJh
d1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50
UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK0NDVmlkZW9EcmF3UXVhZDo6Q0NW
aWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0
ZXh0dXJlcywgR0MzRGVudW0gZm9ybWF0LCBQbGF0Zm9ybTNET2JqZWN0IG5hdGl2ZVRleHR1cmVJ
ZCkKICAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpWaWRlb0Nv
bnRlbnQsIHF1YWRSZWN0KQotICAgICwgbV9sYXllcihsYXllcikKKyAgICAsIG1fdGV4dHVyZXMo
dGV4dHVyZXMpCisgICAgLCBtX2Zvcm1hdChmb3JtYXQpCisgICAgLCBtX25hdGl2ZVRleHR1cmVJ
ZChuYXRpdmVUZXh0dXJlSWQpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXIpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9EcmF3UXVhZC5oCmluZGV4IGIxOGJjNTU0MWNkMmJjZjdmYzEyZmJmOTNiZGIz
NDM4OTY0Zjk4NGEuLjRlZGJhMWIyNzllYjA1OGJiMjgwYzU3M2QyZDg2YTBlNTlmMzM5MGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9EcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCkBAIC0yNiwyMyArMjYsMjggQEAKICNpZm5kZWYg
Q0NWaWRlb0RyYXdRdWFkX2gKICNkZWZpbmUgQ0NWaWRlb0RyYXdRdWFkX2gKIAorI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDVmlkZW9E
cmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q1ZpZGVvRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVmlkZW9E
cmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYs
IENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBj
cmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ0NW
aWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIEdDM0RlbnVtIGZvcm1hdCwgUGxhdGZv
cm0zRE9iamVjdCBuYXRpdmVUZXh0dXJlSWQpOwogCi0gICAgQ0NMYXllckltcGwqIGxheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQorICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9ybWF0OyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBuYXRpdmVUZXh0dXJlSWQo
KSBjb25zdCB7IHJldHVybiBtX25hdGl2ZVRleHR1cmVJZDsgfQorICAgIGNvbnN0IENDVmlkZW9M
YXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlczsg
fQogCiBwcml2YXRlOgotICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworICAgIENDVmlkZW9EcmF3UXVhZChj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgR0MzRGVudW0gZm9ybWF0LCBQbGF0Zm9ybTNET2Jq
ZWN0IG5hdGl2ZVRleHR1cmVJZCk7CiAKLSAgICBDQ0xheWVySW1wbCogbV9sYXllcjsKKyAgICBj
b25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiBtX3RleHR1cmVzOworICAgIEdDM0RlbnVt
IG1fZm9ybWF0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9uYXRpdmVUZXh0dXJlSWQ7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDA5YWZiMDhkM2VkZGUx
NTMxZTVhY2ZiYTZhMDE1ODE5Mzg4YzUxNWYuLjE4MmU1ZjE0MTIwNGUwZDA1ZGFhMGYxZTc3YzVk
YmZhNDQ4OGE1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0xMTIs
NTMgKzExMiwxOCBAQCBzdGF0aWMgR0MzRGVudW0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1h
dChWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBmb3JtYXQpCiAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRy
YXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7Ci0K
LSAgICBpZiAoIW1fcHJvdmlkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZpZGVvRnJhbWVD
aHJvbWl1bSogZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAo
IWZyYW1lKQorICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdDM0RlbnVt
IGZvcm1hdCA9IGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoZnJhbWUtPmZvcm1hdCgpKTsK
IAotICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpIHsK
LSAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBHQzNEZW51bSBmb3JtYXQgPSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNE
Rm9ybWF0KG1fZnJhbWUtPmZvcm1hdCgpKTsKIAotICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJl
cyhmcmFtZSwgZm9ybWF0LCBsYXllclJlbmRlcmVyKSkgewotICAgICAgICBtX3Byb3ZpZGVyLT5w
dXRDdXJyZW50RnJhbWUoZnJhbWUpOworICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICAg
ICAgZHJhd1lVVihsYXllclJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgZHJhd1JHQkEobGF5ZXJSZW5kZXJlcik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0g
ICAgICAgIGRyYXdOYXRpdmVUZXh0dXJlKGxheWVyUmVuZGVyZXIpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOyAvLyBTb21lb25lIHVwZGF0ZWQgY29udmVy
dFZGQ0Zvcm1hdFRvR0MzREZvcm1hdCBhYm92ZSBidXQgdXBkYXRlIHRoaXMhCi0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3Bs
YW5lKQotICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOwot
ICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci19CiAKLXZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCi17CiAgICAgSW50UmVjdCBxdWFkUmVjdChJ
bnRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDVmlkZW9EcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsKKyAgICBxdWFkTGlz
dC5hcHBlbmQoQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVj
dCwgbV90ZXh0dXJlcywgZm9ybWF0LCBtX25hdGl2ZVRleHR1cmVJZCkpOwogfQogCiBib29sIEND
VmlkZW9MYXllckltcGw6OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9t
aXVtKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIpCkBAIC0yMDYsNiArMTcxLDQ4IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6Y29w
eVBsYW5lVG9UZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwKICAg
ICB9CiB9CiAKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6cHJlRHJhdyhMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXJDaHJvbWl1bSkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7
CisKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJhbWUg
PSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICghbV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR0MzRGVudW0gZm9ybWF0ID0gY29udmVydFZGQ0Zvcm1hdFRv
R0MzREZvcm1hdChtX2ZyYW1lLT5mb3JtYXQoKSk7CisKKyAgICBpZiAoZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1
cnJlbnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
Y29weUZyYW1lVG9UZXh0dXJlcyhtX2ZyYW1lLCBmb3JtYXQsIGxheWVyUmVuZGVyZXJDaHJvbWl1
bSkpIHsKKyAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OnBvc3REcmF3
KCkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworCisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7CisKKyAgICBpZiAoIW1fcHJvdmlkZXIgfHwg
IW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAw
OyBwbGFuZSA8IG1fZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKQorICAgICAgICBtX3RleHR1cmVz
W3BsYW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOworCisgICAgbV9wcm92aWRlci0+cHV0Q3Vy
cmVudEZyYW1lKG1fZnJhbWUpOworfQorCiBzdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJsZVNp
emUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCiB7CiAg
ICAgaW50IHZpc2libGVXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7CkBAIC0yNTQsODEgKzI2
MSw2IEBAIGJvb2wgQ0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFZpZGVv
RnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIpIGNvbnN0Ci17Ci0gICAgY29uc3QgWVVWUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVy
UmVuZGVyZXItPnZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYg
cHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICBjb25zdCBUZXh0dXJlJiB5VGV4dHVy
ZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdOwotICAgIGNvbnN0IFRl
eHR1cmUmIHVUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV07
Ci0gICAgY29uc3QgVGV4dHVyZSYgdlRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6dlBsYW5lXTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUubV90
ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMikpOwotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1
cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dlRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICBmbG9hdCB5V2lk
dGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5VGV4dHVyZS5tX3Zpc2libGVTaXpl
LndpZHRoKCkpIC8geVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICAvLyBB
cmJpdHJhcmlseSB0YWtlIHRoZSB1IHNpemVzIGJlY2F1c2UgdSBhbmQgdiBkaW1lbnNpb25zIGFy
ZSBpZGVudGljYWwuCi0gICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHVUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB1VGV4dHVyZS5tX3RleHR1
cmUtPnNpemUoKS53aWR0aCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWYo
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkueVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB5V2lk
dGhTY2FsZUZhY3RvcikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWYocHJv
Z3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgdXZXaWR0
aFNjYWxlRmFjdG9yKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueVRleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnVU
ZXh0dXJlTG9jYXRpb24oKSwgMikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
MWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS52VGV4dHVyZUxvY2F0aW9uKCksIDMpKTsKLQot
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4oeXV2
MlJHQiksIDEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTNmdihwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIGNvbnN0X2Nhc3Q8ZmxvYXQqPih5
dXZBZGp1c3QpLCAxKSk7Ci0KLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRy
YXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdP
cGFjaXR5KCksIEZsb2F0UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFM
b2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwotCi0g
ICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0ZXh0dXJlIDAuCi0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFByb2dyYW0+Ci12b2lkIENDVmlkZW9MYXllckltcGw6
OmRyYXdDb21tb24oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQcm9ncmFt
KiBwcm9ncmFtLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmVJZCkgY29uc3QKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXpl
ZCgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+
Y29udGV4dCgpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKLQot
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3RvciwgMSkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotCi0gICAgbGF5ZXJSZW5kZXJlci0+ZHJh
d1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygp
LmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1
YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLX0KLQotdm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNv
bnN0Ci17Ci0gICAgY29uc3QgUkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52
aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKLSAgICBjb25zdCBUZXh0dXJlJiB0ZXh0dXJlID0gbV90
ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsKLSAgICBmbG9hdCB3aWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0
aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICBkcmF3Q29tbW9u
KGxheWVyUmVuZGVyZXIsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0
dXJlLT50ZXh0dXJlSWQoKSk7Ci19Ci0KLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2
ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAotewot
ICAgIGNvbnN0IE5hdGl2ZVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+
dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKCk7Ci0gICAgZHJhd0NvbW1vbihsYXllclJl
bmRlcmVyLCBwcm9ncmFtLCAxLCBtX25hdGl2ZVRleHR1cmVJZCk7Ci19Ci0KIHZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkgY29uc3QKIHsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuaAppbmRleCAxODJmN2I1ODI3YzkxY2JmZmVlNWQzYmFlYWQxMDg1MWY2ZmZi
YTk1Li5mYjkxZTFjZmUyMGNkZWQ0NTg0N2IwNTE0MmZmOGFiYTY4N2VhMGE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC00NywxOCArNDcsMjYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfkNDVmlkZW9MYXllckltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFk
cyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHJlRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dERyYXcoKTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJHQkFQcm9ncmFtOwog
ICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwg
RnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKICAgICB0eXBlZGVmIFByb2dyYW1C
aW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4
RmxpcEFscGhhPiBOYXRpdmVUZXh0dXJlUHJvZ3JhbTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCiAgICAgLy8gVmlkZW9G
cmFtZVByb3ZpZGVyOjpDbGllbnQgaW1wbGVtZW50YXRpb24gKGNhbGxhYmxlIG9uIGFueSB0aHJl
YWQpLgogICAgIHZpcnR1YWwgdm9pZCBzdG9wVXNpbmdQcm92aWRlcigpOwogCisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IHl1djJSR0JbOV07CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1dkFkanVz
dFszXTsKKworICAgIHN0cnVjdCBUZXh0dXJlIHsKKyAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0
dXJlPiBtX3RleHR1cmU7CisgICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsKKyAgICB9Owor
CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50LCBWaWRlb0ZyYW1l
UHJvdmlkZXIqKTsKIApAQCAtNjcsMjcgKzc1LDE3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjb3B5
RnJhbWVUb1RleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1h
dCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCBjb3B5UGxhbmVUb1RleHR1cmUo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCk7CiAg
ICAgYm9vbCByZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVu
dW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLSAgICB2b2lkIGRyYXdZVVYoTGF5
ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3UkdCQShMYXllclJlbmRl
cmVyQ2hyb21pdW0qKSBjb25zdDsKLSAgICB2b2lkIGRyYXdOYXRpdmVUZXh0dXJlKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQg
ZHJhd0NvbW1vbihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBQcm9ncmFtKiwgZmxvYXQgd2lkdGhT
Y2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpIGNvbnN0OwogCiAgICAgTXV0
ZXggbV9wcm92aWRlck11dGV4OyAvLyBHdWFyZHMgbV9wcm92aWRlciBiZWxvdy4KICAgICBWaWRl
b0ZyYW1lUHJvdmlkZXIqIG1fcHJvdmlkZXI7CiAKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2
MlJHQls5XTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOwotCi0gICAgc3Ry
dWN0IFRleHR1cmUgewotICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsK
LSAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOwotICAgIH07CiAgICAgZW51bSB7IE1heFBs
YW5lcyA9IDMgfTsKICAgICBUZXh0dXJlIG1fdGV4dHVyZXNbTWF4UGxhbmVzXTsKICAgICBpbnQg
bV9wbGFuZXM7CiAKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbmF0aXZlVGV4dHVyZUlkOwogICAg
IEludFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIG1f
ZnJhbWU7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123989</attachid>
            <date>2012-01-25 12:35:52 -0800</date>
            <delta_ts>2012-01-31 08:47:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120125153551.patch</filename>
            <type>text/plain</type>
            <size>25539</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzAxNzI5YWJiNDI2NGI1
NWE5MGQwM2UwZTNhMWE3YjFhZjUyNGIzMy4uYTllZThlN2Y4MDIzYzhmZGU4NTM1ZjVjZWFhM2Yy
M2MwZDU0ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTAxLTI1ICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgQ0NWaWRlb0xheWVySW1wbCBubyBsb25n
ZXIgaGFuZGxlcyBkcmF3aW5nIGl0c2VsZiwgYnV0IHByb2R1Y2VzIGEgbGlzdCBvZiBDQ1ZpZGVv
RHJhd1F1YWRzLgorICAgICAgICBUaGVzZSBxdWFkcyBhcmUgdGhlbiBkcmF3biBieSBMYXllclJl
bmRlcmVyQ2hyb21pdW0uCisKKyAgICAgICAgQ0NMYXllckltcGw6OnByZURyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKikgaXMgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZSBhcHBlbmRRdWFkcy4KKyAg
ICAgICAgQ0NMYXllckltcGw6OnBvc3REcmF3KCkgaXMgY2FsbGVkIGRpcmVjdGx5IGFmdGVyIGFs
bCBkcmF3aW5nIGhhcyBiZWVuIGNvbXBsZXRlZC4KKworICAgICAgICBwcmVEcmF3IGFuZCBwb3N0
RHJhdyBhcmUgdXNlZCB0byBoYW5kbGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVmlkZW9GcmFtZVBy
b3ZpZGVyCisgICAgICAgIGluIENDVmlkZW9MYXllckltcGwuIHByZURyYXcgZ2V0cyBhIGZyYW1l
IGZyb20gdGhlIFZpZGVvRnJhbWVQcm92aWRlciwgYW5kCisgICAgICAgIHBvc3REcmF3IHJldHVy
bnMgaXQuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yLCBzbyBubyBuZXcgdGVzdHMgd2Vy
ZSBhZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJl
bmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cHJlRHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cG9zdERyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmg6CisgICAgICAg
IChDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpm
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpuYXRpdmVUZXh0dXJl
SWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjp0ZXh0dXJlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpwcmVEcmF3KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6cG9zdERyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZVZpc2libGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ1ZpZGVv
TGF5ZXJJbXBsKToKKyAgICAgICAgKFRleHR1cmUpOgorICAgICAgICAoKToKKwogMjAxMi0wMS0y
NSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAg
ICBib3JkZXItaW1hZ2Ugc2hvdWxkIG5vdCBjcmFzaCB3aGVuIHRoZSBzb3VyY2UgaXMgbm90IHNw
ZWNpZmllZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGJiZGY4
OWRhZjAxNjhjYzgwNDE5NmJkOWYzMTNiMzBhODlmMzMxYzYuLmQ1ZmEwNjA3MDI1MjA3Y2UyMmIy
OWVlZThkZDFhNDIwZmNlOTIyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcApAQCAtNjkyLDEwICs2OTIsOTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdDYW52YXNRdWFkKGNvbnN0IENDQ2FudmFzRHJhd1F1YWQqIHF1YWQpCiAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKIH0KIAordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQor
eworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRl
b0xheWVyWVVWUHJvZ3JhbSgpOworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRp
YWxpemVkKCkpOworCisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgeVRleHR1
cmUgPSBxdWFkLT50ZXh0dXJlcygpW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXTsKKyAgICBj
b25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB1VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVz
KClbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllcklt
cGw6OlRleHR1cmUmIHZUZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21p
dW06OnZQbGFuZV07CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1
cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKKyAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MykpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsK
KworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKKworICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKS53aWR0aCgpOworICAgIC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVj
YXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4KKyAgICBmbG9hdCB1dldpZHRo
U2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53
aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkueVdp
ZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB5V2lkdGhTY2FsZUZhY3RvcikpOworICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2
V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOworCisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS55VGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnVUZXh0dXJlTG9jYXRpb24o
KSwgMikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkudlRleHR1cmVMb2NhdGlvbigpLCAzKSk7CisKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm1NYXRyaXgzZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5jY01hdHJpeExvY2F0aW9uKCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihDQ1ZpZGVvTGF5
ZXJJbXBsOjp5dXYyUkdCKSwgMSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5p
Zm9ybTNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIGNvbnN0
X2Nhc3Q8ZmxvYXQqPihDQ1ZpZGVvTGF5ZXJJbXBsOjp5dXZBZGp1c3QpLCAxKSk7CisKKyAgICBj
b25zdCBJbnRTaXplJiBib3VuZHMgPSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKKyAgICBkcmF3
VGV4dHVyZWRRdWFkKHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3Vu
ZHMuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgRmxvYXRRdWFkKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2Nh
dGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtMSk7CisKKyAgICAvLyBSZXNldCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRl
eHR1cmUgMC4KKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFByb2dyYW0+
Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NvbW1vbihjb25zdCBDQ1ZpZGVvRHJh
d1F1YWQqIHF1YWQsIFByb2dyYW0qIHByb2dyYW0sIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQoreworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dy
YW0tPmluaXRpYWxpemVkKCkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHRleHR1cmVJZCkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5p
Zm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAs
IDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAw
KSk7CisKKyAgICBjb25zdCBJbnRTaXplJiBib3VuZHMgPSBxdWFkLT5xdWFkUmVjdCgpLnNpemUo
KTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53
aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlR
dWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UkdCQShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0qIHByb2dyYW0gPSB2aWRlb0xh
eWVyUkdCQVByb2dyYW0oKTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB0
ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsK
KyAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUu
bV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgo
KTsKKyAgICBkcmF3Q29tbW9uKHF1YWQsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1
cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TmF0aXZlVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7Cisg
ICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0g
PSB2aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKKyAgICBkcmF3Q29tbW9uKHF1YWQs
IHByb2dyYW0sIDEsIHF1YWQtPm5hdGl2ZVRleHR1cmVJZCgpKTsKK30KKwogdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFk
KQogewotICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7Ci0gICAgbGF5ZXIt
PmRyYXcodGhpcyk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKworICAg
IHN3aXRjaCAocXVhZC0+Zm9ybWF0KCkpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
VU1JTkFOQ0U6CisgICAgICAgIGRyYXdZVVYocXVhZCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGRyYXdSR0JBKHF1YWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAg
ICAgICBkcmF3TmF0aXZlVGV4dHVyZShxdWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQ1JBU0goKTsgLy8gU29tZW9uZSB1cGRhdGVkIGNvbnZlcnRWRkNGb3JtYXRU
b0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0ZSB0aGlzIQorICAgIH0KIH0KIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQq
IHF1YWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGM4OTZiMWRmMjZm
M2VmZWFjMTFiMzI3MWM1OTU3YTJmNGJmNThlOTIuLmRhODcyOTNmYTY0ZmQ5NjU2MmVhMjA3ODcx
NjVjNGI4YjRlNWJiNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0x
NzIsNiArMTcyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3UGx1Z2luUXVhZChjb25zdCBD
Q1BsdWdpbkRyYXdRdWFkKik7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5
ZXJUZXh0dXJlKCk7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9u
KGNvbnN0IENDVmlkZW9EcmF3UXVhZCosIFByb2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9y
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCk7CisgICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVy
ZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IENDVmlk
ZW9EcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1lVVihjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsK
KwogICAgIHZvaWQgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIAogICAgIHZvaWQg
c2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAppbmRleCAwMGUwYWRmOGE1MWZkZWMwNGE5ZjQyNWYwNDU3YWEzMzg4Y2VhM2Fh
Li43ODA5YTNlN2MzNzNiZWY2OTk1MDNmYmVhOGEzYTBmODcwOTFhMDQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKQEAgLTczLDYgKzczLDggQEAgcHVibGljOgogCiAgICAgUGFzc093blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSop
OworICAgIHZpcnR1YWwgdm9pZCBwcmVEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopIHsgfTsK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXcoKSB7IH07CiAgICAgdm9pZCBhcHBlbmREZWJ1Z0Jv
cmRlclF1YWQoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNmMyYzc0MjZmYzBiOTUwMDFkZWVl
OGE3MDk0ZWM5Y2Q4ZjUwYzk1Zi4uOGQ1NzljYjVhMDY4YWRjNjU3MTc4NWM3ZWUyZWFjZTkyZWQ2
NTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTIyNiw2
ICsyMjYsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiAgICAgICAgICAgICBpZiAobGF5ZXItPnZpc2li
bGVMYXllclJlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgICAgIGxheWVyLT5wcmVEcmF3KG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CisKICAgICAg
ICAgICAgIGlmIChDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRlclN1cmZhY2VDb250cmlidXRl
c1RvVGFyZ2V0KGxheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpKSB7CiAgICAgICAgICAg
ICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIobGF5ZXIpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjYwLDYgKzI2MiwxNyBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQogICAgIG1fbGF5ZXJSZW5kZXJlci0+YmVnaW5EcmF3
aW5nRnJhbWUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nlcy5zaXplKCk7ICsr
aSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFzcyhwYXNzZXNbaV0uZ2V0
KCkpOworCisgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJvb3RMYXllcigpLT5y
ZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpOworCisgICAgZm9yICh1bnNpZ25lZCBsYXllcklu
ZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewor
ICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdl
dCgpOworICAgICAgICAgICAgaWYgKGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBsYXllci0+cG9zdERy
YXcoKTsKKyAgICB9CisKICAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaERyYXdpbmdGcmFtZSgp
OwogCiAgICAgKyttX2ZyYW1lTnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAK
aW5kZXggM2RlMzhlOTBmODYzZjFmMzg3MDg0OGNmMTA5MjM4OTlkZTk3N2MxNS4uYjlhZmE0ZTY2
M2ZmNTMzNWU5MzBlZjZlNDkxMTQ5NzIwZDg0OThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJh
d1F1YWQuY3BwCkBAIC0yOSwxNiArMjksMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJl
Y3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK1Bhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1Zp
ZGVvRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0
YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4
dHVyZSogdGV4dHVyZXMsIEdDM0RlbnVtIGZvcm1hdCwgUGxhdGZvcm0zRE9iamVjdCBuYXRpdmVU
ZXh0dXJlSWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ZpZGVvRHJhd1F1YWQoc2hh
cmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0ZXh0dXJlcywgZm9y
bWF0LCBuYXRpdmVUZXh0dXJlSWQpKTsKIH0KIAotQ0NWaWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJh
d1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50
UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK0NDVmlkZW9EcmF3UXVhZDo6Q0NW
aWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0
ZXh0dXJlcywgR0MzRGVudW0gZm9ybWF0LCBQbGF0Zm9ybTNET2JqZWN0IG5hdGl2ZVRleHR1cmVJ
ZCkKICAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpWaWRlb0Nv
bnRlbnQsIHF1YWRSZWN0KQotICAgICwgbV9sYXllcihsYXllcikKKyAgICAsIG1fdGV4dHVyZXMo
dGV4dHVyZXMpCisgICAgLCBtX2Zvcm1hdChmb3JtYXQpCisgICAgLCBtX25hdGl2ZVRleHR1cmVJ
ZChuYXRpdmVUZXh0dXJlSWQpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXIpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9EcmF3UXVhZC5oCmluZGV4IGIxOGJjNTU0MWNkMmJjZjdmYzEyZmJmOTNiZGIz
NDM4OTY0Zjk4NGEuLjRlZGJhMWIyNzllYjA1OGJiMjgwYzU3M2QyZDg2YTBlNTlmMzM5MGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9EcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCkBAIC0yNiwyMyArMjYsMjggQEAKICNpZm5kZWYg
Q0NWaWRlb0RyYXdRdWFkX2gKICNkZWZpbmUgQ0NWaWRlb0RyYXdRdWFkX2gKIAorI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDVmlkZW9E
cmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q1ZpZGVvRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVmlkZW9E
cmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYs
IENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBj
cmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ0NW
aWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIEdDM0RlbnVtIGZvcm1hdCwgUGxhdGZv
cm0zRE9iamVjdCBuYXRpdmVUZXh0dXJlSWQpOwogCi0gICAgQ0NMYXllckltcGwqIGxheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQorICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9ybWF0OyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBuYXRpdmVUZXh0dXJlSWQo
KSBjb25zdCB7IHJldHVybiBtX25hdGl2ZVRleHR1cmVJZDsgfQorICAgIGNvbnN0IENDVmlkZW9M
YXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlczsg
fQogCiBwcml2YXRlOgotICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworICAgIENDVmlkZW9EcmF3UXVhZChj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgR0MzRGVudW0gZm9ybWF0LCBQbGF0Zm9ybTNET2Jq
ZWN0IG5hdGl2ZVRleHR1cmVJZCk7CiAKLSAgICBDQ0xheWVySW1wbCogbV9sYXllcjsKKyAgICBj
b25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiBtX3RleHR1cmVzOworICAgIEdDM0RlbnVt
IG1fZm9ybWF0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9uYXRpdmVUZXh0dXJlSWQ7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDA5YWZiMDhkM2VkZGUx
NTMxZTVhY2ZiYTZhMDE1ODE5Mzg4YzUxNWYuLmExNjU2YWY5NTAzNDBiNDU4MzVlODcxOWU2NjI0
OGEyNTM0Mjk3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0xMTIs
NTMgKzExMiwxOCBAQCBzdGF0aWMgR0MzRGVudW0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1h
dChWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBmb3JtYXQpCiAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRy
YXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKLSAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7Ci0K
LSAgICBpZiAoIW1fcHJvdmlkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZpZGVvRnJhbWVD
aHJvbWl1bSogZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAo
IWZyYW1lKQorICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIEdDM0RlbnVt
IGZvcm1hdCA9IGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoZnJhbWUtPmZvcm1hdCgpKTsK
IAotICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpIHsK
LSAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBHQzNEZW51bSBmb3JtYXQgPSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNE
Rm9ybWF0KG1fZnJhbWUtPmZvcm1hdCgpKTsKIAotICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJl
cyhmcmFtZSwgZm9ybWF0LCBsYXllclJlbmRlcmVyKSkgewotICAgICAgICBtX3Byb3ZpZGVyLT5w
dXRDdXJyZW50RnJhbWUoZnJhbWUpOworICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICAg
ICAgZHJhd1lVVihsYXllclJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgZHJhd1JHQkEobGF5ZXJSZW5kZXJlcik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0g
ICAgICAgIGRyYXdOYXRpdmVUZXh0dXJlKGxheWVyUmVuZGVyZXIpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOyAvLyBTb21lb25lIHVwZGF0ZWQgY29udmVy
dFZGQ0Zvcm1hdFRvR0MzREZvcm1hdCBhYm92ZSBidXQgdXBkYXRlIHRoaXMhCi0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3Bs
YW5lKQotICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOwot
ICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci19CiAKLXZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCi17CiAgICAgSW50UmVjdCBxdWFkUmVjdChJ
bnRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDVmlkZW9EcmF3UXVh
ZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsKKyAgICBxdWFkTGlz
dC5hcHBlbmQoQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVj
dCwgbV90ZXh0dXJlcywgZm9ybWF0LCBtX25hdGl2ZVRleHR1cmVJZCkpOwogfQogCiBib29sIEND
VmlkZW9MYXllckltcGw6OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9t
aXVtKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIpCkBAIC0yMDYsNiArMTcxLDUwIEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6Y29w
eVBsYW5lVG9UZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwKICAg
ICB9CiB9CiAKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6cHJlRHJhdyhMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXJDaHJvbWl1bSkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7
CisKKyAgICBpZiAoIW1fcHJvdmlkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJhbWUg
PSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICghbV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR0MzRGVudW0gZm9ybWF0ID0gY29udmVydFZGQ0Zvcm1hdFRv
R0MzREZvcm1hdChtX2ZyYW1lLT5mb3JtYXQoKSk7CisKKyAgICBpZiAoZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1
cnJlbnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIWNvcHlGcmFtZVRvVGV4dHVyZXMobV9mcmFtZSwgZm9ybWF0
LCBsYXllclJlbmRlcmVyQ2hyb21pdW0pKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJl
bnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6cG9zdERyYXcoKQoreworICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9wcm92aWRlck11dGV4KTsKKworICAgIGlmICghbV9wcm92aWRlciB8fCAhbV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9m
cmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpCisgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4
dHVyZS0+dW5yZXNlcnZlKCk7CisKKyAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUobV9m
cmFtZSk7Cit9CisKIHN0YXRpYyBJbnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRl
b0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCB1bnNpZ25lZCBwbGFuZSkKIHsKICAgICBpbnQgdmlzaWJs
ZVdpZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKQEAgLTI1NCw4MSArMjYzLDYgQEAgYm9vbCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVt
KiBmcmFtZSwgR0MzRGVudW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpkcmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29u
c3QKLXsKLSAgICBjb25zdCBZVVZQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlk
ZW9MYXllcllVVlByb2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0
aWFsaXplZCgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpOwotICAgIGNvbnN0IFRleHR1cmUmIHlUZXh0dXJlID0gbV90ZXh0dXJl
c1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07Ci0gICAgY29uc3QgVGV4dHVyZSYgdVRleHR1
cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKLSAgICBjb25zdCBU
ZXh0dXJlJiB2VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxhbmVd
OwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1
cmVJZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUt
PnRleHR1cmVJZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB2VGV4dHVyZS5tX3Rl
eHR1cmUtPnRleHR1cmVJZCgpKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLQotICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9y
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB5
VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5IHRh
a2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4K
LSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1
cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndp
ZHRoKCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9y
KSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3Ip
KTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS55VGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudVRleHR1cmVMb2NhdGlv
bigpLCAyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOwotCi0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5j
Y01hdHJpeExvY2F0aW9uKCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPih5dXYyUkdCKSwgMSkpOwot
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtM2Z2KHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkueXV2QWRqTG9jYXRpb24oKSwgY29uc3RfY2FzdDxmbG9hdCo+KHl1dkFkanVzdCksIDEp
KTsKLQotICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgp
LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgRmxv
YXRRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci0KLSAgICAvLyBSZXNldCBh
Y3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLX0KLQotdGVt
cGxhdGU8Y2xhc3MgUHJvZ3JhbT4KLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd0NvbW1vbihM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIFByb2dyYW0qIHByb2dyYW0sIGZs
b2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdAot
ewotICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotCi0gICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0K
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotCi0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFu
c2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBs
ZXJMb2NhdGlvbigpLCAwKSk7Ci0KLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFk
KGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRy
YXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLTEpOwotfQotCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdS
R0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKLXsKLSAgICBj
b25zdCBSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJSR0JB
UHJvZ3JhbSgpOwotICAgIGNvbnN0IFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVv
RnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBz
dGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVy
ZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIGRyYXdDb21tb24obGF5ZXJSZW5kZXJl
ciwgcHJvZ3JhbSwgd2lkdGhTY2FsZUZhY3RvciwgdGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJ
ZCgpKTsKLX0KLQotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVyZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Ci17Ci0gICAgY29uc3QgTmF0
aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyTmF0
aXZlVGV4dHVyZVByb2dyYW0oKTsKLSAgICBkcmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHByb2dy
YW0sIDEsIG1fbmF0aXZlVGV4dHVyZUlkKTsKLX0KLQogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpk
dW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogewog
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5o
CmluZGV4IDE4MmY3YjU4MjdjOTFjYmZmZWU1ZDNiYWVhZDEwODUxZjZmZmJhOTUuLmZiOTFlMWNm
ZTIwY2RlZDQ1ODQ3YjA1MTQyZmY4YWJhNjg3ZWEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKQEAgLTQ3LDE4ICs0NywyNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q0NWaWRl
b0xheWVySW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3Qm
LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopOworICAgIHZpcnR1YWwgdm9pZCBwcmVEcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOworICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhdygpOwogCiAg
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZy
YWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUkdCQVByb2dyYW07CiAgICAgdHlwZWRlZiBQ
cm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoLCBGcmFnbWVudFNoYWRl
cllVVlZpZGVvPiBZVVZQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4
U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IE5h
dGl2ZVRleHR1cmVQcm9ncmFtOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICAvLyBWaWRlb0ZyYW1lUHJvdmlkZXI6
OkNsaWVudCBpbXBsZW1lbnRhdGlvbiAoY2FsbGFibGUgb24gYW55IHRocmVhZCkuCiAgICAgdmly
dHVhbCB2b2lkIHN0b3BVc2luZ1Byb3ZpZGVyKCk7CiAKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQg
eXV2MlJHQls5XTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOworCisgICAg
c3RydWN0IFRleHR1cmUgeworICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVy
ZTsKKyAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOworICAgIH07CisKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChpbnQsIFZpZGVvRnJhbWVQcm92aWRlciopOwog
CkBAIC02NywyNyArNzUsMTcgQEAgcHJpdmF0ZToKICAgICBib29sIGNvcHlGcmFtZVRvVGV4dHVy
ZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGNvcHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KTsKICAgICBib29sIHJlc2Vy
dmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQsIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZvaWQgZHJhd1lVVihMYXllclJlbmRlcmVyQ2hy
b21pdW0qKSBjb25zdDsKLSAgICB2b2lkIGRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSop
IGNvbnN0OwotICAgIHZvaWQgZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9uKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSosIFByb2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgY29uc3Q7CiAKICAgICBNdXRleCBtX3Byb3ZpZGVy
TXV0ZXg7IC8vIEd1YXJkcyBtX3Byb3ZpZGVyIGJlbG93LgogICAgIFZpZGVvRnJhbWVQcm92aWRl
ciogbV9wcm92aWRlcjsKIAotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOwotICAg
IHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107Ci0KLSAgICBzdHJ1Y3QgVGV4dHVyZSB7
Ci0gICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOwotICAgICAgICBJbnRT
aXplIG1fdmlzaWJsZVNpemU7Ci0gICAgfTsKICAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9Owog
ICAgIFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFuZXNdOwogICAgIGludCBtX3BsYW5lczsKIAog
ICAgIFBsYXRmb3JtM0RPYmplY3QgbV9uYXRpdmVUZXh0dXJlSWQ7CiAgICAgSW50U2l6ZSBtX25h
dGl2ZVRleHR1cmVTaXplOworICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogbV9mcmFtZTsKIH07CiAK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124742</attachid>
            <date>2012-01-31 08:48:03 -0800</date>
            <delta_ts>2012-02-01 13:55:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120131114801.patch</filename>
            <type>text/plain</type>
            <size>36653</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY3ODFiNzFmMWQ3OWE4
Yjg0MDBiMzM4ZDk2ZWJhYzQ1ZWFkNTljZC4uMGJiNTlkN2FiMGFhNzllZDk3NThiZTE3ODIxNzFl
MTdlMzkyYWVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTAxLTMxICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsIG5vIGxv
bmdlciBoYW5kbGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDVmlk
ZW9EcmF3UXVhZHMuCisgICAgICAgIFRoZXNlIHF1YWRzIGFyZSB0aGVuIGRyYXduIGJ5IExheWVy
UmVuZGVyZXJDaHJvbWl1bS4KKworICAgICAgICBDQ0xheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKikgaXMgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZSBhcHBlbmRRdWFkcy4K
KyAgICAgICAgQ0NMYXllckltcGw6OmRpZERyYXcoKSBpcyBjYWxsZWQgZGlyZWN0bHkgYWZ0ZXIg
YWxsIGRyYXdpbmcgaGFzIGJlZW4gY29tcGxldGVkLgorCisgICAgICAgIHdpbGxEcmF3IGFuZCBk
aWREcmF3IGFyZSB1c2VkIHRvIGhhbmRsZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWaWRlb0ZyYW1l
UHJvdmlkZXIKKyAgICAgICAgaW4gQ0NWaWRlb0xheWVySW1wbC4gd2lsbERyYXcgZ2V0cyBhIGZy
YW1lIGZyb20gdGhlIFZpZGVvRnJhbWVQcm92aWRlciwgYW5kCisgICAgICAgIGRpZERyYXcgcmV0
dXJucyBpdC4KKworICAgICAgICBBIHVuaXQgdGVzdCBoYXMgYmVlbiBhZGRlZDogQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJzLgorICAgICAgICBUaGlzIHRl
c3QgZW5zdXJlcyB0aGF0IENDTGF5ZXJJbXBsOjpkaWREcmF3KCkgaXMgY2FsbGVkIG9uIGFsbCBs
YXllcnMsCisgICAgICAgIGluY2x1ZGluZyBsYXllcnMgb24gZGlmZmVyZW50IHJlbmRlciBzdXJm
YWNlcy4KKworICAgICAgICBBcyB0aGlzIHdhcyBhIHJlZmFjdG9yLCBubyBvdGhlciB0ZXN0cyB3
ZXJlIGFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1lVVik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd05hdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5RnJhbWVUb1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weVBsYW5lVG9UZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6Cisg
ICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRpZERyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3Vs
YXRlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6
OmRyYXdMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmg6CisgICAgICAgIChD
Q1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjp0ZXh0
dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OmZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6Zm9ybWF0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmRpZERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKENDVmlkZW9MYXllckltcGwpOgorICAg
ICAgICAoVGV4dHVyZSk6CisgICAgICAgICgpOgorCiAyMDEyLTAxLTMwICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXgg
bWFrZSBkaXN0Y2hlY2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGI4MjlmNjcyYzcz
MDM5MTRjMzBjMjhmZTEwZTljNTJmYWVkOGVhMGYuLmFlYmM2ZmNlNDkxNmM2ZTZhNmQzM2ZhNTg4
NWNiYjEyOWZjZTk5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTItMDEtMzEgIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgdmlkZW8gZHJhd2luZyB0byBiZSBtb3JlIGRhdGEg
ZHJpdmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmRpZERyYXdDYWxsZWRPbkFsbExheWVycyBlbnN1cmVzIHRo
YXQKKyAgICAgICAgQ0NMYXllckltcGw6OmRpZERyYXcoKSBpcyBjYWxsZWQgb24gYWxsIGxheWVy
cywgaW5jbHVkaW5nIGxheWVycworICAgICAgICBvbiBkaWZmZXJlbnQgcmVuZGVyIHN1cmZhY2Vz
LgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAgICAg
ICAoRGlkRHJhd0NoZWNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpEaWREcmF3Q2hlY2tMYXll
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6RGlkRHJhd0NoZWNrTGF5ZXI6OmRpZERyYXcp
OgorICAgICAgICAoV2ViS2l0OjpEaWREcmF3Q2hlY2tMYXllcjo6ZGlkRHJhd0NhbGxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkRpZERyYXdDaGVja0xheWVyOjpEaWREcmF3Q2hlY2tMYXllcik6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgorICAgICAgICAoKToK
KwogMjAxMi0wMS0zMCAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDYyMTkuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCBmMzY3ZWY5ZTc4MDcyMTQ0ZTJiMDVhMzExYTJmOTg5ZWI3
MGMxMThjLi5kM2UyNmFiZDgyYzNjMGMxNTViNDFiOWI0ZjQ3M2U1NTQ4OGMxYzEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTY5NCwxMCArNjk0LDEzOSBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NhbnZhc1F1YWQoY29uc3QgQ0NDYW52YXNE
cmF3UXVhZCogcXVhZCkKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVT
X1NSQ19BTFBIQSkpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVihj
b25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1w
bDo6WVVWUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7CisgICAgQVNT
RVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBjb25zdCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB5VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbVmlkZW9G
cmFtZUNocm9taXVtOjp5UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1
cmUmIHVUZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFu
ZV07CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgdlRleHR1cmUgPSBxdWFk
LT50ZXh0dXJlcygpW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXTsKKworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJlLm1fdGV4dHVyZS0+
dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRleHR1
cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAgZmxvYXQgeVdpZHRo
U2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUubV92aXNpYmxlU2l6ZS53
aWR0aCgpKSAvIHlUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CisgICAgLy8gQXJi
aXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUg
aWRlbnRpY2FsLgorICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZs
b2F0Pih1VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUubV90ZXh0dXJl
LT5zaXplKCkud2lkdGgoKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0x
Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlX
aWR0aFNjYWxlRmFjdG9yKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3Jt
MWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwg
dXZXaWR0aFNjYWxlRmFjdG9yKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkp
OworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkudVRleHR1cmVMb2NhdGlvbigpLCAyKSk7CisgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS52VGV4dHVyZUxv
Y2F0aW9uKCksIDMpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybU1h
dHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwgMCwg
Y29uc3RfY2FzdDxmbG9hdCo+KENDVmlkZW9MYXllckltcGw6Onl1djJSR0IpLCAxKSk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtM2Z2KHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkueXV2QWRqTG9jYXRpb24oKSwgY29uc3RfY2FzdDxmbG9hdCo+KENDVmlkZW9MYXllcklt
cGw6Onl1dkFkanVzdCksIDEpKTsKKworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IHF1YWQt
PnF1YWRSZWN0KCkuc2l6ZSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFu
c2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgp
LCBGbG9hdFF1YWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKworICAgIC8vIFJl
c2V0IGFjdGl2ZSB0ZXh0dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgorICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsK
K30KKwordGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3Q29tbW9uKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCwgUHJvZ3JhbSogcHJvZ3Jh
bSwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCit7
CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CisKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3RvciwgMSkpOwor
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgIGNvbnN0IEludFNpemUmIGJv
dW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVh
ZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVh
ZC0+b3BhY2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmFscGhhTG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0xKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKGNvbnN0
IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKK3sKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpS
R0JBUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOworICAgIGNvbnN0
IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1Zp
ZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3Ig
PSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4
dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIGRyYXdDb21tb24ocXVhZCwgcHJv
Z3JhbSwgd2lkdGhTY2FsZUZhY3RvciwgdGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKTsK
K30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlKGNvbnN0
IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKK3sKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpO
YXRpdmVUZXh0dXJlUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJv
Z3JhbSgpOworICAgIGRyYXdDb21tb24ocXVhZCwgcHJvZ3JhbSwgMSwgcXVhZC0+ZnJhbWUoKS0+
dGV4dHVyZUlkKCkpOworfQorCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1l
VG9UZXh0dXJlcyhjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgVmlk
ZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IHF1YWQtPmZyYW1lKCk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsKKyAgICAg
ICAgQVNTRVJUKHF1YWQtPmZyYW1lKCktPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpID09IHF1
YWQtPnRleHR1cmVzKClbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpKTsKKyAgICAgICAgY29weVBs
YW5lVG9UZXh0dXJlKHF1YWQsIGZyYW1lLT5kYXRhKHBsYW5lKSwgcGxhbmUpOworICAgIH0KKyAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gZnJhbWUtPnBsYW5lcygpOyBwbGFuZSA8IENDVmlkZW9M
YXllckltcGw6Ok1heFBsYW5lczsgKytwbGFuZSkgeworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBs
OjpUZXh0dXJlKiB0ZXh0dXJlID0gJnF1YWQtPnRleHR1cmVzKClbcGxhbmVdOworICAgICAgICB0
ZXh0dXJlLT5tX3RleHR1cmUuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZS0+bV92aXNpYmxlU2l6
ZSA9IEludFNpemUoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjb3B5UGxhbmVUb1RleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFk
KiBxdWFkLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KQoreworICAgIENDVmlkZW9MYXll
ckltcGw6OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW2luZGV4XTsKKyAgICBU
ZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSByZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRv
cigpOworICAgIHRleHR1cmUubV90ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0KCksIGFsbG9j
YXRvcik7CisgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgp
OworICAgIEludFNpemUgZGltZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7CisK
KyAgICB2b2lkKiBtZW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRl
eHQoKS0+Z2V0RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVu
c2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKKyAgICBpZiAobWVtKSB7CisgICAg
ICAgIG1lbWNweShtZW0sIHBsYW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhl
aWdodCgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNE
Q2hyb21pdW0qPihjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2Uy
RENIUk9NSVVNKG1lbSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKKyAg
ICAgICAgLy8gdXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJ
bWFnZTJEQ0hST01JVU0sIG9uZQorICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5k
IGFub3RoZXIgdG8gdGhlIHRleHR1cmUuCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwg
ZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwbGFuZSkpOworICAgIH0KK30KKwogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBx
dWFkKQogewotICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7Ci0gICAgbGF5
ZXItPmRyYXcodGhpcyk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKwor
ICAgIGlmICghcXVhZC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFjb3B5
RnJhbWVUb1RleHR1cmVzKHF1YWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHF1
YWQtPmZvcm1hdCgpKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgor
ICAgICAgICBkcmF3WVVWKHF1YWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOgorICAgICAgICBkcmF3UkdCQShxdWFkKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgZHJhd05h
dGl2ZVRleHR1cmUocXVhZCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IENSQVNIKCk7IC8vIFNvbWVvbmUgdXBkYXRlZCBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0
IGFib3ZlIGJ1dCB1cGRhdGUgdGhpcyEKKyAgICB9CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3UGx1Z2luUXVhZChjb25zdCBDQ1BsdWdpbkRyYXdRdWFkKiBxdWFkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBjODk2YjFkZjI2ZjNlZmVhYzExYjMy
NzFjNTk1N2EyZjRiZjU4ZTkyLi5hYTEzMmM1OTZmNzhhZDM5NWQxOTdhODRkZDJlZmM3ZDg2NWJj
Y2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTcyLDYgKzE3Miwx
MyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd1BsdWdpblF1YWQoY29uc3QgQ0NQbHVnaW5EcmF3
UXVhZCopOwogCiAgICAgTWFuYWdlZFRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgp
OworICAgIHZvaWQgY29weVBsYW5lVG9UZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCosIGNv
bnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpOworICAgIGJvb2wgY29weUZyYW1lVG9UZXh0dXJl
cyhjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2
b2lkIGRyYXdDb21tb24oY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiwgUHJvZ3JhbSosIGZsb2F0IHdp
ZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKTsKKyAgICB2b2lkIGRy
YXdOYXRpdmVUZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1JH
QkEoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3WVVWKGNvbnN0IENDVmlk
ZW9EcmF3UXVhZCopOworCiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgp
OwogCiAgICAgdm9pZCBzZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3QmLCBib29sIGZs
aXBZKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDAwZTBhZGY4YTUxZmRlYzA0YTlmNDI1ZjA0
NTdhYTMzODhjZWEzYWEuLmEzYjlmYzliNDY3MzBhNWYxNGM4ZjI0Y2MyMWU1NTlmY2NkMjBjMWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNzIsNyArNzIsOSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVNoYXJlZFF1YWRTdGF0
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZERyYXcoKSB7IH0KICAg
ICB2b2lkIGFwcGVuZERlYnVnQm9yZGVyUXVhZChDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBj
OWRlZDk4YjIwMTEzYjJiMWU4NTM4NjY3OGFjYjMzYmExZmYyMDAzLi4wNTNhMzc2M2JmYTQyN2Iw
OTQ2Y2I0Mjc0OWY4OTE2YjljODFmN2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRy
YWNrZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIK
ICNpbmNsdWRlICJjYy9DQ1BhZ2VTY2FsZUFuaW1hdGlvbi5oIgpAQCAtMTg3LDEwICsxODgsMTAg
QEAgc3RhdGljIEZsb2F0UmVjdCBkYW1hZ2VJblN1cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVu
ZGVyU3VyZmFjZUxheWVyLCBjb25zdCBGbG8KICAgICByZXR1cm4gc3VyZmFjZURhbWFnZVJlY3Q7
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKEND
UmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbDo6
Q0NMYXllckxpc3Q+IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhD
Q1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiB7Ci0gICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdDsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIo
KSk7CisgICAgT3duUHRyPENDTGF5ZXJMaXN0PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gYWRv
cHRQdHIobmV3IENDTGF5ZXJMaXN0KCkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QtPmFw
cGVuZChyb290TGF5ZXIoKSk7CiAKICAgICBpZiAoIXJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNl
KCkpCiAgICAgICAgIHJvb3RMYXllcigpLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CkBAIC0yMDIs
MTUgKzIwMywxNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBh
c3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiAgICAgewogICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7Ci0gICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXll
cigpLCByb290TGF5ZXIoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3Qo
KSwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJl
U2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllcigpLCByb290TGF5ZXIoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCAqcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5nZXQoKSwgcm9vdExh
eWVyKCktPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAogICAgIGlm
IChsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAg
dHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhyb290TGF5ZXIoKSwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdExheWVyKCksICpy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmdldCgpKTsKICAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gcm9v
dExheWVyKCktPnJlbmRlclN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdl
UmVjdCgpOwogCi0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0g
ICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC0+c2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAt
LXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVy
ID0gKCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KVtzdXJmYWNlSW5kZXhdLmdldCgpOwogICAgICAg
ICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJl
bmRlclN1cmZhY2UoKTsKIAogICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NS
ZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSk7CkBAIC0yMzEsMTEgKzIzMiwxMyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBh
c3NMaXN0JiBwYXNzZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgIGxheWVyLT53aWxsRHJhdyhtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwog
ICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcihsYXllcik7CiAgICAgICAgIH0K
IAogICAgICAgICBwYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9CisgICAgcmV0
dXJuIHJlbmRlclN1cmZhY2VMYXllckxpc3QucmVsZWFzZSgpOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6Om9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nl
cykKQEAgLTI2MiwxMyArMjY1LDIyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xh
eWVycygpCiAgICAgICAgIHJldHVybjsKIAogICAgIENDUmVuZGVyUGFzc0xpc3QgcGFzc2VzOwot
ICAgIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhwYXNzZXMpOworICAgIE93blB0cjxDQ0xheWVyTGlz
dD4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhwYXNzZXMp
OwogCiAgICAgb3B0aW1pemVSZW5kZXJQYXNzZXMocGFzc2VzKTsKIAogICAgIG1fbGF5ZXJSZW5k
ZXJlci0+YmVnaW5EcmF3aW5nRnJhbWUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
c3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3UmVuZGVyUGFz
cyhwYXNzZXNbaV0uZ2V0KCkpOworCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8Q0NMYXll
ckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJv
bnQ+IENDTGF5ZXJJdGVyYXRvclR5cGU7CisKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9
IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmdldCgpKTsK
KyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpi
ZWdpbihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmdldCgpKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxmKCkpCisgICAgICAgICAgICBpdC0+ZGlkRHJh
dygpOworICAgIH0KKwogICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoRHJhd2luZ0ZyYW1lKCk7
CiAKICAgICArK21fZnJhbWVOdW1iZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKaW5kZXggYTcxYWRhZTY3NTMyZjMyNDk2YTU0Mjg0YWE1N2Y3MGIzNDA0Y2QwMS4uYjhmZjRh
NzFlY2UwYzM5NThlZmE2MjJjOGMwMTJlZmRjMmYzNWEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaApAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBh
ZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdlKGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1h
eFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKEND
TGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNz
TGlzdCYpOworICAgIFBhc3NPd25QdHI8Q0NMYXllckxpc3Q+IGNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0Jik7CiAgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1Jl
bmRlclBhc3NMaXN0Jik7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcAppbmRleCAzZGUzOGU5MGY4NjNmMWYzODcwODQ4Y2Yx
MDkyMzg5OWRlOTc3YzE1Li4xZjk2ZTFiMTIzZDBkMTcxMmNiOTY5YzkyZjAyZmI1OWE4OTBlYWZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvRHJhd1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAKQEAgLTI5LDE2ICsyOSwxNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1Zp
ZGVvRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0
YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyKQorUGFzc093
blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgVmlkZW9GcmFtZUNocm9taXVtKiBm
cmFtZSwgR0MzRGVudW0gZm9ybWF0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWRl
b0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVyKSk7CisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwg
dGV4dHVyZXMsIGZyYW1lLCBmb3JtYXQpKTsKIH0KIAotQ0NWaWRlb0RyYXdRdWFkOjpDQ1ZpZGVv
RHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3Qg
SW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK0NDVmlkZW9EcmF3UXVhZDo6
Q0NWaWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0
dXJlcywgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQogICAgIDog
Q0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlZpZGVvQ29udGVudCwgcXVh
ZFJlY3QpCi0gICAgLCBtX2xheWVyKGxheWVyKQorICAgICwgbV90ZXh0dXJlcyh0ZXh0dXJlcykK
KyAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2Zvcm1hdChmb3JtYXQpCiB7Ci0gICAgQVNT
RVJUKG1fbGF5ZXIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCmluZGV4IGIx
OGJjNTU0MWNkMmJjZjdmYzEyZmJmOTNiZGIzNDM4OTY0Zjk4NGEuLjE2NWFhNjBkYzQ3N2JiOTk3
M2JiZWE0ZjQwN2FkNjY4MDZkYzA1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCkBA
IC0yNiwyMyArMjYsMjggQEAKICNpZm5kZWYgQ0NWaWRlb0RyYXdRdWFkX2gKICNkZWZpbmUgQ0NW
aWRlb0RyYXdRdWFkX2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUg
ImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBD
Q0xheWVySW1wbDsKIGNsYXNzIENDVmlkZW9EcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1ZpZGVvRHJhd1F1YWQpOwogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
LCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFZp
ZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCk7CiAKLSAgICBDQ0xheWVySW1wbCog
bGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CisgICAgQ0NWaWRlb0xheWVySW1wbDo6
VGV4dHVyZSogdGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVzOyB9CisgICAgVmlk
ZW9GcmFtZUNocm9taXVtKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICBH
QzNEZW51bSBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQogCiBwcml2YXRlOgot
ICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJl
Y3QmLCBDQ0xheWVySW1wbCopOworICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1
YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0
dXJlcywgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0KTsKIAotICAgIENDTGF5
ZXJJbXBsKiBtX2xheWVyOworICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIG1fdGV4dHVy
ZXM7CisgICAgVmlkZW9GcmFtZUNocm9taXVtKiBtX2ZyYW1lOworICAgIEdDM0RlbnVtIG1fZm9y
bWF0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAppbmRleCAwOWFm
YjA4ZDNlZGRlMTUzMWU1YWNmYmE2YTAxNTgxOTM4OGM1MTVmLi4wZWQ5NDI2NTdjY2Y2NmI0MTdj
NThkMTQ2NzUwM2M0YjExMmQyYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNw
cApAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBHQzNEZW51bSBjb252ZXJ0VkZDRm9ybWF0VG9H
QzNERm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IGZvcm1hdCkKICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVy
SW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit2b2lkIEND
VmlkZW9MYXllckltcGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlcikgCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApAQCAtMTIx
LDg5ICsxMjEsNDMgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBpZiAoIW1fcHJvdmlkZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRD
dXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgR0Mz
RGVudW0gZm9ybWF0ID0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdChmcmFtZS0+Zm9ybWF0
KCkpOworICAgIG1fZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKIAotICAg
IGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpIHsKLSAgICAg
ICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKKyAgICBpZiAoIW1fZnJhbWUp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIWNvcHlGcmFtZVRvVGV4dHVyZXMo
ZnJhbWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpIHsKLSAgICAgICAgbV9wcm92aWRlci0+cHV0
Q3VycmVudEZyYW1lKGZyYW1lKTsKKyAgICBtX2Zvcm1hdCA9IGNvbnZlcnRWRkNGb3JtYXRUb0dD
M0RGb3JtYXQobV9mcmFtZS0+Zm9ybWF0KCkpOworCisgICAgaWYgKG1fZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1
cnJlbnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICAgICAgZHJhd1lVVihsYXllclJlbmRlcmVyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgZHJh
d1JHQkEobGF5ZXJSZW5kZXJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGRyYXdOYXRpdmVUZXh0dXJlKGxheWVyUmVu
ZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOyAv
LyBTb21lb25lIHVwZGF0ZWQgY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdCBhYm92ZSBidXQg
dXBkYXRlIHRoaXMhCisgICAgaWYgKCFyZXNlcnZlVGV4dHVyZXMobV9mcmFtZSwgbV9mb3JtYXQs
IGxheWVyUmVuZGVyZXIpKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZSht
X2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CiAgICAgfQotCi0gICAgZm9yICh1bnNpZ25l
ZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKQotICAgICAgICBt
X3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOwotICAgIG1fcHJvdmlkZXIt
PnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6YXBw
ZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBz
aGFyZWRRdWFkU3RhdGUpCiB7CiAgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2ludCgpLCBib3Vu
ZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKHNoYXJl
ZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsKKyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NWaWRl
b0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV90ZXh0dXJlcywg
bV9mcmFtZSwgbV9mb3JtYXQpKTsKIH0KIAotYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJh
bWVUb1RleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIGZv
cm1hdCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpkaWREcmF3KCkKIHsKLSAgICBpZiAoZnJhbWUtPmZvcm1hdCgpID09IFZpZGVv
RnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkgewotICAgICAgICBtX25hdGl2ZVRleHR1cmVJ
ZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlU2l6ZSA9IElu
dFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAg
aWYgKCFyZXNlcnZlVGV4dHVyZXMoZnJhbWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm92aWRlck11dGV4
KTsKIAotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMo
KTsgKytwbGFuZSkgewotICAgICAgICBBU1NFUlQoZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUo
cGxhbmUpID09IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpKTsKLSAgICAgICAg
Y29weVBsYW5lVG9UZXh0dXJlKGxheWVyUmVuZGVyZXIsIGZyYW1lLT5kYXRhKHBsYW5lKSwgcGxh
bmUpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gZnJhbWUtPnBsYW5lcygpOyBw
bGFuZSA8IE1heFBsYW5lczsgKytwbGFuZSkgewotICAgICAgICBUZXh0dXJlJiB0ZXh0dXJlID0g
bV90ZXh0dXJlc1twbGFuZV07Ci0gICAgICAgIHRleHR1cmUubV90ZXh0dXJlLmNsZWFyKCk7Ci0g
ICAgICAgIHRleHR1cmUubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKLSAgICB9Ci0gICAgbV9w
bGFuZXMgPSBmcmFtZS0+cGxhbmVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgaWYgKCFt
X3Byb3ZpZGVyIHx8ICFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgQ0NWaWRlb0xh
eWVySW1wbDo6Y29weVBsYW5lVG9UZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCkKLXsKLSAgICBUZXh0dXJlJiB0
ZXh0dXJlID0gbV90ZXh0dXJlc1tpbmRleF07Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgVGV4dHVyZUFsbG9jYXRvciogYWxs
b2NhdG9yID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKTsK
LSAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsK
LSAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+Zm9ybWF0KCk7Ci0gICAg
SW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX2ZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkK
KyAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT51bnJlc2VydmUoKTsKIAotICAg
IHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMu
aGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVu
c2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAgICAgIG1l
bWNweShtZW0sIHBsYW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgp
KTsKLSAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVt
Kj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
bWVtKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9N
SVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4U3ViSW1hZ2UyRAotICAgICAgICAvLyB1
cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVzIGFzIG1hcFRleFN1YkltYWdlMkRDSFJP
TUlVTSwgb25lCi0gICAgICAgIC8vIGluIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0
byB0aGUgdGV4dHVyZS4KLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lk
dGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgcGxhbmUpKTsKLSAgICB9CisgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZy
YW1lKG1fZnJhbWUpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJsZVNpemUoY29u
c3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCkBAIC0yNTQsODEg
KzIwOCw2IEBAIGJvb2wgQ0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFZp
ZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpIGNvbnN0Ci17Ci0gICAgY29uc3QgWVVWUHJvZ3JhbSogcHJvZ3JhbSA9IGxh
eWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0g
JiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICBjb25zdCBUZXh0dXJlJiB5VGV4
dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdOwotICAgIGNvbnN0
IFRleHR1cmUmIHVUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFu
ZV07Ci0gICAgY29uc3QgVGV4dHVyZSYgdlRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVD
aHJvbWl1bTo6dlBsYW5lXTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUu
bV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMikpOwotICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdVRl
eHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgdlRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwotCi0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICBmbG9hdCB5
V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5VGV4dHVyZS5tX3Zpc2libGVT
aXplLndpZHRoKCkpIC8geVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICAv
LyBBcmJpdHJhcmlseSB0YWtlIHRoZSB1IHNpemVzIGJlY2F1c2UgdSBhbmQgdiBkaW1lbnNpb25z
IGFyZSBpZGVudGljYWwuCi0gICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHVUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB1VGV4dHVyZS5tX3Rl
eHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
MWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkueVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB5
V2lkdGhTY2FsZUZhY3RvcikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWYo
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgdXZX
aWR0aFNjYWxlRmFjdG9yKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFp
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueVRleHR1cmVMb2NhdGlvbigpLCAxKSk7Ci0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LnVUZXh0dXJlTG9jYXRpb24oKSwgMikpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlm
b3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS52VGV4dHVyZUxvY2F0aW9uKCksIDMpKTsK
LQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4o
eXV2MlJHQiksIDEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTNmdihwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIGNvbnN0X2Nhc3Q8ZmxvYXQq
Pih5dXZBZGp1c3QpLCAxKSk7Ci0KLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFk
KGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRy
YXdPcGFjaXR5KCksIEZsb2F0UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxw
aGFMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwot
Ci0gICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0ZXh0dXJlIDAuCi0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFByb2dyYW0+Ci12b2lkIENDVmlkZW9MYXllcklt
cGw6OmRyYXdDb21tb24oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQcm9n
cmFtKiBwcm9ncmFtLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmVJZCkgY29uc3QKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFs
aXplZCgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJl
ci0+Y29udGV4dCgpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsK
LQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0o
KSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3Rvciwg
MSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotCi0gICAgbGF5ZXJSZW5kZXJlci0+
ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5k
cygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRy
eVF1YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZl
cnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLX0KLQotdm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIp
IGNvbnN0Ci17Ci0gICAgY29uc3QgUkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVy
LT52aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKLSAgICBjb25zdCBUZXh0dXJlJiB0ZXh0dXJlID0g
bV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsKLSAgICBmbG9hdCB3aWR0
aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53
aWR0aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICBkcmF3Q29t
bW9uKGxheWVyUmVuZGVyZXIsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90
ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci19Ci0KLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05h
dGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAot
ewotICAgIGNvbnN0IE5hdGl2ZVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJl
ci0+dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKCk7Ci0gICAgZHJhd0NvbW1vbihsYXll
clJlbmRlcmVyLCBwcm9ncmFtLCAxLCBtX25hdGl2ZVRleHR1cmVJZCk7Ci19Ci0KIHZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGlu
ZGVudCkgY29uc3QKIHsKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuaAppbmRleCAxODJmN2I1ODI3YzkxY2JmZmVlNWQzYmFlYWQxMDg1MWY2
ZmZiYTk1Li41MDNmNmE0NzI0NjA5ZGI5YTY3OTk1NjhiNWZkNGRmZjI2ODgyNjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC00Niw0OCArNDYsNDEgQEAgcHVibGljOgogICAg
IH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFF1YWRzKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopOworICAgIHZpcnR1
YWwgdm9pZCBkaWREcmF3KCk7CiAKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNo
YWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBSR0JB
UHJvZ3JhbTsKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFlV
VlN0cmV0Y2gsIEZyYWdtZW50U2hhZGVyWVVWVmlkZW8+IFlVVlByb2dyYW07CiAgICAgdHlwZWRl
ZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hh
ZGVyUkdCQVRleEZsaXBBbHBoYT4gTmF0aXZlVGV4dHVyZVByb2dyYW07CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLQogICAgIHZpcnR1YWwgdm9pZCBk
dW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAogICAg
IC8vIFZpZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50IGltcGxlbWVudGF0aW9uIChjYWxsYWJsZSBv
biBhbnkgdGhyZWFkKS4KICAgICB2aXJ0dWFsIHZvaWQgc3RvcFVzaW5nUHJvdmlkZXIoKTsKIAor
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOworICAgIHN0YXRpYyBjb25zdCBmbG9h
dCB5dXZBZGp1c3RbM107CisKKyAgICBzdHJ1Y3QgVGV4dHVyZSB7CisgICAgICAgIE93blB0cjxN
YW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworICAgICAgICBJbnRTaXplIG1fdmlzaWJsZVNpemU7
CisgICAgfTsKKyAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9OwogcHJpdmF0ZToKICAgICBleHBs
aWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKGludCwgVmlkZW9GcmFtZVByb3ZpZGVyKik7CiAKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlZp
ZGVvTGF5ZXIiOyB9CiAKLSAgICBib29sIGNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9G
cmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
LSAgICB2b2lkIGNvcHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25z
dCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KTsKICAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25z
dCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJv
bWl1bSopOwotICAgIHZvaWQgZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsK
LSAgICB2b2lkIGRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwotICAgIHZv
aWQgZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIFByb2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmVJZCkgY29uc3Q7CiAKICAgICBNdXRleCBtX3Byb3ZpZGVyTXV0ZXg7IC8vIEd1YXJk
cyBtX3Byb3ZpZGVyIGJlbG93LgogICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsK
IAotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOwotICAgIHN0YXRpYyBjb25zdCBm
bG9hdCB5dXZBZGp1c3RbM107Ci0KLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAgIE93blB0
cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOwotICAgICAgICBJbnRTaXplIG1fdmlzaWJsZVNp
emU7Ci0gICAgfTsKLSAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9OwogICAgIFRleHR1cmUgbV90
ZXh0dXJlc1tNYXhQbGFuZXNdOwotICAgIGludCBtX3BsYW5lczsKIAotICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9uYXRpdmVUZXh0dXJlSWQ7Ci0gICAgSW50U2l6ZSBtX25hdGl2ZVRleHR1cmVTaXpl
OworICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogbV9mcmFtZTsKKyAgICBHQzNEZW51bSBtX2Zvcm1h
dDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXggODY4M2I4NGIwM2NhMzZmZmNkODRjMjVk
YjYxOTU0ZjZlMjY2NGRjMi4uNGIzNjJhOTliMWM1MWRmZDU5MGExYjZlYTc3MmU5N2U0ZWIzNWM5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTI3Niw2ICsyNzYsNjMgQEAgVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBwYWdlU2NhbGVBbmltYXRpb24pCiAgICAgfQogfQogCitjbGFzcyBE
aWREcmF3Q2hlY2tMYXllciA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGlkRHJhd0NoZWNrTGF5ZXI+IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEaWREcmF3Q2hlY2tMYXllcihpZCkpOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRHJhdygpCisgICAgeworICAgICAgICBtX2RpZERyYXdDYWxsZWQgPSB0cnVlOworICAg
IH0KKworICAgIGJvb2wgZGlkRHJhd0NhbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkRHJhd0Nh
bGxlZDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IERpZERyYXdDaGVja0xheWVyKGludCBp
ZCkKKyAgICAgICAgOiBDQ0xheWVySW1wbChpZCkKKyAgICAgICAgLCBtX2RpZERyYXdDYWxsZWQo
ZmFsc2UpCisgICAgeworICAgICAgICBzZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsK
KyAgICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CisgICAgICAgIHNldERyYXdzQ29u
dGVudCh0cnVlKTsKKyAgICB9CisKKyAgICBib29sIG1fZGlkRHJhd0NhbGxlZDsKK307CisKK1RF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJzKQor
eworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNU
aHJlYWQpOworICAgIG1faG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQp
OworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDEwLCAxMCkpOworCisg
ICAgUmVmUHRyPERpZERyYXdDaGVja0xheWVyPiByb290ID0gRGlkRHJhd0NoZWNrTGF5ZXI6OmNy
ZWF0ZSgwKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAgICBSZWZQ
dHI8RGlkRHJhd0NoZWNrTGF5ZXI+IGxheWVyMSA9IERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUo
MSk7CisgICAgcm9vdC0+YWRkQ2hpbGQobGF5ZXIxKTsKKworICAgIFJlZlB0cjxEaWREcmF3Q2hl
Y2tMYXllcj4gbGF5ZXIyID0gRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgyKTsKKyAgICBsYXll
cjEtPmFkZENoaWxkKGxheWVyMik7CisKKyAgICBsYXllcjEtPnNldE9wYWNpdHkoMC4zKTsKKyAg
ICBsYXllcjEtPnNldFByZXNlcnZlczNEKGZhbHNlKTsKKworICAgIEVYUEVDVF9GQUxTRShyb290
LT5kaWREcmF3Q2FsbGVkKCkpOworICAgIEVYUEVDVF9GQUxTRShsYXllcjEtPmRpZERyYXdDYWxs
ZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxheWVyMi0+ZGlkRHJhd0NhbGxlZCgpKTsKKworICAg
IG1faG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKworICAgIEVYUEVDVF9UUlVFKHJvb3QtPmRpZERy
YXdDYWxsZWQoKSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXIxLT5kaWREcmF3Q2FsbGVkKCkpOwor
ICAgIEVYUEVDVF9UUlVFKGxheWVyMi0+ZGlkRHJhd0NhbGxlZCgpKTsKKworICAgIEVYUEVDVF9O
RShyb290LT5yZW5kZXJTdXJmYWNlKCksIGxheWVyMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBF
WFBFQ1RfVFJVRSghIWxheWVyMS0+cmVuZGVyU3VyZmFjZSgpKTsKK30KKwogY2xhc3MgQmxlbmRT
dGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1
YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQoKSA6IG1fYmxlbmQoZmFsc2UpIHsg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125010</attachid>
            <date>2012-02-01 13:55:54 -0800</date>
            <delta_ts>2012-02-03 08:08:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120201165553.patch</filename>
            <type>text/plain</type>
            <size>36724</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjMyOTI1ZWZiYTIxYmVk
NzlmYjE2ZGE5YTc1NzU3YjYxNTMwNmMyNS4uZDRmYjZhYWZhYWI5OWQzYmYyNWE0NjFlNDJkZTI0
MTQ3Yzg4NGQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTAyLTAxICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIENDVmlkZW9MYXllcklt
cGwgbm8gbG9uZ2VyIGhhbmRsZXMgZHJhd2luZyBpdHNlbGYsIGJ1dCBwcm9kdWNlcyBhIGxpc3Qg
b2YgQ0NWaWRlb0RyYXdRdWFkcy4KKyAgICAgICAgVGhlc2UgcXVhZHMgYXJlIHRoZW4gZHJhd24g
YnkgTGF5ZXJSZW5kZXJlckNocm9taXVtLgorCisgICAgICAgIENDTGF5ZXJJbXBsOjp3aWxsRHJh
dyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBpcyBjYWxsZWQgZGlyZWN0bHkgYmVmb3JlIGFwcGVu
ZFF1YWRzLgorICAgICAgICBDQ0xheWVySW1wbDo6ZGlkRHJhdygpIGlzIGNhbGxlZCBkaXJlY3Rs
eSBhZnRlciBhbGwgZHJhd2luZyBoYXMgYmVlbiBjb21wbGV0ZWQuCisKKyAgICAgICAgd2lsbERy
YXcgYW5kIGRpZERyYXcgYXJlIHVzZWQgdG8gaGFuZGxlIGludGVyYWN0aW9uIHdpdGggdGhlIFZp
ZGVvRnJhbWVQcm92aWRlcgorICAgICAgICBpbiBDQ1ZpZGVvTGF5ZXJJbXBsLiB3aWxsRHJhdyBn
ZXRzIGEgZnJhbWUgZnJvbSB0aGUgVmlkZW9GcmFtZVByb3ZpZGVyLCBhbmQKKyAgICAgICAgZGlk
RHJhdyByZXR1cm5zIGl0LgorCisgICAgICAgIEEgdW5pdCB0ZXN0IGhhcyBiZWVuIGFkZGVkOiBD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5kaWREcmF3Q2FsbGVkT25BbGxMYXllcnMuCisgICAgICAg
IFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgQ0NMYXllckltcGw6OmRpZERyYXcoKSBpcyBjYWxsZWQg
b24gYWxsIGxheWVycywKKyAgICAgICAgaW5jbHVkaW5nIGxheWVycyBvbiBkaWZmZXJlbnQgcmVu
ZGVyIHN1cmZhY2VzLgorCisgICAgICAgIEFzIHRoaXMgd2FzIGEgcmVmYWN0b3IsIG5vIG90aGVy
IHRlc3RzIHdlcmUgYWRkZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3WVVWKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd05hdGl2ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5RnJhbWVUb1Rl
eHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weVBs
YW5lVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1ZpZGVvUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmRpZERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKEND
TGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9EcmF3UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1
YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9E
cmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0RyYXdRdWFkLmg6CisgICAgICAgIChDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NWaWRlb0RyYXdRdWFkOjp0ZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
RHJhd1F1YWQ6OmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6Zm9y
bWF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OndpbGxEcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmFwcGVuZFF1YWRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRpZERyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAg
KENDVmlkZW9MYXllckltcGwpOgorICAgICAgICAoVGV4dHVyZSk6CisKIDIwMTItMDItMDEgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDYzODIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDA3NGIyZDE3ODc1NmE4YzM0NzYzNDNiY2NiZWNkODc2MWQ2ZTYxNzguLmJiOWRhNzJjNjhkZjJk
ZTNhZTg3MTkyNWFjYjA4MDMzNzE3NDQ5NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMDItMDEgIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgdmlkZW8gZHJhd2luZyB0byBi
ZSBtb3JlIGRhdGEgZHJpdmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmRpZERyYXdDYWxsZWRPbkFsbExheWVy
cyBlbnN1cmVzIHRoYXQKKyAgICAgICAgQ0NMYXllckltcGw6OmRpZERyYXcoKSBpcyBjYWxsZWQg
b24gYWxsIGxheWVycywgaW5jbHVkaW5nIGxheWVycworICAgICAgICBvbiBkaWZmZXJlbnQgcmVu
ZGVyIHN1cmZhY2VzLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qu
Y3BwOgorICAgICAgICAoRGlkRHJhd0NoZWNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpEaWRE
cmF3Q2hlY2tMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6RGlkRHJhd0NoZWNrTGF5
ZXI6OmRpZERyYXcpOgorICAgICAgICAoV2ViS2l0OjpEaWREcmF3Q2hlY2tMYXllcjo6ZGlkRHJh
d0NhbGxlZCk6CisgICAgICAgIChXZWJLaXQ6OkRpZERyYXdDaGVja0xheWVyOjpEaWREcmF3Q2hl
Y2tMYXllcik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpURVNUX0YpOgor
CiAyMDEyLTAyLTAxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTA2MzgyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNGY3NmRkOWE5ZjI2ZjQ2N2Y5MmJmYTgzODdl
YmNlY2I0MjU3NzAzYS4uNWY0MDY0ZGE5ODU5NmFiODU3YWQwNmU3MGEzMDVlNWQ1OThjZGJlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC02OTIsMTAgKzY5Miwx
MzkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDYW52YXNRdWFkKGNvbnN0IEND
Q2FudmFzRHJhd1F1YWQqIHF1YWQpCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9O
RV9NSU5VU19TUkNfQUxQSEEpKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IENDVmlkZW9M
YXllckltcGw6OllVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwor
ICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworCisgICAgY29u
c3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgeVRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygp
W1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpUZXh0dXJlJiB1VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbVmlkZW9GcmFtZUNocm9taXVt
Ojp1UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHZUZXh0dXJl
ID0gcXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07CisKKyAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJl
SWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5tX3Rl
eHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOworICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKworICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKworICAgIGZsb2F0
IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJs
ZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAg
IC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lv
bnMgYXJlIGlkZW50aWNhbC4KKyAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1f
dGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51
bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkueVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlv
bigpLCB5V2lkdGhTY2FsZUZhY3RvcikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0
aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55VGV4dHVyZUxvY2F0aW9u
KCksIDEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLnVUZXh0dXJlTG9jYXRpb24oKSwgMikpOworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudlRl
eHR1cmVMb2NhdGlvbigpLCAzKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm1NYXRyaXgzZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5jY01hdHJpeExvY2F0aW9u
KCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihDQ1ZpZGVvTGF5ZXJJbXBsOjp5dXYyUkdCKSwgMSkp
OworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTNmdihwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLnl1dkFkakxvY2F0aW9uKCksIGNvbnN0X2Nhc3Q8ZmxvYXQqPihDQ1ZpZGVv
TGF5ZXJJbXBsOjp5dXZBZGp1c3QpLCAxKSk7CisKKyAgICBjb25zdCBJbnRTaXplJiBib3VuZHMg
PSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPmxh
eWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIHF1YWQtPm9w
YWNpdHkoKSwgRmxvYXRRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxv
Y2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CisKKyAg
ICAvLyBSZXNldCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIFByb2dyYW0+Cit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFk
KiBxdWFkLCBQcm9ncmFtKiBwcm9ncmFtLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmVJZCkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5p
bml0aWFsaXplZCgpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0
dXJlSWQpKTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5wcm9ncmFtKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00
Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3
aWR0aFNjYWxlRmFjdG9yLCAxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlm
b3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwor
CisgICAgY29uc3QgSW50U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7Cisg
ICAgZHJhd1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgo
KSwgYm91bmRzLmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkubWF0cml4TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQoreworICAgIGNv
bnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9MYXllclJH
QkFQcm9ncmFtKCk7CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgdGV4dHVy
ZSA9IHF1YWQtPnRleHR1cmVzKClbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07CisgICAg
ZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJlLm1fdmlz
aWJsZVNpemUud2lkdGgoKSkgLyB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7Cisg
ICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQocXVhZCwgcHJvZ3JhbSwgd2lkdGhTY2FsZUZh
Y3RvciwgdGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKK30KKwordm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCog
cXVhZCkKK3sKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpOYXRpdmVUZXh0dXJlUHJvZ3Jh
bSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSgpOworICAgIGRyYXdT
aW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1YWQtPmZyYW1lKCktPnRl
eHR1cmVJZCgpKTsKK30KKworYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlGcmFtZVRv
VGV4dHVyZXMoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IFZpZGVv
RnJhbWVDaHJvbWl1bSogZnJhbWUgPSBxdWFkLT5mcmFtZSgpOworCisgICAgZm9yICh1bnNpZ25l
ZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7CisgICAgICAg
IEFTU0VSVChxdWFkLT5mcmFtZSgpLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKSA9PSBxdWFk
LT50ZXh0dXJlcygpW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSk7CisgICAgICAgIGNvcHlQbGFu
ZVRvVGV4dHVyZShxdWFkLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5lKTsKKyAgICB9CisgICAg
Zm9yICh1bnNpZ25lZCBwbGFuZSA9IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUgPCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpNYXhQbGFuZXM7ICsrcGxhbmUpIHsKKyAgICAgICAgQ0NWaWRlb0xheWVySW1wbDo6
VGV4dHVyZSogdGV4dHVyZSA9ICZxdWFkLT50ZXh0dXJlcygpW3BsYW5lXTsKKyAgICAgICAgdGV4
dHVyZS0+bV90ZXh0dXJlLmNsZWFyKCk7CisgICAgICAgIHRleHR1cmUtPm1fdmlzaWJsZVNpemUg
PSBJbnRTaXplKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y29weVBsYW5lVG9UZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCog
cXVhZCwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCkKK3sKKyAgICBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtpbmRleF07CisgICAgVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yID0gcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3Io
KTsKKyAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCgpLCBhbGxvY2F0
b3IpOworICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90ZXh0dXJlLT5mb3JtYXQoKTsK
KyAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpOworCisg
ICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0
KCktPmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNp
b25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBF
eHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSk7CisgICAgaWYgKG1lbSkgeworICAgICAg
ICBtZW1jcHkobWVtLCBwbGFuZSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWln
aHQoKSk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpLT51bm1hcFRleFN1YkltYWdlMkRD
SFJPTUlVTShtZW0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiBtYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0ZXhTdWJJbWFnZTJECisgICAg
ICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3BpZXMgYXMgbWFwVGV4U3ViSW1h
Z2UyRENIUk9NSVVNLCBvbmUKKyAgICAgICAgLy8gaW4gdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCBh
bm90aGVyIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRp
bWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgcGxhbmUpKTsKKyAgICB9Cit9CisKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3VmlkZW9RdWFkKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVh
ZCkKIHsKLSAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOwotICAgIGxheWVy
LT5kcmF3KHRoaXMpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisKKyAg
ICBpZiAoIXF1YWQtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY29weUZy
YW1lVG9UZXh0dXJlcyhxdWFkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChxdWFk
LT5mb3JtYXQoKSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAg
ICAgICAgZHJhd1lVVihxdWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQToKKyAgICAgICAgZHJhd1JHQkEocXVhZCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIGRyYXdOYXRp
dmVUZXh0dXJlKHF1YWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBD
UkFTSCgpOyAvLyBTb21lb25lIHVwZGF0ZWQgY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdCBh
Ym92ZSBidXQgdXBkYXRlIHRoaXMhCisgICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1BsdWdpblF1YWQoY29uc3QgQ0NQbHVnaW5EcmF3UXVhZCogcXVhZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggYzg5NmIxZGYyNmYzZWZlYWMxMWIzMjcx
YzU5NTdhMmY0YmY1OGU5Mi4uMzRjNzE4MGVkZDhmNzA0OTVhOTQ4NjYyZmI4ZDNkMTFmMjlmYjhl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTE3Miw2ICsxNzIsMTMg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1
YWQqKTsKIAogICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsK
KyAgICB2b2lkIGNvcHlQbGFuZVRvVGV4dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBjb25z
dCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KTsKKyAgICBib29sIGNvcHlGcmFtZVRvVGV4dHVyZXMo
Y29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9p
ZCBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBQcm9n
cmFtKiwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQp
OworICAgIHZvaWQgZHJhd05hdGl2ZVRleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7Cisg
ICAgdm9pZCBkcmF3UkdCQShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdZ
VVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisKICAgICB2b2lkIGNvcHlPZmZzY3JlZW5UZXh0
dXJlVG9EaXNwbGF5KCk7CiAKICAgICB2b2lkIHNldERyYXdWaWV3cG9ydFJlY3QoY29uc3QgSW50
UmVjdCYsIGJvb2wgZmxpcFkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMDBlMGFkZjhhNTFm
ZGVjMDRhOWY0MjVmMDQ1N2FhMzM4OGNlYTNhYS4uYTNiOWZjOWI0NjczMGE1ZjE0YzhmMjRjYzIx
ZTU1OWZjY2QyMGMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC03Miw3ICs3Miw5IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRl
U2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1
YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RHJhdygpIHsgfQogICAgIHZvaWQgYXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmLCBj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCmluZGV4IDE4NDZkNmMyZWY1Yjc0Y2VjNzExNTI2YzhlNGRlMmUxODc3MTdhNTQuLjA4
MzAxZDVhMTUyOWYzNGI2ZDZjYzhlMjM5MWQ3MzI5ODIxYmM4NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUg
ImNjL0NDRGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUGFnZVNjYWxlQW5pbWF0aW9uLmgiCkBAIC0x
ODcsMTAgKzE4OCwxMCBAQCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNlKEND
TGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVybiBzdXJm
YWNlRGFtYWdlUmVjdDsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQorUGFzc093blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsOjpDQ0xheWVyTGlzdD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRl
UmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKIHsKLSAgICBDQ0xheWVyTGlz
dCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHJvb3RMYXllcigpKTsKKyAgICBPd25QdHI8Q0NMYXllckxpc3Q+IHJlbmRlclN1cmZhY2VM
YXllckxpc3QgPSBhZG9wdFB0cihuZXcgQ0NMYXllckxpc3QoKSk7CisgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC0+YXBwZW5kKHJvb3RMYXllcigpKTsKIAogICAgIGlmICghcm9vdExheWVyKCkt
PnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAgcm9vdExheWVyKCktPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKQEAgLTIwMiwxNSArMjAzLDE1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2Fs
Y3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKICAgICB7CiAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgICAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKLSAgICAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocm9vdExheWVyKCksIHJvb3RMYXllcigpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNl
KCktPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cygpLm1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyKCksIHJvb3RMYXllcigp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsICpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmdldCgpLCByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5
ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAg
ICAgfQogCiAgICAgaWYgKGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxT
d2FwKQotICAgICAgICB0cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKHJvb3RMYXllcigpLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICAgICAgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhy
b290TGF5ZXIoKSwgKnJlbmRlclN1cmZhY2VMYXllckxpc3QuZ2V0KCkpOwogICAgIG1fcm9vdERh
bWFnZVJlY3QgPSByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5kYW1hZ2VUcmFja2VyKCkt
PmN1cnJlbnREYW1hZ2VSZWN0KCk7CiAKLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJm
YWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJl
bmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICBmb3IgKGludCBz
dXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LT5zaXplKCkgLSAxOyBzdXJmYWNl
SW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5k
ZXJTdXJmYWNlTGF5ZXIgPSAoKnJlbmRlclN1cmZhY2VMYXllckxpc3QpW3N1cmZhY2VJbmRleF0u
Z2V0KCk7CiAgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1
cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogCiAgICAgICAgIE93blB0cjxDQ1JlbmRlclBh
c3M+IHBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsKQEAgLTIzMSwx
MSArMjMyLDEzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFz
c2VzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcykKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgbGF5ZXItPndpbGxEcmF3KG1fbGF5ZXJSZW5k
ZXJlci5nZXQoKSk7CiAgICAgICAgICAgICBwYXNzLT5hcHBlbmRRdWFkc0ZvckxheWVyKGxheWVy
KTsKICAgICAgICAgfQogCiAgICAgICAgIHBhc3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwog
ICAgIH0KKyAgICByZXR1cm4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5yZWxlYXNlKCk7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQ
YXNzTGlzdCYgcGFzc2VzKQpAQCAtMjYyLDEzICsyNjUsMjIgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0NSZW5kZXJQYXNz
TGlzdCBwYXNzZXM7Ci0gICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisgICAgT3du
UHRyPENDTGF5ZXJMaXN0PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gY2FsY3VsYXRlUmVuZGVy
UGFzc2VzKHBhc3Nlcyk7CiAKICAgICBvcHRpbWl6ZVJlbmRlclBhc3NlcyhwYXNzZXMpOwogCiAg
ICAgbV9sYXllclJlbmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZSgpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFzc2VzLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmRyYXdSZW5kZXJQYXNzKHBhc3Nlc1tpXS5nZXQoKSk7CisKKyAgICB0eXBlZGVmIENDTGF5ZXJJ
dGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0b3JBY3Rp
b25zOjpCYWNrVG9Gcm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVy
YXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuZ2V0KCkpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJ
dGVyYXRvclR5cGU6OmJlZ2luKHJlbmRlclN1cmZhY2VMYXllckxpc3QuZ2V0KCkpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAg
ICAgIGl0LT5kaWREcmF3KCk7CisgICAgfQorCiAgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2hE
cmF3aW5nRnJhbWUoKTsKIAogICAgICsrbV9mcmFtZU51bWJlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAppbmRleCBhNzFhZGFlNjc1MzJmMzI0OTZhNTQyODRhYTU3ZjcwYjM0
MDRjZDAxLi5iOGZmNGE3MWVjZTBjMzk1OGVmYTYyMmM4YzAxMmVmZGMyZjM1YTM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xMzEsNyArMTMxLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGFkanVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAg
IHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9y
QWxsU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyhDQ1JlbmRlclBhc3NMaXN0Jik7CisgICAgUGFzc093blB0cjxDQ0xheWVyTGlzdD4gY2FsY3Vs
YXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVu
ZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwCmluZGV4IDNkZTM4ZTkwZjg2
M2YxZjM4NzA4NDhjZjEwOTIzODk5ZGU5NzdjMTUuLjFmOTZlMWIxMjNkMGQxNzEyY2I5NjljOTJm
MDJmYjU5YTg5MGVhZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcApAQCAtMjks
MTYgKzI5LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1ZpZGVv
RHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCog
bGF5ZXIpCitQYXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gQ0NWaWRlb0RyYXdRdWFkOjpjcmVh
dGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVj
dCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzLCBWaWRlb0Zy
YW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ1ZpZGVvRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIp
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3Rh
dGUsIHF1YWRSZWN0LCB0ZXh0dXJlcywgZnJhbWUsIGZvcm1hdCkpOwogfQogCi1DQ1ZpZGVvRHJh
d1F1YWQ6OkNDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVh
ZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyKQorQ0NW
aWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNo
YXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUqIHRleHR1cmVzLCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBm
b3JtYXQpCiAgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6Vmlk
ZW9Db250ZW50LCBxdWFkUmVjdCkKLSAgICAsIG1fbGF5ZXIobGF5ZXIpCisgICAgLCBtX3RleHR1
cmVzKHRleHR1cmVzKQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZm9ybWF0KGZvcm1h
dCkKIHsKLSAgICBBU1NFUlQobV9sYXllcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdR
dWFkLmgKaW5kZXggYjE4YmM1NTQxY2QyYmNmN2ZjMTJmYmY5M2JkYjM0Mzg5NjRmOTg0YS4uMTY1
YWE2MGRjNDc3YmI5OTczYmJlYTRmNDA3YWQ2NjgwNmRjMDU5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0RyYXdRdWFkLmgKQEAgLTI2LDIzICsyNiwyOCBAQAogI2lmbmRlZiBDQ1ZpZGVvRHJhd1F1YWRf
aAogI2RlZmluZSBDQ1ZpZGVvRHJhd1F1YWRfaAogCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNE
LmgiCiAjaW5jbHVkZSAiY2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVmlkZW9MYXll
ckltcGwuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDogcHVibGlj
IENDRHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3UXVhZCk7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUo
Y29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJl
KiB0ZXh0dXJlcywgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0KTsKIAotICAg
IENDTGF5ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKyAgICBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZXM7IH0KKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZTsgfQorICAgIEdDM0RlbnVtIGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9
CiAKIHByaXZhdGU6Ci0gICAgQ0NWaWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisgICAgQ0NWaWRlb0RyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUqIHRleHR1cmVzLCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQp
OwogCi0gICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7CisgICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4
dHVyZSogbV90ZXh0dXJlczsKKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIG1fZnJhbWU7CisgICAg
R0MzRGVudW0gbV9mb3JtYXQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
Y3BwCmluZGV4IDA5YWZiMDhkM2VkZGUxNTMxZTVhY2ZiYTZhMDE1ODE5Mzg4YzUxNWYuLjBlZDk0
MjY1N2NjZjY2YjQxN2M1OGQxNDY3NTAzYzRiMTEyZDJhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIEdDM0RlbnVtIGNvbnZl
cnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0
KQogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKIH0KIAotdm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlcikKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyKSAKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOwogCkBAIC0xMjEsODkgKzEyMSw0MyBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogICAgIGlmICghbV9wcm92aWRl
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IG1f
cHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBHQzNEZW51bSBmb3JtYXQgPSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0
KGZyYW1lLT5mb3JtYXQoKSk7CisgICAgbV9mcmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRG
cmFtZSgpOwogCi0gICAgaWYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSkgewotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOworICAg
IGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghY29weUZy
YW1lVG9UZXh0dXJlcyhmcmFtZSwgZm9ybWF0LCBsYXllclJlbmRlcmVyKSkgewotICAgICAgICBt
X3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOworICAgIG1fZm9ybWF0ID0gY29udmVy
dFZGQ0Zvcm1hdFRvR0MzREZvcm1hdChtX2ZyYW1lLT5mb3JtYXQoKSk7CisKKyAgICBpZiAobV9m
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpIHsKKyAgICAgICAgbV9w
cm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOworICAgICAgICBtX2ZyYW1lID0gMDsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgICAgICBkcmF3WVVWKGxheWVyUmVu
ZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OgotICAgICAgICBkcmF3UkdCQShsYXllclJlbmRlcmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgZHJhd05hdGl2ZVRl
eHR1cmUobGF5ZXJSZW5kZXJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIENSQVNIKCk7IC8vIFNvbWVvbmUgdXBkYXRlZCBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9y
bWF0IGFib3ZlIGJ1dCB1cGRhdGUgdGhpcyEKKyAgICBpZiAoIXJlc2VydmVUZXh0dXJlcyhtX2Zy
YW1lLCBtX2Zvcm1hdCwgbGF5ZXJSZW5kZXJlcikpIHsKKyAgICAgICAgbV9wcm92aWRlci0+cHV0
Q3VycmVudEZyYW1lKG1fZnJhbWUpOworICAgICAgICBtX2ZyYW1lID0gMDsKICAgICB9Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxh
bmUpCi0gICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7Ci0g
ICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKIH0KIAogdm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKICAgICBJbnRSZWN0IHF1YWRSZWN0KElu
dFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NWaWRlb0RyYXdRdWFk
OjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGhpcykpOworICAgIHF1YWRMaXN0
LmFwcGVuZChDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0
LCBtX3RleHR1cmVzLCBtX2ZyYW1lLCBtX2Zvcm1hdCkpOwogfQogCi1ib29sIENDVmlkZW9MYXll
ckltcGw6OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFt
ZSwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIp
Cit2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZERyYXcoKQogewotICAgIGlmIChmcmFtZS0+Zm9y
bWF0KCkgPT0gVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlKSB7Ci0gICAgICAgIG1f
bmF0aXZlVGV4dHVyZUlkID0gZnJhbWUtPnRleHR1cmVJZCgpOwotICAgICAgICBtX25hdGl2ZVRl
eHR1cmVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CiAKLSAgICBpZiAoIXJlc2VydmVUZXh0dXJlcyhmcmFtZSwgZm9ybWF0LCBsYXllclJl
bmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3Byb3ZpZGVyTXV0ZXgpOwogCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwg
ZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7Ci0gICAgICAgIEFTU0VSVChmcmFtZS0+cmVxdWly
ZWRUZXh0dXJlU2l6ZShwbGFuZSkgPT0gbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5zaXpl
KCkpOwotICAgICAgICBjb3B5UGxhbmVUb1RleHR1cmUobGF5ZXJSZW5kZXJlciwgZnJhbWUtPmRh
dGEocGxhbmUpLCBwbGFuZSk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSBmcmFt
ZS0+cGxhbmVzKCk7IHBsYW5lIDwgTWF4UGxhbmVzOyArK3BsYW5lKSB7Ci0gICAgICAgIFRleHR1
cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW3BsYW5lXTsKLSAgICAgICAgdGV4dHVyZS5tX3RleHR1
cmUuY2xlYXIoKTsKLSAgICAgICAgdGV4dHVyZS5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgpOwot
ICAgIH0KLSAgICBtX3BsYW5lcyA9IGZyYW1lLT5wbGFuZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KKyAgICBpZiAoIW1fcHJvdmlkZXIgfHwgIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKIAot
dm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5UGxhbmVUb1RleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KQotewot
ICAgIFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW2luZGV4XTsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICBUZXh0dXJl
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVy
ZUFsbG9jYXRvcigpOwotICAgIHRleHR1cmUubV90ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0
LCBhbGxvY2F0b3IpOwotICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90ZXh0dXJlLT5m
b3JtYXQoKTsKLSAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1fZnJhbWUtPnBsYW5l
cygpOyArK3BsYW5lKQorICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVz
ZXJ2ZSgpOwogCi0gICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21p
dW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgo
KSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwotICAgIGlmIChtZW0p
IHsKLSAgICAgICAgbWVtY3B5KG1lbSwgcGxhbmUsIGRpbWVuc2lvbnMud2lkdGgoKSAqIGRpbWVu
c2lvbnMuaGVpZ2h0KCkpOwotICAgICAgICBHTEMoY29udGV4dCwgc3RhdGljX2Nhc3Q8RXh0ZW5z
aW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT51bm1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTShtZW0pKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBtYXBUZXhT
dWJJbWFnZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0ZXhTdWJJbWFnZTJE
Ci0gICAgICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3BpZXMgYXMgbWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNLCBvbmUKLSAgICAgICAgLy8gaW4gdGhlIGNvbW1hbmQgYnVmZmVy
IGFuZCBhbm90aGVyIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwg
ZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwbGFuZSkpOwotICAgIH0KKyAgICBtX3Byb3ZpZGVy
LT5wdXRDdXJyZW50RnJhbWUobV9mcmFtZSk7CiB9CiAKIHN0YXRpYyBJbnRTaXplIGNvbXB1dGVW
aXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCB1bnNpZ25lZCBwbGFu
ZSkKQEAgLTI1NCw4MSArMjA4LDYgQEAgYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpyZXNlcnZlVGV4
dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKLXsKLSAgICBjb25zdCBZVVZQcm9ncmFt
KiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllcllVVlByb2dyYW0oKTsKLSAgICBB
U1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIGNvbnN0
IFRleHR1cmUmIHlUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFu
ZV07Ci0gICAgY29uc3QgVGV4dHVyZSYgdVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVD
aHJvbWl1bTo6dVBsYW5lXTsKLSAgICBjb25zdCBUZXh0dXJlJiB2VGV4dHVyZSA9IG1fdGV4dHVy
ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxhbmVdOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUz
KSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCB2VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7Ci0KLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsK
LQotICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0
dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53
aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFu
ZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNhbC4KLSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0
b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAv
IHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7Ci0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3Rv
ckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JM
b2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55VGV4dHVyZUxvY2F0aW9u
KCksIDEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkudVRleHR1cmVMb2NhdGlvbigpLCAyKSk7Ci0gICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnZUZXh0dXJlTG9j
YXRpb24oKSwgMykpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgz
ZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5jY01hdHJpeExvY2F0aW9uKCksIDAsIGNvbnN0
X2Nhc3Q8ZmxvYXQqPih5dXYyUkdCKSwgMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
bmlmb3JtM2Z2KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueXV2QWRqTG9jYXRpb24oKSwgY29u
c3RfY2FzdDxmbG9hdCo+KHl1dkFkanVzdCksIDEpKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmRy
YXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMo
KS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgRmxvYXRRdWFkKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlv
bigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtMSk7Ci0KLSAgICAvLyBSZXNldCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1
cmUgMC4KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4KLXZvaWQg
Q0NWaWRlb0xheWVySW1wbDo6ZHJhd0NvbW1vbihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIsIFByb2dyYW0qIHByb2dyYW0sIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdAotewotICAgIEFTU0VSVChwcm9ncmFtICYmIHBy
b2dyYW0tPmluaXRpYWxpemVkKCkpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQg
PSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHRleHR1cmVJZCkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJv
Z3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0
aFNjYWxlRmFjdG9yLCAxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0KLSAgICBs
YXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCku
d2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXIt
PnNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFM
b2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwotfQot
Ci12b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikgY29uc3QKLXsKLSAgICBjb25zdCBSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9
IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOwotICAgIGNvbnN0IFRleHR1
cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdOwot
ICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS5t
X3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgp
OwotICAgIGRyYXdDb21tb24obGF5ZXJSZW5kZXJlciwgcHJvZ3JhbSwgd2lkdGhTY2FsZUZhY3Rv
ciwgdGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKLX0KLQotdm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIpIGNvbnN0Ci17Ci0gICAgY29uc3QgTmF0aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0g
PSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKLSAgICBk
cmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHByb2dyYW0sIDEsIG1fbmF0aXZlVGV4dHVyZUlkKTsK
LX0KLQogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogewogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IDE4MmY3YjU4MjdjOTFjYmZmZWU1
ZDNiYWVhZDEwODUxZjZmZmJhOTUuLjUwM2Y2YTQ3MjQ2MDlkYjlhNjc5OTU2OGI1ZmQ0ZGZmMjY4
ODI2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTQ2LDQ4ICs0Niw0MSBA
QCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkNDVmlkZW9MYXllckltcGwoKTsKIAorICAg
IHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
Kik7CisgICAgdmlydHVhbCB2b2lkIGRpZERyYXcoKTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhG
bGlwQWxwaGE+IFJHQkFQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4
U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3Jh
bTsKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9y
bSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBOYXRpdmVUZXh0dXJlUHJvZ3JhbTsK
IAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotCiAgICAg
dmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
IGNvbnN0OwogCiAgICAgLy8gVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQgaW1wbGVtZW50YXRp
b24gKGNhbGxhYmxlIG9uIGFueSB0aHJlYWQpLgogICAgIHZpcnR1YWwgdm9pZCBzdG9wVXNpbmdQ
cm92aWRlcigpOwogCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1djJSR0JbOV07CisgICAgc3Rh
dGljIGNvbnN0IGZsb2F0IHl1dkFkanVzdFszXTsKKworICAgIHN0cnVjdCBUZXh0dXJlIHsKKyAg
ICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgICAgIEludFNpemUg
bV92aXNpYmxlU2l6ZTsKKyAgICB9OworICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07CiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50LCBWaWRlb0ZyYW1lUHJvdmlk
ZXIqKTsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25z
dCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KIAotICAgIGJvb2wgY29weUZyYW1lVG9UZXh0dXJl
cyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopOwotICAgIHZvaWQgY29weVBsYW5lVG9UZXh0dXJlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSosIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpOwogICAgIGJvb2wgcmVzZXJ2
ZVRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCwgTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7Ci0gICAgdm9pZCBkcmF3WVVWKExheWVyUmVuZGVyZXJDaHJv
bWl1bSopIGNvbnN0OwotICAgIHZvaWQgZHJhd1JHQkEoTGF5ZXJSZW5kZXJlckNocm9taXVtKikg
Y29uc3Q7Ci0gICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0q
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIGRyYXdDb21tb24oTGF5
ZXJSZW5kZXJlckNocm9taXVtKiwgUHJvZ3JhbSosIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdDsKIAogICAgIE11dGV4IG1fcHJvdmlkZXJN
dXRleDsgLy8gR3VhcmRzIG1fcHJvdmlkZXIgYmVsb3cuCiAgICAgVmlkZW9GcmFtZVByb3ZpZGVy
KiBtX3Byb3ZpZGVyOwogCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1djJSR0JbOV07Ci0gICAg
c3RhdGljIGNvbnN0IGZsb2F0IHl1dkFkanVzdFszXTsKLQotICAgIHN0cnVjdCBUZXh0dXJlIHsK
LSAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7Ci0gICAgICAgIEludFNp
emUgbV92aXNpYmxlU2l6ZTsKLSAgICB9OwotICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07CiAg
ICAgVGV4dHVyZSBtX3RleHR1cmVzW01heFBsYW5lc107Ci0gICAgaW50IG1fcGxhbmVzOwogCi0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX25hdGl2ZVRleHR1cmVJZDsKLSAgICBJbnRTaXplIG1fbmF0
aXZlVGV4dHVyZVNpemU7CisgICAgVmlkZW9GcmFtZUNocm9taXVtKiBtX2ZyYW1lOworICAgIEdD
M0RlbnVtIG1fZm9ybWF0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBmNTk4OTNkZTkw
NjQxOGY4Y2JkNzU3NDBhZTI5MzllMjNjYzIzNTBhLi42NDljYjZiYmMzMGNjMGUwYTk2YWJhMTcw
ZmU2YjQ5MjljYzIyNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMjc2LDYgKzI3Niw2MyBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKICAgICB9
CiB9CiAKK2NsYXNzIERpZERyYXdDaGVja0xheWVyIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaWREcmF3Q2hlY2tMYXllcj4gY3JlYXRlKGlu
dCBpZCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERpZERyYXdDaGVja0xheWVyKGlkKSk7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBkaWREcmF3KCkKKyAgICB7CisgICAgICAgIG1fZGlkRHJhd0NhbGxl
ZCA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBkaWREcmF3Q2FsbGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kaWREcmF3Q2FsbGVkOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRGlkRHJhd0No
ZWNrTGF5ZXIoaW50IGlkKQorICAgICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICAgICAsIG1f
ZGlkRHJhd0NhbGxlZChmYWxzZSkKKyAgICB7CisgICAgICAgIHNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOworICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAg
ICAgc2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIH0KKworICAgIGJvb2wgbV9kaWREcmF3Q2Fs
bGVkOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkaWREcmF3Q2FsbGVk
T25BbGxMYXllcnMpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihu
ZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OkZvclVzZU9uVGhpc1RocmVhZCk7CisgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoY29udGV4dCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUo
MTAsIDEwKSk7CisKKyAgICBSZWZQdHI8RGlkRHJhd0NoZWNrTGF5ZXI+IHJvb3QgPSBEaWREcmF3
Q2hlY2tMYXllcjo6Y3JlYXRlKDApOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290
KTsKKworICAgIFJlZlB0cjxEaWREcmF3Q2hlY2tMYXllcj4gbGF5ZXIxID0gRGlkRHJhd0NoZWNr
TGF5ZXI6OmNyZWF0ZSgxKTsKKyAgICByb290LT5hZGRDaGlsZChsYXllcjEpOworCisgICAgUmVm
UHRyPERpZERyYXdDaGVja0xheWVyPiBsYXllcjIgPSBEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRl
KDIpOworICAgIGxheWVyMS0+YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIGxheWVyMS0+c2V0T3Bh
Y2l0eSgwLjMpOworICAgIGxheWVyMS0+c2V0UHJlc2VydmVzM0QoZmFsc2UpOworCisgICAgRVhQ
RUNUX0ZBTFNFKHJvb3QtPmRpZERyYXdDYWxsZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxheWVy
MS0+ZGlkRHJhd0NhbGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXIyLT5kaWREcmF3Q2Fs
bGVkKCkpOworCisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygpOworCisgICAgRVhQRUNUX1RS
VUUocm9vdC0+ZGlkRHJhd0NhbGxlZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShsYXllcjEtPmRpZERy
YXdDYWxsZWQoKSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5kaWREcmF3Q2FsbGVkKCkpOwor
CisgICAgRVhQRUNUX05FKHJvb3QtPnJlbmRlclN1cmZhY2UoKSwgbGF5ZXIxLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIEVYUEVDVF9UUlVFKCEhbGF5ZXIxLT5yZW5kZXJTdXJmYWNlKCkpOworfQor
CiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3ND
b250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9i
bGVuZChmYWxzZSkgeyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125331</attachid>
            <date>2012-02-03 08:08:37 -0800</date>
            <delta_ts>2012-02-07 09:08:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120203110836.patch</filename>
            <type>text/plain</type>
            <size>39382</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRiOTRiYWVjZGViOTY5
ZjhiY2IxMGJjODcwYTYyOWUxMGQ3NDVhYS4uYjRiZWYyNzkzMTZmNTA0MjVhZjBhMWJkMWJkMDJj
MjNlOTkxZGQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTAyLTAzICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsIG5vIGxv
bmdlciBoYW5kbGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDVmlk
ZW9EcmF3UXVhZHMuCisgICAgICAgIFRoZXNlIHF1YWRzIGFyZSB0aGVuIGRyYXduIGJ5IExheWVy
UmVuZGVyZXJDaHJvbWl1bS4KKworICAgICAgICBDQ0xheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKikgaXMgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZSBhcHBlbmRRdWFkcy4K
KyAgICAgICAgQ0NMYXllckltcGw6OmRpZERyYXcoKSBpcyBjYWxsZWQgZGlyZWN0bHkgYWZ0ZXIg
YWxsIGRyYXdpbmcgaGFzIGJlZW4gY29tcGxldGVkLgorICAgICAgICBDQ0xheWVySW1wbDo6ZHJh
dyBoYXMgYmVlbiByZW1vdmVkLgorCisgICAgICAgIHdpbGxEcmF3IGFuZCBkaWREcmF3IGFyZSB1
c2VkIHRvIGhhbmRsZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWaWRlb0ZyYW1lUHJvdmlkZXIKKyAg
ICAgICAgaW4gQ0NWaWRlb0xheWVySW1wbC4gd2lsbERyYXcgZ2V0cyBhIGZyYW1lIGZyb20gdGhl
IFZpZGVvRnJhbWVQcm92aWRlciwgYW5kCisgICAgICAgIGRpZERyYXcgcmV0dXJucyBpdC4KKwor
ICAgICAgICBBIHVuaXQgdGVzdCBoYXMgYmVlbiBhZGRlZDogQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJzLgorICAgICAgICBUaGlzIHRlc3QgZW5zdXJlcyB0
aGF0IENDTGF5ZXJJbXBsOjpkaWREcmF3KCkgaXMgY2FsbGVkIG9uIGFsbCBsYXllcnMsCisgICAg
ICAgIGluY2x1ZGluZyBsYXllcnMgb24gZGlmZmVyZW50IHJlbmRlciBzdXJmYWNlcy4KKworICAg
ICAgICBBcyB0aGlzIHdhcyBhIHJlZmFjdG9yLCBubyBvdGhlciB0ZXN0cyB3ZXJlIGFkZGVkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lV
Vik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1lVG9UZXh0dXJlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
OgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpkaWREcmF3KToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0RyYXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oOgorICAgICAgICAoQ0NWaWRlb0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6dGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvRHJhd1F1YWQ6OmZvcm1hdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBs
OjphcHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRE
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvbXB1dGVWaXNpYmxl
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5oOgorICAgICAgICAoQ0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvTGF5ZXJJbXBsOjpwcm92aWRlck11dGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OnByb3ZpZGVyKToKKyAgICAgICAgKFRleHR1cmUpOgorCiAyMDEyLTAy
LTAzICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgVXBzdHJlYW0gdGFyZ2V0
VHlwZSB1c2FnZSBvbiBSZXNvdXJjZVJlcXVlc3QgZm9yIEJsYWNrQmVycnkgcG9ydApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBiZmYzYWRmNDliNWMzMmYyNjdlNTE5ZjMyOWYxYzcwNmYz
YzkzNmIxLi5mYzAzNDg3MWE0ZDEzMzQ2OTBlZWY4NzY3MzI2MTVjODRiZGEwZjRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAyLTAzICBUaW0gRHJl
c3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFj
dG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5k
aWREcmF3Q2FsbGVkT25BbGxMYXllcnMgZW5zdXJlcyB0aGF0CisgICAgICAgIENDTGF5ZXJJbXBs
OjpkaWREcmF3KCkgaXMgY2FsbGVkIG9uIGFsbCBsYXllcnMsIGluY2x1ZGluZyBsYXllcnMKKyAg
ICAgICAgb24gZGlmZmVyZW50IHJlbmRlciBzdXJmYWNlcy4KKworICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKERpZERyYXdDaGVja0xheWVyKToK
KyAgICAgICAgKFdlYktpdDo6RGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkRpZERyYXdDaGVja0xheWVyOjpkaWREcmF3KToKKyAgICAgICAgKFdlYktpdDo6RGlk
RHJhd0NoZWNrTGF5ZXI6OmRpZERyYXdDYWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpEaWREcmF3
Q2hlY2tMYXllcjo6RGlkRHJhd0NoZWNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6VEVTVF9GKToKKwogMjAxMi0wMi0wMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1
cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgQ2hyb21pdW0g
ZGVwcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGJhZTRkYTM1
NDExOWI2NzE5NzYwY2FiMWVmZmVkZDQ5MzRmNzA0MDUuLjdlZWMxMDM0NmVhMmU1NTAzNGViYjll
OWUyZTQ5YTg4MWNhMjQyZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cApAQCAtNjkxLDEwICs2OTEsMTM5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
Q2FudmFzUXVhZChjb25zdCBDQ0NhbnZhc0RyYXdRdWFkKiBxdWFkKQogICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiB9CiAKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKK3sK
KyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9M
YXllcllVVlByb2dyYW0oKTsKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFs
aXplZCgpKTsKKworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHlUZXh0dXJl
ID0gcXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07CisgICAgY29u
c3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgdVRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygp
W1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpUZXh0dXJlJiB2VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbVmlkZW9GcmFtZUNocm9taXVt
Ojp2UGxhbmVdOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJl
Lm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7CisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgdVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMp
KTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB2VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisK
KyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bSgpKSk7CisKKyAgICBmbG9hdCB5V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0
Pih5VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8geVRleHR1cmUubV90ZXh0dXJlLT5z
aXplKCkud2lkdGgoKTsKKyAgICAvLyBBcmJpdHJhcmlseSB0YWtlIHRoZSB1IHNpemVzIGJlY2F1
c2UgdSBhbmQgdiBkaW1lbnNpb25zIGFyZSBpZGVudGljYWwuCisgICAgZmxvYXQgdXZXaWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lk
dGgoKSkgLyB1VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0
aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldp
ZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKKworICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkueVRleHR1cmVMb2NhdGlvbigpLCAxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0aW9uKCks
IDIpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOworCisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4M2Z2KHByb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkuY2NNYXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4oQ0NWaWRlb0xheWVy
SW1wbDo6eXV2MlJHQiksIDEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZv
cm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCBjb25zdF9j
YXN0PGZsb2F0Kj4oQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0KSwgMSkpOworCisgICAgY29u
c3QgSW50U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7CisgICAgZHJhd1Rl
eHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgoKSwgYm91bmRz
LmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIEZsb2F0UXVhZCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRp
b24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLTEpOworCisgICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0ZXh0
dXJlIDAuCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPgor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKGNv
bnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCwgUHJvZ3JhbSogcHJvZ3JhbSwgZmxvYXQgd2lkdGhT
Y2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCit7CisgICAgQVNTRVJUKHBy
b2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Cisg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3Jt
TG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3RvciwgMSkpOworICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxl
ckxvY2F0aW9uKCksIDApKTsKKworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IHF1YWQtPnF1
YWRSZWN0KCkuc2l6ZSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zv
cm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBz
aGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9j
YXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKK30KKwor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKGNvbnN0IENDVmlkZW9EcmF3UXVh
ZCogcXVhZCkKK3sKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogcHJv
Z3JhbSA9IHZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOworICAgIGNvbnN0IENDVmlkZW9MYXllcklt
cGw6OlRleHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1ZpZGVvRnJhbWVDaHJvbWl1
bTo6cmdiUGxhbmVdOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxm
bG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKS53aWR0aCgpOworICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHBy
b2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7
Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TmF0aXZlVGV4dHVyZShjb25z
dCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6
TmF0aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0gPSB2aWRlb0xheWVyTmF0aXZlVGV4dHVyZVBy
b2dyYW0oKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCAx
LCBxdWFkLT5mcmFtZSgpLT50ZXh0dXJlSWQoKSk7Cit9CisKK2Jvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkK
K3sKKyAgICBjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gcXVhZC0+ZnJhbWUoKTsK
KworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsg
KytwbGFuZSkgeworICAgICAgICBBU1NFUlQocXVhZC0+ZnJhbWUoKS0+cmVxdWlyZWRUZXh0dXJl
U2l6ZShwbGFuZSkgPT0gcXVhZC0+dGV4dHVyZXMoKVtwbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkp
OworICAgICAgICBjb3B5UGxhbmVUb1RleHR1cmUocXVhZCwgZnJhbWUtPmRhdGEocGxhbmUpLCBw
bGFuZSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7
IHBsYW5lIDwgQ0NWaWRlb0xheWVySW1wbDo6TWF4UGxhbmVzOyArK3BsYW5lKSB7CisgICAgICAg
IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmUgPSAmcXVhZC0+dGV4dHVyZXMoKVtw
bGFuZV07CisgICAgICAgIHRleHR1cmUtPm1fdGV4dHVyZS5jbGVhcigpOworICAgICAgICB0ZXh0
dXJlLT5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZShjb25z
dCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCit7
CisgICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgdGV4dHVyZSA9IHF1YWQtPnRleHR1cmVz
KClbaW5kZXhdOworICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHJlbmRlclN1cmZh
Y2VUZXh0dXJlQWxsb2NhdG9yKCk7CisgICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJl
KGNvbnRleHQoKSwgYWxsb2NhdG9yKTsKKyAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1f
dGV4dHVyZS0+Zm9ybWF0KCk7CisgICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3Rl
eHR1cmUtPnNpemUoKTsKKworICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMz
RENocm9taXVtKj4oY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJE
Q0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lv
bnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOworICAg
IGlmIChtZW0pIHsKKyAgICAgICAgbWVtY3B5KG1lbSwgcGxhbmUsIGRpbWVuc2lvbnMud2lkdGgo
KSAqIGRpbWVuc2lvbnMuaGVpZ2h0KCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBzdGF0aWNf
Y2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKS0+
dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gSWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIg
dGV4U3ViSW1hZ2UyRAorICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29w
aWVzIGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCisgICAgICAgIC8vIGluIHRoZSBj
b21tYW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCks
IGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBsYW5lKSk7CisgICAg
fQorfQorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZChjb25zdCBD
Q1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgQ0NMYXllckltcGwqIGxheWVyID0gcXVhZC0+
bGF5ZXIoKTsKLSAgICBsYXllci0+ZHJhdyh0aGlzKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworCisgICAgaWYgKCFxdWFkLT5mcmFtZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIWNvcHlGcmFtZVRvVGV4dHVyZXMocXVhZCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHN3aXRjaCAocXVhZC0+Zm9ybWF0KCkpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6CisgICAgICAgIGRyYXdZVVYocXVhZCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGRyYXdSR0JBKHF1YWQp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
OgorICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShxdWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsgLy8gU29tZW9uZSB1cGRhdGVkIGNvbnZlcnRWRkNG
b3JtYXRUb0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0ZSB0aGlzIQorICAgIH0KIH0KIAogc3Ry
dWN0IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgKaW5kZXggNGJjYjI1ODI4NjRlZjJlZTQ0ZmIxMGQwYTUwMDE5Njc4Yjk1ODRlZS4uOGQ1NTU3
NTI2MzY5YzRmZmYwZjVmMjc0ZjU0ZTliMTMwOTNkNmU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKQEAgLTE2OCw2ICsxNjgsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqKTsKIAogICAgIE1hbmFnZWRUZXh0
dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKKyAgICB2b2lkIGNvcHlQbGFuZVRvVGV4
dHVyZShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4
KTsKKyAgICBib29sIGNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7
CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3U2luZ2xlVGV4dHVyZVZpZGVv
UXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBQcm9ncmFtKiwgZmxvYXQgd2lkdGhTY2FsZUZh
Y3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpOworICAgIHZvaWQgZHJhd05hdGl2ZVRl
eHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3UkdCQShjb25zdCBD
Q1ZpZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFk
Kik7CisKICAgICB2b2lkIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiAKICAgICB2
b2lkIHNldERyYXdWaWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDgxZjk3MTJlMGZhYzBmOTgxMjg4OGRhMmU3M2ZmMzNl
ZmQ2MDY1YTQuLjJlNWZmOTEwYWUwMTRhODcyYjljYWQ2MDFkZDcxYWEwNTc0ZTJjYjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTExNSwxMSArMTE1LDYgQEAgYm9vbCBDQ0xheWVySW1w
bDo6ZGVzY2VuZGFudERyYXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IENDTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5
ZXJJbXBsOjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewogICAgIEludFJlY3QgbGF5
ZXJDbGlwUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDdiYWUyMDE3NDRiNGVjMjA4MTRm
MzA1MjhhYjZiY2YyZDJkODc5MmQuLjg4ZmY0MzkzZDFkYmIzZDRmZDdhOGQ3ZjExYzkwYjM2MDQ5
ZDE5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNzQsOSArNzQsOSBAQCBwdWJsaWM6CiAg
ICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSop
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpIHsgfQogICAgIHZv
aWQgYXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBjYTNkOWRiYWE0MmZmZWI5
MDYwY2Y1ZWE2NDhiYzg5ODMyOGFkZjhmLi4wODMwMWQ1YTE1MjlmMzRiNmQ2Y2M4ZTIzOTFkNzMy
OTgyMWJjODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3Qu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9D
Q1BhZ2VTY2FsZUFuaW1hdGlvbi5oIgpAQCAtMTg3LDEwICsxODgsMTAgQEAgc3RhdGljIEZsb2F0
UmVjdCBkYW1hZ2VJblN1cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVy
LCBjb25zdCBGbG8KICAgICByZXR1cm4gc3VyZmFjZURhbWFnZVJlY3Q7CiB9CiAKLXZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3Qm
IHBhc3NlcykKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllckxpc3Q+IEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0
JiBwYXNzZXMpCiB7Ci0gICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIoKSk7CisgICAgT3duUHRy
PENDTGF5ZXJMaXN0PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gYWRvcHRQdHIobmV3IENDTGF5
ZXJMaXN0KCkpOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QtPmFwcGVuZChyb290TGF5ZXIo
KSk7CiAKICAgICBpZiAoIXJvb3RMYXllcigpLT5yZW5kZXJTdXJmYWNlKCkpCiAgICAgICAgIHJv
b3RMYXllcigpLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CkBAIC0yMDIsMTUgKzIwMywxNSBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBh
c3NMaXN0JiBwYXNzZXMpCiAgICAgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNh
bGNEcmF3RXRjIiwgdGhpcywgMCk7Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllcigpLCByb290TGF5ZXIo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCByb290TGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgJm1fbGF5ZXJTb3J0
ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KHJvb3RMYXllcigpLCByb290TGF5ZXIoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCAqcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5nZXQoKSwgcm9vdExheWVyKCktPnJlbmRlclN1
cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAogICAgIGlmIChsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkudXNpbmdQYXJ0aWFsU3dhcCkKLSAgICAgICAgdHJhY2tEYW1hZ2VGb3JB
bGxTdXJmYWNlcyhyb290TGF5ZXIoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgICAg
IHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMocm9vdExheWVyKCksICpyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmdldCgpKTsKICAgICBtX3Jvb3REYW1hZ2VSZWN0ID0gcm9vdExheWVyKCktPnJlbmRl
clN1cmZhY2UoKS0+ZGFtYWdlVHJhY2tlcigpLT5jdXJyZW50RGFtYWdlUmVjdCgpOwogCi0gICAg
Zm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAx
OyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJ
bXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJ
bmRleF0uZ2V0KCk7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC0+c2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkg
eworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gKCpyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KVtzdXJmYWNlSW5kZXhdLmdldCgpOwogICAgICAgICBDQ1JlbmRlclN1cmZh
Y2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsK
IAogICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVh
dGUocmVuZGVyU3VyZmFjZSk7CkBAIC0yMzcsNiArMjM4LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQog
CiAgICAgICAgIHBhc3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwogICAgIH0KKyAgICByZXR1
cm4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6b3B0aW1pemVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2Vz
KQpAQCAtMjYzLDEzICsyNjUsMjIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5
ZXJzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0NSZW5kZXJQYXNzTGlzdCBwYXNzZXM7Ci0g
ICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisgICAgT3duUHRyPENDTGF5ZXJMaXN0
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7
CiAKICAgICBvcHRpbWl6ZVJlbmRlclBhc3NlcyhwYXNzZXMpOwogCiAgICAgbV9sYXllclJlbmRl
cmVyLT5iZWdpbkRyYXdpbmdGcmFtZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFz
c2VzLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQYXNz
KHBhc3Nlc1tpXS5nZXQoKSk7CisKKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVy
SW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9u
dD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kID0g
Q0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKHJlbmRlclN1cmZhY2VMYXllckxpc3QuZ2V0KCkpOwor
ICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJl
Z2luKHJlbmRlclN1cmZhY2VMYXllckxpc3QuZ2V0KCkpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKGl0LnJlcHJlc2VudHNJdHNlbGYoKSkKKyAgICAgICAgICAgIGl0LT5kaWREcmF3
KCk7CisgICAgfQorCiAgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2hEcmF3aW5nRnJhbWUoKTsK
IAogICAgICsrbV9mcmFtZU51bWJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aAppbmRleCA1NjlkNjlmYTNlZDY4MGZhNTE3ZTk4YjBiMWY0NTU0OTAwODU2NDQ1Li5iYmIxMGIz
MGE2MmMyYWM4OTgxMDIxOGMzNjZmMGE4YzFjY2VjNjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oCkBAIC0xMjcsNyArMTI3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFk
anVzdFNjcm9sbHNGb3JQYWdlU2NhbGVDaGFuZ2UoZmxvYXQpOwogICAgIHZvaWQgdXBkYXRlTWF4
U2Nyb2xsUG9zaXRpb24oKTsKICAgICB2b2lkIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMoQ0NM
YXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKLSAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NM
aXN0Jik7CisgICAgUGFzc093blB0cjxDQ0xheWVyTGlzdD4gY2FsY3VsYXRlUmVuZGVyUGFzc2Vz
KENDUmVuZGVyUGFzc0xpc3QmKTsKICAgICB2b2lkIG9wdGltaXplUmVuZGVyUGFzc2VzKENDUmVu
ZGVyUGFzc0xpc3QmKTsKICAgICBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9EcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwCmluZGV4IDNkZTM4ZTkwZjg2M2YxZjM4NzA4NDhjZjEw
OTIzODk5ZGU5NzdjMTUuLjFmOTZlMWIxMjNkMGQxNzEyY2I5NjljOTJmMDJmYjU5YTg5MGVhZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9EcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcApAQCAtMjksMTYgKzI5LDE3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IENDVmlk
ZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIpCitQYXNzT3du
UHRyPENDVmlkZW9EcmF3UXVhZD4gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIEND
VmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzLCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZy
YW1lLCBHQzNEZW51bSBmb3JtYXQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1ZpZGVv
RHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbGF5ZXIpKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0
ZXh0dXJlcywgZnJhbWUsIGZvcm1hdCkpOwogfQogCi1DQ1ZpZGVvRHJhd1F1YWQ6OkNDVmlkZW9E
cmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJ
bnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyKQorQ0NWaWRlb0RyYXdRdWFkOjpD
Q1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwg
Y29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1
cmVzLCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQpCiAgICAgOiBD
Q0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6VmlkZW9Db250ZW50LCBxdWFk
UmVjdCkKLSAgICAsIG1fbGF5ZXIobGF5ZXIpCisgICAgLCBtX3RleHR1cmVzKHRleHR1cmVzKQor
ICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZm9ybWF0KGZvcm1hdCkKIHsKLSAgICBBU1NF
UlQobV9sYXllcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKaW5kZXggYjE4
YmM1NTQxY2QyYmNmN2ZjMTJmYmY5M2JkYjM0Mzg5NjRmOTg0YS4uMTY1YWE2MGRjNDc3YmI5OTcz
YmJlYTRmNDA3YWQ2NjgwNmRjMDU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmgKQEAg
LTI2LDIzICsyNiwyOCBAQAogI2lmbmRlZiBDQ1ZpZGVvRHJhd1F1YWRfaAogI2RlZmluZSBDQ1Zp
ZGVvRHJhd1F1YWRfaAogCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAi
Y2MvQ0NEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEND
TGF5ZXJJbXBsOwogY2xhc3MgQ0NWaWRlb0RyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDVmlkZW9EcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSos
IGNvbnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgVmlk
ZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0KTsKIAotICAgIENDTGF5ZXJJbXBsKiBs
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpU
ZXh0dXJlKiB0ZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZXM7IH0KKyAgICBWaWRl
b0ZyYW1lQ2hyb21pdW0qIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIEdD
M0RlbnVtIGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CiAKIHByaXZhdGU6Ci0g
ICAgQ0NWaWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVj
dCYsIENDTGF5ZXJJbXBsKik7CisgICAgQ0NWaWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1
cmVzLCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQpOwogCi0gICAgQ0NMYXll
ckltcGwqIG1fbGF5ZXI7CisgICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogbV90ZXh0dXJl
czsKKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIG1fZnJhbWU7CisgICAgR0MzRGVudW0gbV9mb3Jt
YXQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IGZmODFh
Y2RhODI3MDcxN2RkYTZhM2MwYmU4MmU2NmE0N2UwZDgzNmIuLjY1MDhlNWQyOTM0Y2JhYTNjNGMw
YjMyYWNmZjY1MTJhNzQ0ZWExY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIEdDM0RlbnVtIGNvbnZlcnRWRkNGb3JtYXRUb0dD
M0RGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0KQogICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyKSAKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCkBAIC0xMjEs
MTAxICsxMjEsNTUgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBpZiAoIW1fcHJvdmlkZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRD
dXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgR0Mz
RGVudW0gZm9ybWF0ID0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdChmcmFtZS0+Zm9ybWF0
KCkpOworICAgIG1fZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKIAotICAg
IGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpIHsKLSAgICAg
ICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKKyAgICBpZiAoIW1fZnJhbWUp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIWNvcHlGcmFtZVRvVGV4dHVyZXMo
ZnJhbWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpIHsKLSAgICAgICAgbV9wcm92aWRlci0+cHV0
Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2Zvcm1h
dCA9IGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQobV9mcmFtZS0+Zm9ybWF0KCkpOwogCi0g
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFO
Q0U6Ci0gICAgICAgIGRyYXdZVVYobGF5ZXJSZW5kZXJlcik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGRyYXdSR0JBKGxheWVyUmVu
ZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJEOgotICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShsYXllclJlbmRlcmVyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsgLy8gU29tZW9uZSB1cGRh
dGVkIGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0ZSB0aGlzIQor
ICAgIGlmIChtX2Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSkgewor
ICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUobV9mcmFtZSk7CisgICAgICAgIG1f
ZnJhbWUgPSAwOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBw
bGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7Ci0gICAgICAgIG1f
dGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBNYW5hZ2VkVGV4dHVyZSdzIHN0b3JlIGEgcmF3IHBvaW50ZXIgdG8gdGhlaXIgVGV4dHVyZU1h
bmFnZXIsCi0gICAgICAgIC8vIGFuZCB0aGUgdGV4dHVyZXMgd2UgY3JlYXRlIHVzZSBsYXllclJl
bmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKS4KLSAgICAgICAgLy8gU2luY2Ug
dGhlcmUgaXMgbm8gZ3VhcmFudGVlIGxheWVyUmVuZGVyZXIgd2lsbCBzdGlsbCBiZSBhbGl2ZSB0
aGUKLSAgICAgICAgLy8gbmV4dCB0aW1lIHdlIGFyZSBjYWxsZWQsIHdlIGNsZWFyIHRoZSB0ZXh0
dXJlIHJlZmVyZW5jZS4gSXQgd291bGQKLSAgICAgICAgLy8gYmUgbmljZSBpZiBpbnN0ZWFkIHdl
IGNvdWxkIHJlbHkgb24gdGV4dHVyZXMgYmVpbmcgaW52YWxpZGF0ZWQgd2hlbgotICAgICAgICAv
LyB0aGVpciBtYW5hZ2VyIHdhcyBkZWxldGVkIHNvIHRoYXQgbmV3IHRleHR1cmVzIGRpZG4ndCBh
bHdheXMgaGF2ZSB0bwotICAgICAgICAvLyBiZSByZWNyZWF0ZWQgZm9yIGVhY2ggZnJhbWUuCi0g
ICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5jbGVhcigpOworICAgIGlmICghcmVz
ZXJ2ZVRleHR1cmVzKG1fZnJhbWUsIG1fZm9ybWF0LCBsYXllclJlbmRlcmVyKSkgeworICAgICAg
ICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUobV9mcmFtZSk7CisgICAgICAgIG1fZnJhbWUg
PSAwOwogICAgIH0KLSAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwogfQog
CiB2b2lkIENDVmlkZW9MYXllckltcGw6OmFwcGVuZFF1YWRzKENDUXVhZExpc3QmIHF1YWRMaXN0
LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlKQogewogICAgIEludFJl
Y3QgcXVhZFJlY3QoSW50UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIHF1YWRMaXN0LmFwcGVuZChD
Q1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0aGlzKSk7
CisgICAgcXVhZExpc3QuYXBwZW5kKENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZSwgcXVhZFJlY3QsIG1fdGV4dHVyZXMsIG1fZnJhbWUsIG1fZm9ybWF0KSk7CiB9CiAKLWJv
b2wgQ0NWaWRlb0xheWVySW1wbDo6Y29weUZyYW1lVG9UZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1l
Q2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZGlkRHJhdygpCiB7Ci0gICAg
aWYgKGZyYW1lLT5mb3JtYXQoKSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRleHR1cmUp
IHsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7Ci0gICAg
ICAgIG1fbmF0aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+
aGVpZ2h0KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc2Vy
dmVUZXh0dXJlcyhmcmFtZSwgZm9ybWF0LCBsYXllclJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsK
LSAgICAgICAgQVNTRVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKSA9PSBtX3Rl
eHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSk7Ci0gICAgICAgIGNvcHlQbGFuZVRvVGV4
dHVyZShsYXllclJlbmRlcmVyLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5lKTsKLSAgICB9Ci0g
ICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUgPCBNYXhQbGFu
ZXM7ICsrcGxhbmUpIHsKLSAgICAgICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbcGxh
bmVdOwotICAgICAgICB0ZXh0dXJlLm1fdGV4dHVyZS5jbGVhcigpOwotICAgICAgICB0ZXh0dXJl
Lm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7Ci0gICAgfQotICAgIG1fcGxhbmVzID0gZnJhbWUt
PnBsYW5lcygpOwotICAgIHJldHVybiB0cnVlOwotfQorICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3Byb3ZpZGVyTXV0ZXgpOwogCi12b2lkIENDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4
dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IHZvaWQqIHBs
YW5lLCBpbnQgaW5kZXgpCi17Ci0gICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbaW5k
ZXhdOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29u
dGV4dCgpOwotICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGxheWVyUmVuZGVyZXIt
PnJlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yKCk7Ci0gICAgdGV4dHVyZS5tX3RleHR1cmUt
PmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7Ci0gICAgR0MzRGVudW0gZm9ybWF0ID0g
dGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwotICAgIEludFNpemUgZGltZW5zaW9ucyA9IHRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCk7CisgICAgaWYgKCFtX3Byb3ZpZGVyIHx8ICFtX2ZyYW1l
KQorICAgICAgICByZXR1cm47CiAKLSAgICB2b2lkKiBtZW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNp
b25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5z
aW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSk7Ci0g
ICAgaWYgKG1lbSkgewotICAgICAgICBtZW1jcHkobWVtLCBwbGFuZSwgZGltZW5zaW9ucy53aWR0
aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBzdGF0aWNf
Y2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPnVu
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRl
eFN1YkltYWdlMkQKLSAgICAgICAgLy8gdXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGll
cyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9uZQotICAgICAgICAvLyBpbiB0aGUgY29t
bWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBsYW5lKSk7CisgICAgZm9yICh1
bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9mcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsK
KyAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT51bnJlc2VydmUoKTsKKyAgICAg
ICAgLy8gRklYTUU6IE1hbmFnZWRUZXh0dXJlJ3Mgc3RvcmUgYSByYXcgcG9pbnRlciB0byB0aGVp
ciBUZXh0dXJlTWFuYWdlciwKKyAgICAgICAgLy8gYW5kIHRoZSB0ZXh0dXJlcyB3ZSBjcmVhdGUg
dXNlIGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcigpLgorICAgICAg
ICAvLyBTaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgbGF5ZXJSZW5kZXJlciB3aWxsIHN0aWxs
IGJlIGFsaXZlIHRoZQorICAgICAgICAvLyBuZXh0IHRpbWUgd2UgYXJlIGNhbGxlZCwgd2UgY2xl
YXIgdGhlIHRleHR1cmUgcmVmZXJlbmNlLiBJdCB3b3VsZAorICAgICAgICAvLyBiZSBuaWNlIGlm
IGluc3RlYWQgd2UgY291bGQgcmVseSBvbiB0ZXh0dXJlcyBiZWluZyBpbnZhbGlkYXRlZCB3aGVu
CisgICAgICAgIC8vIHRoZWlyIG1hbmFnZXIgd2FzIGRlbGV0ZWQgc28gdGhhdCBuZXcgdGV4dHVy
ZXMgZGlkbid0IGFsd2F5cyBoYXZlIHRvCisgICAgICAgIC8vIGJlIHJlY3JlYXRlZCBmb3IgZWFj
aCBmcmFtZS4KKyAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLmNsZWFyKCk7CiAg
ICAgfQorCisgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOwogfQogCi1z
dGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVt
KiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCitJbnRTaXplIENDVmlkZW9MYXllckltcGw6OmNvbXB1
dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCB1bnNpZ25lZCBw
bGFuZSkKIHsKICAgICBpbnQgdmlzaWJsZVdpZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKICAg
ICBpbnQgdmlzaWJsZUhlaWdodCA9IGZyYW1lLT5oZWlnaHQocGxhbmUpOwpAQCAtMjYzLDgxICsy
MTcsNiBAQCBib29sIENDVmlkZW9MYXllckltcGw6OnJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRl
b0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bQogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyKSBjb25zdAotewotICAgIGNvbnN0IFlVVlByb2dyYW0qIHByb2dyYW0gPSBsYXll
clJlbmRlcmVyLT52aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwotICAgIEFTU0VSVChwcm9ncmFtICYm
IHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgY29uc3QgVGV4dHVyZSYgeVRleHR1
cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXTsKLSAgICBjb25zdCBU
ZXh0dXJlJiB1VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVd
OwotICAgIGNvbnN0IFRleHR1cmUmIHZUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hy
b21pdW06OnZQbGFuZV07Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLm1f
dGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKLSAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0
dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMpKTsKLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKLQotICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotCi0gICAgZmxvYXQgeVdp
ZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUubV92aXNpYmxlU2l6
ZS53aWR0aCgpKSAvIHlUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7Ci0gICAgLy8g
QXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBh
cmUgaWRlbnRpY2FsLgotICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0
PGZsb2F0Pih1VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUubV90ZXh0
dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFm
KHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgeVdp
ZHRoU2NhbGVGYWN0b3IpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2V2lk
dGhTY2FsZUZhY3RvcikpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51
VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9y
bTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudlRleHR1cmVMb2NhdGlvbigpLCAzKSk7Ci0K
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+KHl1
djJSR0IpLCAxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0zZnYocHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCBjb25zdF9jYXN0PGZsb2F0Kj4o
eXV2QWRqdXN0KSwgMSkpOwotCi0gICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChk
cmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3
T3BhY2l0eSgpLCBGbG9hdFF1YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhh
TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLQot
ICAgIC8vIFJlc2V0IGFjdGl2ZSB0ZXh0dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MCkpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPgotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUHJvZ3Jh
bSogcHJvZ3JhbSwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0
dXJlSWQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXIt
PmNvbnRleHQoKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7Ci0K
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkp
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNo
YWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAsIDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEp
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmRy
YXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMo
KS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlR
dWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci19Ci0KLXZvaWQgQ0NWaWRlb0xh
eWVySW1wbDo6ZHJhd1JHQkEoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBj
b25zdAotewotICAgIGNvbnN0IFJHQkFQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+
dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7Ci0gICAgY29uc3QgVGV4dHVyZSYgdGV4dHVyZSA9IG1f
dGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07Ci0gICAgZmxvYXQgd2lkdGhT
Y2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJlLm1fdmlzaWJsZVNpemUud2lk
dGgoKSkgLyB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7Ci0gICAgZHJhd0NvbW1v
bihsYXllclJlbmRlcmVyLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4
dHVyZS0+dGV4dHVyZUlkKCkpOwotfQotCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdOYXRp
dmVUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKLXsK
LSAgICBjb25zdCBOYXRpdmVUZXh0dXJlUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIt
PnZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSgpOwotICAgIGRyYXdDb21tb24obGF5ZXJS
ZW5kZXJlciwgcHJvZ3JhbSwgMSwgbV9uYXRpdmVUZXh0dXJlSWQpOwotfQotCiB2b2lkIENDVmlk
ZW9MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRl
bnQpIGNvbnN0CiB7CiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmgKaW5kZXggMTgyZjdiNTgyN2M5MWNiZmZlZTVkM2JhZWFkMTA4NTFmNmZm
YmE5NS4uMzlmYzJmNmMwODNkYWRmY2UzY2UzZTdhYWFmMGEyMmJhOWFjMjg4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtNDYsNDggKzQ2LDQ2IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgdmlydHVhbCB+Q0NWaWRlb0xheWVySW1wbCgpOwogCisgICAgdmlydHVhbCB2b2lkIHdp
bGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRR
dWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRHJhdygpOwogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUkdCQVBy
b2dyYW07CiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhZVVZT
dHJldGNoLCBGcmFnbWVudFNoYWRlcllVVlZpZGVvPiBZVVZQcm9ncmFtOwogICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRl
clJHQkFUZXhGbGlwQWxwaGE+IE5hdGl2ZVRleHR1cmVQcm9ncmFtOwogCi0gICAgdmlydHVhbCB2
b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHVt
cExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKKyAgICBN
dXRleCYgcHJvdmlkZXJNdXRleCgpIHsgcmV0dXJuIG1fcHJvdmlkZXJNdXRleDsgfQorICAgIFZp
ZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyOyB9
CisKICAgICAvLyBWaWRlb0ZyYW1lUHJvdmlkZXI6OkNsaWVudCBpbXBsZW1lbnRhdGlvbiAoY2Fs
bGFibGUgb24gYW55IHRocmVhZCkuCiAgICAgdmlydHVhbCB2b2lkIHN0b3BVc2luZ1Byb3ZpZGVy
KCk7CiAKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2MlJHQls5XTsKKyAgICBzdGF0aWMgY29u
c3QgZmxvYXQgeXV2QWRqdXN0WzNdOworCisgICAgc3RydWN0IFRleHR1cmUgeworICAgICAgICBP
d25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICAgICAgSW50U2l6ZSBtX3Zpc2li
bGVTaXplOworICAgIH07CisgICAgZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKKwogcHJpdmF0ZToK
ICAgICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKGludCwgVmlkZW9GcmFtZVByb3ZpZGVyKik7
CiAKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFt
ZUNocm9taXVtKiwgdW5zaWduZWQgcGxhbmUpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5
ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0KIAotICAgIGJv
b2wgY29weUZyYW1lVG9UZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51
bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZvaWQgY29weVBsYW5lVG9U
ZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5k
ZXgpOwogICAgIGJvb2wgcmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSos
IEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0gICAgdm9pZCBkcmF3
WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwotICAgIHZvaWQgZHJhd1JHQkEoTGF5
ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFt
PiB2b2lkIGRyYXdDb21tb24oTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgUHJvZ3JhbSosIGZsb2F0
IHdpZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdDsKIAog
ICAgIE11dGV4IG1fcHJvdmlkZXJNdXRleDsgLy8gR3VhcmRzIG1fcHJvdmlkZXIgYmVsb3cuCiAg
ICAgVmlkZW9GcmFtZVByb3ZpZGVyKiBtX3Byb3ZpZGVyOwogCi0gICAgc3RhdGljIGNvbnN0IGZs
b2F0IHl1djJSR0JbOV07Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1dkFkanVzdFszXTsKLQot
ICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3Rl
eHR1cmU7Ci0gICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsKLSAgICB9OwotICAgIGVudW0g
eyBNYXhQbGFuZXMgPSAzIH07CiAgICAgVGV4dHVyZSBtX3RleHR1cmVzW01heFBsYW5lc107Ci0g
ICAgaW50IG1fcGxhbmVzOwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBtX25hdGl2ZVRleHR1cmVJ
ZDsKLSAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVNpemU7CisgICAgVmlkZW9GcmFtZUNocm9t
aXVtKiBtX2ZyYW1lOworICAgIEdDM0RlbnVtIG1fZm9ybWF0OwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LmNwcAppbmRleCBmNTk4OTNkZTkwNjQxOGY4Y2JkNzU3NDBhZTI5MzllMjNjYzIzNTBhLi44MjA3
MzNiNDcyMDhjNmVjZmYxN2M4OGEyNTJiM2RkNzhkNmZkZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApA
QCAtMjc2LDYgKzI3Niw2MyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhZ2VT
Y2FsZUFuaW1hdGlvbikKICAgICB9CiB9CiAKK2NsYXNzIERpZERyYXdDaGVja0xheWVyIDogcHVi
bGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaWREcmF3
Q2hlY2tMYXllcj4gY3JlYXRlKGludCBpZCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERpZERyYXdD
aGVja0xheWVyKGlkKSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWREcmF3KCkKKyAgICB7Cisg
ICAgICAgIG1fZGlkRHJhd0NhbGxlZCA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBkaWREcmF3
Q2FsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaWREcmF3Q2FsbGVkOyB9CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgRGlkRHJhd0NoZWNrTGF5ZXIoaW50IGlkKQorICAgICAgICA6IENDTGF5ZXJJ
bXBsKGlkKQorICAgICAgICAsIG1fZGlkRHJhd0NhbGxlZChmYWxzZSkKKyAgICB7CisgICAgICAg
IHNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICBzZXRCb3VuZHMoSW50
U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgc2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIH0KKwor
ICAgIGJvb2wgbV9kaWREcmF3Q2FsbGVkOworfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBkaWREcmF3Q2FsbGVkT25BbGxMYXllcnMpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9t
V2ViQ29udGV4dChhZG9wdFB0cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKCkpLCBhdHRy
cywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7CisgICAgbV9ob3N0SW1w
bC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEwKSk7CisKKyAgICBSZWZQdHI8RGlkRHJhd0NoZWNr
TGF5ZXI+IHJvb3QgPSBEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDApOworICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290KTsKKworICAgIFJlZlB0cjxEaWREcmF3Q2hlY2tMYXllcj4g
bGF5ZXIxID0gRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgxKTsKKyAgICByb290LT5hZGRDaGls
ZChsYXllcjEpOworCisgICAgUmVmUHRyPERpZERyYXdDaGVja0xheWVyPiBsYXllcjIgPSBEaWRE
cmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIpOworICAgIGxheWVyMS0+YWRkQ2hpbGQobGF5ZXIyKTsK
KworICAgIGxheWVyMS0+c2V0T3BhY2l0eSgwLjMpOworICAgIGxheWVyMS0+c2V0UHJlc2VydmVz
M0QoZmFsc2UpOworCisgICAgRVhQRUNUX0ZBTFNFKHJvb3QtPmRpZERyYXdDYWxsZWQoKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGxheWVyMS0+ZGlkRHJhd0NhbGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UobGF5ZXIyLT5kaWREcmF3Q2FsbGVkKCkpOworCisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVy
cygpOworCisgICAgRVhQRUNUX1RSVUUocm9vdC0+ZGlkRHJhd0NhbGxlZCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShsYXllcjEtPmRpZERyYXdDYWxsZWQoKSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXIy
LT5kaWREcmF3Q2FsbGVkKCkpOworCisgICAgRVhQRUNUX05FKHJvb3QtPnJlbmRlclN1cmZhY2Uo
KSwgbGF5ZXIxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9UUlVFKCEhbGF5ZXIxLT5y
ZW5kZXJTdXJmYWNlKCkpOworfQorCiBjbGFzcyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1
YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVU
cmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChmYWxzZSkgeyB9CkBAIC01MDcsNyArNTY0LDYgQEAg
cHJpdmF0ZToKIGNsYXNzIEZha2VEcmF3YWJsZUNDTGF5ZXJJbXBsOiBwdWJsaWMgQ0NMYXllcklt
cGwgewogcHVibGljOgogICAgIGV4cGxpY2l0IEZha2VEcmF3YWJsZUNDTGF5ZXJJbXBsKGludCBp
ZCkgOiBDQ0xheWVySW1wbChpZCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiByZW5kZXJlcikgeyB9CiB9OwogCiAvLyBPbmx5IHJlc2hhcGUgd2hlbiB3
ZSBrbm93IHdlIGFyZSBnb2luZyB0byBkcmF3LiBPdGhlcndpc2UsIHRoZSByZXNoYXBlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125858</attachid>
            <date>2012-02-07 09:08:51 -0800</date>
            <delta_ts>2012-02-16 07:30:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120207120850.patch</filename>
            <type>text/plain</type>
            <size>37376</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2OTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhMTgwMzg4MzZmMGE0
MmUzMDgyODVhNjNjZjRhOWU4NTdlYTdhNS4uYmJhMzk5MDdjYjM0ZWVlMTVmMzM5YTE2OTAyOTg1
OGFlZTJmMmZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTAyLTA3ICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsIG5vIGxv
bmdlciBoYW5kbGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDVmlk
ZW9EcmF3UXVhZHMuCisgICAgICAgIFRoZXNlIHF1YWRzIGFyZSB0aGVuIGRyYXduIGJ5IExheWVy
UmVuZGVyZXJDaHJvbWl1bS4KKworICAgICAgICBDQ0xheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKikgaXMgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZSBhcHBlbmRRdWFkcy4K
KyAgICAgICAgQ0NMYXllckltcGw6OmRpZERyYXcoKSBpcyBjYWxsZWQgZGlyZWN0bHkgYWZ0ZXIg
YWxsIGRyYXdpbmcgaGFzIGJlZW4gY29tcGxldGVkLgorICAgICAgICBDQ0xheWVySW1wbDo6ZHJh
dyBoYXMgYmVlbiByZW1vdmVkLgorCisgICAgICAgIHdpbGxEcmF3IGFuZCBkaWREcmF3IGFyZSB1
c2VkIHRvIGhhbmRsZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWaWRlb0ZyYW1lUHJvdmlkZXIKKyAg
ICAgICAgaW4gQ0NWaWRlb0xheWVySW1wbC4gd2lsbERyYXcgZ2V0cyBhIGZyYW1lIGZyb20gdGhl
IFZpZGVvRnJhbWVQcm92aWRlciwgYW5kCisgICAgICAgIGRpZERyYXcgcmV0dXJucyBpdC4KKwor
ICAgICAgICBBIHVuaXQgdGVzdCBoYXMgYmVlbiBhZGRlZDogQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJzLgorICAgICAgICBUaGlzIHRlc3QgZW5zdXJlcyB0
aGF0IENDTGF5ZXJJbXBsOjpkaWREcmF3KCkgaXMgY2FsbGVkIG9uIGFsbCBsYXllcnMsCisgICAg
ICAgIGluY2x1ZGluZyBsYXllcnMgb24gZGlmZmVyZW50IHJlbmRlciBzdXJmYWNlcy4KKworICAg
ICAgICBBcyB0aGlzIHdhcyBhIHJlZmFjdG9yLCBubyBvdGhlciB0ZXN0cyB3ZXJlIGFkZGVkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lV
Vik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1lVG9UZXh0dXJlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
OgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpkaWREcmF3KToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0RyYXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oOgorICAgICAgICAoQ0NWaWRlb0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6dGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvRHJhd1F1YWQ6OmZvcm1hdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBs
OjphcHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRE
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvbXB1dGVWaXNpYmxl
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5oOgorICAgICAgICAoQ0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvTGF5ZXJJbXBsOjpwcm92aWRlck11dGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OnByb3ZpZGVyKToKKyAgICAgICAgKFRleHR1cmUpOgorCiAyMDEyLTAy
LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTA2OTMyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCBlNDdhZTBiNTNmZGE3NWIwNDQ1YmFjOGE5NjE4ZjZkMTEyYjhmYjAzLi40NGNkNTg0
ZjVlZjY3NTFkNTYyZWRmODcxOTBkZDcyMmQ3NzNhMzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTAyLTA3ICBUaW0gRHJlc3NlciAgPHRkcmVzc2Vy
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIHZpZGVvIGRyYXdp
bmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5kaWREcmF3Q2FsbGVkT25B
bGxMYXllcnMgZW5zdXJlcyB0aGF0CisgICAgICAgIENDTGF5ZXJJbXBsOjpkaWREcmF3KCkgaXMg
Y2FsbGVkIG9uIGFsbCBsYXllcnMsIGluY2x1ZGluZyBsYXllcnMKKyAgICAgICAgb24gZGlmZmVy
ZW50IHJlbmRlciBzdXJmYWNlcy4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcDoKKyAgICAgICAgKERpZERyYXdDaGVja0xheWVyKToKKyAgICAgICAgKFdlYktp
dDo6RGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRpZERyYXdD
aGVja0xheWVyOjpkaWREcmF3KToKKyAgICAgICAgKFdlYktpdDo6RGlkRHJhd0NoZWNrTGF5ZXI6
OmRpZERyYXdDYWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpEaWREcmF3Q2hlY2tMYXllcjo6RGlk
RHJhd0NoZWNrTGF5ZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6VEVT
VF9GKToKKwogMjAxMi0wMi0wNyAgSm9uYXRoYW4gQmFja2VyICA8YmFja2VyQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBzZXROZWVkc1JlZHJhdyB0byBXZWJXaWRnZXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGJhZTRkYTM1NDExOWI2
NzE5NzYwY2FiMWVmZmVkZDQ5MzRmNzA0MDUuLjdlZWMxMDM0NmVhMmU1NTAzNGViYjllOWUyZTQ5
YTg4MWNhMjQyZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
NjkxLDEwICs2OTEsMTM5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q2FudmFz
UXVhZChjb25zdCBDQ0NhbnZhc0RyYXdRdWFkKiBxdWFkKQogICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNz
Q29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKK3sKKyAgICBj
b25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9MYXllcllV
VlByb2dyYW0oKTsKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgp
KTsKKworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHlUZXh0dXJlID0gcXVh
ZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07CisgICAgY29uc3QgQ0NW
aWRlb0xheWVySW1wbDo6VGV4dHVyZSYgdVRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1ZpZGVv
RnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0
dXJlJiB2VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxh
bmVdOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLm1fdGV4
dHVyZS0+dGV4dHVyZUlkKCkpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7CisgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTMpKTsKKyAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB2VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisKKyAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7
CisKKyAgICBmbG9hdCB5V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5VGV4
dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8geVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCku
d2lkdGgoKTsKKyAgICAvLyBBcmJpdHJhcmlseSB0YWtlIHRoZSB1IHNpemVzIGJlY2F1c2UgdSBh
bmQgdiBkaW1lbnNpb25zIGFyZSBpZGVudGljYWwuCisgICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFj
dG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkg
LyB1VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNjYWxl
RmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKKyAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2Nh
bGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKKworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueVRl
eHR1cmVMb2NhdGlvbigpLCAxKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlm
b3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsK
KyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOworCisgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtTWF0cml4M2Z2KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY2NN
YXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4oQ0NWaWRlb0xheWVySW1wbDo6
eXV2MlJHQiksIDEpKTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0zZnYo
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpMb2NhdGlvbigpLCBjb25zdF9jYXN0PGZs
b2F0Kj4oQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0KSwgMSkpOworCisgICAgY29uc3QgSW50
U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7CisgICAgZHJhd1RleHR1cmVk
UXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdo
dCgpLCBxdWFkLT5vcGFjaXR5KCksIEZsb2F0UXVhZCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuYWxwaGFMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLTEpOworCisgICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUgYmFjayB0byB0ZXh0dXJlIDAu
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCkpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPgordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKGNvbnN0IEND
VmlkZW9EcmF3UXVhZCogcXVhZCwgUHJvZ3JhbSogcHJvZ3JhbSwgZmxvYXQgd2lkdGhTY2FsZUZh
Y3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpCit7CisgICAgQVNTRVJUKHByb2dyYW0g
JiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdGV4dHVyZUlkKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRp
b24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3RvciwgMSkpOworICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0
aW9uKCksIDApKTsKKworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0
KCkuc2l6ZSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRH
ZW9tZXRyeVF1YWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKK30KKwordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVh
ZCkKK3sKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9
IHZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRl
eHR1cmUmIHRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdi
UGxhbmVdOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
dGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUo
KS53aWR0aCgpOworICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0s
IHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TmF0aXZlVGV4dHVyZShjb25zdCBDQ1Zp
ZGVvRHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6TmF0aXZl
VGV4dHVyZVByb2dyYW0qIHByb2dyYW0gPSB2aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0o
KTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCAxLCBxdWFk
LT5mcmFtZSgpLT50ZXh0dXJlSWQoKSk7Cit9CisKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKK3sKKyAg
ICBjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gcXVhZC0+ZnJhbWUoKTsKKworICAg
IGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFu
ZSkgeworICAgICAgICBBU1NFUlQocXVhZC0+ZnJhbWUoKS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShw
bGFuZSkgPT0gcXVhZC0+dGV4dHVyZXMoKVtwbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkpOworICAg
ICAgICBjb3B5UGxhbmVUb1RleHR1cmUocXVhZCwgZnJhbWUtPmRhdGEocGxhbmUpLCBwbGFuZSk7
CisgICAgfQorICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5l
IDwgQ0NWaWRlb0xheWVySW1wbDo6TWF4UGxhbmVzOyArK3BsYW5lKSB7CisgICAgICAgIENDVmlk
ZW9MYXllckltcGw6OlRleHR1cmUqIHRleHR1cmUgPSAmcXVhZC0+dGV4dHVyZXMoKVtwbGFuZV07
CisgICAgICAgIHRleHR1cmUtPm1fdGV4dHVyZS5jbGVhcigpOworICAgICAgICB0ZXh0dXJlLT5t
X3Zpc2libGVTaXplID0gSW50U2l6ZSgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZShjb25zdCBDQ1Zp
ZGVvRHJhd1F1YWQqIHF1YWQsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCit7CisgICAg
Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgdGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbaW5k
ZXhdOworICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IHJlbmRlclN1cmZhY2VUZXh0
dXJlQWxsb2NhdG9yKCk7CisgICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRl
eHQoKSwgYWxsb2NhdG9yKTsKKyAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVy
ZS0+Zm9ybWF0KCk7CisgICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUt
PnNpemUoKTsKKworICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9t
aXVtKj4oY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01J
VU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lk
dGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOworICAgIGlmICht
ZW0pIHsKKyAgICAgICAgbWVtY3B5KG1lbSwgcGxhbmUsIGRpbWVuc2lvbnMud2lkdGgoKSAqIGRp
bWVuc2lvbnMuaGVpZ2h0KCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBU
ZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYg
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4U3Vi
SW1hZ2UyRAorICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVzIGFz
IG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCisgICAgICAgIC8vIGluIHRoZSBjb21tYW5k
IGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1h
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBsYW5lKSk7CisgICAgfQorfQor
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZChjb25zdCBDQ1ZpZGVv
RHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgQ0NMYXllckltcGwqIGxheWVyID0gcXVhZC0+bGF5ZXIo
KTsKLSAgICBsYXllci0+ZHJhdyh0aGlzKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOworCisgICAgaWYgKCFxdWFkLT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIWNvcHlGcmFtZVRvVGV4dHVyZXMocXVhZCkpCisgICAgICAgIHJldHVybjsKKworICAg
IHN3aXRjaCAocXVhZC0+Zm9ybWF0KCkpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
VU1JTkFOQ0U6CisgICAgICAgIGRyYXdZVVYocXVhZCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGRyYXdSR0JBKHF1YWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAg
ICAgICBkcmF3TmF0aXZlVGV4dHVyZShxdWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQ1JBU0goKTsgLy8gU29tZW9uZSB1cGRhdGVkIGNvbnZlcnRWRkNGb3JtYXRU
b0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0ZSB0aGlzIQorICAgIH0KIH0KIAogc3RydWN0IFBs
dWdpblByb2dyYW1CaW5kaW5nIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5k
ZXggNGJjYjI1ODI4NjRlZjJlZTQ0ZmIxMGQwYTUwMDE5Njc4Yjk1ODRlZS4uOGQ1NTU3NTI2MzY5
YzRmZmYwZjVmMjc0ZjU0ZTliMTMwOTNkNmU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgKQEAgLTE2OCw2ICsxNjgsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdQbHVn
aW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqKTsKIAogICAgIE1hbmFnZWRUZXh0dXJlKiBn
ZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKKyAgICB2b2lkIGNvcHlQbGFuZVRvVGV4dHVyZShj
b25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KTsKKyAg
ICBib29sIGNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisgICAg
dGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChj
b25zdCBDQ1ZpZGVvRHJhd1F1YWQqLCBQcm9ncmFtKiwgZmxvYXQgd2lkdGhTY2FsZUZhY3Rvciwg
UGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpOworICAgIHZvaWQgZHJhd05hdGl2ZVRleHR1cmUo
Y29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3UkdCQShjb25zdCBDQ1ZpZGVv
RHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisK
ICAgICB2b2lkIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiAKICAgICB2b2lkIHNl
dERyYXdWaWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCmluZGV4IDgxZjk3MTJlMGZhYzBmOTgxMjg4OGRhMmU3M2ZmMzNlZmQ2MDY1
YTQuLjJlNWZmOTEwYWUwMTRhODcyYjljYWQ2MDFkZDcxYWEwNTc0ZTJjYjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKQEAgLTExNSwxMSArMTE1LDYgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENDTGF5
ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopCi17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IENDTGF5ZXJJbXBs
OjpjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdAogewogICAgIEludFJlY3QgbGF5ZXJDbGlw
UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDdiYWUyMDE3NDRiNGVjMjA4MTRmMzA1Mjhh
YjZiY2YyZDJkODc5MmQuLjg4ZmY0MzkzZDFkYmIzZDRmZDdhOGQ3ZjExYzkwYjM2MDQ5ZDE5ODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNzQsOSArNzQsOSBAQCBwdWJsaWM6CiAgICAgUGFz
c093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpIHsgfQogICAgIHZvaWQgYXBw
ZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZExpc3QmLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSop
IGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQg
YmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBlOTMwYmMyOWU4NmMwNzcwMmUwNzI2
ZjM1ZjM3ZWFhNWE1OGFkYzgyLi5jNTk3MWI3MzQxNjFmNjFkMDM4YTkyNjFmMGFiZjRlYzRjMjhi
ZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRy
YWNlRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJj
Yy9DQ0xheWVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKICNpbmNsdWRlICJjYy9DQ1BhZ2VT
Y2FsZUFuaW1hdGlvbi5oIgpAQCAtMTg3LDkgKzE4OCw4IEBAIHN0YXRpYyBGbG9hdFJlY3QgZGFt
YWdlSW5TdXJmYWNlU3BhY2UoQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciwgY29uc3Qg
RmxvCiAgICAgcmV0dXJuIHN1cmZhY2VEYW1hZ2VSZWN0OwogfQogCi12b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRl
clBhc3NMaXN0JiBwYXNzZXMsIENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQog
ewotICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKCkpOwogCiAgICAgaWYgKCFyb290TGF5ZXIo
KS0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtMjYzLDEzICsyNjMsMjMgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0NSZW5kZXJQ
YXNzTGlzdCBwYXNzZXM7Ci0gICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3Nlcyk7CisgICAg
Q0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBjYWxjdWxhdGVSZW5kZXJQ
YXNzZXMocGFzc2VzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIG9wdGltaXplUmVu
ZGVyUGFzc2VzKHBhc3Nlcyk7CiAKICAgICBtX2xheWVyUmVuZGVyZXItPmJlZ2luRHJhd2luZ0Zy
YW1lKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd1JlbmRlclBhc3MocGFzc2VzW2ldLmdldCgpKTsK
KworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZh
Y2UsIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250PiBDQ0xheWVySXRlcmF0b3JU
eXBlOworCisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JUeXBl
OjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9y
VHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC5yZXByZXNlbnRzSXRzZWxm
KCkpCisgICAgICAgICAgICBpdC0+ZGlkRHJhdygpOworICAgIH0KKwogICAgIG1fbGF5ZXJSZW5k
ZXJlci0+ZmluaXNoRHJhd2luZ0ZyYW1lKCk7CiAKICAgICArK21fZnJhbWVOdW1iZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggNTY5ZDY5ZmEzZWQ2ODBmYTUxN2U5
OGIwYjFmNDU1NDkwMDg1NjQ0NS4uOGVhZjBmZDAwYzBiYWZlOGYxZTRhMjcyYjFmYTM1MDI3NTBm
ZWNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTI3LDcgKzEy
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGp1c3RTY3JvbGxzRm9yUGFnZVNjYWxlQ2hhbmdl
KGZsb2F0KTsKICAgICB2b2lkIHVwZGF0ZU1heFNjcm9sbFBvc2l0aW9uKCk7CiAgICAgdm9pZCB0
cmFja0RhbWFnZUZvckFsbFN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25z
dCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBjYWxjdWxh
dGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOworICAgIHZvaWQgY2FsY3VsYXRlUmVu
ZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmLCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CiAgICAgdm9pZCBvcHRpbWl6ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0
Jik7CiAgICAgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0RyYXdRdWFkLmNwcAppbmRleCAzZGUzOGU5MGY4NjNmMWYzODcwODQ4Y2YxMDkyMzg5OWRlOTc3
YzE1Li4xZjk2ZTFiMTIzZDBkMTcxMmNiOTY5YzkyZjAyZmI1OWE4OTBlYWZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJh
d1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAKQEAgLTI5LDE2ICsyOSwxNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1ZpZGVvRHJhd1F1YWQ6
OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJ
bnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyKQorUGFzc093blB0cjxDQ1ZpZGVv
RHJhd1F1YWQ+IENDVmlkZW9EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVu
dW0gZm9ybWF0KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWRlb0RyYXdRdWFkKHNo
YXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIGxheWVyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDQ1ZpZGVvRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGV4dHVyZXMsIGZy
YW1lLCBmb3JtYXQpKTsKIH0KIAotQ0NWaWRlb0RyYXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVh
ZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK0NDVmlkZW9EcmF3UXVhZDo6Q0NWaWRlb0RyYXdR
dWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJl
Y3QmIHF1YWRSZWN0LCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgVmlkZW9G
cmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0KQogICAgIDogQ0NEcmF3UXVhZChz
aGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlZpZGVvQ29udGVudCwgcXVhZFJlY3QpCi0gICAg
LCBtX2xheWVyKGxheWVyKQorICAgICwgbV90ZXh0dXJlcyh0ZXh0dXJlcykKKyAgICAsIG1fZnJh
bWUoZnJhbWUpCisgICAgLCBtX2Zvcm1hdChmb3JtYXQpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXIp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCmluZGV4IGIxOGJjNTU0MWNkMmJj
ZjdmYzEyZmJmOTNiZGIzNDM4OTY0Zjk4NGEuLjE2NWFhNjBkYzQ3N2JiOTk3M2JiZWE0ZjQwN2Fk
NjY4MDZkYzA1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oCkBAIC0yNiwyMyArMjYs
MjggQEAKICNpZm5kZWYgQ0NWaWRlb0RyYXdRdWFkX2gKICNkZWZpbmUgQ0NWaWRlb0RyYXdRdWFk
X2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgImNjL0NDRHJhd1F1
YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDQ0xheWVySW1wbDsK
IGNsYXNzIENDVmlkZW9EcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDQ1ZpZGVvRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDVmlkZW9EcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwg
Y29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NW
aWRlb0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRS
ZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFZpZGVvRnJhbWVDaHJv
bWl1bSosIEdDM0RlbnVtIGZvcm1hdCk7CiAKLSAgICBDQ0xheWVySW1wbCogbGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX2xheWVyOyB9CisgICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4
dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVzOyB9CisgICAgVmlkZW9GcmFtZUNocm9t
aXVtKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICBHQzNEZW51bSBmb3Jt
YXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQogCiBwcml2YXRlOgotICAgIENDVmlkZW9E
cmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVy
SW1wbCopOworICAgIENDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNv
bnN0IEludFJlY3QmLCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlcywgVmlkZW9G
cmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0KTsKIAotICAgIENDTGF5ZXJJbXBsKiBtX2xh
eWVyOworICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIG1fdGV4dHVyZXM7CisgICAgVmlk
ZW9GcmFtZUNocm9taXVtKiBtX2ZyYW1lOworICAgIEdDM0RlbnVtIG1fZm9ybWF0OwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAppbmRleCBmZjgxYWNkYTgyNzA3MTdk
ZGE2YTNjMGJlODJlNjZhNDdlMGQ4MzZiLi42NTA4ZTVkMjkzNGNiYWEzYzRjMGIzMmFjZmY2NTEy
YTc0NGVhMWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtMTEyLDcg
KzExMiw3IEBAIHN0YXRpYyBHQzNEZW51bSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0KFZp
ZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IGZvcm1hdCkKICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUU7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit2b2lkIENDVmlkZW9MYXllcklt
cGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgCiB7CiAg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApAQCAtMTIxLDEwMSArMTIxLDU1
IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCiAgICAgaWYgKCFtX3Byb3ZpZGVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdDM0RlbnVtIGZvcm1h
dCA9IGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoZnJhbWUtPmZvcm1hdCgpKTsKKyAgICBt
X2ZyYW1lID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1lKCk7CiAKLSAgICBpZiAoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKSB7Ci0gICAgICAgIG1fcHJvdmlk
ZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CisgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCi0gICAgaWYgKCFjb3B5RnJhbWVUb1RleHR1cmVzKGZyYW1lLCBmb3Jt
YXQsIGxheWVyUmVuZGVyZXIpKSB7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFt
ZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV9mb3JtYXQgPSBjb252ZXJ0
VkZDRm9ybWF0VG9HQzNERm9ybWF0KG1fZnJhbWUtPmZvcm1hdCgpKTsKIAotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgICAg
ICBkcmF3WVVWKGxheWVyUmVuZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBkcmF3UkdCQShsYXllclJlbmRlcmVyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAg
ICAgICAgZHJhd05hdGl2ZVRleHR1cmUobGF5ZXJSZW5kZXJlcik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7IC8vIFNvbWVvbmUgdXBkYXRlZCBjb252ZXJ0
VkZDRm9ybWF0VG9HQzNERm9ybWF0IGFib3ZlIGJ1dCB1cGRhdGUgdGhpcyEKKyAgICBpZiAobV9m
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpIHsKKyAgICAgICAgbV9w
cm92aWRlci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOworICAgICAgICBtX2ZyYW1lID0gMDsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBw
bGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkgewotICAgICAgICBtX3RleHR1cmVzW3Bs
YW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOwotICAgICAgICAvLyBGSVhNRTogTWFuYWdlZFRl
eHR1cmUncyBzdG9yZSBhIHJhdyBwb2ludGVyIHRvIHRoZWlyIFRleHR1cmVNYW5hZ2VyLAotICAg
ICAgICAvLyBhbmQgdGhlIHRleHR1cmVzIHdlIGNyZWF0ZSB1c2UgbGF5ZXJSZW5kZXJlci0+cmVu
ZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCkuCi0gICAgICAgIC8vIFNpbmNlIHRoZXJlIGlzIG5v
IGd1YXJhbnRlZSBsYXllclJlbmRlcmVyIHdpbGwgc3RpbGwgYmUgYWxpdmUgdGhlCi0gICAgICAg
IC8vIG5leHQgdGltZSB3ZSBhcmUgY2FsbGVkLCB3ZSBjbGVhciB0aGUgdGV4dHVyZSByZWZlcmVu
Y2UuIEl0IHdvdWxkCi0gICAgICAgIC8vIGJlIG5pY2UgaWYgaW5zdGVhZCB3ZSBjb3VsZCByZWx5
IG9uIHRleHR1cmVzIGJlaW5nIGludmFsaWRhdGVkIHdoZW4KLSAgICAgICAgLy8gdGhlaXIgbWFu
YWdlciB3YXMgZGVsZXRlZCBzbyB0aGF0IG5ldyB0ZXh0dXJlcyBkaWRuJ3QgYWx3YXlzIGhhdmUg
dG8KLSAgICAgICAgLy8gYmUgcmVjcmVhdGVkIGZvciBlYWNoIGZyYW1lLgotICAgICAgICBtX3Rl
eHR1cmVzW3BsYW5lXS5tX3RleHR1cmUuY2xlYXIoKTsKKyAgICBpZiAoIXJlc2VydmVUZXh0dXJl
cyhtX2ZyYW1lLCBtX2Zvcm1hdCwgbGF5ZXJSZW5kZXJlcikpIHsKKyAgICAgICAgbV9wcm92aWRl
ci0+cHV0Q3VycmVudEZyYW1lKG1fZnJhbWUpOworICAgICAgICBtX2ZyYW1lID0gMDsKICAgICB9
Ci0gICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKIH0KIAogdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKICAgICBJbnRSZWN0IHF1YWRSZWN0
KEludFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NWaWRlb0RyYXdR
dWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgdGhpcykpOworICAgIHF1YWRM
aXN0LmFwcGVuZChDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRS
ZWN0LCBtX3RleHR1cmVzLCBtX2ZyYW1lLCBtX2Zvcm1hdCkpOwogfQogCi1ib29sIENDVmlkZW9M
YXllckltcGw6OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBm
cmFtZSwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIpCit2b2lkIENDVmlkZW9MYXllckltcGw6OmRpZERyYXcoKQogewotICAgIGlmIChmcmFtZS0+
Zm9ybWF0KCkgPT0gVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlKSB7Ci0gICAgICAg
IG1fbmF0aXZlVGV4dHVyZUlkID0gZnJhbWUtPnRleHR1cmVJZCgpOwotICAgICAgICBtX25hdGl2
ZVRleHR1cmVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFyZXNlcnZlVGV4dHVyZXMo
ZnJhbWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgZm9yICh1bnNpZ25lZCBw
bGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7Ci0gICAgICAgIEFT
U0VSVChmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSkgPT0gbV90ZXh0dXJlc1twbGFu
ZV0ubV90ZXh0dXJlLT5zaXplKCkpOwotICAgICAgICBjb3B5UGxhbmVUb1RleHR1cmUobGF5ZXJS
ZW5kZXJlciwgZnJhbWUtPmRhdGEocGxhbmUpLCBwbGFuZSk7Ci0gICAgfQotICAgIGZvciAodW5z
aWduZWQgcGxhbmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lIDwgTWF4UGxhbmVzOyArK3BsYW5l
KSB7Ci0gICAgICAgIFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW3BsYW5lXTsKLSAgICAg
ICAgdGV4dHVyZS5tX3RleHR1cmUuY2xlYXIoKTsKLSAgICAgICAgdGV4dHVyZS5tX3Zpc2libGVT
aXplID0gSW50U2l6ZSgpOwotICAgIH0KLSAgICBtX3BsYW5lcyA9IGZyYW1lLT5wbGFuZXMoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm92aWRlck11
dGV4KTsKIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5UGxhbmVUb1RleHR1cmUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGlu
ZGV4KQotewotICAgIFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW2luZGV4XTsKLSAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAg
ICBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJm
YWNlVGV4dHVyZUFsbG9jYXRvcigpOwotICAgIHRleHR1cmUubV90ZXh0dXJlLT5iaW5kVGV4dHVy
ZShjb250ZXh0LCBhbGxvY2F0b3IpOwotICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90
ZXh0dXJlLT5mb3JtYXQoKTsKLSAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4
dHVyZS0+c2l6ZSgpOworICAgIGlmICghbV9wcm92aWRlciB8fCAhbV9mcmFtZSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21p
dW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgo
KSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwotICAgIGlmIChtZW0p
IHsKLSAgICAgICAgbWVtY3B5KG1lbSwgcGxhbmUsIGRpbWVuc2lvbnMud2lkdGgoKSAqIGRpbWVu
c2lvbnMuaGVpZ2h0KCkpOwotICAgICAgICBHTEMoY29udGV4dCwgc3RhdGljX2Nhc3Q8RXh0ZW5z
aW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT51bm1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTShtZW0pKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBtYXBUZXhT
dWJJbWFnZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0ZXhTdWJJbWFnZTJE
Ci0gICAgICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3BpZXMgYXMgbWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNLCBvbmUKLSAgICAgICAgLy8gaW4gdGhlIGNvbW1hbmQgYnVmZmVy
IGFuZCBhbm90aGVyIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwg
ZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwbGFuZSkpOworICAgIGZvciAodW5zaWduZWQgcGxh
bmUgPSAwOyBwbGFuZSA8IG1fZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7CisgICAgICAgIG1f
dGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7CisgICAgICAgIC8vIEZJWE1F
OiBNYW5hZ2VkVGV4dHVyZSdzIHN0b3JlIGEgcmF3IHBvaW50ZXIgdG8gdGhlaXIgVGV4dHVyZU1h
bmFnZXIsCisgICAgICAgIC8vIGFuZCB0aGUgdGV4dHVyZXMgd2UgY3JlYXRlIHVzZSBsYXllclJl
bmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKS4KKyAgICAgICAgLy8gU2luY2Ug
dGhlcmUgaXMgbm8gZ3VhcmFudGVlIGxheWVyUmVuZGVyZXIgd2lsbCBzdGlsbCBiZSBhbGl2ZSB0
aGUKKyAgICAgICAgLy8gbmV4dCB0aW1lIHdlIGFyZSBjYWxsZWQsIHdlIGNsZWFyIHRoZSB0ZXh0
dXJlIHJlZmVyZW5jZS4gSXQgd291bGQKKyAgICAgICAgLy8gYmUgbmljZSBpZiBpbnN0ZWFkIHdl
IGNvdWxkIHJlbHkgb24gdGV4dHVyZXMgYmVpbmcgaW52YWxpZGF0ZWQgd2hlbgorICAgICAgICAv
LyB0aGVpciBtYW5hZ2VyIHdhcyBkZWxldGVkIHNvIHRoYXQgbmV3IHRleHR1cmVzIGRpZG4ndCBh
bHdheXMgaGF2ZSB0bworICAgICAgICAvLyBiZSByZWNyZWF0ZWQgZm9yIGVhY2ggZnJhbWUuCisg
ICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5jbGVhcigpOwogICAgIH0KKworICAg
IG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKIH0KIAotc3RhdGljIEludFNp
emUgY29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIHVu
c2lnbmVkIHBsYW5lKQorSW50U2l6ZSBDQ1ZpZGVvTGF5ZXJJbXBsOjpjb21wdXRlVmlzaWJsZVNp
emUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCiB7CiAg
ICAgaW50IHZpc2libGVXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7CiAgICAgaW50IHZpc2li
bGVIZWlnaHQgPSBmcmFtZS0+aGVpZ2h0KHBsYW5lKTsKQEAgLTI2Myw4MSArMjE3LDYgQEAgYm9v
bCBDQ1ZpZGVvTGF5ZXJJbXBsOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9t
aXVtKiBmcmFtZSwgR0MzRGVudW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpkcmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikg
Y29uc3QKLXsKLSAgICBjb25zdCBZVVZQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+
dmlkZW9MYXllcllVVlByb2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5p
bml0aWFsaXplZCgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJS
ZW5kZXJlci0+Y29udGV4dCgpOwotICAgIGNvbnN0IFRleHR1cmUmIHlUZXh0dXJlID0gbV90ZXh0
dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07Ci0gICAgY29uc3QgVGV4dHVyZSYgdVRl
eHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKLSAgICBjb25z
dCBUZXh0dXJlJiB2VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxh
bmVdOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRl
eHR1cmVJZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5tX3RleHR1
cmUtPnRleHR1cmVJZCgpKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB2VGV4dHVyZS5t
X3RleHR1cmUtPnRleHR1cmVJZCgpKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNl
UHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLQotICAgIGZsb2F0IHlXaWR0aFNjYWxlRmFj
dG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkg
LyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIC8vIEFyYml0cmFyaWx5
IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlkZW50aWNh
bC4KLSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRl
eHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgp
LndpZHRoKCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFj
dG9yKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0
b3IpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS55VGV4dHVyZUxvY2F0aW9uKCksIDEpKTsKLSAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudVRleHR1cmVMb2Nh
dGlvbigpLCAyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLnZUZXh0dXJlTG9jYXRpb24oKSwgMykpOwotCi0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5jY01hdHJpeExvY2F0aW9uKCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPih5dXYyUkdCKSwgMSkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtM2Z2KHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkueXV2QWRqTG9jYXRpb24oKSwgY29uc3RfY2FzdDxmbG9hdCo+KHl1dkFkanVzdCks
IDEpKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9y
bSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwg
RmxvYXRRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci0KLSAgICAvLyBSZXNl
dCBhY3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4KLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd0NvbW1v
bihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIFByb2dyYW0qIHByb2dyYW0s
IGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25z
dAotewotICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7
Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotCi0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhU
cmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNh
bXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0KLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRR
dWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCks
IGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCku
bWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLTEpOwotfQotCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRy
YXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKLXsKLSAg
ICBjb25zdCBSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJS
R0JBUHJvZ3JhbSgpOwotICAgIGNvbnN0IFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW1Zp
ZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3Ig
PSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4
dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOwotICAgIGRyYXdDb21tb24obGF5ZXJSZW5k
ZXJlciwgcHJvZ3JhbSwgd2lkdGhTY2FsZUZhY3RvciwgdGV4dHVyZS5tX3RleHR1cmUtPnRleHR1
cmVJZCgpKTsKLX0KLQotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
TmF0aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVy
TmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKLSAgICBkcmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHBy
b2dyYW0sIDEsIG1fbmF0aXZlVGV4dHVyZUlkKTsKLX0KLQogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAog
ewogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1w
bC5oCmluZGV4IDE4MmY3YjU4MjdjOTFjYmZmZWU1ZDNiYWVhZDEwODUxZjZmZmJhOTUuLjM5ZmMy
ZjZjMDgzZGFkZmNlM2NlM2U3YWFhZjBhMjJiYTlhYzI4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgKQEAgLTQ2LDQ4ICs0Niw0NiBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1
YWwgfkNDVmlkZW9MYXllckltcGwoKTsKIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXll
clJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFk
TGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZERy
YXcoKTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJh
bnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJHQkFQcm9ncmFtOwogICAg
IHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaCwgRnJh
Z21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKICAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4Rmxp
cEFscGhhPiBOYXRpdmVUZXh0dXJlUHJvZ3JhbTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwotCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCisgICAgTXV0ZXgmIHByb3Zp
ZGVyTXV0ZXgoKSB7IHJldHVybiBtX3Byb3ZpZGVyTXV0ZXg7IH0KKyAgICBWaWRlb0ZyYW1lUHJv
dmlkZXIqIHByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlcjsgfQorCiAgICAgLy8g
VmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQgaW1wbGVtZW50YXRpb24gKGNhbGxhYmxlIG9uIGFu
eSB0aHJlYWQpLgogICAgIHZpcnR1YWwgdm9pZCBzdG9wVXNpbmdQcm92aWRlcigpOwogCisgICAg
c3RhdGljIGNvbnN0IGZsb2F0IHl1djJSR0JbOV07CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1
dkFkanVzdFszXTsKKworICAgIHN0cnVjdCBUZXh0dXJlIHsKKyAgICAgICAgT3duUHRyPE1hbmFn
ZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsKKyAg
ICB9OworICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07CisKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgQ0NWaWRlb0xheWVySW1wbChpbnQsIFZpZGVvRnJhbWVQcm92aWRlciopOwogCisgICAgc3Rh
dGljIEludFNpemUgY29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSos
IHVuc2lnbmVkIHBsYW5lKTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvTGF5ZXIiOyB9CiAKLSAgICBib29sIGNvcHlGcmFt
ZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0LCBM
YXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLSAgICB2b2lkIGNvcHlQbGFuZVRvVGV4dHVyZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KTsKICAgICBi
b29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBm
b3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZvaWQgZHJhd1lVVihMYXllclJl
bmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKLSAgICB2b2lkIGRyYXdSR0JBKExheWVyUmVuZGVyZXJD
aHJvbWl1bSopIGNvbnN0OwotICAgIHZvaWQgZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3
Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFByb2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxl
RmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgY29uc3Q7CiAKICAgICBNdXRleCBt
X3Byb3ZpZGVyTXV0ZXg7IC8vIEd1YXJkcyBtX3Byb3ZpZGVyIGJlbG93LgogICAgIFZpZGVvRnJh
bWVQcm92aWRlciogbV9wcm92aWRlcjsKIAotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdC
WzldOwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107Ci0KLSAgICBzdHJ1Y3Qg
VGV4dHVyZSB7Ci0gICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOwotICAg
ICAgICBJbnRTaXplIG1fdmlzaWJsZVNpemU7Ci0gICAgfTsKLSAgICBlbnVtIHsgTWF4UGxhbmVz
ID0gMyB9OwogICAgIFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFuZXNdOwotICAgIGludCBtX3Bs
YW5lczsKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9uYXRpdmVUZXh0dXJlSWQ7Ci0gICAgSW50
U2l6ZSBtX25hdGl2ZVRleHR1cmVTaXplOworICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogbV9mcmFt
ZTsKKyAgICBHQzNEZW51bSBtX2Zvcm1hdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKaW5kZXgg
ZjU5ODkzZGU5MDY0MThmOGNiZDc1NzQwYWUyOTM5ZTIzY2MyMzUwYS4uODIwNzMzYjQ3MjA4YzZl
Y2ZmMTdjODhhMjUyYjNkZDc4ZDZmZGRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTI3Niw2ICsy
NzYsNjMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwYWdlU2NhbGVBbmltYXRp
b24pCiAgICAgfQogfQogCitjbGFzcyBEaWREcmF3Q2hlY2tMYXllciA6IHB1YmxpYyBDQ0xheWVy
SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGlkRHJhd0NoZWNrTGF5ZXI+
IGNyZWF0ZShpbnQgaWQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWREcmF3Q2hlY2tMYXllcihp
ZCkpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpCisgICAgeworICAgICAgICBtX2Rp
ZERyYXdDYWxsZWQgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgZGlkRHJhd0NhbGxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkRHJhd0NhbGxlZDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IERpZERyYXdDaGVja0xheWVyKGludCBpZCkKKyAgICAgICAgOiBDQ0xheWVySW1wbChpZCkKKyAg
ICAgICAgLCBtX2RpZERyYXdDYWxsZWQoZmFsc2UpCisgICAgeworICAgICAgICBzZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgc2V0Qm91bmRzKEludFNpemUoMTAsIDEw
KSk7CisgICAgICAgIHNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICB9CisKKyAgICBib29sIG1f
ZGlkRHJhd0NhbGxlZDsKK307CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlk
RHJhd0NhbGxlZE9uQWxsTGF5ZXJzKQoreworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQo
YWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCgpKSwgYXR0cnMsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOworICAgIG1faG9zdEltcGwtPmluaXRpYWxp
emVMYXllclJlbmRlcmVyKGNvbnRleHQpOworICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6
ZShJbnRTaXplKDEwLCAxMCkpOworCisgICAgUmVmUHRyPERpZERyYXdDaGVja0xheWVyPiByb290
ID0gRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdCk7CisKKyAgICBSZWZQdHI8RGlkRHJhd0NoZWNrTGF5ZXI+IGxheWVyMSA9IERp
ZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQobGF5ZXIxKTsK
KworICAgIFJlZlB0cjxEaWREcmF3Q2hlY2tMYXllcj4gbGF5ZXIyID0gRGlkRHJhd0NoZWNrTGF5
ZXI6OmNyZWF0ZSgyKTsKKyAgICBsYXllcjEtPmFkZENoaWxkKGxheWVyMik7CisKKyAgICBsYXll
cjEtPnNldE9wYWNpdHkoMC4zKTsKKyAgICBsYXllcjEtPnNldFByZXNlcnZlczNEKGZhbHNlKTsK
KworICAgIEVYUEVDVF9GQUxTRShyb290LT5kaWREcmF3Q2FsbGVkKCkpOworICAgIEVYUEVDVF9G
QUxTRShsYXllcjEtPmRpZERyYXdDYWxsZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxheWVyMi0+
ZGlkRHJhd0NhbGxlZCgpKTsKKworICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKworICAg
IEVYUEVDVF9UUlVFKHJvb3QtPmRpZERyYXdDYWxsZWQoKSk7CisgICAgRVhQRUNUX1RSVUUobGF5
ZXIxLT5kaWREcmF3Q2FsbGVkKCkpOworICAgIEVYUEVDVF9UUlVFKGxheWVyMi0+ZGlkRHJhd0Nh
bGxlZCgpKTsKKworICAgIEVYUEVDVF9ORShyb290LT5yZW5kZXJTdXJmYWNlKCksIGxheWVyMS0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIWxheWVyMS0+cmVuZGVyU3VyZmFj
ZSgpKTsKK30KKwogY2xhc3MgQmxlbmRTdGF0ZVRyYWNrZXJDb250ZXh0OiBwdWJsaWMgRmFrZVdl
YkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKICAgICBCbGVuZFN0YXRlVHJhY2tlckNvbnRl
eHQoKSA6IG1fYmxlbmQoZmFsc2UpIHsgfQpAQCAtNTA3LDcgKzU2NCw2IEBAIHByaXZhdGU6CiBj
bGFzcyBGYWtlRHJhd2FibGVDQ0xheWVySW1wbDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBGYWtlRHJhd2FibGVDQ0xheWVySW1wbChpbnQgaWQpIDogQ0NMYXll
ckltcGwoaWQpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSogcmVuZGVyZXIpIHsgfQogfTsKIAogLy8gT25seSByZXNoYXBlIHdoZW4gd2Uga25vdyB3ZSBh
cmUgZ29pbmcgdG8gZHJhdy4gT3RoZXJ3aXNlLCB0aGUgcmVzaGFwZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127375</attachid>
            <date>2012-02-16 07:30:59 -0800</date>
            <delta_ts>2012-02-17 10:27:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76720-20120216103058.patch</filename>
            <type>text/plain</type>
            <size>36220</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3OTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2NjOGRkNGI3ZTYwNjFm
MzZjMTQwYjFkY2MzZGY0OTQ4ZmYxN2I1OC4uZGM2ZWE1Mzc4ZGU1ZGVlNGViYmU3MTFjYTI0Y2Yw
ZTE3MmNlZGMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTAyLTE2ICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIHZpZGVvIGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsIG5vIGxv
bmdlciBoYW5kbGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDVmlk
ZW9EcmF3UXVhZHMuCisgICAgICAgIFRoZXNlIHF1YWRzIGFyZSB0aGVuIGRyYXduIGJ5IExheWVy
UmVuZGVyZXJDaHJvbWl1bS4KKworICAgICAgICBDQ0xheWVySW1wbDo6d2lsbERyYXcoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKikgaXMgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZSBhcHBlbmRRdWFkcy4K
KyAgICAgICAgQ0NMYXllckltcGw6OmRpZERyYXcoKSBpcyBjYWxsZWQgZGlyZWN0bHkgYWZ0ZXIg
YWxsIGRyYXdpbmcgaGFzIGJlZW4gY29tcGxldGVkLgorICAgICAgICBDQ0xheWVySW1wbDo6ZHJh
dyBoYXMgYmVlbiByZW1vdmVkLgorCisgICAgICAgIHdpbGxEcmF3IGFuZCBkaWREcmF3IGFyZSB1
c2VkIHRvIGhhbmRsZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBWaWRlb0ZyYW1lUHJvdmlkZXIKKyAg
ICAgICAgaW4gQ0NWaWRlb0xheWVySW1wbC4gd2lsbERyYXcgZ2V0cyBhIGZyYW1lIGZyb20gdGhl
IFZpZGVvRnJhbWVQcm92aWRlciwgYW5kCisgICAgICAgIGRpZERyYXcgcmV0dXJucyBpdC4KKwor
ICAgICAgICBBIHVuaXQgdGVzdCBoYXMgYmVlbiBhZGRlZDogQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJzLgorICAgICAgICBUaGlzIHRlc3QgZW5zdXJlcyB0
aGF0IENDTGF5ZXJJbXBsOjpkaWREcmF3KCkgaXMgY2FsbGVkIG9uIGFsbCBsYXllcnMsCisgICAg
ICAgIGluY2x1ZGluZyBsYXllcnMgb24gZGlmZmVyZW50IHJlbmRlciBzdXJmYWNlcy4KKworICAg
ICAgICBBcyB0aGlzIHdhcyBhIHJlZmFjdG9yLCBubyBvdGhlciB0ZXN0cyB3ZXJlIGFkZGVkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lV
Vik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdOYXRpdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1lVG9UZXh0dXJlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1YWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
OgorICAgICAgICAoTGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpkaWREcmF3KToKKyAgICAgICAgKENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0RyYXdRdWFkOjpDQ1ZpZGVvRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5oOgorICAgICAgICAoQ0NWaWRlb0RyYXdRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9EcmF3UXVhZDo6dGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NWaWRlb0RyYXdRdWFkOjpmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1ZpZGVvRHJhd1F1YWQ6OmZvcm1hdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBs
OjphcHBlbmRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWRE
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvbXB1dGVWaXNpYmxl
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5oOgorICAgICAgICAoQ0NWaWRlb0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1ZpZGVvTGF5ZXJJbXBsOjpwcm92aWRlck11dGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VmlkZW9MYXllckltcGw6OnByb3ZpZGVyKToKKyAgICAgICAgKFRleHR1cmUpOgorCiAyMDEyLTAy
LTE2ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB1bnNpZ25lZCBsb25nW10gdG8gaWRsIGJpbmRpbmdzIHRvIEpTQy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTExYjFiOGZjNTg4MmI4NGM1YmQxMGE3NGE1Y2Qx
NjBjNzEzYzVhMi4uN2NiZmEzMTYyNzE2MTg2YzI1YzRlYjNmZTZjY2I5MGU5NjBhNzI2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0wMi0xNiAgVGlt
IERyZXNzZXIgIDx0ZHJlc3NlckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBS
ZWZhY3RvciB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YSBkcml2ZW4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzIwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QuZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJzIGVuc3VyZXMgdGhhdAorICAgICAgICBDQ0xheWVy
SW1wbDo6ZGlkRHJhdygpIGlzIGNhbGxlZCBvbiBhbGwgbGF5ZXJzLCBpbmNsdWRpbmcgbGF5ZXJz
CisgICAgICAgIG9uIGRpZmZlcmVudCByZW5kZXIgc3VyZmFjZXMuCisKKyAgICAgICAgKiB0ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6CisgICAgICAgIChEaWREcmF3Q2hlY2tMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OkRpZERyYXdDaGVja0xheWVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpEaWREcmF3Q2hlY2tMYXllcjo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJLaXQ6
OkRpZERyYXdDaGVja0xheWVyOjpkaWREcmF3Q2FsbGVkKToKKyAgICAgICAgKFdlYktpdDo6RGlk
RHJhd0NoZWNrTGF5ZXI6OkRpZERyYXdDaGVja0xheWVyKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisKIDIwMTItMDItMTYgIFlvc2lmdW1pIElub3VlICA8
eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEJ1aWxkIEZpeDogUjEwNzg5NCBicmVha3Mg
Q2hyb21pdW0gTGludXggQnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAppbmRleCAxZTVlZTU2M2ZmNzQ5NzMyOWZmZjUxZDUwM2Q3NDdmNTg1MzAwOGQwLi5hNTI2Njll
OGQ0MjUzNWY0NDdkNmI4NDJjM2MxOGU4MDI1MWZmMDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTY5NCwxMCArNjk0LDEzOSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0NhbnZhc1F1YWQoY29uc3QgQ0NDYW52YXNEcmF3UXVhZCogcXVhZCkK
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0Nv
bnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwog
fQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVihjb25zdCBDQ1ZpZGVvRHJh
d1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6WVVWUHJvZ3JhbSog
cHJvZ3JhbSA9IHZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYg
cHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisKKyAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpU
ZXh0dXJlJiB5VGV4dHVyZSA9IHF1YWQtPnRleHR1cmVzKClbVmlkZW9GcmFtZUNocm9taXVtOjp5
UGxhbmVdOworICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHVUZXh0dXJlID0g
cXVhZC0+dGV4dHVyZXMoKVtWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV07CisgICAgY29uc3Qg
Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgdlRleHR1cmUgPSBxdWFkLT50ZXh0dXJlcygpW1Zp
ZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXTsKKworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKKyAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsK
KyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUzKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRleHR1cmUubV90ZXh0dXJlLT50
ZXh0dXJlSWQoKSkpOworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW0oKSkpOworCisgICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlUZXh0
dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CisgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0
aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgorICAg
IGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS5t
X3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgo
KTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9y
KSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWYocHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgdXZXaWR0aFNjYWxlRmFj
dG9yKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLnlUZXh0dXJlTG9jYXRpb24oKSwgMSkpOworICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkudVRl
eHR1cmVMb2NhdGlvbigpLCAyKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlm
b3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS52VGV4dHVyZUxvY2F0aW9uKCksIDMpKTsK
KworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRpb24oKSwgMCwgY29uc3RfY2FzdDxmbG9h
dCo+KENDVmlkZW9MYXllckltcGw6Onl1djJSR0IpLCAxKSk7CisgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtM2Z2KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkueXV2QWRqTG9j
YXRpb24oKSwgY29uc3RfY2FzdDxmbG9hdCo+KENDVmlkZW9MYXllckltcGw6Onl1dkFkanVzdCks
IDEpKTsKKworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6
ZSgpOworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRz
LndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBGbG9hdFF1YWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKworICAgIC8vIFJlc2V0IGFjdGl2ZSB0ZXh0
dXJlIGJhY2sgdG8gdGV4dHVyZSAwLgorICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgUHJvZ3JhbT4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U2luZ2xlVGV4
dHVyZVZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQsIFByb2dyYW0qIHByb2dy
YW0sIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKQor
eworICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworCisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworCisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAsIDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsK
KyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICBjb25zdCBJbnRTaXplJiBi
b3VuZHMgPSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHF1
YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIHF1
YWQtPm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtMSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQShjb25z
dCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6
UkdCQVByb2dyYW0qIHByb2dyYW0gPSB2aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKKyAgICBjb25z
dCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtW
aWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsKKyAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9y
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKKyAgICBkcmF3U2luZ2xlVGV4dHVyZVZp
ZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVy
ZS0+dGV4dHVyZUlkKCkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd05h
dGl2ZVRleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQoreworICAgIGNvbnN0IEND
VmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9MYXll
ck5hdGl2ZVRleHR1cmVQcm9ncmFtKCk7CisgICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQo
cXVhZCwgcHJvZ3JhbSwgMSwgcXVhZC0+ZnJhbWUoKS0+dGV4dHVyZUlkKCkpOworfQorCitib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weUZyYW1lVG9UZXh0dXJlcyhjb25zdCBDQ1ZpZGVv
RHJhd1F1YWQqIHF1YWQpCit7CisgICAgY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9
IHF1YWQtPmZyYW1lKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBm
cmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsKKyAgICAgICAgQVNTRVJUKHF1YWQtPmZyYW1lKCkt
PnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpID09IHF1YWQtPnRleHR1cmVzKClbcGxhbmVdLm1f
dGV4dHVyZS0+c2l6ZSgpKTsKKyAgICAgICAgY29weVBsYW5lVG9UZXh0dXJlKHF1YWQsIGZyYW1l
LT5kYXRhKHBsYW5lKSwgcGxhbmUpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0g
ZnJhbWUtPnBsYW5lcygpOyBwbGFuZSA8IENDVmlkZW9MYXllckltcGw6Ok1heFBsYW5lczsgKytw
bGFuZSkgeworICAgICAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlKiB0ZXh0dXJlID0gJnF1
YWQtPnRleHR1cmVzKClbcGxhbmVdOworICAgICAgICB0ZXh0dXJlLT5tX3RleHR1cmUuY2xlYXIo
KTsKKyAgICAgICAgdGV4dHVyZS0+bV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5UGxh
bmVUb1RleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkLCBjb25zdCB2b2lkKiBwbGFu
ZSwgaW50IGluZGV4KQoreworICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUmIHRleHR1cmUg
PSBxdWFkLT50ZXh0dXJlcygpW2luZGV4XTsKKyAgICBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSByZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigpOworICAgIHRleHR1cmUubV90ZXh0
dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0KCksIGFsbG9jYXRvcik7CisgICAgR0MzRGVudW0gZm9y
bWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOworICAgIEludFNpemUgZGltZW5zaW9u
cyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7CisKKyAgICB2b2lkKiBtZW0gPSBzdGF0aWNf
Y2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKS0+
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpX
UklURV9PTkxZKTsKKyAgICBpZiAobWVtKSB7CisgICAgICAgIG1lbWNweShtZW0sIHBsYW5lLCBk
aW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKKyAgICAgICAgR0xDKGNv
bnRleHQoKSwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0KCktPmdl
dEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWlscywgdGhl
biBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKKyAgICAgICAgLy8gdXBsb2FkLiBUaGlzIGRv
ZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9uZQorICAg
ICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRleHR1cmUu
CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4U3ViSW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1l
bnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCBwbGFuZSkpOworICAgIH0KK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdW
aWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewotICAgIENDTGF5ZXJJbXBs
KiBsYXllciA9IHF1YWQtPmxheWVyKCk7Ci0gICAgbGF5ZXItPmRyYXcodGhpcyk7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKworICAgIGlmICghcXVhZC0+ZnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFjb3B5RnJhbWVUb1RleHR1cmVzKHF1YWQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHF1YWQtPmZvcm1hdCgpKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgICAgICBkcmF3WVVWKHF1YWQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAg
ICBkcmF3UkdCQShxdWFkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgZHJhd05hdGl2ZVRleHR1cmUocXVhZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7IC8vIFNvbWVvbmUgdXBk
YXRlZCBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0IGFib3ZlIGJ1dCB1cGRhdGUgdGhpcyEK
KyAgICB9CiB9CiAKIHN0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGJlYTRiYWE0MTBkZGMwMDAyNWIwYTBkY2RmNDFhMjIz
ZDhmYTgyMGUuLjhjNGI2ZTlmZTkyYTZmZjhhYWU4NTk1ZDQzOTAzYjk4OTA1YmU0OTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNjgsNiArMTY4LDEzIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBkcmF3UGx1Z2luUXVhZChjb25zdCBDQ1BsdWdpbkRyYXdRdWFkKik7CiAK
ICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CisgICAgdm9p
ZCBjb3B5UGxhbmVUb1RleHR1cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiwgY29uc3Qgdm9pZCog
cGxhbmUsIGludCBpbmRleCk7CisgICAgYm9vbCBjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IEND
VmlkZW9EcmF3UXVhZCopOworICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgZHJhd1Np
bmdsZVRleHR1cmVWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiwgUHJvZ3JhbSosIGZs
b2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKTsKKyAgICB2
b2lkIGRyYXdOYXRpdmVUZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCopOworICAgIHZvaWQg
ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3WVVWKGNvbnN0
IENDVmlkZW9EcmF3UXVhZCopOworCiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlz
cGxheSgpOwogCiAgICAgdm9pZCBzZXREcmF3Vmlld3BvcnRSZWN0KGNvbnN0IEludFJlY3QmLCBi
b29sIGZsaXBZKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBhMTM2MTY3ZDdhZmVjNGE2
NzFlN2E2OTgwODVkNGRkNjYwZWRhMzExLi5jMmJkMzRiMGJmYjhlOTA4NzYzNDMzMWQxY2UyNjFm
MmFlYmJkZDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMTUsMTEgKzExNSw2IEBA
IGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0q
KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBQYXNzT3duUHRyPENDU2hhcmVk
UXVhZFN0YXRlPiBDQ0xheWVySW1wbDo6Y3JlYXRlU2hhcmVkUXVhZFN0YXRlKCkgY29uc3QKIHsK
ICAgICBJbnRSZWN0IGxheWVyQ2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA4ZmJh
YmFlODZhNmJkNmFjOGQ2NWNiN2U3ZTA2Y2E2YzliZTY5MTgwLi45ZTZjNTUwMDdlZTdlMzhkNzVm
NjMxMWM5YTBmOGRlZGE3NDc2ZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTc1LDkgKzc1
LDkgQEAgcHVibGljOgogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVNo
YXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFk
TGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRpZERy
YXcoKSB7IH0KICAgICB2b2lkIGFwcGVuZERlYnVnQm9yZGVyUXVhZChDQ1F1YWRMaXN0JiwgY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXgg
ZTQ2YWUzMjQ5ZjM4MTVjZDliMDE5MWE5Mjg3MWZhMTdmMmE5ZGI4Ni4uMDU0YmViMzJlZTUzNTlj
YmM1YmE1NGY5MWI2YTk2YzE1NDBmZjViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VU
cmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgi
CiAjaW5jbHVkZSAiY2MvQ0NQYWdlU2NhbGVBbmltYXRpb24uaCIKQEAgLTE4Nyw5ICsxODgsOCBA
QCBzdGF0aWMgRmxvYXRSZWN0IGRhbWFnZUluU3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5k
ZXJTdXJmYWNlTGF5ZXIsIGNvbnN0IEZsbwogICAgIHJldHVybiBzdXJmYWNlRGFtYWdlUmVjdDsK
IH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoQ0NS
ZW5kZXJQYXNzTGlzdCYgcGFzc2VzKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxh
dGVSZW5kZXJQYXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ0xheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKLSAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcigpKTsK
IAogICAgIGlmICghcm9vdExheWVyKCktPnJlbmRlclN1cmZhY2UoKSkKQEAgLTI2MywxMyArMjYz
LDIzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIENDUmVuZGVyUGFzc0xpc3QgcGFzc2VzOwotICAgIGNhbGN1bGF0ZVJlbmRl
clBhc3NlcyhwYXNzZXMpOworICAgIENDTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7
CisgICAgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKHBhc3NlcywgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CiAKICAgICBvcHRpbWl6ZVJlbmRlclBhc3NlcyhwYXNzZXMpOwogCiAgICAgbV9sYXllclJl
bmRlcmVyLT5iZWdpbkRyYXdpbmdGcmFtZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGFzc2VzLnNpemUoKTsgKytpKQogICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdSZW5kZXJQ
YXNzKHBhc3Nlc1tpXS5nZXQoKSk7CisKKyAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxDQ0xh
eWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9G
cm9udD4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKworICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5k
ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdp
bigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBp
ZiAoaXQucmVwcmVzZW50c0l0c2VsZigpKQorICAgICAgICAgICAgaXQtPmRpZERyYXcoKTsKKyAg
ICB9CisKICAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaERyYXdpbmdGcmFtZSgpOwogCiAgICAg
KyttX2ZyYW1lTnVtYmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4
IDVlZTAzOTlmNWI0NTcyMjVhOTFkZmY2Yjc3N2NkNWQ4YTc2ZDZhOWYuLjg5NDkxNTQyZTQzM2Zh
YWZlZjI2NmE0ZWYxYTg5ZDA4MDYwYjlhZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRqdXN0U2Ny
b2xsc0ZvclBhZ2VTY2FsZUNoYW5nZShmbG9hdCk7CiAgICAgdm9pZCB1cGRhdGVNYXhTY3JvbGxQ
b3NpdGlvbigpOwogICAgIHZvaWQgdHJhY2tEYW1hZ2VGb3JBbGxTdXJmYWNlcyhDQ0xheWVySW1w
bCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwotICAgIHZvaWQgY2FsY3VsYXRlUmVuZGVyUGFzc2VzKENDUmVuZGVyUGFzc0xpc3QmKTsK
KyAgICB2b2lkIGNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRlclBhc3NMaXN0JiwgQ0NMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgb3B0aW1pemVSZW5kZXJQ
YXNzZXMoQ0NSZW5kZXJQYXNzTGlzdCYpOwogICAgIEludFNpemUgY29udGVudFNpemUoKSBjb25z
dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9EcmF3UXVhZC5jcHAKaW5kZXggM2RlMzhlOTBmODYzZjFm
Mzg3MDg0OGNmMTA5MjM4OTlkZTk3N2MxNS4uMWY5NmUxYjEyM2QwZDE3MTJjYjk2OWM5MmYwMmZi
NTlhODkwZWFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuY3BwCkBAIC0yOSwxNiAr
MjksMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDVmlkZW9EcmF3
UXVhZD4gQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNo
YXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXll
cikKK1Bhc3NPd25QdHI8Q0NWaWRlb0RyYXdRdWFkPiBDQ1ZpZGVvRHJhd1F1YWQ6OmNyZWF0ZShj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBx
dWFkUmVjdCwgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSogdGV4dHVyZXMsIFZpZGVvRnJhbWVD
aHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDVmlkZW9EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXllcikpOwor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NWaWRlb0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwg
cXVhZFJlY3QsIHRleHR1cmVzLCBmcmFtZSwgZm9ybWF0KSk7CiB9CiAKLUNDVmlkZW9EcmF3UXVh
ZDo6Q0NWaWRlb0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIpCitDQ1ZpZGVv
RHJhd1F1YWQ6OkNDVmlkZW9EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVk
UXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NWaWRlb0xheWVySW1wbDo6VGV4
dHVyZSogdGV4dHVyZXMsIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIGZvcm1h
dCkKICAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpWaWRlb0Nv
bnRlbnQsIHF1YWRSZWN0KQotICAgICwgbV9sYXllcihsYXllcikKKyAgICAsIG1fdGV4dHVyZXMo
dGV4dHVyZXMpCisgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9mb3JtYXQoZm9ybWF0KQog
ewotICAgIEFTU0VSVChtX2xheWVyKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0RyYXdRdWFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQu
aAppbmRleCBiMThiYzU1NDFjZDJiY2Y3ZmMxMmZiZjkzYmRiMzQzODk2NGY5ODRhLi4xNjVhYTYw
ZGM0NzdiYjk5NzNiYmVhNGY0MDdhZDY2ODA2ZGMwNTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJhd1F1YWQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvRHJh
d1F1YWQuaApAQCAtMjYsMjMgKzI2LDI4IEBACiAjaWZuZGVmIENDVmlkZW9EcmF3UXVhZF9oCiAj
ZGVmaW5lIENDVmlkZW9EcmF3UXVhZF9oCiAKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIK
ICNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1w
bC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1ZpZGVvRHJhd1F1YWQgOiBwdWJsaWMgQ0NE
cmF3UXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NWaWRlb0RyYXdRdWFkKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1ZpZGVvRHJhd1F1YWQ+IGNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDVmlkZW9EcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUqIHRl
eHR1cmVzLCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQpOwogCi0gICAgQ0NM
YXllckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQorICAgIENDVmlkZW9M
YXllckltcGw6OlRleHR1cmUqIHRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlczsg
fQorICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
OyB9CisgICAgR0MzRGVudW0gZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXQ7IH0KIAog
cHJpdmF0ZToKLSAgICBDQ1ZpZGVvRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBj
b25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqKTsKKyAgICBDQ1ZpZGVvRHJhd1F1YWQoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NWaWRlb0xheWVySW1wbDo6VGV4
dHVyZSogdGV4dHVyZXMsIFZpZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCk7CiAK
LSAgICBDQ0xheWVySW1wbCogbV9sYXllcjsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJl
KiBtX3RleHR1cmVzOworICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogbV9mcmFtZTsKKyAgICBHQzNE
ZW51bSBtX2Zvcm1hdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAK
aW5kZXggZWVmMGNhM2U5NDI1YjQ2ZWEzYWE1MWM4N2FhMjQ4OWZiM2UzNDM2NC4uNzMxOWIxNTdh
Y2ZhYWIwMmFiNjhiMWZjMWYwMDk3YTZkMWUxYTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgR0MzRGVudW0gY29udmVydFZG
Q0Zvcm1hdFRvR0MzREZvcm1hdChWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBmb3JtYXQpCiAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOwogfQogCi12b2lkIEND
VmlkZW9MYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVy
KQordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjp3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
IApAQCAtMTIxLDkyICsxMjEsNDYgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBpZiAoIW1fcHJvdmlkZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUgPSBtX3Byb3Zp
ZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47
Ci0gICAgR0MzRGVudW0gZm9ybWF0ID0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdChmcmFt
ZS0+Zm9ybWF0KCkpOworICAgIG1fZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUo
KTsKIAotICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUp
IHsKLSAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKKyAgICBpZiAo
IW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBpZiAoIWNvcHlGcmFtZVRv
VGV4dHVyZXMoZnJhbWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpIHsKLSAgICAgICAgbV9wcm92
aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKKyAgICBtX2Zvcm1hdCA9IGNvbnZlcnRWRkNG
b3JtYXRUb0dDM0RGb3JtYXQobV9mcmFtZS0+Zm9ybWF0KCkpOworCisgICAgaWYgKG1fZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKSB7CisgICAgICAgIG1fcHJvdmlk
ZXItPnB1dEN1cnJlbnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICAgICAgZHJhd1lVVihsYXllclJlbmRlcmVy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAg
ICAgICAgZHJhd1JHQkEobGF5ZXJSZW5kZXJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGRyYXdOYXRpdmVUZXh0dXJl
KGxheWVyUmVuZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBD
UkFTSCgpOyAvLyBTb21lb25lIHVwZGF0ZWQgY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdCBh
Ym92ZSBidXQgdXBkYXRlIHRoaXMhCisgICAgaWYgKCFyZXNlcnZlVGV4dHVyZXMobV9mcmFtZSwg
bV9mb3JtYXQsIGxheWVyUmVuZGVyZXIpKSB7CisgICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJl
bnRGcmFtZShtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CiAgICAgfQotCi0gICAgZm9y
ICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKQot
ICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOwotICAgIG1f
cHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVy
SW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7CiAgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2lu
dCgpLCBib3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDVmlkZW9EcmF3UXVhZDo6Y3Jl
YXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsKKyAgICBxdWFkTGlzdC5hcHBl
bmQoQ0NWaWRlb0RyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgbV90
ZXh0dXJlcywgbV9mcmFtZSwgbV9mb3JtYXQpKTsKIH0KIAotYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBs
Ojpjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdD
M0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQordm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkaWREcmF3KCkKIHsKLSAgICBpZiAoZnJhbWUtPmZvcm1hdCgp
ID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkgewotICAgICAgICBtX25hdGl2
ZVRleHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJl
U2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghcmVzZXJ2ZVRleHR1cmVzKGZyYW1lLCBm
b3JtYXQsIGxheWVyUmVuZGVyZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAw
OyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkgewotICAgICAgICBBU1NFUlQoZnJh
bWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpID09IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4
dHVyZS0+c2l6ZSgpKTsKLSAgICAgICAgY29weVBsYW5lVG9UZXh0dXJlKGxheWVyUmVuZGVyZXIs
IGZyYW1lLT5kYXRhKHBsYW5lKSwgcGxhbmUpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIHBs
YW5lID0gZnJhbWUtPnBsYW5lcygpOyBwbGFuZSA8IE1heFBsYW5lczsgKytwbGFuZSkgewotICAg
ICAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1twbGFuZV07Ci0gICAgICAgIHRleHR1
cmUubV90ZXh0dXJlLmNsZWFyKCk7Ci0gICAgICAgIHRleHR1cmUubV92aXNpYmxlU2l6ZSA9IElu
dFNpemUoKTsKLSAgICB9Ci0gICAgbV9wbGFuZXMgPSBmcmFtZS0+cGxhbmVzKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7CiAK
LXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6Y29weVBsYW5lVG9UZXh0dXJlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCkKLXsK
LSAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1tpbmRleF07Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgVGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1
cmVBbGxvY2F0b3IoKTsKLSAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4
dCwgYWxsb2NhdG9yKTsKLSAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+
Zm9ybWF0KCk7Ci0gICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUtPnNp
emUoKTsKKyAgICBpZiAoIW1fcHJvdmlkZXIgfHwgIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsK
IAotICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVu
c2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAg
ICAgIG1lbWNweShtZW0sIHBsYW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhl
aWdodCgpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hS
T01JVU0obWVtKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgbWFwVGV4U3ViSW1hZ2Uy
RENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4U3ViSW1hZ2UyRAotICAgICAg
ICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVzIGFzIG1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTSwgb25lCi0gICAgICAgIC8vIGluIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgYW5v
dGhlciB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1
YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lv
bnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgcGxhbmUpKTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBwbGFu
ZSA9IDA7IHBsYW5lIDwgbV9mcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpCisgICAgICAgIG1fdGV4
dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7CisgICAgbV9wcm92aWRlci0+cHV0
Q3VycmVudEZyYW1lKG1fZnJhbWUpOwogfQogCi1zdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJs
ZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCitJ
bnRTaXplIENDVmlkZW9MYXllckltcGw6OmNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0Zy
YW1lQ2hyb21pdW0qIGZyYW1lLCB1bnNpZ25lZCBwbGFuZSkKIHsKICAgICBpbnQgdmlzaWJsZVdp
ZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKICAgICBpbnQgdmlzaWJsZUhlaWdodCA9IGZyYW1l
LT5oZWlnaHQocGxhbmUpOwpAQCAtMjU5LDgxICsyMTMsNiBAQCBib29sIENDVmlkZW9MYXllcklt
cGw6OnJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNE
ZW51bQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdZ
VVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAotewotICAgIGNv
bnN0IFlVVlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyWVVWUHJv
Z3JhbSgpOwotICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCk7Ci0gICAgY29uc3QgVGV4dHVyZSYgeVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVD
aHJvbWl1bTo6eVBsYW5lXTsKLSAgICBjb25zdCBUZXh0dXJlJiB1VGV4dHVyZSA9IG1fdGV4dHVy
ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOwotICAgIGNvbnN0IFRleHR1cmUmIHZUZXh0
dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07Ci0KLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkp
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTMpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVy
ZUlkKCkpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0t
PnByb2dyYW0oKSkpOwotCi0gICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oeVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlUZXh0dXJlLm1fdGV4
dHVyZS0+c2l6ZSgpLndpZHRoKCk7Ci0gICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXpl
cyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgotICAgIGZsb2F0IHV2
V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS5tX3Zpc2libGVT
aXplLndpZHRoKCkpIC8gdVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlX
aWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lk
dGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOwotCi0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnlU
ZXh0dXJlTG9jYXRpb24oKSwgMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
MWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS51VGV4dHVyZUxvY2F0aW9uKCksIDIpKTsKLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkudlRleHR1cmVMb2NhdGlvbigpLCAzKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dW5pZm9ybU1hdHJpeDNmdihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNjTWF0cml4TG9jYXRp
b24oKSwgMCwgY29uc3RfY2FzdDxmbG9hdCo+KHl1djJSR0IpLCAxKSk7Ci0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm0zZnYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS55dXZBZGpM
b2NhdGlvbigpLCBjb25zdF9jYXN0PGZsb2F0Kj4oeXV2QWRqdXN0KSwgMSkpOwotCi0gICAgbGF5
ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndp
ZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLCBGbG9hdFF1YWQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigp
Lm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLQotICAgIC8vIFJlc2V0IGFjdGl2ZSB0ZXh0dXJl
IGJhY2sgdG8gdGV4dHVyZSAwLgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBQ
cm9ncmFtPgotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUHJvZ3JhbSogcHJvZ3JhbSwgZmxvYXQgd2lkdGhTY2Fs
ZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLQotICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9u
KCksIDAsIDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCks
IDApKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9y
bSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwg
bGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtMSk7Ci19Ci0KLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAotewotICAgIGNvbnN0IFJHQkFQcm9n
cmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7Ci0g
ICAgY29uc3QgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVt
OjpyZ2JQbGFuZV07Ci0gICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZs
b2F0Pih0ZXh0dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB0ZXh0dXJlLm1fdGV4dHVyZS0+
c2l6ZSgpLndpZHRoKCk7Ci0gICAgZHJhd0NvbW1vbihsYXllclJlbmRlcmVyLCBwcm9ncmFtLCB3
aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpOwotfQotCi12
b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdOYXRpdmVUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKLXsKLSAgICBjb25zdCBOYXRpdmVUZXh0dXJlUHJv
Z3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJv
Z3JhbSgpOwotICAgIGRyYXdDb21tb24obGF5ZXJSZW5kZXJlciwgcHJvZ3JhbSwgMSwgbV9uYXRp
dmVUZXh0dXJlSWQpOwotfQotCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CiB7CiAgICAgd3JpdGVJbmRl
bnQodHMsIGluZGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggMTgyZjdi
NTgyN2M5MWNiZmZlZTVkM2JhZWFkMTA4NTFmNmZmYmE5NS4uMzlmYzJmNmMwODNkYWRmY2UzY2Uz
ZTdhYWFmMGEyMmJhOWFjMjg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAt
NDYsNDggKzQ2LDQ2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdmlydHVhbCB+Q0NWaWRlb0xheWVy
SW1wbCgpOwogCisgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSopOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiwgY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpOwogCiAgICAgdHlw
ZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50
U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gUkdCQVByb2dyYW07CiAgICAgdHlwZWRlZiBQcm9ncmFt
QmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoLCBGcmFnbWVudFNoYWRlcllVVlZp
ZGVvPiBZVVZQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVy
UG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IE5hdGl2ZVRl
eHR1cmVQcm9ncmFtOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFt
JiwgaW50IGluZGVudCkgY29uc3Q7CiAKKyAgICBNdXRleCYgcHJvdmlkZXJNdXRleCgpIHsgcmV0
dXJuIG1fcHJvdmlkZXJNdXRleDsgfQorICAgIFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIo
KSBjb25zdCB7IHJldHVybiBtX3Byb3ZpZGVyOyB9CisKICAgICAvLyBWaWRlb0ZyYW1lUHJvdmlk
ZXI6OkNsaWVudCBpbXBsZW1lbnRhdGlvbiAoY2FsbGFibGUgb24gYW55IHRocmVhZCkuCiAgICAg
dmlydHVhbCB2b2lkIHN0b3BVc2luZ1Byb3ZpZGVyKCk7CiAKKyAgICBzdGF0aWMgY29uc3QgZmxv
YXQgeXV2MlJHQls5XTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOworCisg
ICAgc3RydWN0IFRleHR1cmUgeworICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4
dHVyZTsKKyAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOworICAgIH07CisgICAgZW51bSB7
IE1heFBsYW5lcyA9IDMgfTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJ
bXBsKGludCwgVmlkZW9GcmFtZVByb3ZpZGVyKik7CiAKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21w
dXRlVmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgdW5zaWduZWQgcGxhbmUp
OwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJl
dHVybiAiVmlkZW9MYXllciI7IH0KIAotICAgIGJvb2wgY29weUZyYW1lVG9UZXh0dXJlcyhjb25z
dCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJv
bWl1bSopOwotICAgIHZvaWQgY29weVBsYW5lVG9UZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1
bSosIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpOwogICAgIGJvb2wgcmVzZXJ2ZVRleHR1
cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5k
ZXJlckNocm9taXVtKik7Ci0gICAgdm9pZCBkcmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSop
IGNvbnN0OwotICAgIHZvaWQgZHJhd1JHQkEoTGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7
Ci0gICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIGRyYXdDb21tb24oTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiwgUHJvZ3JhbSosIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3Jt
M0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdDsKIAogICAgIE11dGV4IG1fcHJvdmlkZXJNdXRleDsg
Ly8gR3VhcmRzIG1fcHJvdmlkZXIgYmVsb3cuCiAgICAgVmlkZW9GcmFtZVByb3ZpZGVyKiBtX3By
b3ZpZGVyOwogCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1djJSR0JbOV07Ci0gICAgc3RhdGlj
IGNvbnN0IGZsb2F0IHl1dkFkanVzdFszXTsKLQotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAg
ICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7Ci0gICAgICAgIEludFNpemUgbV92
aXNpYmxlU2l6ZTsKLSAgICB9OwotICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07CiAgICAgVGV4
dHVyZSBtX3RleHR1cmVzW01heFBsYW5lc107Ci0gICAgaW50IG1fcGxhbmVzOwogCi0gICAgUGxh
dGZvcm0zRE9iamVjdCBtX25hdGl2ZVRleHR1cmVJZDsKLSAgICBJbnRTaXplIG1fbmF0aXZlVGV4
dHVyZVNpemU7CisgICAgVmlkZW9GcmFtZUNocm9taXVtKiBtX2ZyYW1lOworICAgIEdDM0RlbnVt
IG1fZm9ybWF0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCBmNTk4OTNkZTkwNjQxOGY4
Y2JkNzU3NDBhZTI5MzllMjNjYzIzNTBhLi44MjA3MzNiNDcyMDhjNmVjZmYxN2M4OGEyNTJiM2Rk
NzhkNmZkZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMjc2LDYgKzI3Niw2MyBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHBhZ2VTY2FsZUFuaW1hdGlvbikKICAgICB9CiB9CiAK
K2NsYXNzIERpZERyYXdDaGVja0xheWVyIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaWREcmF3Q2hlY2tMYXllcj4gY3JlYXRlKGludCBpZCkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IERpZERyYXdDaGVja0xheWVyKGlkKSk7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBkaWREcmF3KCkKKyAgICB7CisgICAgICAgIG1fZGlkRHJhd0NhbGxlZCA9IHRy
dWU7CisgICAgfQorCisgICAgYm9vbCBkaWREcmF3Q2FsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
aWREcmF3Q2FsbGVkOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRGlkRHJhd0NoZWNrTGF5
ZXIoaW50IGlkKQorICAgICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICAgICAsIG1fZGlkRHJh
d0NhbGxlZChmYWxzZSkKKyAgICB7CisgICAgICAgIHNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQo
MCwgMCkpOworICAgICAgICBzZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKKyAgICAgICAgc2V0
RHJhd3NDb250ZW50KHRydWUpOworICAgIH0KKworICAgIGJvb2wgbV9kaWREcmF3Q2FsbGVkOwor
fTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkaWREcmF3Q2FsbGVkT25BbGxM
YXllcnMpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNEKCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVz
ZU9uVGhpc1RocmVhZCk7CisgICAgbV9ob3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIo
Y29udGV4dCk7CisgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMTAsIDEw
KSk7CisKKyAgICBSZWZQdHI8RGlkRHJhd0NoZWNrTGF5ZXI+IHJvb3QgPSBEaWREcmF3Q2hlY2tM
YXllcjo6Y3JlYXRlKDApOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290KTsKKwor
ICAgIFJlZlB0cjxEaWREcmF3Q2hlY2tMYXllcj4gbGF5ZXIxID0gRGlkRHJhd0NoZWNrTGF5ZXI6
OmNyZWF0ZSgxKTsKKyAgICByb290LT5hZGRDaGlsZChsYXllcjEpOworCisgICAgUmVmUHRyPERp
ZERyYXdDaGVja0xheWVyPiBsYXllcjIgPSBEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIpOwor
ICAgIGxheWVyMS0+YWRkQ2hpbGQobGF5ZXIyKTsKKworICAgIGxheWVyMS0+c2V0T3BhY2l0eSgw
LjMpOworICAgIGxheWVyMS0+c2V0UHJlc2VydmVzM0QoZmFsc2UpOworCisgICAgRVhQRUNUX0ZB
TFNFKHJvb3QtPmRpZERyYXdDYWxsZWQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGxheWVyMS0+ZGlk
RHJhd0NhbGxlZCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXIyLT5kaWREcmF3Q2FsbGVkKCkp
OworCisgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycygpOworCisgICAgRVhQRUNUX1RSVUUocm9v
dC0+ZGlkRHJhd0NhbGxlZCgpKTsKKyAgICBFWFBFQ1RfVFJVRShsYXllcjEtPmRpZERyYXdDYWxs
ZWQoKSk7CisgICAgRVhQRUNUX1RSVUUobGF5ZXIyLT5kaWREcmF3Q2FsbGVkKCkpOworCisgICAg
RVhQRUNUX05FKHJvb3QtPnJlbmRlclN1cmZhY2UoKSwgbGF5ZXIxLT5yZW5kZXJTdXJmYWNlKCkp
OworICAgIEVYUEVDVF9UUlVFKCEhbGF5ZXIxLT5yZW5kZXJTdXJmYWNlKCkpOworfQorCiBjbGFz
cyBCbGVuZFN0YXRlVHJhY2tlckNvbnRleHQ6IHB1YmxpYyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0QgewogcHVibGljOgogICAgIEJsZW5kU3RhdGVUcmFja2VyQ29udGV4dCgpIDogbV9ibGVuZChm
YWxzZSkgeyB9CkBAIC01MDcsNyArNTY0LDYgQEAgcHJpdmF0ZToKIGNsYXNzIEZha2VEcmF3YWJs
ZUNDTGF5ZXJJbXBsOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgogICAgIGV4cGxpY2l0
IEZha2VEcmF3YWJsZUNDTGF5ZXJJbXBsKGludCBpZCkgOiBDQ0xheWVySW1wbChpZCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikgeyB9
CiB9OwogCiAvLyBPbmx5IHJlc2hhcGUgd2hlbiB3ZSBrbm93IHdlIGFyZSBnb2luZyB0byBkcmF3
LiBPdGhlcndpc2UsIHRoZSByZXNoYXBlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>