<?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>54047</bug_id>
          
          <creation_ts>2011-02-08 17:02:19 -0800</creation_ts>
          <short_desc>[chromium] Separate the &quot;update&quot; and &quot;draw&quot; portions of LayerRendererChromium&apos;s drawLayers function</short_desc>
          <delta_ts>2011-03-07 12:22:13 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54315</dependson>
    
    <dependson>55013</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>347819</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-08 17:02:19 -0800</bug_when>
    <thetext>[chromium] Separate the &quot;update&quot; and &quot;draw&quot; portions of LayerRendererChromium&apos;s drawLayers function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347820</commentid>
    <comment_count>1</comment_count>
      <attachid>81718</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-08 17:03:08 -0800</bug_when>
    <thetext>Created attachment 81718
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347821</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-08 17:05:32 -0800</bug_when>
    <thetext>This is still very rough, but it shows where I&apos;m heading.  The goal here is to move all of the state that is only used for drawing over to the CompCCLayer (aka CCLayerPres or whatever we call it), which is used for actually compositing and will eventually live in the compositor thread; and to split up LayerRendererChromium&apos;s drawLayers() call into two pieces one that updates each layer (potentially calling into the rest of WebKit to paint) and the second that actually issues GL calls to composite the scene.  At this point the state split is not very clean at all but the codepaths are starting to get there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347872</commentid>
    <comment_count>3</comment_count>
      <attachid>81718</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-02-08 18:04:47 -0800</bug_when>
    <thetext>Comment on attachment 81718
WIP

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

&gt; Source/WebCore/ChangeLog:55
&gt; +        * platform/graphics/chromium/cc/CompCCLayer.cpp: Added.

What does CompCCLayer stand for? I parse that as &quot;Compositor Chromium Compositor Layer&quot;.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:259
&gt; +    // ------======== divide. below here is GL stuff, above here is WebKit stuff =======------

Well, except for that pesky scrollbar paint later. but that&apos;s going to have to happen on the compositor thread anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347879</commentid>
    <comment_count>4</comment_count>
      <attachid>81718</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-02-08 18:23:07 -0800</bug_when>
    <thetext>Comment on attachment 81718
WIP

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

&gt; Source/WebCore/WebCore.gypi:2634
&gt; +            &apos;platform/graphics/chromium/cc/CompCCLayer.cpp&apos;,

Possible better names:
1.  CCLayerRenderer // eg ContentLayerRenderer, WebGLLayerRenderer
2.  CCLayerBackend  // eg ContentLayerBackend, WebGLLayerBackend
My vote is for 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347883</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-08 18:37:45 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:259
&gt; &gt; +    // ------======== divide. below here is GL stuff, above here is WebKit stuff =======------
&gt; 
&gt; Well, except for that pesky scrollbar paint later. but that&apos;s going to have to happen on the compositor thread anyway.

The comment is more aspirational than descriptive currently :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348702</commentid>
    <comment_count>6</comment_count>
      <attachid>81718</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-02-09 16:55:22 -0800</bug_when>
    <thetext>Comment on attachment 81718
WIP

Looks good.  Thanks for cleaning up the accessors!  The RenderSurfaceChromium is also mostly applicable to the compositor so it should probably get a CC treatment as well (although it could be done in a separate step).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349559</commentid>
    <comment_count>7</comment_count>
      <attachid>82086</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-10 18:47:27 -0800</bug_when>
    <thetext>Created attachment 82086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349563</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-10 18:54:16 -0800</bug_when>
    <thetext>The most recent patch feels a lot cleaner to me.  I&apos;ve moved most of the drawing state over to exist only on the compositor&apos;s layers (which is called CCLayerImpl now) and made a cleaner split between the &apos;update&apos; phase and the &apos;composite&apos; phase.  LayerRendererChromium::updateLayersRecursive() now spends a decent bit amount of effort copying state from LayerChromiums to CCLayerImpls.

I&apos;d like to move the code that calls updateContentsIfDirty() on each LayerChromium to happen before the draw state is updated, but unfortunately the large content layer support currently relies on being able to see the up-to-date draw transform and other state.  I think enne&apos;s tiling patch will fix this dependency (by eliminating the current large layer concept).  Once that is done I should be able to decouple the update and composite steps more thoroughly.

I&apos;m not sure whether the mask and replica layers belong to the CCLayerImpl side of the world or should stay on the LayerChromium side of the world - it kind of feels like they are draw-time only concepts and should move, but I haven&apos;t looked in detail.  I also think that RenderSurfaceChromium should move over to the CCLayerImpl side of the world somehow but haven&apos;t started on it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349564</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-10 18:55:47 -0800</bug_when>
    <thetext>I&apos;m also still relying on the LayerChromium tree for structure - CCLayerImpl has a superlayer() accessor that goes through LayerChromium but there&apos;s no way to iterate through the children of a CCLayerImpl yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349636</commentid>
    <comment_count>10</comment_count>
      <attachid>82101</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-10 21:49:38 -0800</bug_when>
    <thetext>Created attachment 82101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350032</commentid>
    <comment_count>11</comment_count>
      <attachid>82101</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-02-11 14:20:55 -0800</bug_when>
    <thetext>Comment on attachment 82101
Patch

Summarizing a verbal conversation, iirw, the flow for a new frame is:
- LayerChromium::PaintContents (as in, WebKit paint) (on main thread)
- LayerChromium::Commit (called on lay
- CCLayerImpl::UpdateTransforms()
- CCLayerImpl::Draw()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350070</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-11 15:00:56 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 82101 [details])
&gt; Summarizing a verbal conversation, iirw, the flow for a new frame is:
&gt; - LayerChromium::PaintContents (as in, WebKit paint) (on main thread)
&gt; - LayerChromium::Commit (called on lay
&gt; - CCLayerImpl::UpdateTransforms()
&gt; - CCLayerImpl::Draw()

Sounds right.

I&apos;m going to start landing bits of this as separate patches to keep reviewers sane, then flip review? once this patch is small enough to digest in reasonable isolation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355438</commentid>
    <comment_count>13</comment_count>
      <attachid>83352</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-22 11:33:43 -0800</bug_when>
    <thetext>Created attachment 83352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355442</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-22 11:35:01 -0800</bug_when>
    <thetext>Updated to show where I&apos;m going.  I&apos;ll break bits of this off to smaller patches to review+land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357279</commentid>
    <comment_count>15</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-02-24 12:35:45 -0800</bug_when>
    <thetext>Me likes. Thanks for landing this James.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358151</commentid>
    <comment_count>16</comment_count>
      <attachid>83867</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-02-25 13:30:43 -0800</bug_when>
    <thetext>Created attachment 83867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360151</commentid>
    <comment_count>17</comment_count>
      <attachid>83867</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-01 13:02:00 -0800</bug_when>
    <thetext>Comment on attachment 83867
Patch

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

Looks very good.  Just a couple of smaller comments.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:278
&gt; +    // Unfortunately, updateLayersRecursive() currently both updates the layers and updates the draw state

Is this comment stale now? 

&quot;updateLayersRecursive()&quot; -&gt; &quot;updateDrawStateAndRenderSurfaces()&quot; ? 

Also I&apos;m not sure what you mean by &quot;updates the layers&quot;  ?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:287
&gt; +void LayerRendererChromium::drawLayers(const Vector&lt;CCLayerImpl*&gt;&amp; renderSurfaceLayerList)

These functions are now getting long and complex.  I think they would benefit from a brief comment blurb to describe what each of them does.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:695
&gt; +void LayerRendererChromium::paintLayersRecursive(LayerChromium* layer)

Should this be called something like:  &quot;updateLayerContentsRecursive&quot; to avoid confusion between &quot;painting&quot; and rendering?

&gt; Source/WebKit/chromium/ChangeLog:5
&gt; +        [chromium] Separate the &amp;quot;update&amp;quot; and &amp;quot;draw&amp;quot; portions of LayerRendererChromium&amp;apos;s drawLayers function

&amp;quot; -&gt; &quot;,  &amp;apos; -&gt; &apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360266</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-01 14:58:39 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 83867 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83867&amp;action=review
&gt; &quot;updateLayersRecursive()&quot; -&gt; &quot;updateDrawStateAndRenderSurfaces()&quot; ? 
&gt; 
&gt; Also I&apos;m not sure what you mean by &quot;updates the layers&quot;  ?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:695
&gt; &gt; +void LayerRendererChromium::paintLayersRecursive(LayerChromium* layer)
&gt; 
&gt; Should this be called something like:  &quot;updateLayerContentsRecursive&quot; to avoid confusion between &quot;painting&quot; and rendering?

I&apos;m trying to make a stronger distinction between a few different ops:

&quot;paint&quot; - update the contents of each layer into the appropriate intermediate form for later uploading.  For content layers, this means doing a paint() into a transfer buffer of some form, but it could conceivably mean something like build a display list.  For texture-backed layers it means do the swapBuffers() equivalent for that type.  Always runs on the main thread.

&quot;update&quot; - synchronize the properties (transforms, opacity, etc) of each layer to their compositor implementation layer equivalent (CCLayerImpl, for now at least).  Has to be synchronized carefully :).

&quot;draw&quot; - compositor-side operation to actually issue the GraphicsContext3D calls in order to composite the frame.  Could also be called &quot;composite&quot; but that term is probably too confusing in this context.

Does that make sense?  It&apos;s a little confusing now because all three operations are taking place in the same file within a few lines of each other, but that will be less true as the code is divided up a bit more.  The ideal progression would be paint, update, then draw but currently I have to do update, paint, draw because part of the state that the &quot;update&quot; code currently updates RenderSurfaceChromiums (which is valid, IMO) and the &quot;paint&quot; operation for content layers depends on the RenderSurfaces and draw transforms (which seems wrong IMO).

I can try adding some more comments but I think the confusion has more to do with code structure than naming.  With a clearer structure the vocabulary wouldn&apos;t matter so much since the control flow would be easier to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360445</commentid>
    <comment_count>19</comment_count>
      <attachid>83867</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-01 17:56:55 -0800</bug_when>
    <thetext>Comment on attachment 83867
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:695
&gt;&gt;&gt; +void LayerRendererChromium::paintLayersRecursive(LayerChromium* layer)
&gt;&gt; 
&gt;&gt; Should this be called something like:  &quot;updateLayerContentsRecursive&quot; to avoid confusion between &quot;painting&quot; and rendering?
&gt; 
&gt; I&apos;m trying to make a stronger distinction between a few different ops:
&gt; 
&gt; &quot;paint&quot; - update the contents of each layer into the appropriate intermediate form for later uploading.  For content layers, this means doing a paint() into a transfer buffer of some form, but it could conceivably mean something like build a display list.  For texture-backed layers it means do the swapBuffers() equivalent for that type.  Always runs on the main thread.
&gt; 
&gt; &quot;update&quot; - synchronize the properties (transforms, opacity, etc) of each layer to their compositor implementation layer equivalent (CCLayerImpl, for now at least).  Has to be synchronized carefully :).
&gt; 
&gt; &quot;draw&quot; - compositor-side operation to actually issue the GraphicsContext3D calls in order to composite the frame.  Could also be called &quot;composite&quot; but that term is probably too confusing in this context.
&gt; 
&gt; Does that make sense?  It&apos;s a little confusing now because all three operations are taking place in the same file within a few lines of each other, but that will be less true as the code is divided up a bit more.  The ideal progression would be paint, update, then draw but currently I have to do update, paint, draw because part of the state that the &quot;update&quot; code currently updates RenderSurfaceChromiums (which is valid, IMO) and the &quot;paint&quot; operation for content layers depends on the RenderSurfaces and draw transforms (which seems wrong IMO).
&gt; 
&gt; I can try adding some more comments but I think the confusion has more to do with code structure than naming.  With a clearer structure the vocabulary wouldn&apos;t matter so much since the control flow would be easier to follow.

That&apos;s a fine distinction however it&apos;s a bit inconsistent with how the relevant layer methods are called.  Notice that this &quot;paint&quot; method only calls &quot;updateContents&quot; methods on the layers. 

On that topic, I also find that &quot;updateDrawState&quot; is a bit confusing as it contains both the words &quot;update&quot; and &quot;draw&quot;.

How about:
paint -&gt; updateContents
update -&gt; updateProperties
draw stays draw</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361108</commentid>
    <comment_count>20</comment_count>
      <attachid>84474</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-02 15:08:26 -0800</bug_when>
    <thetext>Created attachment 84474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361113</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-02 15:11:26 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; That&apos;s a fine distinction however it&apos;s a bit inconsistent with how the relevant layer methods are called.  Notice that this &quot;paint&quot; method only calls &quot;updateContents&quot; methods on the layers. 
&gt; 
&gt; On that topic, I also find that &quot;updateDrawState&quot; is a bit confusing as it contains both the words &quot;update&quot; and &quot;draw&quot;.
&gt; 
&gt; How about:
&gt; paint -&gt; updateContents
&gt; update -&gt; updateProperties
&gt; draw stays draw

Good feedback as always :).  I&apos;ve updated the patch so the flow is now:

updateRootLayerContents()
updateRootLayerScrollbars() (note: for now, scrollbars are treated as a special type of contents)
update root RenderSurface
updatePropertiesAndRenderSurfaces()
updateContentsRecursive()
drawLayers()


The ideal flow would be closer to:

(main thread)
updateRootLayerContents()
updateContentsRecursive()

(with synchronization)
updateProperties()

(compositor side only)
updateRenderSurfaces()
drawLayers()


Untangling the property updates and RenderSurface updates and fixing the ordering will be my next task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362654</commentid>
    <comment_count>22</comment_count>
      <attachid>84474</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-04 12:06:19 -0800</bug_when>
    <thetext>Comment on attachment 84474
Patch

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

Looks good!

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:436
&gt; +void LayerRendererChromium::updatePropertiesAndRenderSurfaces(LayerChromium* layer, const TransformationMatrix&amp; parentMatrix, Vector&lt;CCLayerImpl*&gt;&amp; renderSurfaceLayerList, Vector&lt;CCLayerImpl*&gt;&amp; layerList)

nit: Maybe rename to: updateLayerAndRenderSurfaceProperties since we don&apos;t actually update rendersurface contents here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362683</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-04 13:40:24 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 84474 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84474&amp;action=review
&gt; 
&gt; Looks good!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:436
&gt; &gt; +void LayerRendererChromium::updatePropertiesAndRenderSurfaces(LayerChromium* layer, const TransformationMatrix&amp; parentMatrix, Vector&lt;CCLayerImpl*&gt;&amp; renderSurfaceLayerList, Vector&lt;CCLayerImpl*&gt;&amp; layerList)
&gt; 
&gt; nit: Maybe rename to: updateLayerAndRenderSurfaceProperties since we don&apos;t actually update rendersurface contents here?

I think this rename will be a little unnecessary since updatePropertiesAndRenderSurfaces() is going to get gutted in a patch in the very near future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363379</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-07 09:44:18 -0800</bug_when>
    <thetext>ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363387</commentid>
    <comment_count>25</comment_count>
      <attachid>84474</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-07 09:58:23 -0800</bug_when>
    <thetext>Comment on attachment 84474
Patch

Only scanned the review; rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363442</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-07 11:37:48 -0800</bug_when>
    <thetext>Committed r80482: &lt;http://trac.webkit.org/changeset/80482&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363488</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-07 12:22:13 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80482 might have broken Qt Linux Release
The following tests are not passing:
fast/viewport/viewport-100.html
fast/viewport/viewport-101.html
fast/viewport/viewport-102.html
fast/viewport/viewport-103.html
fast/viewport/viewport-104.html
fast/viewport/viewport-105.html
fast/viewport/viewport-106.html
fast/viewport/viewport-107.html
fast/viewport/viewport-108.html
fast/viewport/viewport-109.html
fast/viewport/viewport-110.html
fast/viewport/viewport-111.html
fast/viewport/viewport-112.html
fast/viewport/viewport-113.html
fast/viewport/viewport-114.html
fast/viewport/viewport-115.html
fast/viewport/viewport-116.html
fast/viewport/viewport-117.html
fast/viewport/viewport-118.html
fast/viewport/viewport-129.html
fast/viewport/viewport-29.html
fast/viewport/viewport-30.html
fast/viewport/viewport-31.html
fast/viewport/viewport-32.html
fast/viewport/viewport-35.html
fast/viewport/viewport-36.html
fast/viewport/viewport-38.html
fast/viewport/viewport-39.html
fast/viewport/viewport-40.html
fast/viewport/viewport-41.html
fast/viewport/viewport-42.html
fast/viewport/viewport-43.html
fast/viewport/viewport-44.html
fast/viewport/viewport-47.html
fast/viewport/viewport-48.html
fast/viewport/viewport-49.html
fast/viewport/viewport-61.html
fast/viewport/viewport-62.html
fast/viewport/viewport-63.html
fast/viewport/viewport-64.html
fast/viewport/viewport-66.html
fast/viewport/viewport-67.html
fast/viewport/viewport-68.html
fast/viewport/viewport-69.html
fast/viewport/viewport-70.html
fast/viewport/viewport-71.html
fast/viewport/viewport-72.html
fast/viewport/viewport-73.html
fast/viewport/viewport-74.html
fast/viewport/viewport-75.html
fast/viewport/viewport-76.html
fast/viewport/viewport-77.html
fast/viewport/viewport-78.html
fast/viewport/viewport-79.html
fast/viewport/viewport-80.html
fast/viewport/viewport-81.html
fast/viewport/viewport-83.html
fast/viewport/viewport-85.html
fast/viewport/viewport-88.html
fast/viewport/viewport-90.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81718</attachid>
            <date>2011-02-08 17:03:08 -0800</date>
            <delta_ts>2011-02-10 18:47:25 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-54047-20110208170307.patch</filename>
            <type>text/plain</type>
            <size>57179</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYjJjZjhlM2Y3NTJhMDRjMjNmOWY1MDY4ZDA0NjA0YTRmZWJkOWJmLi44
NDcxOWI1NDc5ODgyNDM1ZGE1ZTIyMDk2ZDIwMWM2NzM5YzlmZDEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTIgQEAKKzIwMTEtMDItMDggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFNlcGFyYXRlIHRoZSAidXBkYXRlIiBhbmQgImRyYXciIHBvcnRpb25zIG9mIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSdzIGRyYXdMYXllcnMgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDQ3CisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3Jk
ZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3JkZXJXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb21wQ0NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpsYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06OnJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xl
YXJSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdE
ZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3RGVwdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd09wYWNpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RHJhd09wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06OnNldERvdWJsZVNpZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3VHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJlTGF5
ZXJaKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9v
dExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jv
b3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVM
YXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpzZXRDb21wb3NpdGVPZmZzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NvbXBDQ0xheWVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb21wQ0NMYXllcjo6Q29tcENDTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcENDTGF5ZXI6On5Db21wQ0NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXll
cjo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6Y3Jl
YXRlUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpnZXREcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wQ0NMYXllcjo6ZHJhd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9Db21wQ0NMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBDQ0xheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnNldERl
YnVnQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRlYnVnQm9y
ZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnNldERlYnVnQm9yZGVy
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRlYnVnQm9yZGVyV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmxheWVyUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcENDTGF5ZXI6OmNsZWFyUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wQ0NMYXllcjo6ZHJhd0RlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpz
ZXREcmF3RGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRyYXdPcGFjaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpzZXREcmF3T3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcENDTGF5ZXI6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBD
Q0xheWVyOjp0YXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpkb3VibGVTaWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2V0RG91
YmxlU2lkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBDQ0xheWVyOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpzZXREcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpk
cmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpzZXRE
cmF3YWJsZUNvbnRlbnRSZWN0KToKKwogMjAxMS0wMi0wNyAgTHVjYXMgRm9yc2NobGVyICA8bGZv
cnNjaGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggMzc0MTFlMGE0MWE5MGUxMmI2MzJjYmMyNTA1ZDYxYzliNWFiZjE4
YS4uNzA1ZjQ5Mjk3OTdmYzk3OTZlYTE5YWZlZTYwMWMyMTBiOWM2Njk5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMjYzMSw2ICsyNjMxLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WRE1YUGFyc2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9Db21wQ0NMYXllci5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NvbXBDQ0xheWVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNv
dXJjZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBhMzhmNmJk
MjEyNjkwYTI4Zjk4MzhkYjg5NjM1YTg0MTRjYjZkNzdlLi5jY2NjNTM1MmI3MWYwZGUwNmJkNWQw
NTBlMWJhZTY3MWQ3MWMyMzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
CkBAIC0xNTQsOSArMTU0LDkgQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVxdWlyZXND
bGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0CiAgICAgLy8gb25lIG9mIHRoZSBsYXllcidzIGRpbWVu
c2lvbnMgaXMgbGFyZ2VyIHRoYW4gMjAwMCBwaXhlbHMgb3IgdGhlIHNpemUgb2YKICAgICAvLyBz
dXJmYWNlIGl0J3MgcmVuZGVyaW5nIGludG8uIFRoaXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSB1
bnRpbCBsYXllciB0aWxpbmcgaXMgaW1wbGVtZW50ZWQuCiAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhMYXllclNpemUgPSAyMDAwOwotICAgIHJldHVybiAobV9ib3VuZHMud2lkdGgoKSA+IG1heCht
YXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS53aWR0aCgp
KQotICAgICAgICAgICAgfHwgbV9ib3VuZHMuaGVpZ2h0KCkgPiBtYXgobWF4TGF5ZXJTaXplLCBt
X3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkuaGVpZ2h0KCkpCi0gICAgICAgICAg
ICB8fCAhbGF5ZXJSZW5kZXJlcigpLT5jaGVja1RleHR1cmVTaXplKG1fYm91bmRzKSk7CisgICAg
cmV0dXJuIChib3VuZHMoKS53aWR0aCgpID4gbWF4KG1heExheWVyU2l6ZSwgdGFyZ2V0UmVuZGVy
U3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLndpZHRoKCkpCisgICAgICAgICAgICB8fCBib3VuZHMo
KS5oZWlnaHQoKSA+IG1heChtYXhMYXllclNpemUsIHRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29u
dGVudFJlY3QoKS5oZWlnaHQoKSkKKyAgICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNo
ZWNrVGV4dHVyZVNpemUoYm91bmRzKCkpKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAgIEludFJlY3QgdXBk
YXRlUmVjdDsKICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7CiAgICAgSW50U2l6ZSBi
aXRtYXBTaXplOwotICAgIEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3Vu
ZHMpOworICAgIEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOwog
CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGlt
cGxlbWVudGVkLgogICAgIGlmIChyZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkpIHsKQEAgLTE4
NywxMCArMTg3LDEwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
SWZEaXJ0eSgpCiAgICAgICAgIH0KIAogICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHJlZ2lvbiBv
ZiB0aGlzIGxheWVyIHRoYXQgaXMgY3VycmVudGx5IHZpc2libGUuCi0gICAgICAgIGNvbnN0IElu
dFJlY3QgY2xpcFJlY3QgPSBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Cisg
ICAgICAgIGNvbnN0IEludFJlY3QgY2xpcFJlY3QgPSB0YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNv
bnRlbnRSZWN0KCk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5U
cmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtKCk7Ci0gICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3Jt
LnRyYW5zbGF0ZTNkKC0wLjUgKiBtX2JvdW5kcy53aWR0aCgpLCAtMC41ICogbV9ib3VuZHMuaGVp
Z2h0KCksIDApOworICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41
ICogYm91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCAwKTsKIAogICAg
ICAgICAvLyBGb3Igbm93IHdlIGFwcGx5IHRoZSBsYXJnZSBsYXllciB0cmVhdG1lbnQgb25seSBm
b3IgbGF5ZXJzIHRoYXQgYXJlIGVpdGhlciB1bnRyYW5zZm9ybWVkCiAgICAgICAgIC8vIG9yIGFy
ZSBwdXJlbHkgdHJhbnNsYXRlZC4gVGhlaXIgbWF0cml4IGlzIGV4cGVjdGVkIHRvIGJlIGludmVy
dGlibGUuCkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJn
ZXRUb0xheWVyTWF0cml4ID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpOwogICAgICAg
ICBJbnRSZWN0IHZpc2libGVSZWN0SW5MYXllckNvb3JkcyA9IHRhcmdldFRvTGF5ZXJNYXRyaXgu
bWFwUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkp
OworICAgICAgICB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwg
MCwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpKTsKIAogICAgICAgICAvLyBG
b3Igbm9ybWFsIGxheWVycywgdGhlIGNlbnRlciBvZiB0aGUgdGV4dHVyZSBjb3JyZXNwb25kcyB3
aXRoIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgogICAgICAgICAvLyBJbiBsYXJnZSBsYXllcnMg
dGhlIGNlbnRlciBvZiB0aGUgdGV4dHVyZSBpcyB0aGUgY2VudGVyIG9mIHRoZSB2aXNpYmxlIHJl
Z2lvbiBzbyB3ZSBoYXZlCkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgcmVxdWlyZWRUZXh0dXJlU2l6
ZSA9IHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5zaXplKCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgZGlydHlSZWN0ID0gSW50UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgICAgIHJlcXVpcmVkVGV4
dHVyZVNpemUgPSBtX2JvdW5kczsKKyAgICAgICAgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGJvdW5k
cygpOwogICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0
aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKICAgICAgICAgLy8gY29udGVudHMgb2YgdGhl
IGxheWVyLgogICAgICAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4
dHVyZS0+aXNWYWxpZChyZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSkpCkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIHN2
LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0
dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybSgpLCBtX2JvdW5kcy53aWR0aCgp
LCBtX2JvdW5kcy5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3VHJhbnNm
b3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGRyYXdPcGFjaXR5KCksIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOGQwMWQ5YmQ5YWE0OWU2MWM5NmE5ZWNjYjc2
NmRjYjEwMWUzNmVlMy4uNzBmNzY4NzUyNjU4MWNjNzlhZDRjNWEwNzdhNjA0OWQ1MWU0Y2NlNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0NCwyNSArMTQ0LDE5IEBAIExheWVyQ2hyb21p
dW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICA6IG1f
b3duZXIob3duZXIpCiAgICAgLCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX21hc2tM
YXllcigwKQotICAgICwgbV90YXJnZXRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX3N1cGVybGF5
ZXIoMCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRD
b2xvcigwLCAwLCAwLCAwKQotICAgICwgbV9ib3JkZXJDb2xvcigwLCAwLCAwLCAwKQogICAgICwg
bV9vcGFjaXR5KDEuMCkKICAgICAsIG1felBvc2l0aW9uKDAuMCkKICAgICAsIG1fYW5jaG9yUG9p
bnRaKDApCi0gICAgLCBtX2JvcmRlcldpZHRoKDApCiAgICAgLCBtX2NsZWFyc0NvbnRleHQoZmFs
c2UpCi0gICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBtX2hpZGRlbihmYWxzZSkKICAg
ICAsIG1fbWFza3NUb0JvdW5kcyhmYWxzZSkKICAgICAsIG1fb3BhcXVlKHRydWUpCiAgICAgLCBt
X2dlb21ldHJ5RmxpcHBlZChmYWxzZSkKICAgICAsIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFu
Z2UoZmFsc2UpCi0gICAgLCBtX2RyYXdEZXB0aCgwKQotICAgICwgbV9sYXllclJlbmRlcmVyKDAp
Ci0gICAgLCBtX3JlbmRlclN1cmZhY2UoMCkKKyAgICAsIG1fY29tcENDTGF5ZXIoQ29tcENDTGF5
ZXI6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcmVwbGljYUxheWVyKDApCiB7CiB9CkBAIC0xNzks
OCArMTczLDggQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogCiB2b2lkIExheWVy
Q2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIGlmIChtX3JlbmRlclN1cmZhY2Up
Ci0gICAgICAgIG1fcmVuZGVyU3VyZmFjZS0+Y2xlYW51cFJlc291cmNlcygpOworICAgIGlmIChy
ZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJlbmRlclN1cmZhY2UoKS0+Y2xlYW51cFJlc291cmNl
cygpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTE5MiwxMyArMTg2LDcgQEAgdm9pZCBMYXllckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIp
CiAgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAgIH0KIAotICAgIG1fbGF5ZXJSZW5kZXJl
ciA9IHJlbmRlcmVyOwotfQotCi1SZW5kZXJTdXJmYWNlQ2hyb21pdW0qIExheWVyQ2hyb21pdW06
OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQotewotICAgIG1fcmVuZGVyU3VyZmFjZSA9IG5ldyBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0odGhpcyk7Ci0gICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZS5nZXQo
KTsKKyAgICBtX2NvbXBDQ0xheWVyLT5zZXRMYXllclJlbmRlcmVyKHJlbmRlcmVyKTsKIH0KIAog
dW5zaWduZWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFy
KiBmcmFnbWVudFNoYWRlclNvdXJjZSkKQEAgLTMxNywxNiArMzA1LDE2IEBAIGludCBMYXllckNo
cm9taXVtOjppbmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJDaHJvbWl1bSogcmVmZXJlbmNlKQog
CiB2b2lkIExheWVyQ2hyb21pdW06OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogewot
ICAgIGlmIChtX2JvdW5kcyA9PSBzaXplKQorICAgIGlmIChib3VuZHMoKSA9PSBzaXplKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBib29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRoKCkg
JiYgIW1fYm91bmRzLmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgpOwor
ICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhYm91bmRzKCkud2lkdGgoKSAmJiAhYm91bmRzKCkuaGVp
Z2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUuaGVpZ2h0KCk7CiAKLSAgICBtX2JvdW5kcyA9
IHNpemU7CisgICAgbV9jb21wQ0NMYXllci0+c2V0Qm91bmRzKHNpemUpOwogICAgIG1fYmFja2lu
Z1N0b3JlU2l6ZSA9IHNpemU7CiAKICAgICBpZiAoZmlyc3RSZXNpemUpCi0gICAgICAgIHNldE5l
ZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVp
Z2h0KCkpKTsKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAwLCBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkpOwogICAgIGVsc2UKICAgICAgICAgc2V0TmVl
ZHNDb21taXQoKTsKIH0KQEAgLTMzNyw3ICszMjUsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNl
dEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJh
bWUgPSByZWN0OwotICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgbV9ib3VuZHMu
d2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRS
ZWN0KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CiB9CiAKIGNv
bnN0IExheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXllcigpIGNvbnN0CkBAIC0z
ODYsNyArMzc0LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3Qg
RmxvYXRSZWN0JiBkaXJ0eVJlY3QpCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSgpCiB7CiAgICAgbV9kaXJ0eVJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICBt
X2RpcnR5UmVjdC5zZXRTaXplKG1fYm91bmRzKTsKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKGJv
dW5kcygpKTsKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwogICAgIHNldE5lZWRzQ29tbWl0
KCk7CiB9CkBAIC00NDUsMjkgKzQzMyw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1
cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtCiAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAot
dm9pZCBMYXllckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXIoKQotewotICAgIHN0YXRpYyBmbG9h
dCBnbE1hdHJpeFsxNl07Ci0gICAgaWYgKCFib3JkZXJDb2xvcigpLmFscGhhKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwotICAgIGNvbnN0IFNoYXJl
ZFZhbHVlcyogc3YgPSBsYXllclJlbmRlcmVyKCktPmxheWVyU2hhcmVkVmFsdWVzKCk7Ci0gICAg
QVNTRVJUKHN2ICYmIHN2LT5pbml0aWFsaXplZCgpKTsKLSAgICBsYXllclJlbmRlcmVyKCktPnVz
ZVNoYWRlcihzdi0+Ym9yZGVyU2hhZGVyUHJvZ3JhbSgpKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCByZW5kZXJNYXRyaXggPSBkcmF3VHJhbnNmb3JtKCk7Ci0gICAgcmVuZGVyTWF0cml4LnNj
YWxlM2QoYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIDEpOwotICAgIHRvR0xN
YXRyaXgoJmdsTWF0cml4WzBdLCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSAq
IHJlbmRlck1hdHJpeCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJl
bmRlcmVyQ29udGV4dCgpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4
NGZ2KHN2LT5ib3JkZXJTaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmdsTWF0cml4WzBd
LCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHN2LT5ib3JkZXJT
aGFkZXJDb2xvckxvY2F0aW9uKCksIGJvcmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwgYm9yZGVy
Q29sb3IoKS5ncmVlbigpIC8gMjU1LjAsIGJvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEp
KTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5saW5lV2lkdGgoYm9yZGVyV2lkdGgoKSkp
OwotCi0gICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNh
bWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCi0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QLCA0LCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7
Ci19CiAKIGNvbnN0IEludFJlY3QgTGF5ZXJDaHJvbWl1bTo6Z2V0RHJhd1JlY3QoKSBjb25zdAog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVjN2UyYjE0MjE3N2NjZjY5MmFhYTRjMzZhMmUyOGYw
YzZkZjFjODYuLjNjODQ1Y2UzOTMyY2E0OWJmN2FkNGExNDljMWIxMWZmM2Y5MmQxMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKQEAgLTQwLDYgKzQwLDkgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlICJjYy9Db21wQ0NMYXllci5oIgorCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU5LDcgKzYyLDYgQEAgY2xhc3MgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOwogLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwg
bGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJvbQogLy8gdGhpcyBjbGFzcy4KIGNsYXNzIExheWVy
Q2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllckNocm9taXVtPiB7Ci0gICAgZnJpZW5k
IGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxl
ckNocm9taXVtOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CkBAIC04NSwyMSArODcs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAg
ICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xv
cjsgfQogCi0gICAgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9i
b3JkZXJDb2xvciA9IGNvbG9yOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgQ29sb3IgYm9yZGVy
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlckNvbG9yOyB9Ci0KLSAgICB2b2lkIHNldEJv
cmRlcldpZHRoKGZsb2F0IHdpZHRoKSB7IG1fYm9yZGVyV2lkdGggPSB3aWR0aDsgc2V0TmVlZHND
b21taXQoKTsgfQotICAgIGZsb2F0IGJvcmRlcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9ib3Jk
ZXJXaWR0aDsgfQotCi0gICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYpOwotICAgIElu
dFNpemUgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KLQogICAgIHZvaWQgc2V0
Q2xlYXJzQ29udGV4dChib29sIGNsZWFycykgeyBtX2NsZWFyc0NvbnRleHQgPSBjbGVhcnM7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGNsZWFyc0NvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX2NsZWFyc0NvbnRleHQ7IH0KIAotICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3Vi
bGVTaWRlZCkgeyBtX2RvdWJsZVNpZGVkID0gZG91YmxlU2lkZWQ7IHNldE5lZWRzQ29tbWl0KCk7
IH0KLSAgICBib29sIGRvdWJsZVNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVTaWRlZDsg
fQotCiAgICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICBGbG9hdFJlY3Qg
ZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKQEAgLTE0NCw5ICsxMzQsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZ2Vv
bWV0cnlGbGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgZ2Vv
bWV0cnlGbGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeUZsaXBwZWQ7IH0KIAotICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9kcmF3VHJhbnNmb3JtOyB9Ci0gICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2RyYXdPcGFjaXR5OyB9Ci0KICAgICBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4g
bV9vd25lciAmJiBtX293bmVyLT5wcmVzZXJ2ZXMzRCgpOyB9CiAKICAgICAvLyBEZXJpdmVkIHR5
cGVzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIHJlYWN0IHRvIGEg
Y2hhbmdlCkBAIC0xNjgsOSArMTU1LDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmlu
ZENvbnRlbnRzVGV4dHVyZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3KCkgeyB9CiAKLSAg
ICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2Yg
dGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KKyAgICBib29sIGRl
c2NlbmRhbnRzRHJhd0NvbnRlbnQoKTsKKworICAgIC8vIFRoZXNlIGV4aXN0cyBqdXN0IGZvciBk
ZWJ1Z2dpbmcgKHZpYSBkcmF3RGVidWdCb3JkZXIoKSkuCisgICAgdm9pZCBzZXRCb3JkZXJDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9jb21wQ0NMYXllci0+c2V0RGVidWdCb3JkZXJDb2xv
cihjb2xvcik7IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBDb2xvciBib3JkZXJDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29tcENDTGF5ZXItPmRlYnVnQm9yZGVyQ29sb3IoKTsgfQogCi0gICAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgdm9pZCBz
ZXRCb3JkZXJXaWR0aChmbG9hdCB3aWR0aCkgeyBtX2NvbXBDQ0xheWVyLT5zZXREZWJ1Z0JvcmRl
cldpZHRoKHdpZHRoKTsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIGZsb2F0IGJvcmRlcldpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wQ0NMYXllci0+ZGVidWdCb3JkZXJXaWR0aCgpOyB9CisK
KyAgICAvLyBFdmVyeXRoaW5nIGZyb20gaGVyZSBkb3duIGluIHRoZSBwdWJsaWMgc2VjdGlvbiB3
aWxsIG1vdmUgdG8gQ29tcENDTGF5ZXIuCisKKyAgICBDb21wQ0NMYXllciogY29tcENDTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2NvbXBDQ0xheWVyLmdldCgpOyB9CiAKICAgICAvLyBTdG9yZXMg
dmFsdWVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHRo
YXQgYXJlCiAgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIExheWVyUmVuZGVyZXJDaHJv
bWl1bSAoYW5kIGhlbmNlIHRoZSBzYW1lIEdMCkBAIC0yMDIsNyArMTk5LDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgcHJlcGFyZUZvckRyYXcoY29uc3QgU2hhcmVkVmFsdWVzKik7CiAK
LSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbXBDQ0xheWVyLT5sYXllclJlbmRlcmVy
KCk7IH0KIAogICAgIHN0YXRpYyB1bnNpZ25lZCBjcmVhdGVTaGFkZXJQcm9ncmFtKEdyYXBoaWNz
Q29udGV4dDNEKiwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlclNvdXJjZSk7CiAKQEAgLTIxMCw5ICsyMDcsMjkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwg
ZmxvYXQgb3BhY2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRy
aXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24pOwogCisgICAgUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb21wQ0NMYXllci0+cmVuZGVy
U3VyZmFjZSgpOyB9CisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fY29tcENDTGF5
ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOyB9CisgICAgZmxvYXQgZHJhd0RlcHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21wQ0NMYXllci0+ZHJhd0RlcHRoKCk7IH0KKyAgICB2b2lkIHNldERyYXdE
ZXB0aChmbG9hdCBkZXB0aCkgeyBtX2NvbXBDQ0xheWVyLT5zZXREcmF3RGVwdGgoZGVwdGgpOyB9
CisgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NvbXBDQ0xheWVyLT5k
cmF3T3BhY2l0eSgpOyB9CisgICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7
IG1fY29tcENDTGF5ZXItPnNldERyYXdPcGFjaXR5KG9wYWNpdHkpOyB9CisgICAgY29uc3QgSW50
UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbXBDQ0xheWVyLT5zY2lzc29y
UmVjdCgpOyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7
IG1fY29tcENDTGF5ZXItPnNldFNjaXNzb3JSZWN0KHJlY3QpOyB9CisgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb21wQ0NM
YXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpOyB9CisgICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFjZSkgeyBtX2NvbXBDQ0xheWVyLT5z
ZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHN1cmZhY2UpOyB9CisgICAgdm9pZCBzZXREb3VibGVTaWRl
ZChib29sIGRvdWJsZVNpZGVkKSB7IG1fY29tcENDTGF5ZXItPnNldERvdWJsZVNpZGVkKGRvdWJs
ZVNpZGVkKTsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IElu
dFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBDQ0xheWVyLT5ib3VuZHMoKTsgfQorCisKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcENDTGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4KSB7IG1fY29tcENDTGF5ZXItPnNldERyYXdUcmFuc2Zvcm0obWF0cml4
KTsgfQorICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBDQ0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7IH0KKyAgICB2b2lkIHNl
dERyYXdhYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2NvbXBDQ0xheWVy
LT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHJlY3QpOyB9CisKIHByb3RlY3RlZDoKICAgICBHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7Ci0gICAgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICBleHBsaWNpdCBMYXllckNocm9taXVtKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCiAgICAgLy8gVGhpcyBpcyBjYWxsZWQgdG8gY2xlYW4g
dXAgcmVzb3VyY2VzIGJlaW5nIGhlbGQgaW4gdGhlIHNhbWUgY29udGV4dCBhcwogICAgIC8vIGxh
eWVyUmVuZGVyZXJDb250ZXh0KCkuIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0
aG9kIGlmIHRoZXkKQEAgLTIyMSwyMyArMjM4LDEzIEBAIHByb3RlY3RlZDoKIAogICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgpIGNvbnN0OwogCi0gICAgLy8gUmV0
dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNjZW5kYW50cyBoYXMgY29udGVudCB0
byBkcmF3LgotICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3Q29udGVudCgpOwotCiAgICAgc3RhdGlj
IHZvaWQgdG9HTE1hdHJpeChmbG9hdCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAK
LSAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBi
b29sIG1fY29udGVudHNEaXJ0eTsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX21hc2tM
YXllcjsKIAotICAgIC8vIFJlbmRlciBzdXJmYWNlIHRoaXMgbGF5ZXIgZHJhd3MgaW50by4gVGhp
cyBpcyBhIHN1cmZhY2UgdGhhdCBjYW4gYmVsb25nCi0gICAgLy8gZWl0aGVyIHRvIHRoaXMgbGF5
ZXIgKGlmIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9PSBtX3JlbmRlclN1cmZhY2UpIG9yCi0gICAg
Ly8gdG8gYW4gYW5jZXN0b3Igb2YgdGhpcyBsYXllci4gVGhlIHRhcmdldCByZW5kZXIgc3VyZmFj
ZSBkZXRlcm1pbmVzIHRoZQotICAgIC8vIGNvb3JkaW5hdGUgc3lzdGVtIHRoZSBsYXllcidzIHRy
YW5zZm9ybXMgYXJlIHJlbGF0aXZlIHRvLgotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90
YXJnZXRSZW5kZXJTdXJmYWNlOwotCiAgICAgLy8gQWxsIGxheWVyIHNoYWRlcnMgc2hhcmUgdGhl
IHNhbWUgYXR0cmlidXRlIGxvY2F0aW9ucyBmb3IgdGhlIHZlcnRleCBwb3NpdGlvbnMKICAgICAv
LyBhbmQgdGV4dHVyZSBjb29yZGluYXRlcy4gVGhpcyBhbGxvd3Mgc3dpdGNoaW5nIHNoYWRlcnMg
d2l0aG91dCByZWJpbmRpbmcgYXR0cmlidXRlCiAgICAgLy8gYXJyYXlzLgpAQCAtMjcwLDQzICsy
NzcsMjIgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CiAgICAgRmxvYXRQ
b2ludCBtX2FuY2hvclBvaW50OwogICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotICAgIENv
bG9yIG1fYm9yZGVyQ29sb3I7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGZsb2F0IG1felBv
c2l0aW9uOwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwotICAgIGZsb2F0IG1fYm9yZGVyV2lk
dGg7Ci0gICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKICAgICBib29sIG1fY2xlYXJzQ29udGV4dDsK
LSAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAgICAgYm9vbCBtX2hpZGRlbjsKICAgICBib29sIG1f
bWFza3NUb0JvdW5kczsKICAgICBib29sIG1fb3BhcXVlOwogICAgIGJvb2wgbV9nZW9tZXRyeUZs
aXBwZWQ7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlOwogCi0gICAgLy8g
VGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4gVGhpcyB2
YWx1ZSBpcyB1c2VkCi0gICAgLy8gdG8gc29ydCBsYXllcnMgZnJvbSBiYWNrIHRvIGZyb250Lgot
ICAgIGZsb2F0IG1fZHJhd0RlcHRoOwotCi0gICAgLy8gUG9pbnRzIHRvIHRoZSBsYXllciByZW5k
ZXJlciB0aGF0IHVwZGF0ZXMgYW5kIGRyYXdzIHRoaXMgbGF5ZXIuCi0gICAgUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwotCi0gICAgRmxvYXRSZWN0IG1fZnJh
bWU7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX2RyYXdUcmFuc2Zvcm07CiAKLSAgICAvLyBUaGUgc2Npc3NvciByZWN0YW5nbGUgdGhhdCBz
aG91bGQgYmUgdXNlZCB3aGVuIHRoaXMgbGF5ZXIgaXMgZHJhd24uCi0gICAgLy8gSW5oZXJpdGVk
IGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVy
IG1hc2tzCi0gICAgLy8gdG8gYm91bmRzLgotICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKLQot
ICAgIC8vIFJlbmRlciBzdXJmYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5
ZXIgYW5kIGl0cyBkZXNjZW5kYW50cwotICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFj
ZS4KLSAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7Ci0K
LSAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXllciBh
bmQgaXRzIGRlc2NlbmRhbnRzLgotICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0Owor
ICAgIEZsb2F0UmVjdCBtX2ZyYW1lOworICAgIC8vIEZvciBub3csIHRoZSBMYXllckNocm9taXVt
IGRpcmVjdGx5IG93bnMgaXRzIENvbXBDQ0xheWVyLgorICAgIFJlZlB0cjxDb21wQ0NMYXllcj4g
bV9jb21wQ0NMYXllcjsKIAogICAgIC8vIFJlcGxpY2EgbGF5ZXIgdXNlZCBmb3IgcmVmbGVjdGlv
bnMuCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9yZXBsaWNhTGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBmNTU0OGM5ZjYzZjM2YjRhM2YyNTUzYmFlODU4NGVl
ZDA0MThjYTcxLi5mNWYwNzNiNGY0MDg4MzZjYzE2NTNkMjc3NGVjZWY5N2VhNmY1ZDhhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgc3Rh
dGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0pCiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJlTGF5ZXJaKGNvbnN0IExh
eWVyQ2hyb21pdW0qIGEsIGNvbnN0IExheWVyQ2hyb21pdW0qIGIpCiB7Ci0gICAgcmV0dXJuIGEt
Pm1fZHJhd0RlcHRoIDwgYi0+bV9kcmF3RGVwdGg7CisgICAgcmV0dXJuIGEtPmRyYXdEZXB0aCgp
IDwgYi0+ZHJhd0RlcHRoKCk7CiB9CiAKIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KQpAQCAtMTcyLDkgKzE3MiwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0LCBj
bwogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdS
b290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQsIFRpbGVQYWludEludGVyZmFj
ZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290
TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0KQogewogICAgIG1fcm9vdExheWVyVGlsZXItPnVwZGF0ZSh0aWxlUGFpbnQsIHZpc2li
bGVSZWN0KTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIo
VGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorewogICAgIG1fcm9vdExheWVyVGls
ZXItPmRyYXcodmlzaWJsZVJlY3QpOwogCiAgICAgaWYgKHZpc2libGVSZWN0LndpZHRoKCkgPiBj
b250ZW50UmVjdC53aWR0aCgpKSB7CkBAIC0yMTEsNyArMjE1LDExIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0CiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdXBkYXRlUm9vdExheWVyKHRpbGVQYWludCwgdmlz
aWJsZVJlY3QpOworICAgIC8vIFJlY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXll
ci4gIFRoaXMgbWF5IGJlY29tZSBudWxsIGlmCisgICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJu
ZWQgb2ZmIGR1cmluZyBhIHBhaW50IG9wZXJhdGlvbi4KKyAgICBpZiAoIW1fcm9vdExheWVyKQor
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSBhcmVh
IGhhcyBjaGFuZ2VkIHRoZW4gYWxsb2NhdGUgYSBuZXcgdGV4dHVyZQogICAgIC8vIHRvIHN0b3Jl
IHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllciBhbmQgYWRqdXN0IHRoZSBwcm9qZWN0aW9u
IG1hdHJpeApAQCAtMjE5LDkgKzIyNyw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0CiAgICAg
aW50IHZpc2libGVSZWN0V2lkdGggPSB2aXNpYmxlUmVjdC53aWR0aCgpOwogICAgIGludCB2aXNp
YmxlUmVjdEhlaWdodCA9IHZpc2libGVSZWN0LmhlaWdodCgpOwogCi0gICAgaWYgKCFtX3Jvb3RM
YXllci0+bV9yZW5kZXJTdXJmYWNlKQotICAgICAgICBtX3Jvb3RMYXllci0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwotICAgIG1fcm9vdExheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fY29udGVudFJl
Y3QgPSBJbnRSZWN0KDAsIDAsIHZpc2libGVSZWN0V2lkdGgsIHZpc2libGVSZWN0SGVpZ2h0KTsK
KyAgICBpZiAoIW1fcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIG1fcm9vdExh
eWVyLT5jb21wQ0NMYXllcigpLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgbV9yb290TGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9jb250ZW50UmVjdCA9IEludFJlY3QoMCwgMCwgdmlzaWJs
ZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQpOwogCiAgICAgaWYgKHZpc2libGVSZWN0V2lk
dGggIT0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggfHwgdmlzaWJsZVJlY3RIZWlnaHQgIT0gbV9y
b290TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVdpZHRo
ID0gdmlzaWJsZVJlY3RXaWR0aDsKQEAgLTIzMiw2ICsyNDAsMjYgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0
IEludFJlY3QKICAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7CiAgICAgfQogCisg
ICAgLy8gU2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMgdG8gYXZvaWQgcmVuZGVyaW5nIG9uIHRv
cCBvZiB0aGVtLgorICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsKKyAg
ICAvLyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0
LgorICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Ny
b2xsUG9zaXRpb24ueSgpKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2Npc3NvclJlY3Qocm9vdFNj
aXNzb3JSZWN0KTsKKworICAgIEFTU0VSVChtX3Jvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gbV9yb290TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KTsKKworICAgIFZlY3RvcjxMYXllckNocm9taXVtKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsK
KyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RMYXllci5nZXQoKSk7CisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBtX2RlZmF1bHRS
ZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOworICAgIHVwZGF0ZUxheWVyc1JlY3Vy
c2l2ZShtX3Jvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKKworICAgIC8vIC0t
LS0tLT09PT09PT09IGRpdmlkZS4gYmVsb3cgaGVyZSBpcyBHTCBzdHVmZiwgYWJvdmUgaGVyZSBp
cyBXZWJLaXQgc3R1ZmYgPT09PT09PS0tLS0tLQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVh
LCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT52aWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdo
dCkpOwogCkBAIC0yNDYsMTAgKzI3NCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0CiAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCkpOwogCiAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwotCi0g
ICAgQVNTRVJUKG1fcm9vdExheWVyLT5tX3JlbmRlclN1cmZhY2UpOwotICAgIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UgPSBtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOwotCiAgICAg
dXNlUmVuZGVyU3VyZmFjZShtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKTsKIAogICAgIC8vIENsZWFy
IHRvIGJsdWUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCB1bnJlbmRlcmVkIHJlZ2lvbnMuCkBA
IC0yNjAsMzMgKzI4NCwxNSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIC8vIHplcm8g
YWxwaGEgdmFsdWVzIG9uIHRleHQgZ2x5cGhzLiBUaGUgcm9vdCBsYXllciBpcyBhbHdheXMgb3Bh
cXVlLgogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsK
IAotICAgIHVwZGF0ZUFuZERyYXdSb290TGF5ZXIodGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCwg
dmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICBkcmF3Um9vdExheWVyKHNjcm9sbGJhclBh
aW50LCB2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwogCiAgICAgLy8gUmUtZW5hYmxlIGNvbG9y
IHdyaXRlcyB0byBsYXllcnMsIHdoaWNoIG1heSBiZSBwYXJ0aWFsbHkgdHJhbnNwYXJlbnQuCiAg
ICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAKLSAgICAv
LyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuICBUaGlzIG1heSBiZWNv
bWUgbnVsbCBpZgotICAgIC8vIGNvbXBvc2l0aW5nIGdldHMgdHVybmVkIG9mZiBkdXJpbmcgYSBw
YWludCBvcGVyYXRpb24uCi0gICAgaWYgKCFtX3Jvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgLy8gU2V0IHRoZSByb290IHZpc2libGUvY29udGVudCByZWN0cyAtLS0gdXNlZCBieSBz
dWJzZXF1ZW50IGRyYXdMYXllcnMgY2FsbHMuCiAgICAgbV9yb290VmlzaWJsZVJlY3QgPSB2aXNp
YmxlUmVjdDsKICAgICBtX3Jvb3RDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OwogCi0gICAgLy8g
U2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMgdG8gYXZvaWQgcmVuZGVyaW5nIG9uIHRvcCBvZiB0
aGVtLgotICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAvLyBU
aGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgotICAg
IHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9z
aXRpb24ueSgpKTsKLSAgICBtX3Jvb3RMYXllci0+bV9zY2lzc29yUmVjdCA9IHJvb3RTY2lzc29y
UmVjdDsKLQotICAgIFZlY3RvcjxMYXllckNocm9taXVtKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RMYXllci5nZXQoKSk7
Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOwotICAgIHVwZGF0ZUxheWVyc1Jl
Y3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKLQogICAgIC8v
IFRoZSBzaGFkZXIgdXNlZCB0byByZW5kZXIgbGF5ZXJzIHJldHVybnMgcHJlLW11bHRpcGxpZWQg
YWxwaGEgY29sb3JzCiAgICAgLy8gc28gd2UgbmVlZCB0byBzZW5kIHRoZSBibGVuZGluZyBtb2Rl
IGFwcHJvcHJpYXRlbHkuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CkBAIC0yOTgsMTQgKzMwNCwxNCBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCwgY29uc3QgSW50UmVjdAogICAgIC8vIGNvcnJlY3Qgb3JkZXIuCiAgICAgZm9yIChpbnQg
c3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNl
SW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAgICAgIExheWVyQ2hyb21pdW0qIHJl
bmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XTsK
LSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllci0+bV9yZW5kZXJTdXJmYWNlKTsKKyAg
ICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKIAogICAg
ICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBoYXMgemVybyB3aWR0
aCBvciBoZWlnaHQKICAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBhc3NvY2lhdGVkIHdp
dGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCi0gICAgICAgIGlmICghcmVuZGVyU3VyZmFj
ZUxheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LnNpemUoKSkKKyAgICAgICAgaWYg
KCFyZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXllckxpc3Quc2l6ZSgp
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2Uo
cmVuZGVyU3VyZmFjZUxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCkpKSB7CisgICAgICAgIGlm
ICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpKSkg
ewogICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSBtX3Jvb3RMYXllcikgewog
ICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKQEAgLTMx
MywxMCArMzE5LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0CiAgICAgICAgICAgICAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBWZWN0b3I8TGF5
ZXJDaHJvbWl1bSo+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3Vy
ZmFjZS0+bV9sYXllckxpc3Q7CisgICAgICAgICAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBs
YXllckxpc3QgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXllckxp
c3Q7CiAgICAgICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUo
KTsgKytsYXllckluZGV4KQotICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5
ZXJJbmRleF0sIHJlbmRlclN1cmZhY2VMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLT5jb21wQ0NMYXll
cigpLCByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTQ2Myw5MSArNDY5LDk0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAgICAg
Ym9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAg
ICBpZiAoKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYm
IGxheWVyLT5kZXNjZW5kYW50c0RyYXdDb250ZW50KCkpCiAgICAgICAgIHx8IHVzZVN1cmZhY2VG
b3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uKSB7Ci0gICAgICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0
KCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVy
LT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZSkKLSAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2UgPSBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5jb21wQ0NMYXllcigpLT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CiAKICAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMg
dGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllci4KLSAgICAgICAgbGF5ZXItPm1fZHJh
d1RyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Ci0gICAgICAgIGxheWVyLT5tX2Ry
YXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJvdW5k
cy5oZWlnaHQoKSwgMCk7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zv
cm07CisgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRo
KCksIDAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgIGxheWVyLT5zZXREcmF3VHJh
bnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwogCiAgICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0g
SW50UmVjdCgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKIAogICAgICAg
ICAvLyBMYXllcidzIG9wYWNpdHkgd2lsbCBiZSBhcHBsaWVkIHdoZW4gZHJhd2luZyB0aGUgcmVu
ZGVyIHN1cmZhY2UuCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgPSBsYXll
ci0+b3BhY2l0eSgpOwotICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVz
M0QoKSkKKyAgICAgICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCkgJiYgbGF5ZXItPnN1cGVybGF5
ZXIoKS0+cHJlc2VydmVzM0QoKSkKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09w
YWNpdHkgKj0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+ZHJhd09wYWNpdHkoKTsKLSAgICAgICAgbGF5
ZXItPm1fZHJhd09wYWNpdHkgPSAxOworICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7
CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBj
b21iaW5lZFRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRl
M2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFuc2Zvcm0gPSBsYXllck9yaWdpblRyYW5z
Zm9ybTsKICAgICAgICAgaWYgKGxheWVyT3JpZ2luVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpICYm
IGxheWVyLT5zdXBlcmxheWVyKCkpIHsKICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHBhcmVudFRvTGF5ZXIgPSBsYXllck9yaWdpblRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0KLSAgICAg
ICAgICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0ID0gcGFyZW50VG9MYXllci5tYXBSZWN0KGxheWVy
LT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJlY3QpOworICAgICAgICAgICAgbGF5ZXItPnNldFNj
aXNzb3JSZWN0KEludFJlY3QocGFyZW50VG9MYXllci5tYXBSZWN0KGxheWVyLT5zdXBlcmxheWVy
KCktPnNjaXNzb3JSZWN0KCkpKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbGF5ZXIt
Pm1fc2Npc3NvclJlY3QgPSBJbnRSZWN0KCk7CisgICAgICAgICAgICBsYXllci0+c2V0U2Npc3Nv
clJlY3QoSW50UmVjdCgpKTsKIAogICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3Nv
ciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVkcyB0bwogICAgICAgICAvLyBiZSBh
cHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWlu
aW5nCiAgICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhl
IHN1cGVybGF5ZXIncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+
bV9zY2lzc29yUmVjdCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJlY3Q7CisgICAg
ICAgIHJlbmRlclN1cmZhY2UtPm1fc2Npc3NvclJlY3QgPSBsYXllci0+c3VwZXJsYXllcigpID8g
bGF5ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3NvclJlY3QoKSA6IGxheWVyLT5zY2lzc29yUmVjdCgp
OwogCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7CiAKICAgICAg
ICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+
bV9tYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCk7CiAgICAgICAgICAgICBsYXllci0+bWFz
a0xheWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgICAgICAgICBsYXllci0+bWFz
a0xheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2U7CisgICAgICAg
ICAgICBsYXllci0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3Vy
ZmFjZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNr
TGF5ZXIgPSAwOwogCiAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgbGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICAgICAg
ICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSA9IHJlbmRlclN1cmZhY2U7CisgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwogICAg
ICAgICB9CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIERUID0gTVtwXSAqIExUCi0gICAgICAgIGxheWVyLT5t
X2RyYXdUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKLSAgICAgICAgdHJhbnNmb3JtZWRM
YXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxheWVyLT5tX2RyYXdUcmFuc2Zvcm0ubWFwUmVj
dChsYXllclJlY3QpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oY29tYmluZWRU
cmFuc2Zvcm0pOworICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOwogCi0gICAgICAg
IGxheWVyLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKKyAgICAgICAgbGF5ZXIt
PnNldERyYXdPcGFjaXR5KGxheWVyLT5vcGFjaXR5KCkpOwogCiAgICAgICAgIGlmIChsYXllci0+
c3VwZXJsYXllcigpKSB7CiAgICAgICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJl
c2VydmVzM0QoKSkKLSAgICAgICAgICAgICAgIGxheWVyLT5tX2RyYXdPcGFjaXR5ICo9IGxheWVy
LT5zdXBlcmxheWVyKCktPm1fZHJhd09wYWNpdHk7CisgICAgICAgICAgICAgICBsYXllci0+c2V0
RHJhd09wYWNpdHkobGF5ZXItPmRyYXdPcGFjaXR5KCkgKiBsYXllci0+c3VwZXJsYXllcigpLT5k
cmF3T3BhY2l0eSgpKTsKIAogICAgICAgICAgICAgLy8gTGF5ZXJzIGluaGVyaXQgdGhlIHNjaXNz
b3IgcmVjdCBmcm9tIHRoZWlyIHN1cGVybGF5ZXIuCi0gICAgICAgICAgICBsYXllci0+bV9zY2lz
c29yUmVjdCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJlY3Q7CisgICAgICAgICAg
ICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3NvclJlY3Qo
KSk7CiAKLSAgICAgICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2UgPSBsYXllci0+
c3VwZXJsYXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZhY2U7CisgICAgICAgICAgICBsYXllci0+
c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+c3VwZXJsYXllcigpLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxheWVyICE9IG1fcm9vdExheWVy
KQotICAgICAgICAgICAgbGF5ZXItPm1fcmVuZGVyU3VyZmFjZSA9IDA7CisgICAgICAgICAgICBs
YXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiAKLSAgICAgICAgaWYgKGxheWVyLT5tYXNrc1Rv
Qm91bmRzKCkpCi0gICAgICAgICAgICBsYXllci0+bV9zY2lzc29yUmVjdC5pbnRlcnNlY3QodHJh
bnNmb3JtZWRMYXllclJlY3QpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkg
eworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0gbGF5ZXItPnNjaXNzb3JSZWN0KCk7Cisg
ICAgICAgICAgICBzY2lzc29yLmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAg
ICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3Qoc2Npc3Nvcik7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSkKLSAgICAgICAgbGF5ZXItPm1fdGFy
Z2V0UmVuZGVyU3VyZmFjZSA9IGxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCk7CisgICAgaWYg
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQobGF5ZXItPnN1cGVybGF5ZXIoKSk7Ci0gICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1
cmZhY2UgPSBsYXllci0+c3VwZXJsYXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZhY2U7CisgICAg
ICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5zdXBlcmxheWVyKCktPnRh
cmdldFJlbmRlclN1cmZhY2UoKSk7CiAgICAgfQogCi0gICAgLy8gbV9kcmF3YWJsZUNvbnRlbnRS
ZWN0IGlzIGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZQorICAg
IC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdheXMgc3RvcmVkIGluIHRoZSBjb29yZGlu
YXRlIHN5c3RlbSBvZiB0aGUKICAgICAvLyBSZW5kZXJTdXJmYWNlIHRoZSBsYXllciBkcmF3cyBp
bnRvLgogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGxheWVyLT5tX2Ry
YXdhYmxlQ29udGVudFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAgICAgICAgbGF5ZXIt
PnNldERyYXdhYmxlQ29udGVudFJlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOwogICAgIGVsc2UK
LSAgICAgICAgbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdCA9IEludFJlY3QoKTsKKyAgICAg
ICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgpKTsKIAotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gbGF5ZXItPm1fZHJhd1RyYW5zZm9ybTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGxheWVyLT5kcmF3VHJh
bnNmb3JtKCk7CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0IHBy
ZXNlcnZlIDNELgogICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsKQEAgLTU2OCw3ICs1
NzcsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZl
KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcgogICAgIC8vIE1bc10gPSBNICogVHJbLWNl
bnRlcl0KICAgICBzdWJsYXllck1hdHJpeC50cmFuc2xhdGUzZCgtYm91bmRzLndpZHRoKCkgKiAw
LjUsIC1ib3VuZHMuaGVpZ2h0KCkgKiAwLjUsIDApOwogCi0gICAgVmVjdG9yPExheWVyQ2hyb21p
dW0qPiYgZGVzY2VuZGFudHMgPSAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSA/IGxheWVyLT5tX3Jl
bmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0IDogbGF5ZXJMaXN0KTsKKyAgICBWZWN0b3I8TGF5ZXJD
aHJvbWl1bSo+JiBkZXNjZW5kYW50cyA9IChsYXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKS0+bV9sYXllckxpc3QgOiBsYXllckxpc3QpOwogICAgIGRlc2NlbmRh
bnRzLmFwcGVuZChsYXllcik7CiAgICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5k
YW50cy5zaXplKCkgLSAxOwogCkBAIC01NzcsMjggKzU4NiwzNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBUcgogICAgICAgICBMYXllckNocm9taXVtKiBzdWJsYXllciA9IHN1YmxheWVyc1tpXS5n
ZXQoKTsKICAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyLCBzdWJsYXllck1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOwogCi0gICAgICAgIGlm
IChzdWJsYXllci0+bV9yZW5kZXJTdXJmYWNlKSB7Ci0gICAgICAgICAgICBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIHN1YmxheWVyUmVuZGVyU3VyZmFjZSA9IHN1YmxheWVyLT5tX3JlbmRlclN1cmZh
Y2UuZ2V0KCk7Ci0gICAgICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRl
KGVuY2xvc2luZ0ludFJlY3Qoc3VibGF5ZXJSZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCkpKTsKKyAgICAgICAgaWYgKHN1YmxheWVyLT5yZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAg
ICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VibGF5ZXJSZW5kZXJTdXJmYWNlID0gc3Vi
bGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250
ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBkcmF3
YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3Qoc3VibGF5ZXJSZW5kZXJTdXJm
YWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3
YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwogICAgICAgICAgICAgZGVzY2Vu
ZGFudHMuYXBwZW5kKHN1YmxheWVyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsYXll
ci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKHN1YmxheWVyLT5tX2RyYXdhYmxlQ29udGVu
dFJlY3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNv
bnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGRy
YXdhYmxlQ29udGVudFJlY3QudW5pdGUoc3VibGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7
CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRl
bnRSZWN0KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5k
cygpIHx8IHVzZVN1cmZhY2VGb3JNYXNraW5nKQotICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNv
bnRlbnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgaWYgKGxheWVy
LT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgSW50
UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsK
KyAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJl
Y3QpOworICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRl
bnRSZWN0KTsKKyAgICB9CiAKLSAgICBpZiAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSAmJiBsYXll
ciAhPSBtX3Jvb3RMYXllcikgewotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2UgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOwotICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0gbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdDsKKyAg
ICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jvb3RMYXllcikgewor
ICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpOworICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0gbGF5
ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2Vu
dGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKIAogICAgICAgICAvLyBS
ZXN0cmljdCB0aGUgUmVuZGVyU3VyZmFjZSBzaXplIHRvIHRoZSBwb3J0aW9uIHRoYXQncyB2aXNp
YmxlLgogICAgICAgICBGbG9hdFNpemUgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZzsKKwogICAg
ICAgICAvLyBEb24ndCBjbGlwIGlmIHRoZSBsYXllciBpcyByZWZsZWN0ZWQgYXMgdGhlIHJlZmxl
Y3Rpb24gc2hvdWxkbid0IGJlCiAgICAgICAgIC8vIGNsaXBwZWQuCiAgICAgICAgIGlmICghbGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRl
bnRSZWN0LmludGVyc2VjdChsYXllci0+bV9zY2lzc29yUmVjdCk7CisgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7
CiAgICAgICAgICAgICBGbG9hdFBvaW50IGNsaXBwZWRTdXJmYWNlQ2VudGVyID0gcmVuZGVyU3Vy
ZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKICAgICAgICAgICAgIGNlbnRlck9mZnNldER1ZVRv
Q2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1cmZhY2VDZW50ZXI7CiAgICAgICAg
IH0KQEAgLTYxMyw3ICs2MzEsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
TGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcgogCiAgICAgICAg
IC8vIFNpbmNlIHRoZSBsYXllciBzdGFydHMgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2UgbmVlZCB0
byBhZGp1c3QgaXRzCiAgICAgICAgIC8vIHNjaXNzb3IgcmVjdCB0byBiZSBleHByZXNzZWQgaW4g
dGhlIG5ldyBzdXJmYWNlJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAgIGxheWVyLT5tX3Nj
aXNzb3JSZWN0ID0gbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdDsKKyAgICAgICAgbGF5ZXIt
PnNldFNjaXNzb3JSZWN0KGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogCiAgICAgICAg
IC8vIEFkanVzdCB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUgdGhlIGNlbnRlciBv
ZiB0aGUgcmVuZGVyIHN1cmZhY2UuCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd1RyYW5z
Zm9ybSA9IHJlbmRlclN1cmZhY2UtPm1fb3JpZ2luVHJhbnNmb3JtOwpAQCAtNjMxLDIwICs2NDks
MjcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShM
YXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHIKIAogICAgIC8vIENvbXB1dGUgdGhlIGRlcHRo
IHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyIHdoaWNoIHdpbGwgYmUgdXNlZCB3aGVu
CiAgICAgLy8gc29ydGluZyB0aGUgbGF5ZXJzIGZvciB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5
LgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllckRyYXdNYXRyaXggPSBsYXllci0+bV9y
ZW5kZXJTdXJmYWNlID8gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtIDog
bGF5ZXItPm1fZHJhd1RyYW5zZm9ybTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJEcmF3TWF0cml4ID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJT
dXJmYWNlKCktPm1fZHJhd1RyYW5zZm9ybSA6IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CiAgICAg
aWYgKGxheWVyLT5zdXBlcmxheWVyKCkpIHsKICAgICAgICAgaWYgKCFsYXllci0+c3VwZXJsYXll
cigpLT5wcmVzZXJ2ZXMzRCgpKQotICAgICAgICAgICAgbGF5ZXItPm1fZHJhd0RlcHRoID0gbGF5
ZXItPnN1cGVybGF5ZXIoKS0+bV9kcmF3RGVwdGg7CisgICAgICAgICAgICBsYXllci0+c2V0RHJh
d0RlcHRoKGxheWVyLT5zdXBlcmxheWVyKCktPmRyYXdEZXB0aCgpKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbGF5ZXItPm1fZHJhd0RlcHRoID0gbGF5ZXJEcmF3TWF0cml4Lm00MygpOwor
ICAgICAgICAgICAgbGF5ZXItPnNldERyYXdEZXB0aChsYXllckRyYXdNYXRyaXgubTQzKCkpOwog
ICAgIH0gZWxzZQotICAgICAgICBsYXllci0+bV9kcmF3RGVwdGggPSAwOworICAgICAgICBsYXll
ci0+c2V0RHJhd0RlcHRoKDApOwogCiAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29ydCBh
bGwgdGhlIGRlc2NlbmRhbnRzIGJ5IHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhlaXIKICAgICAvLyBj
ZW50ZXIuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHN1
cGVybGF5ZXIgdGhlbgogICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHN1cGVybGF5ZXIg
d2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgogICAgIGlmIChsYXllci0+cHJl
c2VydmVzM0QoKSAmJiAoIWxheWVyLT5zdXBlcmxheWVyKCkgfHwgIWxheWVyLT5zdXBlcmxheWVy
KCktPnByZXNlcnZlczNEKCkpKQogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZkZXNjZW5kYW50
cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsK
KworCisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaWYgbmVjZXNzYXJ5
LgorICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgbGF5ZXItPnVwZGF0
ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIH0KIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0
ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2MSw3ICs2ODYsNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wgY29t
cG9zaXRlT2Zmc2NyZWVuKQogICAgICAgICAvLyBvciBlbHNlIHRoZSBjYWxsIHRvIHByZXBhcmVD
b250ZW50c1RleHR1cmUoKSBpbiB1c2VSZW5kZXJTdXJmYWNlKCkgd2lsbCBmYWlsLgogICAgICAg
ICBtX3Jvb3RMYXllci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9yb290TGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5jbGVhcigpOworICAgICAgICBtX3Jvb3RM
YXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiB9CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1c2VSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFj
ZSkKQEAgLTY5NSwzNiArNzIwLDMyIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VS
ZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0U3VyZmFjZSkK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ29tcENDTGF5ZXIqIGxheWVy
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFN1cmZhY2UpCiB7Ci0gICAgaWYgKGxheWVy
LT5tX3JlbmRlclN1cmZhY2UgJiYgbGF5ZXItPm1fcmVuZGVyU3VyZmFjZSAhPSB0YXJnZXRTdXJm
YWNlKSB7Ci0gICAgICAgIGxheWVyLT5tX3JlbmRlclN1cmZhY2UtPmRyYXcoKTsKKyAgICBpZiAo
bGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHRhcmdl
dFN1cmZhY2UpIHsKKyAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGxheWVyLT5tX2JvdW5kcy5pc0VtcHR5KCkp
CisgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPm1fc2Npc3NvclJlY3QpOworICAgIHNldFNjaXNz
b3JUb1JlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGxh
eWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCiAgICAgSW50
UmVjdCBsYXllclJlY3QgPSBsYXllci0+Z2V0RHJhd1JlY3QoKTsKLSAgICBib29sIGlzTGF5ZXJW
aXNpYmxlID0gbGF5ZXItPm1fc2Npc3NvclJlY3QuaW50ZXJzZWN0cyhsYXllclJlY3QpOworICAg
IGJvb2wgaXNMYXllclZpc2libGUgPSBsYXllci0+c2Npc3NvclJlY3QoKS5pbnRlcnNlY3RzKGxh
eWVyUmVjdCk7CiAgICAgaWYgKCFpc0xheWVyVmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGNvbW11bGF0aXZlIHJl
bmRlciBzdXJmYWNlIHRyYW5zZm9ybXMgYWxsIHRoZSB3YXkgZnJvbQogICAgIC8vICAgICAgICB0
aGUgZGVmYXVsdCByZW5kZXIgc3VyZmFjZSBpbiBvcmRlciB0byBkZXRlcm1pbmUgdmlzaWJpbGl0
eS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZERyYXdNYXRyaXggPSAobGF5ZXIt
Pm1fcmVuZGVyU3VyZmFjZSA/IGxheWVyLT5tX3JlbmRlclN1cmZhY2UtPmRyYXdUcmFuc2Zvcm0o
KS5tdWx0aXBseShsYXllci0+bV9kcmF3VHJhbnNmb3JtKSA6IGxheWVyLT5tX2RyYXdUcmFuc2Zv
cm0pOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkRHJhd01hdHJpeCA9IChsYXll
ci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9y
bSgpLm11bHRpcGx5KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpIDogbGF5ZXItPmRyYXdUcmFuc2Zv
cm0oKSk7CiAgICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSAmJiBjb21iaW5lZERyYXdNYXRy
aXgubTMzKCkgPCAwKQogICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxheWVyLT5kcmF3c0Nv
bnRlbnQoKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBp
ZiBuZWNlc3NhcnkuCi0gICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobGF5ZXItPmRy
YXdzQ29udGVudCgpKQogICAgICAgICBsYXllci0+ZHJhdygpOwotICAgIH0KIAogICAgIC8vIERy
YXcgdGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCiAgICAgbGF5ZXItPmRyYXdEZWJ1
Z0JvcmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAzZDNlNzg0
YzRjYTE4NWQ5M2NmM2E4ZTE4NmUxYTA0M2U3ODZmNjNmLi4wZDk0MTE2MjNmNzQyYTVmYjU3MDE3
YTQwNTBmZWVjMTg3MWVjZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApA
QCAtODksNyArODksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENvbXBvc2l0ZU9mZnNjcmVl
bihib29sKTsKICAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSB7IHJldHVybiBtX2Nv
bXBvc2l0ZU9mZnNjcmVlbjsgfQotICAgIExheWVyVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJU
ZXh0dXJlKCkgeyByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gPyBtX3Jvb3RMYXllci0+bV9y
ZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRzVGV4dHVyZS5nZXQoKSA6IDA7IH0KKyAgICBMYXllclRl
eHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpIHsgcmV0dXJuIG1fY29tcG9zaXRlT2Zm
c2NyZWVuID8gbV9yb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9jb250ZW50c1RleHR1cmUu
Z2V0KCkgOiAwOyB9CiAKICAgICB2b2lkIHNldFJvb3RMYXllckNhbnZhc1NpemUoY29uc3QgSW50
U2l6ZSYpOwogCkBAIC0xMjcsOSArMTI3LDEwIEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTGF5
ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNz
Q29udGV4dDNEKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVt
KiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9y
PExheWVyQ2hyb21pdW0qPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPExheWVyQ2hy
b21pdW0qPiYgbGF5ZXJMaXN0KTsKIAotICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21pdW0q
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qKTsKKyAgICB2b2lkIGRyYXdMYXllcihDb21wQ0NMYXll
ciosIFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOwogCi0gICAgdm9pZCB1cGRhdGVBbmREcmF3Um9v
dExheWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxlUGFpbnRJbnRlcmZhY2Um
IHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpOworICAgIHZvaWQgdXBkYXRlUm9vdExheWVyKFRpbGVQYWludEludGVy
ZmFjZSYsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsKKyAgICB2b2lkIGRyYXdSb290TGF5
ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAogICAgIGJvb2wgaXNMYXll
clZpc2libGUoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9Db21wQ0NMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9Db21wQ0NMYXllci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMmE3MjkxNGFhMTY1ZDZjMDFmOTgzN2U3ZmZiZWMwNjg1OGExYTRlZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0Nv
bXBDQ0xheWVyLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0Nv
bXBDQ0xheWVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIHsKK3ZvaWQgdG9H
TE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbSkKK3sKKyAgICBmbGF0dGVuZWRbMF0gPSBtLm0xMSgpOworICAgIGZsYXR0ZW5lZFsx
XSA9IG0ubTEyKCk7CisgICAgZmxhdHRlbmVkWzJdID0gbS5tMTMoKTsKKyAgICBmbGF0dGVuZWRb
M10gPSBtLm0xNCgpOworICAgIGZsYXR0ZW5lZFs0XSA9IG0ubTIxKCk7CisgICAgZmxhdHRlbmVk
WzVdID0gbS5tMjIoKTsKKyAgICBmbGF0dGVuZWRbNl0gPSBtLm0yMygpOworICAgIGZsYXR0ZW5l
ZFs3XSA9IG0ubTI0KCk7CisgICAgZmxhdHRlbmVkWzhdID0gbS5tMzEoKTsKKyAgICBmbGF0dGVu
ZWRbOV0gPSBtLm0zMigpOworICAgIGZsYXR0ZW5lZFsxMF0gPSBtLm0zMygpOworICAgIGZsYXR0
ZW5lZFsxMV0gPSBtLm0zNCgpOworICAgIGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgpOworICAgIGZs
YXR0ZW5lZFsxM10gPSBtLm00MigpOworICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00MygpOworICAg
IGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgpOworfQorfQorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ29tcENDTGF5ZXI6OkNvbXBDQ0xheWVyKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDog
bV9vd25lcihvd25lcikKKyAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQorICAgICwgbV9k
cmF3RGVwdGgoMCkKKyAgICAsIG1fZHJhd09wYWNpdHkoMCkKKyAgICAsIG1fZG91YmxlU2lkZWQo
dHJ1ZSkKKyAgICAsIG1fZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQorICAgICwgbV9kZWJ1
Z0JvcmRlcldpZHRoKDApCisgICAgLCBtX3JlbmRlclN1cmZhY2UoMCkKKyAgICAsIG1fbGF5ZXJS
ZW5kZXJlcigwKQoreworfQorCitDb21wQ0NMYXllcjo6fkNvbXBDQ0xheWVyKCkKK3sKK30KKwor
dm9pZCBDb21wQ0NMYXllcjo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0q
IHJlbmRlcmVyKQoreworICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOworfQorCitSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIENvbXBDQ0xheWVyOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKK3sK
KyAgICBtX3JlbmRlclN1cmZhY2UgPSBuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtKG1fb3duZXIp
OworICAgIHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7Cit9CisKKy8vIFRoZXNlIGJlbG9u
ZyBvbiBDb21wQ0NMYXllciwgYnV0IHNob3VsZCBiZSBzdWJjbGFzZWQgYnkgZWFjaCB0eXBlIGFu
ZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCitib29sIENvbXBDQ0xh
eWVyOjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5kcmF3c0Nv
bnRlbnQoKTsKK30KKwordm9pZCBDb21wQ0NMYXllcjo6ZHJhdygpCit7CisgICAgcmV0dXJuIG1f
b3duZXItPmRyYXcoKTsKK30KKworY29uc3QgSW50UmVjdCBDb21wQ0NMYXllcjo6Z2V0RHJhd1Jl
Y3QoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5nZXREcmF3UmVjdCgpOworfQorCit2
b2lkIENvbXBDQ0xheWVyOjpkcmF3RGVidWdCb3JkZXIoKQoreworICAgIHN0YXRpYyBmbG9hdCBn
bE1hdHJpeFsxNl07CisgICAgaWYgKCFkZWJ1Z0JvcmRlckNvbG9yKCkuYWxwaGEoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisgICAgY29uc3QgTGF5
ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+bGF5ZXJTaGFy
ZWRWYWx1ZXMoKTsKKyAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOworICAgIGxh
eWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5ib3JkZXJTaGFkZXJQcm9ncmFtKCkpOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdUcmFuc2Zvcm0oKTsKKyAg
ICByZW5kZXJNYXRyaXguc2NhbGUzZChtX293bmVyLT5ib3VuZHMoKS53aWR0aCgpLCBtX293bmVy
LT5ib3VuZHMoKS5oZWlnaHQoKSwgMSk7CisgICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGxh
eWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsKKyAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KHN2LT5ib3JkZXJTaGFk
ZXJNYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7CisKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHN2LT5ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9u
KCksIGRlYnVnQm9yZGVyQ29sb3IoKS5yZWQoKSAvIDI1NS4wLCBkZWJ1Z0JvcmRlckNvbG9yKCku
Z3JlZW4oKSAvIDI1NS4wLCBkZWJ1Z0JvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEpKTsK
KworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5saW5lV2lkdGgoZGVidWdCb3JkZXJXaWR0aCgp
KSk7CisKKyAgICAvLyBUaGUgaW5kaWNlcyBmb3IgdGhlIGxpbmUgYXJlIHN0b3JlZCBpbiB0aGUg
c2FtZSBhcnJheSBhcyB0aGUgdHJpYW5nbGUgaW5kaWNlcy4KKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIDQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkp
KTsKK30KK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ29t
cENDTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NvbXBDQ0xheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRjMjI0NGM2NGU3OWRkM2ZkNWRiNjdiNDdkMTZl
NGE1ODc4ZjZiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NvbXBDQ0xheWVyLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENvbXBDQ0xheWVyX2gKKyNkZWZpbmUgQ29tcENDTGF5ZXJfaAorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK2Ns
YXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKK2NsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1bTsK
KworY2xhc3MgQ29tcENDTGF5ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDb21wQ0NMYXllcj4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbXBDQ0xheWVyPiBjcmVhdGUoTGF5ZXJD
aHJvbWl1bSogb3duZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbXBD
Q0xheWVyKG93bmVyKSk7CisgICAgfQorICAgIC8vIFdoZW4gdGhpcyBjbGFzcyBnZXRzIHN1YmNs
YXNzZXMsIHJlbWVtYmVyIHRvIGFkZCAndmlydHVhbCcgaGVyZS4KKyAgICB+Q29tcENDTGF5ZXIo
KTsKKworICAgIC8vIFRoZXNlIGJlbG9uZyBvbiBDb21wQ0NMYXllciwgYnV0IHNob3VsZCBiZSBz
dWJjbGFzZWQgYnkgZWFjaCB0eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0g
c3VidHlwZXMuCisgICAgdm9pZCBkcmF3KCk7CisgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25z
dDsKKworICAgIC8vIERlYnVnIGxheWVyIGJvcmRlciAtIHZpc3VhbCBlZmZlY3Qgb25seSwgZG8g
bm90IGNoYW5nZSBnZW9tZXRyeS9jbGlwcGluZy9ldGMuCisgICAgdm9pZCBzZXREZWJ1Z0JvcmRl
ckNvbG9yKENvbG9yIGMpIHsgbV9kZWJ1Z0JvcmRlckNvbG9yID0gYzsgfQorICAgIENvbG9yIGRl
YnVnQm9yZGVyQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnQm9yZGVyQ29sb3I7IH0KKyAg
ICB2b2lkIHNldERlYnVnQm9yZGVyV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9kZWJ1Z0JvcmRlcldp
ZHRoID0gd2lkdGg7IH0KKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9kZWJ1Z0JvcmRlcldpZHRoOyB9CisKKyAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOwor
CisgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOworICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJSZW5kZXJlci5nZXQoKTsgfQorCisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBjcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1
cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7IH0KKyAgICB2b2lk
IGNsZWFyUmVuZGVyU3VyZmFjZSgpIHsgbV9yZW5kZXJTdXJmYWNlLmNsZWFyKCk7IH0KKyAgICBm
bG9hdCBkcmF3RGVwdGgoKSBjb25zdCB7IHJldHVybiBtX2RyYXdEZXB0aDsgfQorICAgIHZvaWQg
c2V0RHJhd0RlcHRoKGZsb2F0IGRlcHRoKSB7IG1fZHJhd0RlcHRoID0gZGVwdGg7IH0KKyAgICBm
bG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KKyAgICB2
b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNp
dHk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZh
Y2U7IH0KKyAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KKworICAg
IGJvb2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZVNpZGVkOyB9CisgICAg
dm9pZCBzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQgPSBk
b3VibGVTaWRlZDsgfQorICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IG1fYm91bmRzOyB9CisgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgYm91bmRzKSB7
IG1fYm91bmRzID0gYm91bmRzOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSByZWN0IGNvbnRhaW50
YWluaW5nIHRoaXMgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgdmlldydzIGNvb3JkaW5hdGUgc3lzdGVt
LgorICAgIGNvbnN0IEludFJlY3QgZ2V0RHJhd1JlY3QoKSBjb25zdDsKKworICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3
VHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9kcmF3VHJhbnNmb3JtID0gbWF0cml4OyB9CisgICAgY29u
c3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2Fi
bGVDb250ZW50UmVjdDsgfQorICAgIHZvaWQgc2V0RHJhd2FibGVDb250ZW50UmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KSB7IG1fZHJhd2FibGVDb250ZW50UmVjdCA9IHJlY3Q7IH0KKworcHJpdmF0
ZToKKyAgICAvLyBGb3Igbm93LCBDQ0xheWVycyBhcmUgb3duZWQgZGlyZWN0bHkgYnkgYSBMYXll
ckNocm9taXVtLgorICAgIExheWVyQ2hyb21pdW0qIG1fb3duZXI7CisgICAgZXhwbGljaXQgQ29t
cENDTGF5ZXIoTGF5ZXJDaHJvbWl1bSopOworCisgICAgLy8gUmVuZGVyIHN1cmZhY2UgdGhpcyBs
YXllciBkcmF3cyBpbnRvLiBUaGlzIGlzIGEgc3VyZmFjZSB0aGF0IGNhbiBiZWxvbmcKKyAgICAv
LyBlaXRoZXIgdG8gdGhpcyBsYXllciAoaWYgbV90YXJnZXRSZW5kZXJTdXJmYWNlID09IG1fcmVu
ZGVyU3VyZmFjZSkgb3IKKyAgICAvLyB0byBhbiBhbmNlc3RvciBvZiB0aGlzIGxheWVyLiBUaGUg
dGFyZ2V0IHJlbmRlciBzdXJmYWNlIGRldGVybWluZXMgdGhlCisgICAgLy8gY29vcmRpbmF0ZSBz
eXN0ZW0gdGhlIGxheWVyJ3MgdHJhbnNmb3JtcyBhcmUgcmVsYXRpdmUgdG8uCisgICAgUmVuZGVy
U3VyZmFjZUNocm9taXVtKiBtX3RhcmdldFJlbmRlclN1cmZhY2U7CisKKyAgICAvLyBUaGUgZ2xv
YmFsIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLiBUaGlzIHZhbHVlIGlz
IHVzZWQKKyAgICAvLyB0byBzb3J0IGxheWVycyBmcm9tIGJhY2sgdG8gZnJvbnQuCisgICAgZmxv
YXQgbV9kcmF3RGVwdGg7CisgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKKworICAgIC8vIFdoZXRo
ZXIgdGhlICJiYWNrIiBvZiB0aGlzIGxheWVyIHNob3VsZCBkcmF3LgorICAgIGJvb2wgbV9kb3Vi
bGVTaWRlZDsKKworICAgIC8vIERlYnVnIGJvcmRlcnMuCisgICAgQ29sb3IgbV9kZWJ1Z0JvcmRl
ckNvbG9yOworICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aDsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKworICAgIEludFNpemUgbV9ib3VuZHM7CisKKyAg
ICAvLyBUaGUgc2Npc3NvciByZWN0YW5nbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoaXMg
bGF5ZXIgaXMgZHJhd24uCisgICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5k
IGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCisgICAgLy8gdG8gYm91bmRz
LgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKworICAgIC8vIFJlbmRlciBzdXJmYWNlIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cwor
ICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KKyAgICBPd25QdHI8UmVuZGVyU3Vy
ZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CisKKyAgICAvLyBIaWVyYXJjaGljYWwgYm91
bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzLgorICAg
IEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OworCisgICAgLy8gUG9pbnRzIHRvIHRoZSBs
YXllciByZW5kZXJlciB0aGF0IHVwZGF0ZXMgYW5kIGRyYXdzIHRoaXMgbGF5ZXIuCisgICAgUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOworfTsKKworfQorCisj
ZW5kaWYKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82086</attachid>
            <date>2011-02-10 18:47:27 -0800</date>
            <delta_ts>2011-02-10 21:49:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54047-20110210184726.patch</filename>
            <type>text/plain</type>
            <size>77267</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxMzM2ODcwMjc2ODc3OWFlZjIwYmIyOTYxNjViMTA2YmU0N2MzYTdkLi5j
M2VjYjY3ZTNmNzdhODM4Yzk4ZGM2NmFkOWM1ODRlY2NjYzcxNjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTIgQEAKKzIwMTEtMDItMDggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFNlcGFyYXRlIHRoZSAidXBkYXRlIiBhbmQgImRyYXciIHBvcnRpb25zIG9mIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSdzIGRyYXdMYXllcnMgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDQ3CisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3Jk
ZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3JkZXJXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb21wQ0NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpsYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06OnJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xl
YXJSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdE
ZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3RGVwdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd09wYWNpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RHJhd09wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06OnNldERvdWJsZVNpZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3VHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJlTGF5
ZXJaKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9v
dExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jv
b3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVM
YXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpzZXRDb21wb3NpdGVPZmZzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NvbXBDQ0xheWVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb21wQ0NMYXllcjo6Q29tcENDTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcENDTGF5ZXI6On5Db21wQ0NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXll
cjo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6Y3Jl
YXRlUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpnZXREcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wQ0NMYXllcjo6ZHJhd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9Db21wQ0NMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBDQ0xheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnNldERl
YnVnQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRlYnVnQm9y
ZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnNldERlYnVnQm9yZGVy
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRlYnVnQm9yZGVyV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmxheWVyUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcENDTGF5ZXI6OmNsZWFyUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wQ0NMYXllcjo6ZHJhd0RlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpz
ZXREcmF3RGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRyYXdPcGFjaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpzZXREcmF3T3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcENDTGF5ZXI6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBD
Q0xheWVyOjp0YXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpkb3VibGVTaWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2V0RG91
YmxlU2lkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBDQ0xheWVyOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpzZXREcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpk
cmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpzZXRE
cmF3YWJsZUNvbnRlbnRSZWN0KToKKwogMjAxMS0wMi0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGds
YXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDM3NDExZTBhNDFhOTBlMTJiNjMyY2JjMjUwNWQ2MWM5YjVhYmYx
OGEuLmU3MjI3NzE2NWM2ODVjYTQyZTc2NzEzMTM2Y2YxYjM3ZWRmOTkxM2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTI2MzEsNiArMjYzMSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVkRNWFBhcnNlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5t
bScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRhZWYyNWIx
NWFlZmU5NDQwNTIyMTc0NDRiOWFkY2EwY2YyYTFmZGYuLjVlZWU2ZGRhYmFhOGRkOGVlNDgxNjYz
OGQwM2FlZjlhZjAwNmIxNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAKKyNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKQEAgLTExNiw4ICsxMTcsOCBA
QCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJl
SWQpKTsKICAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+Y2FudmFzU2hhZGVyUHJv
Z3JhbSgpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5zaGFkZXJT
YW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5
ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKLSAgICAg
ICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3
T3BhY2l0eSgpLAorICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigp
LT5wcm9qZWN0aW9uTWF0cml4KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwKKyAg
ICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBj
Y0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgICAgc3YtPnNo
YWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYTM4ZjZiZDIxMjY5MGEyOGY5
ODM4ZGI4OTYzNWE4NDE0Y2I2ZDc3ZS4uNjg1NzUyMTZjMmNkNWEwMWQ5MDViNjFkYjkzZTRmZDdj
MDZjZTZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIK
QEAgLTE1NCw5ICsxNTUsOSBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpyZXF1aXJlc0Ns
aXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5z
aW9ucyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgogICAgIC8vIHN1
cmZhY2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVu
dGlsIGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4KICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eExheWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuIChtX2JvdW5kcy53aWR0aCgpID4gbWF4KG1h
eExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLndpZHRoKCkp
Ci0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQoKSA+IG1heChtYXhMYXllclNpemUsIG1f
dGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSkKLSAgICAgICAgICAg
IHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNpemUobV9ib3VuZHMpKTsKKyAgICBy
ZXR1cm4gKGJvdW5kcygpLndpZHRoKCkgPiBtYXgobWF4TGF5ZXJTaXplLCBjY0xheWVySW1wbCgp
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkKKyAgICAgICAg
ICAgIHx8IGJvdW5kcygpLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgY2NMYXllckltcGwo
KS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQorICAgICAg
ICAgICAgfHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwog
fQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQpA
QCAtMTY5LDI4ICsxNzAsMjQgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJZkRpcnR5KCkKIAogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCi0gICAgdm9p
ZCogcGl4ZWxzID0gMDsKICAgICBJbnRSZWN0IGRpcnR5UmVjdDsKLSAgICBJbnRSZWN0IHVwZGF0
ZVJlY3Q7Ci0gICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplOwotICAgIEludFNpemUgYml0
bWFwU2l6ZTsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRz
KTsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKIAog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBs
ZW1lbnRlZC4KICAgICBpZiAocmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpKSB7CiAgICAgICAg
IC8vIEEgbGF5ZXIgd2l0aCAzRCB0cmFuc2Zvcm1zIGNvdWxkIHJlcXVpcmUgYW4gYXJiaXRyYXJp
bHkgbGFyZ2UgbnVtYmVyCiAgICAgICAgIC8vIG9mIHRleGVscyB0byBiZSByZXBhaW50ZWQsIHNv
IGlnbm9yZSB0aGVzZSBsYXllcnMgdW50aWwgdGlsaW5nIGlzCiAgICAgICAgIC8vIGltcGxlbWVu
dGVkLgotICAgICAgICBpZiAoIWRyYXdUcmFuc2Zvcm0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bigpKSB7CisgICAgICAgIGlmICghY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENhbGN1bGF0ZSB0
aGUgcmVnaW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCBpcyBjdXJyZW50bHkgdmlzaWJsZS4KLSAgICAg
ICAgY29uc3QgSW50UmVjdCBjbGlwUmVjdCA9IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVu
dFJlY3QoKTsKKyAgICAgICAgY29uc3QgSW50UmVjdCBjbGlwUmVjdCA9IGNjTGF5ZXJJbXBsKCkt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKIAotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKLSAg
ICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIG1fYm91bmRzLndp
ZHRoKCksIC0wLjUgKiBtX2JvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gY2NMYXllckltcGwoKS0+ZHJhd1RyYW5z
Zm9ybSgpOworICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICog
Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCAwKTsKIAogICAgICAg
ICAvLyBGb3Igbm93IHdlIGFwcGx5IHRoZSBsYXJnZSBsYXllciB0cmVhdG1lbnQgb25seSBmb3Ig
bGF5ZXJzIHRoYXQgYXJlIGVpdGhlciB1bnRyYW5zZm9ybWVkCiAgICAgICAgIC8vIG9yIGFyZSBw
dXJlbHkgdHJhbnNsYXRlZC4gVGhlaXIgbWF0cml4IGlzIGV4cGVjdGVkIHRvIGJlIGludmVydGli
bGUuCkBAIC0xOTgsNyArMTk1LDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRU
b0xheWVyTWF0cml4ID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpOwogICAgICAgICBJ
bnRSZWN0IHZpc2libGVSZWN0SW5MYXllckNvb3JkcyA9IHRhcmdldFRvTGF5ZXJNYXRyaXgubWFw
UmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5pbnRlcnNl
Y3QoSW50UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwor
ICAgICAgICB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwg
Ym91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpKTsKIAogICAgICAgICAvLyBGb3Ig
bm9ybWFsIGxheWVycywgdGhlIGNlbnRlciBvZiB0aGUgdGV4dHVyZSBjb3JyZXNwb25kcyB3aXRo
IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgogICAgICAgICAvLyBJbiBsYXJnZSBsYXllcnMgdGhl
IGNlbnRlciBvZiB0aGUgdGV4dHVyZSBpcyB0aGUgY2VudGVyIG9mIHRoZSB2aXNpYmxlIHJlZ2lv
biBzbyB3ZSBoYXZlCkBAIC0yMTQsNyArMjExLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBw
b3J0aW9uIG9mIHRoZSBsYXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQsIG9y
IGlmIG91ciBiYWNraW5nCiAgICAgICAgIC8vIHRleHR1cmUgaGFzIGJlZW4gZXZpY3RlZCwgdGhl
biB0aGUgd2hvbGUgbGF5ZXIgaXMgY29uc2lkZXJlZCBkaXJ0eS4KLSAgICAgICAgaWYgKHZpc2li
bGVSZWN0SW5MYXllckNvb3JkcyAhPSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyB8fCAhbV9j
b250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkVGV4
dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgaWYgKHZpc2libGVS
ZWN0SW5MYXllckNvb3JkcyAhPSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyB8fCAhbV9jb250
ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICAgICAgbV9kaXJ0eVJl
Y3QgPSBib3VuZHNSZWN0OwogICAgICAgICBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyA9IHZp
c2libGVSZWN0SW5MYXllckNvb3JkczsKIApAQCAtMjI0LDMzICsyMjEsMzIgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBX
aGF0IHRoZSByZWN0YW5nbGVzIG1lYW46CiAgICAgICAgIC8vICAgZGlydHlSZWN0OiBUaGUgcmVn
aW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCB3aWxsIGJlIHVwZGF0ZWQuCi0gICAgICAgIC8vICAgdXBk
YXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1
cGxvYWRlZCBpbnRvLgotICAgICAgICAvLyAgIHJlcXVpcmVkVGV4dHVyZVNpemU6IGlzIHRoZSBy
ZXF1aXJlZCBzaXplIG9mIHRoaXMgbGF5ZXIncyB0ZXh0dXJlLgorICAgICAgICAvLyAgIG1fdXBs
b2FkVXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2ls
bCBiZSB1cGxvYWRlZCBpbnRvLgorICAgICAgICAvLyAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZTog
aXMgdGhlIHJlcXVpcmVkIHNpemUgb2YgdGhpcyBsYXllcidzIHRleHR1cmUuCiAgICAgICAgIGRp
cnR5UmVjdCA9IHZpc2libGVEaXJ0eVJlY3RJbkxheWVyU3BhY2U7Ci0gICAgICAgIHVwZGF0ZVJl
Y3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsK
ICAgICAgICAgSW50U2l6ZSB2aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHModmlzaWJsZVJl
Y3RJbkxheWVyQ29vcmRzLngoKSwgdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLnkoKSk7Ci0gICAg
ICAgIHVwZGF0ZVJlY3QubW92ZSgtdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKTsKLSAg
ICAgICAgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5zaXpl
KCk7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12aXNpYmxlUmVjdE9mZnNldElu
TGF5ZXJDb29yZHMpOworICAgICAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVj
dEluTGF5ZXJDb29yZHMuc2l6ZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRpcnR5UmVjdCA9
IEludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9i
b3VuZHM7CisgICAgICAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGJvdW5kcygpOwogICAgICAg
ICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdlIG11c3Qg
cmVkcmF3IHRoZSBlbnRpcmUKICAgICAgICAgLy8gY29udGVudHMgb2YgdGhlIGxheWVyLgotICAg
ICAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxp
ZChyZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1f
cmVxdWlyZWRUZXh0dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICAg
ICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAv
LyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRy
YXdpbmcKICAgICAgICAgICAgIC8vIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0
ZXh0dXJlLgogICAgICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKICAg
ICAgICAgfQotICAgICAgICB1cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBtX3VwbG9h
ZFVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgfQogCiAgICAgaWYgKGRpcnR5UmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3Qg
U2tCaXRtYXAqIHNraWFCaXRtYXAgPSAwOwogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZh
cz4gY2FudmFzOwogICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBza2lhQ29udGV4dDsK
ICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CkBAIC0yNjgsMjQg
KzI2NCwyMSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGly
dHkoKQogICAgIGNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlS
ZWN0LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOwogCiAgICAg
bV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29udGV4dCwgZGly
dHlSZWN0KTsKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZpY2Uo
KS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKLSAgICBza2lhQml0bWFwID0gJmJpdG1hcDsKLSAgICBB
U1NFUlQoc2tpYUJpdG1hcCk7CiAKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFCaXRt
YXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZp
ZygpOworICAgIGNvbnN0IFNrQml0bWFwJiBza2lhQml0bWFwID0gY2FudmFzLT5nZXREZXZpY2Uo
KS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soc2tpYUJp
dG1hcCk7CisgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC5jb25m
aWcoKTsKICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29u
ZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhf
Q29uZmlnKSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVscygpOwotICAg
ICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFw
LT5oZWlnaHQoKSk7Ci0gICAgfQorICAgIEFTU0VSVChza2lhQ29uZmlnID09IFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZyk7CisgICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVjdC53aWR0
aCgpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZlY3Rvcjx1aW50OF90Pihyb3dCeXRl
cyAqIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgc2tpYUJpdG1hcC5jb3B5UGl4ZWxzVG8obV91
cGxvYWRQaXhlbERhdGEtPmRhdGEoKSwgbV91cGxvYWRQaXhlbERhdGEtPnNpemUoKSk7CiAjZWxp
ZiBQTEFURk9STShDRykKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKICAgICBpbnQg
cm93Qnl0ZXMgPSA0ICogZGlydHlSZWN0LndpZHRoKCk7Ci0gICAgdGVtcFZlY3Rvci5yZXNpemUo
cm93Qnl0ZXMgKiBkaXJ0eVJlY3QuaGVpZ2h0KCkpOwotICAgIG1lbXNldCh0ZW1wVmVjdG9yLmRh
dGEoKSwgMCwgdGVtcFZlY3Rvci5zaXplKCkpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3
IFZlY3Rvcjx1aW50OF90Pihyb3dCeXRlcyAqIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgbWVt
c2V0KG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksIDAsIG1fdXBsb2FkUGl4ZWxEYXRhLT5zaXpl
KCkpOwogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwg
Q0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZlY3Rvci5k
YXRhKCksCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENHKEFkb3B0Q0YsIENH
Qml0bWFwQ29udGV4dENyZWF0ZShtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOwpAQCAtMjk4LDE1
ICsyOTEsOSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGly
dHkoKQogICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0
eVJlY3QueSgpKTsKIAogICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdy
YXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLQotICAgIHBpeGVscyA9IHRlbXBWZWN0b3IuZGF0
YSgpOwotICAgIGJpdG1hcFNpemUgPSBkaXJ0eVJlY3Quc2l6ZSgpOwogI2Vsc2UKICNlcnJvciAi
TmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0KLSAgICBpZiAo
cGl4ZWxzKQotICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChwaXhlbHMsIHJlcXVpcmVkVGV4dHVy
ZVNpemUsIHVwZGF0ZVJlY3QpOwogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVy
ZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCkBAIC0zMzcsNiArMzI0LDExIEBAIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIGlmIChtX3NraXBzRHJhdykKICAg
ICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fdXBsb2FkUGl4ZWxEYXRhKSB7CisgICAgICAgIHVw
ZGF0ZVRleHR1cmVSZWN0KG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksIG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZSwgbV91cGxvYWRVcGRhdGVSZWN0KTsKKyAgICAgICAgbV91cGxvYWRQaXhlbERhdGEu
Y2xlYXIoKTsKKyAgICB9CisKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKIAogICAgIGNv
bnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJl
cigpLT5jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKQEAgLTM0OCwxNyArMzQwLDE3IEBAIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtMWkoc3YtPnNoYWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAKICAgICBpZiAo
cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpKSB7Ci0gICAgICAgIGZsb2F0IG00MyA9IGRyYXdU
cmFuc2Zvcm0oKS5tNDMoKTsKKyAgICAgICAgZmxvYXQgbTQzID0gY2NMYXllckltcGwoKS0+ZHJh
d1RyYW5zZm9ybSgpLm00MygpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUzZChtX2xheWVyQ2VudGVySW5TdXJmYWNl
Q29vcmRzLngoKSwgbV9sYXllckNlbnRlckluU3VyZmFjZUNvb3Jkcy55KCksIG00Myk7CiAgICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLCBtX3Zpc2libGVS
ZWN0SW5MYXllckNvb3Jkcy53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmlz
aWJsZVJlY3RJbkxheWVyQ29vcmRzLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLmhlaWdodCgpLCBjY0xh
eWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5z
aGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIo
KS0+cHJvamVjdGlvbk1hdHJpeCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUcmFu
c2Zvcm0oKSwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd09wYWNpdHkoKSwgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgp
LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLCBzdi0+c2hhZGVyTWF0cml4TG9j
YXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyQWxwaGFMb2NhdGlv
bigpKTsKICAgICB9CiAgICAgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAppbmRleCAzMzYzNTE4ZGE1MzFhYzYwZDMwZDdmODBlN2Y1Yzc2
MDNjMzJhMzgwLi4zNjNjOTQ1NmRiM2EwNDUxZWM4OTBlZTdlMzEyNjg1OWQ0YjZlZjMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTkwLDYgKzkwLDEwIEBAIHByb3RlY3Rl
ZDoKICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKICAgICBib29s
IG1fc2tpcHNEcmF3OwogCisgICAgSW50U2l6ZSBtX3JlcXVpcmVkVGV4dHVyZVNpemU7CisgICAg
SW50UmVjdCBtX3VwbG9hZFVwZGF0ZVJlY3Q7CisgICAgT3duUHRyPFZlY3Rvcjx1aW50OF90PiA+
IG1fdXBsb2FkUGl4ZWxEYXRhOworCiBwcml2YXRlOgogCiAgICAgSW50UmVjdCBtX3Zpc2libGVS
ZWN0SW5MYXllckNvb3JkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNk
Mjk5YzFhMGNlM2IzMGU5NWQ5MTRkZTA1MWI5NjMyMTk4NDljYWIuLmQ4OGQ0ZWE4NDkyZjkzMDM1
Y2FhYzQ1NmI0MDUyYzJmNWJlNzNlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cApAQCAtODQsMzIgKzg0LDI5IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdm9pZCogcGl4ZWxz
ID0gMDsKLSAgICBJbnRTaXplIGJpdG1hcFNpemU7Ci0KICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKICNp
ZiBQTEFURk9STShTS0lBKQogICAgIC8vIFRoZSBsYXllciBjb250YWlucyBhbiBJbWFnZS4KICAg
ICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU2tp
YSo+KG5hdGl2ZUltYWdlKTsKICAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IHNraWFJ
bWFnZTsKLSAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lh
Qml0bWFwLT5oZWlnaHQoKSk7CisgICAgbV9yZXF1aXJlZFRleHR1cmVTaXplID0gSW50U2l6ZShz
a2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKHNr
aWFCaXRtYXApOwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gTmF0aXZlSW1hZ2VQdHIgaXMg
YSBDR0ltYWdlUmVmIG9uIE1hYyBPUyBYLgogICAgIGludCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0
aChuYXRpdmVJbWFnZSk7CiAgICAgaW50IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQobmF0aXZl
SW1hZ2UpOwotICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1f
cmVxdWlyZWRUZXh0dXJlU2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAjZW5kaWYKIAog
ICAgIC8vIENsaXAgdGhlIGRpcnR5IHJlY3QgdG8gdGhlIGJpdG1hcCBkaW1lbnNpb25zLgotICAg
IEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpKTsKKyAgICBtX3VwbG9hZFVwZGF0
ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKKyAgICBtX3VwbG9hZFVwZGF0
ZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZSkpOwogCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSB8fCAhbV9jb250ZW50c1RleHR1
cmUtPmlzVmFsaWQoYml0bWFwU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAg
ICBkaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKTsKKyAgICBp
ZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChtX3Jl
cXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgbV91
cGxvYWRVcGRhdGVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9yZXF1aXJlZFRleHR1
cmVTaXplKTsKICAgICBlbHNlIGlmICghbV9jb250ZW50c0RpcnR5KSB7Ci0gICAgICAgIG1fY29u
dGVudHNUZXh0dXJlLT5yZXNlcnZlKGJpdG1hcFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV9yZXF1aXJlZFRleHR1cmVT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTExNywxMyArMTE0LDEzIEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7CiAg
ICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7CiAg
ICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRp
b25zPwotICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykK
LSAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7CisgICAgQVNTRVJUKHNr
aWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKKyAgICBtX3VwbG9hZFBp
eGVsRGF0YSA9IG5ldyBWZWN0b3I8dWludDhfdD4oc2tpYUJpdG1hcC0+d2lkdGgoKSAqIHNraWFC
aXRtYXAtPmhlaWdodCgpICogNCk7CisgICAgc2tpYUJpdG1hcC0+Y29weVBpeGVsc1RvKG1fdXBs
b2FkUGl4ZWxEYXRhLT5kYXRhKCksIG1fdXBsb2FkUGl4ZWxEYXRhLT5zaXplKCkpOwogI2VsaWYg
UExBVEZPUk0oQ0cpCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBnZXQgcmlkIG9mIHRoaXMgdGVt
cG9yYXJ5IGNvcHkgd2hlcmUgcG9zc2libGUuCiAgICAgaW50IHRlbXBSb3dCeXRlcyA9IHdpZHRo
ICogNDsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKLSAgICB0ZW1wVmVjdG9yLnJl
c2l6ZShoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3
IFZlY3Rvcjx1aW50OF90PihoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOwogICAgIC8vIE5vdGUgd2Ug
ZG8gbm90IHplcm8gdGhpcyB2ZWN0b3Igc2luY2Ugd2UgYXJlIGdvaW5nIHRvCiAgICAgLy8gY29t
cGxldGVseSBvdmVyd3JpdGUgaXRzIGNvbnRlbnRzIHdpdGggdGhlIGltYWdlIGJlbG93LgogICAg
IC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3BhY2UgZnJvbSB0aGUgaW1hZ2UgdG8gcHJlc2Vy
dmUgaXRzIGNvbG9ycy4KQEAgLTE0Myw3ICsxNDAsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgY29sb3JTcGFjZSA9IGNvbG9yU3Bh
Y2VSZWxlYXNlci5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFJldGFpblB0cjxD
R0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZSh0
ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiB0ZW1wQ29udGV4
dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUobV91cGxvYWRQaXhlbERhdGEtPmRhdGEo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgOCwgdGVtcFJvd0J5dGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7CkBAIC0xNTEsMTMgKzE0OCw5
IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAg
IENHQ29udGV4dERyYXdJbWFnZSh0ZW1wQ29udGV4dC5nZXQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pih3aWR0aCksIHN0YXRp
Y19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAogICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJ
bWFnZSk7Ci0gICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7CiAjZWxzZQogI2Vycm9yICJO
ZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLQotICAgIGlmIChw
aXhlbHMpCi0gICAgICAgIHVwZGF0ZVRleHR1cmVSZWN0KHBpeGVscywgYml0bWFwU2l6ZSwgIGRp
cnR5UmVjdCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOGQwMWQ5YmQ5YWE0
OWU2MWM5NmE5ZWNjYjc2NmRjYjEwMWUzNmVlMy4uODExMTEzNWVhZmYzMWM0ZjMxYmRjMGY2YmU4
YTUzMTk5NzExMzM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
IAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpZiBQTEFURk9STShTS0lBKQpAQCAtMTQ0LDI1ICsxNDUsMTkgQEAg
TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAg
ICAsIG1fbWFza0xheWVyKDApCi0gICAgLCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkKICAgICAs
IG1fc3VwZXJsYXllcigwKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1f
YmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCi0gICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAs
IDApCiAgICAgLCBtX29wYWNpdHkoMS4wKQogICAgICwgbV96UG9zaXRpb24oMC4wKQogICAgICwg
bV9hbmNob3JQb2ludFooMCkKLSAgICAsIG1fYm9yZGVyV2lkdGgoMCkKICAgICAsIG1fY2xlYXJz
Q29udGV4dChmYWxzZSkKLSAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1faGlkZGVu
KGZhbHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUodHJ1
ZSkKICAgICAsIG1fZ2VvbWV0cnlGbGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rpc3BsYXlP
bkJvdW5kc0NoYW5nZShmYWxzZSkKLSAgICAsIG1fZHJhd0RlcHRoKDApCi0gICAgLCBtX2xheWVy
UmVuZGVyZXIoMCkKLSAgICAsIG1fcmVuZGVyU3VyZmFjZSgwKQorICAgICwgbV9jY0xheWVySW1w
bChDQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKIHsK
IH0KQEAgLTE3OSw4ICsxNzQsOCBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAK
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiB7Ci0gICAgaWYgKG1fcmVu
ZGVyU3VyZmFjZSkKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlLT5jbGVhbnVwUmVzb3VyY2VzKCk7
CisgICAgaWYgKHJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcmVuZGVyU3VyZmFjZSgpLT5jbGVh
bnVwUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
cihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQpAQCAtMTkyLDEzICsxODcsNyBAQCB2
b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiByZW5kZXJlcikKICAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQogCi0gICAgbV9s
YXllclJlbmRlcmVyID0gcmVuZGVyZXI7Ci19Ci0KLVJlbmRlclN1cmZhY2VDaHJvbWl1bSogTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCi17Ci0gICAgbV9yZW5kZXJTdXJmYWNl
ID0gbmV3IFJlbmRlclN1cmZhY2VDaHJvbWl1bSh0aGlzKTsKLSAgICByZXR1cm4gbV9yZW5kZXJT
dXJmYWNlLmdldCgpOworICAgIG1fY2NMYXllckltcGwtPnNldExheWVyUmVuZGVyZXIocmVuZGVy
ZXIpOwogfQogCiB1bnNpZ25lZCBMYXllckNocm9taXVtOjpjcmVhdGVTaGFkZXJQcm9ncmFtKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2Us
IGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlKQpAQCAtMzE3LDE2ICszMDYsMTYgQEAg
aW50IExheWVyQ2hyb21pdW06OmluZGV4T2ZTdWJsYXllcihjb25zdCBMYXllckNocm9taXVtKiBy
ZWZlcmVuY2UpCiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUm
IHNpemUpCiB7Ci0gICAgaWYgKG1fYm91bmRzID09IHNpemUpCisgICAgaWYgKGJvdW5kcygpID09
IHNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgZmlyc3RSZXNpemUgPSAhbV9ib3Vu
ZHMud2lkdGgoKSAmJiAhbV9ib3VuZHMuaGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgpICYmIHNpemUu
aGVpZ2h0KCk7CisgICAgYm9vbCBmaXJzdFJlc2l6ZSA9ICFib3VuZHMoKS53aWR0aCgpICYmICFi
b3VuZHMoKS5oZWlnaHQoKSAmJiBzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKIAotICAg
IG1fYm91bmRzID0gc2l6ZTsKKyAgICBtX2NjTGF5ZXJJbXBsLT5zZXRCb3VuZHMoc2l6ZSk7CiAg
ICAgbV9iYWNraW5nU3RvcmVTaXplID0gc2l6ZTsKIAogICAgIGlmIChmaXJzdFJlc2l6ZSkKLSAg
ICAgICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBt
X2JvdW5kcy5oZWlnaHQoKSkpOworICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAs
IDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CiAgICAgZWxzZQogICAg
ICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQpAQCAtMzM3LDcgKzMyNiw3IEBAIHZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwog
CiAgICAgbV9mcmFtZSA9IHJlY3Q7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAw
LCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOworICAgIHNldE5lZWRzRGlz
cGxheShGbG9hdFJlY3QoMCwgMCwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkp
KTsKIH0KIAogY29uc3QgTGF5ZXJDaHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6cm9vdExheWVyKCkg
Y29uc3QKQEAgLTM4Niw3ICszNzUsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlz
cGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNEaXNwbGF5KCkKIHsKICAgICBtX2RpcnR5UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50
KCkpOwotICAgIG1fZGlydHlSZWN0LnNldFNpemUobV9ib3VuZHMpOworICAgIG1fZGlydHlSZWN0
LnNldFNpemUoYm91bmRzKCkpOwogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAgICAgc2V0
TmVlZHNDb21taXQoKTsKIH0KQEAgLTQ0NSwzOCArNDM0LDYgQEAgdm9pZCBMYXllckNocm9taXVt
OjpkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBUcmFu
c2Zvcm0KICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29u
dGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwg
MCkpOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcigpCi17Ci0gICAg
c3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKLSAgICBpZiAoIWJvcmRlckNvbG9yKCkuYWxwaGEo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0gICAg
Y29uc3QgU2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+bGF5ZXJTaGFyZWRWYWx1
ZXMoKTsKLSAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOwotICAgIGxheWVyUmVu
ZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5ib3JkZXJTaGFkZXJQcm9ncmFtKCkpOwotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdUcmFuc2Zvcm0oKTsKLSAgICByZW5k
ZXJNYXRyaXguc2NhbGUzZChib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgMSk7
Ci0gICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlv
bk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVu
aWZvcm1NYXRyaXg0ZnYoc3YtPmJvcmRlclNoYWRlck1hdHJpeExvY2F0aW9uKCksIGZhbHNlLCAm
Z2xNYXRyaXhbMF0sIDEpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYo
c3YtPmJvcmRlclNoYWRlckNvbG9yTG9jYXRpb24oKSwgYm9yZGVyQ29sb3IoKS5yZWQoKSAvIDI1
NS4wLCBib3JkZXJDb2xvcigpLmdyZWVuKCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IoKS5ibHVlKCkg
LyAyNTUuMCwgMSkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmxpbmVXaWR0aChib3Jk
ZXJXaWR0aCgpKSk7Ci0KLSAgICAvLyBUaGUgaW5kaWNlcyBmb3IgdGhlIGxpbmUgYXJlIHN0b3Jl
ZCBpbiB0aGUgc2FtZSBhcnJheSBhcyB0aGUgdHJpYW5nbGUgaW5kaWNlcy4KLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1As
IDQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCkpKTsKLX0KLQotY29uc3QgSW50UmVjdCBMYXllckNocm9taXVtOjpnZXREcmF3UmVj
dCgpIGNvbnN0Ci17Ci0gICAgLy8gRm9ybSB0aGUgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciB0
byBtYXAgdGhlIGNvcm5lcnMgb2YgdGhlIGxheWVyJ3MKLSAgICAvLyBib3VuZHMgaW50byB0aGUg
dmlldyBzcGFjZS4KLSAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUgKiBib3VuZHMoKS53aWR0
aCgpLCAtMC41ICogYm91bmRzKCkuaGVpZ2h0KCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygp
LmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IG1hcHBlZFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRy
YXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOwotICAgIHJldHVybiBtYXBwZWRSZWN0
OwotfQogCiAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRz
IGhhcyBkcmF3YWJsZSBjb250ZW50LgogYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0Ry
YXdDb250ZW50KCkKQEAgLTUwMSw2ICs0NTgsNjAgQEAgYm9vbCBMYXllckNocm9taXVtOjpkZXNj
ZW5kYW50c0RyYXdDb250ZW50UmVjdXJzaXZlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKy8v
IEJlZ2luIGNhbGxzIHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllckltcGwuCisvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBUaGVzZSBleGlzdHMg
anVzdCBmb3IgZGVidWdnaW5nICh2aWEgZHJhd0RlYnVnQm9yZGVyKCkpLgordm9pZCBMYXllckNo
cm9taXVtOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgbV9jY0xh
eWVySW1wbC0+c2V0RGVidWdCb3JkZXJDb2xvcihjb2xvcik7CisgICAgc2V0TmVlZHNDb21taXQo
KTsKK30KKworQ29sb3IgTGF5ZXJDaHJvbWl1bTo6Ym9yZGVyQ29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NjTGF5ZXJJbXBsLT5kZWJ1Z0JvcmRlckNvbG9yKCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0Qm9yZGVyV2lkdGgoZmxvYXQgd2lkdGgpCit7CisgICAgbV9jY0xheWVy
SW1wbC0+c2V0RGVidWdCb3JkZXJXaWR0aCh3aWR0aCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsK
K30KKworZmxvYXQgTGF5ZXJDaHJvbWl1bTo6Ym9yZGVyV2lkdGgoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NjTGF5ZXJJbXBsLT5kZWJ1Z0JvcmRlcldpZHRoKCk7Cit9CisKK0xheWVyUmVuZGVy
ZXJDaHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJlcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fY2NMYXllckltcGwtPmxheWVyUmVuZGVyZXIoKTsKK30KKworUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiBMYXllckNocm9taXVtOjpyZW5kZXJTdXJmYWNlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpOworfQorCit2b2lkIExheWVyQ2hy
b21pdW06OnNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJm
YWNlKQoreworICAgIG1fY2NMYXllckltcGwtPnNldFRhcmdldFJlbmRlclN1cmZhY2Uoc3VyZmFj
ZSk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVT
aWRlZCkKK3sKKyAgICBtX2NjTGF5ZXJJbXBsLT5zZXREb3VibGVTaWRlZChkb3VibGVTaWRlZCk7
CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKworY29uc3QgSW50U2l6ZSYgTGF5ZXJDaHJvbWl1
bTo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jY0xheWVySW1wbC0+Ym91bmRzKCk7
Cit9CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisv
LyBFbmQgY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KKworCiAvLyBzdGF0
aWMKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZUZvckRyYXcoY29uc3QgU2hhcmVkVmFsdWVz
KiBzdikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1YzdlMmIxNDIxNzdjY2Y2OTJhYWE0YzM2
YTJlMjhmMGM2ZGYxYzg2Li5jM2M0MDcxOGE2Yzk3YTk1ZThiZGRlMDU3YWQ4OGJmZDRhNzE0MzBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAg
LTUzLDEzICs1NCwxMyBAQCBjbGFzcyBQbGF0Zm9ybUNhbnZhczsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xh
c3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogCiAvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVk
IGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNs
YXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21p
dW0+IHsKLSAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogICAgIGZyaWVu
ZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAw
KTsKQEAgLTg1LDIxICs4Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJhY2tncm91bmRDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgc2V0TmVl
ZHNDb21taXQoKTsgfQogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikgeyBtX2JvcmRlckNvbG9yID0gY29sb3I7IHNldE5lZWRzQ29tbWl0KCk7IH0K
LSAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyQ29sb3I7IH0K
LQotICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9ib3JkZXJXaWR0aCA9
IHdpZHRoOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgZmxvYXQgYm9yZGVyV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2JvcmRlcldpZHRoOyB9Ci0KLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJ
bnRTaXplJik7Ci0gICAgSW50U2l6ZSBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsg
fQotCiAgICAgdm9pZCBzZXRDbGVhcnNDb250ZXh0KGJvb2wgY2xlYXJzKSB7IG1fY2xlYXJzQ29u
dGV4dCA9IGNsZWFyczsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgY2xlYXJzQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xlYXJzQ29udGV4dDsgfQogCi0gICAgdm9pZCBzZXREb3Vi
bGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQgPSBkb3VibGVTaWRlZDsg
c2V0TmVlZHNDb21taXQoKTsgfQotICAgIGJvb2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJldHVy
biBtX2RvdWJsZVNpZGVkOyB9Ci0KICAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYp
OwogICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIApAQCAt
MTQ0LDkgKzEzMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29s
IGZsaXBwZWQpIHsgbV9nZW9tZXRyeUZsaXBwZWQgPSBmbGlwcGVkOyBzZXROZWVkc0NvbW1pdCgp
OyB9CiAgICAgYm9vbCBnZW9tZXRyeUZsaXBwZWQoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5
RmxpcHBlZDsgfQogCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KLSAgICBmbG9hdCBkcmF3T3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KLQogICAgIGJvb2wgcHJlc2Vy
dmVzM0QoKSB7IHJldHVybiBtX293bmVyICYmIG1fb3duZXItPnByZXNlcnZlczNEKCk7IH0KIAog
ICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5IG5l
ZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKQEAgLTE1OCw5ICsxNDQsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRSZXBsaWNhTGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIHsgbV9yZXBsaWNhTGF5
ZXIgPSBsYXllcjsgfQogICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllcigpIHsgcmV0dXJu
IG1fcmVwbGljYUxheWVyOyB9CiAKLSAgICAvLyBSZXR1cm5zIHRoZSByZWN0IGNvbnRhaW50YWlu
aW5nIHRoaXMgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgdmlldydzIGNvb3JkaW5hdGUgc3lzdGVtLgot
ICAgIGNvbnN0IEludFJlY3QgZ2V0RHJhd1JlY3QoKSBjb25zdDsKLQogICAgIC8vIFRoZXNlIG1l
dGhvZHMgdHlwaWNhbGx5IG5lZWQgdG8gYmUgb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBjbGFzc2Vz
LgogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKSB7IH0KQEAgLTE2OCw5ICsxNTEs
MTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRyYXcoKSB7IH0KIAotICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVy
KCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNjZW5kYW50
cyBoYXMgY29udGVudCB0byBkcmF3LgorICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3Q29udGVudCgp
OworCisgICAgLy8gVGhlc2UgZXhpc3RzIGp1c3QgZm9yIGRlYnVnZ2luZyAodmlhIGRyYXdEZWJ1
Z0JvcmRlcigpKS4KKyAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CisgICAg
Q29sb3IgYm9yZGVyQ29sb3IoKSBjb25zdDsKKworICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxv
YXQpOworICAgIGZsb2F0IGJvcmRlcldpZHRoKCkgY29uc3Q7CisKKyAgICAvLyBFdmVyeXRoaW5n
IGZyb20gaGVyZSBkb3duIGluIHRoZSBwdWJsaWMgc2VjdGlvbiB3aWxsIG1vdmUgdG8gQ0NMYXll
ckltcGwuCiAKLSAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICBDQ0xheWVySW1wbCogY2NMYXllckltcGwoKSBjb25zdCB7IHJldHVybiBtX2NjTGF5
ZXJJbXBsLmdldCgpOyB9CiAKICAgICAvLyBTdG9yZXMgdmFsdWVzIHRoYXQgYXJlIHNoYXJlZCBi
ZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHRoYXQgYXJlCiAgICAgLy8gYXNzb2NpYXRl
ZCB3aXRoIHRoZSBzYW1lIExheWVyUmVuZGVyZXJDaHJvbWl1bSAoYW5kIGhlbmNlIHRoZSBzYW1l
IEdMCkBAIC0yMDIsMTcgKzE5NSwyNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBwcmVw
YXJlRm9yRHJhdyhjb25zdCBTaGFyZWRWYWx1ZXMqKTsKIAotICAgIExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQo
KTsgfQotCiAgICAgc3RhdGljIHVuc2lnbmVkIGNyZWF0ZVNoYWRlclByb2dyYW0oR3JhcGhpY3ND
b250ZXh0M0QqLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2hhZGVyU291cmNlKTsKIAogICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQo
R3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlv
bk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxv
YXQgb3BhY2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRyaXhM
b2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24pOwogCisgICAgLy8gQmVnaW4gY2FsbHMgdGhhdCBm
b3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIoKSBjb25zdDsKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1
cmZhY2UoKSBjb25zdDsKKyAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3Vy
ZmFjZUNocm9taXVtKik7CisgICAgdm9pZCBzZXREb3VibGVTaWRlZChib29sKTsKKyAgICB2b2lk
IHNldEJvdW5kcyhjb25zdCBJbnRTaXplJik7CisgICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkg
Y29uc3Q7CisgICAgLy8gRW5kIGNhbGxzIHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllckltcGwu
CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7Ci0gICAg
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICBleHBsaWNp
dCBMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCiAgICAgLy8g
VGhpcyBpcyBjYWxsZWQgdG8gY2xlYW4gdXAgcmVzb3VyY2VzIGJlaW5nIGhlbGQgaW4gdGhlIHNh
bWUgY29udGV4dCBhcwogICAgIC8vIGxheWVyUmVuZGVyZXJDb250ZXh0KCkuIFN1YmNsYXNzZXMg
c2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZXkKQEAgLTIyMSwyMyArMjIxLDEzIEBA
IHByb3RlY3RlZDoKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4
dCgpIGNvbnN0OwogCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBk
ZXNjZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3LgotICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3
Q29udGVudCgpOwotCiAgICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCosIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0
UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVudHNEaXJ0eTsKIAogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBtX21hc2tMYXllcjsKIAotICAgIC8vIFJlbmRlciBzdXJmYWNlIHRo
aXMgbGF5ZXIgZHJhd3MgaW50by4gVGhpcyBpcyBhIHN1cmZhY2UgdGhhdCBjYW4gYmVsb25nCi0g
ICAgLy8gZWl0aGVyIHRvIHRoaXMgbGF5ZXIgKGlmIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9PSBt
X3JlbmRlclN1cmZhY2UpIG9yCi0gICAgLy8gdG8gYW4gYW5jZXN0b3Igb2YgdGhpcyBsYXllci4g
VGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZSBkZXRlcm1pbmVzIHRoZQotICAgIC8vIGNvb3JkaW5h
dGUgc3lzdGVtIHRoZSBsYXllcidzIHRyYW5zZm9ybXMgYXJlIHJlbGF0aXZlIHRvLgotICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwotCiAgICAgLy8gQWxs
IGxheWVyIHNoYWRlcnMgc2hhcmUgdGhlIHNhbWUgYXR0cmlidXRlIGxvY2F0aW9ucyBmb3IgdGhl
IHZlcnRleCBwb3NpdGlvbnMKICAgICAvLyBhbmQgdGV4dHVyZSBjb29yZGluYXRlcy4gVGhpcyBh
bGxvd3Mgc3dpdGNoaW5nIHNoYWRlcnMgd2l0aG91dCByZWJpbmRpbmcgYXR0cmlidXRlCiAgICAg
Ly8gYXJyYXlzLgpAQCAtMjcwLDQzICsyNjAsMjIgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50
IG1fcG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIENvbG9yIG1f
YmFja2dyb3VuZENvbG9yOwotICAgIENvbG9yIG1fYm9yZGVyQ29sb3I7CiAgICAgZmxvYXQgbV9v
cGFjaXR5OwogICAgIGZsb2F0IG1felBvc2l0aW9uOwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRa
OwotICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7Ci0gICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKICAg
ICBib29sIG1fY2xlYXJzQ29udGV4dDsKLSAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAgICAgYm9v
bCBtX2hpZGRlbjsKICAgICBib29sIG1fbWFza3NUb0JvdW5kczsKICAgICBib29sIG1fb3BhcXVl
OwogICAgIGJvb2wgbV9nZW9tZXRyeUZsaXBwZWQ7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxheU9u
Qm91bmRzQ2hhbmdlOwogCi0gICAgLy8gVGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUgY2Vu
dGVyIG9mIHRoZSBsYXllci4gVGhpcyB2YWx1ZSBpcyB1c2VkCi0gICAgLy8gdG8gc29ydCBsYXll
cnMgZnJvbSBiYWNrIHRvIGZyb250LgotICAgIGZsb2F0IG1fZHJhd0RlcHRoOwotCi0gICAgLy8g
UG9pbnRzIHRvIHRoZSBsYXllciByZW5kZXJlciB0aGF0IHVwZGF0ZXMgYW5kIGRyYXdzIHRoaXMg
bGF5ZXIuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVy
OwotCi0gICAgRmxvYXRSZWN0IG1fZnJhbWU7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90
cmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CiAKLSAgICAvLyBUaGUg
c2Npc3NvciByZWN0YW5nbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoaXMgbGF5ZXIgaXMg
ZHJhd24uCi0gICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIg
cmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCi0gICAgLy8gdG8gYm91bmRzLgotICAgIElu
dFJlY3QgbV9zY2lzc29yUmVjdDsKLQotICAgIC8vIFJlbmRlciBzdXJmYWNlIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cwotICAgIC8vIHdp
bGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KLSAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9t
aXVtPiBtX3JlbmRlclN1cmZhY2U7Ci0KLSAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVj
dCBjb250YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzLgotICAgIEludFJlY3Qg
bV9kcmF3YWJsZUNvbnRlbnRSZWN0OworICAgIEZsb2F0UmVjdCBtX2ZyYW1lOworICAgIC8vIEZv
ciBub3csIHRoZSBMYXllckNocm9taXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJbXBsLgor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jY0xheWVySW1wbDsKIAogICAgIC8vIFJlcGxpY2Eg
bGF5ZXIgdXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9yZXBsaWNh
TGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBmNTU0OGM5
ZjYzZjM2YjRhM2YyNTUzYmFlODU4NGVlZDA0MThjYTcxLi42ZjNiYTMxNDNkZGJjNTFjZDFhNjBk
Y2QwYWY4OWM1YTUxOTkxMjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVy
SW1wbC5oIgogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgpAQCAtODQsNyAr
ODUsNyBAQCBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbSkKIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbXBhcmVMYXll
clooY29uc3QgTGF5ZXJDaHJvbWl1bSogYSwgY29uc3QgTGF5ZXJDaHJvbWl1bSogYikKIHsKLSAg
ICByZXR1cm4gYS0+bV9kcmF3RGVwdGggPCBiLT5tX2RyYXdEZXB0aDsKKyAgICByZXR1cm4gYS0+
Y2NMYXllckltcGwoKS0+ZHJhd0RlcHRoKCkgPCBiLT5jY0xheWVySW1wbCgpLT5kcmF3RGVwdGgo
KTsKIH0KIAogUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCkBA
IC0xNzIsOSArMTczLDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlkYXRl
Um9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvCiAgICAgfQogfQogCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFp
bnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWlu
dCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllcihUaWxlUGFpbnRJ
bnRlcmZhY2UmIHRpbGVQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCiB7CiAgICAg
bV9yb290TGF5ZXJUaWxlci0+dXBkYXRlKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOworfQorCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZh
Y2UmIHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CiAgICAgbV9yb290TGF5ZXJUaWxlci0+ZHJhdyh2aXNpYmxl
UmVjdCk7CiAKICAgICBpZiAodmlzaWJsZVJlY3Qud2lkdGgoKSA+IGNvbnRlbnRSZWN0LndpZHRo
KCkpIHsKQEAgLTIxMSw3ICsyMTYsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QKICAgICBp
ZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICB1cGRhdGVSb290TGF5ZXIodGlsZVBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAg
Ly8gUmVjaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgYSByb290IGxheWVyLiAgVGhpcyBtYXkgYmVj
b21lIG51bGwgaWYKKyAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEg
cGFpbnQgb3BlcmF0aW9uLgorICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsK
IAogICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhl
biBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCiAgICAgLy8gdG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9m
IHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhlIHByb2plY3Rpb24gbWF0cml4CkBAIC0yMTks
OSArMjI4LDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QKICAgICBpbnQgdmlzaWJsZVJlY3RX
aWR0aCA9IHZpc2libGVSZWN0LndpZHRoKCk7CiAgICAgaW50IHZpc2libGVSZWN0SGVpZ2h0ID0g
dmlzaWJsZVJlY3QuaGVpZ2h0KCk7CiAKLSAgICBpZiAoIW1fcm9vdExheWVyLT5tX3JlbmRlclN1
cmZhY2UpCi0gICAgICAgIG1fcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAg
bV9yb290TGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IEludFJlY3QoMCwg
MCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQpOworICAgIGlmICghbV9yb290
TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBs
KCktPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBtX3Jvb3RMYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5tX2NvbnRlbnRSZWN0ID0gSW50UmVjdCgwLCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNp
YmxlUmVjdEhlaWdodCk7CiAKICAgICBpZiAodmlzaWJsZVJlY3RXaWR0aCAhPSBtX3Jvb3RMYXll
clRleHR1cmVXaWR0aCB8fCB2aXNpYmxlUmVjdEhlaWdodCAhPSBtX3Jvb3RMYXllclRleHR1cmVI
ZWlnaHQpIHsKICAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggPSB2aXNpYmxlUmVjdFdp
ZHRoOwpAQCAtMjMyLDYgKzI0MSwzMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgICAg
ICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKICAgICB9CiAKKyAgICBtX3Njcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb247CisgICAgLy8gU2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMg
dG8gYXZvaWQgcmVuZGVyaW5nIG9uIHRvcCBvZiB0aGVtLgorICAgIEludFJlY3Qgcm9vdFNjaXNz
b3JSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAvLyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBp
bmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgorICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Nj
cm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBtX3Jvb3RMYXll
ci0+Y2NMYXllckltcGwoKS0+c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JSZWN0KTsKKworICAg
IEFTU0VSVChtX3Jvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlID0gbV9yb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgIFZlY3RvcjxM
YXllckNocm9taXVtKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RMYXllci5nZXQoKSk7CisKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xh
eWVyTGlzdC5jbGVhcigpOworICAgIC8vIFVuZm9ydHVuYXRlbHksIHVwZGF0ZUxheWVyc1JlY3Vy
c2l2ZSgpIGN1cnJlbnRseSBib3RoIHVwZGF0ZXMgdGhlIGxheWVycyBhbmQgdXBkYXRlcyB0aGUg
ZHJhdyBzdGF0ZQorICAgIC8vICh0cmFuc2Zvcm1zLCBldGMpLiBJdCdkIGJlIG5pY2VyIGlmIG9w
ZXJhdGlvbnMgb24gdGhlIHByZXNlbnRhdGlvbiBsYXllcnMgaGFwcGVuZWQgbGF0ZXIsIGJ1dCB0
aGUgZHJhdworICAgIC8vIHRyYW5zZm9ybXMgYXJlIG5lZWRlZCBieSBsYXJnZSBsYXllcnMgdG8g
ZGV0ZXJtaW5lIHZpc2liaWxpdHkuICBUaWxpbmcgd2lsbCBmaXggdGhpcyBieSBlbGltaW5hdGlu
ZyB0aGUKKyAgICAvLyBjb25jZXB0IG9mIGEgbGFyZ2UgY29udGVudCBsYXllci4KKyAgICB1cGRh
dGVMYXllcnNSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7
CisKKyAgICAvLyAtLS0tLS09PT09PT09PSBkaXZpZGUuIGJlbG93IGhlcmUgaXMgR0wgc3R1ZmYs
IGFib3ZlIGhlcmUgaXMgV2ViS2l0IHN0dWZmID09PT09PT0tLS0tLS0KKworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCiAgICAgLy8gVGhlIEdMIHZpZXdwb3J0IGNvdmVycyB0aGUgZW50aXJl
IHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXJzLgogICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlz
aWJsZVJlY3RIZWlnaHQpKTsKIApAQCAtMjQ1LDExICsyNzksNiBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdAogICAgIC8vIEJsZW5kaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFJvb3QgbGF5ZXIg
YWxwaGEgY2hhbm5lbCBvbiBXaW5kb3dzIGlzIGluY29ycmVjdCB3aGVuIFNraWEgdXNlcyBDbGVh
clR5cGUuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORCkpOwogCi0gICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBv
c2l0aW9uOwotCi0gICAgQVNTRVJUKG1fcm9vdExheWVyLT5tX3JlbmRlclN1cmZhY2UpOwotICAg
IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSBtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdl
dCgpOwotCiAgICAgdXNlUmVuZGVyU3VyZmFjZShtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKTsKIAog
ICAgIC8vIENsZWFyIHRvIGJsdWUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCB1bnJlbmRlcmVk
IHJlZ2lvbnMuCkBAIC0yNjAsMzMgKzI4OSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAog
ICAgIC8vIHplcm8gYWxwaGEgdmFsdWVzIG9uIHRleHQgZ2x5cGhzLiBUaGUgcm9vdCBsYXllciBp
cyBhbHdheXMgb3BhcXVlLgogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRy
dWUsIGZhbHNlKTsKIAotICAgIHVwZGF0ZUFuZERyYXdSb290TGF5ZXIodGlsZVBhaW50LCBzY3Jv
bGxiYXJQYWludCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICBkcmF3Um9vdExheWVy
KHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwogCiAgICAgLy8gUmUt
ZW5hYmxlIGNvbG9yIHdyaXRlcyB0byBsYXllcnMsIHdoaWNoIG1heSBiZSBwYXJ0aWFsbHkgdHJh
bnNwYXJlbnQuCiAgICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1
ZSk7CiAKLSAgICAvLyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuICBU
aGlzIG1heSBiZWNvbWUgbnVsbCBpZgotICAgIC8vIGNvbXBvc2l0aW5nIGdldHMgdHVybmVkIG9m
ZiBkdXJpbmcgYSBwYWludCBvcGVyYXRpb24uCi0gICAgaWYgKCFtX3Jvb3RMYXllcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gU2V0IHRoZSByb290IHZpc2libGUvY29udGVudCByZWN0cyAt
LS0gdXNlZCBieSBzdWJzZXF1ZW50IGRyYXdMYXllcnMgY2FsbHMuCi0gICAgbV9yb290VmlzaWJs
ZVJlY3QgPSB2aXNpYmxlUmVjdDsKLSAgICBtX3Jvb3RDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0
OwotCi0gICAgLy8gU2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMgdG8gYXZvaWQgcmVuZGVyaW5n
IG9uIHRvcCBvZiB0aGVtLgotICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0
KTsKLSAgICAvLyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwg
b2Zmc2V0LgotICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwg
LW1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKLSAgICBtX3Jvb3RMYXllci0+bV9zY2lzc29yUmVjdCA9
IHJvb3RTY2lzc29yUmVjdDsKLQotICAgIFZlY3RvcjxMYXllckNocm9taXVtKj4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RM
YXllci5nZXQoKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
LSAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOwotICAgIHVw
ZGF0ZUxheWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0
KTsKLQogICAgIC8vIFRoZSBzaGFkZXIgdXNlZCB0byByZW5kZXIgbGF5ZXJzIHJldHVybnMgcHJl
LW11bHRpcGxpZWQgYWxwaGEgY29sb3JzCiAgICAgLy8gc28gd2UgbmVlZCB0byBzZW5kIHRoZSBi
bGVuZGluZyBtb2RlIGFwcHJvcHJpYXRlbHkuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CkBAIC0yOTgsMTQgKzMw
NSwxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIC8vIGNvcnJlY3Qgb3JkZXIuCiAg
ICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkg
LSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAgICAgIExheWVy
Q2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3Vy
ZmFjZUluZGV4XTsKLSAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllci0+bV9yZW5kZXJT
dXJmYWNlKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFj
ZSgpKTsKIAogICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBo
YXMgemVybyB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBh
c3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCi0gICAgICAgIGlmICgh
cmVuZGVyU3VyZmFjZUxheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LnNpemUoKSkK
KyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXll
ckxpc3Quc2l6ZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHVzZVJl
bmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCkpKSB7
CisgICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVy
U3VyZmFjZSgpKSkgewogICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSBtX3Jv
b3RMYXllcikgewogICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAg
ICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAs
IDApKTsKQEAgLTMxMywxMCArMzIwLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0CiAgICAg
ICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlTGF5ZXIt
Pm1fcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3Q7CisgICAgICAgICAgICBWZWN0b3I8TGF5ZXJD
aHJvbWl1bSo+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+bV9sYXllckxpc3Q7CiAgICAgICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5
ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KQotICAgICAgICAgICAgICAgIGRyYXdMYXllcihs
YXllckxpc3RbbGF5ZXJJbmRleF0sIHJlbmRlclN1cmZhY2VMYXllci0+bV9yZW5kZXJTdXJmYWNl
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhd
LT5jY0xheWVySW1wbCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTQwNyw2ICs0MTQsNyBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5z
Zm9ybQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShM
YXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgVmVjdG9yPExheWVyQ2hyb21pdW0qPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVj
dG9yPExheWVyQ2hyb21pdW0qPiYgbGF5ZXJMaXN0KQogewogICAgIGxheWVyLT5zZXRMYXllclJl
bmRlcmVyKHRoaXMpOworICAgIENDTGF5ZXJJbXBsKiBkcmF3TGF5ZXIgPSBsYXllci0+Y2NMYXll
ckltcGwoKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24g
dGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBsYXllciBhbmQKICAgICAvLyBhbGwgaXRzIHN1
YmxheWVycy4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3Np
dGlvbgpAQCAtNDYzLDkxICs0NzEsOTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHIKICAgICBi
b29sIHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uID0gbGF5ZXItPnJlcGxpY2FMYXllcigpOwogICAg
IGlmICgoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNlRm9yT3BhY2l0eSkgJiYg
bGF5ZXItPmRlc2NlbmRhbnRzRHJhd0NvbnRlbnQoKSkKICAgICAgICAgfHwgdXNlU3VyZmFjZUZv
ck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24pIHsKLSAgICAgICAgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQo
KTsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlKQotICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlID0gZHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAK
ICAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxl
ZnQgY29ybmVyIG9mIHRoZSBsYXllci4KLSAgICAgICAgbGF5ZXItPm1fZHJhd1RyYW5zZm9ybSA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7Ci0gICAgICAgIGxheWVyLT5tX2RyYXdUcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJvdW5kcy5oZWlnaHQoKSwg
MCk7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07CisgICAgICAg
IGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJv
dW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd1RyYW5zZm9ybShk
cmF3VHJhbnNmb3JtKTsKIAogICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3Qo
MCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CiAKICAgICAgICAgLy8gTGF5
ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJm
YWNlLgogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNp
dHkoKTsKLSAgICAgICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCi0g
ICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9IGxheWVyLT5zdXBlcmxh
eWVyKCktPmRyYXdPcGFjaXR5KCk7Ci0gICAgICAgIGxheWVyLT5tX2RyYXdPcGFjaXR5ID0gMTsK
KyAgICAgICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCkgJiYgbGF5ZXItPnN1cGVybGF5ZXIoKS0+
cHJlc2VydmVzM0QoKSkKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkg
Kj0gZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPmRyYXdPcGFjaXR5KCk7CisgICAgICAgIGRyYXdM
YXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICog
Ym91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFu
c2Zvcm0gPSBsYXllck9yaWdpblRyYW5zZm9ybTsKICAgICAgICAgaWYgKGxheWVyT3JpZ2luVHJh
bnNmb3JtLmlzSW52ZXJ0aWJsZSgpICYmIGxheWVyLT5zdXBlcmxheWVyKCkpIHsKICAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRvTGF5ZXIgPSBsYXllck9yaWdpblRyYW5z
Zm9ybS5pbnZlcnNlKCk7Ci0KLSAgICAgICAgICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0ID0gcGFy
ZW50VG9MYXllci5tYXBSZWN0KGxheWVyLT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJlY3QpOwor
ICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChJbnRSZWN0KHBhcmVudFRvTGF5
ZXIubWFwUmVjdChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3NvclJlY3QoKSkpKTsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsYXllci0+bV9zY2lzc29yUmVjdCA9IEludFJlY3Qo
KTsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgpKTsKIAog
ICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lzc29y
IHJlY3QgdGhhdCBuZWVkcyB0bwogICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5n
IHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCiAgICAgICAgIC8vIHN1cmZh
Y2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHN1cGVybGF5ZXIncyBjb29yZGlu
YXRlIHN5c3RlbS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGxheWVy
LT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJlY3Q7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPm1f
c2Npc3NvclJlY3QgPSBkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKSA/IGRyYXdMYXllci0+c3VwZXJs
YXllcigpLT5zY2lzc29yUmVjdCgpIDogZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpOwogCiAgICAg
ICAgIHJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7CiAKICAgICAgICAgaWYgKGxh
eWVyLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5
ZXIgPSBsYXllci0+bWFza0xheWVyKCk7CiAgICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCkt
PnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCkt
Pm1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2U7CisgICAgICAgICAgICBsYXll
ci0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5ZXIgPSAw
OwogCiAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKSkgewogICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigp
LT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICAgICAgICAgIGxheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHJl
bmRlclN1cmZhY2U7CisgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXll
cigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwogICAgICAgICB9CiAK
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIERUID0gTVtwXSAqIExUCi0gICAgICAgIGxheWVyLT5tX2RyYXdUcmFu
c2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKLSAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KGxheWVyLT5tX2RyYXdUcmFuc2Zvcm0ubWFwUmVjdChsYXllclJl
Y3QpKTsKKyAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNm
b3JtKTsKKyAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRy
YXdMYXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CiAKLSAgICAgICAg
bGF5ZXItPm1fZHJhd09wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOworICAgICAgICBkcmF3TGF5
ZXItPnNldERyYXdPcGFjaXR5KGxheWVyLT5vcGFjaXR5KCkpOwogCiAgICAgICAgIGlmIChsYXll
ci0+c3VwZXJsYXllcigpKSB7CiAgICAgICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKS0+
cHJlc2VydmVzM0QoKSkKLSAgICAgICAgICAgICAgIGxheWVyLT5tX2RyYXdPcGFjaXR5ICo9IGxh
eWVyLT5zdXBlcmxheWVyKCktPm1fZHJhd09wYWNpdHk7CisgICAgICAgICAgICAgICBkcmF3TGF5
ZXItPnNldERyYXdPcGFjaXR5KGRyYXdMYXllci0+ZHJhd09wYWNpdHkoKSAqIGRyYXdMYXllci0+
c3VwZXJsYXllcigpLT5kcmF3T3BhY2l0eSgpKTsKIAogICAgICAgICAgICAgLy8gTGF5ZXJzIGlu
aGVyaXQgdGhlIHNjaXNzb3IgcmVjdCBmcm9tIHRoZWlyIHN1cGVybGF5ZXIuCi0gICAgICAgICAg
ICBsYXllci0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJl
Y3Q7CisgICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KGRyYXdMYXllci0+c3Vw
ZXJsYXllcigpLT5zY2lzc29yUmVjdCgpKTsKIAotICAgICAgICAgICAgbGF5ZXItPm1fdGFyZ2V0
UmVuZGVyU3VyZmFjZSA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZTsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShkcmF3TGF5
ZXItPnN1cGVybGF5ZXIoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RMYXllcikKLSAgICAgICAgICAgIGxheWVyLT5tX3Jl
bmRlclN1cmZhY2UgPSAwOworICAgICAgICAgICAgZHJhd0xheWVyLT5jbGVhclJlbmRlclN1cmZh
Y2UoKTsKIAotICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKLSAgICAgICAgICAg
IGxheWVyLT5tX3NjaXNzb3JSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Cisg
ICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7CisgICAgICAgICAgICBJbnRSZWN0
IHNjaXNzb3IgPSBkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCk7CisgICAgICAgICAgICBzY2lzc29y
LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgICAgICAgICBkcmF3TGF5ZXIt
PnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGxh
eWVyLT5tX3JlbmRlclN1cmZhY2UpCi0gICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZh
Y2UgPSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgIGlmIChkcmF3TGF5ZXItPnJl
bmRlclN1cmZhY2UoKSkKKyAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNl
KGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KGxheWVyLT5zdXBlcmxheWVyKCkpOwotICAgICAgICBsYXllci0+bV90YXJnZXRSZW5kZXJTdXJm
YWNlID0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlOworICAgICAg
ICBkcmF3TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5zdXBlcmxheWVy
KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CiAgICAgfQogCi0gICAgLy8gbV9kcmF3YWJsZUNv
bnRlbnRSZWN0IGlzIGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRo
ZQorICAgIC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdheXMgc3RvcmVkIGluIHRoZSBj
b29yZGluYXRlIHN5c3RlbSBvZiB0aGUKICAgICAvLyBSZW5kZXJTdXJmYWNlIHRoZSBsYXllciBk
cmF3cyBpbnRvLgogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGxheWVy
LT5tX2RyYXdhYmxlQ29udGVudFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAgICAgICAg
ZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsK
ICAgICBlbHNlCi0gICAgICAgIGxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3QgPSBJbnRSZWN0
KCk7CisgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkp
OwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXllci0+bV9k
cmF3VHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0g
ZHJhd0xheWVyLT5kcmF3VHJhbnNmb3JtKCk7CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRo
ZSBsYXllciBkb2Vzbid0IHByZXNlcnZlIDNELgogICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNE
KCkpIHsKQEAgLTU2OCw3ICs1NzksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcgogICAgIC8v
IE1bc10gPSBNICogVHJbLWNlbnRlcl0KICAgICBzdWJsYXllck1hdHJpeC50cmFuc2xhdGUzZCgt
Ym91bmRzLndpZHRoKCkgKiAwLjUsIC1ib3VuZHMuaGVpZ2h0KCkgKiAwLjUsIDApOwogCi0gICAg
VmVjdG9yPExheWVyQ2hyb21pdW0qPiYgZGVzY2VuZGFudHMgPSAobGF5ZXItPm1fcmVuZGVyU3Vy
ZmFjZSA/IGxheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0IDogbGF5ZXJMaXN0KTsK
KyAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBkZXNjZW5kYW50cyA9IChkcmF3TGF5ZXItPnJl
bmRlclN1cmZhY2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6
IGxheWVyTGlzdCk7CiAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKICAgICB1bnNpZ25l
ZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2NlbmRhbnRzLnNpemUoKSAtIDE7CiAKQEAgLTU3NywyOCAr
NTg4LDM3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNp
dmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAgICAgICAgIExheWVyQ2hyb21pdW0q
IHN1YmxheWVyID0gc3VibGF5ZXJzW2ldLmdldCgpOwogICAgICAgICB1cGRhdGVMYXllcnNSZWN1
cnNpdmUoc3VibGF5ZXIsIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
ZXNjZW5kYW50cyk7CiAKLSAgICAgICAgaWYgKHN1YmxheWVyLT5tX3JlbmRlclN1cmZhY2UpIHsK
LSAgICAgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VibGF5ZXJSZW5kZXJTdXJmYWNl
ID0gc3VibGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQoKTsKLSAgICAgICAgICAgIGxheWVyLT5t
X2RyYXdhYmxlQ29udGVudFJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdChzdWJsYXllclJlbmRl
clN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSkpOworICAgICAgICBpZiAoc3VibGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBz
dWJsYXllclJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAg
ICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNv
bnRlbnRSZWN0KCk7CisgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xv
c2luZ0ludFJlY3Qoc3VibGF5ZXJSZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkp
KTsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJs
ZUNvbnRlbnRSZWN0KTsKICAgICAgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChzdWJsYXllcik7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVj
dC51bml0ZShzdWJsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGRyYXdMYXllci0+
ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51
bml0ZShzdWJsYXllci0+Y2NMYXllckltcGwoKS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKyAg
ICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRl
bnRSZWN0KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5k
cygpIHx8IHVzZVN1cmZhY2VGb3JNYXNraW5nKQotICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNv
bnRlbnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgaWYgKGxheWVy
LT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgSW50
UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0
KCk7CisgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0KHRyYW5zZm9ybWVkTGF5
ZXJSZWN0KTsKKyAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdh
YmxlQ29udGVudFJlY3QpOworICAgIH0KIAotICAgIGlmIChsYXllci0+bV9yZW5kZXJTdXJmYWNl
ICYmIGxheWVyICE9IG1fcm9vdExheWVyKSB7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCk7Ci0gICAgICAg
IHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QgPSBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRS
ZWN0OworICAgIGlmIChkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jv
b3RMYXllcikgeworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2Ug
PSBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9j
b250ZW50UmVjdCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICBG
bG9hdFBvaW50IHN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRl
cigpOwogCiAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhl
IHBvcnRpb24gdGhhdCdzIHZpc2libGUuCiAgICAgICAgIEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXRE
dWVUb0NsaXBwaW5nOworCiAgICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJl
ZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xpcHBl
ZC4KICAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAgIHJl
bmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5tX3NjaXNzb3JSZWN0
KTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGRy
YXdMYXllci0+c2Npc3NvclJlY3QoKSk7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGNsaXBwZWRT
dXJmYWNlQ2VudGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKICAgICAg
ICAgICAgIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAt
IHN1cmZhY2VDZW50ZXI7CiAgICAgICAgIH0KQEAgLTYxMyw3ICs2MzMsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxh
eWVyLCBjb25zdCBUcgogCiAgICAgICAgIC8vIFNpbmNlIHRoZSBsYXllciBzdGFydHMgYSBuZXcg
cmVuZGVyIHN1cmZhY2Ugd2UgbmVlZCB0byBhZGp1c3QgaXRzCiAgICAgICAgIC8vIHNjaXNzb3Ig
cmVjdCB0byBiZSBleHByZXNzZWQgaW4gdGhlIG5ldyBzdXJmYWNlJ3MgY29vcmRpbmF0ZSBzeXN0
ZW0uCi0gICAgICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPm1fZHJhd2FibGVDb250
ZW50UmVjdDsKKyAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPmRy
YXdhYmxlQ29udGVudFJlY3QoKSk7CiAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2Yg
dGhlIHRyYW5zZm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+bV9v
cmlnaW5UcmFuc2Zvcm07CkBAIC02MzEsMjAgKzY1MSwyNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25z
dCBUcgogCiAgICAgLy8gQ29tcHV0ZSB0aGUgZGVwdGggdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0
aGUgbGF5ZXIgd2hpY2ggd2lsbCBiZSB1c2VkIHdoZW4KICAgICAvLyBzb3J0aW5nIHRoZSBsYXll
cnMgZm9yIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxheWVyRHJhd01hdHJpeCA9IGxheWVyLT5tX3JlbmRlclN1cmZhY2UgPyBsYXllci0+bV9y
ZW5kZXJTdXJmYWNlLT5tX2RyYXdUcmFuc2Zvcm0gOiBsYXllci0+bV9kcmF3VHJhbnNmb3JtOwor
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllckRyYXdNYXRyaXggPSBkcmF3TGF5
ZXItPnJlbmRlclN1cmZhY2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2RyYXdU
cmFuc2Zvcm0gOiBkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKICAgICBpZiAobGF5ZXItPnN1
cGVybGF5ZXIoKSkgewogICAgICAgICBpZiAoIWxheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZl
czNEKCkpCi0gICAgICAgICAgICBsYXllci0+bV9kcmF3RGVwdGggPSBsYXllci0+c3VwZXJsYXll
cigpLT5tX2RyYXdEZXB0aDsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKGRy
YXdMYXllci0+c3VwZXJsYXllcigpLT5kcmF3RGVwdGgoKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGxheWVyLT5tX2RyYXdEZXB0aCA9IGxheWVyRHJhd01hdHJpeC5tNDMoKTsKKyAgICAg
ICAgICAgIGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKGxheWVyRHJhd01hdHJpeC5tNDMoKSk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGxheWVyLT5tX2RyYXdEZXB0aCA9IDA7CisgICAgICAgIGRyYXdM
YXllci0+c2V0RHJhd0RlcHRoKDApOwogCiAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29y
dCBhbGwgdGhlIGRlc2NlbmRhbnRzIGJ5IHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhlaXIKICAgICAv
LyBjZW50ZXIuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhl
IHN1cGVybGF5ZXIgdGhlbgogICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHN1cGVybGF5
ZXIgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgogICAgIGlmIChsYXllci0+
cHJlc2VydmVzM0QoKSAmJiAoIWxheWVyLT5zdXBlcmxheWVyKCkgfHwgIWxheWVyLT5zdXBlcmxh
eWVyKCktPnByZXNlcnZlczNEKCkpKQogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZkZXNjZW5k
YW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBjb21wYXJlTGF5ZXJa
KTsKKworCisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaWYgbmVjZXNz
YXJ5LgorICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgbGF5ZXItPnVw
ZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIH0KIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBv
c2l0ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2MSw3ICs2ODgsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wg
Y29tcG9zaXRlT2Zmc2NyZWVuKQogICAgICAgICAvLyBvciBlbHNlIHRoZSBjYWxsIHRvIHByZXBh
cmVDb250ZW50c1RleHR1cmUoKSBpbiB1c2VSZW5kZXJTdXJmYWNlKCkgd2lsbCBmYWlsLgogICAg
ICAgICBtX3Jvb3RMYXllci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbV9yb290TGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5jbGVhcigpOworICAgICAgICBtX3Jv
b3RMYXllci0+Y2NMYXllckltcGwoKS0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiB9CiAKIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogcmVuZGVyU3VyZmFjZSkKQEAgLTY5NSwzNiArNzIyLDMyIEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogdGFyZ2V0U3VyZmFjZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIo
Q0NMYXllckltcGwqIGxheWVyLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFN1cmZhY2Up
CiB7Ci0gICAgaWYgKGxheWVyLT5tX3JlbmRlclN1cmZhY2UgJiYgbGF5ZXItPm1fcmVuZGVyU3Vy
ZmFjZSAhPSB0YXJnZXRTdXJmYWNlKSB7Ci0gICAgICAgIGxheWVyLT5tX3JlbmRlclN1cmZhY2Ut
PmRyYXcoKTsKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVy
U3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKKyAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+ZHJhdygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGxheWVyLT5t
X2JvdW5kcy5pc0VtcHR5KCkpCisgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPm1fc2Npc3NvclJl
Y3QpOworICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwogCiAgICAg
Ly8gQ2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMgb2Yg
dGhlIHBhZ2UuCiAgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXllci0+Z2V0RHJhd1JlY3QoKTsK
LSAgICBib29sIGlzTGF5ZXJWaXNpYmxlID0gbGF5ZXItPm1fc2Npc3NvclJlY3QuaW50ZXJzZWN0
cyhsYXllclJlY3QpOworICAgIGJvb2wgaXNMYXllclZpc2libGUgPSBsYXllci0+c2Npc3NvclJl
Y3QoKS5pbnRlcnNlY3RzKGxheWVyUmVjdCk7CiAgICAgaWYgKCFpc0xheWVyVmlzaWJsZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQg
dGhlIGNvbW11bGF0aXZlIHJlbmRlciBzdXJmYWNlIHRyYW5zZm9ybXMgYWxsIHRoZSB3YXkgZnJv
bQogICAgIC8vICAgICAgICB0aGUgZGVmYXVsdCByZW5kZXIgc3VyZmFjZSBpbiBvcmRlciB0byBk
ZXRlcm1pbmUgdmlzaWJpbGl0eS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZERy
YXdNYXRyaXggPSAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSA/IGxheWVyLT5tX3JlbmRlclN1cmZh
Y2UtPmRyYXdUcmFuc2Zvcm0oKS5tdWx0aXBseShsYXllci0+bV9kcmF3VHJhbnNmb3JtKSA6IGxh
eWVyLT5tX2RyYXdUcmFuc2Zvcm0pOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVk
RHJhd01hdHJpeCA9IChsYXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+ZHJhd1RyYW5zZm9ybSgpLm11bHRpcGx5KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpIDog
bGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CiAgICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSAm
JiBjb21iaW5lZERyYXdNYXRyaXgubTMzKCkgPCAwKQogICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRl
bnRzIG9mIHRoZSBsYXllciBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGxheWVyLT51cGRhdGVDb250
ZW50c0lmRGlydHkoKTsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICBsYXllci0+ZHJhdygpOwot
ICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCiAg
ICAgbGF5ZXItPmRyYXdEZWJ1Z0JvcmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAppbmRleCAzZDNlNzg0YzRjYTE4NWQ5M2NmM2E4ZTE4NmUxYTA0M2U3ODZmNjNmLi4xM2E3
ZWJhMzQ4Nzk4YTg3MTBmMzJhZWZmMmEwZmFiMzBiMTIxOGRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaApAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dENvbXBvc2l0ZU9mZnNjcmVlbihib29sKTsKICAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3Jl
ZW4oKSB7IHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsgfQotICAgIExheWVyVGV4dHVyZSog
Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkgeyByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4g
PyBtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRzVGV4dHVyZS5nZXQoKSA6
IDA7IH0KKyAgICBMYXllclRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpIHsgcmV0
dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVuID8gbV9yb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+
bV9jb250ZW50c1RleHR1cmUuZ2V0KCkgOiAwOyB9CiAKICAgICB2b2lkIHNldFJvb3RMYXllckNh
bnZhc1NpemUoY29uc3QgSW50U2l6ZSYpOwogCkBAIC0xMTYsNyArMTE2LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVzaXplT25zY3JlZW5Db250ZW50KGNvbnN0IEludFNpemUmKTsKIAogICAgIElu
dFNpemUgcm9vdExheWVyVGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1fcm9v
dExheWVyVGV4dHVyZVdpZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpOyB9Ci0gICAgSW50
UmVjdCByb290TGF5ZXJDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdENvbnRlbnRS
ZWN0OyB9CiAgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0
IEludFJlY3QmIHJlY3QpOwogCiAgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlci5nZXQoKTsgfQpAQCAtMTI3LDkgKzEyNiwx
MCBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBncmFwaGljc0NvbnRleHQzRCk7CiAgICAgdm9pZCB1cGRh
dGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxMYXllckNocm9taXVtKj4mIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIFZlY3RvcjxMYXllckNocm9taXVtKj4mIGxheWVyTGlzdCk7CiAKLSAg
ICB2b2lkIGRyYXdMYXllcihMYXllckNocm9taXVtKiwgUmVuZGVyU3VyZmFjZUNocm9taXVtKik7
CisgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
KTsKIAotICAgIHZvaWQgdXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2Um
IHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lk
IHVwZGF0ZVJvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmLCBjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCk7CisgICAgdm9pZCBkcmF3Um9vdExheWVyKFRpbGVQYWludEludGVyZmFjZSYgc2Ny
b2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCk7CiAKICAgICBib29sIGlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsK
IApAQCAtMTc4LDkgKzE3OCw2IEBAIHByaXZhdGU6CiAKICAgICBJbnRTaXplIG1fcm9vdExheWVy
Q2FudmFzU2l6ZTsKIAotICAgIEludFJlY3QgbV9yb290VmlzaWJsZVJlY3Q7Ci0gICAgSW50UmVj
dCBtX3Jvb3RDb250ZW50UmVjdDsKLQogICAgIC8vIE1heGltdW0gdGV4dHVyZSBkaW1lbnNpb25z
IHN1cHBvcnRlZC4KICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmNwcAppbmRleCA4NzhjMTQyYzg3OWE3MmRkN2YxOTQ4YjJjZWQ2ZTQ1ZjJm
OWFmOTEwLi4zNTc1Y2Y3NjNiNTZmYjFlM2Y2NWZkMzA3ZmI4YjIxZGFhYTJlM2NhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgpAQCAtMTI0LDggKzEyNSw4IEBAIHZv
aWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgCiAgICAgbGF5ZXJSZW5kZXJlcigp
LT51c2VTaGFkZXIoc3YtPnNoYWRlclByb2dyYW0oKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBkcmF3
VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgp
LCBkcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgp
LCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICBkcmF3VGV4dHVyZWRRdWFk
KGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBjY0xheWVySW1w
bCgpLT5kcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0
aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgY2NMYXllckltcGwoKS0+ZHJhd09wYWNpdHkoKSwKICAg
ICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVy
QWxwaGFMb2NhdGlvbigpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggNDFjZDE4MDJkMDI3MmFhYWVlY2MwZTQ1MTc4ZWFjY2I3ZTY0ZWI2NS4uMWU3YjYzOWFmNWE0
MzljZWM0NGU1M2I4Y2IxN2U5YWM1NzVjZTQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckltcGwuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCkBA
IC0zODcsOCArMzg4LDggQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3Qg
U2hhcmVkVmFsdWVzKiBzdikKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0
cml4M2Z2KHN2LT5jY01hdHJpeExvY2F0aW9uKCksIDAsIGNvbnN0X2Nhc3Q8ZmxvYXQqPih5dXYy
UkdCKSwgMSkpOwogCi0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVy
KCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAg
ICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCks
CisgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rp
b25NYXRyaXgoKSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAg
ICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJbXBs
KCktPmRyYXdPcGFjaXR5KCksCiAgICAgICAgICAgICAgICAgICAgICBzdi0+eXV2U2hhZGVyTWF0
cml4TG9jYXRpb24oKSwgc3YtPnl1dkFscGhhTG9jYXRpb24oKSk7CiAKICAgICAvLyBSZXNldCBh
Y3RpdmUgdGV4dHVyZSBiYWNrIHRvIHRleHR1cmUgMC4KQEAgLTQwOSw4ICs0MTAsOCBAQCB2b2lk
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZHJhd1JHQkEoY29uc3QgU2hhcmVkVmFsdWVzKiBzdikKIAog
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnJnYmFUZXh0dXJlTG9jYXRp
b24oKSwgMCkpOwogCi0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVy
KCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAg
ICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCks
CisgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rp
b25NYXRyaXgoKSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAg
ICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJbXBs
KCktPmRyYXdPcGFjaXR5KCksCiAgICAgICAgICAgICAgICAgICAgICBzdi0+cmdiYVNoYWRlck1h
dHJpeExvY2F0aW9uKCksIHN2LT5yZ2JhQWxwaGFMb2NhdGlvbigpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhOGU3NDk3NGY5NjljN2IyOTFiYWU2ZWY3YjkxMmNi
NGFhZjhiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCisKK25h
bWVzcGFjZSB7Cit2b2lkIHRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCit7CisgICAgZmxhdHRlbmVkWzBdID0gbS5tMTEo
KTsKKyAgICBmbGF0dGVuZWRbMV0gPSBtLm0xMigpOworICAgIGZsYXR0ZW5lZFsyXSA9IG0ubTEz
KCk7CisgICAgZmxhdHRlbmVkWzNdID0gbS5tMTQoKTsKKyAgICBmbGF0dGVuZWRbNF0gPSBtLm0y
MSgpOworICAgIGZsYXR0ZW5lZFs1XSA9IG0ubTIyKCk7CisgICAgZmxhdHRlbmVkWzZdID0gbS5t
MjMoKTsKKyAgICBmbGF0dGVuZWRbN10gPSBtLm0yNCgpOworICAgIGZsYXR0ZW5lZFs4XSA9IG0u
bTMxKCk7CisgICAgZmxhdHRlbmVkWzldID0gbS5tMzIoKTsKKyAgICBmbGF0dGVuZWRbMTBdID0g
bS5tMzMoKTsKKyAgICBmbGF0dGVuZWRbMTFdID0gbS5tMzQoKTsKKyAgICBmbGF0dGVuZWRbMTJd
ID0gbS5tNDEoKTsKKyAgICBmbGF0dGVuZWRbMTNdID0gbS5tNDIoKTsKKyAgICBmbGF0dGVuZWRb
MTRdID0gbS5tNDMoKTsKKyAgICBmbGF0dGVuZWRbMTVdID0gbS5tNDQoKTsKK30KK30KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9t
aXVtKiBvd25lcikKKyAgICA6IG1fb3duZXIob3duZXIpCisgICAgLCBtX3RhcmdldFJlbmRlclN1
cmZhY2UoMCkKKyAgICAsIG1fZHJhd0RlcHRoKDApCisgICAgLCBtX2RyYXdPcGFjaXR5KDApCisg
ICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCisgICAgLCBtX2RlYnVnQm9yZGVyQ29sb3IoMCwgMCwg
MCwgMCkKKyAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQorICAgICwgbV9yZW5kZXJTdXJmYWNl
KDApCisgICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKK3sKK30KKworQ0NMYXllckltcGw6On5DQ0xh
eWVySW1wbCgpCit7Cit9CisKK0NDTGF5ZXJJbXBsKiBDQ0xheWVySW1wbDo6c3VwZXJsYXllcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duZXItPnN1cGVybGF5ZXIoKSA/IG1fb3duZXItPnN1
cGVybGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6IDA7Cit9CisKK3ZvaWQgQ0NMYXllckltcGw6OnNl
dExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKK3sKKyAgICBt
X2xheWVyUmVuZGVyZXIgPSByZW5kZXJlcjsKK30KKworUmVuZGVyU3VyZmFjZUNocm9taXVtKiBD
Q0xheWVySW1wbDo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCit7CisgICAgbV9yZW5kZXJTdXJmYWNl
ID0gbmV3IFJlbmRlclN1cmZhY2VDaHJvbWl1bShtX293bmVyKTsKKyAgICByZXR1cm4gbV9yZW5k
ZXJTdXJmYWNlLmdldCgpOworfQorCisvLyBUaGVzZSBiZWxvbmcgb24gQ0NMYXllckltcGwsIGJ1
dCBzaG91bGQgYmUgc3ViY2xhc2VkIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBM
YXllckNocm9taXVtIHN1YnR5cGVzLgorYm9vbCBDQ0xheWVySW1wbDo6ZHJhd3NDb250ZW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25lci0+ZHJhd3NDb250ZW50KCk7Cit9CisKK3ZvaWQg
Q0NMYXllckltcGw6OmRyYXcoKQoreworICAgIHJldHVybiBtX293bmVyLT5kcmF3KCk7Cit9CisK
K2NvbnN0IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdSZWN0KCkgY29uc3QKK3sKKyAgICAv
LyBGb3JtIHRoZSBtYXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBv
ZiB0aGUgbGF5ZXIncworICAgIC8vIGJvdW5kcyBpbnRvIHRoZSB2aWV3IHNwYWNlLgorICAgIEZs
b2F0UmVjdCBsYXllclJlY3QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMo
KS5oZWlnaHQoKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpOworICAgIElu
dFJlY3QgbWFwcGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZHJhd1RyYW5zZm9ybSgpLm1hcFJl
Y3QobGF5ZXJSZWN0KSk7CisgICAgcmV0dXJuIG1hcHBlZFJlY3Q7Cit9CisKK3ZvaWQgQ0NMYXll
ckltcGw6OmRyYXdEZWJ1Z0JvcmRlcigpCit7CisgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2
XTsKKyAgICBpZiAoIWRlYnVnQm9yZGVyQ29sb3IoKS5hbHBoYSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKyAgICBjb25zdCBMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5sYXllclNoYXJlZFZhbHVlcygp
OworICAgIEFTU0VSVChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7CisgICAgbGF5ZXJSZW5kZXJl
cigpLT51c2VTaGFkZXIoc3YtPmJvcmRlclNoYWRlclByb2dyYW0oKSk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gZHJhd1RyYW5zZm9ybSgpOworICAgIHJlbmRlck1h
dHJpeC5zY2FsZTNkKG1fb3duZXItPmJvdW5kcygpLndpZHRoKCksIG1fb3duZXItPmJvdW5kcygp
LmhlaWdodCgpLCAxKTsKKyAgICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgbGF5ZXJSZW5kZXJl
cigpLT5wcm9qZWN0aW9uTWF0cml4KCkgKiByZW5kZXJNYXRyaXgpOworICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYoc3YtPmJvcmRlclNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIGZhbHNlLCAmZ2xNYXRyaXhbMF0sIDEpKTsKKworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51bmlmb3JtNGYoc3YtPmJvcmRlclNoYWRlckNvbG9yTG9jYXRpb24oKSwgZGVidWdC
b3JkZXJDb2xvcigpLnJlZCgpIC8gMjU1LjAsIGRlYnVnQm9yZGVyQ29sb3IoKS5ncmVlbigpIC8g
MjU1LjAsIGRlYnVnQm9yZGVyQ29sb3IoKS5ibHVlKCkgLyAyNTUuMCwgMSkpOworCisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmxpbmVXaWR0aChkZWJ1Z0JvcmRlcldpZHRoKCkpKTsKKworICAg
IC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGluZSBhcmUgc3RvcmVkIGluIHRoZSBzYW1lIGFycmF5
IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kcmF3
RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOworfQorfQor
CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44OGI0MGJiOGIyNTY5YzYxYmU2ODNiNzZlMDlhYmZmMWEwZWUyOTFk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q0NMYXllckltcGxfaAorI2RlZmluZSBDQ0xheWVySW1wbF9oCisKKyNpbmNsdWRlICJDb2xvci5o
IgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiIC8vIEZJWE1FOiB0ZW1wb3JhcnkgYW5kIGJhZAorI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKK2NsYXNz
IFJlbmRlclN1cmZhY2VDaHJvbWl1bTsKKworY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVm
Q291bnRlZDxDQ0xheWVySW1wbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgfQorICAgIC8vIFdo
ZW4gdGhpcyBjbGFzcyBnZXRzIHN1YmNsYXNzZXMsIHJlbWVtYmVyIHRvIGFkZCAndmlydHVhbCcg
aGVyZS4KKyAgICB+Q0NMYXllckltcGwoKTsKKworICAgIENDTGF5ZXJJbXBsKiBzdXBlcmxheWVy
KCkgY29uc3Q7CisKKyAgICAvLyBUaGVzZSBiZWxvbmcgb24gQ0NMYXllckltcGwsIGJ1dCBzaG91
bGQgYmUgc3ViY2xhc2VkIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBMYXllckNo
cm9taXVtIHN1YnR5cGVzLgorICAgIHZvaWQgZHJhdygpOworICAgIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3Q7CisKKyAgICAvLyBEZWJ1ZyBsYXllciBib3JkZXIgLSB2aXN1YWwgZWZmZWN0IG9u
bHksIGRvIG5vdCBjaGFuZ2UgZ2VvbWV0cnkvY2xpcHBpbmcvZXRjLgorICAgIHZvaWQgc2V0RGVi
dWdCb3JkZXJDb2xvcihDb2xvciBjKSB7IG1fZGVidWdCb3JkZXJDb2xvciA9IGM7IH0KKyAgICBD
b2xvciBkZWJ1Z0JvcmRlckNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0JvcmRlckNvbG9y
OyB9CisgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IHdpZHRoKSB7IG1fZGVidWdC
b3JkZXJXaWR0aCA9IHdpZHRoOyB9CisgICAgZmxvYXQgZGVidWdCb3JkZXJXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdCb3JkZXJXaWR0aDsgfQorCisgICAgdm9pZCBkcmF3RGVidWdCb3Jk
ZXIoKTsKKworICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0q
KTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJl
dHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KKworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogY3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9Cisg
ICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFjZS5jbGVhcigpOyB9
CisgICAgZmxvYXQgZHJhd0RlcHRoKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3RGVwdGg7IH0KKyAg
ICB2b2lkIHNldERyYXdEZXB0aChmbG9hdCBkZXB0aCkgeyBtX2RyYXdEZXB0aCA9IGRlcHRoOyB9
CisgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9
CisgICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fZHJhd09wYWNpdHkg
PSBvcGFjaXR5OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KSB7IG1fc2Npc3NvclJlY3QgPSByZWN0OyB9CisgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5k
ZXJTdXJmYWNlOyB9CisgICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogc3VyZmFjZSkgeyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9
CisKKyAgICBib29sIGRvdWJsZVNpZGVkKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVTaWRlZDsg
fQorICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBtX2RvdWJsZVNp
ZGVkID0gZG91YmxlU2lkZWQ7IH0KKyAgICBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7
IHJldHVybiBtX2JvdW5kczsgfQorICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmIGJv
dW5kcykgeyBtX2JvdW5kcyA9IGJvdW5kczsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgcmVjdCBj
b250YWludGFpbmluZyB0aGlzIGxheWVyIGluIHRoZSBjdXJyZW50IHZpZXcncyBjb29yZGluYXRl
IHN5c3RlbS4KKyAgICBjb25zdCBJbnRSZWN0IGdldERyYXdSZWN0KCkgY29uc3Q7CisKKyAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhd1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5zZm9ybSA9IG1hdHJpeDsgfQor
ICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KKyAgICB2b2lkIHNldERyYXdhYmxlQ29udGVudFJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxlQ29udGVudFJlY3QgPSByZWN0OyB9CisK
K3ByaXZhdGU6CisgICAgLy8gRm9yIG5vdywgQ0NMYXllcnMgYXJlIG93bmVkIGRpcmVjdGx5IGJ5
IGEgTGF5ZXJDaHJvbWl1bS4KKyAgICBMYXllckNocm9taXVtKiBtX293bmVyOworICAgIGV4cGxp
Y2l0IENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKworICAgIC8vIFJlbmRlciBzdXJmYWNl
IHRoaXMgbGF5ZXIgZHJhd3MgaW50by4gVGhpcyBpcyBhIHN1cmZhY2UgdGhhdCBjYW4gYmVsb25n
CisgICAgLy8gZWl0aGVyIHRvIHRoaXMgbGF5ZXIgKGlmIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9
PSBtX3JlbmRlclN1cmZhY2UpIG9yCisgICAgLy8gdG8gYW4gYW5jZXN0b3Igb2YgdGhpcyBsYXll
ci4gVGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZSBkZXRlcm1pbmVzIHRoZQorICAgIC8vIGNvb3Jk
aW5hdGUgc3lzdGVtIHRoZSBsYXllcidzIHRyYW5zZm9ybXMgYXJlIHJlbGF0aXZlIHRvLgorICAg
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOworCisgICAgLy8g
VGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4gVGhpcyB2
YWx1ZSBpcyB1c2VkCisgICAgLy8gdG8gc29ydCBsYXllcnMgZnJvbSBiYWNrIHRvIGZyb250Lgor
ICAgIGZsb2F0IG1fZHJhd0RlcHRoOworICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CisKKyAgICAv
LyBXaGV0aGVyIHRoZSAiYmFjayIgb2YgdGhpcyBsYXllciBzaG91bGQgZHJhdy4KKyAgICBib29s
IG1fZG91YmxlU2lkZWQ7CisKKyAgICAvLyBEZWJ1ZyBib3JkZXJzLgorICAgIENvbG9yIG1fZGVi
dWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBtX2RlYnVnQm9yZGVyV2lkdGg7CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CisKKyAgICBJbnRTaXplIG1fYm91bmRz
OworCisgICAgLy8gVGhlIHNjaXNzb3IgcmVjdGFuZ2xlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hl
biB0aGlzIGxheWVyIGlzIGRyYXduLgorICAgIC8vIEluaGVyaXRlZCBieSB0aGUgcGFyZW50IGxh
eWVyIGFuZCBmdXJ0aGVyIHJlc3RyaWN0ZWQgaWYgdGhpcyBsYXllciBtYXNrcworICAgIC8vIHRv
IGJvdW5kcy4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7CisKKyAgICAvLyBSZW5kZXIgc3Vy
ZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2Vu
ZGFudHMKKyAgICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCisgICAgT3duUHRyPFJl
bmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJmYWNlOworCisgICAgLy8gSGllcmFyY2hp
Y2FsIGJvdW5kaW5nIHJlY3QgY29udGFpbmluZyB0aGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50
cy4KKyAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKKworICAgIC8vIFBvaW50cyB0
byB0aGUgbGF5ZXIgcmVuZGVyZXIgdGhhdCB1cGRhdGVzIGFuZCBkcmF3cyB0aGlzIGxheWVyLgor
ICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKK307CisK
K30KKworI2VuZGlmIC8vIENDTGF5ZXJJbXBsX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82101</attachid>
            <date>2011-02-10 21:49:38 -0800</date>
            <delta_ts>2011-02-22 11:33:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54047-20110210214937.patch</filename>
            <type>text/plain</type>
            <size>84001</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxMzM2ODcwMjc2ODc3OWFlZjIwYmIyOTYxNjViMTA2YmU0N2MzYTdkLi5j
M2VjYjY3ZTNmNzdhODM4Yzk4ZGM2NmFkOWM1ODRlY2NjYzcxNjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsOTIgQEAKKzIwMTEtMDItMDggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFNlcGFyYXRlIHRoZSAidXBkYXRlIiBhbmQgImRyYXciIHBvcnRpb25zIG9mIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSdzIGRyYXdMYXllcnMgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDQ3CisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJh
dyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3Jk
ZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRCb3JkZXJXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpjb21wQ0NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpsYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06OnJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xl
YXJSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdE
ZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3RGVwdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd09wYWNpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0RHJhd09wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21p
dW06OnNldERvdWJsZVNpZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3VHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJlTGF5
ZXJaKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9v
dExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jv
b3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVM
YXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpzZXRDb21wb3NpdGVPZmZzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NvbXBDQ0xheWVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb21wQ0NMYXllcjo6Q29tcENDTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcENDTGF5ZXI6On5Db21wQ0NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXll
cjo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6Y3Jl
YXRlUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpnZXREcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wQ0NMYXllcjo6ZHJhd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9Db21wQ0NMYXllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBDQ0xheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnNldERl
YnVnQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRlYnVnQm9y
ZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnNldERlYnVnQm9yZGVy
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRlYnVnQm9yZGVyV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmxheWVyUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OnJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcENDTGF5ZXI6OmNsZWFyUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wQ0NMYXllcjo6ZHJhd0RlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpz
ZXREcmF3RGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmRyYXdPcGFjaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpzZXREcmF3T3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcENDTGF5ZXI6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBD
Q0xheWVyOjp0YXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpkb3VibGVTaWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2V0RG91
YmxlU2lkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcENDTGF5ZXI6OmJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wQ0NMYXllcjo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBDQ0xheWVyOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xh
eWVyOjpzZXREcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpk
cmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBDQ0xheWVyOjpzZXRE
cmF3YWJsZUNvbnRlbnRSZWN0KToKKwogMjAxMS0wMi0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGds
YXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDM3NDExZTBhNDFhOTBlMTJiNjMyY2JjMjUwNWQ2MWM5YjVhYmYx
OGEuLmU3MjI3NzE2NWM2ODVjYTQyZTc2NzEzMTM2Y2YxYjM3ZWRmOTkxM2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTI2MzEsNiArMjYzMSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVkRNWFBhcnNlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5t
bScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRhZWYyNWIx
NWFlZmU5NDQwNTIyMTc0NDRiOWFkY2EwY2YyYTFmZGYuLjVlZWU2ZGRhYmFhOGRkOGVlNDgxNjYz
OGQwM2FlZjlhZjAwNmIxNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAKKyNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKQEAgLTExNiw4ICsxMTcsOCBA
QCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJl
SWQpKTsKICAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+Y2FudmFzU2hhZGVyUHJv
Z3JhbSgpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5zaGFkZXJT
YW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5
ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKLSAgICAg
ICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3
T3BhY2l0eSgpLAorICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigp
LT5wcm9qZWN0aW9uTWF0cml4KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwKKyAg
ICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBj
Y0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgICAgc3YtPnNo
YWRlck1hdHJpeExvY2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYTM4ZjZiZDIxMjY5MGEyOGY5
ODM4ZGI4OTYzNWE4NDE0Y2I2ZDc3ZS4uNjg1NzUyMTZjMmNkNWEwMWQ5MDViNjFkYjkzZTRmZDdj
MDZjZTZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIK
QEAgLTE1NCw5ICsxNTUsOSBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpyZXF1aXJlc0Ns
aXBwZWRVcGRhdGVSZWN0KCkgY29uc3QKICAgICAvLyBvbmUgb2YgdGhlIGxheWVyJ3MgZGltZW5z
aW9ucyBpcyBsYXJnZXIgdGhhbiAyMDAwIHBpeGVscyBvciB0aGUgc2l6ZSBvZgogICAgIC8vIHN1
cmZhY2UgaXQncyByZW5kZXJpbmcgaW50by4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlIHVu
dGlsIGxheWVyIHRpbGluZyBpcyBpbXBsZW1lbnRlZC4KICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eExheWVyU2l6ZSA9IDIwMDA7Ci0gICAgcmV0dXJuIChtX2JvdW5kcy53aWR0aCgpID4gbWF4KG1h
eExheWVyU2l6ZSwgbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLndpZHRoKCkp
Ci0gICAgICAgICAgICB8fCBtX2JvdW5kcy5oZWlnaHQoKSA+IG1heChtYXhMYXllclNpemUsIG1f
dGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSkKLSAgICAgICAgICAg
IHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4dHVyZVNpemUobV9ib3VuZHMpKTsKKyAgICBy
ZXR1cm4gKGJvdW5kcygpLndpZHRoKCkgPiBtYXgobWF4TGF5ZXJTaXplLCBjY0xheWVySW1wbCgp
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkud2lkdGgoKSkKKyAgICAgICAg
ICAgIHx8IGJvdW5kcygpLmhlaWdodCgpID4gbWF4KG1heExheWVyU2l6ZSwgY2NMYXllckltcGwo
KS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLmhlaWdodCgpKQorICAgICAg
ICAgICAgfHwgIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShib3VuZHMoKSkpOwog
fQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQpA
QCAtMTY5LDI4ICsxNzAsMjQgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29u
dGVudHNJZkRpcnR5KCkKIAogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCi0gICAgdm9p
ZCogcGl4ZWxzID0gMDsKICAgICBJbnRSZWN0IGRpcnR5UmVjdDsKLSAgICBJbnRSZWN0IHVwZGF0
ZVJlY3Q7Ci0gICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplOwotICAgIEludFNpemUgYml0
bWFwU2l6ZTsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRz
KTsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKIAog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBs
ZW1lbnRlZC4KICAgICBpZiAocmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpKSB7CiAgICAgICAg
IC8vIEEgbGF5ZXIgd2l0aCAzRCB0cmFuc2Zvcm1zIGNvdWxkIHJlcXVpcmUgYW4gYXJiaXRyYXJp
bHkgbGFyZ2UgbnVtYmVyCiAgICAgICAgIC8vIG9mIHRleGVscyB0byBiZSByZXBhaW50ZWQsIHNv
IGlnbm9yZSB0aGVzZSBsYXllcnMgdW50aWwgdGlsaW5nIGlzCiAgICAgICAgIC8vIGltcGxlbWVu
dGVkLgotICAgICAgICBpZiAoIWRyYXdUcmFuc2Zvcm0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bigpKSB7CisgICAgICAgIGlmICghY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENhbGN1bGF0ZSB0
aGUgcmVnaW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCBpcyBjdXJyZW50bHkgdmlzaWJsZS4KLSAgICAg
ICAgY29uc3QgSW50UmVjdCBjbGlwUmVjdCA9IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZS0+Y29udGVu
dFJlY3QoKTsKKyAgICAgICAgY29uc3QgSW50UmVjdCBjbGlwUmVjdCA9IGNjTGF5ZXJJbXBsKCkt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKIAotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKLSAg
ICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIG1fYm91bmRzLndp
ZHRoKCksIC0wLjUgKiBtX2JvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gY2NMYXllckltcGwoKS0+ZHJhd1RyYW5z
Zm9ybSgpOworICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICog
Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCAwKTsKIAogICAgICAg
ICAvLyBGb3Igbm93IHdlIGFwcGx5IHRoZSBsYXJnZSBsYXllciB0cmVhdG1lbnQgb25seSBmb3Ig
bGF5ZXJzIHRoYXQgYXJlIGVpdGhlciB1bnRyYW5zZm9ybWVkCiAgICAgICAgIC8vIG9yIGFyZSBw
dXJlbHkgdHJhbnNsYXRlZC4gVGhlaXIgbWF0cml4IGlzIGV4cGVjdGVkIHRvIGJlIGludmVydGli
bGUuCkBAIC0xOTgsNyArMTk1LDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRU
b0xheWVyTWF0cml4ID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpOwogICAgICAgICBJ
bnRSZWN0IHZpc2libGVSZWN0SW5MYXllckNvb3JkcyA9IHRhcmdldFRvTGF5ZXJNYXRyaXgubWFw
UmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5pbnRlcnNl
Y3QoSW50UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwor
ICAgICAgICB2aXNpYmxlUmVjdEluTGF5ZXJDb29yZHMuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwg
Ym91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpKTsKIAogICAgICAgICAvLyBGb3Ig
bm9ybWFsIGxheWVycywgdGhlIGNlbnRlciBvZiB0aGUgdGV4dHVyZSBjb3JyZXNwb25kcyB3aXRo
IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgogICAgICAgICAvLyBJbiBsYXJnZSBsYXllcnMgdGhl
IGNlbnRlciBvZiB0aGUgdGV4dHVyZSBpcyB0aGUgY2VudGVyIG9mIHRoZSB2aXNpYmxlIHJlZ2lv
biBzbyB3ZSBoYXZlCkBAIC0yMTQsNyArMjExLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBJZiB0aGUgdmlzaWJsZSBw
b3J0aW9uIG9mIHRoZSBsYXllciBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCB1cGxvYWQsIG9y
IGlmIG91ciBiYWNraW5nCiAgICAgICAgIC8vIHRleHR1cmUgaGFzIGJlZW4gZXZpY3RlZCwgdGhl
biB0aGUgd2hvbGUgbGF5ZXIgaXMgY29uc2lkZXJlZCBkaXJ0eS4KLSAgICAgICAgaWYgKHZpc2li
bGVSZWN0SW5MYXllckNvb3JkcyAhPSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyB8fCAhbV9j
b250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkVGV4
dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgaWYgKHZpc2libGVS
ZWN0SW5MYXllckNvb3JkcyAhPSBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyB8fCAhbV9jb250
ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICAgICAgbV9kaXJ0eVJl
Y3QgPSBib3VuZHNSZWN0OwogICAgICAgICBtX3Zpc2libGVSZWN0SW5MYXllckNvb3JkcyA9IHZp
c2libGVSZWN0SW5MYXllckNvb3JkczsKIApAQCAtMjI0LDMzICsyMjEsMzIgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKIAogICAgICAgICAvLyBX
aGF0IHRoZSByZWN0YW5nbGVzIG1lYW46CiAgICAgICAgIC8vICAgZGlydHlSZWN0OiBUaGUgcmVn
aW9uIG9mIHRoaXMgbGF5ZXIgdGhhdCB3aWxsIGJlIHVwZGF0ZWQuCi0gICAgICAgIC8vICAgdXBk
YXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1
cGxvYWRlZCBpbnRvLgotICAgICAgICAvLyAgIHJlcXVpcmVkVGV4dHVyZVNpemU6IGlzIHRoZSBy
ZXF1aXJlZCBzaXplIG9mIHRoaXMgbGF5ZXIncyB0ZXh0dXJlLgorICAgICAgICAvLyAgIG1fdXBs
b2FkVXBkYXRlUmVjdDogVGhlIHJlZ2lvbiBvZiB0aGUgbGF5ZXIncyB0ZXh0dXJlIHRoYXQgd2ls
bCBiZSB1cGxvYWRlZCBpbnRvLgorICAgICAgICAvLyAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZTog
aXMgdGhlIHJlcXVpcmVkIHNpemUgb2YgdGhpcyBsYXllcidzIHRleHR1cmUuCiAgICAgICAgIGRp
cnR5UmVjdCA9IHZpc2libGVEaXJ0eVJlY3RJbkxheWVyU3BhY2U7Ci0gICAgICAgIHVwZGF0ZVJl
Y3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsK
ICAgICAgICAgSW50U2l6ZSB2aXNpYmxlUmVjdE9mZnNldEluTGF5ZXJDb29yZHModmlzaWJsZVJl
Y3RJbkxheWVyQ29vcmRzLngoKSwgdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLnkoKSk7Ci0gICAg
ICAgIHVwZGF0ZVJlY3QubW92ZSgtdmlzaWJsZVJlY3RPZmZzZXRJbkxheWVyQ29vcmRzKTsKLSAg
ICAgICAgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IHZpc2libGVSZWN0SW5MYXllckNvb3Jkcy5zaXpl
KCk7CisgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdC5tb3ZlKC12aXNpYmxlUmVjdE9mZnNldElu
TGF5ZXJDb29yZHMpOworICAgICAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSB2aXNpYmxlUmVj
dEluTGF5ZXJDb29yZHMuc2l6ZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRpcnR5UmVjdCA9
IEludFJlY3QobV9kaXJ0eVJlY3QpOwotICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9i
b3VuZHM7CisgICAgICAgIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGJvdW5kcygpOwogICAgICAg
ICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdlIG11c3Qg
cmVkcmF3IHRoZSBlbnRpcmUKICAgICAgICAgLy8gY29udGVudHMgb2YgdGhlIGxheWVyLgotICAg
ICAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxp
ZChyZXF1aXJlZFRleHR1cmVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpCisgICAgICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1f
cmVxdWlyZWRUZXh0dXJlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICAg
ICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAv
LyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRy
YXdpbmcKICAgICAgICAgICAgIC8vIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0
ZXh0dXJlLgogICAgICAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKICAg
ICAgICAgfQotICAgICAgICB1cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBtX3VwbG9h
ZFVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgfQogCiAgICAgaWYgKGRpcnR5UmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3Qg
U2tCaXRtYXAqIHNraWFCaXRtYXAgPSAwOwogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZh
cz4gY2FudmFzOwogICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBza2lhQ29udGV4dDsK
ICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CkBAIC0yNjgsMjQg
KzI2NCwyMSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGly
dHkoKQogICAgIGNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlS
ZWN0LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOwogCiAgICAg
bV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29udGV4dCwgZGly
dHlSZWN0KTsKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZpY2Uo
KS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKLSAgICBza2lhQml0bWFwID0gJmJpdG1hcDsKLSAgICBB
U1NFUlQoc2tpYUJpdG1hcCk7CiAKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFCaXRt
YXApOwotICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZp
ZygpOworICAgIGNvbnN0IFNrQml0bWFwJiBza2lhQml0bWFwID0gY2FudmFzLT5nZXREZXZpY2Uo
KS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soc2tpYUJp
dG1hcCk7CisgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC5jb25m
aWcoKTsKICAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29u
ZmlndXJhdGlvbnM/Ci0gICAgaWYgKHNraWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhf
Q29uZmlnKSB7Ci0gICAgICAgIHBpeGVscyA9IHNraWFCaXRtYXAtPmdldFBpeGVscygpOwotICAg
ICAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFw
LT5oZWlnaHQoKSk7Ci0gICAgfQorICAgIEFTU0VSVChza2lhQ29uZmlnID09IFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZyk7CisgICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5UmVjdC53aWR0
aCgpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3IFZlY3Rvcjx1aW50OF90Pihyb3dCeXRl
cyAqIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgc2tpYUJpdG1hcC5jb3B5UGl4ZWxzVG8obV91
cGxvYWRQaXhlbERhdGEtPmRhdGEoKSwgbV91cGxvYWRQaXhlbERhdGEtPnNpemUoKSk7CiAjZWxp
ZiBQTEFURk9STShDRykKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKICAgICBpbnQg
cm93Qnl0ZXMgPSA0ICogZGlydHlSZWN0LndpZHRoKCk7Ci0gICAgdGVtcFZlY3Rvci5yZXNpemUo
cm93Qnl0ZXMgKiBkaXJ0eVJlY3QuaGVpZ2h0KCkpOwotICAgIG1lbXNldCh0ZW1wVmVjdG9yLmRh
dGEoKSwgMCwgdGVtcFZlY3Rvci5zaXplKCkpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3
IFZlY3Rvcjx1aW50OF90Pihyb3dCeXRlcyAqIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgbWVt
c2V0KG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksIDAsIG1fdXBsb2FkUGl4ZWxEYXRhLT5zaXpl
KCkpOwogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRvcHRDRiwg
Q0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZlY3Rvci5k
YXRhKCksCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENHKEFkb3B0Q0YsIENH
Qml0bWFwQ29udGV4dENyZWF0ZShtX3VwbG9hZFBpeGVsRGF0YS0+ZGF0YSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgOCwgcm93Qnl0ZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOwpAQCAtMjk4LDE1
ICsyOTEsOSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGly
dHkoKQogICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0
eVJlY3QueSgpKTsKIAogICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGdy
YXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLQotICAgIHBpeGVscyA9IHRlbXBWZWN0b3IuZGF0
YSgpOwotICAgIGJpdG1hcFNpemUgPSBkaXJ0eVJlY3Quc2l6ZSgpOwogI2Vsc2UKICNlcnJvciAi
TmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCi0KLSAgICBpZiAo
cGl4ZWxzKQotICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChwaXhlbHMsIHJlcXVpcmVkVGV4dHVy
ZVNpemUsIHVwZGF0ZVJlY3QpOwogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVy
ZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCkBAIC0zMzcsNiArMzI0LDExIEBAIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIGlmIChtX3NraXBzRHJhdykKICAg
ICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fdXBsb2FkUGl4ZWxEYXRhKSB7CisgICAgICAgIHVw
ZGF0ZVRleHR1cmVSZWN0KG1fdXBsb2FkUGl4ZWxEYXRhLT5kYXRhKCksIG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZSwgbV91cGxvYWRVcGRhdGVSZWN0KTsKKyAgICAgICAgbV91cGxvYWRQaXhlbERhdGEu
Y2xlYXIoKTsKKyAgICB9CisKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKIAogICAgIGNv
bnN0IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJl
cigpLT5jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKQEAgLTM0OCwxNyArMzQwLDE3IEBAIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtMWkoc3YtPnNoYWRlclNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAKICAgICBpZiAo
cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpKSB7Ci0gICAgICAgIGZsb2F0IG00MyA9IGRyYXdU
cmFuc2Zvcm0oKS5tNDMoKTsKKyAgICAgICAgZmxvYXQgbTQzID0gY2NMYXllckltcGwoKS0+ZHJh
d1RyYW5zZm9ybSgpLm00MygpOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUzZChtX2xheWVyQ2VudGVySW5TdXJmYWNl
Q29vcmRzLngoKSwgbV9sYXllckNlbnRlckluU3VyZmFjZUNvb3Jkcy55KCksIG00Myk7CiAgICAg
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLCBtX3Zpc2libGVS
ZWN0SW5MYXllckNvb3Jkcy53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmlz
aWJsZVJlY3RJbkxheWVyQ29vcmRzLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLmhlaWdodCgpLCBjY0xh
eWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN2LT5z
aGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIo
KS0+cHJvamVjdGlvbk1hdHJpeCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUcmFu
c2Zvcm0oKSwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd09wYWNpdHkoKSwgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgp
LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLCBzdi0+c2hhZGVyTWF0cml4TG9j
YXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyQWxwaGFMb2NhdGlv
bigpKTsKICAgICB9CiAgICAgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAppbmRleCAzMzYzNTE4ZGE1MzFhYzYwZDMwZDdmODBlN2Y1Yzc2
MDNjMzJhMzgwLi4zNjNjOTQ1NmRiM2EwNDUxZWM4OTBlZTdlMzEyNjg1OWQ0YjZlZjMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTkwLDYgKzkwLDEwIEBAIHByb3RlY3Rl
ZDoKICAgICBPd25QdHI8TGF5ZXJUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKICAgICBib29s
IG1fc2tpcHNEcmF3OwogCisgICAgSW50U2l6ZSBtX3JlcXVpcmVkVGV4dHVyZVNpemU7CisgICAg
SW50UmVjdCBtX3VwbG9hZFVwZGF0ZVJlY3Q7CisgICAgT3duUHRyPFZlY3Rvcjx1aW50OF90PiA+
IG1fdXBsb2FkUGl4ZWxEYXRhOworCiBwcml2YXRlOgogCiAgICAgSW50UmVjdCBtX3Zpc2libGVS
ZWN0SW5MYXllckNvb3JkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IGNk
Mjk5YzFhMGNlM2IzMGU5NWQ5MTRkZTA1MWI5NjMyMTk4NDljYWIuLmQ4OGQ0ZWE4NDkyZjkzMDM1
Y2FhYzQ1NmI0MDUyYzJmNWJlNzNlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cApAQCAtODQsMzIgKzg0LDI5IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdm9pZCogcGl4ZWxz
ID0gMDsKLSAgICBJbnRTaXplIGJpdG1hcFNpemU7Ci0KICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKICNp
ZiBQTEFURk9STShTS0lBKQogICAgIC8vIFRoZSBsYXllciBjb250YWlucyBhbiBJbWFnZS4KICAg
ICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU2tp
YSo+KG5hdGl2ZUltYWdlKTsKICAgICBjb25zdCBTa0JpdG1hcCogc2tpYUJpdG1hcCA9IHNraWFJ
bWFnZTsKLSAgICBiaXRtYXBTaXplID0gSW50U2l6ZShza2lhQml0bWFwLT53aWR0aCgpLCBza2lh
Qml0bWFwLT5oZWlnaHQoKSk7CisgICAgbV9yZXF1aXJlZFRleHR1cmVTaXplID0gSW50U2l6ZShz
a2lhQml0bWFwLT53aWR0aCgpLCBza2lhQml0bWFwLT5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKHNr
aWFCaXRtYXApOwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gTmF0aXZlSW1hZ2VQdHIgaXMg
YSBDR0ltYWdlUmVmIG9uIE1hYyBPUyBYLgogICAgIGludCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0
aChuYXRpdmVJbWFnZSk7CiAgICAgaW50IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQobmF0aXZl
SW1hZ2UpOwotICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIG1f
cmVxdWlyZWRUZXh0dXJlU2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAjZW5kaWYKIAog
ICAgIC8vIENsaXAgdGhlIGRpcnR5IHJlY3QgdG8gdGhlIGJpdG1hcCBkaW1lbnNpb25zLgotICAg
IEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoMCwgMCksIGJpdG1hcFNpemUpKTsKKyAgICBtX3VwbG9hZFVwZGF0
ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKKyAgICBtX3VwbG9hZFVwZGF0
ZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZSkpOwogCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSB8fCAhbV9jb250ZW50c1RleHR1
cmUtPmlzVmFsaWQoYml0bWFwU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAg
ICBkaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBiaXRtYXBTaXplKTsKKyAgICBp
ZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChtX3Jl
cXVpcmVkVGV4dHVyZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgbV91
cGxvYWRVcGRhdGVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9yZXF1aXJlZFRleHR1
cmVTaXplKTsKICAgICBlbHNlIGlmICghbV9jb250ZW50c0RpcnR5KSB7Ci0gICAgICAgIG1fY29u
dGVudHNUZXh0dXJlLT5yZXNlcnZlKGJpdG1hcFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV9yZXF1aXJlZFRleHR1cmVT
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTExNywxMyArMTE0LDEzIEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250
ZW50c0lmRGlydHkoKQogICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7CiAg
ICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7CiAg
ICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRp
b25zPwotICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykK
LSAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7CisgICAgQVNTRVJUKHNr
aWFDb25maWcgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKKyAgICBtX3VwbG9hZFBp
eGVsRGF0YSA9IG5ldyBWZWN0b3I8dWludDhfdD4oc2tpYUJpdG1hcC0+d2lkdGgoKSAqIHNraWFC
aXRtYXAtPmhlaWdodCgpICogNCk7CisgICAgc2tpYUJpdG1hcC0+Y29weVBpeGVsc1RvKG1fdXBs
b2FkUGl4ZWxEYXRhLT5kYXRhKCksIG1fdXBsb2FkUGl4ZWxEYXRhLT5zaXplKCkpOwogI2VsaWYg
UExBVEZPUk0oQ0cpCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBnZXQgcmlkIG9mIHRoaXMgdGVt
cG9yYXJ5IGNvcHkgd2hlcmUgcG9zc2libGUuCiAgICAgaW50IHRlbXBSb3dCeXRlcyA9IHdpZHRo
ICogNDsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKLSAgICB0ZW1wVmVjdG9yLnJl
c2l6ZShoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOworICAgIG1fdXBsb2FkUGl4ZWxEYXRhID0gbmV3
IFZlY3Rvcjx1aW50OF90PihoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOwogICAgIC8vIE5vdGUgd2Ug
ZG8gbm90IHplcm8gdGhpcyB2ZWN0b3Igc2luY2Ugd2UgYXJlIGdvaW5nIHRvCiAgICAgLy8gY29t
cGxldGVseSBvdmVyd3JpdGUgaXRzIGNvbnRlbnRzIHdpdGggdGhlIGltYWdlIGJlbG93LgogICAg
IC8vIFRyeSB0byByZXVzZSB0aGUgY29sb3Igc3BhY2UgZnJvbSB0aGUgaW1hZ2UgdG8gcHJlc2Vy
dmUgaXRzIGNvbG9ycy4KQEAgLTE0Myw3ICsxNDAsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgY29sb3JTcGFjZSA9IGNvbG9yU3Bh
Y2VSZWxlYXNlci5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFJldGFpblB0cjxD
R0NvbnRleHRSZWY+IHRlbXBDb250ZXh0KEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZSh0
ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiB0ZW1wQ29udGV4
dChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUobV91cGxvYWRQaXhlbERhdGEtPmRhdGEo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgOCwgdGVtcFJvd0J5dGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7CkBAIC0xNTEsMTMgKzE0OCw5
IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c0lmRGlydHkoKQogICAg
IENHQ29udGV4dERyYXdJbWFnZSh0ZW1wQ29udGV4dC5nZXQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pih3aWR0aCksIHN0YXRp
Y19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAogICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJ
bWFnZSk7Ci0gICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7CiAjZWxzZQogI2Vycm9yICJO
ZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCiAjZW5kaWYKLQotICAgIGlmIChw
aXhlbHMpCi0gICAgICAgIHVwZGF0ZVRleHR1cmVSZWN0KHBpeGVscywgYml0bWFwU2l6ZSwgIGRp
cnR5UmVjdCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOGQwMWQ5YmQ5YWE0
OWU2MWM5NmE5ZWNjYjc2NmRjYjEwMWUzNmVlMy4uYjU2NzM4OWU0ZmIxMzA0MGI3Y2IxNWEzMTU3
ZmMwNWZjOTRmNmQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
IAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpZiBQTEFURk9STShTS0lBKQpAQCAtMTQ0LDI1ICsxNDUsMTkgQEAg
TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAg
ICAsIG1fbWFza0xheWVyKDApCi0gICAgLCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkKICAgICAs
IG1fc3VwZXJsYXllcigwKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1f
YmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCi0gICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAs
IDApCiAgICAgLCBtX29wYWNpdHkoMS4wKQogICAgICwgbV96UG9zaXRpb24oMC4wKQogICAgICwg
bV9hbmNob3JQb2ludFooMCkKLSAgICAsIG1fYm9yZGVyV2lkdGgoMCkKICAgICAsIG1fY2xlYXJz
Q29udGV4dChmYWxzZSkKLSAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1faGlkZGVu
KGZhbHNlKQogICAgICwgbV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUodHJ1
ZSkKICAgICAsIG1fZ2VvbWV0cnlGbGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rpc3BsYXlP
bkJvdW5kc0NoYW5nZShmYWxzZSkKLSAgICAsIG1fZHJhd0RlcHRoKDApCi0gICAgLCBtX2xheWVy
UmVuZGVyZXIoMCkKLSAgICAsIG1fcmVuZGVyU3VyZmFjZSgwKQorICAgICwgbV9jY0xheWVySW1w
bChDQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKIHsK
IH0KQEAgLTE3OSw4ICsxNzQsNyBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAK
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiB7Ci0gICAgaWYgKG1fcmVu
ZGVyU3VyZmFjZSkKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlLT5jbGVhbnVwUmVzb3VyY2VzKCk7
CisgICAgbV9jY0xheWVySW1wbC0+Y2xlYW51cFJlc291cmNlcygpOwogfQogCiB2b2lkIExheWVy
Q2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJl
cikKQEAgLTE5MiwxMyArMTg2LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRl
cmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCiAgICAgICAgIHNldE5lZWRzRGlz
cGxheSgpOwogICAgIH0KIAotICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOwotfQotCi1S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KQotewotICAgIG1fcmVuZGVyU3VyZmFjZSA9IG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW0odGhp
cyk7Ci0gICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsKKyAgICBtX2NjTGF5ZXJJbXBs
LT5zZXRMYXllclJlbmRlcmVyKHJlbmRlcmVyKTsKIH0KIAogdW5zaWduZWQgTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
Y2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJj
ZSkKQEAgLTMxNywxNiArMzA1LDE2IEBAIGludCBMYXllckNocm9taXVtOjppbmRleE9mU3VibGF5
ZXIoY29uc3QgTGF5ZXJDaHJvbWl1bSogcmVmZXJlbmNlKQogCiB2b2lkIExheWVyQ2hyb21pdW06
OnNldEJvdW5kcyhjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmIChtX2JvdW5kcyA9PSBz
aXplKQorICAgIGlmIChib3VuZHMoKSA9PSBzaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICBi
b29sIGZpcnN0UmVzaXplID0gIW1fYm91bmRzLndpZHRoKCkgJiYgIW1fYm91bmRzLmhlaWdodCgp
ICYmIHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgpOworICAgIGJvb2wgZmlyc3RSZXNpemUg
PSAhYm91bmRzKCkud2lkdGgoKSAmJiAhYm91bmRzKCkuaGVpZ2h0KCkgJiYgc2l6ZS53aWR0aCgp
ICYmIHNpemUuaGVpZ2h0KCk7CiAKLSAgICBtX2JvdW5kcyA9IHNpemU7CisgICAgbV9jY0xheWVy
SW1wbC0+c2V0Qm91bmRzKHNpemUpOwogICAgIG1fYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7CiAK
ICAgICBpZiAoZmlyc3RSZXNpemUpCi0gICAgICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3Qo
MCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgc2V0
TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAwLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5o
ZWlnaHQoKSkpOwogICAgIGVsc2UKICAgICAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KQEAgLTMz
Nyw3ICszMjUsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSByZWN0OwotICAgIHNldE5l
ZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVp
Z2h0KCkpKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIGJvdW5kcygpLndp
ZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CiB9CiAKIGNvbnN0IExheWVyQ2hyb21pdW0qIExh
eWVyQ2hyb21pdW06OnJvb3RMYXllcigpIGNvbnN0CkBAIC0zODYsNyArMzc0LDcgQEAgdm9pZCBM
YXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3Qp
CiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgbV9kaXJ0eVJl
Y3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICBtX2RpcnR5UmVjdC5zZXRTaXplKG1f
Ym91bmRzKTsKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKGJvdW5kcygpKTsKICAgICBtX2NvbnRl
bnRzRGlydHkgPSB0cnVlOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CkBAIC00NDUsMzggKzQz
Myw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgY29uc3QgVHJhbnNmb3JtCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAotdm9pZCBMYXllckNocm9taXVtOjpk
cmF3RGVidWdCb3JkZXIoKQotewotICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07Ci0gICAg
aWYgKCFib3JkZXJDb2xvcigpLmFscGhhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChsYXllclJlbmRlcmVyKCkpOwotICAgIGNvbnN0IFNoYXJlZFZhbHVlcyogc3YgPSBsYXllclJl
bmRlcmVyKCktPmxheWVyU2hhcmVkVmFsdWVzKCk7Ci0gICAgQVNTRVJUKHN2ICYmIHN2LT5pbml0
aWFsaXplZCgpKTsKLSAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+Ym9yZGVyU2hh
ZGVyUHJvZ3JhbSgpKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBk
cmF3VHJhbnNmb3JtKCk7Ci0gICAgcmVuZGVyTWF0cml4LnNjYWxlM2QoYm91bmRzKCkud2lkdGgo
KSwgYm91bmRzKCkuaGVpZ2h0KCksIDEpOwotICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBs
YXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSAqIHJlbmRlck1hdHJpeCk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KHN2LT5ib3JkZXJTaGFkZXJN
YXRyaXhMb2NhdGlvbigpLCBmYWxzZSwgJmdsTWF0cml4WzBdLCAxKSk7Ci0KLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHN2LT5ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uKCks
IGJvcmRlckNvbG9yKCkucmVkKCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IoKS5ncmVlbigpIC8gMjU1
LjAsIGJvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEpKTsKLQotICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5saW5lV2lkdGgoYm9yZGVyV2lkdGgoKSkpOwotCi0gICAgLy8gVGhlIGluZGlj
ZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFu
Z2xlIGluZGljZXMuCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFw
aGljc0NvbnRleHQzRDo6TElORV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlQsIDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7Ci19Ci0KLWNvbnN0IEludFJlY3Qg
TGF5ZXJDaHJvbWl1bTo6Z2V0RHJhd1JlY3QoKSBjb25zdAotewotICAgIC8vIEZvcm0gdGhlIG1h
dHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRoZSBsYXllcidz
Ci0gICAgLy8gYm91bmRzIGludG8gdGhlIHZpZXcgc3BhY2UuCi0gICAgRmxvYXRSZWN0IGxheWVy
UmVjdCgtMC41ICogYm91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCBi
b3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSk7Ci0gICAgSW50UmVjdCBtYXBwZWRS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChkcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJlY3Qp
KTsKLSAgICByZXR1cm4gbWFwcGVkUmVjdDsKLX0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGFueSBv
ZiB0aGUgbGF5ZXIncyBkZXNjZW5kYW50cyBoYXMgZHJhd2FibGUgY29udGVudC4KIGJvb2wgTGF5
ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudHNEcmF3Q29udGVudCgpCkBAIC01MDEsNiArNDU3LDUwIEBA
IGJvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFudHNEcmF3Q29udGVudFJlY3Vyc2l2ZSgpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBCZWdpbiBjYWxscyB0aGF0IGZvcndhcmQgdG8gdGhl
IENDTGF5ZXJJbXBsLgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorLy8gVGhlc2UgZXhpc3RzIGp1c3QgZm9yIGRlYnVnZ2luZyAodmlhIGRyYXdEZWJ1
Z0JvcmRlcigpKS4KK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQoreworICAgIG1fY2NMYXllckltcGwtPnNldERlYnVnQm9yZGVyQ29sb3IoY29s
b3IpOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK0NvbG9yIExheWVyQ2hyb21pdW06OmJv
cmRlckNvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jY0xheWVySW1wbC0+ZGVidWdCb3Jk
ZXJDb2xvcigpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OnNldEJvcmRlcldpZHRoKGZsb2F0
IHdpZHRoKQoreworICAgIG1fY2NMYXllckltcGwtPnNldERlYnVnQm9yZGVyV2lkdGgod2lkdGgp
OworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK2Zsb2F0IExheWVyQ2hyb21pdW06OmJvcmRl
cldpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jY0xheWVySW1wbC0+ZGVidWdCb3JkZXJX
aWR0aCgpOworfQorCitMYXllclJlbmRlcmVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OmxheWVy
UmVuZGVyZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsLT5sYXllclJlbmRl
cmVyKCk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RG91YmxlU2lkZWQoYm9vbCBkb3Vi
bGVTaWRlZCkKK3sKKyAgICBtX2NjTGF5ZXJJbXBsLT5zZXREb3VibGVTaWRlZChkb3VibGVTaWRl
ZCk7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKworY29uc3QgSW50U2l6ZSYgTGF5ZXJDaHJv
bWl1bTo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jY0xheWVySW1wbC0+Ym91bmRz
KCk7Cit9CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisvLyBFbmQgY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KKworCiAvLyBz
dGF0aWMKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZUZvckRyYXcoY29uc3QgU2hhcmVkVmFs
dWVzKiBzdikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1YzdlMmIxNDIxNzdjY2Y2OTJhYWE0
YzM2YTJlMjhmMGM2ZGYxYzg2Li4zNDhiZjM4ZGE3OTkyNjNmZWE3NzljNmU0YzU5OWU2MmIwNThj
NTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zOCw4ICszOCw4IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KQEAgLTUzLDEzICs1MywxMyBAQCBjbGFzcyBQbGF0Zm9ybUNhbnZhczsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogCiAvLyBCYXNlIGNsYXNzIGZv
ciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9t
CiAvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVk
PExheWVyQ2hyb21pdW0+IHsKLSAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
OwogICAgIGZyaWVuZCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIgPSAwKTsKQEAgLTg1LDIxICs4NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBj
b2xvcjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAgICB2b2lkIHNldEJvcmRlckNv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2JvcmRlckNvbG9yID0gY29sb3I7IHNldE5lZWRz
Q29tbWl0KCk7IH0KLSAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYm9y
ZGVyQ29sb3I7IH0KLQotICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9i
b3JkZXJXaWR0aCA9IHdpZHRoOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgZmxvYXQgYm9yZGVy
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlcldpZHRoOyB9Ci0KLSAgICB2b2lkIHNldEJv
dW5kcyhjb25zdCBJbnRTaXplJik7Ci0gICAgSW50U2l6ZSBib3VuZHMoKSBjb25zdCB7IHJldHVy
biBtX2JvdW5kczsgfQotCiAgICAgdm9pZCBzZXRDbGVhcnNDb250ZXh0KGJvb2wgY2xlYXJzKSB7
IG1fY2xlYXJzQ29udGV4dCA9IGNsZWFyczsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wg
Y2xlYXJzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xlYXJzQ29udGV4dDsgfQogCi0gICAg
dm9pZCBzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQgPSBk
b3VibGVTaWRlZDsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIGJvb2wgZG91YmxlU2lkZWQoKSBj
b25zdCB7IHJldHVybiBtX2RvdWJsZVNpZGVkOyB9Ci0KICAgICB2b2lkIHNldEZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYpOwogICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWU7IH0KIApAQCAtMTEzLDYgKzEwMSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJDaHJv
bWl1bSogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyB9CisgICAgQ0NMYXll
ckltcGwqIG1hc2tEcmF3TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllci0+Y2NMYXll
ckltcGwoKTsgfQogICAgIExheWVyQ2hyb21pdW0qIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFza0xheWVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCk7CkBAIC0xNDQsOSArMTMzLDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0R2VvbWV0cnlGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBtX2dlb21ldHJ5RmxpcHBlZCA9
IGZsaXBwZWQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGdlb21ldHJ5RmxpcHBlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2VvbWV0cnlGbGlwcGVkOyB9CiAKLSAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5z
Zm9ybTsgfQotICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3Bh
Y2l0eTsgfQotCiAgICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9v
d25lci0+cHJlc2VydmVzM0QoKTsgfQogCiAgICAgLy8gRGVyaXZlZCB0eXBlcyBtdXN0IG92ZXJy
aWRlIHRoaXMgbWV0aG9kIGlmIHRoZXkgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZQpAQCAtMTU4
LDkgKzE0NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihMYXllckNocm9t
aXVtKiBsYXllcikgeyBtX3JlcGxpY2FMYXllciA9IGxheWVyOyB9CiAgICAgTGF5ZXJDaHJvbWl1
bSogcmVwbGljYUxheWVyKCkgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXI7IH0KIAotICAgIC8vIFJl
dHVybnMgdGhlIHJlY3QgY29udGFpbnRhaW5pbmcgdGhpcyBsYXllciBpbiB0aGUgY3VycmVudCB2
aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgY29uc3QgSW50UmVjdCBnZXREcmF3UmVjdCgp
IGNvbnN0OwotCiAgICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBpY2FsbHkgbmVlZCB0byBiZSBvdmVy
d3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVu
dCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzSWZE
aXJ0eSgpIHsgfQpAQCAtMTY4LDkgKzE1MSwxOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGJpbmRDb250ZW50c1RleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdygpIHsgfQog
Ci0gICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55
IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCisgICAgYm9v
bCBkZXNjZW5kYW50c0RyYXdDb250ZW50KCk7CisKKyAgICAvLyBUaGVzZSBleGlzdHMganVzdCBm
b3IgZGVidWdnaW5nICh2aWEgZHJhd0RlYnVnQm9yZGVyKCkpLgorICAgIHZvaWQgc2V0Qm9yZGVy
Q29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0OworCisg
ICAgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCk7CisgICAgZmxvYXQgYm9yZGVyV2lkdGgoKSBj
b25zdDsKKworICAgIC8vIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIGRvd24gaW4gdGhlIHB1YmxpYyBz
ZWN0aW9uIHdpbGwgbW92ZSB0byBDQ0xheWVySW1wbC4KIAotICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogY3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1w
bCgpIGNvbnN0IHsgcmV0dXJuIG1fY2NMYXllckltcGwuZ2V0KCk7IH0KIAogICAgIC8vIFN0b3Jl
cyB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mg
dGhhdCBhcmUKICAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUgTGF5ZXJSZW5kZXJlckNo
cm9taXVtIChhbmQgaGVuY2UgdGhlIHNhbWUgR0wKQEAgLTIwMiwxNyArMTk1LDIyIEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIHByZXBhcmVGb3JEcmF3KGNvbnN0IFNoYXJlZFZhbHVlcyop
OwogCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9Ci0KICAgICBzdGF0aWMgdW5zaWduZWQgY3Jl
YXRlU2hhZGVyUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIHZlcnRleFNo
YWRlclNvdXJjZSwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwogCiAgICAgc3Rh
dGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbik7CiAK
KyAgICAvLyBCZWdpbiBjYWxscyB0aGF0IGZvcndhcmQgdG8gdGhlIENDTGF5ZXJJbXBsLgorICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0OworICAgIHZvaWQg
c2V0RG91YmxlU2lkZWQoYm9vbCk7CisgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYp
OworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0OworICAgIC8vIEVuZCBjYWxscyB0
aGF0IGZvcndhcmQgdG8gdGhlIENDTGF5ZXJJbXBsLgorCiBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhp
Y3NMYXllckNocm9taXVtKiBtX293bmVyOwotICAgIExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CisgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIHRvIGNsZWFuIHVw
IHJlc291cmNlcyBiZWluZyBoZWxkIGluIHRoZSBzYW1lIGNvbnRleHQgYXMKICAgICAvLyBsYXll
clJlbmRlcmVyQ29udGV4dCgpLiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhv
ZCBpZiB0aGV5CkBAIC0yMjEsMjMgKzIxOSwxMyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBHcmFwaGlj
c0NvbnRleHQzRCogbGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25zdDsKIAotICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8g
ZHJhdy4KLSAgICBib29sIGRlc2NlbmRhbnRzRHJhd0NvbnRlbnQoKTsKLQogICAgIHN0YXRpYyB2
b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCi0g
ICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CiAgICAgYm9v
bCBtX2NvbnRlbnRzRGlydHk7CiAKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5
ZXI7CiAKLSAgICAvLyBSZW5kZXIgc3VyZmFjZSB0aGlzIGxheWVyIGRyYXdzIGludG8uIFRoaXMg
aXMgYSBzdXJmYWNlIHRoYXQgY2FuIGJlbG9uZwotICAgIC8vIGVpdGhlciB0byB0aGlzIGxheWVy
IChpZiBtX3RhcmdldFJlbmRlclN1cmZhY2UgPT0gbV9yZW5kZXJTdXJmYWNlKSBvcgotICAgIC8v
IHRvIGFuIGFuY2VzdG9yIG9mIHRoaXMgbGF5ZXIuIFRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2Ug
ZGV0ZXJtaW5lcyB0aGUKLSAgICAvLyBjb29yZGluYXRlIHN5c3RlbSB0aGUgbGF5ZXIncyB0cmFu
c2Zvcm1zIGFyZSByZWxhdGl2ZSB0by4KLSAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZTsKLQogICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNoYXJlIHRoZSBz
YW1lIGF0dHJpYnV0ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25zCiAgICAgLy8g
YW5kIHRleHR1cmUgY29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBzaGFkZXJzIHdp
dGhvdXQgcmViaW5kaW5nIGF0dHJpYnV0ZQogICAgIC8vIGFycmF5cy4KQEAgLTI3MCw0MyArMjU4
LDIyIEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9p
bnQgbV9hbmNob3JQb2ludDsKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKLSAgICBDb2xv
ciBtX2JvcmRlckNvbG9yOwogICAgIGZsb2F0IG1fb3BhY2l0eTsKICAgICBmbG9hdCBtX3pQb3Np
dGlvbjsKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKLSAgICBmbG9hdCBtX2JvcmRlcldpZHRo
OwotICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2NsZWFyc0NvbnRleHQ7Ci0g
ICAgYm9vbCBtX2RvdWJsZVNpZGVkOwogICAgIGJvb2wgbV9oaWRkZW47CiAgICAgYm9vbCBtX21h
c2tzVG9Cb3VuZHM7CiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBib29sIG1fZ2VvbWV0cnlGbGlw
cGVkOwogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKIAotICAgIC8vIFRo
ZSBnbG9iYWwgZGVwdGggdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuIFRoaXMgdmFs
dWUgaXMgdXNlZAotICAgIC8vIHRvIHNvcnQgbGF5ZXJzIGZyb20gYmFjayB0byBmcm9udC4KLSAg
ICBmbG9hdCBtX2RyYXdEZXB0aDsKLQotICAgIC8vIFBvaW50cyB0byB0aGUgbGF5ZXIgcmVuZGVy
ZXIgdGhhdCB1cGRhdGVzIGFuZCBkcmF3cyB0aGlzIGxheWVyLgotICAgIFJlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKLQotICAgIEZsb2F0UmVjdCBtX2ZyYW1l
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9kcmF3VHJhbnNmb3JtOwogCi0gICAgLy8gVGhlIHNjaXNzb3IgcmVjdGFuZ2xlIHRoYXQgc2hv
dWxkIGJlIHVzZWQgd2hlbiB0aGlzIGxheWVyIGlzIGRyYXduLgotICAgIC8vIEluaGVyaXRlZCBi
eSB0aGUgcGFyZW50IGxheWVyIGFuZCBmdXJ0aGVyIHJlc3RyaWN0ZWQgaWYgdGhpcyBsYXllciBt
YXNrcwotICAgIC8vIHRvIGJvdW5kcy4KLSAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7Ci0KLSAg
ICAvLyBSZW5kZXIgc3VyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVy
IGFuZCBpdHMgZGVzY2VuZGFudHMKLSAgICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2Uu
Ci0gICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJmYWNlOwotCi0g
ICAgLy8gSGllcmFyY2hpY2FsIGJvdW5kaW5nIHJlY3QgY29udGFpbmluZyB0aGUgbGF5ZXIgYW5k
IGl0cyBkZXNjZW5kYW50cy4KLSAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKKyAg
ICBGbG9hdFJlY3QgbV9mcmFtZTsKKyAgICAvLyBGb3Igbm93LCB0aGUgTGF5ZXJDaHJvbWl1bSBk
aXJlY3RseSBvd25zIGl0cyBDQ0xheWVySW1wbC4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1f
Y2NMYXllckltcGw7CiAKICAgICAvLyBSZXBsaWNhIGxheWVyIHVzZWQgZm9yIHJlZmxlY3Rpb25z
LgogICAgIExheWVyQ2hyb21pdW0qIG1fcmVwbGljYUxheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZjU1NDhjOWY2M2YzNmI0YTNmMjU1M2JhZTg1ODRlZWQw
NDE4Y2E3MS4uMmExYmZmMzc1ZTBlMTlmNDJmNGJjNWQzYzU4ZmM4ZDgyYmZjMjRkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJDYW52YXMy
RExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKQEAgLTgyLDkgKzgzLDkgQEAgc3RhdGljIGJvb2wgaXNTY2Fs
ZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIH0KIAotYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbXBhcmVMYXllclooY29uc3QgTGF5ZXJDaHJvbWl1
bSogYSwgY29uc3QgTGF5ZXJDaHJvbWl1bSogYikKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpjb21wYXJlTGF5ZXJaKGNvbnN0IENDTGF5ZXJJbXBsKiBhLCBjb25zdCBDQ0xheWVySW1wbCog
YikKIHsKLSAgICByZXR1cm4gYS0+bV9kcmF3RGVwdGggPCBiLT5tX2RyYXdEZXB0aDsKKyAgICBy
ZXR1cm4gYS0+ZHJhd0RlcHRoKCkgPCBiLT5kcmF3RGVwdGgoKTsKIH0KIAogUGFzc1JlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCkBAIC0xNzIsOSArMTczLDEzIEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QsIGNvCiAgICAgfQogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWlu
dCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVwZGF0ZVJvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwg
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCiB7CiAgICAgbV9yb290TGF5ZXJUaWxlci0+dXBk
YXRlKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50LCBj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit7
CiAgICAgbV9yb290TGF5ZXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7CiAKICAgICBpZiAodmlz
aWJsZVJlY3Qud2lkdGgoKSA+IGNvbnRlbnRSZWN0LndpZHRoKCkpIHsKQEAgLTIxMSw3ICsyMTYs
MTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QKICAgICBpZiAoIW1fcm9vdExheWVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1cGRhdGVSb290
TGF5ZXIodGlsZVBhaW50LCB2aXNpYmxlUmVjdCk7CisgICAgLy8gUmVjaGVjayB0aGF0IHdlIHN0
aWxsIGhhdmUgYSByb290IGxheWVyLiAgVGhpcyBtYXkgYmVjb21lIG51bGwgaWYKKyAgICAvLyBj
b21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEgcGFpbnQgb3BlcmF0aW9uLgorICAg
IGlmICghbV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHRoZSBzaXpl
IG9mIHRoZSB2aXNpYmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBhbGxvY2F0ZSBhIG5ldyB0ZXh0
dXJlCiAgICAgLy8gdG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIGFuZCBh
ZGp1c3QgdGhlIHByb2plY3Rpb24gbWF0cml4CkBAIC0yMTksOSArMjI4LDE0IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0
LCBjb25zdCBJbnRSZWN0CiAgICAgaW50IHZpc2libGVSZWN0V2lkdGggPSB2aXNpYmxlUmVjdC53
aWR0aCgpOwogICAgIGludCB2aXNpYmxlUmVjdEhlaWdodCA9IHZpc2libGVSZWN0LmhlaWdodCgp
OwogCi0gICAgaWYgKCFtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlKQotICAgICAgICBtX3Jv
b3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIG1fcm9vdExheWVyLT5tX3JlbmRl
clN1cmZhY2UtPm1fY29udGVudFJlY3QgPSBJbnRSZWN0KDAsIDAsIHZpc2libGVSZWN0V2lkdGgs
IHZpc2libGVSZWN0SGVpZ2h0KTsKKyAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSdkIGRvIHRoaXMg
YmVsb3cgdGhlIGNvbXBvc2l0b3IgR0wgLyBXZWJLaXQgY3V0IHBvaW50LCBidXQgdXBkYXRlTGF5
ZXJzUmVjdXJzaXZlKCkgY3VycmVudGx5CisgICAgLy8gZGVwZW5kcyBvbiB0aGUgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtIHN0YXRlIGJlaW5nIHVwIHRvIGRhdGUuCisgICAgQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKTsKKworICAgIGlmICghcm9v
dERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICByb290RHJhd0xheWVyLT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgQVNTRVJUKHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2NvbnRlbnRSZWN0
ID0gSW50UmVjdCgwLCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCk7CiAK
ICAgICBpZiAodmlzaWJsZVJlY3RXaWR0aCAhPSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCB8fCB2
aXNpYmxlUmVjdEhlaWdodCAhPSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpIHsKICAgICAgICAg
bV9yb290TGF5ZXJUZXh0dXJlV2lkdGggPSB2aXNpYmxlUmVjdFdpZHRoOwpAQCAtMjMyLDYgKzI0
NiwzMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgICAgICBtX2N1cnJlbnRSZW5kZXJT
dXJmYWNlID0gMDsKICAgICB9CiAKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRp
b247CisgICAgLy8gU2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMgdG8gYXZvaWQgcmVuZGVyaW5n
IG9uIHRvcCBvZiB0aGVtLgorICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0
KTsKKyAgICAvLyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwg
b2Zmc2V0LgorICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwg
LW1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICByb290RHJhd0xheWVyLT5zZXRTY2lzc29yUmVj
dChyb290U2Npc3NvclJlY3QpOworCisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3RE
cmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJl
bmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQo
cm9vdERyYXdMYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOworICAg
IC8vIFVuZm9ydHVuYXRlbHksIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZSgpIGN1cnJlbnRseSBib3Ro
IHVwZGF0ZXMgdGhlIGxheWVycyBhbmQgdXBkYXRlcyB0aGUgZHJhdyBzdGF0ZQorICAgIC8vICh0
cmFuc2Zvcm1zLCBldGMpLiBJdCdkIGJlIG5pY2VyIGlmIG9wZXJhdGlvbnMgb24gdGhlIHByZXNl
bnRhdGlvbiBsYXllcnMgaGFwcGVuZWQgbGF0ZXIsIGJ1dCB0aGUgZHJhdworICAgIC8vIHRyYW5z
Zm9ybXMgYXJlIG5lZWRlZCBieSBsYXJnZSBsYXllcnMgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHku
ICBUaWxpbmcgd2lsbCBmaXggdGhpcyBieSBlbGltaW5hdGluZyB0aGUKKyAgICAvLyBjb25jZXB0
IG9mIGEgbGFyZ2UgY29udGVudCBsYXllci4KKyAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUobV9y
b290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBt
X2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CisKKyAgICAvLyAtLS0tLS09PT09
PT09PSBkaXZpZGUuIGJlbG93IGhlcmUgaXMgY29tcG9zaXRvciBjb250ZXh0IEdMIHN0dWZmLCBh
Ym92ZSBoZXJlIGlzIFdlYktpdCBzdHVmZiA9PT09PT09LS0tLS0tCisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKwogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2
aXNpYmxlIGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHZpc2libGVSZWN0V2lkdGgsIHZpc2li
bGVSZWN0SGVpZ2h0KSk7CiAKQEAgLTI0NSwxMSArMjgzLDYgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QKICAgICAvLyBCbGVuZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0LiBSb290IGxheWVyIGFs
cGhhIGNoYW5uZWwgb24gV2luZG93cyBpcyBpbmNvcnJlY3Qgd2hlbiBTa2lhIHVzZXMgQ2xlYXJU
eXBlLgogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpKTsKIAotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3Np
dGlvbjsKLQotICAgIEFTU0VSVChtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlKTsKLSAgICBt
X2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gbV9yb290TGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQo
KTsKLQogICAgIHVzZVJlbmRlclN1cmZhY2UobV9kZWZhdWx0UmVuZGVyU3VyZmFjZSk7CiAKICAg
ICAvLyBDbGVhciB0byBibHVlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgdW5yZW5kZXJlZCBy
ZWdpb25zLgpAQCAtMjYwLDMzICsyOTMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QKICAg
ICAvLyB6ZXJvIGFscGhhIHZhbHVlcyBvbiB0ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMg
YWx3YXlzIG9wYXF1ZS4KICAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVl
LCBmYWxzZSk7CiAKLSAgICB1cGRhdGVBbmREcmF3Um9vdExheWVyKHRpbGVQYWludCwgc2Nyb2xs
YmFyUGFpbnQsIHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CisgICAgZHJhd1Jvb3RMYXllcihz
Y3JvbGxiYXJQYWludCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKIAogICAgIC8vIFJlLWVu
YWJsZSBjb2xvciB3cml0ZXMgdG8gbGF5ZXJzLCB3aGljaCBtYXkgYmUgcGFydGlhbGx5IHRyYW5z
cGFyZW50LgogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUp
OwogCi0gICAgLy8gUmVjaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgYSByb290IGxheWVyLiAgVGhp
cyBtYXkgYmVjb21lIG51bGwgaWYKLSAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYg
ZHVyaW5nIGEgcGFpbnQgb3BlcmF0aW9uLgotICAgIGlmICghbV9yb290TGF5ZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFNldCB0aGUgcm9vdCB2aXNpYmxlL2NvbnRlbnQgcmVjdHMgLS0t
IHVzZWQgYnkgc3Vic2VxdWVudCBkcmF3TGF5ZXJzIGNhbGxzLgotICAgIG1fcm9vdFZpc2libGVS
ZWN0ID0gdmlzaWJsZVJlY3Q7Ci0gICAgbV9yb290Q29udGVudFJlY3QgPSBjb250ZW50UmVjdDsK
LQotICAgIC8vIFNjaXNzb3Igb3V0IHRoZSBzY3JvbGxiYXJzIHRvIGF2b2lkIHJlbmRlcmluZyBv
biB0b3Agb2YgdGhlbS4KLSAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChjb250ZW50UmVjdCk7
Ci0gICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9m
ZnNldC4KLSAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV9zY3JvbGxQb3NpdGlvbi54KCksIC1t
X3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgbV9yb290TGF5ZXItPm1fc2Npc3NvclJlY3QgPSBy
b290U2Npc3NvclJlY3Q7Ci0KLSAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobV9yb290TGF5
ZXIuZ2V0KCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0g
ICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKLSAgICB1cGRh
dGVMYXllcnNSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7
Ci0KICAgICAvLyBUaGUgc2hhZGVyIHVzZWQgdG8gcmVuZGVyIGxheWVycyByZXR1cm5zIHByZS1t
dWx0aXBsaWVkIGFscGhhIGNvbG9ycwogICAgIC8vIHNvIHdlIG5lZWQgdG8gc2VuZCB0aGUgYmxl
bmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5LgogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwpAQCAtMjk3LDI2ICszMDgs
MjYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QKICAgICAvLyBiYWNrIHRvIGZyb250IHRvIGd1
YXJhbnRlZSB0aGF0IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0IHJlbmRlcmVkIGluIHRoZQog
ICAgIC8vIGNvcnJlY3Qgb3JkZXIuCiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFj
ZUluZGV4KSB7Ci0gICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJl
bmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XTsKLSAgICAgICAgQVNTRVJUKHJlbmRl
clN1cmZhY2VMYXllci0+bV9yZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgQ0NMYXllckltcGwqIHJl
bmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XTsK
KyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKIAog
ICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBoYXMgemVybyB3
aWR0aCBvciBoZWlnaHQKICAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBhc3NvY2lhdGVk
IHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCi0gICAgICAgIGlmICghcmVuZGVyU3Vy
ZmFjZUxheWVyLT5tX3JlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LnNpemUoKSkKKyAgICAgICAg
aWYgKCFyZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXllckxpc3Quc2l6
ZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZh
Y2UocmVuZGVyU3VyZmFjZUxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCkpKSB7Ci0gICAgICAg
ICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9IG1fcm9vdExheWVyKSB7CisgICAgICAgIGlm
ICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpKSkg
eworICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7
CiAgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICAgICAgICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwogICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKICAgICAgICAgICAgICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZlY3RvcjxMYXllckNocm9t
aXVtKj4mIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2VMYXllci0+bV9yZW5kZXJTdXJmYWNlLT5t
X2xheWVyTGlzdDsKKyAgICAgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3Qg
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXllckxpc3Q7CiAgICAg
ICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXll
ckluZGV4KQotICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0s
IHJlbmRlclN1cmZhY2VMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLCByZW5kZXJTdXJmYWNlTGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQwNCw5ICs0MTUsMTAg
QEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21p
dW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxh
eWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUK
IC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVy
IHN1cmZhY2VzLCBldGMuCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJz
UmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGFyZW50TWF0cml4LCBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBsYXllckxpc3QpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBWZWN0b3I8Q0NMYXll
ckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxh
eWVyTGlzdCkKIHsKICAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKKyAgICBDQ0xh
eWVySW1wbCogZHJhd0xheWVyID0gbGF5ZXItPmNjTGF5ZXJJbXBsKCk7CiAKICAgICAvLyBDb21w
dXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRv
IHRoaXMgbGF5ZXIgYW5kCiAgICAgLy8gYWxsIGl0cyBzdWJsYXllcnMuIEl0J3MgaW1wb3J0YW50
IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KQEAgLTQ1OSw5NSArNDcxLDk4
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAgICAgLy8gb2YgdGhlaXIgcGFyZW50LgogICAg
IGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0gbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAh
aXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOwogICAgIGJvb2wgdXNlU3Vy
ZmFjZUZvck9wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWxheWVyLT5wcmVzZXJ2
ZXMzRCgpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tpbmcgPSBsYXllci0+bWFza0xheWVy
KCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGxheWVyLT5tYXNrRHJhd0xheWVy
KCk7CiAgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGxheWVyLT5yZXBsaWNhTGF5
ZXIoKTsKICAgICBpZiAoKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9w
YWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdDb250ZW50KCkpCiAgICAgICAgIHx8IHVz
ZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uKSB7Ci0gICAgICAg
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5tX3JlbmRlclN1
cmZhY2UuZ2V0KCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFj
ZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBpZiAoIXJlbmRlclN1cmZh
Y2UpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKIAogICAgICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBp
cyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLgotICAgICAgICBsYXllci0+bV9k
cmF3VHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKLSAgICAgICAgbGF5ZXItPm1f
ZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwgMC41ICogYm91
bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5z
Zm9ybTsKKyAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lk
dGgoKSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKKyAgICAgICAgZHJhd0xheWVyLT5zZXRE
cmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwogCiAgICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJS
ZWN0ID0gSW50UmVjdCgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKIAog
ICAgICAgICAvLyBMYXllcidzIG9wYWNpdHkgd2lsbCBiZSBhcHBsaWVkIHdoZW4gZHJhd2luZyB0
aGUgcmVuZGVyIHN1cmZhY2UuCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkg
PSBsYXllci0+b3BhY2l0eSgpOwotICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJl
c2VydmVzM0QoKSkKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgKj0g
bGF5ZXItPnN1cGVybGF5ZXIoKS0+ZHJhd09wYWNpdHkoKTsKLSAgICAgICAgbGF5ZXItPm1fZHJh
d09wYWNpdHkgPSAxOworICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKSAmJiBsYXllci0+
c3VwZXJsYXllcigpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+
bV9kcmF3T3BhY2l0eSAqPSBkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+ZHJhd09wYWNpdHkoKTsK
KyAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKIAogICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOwog
ICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndp
ZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwogICAgICAgICByZW5kZXJTdXJmYWNl
LT5tX29yaWdpblRyYW5zZm9ybSA9IGxheWVyT3JpZ2luVHJhbnNmb3JtOwogICAgICAgICBpZiAo
bGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkgJiYgbGF5ZXItPnN1cGVybGF5ZXIo
KSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VG9MYXllciA9IGxh
eWVyT3JpZ2luVHJhbnNmb3JtLmludmVyc2UoKTsKLQotICAgICAgICAgICAgbGF5ZXItPm1fc2Np
c3NvclJlY3QgPSBwYXJlbnRUb0xheWVyLm1hcFJlY3QobGF5ZXItPnN1cGVybGF5ZXIoKS0+bV9z
Y2lzc29yUmVjdCk7CisgICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KEludFJl
Y3QocGFyZW50VG9MYXllci5tYXBSZWN0KGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5zY2lzc29y
UmVjdCgpKSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGxheWVyLT5tX3NjaXNzb3JS
ZWN0ID0gSW50UmVjdCgpOworICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChJ
bnRSZWN0KCkpOwogCiAgICAgICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBzY2lzc29yIHJlY3Qg
aXMgdGhlIHNjaXNzb3IgcmVjdCB0aGF0IG5lZWRzIHRvCiAgICAgICAgIC8vIGJlIGFwcGxpZWQg
YmVmb3JlIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcKICAg
ICAgICAgLy8gc3VyZmFjZSBhbmQgaXMgdGhlcmVmb3JlIGV4cHJlc3NlZCBpbiB0aGUgc3VwZXJs
YXllcidzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3NjaXNz
b3JSZWN0ID0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+bV9zY2lzc29yUmVjdDsKKyAgICAgICAgcmVu
ZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGRyYXdMYXllci0+c3VwZXJsYXllcigpID8gZHJh
d0xheWVyLT5zdXBlcmxheWVyKCktPnNjaXNzb3JSZWN0KCkgOiBkcmF3TGF5ZXItPnNjaXNzb3JS
ZWN0KCk7CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKIAot
ICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJm
YWNlLT5tX21hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKTsKLSAgICAgICAgICAgIGxheWVy
LT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICAgICAgICAgIGxheWVy
LT5tYXNrTGF5ZXIoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZTsKKyAg
ICAgICAgaWYgKGxheWVyLT5tYXNrRHJhd0xheWVyKCkpIHsKKyAgICAgICAgICAgIHJlbmRlclN1
cmZhY2UtPm1fbWFza0xheWVyID0gbGF5ZXItPm1hc2tEcmF3TGF5ZXIoKTsKKyAgICAgICAgICAg
IGxheWVyLT5tYXNrRHJhd0xheWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7CisgICAgICAg
ICAgICBsYXllci0+bWFza0RyYXdMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRl
clN1cmZhY2UpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1f
bWFza0xheWVyID0gMDsKIAotICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAg
ICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5tX3RhcmdldFJlbmRl
clN1cmZhY2UgPSByZW5kZXJTdXJmYWNlOworICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXll
cigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0RyYXdMYXllcigpKSB7CisgICAgICAg
ICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tEcmF3TGF5ZXIoKS0+c2V0TGF5ZXJSZW5k
ZXJlcih0aGlzKTsKKyAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0RyYXdM
YXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwogICAgICAgICB9
CiAKLSAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOworICAgICAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChkcmF3TGF5ZXIpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIERUID0gTVtwXSAqIExUCi0gICAgICAgIGxheWVyLT5tX2RyYXdUcmFuc2Zv
cm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKLSAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KGxheWVyLT5tX2RyYXdUcmFuc2Zvcm0ubWFwUmVjdChsYXllclJlY3Qp
KTsKKyAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3Jt
KTsKKyAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRyYXdM
YXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CiAKLSAgICAgICAgbGF5
ZXItPm1fZHJhd09wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOworICAgICAgICBkcmF3TGF5ZXIt
PnNldERyYXdPcGFjaXR5KGxheWVyLT5vcGFjaXR5KCkpOwogCiAgICAgICAgIGlmIChsYXllci0+
c3VwZXJsYXllcigpKSB7CiAgICAgICAgICAgICBpZiAobGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJl
c2VydmVzM0QoKSkKLSAgICAgICAgICAgICAgIGxheWVyLT5tX2RyYXdPcGFjaXR5ICo9IGxheWVy
LT5zdXBlcmxheWVyKCktPm1fZHJhd09wYWNpdHk7CisgICAgICAgICAgICAgICBkcmF3TGF5ZXIt
PnNldERyYXdPcGFjaXR5KGRyYXdMYXllci0+ZHJhd09wYWNpdHkoKSAqIGRyYXdMYXllci0+c3Vw
ZXJsYXllcigpLT5kcmF3T3BhY2l0eSgpKTsKIAogICAgICAgICAgICAgLy8gTGF5ZXJzIGluaGVy
aXQgdGhlIHNjaXNzb3IgcmVjdCBmcm9tIHRoZWlyIHN1cGVybGF5ZXIuCi0gICAgICAgICAgICBs
YXllci0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fc2Npc3NvclJlY3Q7
CisgICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KGRyYXdMYXllci0+c3VwZXJs
YXllcigpLT5zY2lzc29yUmVjdCgpKTsKIAotICAgICAgICAgICAgbGF5ZXItPm1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZSA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsK
KyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShkcmF3TGF5ZXIt
PnN1cGVybGF5ZXIoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChsYXllciAhPSBtX3Jvb3RMYXllcikKLSAgICAgICAgICAgIGxheWVyLT5tX3JlbmRl
clN1cmZhY2UgPSAwOworICAgICAgICAgICAgZHJhd0xheWVyLT5jbGVhclJlbmRlclN1cmZhY2Uo
KTsKIAotICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkKLSAgICAgICAgICAgIGxh
eWVyLT5tX3NjaXNzb3JSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAg
ICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7CisgICAgICAgICAgICBJbnRSZWN0IHNj
aXNzb3IgPSBkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCk7CisgICAgICAgICAgICBzY2lzc29yLmlu
dGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgICAgICAgICBkcmF3TGF5ZXItPnNl
dFNjaXNzb3JSZWN0KHNjaXNzb3IpOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGxheWVy
LT5tX3JlbmRlclN1cmZhY2UpCi0gICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2Ug
PSBsYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOworICAgIGlmIChkcmF3TGF5ZXItPnJlbmRl
clN1cmZhY2UoKSkKKyAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGRy
YXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKGxh
eWVyLT5zdXBlcmxheWVyKCkpOwotICAgICAgICBsYXllci0+bV90YXJnZXRSZW5kZXJTdXJmYWNl
ID0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlOworICAgICAgICBk
cmF3TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5zdXBlcmxheWVyKCkt
PnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CiAgICAgfQogCi0gICAgLy8gbV9kcmF3YWJsZUNvbnRl
bnRSZWN0IGlzIGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZQor
ICAgIC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdheXMgc3RvcmVkIGluIHRoZSBjb29y
ZGluYXRlIHN5c3RlbSBvZiB0aGUKICAgICAvLyBSZW5kZXJTdXJmYWNlIHRoZSBsYXllciBkcmF3
cyBpbnRvLgogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGxheWVyLT5t
X2RyYXdhYmxlQ29udGVudFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAgICAgICAgZHJh
d0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKICAg
ICBlbHNlCi0gICAgICAgIGxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3QgPSBJbnRSZWN0KCk7
CisgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwog
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXllci0+bV9kcmF3
VHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gZHJh
d0xheWVyLT5kcmF3VHJhbnNmb3JtKCk7CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBs
YXllciBkb2Vzbid0IHByZXNlcnZlIDNELgogICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkp
IHsKQEAgLTU2OCwzNyArNTgzLDQ2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAgICAgLy8g
TVtzXSA9IE0gKiBUclstY2VudGVyXQogICAgIHN1YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1i
b3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7CiAKLSAgICBW
ZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiBkZXNjZW5kYW50cyA9IChsYXllci0+bV9yZW5kZXJTdXJm
YWNlID8gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QgOiBsYXllckxpc3QpOwot
ICAgIGRlc2NlbmRhbnRzLmFwcGVuZChsYXllcik7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4m
IGRlc2NlbmRhbnRzID0gKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpID8gZHJhd0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPm1fbGF5ZXJMaXN0IDogbGF5ZXJMaXN0KTsKKyAgICBkZXNjZW5kYW50
cy5hcHBlbmQoZHJhd0xheWVyKTsKICAgICB1bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2Nl
bmRhbnRzLnNpemUoKSAtIDE7CiAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBMYXllckNocm9t
aXVtKiBzdWJsYXllciA9IHN1YmxheWVyc1tpXS5nZXQoKTsKLSAgICAgICAgdXBkYXRlTGF5ZXJz
UmVjdXJzaXZlKHN1YmxheWVyLCBzdWJsYXllck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZGVzY2VuZGFudHMpOwotCi0gICAgICAgIGlmIChzdWJsYXllci0+bV9yZW5kZXJTdXJmYWNl
KSB7Ci0gICAgICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1YmxheWVyUmVuZGVyU3Vy
ZmFjZSA9IHN1YmxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCk7Ci0gICAgICAgICAgICBsYXll
ci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3Qoc3VibGF5ZXJS
ZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKKyAgICAgICAgQ0NMYXllcklt
cGwqIHN1YmxheWVyID0gc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpOworICAgICAgICB1cGRh
dGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBzdWJsYXllck1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOworCisgICAgICAgIGlmIChzdWJsYXll
ci0+cmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHN1YmxheWVyUmVuZGVyU3VyZmFjZSA9IHN1YmxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAg
ICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxl
Q29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUoZW5j
bG9zaW5nSW50UmVjdChzdWJsYXllclJlbmRlclN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3Qo
KSkpOworICAgICAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdh
YmxlQ29udGVudFJlY3QpOwogICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKHN1YmxheWVy
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRS
ZWN0LnVuaXRlKHN1YmxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3QpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVy
LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0
LnVuaXRlKHN1YmxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworICAgICAgICAgICAgZHJh
d0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3Vy
ZmFjZUZvck1hc2tpbmcpCi0gICAgICAgIGxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3QuaW50
ZXJzZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKKyAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3Vu
ZHMoKSB8fCB1c2VTdXJmYWNlRm9yTWFza2luZykgeworICAgICAgICBJbnRSZWN0IGRyYXdhYmxl
Q29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAg
ZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOworICAg
ICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVj
dCk7CisgICAgfQogCi0gICAgaWYgKGxheWVyLT5tX3JlbmRlclN1cmZhY2UgJiYgbGF5ZXIgIT0g
bV9yb290TGF5ZXIpIHsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJm
YWNlID0gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQoKTsKLSAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+bV9jb250ZW50UmVjdCA9IGxheWVyLT5tX2RyYXdhYmxlQ29udGVudFJlY3Q7CisgICAgaWYg
KGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IG1fcm9vdExheWVyKSB7Cisg
ICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+
cmVuZGVyU3VyZmFjZSgpOworICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0g
ZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgIEZsb2F0UG9pbnQgc3Vy
ZmFjZUNlbnRlciA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CiAKICAgICAg
ICAgLy8gUmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0
J3MgdmlzaWJsZS4KICAgICAgICAgRmxvYXRTaXplIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7
CisKICAgICAgICAgLy8gRG9uJ3QgY2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVmbGVjdGVkIGFzIHRo
ZSByZWZsZWN0aW9uIHNob3VsZG4ndCBiZQogICAgICAgICAvLyBjbGlwcGVkLgogICAgICAgICBp
ZiAoIWxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+
bV9jb250ZW50UmVjdC5pbnRlcnNlY3QobGF5ZXItPm1fc2Npc3NvclJlY3QpOworICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5pbnRlcnNlY3QoZHJhd0xheWVyLT5zY2lz
c29yUmVjdCgpKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIg
PSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRlcigpOwogICAgICAgICAgICAgY2VudGVy
T2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRl
cjsKICAgICAgICAgfQpAQCAtNjEzLDcgKzYzNyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRy
CiAKICAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFj
ZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKICAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4
cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAg
bGF5ZXItPm1fc2Npc3NvclJlY3QgPSBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0OworICAg
ICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50
UmVjdCgpKTsKIAogICAgICAgICAvLyBBZGp1c3QgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3Jt
IHRvIGJlIHRoZSBjZW50ZXIgb2YgdGhlIHJlbmRlciBzdXJmYWNlLgogICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX2RyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9y
bTsKQEAgLTYzMSwyMCArNjU1LDI3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAKICAgICAv
LyBDb21wdXRlIHRoZSBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBsYXllciB3aGlj
aCB3aWxsIGJlIHVzZWQgd2hlbgogICAgIC8vIHNvcnRpbmcgdGhlIGxheWVycyBmb3IgdGhlIHBy
ZXNlcnZlcy0zZCBwcm9wZXJ0eS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJEcmF3
TWF0cml4ID0gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZSA/IGxheWVyLT5tX3JlbmRlclN1cmZhY2Ut
Pm1fZHJhd1RyYW5zZm9ybSA6IGxheWVyLT5tX2RyYXdUcmFuc2Zvcm07CisgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGxheWVyRHJhd01hdHJpeCA9IGRyYXdMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpID8gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fZHJhd1RyYW5zZm9ybSA6IGRy
YXdMYXllci0+ZHJhd1RyYW5zZm9ybSgpOwogICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpKSB7
CiAgICAgICAgIGlmICghbGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkKLSAgICAg
ICAgICAgIGxheWVyLT5tX2RyYXdEZXB0aCA9IGxheWVyLT5zdXBlcmxheWVyKCktPm1fZHJhd0Rl
cHRoOworICAgICAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3RGVwdGgoZHJhd0xheWVyLT5zdXBl
cmxheWVyKCktPmRyYXdEZXB0aCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbGF5ZXIt
Pm1fZHJhd0RlcHRoID0gbGF5ZXJEcmF3TWF0cml4Lm00MygpOworICAgICAgICAgICAgZHJhd0xh
eWVyLT5zZXREcmF3RGVwdGgobGF5ZXJEcmF3TWF0cml4Lm00MygpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbGF5ZXItPm1fZHJhd0RlcHRoID0gMDsKKyAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3
RGVwdGgoMCk7CiAKICAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVz
Y2VuZGFudHMgYnkgdGhlIFogY29vcmRpbmF0ZSBvZiB0aGVpcgogICAgIC8vIGNlbnRlci4gSWYg
dGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgc3VwZXJsYXllciB0
aGVuCiAgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgc3VwZXJsYXllciB3aWxsIHNvcnQg
YWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCiAgICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgp
ICYmICghbGF5ZXItPnN1cGVybGF5ZXIoKSB8fCAhbGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2Vy
dmVzM0QoKSkpCiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNM
YXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVMYXllclopOworCisKKyAgICAv
LyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpZiBuZWNlc3NhcnkuCisgICAgaWYg
KGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzSWZE
aXJ0eSgpOworICAgIGlmIChsYXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQorICAg
ICAgICBsYXllci0+bWFza0xheWVyKCktPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOwogfQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wgY29t
cG9zaXRlT2Zmc2NyZWVuKQpAQCAtNjYxLDcgKzY5Miw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCBjb21wb3NpdGVPZmZzY3JlZW4pCiAg
ICAgICAgIC8vIG9yIGVsc2UgdGhlIGNhbGwgdG8gcHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpIGlu
IHVzZVJlbmRlclN1cmZhY2UoKSB3aWxsIGZhaWwuCiAgICAgICAgIG1fcm9vdExheWVyLT5zZXRM
YXllclJlbmRlcmVyKHRoaXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX3Jvb3RMYXllci0+bV9y
ZW5kZXJTdXJmYWNlLmNsZWFyKCk7CisgICAgICAgIG1fcm9vdExheWVyLT5jY0xheWVySW1wbCgp
LT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKQpA
QCAtNjk1LDM2ICs3MjYsMzIgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRl
clN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihMYXllckNo
cm9taXVtKiBsYXllciwgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXRTdXJmYWNlKQordm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0U3VyZmFjZSkKIHsKLSAgICBpZiAobGF5ZXItPm1f
cmVuZGVyU3VyZmFjZSAmJiBsYXllci0+bV9yZW5kZXJTdXJmYWNlICE9IHRhcmdldFN1cmZhY2Up
IHsKLSAgICAgICAgbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+ZHJhdygpOworICAgIGlmIChsYXll
ci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gdGFyZ2V0U3Vy
ZmFjZSkgeworICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3KCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobGF5ZXItPm1fYm91bmRzLmlzRW1wdHkoKSkKKyAg
ICBpZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
c2V0U2Npc3NvclRvUmVjdChsYXllci0+bV9zY2lzc29yUmVjdCk7CisgICAgc2V0U2Npc3NvclRv
UmVjdChsYXllci0+c2Npc3NvclJlY3QoKSk7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgbGF5ZXIg
ZmFsbHMgd2l0aGluIHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KICAgICBJbnRSZWN0
IGxheWVyUmVjdCA9IGxheWVyLT5nZXREcmF3UmVjdCgpOwotICAgIGJvb2wgaXNMYXllclZpc2li
bGUgPSBsYXllci0+bV9zY2lzc29yUmVjdC5pbnRlcnNlY3RzKGxheWVyUmVjdCk7CisgICAgYm9v
bCBpc0xheWVyVmlzaWJsZSA9IGxheWVyLT5zY2lzc29yUmVjdCgpLmludGVyc2VjdHMobGF5ZXJS
ZWN0KTsKICAgICBpZiAoIWlzTGF5ZXJWaXNpYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogTmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgY29tbXVsYXRpdmUgcmVuZGVy
IHN1cmZhY2UgdHJhbnNmb3JtcyBhbGwgdGhlIHdheSBmcm9tCiAgICAgLy8gICAgICAgIHRoZSBk
ZWZhdWx0IHJlbmRlciBzdXJmYWNlIGluIG9yZGVyIHRvIGRldGVybWluZSB2aXNpYmlsaXR5Lgot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkRHJhd01hdHJpeCA9IChsYXllci0+bV9y
ZW5kZXJTdXJmYWNlID8gbGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+ZHJhd1RyYW5zZm9ybSgpLm11
bHRpcGx5KGxheWVyLT5tX2RyYXdUcmFuc2Zvcm0pIDogbGF5ZXItPm1fZHJhd1RyYW5zZm9ybSk7
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWREcmF3TWF0cml4ID0gKGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3JtKCku
bXVsdGlwbHkobGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSkgOiBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKICAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpICYmIGNvbWJpbmVkRHJhd01hdHJpeC5t
MzMoKSA8IDApCiAgICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVu
dCgpKSB7Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlmIG5l
Y2Vzc2FyeS4KLSAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOwotICAgICAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChsYXllci0+ZHJhd3ND
b250ZW50KCkpCiAgICAgICAgIGxheWVyLT5kcmF3KCk7Ci0gICAgfQogCiAgICAgLy8gRHJhdyB0
aGUgZGVidWcgYm9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KICAgICBsYXllci0+ZHJhd0RlYnVnQm9y
ZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDNkM2U3ODRjNGNh
MTg1ZDkzY2YzYThlMTg2ZTFhMDQzZTc4NmY2M2YuLjk3NDM3NzAzNDFlNDAwZWZmMDljZjQzOWU5
OWQ0MWU2OTAwM2M3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04
OSw3ICs4OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJv
b2wpOwogICAgIGJvb2wgaXNDb21wb3NpdGluZ09mZnNjcmVlbigpIHsgcmV0dXJuIG1fY29tcG9z
aXRlT2Zmc2NyZWVuOyB9Ci0gICAgTGF5ZXJUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1
cmUoKSB7IHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVlbiA/IG1fcm9vdExheWVyLT5tX3JlbmRl
clN1cmZhY2UtPm1fY29udGVudHNUZXh0dXJlLmdldCgpIDogMDsgfQogCiAgICAgdm9pZCBzZXRS
b290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmKTsKIApAQCAtMTE2LDcgKzExNSw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlc2l6ZU9uc2NyZWVuQ29udGVudChjb25zdCBJbnRTaXplJik7
CiAKICAgICBJbnRTaXplIHJvb3RMYXllclRleHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gSW50
U2l6ZShtX3Jvb3RMYXllclRleHR1cmVXaWR0aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KTsg
fQotICAgIEludFJlY3Qgcm9vdExheWVyQ29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jv
b3RDb250ZW50UmVjdDsgfQogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KTsKIAogICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJl
TWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXIuZ2V0KCk7IH0KQEAgLTEy
NSwxMSArMTIzLDEyIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBMYXllclJl
bmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZ3JhcGhpY3NDb250
ZXh0M0QpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxh
eWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBWZWN0b3I8TGF5
ZXJDaHJvbWl1bSo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8TGF5ZXJDaHJvbWl1
bSo+JiBsYXllckxpc3QpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hy
b21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBWZWN0b3I8
Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIGxheWVyTGlzdCk7CiAKLSAgICB2b2lkIGRyYXdMYXllcihMYXllckNocm9taXVtKiwgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKik7CisgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qKTsKIAotICAgIHZvaWQgdXBkYXRlQW5kRHJhd1Jvb3RMYXll
cihUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3Jv
bGxiYXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0KTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcihUaWxlUGFpbnRJbnRlcmZhY2Um
LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CisgICAgdm9pZCBkcmF3Um9vdExheWVyKFRp
bGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKICAgICBib29sIGlzTGF5ZXJWaXNp
YmxlKExheWVyQ2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0KTsKIApAQCAtMTM5LDcgKzEzOCw3IEBAIHByaXZhdGU6CiAKICAg
ICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgc3RhdGljIGJvb2wgY29tcGFyZUxh
eWVyWihjb25zdCBMYXllckNocm9taXVtKiwgY29uc3QgTGF5ZXJDaHJvbWl1bSopOworICAgIHN0
YXRpYyBib29sIGNvbXBhcmVMYXllclooY29uc3QgQ0NMYXllckltcGwqLCBjb25zdCBDQ0xheWVy
SW1wbCopOwogCiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwogICAgIHZvaWQg
Y2xlYW51cFNoYXJlZE9iamVjdHMoKTsKQEAgLTE3OCw5ICsxNzcsNiBAQCBwcml2YXRlOgogCiAg
ICAgSW50U2l6ZSBtX3Jvb3RMYXllckNhbnZhc1NpemU7CiAKLSAgICBJbnRSZWN0IG1fcm9vdFZp
c2libGVSZWN0OwotICAgIEludFJlY3QgbV9yb290Q29udGVudFJlY3Q7Ci0KICAgICAvLyBNYXhp
bXVtIHRleHR1cmUgZGltZW5zaW9ucyBzdXBwb3J0ZWQuCiAgICAgaW50IG1fbWF4VGV4dHVyZVNp
emU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggODc4YzE0MmM4Nzlh
NzJkZDdmMTk0OGIyY2VkNmU0NWYyZjlhZjkxMC4uMzU3NWNmNzYzYjU2ZmIxZTNmNjVmZDMwN2Zi
OGIyMWRhYWEyZTNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
QEAgLTEyNCw4ICsxMjUsOCBAQCB2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OmRyYXcoKQogICAg
IAogICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5zaGFkZXJQcm9ncmFtKCkpOwog
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnNoYWRlclNhbXBsZXJMb2Nh
dGlvbigpLCAwKSk7Ci0gICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVy
KCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAotICAgICAgICAgICAgICAg
ICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCks
CisgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rp
b25NYXRyaXgoKSwgY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLAorICAgICAgICAgICAg
ICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGNjTGF5ZXJJbXBs
KCktPmRyYXdPcGFjaXR5KCksCiAgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyTWF0cml4
TG9jYXRpb24oKSwgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCmluZGV4IGIzY2U5ZDcyMzcxNjhjOTU0NzAxNGQyY2E1
MzRkMzJlOThjMGYzMGMuLmUwYjhiMDBkMmU5NzBmZTA0NDU1MDUwOTRlOWZjNzdjNmQyZjUxZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcApAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCkBAIC0x
MjAsNyArMTIxLDcgQEAgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFy
ZWRWYWx1ZXMoKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dy
YW0obV9tYXNrU2hhZGVyUHJvZ3JhbSkpOwogfQogCi1SZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJl
bmRlclN1cmZhY2VDaHJvbWl1bShMYXllckNocm9taXVtKiBvd25pbmdMYXllcikKK1JlbmRlclN1
cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZUNocm9taXVtKENDTGF5ZXJJbXBsKiBvd25pbmdM
YXllcikKICAgICA6IG1fb3duaW5nTGF5ZXIob3duaW5nTGF5ZXIpCiAgICAgLCBtX21hc2tMYXll
cigwKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCkBAIC0xNzksNyArMTgwLDcgQEAgYm9vbCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW06OnByZXBhcmVDb250ZW50c1RleHR1cmUoKQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd1N1cmZhY2UoTGF5
ZXJDaHJvbWl1bSogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSkKK3ZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3U3VyZmFjZShDQ0xheWVy
SW1wbCogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbGF5ZXJSZW5kZXJlcigp
LT5jb250ZXh0KCk7CiAKQEAgLTE4OSw3ICsxOTAsNiBAQCB2b2lkIFJlbmRlclN1cmZhY2VDaHJv
bWl1bTo6ZHJhd1N1cmZhY2UoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zv
cgogICAgIEFTU0VSVChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7CiAgICAgYm9vbCB1c2VNYXNr
ID0gZmFsc2U7CiAgICAgaWYgKG1hc2tMYXllciAmJiBtYXNrTGF5ZXItPmRyYXdzQ29udGVudCgp
KSB7Ci0gICAgICAgIG1hc2tMYXllci0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CiAgICAgICAg
IGlmICghbWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnRl
eHQzRC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgICAgICAgICBsYXllclJlbmRlcmVyKCkt
PnVzZVNoYWRlcihzdi0+bWFza1NoYWRlclByb2dyYW0oKSk7CkBAIC0yMzEsNyArMjMxLDcgQEAg
dm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXcoKQogICAgIC8vIGJvdGggdGhlIGxheWVy
IGFuZCBpdHMgcmVmbGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgeWV0IGFu
b3RoZXIgUmVuZGVyU3VyZmFjZQogICAgIC8vIHRvIGRyYXcgdGhlIGxheWVyIGFuZCBpdHMgcmVm
bGVjdGlvbiBpbi4gRm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2VwYXJhdGUgcmVmbGVjdGlvbgog
ICAgIC8vIG1hc2sgaWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUgYSBtYXNrIG9mIHRoZWlyIG93
bi4KLSAgICBMYXllckNocm9taXVtKiByZXBsaWNhTWFza0xheWVyID0gbV9tYXNrTGF5ZXI7Cisg
ICAgQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX21hc2tMYXllcjsKICAgICBpZiAo
IW1fbWFza0xheWVyICYmIG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQogICAgICAgICBy
ZXBsaWNhTWFza0xheWVyID0gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXll
cigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCmluZGV4IGIxZjZhNWNlYzgx
ZjBhY2QzM2M5ODhjODc3MzU0ZDdjYjI3Mjg3NzYuLmM4MTJiMGEzZTkzYjYxN2Y4M2Y4YzQ5N2Iw
ZjMxZTk2OGYzOTgwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCkBAIC0z
Nyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgTGF5ZXJDaHJvbWl1
bTsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogY2xh
c3MgTGF5ZXJUZXh0dXJlOwogCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyU3VyZmFjZUNocm9taXVt
KTsKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogcHVibGljOgotICAg
IGV4cGxpY2l0IFJlbmRlclN1cmZhY2VDaHJvbWl1bShMYXllckNocm9taXVtKik7CisgICAgZXhw
bGljaXQgUmVuZGVyU3VyZmFjZUNocm9taXVtKENDTGF5ZXJJbXBsKik7CiAgICAgflJlbmRlclN1
cmZhY2VDaHJvbWl1bSgpOwogCiAgICAgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKCk7CkBA
IC05NiwxMCArOTYsMTAgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpOwotICAgIHZvaWQgZHJhd1N1cmZhY2UoTGF5ZXJDaHJv
bWl1bSogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSk7CisgICAgdm9pZCBkcmF3U3VyZmFjZShDQ0xheWVySW1wbCogbWFza0xheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSk7CiAKLSAgICBMYXllckNocm9taXVt
KiBtX293bmluZ0xheWVyOwotICAgIExheWVyQ2hyb21pdW0qIG1fbWFza0xheWVyOworICAgIEND
TGF5ZXJJbXBsKiBtX293bmluZ0xheWVyOworICAgIENDTGF5ZXJJbXBsKiBtX21hc2tMYXllcjsK
IAogICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKICAgICBib29sIG1fc2tpcHNEcmF3OwpAQCAt
MTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBs
aWNhRHJhd1RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5z
Zm9ybTsKICAgICBJbnRSZWN0IG1fc2Npc3NvclJlY3Q7Ci0gICAgVmVjdG9yPExheWVyQ2hyb21p
dW0qPiBtX2xheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBtX2xheWVyTGlzdDsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDQxY2QxODAyZDAy
NzJhYWFlZWNjMGU0NTE3OGVhY2NiN2U2NGViNjUuLjFlN2I2MzlhZjVhNDM5Y2VjNDRlNTNiOGNi
MTdlOWFjNTc1Y2U0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJW
aWRlb0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpAQCAtMzg3LDggKzM4OCw4
IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IFNoYXJlZFZhbHVlcyog
c3YpCiAKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihzdi0+Y2NN
YXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9jYXN0PGZsb2F0Kj4oeXV2MlJHQiksIDEpKTsKIAot
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKLSAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygp
LndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgIGRyYXdUZXh0
dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGNj
TGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5k
cygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0
eSgpLAogICAgICAgICAgICAgICAgICAgICAgc3YtPnl1dlNoYWRlck1hdHJpeExvY2F0aW9uKCks
IHN2LT55dXZBbHBoYUxvY2F0aW9uKCkpOwogCiAgICAgLy8gUmVzZXQgYWN0aXZlIHRleHR1cmUg
YmFjayB0byB0ZXh0dXJlIDAuCkBAIC00MDksOCArNDEwLDggQEAgdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OmRyYXdSR0JBKGNvbnN0IFNoYXJlZFZhbHVlcyogc3YpCiAKICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5yZ2JhVGV4dHVyZUxvY2F0aW9uKCksIDApKTsKIAot
ICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9u
TWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKLSAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygp
LndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgIGRyYXdUZXh0
dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGNj
TGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5k
cygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0
eSgpLAogICAgICAgICAgICAgICAgICAgICAgc3YtPnJnYmFTaGFkZXJNYXRyaXhMb2NhdGlvbigp
LCBzdi0+cmdiYUFscGhhTG9jYXRpb24oKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42Njk2MjE2YmE5YWFlNzBiOWMxOTViODA0OWU4MTkxMDI0YjFlZjY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIiAvLyBGSVhNRTogdGVtcG9yYXJ5IGFuZCBiYWQKKyNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaCIKKworbmFtZXNwYWNlIHsKK3ZvaWQgdG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVk
LCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKK3sKKyAgICBmbGF0dGVu
ZWRbMF0gPSBtLm0xMSgpOworICAgIGZsYXR0ZW5lZFsxXSA9IG0ubTEyKCk7CisgICAgZmxhdHRl
bmVkWzJdID0gbS5tMTMoKTsKKyAgICBmbGF0dGVuZWRbM10gPSBtLm0xNCgpOworICAgIGZsYXR0
ZW5lZFs0XSA9IG0ubTIxKCk7CisgICAgZmxhdHRlbmVkWzVdID0gbS5tMjIoKTsKKyAgICBmbGF0
dGVuZWRbNl0gPSBtLm0yMygpOworICAgIGZsYXR0ZW5lZFs3XSA9IG0ubTI0KCk7CisgICAgZmxh
dHRlbmVkWzhdID0gbS5tMzEoKTsKKyAgICBmbGF0dGVuZWRbOV0gPSBtLm0zMigpOworICAgIGZs
YXR0ZW5lZFsxMF0gPSBtLm0zMygpOworICAgIGZsYXR0ZW5lZFsxMV0gPSBtLm0zNCgpOworICAg
IGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgpOworICAgIGZsYXR0ZW5lZFsxM10gPSBtLm00MigpOwor
ICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00MygpOworICAgIGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgp
OworfQorfQorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NMYXllckltcGw6OkNDTGF5ZXJJ
bXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1f
dGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQorICAgICwgbV9kcmF3RGVwdGgoMCkKKyAgICAsIG1fZHJh
d09wYWNpdHkoMCkKKyAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKKyAgICAsIG1fZGVidWdCb3Jk
ZXJDb2xvcigwLCAwLCAwLCAwKQorICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCisgICAgLCBt
X3JlbmRlclN1cmZhY2UoMCkKKyAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQoreworfQorCitDQ0xh
eWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKK3sKK30KKworLy8gVGhlc2UgYXJlIHBzZXVkby1zdHJ1
Y3R1cmFsIGhhY2tzIHVudGlsIHdlIGdldCByZWFsIHRyZWUgc3luY2luZyB1cCBpbiB0aGlzIHBp
ZWNlLgorQ0NMYXllckltcGwqIENDTGF5ZXJJbXBsOjpzdXBlcmxheWVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9vd25lci0+c3VwZXJsYXllcigpID8gbV9vd25lci0+c3VwZXJsYXllcigpLT5j
Y0xheWVySW1wbCgpIDogMDsKK30KKworQ0NMYXllckltcGwqIENDTGF5ZXJJbXBsOjptYXNrTGF5
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5tYXNrTGF5ZXIoKSA/IG1fb3duZXIt
Pm1hc2tMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKK30KKworQ0NMYXllckltcGwqIENDTGF5
ZXJJbXBsOjpyZXBsaWNhTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5yZXBs
aWNhTGF5ZXIoKSA/IG1fb3duZXItPnJlcGxpY2FMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsK
K30KKwordm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qIHJlbmRlcmVyKQoreworICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOworfQor
CitSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNl
KCkKK3sKKyAgICBtX3JlbmRlclN1cmZhY2UgPSBuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtKHRo
aXMpOworICAgIHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7Cit9CisKKy8vIFRoZXNlIGJl
bG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNob3VsZCBiZSBzdWJjbGFzZWQgYnkgZWFjaCB0eXBl
IGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCitib29sIENDTGF5
ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5kcmF3
c0NvbnRlbnQoKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6ZHJhdygpCit7CisgICAgcmV0dXJu
IG1fb3duZXItPmRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6dW5yZXNlcnZlQ29udGVu
dHNUZXh0dXJlKCkKK3sKKyAgICBtX293bmVyLT51bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsK
K30KKwordm9pZCBDQ0xheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZSgpCit7CisgICAgbV9v
d25lci0+YmluZENvbnRlbnRzVGV4dHVyZSgpOworfQorCit2b2lkIENDTGF5ZXJJbXBsOjpjbGVh
bnVwUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAocmVuZGVyU3VyZmFjZSgpKQorICAgICAgICByZW5k
ZXJTdXJmYWNlKCktPmNsZWFudXBSZXNvdXJjZXMoKTsKK30KKworY29uc3QgSW50UmVjdCBDQ0xh
eWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAoreworICAgIC8vIEZvcm0gdGhlIG1hdHJpeCB1
c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRoZSBsYXllcidzCisgICAg
Ly8gYm91bmRzIGludG8gdGhlIHZpZXcgc3BhY2UuCisgICAgRmxvYXRSZWN0IGxheWVyUmVjdCgt
MC41ICogYm91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCBtYXBwZWRSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChkcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJlY3QpKTsKKyAg
ICByZXR1cm4gbWFwcGVkUmVjdDsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6ZHJhd0RlYnVnQm9y
ZGVyKCkKK3sKKyAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOworICAgIGlmICghZGVidWdC
b3JkZXJDb2xvcigpLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChsYXll
clJlbmRlcmVyKCkpOworICAgIGNvbnN0IExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogc3Yg
PSBsYXllclJlbmRlcmVyKCktPmxheWVyU2hhcmVkVmFsdWVzKCk7CisgICAgQVNTRVJUKHN2ICYm
IHN2LT5pbml0aWFsaXplZCgpKTsKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+
Ym9yZGVyU2hhZGVyUHJvZ3JhbSgpKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJN
YXRyaXggPSBkcmF3VHJhbnNmb3JtKCk7CisgICAgcmVuZGVyTWF0cml4LnNjYWxlM2QobV9vd25l
ci0+Ym91bmRzKCkud2lkdGgoKSwgbV9vd25lci0+Ym91bmRzKCkuaGVpZ2h0KCksIDEpOworICAg
IHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRy
aXgoKSAqIHJlbmRlck1hdHJpeCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBt
X2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDRmdihzdi0+Ym9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oKSwgZmFsc2UsICZn
bE1hdHJpeFswXSwgMSkpOworCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihz
di0+Ym9yZGVyU2hhZGVyQ29sb3JMb2NhdGlvbigpLCBkZWJ1Z0JvcmRlckNvbG9yKCkucmVkKCkg
LyAyNTUuMCwgZGVidWdCb3JkZXJDb2xvcigpLmdyZWVuKCkgLyAyNTUuMCwgZGVidWdCb3JkZXJD
b2xvcigpLmJsdWUoKSAvIDI1NS4wLCAxKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
bGluZVdpZHRoKGRlYnVnQm9yZGVyV2lkdGgoKSkpOworCisgICAgLy8gVGhlIGluZGljZXMgZm9y
IHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGlu
ZGljZXMuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0Nv
bnRleHQzRDo6TElORV9MT09QLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQs
IDYgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7Cit9Cit9CisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQw
NGQ3NmFhMDRkNTRmYWE0NjYzNTkxNGNkMWU1MTZmNTliMzQzMDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVySW1wbF9oCisjZGVm
aW5lIENDTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIExheWVyQ2hyb21pdW07CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Citj
bGFzcyBSZW5kZXJTdXJmYWNlQ2hyb21pdW07CisKK2NsYXNzIENDTGF5ZXJJbXBsIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChvd25lcikpOworICAgIH0KKyAgICAv
LyBXaGVuIHRoaXMgY2xhc3MgZ2V0cyBzdWJjbGFzc2VzLCByZW1lbWJlciB0byBhZGQgJ3ZpcnR1
YWwnIGhlcmUuCisgICAgfkNDTGF5ZXJJbXBsKCk7CisKKyAgICBDQ0xheWVySW1wbCogc3VwZXJs
YXllcigpIGNvbnN0OworICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdDsKKyAgICBD
Q0xheWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3Q7CisKKyAgICB2b2lkIGRyYXcoKTsKKyAg
ICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNU
ZXh0dXJlKCk7CisgICAgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7CisKKyAgICB2b2lkIGNs
ZWFudXBSZXNvdXJjZXMoKTsKKworICAgIC8vIERlYnVnIGxheWVyIGJvcmRlciAtIHZpc3VhbCBl
ZmZlY3Qgb25seSwgZG8gbm90IGNoYW5nZSBnZW9tZXRyeS9jbGlwcGluZy9ldGMuCisgICAgdm9p
ZCBzZXREZWJ1Z0JvcmRlckNvbG9yKENvbG9yIGMpIHsgbV9kZWJ1Z0JvcmRlckNvbG9yID0gYzsg
fQorICAgIENvbG9yIGRlYnVnQm9yZGVyQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnQm9y
ZGVyQ29sb3I7IH0KKyAgICB2b2lkIHNldERlYnVnQm9yZGVyV2lkdGgoZmxvYXQgd2lkdGgpIHsg
bV9kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7IH0KKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0JvcmRlcldpZHRoOyB9CisKKyAgICB2b2lkIGRyYXdE
ZWJ1Z0JvcmRlcigpOworCisgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJD
aHJvbWl1bSopOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQorCisgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0qIHJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0
KCk7IH0KKyAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZSgpIHsgbV9yZW5kZXJTdXJmYWNlLmNs
ZWFyKCk7IH0KKyAgICBmbG9hdCBkcmF3RGVwdGgoKSBjb25zdCB7IHJldHVybiBtX2RyYXdEZXB0
aDsgfQorICAgIHZvaWQgc2V0RHJhd0RlcHRoKGZsb2F0IGRlcHRoKSB7IG1fZHJhd0RlcHRoID0g
ZGVwdGg7IH0KKyAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09w
YWNpdHk7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3
T3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKyAgICBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldFJlbmRlclN1cmZhY2U7IH0KKyAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1
cmZhY2U7IH0KKworICAgIGJvb2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJldHVybiBtX2RvdWJs
ZVNpZGVkOyB9CisgICAgdm9pZCBzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1f
ZG91YmxlU2lkZWQgPSBkb3VibGVTaWRlZDsgfQorICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50
U2l6ZSYgYm91bmRzKSB7IG1fYm91bmRzID0gYm91bmRzOyB9CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSByZWN0IGNvbnRhaW50YWluaW5nIHRoaXMgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgdmlldydzIGNv
b3JkaW5hdGUgc3lzdGVtLgorICAgIGNvbnN0IEludFJlY3QgZ2V0RHJhd1JlY3QoKSBjb25zdDsK
KworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9kcmF3VHJhbnNmb3JtID0gbWF0
cml4OyB9CisgICAgY29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsgfQorICAgIHZvaWQgc2V0RHJhd2FibGVDb250
ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZHJhd2FibGVDb250ZW50UmVjdCA9IHJl
Y3Q7IH0KKworcHJpdmF0ZToKKyAgICAvLyBGb3Igbm93LCBDQ0xheWVycyBhcmUgb3duZWQgZGly
ZWN0bHkgYnkgYSBMYXllckNocm9taXVtLgorICAgIExheWVyQ2hyb21pdW0qIG1fb3duZXI7Cisg
ICAgZXhwbGljaXQgQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOworCisgICAgLy8gUmVuZGVy
IHN1cmZhY2UgdGhpcyBsYXllciBkcmF3cyBpbnRvLiBUaGlzIGlzIGEgc3VyZmFjZSB0aGF0IGNh
biBiZWxvbmcKKyAgICAvLyBlaXRoZXIgdG8gdGhpcyBsYXllciAoaWYgbV90YXJnZXRSZW5kZXJT
dXJmYWNlID09IG1fcmVuZGVyU3VyZmFjZSkgb3IKKyAgICAvLyB0byBhbiBhbmNlc3RvciBvZiB0
aGlzIGxheWVyLiBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGRldGVybWluZXMgdGhlCisgICAg
Ly8gY29vcmRpbmF0ZSBzeXN0ZW0gdGhlIGxheWVyJ3MgdHJhbnNmb3JtcyBhcmUgcmVsYXRpdmUg
dG8uCisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX3RhcmdldFJlbmRlclN1cmZhY2U7CisK
KyAgICAvLyBUaGUgZ2xvYmFsIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVy
LiBUaGlzIHZhbHVlIGlzIHVzZWQKKyAgICAvLyB0byBzb3J0IGxheWVycyBmcm9tIGJhY2sgdG8g
ZnJvbnQuCisgICAgZmxvYXQgbV9kcmF3RGVwdGg7CisgICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsK
KworICAgIC8vIFdoZXRoZXIgdGhlICJiYWNrIiBvZiB0aGlzIGxheWVyIHNob3VsZCBkcmF3Lgor
ICAgIGJvb2wgbV9kb3VibGVTaWRlZDsKKworICAgIC8vIERlYnVnIGJvcmRlcnMuCisgICAgQ29s
b3IgbV9kZWJ1Z0JvcmRlckNvbG9yOworICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aDsKKwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKworICAgIEludFNpemUg
bV9ib3VuZHM7CisKKyAgICAvLyBUaGUgc2Npc3NvciByZWN0YW5nbGUgdGhhdCBzaG91bGQgYmUg
dXNlZCB3aGVuIHRoaXMgbGF5ZXIgaXMgZHJhd24uCisgICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBw
YXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVzdHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCisg
ICAgLy8gdG8gYm91bmRzLgorICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKworICAgIC8vIFJl
bmRlciBzdXJmYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5kIGl0
cyBkZXNjZW5kYW50cworICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KKyAgICBP
d25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CisKKyAgICAvLyBI
aWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBjb250YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRl
c2NlbmRhbnRzLgorICAgIEludFJlY3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OworCisgICAgLy8g
UG9pbnRzIHRvIHRoZSBsYXllciByZW5kZXJlciB0aGF0IHVwZGF0ZXMgYW5kIGRyYXdzIHRoaXMg
bGF5ZXIuCisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVy
OworfTsKKworfQorCisjZW5kaWYgLy8gQ0NMYXllckltcGxfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83352</attachid>
            <date>2011-02-22 11:33:43 -0800</date>
            <delta_ts>2011-02-25 13:30:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54047-20110222113342.patch</filename>
            <type>text/plain</type>
            <size>81647</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MTZlZjkzYjJlNjZjMjczODM0ZDQxYjlkMTdmMzc0YWNiMGIyODU3Li41
NzY0ODVkNTQ5ZDg4NDgyOGRjODc3MTQ4ZDllNDk0Nzg0OGNlNzFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTA0IEBACisyMDExLTAyLTIyICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W2Nocm9taXVtXSBTZXBhcmF0ZSB0aGUgInVwZGF0ZSIgYW5kICJkcmF3IiBwb3J0aW9ucyBvZiBM
YXllclJlbmRlcmVyQ2hyb21pdW0ncyBkcmF3TGF5ZXJzIGZ1bmN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA0NworCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRz
SWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpzZXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6c2V0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJvcmRl
ckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJvcmRlckNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJvcmRlcldpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmJvcmRlcldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0RG91YmxlU2lkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6Ym91bmRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjptYXNrRHJhd0xh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJlTGF5
ZXJaKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlUm9vdExheWVyU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlRHJhd1N0YXRlQW5kUmVuZGVyU3Vy
ZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludExh
eWVyc1JlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OnNldENvbXBvc2l0ZU9mZnNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpc2libGVSZWN0U2l6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3U3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmRyYXdZVVYpOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpkcmF3UkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJ
bXBsOjpzdXBlcmxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjptYXNrTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnJlcGxpY2FMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVySW1wbDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjp1bnJlc2VydmVD
b250ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmJpbmRDb250
ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNsZWFudXBSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmdldERyYXdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3RGVidWdCb3JkZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVySW1wbDo6c2V0RGVidWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6ZGVidWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2V0RGVidWdCb3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6
ZGVidWdCb3JkZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6bGF5ZXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVuZGVyU3VyZmFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y2xlYXJSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3RGVwdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNldERyYXdEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6ZHJhd09wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldERy
YXdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzY2lzc29yUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2Npc3NvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OnNldFRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OmRvdWJsZVNpZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpzZXREb3VibGVTaWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6Ym91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRyYXdUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmRyYXdhYmxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnNldERyYXdhYmxlQ29udGVudFJlY3QpOgorCiAyMDExLTAyLTE4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHR5cG8gaW4g
Ym91bmRhcnkgdGVzdCBpbiBBU1NFUlQoKSAtIHRlc3QgaXMgZm9yIGFuIGluY2x1c2l2ZSByYW5n
ZSwgbm90IGV4Y2x1c2l2ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAzOTkzNzIyOTZkNzZmOTA1OGJl
MzYyM2UyNDg0NzdhYTk1ODNlNmJmLi4yZjU2NGQ3OTUzMzdhNzdmZjU3MGFhNmNjMzdhM2M2OGEz
ODdhODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNjQ3LDYgKzI2NDcsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZETVhQYXJzZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBs
YXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
UGxhdGZvcm1EYXRhQ29jb2EubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDQyMjM4NzY1OWIzN2YyYjI2NjM3NzY0YjhmZDI5Yzc1YzU4NTkyNTYuLjc2
MDk5MTc1OTEwMzMwZGFiMGI0N2Y4YzhiZmZhMzc1ODdlODNmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
c0xheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJDYW52YXNM
YXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CiAKQEAgLTYyLDExICs2MywxMCBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcoKQog
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKICAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRl
cihwcm9ncmFtLT5wcm9ncmFtKCkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
MWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAg
IGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0
cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKLSAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndp
ZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgIGRyYXdUZXh0dXJl
ZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGNjTGF5
ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygp
LndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgp
LAogICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9j
YXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCku
YWxwaGFMb2NhdGlvbigpKTsKLQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggOTIwZjc4MDY3ZTJhNDJmMDJkMjcxZmM1ZDkzYjViNjQyNzg3OTZhMi4uMzBi
Y2U1ZDYwNzM4MjhjOWYwYTg1YzQ1N2YyYTIxMjExZTRiMzBmNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiQ29udGVu
dExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKQEAgLTc5LDggKzgwLDggQEAgYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0CiAgICAg
Ly8gb25lIG9mIHRoZSBsYXllcidzIGRpbWVuc2lvbnMgaXMgbGFyZ2VyIHRoYW4gMjAwMCBwaXhl
bHMgb3IgdGhlIHNpemUgb2YKICAgICAvLyBzdXJmYWNlIGl0J3MgcmVuZGVyaW5nIGludG8uIFRo
aXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSB1bnRpbCBsYXllciB0aWxpbmcgaXMgaW1wbGVtZW50
ZWQuCiAgICAgc3RhdGljIGNvbnN0IGludCBtYXhMYXllclNpemUgPSAyMDAwOwotICAgIHJldHVy
biAoYm91bmRzKCkud2lkdGgoKSA+IG1heChtYXhMYXllclNpemUsIG1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZS0+Y29udGVudFJlY3QoKS53aWR0aCgpKQotICAgICAgICAgICAgfHwgYm91bmRzKCkuaGVp
Z2h0KCkgPiBtYXgobWF4TGF5ZXJTaXplLCBtX3RhcmdldFJlbmRlclN1cmZhY2UtPmNvbnRlbnRS
ZWN0KCkuaGVpZ2h0KCkpCisgICAgcmV0dXJuIChib3VuZHMoKS53aWR0aCgpID4gbWF4KG1heExh
eWVyU2l6ZSwgY2NMYXllckltcGwoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVj
dCgpLndpZHRoKCkpCisgICAgICAgICAgICB8fCBib3VuZHMoKS5oZWlnaHQoKSA+IG1heChtYXhM
YXllclNpemUsIGNjTGF5ZXJJbXBsKCktPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJl
Y3QoKS5oZWlnaHQoKSkKICAgICAgICAgICAgIHx8ICFsYXllclJlbmRlcmVyKCktPmNoZWNrVGV4
dHVyZVNpemUoYm91bmRzKCkpKTsKIH0KIApAQCAtMTAzLDE1ICsxMDQsMTUgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KCkKICAgICAgICAgLy8gQSBs
YXllciB3aXRoIDNEIHRyYW5zZm9ybXMgY291bGQgcmVxdWlyZSBhbiBhcmJpdHJhcmlseSBsYXJn
ZSBudW1iZXIKICAgICAgICAgLy8gb2YgdGV4ZWxzIHRvIGJlIHJlcGFpbnRlZCwgc28gaWdub3Jl
IHRoZXNlIGxheWVycyB1bnRpbCB0aWxpbmcgaXMKICAgICAgICAgLy8gaW1wbGVtZW50ZWQuCi0g
ICAgICAgIGlmICghZHJhd1RyYW5zZm9ybSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsK
KyAgICAgICAgaWYgKCFjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCkuaXNJZGVudGl0eU9y
VHJhbnNsYXRpb24oKSkgewogICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSByZWdp
b24gb2YgdGhpcyBsYXllciB0aGF0IGlzIGN1cnJlbnRseSB2aXNpYmxlLgotICAgICAgICBjb25z
dCBJbnRSZWN0IGNsaXBSZWN0ID0gbV90YXJnZXRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgp
OworICAgICAgICBjb25zdCBJbnRSZWN0IGNsaXBSZWN0ID0gY2NMYXllckltcGwoKS0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpOwogCi0gICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOworICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGNjTGF5ZXJJbXBsKCkt
PmRyYXdUcmFuc2Zvcm0oKTsKICAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRl
M2QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5oZWlnaHQoKSwgMCk7
CiAKICAgICAgICAgLy8gRm9yIG5vdyB3ZSBhcHBseSB0aGUgbGFyZ2UgbGF5ZXIgdHJlYXRtZW50
IG9ubHkgZm9yIGxheWVycyB0aGF0IGFyZSBlaXRoZXIgdW50cmFuc2Zvcm1lZApAQCAtMzQxLDE4
ICszNDIsMTggQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBs
ZXJMb2NhdGlvbigpLCAwKSk7CiAKICAgICBpZiAocmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgp
KSB7Ci0gICAgICAgIGZsb2F0IG00MyA9IGRyYXdUcmFuc2Zvcm0oKS5tNDMoKTsKKyAgICAgICAg
ZmxvYXQgbTQzID0gY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpLm00MygpOwogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUzZChtX2xheWVyQ2VudGVySW5TdXJmYWNlQ29vcmRzLngoKSwgbV9sYXllckNlbnRlcklu
U3VyZmFjZUNvb3Jkcy55KCksIG00Myk7CiAgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4
dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJhbnNmb3JtLCBtX3Zpc2libGVSZWN0SW5MYXllckNvb3Jkcy53aWR0aCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmlzaWJsZVJlY3RJbkxheWVyQ29vcmRzLmhlaWdo
dCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmlzaWJsZVJl
Y3RJbkxheWVyQ29vcmRzLmhlaWdodCgpLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExv
Y2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5hbHBoYUxvY2F0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRyYXdUZXh0dXJl
ZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBi
b3VuZHMoKS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3T3BhY2l0eSgp
LCBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lk
dGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgY2NMYXll
ckltcGwoKS0+ZHJhd09wYWNpdHkoKSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9j
YXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLmFscGhhTG9jYXRpb24oKSk7CiAgICAgfQogICAgIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA2ZTAzZTY0YWViODE3MzE0ODY4ZTc4NDgw
MGY3NDJmNzZlMTc1NzZkLi5hN2VlYjk2Yzk0YTRlZDU5M2I0OWE3NzUxNzg1NzBhOGFmZjI4NDdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgogI2lmIFBMQVRGT1JNKFNLSUEpCkBAIC01NywyNSArNTgsMTkgQEAgTGF5ZXJDaHJvbWl1bTo6
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogbV9vd25l
cihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAsIG1fbWFza0xheWVy
KDApCi0gICAgLCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fc3VwZXJsYXllcigw
KQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1fYmFja2dyb3VuZENvbG9y
KDAsIDAsIDAsIDApCi0gICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX29w
YWNpdHkoMS4wKQogICAgICwgbV96UG9zaXRpb24oMC4wKQogICAgICwgbV9hbmNob3JQb2ludFoo
MCkKLSAgICAsIG1fYm9yZGVyV2lkdGgoMCkKICAgICAsIG1fY2xlYXJzQ29udGV4dChmYWxzZSkK
LSAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1faGlkZGVuKGZhbHNlKQogICAgICwg
bV9tYXNrc1RvQm91bmRzKGZhbHNlKQogICAgICwgbV9vcGFxdWUodHJ1ZSkKICAgICAsIG1fZ2Vv
bWV0cnlGbGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShm
YWxzZSkKLSAgICAsIG1fZHJhd0RlcHRoKDApCi0gICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKLSAg
ICAsIG1fcmVuZGVyU3VyZmFjZSgwKQorICAgICwgbV9jY0xheWVySW1wbChDQ0xheWVySW1wbDo6
Y3JlYXRlKHRoaXMpKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKIHsKIH0KQEAgLTkyLDggKzg3
LDcgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogCiB2b2lkIExheWVyQ2hyb21p
dW06OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIGlmIChtX3JlbmRlclN1cmZhY2UpCi0gICAg
ICAgIG1fcmVuZGVyU3VyZmFjZS0+Y2xlYW51cFJlc291cmNlcygpOworICAgIG1fY2NMYXllcklt
cGwtPmNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXll
clJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCkBAIC0xMDUsMTMgKzk5
LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogcmVuZGVyZXIpCiAgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwogICAgIH0KIAot
ICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOwotfQotCi1SZW5kZXJTdXJmYWNlQ2hyb21p
dW0qIExheWVyQ2hyb21pdW06OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQotewotICAgIG1fcmVuZGVy
U3VyZmFjZSA9IG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW0odGhpcyk7Ci0gICAgcmV0dXJuIG1f
cmVuZGVyU3VyZmFjZS5nZXQoKTsKKyAgICBtX2NjTGF5ZXJJbXBsLT5zZXRMYXllclJlbmRlcmVy
KHJlbmRlcmVyKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0NvbW1pdCgpCkBA
IC0xODgsMTUgKzE3NiwxNSBAQCBpbnQgTGF5ZXJDaHJvbWl1bTo6aW5kZXhPZlN1YmxheWVyKGNv
bnN0IExheWVyQ2hyb21pdW0qIHJlZmVyZW5jZSkKIAogdm9pZCBMYXllckNocm9taXVtOjpzZXRC
b3VuZHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAobV9ib3VuZHMgPT0gc2l6ZSkK
KyAgICBpZiAoYm91bmRzKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBm
aXJzdFJlc2l6ZSA9ICFtX2JvdW5kcy53aWR0aCgpICYmICFtX2JvdW5kcy5oZWlnaHQoKSAmJiBz
aXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKTsKKyAgICBib29sIGZpcnN0UmVzaXplID0gIWJv
dW5kcygpLndpZHRoKCkgJiYgIWJvdW5kcygpLmhlaWdodCgpICYmIHNpemUud2lkdGgoKSAmJiBz
aXplLmhlaWdodCgpOwogCi0gICAgbV9ib3VuZHMgPSBzaXplOworICAgIG1fY2NMYXllckltcGwt
PnNldEJvdW5kcyhzaXplKTsKIAogICAgIGlmIChmaXJzdFJlc2l6ZSkKLSAgICAgICAgc2V0TmVl
ZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWln
aHQoKSkpOworICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIGJvdW5kcygp
LndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CiAgICAgZWxzZQogICAgICAgICBzZXROZWVk
c0NvbW1pdCgpOwogfQpAQCAtMjA3LDcgKzE5NSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0
RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgcmV0dXJuOwogCiAgICAgbV9mcmFt
ZSA9IHJlY3Q7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KEZsb2F0UmVjdCgwLCAwLCBtX2JvdW5kcy53
aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOworICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJl
Y3QoMCwgMCwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpKTsKIH0KIAogY29u
c3QgTGF5ZXJDaHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6cm9vdExheWVyKCkgY29uc3QKQEAgLTI1
Niw3ICsyNDQsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCkKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
KCkKIHsKICAgICBtX2RpcnR5UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOwotICAgIG1f
ZGlydHlSZWN0LnNldFNpemUobV9ib3VuZHMpOworICAgIG1fZGlydHlSZWN0LnNldFNpemUoYm91
bmRzKCkpOwogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiAgICAgc2V0TmVlZHNDb21taXQo
KTsKIH0KQEAgLTMxNSwzOCArMzAzLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpkcmF3VGV4dHVy
ZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBUcmFuc2Zvcm0KICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklB
TkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCkpOwogfQogCi12
b2lkIExheWVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcigpCi17Ci0gICAgc3RhdGljIGZsb2F0
IGdsTWF0cml4WzE2XTsKLSAgICBpZiAoIWJvcmRlckNvbG9yKCkuYWxwaGEoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Ci0gICAgY29uc3QgQm9yZGVy
UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Ym9yZGVyUHJvZ3JhbSgpOwotICAg
IEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotICAgIGxheWVyUmVu
ZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7Ci0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcmVuZGVyTWF0cml4ID0gZHJhd1RyYW5zZm9ybSgpOwotICAgIHJlbmRlck1hdHJp
eC5zY2FsZTNkKGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCAxKTsKLSAgICB0
b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4
KCkgKiByZW5kZXJNYXRyaXgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlckNvbnRleHQoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybU1h
dHJpeDRmdihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLCBmYWxzZSwg
JmdsTWF0cml4WzBdLCAxKSk7CiAKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRm
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCBib3JkZXJDb2xvcigp
LnJlZCgpIC8gMjU1LjAsIGJvcmRlckNvbG9yKCkuZ3JlZW4oKSAvIDI1NS4wLCBib3JkZXJDb2xv
cigpLmJsdWUoKSAvIDI1NS4wLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+bGlu
ZVdpZHRoKGJvcmRlcldpZHRoKCkpKTsKLQotICAgIC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGlu
ZSBhcmUgc3RvcmVkIGluIHRoZSBzYW1lIGFycmF5IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgot
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KSkpOwotfQotCi1jb25zdCBJbnRSZWN0IExheWVyQ2hyb21pdW06
OmdldERyYXdSZWN0KCkgY29uc3QKLXsKLSAgICAvLyBGb3JtIHRoZSBtYXRyaXggdXNlZCBieSB0
aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBvZiB0aGUgbGF5ZXIncwotICAgIC8vIGJvdW5k
cyBpbnRvIHRoZSB2aWV3IHNwYWNlLgotICAgIEZsb2F0UmVjdCBsYXllclJlY3QoLTAuNSAqIGJv
dW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5oZWlnaHQoKSwgYm91bmRzKCkud2lkdGgo
KSwgYm91bmRzKCkuaGVpZ2h0KCkpOwotICAgIEludFJlY3QgbWFwcGVkUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7Ci0gICAgcmV0dXJu
IG1hcHBlZFJlY3Q7Ci19CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3Mg
ZGVzY2VuZGFudHMgaGFzIGRyYXdhYmxlIGNvbnRlbnQuCiBib29sIExheWVyQ2hyb21pdW06OmRl
c2NlbmRhbnRzRHJhd0NvbnRlbnQoKQpAQCAtMzcxLDUgKzMyOCw0OCBAQCBib29sIExheWVyQ2hy
b21pdW06OmRlc2NlbmRhbnRzRHJhd0NvbnRlbnRSZWN1cnNpdmUoKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorLy8gQmVnaW4gY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4K
Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFRo
ZXNlIGV4aXN0cyBqdXN0IGZvciBkZWJ1Z2dpbmcgKHZpYSBkcmF3RGVidWdCb3JkZXIoKSkuCit2
b2lkIExheWVyQ2hyb21pdW06OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sK
KyAgICBtX2NjTGF5ZXJJbXBsLT5zZXREZWJ1Z0JvcmRlckNvbG9yKGNvbG9yKTsKKyAgICBzZXRO
ZWVkc0NvbW1pdCgpOworfQorCitDb2xvciBMYXllckNocm9taXVtOjpib3JkZXJDb2xvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY2NMYXllckltcGwtPmRlYnVnQm9yZGVyQ29sb3IoKTsKK30K
Kwordm9pZCBMYXllckNocm9taXVtOjpzZXRCb3JkZXJXaWR0aChmbG9hdCB3aWR0aCkKK3sKKyAg
ICBtX2NjTGF5ZXJJbXBsLT5zZXREZWJ1Z0JvcmRlcldpZHRoKHdpZHRoKTsKKyAgICBzZXROZWVk
c0NvbW1pdCgpOworfQorCitmbG9hdCBMYXllckNocm9taXVtOjpib3JkZXJXaWR0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY2NMYXllckltcGwtPmRlYnVnQm9yZGVyV2lkdGgoKTsKK30KKwor
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBMYXllckNocm9taXVtOjpsYXllclJlbmRlcmVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jY0xheWVySW1wbC0+bGF5ZXJSZW5kZXJlcigpOworfQorCit2
b2lkIExheWVyQ2hyb21pdW06OnNldERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpCit7Cisg
ICAgbV9jY0xheWVySW1wbC0+c2V0RG91YmxlU2lkZWQoZG91YmxlU2lkZWQpOworICAgIHNldE5l
ZWRzQ29tbWl0KCk7Cit9CisKK2NvbnN0IEludFNpemUmIExheWVyQ2hyb21pdW06OmJvdW5kcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2NMYXllckltcGwtPmJvdW5kcygpOworfQorLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gRW5kIGNhbGxz
IHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllckltcGwuCisKIH0KICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggY2M2YTgxMTViMzFk
MjVjMDEyNDNhODJiN2I0N2E0MTU0NGVmNTVlZC4uNzJlZjQwZTI3YzAwNjU3NDNjN2E5OGJiNDY5
MjdiODliZmIzYTE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNoYWRlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKwogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CkBAIC01NSwxMyArNTYsMTQgQEAgY2xhc3MgUGxhdGZvcm1DYW52YXM7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIAogLy8gQmFzZSBjbGFzcyBm
b3IgY29tcG9zaXRlZCBsYXllcnMuIFNwZWNpYWwgbGF5ZXIgdHlwZXMgYXJlIGRlcml2ZWQgZnJv
bQogLy8gdGhpcyBjbGFzcy4KIGNsYXNzIExheWVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRl
ZDxMYXllckNocm9taXVtPiB7Ci0gICAgZnJpZW5kIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bTsKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyID0gMCk7CiAKQEAgLTg2LDIxICs4OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3Ig
PSBjb2xvcjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAgICB2b2lkIHNldEJvcmRl
ckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX2JvcmRlckNvbG9yID0gY29sb3I7IHNldE5l
ZWRzQ29tbWl0KCk7IH0KLSAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Ym9yZGVyQ29sb3I7IH0KLQotICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQgd2lkdGgpIHsg
bV9ib3JkZXJXaWR0aCA9IHdpZHRoOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgZmxvYXQgYm9y
ZGVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlcldpZHRoOyB9Ci0KLSAgICB2b2lkIHNl
dEJvdW5kcyhjb25zdCBJbnRTaXplJik7Ci0gICAgSW50U2l6ZSBib3VuZHMoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kczsgfQotCiAgICAgdm9pZCBzZXRDbGVhcnNDb250ZXh0KGJvb2wgY2xlYXJz
KSB7IG1fY2xlYXJzQ29udGV4dCA9IGNsZWFyczsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJv
b2wgY2xlYXJzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xlYXJzQ29udGV4dDsgfQogCi0g
ICAgdm9pZCBzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQg
PSBkb3VibGVTaWRlZDsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIGJvb2wgZG91YmxlU2lkZWQo
KSBjb25zdCB7IHJldHVybiBtX2RvdWJsZVNpZGVkOyB9Ci0KICAgICB2b2lkIHNldEZyYW1lKGNv
bnN0IEZsb2F0UmVjdCYpOwogICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWU7IH0KIApAQCAtMTE0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoTGF5ZXJD
aHJvbWl1bSogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyB9CisgICAgQ0NM
YXllckltcGwqIG1hc2tEcmF3TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllciA/IG1f
bWFza0xheWVyLT5jY0xheWVySW1wbCgpIDogMDsgfQogICAgIExheWVyQ2hyb21pdW0qIG1hc2tM
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNl
dE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7CkBAIC0xNDUsMjMgKzEz
NiwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVk
KSB7IG1fZ2VvbWV0cnlGbGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAg
IGJvb2wgZ2VvbWV0cnlGbGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeUZsaXBwZWQ7
IH0KIAotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9Ci0gICAgZmxvYXQgZHJhd09wYWNpdHkoKSBj
b25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9Ci0KICAgICBib29sIHByZXNlcnZlczNEKCkg
eyByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5wcmVzZXJ2ZXMzRCgpOyB9CiAKICAgICAvLyBE
ZXJpdmVkIHR5cGVzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIHJl
YWN0IHRvIGEgY2hhbmdlCiAgICAgLy8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1bS4KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMg
aGFzIGNvbnRlbnQgdG8gZHJhdy4KKyAgICBib29sIGRlc2NlbmRhbnRzRHJhd0NvbnRlbnQoKTsK
KwogICAgIHZvaWQgc2V0T3duZXIoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikgeyBtX293
bmVyID0gb3duZXI7IH0KIAogICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKExheWVyQ2hyb21pdW0q
IGxheWVyKSB7IG1fcmVwbGljYUxheWVyID0gbGF5ZXI7IH0KICAgICBMYXllckNocm9taXVtKiBy
ZXBsaWNhTGF5ZXIoKSB7IHJldHVybiBtX3JlcGxpY2FMYXllcjsgfQogCi0gICAgLy8gUmV0dXJu
cyB0aGUgcmVjdCBjb250YWludGFpbmluZyB0aGlzIGxheWVyIGluIHRoZSBjdXJyZW50IHZpZXcn
cyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBjb25zdCBJbnRSZWN0IGdldERyYXdSZWN0KCkgY29u
c3Q7Ci0KICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0
dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHNJZkRpcnR5
KCkgeyB9CkBAIC0xNjksMjIgKzE1NywzMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGJp
bmRDb250ZW50c1RleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdygpIHsgfQogCi0g
ICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoKTsKKyAgICAvLyBUaGVzZSBleGlzdHMganVzdCBmb3Ig
ZGVidWdnaW5nICh2aWEgZHJhd0RlYnVnQm9yZGVyKCkpLgorICAgIHZvaWQgc2V0Qm9yZGVyQ29s
b3IoY29uc3QgQ29sb3ImKTsKKyAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0OwogCi0gICAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgdm9pZCBz
ZXRCb3JkZXJXaWR0aChmbG9hdCk7CisgICAgZmxvYXQgYm9yZGVyV2lkdGgoKSBjb25zdDsKIAot
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQorICAgIC8vIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIGRv
d24gaW4gdGhlIHB1YmxpYyBzZWN0aW9uIHdpbGwgbW92ZSB0byBDQ0xheWVySW1wbC4KIAotICAg
IHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYpOworICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2NM
YXllckltcGwuZ2V0KCk7IH0KIAogICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoR3Jh
cGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1h
dHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
b3BhY2l0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRyaXhMb2Nh
dGlvbiwgaW50IGFscGhhTG9jYXRpb24pOwogCisgICAgLy8gQmVnaW4gY2FsbHMgdGhhdCBmb3J3
YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wpOworICAgIHZv
aWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKKyAgICBjb25zdCBJbnRTaXplJiBib3VuZHMo
KSBjb25zdDsKKyAgICAvLyBFbmQgY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1w
bC4KKwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zLCBGcmFnbWVu
dFNoYWRlckNvbG9yPiBCb3JkZXJQcm9ncmFtOwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogbV9vd25lcjsKLSAgICBMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpOworICAgIGV4cGxpY2l0IExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcik7CiAKICAgICAvLyBUaGlzIGlzIGNhbGxlZCB0byBjbGVhbiB1cCByZXNv
dXJjZXMgYmVpbmcgaGVsZCBpbiB0aGUgc2FtZSBjb250ZXh0IGFzCiAgICAgLy8gbGF5ZXJSZW5k
ZXJlckNvbnRleHQoKS4gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYg
dGhleQpAQCAtMTkzLDIwICsxOTEsMTggQEAgcHJvdGVjdGVkOgogCiAgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGxheWVyUmVuZGVyZXJDb250ZXh0KCkgY29uc3Q7CiAKLSAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgYW55IG9mIHRoZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcu
Ci0gICAgYm9vbCBkZXNjZW5kYW50c0RyYXdDb250ZW50KCk7CisgICAgc3RhdGljIHZvaWQgdG9H
TE1hdHJpeChmbG9hdCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICBJbnRT
aXplIG1fYm91bmRzOwogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29u
dGVudHNEaXJ0eTsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX21hc2tMYXllcjsKIAot
ICAgIC8vIFJlbmRlciBzdXJmYWNlIHRoaXMgbGF5ZXIgZHJhd3MgaW50by4gVGhpcyBpcyBhIHN1
cmZhY2UgdGhhdCBjYW4gYmVsb25nCi0gICAgLy8gZWl0aGVyIHRvIHRoaXMgbGF5ZXIgKGlmIG1f
dGFyZ2V0UmVuZGVyU3VyZmFjZSA9PSBtX3JlbmRlclN1cmZhY2UpIG9yCi0gICAgLy8gdG8gYW4g
YW5jZXN0b3Igb2YgdGhpcyBsYXllci4gVGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZSBkZXRlcm1p
bmVzIHRoZQotICAgIC8vIGNvb3JkaW5hdGUgc3lzdGVtIHRoZSBsYXllcidzIHRyYW5zZm9ybXMg
YXJlIHJlbGF0aXZlIHRvLgotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5k
ZXJTdXJmYWNlOworICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNoYXJlIHRoZSBzYW1lIGF0dHJp
YnV0ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25zCisgICAgLy8gYW5kIHRleHR1
cmUgY29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBzaGFkZXJzIHdpdGhvdXQgcmVi
aW5kaW5nIGF0dHJpYnV0ZQorICAgIC8vIGFycmF5cy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X3RleENvb3JkQXR0cmliTG9jYXRpb247CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc0Nv
bW1pdCgpOwpAQCAtMjMzLDQzICsyMjksMjIgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1f
cG9zaXRpb247CiAgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIENvbG9yIG1fYmFj
a2dyb3VuZENvbG9yOwotICAgIENvbG9yIG1fYm9yZGVyQ29sb3I7CiAgICAgZmxvYXQgbV9vcGFj
aXR5OwogICAgIGZsb2F0IG1felBvc2l0aW9uOwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwot
ICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7Ci0gICAgZmxvYXQgbV9kcmF3T3BhY2l0eTsKICAgICBi
b29sIG1fY2xlYXJzQ29udGV4dDsKLSAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAgICAgYm9vbCBt
X2hpZGRlbjsKICAgICBib29sIG1fbWFza3NUb0JvdW5kczsKICAgICBib29sIG1fb3BhcXVlOwog
ICAgIGJvb2wgbV9nZW9tZXRyeUZsaXBwZWQ7CiAgICAgYm9vbCBtX25lZWRzRGlzcGxheU9uQm91
bmRzQ2hhbmdlOwogCi0gICAgLy8gVGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVy
IG9mIHRoZSBsYXllci4gVGhpcyB2YWx1ZSBpcyB1c2VkCi0gICAgLy8gdG8gc29ydCBsYXllcnMg
ZnJvbSBiYWNrIHRvIGZyb250LgotICAgIGZsb2F0IG1fZHJhd0RlcHRoOwotCi0gICAgLy8gUG9p
bnRzIHRvIHRoZSBsYXllciByZW5kZXJlciB0aGF0IHVwZGF0ZXMgYW5kIGRyYXdzIHRoaXMgbGF5
ZXIuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwot
Ci0gICAgRmxvYXRSZWN0IG1fZnJhbWU7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFu
c2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07Ci0KLSAgICAvLyBUaGUgc2Np
c3NvciByZWN0YW5nbGUgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHRoaXMgbGF5ZXIgaXMgZHJh
d24uCi0gICAgLy8gSW5oZXJpdGVkIGJ5IHRoZSBwYXJlbnQgbGF5ZXIgYW5kIGZ1cnRoZXIgcmVz
dHJpY3RlZCBpZiB0aGlzIGxheWVyIG1hc2tzCi0gICAgLy8gdG8gYm91bmRzLgotICAgIEludFJl
Y3QgbV9zY2lzc29yUmVjdDsKIAotICAgIC8vIFJlbmRlciBzdXJmYWNlIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cwotICAgIC8vIHdpbGwg
cmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KLSAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVt
PiBtX3JlbmRlclN1cmZhY2U7Ci0KLSAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcgcmVjdCBj
b250YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzLgotICAgIEludFJlY3QgbV9k
cmF3YWJsZUNvbnRlbnRSZWN0OworICAgIEZsb2F0UmVjdCBtX2ZyYW1lOworICAgIC8vIEZvciBu
b3csIHRoZSBMYXllckNocm9taXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJbXBsLgorICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jY0xheWVySW1wbDsKIAogICAgIC8vIFJlcGxpY2EgbGF5
ZXIgdXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9yZXBsaWNhTGF5
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBlZmUzNTQ4MjBh
OTI4NTc4NThiNGE3MGQyMTA1ZDFmMjI4NzkyYjJhLi5hOTU3MDQzYzhlZjIyZDQzMzVlYmUxZDIz
Y2UzNzM4MWNkOGNjYmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
QEAgLTM0LDYgKzM0LDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5j
bHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdlb21l
dHJ5QmluZGluZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCkBAIC04Myw5ICs4
NCw5IEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtKQogCiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb21wYXJl
TGF5ZXJaKGNvbnN0IExheWVyQ2hyb21pdW0qIGEsIGNvbnN0IExheWVyQ2hyb21pdW0qIGIpCiti
b29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29tcGFyZUxheWVyWihjb25zdCBDQ0xheWVySW1w
bCogYSwgY29uc3QgQ0NMYXllckltcGwqIGIpCiB7Ci0gICAgcmV0dXJuIGEtPm1fZHJhd0RlcHRo
IDwgYi0+bV9kcmF3RGVwdGg7CisgICAgcmV0dXJuIGEtPmRyYXdEZXB0aCgpIDwgYi0+ZHJhd0Rl
cHRoKCk7CiB9CiAKIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
KQpAQCAtMTAxLDkgKzEwMiw3IEBAIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoCiB9CiAKIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQpCi0gICAgOiBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCgwKQot
ICAgICwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KDApCi0gICAgLCBtX3Jvb3RMYXllcigwKQor
ICAgIDogbV9yb290TGF5ZXIoMCkKICAgICAsIG1fc2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEs
IC0xKSkKICAgICAsIG1fY3VycmVudFNoYWRlcigwKQogICAgICwgbV9jdXJyZW50UmVuZGVyU3Vy
ZmFjZSgwKQpAQCAtMTczLDExICsxNzIsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCwgY28KICAg
ICB9CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9vdExh
eWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxlUGFpbnRJbnRlcmZhY2UmIHNj
cm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVy
KFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCkKIHsKICAgICBtX3Jvb3RMYXllclRpbGVyLT51cGRhdGUodGlsZVBhaW50LCB2aXNpYmxlUmVj
dCk7Ci0gICAgbV9yb290TGF5ZXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7Cit9CiAKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJTY3JvbGxiYXJzKFRpbGVQYWlu
dEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3sKICAgICBpZiAodmlzaWJsZVJlY3Qud2lkdGgo
KSA+IGNvbnRlbnRSZWN0LndpZHRoKCkpIHsKICAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9s
bGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QpOwog
ICAgICAgICBJbnRTaXplIHRpbGVTaXplID0gdmVydGljYWxTY3JvbGxiYXIuc2l6ZSgpLnNocnVu
a1RvKEludFNpemUobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSkpOwpAQCAtMTg3
LDggKzE4OCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3Um9v
dExheWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50CiAgICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyVGlsZXItPnNldFRpbGVTaXplKHRpbGVTaXplKTsKICAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0aW9uKHZlcnRpY2FsU2Nyb2xsYmFyLmxv
Y2F0aW9uKCkpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnVwZGF0ZShzY3Jv
bGxiYXJQYWludCwgdmlzaWJsZVJlY3QpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGls
ZXItPmRyYXcodmlzaWJsZVJlY3QpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhclRpbGVyLmNsZWFyKCk7CiAKICAgICBpZiAodmlzaWJsZVJlY3QuaGVpZ2h0
KCkgPiBjb250ZW50UmVjdC5oZWlnaHQoKSkgewogICAgICAgICBJbnRSZWN0IGhvcml6b250YWxT
Y3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyUmVjdCh2aXNpYmxlUmVjdCwgY29udGVudFJl
Y3QpOwpAQCAtMTk5LDQyICsyMDAsOTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUFuZERyYXdSb290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQKICAgICAg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7
CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5zZXRMYXllclBvc2l0aW9uKGhv
cml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0KTsKLSAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOwotICAgIH0KKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIuY2xlYXIoKTsKK30K
Kwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIoKQoreworICAgIG1f
cm9vdExheWVyVGlsZXItPmRyYXcobV92aXNpYmxlUmVjdCk7CisKKyAgICBpZiAobV92ZXJ0aWNh
bFNjcm9sbGJhclRpbGVyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPmRyYXco
bV92aXNpYmxlUmVjdCk7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXIpCisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLT5kcmF3KG1fdmlzaWJsZVJlY3QpOwog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJbnRSZWN0
JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24s
IFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCkKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQsIFRpbGVQYWludEludGVyZmFj
ZSYgc2Nyb2xsYmFyUGFpbnQpCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7
CiAKICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICB1cGRhdGVSb290TGF5ZXIodGlsZVBhaW50LCB2aXNpYmxlUmVj
dCk7CisgICAgLy8gUmVjaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgYSByb290IGxheWVyLiAgVGhp
cyBtYXkgYmVjb21lIG51bGwgaWYKKyAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYg
ZHVyaW5nIGEgcGFpbnQgb3BlcmF0aW9uLgorICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIHVwZGF0ZVJvb3RMYXllclNjcm9sbGJhcnMoc2Nyb2xsYmFyUGFpbnQs
IHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CisKKyAgICAvLyBGSVhNRTogSWRlYWxseSB3ZSdk
IG5vdCBtZXNzIHdpdGggdGhlIHJlbmRlciBzdXJmYWNlIGxpc3QgdW50aWwgZHJhdyB0aW1lLCBi
dXQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKCkgY3VycmVudGx5CisgICAgLy8gZGVwZW5kcyBvbiB0
aGUgUmVuZGVyU3VyZmFjZUNocm9taXVtIHN0YXRlIGJlaW5nIHVwIHRvIGRhdGUuCisgICAgVmVj
dG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB1cGRhdGVMYXll
cnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBzY3JvbGxQb3NpdGlvbiwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisKKyAgICBkcmF3TGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
fQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKGNvbnN0IEludFJl
Y3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAg
ICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdExheWVyLT5jY0xheWVySW1wbCgp
OworCisgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJv
b3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBBU1NFUlQocm9vdERyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpKTsKIAogICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2aXNp
YmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCiAgICAgLy8g
dG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhlIHBy
b2plY3Rpb24gbWF0cml4CiAgICAgLy8gYW5kIHZpZXdwb3J0LgotICAgIGludCB2aXNpYmxlUmVj
dFdpZHRoID0gdmlzaWJsZVJlY3Qud2lkdGgoKTsKLSAgICBpbnQgdmlzaWJsZVJlY3RIZWlnaHQg
PSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKIAotICAgIGlmICghbV9yb290TGF5ZXItPm1fcmVuZGVy
U3VyZmFjZSkKLSAgICAgICAgbV9yb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAg
ICBtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0gSW50UmVjdCgw
LCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCk7Ci0KLSAgICBpZiAodmlz
aWJsZVJlY3RXaWR0aCAhPSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCB8fCB2aXNpYmxlUmVjdEhl
aWdodCAhPSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpIHsKLSAgICAgICAgbV9yb290TGF5ZXJU
ZXh0dXJlV2lkdGggPSB2aXNpYmxlUmVjdFdpZHRoOwotICAgICAgICBtX3Jvb3RMYXllclRleHR1
cmVIZWlnaHQgPSB2aXNpYmxlUmVjdEhlaWdodDsKKyAgICByb290RHJhd0xheWVyLT5yZW5kZXJT
dXJmYWNlKCktPm1fY29udGVudFJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCB2aXNpYmxl
UmVjdC5zaXplKCkpOwogCisgICAgaWYgKHZpc2libGVSZWN0LnNpemUoKSAhPSBtX3Zpc2libGVS
ZWN0LnNpemUoKSkgewogICAgICAgICAvLyBSZXNldCB0aGUgY3VycmVudCByZW5kZXIgc3VyZmFj
ZSB0byBmb3JjZSBhbiB1cGRhdGUgb2YgdGhlIHZpZXdwb3J0IGFuZAogICAgICAgICAvLyBwcm9q
ZWN0aW9uIG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCiAgICAg
ICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAgIH0KKyAgICBtX3Zpc2libGVSZWN0
ID0gdmlzaWJsZVJlY3Q7CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247
CisgICAgLy8gU2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMgdG8gYXZvaWQgcmVuZGVyaW5nIG9u
IHRvcCBvZiB0aGVtLgorICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsK
KyAgICAvLyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zm
c2V0LgorICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1f
c2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICByb290RHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChy
b290U2Npc3NvclJlY3QpOworCisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3REcmF3
TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHJvb3REcmF3TGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsK
KyAgICAvLyBVbmZvcnR1bmF0ZWx5LCB1cGRhdGVMYXllcnNSZWN1cnNpdmUoKSBjdXJyZW50bHkg
Ym90aCB1cGRhdGVzIHRoZSBsYXllcnMgYW5kIHVwZGF0ZXMgdGhlIGRyYXcgc3RhdGUKKyAgICAv
LyAodHJhbnNmb3JtcywgZXRjKS4gSXQnZCBiZSBuaWNlciBpZiBvcGVyYXRpb25zIG9uIHRoZSBw
cmVzZW50YXRpb24gbGF5ZXJzIGhhcHBlbmVkIGxhdGVyLCBidXQgdGhlIGRyYXcKKyAgICAvLyB0
cmFuc2Zvcm1zIGFyZSBuZWVkZWQgYnkgbGFyZ2UgbGF5ZXJzIHRvIGRldGVybWluZSB2aXNpYmls
aXR5LiAgVGlsaW5nIHdpbGwgZml4IHRoaXMgYnkgZWxpbWluYXRpbmcgdGhlCisgICAgLy8gY29u
Y2VwdCBvZiBhIGxhcmdlIGNvbnRlbnQgbGF5ZXIuCisgICAgdXBkYXRlRHJhd1N0YXRlQW5kUmVu
ZGVyU3VyZmFjZXMobV9yb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CisKKyAg
ICBwYWludExheWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xh
eWVyID0gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBh
cmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhl
aWdodCkpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgbV92aXNpYmxlUmVjdC53aWR0aCgpLCBtX3Zpc2libGVSZWN0LmhlaWdodCgpKSk7CiAKICAg
ICAvLyBCaW5kIHRoZSBjb21tb24gdmVydGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBh
bGwgdGhlIGxheWVycy4KICAgICBtX3NoYXJlZEdlb21ldHJ5LT5wcmVwYXJlRm9yRHJhdygpOwpA
QCAtMjQ2LDExICszMDEsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIC8vIEJsZW5k
aW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFJvb3QgbGF5ZXIgYWxwaGEgY2hhbm5lbCBvbiBXaW5k
b3dzIGlzIGluY29ycmVjdCB3aGVuIFNraWEgdXNlcyBDbGVhclR5cGUuCiAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkp
OwogCi0gICAgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwotCi0gICAgQVNTRVJU
KG1fcm9vdExheWVyLT5tX3JlbmRlclN1cmZhY2UpOwotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZh
Y2UgPSBtX3Jvb3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpOwotCiAgICAgdXNlUmVuZGVy
U3VyZmFjZShtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKTsKIAogICAgIC8vIENsZWFyIHRvIGJsdWUg
dG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCB1bnJlbmRlcmVkIHJlZ2lvbnMuCkBAIC0yNjEsMzMg
KzMxMSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIC8vIHplcm8gYWxwaGEgdmFs
dWVzIG9uIHRleHQgZ2x5cGhzLiBUaGUgcm9vdCBsYXllciBpcyBhbHdheXMgb3BhcXVlLgogICAg
IG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKTsKIAotICAgIHVw
ZGF0ZUFuZERyYXdSb290TGF5ZXIodGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCwgdmlzaWJsZVJl
Y3QsIGNvbnRlbnRSZWN0KTsKKyAgICBkcmF3Um9vdExheWVyKCk7CiAKICAgICAvLyBSZS1lbmFi
bGUgY29sb3Igd3JpdGVzIHRvIGxheWVycywgd2hpY2ggbWF5IGJlIHBhcnRpYWxseSB0cmFuc3Bh
cmVudC4KICAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsK
IAotICAgIC8vIFJlY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gIFRoaXMg
bWF5IGJlY29tZSBudWxsIGlmCi0gICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1
cmluZyBhIHBhaW50IG9wZXJhdGlvbi4KLSAgICBpZiAoIW1fcm9vdExheWVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBTZXQgdGhlIHJvb3QgdmlzaWJsZS9jb250ZW50IHJlY3RzIC0tLSB1
c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVycyBjYWxscy4KLSAgICBtX3Jvb3RWaXNpYmxlUmVj
dCA9IHZpc2libGVSZWN0OwotICAgIG1fcm9vdENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Ci0K
LSAgICAvLyBTY2lzc29yIG91dCB0aGUgc2Nyb2xsYmFycyB0byBhdm9pZCByZW5kZXJpbmcgb24g
dG9wIG9mIHRoZW0uCi0gICAgSW50UmVjdCByb290U2Npc3NvclJlY3QoY29udGVudFJlY3QpOwot
ICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZz
ZXQuCi0gICAgcm9vdFNjaXNzb3JSZWN0Lm1vdmUoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9z
Y3JvbGxQb3NpdGlvbi55KCkpOwotICAgIG1fcm9vdExheWVyLT5tX3NjaXNzb3JSZWN0ID0gcm9v
dFNjaXNzb3JSZWN0OwotCi0gICAgVmVjdG9yPExheWVyQ2hyb21pdW0qPiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKG1fcm9vdExheWVy
LmdldCgpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAg
IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7Ci0gICAgdXBkYXRl
TGF5ZXJzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QpOwot
CiAgICAgLy8gVGhlIHNoYWRlciB1c2VkIHRvIHJlbmRlciBsYXllcnMgcmV0dXJucyBwcmUtbXVs
dGlwbGllZCBhbHBoYSBjb2xvcnMKICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJsZW5k
aW5nIG1vZGUgYXBwcm9wcmlhdGVseS4KICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKQEAgLTI5OCwyNiArMzI2LDI2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8gYmFjayB0byBmcm9udCB0byBndWFy
YW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbiB0aGUKICAg
ICAvLyBjb3JyZWN0IG9yZGVyLgogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1
cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJ
bmRleCkgewotICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF07Ci0gICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZSk7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5k
ZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF07Cisg
ICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAKICAg
ICAgICAgLy8gUmVuZGVyIHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8gd2lk
dGggb3IgaGVpZ2h0CiAgICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0gYW5kIHNob3VsZCBiZSBza2lwcGVkLgotICAgICAgICBpZiAoIXJlbmRlclN1cmZh
Y2VMYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5zaXplKCkpCisgICAgICAgIGlm
ICghcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fbGF5ZXJMaXN0LnNpemUo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNl
KHJlbmRlclN1cmZhY2VMYXllci0+bV9yZW5kZXJTdXJmYWNlLmdldCgpKSkgewotICAgICAgICAg
ICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSBtX3Jvb3RMYXllcikgeworICAgICAgICBpZiAo
dXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKSkpIHsK
KyAgICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gcm9vdERyYXdMYXllcikgewog
ICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKICAgICAg
ICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSk7CiAgICAgICAgICAgICAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1
bSo+JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS0+bV9s
YXllckxpc3Q7CisgICAgICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0ID0g
cmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fbGF5ZXJMaXN0OwogICAgICAg
ICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJ
bmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLCBy
ZW5kZXJTdXJmYWNlTGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XSwgcmVuZGVyU3VyZmFjZUxheWVyLT5y
ZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNTMsOCArMzgxLDcgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVy
Q2hyb21pdW0+IGxheWVyKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVi
dWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFT
U0VSVChyZWN0Lm1heFgoKSA8PSByb290TGF5ZXJUZXh0dXJlU2l6ZSgpLndpZHRoKCkKLSAgICAg
ICAgICAgJiYgcmVjdC5tYXhZKCkgPD0gcm9vdExheWVyVGV4dHVyZVNpemUoKS5oZWlnaHQoKSk7
CisgICAgQVNTRVJUKHJlY3QubWF4WCgpIDw9IHZpc2libGVSZWN0U2l6ZSgpLndpZHRoKCkgJiYg
cmVjdC5tYXhZKCkgPD0gdmlzaWJsZVJlY3RTaXplKCkuaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFw
aXhlbHMpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNyw5ICs0MzQsMTAgQEAgYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25z
dCBUcmFuc2Zvcm0KIAogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRp
bmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0
cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMu
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVy
Q2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8
TGF5ZXJDaHJvbWl1bSo+JiBsYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlRHJhd1N0YXRlQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1w
bCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJM
aXN0KQogewogICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOworICAgIENDTGF5ZXJJ
bXBsKiBkcmF3TGF5ZXIgPSBsYXllci0+Y2NMYXllckltcGwoKTsKIAogICAgIC8vIENvbXB1dGUg
dGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhp
cyBsYXllciBhbmQKICAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBpbXBvcnRhbnQgdG8g
cmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgpAQCAtNDYyLDk1ICs0OTAsOTggQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNo
cm9taXVtKiBsYXllciwgY29uc3QgVHIKICAgICAvLyBvZiB0aGVpciBwYXJlbnQuCiAgICAgYm9v
bCB1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgPSBsYXllci0+bWFza3NUb0JvdW5kcygpICYmICFpc1Nj
YWxlT3JUcmFuc2xhdGlvbihjb21iaW5lZFRyYW5zZm9ybSk7CiAgICAgYm9vbCB1c2VTdXJmYWNl
Rm9yT3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCkgIT0gMSAmJiAhbGF5ZXItPnByZXNlcnZlczNE
KCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGxheWVyLT5tYXNrTGF5ZXIoKTsK
KyAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tEcmF3TGF5ZXIoKTsK
ICAgICBib29sIHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uID0gbGF5ZXItPnJlcGxpY2FMYXllcigp
OwogICAgIGlmICgoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNlRm9yT3BhY2l0
eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd0NvbnRlbnQoKSkKICAgICAgICAgfHwgdXNlU3Vy
ZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24pIHsKLSAgICAgICAgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPm1fcmVuZGVyU3VyZmFj
ZS5nZXQoKTsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0g
ZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZSkK
LSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOwogCiAgICAgICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRo
ZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIuCi0gICAgICAgIGxheWVyLT5tX2RyYXdU
cmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwotICAgICAgICBsYXllci0+bV9kcmF3
VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAuNSAqIGJvdW5kcy53aWR0aCgpLCAwLjUgKiBib3VuZHMu
aGVpZ2h0KCksIDApOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3Jt
OworICAgICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAuNSAqIGJvdW5kcy53aWR0aCgp
LCAwLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOworICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdU
cmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CiAKICAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3Qg
PSBJbnRSZWN0KDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwogCiAgICAg
ICAgIC8vIExheWVyJ3Mgb3BhY2l0eSB3aWxsIGJlIGFwcGxpZWQgd2hlbiBkcmF3aW5nIHRoZSBy
ZW5kZXIgc3VyZmFjZS4KICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3BhY2l0eSA9IGxh
eWVyLT5vcGFjaXR5KCk7Ci0gICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpLT5wcmVzZXJ2
ZXMzRCgpKQotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3BhY2l0eSAqPSBsYXll
ci0+c3VwZXJsYXllcigpLT5kcmF3T3BhY2l0eSgpOwotICAgICAgICBsYXllci0+bV9kcmF3T3Bh
Y2l0eSA9IDE7CisgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpICYmIGxheWVyLT5zdXBl
cmxheWVyKCktPnByZXNlcnZlczNEKCkpCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2Ry
YXdPcGFjaXR5ICo9IGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5kcmF3T3BhY2l0eSgpOworICAg
ICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gY29tYmluZWRUcmFuc2Zvcm07CiAgICAg
ICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgo
KSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CiAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1f
b3JpZ2luVHJhbnNmb3JtID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm07CiAgICAgICAgIGlmIChsYXll
ck9yaWdpblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSAmJiBsYXllci0+c3VwZXJsYXllcigpKSB7
CiAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUb0xheWVyID0gbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpOwotCi0gICAgICAgICAgICBsYXllci0+bV9zY2lzc29y
UmVjdCA9IHBhcmVudFRvTGF5ZXIubWFwUmVjdChsYXllci0+c3VwZXJsYXllcigpLT5tX3NjaXNz
b3JSZWN0KTsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdChw
YXJlbnRUb0xheWVyLm1hcFJlY3QoZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnNjaXNzb3JSZWN0
KCkpKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbGF5ZXItPm1fc2Npc3NvclJlY3Qg
PSBJbnRSZWN0KCk7CisgICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KEludFJl
Y3QoKSk7CiAKICAgICAgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIHNjaXNzb3IgcmVjdCBpcyB0
aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMgdG8KICAgICAgICAgLy8gYmUgYXBwbGllZCBiZWZv
cmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2Ugb250byBpdHMgY29udGFpbmluZwogICAgICAg
ICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBzdXBlcmxheWVy
J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPm1fc2Npc3NvclJl
Y3QgPSBsYXllci0+c3VwZXJsYXllcigpLT5tX3NjaXNzb3JSZWN0OworICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX3NjaXNzb3JSZWN0ID0gZHJhd0xheWVyLT5zdXBlcmxheWVyKCkgPyBkcmF3TGF5
ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3NvclJlY3QoKSA6IGRyYXdMYXllci0+c2Npc3NvclJlY3Qo
KTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOwogCi0gICAg
ICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2Ut
Pm1fbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpOwotICAgICAgICAgICAgbGF5ZXItPm1h
c2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgICAgICAgICAgbGF5ZXItPm1h
c2tMYXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlOworICAgICAg
ICBpZiAobGF5ZXItPm1hc2tEcmF3TGF5ZXIoKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+bV9tYXNrTGF5ZXIgPSBsYXllci0+bWFza0RyYXdMYXllcigpOworICAgICAgICAgICAgbGF5
ZXItPm1hc2tEcmF3TGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKKyAgICAgICAgICAg
IGxheWVyLT5tYXNrRHJhd0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3Vy
ZmFjZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNr
TGF5ZXIgPSAwOwogCi0gICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICAgICAg
ICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPm1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSA9IHJlbmRlclN1cmZhY2U7CisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkg
JiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrRHJhd0xheWVyKCkpIHsKKyAgICAgICAgICAg
IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0RyYXdMYXllcigpLT5zZXRMYXllclJlbmRlcmVy
KHRoaXMpOworICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrRHJhd0xheWVy
KCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAgICAgICAgIH0KIAot
ICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChsYXllcik7CisgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGRyYXdMYXllcik7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gRFQgPSBNW3BdICogTFQKLSAgICAgICAgbGF5ZXItPm1fZHJhd1RyYW5zZm9ybSA9
IGNvbWJpbmVkVHJhbnNmb3JtOwotICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QobGF5ZXItPm1fZHJhd1RyYW5zZm9ybS5tYXBSZWN0KGxheWVyUmVjdCkpOwor
ICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oY29tYmluZWRUcmFuc2Zvcm0pOwor
ICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZHJhd0xheWVy
LT5kcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJlY3QpKTsKIAotICAgICAgICBsYXllci0+
bV9kcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7CisgICAgICAgIGRyYXdMYXllci0+c2V0
RHJhd09wYWNpdHkobGF5ZXItPm9wYWNpdHkoKSk7CiAKICAgICAgICAgaWYgKGxheWVyLT5zdXBl
cmxheWVyKCkpIHsKICAgICAgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpLT5wcmVzZXJ2
ZXMzRCgpKQotICAgICAgICAgICAgICAgbGF5ZXItPm1fZHJhd09wYWNpdHkgKj0gbGF5ZXItPnN1
cGVybGF5ZXIoKS0+bV9kcmF3T3BhY2l0eTsKKyAgICAgICAgICAgICAgIGRyYXdMYXllci0+c2V0
RHJhd09wYWNpdHkoZHJhd0xheWVyLT5kcmF3T3BhY2l0eSgpICogZHJhd0xheWVyLT5zdXBlcmxh
eWVyKCktPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0
aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIgc3VwZXJsYXllci4KLSAgICAgICAgICAgIGxheWVy
LT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+bV9zY2lzc29yUmVjdDsKKyAg
ICAgICAgICAgIGRyYXdMYXllci0+c2V0U2Npc3NvclJlY3QoZHJhd0xheWVyLT5zdXBlcmxheWVy
KCktPnNjaXNzb3JSZWN0KCkpOwogCi0gICAgICAgICAgICBsYXllci0+bV90YXJnZXRSZW5kZXJT
dXJmYWNlID0gbGF5ZXItPnN1cGVybGF5ZXIoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlOworICAg
ICAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGRyYXdMYXllci0+c3Vw
ZXJsYXllcigpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGxheWVyICE9IG1fcm9vdExheWVyKQotICAgICAgICAgICAgbGF5ZXItPm1fcmVuZGVyU3Vy
ZmFjZSA9IDA7CisgICAgICAgICAgICBkcmF3TGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwog
Ci0gICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKQotICAgICAgICAgICAgbGF5ZXIt
Pm1fc2Npc3NvclJlY3QuaW50ZXJzZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKKyAgICAgICAg
aWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkpIHsKKyAgICAgICAgICAgIEludFJlY3Qgc2Npc3Nv
ciA9IGRyYXdMYXllci0+c2Npc3NvclJlY3QoKTsKKyAgICAgICAgICAgIHNjaXNzb3IuaW50ZXJz
ZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0U2Np
c3NvclJlY3Qoc2Npc3Nvcik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobGF5ZXItPm1f
cmVuZGVyU3VyZmFjZSkKLSAgICAgICAgbGF5ZXItPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IGxh
eWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCk7CisgICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpKQorICAgICAgICBkcmF3TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobGF5ZXIt
PnN1cGVybGF5ZXIoKSk7Ci0gICAgICAgIGxheWVyLT5tX3RhcmdldFJlbmRlclN1cmZhY2UgPSBs
YXllci0+c3VwZXJsYXllcigpLT5tX3RhcmdldFJlbmRlclN1cmZhY2U7CisgICAgICAgIGRyYXdM
YXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICB9CiAKLSAgICAvLyBtX2RyYXdhYmxlQ29udGVudFJl
Y3QgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCisgICAg
Ly8gZHJhd2FibGVDb250ZW50UmVjdCgpIGlzIGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZQogICAgIC8vIFJlbmRlclN1cmZhY2UgdGhlIGxheWVyIGRyYXdzIGlu
dG8uCiAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgbGF5ZXItPm1fZHJh
d2FibGVDb250ZW50UmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OworICAgICAgICBkcmF3TGF5
ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOwogICAgIGVs
c2UKLSAgICAgICAgbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVjdCA9IEludFJlY3QoKTsKKyAg
ICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoKSk7CiAKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGxheWVyLT5tX2RyYXdUcmFu
c2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBkcmF3TGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKIAogICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhlIGxheWVy
IGRvZXNuJ3QgcHJlc2VydmUgM0QuCiAgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkgewpA
QCAtNTcxLDM3ICs2MDIsNDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHIKICAgICAvLyBNW3Nd
ID0gTSAqIFRyWy1jZW50ZXJdCiAgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5k
cy53aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKIAotICAgIFZlY3Rv
cjxMYXllckNocm9taXVtKj4mIGRlc2NlbmRhbnRzID0gKGxheWVyLT5tX3JlbmRlclN1cmZhY2Ug
PyBsYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCA6IGxheWVyTGlzdCk7Ci0gICAg
ZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiYgZGVz
Y2VuZGFudHMgPSAoZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBkcmF3TGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+bV9sYXllckxpc3QgOiBsYXllckxpc3QpOworICAgIGRlc2NlbmRhbnRzLmFw
cGVuZChkcmF3TGF5ZXIpOwogICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0gZGVzY2VuZGFu
dHMuc2l6ZSgpIC0gMTsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIExheWVyQ2hyb21pdW0q
IHN1YmxheWVyID0gc3VibGF5ZXJzW2ldLmdldCgpOwotICAgICAgICB1cGRhdGVMYXllcnNSZWN1
cnNpdmUoc3VibGF5ZXIsIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
ZXNjZW5kYW50cyk7Ci0KLSAgICAgICAgaWYgKHN1YmxheWVyLT5tX3JlbmRlclN1cmZhY2UpIHsK
LSAgICAgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VibGF5ZXJSZW5kZXJTdXJmYWNl
ID0gc3VibGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5nZXQoKTsKLSAgICAgICAgICAgIGxheWVyLT5t
X2RyYXdhYmxlQ29udGVudFJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdChzdWJsYXllclJlbmRl
clN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSkpOworICAgICAgICBDQ0xheWVySW1wbCog
c3VibGF5ZXIgPSBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJbXBsKCk7CisgICAgICAgIHVwZGF0ZURy
YXdTdGF0ZUFuZFJlbmRlclN1cmZhY2VzKHN1YmxheWVyc1tpXS5nZXQoKSwgc3VibGF5ZXJNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKKworICAgICAgICBpZiAo
c3VibGF5ZXItPnJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiBzdWJsYXllclJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+cmVuZGVyU3VyZmFjZSgp
OworICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5k
cmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVu
aXRlKGVuY2xvc2luZ0ludFJlY3Qoc3VibGF5ZXJSZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRl
bnRSZWN0KCkpKTsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVj
dChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChz
dWJsYXllcik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbGF5ZXItPm1fZHJhd2FibGVD
b250ZW50UmVjdC51bml0ZShzdWJsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGRy
YXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgZHJhd2FibGVDb250
ZW50UmVjdC51bml0ZShzdWJsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKyAgICAgICAg
ICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0
KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpIHx8
IHVzZVN1cmZhY2VGb3JNYXNraW5nKQotICAgICAgICBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRS
ZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgaWYgKGxheWVyLT5tYXNr
c1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgSW50UmVjdCBk
cmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Cisg
ICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0
KTsKKyAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29u
dGVudFJlY3QpOworICAgIH0KIAotICAgIGlmIChsYXllci0+bV9yZW5kZXJTdXJmYWNlICYmIGxh
eWVyICE9IG1fcm9vdExheWVyKSB7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZSA9IGxheWVyLT5tX3JlbmRlclN1cmZhY2UuZ2V0KCk7Ci0gICAgICAgIHJlbmRl
clN1cmZhY2UtPm1fY29udGVudFJlY3QgPSBsYXllci0+bV9kcmF3YWJsZUNvbnRlbnRSZWN0Owor
ICAgIGlmIChkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jvb3RMYXll
cikgeworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBkcmF3
TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50
UmVjdCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICBGbG9hdFBv
aW50IHN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRlcigpOwog
CiAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRp
b24gdGhhdCdzIHZpc2libGUuCiAgICAgICAgIEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0Ns
aXBwaW5nOworCiAgICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3Rl
ZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xpcHBlZC4KICAg
ICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1
cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5tX3NjaXNzb3JSZWN0KTsKKyAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGRyYXdMYXll
ci0+c2Npc3NvclJlY3QoKSk7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGNsaXBwZWRTdXJmYWNl
Q2VudGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKICAgICAgICAgICAg
IGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1cmZh
Y2VDZW50ZXI7CiAgICAgICAgIH0KQEAgLTYxNiw3ICs2NTYsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBUcgogCiAgICAgICAgIC8vIFNpbmNlIHRoZSBsYXllciBzdGFydHMgYSBuZXcgcmVuZGVy
IHN1cmZhY2Ugd2UgbmVlZCB0byBhZGp1c3QgaXRzCiAgICAgICAgIC8vIHNjaXNzb3IgcmVjdCB0
byBiZSBleHByZXNzZWQgaW4gdGhlIG5ldyBzdXJmYWNlJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0g
ICAgICAgIGxheWVyLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPm1fZHJhd2FibGVDb250ZW50UmVj
dDsKKyAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPmRyYXdhYmxl
Q29udGVudFJlY3QoKSk7CiAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRy
YW5zZm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KICAgICAgICAg
cmVuZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5U
cmFuc2Zvcm07CkBAIC02MzQsMTQgKzY3NCwxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcgog
CiAgICAgLy8gQ29tcHV0ZSB0aGUgZGVwdGggdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0aGUgbGF5
ZXIgd2hpY2ggd2lsbCBiZSB1c2VkIHdoZW4KICAgICAvLyBzb3J0aW5nIHRoZSBsYXllcnMgZm9y
IHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxh
eWVyRHJhd01hdHJpeCA9IGxheWVyLT5tX3JlbmRlclN1cmZhY2UgPyBsYXllci0+bV9yZW5kZXJT
dXJmYWNlLT5tX2RyYXdUcmFuc2Zvcm0gOiBsYXllci0+bV9kcmF3VHJhbnNmb3JtOworICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllckRyYXdNYXRyaXggPSBkcmF3TGF5ZXItPnJl
bmRlclN1cmZhY2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2RyYXdUcmFuc2Zv
cm0gOiBkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKICAgICBpZiAobGF5ZXItPnN1cGVybGF5
ZXIoKSkgewogICAgICAgICBpZiAoIWxheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkp
Ci0gICAgICAgICAgICBsYXllci0+bV9kcmF3RGVwdGggPSBsYXllci0+c3VwZXJsYXllcigpLT5t
X2RyYXdEZXB0aDsKKyAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKGRyYXdMYXll
ci0+c3VwZXJsYXllcigpLT5kcmF3RGVwdGgoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGxheWVyLT5tX2RyYXdEZXB0aCA9IGxheWVyRHJhd01hdHJpeC5tNDMoKTsKKyAgICAgICAgICAg
IGRyYXdMYXllci0+c2V0RHJhd0RlcHRoKGxheWVyRHJhd01hdHJpeC5tNDMoKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGxheWVyLT5tX2RyYXdEZXB0aCA9IDA7CisgICAgICAgIGRyYXdMYXllci0+
c2V0RHJhd0RlcHRoKDApOwogCiAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29ydCBhbGwg
dGhlIGRlc2NlbmRhbnRzIGJ5IHRoZSBaIGNvb3JkaW5hdGUgb2YgdGhlaXIKICAgICAvLyBjZW50
ZXIuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHN1cGVy
bGF5ZXIgdGhlbgpAQCAtNjUwLDYgKzY5MCwyMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcgog
ICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCks
IGRlc2NlbmRhbnRzLmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsKIH0KIAordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnBhaW50TGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQor
eworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0g
bGF5ZXItPmdldFN1YmxheWVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5
ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBwYWludExheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNb
aV0uZ2V0KCkpOworCisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5
ZXItPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgIGlmIChsYXllci0+bWFza0xheWVyKCkg
JiYgbGF5ZXItPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXItPm1h
c2tMYXllcigpLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICBpZiAobGF5ZXItPnJlcGxp
Y2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCisgICAg
ICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CisgICAg
aWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tM
YXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPmRyYXdzQ29udGVu
dCgpKQorICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVD
b250ZW50c0lmRGlydHkoKTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENv
bXBvc2l0ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNjcmVlbikKIHsKICAgICBpZiAobV9j
b21wb3NpdGVPZmZzY3JlZW4gPT0gY29tcG9zaXRlT2Zmc2NyZWVuKQpAQCAtNjU4LDcgKzcxNCwx
MiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJv
b2wgY29tcG9zaXRlT2Zmc2NyZWVuKQogICAgIG1fY29tcG9zaXRlT2Zmc2NyZWVuID0gY29tcG9z
aXRlT2Zmc2NyZWVuOwogCiAgICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RM
YXllcikKLSAgICAgICAgbV9yb290TGF5ZXItPm1fcmVuZGVyU3VyZmFjZS5jbGVhcigpOworICAg
ICAgICBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7Cit9
CisKK0xheWVyVGV4dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXll
clRleHR1cmUoKQoreworICAgIHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVlbiA/IG1fcm9vdExh
eWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPm1fY29udGVudHNUZXh0dXJlLmdl
dCgpIDogMDsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5U
ZXh0dXJlVG9EaXNwbGF5KCkKQEAgLTcwOSwzNiArNzcwLDMyIEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVy
U3VyZmFjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSog
dGFyZ2V0U3VyZmFjZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NM
YXllckltcGwqIGxheWVyLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFN1cmZhY2UpCiB7
Ci0gICAgaWYgKGxheWVyLT5tX3JlbmRlclN1cmZhY2UgJiYgbGF5ZXItPm1fcmVuZGVyU3VyZmFj
ZSAhPSB0YXJnZXRTdXJmYWNlKSB7Ci0gICAgICAgIGxheWVyLT5tX3JlbmRlclN1cmZhY2UtPmRy
YXcoKTsKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKKyAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+ZHJhdygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGxheWVyLT5tX2Jv
dW5kcy5pc0VtcHR5KCkpCisgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPm1fc2Npc3NvclJlY3Qp
OworICAgIHNldFNjaXNzb3JUb1JlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwogCiAgICAgLy8g
Q2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMgb2YgdGhl
IHBhZ2UuCiAgICAgSW50UmVjdCBsYXllclJlY3QgPSBsYXllci0+Z2V0RHJhd1JlY3QoKTsKLSAg
ICBib29sIGlzTGF5ZXJWaXNpYmxlID0gbGF5ZXItPm1fc2Npc3NvclJlY3QuaW50ZXJzZWN0cyhs
YXllclJlY3QpOworICAgIGJvb2wgaXNMYXllclZpc2libGUgPSBsYXllci0+c2Npc3NvclJlY3Qo
KS5pbnRlcnNlY3RzKGxheWVyUmVjdCk7CiAgICAgaWYgKCFpc0xheWVyVmlzaWJsZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhl
IGNvbW11bGF0aXZlIHJlbmRlciBzdXJmYWNlIHRyYW5zZm9ybXMgYWxsIHRoZSB3YXkgZnJvbQog
ICAgIC8vICAgICAgICB0aGUgZGVmYXVsdCByZW5kZXIgc3VyZmFjZSBpbiBvcmRlciB0byBkZXRl
cm1pbmUgdmlzaWJpbGl0eS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZERyYXdN
YXRyaXggPSAobGF5ZXItPm1fcmVuZGVyU3VyZmFjZSA/IGxheWVyLT5tX3JlbmRlclN1cmZhY2Ut
PmRyYXdUcmFuc2Zvcm0oKS5tdWx0aXBseShsYXllci0+bV9kcmF3VHJhbnNmb3JtKSA6IGxheWVy
LT5tX2RyYXdUcmFuc2Zvcm0pOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkRHJh
d01hdHJpeCA9IChsYXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+ZHJhd1RyYW5zZm9ybSgpLm11bHRpcGx5KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpIDogbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CiAgICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSAmJiBj
b21iaW5lZERyYXdNYXRyaXgubTMzKCkgPCAwKQogICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSBsYXllciBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50
c0lmRGlydHkoKTsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICBsYXllci0+ZHJhdygpOwotICAg
IH0KIAogICAgIC8vIERyYXcgdGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCiAgICAg
bGF5ZXItPmRyYXdEZWJ1Z0JvcmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAppbmRleCAxYzIwMzkzYTc2MTZjOWM2YzFjM2QwNDU1MzA0OWEwYTQ2NjM2NGIxLi44OGY5ZjFm
YTFjOWJhOTBiZjIyMWY0MDMzMzEwYTljZTg1YWFiYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaApAQCAtNzIsOSArNzIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlk
YXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKICAgICAvLyB1cGRh
dGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgotICAg
IHZvaWQgZHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwgVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQsCi0gICAgICAgICAgICAg
ICAgICAgIFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQpOworICAgIHZvaWQgdXBk
YXRlQW5kRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiwgVGlsZVBhaW50SW50ZXJm
YWNlJiBzY3JvbGxiYXJQYWludCk7CiAKICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZp
bmlzaAogICAgIHZvaWQgZmluaXNoKCk7CkBAIC04Miw2ICs4MSw4IEBAIHB1YmxpYzoKICAgICAv
LyBwdXRzIGJhY2tidWZmZXIgb25zY3JlZW4KICAgICB2b2lkIHByZXNlbnQoKTsKIAorICAgIElu
dFNpemUgdmlzaWJsZVJlY3RTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlUmVjdC5zaXpl
KCk7IH0KKwogICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bGF5ZXIpOwogICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExh
eWVyLmdldCgpOyB9CiAgICAgdm9pZCB0cmFuc2ZlclJvb3RMYXllcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qIG90aGVyKSB7IG90aGVyLT5tX3Jvb3RMYXllciA9IG1fcm9vdExheWVyLnJlbGVhc2Uo
KTsgfQpAQCAtOTAsNyArOTEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENvbXBvc2l0ZU9m
ZnNjcmVlbihib29sKTsKICAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBjb25zdCB7
IHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsgfQotICAgIExheWVyVGV4dHVyZSogZ2V0T2Zm
c2NyZWVuTGF5ZXJUZXh0dXJlKCkgeyByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gPyBtX3Jv
b3RMYXllci0+bV9yZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRzVGV4dHVyZS5nZXQoKSA6IDA7IH0K
KyAgICBMYXllclRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpOwogICAgIHZvaWQg
Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIAogICAgIHZvaWQgc2V0Um9vdExheWVy
Q2FudmFzU2l6ZShjb25zdCBJbnRTaXplJik7CkBAIC0xMjEsOCArMTIyLDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYpOwogCi0gICAg
SW50U2l6ZSByb290TGF5ZXJUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9y
b290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCk7IH0KLSAgICBJ
bnRSZWN0IHJvb3RMYXllckNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yb290Q29udGVu
dFJlY3Q7IH0KICAgICB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdCk7CiAKICAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIo
KSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyLmdldCgpOyB9CkBAIC0xMzEsMTEgKzEz
MCwxOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dDNEKTsK
LSAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPExheWVyQ2hyb21p
dW0qPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPExheWVyQ2hyb21pdW0qPiYgbGF5
ZXJMaXN0KTsKIAotICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21pdW0qLCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVycyhjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIHVwZGF0ZVJvb3RMYXllcihUaWxlUGFp
bnRJbnRlcmZhY2UmLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CisgICAgdm9pZCB1cGRh
dGVSb290TGF5ZXJTY3JvbGxiYXJzKFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQs
IGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7
CisgICAgdm9pZCB1cGRhdGVEcmF3U3RhdGVBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVt
KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBs
YXllckxpc3QpOworICAgIHZvaWQgcGFpbnRMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSop
OworCisgICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSopOwogCi0gICAgdm9pZCB1cGRhdGVBbmREcmF3Um9vdExheWVy
KFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9s
bGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QpOworICAgIHZvaWQgZHJhd1Jvb3RMYXllcigpOwogCiAgICAgYm9vbCBpc0xheWVy
VmlzaWJsZShMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CiAKQEAgLTE0NSw3ICsxNTEsNyBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIHN0YXRpYyBib29sIGNvbXBh
cmVMYXllclooY29uc3QgTGF5ZXJDaHJvbWl1bSosIGNvbnN0IExheWVyQ2hyb21pdW0qKTsKKyAg
ICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IENDTGF5ZXJJbXBsKiwgY29uc3QgQ0NM
YXllckltcGwqKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKICAgICB2
b2lkIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CkBAIC0xNTMsOCArMTU5LDcgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICBzdGF0aWMgSW50
UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCi0gICAgaW50IG1fcm9vdExheWVyVGV4dHVy
ZVdpZHRoOwotICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CisgICAgSW50UmVjdCBt
X3Zpc2libGVSZWN0OwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0
cml4OwogCkBAIC0xODQsOSArMTg5LDYgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9yb290
TGF5ZXJDYW52YXNTaXplOwogCi0gICAgSW50UmVjdCBtX3Jvb3RWaXNpYmxlUmVjdDsKLSAgICBJ
bnRSZWN0IG1fcm9vdENvbnRlbnRSZWN0OwotCiAgICAgLy8gTWF4aW11bSB0ZXh0dXJlIGRpbWVu
c2lvbnMgc3VwcG9ydGVkLgogICAgIGludCBtX21heFRleHR1cmVTaXplOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDgwOWViMzc2NDQ5ODI2NDRhNGFiODhmMTZhZmFk
MDUzMTk2YzIzYjkuLjVkNTk1YWQxM2QyOWU0MWIyYzAyODgwMzdiZGJlODBlZTNmZmY3ZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CkBAIC03Miw4ICs3Myw4IEBA
IHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgCiAgICAgbGF5ZXJSZW5kZXJl
cigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9u
KCksIDApKTsKLSAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+
cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCi0gICAgICAgICAgICAgICAgICAg
ICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAg
ICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1h
dHJpeCgpLCBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAg
ICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgY2NMYXllckltcGwoKS0+
ZHJhd09wYWNpdHkoKSwKICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLm1hdHJpeExvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmNwcAppbmRleCAwYWQ2YTgyNGMwZmY5ZjlmOGMxNzI0YzY1NDlhYWZlY2QyZGM2
MTExLi41MjdjYjU4OGI0OWUyNzZhNTRmNWJiZjk4YzM5MDE0MDQwYzczYmJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5j
bHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0o
TGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIpCitSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRl
clN1cmZhY2VDaHJvbWl1bShDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIpCiAgICAgOiBtX293bmlu
Z0xheWVyKG93bmluZ0xheWVyKQogICAgICwgbV9tYXNrTGF5ZXIoMCkKICAgICAsIG1fc2tpcHNE
cmF3KGZhbHNlKQpAQCAtOTQsNyArOTUsNyBAQCBib29sIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3U3VyZmFjZShMYXllckNocm9taXVtKiBtYXNrTGF5ZXIs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKQordm9pZCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKQogewogICAgIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M0QgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKIApAQCAtMTA1
LDcgKzEwNiw2IEBAIHZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3U3VyZmFjZShMYXll
ckNocm9taXVtKiBtYXNrTGF5ZXIsIGNvbnN0IFRyYW5zZm9yCiAgICAgQVNTRVJUKHByb2dyYW0g
JiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CiAgICAgYm9vbCB1c2VNYXNrID0gZmFsc2U7CiAg
ICAgaWYgKG1hc2tMYXllciAmJiBtYXNrTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAg
IG1hc2tMYXllci0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CiAgICAgICAgIGlmICghbWFza0xh
eWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnRleHQzRC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgICAgICAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlciht
YXNrUHJvZ3JhbS0+cHJvZ3JhbSgpKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIFJlbmRlclN1
cmZhY2VDaHJvbWl1bTo6ZHJhdygpCiAgICAgLy8gYm90aCB0aGUgbGF5ZXIgYW5kIGl0cyByZWZs
ZWN0aW9uKS4gVGhlIHNvbHV0aW9uIGlzIHRvIGludHJvZHVjZSB5ZXQgYW5vdGhlciBSZW5kZXJT
dXJmYWNlCiAgICAgLy8gdG8gZHJhdyB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uIGluLiBG
b3Igbm93IHdlIG9ubHkgYXBwbHkgYSBzZXBhcmF0ZSByZWZsZWN0aW9uCiAgICAgLy8gbWFzayBp
ZiB0aGUgY29udGVudHMgZG9uJ3QgaGF2ZSBhIG1hc2sgb2YgdGhlaXIgb3duLgotICAgIExheWVy
Q2hyb21pdW0qIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX21hc2tMYXllcjsKKyAgICBDQ0xheWVySW1w
bCogcmVwbGljYU1hc2tMYXllciA9IG1fbWFza0xheWVyOwogICAgIGlmICghbV9tYXNrTGF5ZXIg
JiYgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCiAgICAgICAgIHJlcGxpY2FNYXNrTGF5
ZXIgPSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggM2U4OWQ3OTU4NmYxMTRkZDcxNzNjMmYz
YTM0MjRmMGQ5NjdlNjEwZi4uMTcxYWU0OGE1YTU4NzRmZGUzZmZiZTA4ZjY3MDAwM2Y2MTQxMWRi
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTM5LDcgKzM5LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBMYXllckNocm9taXVtOworY2xhc3MgQ0NM
YXllckltcGw7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBMYXllclRleHR1
cmU7CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOwogICAgIGZyaWVu
ZCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21pdW0qKTsKKyAgICBleHBsaWNpdCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0oQ0NMYXllckltcGwqKTsKICAgICB+UmVuZGVyU3VyZmFjZUNocm9taXVt
KCk7CiAKICAgICBib29sIHByZXBhcmVDb250ZW50c1RleHR1cmUoKTsKQEAgLTY3LDEwICs2Nywx
MCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyKCk7Ci0gICAgdm9pZCBkcmF3U3VyZmFjZShMYXllckNocm9taXVtKiBtYXNrTGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKTsKKyAgICB2b2lk
IGRyYXdTdXJmYWNlKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBkcmF3VHJhbnNmb3JtKTsKIAotICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5
ZXI7Ci0gICAgTGF5ZXJDaHJvbWl1bSogbV9tYXNrTGF5ZXI7CisgICAgQ0NMYXllckltcGwqIG1f
b3duaW5nTGF5ZXI7CisgICAgQ0NMYXllckltcGwqIG1fbWFza0xheWVyOwogCiAgICAgSW50UmVj
dCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CkBAIC04MCw3ICs4MCw3IEBA
IHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9y
bTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKICAgICBJbnRS
ZWN0IG1fc2Npc3NvclJlY3Q7Ci0gICAgVmVjdG9yPExheWVyQ2hyb21pdW0qPiBtX2xheWVyTGlz
dDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBtX2xheWVyTGlzdDsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDQ5ZmFhNWY2OTQxMTM0ZDhhMjA1ZDI4MDQz
MzNlODI5YzZjZTk3NDAuLmQ1NWI1ODVlZjU4NmY0NTlhMTEwMmEzZThmNDhmNzAyMTc0MDFmMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21p
dW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9u
czNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgpAQCAtMjk0LDggKzI5NSw4IEBAIHZvaWQgVmlkZW9M
YXllckNocm9taXVtOjpkcmF3WVVWKGNvbnN0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6WVVWUHJvZ3Jh
bSogcHJvZ3JhbSkKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY2NNYXRyaXhMb2NhdGlvbigpLCAwLCBjb25zdF9j
YXN0PGZsb2F0Kj4oeXV2MlJHQiksIDEpKTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4
dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwK
LSAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgp
LCBkcmF3T3BhY2l0eSgpLAorICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0o
KSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdo
dCgpLCBjY0xheWVySW1wbCgpLT5kcmF3T3BhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgICAg
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKICAgICAgICAgICAgICAg
ICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKIApAQCAt
MzE3LDggKzMxOCw4IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkcmF3UkdCQShjb25zdCBW
aWRlb0xheWVyQ2hyb21pdW06OlJHQkFQcm9ncmFtKiBwcm9ncmFtCiAKICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxv
Y2F0aW9uKCksIDApKTsKIAotICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKLSAgICAgICAgICAg
ICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0
eSgpLAorICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9q
ZWN0aW9uTWF0cml4KCksIGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAg
ICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBjY0xheWVy
SW1wbCgpLT5kcmF3T3BhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAgIHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lZTI1MTRlNDg0ZDZhMmZlNTRkMmZhOTFiZTEyZTExY2Q5NWRm
MTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
aW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIiAvLyBGSVhNRTogdGVtcG9yYXJ5IGFuZCBi
YWQKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJSZW5kZXJT
dXJmYWNlQ2hyb21pdW0uaCIKKworbmFtZXNwYWNlIHsKK3ZvaWQgdG9HTE1hdHJpeChmbG9hdCog
ZmxhdHRlbmVkLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKK3sKKyAg
ICBmbGF0dGVuZWRbMF0gPSBtLm0xMSgpOworICAgIGZsYXR0ZW5lZFsxXSA9IG0ubTEyKCk7Cisg
ICAgZmxhdHRlbmVkWzJdID0gbS5tMTMoKTsKKyAgICBmbGF0dGVuZWRbM10gPSBtLm0xNCgpOwor
ICAgIGZsYXR0ZW5lZFs0XSA9IG0ubTIxKCk7CisgICAgZmxhdHRlbmVkWzVdID0gbS5tMjIoKTsK
KyAgICBmbGF0dGVuZWRbNl0gPSBtLm0yMygpOworICAgIGZsYXR0ZW5lZFs3XSA9IG0ubTI0KCk7
CisgICAgZmxhdHRlbmVkWzhdID0gbS5tMzEoKTsKKyAgICBmbGF0dGVuZWRbOV0gPSBtLm0zMigp
OworICAgIGZsYXR0ZW5lZFsxMF0gPSBtLm0zMygpOworICAgIGZsYXR0ZW5lZFsxMV0gPSBtLm0z
NCgpOworICAgIGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgpOworICAgIGZsYXR0ZW5lZFsxM10gPSBt
Lm00MigpOworICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00MygpOworICAgIGZsYXR0ZW5lZFsxNV0g
PSBtLm00NCgpOworfQorfQorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NMYXllckltcGw6
OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogbV9vd25lcihvd25lcikK
KyAgICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQorICAgICwgbV9kcmF3RGVwdGgoMCkKKyAg
ICAsIG1fZHJhd09wYWNpdHkoMCkKKyAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKKyAgICAsIG1f
ZGVidWdCb3JkZXJDb2xvcigwLCAwLCAwLCAwKQorICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDAp
CisgICAgLCBtX3JlbmRlclN1cmZhY2UoMCkKKyAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQorewor
fQorCitDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKK3sKK30KKworLy8gVGhlc2UgYXJlIHBz
ZXVkby1zdHJ1Y3R1cmFsIGhhY2tzIHVudGlsIHdlIGdldCByZWFsIHRyZWUgc3luY2luZyB1cCBp
biB0aGlzIHBpZWNlLgorQ0NMYXllckltcGwqIENDTGF5ZXJJbXBsOjpzdXBlcmxheWVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9vd25lci0+c3VwZXJsYXllcigpID8gbV9vd25lci0+c3VwZXJs
YXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKK30KKworQ0NMYXllckltcGwqIENDTGF5ZXJJbXBs
OjptYXNrTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmVyLT5tYXNrTGF5ZXIoKSA/
IG1fb3duZXItPm1hc2tMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKK30KKworQ0NMYXllcklt
cGwqIENDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX293
bmVyLT5yZXBsaWNhTGF5ZXIoKSA/IG1fb3duZXItPnJlcGxpY2FMYXllcigpLT5jY0xheWVySW1w
bCgpIDogMDsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJl
bmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQoreworICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRl
cmVyOworfQorCitSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5k
ZXJTdXJmYWNlKCkKK3sKKyAgICBtX3JlbmRlclN1cmZhY2UgPSBuZXcgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKHRoaXMpOworICAgIHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7Cit9CisKKy8v
IFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNob3VsZCBiZSBzdWJjbGFzZWQgYnkg
ZWFjaCB0eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCiti
b29sIENDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX293
bmVyLT5kcmF3c0NvbnRlbnQoKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6ZHJhdygpCit7Cisg
ICAgcmV0dXJuIG1fb3duZXItPmRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6dW5yZXNl
cnZlQ29udGVudHNUZXh0dXJlKCkKK3sKKyAgICBtX293bmVyLT51bnJlc2VydmVDb250ZW50c1Rl
eHR1cmUoKTsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZSgpCit7
CisgICAgbV9vd25lci0+YmluZENvbnRlbnRzVGV4dHVyZSgpOworfQorCit2b2lkIENDTGF5ZXJJ
bXBsOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAocmVuZGVyU3VyZmFjZSgpKQorICAg
ICAgICByZW5kZXJTdXJmYWNlKCktPmNsZWFudXBSZXNvdXJjZXMoKTsKK30KKworY29uc3QgSW50
UmVjdCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKSBjb25zdAoreworICAgIC8vIEZvcm0gdGhl
IG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRoZSBsYXll
cidzCisgICAgLy8gYm91bmRzIGludG8gdGhlIHZpZXcgc3BhY2UuCisgICAgRmxvYXRSZWN0IGxh
eWVyUmVjdCgtMC41ICogYm91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgp
LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCBtYXBw
ZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChkcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJl
Y3QpKTsKKyAgICByZXR1cm4gbWFwcGVkUmVjdDsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6ZHJh
d0RlYnVnQm9yZGVyKCkKK3sKKyAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOworICAgIGlm
ICghZGVidWdCb3JkZXJDb2xvcigpLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRlclBy
b2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPmJvcmRlclByb2dyYW0oKTsKKyAgICBB
U1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKKyAgICBsYXllclJlbmRl
cmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdUcmFuc2Zvcm0oKTsKKyAgICByZW5kZXJNYXRyaXgu
c2NhbGUzZChib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgMSk7CisgICAgdG9H
TE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgp
ICogcmVuZGVyTWF0cml4KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVy
UmVuZGVyZXIoKS0+Y29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
TWF0cml4NGZ2KHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksIGZhbHNl
LCAmZ2xNYXRyaXhbMF0sIDEpKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
NGYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5jb2xvckxvY2F0aW9uKCksIGRlYnVnQm9yZGVy
Q29sb3IoKS5yZWQoKSAvIDI1NS4wLCBkZWJ1Z0JvcmRlckNvbG9yKCkuZ3JlZW4oKSAvIDI1NS4w
LCBkZWJ1Z0JvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAsIDEpKTsKKworICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5saW5lV2lkdGgoZGVidWdCb3JkZXJXaWR0aCgpKSk7CisKKyAgICAvLyBU
aGUgaW5kaWNlcyBmb3IgdGhlIGxpbmUgYXJlIHN0b3JlZCBpbiB0aGUgc2FtZSBhcnJheSBhcyB0
aGUgdHJpYW5nbGUgaW5kaWNlcy4KKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZHJhd0VsZW1l
bnRzKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1AsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVCwgNiAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKTsKK30KKworfQorCisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMDRkNzZhYTA0ZDU0ZmFhNDY2MzU5MTRjZDFlNTE2ZjU5YjM0MzAwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NM
YXllckltcGxfaAorI2RlZmluZSBDQ0xheWVySW1wbF9oCisKKyNpbmNsdWRlICJDb2xvci5oIgor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllckNocm9taXVtOworY2xhc3MgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOworY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOworCitjbGFzcyBDQ0xh
eWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25l
cikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwob3duZXIp
KTsKKyAgICB9CisgICAgLy8gV2hlbiB0aGlzIGNsYXNzIGdldHMgc3ViY2xhc3NlcywgcmVtZW1i
ZXIgdG8gYWRkICd2aXJ0dWFsJyBoZXJlLgorICAgIH5DQ0xheWVySW1wbCgpOworCisgICAgQ0NM
YXllckltcGwqIHN1cGVybGF5ZXIoKSBjb25zdDsKKyAgICBDQ0xheWVySW1wbCogbWFza0xheWVy
KCkgY29uc3Q7CisgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0OworCisgICAg
dm9pZCBkcmF3KCk7CisgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2b2lkIHVu
cmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOworICAgIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgp
OworCisgICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CisKKyAgICAvLyBEZWJ1ZyBsYXllciBi
b3JkZXIgLSB2aXN1YWwgZWZmZWN0IG9ubHksIGRvIG5vdCBjaGFuZ2UgZ2VvbWV0cnkvY2xpcHBp
bmcvZXRjLgorICAgIHZvaWQgc2V0RGVidWdCb3JkZXJDb2xvcihDb2xvciBjKSB7IG1fZGVidWdC
b3JkZXJDb2xvciA9IGM7IH0KKyAgICBDb2xvciBkZWJ1Z0JvcmRlckNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWJ1Z0JvcmRlckNvbG9yOyB9CisgICAgdm9pZCBzZXREZWJ1Z0JvcmRlcldpZHRo
KGZsb2F0IHdpZHRoKSB7IG1fZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOyB9CisgICAgZmxvYXQg
ZGVidWdCb3JkZXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdCb3JkZXJXaWR0aDsgfQor
CisgICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoKTsKKworICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJl
cihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KKwor
ICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogY3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJTdXJmYWNlLmdldCgpOyB9CisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1f
cmVuZGVyU3VyZmFjZS5jbGVhcigpOyB9CisgICAgZmxvYXQgZHJhd0RlcHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3RGVwdGg7IH0KKyAgICB2b2lkIHNldERyYXdEZXB0aChmbG9hdCBkZXB0aCkg
eyBtX2RyYXdEZXB0aCA9IGRlcHRoOyB9CisgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7
IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CisgICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBv
cGFjaXR5KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CisgICAgY29uc3QgSW50UmVjdCYg
c2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisgICAgdm9pZCBz
ZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fc2Npc3NvclJlY3QgPSByZWN0
OyB9CisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29u
c3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9CisgICAgdm9pZCBzZXRUYXJnZXRS
ZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFjZSkgeyBtX3RhcmdldFJl
bmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CisKKyAgICBib29sIGRvdWJsZVNpZGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kb3VibGVTaWRlZDsgfQorICAgIHZvaWQgc2V0RG91YmxlU2lkZWQoYm9vbCBk
b3VibGVTaWRlZCkgeyBtX2RvdWJsZVNpZGVkID0gZG91YmxlU2lkZWQ7IH0KKyAgICBjb25zdCBJ
bnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQorICAgIHZvaWQgc2V0
Qm91bmRzKGNvbnN0IEludFNpemUmIGJvdW5kcykgeyBtX2JvdW5kcyA9IGJvdW5kczsgfQorCisg
ICAgLy8gUmV0dXJucyB0aGUgcmVjdCBjb250YWludGFpbmluZyB0aGlzIGxheWVyIGluIHRoZSBj
dXJyZW50IHZpZXcncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBjb25zdCBJbnRSZWN0IGdldERy
YXdSZWN0KCkgY29uc3Q7CisKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0
RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJh
d1RyYW5zZm9ybSA9IG1hdHJpeDsgfQorICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVu
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KKyAgICB2b2lk
IHNldERyYXdhYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxl
Q29udGVudFJlY3QgPSByZWN0OyB9CisKK3ByaXZhdGU6CisgICAgLy8gRm9yIG5vdywgQ0NMYXll
cnMgYXJlIG93bmVkIGRpcmVjdGx5IGJ5IGEgTGF5ZXJDaHJvbWl1bS4KKyAgICBMYXllckNocm9t
aXVtKiBtX293bmVyOworICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsK
KworICAgIC8vIFJlbmRlciBzdXJmYWNlIHRoaXMgbGF5ZXIgZHJhd3MgaW50by4gVGhpcyBpcyBh
IHN1cmZhY2UgdGhhdCBjYW4gYmVsb25nCisgICAgLy8gZWl0aGVyIHRvIHRoaXMgbGF5ZXIgKGlm
IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9PSBtX3JlbmRlclN1cmZhY2UpIG9yCisgICAgLy8gdG8g
YW4gYW5jZXN0b3Igb2YgdGhpcyBsYXllci4gVGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZSBkZXRl
cm1pbmVzIHRoZQorICAgIC8vIGNvb3JkaW5hdGUgc3lzdGVtIHRoZSBsYXllcidzIHRyYW5zZm9y
bXMgYXJlIHJlbGF0aXZlIHRvLgorICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRS
ZW5kZXJTdXJmYWNlOworCisgICAgLy8gVGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUgY2Vu
dGVyIG9mIHRoZSBsYXllci4gVGhpcyB2YWx1ZSBpcyB1c2VkCisgICAgLy8gdG8gc29ydCBsYXll
cnMgZnJvbSBiYWNrIHRvIGZyb250LgorICAgIGZsb2F0IG1fZHJhd0RlcHRoOworICAgIGZsb2F0
IG1fZHJhd09wYWNpdHk7CisKKyAgICAvLyBXaGV0aGVyIHRoZSAiYmFjayIgb2YgdGhpcyBsYXll
ciBzaG91bGQgZHJhdy4KKyAgICBib29sIG1fZG91YmxlU2lkZWQ7CisKKyAgICAvLyBEZWJ1ZyBi
b3JkZXJzLgorICAgIENvbG9yIG1fZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBtX2RlYnVn
Qm9yZGVyV2lkdGg7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07
CisKKyAgICBJbnRTaXplIG1fYm91bmRzOworCisgICAgLy8gVGhlIHNjaXNzb3IgcmVjdGFuZ2xl
IHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGlzIGxheWVyIGlzIGRyYXduLgorICAgIC8vIElu
aGVyaXRlZCBieSB0aGUgcGFyZW50IGxheWVyIGFuZCBmdXJ0aGVyIHJlc3RyaWN0ZWQgaWYgdGhp
cyBsYXllciBtYXNrcworICAgIC8vIHRvIGJvdW5kcy4KKyAgICBJbnRSZWN0IG1fc2Npc3NvclJl
Y3Q7CisKKyAgICAvLyBSZW5kZXIgc3VyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4g
VGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKKyAgICAvLyB3aWxsIHJlbmRlciB0byB0aGlz
IHN1cmZhY2UuCisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJm
YWNlOworCisgICAgLy8gSGllcmFyY2hpY2FsIGJvdW5kaW5nIHJlY3QgY29udGFpbmluZyB0aGUg
bGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cy4KKyAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50
UmVjdDsKKworICAgIC8vIFBvaW50cyB0byB0aGUgbGF5ZXIgcmVuZGVyZXIgdGhhdCB1cGRhdGVz
IGFuZCBkcmF3cyB0aGlzIGxheWVyLgorICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IG1fbGF5ZXJSZW5kZXJlcjsKK307CisKK30KKworI2VuZGlmIC8vIENDTGF5ZXJJbXBsX2gKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyY2YyODJjOTA2OGM2Yzk2ODlmZTBlNjEyYmMy
MzBmZWY4ODcwNzYyLi4wN2M2Zjc4NGYwOWQ2ODc1ZWM0YTU3NDhjNzU3MGE5NmFmMWI4MjYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTAyLTIyICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBTZXBhcmF0ZSB0aGUgInVw
ZGF0ZSIgYW5kICJkcmF3IiBwb3J0aW9ucyBvZiBMYXllclJlbmRlcmVyQ2hyb21pdW0ncyBkcmF3
TGF5ZXJzIGZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDA0NworCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmRvQ29tcG9zaXRlKToKKwogMjAxMS0wMi0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggYWU5N2JmYTQ3OWNhNzVl
OTlkZDdiNDM2ZWM5NDNlMjkzOGVhNDE4Zi4uZDc2ZWNkYzk3NTcxMDAzZDIxNDhhMTAwZWNmMzJh
MTZlMTZiZWY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cApAQCAtMTAwNSw5ICsxMDA1LDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVh
ZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJUZXh0
dXJlU2l6ZSgpLndpZHRoKCkKLSAgICAgICAgICAgJiYgcmVjdC5tYXhZKCkgPD0gbV9sYXllclJl
bmRlcmVyLT5yb290TGF5ZXJUZXh0dXJlU2l6ZSgpLmhlaWdodCgpKTsKLQogI2lmIFBMQVRGT1JN
KFNLSUEpCiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBjb250ZXh0KGNhbnZhcyk7CiAKQEAgLTEw
NTAsNyArMTA0Nyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFz
LCBjb25zdCBXZWJSZWN0JiByZWN0KQogICAgICAgICBpZiAoY2FudmFzKSB7CiAgICAgICAgICAg
ICAvLyBDbGlwIHJlY3QgdG8gdGhlIGNvbmZpbmVzIG9mIHRoZSByb290TGF5ZXJUZXh0dXJlLgog
ICAgICAgICAgICAgSW50UmVjdCByZXNpemVSZWN0KHJlY3QpOwotICAgICAgICAgICAgcmVzaXpl
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX2xheWVyUmVuZGVyZXItPnJvb3RM
YXllclRleHR1cmVTaXplKCkpKTsKKyAgICAgICAgICAgIHJlc2l6ZVJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgbV9sYXllclJlbmRlcmVyLT52aXNpYmxlUmVjdFNpemUoKSkpOwog
ICAgICAgICAgICAgZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoY2FudmFzLCByZXNpemVSZWN0KTsK
ICAgICAgICAgfQogI2VuZGlmCkBAIC0yMzk0LDcgKzIzOTEsNyBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojpkb0NvbXBvc2l0ZSgpCiAKICAgICBXZWJWaWV3SW1wbFNjcm9sbGJhclBhaW50SW50ZXJmYWNl
IHNjcm9sbGJhclBhaW50KHRoaXMpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRl
T2Zmc2NyZWVuKHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7Ci0gICAg
bV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgc2Ny
b2xsLCB0aWxlUGFpbnQsIHNjcm9sbGJhclBhaW50KTsKKyAgICBtX2xheWVyUmVuZGVyZXItPnVw
ZGF0ZUFuZERyYXdMYXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBzY3JvbGwsIHRpbGVQ
YWludCwgc2Nyb2xsYmFyUGFpbnQpOwogICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9z
aXRpbmdPZmZzY3JlZW4oKSkKICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5jb3B5T2Zmc2NyZWVu
VGV4dHVyZVRvRGlzcGxheSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83867</attachid>
            <date>2011-02-25 13:30:43 -0800</date>
            <delta_ts>2011-03-02 15:08:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54047-20110225133042.patch</filename>
            <type>text/plain</type>
            <size>28632</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk3MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NTQwOTgxZWJmMzlmZWE3
MWVhM2ZhOTIzOTY5MmQzNTQ1OTExMTI4Li42OTBjYzJiMzI5YTVmZTc0YzU4M2RmNGUwMTBhODA5
OTc1YjM0NWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDItMjUgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFNlcGFyYXRlIHRoZSB1cGRhdGUg
YW5kIGRyYXcgcG9ydGlvbnMgb2YgTGF5ZXJSZW5kZXJlckNocm9taXVtJ3MgZHJhd0xheWVycyBm
dW5jdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTQwNDcKKworICAgICAgICBUaGlzIHNwbGl0cyB1cCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnMoKSBpbnRvIHR3byBwaGFzZXMsCisgICAgICAgIG9uZSB0aGF0IHVwZGF0ZXMgbGF5
ZXJzIGFuZCBvbmUgdGhhdCBhY3R1YWxseSBkcmF3cyB0aGVtLiAgTW9zdCBvZiB0aGUKKyAgICAg
ICAgcGF0Y2ggaXMgbW92aW5nIHRoZSBib2RpZXMgb2YgZHJhd0xheWVycygpIGFuZCB1cGRhdGVM
YXllcnNSZWN1cnNpdmUoKQorICAgICAgICBpbnRvIHNtYWxsZXIgaGVscGVyIGZ1bmN0aW9ucy4K
KworICAgICAgICBUaGUgbWFpbiBlbnRyeSBwb2ludCBpcyByZW5hbWVkIHVwZGF0ZUFuZERyYXdM
YXllcnMoKSwgYnV0IG90aGVyd2lzZQorICAgICAgICBoYXMgdGhlIHNhbWUgc2lnbmF0dXJlIGFz
IGRyYXdMYXllcnMoKSBkaWQuICBJbnRlcm5hbGx5IGl0IGRvZXMgdGhlCisgICAgICAgIGZvbGxv
d2luZzoKKworICAgICAgICAxLikgVXBkYXRlcyB0aGUgcm9vdCBsYXllcidzIGNvbnRlbnRzCisg
ICAgICAgIDIuKSBVcGRhdGVzIHRoZSByb290IGxheWVyJ3Mgc2Nyb2xsYmFycworICAgICAgICAz
LikgVXBkYXRlcyB0aGUgUmVuZGVyU3VyZmFjZSB0cmVlIGFuZCB0aGUgY29udGVudHMgb2YgYWxs
IGNoaWxkCisgICAgICAgIGxheWVycworICAgICAgICA0LikgRHJhd3MgdGhlIHJvb3QgbGF5ZXIg
YW5kIHJvb3QgbGF5ZXIgc2Nyb2xsYmFycworICAgICAgICA1LikgRHJhd3MgYWxsIGNoaWxkIGxh
eWVycyB1c2luZyB0aGUgcHJldmlvdXNseSB1cGRhdGVkCisgICAgICAgIENDTGF5ZXJJbXBsL1Jl
bmRlclN1cmZhY2UgZGF0YS4KKworICAgICAgICBBIGZldyB0aGluZ3Mgc3RpbGwgbmVlZCB0byBi
ZSBkb25lIGFmdGVyIHRoaXMgcGF0Y2ggdG8gY29tcGxldGUgdGhlIHNlcGFyYXRpb24KKyAgICAg
ICAgb2YgdGhlIHVwZGF0ZSBhbmQgZHJhdyBzdGVwLCBidXQgdGhleSBjYW4gaGFwcGVuIGluIGxh
dGVyIHBhdGNoZXM6CisgICAgICAgICopIFRoZSByb290IGxheWVyIGFuZCByb290IGxheWVyIHNj
cm9sbGJhcnMgY29udGVudHMgc2hvdWxkIGJlCisgICAgICAgIHVwbG9hZGVkIHRvIHRleHR1cmVz
IGF0IGRyYXcgdGltZSwgbm90IHVwZGF0ZSB0aW1lLgorICAgICAgICAqKSBUaGUgUmVuZGVyU3Vy
ZmFjZSB0cmVlIHNob3VsZCBiZSB1cGRhdGVkIGF0IGRyYXcgdGltZSwgbm90IHVwZGF0ZQorICAg
ICAgICB0aW1lLgorCisgICAgICAgIENvdmVyZWQgYnkgdGhlIGNvbXBvc2l0aW5nLyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVy
UmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZVJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZVJvb3RMYXllclNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZURyYXdTdGF0ZUFuZFJlbmRl
clN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFp
bnRMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp2aXNpYmxlUmVjdFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKwogMjAxMS0wMi0yNSAgRXJpYyBDYXJs
c29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGM0Yjg2
ODcwOGEyNWQ3YzI1MDI1NzI0MjAyMmE0ZmJkZmU4Y2ZjYWMuLmZiMDg5ZGI4NzdkYTMwZGRmZWU0
NjBhYjNhMzNiMTMyMmUzODg2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
R2VvbWV0cnlCaW5kaW5nLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKQEAgLTEw
Miw5ICsxMDMsNyBAQCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaAogfQogCiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KQotICAgIDogbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKLSAgICAsIG1f
cm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQotICAgICwgbV9yb290TGF5ZXIoMCkKKyAgICA6IG1f
cm9vdExheWVyKDApCiAgICAgLCBtX3Njcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAg
ICAgLCBtX2N1cnJlbnRTaGFkZXIoMCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkK
QEAgLTE3NCwxMSArMTczLDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlk
YXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGNvCiAgICAgfQogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxl
UGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQ
YWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllcihUaWxlUGFp
bnRJbnRlcmZhY2UmIHRpbGVQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCiB7CiAg
ICAgbV9yb290TGF5ZXJUaWxlci0+dXBkYXRlKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOwotICAg
IG1fcm9vdExheWVyVGlsZXItPmRyYXcodmlzaWJsZVJlY3QpOworfQogCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyU2Nyb2xsYmFycyhUaWxlUGFpbnRJbnRlcmZh
Y2UmIHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit7CiAgICAgaWYgKHZpc2libGVSZWN0LndpZHRoKCkgPiBjb250
ZW50UmVjdC53aWR0aCgpKSB7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXIgPSB2
ZXJ0aWNhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKICAgICAgICAg
SW50U2l6ZSB0aWxlU2l6ZSA9IHZlcnRpY2FsU2Nyb2xsYmFyLnNpemUoKS5zaHJ1bmtUbyhJbnRT
aXplKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpKTsKQEAgLTE4OCw4ICsxODks
OCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd1Jvb3RMYXllcihU
aWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludAogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhclRpbGVyLT5zZXRUaWxlU2l6ZSh0aWxlU2l6ZSk7CiAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXJUaWxlci0+c2V0TGF5ZXJQb3NpdGlvbih2ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT51cGRhdGUoc2Nyb2xsYmFyUGFp
bnQsIHZpc2libGVSZWN0KTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5kcmF3
KHZpc2libGVSZWN0KTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXJUaWxlci5jbGVhcigpOwogCiAgICAgaWYgKHZpc2libGVSZWN0LmhlaWdodCgpID4gY29u
dGVudFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFy
ID0gaG9yaXpvbnRhbFNjcm9sbGJhclJlY3QodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKQEAg
LTIwMCw0MiArMjAxLDk2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmRE
cmF3Um9vdExheWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50CiAgICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0VGlsZVNpemUodGlsZVNpemUpOwogICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+c2V0TGF5ZXJQb3NpdGlvbihob3Jpem9udGFs
U2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxl
ci0+dXBkYXRlKHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCk7Ci0gICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhclRpbGVyLT5kcmF3KHZpc2libGVSZWN0KTsKLSAgICB9CisgICAgfSBlbHNl
CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyLmNsZWFyKCk7Cit9CisKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Um9vdExheWVyKCkKK3sKKyAgICBtX3Jvb3RMYXll
clRpbGVyLT5kcmF3KG1fdmlzaWJsZVJlY3QpOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxi
YXJUaWxlcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclRpbGVyLT5kcmF3KG1fdmlzaWJs
ZVJlY3QpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhclRpbGVyKQorICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+ZHJhdyhtX3Zpc2libGVSZWN0KTsKIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBUaWxlUGFp
bnRJbnRlcmZhY2UmIHRpbGVQYWludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQ
b3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9s
bGJhclBhaW50KQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogCiAgICAg
aWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgdXBkYXRlUm9vdExheWVyKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOworICAg
IC8vIFJlY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gIFRoaXMgbWF5IGJl
Y29tZSBudWxsIGlmCisgICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmluZyBh
IHBhaW50IG9wZXJhdGlvbi4KKyAgICBpZiAoIW1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICB1cGRhdGVSb290TGF5ZXJTY3JvbGxiYXJzKHNjcm9sbGJhclBhaW50LCB2aXNpYmxl
UmVjdCwgY29udGVudFJlY3QpOworCisgICAgLy8gRklYTUU6IElkZWFsbHkgd2UnZCBub3QgbWVz
cyB3aXRoIHRoZSByZW5kZXIgc3VyZmFjZSBsaXN0IHVudGlsIGRyYXcgdGltZSwgYnV0IHVwZGF0
ZURyYXdTdGF0ZUFuZFJlbmRlclN1cmZhY2VzKCkgY3VycmVudGx5CisgICAgLy8gZGVwZW5kcyBv
biB0aGUgUmVuZGVyU3VyZmFjZUNocm9taXVtIHN0YXRlIGJlaW5nIHVwIHRvIGRhdGUuCisgICAg
VmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICB1cGRhdGVM
YXllcnModmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBzY3JvbGxQb3NpdGlvbiwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CisKKyAgICBkcmF3TGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
UG9pbnQmIHNjcm9sbFBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sK
KyAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdExheWVyLT5jY0xheWVySW1w
bCgpOworCisgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAg
IHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBBU1NFUlQocm9vdERy
YXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKIAogICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2
aXNpYmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCiAgICAg
Ly8gdG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhl
IHByb2plY3Rpb24gbWF0cml4CiAgICAgLy8gYW5kIHZpZXdwb3J0LgotICAgIGludCB2aXNpYmxl
UmVjdFdpZHRoID0gdmlzaWJsZVJlY3Qud2lkdGgoKTsKLSAgICBpbnQgdmlzaWJsZVJlY3RIZWln
aHQgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKIAotICAgIGlmICghbV9yb290TGF5ZXItPmNjTGF5
ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgbV9yb290TGF5ZXItPmNjTGF5ZXJJ
bXBsKCktPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBtX3Jvb3RMYXllci0+Y2NMYXllcklt
cGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5tX2NvbnRlbnRSZWN0ID0gSW50UmVjdCgwLCAwLCB2aXNp
YmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCk7Ci0KLSAgICBpZiAodmlzaWJsZVJlY3RX
aWR0aCAhPSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCB8fCB2aXNpYmxlUmVjdEhlaWdodCAhPSBt
X3Jvb3RMYXllclRleHR1cmVIZWlnaHQpIHsKLSAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlV2lk
dGggPSB2aXNpYmxlUmVjdFdpZHRoOwotICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQg
PSB2aXNpYmxlUmVjdEhlaWdodDsKKyAgICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkt
Pm1fY29udGVudFJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCB2aXNpYmxlUmVjdC5zaXpl
KCkpOwogCisgICAgaWYgKHZpc2libGVSZWN0LnNpemUoKSAhPSBtX3Zpc2libGVSZWN0LnNpemUo
KSkgewogICAgICAgICAvLyBSZXNldCB0aGUgY3VycmVudCByZW5kZXIgc3VyZmFjZSB0byBmb3Jj
ZSBhbiB1cGRhdGUgb2YgdGhlIHZpZXdwb3J0IGFuZAogICAgICAgICAvLyBwcm9qZWN0aW9uIG1h
dHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCiAgICAgICAgIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UgPSAwOwogICAgIH0KKyAgICBtX3Zpc2libGVSZWN0ID0gdmlzaWJs
ZVJlY3Q7CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CisgICAgLy8g
U2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMgdG8gYXZvaWQgcmVuZGVyaW5nIG9uIHRvcCBvZiB0
aGVtLgorICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAvLyBU
aGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgorICAg
IHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9z
aXRpb24ueSgpKTsKKyAgICByb290RHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChyb290U2Npc3Nv
clJlY3QpOworCisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3REcmF3TGF5ZXItPnJl
bmRlclN1cmZhY2UoKTsKKworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RE
cmF3TGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKKyAgICAvLyBV
bmZvcnR1bmF0ZWx5LCB1cGRhdGVMYXllcnNSZWN1cnNpdmUoKSBjdXJyZW50bHkgYm90aCB1cGRh
dGVzIHRoZSBsYXllcnMgYW5kIHVwZGF0ZXMgdGhlIGRyYXcgc3RhdGUKKyAgICAvLyAodHJhbnNm
b3JtcywgZXRjKS4gSXQnZCBiZSBuaWNlciBpZiBvcGVyYXRpb25zIG9uIHRoZSBwcmVzZW50YXRp
b24gbGF5ZXJzIGhhcHBlbmVkIGxhdGVyLCBidXQgdGhlIGRyYXcKKyAgICAvLyB0cmFuc2Zvcm1z
IGFyZSBuZWVkZWQgYnkgbGFyZ2UgbGF5ZXJzIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LiAgVGls
aW5nIHdpbGwgZml4IHRoaXMgYnkgZWxpbWluYXRpbmcgdGhlCisgICAgLy8gY29uY2VwdCBvZiBh
IGxhcmdlIGNvbnRlbnQgbGF5ZXIuCisgICAgdXBkYXRlRHJhd1N0YXRlQW5kUmVuZGVyU3VyZmFj
ZXMobV9yb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CisKKyAgICBwYWludExh
eWVyc1JlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9y
b290TGF5ZXItPmNjTGF5ZXJJbXBsKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAg
ICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNs
dWRpbmcgdGhlIHNjcm9sbGJhcnMuCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT52aWV3cG9ydCgwLCAwLCB2aXNpYmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCkpOwor
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV92aXNp
YmxlUmVjdC53aWR0aCgpLCBtX3Zpc2libGVSZWN0LmhlaWdodCgpKSk7CiAKICAgICAvLyBCaW5k
IHRoZSBjb21tb24gdmVydGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxh
eWVycy4KICAgICBtX3NoYXJlZEdlb21ldHJ5LT5wcmVwYXJlRm9yRHJhdygpOwpAQCAtMjQ3LDEx
ICszMDIsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIC8vIEJsZW5kaW5nIGRpc2Fi
bGVkIGJ5IGRlZmF1bHQuIFJvb3QgbGF5ZXIgYWxwaGEgY2hhbm5lbCBvbiBXaW5kb3dzIGlzIGlu
Y29ycmVjdCB3aGVuIFNraWEgdXNlcyBDbGVhclR5cGUuCiAgICAgR0xDKG1fY29udGV4dC5nZXQo
KSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogCi0gICAg
bV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwotCi0gICAgQVNTRVJUKG1fcm9vdExh
eWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIG1fZGVmYXVsdFJlbmRl
clN1cmZhY2UgPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpOwot
CiAgICAgdXNlUmVuZGVyU3VyZmFjZShtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKTsKIAogICAgIC8v
IENsZWFyIHRvIGJsdWUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BvdCB1bnJlbmRlcmVkIHJlZ2lv
bnMuCkBAIC0yNjIsMzMgKzMxMiwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdAogICAgIC8v
IHplcm8gYWxwaGEgdmFsdWVzIG9uIHRleHQgZ2x5cGhzLiBUaGUgcm9vdCBsYXllciBpcyBhbHdh
eXMgb3BhcXVlLgogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIGZh
bHNlKTsKIAotICAgIHVwZGF0ZUFuZERyYXdSb290TGF5ZXIodGlsZVBhaW50LCBzY3JvbGxiYXJQ
YWludCwgdmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0KTsKKyAgICBkcmF3Um9vdExheWVyKCk7CiAK
ICAgICAvLyBSZS1lbmFibGUgY29sb3Igd3JpdGVzIHRvIGxheWVycywgd2hpY2ggbWF5IGJlIHBh
cnRpYWxseSB0cmFuc3BhcmVudC4KICAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVl
LCB0cnVlLCB0cnVlKTsKIAotICAgIC8vIFJlY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9v
dCBsYXllci4gIFRoaXMgbWF5IGJlY29tZSBudWxsIGlmCi0gICAgLy8gY29tcG9zaXRpbmcgZ2V0
cyB0dXJuZWQgb2ZmIGR1cmluZyBhIHBhaW50IG9wZXJhdGlvbi4KLSAgICBpZiAoIW1fcm9vdExh
eWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTZXQgdGhlIHJvb3QgdmlzaWJsZS9jb250
ZW50IHJlY3RzIC0tLSB1c2VkIGJ5IHN1YnNlcXVlbnQgZHJhd0xheWVycyBjYWxscy4KLSAgICBt
X3Jvb3RWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwotICAgIG1fcm9vdENvbnRlbnRSZWN0ID0g
Y29udGVudFJlY3Q7Ci0KLSAgICAvLyBTY2lzc29yIG91dCB0aGUgc2Nyb2xsYmFycyB0byBhdm9p
ZCByZW5kZXJpbmcgb24gdG9wIG9mIHRoZW0uCi0gICAgSW50UmVjdCByb290U2Npc3NvclJlY3Qo
Y29udGVudFJlY3QpOwotICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUg
dGhlIHNjcm9sbCBvZmZzZXQuCi0gICAgcm9vdFNjaXNzb3JSZWN0Lm1vdmUoLW1fc2Nyb2xsUG9z
aXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAgIG1fcm9vdExheWVyLT5jY0xh
eWVySW1wbCgpLT5zZXRTY2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOwotCi0gICAgVmVjdG9y
PENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKSk7Ci0KLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBtX2RlZmF1bHRSZW5kZXJTdXJm
YWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOwotICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShtX3Jv
b3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKLQogICAgIC8vIFRoZSBzaGFkZXIg
dXNlZCB0byByZW5kZXIgbGF5ZXJzIHJldHVybnMgcHJlLW11bHRpcGxpZWQgYWxwaGEgY29sb3Jz
CiAgICAgLy8gc28gd2UgbmVlZCB0byBzZW5kIHRoZSBibGVuZGluZyBtb2RlIGFwcHJvcHJpYXRl
bHkuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7CkBAIC0zMDgsNyArMzM2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICh1c2VSZW5kZXJTdXJm
YWNlKHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpKSkgewotICAgICAgICAgICAg
aWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKSkgewor
ICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7CiAg
ICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICAgICAgICAgICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwogICAgICAg
ICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKQEAgLTM1NCw4ICszODIsNyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbGF5ZXIpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBp
eGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKHJl
Y3QubWF4WCgpIDw9IHJvb3RMYXllclRleHR1cmVTaXplKCkud2lkdGgoKQotICAgICAgICAgICAm
JiByZWN0Lm1heFkoKSA8PSByb290TGF5ZXJUZXh0dXJlU2l6ZSgpLmhlaWdodCgpKTsKKyAgICBB
U1NFUlQocmVjdC5tYXhYKCkgPD0gdmlzaWJsZVJlY3RTaXplKCkud2lkdGgoKSAmJiByZWN0Lm1h
eFkoKSA8PSB2aXNpYmxlUmVjdFNpemUoKS5oZWlnaHQoKSk7CiAKICAgICBpZiAoIXBpeGVscykK
ICAgICAgICAgcmV0dXJuOwpAQCAtNDA4LDcgKzQzNSw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNm
b3JtCiAKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRo
ZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3Jt
YXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgotdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVt
KiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9y
PENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1w
bCo+JiBsYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlRHJhd1N0
YXRlQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0KQogewogICAg
IGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwogICAgIENDTGF5ZXJJbXBsKiBkcmF3TGF5
ZXIgPSBsYXllci0+Y2NMYXllckltcGwoKTsKQEAgLTQ2NCw3ICs0OTEsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxh
eWVyLCBjb25zdCBUcgogICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KICAgICBib29sIHVzZVN1cmZh
Y2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYgIWlzU2NhbGVPclRyYW5z
bGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKICAgICBib29sIHVzZVN1cmZhY2VGb3JPcGFjaXR5
ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2VydmVzM0QoKTsKLSAgICBi
b29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tMYXllcigpOworICAgIGJvb2wg
dXNlU3VyZmFjZUZvck1hc2tpbmcgPSBsYXllci0+bWFza0RyYXdMYXllcigpOwogICAgIGJvb2wg
dXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxheWVyKCk7CiAgICAgaWYg
KCgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBsYXll
ci0+ZGVzY2VuZGFudHNEcmF3Q29udGVudCgpKQogICAgICAgICB8fCB1c2VTdXJmYWNlRm9yTWFz
a2luZyB8fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbikgewpAQCAtNDczLDcgKzUwMCw3IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gZHJhd0xh
eWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAKICAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0
aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllci4KLSAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTs7CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07CiAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJh
bnNsYXRlM2QoMC41ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7
CiAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKIApA
QCAtNDgxLDcgKzUwOCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAKICAgICAgICAgLy8g
TGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBz
dXJmYWNlLgogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9w
YWNpdHkoKTsKLSAgICAgICAgaWYgKGxheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkp
CisgICAgICAgIGlmIChsYXllci0+c3VwZXJsYXllcigpICYmIGxheWVyLT5zdXBlcmxheWVyKCkt
PnByZXNlcnZlczNEKCkpCiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5
ICo9IGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5kcmF3T3BhY2l0eSgpOwogICAgICAgICBkcmF3
TGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogCkBAIC00OTgsNyArNTI1LDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBs
YXllciwgY29uc3QgVHIKICAgICAgICAgLy8gVGhlIHJlbmRlciBzdXJmYWNlIHNjaXNzb3IgcmVj
dCBpcyB0aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMgdG8KICAgICAgICAgLy8gYmUgYXBwbGll
ZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2Ugb250byBpdHMgY29udGFpbmluZwog
ICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBzdXBl
cmxheWVyJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPm1fc2Np
c3NvclJlY3QgPSBkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3NvclJlY3QoKTsKKyAgICAg
ICAgcmVuZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGRyYXdMYXllci0+c3VwZXJsYXllcigp
ID8gZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnNjaXNzb3JSZWN0KCkgOiBkcmF3TGF5ZXItPnNj
aXNzb3JSZWN0KCk7CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIo
KTsKIApAQCAtNTQ5LDcgKzU3Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAgICAgICAg
IGRyYXdMYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShkcmF3TGF5ZXItPnN1cGVybGF5ZXIo
KS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICB9CiAKLSAgICAvLyBtX2RyYXdhYmxlQ29u
dGVudFJlY3QgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
CisgICAgLy8gZHJhd2FibGVDb250ZW50UmVjdCgpIGlzIGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNv
b3JkaW5hdGUgc3lzdGVtIG9mIHRoZQogICAgIC8vIFJlbmRlclN1cmZhY2UgdGhlIGxheWVyIGRy
YXdzIGludG8uCiAgICAgaWYgKGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGRy
YXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CkBA
IC01ODQsNyArNjExLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
c1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHIKICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXll
cnMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkg
ewogICAgICAgICBDQ0xheWVySW1wbCogc3VibGF5ZXIgPSBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJ
bXBsKCk7Ci0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCks
IHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cyk7Cisg
ICAgICAgIHVwZGF0ZURyYXdTdGF0ZUFuZFJlbmRlclN1cmZhY2VzKHN1YmxheWVyc1tpXS5nZXQo
KSwgc3VibGF5ZXJNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsK
IAogICAgICAgICBpZiAoc3VibGF5ZXItPnJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdWJsYXllclJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+
cmVuZGVyU3VyZmFjZSgpOwpAQCAtNjEyLDYgKzYzOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0
IFRyCiAKICAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUg
cG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4KICAgICAgICAgRmxvYXRTaXplIGNlbnRlck9mZnNldER1
ZVRvQ2xpcHBpbmc7CisKICAgICAgICAgLy8gRG9uJ3QgY2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVm
bGVjdGVkIGFzIHRoZSByZWZsZWN0aW9uIHNob3VsZG4ndCBiZQogICAgICAgICAvLyBjbGlwcGVk
LgogICAgICAgICBpZiAoIWxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewpAQCAtNjY0LDYgKzY5Miwy
MiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExh
eWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcgogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZk
ZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBjb21wYXJl
TGF5ZXJaKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50TGF5ZXJzUmVj
dXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBw
YWludExheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOworCisgICAgaWYgKGxheWVy
LT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgp
OworICAgIGlmIChsYXllci0+bWFza0xheWVyKCkgJiYgbGF5ZXItPm1hc2tMYXllcigpLT5kcmF3
c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb250ZW50c0lm
RGlydHkoKTsKKyAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7CisgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAm
JiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXllci0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKK30KKwogdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sIGNvbXBv
c2l0ZU9mZnNjcmVlbikKIHsKICAgICBpZiAobV9jb21wb3NpdGVPZmZzY3JlZW4gPT0gY29tcG9z
aXRlT2Zmc2NyZWVuKQpAQCAtNzUyLDExICs3OTYsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgUmVuZGVyU3VyZmFjZUNocm9taXVt
KgogICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkgJiYgY29tYmluZWREcmF3TWF0cml4Lm0z
MygpIDwgMCkKICAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50
KCkpIHsKLSAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOwotICAgICAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChsYXllci0+ZHJhd3NDb250
ZW50KCkpCiAgICAgICAgIGxheWVyLT5kcmF3KCk7Ci0gICAgfQogCiAgICAgLy8gRHJhdyB0aGUg
ZGVidWcgYm9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KICAgICBsYXllci0+ZHJhd0RlYnVnQm9yZGVy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDEwYjUwM2E0ZGIzMGIy
M2RmNjU0Zjg1OGYyYzg5ZmMwY2EzZmRiMDIuLmVkNDEzN2IxNGI3M2RlODU0YmRhYjUxMTg3ODEx
MTk5OThkNzY2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC03Myw5
ICs3Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KTsKIAogICAgIC8vIHVwZGF0ZXMgYW5kIGRyYXdzIHRoZSBjdXJy
ZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVmZmVyCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBUaWxlUGFpbnRJ
bnRlcmZhY2UmIHRpbGVQYWludCwKLSAgICAgICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJm
YWNlJiBzY3JvbGxiYXJQYWludCk7CisgICAgdm9pZCB1cGRhdGVBbmREcmF3TGF5ZXJzKGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
aWxlUGFpbnRJbnRlcmZhY2UmLCBUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50KTsK
IAogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2go
KTsKQEAgLTgzLDYgKzgyLDggQEAgcHVibGljOgogICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNj
cmVlbgogICAgIHZvaWQgcHJlc2VudCgpOwogCisgICAgSW50U2l6ZSB2aXNpYmxlUmVjdFNpemUo
KSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVSZWN0LnNpemUoKTsgfQorCiAgICAgdm9pZCBzZXRS
b290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBsYXllcik7CiAgICAgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lk
IHRyYW5zZmVyUm9vdExheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogb3RoZXIpIHsgb3RoZXIt
Pm1fcm9vdExheWVyID0gbV9yb290TGF5ZXIucmVsZWFzZSgpOyB9CkBAIC0xMjIsOCArMTIzLDYg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6
ZSYpOwogCi0gICAgSW50U2l6ZSByb290TGF5ZXJUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IEludFNpemUobV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdo
dCk7IH0KLSAgICBJbnRSZWN0IHJvb3RMYXllckNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yb290Q29udGVudFJlY3Q7IH0KICAgICB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCk7CiAKICAgICBUZXh0dXJlTWFuYWdlciogdGV4
dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyLmdldCgpOyB9CkBA
IC0xMzIsMTEgKzEzMSwxOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTGF5
ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNz
Q29udGV4dDNEKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVt
KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBs
YXllckxpc3QpOwogCisgICAgdm9pZCB1cGRhdGVMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xs
UG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXIoVGlsZVBhaW50
SW50ZXJmYWNlJiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOworICAgIHZvaWQgdXBkYXRl
Um9vdExheWVyU2Nyb2xsYmFycyhUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50LCBj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwor
ICAgIHZvaWQgdXBkYXRlRHJhd1N0YXRlQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVy
SW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5
ZXJMaXN0KTsKKyAgICB2b2lkIHBhaW50TGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsK
KworICAgIHZvaWQgZHJhd0xheWVycyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qKTsKIAotICAgIHZvaWQgdXBkYXRlQW5kRHJhd1Jvb3RMYXllcihU
aWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxi
YXJQYWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KTsKKyAgICB2b2lkIGRyYXdSb290TGF5ZXIoKTsKIAogICAgIGJvb2wgaXNMYXllclZp
c2libGUoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QpOwogCkBAIC0xNTQsOCArMTYwLDcgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICBzdGF0aWMgSW50UmVj
dCBob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogCi0gICAgaW50IG1fcm9vdExheWVyVGV4dHVyZVdp
ZHRoOwotICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CisgICAgSW50UmVjdCBtX3Zp
c2libGVSZWN0OwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4
OwogCkBAIC0xODUsOSArMTkwLDYgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9yb290TGF5
ZXJDYW52YXNTaXplOwogCi0gICAgSW50UmVjdCBtX3Jvb3RWaXNpYmxlUmVjdDsKLSAgICBJbnRS
ZWN0IG1fcm9vdENvbnRlbnRSZWN0OwotCiAgICAgLy8gTWF4aW11bSB0ZXh0dXJlIGRpbWVuc2lv
bnMgc3VwcG9ydGVkLgogICAgIGludCBtX21heFRleHR1cmVTaXplOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmNwcAppbmRleCBhMjg0NWUzZWI3Mjg0ZjdkZWQ0Mjg0MjE3OWE5
Y2I3ODhmMGIzZDcyLi41MjdjYjU4OGI0OWUyNzZhNTRmNWJiZjk4YzM5MDE0MDQwYzczYmJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKQEAgLTEwNiw3ICsxMDYsNiBA
QCB2b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd1N1cmZhY2UoQ0NMYXllckltcGwqIG1h
c2tMYXllciwgY29uc3QgVHJhbnNmb3JtYQogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0t
PmluaXRpYWxpemVkKCkpOwogICAgIGJvb2wgdXNlTWFzayA9IGZhbHNlOwogICAgIGlmIChtYXNr
TGF5ZXIgJiYgbWFza0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBtYXNrTGF5ZXIt
PnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOwogICAgICAgICBpZiAoIW1hc2tMYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjb250ZXh0M0QtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIobWFza1Byb2dyYW0t
PnByb2dyYW0oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNWI1YzVkNDNiZmRmZjMy
MjUzYzMwY2UzOWM3NmMzODFhOTA1Y2Q0My4uZWUyNTE0ZTQ4NGQ2YTJmZTU0ZDJmYTkxYmUxMmUx
MWNkOTVkZjEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTAzLDEyICsxMDMsNiBA
QCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNl
KCkKICAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOwogfQogCi0vLyBUaGlzIGRvZXMg
bm90IGJlbG9uZyBvbiBDQ0xheWVySW1wbC4KLXZvaWQgQ0NMYXllckltcGw6OnVwZGF0ZUNvbnRl
bnRzSWZEaXJ0eSgpCi17Ci0gICAgbV9vd25lci0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7Ci19
Ci0KIC8vIFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNob3VsZCBiZSBzdWJjbGFz
ZWQgYnkgZWFjaCB0eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlw
ZXMuCiBib29sIENDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKaW5kZXggNDkyNDBjOWUyYjM2ZmUwY2MzZDEzMTliZjkzZTI5ZTY1N2M3ZDVjYi4u
ZDA0ZDc2YWEwNGQ1NGZhYTQ2NjM1OTE0Y2QxZTUxNmY1OWIzNDMwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICBDQ0xheWVySW1wbCogbWFza0xh
eWVyKCkgY29uc3Q7CiAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0OwogCi0g
ICAgdm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKICAgICB2b2lkIGRyYXcoKTsKICAgICBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0
dXJlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA4ZTVkMDU4NjZkOTIyYzdkMzBl
MTM3MDAzYzhjZGQzYzc2MGU4ZWUuLmNlZjA0YzZiNDg0ZjYzOGRlOWY4ZTViODMxODFiOWQ0OGVh
YjExNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEt
MDItMjUgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFNlcGFyYXRl
IHRoZSAmcXVvdDt1cGRhdGUmcXVvdDsgYW5kICZxdW90O2RyYXcmcXVvdDsgcG9ydGlvbnMgb2Yg
TGF5ZXJSZW5kZXJlckNocm9taXVtJmFwb3M7cyBkcmF3TGF5ZXJzIGZ1bmN0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA0NworCisgICAgICAg
IENhbGwgdXBkYXRlZCBMYXllclJlbmRlcmVyQ2hyb21pdW0gQVBJcy4KKworICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb1BpeGVs
UmVhZGJhY2tUb0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6CisKIDIwMTEtMDIt
MjUgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSb2xsIGNocm9t
aXVtIGRlcHMgdG8gaW5jbHVkZSBSQkdUb0hTTCBmaXggYW5kIElDVSB1cGRhdGUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMDA1YWQyOTVkYmViZWFi
ZDVhMGRmMjU0YTA0MmJmYjM3NDdiNTEyNS4uYzFmNjhhYjcxZTlkZmUxY2RjYWNiZmM4N2QxOTVl
N2M1MTk3MWRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cApAQCAtMTAxNCw5ICsxMDE0LDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVh
ZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJUZXh0
dXJlU2l6ZSgpLndpZHRoKCkKLSAgICAgICAgICAgJiYgcmVjdC5tYXhZKCkgPD0gbV9sYXllclJl
bmRlcmVyLT5yb290TGF5ZXJUZXh0dXJlU2l6ZSgpLmhlaWdodCgpKTsKLQogI2lmIFVTRShTS0lB
KQogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgY29udGV4dChjYW52YXMpOwogCkBAIC0xMDU5LDcg
KzEwNTYsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29u
c3QgV2ViUmVjdCYgcmVjdCkKICAgICAgICAgaWYgKGNhbnZhcykgewogICAgICAgICAgICAgLy8g
Q2xpcCByZWN0IHRvIHRoZSBjb25maW5lcyBvZiB0aGUgcm9vdExheWVyVGV4dHVyZS4KICAgICAg
ICAgICAgIEludFJlY3QgcmVzaXplUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJlc2l6ZVJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJU
ZXh0dXJlU2l6ZSgpKSk7CisgICAgICAgICAgICByZXNpemVSZWN0LmludGVyc2VjdChJbnRSZWN0
KEludFBvaW50KCksIG1fbGF5ZXJSZW5kZXJlci0+dmlzaWJsZVJlY3RTaXplKCkpKTsKICAgICAg
ICAgICAgIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKGNhbnZhcywgcmVzaXplUmVjdCk7CiAgICAg
ICAgIH0KICNlbmRpZgpAQCAtMjQxNiw3ICsyNDEzLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9D
b21wb3NpdGUoKQogCiAgICAgV2ViVmlld0ltcGxTY3JvbGxiYXJQYWludEludGVyZmFjZSBzY3Jv
bGxiYXJQYWludCh0aGlzKTsKICAgICBtX2xheWVyUmVuZGVyZXItPnNldENvbXBvc2l0ZU9mZnNj
cmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCkpOwotICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIHNjcm9sbCwg
dGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCk7CisgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVB
bmREcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgc2Nyb2xsLCB0aWxlUGFpbnQs
IHNjcm9sbGJhclBhaW50KTsKICAgICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0aW5n
T2Zmc2NyZWVuKCkpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y29weU9mZnNjcmVlblRleHR1
cmVUb0Rpc3BsYXkoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84474</attachid>
            <date>2011-03-02 15:08:26 -0800</date>
            <delta_ts>2011-03-07 09:58:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54047-20110302150825.patch</filename>
            <type>text/plain</type>
            <size>28479</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODAwMTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDgzNWI0NTU1ZWFmZmU2
YmE0MjRlZTlmYzY4MGE2ODg1ZjE0ZDQwLi5mYmMxZGI3MDY0Nzk0NmM1M2FiOGIxMjkzNTc2ZTc4
ZmFhNWIzOTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDMtMDIgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFNlcGFyYXRlIHRoZSB1cGRhdGUg
YW5kIGRyYXcgcG9ydGlvbnMgb2YgTGF5ZXJSZW5kZXJlckNocm9taXVtJ3MgZHJhd0xheWVycyBm
dW5jdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTQwNDcKKworICAgICAgICBUaGlzIHNwbGl0cyB1cCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnMoKSBpbnRvIHR3byBwaGFzZXMsCisgICAgICAgIG9uZSB0aGF0IHVwZGF0ZXMgbGF5
ZXJzIGFuZCBvbmUgdGhhdCBhY3R1YWxseSBkcmF3cyB0aGVtLiAgTW9zdCBvZiB0aGUKKyAgICAg
ICAgcGF0Y2ggaXMgbW92aW5nIHRoZSBib2RpZXMgb2YgZHJhd0xheWVycygpIGFuZCB1cGRhdGVM
YXllcnNSZWN1cnNpdmUoKQorICAgICAgICBpbnRvIHNtYWxsZXIgaGVscGVyIGZ1bmN0aW9ucy4K
KworICAgICAgICBUaGUgbWFpbiBlbnRyeSBwb2ludCBpcyByZW5hbWVkIHVwZGF0ZUFuZERyYXdM
YXllcnMoKSwgYnV0IG90aGVyd2lzZQorICAgICAgICBoYXMgdGhlIHNhbWUgc2lnbmF0dXJlIGFz
IGRyYXdMYXllcnMoKSBkaWQuICBJbnRlcm5hbGx5IGl0IGRvZXMgdGhlCisgICAgICAgIGZvbGxv
d2luZzoKKworICAgICAgICAxLikgVXBkYXRlcyB0aGUgcm9vdCBsYXllcidzIGNvbnRlbnRzCisg
ICAgICAgIDIuKSBVcGRhdGVzIHRoZSByb290IGxheWVyJ3Mgc2Nyb2xsYmFycworICAgICAgICAz
LikgVXBkYXRlcyB0aGUgUmVuZGVyU3VyZmFjZSB0cmVlIGFuZCB0aGUgY29udGVudHMgb2YgYWxs
IGNoaWxkCisgICAgICAgIGxheWVycworICAgICAgICA0LikgRHJhd3MgdGhlIHJvb3QgbGF5ZXIg
YW5kIHJvb3QgbGF5ZXIgc2Nyb2xsYmFycworICAgICAgICA1LikgRHJhd3MgYWxsIGNoaWxkIGxh
eWVycyB1c2luZyB0aGUgcHJldmlvdXNseSB1cGRhdGVkCisgICAgICAgIENDTGF5ZXJJbXBsL1Jl
bmRlclN1cmZhY2UgZGF0YS4KKworICAgICAgICBBIGZldyB0aGluZ3Mgc3RpbGwgbmVlZCB0byBi
ZSBkb25lIGFmdGVyIHRoaXMgcGF0Y2ggdG8gY29tcGxldGUgdGhlIHNlcGFyYXRpb24KKyAgICAg
ICAgb2YgdGhlIHVwZGF0ZSBhbmQgZHJhdyBzdGVwLCBidXQgdGhleSBjYW4gaGFwcGVuIGluIGxh
dGVyIHBhdGNoZXM6CisgICAgICAgICopIFRoZSByb290IGxheWVyIGFuZCByb290IGxheWVyIHNj
cm9sbGJhcnMgY29udGVudHMgc2hvdWxkIGJlCisgICAgICAgIHVwbG9hZGVkIHRvIHRleHR1cmVz
IGF0IGRyYXcgdGltZSwgbm90IHVwZGF0ZSB0aW1lLgorICAgICAgICAqKSBUaGUgUmVuZGVyU3Vy
ZmFjZSB0cmVlIHNob3VsZCBiZSB1cGRhdGVkIGF0IGRyYXcgdGltZSwgbm90IHVwZGF0ZQorICAg
ICAgICB0aW1lLgorCisgICAgICAgIENvdmVyZWQgYnkgdGhlIGNvbXBvc2l0aW5nLyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVy
UmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp2aXNpYmxlUmVjdFNpemUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKwogMjAxMS0wMi0y
MyAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzRiODY4NzA4YTI1ZDdjMjUwMjU3MjQyMDIyYTRmYmRmZThj
ZmNhYy4uMmQwMTIxNWYzY2IyYzMxNTk3ZGNiMjE4NzE2NzVhMDMxMGM4ZGNlZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgogCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJDYW52YXMyRExh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMTAyLDkgKzEwMyw3IEBAIFBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRy
PEdyYXBoCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCi0gICAgOiBtX3Jvb3RMYXll
clRleHR1cmVXaWR0aCgwKQotICAgICwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KDApCi0gICAg
LCBtX3Jvb3RMYXllcigwKQorICAgIDogbV9yb290TGF5ZXIoMCkKICAgICAsIG1fc2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fY3VycmVudFNoYWRlcigwKQogICAgICwg
bV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQpAQCAtMTc0LDExICsxNzMsMTMgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCwgY28KICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVBbmREcmF3Um9vdExheWVyKFRpbGVQYWludEludGVyZmFjZSYgdGlsZVBhaW50LCBUaWxl
UGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQs
IGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQogewogICAgIG1fcm9vdExheWVyVGlsZXItPnVw
ZGF0ZSh0aWxlUGFpbnQsIHZpc2libGVSZWN0KTsKLSAgICBtX3Jvb3RMYXllclRpbGVyLT5kcmF3
KHZpc2libGVSZWN0KTsKK30KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJv
b3RMYXllclNjcm9sbGJhcnMoVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCwgY29u
c3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQorewog
ICAgIGlmICh2aXNpYmxlUmVjdC53aWR0aCgpID4gY29udGVudFJlY3Qud2lkdGgoKSkgewogICAg
ICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXJSZWN0KHZp
c2libGVSZWN0LCBjb250ZW50UmVjdCk7CiAgICAgICAgIEludFNpemUgdGlsZVNpemUgPSB2ZXJ0
aWNhbFNjcm9sbGJhci5zaXplKCkuc2hydW5rVG8oSW50U2l6ZShtX21heFRleHR1cmVTaXplLCBt
X21heFRleHR1cmVTaXplKSk7CkBAIC0xODgsOCArMTg5LDggQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVwZGF0ZUFuZERyYXdSb290TGF5ZXIoVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxl
UGFpbnQKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+c2V0VGlsZVNpemUo
dGlsZVNpemUpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXItPnNldExheWVyUG9z
aXRpb24odmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CiAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXJUaWxlci0+dXBkYXRlKHNjcm9sbGJhclBhaW50LCB2aXNpYmxlUmVjdCk7Ci0gICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXJUaWxlci0+ZHJhdyh2aXNpYmxlUmVjdCk7Ci0gICAgfQor
ICAgIH0gZWxzZQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIuY2xlYXIoKTsKIAog
ICAgIGlmICh2aXNpYmxlUmVjdC5oZWlnaHQoKSA+IGNvbnRlbnRSZWN0LmhlaWdodCgpKSB7CiAg
ICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXJS
ZWN0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCk7CkBAIC0yMDAsNDIgKzIwMSw5NCBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxlUGFpbnRJ
bnRlcmZhY2UmIHRpbGVQYWludAogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGls
ZXItPnNldFRpbGVTaXplKHRpbGVTaXplKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
VGlsZXItPnNldExheWVyUG9zaXRpb24oaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGlsZXItPnVwZGF0ZShzY3JvbGxiYXJQYWlu
dCwgdmlzaWJsZVJlY3QpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJUaWxlci0+ZHJh
dyh2aXNpYmxlUmVjdCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXJUaWxlci5jbGVhcigpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1Jvb3RMYXllcigpCit7CisgICAgbV9yb290TGF5ZXJUaWxlci0+ZHJhdyhtX3Zpc2libGVS
ZWN0KTsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyVGlsZXIpCisgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXJUaWxlci0+ZHJhdyhtX3Zpc2libGVSZWN0KTsKKworICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxiYXJUaWxlcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyVGls
ZXItPmRyYXcobV92aXNpYmxlUmVjdCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgVGlsZVBhaW50SW50ZXJmYWNlJiB0aWxlUGFpbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWxlUGFpbnRJbnRlcmZh
Y2UmIHNjcm9sbGJhclBhaW50KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFu
ZERyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWxlUGFpbnRJbnRlcmZhY2UmIHRp
bGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQYWludCkKIHsKICAgICBBU1NF
UlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKIAogICAgIGlmICghbV9yb290TGF5ZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVwZGF0ZVJvb3RM
YXllckNvbnRlbnRzKHRpbGVQYWludCwgdmlzaWJsZVJlY3QpOworICAgIC8vIFJlY2hlY2sgdGhh
dCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gVGhpcyBtYXkgYmVjb21lIG51bGwgaWYKKyAg
ICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEgcGFpbnQgb3BlcmF0aW9u
LgorICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHVwZGF0ZVJv
b3RMYXllclNjcm9sbGJhcnMoc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0LCBjb250ZW50UmVj
dCk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIHVwZGF0ZUxheWVycyh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIHNjcm9sbFBvc2l0aW9u
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIGRyYXdMYXllcnMocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KQoreworICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290TGF5ZXIt
PmNjTGF5ZXJJbXBsKCk7CisKKyAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSkKKyAgICAgICAgcm9vdERyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIEFT
U0VSVChyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogCiAgICAgLy8gSWYgdGhlIHNp
emUgb2YgdGhlIHZpc2libGUgYXJlYSBoYXMgY2hhbmdlZCB0aGVuIGFsbG9jYXRlIGEgbmV3IHRl
eHR1cmUKICAgICAvLyB0byBzdG9yZSB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgYW5k
IGFkanVzdCB0aGUgcHJvamVjdGlvbiBtYXRyaXgKICAgICAvLyBhbmQgdmlld3BvcnQuCi0gICAg
aW50IHZpc2libGVSZWN0V2lkdGggPSB2aXNpYmxlUmVjdC53aWR0aCgpOwotICAgIGludCB2aXNp
YmxlUmVjdEhlaWdodCA9IHZpc2libGVSZWN0LmhlaWdodCgpOwotCi0gICAgaWYgKCFtX3Jvb3RM
YXllci0+Y2NMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBtX3Jvb3RMYXll
ci0+Y2NMYXllckltcGwoKS0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIG1fcm9vdExheWVy
LT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPm1fY29udGVudFJlY3QgPSBJbnRSZWN0
KDAsIDAsIHZpc2libGVSZWN0V2lkdGgsIHZpc2libGVSZWN0SGVpZ2h0KTsKIAotICAgIGlmICh2
aXNpYmxlUmVjdFdpZHRoICE9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoIHx8IHZpc2libGVSZWN0
SGVpZ2h0ICE9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkgewotICAgICAgICBtX3Jvb3RMYXll
clRleHR1cmVXaWR0aCA9IHZpc2libGVSZWN0V2lkdGg7Ci0gICAgICAgIG1fcm9vdExheWVyVGV4
dHVyZUhlaWdodCA9IHZpc2libGVSZWN0SGVpZ2h0OworICAgIHJvb3REcmF3TGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+bV9jb250ZW50UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHZpc2li
bGVSZWN0LnNpemUoKSk7CiAKKyAgICBpZiAodmlzaWJsZVJlY3Quc2l6ZSgpICE9IG1fdmlzaWJs
ZVJlY3Quc2l6ZSgpKSB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHJlbmRlciBzdXJm
YWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3BvcnQgYW5kCiAgICAgICAgIC8vIHBy
b2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJTdXJmYWNlIGlzIGNhbGxlZC4KICAg
ICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7CiAgICAgfQorICAgIG1fdmlzaWJsZVJl
Y3QgPSB2aXNpYmxlUmVjdDsKKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlv
bjsKKyAgICAvLyBTY2lzc29yIG91dCB0aGUgc2Nyb2xsYmFycyB0byBhdm9pZCByZW5kZXJpbmcg
b24gdG9wIG9mIHRoZW0uCisgICAgSW50UmVjdCByb290U2Npc3NvclJlY3QoY29udGVudFJlY3Qp
OworICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBv
ZmZzZXQuCisgICAgcm9vdFNjaXNzb3JSZWN0Lm1vdmUoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAt
bV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHJvb3REcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0
KHJvb3RTY2lzc29yUmVjdCk7CisKKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9vdERy
YXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOworCisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocm9vdERyYXdMYXllcik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigp
OworICAgIC8vIFVuZm9ydHVuYXRlbHksIHVwZGF0ZURyYXdTdGF0ZUFuZFJlbmRlclN1cmZhY2Vz
UmVjdXJzaXZlKCkgY3VycmVudGx5IGJvdGggdXBkYXRlcyB0aGUgbGF5ZXJzIGFuZCB1cGRhdGVz
IHRoZSBkcmF3IHN0YXRlCisgICAgLy8gKHRyYW5zZm9ybXMsIGV0YykuIEl0J2QgYmUgbmljZXIg
aWYgb3BlcmF0aW9ucyBvbiB0aGUgcHJlc2VudGF0aW9uIGxheWVycyBoYXBwZW5lZCBsYXRlciwg
YnV0IHRoZSBkcmF3CisgICAgLy8gdHJhbnNmb3JtcyBhcmUgbmVlZGVkIGJ5IGxhcmdlIGxheWVy
cyB0byBkZXRlcm1pbmUgdmlzaWJpbGl0eS4gVGlsaW5nIHdpbGwgZml4IHRoaXMgYnkgZWxpbWlu
YXRpbmcgdGhlCisgICAgLy8gY29uY2VwdCBvZiBhIGxhcmdlIGNvbnRlbnQgbGF5ZXIuCisgICAg
dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKG1fcm9vdExheWVyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFj
ZS0+bV9sYXllckxpc3QpOworCisgICAgdXBkYXRlQ29udGVudHNSZWN1cnNpdmUobV9yb290TGF5
ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhj
b25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAg
ICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdExheWVyLT5jY0xheWVySW1wbCgp
OworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgLy8gVGhlIEdMIHZpZXdwb3J0IGNv
dmVycyB0aGUgZW50aXJlIHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXJzLgot
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgdmlzaWJs
ZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fdmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aXNp
YmxlUmVjdC5oZWlnaHQoKSkpOwogCiAgICAgLy8gQmluZCB0aGUgY29tbW9uIHZlcnRleCBhdHRy
aWJ1dGVzIHVzZWQgZm9yIGRyYXdpbmcgYWxsIHRoZSBsYXllcnMuCiAgICAgbV9zaGFyZWRHZW9t
ZXRyeS0+cHJlcGFyZUZvckRyYXcoKTsKQEAgLTI0NywxMSArMzAwLDYgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNv
bnN0IEludFJlY3QKICAgICAvLyBCbGVuZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0LiBSb290IGxh
eWVyIGFscGhhIGNoYW5uZWwgb24gV2luZG93cyBpcyBpbmNvcnJlY3Qgd2hlbiBTa2lhIHVzZXMg
Q2xlYXJUeXBlLgogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKIAotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBzY3Jv
bGxQb3NpdGlvbjsKLQotICAgIEFTU0VSVChtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+cmVu
ZGVyU3VyZmFjZSgpKTsKLSAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gbV9yb290TGF5ZXIt
PmNjTGF5ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKTsKLQogICAgIHVzZVJlbmRlclN1cmZhY2Uo
bV9kZWZhdWx0UmVuZGVyU3VyZmFjZSk7CiAKICAgICAvLyBDbGVhciB0byBibHVlIHRvIG1ha2Ug
aXQgZWFzaWVyIHRvIHNwb3QgdW5yZW5kZXJlZCByZWdpb25zLgpAQCAtMjYyLDMzICszMTAsMTEg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QKICAgICAvLyB6ZXJvIGFscGhhIHZhbHVlcyBvbiB0
ZXh0IGdseXBocy4gVGhlIHJvb3QgbGF5ZXIgaXMgYWx3YXlzIG9wYXF1ZS4KICAgICBtX2NvbnRl
eHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CiAKLSAgICB1cGRhdGVBbmRE
cmF3Um9vdExheWVyKHRpbGVQYWludCwgc2Nyb2xsYmFyUGFpbnQsIHZpc2libGVSZWN0LCBjb250
ZW50UmVjdCk7CisgICAgZHJhd1Jvb3RMYXllcigpOwogCiAgICAgLy8gUmUtZW5hYmxlIGNvbG9y
IHdyaXRlcyB0byBsYXllcnMsIHdoaWNoIG1heSBiZSBwYXJ0aWFsbHkgdHJhbnNwYXJlbnQuCiAg
ICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAKLSAgICAv
LyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuICBUaGlzIG1heSBiZWNv
bWUgbnVsbCBpZgotICAgIC8vIGNvbXBvc2l0aW5nIGdldHMgdHVybmVkIG9mZiBkdXJpbmcgYSBw
YWludCBvcGVyYXRpb24uCi0gICAgaWYgKCFtX3Jvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gU2V0IHRoZSByb290IHZpc2libGUvY29udGVudCByZWN0cyAtLS0gdXNlZCBieSBz
dWJzZXF1ZW50IGRyYXdMYXllcnMgY2FsbHMuCi0gICAgbV9yb290VmlzaWJsZVJlY3QgPSB2aXNp
YmxlUmVjdDsKLSAgICBtX3Jvb3RDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OwotCi0gICAgLy8g
U2Npc3NvciBvdXQgdGhlIHNjcm9sbGJhcnMgdG8gYXZvaWQgcmVuZGVyaW5nIG9uIHRvcCBvZiB0
aGVtLgotICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAvLyBU
aGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgotICAg
IHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3Njcm9sbFBvc2l0aW9uLngoKSwgLW1fc2Nyb2xsUG9z
aXRpb24ueSgpKTsKLSAgICBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+c2V0U2Npc3NvclJl
Y3Qocm9vdFNjaXNzb3JSZWN0KTsKLQotICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1
cmZhY2VMYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobV9yb290
TGF5ZXItPmNjTGF5ZXJJbXBsKCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7Ci0gICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIo
KTsKLSAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5t
X2xheWVyTGlzdCk7Ci0KICAgICAvLyBUaGUgc2hhZGVyIHVzZWQgdG8gcmVuZGVyIGxheWVycyBy
ZXR1cm5zIHByZS1tdWx0aXBsaWVkIGFscGhhIGNvbG9ycwogICAgIC8vIHNvIHdlIG5lZWQgdG8g
c2VuZCB0aGUgYmxlbmRpbmcgbW9kZSBhcHByb3ByaWF0ZWx5LgogICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwpAQCAt
MzA4LDcgKzMzNCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNv
bnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0CiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSkpIHsKLSAgICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIg
IT0gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCkpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJT
dXJmYWNlTGF5ZXIgIT0gcm9vdERyYXdMYXllcikgewogICAgICAgICAgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSk7CiAgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJf
QklUKSk7CkBAIC0zNTQsOCArMzgwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNl
dFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyKQogCiB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSByb290TGF5ZXJU
ZXh0dXJlU2l6ZSgpLndpZHRoKCkKLSAgICAgICAgICAgJiYgcmVjdC5tYXhZKCkgPD0gcm9vdExh
eWVyVGV4dHVyZVNpemUoKS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKHJlY3QubWF4WCgpIDw9IHZp
c2libGVSZWN0U2l6ZSgpLndpZHRoKCkgJiYgcmVjdC5tYXhZKCkgPD0gdmlzaWJsZVJlY3RTaXpl
KCkuaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybjsKQEAgLTQw
OCw3ICs0MzMsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2libGUo
TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybQogCiAvLyBSZWN1cnNpdmVseSB3
YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0
ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5n
bGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0KQordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhM
YXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3Rv
cjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QpCiB7CiAgICAgbGF5ZXItPnNldExheWVyUmVuZGVy
ZXIodGhpcyk7CiAgICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1w
bCgpOwpAQCAtNDY0LDcgKzQ4OSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAgICAgLy8g
b2YgdGhlaXIgcGFyZW50LgogICAgIGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0gbGF5ZXIt
Pm1hc2tzVG9Cb3VuZHMoKSAmJiAhaXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zv
cm0pOwogICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpICE9
IDEgJiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tp
bmcgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9
IGxheWVyLT5tYXNrRHJhd0xheWVyKCk7CiAgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlv
biA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKICAgICBpZiAoKCh1c2VTdXJmYWNlRm9yQ2xpcHBp
bmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdDb250
ZW50KCkpCiAgICAgICAgIHx8IHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JS
ZWZsZWN0aW9uKSB7CkBAIC00NzMsNyArNDk4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHIK
ICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKIAogICAgICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBpcyB0aGUg
dXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBkcmF3VHJhbnNmb3JtOzsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1Ry
YW5zZm9ybTsKICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMu
d2lkdGgoKSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgZHJhd0xheWVyLT5z
ZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwogCkBAIC00ODEsNyArNTA2LDcgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9t
aXVtKiBsYXllciwgY29uc3QgVHIKIAogICAgICAgICAvLyBMYXllcidzIG9wYWNpdHkgd2lsbCBi
ZSBhcHBsaWVkIHdoZW4gZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2UuCiAgICAgICAgIHJlbmRl
clN1cmZhY2UtPm1fZHJhd09wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOwotICAgICAgICBpZiAo
bGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkKKyAgICAgICAgaWYgKGxheWVyLT5z
dXBlcmxheWVyKCkgJiYgbGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkKICAgICAg
ICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgKj0gZHJhd0xheWVyLT5zdXBlcmxh
eWVyKCktPmRyYXdPcGFjaXR5KCk7CiAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHko
MSk7CiAKQEAgLTQ5OCw3ICs1MjMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcgogICAgICAg
ICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3Qg
dGhhdCBuZWVkcyB0bwogICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSBy
ZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCiAgICAgICAgIC8vIHN1cmZhY2UgYW5k
IGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHN1cGVybGF5ZXIncyBjb29yZGluYXRlIHN5
c3RlbS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGRyYXdMYXllci0+
c3VwZXJsYXllcigpLT5zY2lzc29yUmVjdCgpOworICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3Nj
aXNzb3JSZWN0ID0gZHJhd0xheWVyLT5zdXBlcmxheWVyKCkgPyBkcmF3TGF5ZXItPnN1cGVybGF5
ZXIoKS0+c2Npc3NvclJlY3QoKSA6IGRyYXdMYXllci0+c2Npc3NvclJlY3QoKTsKIAogICAgICAg
ICByZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOwogCkBAIC01NDksNyArNTc0LDcg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXll
ckNocm9taXVtKiBsYXllciwgY29uc3QgVHIKICAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRS
ZW5kZXJTdXJmYWNlKGRyYXdMYXllci0+c3VwZXJsYXllcigpLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCkpOwogICAgIH0KIAotICAgIC8vIG1fZHJhd2FibGVDb250ZW50UmVjdCBpcyBhbHdheXMgc3Rv
cmVkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUKKyAgICAvLyBkcmF3YWJsZUNvbnRl
bnRSZWN0KCkgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
CiAgICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KICAgICBpZiAoZHJh
d0xheWVyLT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNv
bnRlbnRSZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKQEAgLTU4NCw3ICs2MDksNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21p
dW0qIGxheWVyLCBjb25zdCBUcgogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENDTGF5ZXJJbXBs
KiBzdWJsYXllciA9IHN1YmxheWVyc1tpXS0+Y2NMYXllckltcGwoKTsKLSAgICAgICAgdXBkYXRl
TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgc3VibGF5ZXJNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKKyAgICAgICAgdXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKHN1YmxheWVyc1tpXS5nZXQoKSwgc3VibGF5ZXJNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKIAogICAgICAgICBpZiAoc3VibGF5
ZXItPnJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVt
KiBzdWJsYXllclJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+cmVuZGVyU3VyZmFjZSgpOwpAQCAt
NjEyLDYgKzYzNyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNS
ZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyCiAKICAgICAgICAgLy8gUmVz
dHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3MgdmlzaWJs
ZS4KICAgICAgICAgRmxvYXRTaXplIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7CisKICAgICAg
ICAgLy8gRG9uJ3QgY2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVmbGVjdGVkIGFzIHRoZSByZWZsZWN0
aW9uIHNob3VsZG4ndCBiZQogICAgICAgICAvLyBjbGlwcGVkLgogICAgICAgICBpZiAoIWxheWVy
LT5yZXBsaWNhTGF5ZXIoKSkgewpAQCAtNjY0LDYgKzY5MCwyMiBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBUcgogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5
ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsKIH0KIAordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21p
dW0qIGxheWVyKQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
c3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKQorICAgICAgICB1cGRhdGVDb250ZW50c1JlY3Vy
c2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOworCisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQo
KSkKKyAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOworICAgIGlmIChsYXll
ci0+bWFza0xheWVyKCkgJiYgbGF5ZXItPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKKyAg
ICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKKyAgICBp
ZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+ZHJhd3ND
b250ZW50KCkpCisgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dXBkYXRlQ29udGVudHNJ
ZkRpcnR5KCk7CisgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVy
KCktPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tM
YXllcigpLT51cGRhdGVDb250ZW50c0lmRGlydHkoKTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNjcmVlbikK
IHsKICAgICBpZiAobV9jb21wb3NpdGVPZmZzY3JlZW4gPT0gY29tcG9zaXRlT2Zmc2NyZWVuKQpA
QCAtNzUyLDExICs3OTQsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
KENDTGF5ZXJJbXBsKiBsYXllciwgUmVuZGVyU3VyZmFjZUNocm9taXVtKgogICAgIGlmICghbGF5
ZXItPmRvdWJsZVNpZGVkKCkgJiYgY29tYmluZWREcmF3TWF0cml4Lm0zMygpIDwgMCkKICAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAg
bGF5ZXItPnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOwotICAgICAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAg
IGxheWVyLT5kcmF3KCk7Ci0gICAgfQogCiAgICAgLy8gRHJhdyB0aGUgZGVidWcgYm9yZGVyIGlm
IHRoZXJlIGlzIG9uZS4KICAgICBsYXllci0+ZHJhd0RlYnVnQm9yZGVyKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDEwYjUwM2E0ZGIzMGIyM2RmNjU0Zjg1OGYyYzg5
ZmMwY2EzZmRiMDIuLjc4NTgxZjU1NTNkMjMyZmFhNDFhNjhiN2FmNWRmZGUyNGE4ODE1ZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC03Myw5ICs3Myw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKIAogICAgIC8vIHVwZGF0ZXMgYW5kIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBvbnRv
IHRoZSBiYWNrYnVmZmVyCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBUaWxlUGFpbnRJbnRlcmZhY2UmIHRpbGVQ
YWludCwKLSAgICAgICAgICAgICAgICAgICAgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQ
YWludCk7CisgICAgdm9pZCB1cGRhdGVBbmREcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9s
bFBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWxlUGFpbnRJbnRlcmZh
Y2UmLCBUaWxlUGFpbnRJbnRlcmZhY2UmIHNjcm9sbGJhclBhaW50KTsKIAogICAgIC8vIHdhaXRz
IGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKQEAgLTgzLDYgKzgy
LDggQEAgcHVibGljOgogICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgogICAgIHZvaWQg
cHJlc2VudCgpOwogCisgICAgSW50U2l6ZSB2aXNpYmxlUmVjdFNpemUoKSBjb25zdCB7IHJldHVy
biBtX3Zpc2libGVSZWN0LnNpemUoKTsgfQorCiAgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1Jl
ZlB0cjxMYXllckNocm9taXVtPiBsYXllcik7CiAgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
KCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zZmVyUm9vdExh
eWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogb3RoZXIpIHsgb3RoZXItPm1fcm9vdExheWVyID0g
bV9yb290TGF5ZXIucmVsZWFzZSgpOyB9CkBAIC0xMjIsOCArMTIzLDYgQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYpOwogCi0gICAgSW50
U2l6ZSByb290TGF5ZXJUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9yb290
TGF5ZXJUZXh0dXJlV2lkdGgsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCk7IH0KLSAgICBJbnRS
ZWN0IHJvb3RMYXllckNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yb290Q29udGVudFJl
Y3Q7IH0KICAgICB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3Qg
SW50UmVjdCYgcmVjdCk7CiAKICAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIoKSBj
b25zdCB7IHJldHVybiBtX3RleHR1cmVNYW5hZ2VyLmdldCgpOyB9CkBAIC0xMzIsMTEgKzEzMSwx
OCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGdyYXBoaWNzQ29udGV4dDNEKTsKLSAg
ICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QpOwogCisg
ICAgdm9pZCB1cGRhdGVMYXllcnMoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cyhUaWxlUGFpbnRJbnRlcmZh
Y2UmLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CisgICAgdm9pZCB1cGRhdGVSb290TGF5
ZXJTY3JvbGxiYXJzKFRpbGVQYWludEludGVyZmFjZSYgc2Nyb2xsYmFyUGFpbnQsIGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CisgICAgdm9p
ZCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSosIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0
KTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKKwor
ICAgIHZvaWQgZHJhd0xheWVycyhjb25zdCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qKTsKIAotICAgIHZvaWQgdXBkYXRlQW5kRHJhd1Jvb3RMYXllcihUaWxl
UGFpbnRJbnRlcmZhY2UmIHRpbGVQYWludCwgVGlsZVBhaW50SW50ZXJmYWNlJiBzY3JvbGxiYXJQ
YWludCwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0KTsKKyAgICB2b2lkIGRyYXdSb290TGF5ZXIoKTsKIAogICAgIGJvb2wgaXNMYXllclZpc2li
bGUoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QpOwogCkBAIC0xNTQsOCArMTYwLDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICBzdGF0aWMgSW50UmVjdCBo
b3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QpOwogCi0gICAgaW50IG1fcm9vdExheWVyVGV4dHVyZVdpZHRo
OwotICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CisgICAgSW50UmVjdCBtX3Zpc2li
bGVSZWN0OwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4Owog
CkBAIC0xODUsOSArMTkwLDYgQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9yb290TGF5ZXJD
YW52YXNTaXplOwogCi0gICAgSW50UmVjdCBtX3Jvb3RWaXNpYmxlUmVjdDsKLSAgICBJbnRSZWN0
IG1fcm9vdENvbnRlbnRSZWN0OwotCiAgICAgLy8gTWF4aW11bSB0ZXh0dXJlIGRpbWVuc2lvbnMg
c3VwcG9ydGVkLgogICAgIGludCBtX21heFRleHR1cmVTaXplOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVy
U3VyZmFjZUNocm9taXVtLmNwcAppbmRleCBhMjg0NWUzZWI3Mjg0ZjdkZWQ0Mjg0MjE3OWE5Y2I3
ODhmMGIzZDcyLi41MjdjYjU4OGI0OWUyNzZhNTRmNWJiZjk4YzM5MDE0MDQwYzczYmJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJT
dXJmYWNlQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKQEAgLTEwNiw3ICsxMDYsNiBAQCB2
b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd1N1cmZhY2UoQ0NMYXllckltcGwqIG1hc2tM
YXllciwgY29uc3QgVHJhbnNmb3JtYQogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmlu
aXRpYWxpemVkKCkpOwogICAgIGJvb2wgdXNlTWFzayA9IGZhbHNlOwogICAgIGlmIChtYXNrTGF5
ZXIgJiYgbWFza0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBtYXNrTGF5ZXItPnVw
ZGF0ZUNvbnRlbnRzSWZEaXJ0eSgpOwogICAgICAgICBpZiAoIW1hc2tMYXllci0+Ym91bmRzKCku
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjb250ZXh0M0QtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIobWFza1Byb2dyYW0tPnBy
b2dyYW0oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNWI1YzVkNDNiZmRmZjMyMjUz
YzMwY2UzOWM3NmMzODFhOTA1Y2Q0My4uZWUyNTE0ZTQ4NGQ2YTJmZTU0ZDJmYTkxYmUxMmUxMWNk
OTVkZjEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTAzLDEyICsxMDMsNiBAQCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkK
ICAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOwogfQogCi0vLyBUaGlzIGRvZXMgbm90
IGJlbG9uZyBvbiBDQ0xheWVySW1wbC4KLXZvaWQgQ0NMYXllckltcGw6OnVwZGF0ZUNvbnRlbnRz
SWZEaXJ0eSgpCi17Ci0gICAgbV9vd25lci0+dXBkYXRlQ29udGVudHNJZkRpcnR5KCk7Ci19Ci0K
IC8vIFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNob3VsZCBiZSBzdWJjbGFzZWQg
YnkgZWFjaCB0eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMu
CiBib29sIENDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmgKaW5kZXggNDkyNDBjOWUyYjM2ZmUwY2MzZDEzMTliZjkzZTI5ZTY1N2M3ZDVjYi4uZDA0
ZDc2YWEwNGQ1NGZhYTQ2NjM1OTE0Y2QxZTUxNmY1OWIzNDMwMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICBDQ0xheWVySW1wbCogbWFza0xheWVy
KCkgY29uc3Q7CiAgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0OwogCi0gICAg
dm9pZCB1cGRhdGVDb250ZW50c0lmRGlydHkoKTsKICAgICB2b2lkIGRyYXcoKTsKICAgICBib29s
IGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDFmZGI4NWJiY2QwZWMxNDA0ZTRmYjY1
NDE3YzdhZTA0YTdiMTRmODIuLjMyYWE0MDI4ZWY1YmM0N2IwZDg4YmU3N2VjYWZlODMwODllYmYy
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMt
MDIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFNlcGFyYXRlIHRo
ZSAmcXVvdDt1cGRhdGUmcXVvdDsgYW5kICZxdW90O2RyYXcmcXVvdDsgcG9ydGlvbnMgb2YgTGF5
ZXJSZW5kZXJlckNocm9taXVtJmFwb3M7cyBkcmF3TGF5ZXJzIGZ1bmN0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA0NworCisgICAgICAgIENh
bGwgdXBkYXRlZCBMYXllclJlbmRlcmVyQ2hyb21pdW0gQVBJcy4KKworICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb1BpeGVsUmVh
ZGJhY2tUb0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSk6CisKIDIwMTEtMDItMjgg
IENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBSeW9z
dWtlIE5pd2EuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5k
ZXggMDA1YWQyOTVkYmViZWFiZDVhMGRmMjU0YTA0MmJmYjM3NDdiNTEyNS4uYzFmNjhhYjcxZTlk
ZmUxY2RjYWNiZmM4N2QxOTVlN2M1MTk3MWRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTAxNCw5ICsxMDE0LDYgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6bGF5b3V0KCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFdlYlZp
ZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqIGNhbnZhcywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gbV9sYXllclJlbmRl
cmVyLT5yb290TGF5ZXJUZXh0dXJlU2l6ZSgpLndpZHRoKCkKLSAgICAgICAgICAgJiYgcmVjdC5t
YXhZKCkgPD0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXJUZXh0dXJlU2l6ZSgpLmhlaWdodCgp
KTsKLQogI2lmIFVTRShTS0lBKQogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgY29udGV4dChjYW52
YXMpOwogCkBAIC0xMDU5LDcgKzEwNTYsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJD
YW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKICAgICAgICAgaWYgKGNhbnZhcykg
ewogICAgICAgICAgICAgLy8gQ2xpcCByZWN0IHRvIHRoZSBjb25maW5lcyBvZiB0aGUgcm9vdExh
eWVyVGV4dHVyZS4KICAgICAgICAgICAgIEludFJlY3QgcmVzaXplUmVjdChyZWN0KTsKLSAgICAg
ICAgICAgIHJlc2l6ZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9sYXllclJl
bmRlcmVyLT5yb290TGF5ZXJUZXh0dXJlU2l6ZSgpKSk7CisgICAgICAgICAgICByZXNpemVSZWN0
LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIG1fbGF5ZXJSZW5kZXJlci0+dmlzaWJsZVJl
Y3RTaXplKCkpKTsKICAgICAgICAgICAgIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKGNhbnZhcywg
cmVzaXplUmVjdCk7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMjQxNiw3ICsyNDEzLDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogCiAgICAgV2ViVmlld0ltcGxTY3JvbGxiYXJQ
YWludEludGVyZmFjZSBzY3JvbGxiYXJQYWludCh0aGlzKTsKICAgICBtX2xheWVyUmVuZGVyZXIt
PnNldENvbXBvc2l0ZU9mZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFi
bGVkKCkpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycyh2aXNpYmxlUmVjdCwgY29u
dGVudFJlY3QsIHNjcm9sbCwgdGlsZVBhaW50LCBzY3JvbGxiYXJQYWludCk7CisgICAgbV9sYXll
clJlbmRlcmVyLT51cGRhdGVBbmREcmF3TGF5ZXJzKHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwg
c2Nyb2xsLCB0aWxlUGFpbnQsIHNjcm9sbGJhclBhaW50KTsKICAgICBpZiAobV9sYXllclJlbmRl
cmVyLT5pc0NvbXBvc2l0aW5nT2Zmc2NyZWVuKCkpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIH0K
</data>
<flag name="review"
          id="76453"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>