<?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>117211</bug_id>
          
          <creation_ts>2013-06-04 15:05:45 -0700</creation_ts>
          <short_desc>[BlackBerry] LayerTiler fails to tile really big layers</short_desc>
          <delta_ts>2013-06-14 08:00:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>117067</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Arvid Nilsson">anilsson</reporter>
          <assigned_to name="Arvid Nilsson">anilsson</assigned_to>
          <cc>anilsson</cc>
    
    <cc>anlo</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jpetsovits</cc>
    
    <cc>mlattanzio</cc>
    
    <cc>rwlbuis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>897053</commentid>
    <comment_count>0</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-04 15:05:45 -0700</bug_when>
    <thetext>The reason is that LayerTiler computes which tiles are visible by exhaustively mapping every tile to normalized device coordinates and checking if it intersects the viewport. If there&apos;s a lot of tiles, it gets stuck in this loop, iterating over all tiles, for a very long time. Also, the visibility information is transferred to the WebKit thread using mutexes, which adds unnecessary mutex contention to the mix.

We can fix this by doing the reverse calculation, unprojecting the visible part of the layer to layer coordinate space to find which tiles are visible. We can use the w-coordinates of triangle vertices to perform &quot;perspective correct texturing&quot; of the intersection points, which is equivalent to unprojection since perspective correct texturing computes a 2D-coordinate in (normalized) layer coordinate space which is easily scaled up to the layer bounds and get the visible region expressed in layer coordinate space.

We approximate this visible area using a rectangle, and suddenly we have a much simpler representation of tile visibility. A set of tiles needing render are added to the layer visibility data structure, and suddenly we have a swappable data structure so visbility can be transferred to WebKit thread without mutexes, but instead using atomic swap.

This patch depends on the fix for bug #117067 to be landed before it can apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897066</commentid>
    <comment_count>1</comment_count>
      <attachid>203731</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-04 15:29:07 -0700</bug_when>
    <thetext>Created attachment 203731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897072</commentid>
    <comment_count>2</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-04 15:38:10 -0700</bug_when>
    <thetext>This also fixes a bug where you&apos;d get a flash of white (or background color) for unpopulated tiles after zooming out, due to WebKit thread using stale visibility information. Now, visibility is expressed as a rectangle in document coordinates, and can&apos;t get stale since it&apos;s decoupled from the &quot;transformed&quot; coordinate system change caused by retiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897073</commentid>
    <comment_count>3</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-04 15:38:35 -0700</bug_when>
    <thetext>I forgot to mention, this is PR 273550</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897074</commentid>
    <comment_count>4</comment_count>
      <attachid>203732</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-04 15:40:28 -0700</bug_when>
    <thetext>Created attachment 203732
Patch

Add PR number to ChangeLog entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898299</commentid>
    <comment_count>5</comment_count>
      <attachid>203732</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2013-06-07 14:53:52 -0700</bug_when>
    <thetext>Comment on attachment 203732
Patch

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

Slightly intimidating and borderline great. Informal r+ with a few minor remarks.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:62
&gt; +    bool needsRender() const { return !m_tilesNeedingRender.isEmpty(); }
&gt; +    bool tileNeedsRender(const TileIndex&amp; index) const { return m_tilesNeedingRender.contains(index); }

According to WebKit style guides, these function names should get a bool-indicating prefix, such as doesNeedRender()/doesTileNeedRender() or willNeedRender() or something of that sort.
Alternatively it could also go a different route and use vocabulary in the vein of isTileDirty().
Especially when the next line defines willRenderTile() which actually modifies the object, I believe this distinction makes sense here.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:63
&gt; +    void willRenderTile(const TileIndex&amp; index) { m_tilesNeedingRender.remove(index); m_tilesRendered.add(index); }

(Just throwing into the room: markTileAsRendered() might also work for what this function is doing. If you feel the current name is good though, feel free to ignore, I&apos;m not set on this.)

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:172
&gt; +#if DEBUG_LAYER_VISIBILITY
&gt; +    if (m_backVisibility &amp;&amp; !m_backVisibility-&gt;visibleRect().isEmpty())
&gt; +        printf(&quot;Layer 0x%p local visible rect %s\n&quot;, m_layer, BlackBerry::Platform::FloatRect(m_backVisibility-&gt;visibleRect()).toString().c_str());
&gt; +#endif

Should this be using BlackBerry::Platform::logAlways()?

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:196
&gt; -        if (scale != 1.0) {
&gt; +        if (scale != 1) {

Why are you changing this? scale is already a double, so what benefit is there from not comparing it with a double literal? (Same question for the one in the previous hunk.)

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:263
&gt; +                printf(&quot;Tile at (%d, %d) needs render\n&quot;, index.i(), index.j());

Like above, printf() or logAlways()?

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:508
&gt; +    FloatPoint origin = boundsRect.location();
&gt; +    FloatSize bounds = boundsRect.size();

Given that you&apos;re touching every line of this function anyway and in the interest of minimizing the amount of terminology used, I would suggest not having these two constants and using boundsRect directly instead.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.h:31
&gt; +#include &lt;BlackBerryPlatformThreading.h&gt;

If you&apos;re removing the mutex and manually including the header for _smp_xchg() in the .cpp file, what&apos;s prompting the addition of this #include line?
Can it be removed or, if not that, pushed down into other files that still use BlackBerry::Platform threading classes?

&gt; Source/WebCore/platform/graphics/blackberry/LayerUtilities.h:187
&gt; +    *ok = (denominator != 0.0);

With &quot;ok&quot; being a pointer, should this have a check for &quot;if (ok)&quot;? Otherwise, I&apos;m not clear on where you draw the line between this and your previous patch where you added a return value for &quot;float&amp; w&quot; that is not a pointer.

&gt; Source/WebCore/platform/graphics/blackberry/LayerUtilities.h:255
&gt; +            size_t i = (i0 + di) % vertices.size();
&gt; +            const FloatPoint&amp; p1 = vertices[i].xy;
&gt; +            float w1 = vertices[i].w;
&gt; +            FloatSize uv1 = vertices[i].uv;
&gt; +            const FloatPoint&amp; p2 = vertices[i + 1].xy;
&gt; +            float w2 = vertices[i + 1].w;
&gt; +            FloatSize uv2 = vertices[i + 1].uv;

While I agree with the idea behind ordering it this way, it looks really cluttered. I feel grouping the two FloatPoints, the two floats and the two FloatSizes together respectively would make a cleaner picture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899731</commentid>
    <comment_count>6</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-12 12:52:23 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 203732 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203732&amp;action=review
&gt; 
&gt; Slightly intimidating and borderline great. Informal r+ with a few minor remarks.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:62
&gt; &gt; +    bool needsRender() const { return !m_tilesNeedingRender.isEmpty(); }
&gt; &gt; +    bool tileNeedsRender(const TileIndex&amp; index) const { return m_tilesNeedingRender.contains(index); }
&gt; 
&gt; According to WebKit style guides, these function names should get a bool-indicating prefix, such as doesNeedRender()/doesTileNeedRender() or willNeedRender() or something of that sort.
&gt; Alternatively it could also go a different route and use vocabulary in the vein of isTileDirty().
&gt; Especially when the next line defines willRenderTile() which actually modifies the object, I believe this distinction makes sense here.

I searched for &quot;needs&quot; across the code base and found enough methods starting with &quot;needs&quot; that I believe &quot;needs&quot; could actually be considered to be one of these bool-indicating prefixes. Placing the bool-indicating prefix after a subject is also common across Cocoa and WebKit. So I prefer not to change these method names.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:63
&gt; &gt; +    void willRenderTile(const TileIndex&amp; index) { m_tilesNeedingRender.remove(index); m_tilesRendered.add(index); }
&gt; 
&gt; (Just throwing into the room: markTileAsRendered() might also work for what this function is doing. If you feel the current name is good though, feel free to ignore, I&apos;m not set on this.)
&gt; 

willRenderTile is naming typical of a Cocoa delegate method, and the delegate is typically free to do mutating actions in its implementation. Since there&apos;s no actual delegate interface being implemented here, I think changing the name makes more sense.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:172
&gt; &gt; +#if DEBUG_LAYER_VISIBILITY
&gt; &gt; +    if (m_backVisibility &amp;&amp; !m_backVisibility-&gt;visibleRect().isEmpty())
&gt; &gt; +        printf(&quot;Layer 0x%p local visible rect %s\n&quot;, m_layer, BlackBerry::Platform::FloatRect(m_backVisibility-&gt;visibleRect()).toString().c_str());
&gt; &gt; +#endif
&gt; 
&gt; Should this be using BlackBerry::Platform::logAlways()?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:196
&gt; &gt; -        if (scale != 1.0) {
&gt; &gt; +        if (scale != 1) {
&gt; 
&gt; Why are you changing this? scale is already a double, so what benefit is there from not comparing it with a double literal? (Same question for the one in the previous hunk.)
&gt; 

Carlos pointed out that the style guidelines said to prefer integer constants over float or double constants unless that is explicitly needed to promote to floating point arithmetic.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:263
&gt; &gt; +                printf(&quot;Tile at (%d, %d) needs render\n&quot;, index.i(), index.j());
&gt; 
&gt; Like above, printf() or logAlways()?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:508
&gt; &gt; +    FloatPoint origin = boundsRect.location();
&gt; &gt; +    FloatSize bounds = boundsRect.size();
&gt; 
&gt; Given that you&apos;re touching every line of this function anyway and in the interest of minimizing the amount of terminology used, I would suggest not having these two constants and using boundsRect directly instead.
&gt; 

Makes sense

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.h:31
&gt; &gt; +#include &lt;BlackBerryPlatformThreading.h&gt;
&gt; 
&gt; If you&apos;re removing the mutex and manually including the header for _smp_xchg() in the .cpp file, what&apos;s prompting the addition of this #include line?
&gt; Can it be removed or, if not that, pushed down into other files that still use BlackBerry::Platform threading classes?
&gt; 

I think this is not needed any more. I had an intermediate version of the patch where I had a pthread rwlock wrapper down in platform, but I ended up doing swapping instead of rwlock&apos;ing.

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerUtilities.h:187
&gt; &gt; +    *ok = (denominator != 0.0);
&gt; 
&gt; With &quot;ok&quot; being a pointer, should this have a check for &quot;if (ok)&quot;? Otherwise, I&apos;m not clear on where you draw the line between this and your previous patch where you added a return value for &quot;float&amp; w&quot; that is not a pointer.
&gt; 

I should add an if (ok) I guess - the reason I use pointer for the &quot;ok&quot; is because it&apos;s a classic Qt&apos;ism...

&gt; &gt; Source/WebCore/platform/graphics/blackberry/LayerUtilities.h:255
&gt; &gt; +            size_t i = (i0 + di) % vertices.size();
&gt; &gt; +            const FloatPoint&amp; p1 = vertices[i].xy;
&gt; &gt; +            float w1 = vertices[i].w;
&gt; &gt; +            FloatSize uv1 = vertices[i].uv;
&gt; &gt; +            const FloatPoint&amp; p2 = vertices[i + 1].xy;
&gt; &gt; +            float w2 = vertices[i + 1].w;
&gt; &gt; +            FloatSize uv2 = vertices[i + 1].uv;
&gt; 
&gt; While I agree with the idea behind ordering it this way, it looks really cluttered. I feel grouping the two FloatPoints, the two floats and the two FloatSizes together respectively would make a cleaner picture.

I agree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899808</commentid>
    <comment_count>7</comment_count>
      <attachid>204532</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-12 14:12:01 -0700</bug_when>
    <thetext>Created attachment 204532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899809</commentid>
    <comment_count>8</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-12 14:12:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=204532) [details]
&gt; Patch

I went with bool&amp; for &quot;ok&quot; after all...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899933</commentid>
    <comment_count>9</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-13 01:14:28 -0700</bug_when>
    <thetext>Also, it would be inconvenient to use BB::P::logAlways, printf is easier to follow when running torch-launcher or weblauncher from the command line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900213</commentid>
    <comment_count>10</comment_count>
      <attachid>204532</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-06-13 10:57:27 -0700</bug_when>
    <thetext>Comment on attachment 204532
Patch

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

&gt; Source/WebCore/platform/graphics/blackberry/LayerTile.cpp:30
&gt; +    : m_scale(0.0)

m_scale is double, you can just use 0 instead of 0.0

&gt; Source/WebCore/platform/graphics/blackberry/LayerTile.cpp:44
&gt; +    m_scale = 0.0; // Resolution independent

Ditto.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTile.cpp:56
&gt; +    m_scale = 0.0; // Unknown scale

Ditto.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTile.h:52
&gt; +    // Returns 0 if contents are resolution independent or scale is simply unknown

Nit: finish comments with a period.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:124
&gt; +    delete m_frontVisibility;
&gt; +    delete m_backVisibility;

You could use OwnPtr for these.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:157
&gt; +        // If we&apos;re dirty, start fresh. Otherwise, keep track of tiles rendered so far, to avoid re-rendering the same content

Nit: finish comments with a period.

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:184
&gt; +    FloatRect visibleRect = m_backVisibility ? m_backVisibility-&gt;visibleRect() : FloatRect(BlackBerry::Platform::FloatRect(BlackBerry::Platform::Settings::instance()-&gt;layerTilerPrefillRect()));
&gt; +    if (m_layer-&gt;isMask() || m_layer-&gt;filters().size())
&gt; +        visibleRect = FloatRect(IntPoint::zero(), m_layer-&gt;bounds());

In this case you didn&apos;t need the previous visibleRect, maybe this could be something like:

FloatRect visibleRect;
if (m_layer-&gt;isMask() || m_layer-&gt;filters().size())
    visibleRect = FloatRect(IntPoint::zero(), m_layer-&gt;bounds());
else if (m_backVisibility) 
    visibleRect = m_backVisibility-&gt;visibleRect();
else
    visibleRect = FloatRect(BlackBerry::Platform::FloatRect(BlackBerry::Platform::Settings::instance()-&gt;layerTilerPrefillRect());

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:203
&gt; +            // The visible rect is using unscaled coordinates in most cases

Nit: you know :-)

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:248
&gt; +        // Resolution independent layers have all the needed data in the first tile

Nit: :-)

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:461
&gt; +    // Even if the tile has wrong scale, it can be used as a &quot;preview&quot; if there is no risk of overlap with other tiles

Nit: period missing . . .

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:490
&gt; +    // Everything is expressed in normalized device coordinates

Nit: period

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:646
&gt; +        LayerTile* tile = m_tiles.take(*it);
&gt; +        tile-&gt;discardContents();
&gt; +        delete tile;

You can use OwnPtr here.

&gt; Source/WebCore/platform/graphics/blackberry/LayerUtilities.h:37
&gt; +inline float det(const FloatSize&amp; a, const FloatSize&amp; b)

Use the complete word instead of the abbreviation &quot;determinant&quot;

&gt; Source/WebCore/platform/graphics/blackberry/LayerUtilities.h:187
&gt; +    ok = (denominator != 0.0);

Maybe you can return early in this case to avoid the zero division.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900479</commentid>
    <comment_count>11</comment_count>
      <attachid>204532</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-14 03:02:08 -0700</bug_when>
    <thetext>Comment on attachment 204532
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:124
&gt;&gt; +    delete m_backVisibility;
&gt; 
&gt; You could use OwnPtr for these.

The reason I went with raw delete here is because of all the swapping that goes on. I don&apos;t want be swapping in and out new pointer values into the OwnPtr internal storage, and I don&apos;t want to give the impression that a &quot;common&quot; or &quot;usual&quot; pattern of memory management is going on here by using an OwnPtr. In fact, there&apos;s a bunch of swapping that goes on which makes this rather unusual case of memory management.

&gt;&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:646
&gt;&gt; +        delete tile;
&gt; 
&gt; You can use OwnPtr here.

Yes, this looks like a good place to use OwnPtr =)

&gt;&gt; Source/WebCore/platform/graphics/blackberry/LayerUtilities.h:187
&gt;&gt; +    ok = (denominator != 0.0);
&gt; 
&gt; Maybe you can return early in this case to avoid the zero division.

Good point =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900485</commentid>
    <comment_count>12</comment_count>
      <attachid>204690</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-14 03:32:15 -0700</bug_when>
    <thetext>Created attachment 204690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900486</commentid>
    <comment_count>13</comment_count>
      <attachid>204690</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-14 03:34:20 -0700</bug_when>
    <thetext>Comment on attachment 204690
Patch

Uploaded to wrong bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900492</commentid>
    <comment_count>14</comment_count>
      <attachid>204694</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-14 03:45:28 -0700</bug_when>
    <thetext>Created attachment 204694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900494</commentid>
    <comment_count>15</comment_count>
      <attachid>204694</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-14 03:53:18 -0700</bug_when>
    <thetext>Comment on attachment 204694
Patch

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

&gt; Source/WebCore/platform/graphics/blackberry/LayerTiler.cpp:648
&gt; +        OwnPtr&lt;LayerTile&gt; tile = m_tiles.take(*it);

Oops, I forgot &quot;adoptPtr&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900496</commentid>
    <comment_count>16</comment_count>
      <attachid>204696</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-14 03:56:02 -0700</bug_when>
    <thetext>Created attachment 204696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900569</commentid>
    <comment_count>17</comment_count>
      <attachid>204696</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-14 08:00:53 -0700</bug_when>
    <thetext>Comment on attachment 204696
Patch

Clearing flags on attachment: 204696

Committed r151595: &lt;http://trac.webkit.org/changeset/151595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900570</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-14 08:00:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203731</attachid>
            <date>2013-06-04 15:29:07 -0700</date>
            <delta_ts>2013-06-04 15:40:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117211-20130605002734.patch</filename>
            <type>text/plain</type>
            <size>64852</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwOTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY3YjFlZTA3ZDM4ODdj
Mzg4NmVmNjk0Zjc3ZWM1MzQyMmMzNWVmNC4uN2JlYmUyZDMwNjJhZmEyMDU3MGZjMzc4NDBiN2Vj
YTVlNjU5YzkxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAxMy0wNi0wNCAgQXJ2
aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIExh
eWVyVGlsZXIgZmFpbHMgdG8gdGlsZSByZWFsbHkgYmlnIGxheWVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MjExCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNhdXNlIGZvciB0aGlzIGJ1ZyB3
YXMgdGhhdCBMYXllclRpbGVyIGNvbXB1dGVkIHdoaWNoIHRpbGVzIGFyZQorICAgICAgICB2aXNp
YmxlIGJ5IGV4aGF1c3RpdmVseSBtYXBwaW5nIGV2ZXJ5IHRpbGUgdG8gbm9ybWFsaXplZCBkZXZp
Y2UKKyAgICAgICAgY29vcmRpbmF0ZXMgYW5kIGNoZWNraW5nIGlmIGl0IGludGVyc2VjdGVkIHRo
ZSB2aWV3cG9ydC4gSWYgdGhlcmUgd2FzIGEKKyAgICAgICAgbG90IG9mIHRpbGVzLCBpdCB3b3Vs
ZCBnZXQgc3R1Y2sgaW4gdGhpcyBsb29wLCBpdGVyYXRpbmcgb3ZlciBhbGwKKyAgICAgICAgdGls
ZXMsIGZvciBhIHZlcnkgbG9uZyB0aW1lLiBBbHNvLCB0aGUgdmlzaWJpbGl0eSBpbmZvcm1hdGlv
biB3YXMKKyAgICAgICAgdHJhbnNmZXJyZWQgdG8gdGhlIFdlYktpdCB0aHJlYWQgdXNpbmcgbXV0
ZXhlcywgd2hpY2ggYWRkZWQgdW5uZWNlc3NhcnkKKyAgICAgICAgbXV0ZXggY29udGVudGlvbiB0
byB0aGUgbWl4LgorCisgICAgICAgIEZpeGVkIGJ5IGRvaW5nIHRoZSByZXZlcnNlIGNhbGN1bGF0
aW9uLCB1bnByb2plY3RpbmcgdGhlIHZpc2libGUgcGFydAorICAgICAgICBvZiB0aGUgbGF5ZXIg
dG8gbGF5ZXIgY29vcmRpbmF0ZSBzcGFjZSB0byBmaW5kIHdoaWNoIHRpbGVzIGFyZSB2aXNpYmxl
LgorICAgICAgICBJbnN0ZWFkIG9mIGRvaW5nIGEgdHJhZGl0aW9uYWwgdW5wcm9qZWN0aW9uIG9m
IHBvaW50IHRvIGxpbmUgYW5kIHNlZQorICAgICAgICB3aGVyZSB0aGUgbGluZSBpbnRlcnNlY3Rz
IHRoZSBsYXllciwgdGhpcyBwYXRjaCB1c2VzIHRoZSB3LWNvb3JkaW5hdGVzCisgICAgICAgIG9m
IHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBlcmZvcm0gInBlcnNwZWN0aXZlIGNvcnJlY3QgdGV4dHVy
aW5nIiBvZiB0aGUKKyAgICAgICAgaW50ZXJzZWN0aW9uIHBvaW50cyBpbiBkZXZpY2Ugc3BhY2Us
IHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgdW5wcm9qZWN0aW9uIHNpbmNlIHBlcnNw
ZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIGNvbXB1dGVzIGEgMkQKKyAgICAgICAgY29vcmRpbmF0
ZSBpbiAobm9ybWFsaXplZCkgbGF5ZXIgY29vcmRpbmF0ZSBzcGFjZSB3aGljaCBpcyBlYXNpbHkK
KyAgICAgICAgc2NhbGVkIHVwIHRvIHRoZSBsYXllciBib3VuZHMgYW5kIGdldCB0aGUgdmlzaWJs
ZSByZWdpb24gZXhwcmVzc2VkIGluCisgICAgICAgIGxheWVyIGNvb3JkaW5hdGUgc3BhY2UuCisK
KyAgICAgICAgVGhlIHZpc2libGUgYXJlYSBpcyBhcHByb3hpbWF0ZWQgYnkgYSByZWN0YW5nbGUs
IGFuZCBhIHNldCBvZiB0aWxlcworICAgICAgICBuZWVkaW5nIHJlbmRlciBhcmUgYWRkZWQgdG8g
dGhlIG1peCwgYW5kICB3ZSBoYXZlIGEgc3dhcHBhYmxlIGRhdGEKKyAgICAgICAgc3RydWN0dXJl
IHNvIHZpc2JpbGl0eSBjYW4gYmUgdHJhbnNmZXJyZWQgdG8gV2ViS2l0IHRocmVhZCB3aXRob3V0
CisgICAgICAgIG11dGV4ZXMsIGJ1dCBpbnN0ZWFkIHVzaW5nIGF0b21pYyBzd2FwLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3Bw
OgorICAgICAgICAoQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkcmF3VGV4dHVy
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXll
ckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVHTEltYWdl
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudC5oOgorICAgICAgICAoRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRp
bmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6
ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyQ29tcG9zaXRpbmdUaHJlYWQuaDoKKyAgICAgICAgKExheWVyQ29tcG9zaXRpbmdUaHJlYWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6
Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGU6Okxh
eWVyVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGU6OnNldENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlOjpkaXNjYXJkQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmg6CisgICAgICAgIChMYXllclRpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZTo6c2V0Q29udGVudHNEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAgICAgICAgKExheWVyVmlzaWJpbGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OkxheWVyVmlzaWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OnZpc2libGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJWaXNpYmlsaXR5OjpuZWVkc1JlbmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclZpc2liaWxpdHk6OnRpbGVOZWVkc1JlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclZpc2liaWxpdHk6OndpbGxSZW5kZXJUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VmlzaWJpbGl0eTo6c3dhcFRpbGVzTmVlZGluZ1JlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclZpc2liaWxpdHk6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGVyOjp+TGF5ZXJUaWxlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjp1cGRhdGVU
ZXh0dXJlQ29udGVudHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpz
d2FwRnJvbnRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnNldEZy
b250VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpsYXllclZpc2li
aWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnVwbG9hZFRleHR1
cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cHJvY2Vzc1RleHR1
cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6YWRkVGlsZUpvYik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpwZXJmb3JtVGlsZUpvYik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRpbGVyOjpkcmF3VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjppbmZsYXRlVmll
d3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6ZHJhd1RleHR1cmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBydW5lVGV4dHVyZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUaWxlcjo6cmVjdEZvclRpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChMYXllclRpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OlRleHR1cmVKb2I6
OlRleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6dGFrZUZyb250Vmlz
aWJpbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclV0
aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6ZG90KToKKyAgICAgICAgKExheWVyQ2xpcEVkZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDbGlwRWRnZTo6TGF5ZXJDbGlwRWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNsaXBFZGdlOjppc1BvaW50SW5zaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2xpcEVkZ2U6OmNvbXB1dGVJbnRlcnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6aW50
ZXJzZWN0UG9seWdvbldpdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVCYXJ5Y2Vu
dHJpY0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Om1hbmhhdHRhbkRpc3RhbmNlVG9W
aWV3cG9ydCk6CisgICAgICAgIChVbnByb2plY3Rpb25WZXJ0ZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcGFyZU1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3Jl
Ojp1bnByb2plY3QpOgorCiAyMDEzLTA1LTMxICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25Acmlt
LmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbGF5
ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBpbWFnZSBwbGFuZSBhcmUgaW5jb3JyZWN0bHkgdHJhbnNm
b3JtZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4IDc0MDBjN2Y4YTc4MGMxODQ0
NmI2NzEyNjVkODcwODRmMTk5MTM3YzEuLmE5MzM4ZWM1ZThhNGUwZTRiZWJhNmI4ODZmYjU4ZGMw
YjVmMTA3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDEzLTA2LTA0ICBBcnZpZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKworICAgICAg
ICBbQmxhY2tCZXJyeV0gTGF5ZXJUaWxlciBmYWlscyB0byB0aWxlIHJlYWxseSBiaWcgbGF5ZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcyMTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGFwdCB0
byBjaGFuZ2VzIGluIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgaW50ZXJmYWNlLgorCisg
ICAgICAgICogQXBpL1dlYk92ZXJsYXkuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToK
KyAgICAgICAgKiBBcGkvV2ViT3ZlcmxheV9wLmg6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudCk6CisKIDIwMTMtMDUtMjkgIE90dG8gRGVyZWsgQ2hldW5n
ICA8b3RjaGV1bmdAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIG1vcmUgY2Vs
bHVsYXIgdGVjaG5vbG9naWVzIGludG8gdGhlIE5ldHdvcmtJbmZvIGVudW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJX
ZWJLaXRUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAKaW5kZXggNDM0ZTc0MWEwZjM4NGZjYWVk
NjZjNDY4MWZhN2MyNzI0ZDk5YTRiOC4uYzhhOWY4Y2NkYzMyNDFkMzlhYTIxZDEwOTQyMDM0MmU2
NTY4YjFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAK
QEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdl
ZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCkgeyB9CiAgICAgdm9pZCB1cGxvYWRUZXh0
dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSB7IH0KIAotICAgIHZvaWQgZHJh
d1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGNvbnN0IEdM
RVMyUHJvZ3JhbSYpOworICAgIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqLCBjb25zdCBHTEVTMlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcFJlY3QpOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCopOwogCiAgICAgdm9pZCBjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCopOwpAQCAtNTksNyArNTksNyBAQCBDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KEJsYWNrQmVycgog
ewogfQogCi12b2lkIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0
dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlLCBjb25zdCBHTEVTMlBy
b2dyYW0mKQordm9pZCBDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkcmF3VGV4
dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IEdMRVMyUHJvZ3JhbSYs
IGRvdWJsZSwgY29uc3QgRmxvYXRSZWN0JiAvKmNsaXBSZWN0Ki8pCiB7CiAgICAgaWYgKCFtX2J1
ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGll
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJ
bWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwCmluZGV4IDFlZjRmN2Y2NjUxZmQ1
ODIzZmExNDMzNTY3YjRlYzQyODgwMTRkZjQuLjA1YmU1Y2ZlMThmZGVkYTNlZGM2MDgzYzAzZmZl
MTU2YjAzZWM0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBFR0xJ
bWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQo
TGF5ZXJDb21wb3NpdGkKIHsKIH0KIAotdm9pZCBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91
YmxlIC8qc2NhbGUqLywgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtKQordm9pZCBFR0xJbWFn
ZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtLCBkb3VibGUgLypz
Y2FsZSovLCBjb25zdCBGbG9hdFJlY3QmIC8qY2xpcFJlY3QqLykKIHsKICAgICBpZiAoIW1fdGV4
dHVyZUFjY2Vzc29yIHx8ICFtX3RleHR1cmVBY2Nlc3Nvci0+dGV4dHVyZUlEKCkpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudC5oCmluZGV4IGY0NjlmY2NkYWFkMGVlYWMxY2VjM2VmNjdjYTI1MDY0
YWViODFhZTkuLjhkMzg5ZmRmMTNiNDdiMjQ0NDAwMjA4NDRjOWE4ZjNkY2VhOGQwZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1h
Z2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVy
VmlzaWJpbGl0eUNoYW5nZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJvb2wpIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpHTEVTMlByb2dyYW0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCmluZGV4
IDkyMmFjNGUzODRlMWJhZjY1NWNmMjhmZDdjNzg4MjVlNTgyMWE5YzQuLmU3ZWQ5ODRmYWYzZmUw
MWQ3MTVlNjM3MTE2MmM5OWM2MzkwZWM4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBv
c2l0aW5nVGhyZWFkLmNwcApAQCAtMjI4LDcgKzIyOCw3IEBAIEZsb2F0UXVhZCBMYXllckNvbXBv
c2l0aW5nVGhyZWFkOjp0cmFuc2Zvcm1lZEhvbGVQdW5jaFJlY3QoKSBjb25zdAogICAgIHJldHVy
biBtX2RyYXdUcmFuc2Zvcm0ubWFwUXVhZChob2xlUHVuY2hSZWN0KTsKIH0KIAotdm9pZCBMYXll
ckNvbXBvc2l0aW5nVGhyZWFkOjpkcmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBjb25zdCBHTEVT
MlByb2dyYW0mIHByb2dyYW0sIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpCit2b2lkIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdUZXh0dXJlcyhjb25zdCBHTEVTMlByb2dyYW0mIHBy
b2dyYW0sIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBpZiAobV9wbHVnaW5WaWV3KSB7CiAgICAgICAg
IGlmIChtX2lzVmlzaWJsZSkgewpAQCAtMjc5LDEwICsyNzksMTAgQEAgdm9pZCBMYXllckNvbXBv
c2l0aW5nVGhyZWFkOjpkcmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBjb25zdCBHTEVTMlByb2dy
YW0mIHByb2cKICNlbmRpZgogCiAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+
ZHJhd1RleHR1cmVzKHRoaXMsIHNjYWxlLCBwcm9ncmFtKTsKKyAgICAgICAgbV9jbGllbnQtPmRy
YXdUZXh0dXJlcyh0aGlzLCBwcm9ncmFtLCBzY2FsZSwgY2xpcFJlY3QpOwogfQogCi12b2lkIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBkcmF3VHJhbnNmb3JtLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBtYXNrLCBjb25zdCBH
TEVTMlByb2dyYW0mIHByb2dyYW0pCit2b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdT
dXJmYWNlKGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdUcmFuc2Zvcm0sIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2spCiB7CiAg
ICAgdXNpbmcgbmFtZXNwYWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
ckNvbXBvc2l0aW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaAppbmRleCAyYmRiZjkwNjdmZTUzOTc0
ZDhmNjQzNTgwYWZiMjRlNjk3NmYyODQzLi5hNjRhOTFhMDFjODMxMWE1YWIzNWFjMDc4ZjFiMjY1
MzZmZjVjNGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaApAQCAt
MTkxLDggKzE5MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGVsZXRlVGV4dHVyZXMoKTsKIAot
ICAgIHZvaWQgZHJhd1RleHR1cmVzKGRvdWJsZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVS
ZWN0KTsKLSAgICB2b2lkIGRyYXdTdXJmYWNlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFzaywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlcyhjb25zdCBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGRvdWJsZSBzY2Fs
ZSwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVj
dCk7CisgICAgdm9pZCBkcmF3U3VyZmFjZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbWFzayk7CiAKICAgICB2b2lkIHJlbGVhc2VUZXh0dXJlUmVzb3Vy
Y2VzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50
LmgKaW5kZXggMzE4NzhmNGFjYTQ2NGJkYzU0MDA3NmE4OTM5YjQ2YWI4ZDJmZjg1Yy4uMDhjZmUx
YWE1NjE5MjA0ZWI1MzZmYWNiZTgzMWU0YzA4NmI0ODBlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgKQEAgLTMwLDYgKzMwLDcgQEAgY2xhc3Mg
R0xFUzJQcm9ncmFtOwogfQogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFJlY3Q7
CiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwogY2xhc3MgTGF5ZXJUZXh0dXJlOwogCkBA
IC00Miw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5
Q2hhbmdlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpHTEVTMlByb2dyYW0mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpHTEVTMlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJl
Y3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCopID0gMDsKIAogICAgIC8vIE9wdGlvbmFsLiBBbGxvd3MgbGF5ZXJzIHRvIHNlcnZl
IGFzIGEgbWFzayBmb3Igb3RoZXIgbGF5ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAppbmRl
eCA1YTZiODc1ZTE0OTU0ZDFmNzc1MTkxYWQwNmRiMjQ0NjA2Mzc4MTQwLi4wMTNiZmQwYWFkMzE1
ZDRhMmFhMWQ2NzU4MTMwZDRmYzlmOTZiOGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAK
QEAgLTkxOSw3ICs5MTksNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVyc1Jl
Y3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgaW50CiAKICAgICAgICAgaWYg
KCFkcmF3U3VyZmFjZSkgewogICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFt
ID0gdXNlTGF5ZXJQcm9ncmFtKGxheWVyUHJvZ3JhbSk7Ci0gICAgICAgICAgICBsYXllci0+ZHJh
d1RleHR1cmVzKG1fc2NhbGUsIHByb2dyYW0sIG1fdmlzaWJsZVJlY3QpOworICAgICAgICAgICAg
bGF5ZXItPmRyYXdUZXh0dXJlcyhwcm9ncmFtLCBtX3NjYWxlLCBtX3Zpc2libGVSZWN0LCBjbGlw
UmVjdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEcmF3IHRoZSByZWZsZWN0
aW9uIGlmIGl0IGV4aXN0cy4KICAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkp
IHsKQEAgLTkzMSwxMSArOTMxLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5
ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBpbnQKICAgICAgICAg
ICAgICAgICAgICAgbWFzayA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CiAK
ICAgICAgICAgICAgICAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VMYXllclBy
b2dyYW0obGF5ZXJQcm9ncmFtLCBtYXNrKTsKLSAgICAgICAgICAgICAgICBsYXllci0+ZHJhd1N1
cmZhY2UobGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCktPnJlcGxpY2FEcmF3VHJhbnNmb3Jt
KCksIG1hc2ssIHByb2dyYW0pOworICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShw
cm9ncmFtLCBsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zv
cm0oKSwgbWFzayk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IEdMRVMyUHJv
Z3JhbSYgcHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0sIGxheWVyLT5tYXNr
TGF5ZXIoKSk7Ci0gICAgICAgICAgICBsYXllci0+ZHJhd1N1cmZhY2UobGF5ZXItPmxheWVyUmVu
ZGVyZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSwgbGF5ZXItPm1hc2tMYXllcigpLCBwcm9n
cmFtKTsKKyAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShwcm9ncmFtLCBsYXllci0+bGF5
ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpLCBsYXllci0+bWFza0xheWVyKCkp
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHAKaW5kZXggMDRlMWVkNTAzNWQy
ZDZlNzEyNzE3ZmFmZTQwYWQxMjIzZTY5YTFjOS4uZjdlZjM4Nzc0MGM3MDc2NjU1MTgxM2QyYTAy
MzcwMjMxODBlYjEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmNwcApAQCAtMjcsOSArMjcsOSBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBMYXllclRpbGU6OkxheWVyVGlsZSgpCi0gICAgOiBtX2NvbnRl
bnRzRGlydHkoZmFsc2UpCisgICAgOiBtX3NjYWxlKDAuMCkKKyAgICAsIG1fY29udGVudHNEaXJ0
eShmYWxzZSkKICAgICAsIG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fbmVlZHNSZW5kZXIoZmFs
c2UpCiB7CiB9CiAKQEAgLTQxLDE2ICs0MSwxOSBAQCBMYXllclRpbGU6On5MYXllclRpbGUoKQog
CiB2b2lkIExheWVyVGlsZTo6c2V0Q29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBo
aWNzOjpCdWZmZXIqIGNvbnRlbnRzKQogeworICAgIG1fc2NhbGUgPSAwLjA7IC8vIFJlc29sdXRp
b24gaW5kZXBlbmRlbnQKICAgICBzZXRUZXh0dXJlKHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhy
ZWFkKCktPnRleHR1cmVGb3JDb250ZW50cyhjb250ZW50cykpOwogfQogCi12b2lkIExheWVyVGls
ZTo6dXBkYXRlQ29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIq
IGNvbnRlbnRzKQordm9pZCBMYXllclRpbGU6OnVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBjb250ZW50cywgZG91YmxlIHNjYWxlKQogeworICAg
IG1fc2NhbGUgPSBzY2FsZTsKICAgICBzZXRUZXh0dXJlKHRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkKCktPnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZSwgY29udGVudHMpKTsKIH0KIAogdm9p
ZCBMYXllclRpbGU6OmRpc2NhcmRDb250ZW50cygpCiB7CisgICAgbV9zY2FsZSA9IDAuMDsgLy8g
VW5rbm93biBzY2FsZQogICAgIHNldFRleHR1cmUoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oCmluZGV4
IDEzZDMyYzllYzcwNWY0M2ExZWUwZDBmZDE1N2FjMTkzODgxNmM0ZjkuLmM5ZTk4MjFiNzljMDY1
ZmFkODE0YjgxNDZlM2MyMjY3MDMxNDc1ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaApAQCAtNDYsMjkgKzQ2
LDIzIEBAIHB1YmxpYzoKICAgICBib29sIGhhc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmUgJiYgbV90ZXh0dXJlLT5idWZmZXIoKTsgfQogCiAgICAgdm9pZCBzZXRDb250ZW50cyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciopOwotICAgIHZvaWQgdXBkYXRl
Q29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqKTsKKyAgICB2
b2lkIHVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVy
KiwgZG91YmxlIHNjYWxlKTsKICAgICB2b2lkIGRpc2NhcmRDb250ZW50cygpOwogCi0gICAgLy8g
VGhlIGN1cnJlbnQgdGV4dHVyZSBpcyBhbiBhY2N1cmF0ZSBwcmV2aWV3IG9mIHRoaXMgbGF5ZXIs
IGJ1dCBhIG1vcmUKLSAgICAvLyBkZXRhaWxlZCB0ZXh0dXJlIGNvdWxkIGJlIG9idGFpbmVkIGJ5
IHJlcGFpbnRpbmcgdGhlIGxheWVyLiBVc2VkIHdoZW4KLSAgICAvLyB6b29tIGxldmVsIGNoYW5n
ZXMuCi0gICAgdm9pZCBzZXRDb250ZW50c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGlydHkgPSB0cnVl
OyB9CisgICAgLy8gUmV0dXJucyAwIGlmIGNvbnRlbnRzIGFyZSByZXNvbHV0aW9uIGluZGVwZW5k
ZW50IG9yIHNjYWxlIGlzIHNpbXBseSB1bmtub3duCisgICAgZG91YmxlIGNvbnRlbnRzU2NhbGUo
KSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CiAKLSAgICBlbnVtIFJlbmRlclN0YXRlIHsgRG9l
c05vdE5lZWRSZW5kZXIgPSAwLCBOZWVkc1JlbmRlciA9IDEsIFJlbmRlclBlbmRpbmcgPSAyIH07
Ci0gICAgUmVuZGVyU3RhdGUgcmVuZGVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxSZW5kZXJTdGF0ZT4obV9uZWVkc1JlbmRlcik7IH0KLSAgICBib29sIG5lZWRzUmVuZGVyKCkg
eyByZXR1cm4gbV9uZWVkc1JlbmRlciA9PSBOZWVkc1JlbmRlcjsgfQotICAgIHZvaWQgc2V0TmVl
ZHNSZW5kZXIoYm9vbCBuZWVkc1JlbmRlcikgeyBtX25lZWRzUmVuZGVyID0gbmVlZHNSZW5kZXI7
IH0KLSAgICB2b2lkIHNldFJlbmRlclBlbmRpbmcoKSB7IG1fbmVlZHNSZW5kZXIgPSBSZW5kZXJQ
ZW5kaW5nOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJEb25lKCkgeyBtX25lZWRzUmVuZGVyID0gRG9l
c05vdE5lZWRSZW5kZXI7IH0KKyAgICAvLyBUaGUgdGV4dHVyZSBjb250ZW50cyBhcmUgZGlydHkg
ZHVlIHRvIGFwcGVhcmFuY2Ugb2YgcGFnZSBjaGFuZ2luZywgb3IgYSBjaGFuZ2UgaW4gY29udGVu
dHMgc2NhbGUuCisgICAgdm9pZCBzZXRDb250ZW50c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGlydHkg
PSB0cnVlOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRUZXh0dXJlKFBhc3NSZWZQdHI8TGF5
ZXJUZXh0dXJlPik7CiAKICAgICAvLyBOZXZlciBhc3NpZ24gdG8gbV90ZXh0dXJlIGRpcmVjdGx5
LCB1c2Ugc2V0VGV4dHVyZSgpIGFib3ZlLgogICAgIFJlZlB0cjxMYXllclRleHR1cmU+IG1fdGV4
dHVyZTsKKyAgICBkb3VibGUgbV9zY2FsZTsKICAgICBib29sIG1fY29udGVudHNEaXJ0eSA6IDE7
CiAgICAgYm9vbCBtX3Zpc2libGUgOiAxOwotICAgIHVuc2lnbmVkIG1fbmVlZHNSZW5kZXIgOiAy
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKaW5kZXggNGNiNzQ1NTBkYzc3YjkzZjRmNGI5
MTU2ZTljMGMwOTk4NmY5OTdkNy4uMTgzMmQ4MDA2NzI0ZjMxYWJhZjFhODczMmIzNmI2NGE5ZTMw
Y2M0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2ti
ZXJyeS9MYXllclRpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCkBAIC0yMiw5ICsyMiwxMiBAQAogCiAjaW5jbHVk
ZSAiTGF5ZXJUaWxlci5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCiAj
aW5jbHVkZSAiTGF5ZXJNZXNzYWdlLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgorI2lu
Y2x1ZGUgIkxheWVyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIK
ICNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgogCkBAIC0zMiwxMiAr
MzUsNDkgQEAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TY3JlZW4uaD4KICNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0aW5ncy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2luY2x1ZGUgX05UT19DUFVfSERSXyhzbXB4Y2hnLmgpCisKKyNkZWZpbmUgREVCVUdfTEFZRVJf
VklTSUJJTElUWSAwIC8vIFNob3cgdmlzaWJsZSByZWdpb24gb2YgbGF5ZXJzIGFzIGEgdGhpY2sg
Ym9yZGVyLCBhbmQgcHJpbnQgdmlzaWJsZSByZWN0LgorI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJ
VFkKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
dXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTGF5ZXJWaXNpYmlsaXR5IHsKK3B1YmxpYzoKKyAg
ICBMYXllclZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSGFz
aFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpCisgICAgICAgIDogbV92aXNpYmxl
UmVjdCh2aXNpYmxlUmVjdCkKKyAgICAgICAgLCBtX3RpbGVzTmVlZGluZ1JlbmRlcih0aWxlc05l
ZWRpbmdSZW5kZXIpCisgICAgeworICAgIH0KKworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJsZVJlY3Q7IH0KKyAgICB2b2lkIHNldFZpc2libGVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpIHsgbV92aXNpYmxlUmVjdCA9IHZpc2libGVS
ZWN0OyB9CisKKyAgICBib29sIG5lZWRzUmVuZGVyKCkgY29uc3QgeyByZXR1cm4gIW1fdGlsZXNO
ZWVkaW5nUmVuZGVyLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgdGlsZU5lZWRzUmVuZGVyKGNvbnN0
IFRpbGVJbmRleCYgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXNOZWVkaW5nUmVuZGVyLmNv
bnRhaW5zKGluZGV4KTsgfQorICAgIHZvaWQgd2lsbFJlbmRlclRpbGUoY29uc3QgVGlsZUluZGV4
JiBpbmRleCkgeyBtX3RpbGVzTmVlZGluZ1JlbmRlci5yZW1vdmUoaW5kZXgpOyBtX3RpbGVzUmVu
ZGVyZWQuYWRkKGluZGV4KTsgfQorICAgIHZvaWQgc3dhcFRpbGVzTmVlZGluZ1JlbmRlcihIYXNo
U2V0PFRpbGVJbmRleD4mIHRpbGVzTmVlZGluZ1JlbmRlcikgeyBtX3RpbGVzTmVlZGluZ1JlbmRl
ci5zd2FwKHRpbGVzTmVlZGluZ1JlbmRlcik7IH0KKworICAgIHZvaWQgbWVyZ2UoTGF5ZXJWaXNp
YmlsaXR5KiB2aXNpYmlsaXR5KQorICAgIHsKKyAgICAgICAgaWYgKCF2aXNpYmlsaXR5KQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3RpbGVzUmVuZGVyZWQuc3dhcCh2aXNpYmlsaXR5
LT5tX3RpbGVzUmVuZGVyZWQpOworICAgICAgICBmb3IgKEhhc2hTZXQ8VGlsZUluZGV4Pjo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzUmVuZGVyZWQuYmVnaW4oKTsgaXQgIT0gbV90aWxlc1JlbmRlcmVk
LmVuZCgpOyArK2l0KQorICAgICAgICAgICAgbV90aWxlc05lZWRpbmdSZW5kZXIucmVtb3ZlKCpp
dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX3Zpc2libGVSZWN0OworICAg
IEhhc2hTZXQ8VGlsZUluZGV4PiBtX3RpbGVzTmVlZGluZ1JlbmRlcjsKKyAgICBIYXNoU2V0PFRp
bGVJbmRleD4gbV90aWxlc1JlbmRlcmVkOworfTsKKwogLy8gVGhpcyBpcyB1c2VkIHRvIG1ha2Ug
dGhlIHZpZXdwb3J0IGFzIHVzZWQgaW4gdGV4dHVyZSB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucwog
Ly8gc2xpZ2h0bHkgbGFyZ2VyIHNvIHRleHR1cmVzIGFyZSB1cGxvYWRlZCBiZWZvcmUgYmVjb21p
bmcgcmVhbGx5IHZpc2libGUuCiAvLyBJbmZsYXRpb24gaXMgZ3JlYXRlciBpbiBZIGRpcmVjdGlv
biAob25lIHNjcmVlbmZ1bCBpbiBlaXRoZXIgZGlyZWN0aW9uKSBzaW5jZQpAQCAtNDksMTYgKzg5
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGN1cnJlbnQgdmlld3BvcnQgYXMgdmlzaWJs
ZS4KIGNvbnN0IEZsb2F0U2l6ZSB2aWV3cG9ydEluZmxhdGlvbigxLjJmLCAzLjBmKTsKIAotc3Rh
dGljIHZvaWQgdHJhbnNmb3JtUG9pbnQoZmxvYXQgeCwgZmxvYXQgeSwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG0sIGZsb2F0KiByZXN1bHQpCi17Ci0gICAgLy8gU3F1YXNoIHRoZSBaIGNv
b3JkaW5hdGUgc28gdGhhdCBsYXllcnMgYXJlbid0IGNsaXBwZWQgYWdhaW5zdCB0aGUgbmVhciBh
bmQKLSAgICAvLyBmYXIgcGxhbmUuIE5vdGUgdGhhdCB0aGUgcGVyc3BlY3RpdmUgaXMgbWFpbnRh
aW5lZCBhcyB3ZSdyZSBzdGlsbCBwYXNzaW5nCi0gICAgLy8gZG93biB0aGUgVyBjb29yZGluYXRl
LgotICAgIHJlc3VsdFswXSA9IHggKiBtLm0xMSgpICsgeSAqIG0ubTIxKCkgKyBtLm00MSgpOwot
ICAgIHJlc3VsdFsxXSA9IHggKiBtLm0xMigpICsgeSAqIG0ubTIyKCkgKyBtLm00MigpOwotICAg
IHJlc3VsdFsyXSA9IDA7Ci0gICAgcmVzdWx0WzNdID0geCAqIG0ubTE0KCkgKyB5ICogbS5tMjQo
KSArIG0ubTQ0KCk7Ci19CisvLyBUaGlzIGlzIGEgc21hbGwgb3B0aW1pemF0aW9uIHRvIGN1dCBk
b3duIG9uIGNhbGxzIHRvIG9wZXJhdG9yIG5ldy4KKy8vIFNpbmNlIHRoZSBjb21wb3NpdGluZyB0
aHJlYWQgbm9ybWFsbHkgc3dhcHMgaW4gbmV3IHZpc2liaWxpdHkgb2JqZWN0cyBtdWNoIG1vcmUK
Ky8vIG9mdGVuIHRoYW4gdGhlIFdlYktpdCB0aHJlYWQgc3dhcHMgdGhlbSBvdXQsIGl0J3MgbGlr
ZWx5IHRoYXQgaXQgd2lsbCBzd2FwIG91dAorLy8gdGhlIHByZXZpb3VzIHZpc2liaWxpdHkgb2Jq
ZWN0IGFuZCB3ZSBjYW4gcmV1c2UgdGhhdC4KK3N0YXRpYyBMYXllclZpc2liaWxpdHkqIHNfc3Bh
cmVWaXNpYmlsaXR5ID0gMDsKIAogc3RhdGljIEludFNpemUgZGVmYXVsdFRpbGVTaXplKCkKIHsK
QEAgLTY4LDEyICsxMDMsMTIgQEAgc3RhdGljIEludFNpemUgZGVmYXVsdFRpbGVTaXplKCkKIAog
TGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcihMYXllcldlYktpdFRocmVhZCogbGF5ZXIpCiAgICAgOiBt
X2xheWVyKGxheWVyKQotICAgICwgbV9uZWVkc1JlbmRlckNvdW50KDApCiAgICAgLCBtX25lZWRz
QmFja2luZyhmYWxzZSkKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAsIG1fdGls
ZVNpemUoZGVmYXVsdFRpbGVTaXplKCkpCiAgICAgLCBtX2NsZWFyVGV4dHVyZUpvYnMoZmFsc2Up
Ci0gICAgLCBtX2NvbnRlbnRzU2NhbGUoMC4wKQorICAgICwgbV9mcm9udFZpc2liaWxpdHkoMCkK
KyAgICAsIG1fYmFja1Zpc2liaWxpdHkoMCkKIHsKICAgICByZWYoKTsgLy8gVGhpcyByZWYoKSBp
cyBtYXRjaGVkIGJ5IGEgZGVyZWYgaW4gbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3llZCgp
OwogfQpAQCAtODQsNiArMTE5LDkgQEAgTGF5ZXJUaWxlcjo6fkxheWVyVGlsZXIoKQogICAgIC8v
IGJlZm9yZSBub3cuIFdlIGNhbid0IGNhbGwgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgbm8KICAg
ICAvLyBPcGVuR0wgY29udGV4dC4KICAgICBBU1NFUlQobV90aWxlcy5pc0VtcHR5KCkpOworCisg
ICAgZGVsZXRlIG1fZnJvbnRWaXNpYmlsaXR5OworICAgIGRlbGV0ZSBtX2JhY2tWaXNpYmlsaXR5
OwogfQogCiB2b2lkIExheWVyVGlsZXI6OmxheWVyV2ViS2l0VGhyZWFkRGVzdHJveWVkKCkKQEAg
LTExNCwyMiArMTUyLDM2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRz
SWZOZWVkZWQoZG91YmxlIHNjYWxlKQogewogICAgIHVwZGF0ZVRpbGVTaXplKCk7CiAKKyAgICBM
YXllclZpc2liaWxpdHkqIGZyb250VmlzaWJpbGl0eSA9IHRha2VGcm9udFZpc2liaWxpdHkoKTsK
KyAgICBpZiAoZnJvbnRWaXNpYmlsaXR5KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGRpcnR5LCBz
dGFydCBmcmVzaC4gT3RoZXJ3aXNlLCBrZWVwIHRyYWNrIG9mIHRpbGVzIHJlbmRlcmVkIHNvIGZh
ciwgdG8gYXZvaWQgcmUtcmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRlbnQKKyAgICAgICAgaWYgKCFt
X2NvbnRlbnRzRGlydHkpCisgICAgICAgICAgICBmcm9udFZpc2liaWxpdHktPm1lcmdlKG1fYmFj
a1Zpc2liaWxpdHkpOworICAgICAgICBkZWxldGUgbV9iYWNrVmlzaWJpbGl0eTsKKyAgICAgICAg
bV9iYWNrVmlzaWJpbGl0eSA9IGZyb250VmlzaWJpbGl0eTsKKyAgICB9CisgICAgYm9vbCBuZWVk
c1JlbmRlciA9IG1fYmFja1Zpc2liaWxpdHkgJiYgbV9iYWNrVmlzaWJpbGl0eS0+bmVlZHNSZW5k
ZXIoKTsKKwogICAgIC8vIENoZWNrIGlmIHVwZGF0ZSBpcyBuZWVkZWQKLSAgICBpZiAoIW1fY29u
dGVudHNEaXJ0eSAmJiAhbmVlZHNSZW5kZXIoKSkKKyAgICBpZiAoIW1fY29udGVudHNEaXJ0eSAm
JiAhbmVlZHNSZW5kZXIpCiAgICAgICAgIHJldHVybjsKIAorI2lmIERFQlVHX0xBWUVSX1ZJU0lC
SUxJVFkKKyAgICBpZiAobV9iYWNrVmlzaWJpbGl0eSAmJiAhbV9iYWNrVmlzaWJpbGl0eS0+dmlz
aWJsZVJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgIHByaW50ZigiTGF5ZXIgMHglcCBsb2NhbCB2
aXNpYmxlIHJlY3QgJXNcbiIsIG1fbGF5ZXIsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJl
Y3QobV9iYWNrVmlzaWJpbGl0eS0+dmlzaWJsZVJlY3QoKSkudG9TdHJpbmcoKS5jX3N0cigpKTsK
KyNlbmRpZgorCiAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiBkcmF3aW5nIGNvbnRlbnRzIGF0
IGEgaGlnaGVyIHJlc29sdXRpb24gZm9yIHNjYWxlCiAgICAgLy8gaW52YXJpYW50IGxheWVycy4K
ICAgICBpZiAobV9sYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAgICAgICAgc2NhbGUg
PSAxLjA7Ci0KLSAgICBib29sIGlzWm9vbUpvYiA9IGZhbHNlOwotICAgIGlmIChzY2FsZSAhPSBt
X2NvbnRlbnRzU2NhbGUpIHsKLSAgICAgICAgLy8gVGhlIGZpcnN0IHRpbWUgYXJvdW5kLCBpdCBk
b2VzIG5vdCBjb3VudCBhcyBhIHpvb20gam9iLgotICAgICAgICBpZiAobV9jb250ZW50c1NjYWxl
KQotICAgICAgICAgICAgaXNab29tSm9iID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50c1NjYWxl
ID0gc2NhbGU7Ci0gICAgfQorICAgICAgICBzY2FsZSA9IDE7CisKKyAgICAvLyBSZW5kZXIgb25s
eSB2aXNpYmxlIHRpbGVzLiBNYXNrIGxheWVycyBhcmUgYSBzcGVjaWFsIGNhc2UsIGJlY2F1c2Ug
dGhleSdyZSBuZXZlciBjb25zaWRlcmVkCisgICAgLy8gdmlzaWJsZS4gV29ya2Fyb3VuZCB0aGlz
IGJ5IGFsd2F5cyByZW5kZXJpbmcgdGhlbSAoYSB2ZXJ5IGZhc3Qgb3BlcmF0aW9uIHdpdGggdGhl
CisgICAgLy8gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzQ29udGV4dCBzaW5jZSBpdCB3
aWxsIGp1c3QgcmVzdWx0IGluIHJlZidpbmcgdGhlIG1hc2sgaW1hZ2UpLgorICAgIEZsb2F0UmVj
dCB2aXNpYmxlUmVjdCA9IG1fYmFja1Zpc2liaWxpdHkgPyBtX2JhY2tWaXNpYmlsaXR5LT52aXNp
YmxlUmVjdCgpIDogRmxvYXRSZWN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5sYXllclRpbGVyUHJlZmls
bFJlY3QoKSkpOworICAgIGlmIChtX2xheWVyLT5pc01hc2soKSB8fCBtX2xheWVyLT5maWx0ZXJz
KCkuc2l6ZSgpKQorICAgICAgICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChJbnRQb2ludDo6emVy
bygpLCBtX2xheWVyLT5ib3VuZHMoKSk7CiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QobV9kaXJ0eVJlY3QpOwogICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6
ZTsKQEAgLTE0MSwxMyArMTkzLDE2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNv
bnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICBJbnRSZWN0IHVudHJhbnNmb3Jt
ZWRCb3VuZHNSZWN0KGJvdW5kc1JlY3QpOwogICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0g
Ym91bmRzUmVjdC5zaXplKCk7CiAKLSAgICAgICAgaWYgKHNjYWxlICE9IDEuMCkgeworICAgICAg
ICBpZiAoc2NhbGUgIT0gMSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4OwogICAgICAgICAgICAgbWF0cml4LnNjYWxlKHNjYWxlKTsKIAogICAgICAgICAgICAgZGly
dHlSZWN0ID0gbWF0cml4Lm1hcFJlY3QodW50cmFuc2Zvcm1lZERpcnR5UmVjdCk7CiAgICAgICAg
ICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbWF0cml4Lm1hcFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCByZXF1aXJlZFRleHR1cmVTaXplKSkuc2l6ZSgpOwogICAgICAgICAgICAgYm91
bmRzUmVjdCA9IG1hdHJpeC5tYXBSZWN0KHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KTsKKyAgICAg
ICAgICAgIC8vIFRoZSB2aXNpYmxlIHJlY3QgaXMgdXNpbmcgdW5zY2FsZWQgY29vcmRpbmF0ZXMg
aW4gbW9zdCBjYXNlcworICAgICAgICAgICAgaWYgKG1fYmFja1Zpc2liaWxpdHkgfHwgbV9sYXll
ci0+aXNNYXNrKCkgfHwgbV9sYXllci0+ZmlsdGVycygpLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICB2aXNpYmxlUmVjdCA9IG1hdHJpeC5tYXBSZWN0KHZpc2libGVSZWN0KTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplICE9IG1fcGVuZGluZ1RleHR1cmVTaXpl
KQpAQCAtMTYzLDg2ICsyMTgsNTcgQEAgdm9pZCBMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29u
dGVudHNJZk5lZWRlZChkb3VibGUgc2NhbGUpCiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgYm9v
bCBkaWRSZXNpemUgPSBmYWxzZTsKICAgICBJbnRSZWN0IHByZXZpb3VzVGV4dHVyZVJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgbV9wZW5kaW5nVGV4dHVyZVNpemUpOwogICAgIGlmIChtX3BlbmRpbmdU
ZXh0dXJlU2l6ZSAhPSByZXF1aXJlZFRleHR1cmVTaXplKSB7Ci0gICAgICAgIGRpZFJlc2l6ZSA9
IHRydWU7CiAgICAgICAgIG1fcGVuZGluZ1RleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6
ZTsKICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpyZXNpemVDb250ZW50cyhtX3Bl
bmRpbmdUZXh0dXJlU2l6ZSkpOwogICAgIH0KIAotICAgIEludFJlY3QgcmVjdEZvck9uZVRpbGUo
SW50UG9pbnQ6Onplcm8oKSwgdGlsZVNpemUoKSk7Ci0gICAgYm9vbCB3YXNPbmVUaWxlID0gcmVj
dEZvck9uZVRpbGUuY29udGFpbnMocHJldmlvdXNUZXh0dXJlUmVjdCk7Ci0gICAgYm9vbCBpc09u
ZVRpbGUgPSByZWN0Rm9yT25lVGlsZS5jb250YWlucyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IG1fcGVuZGluZ1RleHR1cmVTaXplKSk7CisgICAgYm9vbCBjb250ZW50c0RpcnR5ID0gbV9jb250
ZW50c0RpcnR5OworICAgIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICAgICAgLy8gSWYgd2Un
cmUgbm90IGdvaW5nIHRvIHJlLXJlbmRlciBhbGwgdGhlIGNvdmVyZWQgdGlsZXMsIG1hcmsgdGhv
c2Ugbm90IGNvdmVyZWQgYXMgZGlydHkuCisgICAgICAgIGlmICghdmlzaWJsZVJlY3QuY29udGFp
bnMoZGlydHlSZWN0KSkKKyAgICAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6ZGly
dHlDb250ZW50cyhkaXJ0eVJlY3QpKTsKKyAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7
CisgICAgICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgfQogCi0gICAgSGFzaFNl
dDxUaWxlSW5kZXg+IHJlbmRlckpvYnM7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlc011dGV4KTsKLQotICAgICAgICAvLyBBZGQgcHJlZmlsbCBqb2JzCi0gICAgICAg
IGlmICghZGlydHlSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgSW50UmVjdCByZWN0ID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5sYXllclRpbGVyUHJl
ZmlsbFJlY3QoKTsKLSAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7Ci0gICAg
ICAgICAgICBUaWxlSW5kZXggYmVnaW4gPSBpbmRleE9mVGlsZShyZWN0Lm1pblhNaW5ZQ29ybmVy
KCkpOwotICAgICAgICAgICAgVGlsZUluZGV4IGVuZCA9IGluZGV4T2ZUaWxlKHJlY3QubWF4WE1h
eFlDb3JuZXIoKSArIHRpbGVTaXplKCkgLSBJbnRTaXplKDEsIDEpKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJlZ2luLmkoKTsgaSA8IGVuZC5pKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJlZ2luLmooKTsgaiA8IGVuZC5qKCk7ICsraikKLSAg
ICAgICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQoVGlsZUluZGV4KGksIGopKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgIC8vIElmIHdlIG5lZWQgZGlzcGxheSBiZWNhdXNlIHdl
IG5vIGxvbmdlciBuZWVkIHRvIGJlIGRpc3BsYXllZCwgZHVlIHRvIHRleHR1cmUgc2l6ZSBiZWNv
bWluZyAwIHggMCwKKyAgICAvLyBvciBpZiB3ZSdyZSByZS1yZW5kZXJpbmcgdGhlIHdob2xlIHRo
aW5nIGFueXdheSwgY2xlYXIgb2xkIHRleHR1cmUgam9icy4KKyAgICBpZiAocmVxdWlyZWRUZXh0
dXJlU2l6ZS5pc0VtcHR5KCkgfHwgZGlydHlSZWN0ID09IEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcmVxdWlyZWRUZXh0dXJlU2l6ZSkpCisgICAgICAgIGNsZWFyVGV4dHVyZUpvYnMoKTsKIAot
ICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAh
PSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAo
Kml0KS5rZXk7Ci0gICAgICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKKyAg
ICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNo
U2V0PFRpbGVJbmRleD4gcmVuZGVySm9iczsKKyAgICBUaWxlSW5kZXggZmlyc3Q7CisgICAgVGls
ZUluZGV4IGxhc3Q7CisgICAgaWYgKG1fbGF5ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5k
ZW50KCkpIHsKKyAgICAgICAgLy8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBh
bGwgdGhlIG5lZWRlZCBkYXRhIGluIHRoZSBmaXJzdCB0aWxlCisgICAgICAgIGZpcnN0ID0gbGFz
dCA9IFRpbGVJbmRleCgwLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaXJzdCA9IGluZGV4
T2ZUaWxlKGZsb29yZWRJbnRQb2ludCh2aXNpYmxlUmVjdC5taW5YTWluWUNvcm5lcigpKSk7Cisg
ICAgICAgIGxhc3QgPSBpbmRleE9mVGlsZShjZWlsZWRJbnRQb2ludCh2aXNpYmxlUmVjdC5tYXhY
TWF4WUNvcm5lcigpKSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0LmkoKTsg
aSA8PSBsYXN0LmkoKTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGZpcnN0Lmoo
KTsgaiA8PSBsYXN0LmooKTsgKytqKSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgoaSwg
aik7CiAgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGUoaW5kZXgsIHJl
cXVpcmVkVGV4dHVyZVNpemUpOwogICAgICAgICAgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKHRpbGUtPm5lZWRz
UmVuZGVyKCkpIHsKLSAgICAgICAgICAgICAgICB0aWxlLT5zZXRSZW5kZXJQZW5kaW5nKCk7Ci0g
ICAgICAgICAgICAgICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKKyAgICAgICAgICAgIGlmIChtX2JhY2tWaXNp
YmlsaXR5ICYmIG1fYmFja1Zpc2liaWxpdHktPnRpbGVOZWVkc1JlbmRlcihpbmRleCkpIHsKKyNp
ZiBERUJVR19MQVlFUl9WSVNJQklMSVRZCisgICAgICAgICAgICAgICAgcHJpbnRmKCJUaWxlIGF0
ICglZCwgJWQpIG5lZWRzIHJlbmRlclxuIiwgaW5kZXguaSgpLCBpbmRleC5qKCkpOworI2VuZGlm
CisgICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOworICAgICAgICAgICAgICAg
IG1fYmFja1Zpc2liaWxpdHktPndpbGxSZW5kZXJUaWxlKGluZGV4KTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY29udGVudHNEaXJ0eSAmJiBkaXJ0eVJlY3QuaW50ZXJzZWN0cyh0aWxlUmVjdCkp
CiAgICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChtX2NvbnRlbnRzRGlydHkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGxvY2Fs
RGlydHlSZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxEaXJ0eVJlY3QuaW50
ZXJzZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxEaXJ0eVJlY3QuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAg
IC8vIFJlbmRlciBvbmx5IHZpc2libGUgdGlsZXMuIE1hc2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwg
Y2FzZSwgYmVjYXVzZSB0aGV5J3JlIG5ldmVyIGNvbnNpZGVyZWQKLSAgICAgICAgICAgICAgICAv
LyB2aXNpYmxlLiBXb3JrYXJvdW5kIHRoaXMgYnkgYWx3YXlzIHJlbmRlcmluZyB0aGVtIChhIHZl
cnkgZmFzdCBvcGVyYXRpb24gd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3NDb250ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4g
cmVmJ2luZyB0aGUgbWFzayBpbWFnZSkuCi0gICAgICAgICAgICAgICAgaWYgKHRpbGUtPmlzVmlz
aWJsZSgpIHx8IG1fbGF5ZXItPmlzTWFzaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRl
ckpvYnMuYWRkKGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGlzY2FyZC9kaXJ0eSB0aGUg
dGlsZSBpZiBmb3Igc29tZSByZWFzb24gKGUuZy4gcHJlZmlsbCkgYSByZW5kZXIgam9iIHdhcyBh
bHJlYWR5IGFkZGVkLgotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJKb2JzLmNvbnRhaW5zKGlu
ZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAv
LyBBdm9pZCBjaGVja2VyYm9hcmRpbmcgdW5sZXNzIHRoZSBsYXllciBpcyByZXNpemVkLiBXaGVu
Ci0gICAgICAgICAgICAgICAgLy8gcmVzaXplZCwgdGhlIGNvbnRlbnRzIGFyZSBsaWtlbHkgdG8g
Y2hhbmdlIGFwcGVhcmFuY2UsIGZvcgotICAgICAgICAgICAgICAgIC8vIGV4YW1wbGUgZHVlIHRv
IGFzcGVjdCByYXRpbyBjaGFuZ2UuIEhvd2V2ZXIsIGlmIGl0IGlzIGEKLSAgICAgICAgICAgICAg
ICAvLyByZXNpemUgZHVlIHRvIHpvb21pbmcsIHRoZSBhc3BlY3QgcmF0aW8gYW5kIGNvbnRlbnQg
d2lsbAotICAgICAgICAgICAgICAgIC8vIHN0YXkgdGhlIHNhbWUsIGFuZCB3ZSBjYW4ga2VlcCB0
aGUgb2xkIHRleHR1cmUgY29udGVudCBhcyBhCi0gICAgICAgICAgICAgICAgLy8gcHJldmlldy4K
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhlIHpvb20gcHJldmlldyBvbmx5IHdvcmtzIGlm
IHdlIGRvbid0IHJlLXRpbGUgdGhlCi0gICAgICAgICAgICAgICAgLy8gbGF5ZXIuIFdlIG5lZWQg
dG8gc3RvcmUgdGV4dHVyZSBjb29yZGluYXRlcyBpbgotICAgICAgICAgICAgICAgIC8vIFdlYkNv
cmU6OkxheWVyVGV4dHVyZSB0byBiZSBhYmxlIHRvIGZpeCB0aGF0LgotICAgICAgICAgICAgICAg
IGlmIChkaWRSZXNpemUgJiYgIShpc1pvb21Kb2IgJiYgd2FzT25lVGlsZSAmJiBpc09uZVRpbGUp
KQotICAgICAgICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpc2NhcmRD
b250ZW50cyh0aWxlUmVjdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpkaXJ0eUNvbnRlbnRzKHRpbGVSZWN0KSk7
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBJZiB3ZSBuZWVkIGRp
c3BsYXkgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGR1ZSB0byB0
ZXh0dXJlIHNpemUgYmVjb21pbmcgMCB4IDAsCi0gICAgLy8gb3IgaWYgd2UncmUgcmUtcmVuZGVy
aW5nIHRoZSB3aG9sZSB0aGluZyBhbnl3YXksIGNsZWFyIG9sZCB0ZXh0dXJlIGpvYnMuCi0gICAg
aWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgpIHx8IGRpcnR5UmVjdCA9PSBJbnRSZWN0
KEludFBvaW50Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpKQotICAgICAgICBjbGVhclRl
eHR1cmVKb2JzKCk7Ci0KICAgICBpZiAocmVuZGVySm9icy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjY0LDkgKzI5MCw2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVy
ZUNvbnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotCi0gICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3Qg
PSBGbG9hdFJlY3QoKTsKIH0KIAogQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZm
ZXIqIExheWVyVGlsZXI6OmNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMzIw
LDYgKzM0MywyMiBAQCB2b2lkIExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2Fk
cyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKICAgICBtX3BlbmRpbmdUZXh0dXJlSm9icy5jbGVh
cigpOwogfQogCitMYXllclZpc2liaWxpdHkqIExheWVyVGlsZXI6OnN3YXBGcm9udFZpc2liaWxp
dHkoTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5KQoreworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PExheWVyVmlzaWJpbGl0eSo+KF9zbXBfeGNoZyhyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkKj4oJm1fZnJvbnRWaXNpYmlsaXR5KSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4odmlz
aWJpbGl0eSkpKTsKK30KKwordm9pZCBMYXllclRpbGVyOjpzZXRGcm9udFZpc2liaWxpdHkoY29u
c3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRp
bmdSZW5kZXIpCit7CisgICAgTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5ID0gc19zcGFyZVZp
c2liaWxpdHk7CisgICAgaWYgKHZpc2liaWxpdHkpIHsKKyAgICAgICAgdmlzaWJpbGl0eS0+c2V0
VmlzaWJsZVJlY3QodmlzaWJsZVJlY3QpOworICAgICAgICB2aXNpYmlsaXR5LT5zd2FwVGlsZXNO
ZWVkaW5nUmVuZGVyKHRpbGVzTmVlZGluZ1JlbmRlcik7CisgICAgfSBlbHNlCisgICAgICAgIHZp
c2liaWxpdHkgPSBuZXcgTGF5ZXJWaXNpYmlsaXR5KHZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdS
ZW5kZXIpOworICAgIHNfc3BhcmVWaXNpYmlsaXR5ID0gc3dhcEZyb250VmlzaWJpbGl0eSh2aXNp
YmlsaXR5KTsKK30KKwogdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiB7CiAgICAgLy8gRm9yIHZpc2li
bGUgbGF5ZXJzLCB3ZSBoYW5kbGUgdGhlIHRpbGUtbGV2ZWwgdmlzaWJpbGl0eQpAQCAtMzI3LDI0
ICszNjYsMTEgQEAgdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiAgICAgaWYgKHZpc2libGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgLy8gQWxsIHRpbGVzIGFyZSBpbnZpc2libGUg
bm93LgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLQotICAgICAg
ICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3Rp
bGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5r
ZXk7Ci0gICAgICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKLSAgICAgICAg
ICAgIHRpbGUtPnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHRpbGUtPm5lZWRz
UmVuZGVyKCkpIHsKLSAgICAgICAgICAgICAgICB0aWxlLT5zZXROZWVkc1JlbmRlcihmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KKyAgICBIYXNoU2V0PFRpbGVJbmRleD4gZW1wdHlUaWxlU2V0OworICAgIHNldEZy
b250VmlzaWJpbGl0eShGbG9hdFJlY3QoKSwgZW1wdHlUaWxlU2V0KTsKIH0KIAotdm9pZCBMYXll
clRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQor
dm9pZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqIGxheWVyKQogewogICAgIFRpbGVKb2JzTWFwIHRpbGVKb2JzTWFwOwogICAgIERlcXVl
PFRleHR1cmVKb2I+Ojpjb25zdF9pdGVyYXRvciB0ZXh0dXJlSm9iSXRlckVuZCA9IG1fdGV4dHVy
ZUpvYnMuZW5kKCk7CkBAIC0zNjAsMTIgKzM4NiwxMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9h
ZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAgICAgICAgICBp
ZiAob3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4u
eSgpID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7
CiAgICAgICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwogICAgICAgICAgICAgbV90aWxl
cy5hZGQodGlsZUpvYnNJdGVyLT5rZXksIHRpbGUpOwogICAgICAgICB9CiAKLSAgICAgICAgcGVy
Zm9ybVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOworICAgICAgICBwZXJmb3Jt
VGlsZUpvYihsYXllciwgdGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOwogICAgIH0KIAogICAg
IG1fdGV4dHVyZUpvYnMuY2xlYXIoKTsKQEAgLTM4MCw2ICs0MDUsMTUgQEAgdm9pZCBMYXllclRp
bGVyOjpwcm9jZXNzVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRpbGVKb2JzTWFw
JiB0aWxlSm9ic00KIAogICAgICAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSBwZW5kaW5nVGV4
dHVyZVNpemU7CiAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGpvYi5tX3R5cGUgPT0g
VGV4dHVyZUpvYjo6RGlydHlDb250ZW50cykgeworICAgICAgICBUaWxlSW5kZXggZmlyc3QgPSBp
bmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgICAgIFRp
bGVJbmRleCBsYXN0ID0gaW5kZXhPZlRpbGUoam9iLm1fZGlydHlSZWN0Lm1heFhNYXhZQ29ybmVy
KCkpOworICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigp
OyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5k
ZXggPSAoKml0KS5rZXk7CisgICAgICAgICAgICBpZiAoaW5kZXguaSgpID49IGZpcnN0LmkoKSAm
JiBpbmRleC5qKCkgPj0gZmlyc3QuaigpICYmIGluZGV4LmkoKSA8PSBsYXN0LmkoKSAmJiBpbmRl
eC5qKCkgPD0gbGFzdC5qKCkpCisgICAgICAgICAgICAgICAgKCppdCkudmFsdWUtPnNldENvbnRl
bnRzRGlydHkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYWRk
VGlsZUpvYihpbmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSksIGpv
YiwgdGlsZUpvYnNNYXApOwpAQCAtMzk0LDEwICs0MjgsNiBAQCB2b2lkIExheWVyVGlsZXI6OmFk
ZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBU
aWxlSgogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gSW4gdGhpcyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5t
X3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQotICAgICAgICByZXR1
cm47Ci0KICAgICAvLyBPdmVycmlkZSB0aGUgcHJldmlvdXMgam9iLgogICAgIGlmIChyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fY29udGVudHMpCiAg
ICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT5tX2NvbnRlbnRzKTsKQEAgLTQwNSwxNTYgKzQzNSwxODIgQEAg
dm9pZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0
IFRleHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpv
YjsKIH0KIAotdm9pZCBMYXllclRpbGVyOjpwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqIHRpbGUs
IGNvbnN0IFRleHR1cmVKb2ImIGpvYikKK3ZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2Io
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4
dHVyZUpvYiYgam9iKQogewogICAgIHN3aXRjaCAoam9iLm1fdHlwZSkgewogICAgIGNhc2UgVGV4
dHVyZUpvYjo6U2V0Q29udGVudHM6CiAgICAgICAgIHRpbGUtPnNldENvbnRlbnRzKGpvYi5tX2Nv
bnRlbnRzKTsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGls
ZXNNdXRleCk7Ci0gICAgICAgICAgICBpZiAodGlsZS0+cmVuZGVyU3RhdGUoKSA9PSBMYXllclRp
bGU6OlJlbmRlclBlbmRpbmcpCi0gICAgICAgICAgICAgICAgdGlsZS0+c2V0UmVuZGVyRG9uZSgp
OwotICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFRleHR1cmVKb2I6OlVwZGF0
ZUNvbnRlbnRzOgotICAgICAgICB0aWxlLT51cGRhdGVDb250ZW50cyhqb2IubV9jb250ZW50cyk7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgp
OwotICAgICAgICAgICAgaWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpSZW5k
ZXJQZW5kaW5nKQotICAgICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlckRvbmUoKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVu
dHM6Ci0gICAgICAgIHRpbGUtPmRpc2NhcmRDb250ZW50cygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzOgotICAgICAgICB0aWxlLT5zZXRDb250
ZW50c0RpcnR5KCk7CisgICAgICAgIHRpbGUtPnVwZGF0ZUNvbnRlbnRzKGpvYi5tX2NvbnRlbnRz
LCBsYXllci0+Y29udGVudHNTY2FsZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVGV4
dHVyZUpvYjo6VW5rbm93bjoKICAgICBjYXNlIFRleHR1cmVKb2I6OlJlc2l6ZUNvbnRlbnRzOgor
ICAgIGNhc2UgVGV4dHVyZUpvYjo6RGlydHlDb250ZW50czoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLWJvb2wgTGF5ZXJUaWxlcjo6ZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogbGF5ZXIsIGRvdWJsZSBzY2FsZSwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgRmxv
YXRSZWN0JiBkc3QsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpCitib29sIExheWVyVGlsZXI6OmRyYXdU
aWxlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBMYXllclRpbGUqIHRpbGUsIGNvbnN0
IFRpbGVJbmRleCYgaW5kZXgsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0Q2xpcCkKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3
VHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1s0
ICogNF07Ci0KLSAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChpbmRleCk7Ci0gICAg
aWYgKCF0aWxlKSB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwot
ICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwotICAgICAgICBtX3RpbGVzLmFkZChpbmRl
eCwgdGlsZSk7CisgICAgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1KTsKKyAgICBib29sIHNob3Vs
ZERyYXdUaWxlID0gZHN0LmludGVyc2VjdHMoZHN0Q2xpcCkgJiYgZ2xvYmFsQWxwaGE7CisKKyAg
ICAvLyBFdmVuIGlmIHRoZSB0aWxlIGhhcyB3cm9uZyBzY2FsZSwgaXQgY2FuIGJlIHVzZWQgYXMg
YSAicHJldmlldyIgaWYgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVybGFwIHdpdGggb3RoZXIgdGls
ZXMKKyAgICBib29sIHRpbGVIYXNDb3JyZWN0U2NhbGUgPSB0aWxlLT5jb250ZW50c1NjYWxlKCkg
PT0gMC4wIHx8IHRpbGUtPmNvbnRlbnRzU2NhbGUoKSA9PSBsYXllci0+Y29udGVudHNTY2FsZSgp
OworICAgIGlmICghdGlsZUhhc0NvcnJlY3RTY2FsZSkKKyAgICAgICAgc2hvdWxkRHJhd1RpbGUg
PSBzaG91bGREcmF3VGlsZSAmJiAobV90aWxlcy5zaXplKCkgPT0gMSAmJiAhaW5kZXguaSgpICYm
ICFpbmRleC5qKCkpOworCisgICAgaWYgKHRpbGUtPmhhc1RleHR1cmUoKSkgeworICAgICAgICBM
YXllclRleHR1cmUqIHRleHR1cmUgPSB0aWxlLT50ZXh0dXJlKCk7CisgICAgICAgIHRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVBY2Nlc3NlZCh0ZXh0dXJlKTsKKworICAg
ICAgICBpZiAoc2hvdWxkRHJhd1RpbGUpIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGRyYXdUcmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgICAgICAgICAg
ZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUoZHN0LngoKSwgZHN0LnkoKSk7CisgICAgICAgICAgICBp
ZiAobGF5ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpCisgICAgICAgICAgICAg
ICAgZHJhd1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oZHN0LndpZHRoKCkgLyBtX3JlcXVpcmVk
VGV4dHVyZVNpemUud2lkdGgoKSwgZHN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRpbGUtPmNvbnRlbnRzU2NhbGUoKSkK
KyAgICAgICAgICAgICAgICBkcmF3VHJhbnNmb3JtLnNjYWxlKDEgLyB0aWxlLT5jb250ZW50c1Nj
YWxlKCkpOworICAgICAgICAgICAgaWYgKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFudCgpKQor
ICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0uc2NhbGUoMSAvIHNjYWxlKTsKKyAgICAgICAg
ICAgIGJsaXRUb0J1ZmZlcigwLCB0ZXh0dXJlLT5idWZmZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmPihkcmF3VHJhbnNmb3Jt
KSwKKyAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNvdXJj
ZU92ZXIsIGdsb2JhbEFscGhhKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFdlIGFwcGx5
IHRoZSB0cmFuc2Zvcm1hdGlvbiBieSBoYW5kLCBzaW5jZSB3ZSBuZWVkIHRoZSB6IGNvb3JkaW5h
dGUKLSAgICAvLyBhcyB3ZWxsICh0byBkbyBwZXJzcGVjdGl2ZSBjb3JyZWN0IHRleHR1cmluZykg
YW5kIHdlIGRvbid0IG5lZWQKLSAgICAvLyB0byBkaXZpZGUgYnkgdyBieSBoYW5kLCB0aGUgR1BV
IHdpbGwgZG8gdGhhdCBmb3IgdXMKLSAgICB0cmFuc2Zvcm1Qb2ludChkc3QueCgpLCBkc3QueSgp
LCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbMF0pOwotICAgIHRyYW5zZm9ybVBvaW50KGRzdC54
KCksIGRzdC5tYXhZKCksIGRyYXdUcmFuc2Zvcm0sICZ2ZXJ0aWNlc1s0XSk7Ci0gICAgdHJhbnNm
b3JtUG9pbnQoZHN0Lm1heFgoKSwgZHN0Lm1heFkoKSwgZHJhd1RyYW5zZm9ybSwgJnZlcnRpY2Vz
WzhdKTsKLSAgICB0cmFuc2Zvcm1Qb2ludChkc3QubWF4WCgpLCBkc3QueSgpLCBkcmF3VHJhbnNm
b3JtLCAmdmVydGljZXNbMTJdKTsKLQotICAgIC8vIEluZmxhdGUgdGhlIHJlY3Qgc29tZXdoYXQg
dG8gYXR0ZW1wdCB0byBtYWtlIHRleHR1cmVzIHJlbmRlciBiZWZvcmUgdGhleSBzaG93Ci0gICAg
Ly8gdXAgb24gc2NyZWVuLiBBcyB5b3UgY2FuIHNlZSwgdGhlIHJlY3QgaXMgaW4gbm9ybWFsaXpl
ZCBkZXZpY2UgY29vcmRpbmF0ZXMuCi0gICAgRmxvYXRSZWN0IHJlY3QoLXZpZXdwb3J0SW5mbGF0
aW9uLndpZHRoKCksIC12aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSwgMip2aWV3cG9ydEluZmxh
dGlvbi53aWR0aCgpLCAyKnZpZXdwb3J0SW5mbGF0aW9uLmhlaWdodCgpKTsKLSAgICBGbG9hdFF1
YWQgcXVhZCgKLSAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1swXSAvIHZlcnRpY2VzWzNdLCB2
ZXJ0aWNlc1sxXSAvIHZlcnRpY2VzWzNdKSwKLSAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1s0
XSAvIHZlcnRpY2VzWzddLCB2ZXJ0aWNlc1s1XSAvIHZlcnRpY2VzWzddKSwKLSAgICAgICAgRmxv
YXRQb2ludCh2ZXJ0aWNlc1s4XSAvIHZlcnRpY2VzWzExXSwgdmVydGljZXNbOV0gLyB2ZXJ0aWNl
c1sxMV0pLAotICAgICAgICBGbG9hdFBvaW50KHZlcnRpY2VzWzEyXSAvIHZlcnRpY2VzWzE1XSwg
dmVydGljZXNbMTNdIC8gdmVydGljZXNbMTVdKSk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gcXVhZC5ib3VuZGluZ0JveCgpOwotICAgIGJvb2wgdmlzaWJsZSA9IGJvdW5kaW5nQm94Lmlu
dGVyc2VjdHMocmVjdCk7Ci0gICAgRmxvYXRSZWN0IHZpZXdwb3J0KC0xLCAtMSwgMiwgMik7Ci0g
ICAgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1LjBmKTsKLSAgICBib29sIHNob3VsZERyYXdUaWxl
ID0gYm91bmRpbmdCb3guaW50ZXJzZWN0cyh2aWV3cG9ydCkgJiYgZ2xvYmFsQWxwaGE7Ci0KLSAg
ICBib29sIHdhc1Zpc2libGUgPSB0aWxlLT5pc1Zpc2libGUoKTsKLQotICAgIGlmICh2aXNpYmxl
KSB7Ci0gICAgICAgIGlmICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKLSAgICAgICAgICAgIExheWVy
VGV4dHVyZSogdGV4dHVyZSA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAgICAgICAgIHRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVBY2Nlc3NlZCh0ZXh0dXJlKTsKLQotICAg
ICAgICAgICAgaWYgKHNob3VsZERyYXdUaWxlKSB7Ci0gICAgICAgICAgICAgICAgZHJhd1RyYW5z
Zm9ybS50cmFuc2xhdGUoZHN0LngoKSwgZHN0LnkoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxh
eWVyLT5jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKQotICAgICAgICAgICAgICAgICAg
ICBkcmF3VHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShkc3Qud2lkdGgoKSAvIG1fcmVxdWlyZWRU
ZXh0dXJlU2l6ZS53aWR0aCgpLCBkc3QuaGVpZ2h0KCkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUu
aGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHJh
d1RyYW5zZm9ybS5zY2FsZSgxLjAgLyBsYXllci0+Y29udGVudHNTY2FsZSgpKTsKLSAgICAgICAg
ICAgICAgICBkcmF3VHJhbnNmb3JtLnNjYWxlKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFudCgp
ID8gMS4wIC8gc2NhbGUgOiAxLjApOwotICAgICAgICAgICAgICAgIGJsaXRUb0J1ZmZlcigwLCB0
ZXh0dXJlLT5idWZmZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmPihkcmF3VHJhbnNmb3JtKSwKLSAgICAgICAgICAgICAgICAg
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VPdmVyLCBnbG9iYWxBbHBo
YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhl
IHRpbGUgbmVlZHMgdG8gYmUgKHJlLSlyZW5kZXJlZC4KKyAgICByZXR1cm4gIXRpbGUtPmlzRGly
dHkoKSAmJiB0aWxlSGFzQ29ycmVjdFNjYWxlOworfQogCi0gICAgICAgIGlmICh0aWxlLT5pc0Rp
cnR5KCkpIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwot
ICAgICAgICAgICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKLSAgICAgICAgICAgIGlmICh0
aWxlLT5yZW5kZXJTdGF0ZSgpID09IExheWVyVGlsZTo6RG9lc05vdE5lZWRSZW5kZXIpIHsKLSAg
ICAgICAgICAgICAgICB0aWxlLT5zZXROZWVkc1JlbmRlcih0cnVlKTsKLSAgICAgICAgICAgICAg
ICArK21fbmVlZHNSZW5kZXJDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9CitzdGF0aWMgRmxvYXRSZWN0IGluZmxhdGVWaWV3cG9ydChjb25z
dCBGbG9hdFJlY3QmIHZpZXdwb3J0KQoreworICAgIC8vIEV2ZXJ5dGhpbmcgaXMgZXhwcmVzc2Vk
IGluIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3JkaW5hdGVzCisgICAgRmxvYXRTaXplIHZpZXdwb3J0
U2l6ZSh2aWV3cG9ydC5zaXplKCkpOworICAgIHZpZXdwb3J0U2l6ZS5zY2FsZSh2aWV3cG9ydElu
ZmxhdGlvbi53aWR0aCgpLCB2aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSk7CiAKLSAgICAgICAg
aWYgKCF3YXNWaXNpYmxlKSB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxl
c011dGV4KTsKLSAgICAgICAgICAgIHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHdhc1Zpc2libGUpIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdGlsZXNNdXRleCk7Ci0gICAgICAgIHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7Ci0g
ICAgICAgIGlmICh0aWxlLT5uZWVkc1JlbmRlcigpKSB7Ci0gICAgICAgICAgICB0aWxlLT5zZXRO
ZWVkc1JlbmRlcihmYWxzZSk7Ci0gICAgICAgICAgICAtLW1fbmVlZHNSZW5kZXJDb3VudDsKLSAg
ICAgICAgICAgIEFTU0VSVChtX25lZWRzUmVuZGVyQ291bnQgPj0gMCk7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgRmxvYXRTaXplIHZpZXdwb3J0T2Zmc2V0KHZpZXdwb3J0LnNpemUoKSk7CisgICAg
dmlld3BvcnRPZmZzZXQuc2NhbGUodmlld3BvcnRJbmZsYXRpb24ud2lkdGgoKSAtIDEsIHZpZXdw
b3J0SW5mbGF0aW9uLmhlaWdodCgpIC0gMSk7CisgICAgdmlld3BvcnRPZmZzZXQuc2NhbGUoMC41
KTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHZpZXdwb3J0Lmxv
Y2F0aW9uKCkgLSB2aWV3cG9ydE9mZnNldCwgdmlld3BvcnRTaXplKTsKIH0KIAotdm9pZCBMYXll
clRpbGVyOjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRvdWJs
ZSBzY2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtKQordm9pZCBMYXllclRpbGVyOjpk
cmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IEdMRVMyUHJv
Z3JhbSYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBG
bG9hdFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwotCi0gICAgaWYgKGxheWVyLT5zaXpl
SXNTY2FsZUludmFyaWFudCgpKSB7Ci0gICAgICAgIGJvdW5kcy5zZXRXaWR0aChib3VuZHMud2lk
dGgoKSAvIHNjYWxlKTsKLSAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkg
LyBzY2FsZSk7CisgICAgRmxvYXRSZWN0IGJvdW5kc1JlY3QoLWxheWVyLT5vcmlnaW4oKSwgbGF5
ZXItPmJvdW5kcygpKTsKKyAgICBpZiAobGF5ZXItPnNpemVJc1NjYWxlSW52YXJpYW50KCkpCisg
ICAgICAgIGJvdW5kc1JlY3Quc2NhbGUoMSAvIHNjYWxlKTsKKworICAgIEZsb2F0UG9pbnQgb3Jp
Z2luID0gYm91bmRzUmVjdC5sb2NhdGlvbigpOworICAgIEZsb2F0U2l6ZSBib3VuZHMgPSBib3Vu
ZHNSZWN0LnNpemUoKTsKKyAgICBGbG9hdFNpemUgaGFsZkJvdW5kcyhib3VuZHMpOworICAgIGhh
bGZCb3VuZHMuc2NhbGUoMC41Zik7CisKKyAgICBGbG9hdFJlY3QgaW5mbGF0ZWRWaWV3cG9ydCA9
IGluZmxhdGVWaWV3cG9ydChjbGlwUmVjdCk7CisKKyAgICAvLyBVbnByb2plY3RpbmcgcG9pbnRz
IG91dHNpZGUgdGhlIHRyYW5zZm9ybWVkIGJvdW5kcyBnaXZlcyBwb29yIG51bWVyaWNhbCBzdGFi
aWxpdHkgaWYgdGhlcmUncyBhIHBlcnNwZWN0aXZlIGVmZmVjdCwKKyAgICAvLyBzbyB1bnByb2pl
Y3QgdGhlIGNsaXBwZWQgdHJhbnNmb3JtZWQgYm91bmRzIGluc3RlYWQuCisgICAgVmVjdG9yPEZs
b2F0UG9pbnQsIDQ+IGNsaXBQb2x5Z29uID0gaW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KGxheWVy
LT50cmFuc2Zvcm1lZEJvdW5kcygpLCBjbGlwUmVjdCk7CisgICAgaWYgKGNsaXBQb2x5Z29uLmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBUaGUgTGF5ZXJSZW5kZXJlciBmaWd1cmVzIHdlJ3JlIHZp
c2libGUsIG9yIGl0IHdvdWxkbid0IGhhdmUgY2FsbGVkIGludG8gdGhpcyBtZXRob2QsIGJ1dCB3
ZSBiZWcgdG8gZGlmZmVyLgorICAgICAgICBsYXllci0+c2V0VmlzaWJsZShmYWxzZSk7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIG5lZWRzRGlzcGxheSA9IGZhbHNlOworICAg
IEZsb2F0UmVjdCBub3JtYWxpemVkTGF5ZXJDbGlwUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAxLCAx
KTsKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZExheWVyVmlzaWJsZVJlY3QgPSBGbG9hdFJlY3Qo
MCwgMCwgMSwgMSk7CiAKKyAgICBpZiAoY2xpcFBvbHlnb24gIT0gbGF5ZXItPnRyYW5zZm9ybWVk
Qm91bmRzKCkpIHsKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDQ+IG5vcm1hbGl6ZWRMYXll
ckNsaXBQb2x5Z29uID0gdW5wcm9qZWN0KGxheWVyLCBjbGlwUG9seWdvbik7CisgICAgICAgIG5v
cm1hbGl6ZWRMYXllckNsaXBSZWN0LmludGVyc2VjdChib3VuZGluZ0JveChub3JtYWxpemVkTGF5
ZXJDbGlwUG9seWdvbikpOworCisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiB2aXNpYmxl
UG9seWdvbiA9IGludGVyc2VjdFBvbHlnb25XaXRoUmVjdChsYXllci0+dHJhbnNmb3JtZWRCb3Vu
ZHMoKSwgaW5mbGF0ZWRWaWV3cG9ydCk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiBu
b3JtYWxpemVkTGF5ZXJWaXNpYmxlUG9seWdvbiA9IHVucHJvamVjdChsYXllciwgdmlzaWJsZVBv
bHlnb24pOworICAgICAgICBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVjdC5pbnRlcnNlY3QoYm91
bmRpbmdCb3gobm9ybWFsaXplZExheWVyVmlzaWJsZVBvbHlnb24pKTsKKyAgICB9CisKKyAgICBG
bG9hdFNpemUgdGlsZVNpemU7CisgICAgRmxvYXRSZWN0IGRzdENsaXA7CisgICAgVGlsZUluZGV4
IGZpcnN0OworICAgIFRpbGVJbmRleCBsYXN0OwogICAgIGlmIChsYXllci0+Y29udGVudHNSZXNv
bHV0aW9uSW5kZXBlbmRlbnQoKSkgewotICAgICAgICAvLyBSZXNvbHV0aW9uIGluZGVwZW5kZW50
IGxheWVycyBoYXZlIGFsbCB0aGUgbmVlZGVkIGRhdGEgaW4gdGhlIGZpcnN0IHRpbGUgYW5kIGFs
bCB0aGUgb3RoZXJzIGFyZSB1c2VsZXNzLgotICAgICAgICBGbG9hdFJlY3QgZHN0KC1ib3VuZHMu
d2lkdGgoKSAvIDIuMCwgLWJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgYm91bmRzLndpZHRoKCksIGJv
dW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgIG5lZWRzRGlzcGxheSA9IGRyYXdUaWxlKGxheWVyLCBz
Y2FsZSwgVGlsZUluZGV4KDAsIDApLCBkc3QsIHByb2dyYW0pOworICAgICAgICAvLyBSZXNvbHV0
aW9uIGluZGVwZW5kZW50IGxheWVycyBoYXZlIGFsbCB0aGUgbmVlZGVkIGRhdGEgaW4gdGhlIGZp
cnN0IHRpbGUKKyAgICAgICAgdGlsZVNpemUgPSBib3VuZHM7CisgICAgICAgIGRzdENsaXAgPSBi
b3VuZHNSZWN0OworICAgICAgICBmaXJzdCA9IGxhc3QgPSBUaWxlSW5kZXgoMCwgMCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgZmxvYXQgc3ggPSBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLndp
ZHRoKCkpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHN5
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy5oZWlnaHQoKSkgLyBtX3JlcXVpcmVkVGV4dHVy
ZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBub3Jt
YWxpemVkTGF5ZXJWaXNpYmxlUmVjdDsKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKG1f
cmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0
KCkpOwogCi0gICAgICAgIEludFJlY3Qgc3JjKEludFBvaW50Ojp6ZXJvKCksIHRpbGVTaXplKCkp
OwotICAgICAgICBmb3IgKHNyYy5zZXRYKDApOyBzcmMueCgpIDwgbV9yZXF1aXJlZFRleHR1cmVT
aXplLndpZHRoKCk7IHNyYy5zZXRYKHNyYy54KCkgKyBzcmMud2lkdGgoKSkpIHsKLSAgICAgICAg
ICAgIGZvciAoc3JjLnNldFkoMCk7IHNyYy55KCkgPCBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVp
Z2h0KCk7IHNyYy5zZXRZKHNyYy55KCkgKyBzcmMuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgVGlsZUluZGV4IGluZGV4ID0gaW5kZXhPZlRpbGUoc3JjLmxvY2F0aW9uKCkpOworICAgICAg
ICB0aWxlU2l6ZSA9IG1fdGlsZVNpemU7CisgICAgICAgIHRpbGVTaXplLnNjYWxlKGJvdW5kcy53
aWR0aCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSAv
IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICAgICAgICAgICAgICBmbG9h
dCB4ID0gaW5kZXguaSgpICogc3JjLndpZHRoKCkgKiBzeDsKLSAgICAgICAgICAgICAgICBmbG9h
dCB5ID0gaW5kZXguaigpICogc3JjLmhlaWdodCgpICogc3k7Ci0gICAgICAgICAgICAgICAgRmxv
YXRSZWN0IGRzdCh4IC0gYm91bmRzLndpZHRoKCkgLyAyLjAsIHkgLSBib3VuZHMuaGVpZ2h0KCkg
LyAyLjAsIG1pbihib3VuZHMud2lkdGgoKSAtIHgsIHNyYy53aWR0aCgpICogc3gpLCBtaW4oYm91
bmRzLmhlaWdodCgpIC0geSwgc3JjLmhlaWdodCgpICogc3kpKTsKKyAgICAgICAgZHN0Q2xpcCA9
IG5vcm1hbGl6ZWRMYXllckNsaXBSZWN0OworICAgICAgICBkc3RDbGlwLnNjYWxlKGJvdW5kcy53
aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICBkc3RDbGlwLm1vdmVCeShvcmlnaW4p
OwogCi0gICAgICAgICAgICAgICAgbmVlZHNEaXNwbGF5IHw9IGRyYXdUaWxlKGxheWVyLCBzY2Fs
ZSwgaW5kZXgsIGRzdCwgcHJvZ3JhbSk7CisgICAgICAgIC8vIFRoZSBsYXllciBjb250YWlucyBw
aXhlbHMgd2l0aCBjb29yZGluYXRlcyAoMCAuLi4gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRo
KCkgLSAxLCAwIC4uLiBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgLSAxKSwKKyAgICAg
ICAgLy8gc28gY2xhbXAgdGhlIGRlc3RpbmF0aW9uUmVjdC10by10aWxlaW5kZXggY2FsY3VsYXRp
b24gYXBwcm9wcmlhdGVseS4KKyAgICAgICAgZmlyc3QgPSBpbmRleE9mVGlsZShmbG9vcmVkSW50
UG9pbnQoZGVzdGluYXRpb25SZWN0Lm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAgICAgICAgbGFzdCA9
IGluZGV4T2ZUaWxlKGNlaWxlZEludFBvaW50KGRlc3RpbmF0aW9uUmVjdC5tYXhYTWF4WUNvcm5l
cigpKS5zaHJ1bmtUbyhJbnRQb2ludCgtMSwgLTEpICsgbV9yZXF1aXJlZFRleHR1cmVTaXplKSk7
CisgICAgfQorCisgICAgSGFzaFNldDxUaWxlSW5kZXg+IHRpbGVzTmVlZGluZ1JlbmRlcjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdC5pKCk7IGkgPD0gbGFzdC5pKCk7ICsraSkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBmaXJzdC5qKCk7IGogPD0gbGFzdC5qKCk7ICsraikgewor
ICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4KGksIGopOworICAgICAgICAgICAgTGF5ZXJUaWxl
KiB0aWxlID0gbV90aWxlcy5nZXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCF0aWxlKSB7Cisg
ICAgICAgICAgICAgICAgdGlsZSA9IG5ldyBMYXllclRpbGUoKTsKKyAgICAgICAgICAgICAgICBt
X3RpbGVzLmFkZChpbmRleCwgdGlsZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB0aWxl
LT5zZXRWaXNpYmxlKHRydWUpOworICAgICAgICAgICAgRmxvYXRQb2ludCB0aWxlT3JpZ2luKGlu
ZGV4LmkoKSAqIHRpbGVTaXplLndpZHRoKCksIGluZGV4LmooKSAqIHRpbGVTaXplLmhlaWdodCgp
KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBkc3QodGlsZU9yaWdpbiAtIGhhbGZCb3VuZHMsIHRp
bGVTaXplLnNocnVua1RvKGJvdW5kcyAtIHRvRmxvYXRTaXplKHRpbGVPcmlnaW4pKSk7CisgICAg
ICAgICAgICBpZiAoIWRyYXdUaWxlKGxheWVyLCB0aWxlLCBpbmRleCwgc2NhbGUsIGRzdCwgZHN0
Q2xpcCkpCisgICAgICAgICAgICAgICAgdGlsZXNOZWVkaW5nUmVuZGVyLmFkZChpbmRleCk7CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRpbGVJbmRl
eCBpbmRleCA9ICgqaXQpLmtleTsKKyAgICAgICAgaWYgKGluZGV4LmkoKSA8IGZpcnN0LmkoKSB8
fCBpbmRleC5qKCkgPCBmaXJzdC5qKCkgfHwgaW5kZXguaSgpID4gbGFzdC5pKCkgfHwgaW5kZXgu
aigpID4gbGFzdC5qKCkpCisgICAgICAgICAgICAoKml0KS52YWx1ZS0+c2V0VmlzaWJsZShmYWxz
ZSk7CisgICAgfQorCisgICAgLy8gVGhlIHZpc2libGUgcmVjdCB3aWxsIGJlIHVzZWQgb24gdGhl
IFdlYktpdCB0aHJlYWQgYW5kIHNob3VsZCB1c2UgdGhlIGJvdW5kcyBleHByZXNzZWQgaW4KKyAg
ICAvLyBkb2N1bWVudCBjb29yZGluYXRlcywgbm90IGNvcnJlY3RlZCBmb3Igc2NhbGUgaW52YXJp
YW5jZS4gU28gdXNlICJsYXllci0+Ym91bmRzKCkiIGluc3RlYWQKKyAgICAvLyBvZiB0aGUgbG9j
YWwgdmFyaWFibGUgImJvdW5kcyIuCisgICAgRmxvYXRSZWN0IGxheWVyVmlzaWJsZVJlY3QgPSBu
b3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVjdDsKKyAgICBsYXllclZpc2libGVSZWN0LnNjYWxlKGxh
eWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworCisjaWYg
REVCVUdfTEFZRVJfVklTSUJJTElUWQorICAgIFZlY3RvcjxGbG9hdFBvaW50PiB2ID0gdW5wcm9q
ZWN0KGxheWVyLCBjbGlwUG9seWdvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNp
emUoKTsgKytpKSB7CisgICAgICAgIHZbaV0uc2NhbGUobGF5ZXItPmJvdW5kcygpLndpZHRoKCks
IGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgICAgIHZbaV0ubW92ZSh0b0Zsb2F0U2l6
ZShvcmlnaW4pKTsKKyAgICAgICAgdltpXSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUG9p
bnQodltpXSk7CisgICAgfQorCisgICAgLy8gVXNlIGEgdGhpY2sgYm9yZGVyIHRvIG1ha2UgdGhl
IGJvcmRlciB2aXNpYmxlIGV2ZW4gZm9yIHRoZSByb290IGxheWVyICh3aGljaCB0eXBpY2FsbHkg
Y292ZXJzIHRoZSBzY3JlZW4gd2lkdGggYW5kL29yIGhlaWdodCkuCisgICAgdW5zaWduZWQgdG1w
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4odGhpcyk7CisgICAgaW50IHQgPSByYW5kX3Io
JnRtcCk7CisgICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgLy8gV2hlbiBkZWJ1
Z2dpbmcsIGRyYXcgZmlyc3QgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCksIHRoZW4gY2xpcFBv
bHlnb24sIHRoZW4gdgorICAgIC8vIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBwcm9ibGVtIGlzIChj
bGlwcGluZyB0byBpbWFnZSBwbGFuZSwgY2xpcHBpbmcgdG8gdmlld3BvcnQgb3IgdW5wcm9qZWN0
aW5nKS4KKyAgICBsYXllci0+bGF5ZXJSZW5kZXJlcigpLT5kcmF3RGVidWdCb3JkZXIoLyogbGF5
ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkgKi8gLyogY2xpcFBvbHlnb24gKi8gdiwgbWFrZVJHQkFG
cm9tSFNMQShzdGF0aWNfY2FzdDxkb3VibGU+KHQpIC8gUkFORF9NQVgsIDEsIDAuNSwgMSksIDUp
OworICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisjZW5kaWYKKwogICAgIC8vIElmIHdl
IHNjaGVkdWxlIGEgY29tbWl0LCB2aXNpYmlsaXR5IHdpbGwgYmUgdXBkYXRlZCwgYW5kIGRpc3Bs
YXkgd2lsbAogICAgIC8vIGhhcHBlbiBpZiB0aGVyZSBhcmUgYW55IHZpc2libGUgYW5kIGRpcnR5
IHRleHR1cmVzLgotICAgIGlmIChuZWVkc0Rpc3BsYXkpCisgICAgaWYgKCF0aWxlc05lZWRpbmdS
ZW5kZXIuaXNFbXB0eSgpKQogICAgICAgICBsYXllci0+c2V0TmVlZHNDb21taXQoKTsKKworICAg
IHNldEZyb250VmlzaWJpbGl0eShsYXllclZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5kZXIp
OwogfQogCiB2b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqKQpAQCAtNTg5LDE0ICs2NDUsMTAgQEAgdm9pZCBMYXllclRpbGVyOjpwcnVuZVRleHR1
cmVzKCkKICAgICAgICAgICAgIHRpbGVzVG9EZWxldGUuYXBwZW5kKGluZGV4KTsKICAgICB9CiAK
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwotCi0gICAg
ICAgIGZvciAoVmVjdG9yPFRpbGVJbmRleD46Oml0ZXJhdG9yIGl0ID0gdGlsZXNUb0RlbGV0ZS5i
ZWdpbigpOyBpdCAhPSB0aWxlc1RvRGVsZXRlLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBM
YXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLnRha2UoKml0KTsKLSAgICAgICAgICAgIHRpbGUtPmRp
c2NhcmRDb250ZW50cygpOwotICAgICAgICAgICAgZGVsZXRlIHRpbGU7Ci0gICAgICAgIH0KKyAg
ICBmb3IgKFZlY3RvcjxUaWxlSW5kZXg+OjppdGVyYXRvciBpdCA9IHRpbGVzVG9EZWxldGUuYmVn
aW4oKTsgaXQgIT0gdGlsZXNUb0RlbGV0ZS5lbmQoKTsgKytpdCkgeworICAgICAgICBMYXllclRp
bGUqIHRpbGUgPSBtX3RpbGVzLnRha2UoKml0KTsKKyAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRl
bnRzKCk7CisgICAgICAgIGRlbGV0ZSB0aWxlOwogICAgIH0KIH0KIApAQCAtNjUwLDggKzcwMiw3
IEBAIEludFBvaW50IExheWVyVGlsZXI6Om9yaWdpbk9mVGlsZShjb25zdCBUaWxlSW5kZXgmIGlu
ZGV4KQogSW50UmVjdCBMYXllclRpbGVyOjpyZWN0Rm9yVGlsZShjb25zdCBUaWxlSW5kZXgmIGlu
ZGV4LCBjb25zdCBJbnRTaXplJiBib3VuZHMpCiB7CiAgICAgSW50UG9pbnQgb3JpZ2luID0gb3Jp
Z2luT2ZUaWxlKGluZGV4KTsKLSAgICBJbnRTaXplIG9mZnNldChvcmlnaW4ueCgpLCBvcmlnaW4u
eSgpKTsKLSAgICBJbnRTaXplIHNpemUgPSB0aWxlU2l6ZSgpLnNocnVua1RvKGJvdW5kcyAtIG9m
ZnNldCk7CisgICAgSW50U2l6ZSBzaXplID0gdGlsZVNpemUoKS5zaHJ1bmtUbyhib3VuZHMgLSB0
b0ludFNpemUob3JpZ2luKSk7CiAgICAgcmV0dXJuIEludFJlY3Qob3JpZ2luLCBzaXplKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclRpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyVGlsZXIuaAppbmRleCAyZWY2YjIzNTM5ODkyYmQxMzM1ZmRkMTY3Zjk2NjhjZWM5
YTM3YWNmLi5mZDM2OTNlZTJkNWQwNzk4NjQxZTY4ODc4YjA2OGE1NDJmMDFmNTYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGls
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyVGlsZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkxheWVyVGlsZUluZGV4Lmgi
CiAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1HTEVTMlByb2dyYW0uaD4KKyNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0z
Niw2ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ29tcG9zaXRp
bmdUaHJlYWQ7CitjbGFzcyBMYXllclZpc2liaWxpdHk7CiBjbGFzcyBMYXllcldlYktpdFRocmVh
ZDsKIAogY2xhc3MgTGF5ZXJUaWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXll
clRpbGVyPiwgcHVibGljIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgewpAQCAtNjcsMTQg
KzY5LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdl
ZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKTsKICAgICB2aXJ0dWFsIHZv
aWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAgICAg
dmlydHVhbCBMYXllclRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiwgZG91YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OkdMRVMyUHJvZ3JhbSYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCosIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xF
UzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwog
ICAgIHN0YXRpYyB2b2lkIHdpbGxDb21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVu
ZGluZ1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKIAogcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgVGV4dHVyZUpvYiB7Ci0gICAgICAgIGVudW0gVHlwZSB7IFVua25vd24sIFNl
dENvbnRlbnRzLCBVcGRhdGVDb250ZW50cywgRGlzY2FyZENvbnRlbnRzLCBSZXNpemVDb250ZW50
cywgRGlydHlDb250ZW50cyB9OworICAgICAgICBlbnVtIFR5cGUgeyBVbmtub3duLCBTZXRDb250
ZW50cywgVXBkYXRlQ29udGVudHMsIFJlc2l6ZUNvbnRlbnRzLCBEaXJ0eUNvbnRlbnRzIH07CiAK
ICAgICAgICAgVGV4dHVyZUpvYigpCiAgICAgICAgICAgICA6IG1fdHlwZShVbmtub3duKQpAQCAt
OTUsNyArOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX2NvbnRlbnRzKDApCiAgICAg
ICAgICAgICAsIG1fZGlydHlSZWN0KGRpcnR5UmVjdCkKICAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHR5cGUgPT0gRGlzY2FyZENvbnRlbnRzIHx8IHR5cGUgPT0gRGlydHlDb250ZW50cyk7
CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEaXJ0eUNvbnRlbnRzKTsKICAgICAgICAgfQog
CiAgICAgICAgIFRleHR1cmVKb2IoVHlwZSB0eXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OkJ1ZmZlciogY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTEx
Miw3ICsxMTQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVKb2IoU2V0
Q29udGVudHMsIGNvbnRlbnRzLCBjb250ZW50c1JlY3QpOwogICAgICAgICB9CiAgICAgICAgIHN0
YXRpYyBUZXh0dXJlSm9iIHVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7IHJldHVy
biBUZXh0dXJlSm9iKFVwZGF0ZUNvbnRlbnRzLCBjb250ZW50cywgZGlydHlSZWN0KTsgfQotICAg
ICAgICBzdGF0aWMgVGV4dHVyZUpvYiBkaXNjYXJkQ29udGVudHMoY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KSB7IHJldHVybiBUZXh0dXJlSm9iKERpc2NhcmRDb250ZW50cywgZGlydHlSZWN0KTsg
fQogICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiByZXNpemVDb250ZW50cyhjb25zdCBJbnRTaXpl
JiBuZXdTaXplKSB7IHJldHVybiBUZXh0dXJlSm9iKFJlc2l6ZUNvbnRlbnRzLCBuZXdTaXplKTsg
fQogICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiBkaXJ0eUNvbnRlbnRzKGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkgeyByZXR1cm4gVGV4dHVyZUpvYihEaXJ0eUNvbnRlbnRzLCBkaXJ0eVJlY3Qp
OyB9CiAKQEAgLTEyNywyNiArMTI4LDI3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFRpbGVJbmRleCwgTGF5ZXJUaWxlKj4gVGlsZU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8VGls
ZUluZGV4LCBjb25zdCBUZXh0dXJlSm9iKj4gVGlsZUpvYnNNYXA7CiAKLSAgICB2b2lkIHVwZGF0
ZVRpbGVTaXplKCk7Ci0KICAgICBMYXllclRpbGVyKExheWVyV2ViS2l0VGhyZWFkKik7CiAKKyAg
ICAvLyBTd2FwcyBpbiBhIG5ldyBmcm9udCB2aXNpYmlsaXR5IGFuZCByZXR1cm5zIHRoZSBjdXJy
ZW50IG9uZSwgYXRvbWljYWxseS4KKyAgICBMYXllclZpc2liaWxpdHkqIHN3YXBGcm9udFZpc2li
aWxpdHkoTGF5ZXJWaXNpYmlsaXR5Kik7CisKICAgICAvLyBXZWJLaXQgdGhyZWFkCisgICAgdm9p
ZCB1cGRhdGVUaWxlU2l6ZSgpOwogICAgIHZvaWQgYWRkVGV4dHVyZUpvYihjb25zdCBUZXh0dXJl
Sm9iJik7CiAgICAgdm9pZCBjbGVhclRleHR1cmVKb2JzKCk7CiAgICAgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJik7Cisg
ICAgTGF5ZXJWaXNpYmlsaXR5KiB0YWtlRnJvbnRWaXNpYmlsaXR5KCkgeyByZXR1cm4gc3dhcEZy
b250VmlzaWJpbGl0eSgwKTsgfQogCiAgICAgLy8gQ29tcG9zaXRpbmcgdGhyZWFkCiAgICAgdm9p
ZCB1cGRhdGVUaWxlQ29udGVudHMoY29uc3QgVGV4dHVyZUpvYiYsIGNvbnN0IEludFJlY3QmKTsK
ICAgICB2b2lkIGFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiwgY29uc3QgVGV4dHVyZUpvYiYs
IFRpbGVKb2JzTWFwJik7Ci0gICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqLCBjb25z
dCBUZXh0dXJlSm9iJik7CisgICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiwgTGF5ZXJUaWxlKiwgY29uc3QgVGV4dHVyZUpvYiYpOwogICAgIHZvaWQgcHJvY2Vz
c1RleHR1cmVKb2IoY29uc3QgVGV4dHVyZUpvYiYsIFRpbGVKb2JzTWFwJik7CiAgICAgdm9pZCBw
cnVuZVRleHR1cmVzKCk7CiAgICAgdm9pZCB2aXNpYmlsaXR5Q2hhbmdlZChib29sIG5lZWRzRGlz
cGxheSk7Ci0gICAgYm9vbCBkcmF3VGlsZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91Ymxl
IHNjYWxlLCBjb25zdCBUaWxlSW5kZXgmLCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKLQotICAgIC8vIFRo
cmVhZHNhZmUKLSAgICBpbnQgbmVlZHNSZW5kZXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQgY29uc3Qgdm9sYXRpbGUgJj4obV9uZWVkc1JlbmRlckNvdW50KTsgfQorICAgIGJvb2wg
ZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIExheWVyVGlsZSosIGNvbnN0IFRpbGVJ
bmRleCYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0Q2xpcCk7CisgICAgdm9pZCBzZXRGcm9udFZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0
JiB2aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpOwog
CiAgICAgLy8gQ2xlYXIgYWxsIHBlbmRpbmcgdXBkYXRlIGNvbnRlbnQgdGV4dHVyZSBqb2JzCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE2NSw5ICsxNjcsNyBAQCBwcml2YXRlOgogCiAg
ICAgTGF5ZXJXZWJLaXRUaHJlYWQqIG1fbGF5ZXI7CiAKLSAgICBNdXRleCBtX3RpbGVzTXV0ZXg7
Ci0gICAgVGlsZU1hcCBtX3RpbGVzOyAvLyBQcm90ZWN0ZWQgYnkgbV90aWxlc011dGV4Ci0gICAg
aW50IG1fbmVlZHNSZW5kZXJDb3VudDsgLy8gYXRvbWljCisgICAgVGlsZU1hcCBtX3RpbGVzOwog
CiAgICAgYm9vbCBtX25lZWRzQmFja2luZzsKIApAQCAtMTgyLDcgKzE4Miw4IEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFRleHR1cmVKb2I+IG1fcGVuZGluZ1RleHR1cmVKb2JzOyAvLyBBZGRlZCwg
YnV0IG5vdCBjb21taXR0ZWQgeWV0LgogICAgIERlcXVlPFRleHR1cmVKb2I+IG1fdGV4dHVyZUpv
YnM7CiAKLSAgICBkb3VibGUgbV9jb250ZW50c1NjYWxlOworICAgIExheWVyVmlzaWJpbGl0eSog
bV9mcm9udFZpc2liaWxpdHk7CisgICAgTGF5ZXJWaXNpYmlsaXR5KiBtX2JhY2tWaXNpYmlsaXR5
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oCmluZGV4IDJjNmMxODQ0MDhmMDFmYTFi
NDY0MWFjYmU5NTdhNmYwZjE5NTNjODAuLjY0MDU2NGMwYzc1YjBhOTJmOTk1MTE1ZWUyNGI3Mzcx
MWZhYWRmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVXRpbGl0aWVzLmgKQEAgLTMzLDYgKzMzLDUyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gZGV0ZXJtaW5hbnQgb2YgY29sdW1uIHZlY3RvcnMK
K2lubGluZSBmbG9hdCBkZXQoY29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIp
Cit7CisgICAgcmV0dXJuIGEud2lkdGgoKSAqIGIuaGVpZ2h0KCkgLSBhLmhlaWdodCgpICogYi53
aWR0aCgpOworfQorCisvLyBkb3QgcHJvZHVjdAoraW5saW5lIGZsb2F0IGRvdChjb25zdCBGbG9h
dFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICog
Yi53aWR0aCgpICsgYS5oZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Cit9CisKKy8vIFJlcHJlc2VudHMg
YSBsaW5lLCBub3QgYSBmaW5pdGUgbGluZSBzZWdtZW50CitjbGFzcyBMYXllckNsaXBFZGdlIHsK
K3B1YmxpYzoKKyAgICBMYXllckNsaXBFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIGZpcnN0LCBjb25z
dCBGbG9hdFBvaW50JiBzZWNvbmQpCisgICAgICAgIDogbV9maXJzdChmaXJzdCkKKyAgICAgICAg
LCBtX3NlY29uZChzZWNvbmQpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBib29sIGlzUG9p
bnRJbnNpZGUoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZv
ciBudW1lcmljIHJvYnVzdG5lc3MsIHdlIHByZWZlciB0byBjb25zaWRlciBhIHBvaW50IHRvIGJl
IGluc2lkZSByYXRoZXIgdGhhbgorICAgICAgICAvLyBjbGlwIGl0IGFnYWluLgorICAgICAgICBj
b25zdCBmbG9hdCBlcHNpbG9uID0gMWUtNjsKKyAgICAgICAgcmV0dXJuIGRldChtX3NlY29uZCAt
IG1fZmlyc3QsIHAgLSBtX2ZpcnN0KSA+IC1lcHNpbG9uOworICAgIH0KKworICAgIGlubGluZSBG
bG9hdFBvaW50IGNvbXB1dGVJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHAyKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cDMgPSBtX2ZpcnN0OworICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwNCA9IG1fc2Vjb25kOwor
ICAgICAgICBmbG9hdCBkZW5vbWluYXRvciA9IGRldChwMSAtIHAyLCBwMyAtIHA0KTsKKyAgICAg
ICAgRmxvYXRTaXplIGRldHMoZGV0KHRvRmxvYXRTaXplKHAxKSwgdG9GbG9hdFNpemUocDIpKSwg
ZGV0KHRvRmxvYXRTaXplKHAzKSwgdG9GbG9hdFNpemUocDQpKSk7CisgICAgICAgIEZsb2F0UG9p
bnQgcmVzdWx0KAorICAgICAgICAgICAgZGV0KGRldHMsIEZsb2F0U2l6ZShwMS54KCkgLSBwMi54
KCksIHAzLngoKSAtIHA0LngoKSkpIC8gZGVub21pbmF0b3IsCisgICAgICAgICAgICBkZXQoZGV0
cywgRmxvYXRTaXplKHAxLnkoKSAtIHAyLnkoKSwgcDMueSgpIC0gcDQueSgpKSkgLyBkZW5vbWlu
YXRvcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEZs
b2F0UG9pbnQgbV9maXJzdDsKKyAgICBGbG9hdFBvaW50IG1fc2Vjb25kOworfTsKKwogLy8gU3Bl
Y2lmaWVzIGEgY2xpcCBwbGFuZSB3aXRoIG5vcm1hbCBuIGFuZCBjb250YWluaW5nIHBvaW50IHBf
MAogLy8gYXMgcCAqIG4gKyBkID0gMCwgZCA9IC1wXzAgKiBuLiBUaGUgYXN0ZXJpc2sgaXMgZG90
IHByb2R1Y3QuCiBjbGFzcyBMYXllckNsaXBQbGFuZSB7CkBAIC04MCw2ICsxMjYsMjYgQEAgaW5s
aW5lIFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+IGludGVyc2VjdChjb25zdCBWZWN0b3I8
UG9pbnQsIGlubGluZUNhcGFjaXQKICAgICByZXR1cm4gb3V0cHV0TGlzdDsKIH0KIAorLy8gU3V0
aGVybGFuZCAtIEhvZGdtYW4sIG1haW4gZHJpdmVyCit0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CitpbmxpbmUgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiBpbnRlcnNl
Y3RQb2x5Z29uV2l0aFJlY3QoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5
PiYgc3ViamVjdFBvbHlnb24sIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit7CisgICAgRmxv
YXRRdWFkIGNsaXBRdWFkKGNsaXBSZWN0KTsKKyAgICBWZWN0b3I8TGF5ZXJDbGlwRWRnZT4gZWRn
ZXM7CisgICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2UoY2xpcFF1YWQucDEoKSwgY2xpcFF1
YWQucDIoKSkpOworICAgIGVkZ2VzLmFwcGVuZChMYXllckNsaXBFZGdlKGNsaXBRdWFkLnAyKCks
IGNsaXBRdWFkLnAzKCkpKTsKKyAgICBlZGdlcy5hcHBlbmQoTGF5ZXJDbGlwRWRnZShjbGlwUXVh
ZC5wMygpLCBjbGlwUXVhZC5wNCgpKSk7CisgICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2Uo
Y2xpcFF1YWQucDQoKSwgY2xpcFF1YWQucDEoKSkpOworCisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+
IG91dHB1dExpc3QgPSBzdWJqZWN0UG9seWdvbjsKKyAgICBmb3IgKFZlY3RvcjxMYXllckNsaXBF
ZGdlPjo6Y29uc3RfaXRlcmF0b3IgY2xpcEVkZ2VJdGVyYXRvciA9IGVkZ2VzLmJlZ2luKCk7IGNs
aXBFZGdlSXRlcmF0b3IgIT0gZWRnZXMuZW5kKCk7ICsrY2xpcEVkZ2VJdGVyYXRvcikgeworICAg
ICAgICBjb25zdCBMYXllckNsaXBFZGdlJiBjbGlwRWRnZSA9ICpjbGlwRWRnZUl0ZXJhdG9yOwor
ICAgICAgICBWZWN0b3I8RmxvYXRQb2ludD4gaW5wdXRMaXN0ID0gb3V0cHV0TGlzdDsKKyAgICAg
ICAgb3V0cHV0TGlzdCA9IGludGVyc2VjdChpbnB1dExpc3QsIGNsaXBFZGdlKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG91dHB1dExpc3Q7Cit9CisKIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KIGlubGluZSBGbG9hdFJlY3QgYm91bmRpbmdCb3goY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQs
IGlubGluZUNhcGFjaXR5PiYgcG9pbnRzKQogewpAQCAtMTAyLDYgKzE2OCwxMTUgQEAgaW5saW5l
IEZsb2F0UmVjdCBib3VuZGluZ0JveChjb25zdCBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2Fw
YWNpdHk+JiBwb2ludHMpCiAgICAgcmV0dXJuIEZsb2F0UmVjdCh4bWluLCB5bWluLCB4bWF4IC0g
eG1pbiwgeW1heCAtIHltaW4pOwogfQogCitpbmxpbmUgRmxvYXRQb2ludDNEIGNvbXB1dGVCYXJ5
Y2VudHJpY0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQm
IHQxLCBjb25zdCBGbG9hdFBvaW50JiB0MiwgY29uc3QgRmxvYXRQb2ludCYgdDMsIGJvb2wqIG9r
KQoreworICAgIC8vIENvbXB1dGUgdmVjdG9ycworICAgIEZsb2F0U2l6ZSB2MCA9IHQyIC0gdDE7
CisgICAgRmxvYXRTaXplIHYxID0gdDMgLSB0MTsKKyAgICBGbG9hdFNpemUgdjIgPSBwIC0gdDE7
CisKKyAgICAvLyBDb21wdXRlIGRvdCBwcm9kdWN0cworICAgIGZsb2F0IGRvdDAwID0gZG90KHYw
LCB2MCk7CisgICAgZmxvYXQgZG90MDEgPSBkb3QodjAsIHYxKTsKKyAgICBmbG9hdCBkb3QwMiA9
IGRvdCh2MCwgdjIpOworICAgIGZsb2F0IGRvdDExID0gZG90KHYxLCB2MSk7CisgICAgZmxvYXQg
ZG90MTIgPSBkb3QodjEsIHYyKTsKKworICAgIC8vIENvbXB1dGUgYmFyeWNlbnRyaWMgY29vcmRp
bmF0ZXMKKyAgICBmbG9hdCBkZW5vbWluYXRvciA9IChkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBk
b3QwMSk7CisgICAgKm9rID0gKGRlbm9taW5hdG9yICE9IDAuMCk7CisgICAgZmxvYXQgdiA9IChk
b3QxMSAqIGRvdDAyIC0gZG90MDEgKiBkb3QxMikgLyBkZW5vbWluYXRvcjsKKyAgICBmbG9hdCB3
ID0gKGRvdDAwICogZG90MTIgLSBkb3QwMSAqIGRvdDAyKSAvIGRlbm9taW5hdG9yOworCisgICAg
cmV0dXJuIEZsb2F0UG9pbnQzRCgxLjBmIC0gdiAtIHcsIHYsIHcpOworfQorCitpbmxpbmUgZmxv
YXQgbWFuaGF0dGFuRGlzdGFuY2VUb1ZpZXdwb3J0KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7Cisg
ICAgZmxvYXQgZCA9IDA7CisgICAgaWYgKGZhYnNmKHAueCgpKSA+IDEpCisgICAgICAgIGQgKz0g
ZmFic2YocC54KCkpIC0gMTsKKyAgICBpZiAoZmFic2YocC55KCkpID4gMSkKKyAgICAgICAgZCAr
PSBmYWJzZihwLnkoKSkgLSAxOworICAgIHJldHVybiBkOworfQorCitzdHJ1Y3QgVW5wcm9qZWN0
aW9uVmVydGV4IHsKKyAgICBGbG9hdFBvaW50IHh5OworICAgIGZsb2F0IHc7CisgICAgRmxvYXRT
aXplIHV2OworfTsKKworaW5saW5lIGJvb2wgY29tcGFyZU1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3
cG9ydChjb25zdCBVbnByb2plY3Rpb25WZXJ0ZXgmIGEsIGNvbnN0IFVucHJvamVjdGlvblZlcnRl
eCYgYikKK3sKKyAgICByZXR1cm4gbWFuaGF0dGFuRGlzdGFuY2VUb1ZpZXdwb3J0KGEueHkpIDwg
bWFuaGF0dGFuRGlzdGFuY2VUb1ZpZXdwb3J0KGIueHkpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+CitpbmxpbmUgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5
PiB1bnByb2plY3QoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFZlY3RvcjxG
bG9hdFBvaW50LCBpbmxpbmVDYXBhY2l0eT4mIHBvaW50cykKK3sKKyAgICAvLyBVc2UgcGVyc3Bl
Y3RpdmUgY29ycmVjdCB0ZXh0dXJpbmcgbG9naWMgdG8gZmluZCB0aGUgbG9jYXRpb25zIG9mIHRo
ZXNlIHBvaW50cyBpbiBub3JtYWxpemVkIGxheWVyIGNvb3JkaW5hdGVzCisgICAgVmVjdG9yPEZs
b2F0UG9pbnQsIDQ+IGJvdW5kcyA9IGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpOworICAgIFZl
Y3RvcjxmbG9hdCwgND4gd3MgPSBsYXllci0+d3MoKTsKKyAgICBpZiAod3MuaXNFbXB0eSgpKQor
ICAgICAgICB3cy5maWxsKDAuMGYsIGJvdW5kcy5zaXplKCkpOworICAgIGNvbnN0IFZlY3RvcjxG
bG9hdFBvaW50PiYgdGV4Q29vcmRzID0gbGF5ZXItPnRleHR1cmVDb29yZGluYXRlcygpOworICAg
IGlmIChib3VuZHMuc2l6ZSgpIDwgMykKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxGbG9hdFBvaW50
LCBpbmxpbmVDYXBhY2l0eT4oKTsKKworICAgIFZlY3RvcjxVbnByb2plY3Rpb25WZXJ0ZXgsIDQ+
IHZlcnRpY2VzKGJvdW5kcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm91
bmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHZlcnRpY2VzW2ldLnh5ID0gYm91bmRzW2ldOwor
ICAgICAgICB2ZXJ0aWNlc1tpXS53ID0gd3NbaV07CisgICAgICAgIHZlcnRpY2VzW2ldLnV2ID0g
dG9GbG9hdFNpemUodGV4Q29vcmRzW2ldKTsKKyAgICB9CisgICAgLy8gRWFjaCBwb2ludCBuZWVk
cyB0byBiZSBxdWFsaWZpZWQgYXMgbHlpbmcgaW4gb25lIG9mIHRoZSB0cmlhbmdsZXMgZm9ybWVk
IGJ5IHRoZSAiYm91bmRzIiB0cmlhbmdsZSBzdHJpcAorICAgIC8vIFRyeSB0byB1c2Ugb25seSBw
b2ludHMgdGhhdCBhcmUgb25zY3JlZW4sIGZvciBudW1lcmljYWwgc3RhYmlsaXR5CisgICAgc3Rk
Ojpzb3J0KHZlcnRpY2VzLmJlZ2luKCksIHZlcnRpY2VzLmVuZCgpLCBjb21wYXJlTWFuaGF0dGFu
RGlzdGFuY2VUb1ZpZXdwb3J0KTsKKworICAgIFZlY3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBh
Y2l0eT4gcmVzdWx0OworCisgICAgc2l6ZV90IGkwID0gMDsKKworICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHAwID0gdmVydGljZXNbaTBdLnh5OworICAgIGZsb2F0IHcwID0gdmVydGljZXNbaTBdLnc7
CisgICAgRmxvYXRTaXplIHV2MCA9IHZlcnRpY2VzW2kwXS51djsKKworICAgIGZvciAoc2l6ZV90
IGogPSAwOyBqIDwgcG9pbnRzLnNpemUoKTsgKytqKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHAgPSBwb2ludHNbal07CisgICAgICAgIEZsb2F0UG9pbnQgdGV4Q29vcmQ7CisgICAgICAg
IGZvciAoc2l6ZV90IGRpID0gMTsgZGkgKyAxIDwgdmVydGljZXMuc2l6ZSgpOyArK2RpKSB7Cisg
ICAgICAgICAgICBzaXplX3QgaSA9IChpMCArIGRpKSAlIHZlcnRpY2VzLnNpemUoKTsKKyAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAxID0gdmVydGljZXNbaV0ueHk7CisgICAgICAgICAg
ICBmbG9hdCB3MSA9IHZlcnRpY2VzW2ldLnc7CisgICAgICAgICAgICBGbG9hdFNpemUgdXYxID0g
dmVydGljZXNbaV0udXY7CisgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiA9IHZlcnRp
Y2VzW2kgKyAxXS54eTsKKyAgICAgICAgICAgIGZsb2F0IHcyID0gdmVydGljZXNbaSArIDFdLnc7
CisgICAgICAgICAgICBGbG9hdFNpemUgdXYyID0gdmVydGljZXNbaSArIDFdLnV2OworCisgICAg
ICAgICAgICBib29sIG9rOworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGIgPSBjb21wdXRlQmFy
eWNlbnRyaWNDb29yZGluYXRlcyhwLCBwMCwgcDEsIHAyLCAmb2spOworICAgICAgICAgICAgaWYg
KCFvaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHcwICYm
IHcxICYmIHcyKSB7CisgICAgICAgICAgICAgICAgLy8gUGVyc3BlY3RpdmUgY29ycmVjdCBpbnRl
cnBvbGF0aW9uCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludDNEIGJ3KGIueCgpIC8gdzAsIGIu
eSgpIC8gdzEsIGIueigpIC8gdzIpOworICAgICAgICAgICAgICAgIGZsb2F0IGRlbm9taW5hdG9y
ID0gYncueCgpICsgYncueSgpICsgYncueigpOworICAgICAgICAgICAgICAgIHRleENvb3JkID0g
RmxvYXRQb2ludDo6emVybygpICsgKGJ3LngoKSAqIHV2MCArIGJ3LnkoKSAqIHV2MSArIGJ3Lnoo
KSAqIHV2Mik7CisgICAgICAgICAgICAgICAgdGV4Q29vcmQuc2V0WCh0ZXhDb29yZC54KCkgLyBk
ZW5vbWluYXRvcik7CisgICAgICAgICAgICAgICAgdGV4Q29vcmQuc2V0WSh0ZXhDb29yZC55KCkg
LyBkZW5vbWluYXRvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IExpbmVhciBpbnRlcnBvbGF0aW9uCisgICAgICAgICAgICAgICAgdGV4Q29vcmQgPSBGbG9hdFBv
aW50Ojp6ZXJvKCkgKyAoYi54KCkgKiB1djAgKyBiLnkoKSAqIHV2MSArIGIueigpICogdXYyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJl
c3VsdC5hcHBlbmQodGV4Q29vcmQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBp
bmxpbmUgRmxvYXRQb2ludDNEIG11bHRWZWNNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2ludDNEJiBwLCBmbG9hdCYgdykKIHsKICAgICBGbG9h
dFBvaW50M0QgcmVzdWx0KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9XZWJPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3Zlcmxh
eS5jcHAKaW5kZXggMTllMWEzMTc2N2Y3MDllOGQzNjhkMmVmOGNjM2M5MWRiMzIwN2I5Mi4uYjNm
Zjc0YjZkOGE4NWFhYmVmOTBjNWEyNzA1OTg5YzRhYThiODQ1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXkuY3BwCkBAIC01MDEsNyArNTAxLDcgQEAgdm9pZCBX
ZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5l
ZWRlZChMYXllckNvbXBvc2kKICAgICBtX3RleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVD
b250ZW50cyk7CiB9CiAKLXZvaWQgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGll
bnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIHNj
YWxlLCBjb25zdCBHTEVTMlByb2dyYW0mKQordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVy
LCBjb25zdCBHTEVTMlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgLypj
bGlwUmVjdCovKQogewogICAgIGlmICghbV90ZXh0dXJlIHx8ICFtX3RleHR1cmUtPmJ1ZmZlcigp
KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYk92ZXJsYXlfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVy
bGF5X3AuaAppbmRleCA2ZjU2ODA5MmE1NjdlZmI4M2UyYTgyM2ZiN2IzZjkxMDY5Nzk5MzJkLi4z
OTdiNzEwMjg0MjE4YTgxYWRiZTk1MzhmMGI5MjYyZGEwN2YyYjQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlfcC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheV9wLmgKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoV2Vi
Q29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogICAgIHZpcnR1YWwgdm9pZCBsYXllclZp
c2liaWxpdHlDaGFuZ2VkKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZp
c2libGUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKFdlYkNvcmU6
OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVz
KFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGNvbnN0IFBs
YXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdU
ZXh0dXJlcyhXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3QgUGxhdGZvcm06
OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgY2xpcFJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhXZWJD
b3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAKIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203732</attachid>
            <date>2013-06-04 15:40:28 -0700</date>
            <delta_ts>2013-06-12 14:11:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117211-20130605003856.patch</filename>
            <type>text/plain</type>
            <size>64894</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwOTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY3YjFlZTA3ZDM4ODdj
Mzg4NmVmNjk0Zjc3ZWM1MzQyMmMzNWVmNC4uY2Y4ZmQ2OWRjNmE1NWQ5ODQwNDA4MmQ3NGJkNDBi
MTRmNDkzMGQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMy0wNi0wNCAgQXJ2
aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIExh
eWVyVGlsZXIgZmFpbHMgdG8gdGlsZSByZWFsbHkgYmlnIGxheWVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MjExCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUFIgMjczNTUwCisKKyAgICAgICAgVGhl
IGNhdXNlIGZvciB0aGlzIGJ1ZyB3YXMgdGhhdCBMYXllclRpbGVyIGNvbXB1dGVkIHdoaWNoIHRp
bGVzIGFyZQorICAgICAgICB2aXNpYmxlIGJ5IGV4aGF1c3RpdmVseSBtYXBwaW5nIGV2ZXJ5IHRp
bGUgdG8gbm9ybWFsaXplZCBkZXZpY2UKKyAgICAgICAgY29vcmRpbmF0ZXMgYW5kIGNoZWNraW5n
IGlmIGl0IGludGVyc2VjdGVkIHRoZSB2aWV3cG9ydC4gSWYgdGhlcmUgd2FzIGEKKyAgICAgICAg
bG90IG9mIHRpbGVzLCBpdCB3b3VsZCBnZXQgc3R1Y2sgaW4gdGhpcyBsb29wLCBpdGVyYXRpbmcg
b3ZlciBhbGwKKyAgICAgICAgdGlsZXMsIGZvciBhIHZlcnkgbG9uZyB0aW1lLiBBbHNvLCB0aGUg
dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB3YXMKKyAgICAgICAgdHJhbnNmZXJyZWQgdG8gdGhlIFdl
YktpdCB0aHJlYWQgdXNpbmcgbXV0ZXhlcywgd2hpY2ggYWRkZWQgdW5uZWNlc3NhcnkKKyAgICAg
ICAgbXV0ZXggY29udGVudGlvbiB0byB0aGUgbWl4LgorCisgICAgICAgIEZpeGVkIGJ5IGRvaW5n
IHRoZSByZXZlcnNlIGNhbGN1bGF0aW9uLCB1bnByb2plY3RpbmcgdGhlIHZpc2libGUgcGFydAor
ICAgICAgICBvZiB0aGUgbGF5ZXIgdG8gbGF5ZXIgY29vcmRpbmF0ZSBzcGFjZSB0byBmaW5kIHdo
aWNoIHRpbGVzIGFyZSB2aXNpYmxlLgorICAgICAgICBJbnN0ZWFkIG9mIGRvaW5nIGEgdHJhZGl0
aW9uYWwgdW5wcm9qZWN0aW9uIG9mIHBvaW50IHRvIGxpbmUgYW5kIHNlZQorICAgICAgICB3aGVy
ZSB0aGUgbGluZSBpbnRlcnNlY3RzIHRoZSBsYXllciwgdGhpcyBwYXRjaCB1c2VzIHRoZSB3LWNv
b3JkaW5hdGVzCisgICAgICAgIG9mIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBlcmZvcm0gInBlcnNw
ZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIiBvZiB0aGUKKyAgICAgICAgaW50ZXJzZWN0aW9uIHBv
aW50cyBpbiBkZXZpY2Ugc3BhY2UsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgdW5w
cm9qZWN0aW9uIHNpbmNlIHBlcnNwZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIGNvbXB1dGVzIGEg
MkQKKyAgICAgICAgY29vcmRpbmF0ZSBpbiAobm9ybWFsaXplZCkgbGF5ZXIgY29vcmRpbmF0ZSBz
cGFjZSB3aGljaCBpcyBlYXNpbHkKKyAgICAgICAgc2NhbGVkIHVwIHRvIHRoZSBsYXllciBib3Vu
ZHMgYW5kIGdldCB0aGUgdmlzaWJsZSByZWdpb24gZXhwcmVzc2VkIGluCisgICAgICAgIGxheWVy
IGNvb3JkaW5hdGUgc3BhY2UuCisKKyAgICAgICAgVGhlIHZpc2libGUgYXJlYSBpcyBhcHByb3hp
bWF0ZWQgYnkgYSByZWN0YW5nbGUsIGFuZCBhIHNldCBvZiB0aWxlcworICAgICAgICBuZWVkaW5n
IHJlbmRlciBhcmUgYWRkZWQgdG8gdGhlIG1peCwgYW5kICB3ZSBoYXZlIGEgc3dhcHBhYmxlIGRh
dGEKKyAgICAgICAgc3RydWN0dXJlIHNvIHZpc2JpbGl0eSBjYW4gYmUgdHJhbnNmZXJyZWQgdG8g
V2ViS2l0IHRocmVhZCB3aXRob3V0CisgICAgICAgIG11dGV4ZXMsIGJ1dCBpbnN0ZWFkIHVzaW5n
IGF0b21pYyBzd2FwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQuY3BwOgorICAgICAgICAoQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1Rl
eHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdl
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoRUdMSW1hZ2VMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaDoKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGU6OkxheWVyVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGU6OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6dXBkYXRlQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpkaXNjYXJkQ29udGVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmg6CisgICAg
ICAgIChMYXllclRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpjb250ZW50c1Nj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6c2V0Q29udGVudHNEaXJ0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAg
ICAgICAgKExheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxp
dHk6OkxheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6
OnZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c2V0Vmlz
aWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJWaXNpYmlsaXR5OjpuZWVkc1JlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OnRpbGVOZWVkc1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OndpbGxSZW5kZXJUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c3dhcFRpbGVzTmVlZGluZ1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6Om1lcmdlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjp+TGF5ZXJUaWxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyOjpzd2FwRnJvbnRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXI6OnNldEZyb250VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6cHJvY2Vzc1RleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpwZXJmb3JtVGls
ZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpkcmF3VGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjppbmZsYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBydW5lVGV4
dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cmVjdEZvclRpbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclRpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OlRleHR1cmVKb2I6OlRleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6dGFrZUZyb250VmlzaWJpbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXQpOgorICAgICAgICAoV2ViQ29yZTo6ZG90KToKKyAgICAgICAgKExh
eWVyQ2xpcEVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDbGlwRWRnZTo6TGF5ZXJDbGlw
RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNsaXBFZGdlOjppc1BvaW50SW5zaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2xpcEVkZ2U6OmNvbXB1dGVJbnRlcnNlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Om1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydCk6CisgICAgICAgIChVbnByb2plY3Rpb25WZXJ0
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZU1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjp1bnByb2plY3QpOgorCiAyMDEzLTA1LTMxICBBcnZpZCBO
aWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBpbWFnZSBwbGFuZSBh
cmUgaW5jb3JyZWN0bHkgdHJhbnNmb3JtZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmlu
ZGV4IDc0MDBjN2Y4YTc4MGMxODQ0NmI2NzEyNjVkODcwODRmMTk5MTM3YzEuLjlhMmRhMDlkNTY0
NjU5YjA3MDk1N2EyZGVjMWY1ZWNhM2I2NzQzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA2LTA0ICBBcnZpZCBOaWxzc29uICA8YW5pbHNz
b25AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gTGF5ZXJUaWxlciBmYWlscyB0byB0
aWxlIHJlYWxseSBiaWcgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTcyMTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQUiAyNzM1NTAKKworICAgICAgICBBZGFwdCB0byBjaGFuZ2VzIGluIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgaW50ZXJmYWNlLgorCisgICAgICAgICogQXBpL1dl
Yk92ZXJsYXkuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKiBBcGkv
V2ViT3ZlcmxheV9wLmg6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudCk6CisKIDIwMTMtMDUtMjkgIE90dG8gRGVyZWsgQ2hldW5nICA8b3RjaGV1bmdAcmlt
LmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIG1vcmUgY2VsbHVsYXIgdGVjaG5vbG9n
aWVzIGludG8gdGhlIE5ldHdvcmtJbmZvIGVudW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFzTGF5ZXJXZWJLaXRUaHJlYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXll
cldlYktpdFRocmVhZC5jcHAKaW5kZXggNDM0ZTc0MWEwZjM4NGZjYWVkNjZjNDY4MWZhN2MyNzI0
ZDk5YTRiOC4uYzhhOWY4Y2NkYzMyNDFkMzlhYTIxZDEwOTQyMDM0MmU2NTY4YjFiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNM
YXllcldlYktpdFRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiwgYm9vbCkgeyB9CiAgICAgdm9pZCB1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqKSB7IH0KIAotICAgIHZvaWQgZHJhd1RleHR1cmVzKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpOwor
ICAgIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBjb25zdCBHTEVT
MlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpOwogICAg
IHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogCiAgICAgdm9p
ZCBjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwpA
QCAtNTksNyArNTksNyBAQCBDYW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpDYW52
YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KEJsYWNrQmVycgogewogfQogCi12b2lkIENh
bnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlLCBjb25zdCBHTEVTMlByb2dyYW0mKQordm9pZCBD
YW52YXNMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IEdMRVMyUHJvZ3JhbSYsIGRvdWJsZSwgY29uc3Qg
RmxvYXRSZWN0JiAvKmNsaXBSZWN0Ki8pCiB7CiAgICAgaWYgKCFtX2J1ZmZlcikKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9z
aXRpbmdUaHJlYWRDbGllbnQuY3BwCmluZGV4IDFlZjRmN2Y2NjUxZmQ1ODIzZmExNDMzNTY3YjRl
YzQyODgwMTRkZjQuLjA1YmU1Y2ZlMThmZGVkYTNlZGM2MDgzYzAzZmZlMTU2YjAzZWM0MDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdM
SW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudC5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBFR0xJbWFnZUxheWVyQ29tcG9z
aXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGkK
IHsKIH0KIAotdm9pZCBFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdU
ZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIC8qc2NhbGUqLywg
Y29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtKQordm9pZCBFR0xJbWFnZUxheWVyQ29tcG9zaXRp
bmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXll
ciwgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtLCBkb3VibGUgLypzY2FsZSovLCBjb25zdCBG
bG9hdFJlY3QmIC8qY2xpcFJlY3QqLykKIHsKICAgICBpZiAoIW1fdGV4dHVyZUFjY2Vzc29yIHx8
ICFtX3RleHR1cmVBY2Nlc3Nvci0+dGV4dHVyZUlEKCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1h
Z2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVu
dC5oCmluZGV4IGY0NjlmY2NkYWFkMGVlYWMxY2VjM2VmNjdjYTI1MDY0YWViODFhZTkuLjhkMzg5
ZmRmMTNiNDdiMjQ0NDAwMjA4NDRjOWE4ZjNkY2VhOGQwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaApAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVyVmlzaWJpbGl0eUNoYW5n
ZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJvb2wpIHsgfQogCiAgICAgdmlydHVhbCB2b2lk
IHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIHZp
cnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJsZSBz
Y2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGRv
dWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCmluZGV4IDkyMmFjNGUzODRlMWJh
ZjY1NWNmMjhmZDdjNzg4MjVlNTgyMWE5YzQuLmU3ZWQ5ODRmYWYzZmUwMWQ3MTVlNjM3MTE2MmM5
OWM2MzkwZWM4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNw
cApAQCAtMjI4LDcgKzIyOCw3IEBAIEZsb2F0UXVhZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjp0
cmFuc2Zvcm1lZEhvbGVQdW5jaFJlY3QoKSBjb25zdAogICAgIHJldHVybiBtX2RyYXdUcmFuc2Zv
cm0ubWFwUXVhZChob2xlUHVuY2hSZWN0KTsKIH0KIAotdm9pZCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkOjpkcmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dy
YW0sIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpCit2b2lkIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OmRyYXdUZXh0dXJlcyhjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0sIGRvdWJsZSBz
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlw
UmVjdCkKIHsKICAgICBpZiAobV9wbHVnaW5WaWV3KSB7CiAgICAgICAgIGlmIChtX2lzVmlzaWJs
ZSkgewpAQCAtMjc5LDEwICsyNzksMTAgQEAgdm9pZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpk
cmF3VGV4dHVyZXMoZG91YmxlIHNjYWxlLCBjb25zdCBHTEVTMlByb2dyYW0mIHByb2cKICNlbmRp
ZgogCiAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZHJhd1RleHR1cmVzKHRo
aXMsIHNjYWxlLCBwcm9ncmFtKTsKKyAgICAgICAgbV9jbGllbnQtPmRyYXdUZXh0dXJlcyh0aGlz
LCBwcm9ncmFtLCBzY2FsZSwgY2xpcFJlY3QpOwogfQogCi12b2lkIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ6OmRyYXdTdXJmYWNlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNm
b3JtLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBtYXNrLCBjb25zdCBHTEVTMlByb2dyYW0mIHBy
b2dyYW0pCit2b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKGNvbnN0IEdM
RVMyUHJvZ3JhbSYgcHJvZ3JhbSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFu
c2Zvcm0sIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2spCiB7CiAgICAgdXNpbmcgbmFtZXNw
YWNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhy
ZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
Q29tcG9zaXRpbmdUaHJlYWQuaAppbmRleCAyYmRiZjkwNjdmZTUzOTc0ZDhmNjQzNTgwYWZiMjRl
Njk3NmYyODQzLi5hNjRhOTFhMDFjODMxMWE1YWIzNWFjMDc4ZjFiMjY1MzZmZjVjNGM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
Q29tcG9zaXRpbmdUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaApAQCAtMTkxLDggKzE5MSw4IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZGVsZXRlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgZHJhd1Rl
eHR1cmVzKGRvdWJsZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpHTEVTMlByb2dyYW0mLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0KTsKLSAgICB2b2lk
IGRyYXdTdXJmYWNlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogbWFzaywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVT
MlByb2dyYW0mKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlcyhjb25zdCBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7CisgICAgdm9pZCBk
cmF3U3VyZmFjZShjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJv
Z3JhbSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCogbWFzayk7CiAKICAgICB2b2lkIHJlbGVhc2VUZXh0dXJlUmVzb3VyY2VzKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgKaW5kZXggMzE4Nzhm
NGFjYTQ2NGJkYzU0MDA3NmE4OTM5YjQ2YWI4ZDJmZjg1Yy4uMDhjZmUxYWE1NjE5MjA0ZWI1MzZm
YWNiZTgzMWU0YzA4NmI0ODBlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50LmgKQEAgLTMwLDYgKzMwLDcgQEAgY2xhc3MgR0xFUzJQcm9ncmFtOwog
fQogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBMYXllckNv
bXBvc2l0aW5nVGhyZWFkOwogY2xhc3MgTGF5ZXJUZXh0dXJlOwogCkBAIC00Miw3ICs0Myw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNv
bXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJs
ZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dy
YW0mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dy
YW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopID0gMDsK
IAogICAgIC8vIE9wdGlvbmFsLiBBbGxvd3MgbGF5ZXJzIHRvIHNlcnZlIGFzIGEgbWFzayBmb3Ig
b3RoZXIgbGF5ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAppbmRleCA1YTZiODc1ZTE0OTU0
ZDFmNzc1MTkxYWQwNmRiMjQ0NjA2Mzc4MTQwLi4wMTNiZmQwYWFkMzE1ZDRhMmFhMWQ2NzU4MTMw
ZDRmYzlmOTZiOGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKQEAgLTkxOSw3ICs5MTks
NyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNv
bXBvc2l0aW5nVGhyZWFkKiBsYXllciwgaW50CiAKICAgICAgICAgaWYgKCFkcmF3U3VyZmFjZSkg
ewogICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNlTGF5ZXJQcm9n
cmFtKGxheWVyUHJvZ3JhbSk7Ci0gICAgICAgICAgICBsYXllci0+ZHJhd1RleHR1cmVzKG1fc2Nh
bGUsIHByb2dyYW0sIG1fdmlzaWJsZVJlY3QpOworICAgICAgICAgICAgbGF5ZXItPmRyYXdUZXh0
dXJlcyhwcm9ncmFtLCBtX3NjYWxlLCBtX3Zpc2libGVSZWN0LCBjbGlwUmVjdCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEcmF3IHRoZSByZWZsZWN0aW9uIGlmIGl0IGV4aXN0
cy4KICAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKQEAgLTkzMSwxMSAr
OTMxLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBpbnQKICAgICAgICAgICAgICAgICAgICAgbWFz
ayA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CiAKICAgICAgICAgICAgICAg
ICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VMYXllclByb2dyYW0obGF5ZXJQcm9n
cmFtLCBtYXNrKTsKLSAgICAgICAgICAgICAgICBsYXllci0+ZHJhd1N1cmZhY2UobGF5ZXItPmxh
eWVyUmVuZGVyZXJTdXJmYWNlKCktPnJlcGxpY2FEcmF3VHJhbnNmb3JtKCksIG1hc2ssIHByb2dy
YW0pOworICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShwcm9ncmFtLCBsYXllci0+
bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzayk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9
IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0sIGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAg
ICAgICAgICBsYXllci0+ZHJhd1N1cmZhY2UobGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCkt
PmRyYXdUcmFuc2Zvcm0oKSwgbGF5ZXItPm1hc2tMYXllcigpLCBwcm9ncmFtKTsKKyAgICAgICAg
ICAgIGxheWVyLT5kcmF3U3VyZmFjZShwcm9ncmFtLCBsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZh
Y2UoKS0+ZHJhd1RyYW5zZm9ybSgpLCBsYXllci0+bWFza0xheWVyKCkpOwogICAgICAgICB9CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyVGlsZS5jcHAKaW5kZXggMDRlMWVkNTAzNWQyZDZlNzEyNzE3ZmFmZTQw
YWQxMjIzZTY5YTFjOS4uZjdlZjM4Nzc0MGM3MDc2NjU1MTgxM2QyYTAyMzcwMjMxODBlYjEzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9M
YXllclRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJUaWxlLmNwcApAQCAtMjcsOSArMjcsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBMYXllclRpbGU6OkxheWVyVGlsZSgpCi0gICAgOiBtX2NvbnRlbnRzRGlydHkoZmFsc2Up
CisgICAgOiBtX3NjYWxlKDAuMCkKKyAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAs
IG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fbmVlZHNSZW5kZXIoZmFsc2UpCiB7CiB9CiAKQEAg
LTQxLDE2ICs0MSwxOSBAQCBMYXllclRpbGU6On5MYXllclRpbGUoKQogCiB2b2lkIExheWVyVGls
ZTo6c2V0Q29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNv
bnRlbnRzKQogeworICAgIG1fc2NhbGUgPSAwLjA7IC8vIFJlc29sdXRpb24gaW5kZXBlbmRlbnQK
ICAgICBzZXRUZXh0dXJlKHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnRleHR1cmVG
b3JDb250ZW50cyhjb250ZW50cykpOwogfQogCi12b2lkIExheWVyVGlsZTo6dXBkYXRlQ29udGVu
dHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNvbnRlbnRzKQordm9p
ZCBMYXllclRpbGU6OnVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyKiBjb250ZW50cywgZG91YmxlIHNjYWxlKQogeworICAgIG1fc2NhbGUgPSBzY2Fs
ZTsKICAgICBzZXRUZXh0dXJlKHRleHR1cmVDYWNoZUNvbXBvc2l0aW5nVGhyZWFkKCktPnVwZGF0
ZUNvbnRlbnRzKG1fdGV4dHVyZSwgY29udGVudHMpKTsKIH0KIAogdm9pZCBMYXllclRpbGU6OmRp
c2NhcmRDb250ZW50cygpCiB7CisgICAgbV9zY2FsZSA9IDAuMDsgLy8gVW5rbm93biBzY2FsZQog
ICAgIHNldFRleHR1cmUoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oCmluZGV4IDEzZDMyYzllYzcwNWY0
M2ExZWUwZDBmZDE1N2FjMTkzODgxNmM0ZjkuLmM5ZTk4MjFiNzljMDY1ZmFkODE0YjgxNDZlM2My
MjY3MDMxNDc1ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaApAQCAtNDYsMjkgKzQ2LDIzIEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmUgJiYgbV90ZXh0
dXJlLT5idWZmZXIoKTsgfQogCiAgICAgdm9pZCBzZXRDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciopOwotICAgIHZvaWQgdXBkYXRlQ29udGVudHMoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqKTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiwgZG91YmxlIHNjYWxl
KTsKICAgICB2b2lkIGRpc2NhcmRDb250ZW50cygpOwogCi0gICAgLy8gVGhlIGN1cnJlbnQgdGV4
dHVyZSBpcyBhbiBhY2N1cmF0ZSBwcmV2aWV3IG9mIHRoaXMgbGF5ZXIsIGJ1dCBhIG1vcmUKLSAg
ICAvLyBkZXRhaWxlZCB0ZXh0dXJlIGNvdWxkIGJlIG9idGFpbmVkIGJ5IHJlcGFpbnRpbmcgdGhl
IGxheWVyLiBVc2VkIHdoZW4KLSAgICAvLyB6b29tIGxldmVsIGNoYW5nZXMuCi0gICAgdm9pZCBz
ZXRDb250ZW50c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOyB9CisgICAgLy8gUmV0
dXJucyAwIGlmIGNvbnRlbnRzIGFyZSByZXNvbHV0aW9uIGluZGVwZW5kZW50IG9yIHNjYWxlIGlz
IHNpbXBseSB1bmtub3duCisgICAgZG91YmxlIGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVy
biBtX3NjYWxlOyB9CiAKLSAgICBlbnVtIFJlbmRlclN0YXRlIHsgRG9lc05vdE5lZWRSZW5kZXIg
PSAwLCBOZWVkc1JlbmRlciA9IDEsIFJlbmRlclBlbmRpbmcgPSAyIH07Ci0gICAgUmVuZGVyU3Rh
dGUgcmVuZGVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTdGF0ZT4o
bV9uZWVkc1JlbmRlcik7IH0KLSAgICBib29sIG5lZWRzUmVuZGVyKCkgeyByZXR1cm4gbV9uZWVk
c1JlbmRlciA9PSBOZWVkc1JlbmRlcjsgfQotICAgIHZvaWQgc2V0TmVlZHNSZW5kZXIoYm9vbCBu
ZWVkc1JlbmRlcikgeyBtX25lZWRzUmVuZGVyID0gbmVlZHNSZW5kZXI7IH0KLSAgICB2b2lkIHNl
dFJlbmRlclBlbmRpbmcoKSB7IG1fbmVlZHNSZW5kZXIgPSBSZW5kZXJQZW5kaW5nOyB9Ci0gICAg
dm9pZCBzZXRSZW5kZXJEb25lKCkgeyBtX25lZWRzUmVuZGVyID0gRG9lc05vdE5lZWRSZW5kZXI7
IH0KKyAgICAvLyBUaGUgdGV4dHVyZSBjb250ZW50cyBhcmUgZGlydHkgZHVlIHRvIGFwcGVhcmFu
Y2Ugb2YgcGFnZSBjaGFuZ2luZywgb3IgYSBjaGFuZ2UgaW4gY29udGVudHMgc2NhbGUuCisgICAg
dm9pZCBzZXRDb250ZW50c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOyB9CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRUZXh0dXJlKFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPik7CiAK
ICAgICAvLyBOZXZlciBhc3NpZ24gdG8gbV90ZXh0dXJlIGRpcmVjdGx5LCB1c2Ugc2V0VGV4dHVy
ZSgpIGFib3ZlLgogICAgIFJlZlB0cjxMYXllclRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBkb3Vi
bGUgbV9zY2FsZTsKICAgICBib29sIG1fY29udGVudHNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX3Zp
c2libGUgOiAxOwotICAgIHVuc2lnbmVkIG1fbmVlZHNSZW5kZXIgOiAyOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clRpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJUaWxlci5jcHAKaW5kZXggNGNiNzQ1NTBkYzc3YjkzZjRmNGI5MTU2ZTljMGMwOTk4NmY5
OTdkNy4uMTgzMmQ4MDA2NzI0ZjMxYWJhZjFhODczMmIzNmI2NGE5ZTMwY2M0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyVGlsZXIuY3BwCkBAIC0yMiw5ICsyMiwxMiBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUaWxlci5o
IgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKICNpbmNsdWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJN
ZXNzYWdlLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgorI2luY2x1ZGUgIkxheWVyVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKICNpbmNsdWRlICJUZXh0
dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgogCkBAIC0zMiwxMiArMzUsNDkgQEAKICNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TY3JlZW4uaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1TZXR0aW5ncy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgX05UT19D
UFVfSERSXyhzbXB4Y2hnLmgpCisKKyNkZWZpbmUgREVCVUdfTEFZRVJfVklTSUJJTElUWSAwIC8v
IFNob3cgdmlzaWJsZSByZWdpb24gb2YgbGF5ZXJzIGFzIGEgdGhpY2sgYm9yZGVyLCBhbmQgcHJp
bnQgdmlzaWJsZSByZWN0LgorI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkKKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgTGF5ZXJWaXNpYmlsaXR5IHsKK3B1YmxpYzoKKyAgICBMYXllclZpc2liaWxp
dHkoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSGFzaFNldDxUaWxlSW5kZXg+
JiB0aWxlc05lZWRpbmdSZW5kZXIpCisgICAgICAgIDogbV92aXNpYmxlUmVjdCh2aXNpYmxlUmVj
dCkKKyAgICAgICAgLCBtX3RpbGVzTmVlZGluZ1JlbmRlcih0aWxlc05lZWRpbmdSZW5kZXIpCisg
ICAgeworICAgIH0KKworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlzaWJsZVJlY3Q7IH0KKyAgICB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgdmlzaWJsZVJlY3QpIHsgbV92aXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OyB9CisKKyAgICBi
b29sIG5lZWRzUmVuZGVyKCkgY29uc3QgeyByZXR1cm4gIW1fdGlsZXNOZWVkaW5nUmVuZGVyLmlz
RW1wdHkoKTsgfQorICAgIGJvb2wgdGlsZU5lZWRzUmVuZGVyKGNvbnN0IFRpbGVJbmRleCYgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZXNOZWVkaW5nUmVuZGVyLmNvbnRhaW5zKGluZGV4KTsg
fQorICAgIHZvaWQgd2lsbFJlbmRlclRpbGUoY29uc3QgVGlsZUluZGV4JiBpbmRleCkgeyBtX3Rp
bGVzTmVlZGluZ1JlbmRlci5yZW1vdmUoaW5kZXgpOyBtX3RpbGVzUmVuZGVyZWQuYWRkKGluZGV4
KTsgfQorICAgIHZvaWQgc3dhcFRpbGVzTmVlZGluZ1JlbmRlcihIYXNoU2V0PFRpbGVJbmRleD4m
IHRpbGVzTmVlZGluZ1JlbmRlcikgeyBtX3RpbGVzTmVlZGluZ1JlbmRlci5zd2FwKHRpbGVzTmVl
ZGluZ1JlbmRlcik7IH0KKworICAgIHZvaWQgbWVyZ2UoTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmls
aXR5KQorICAgIHsKKyAgICAgICAgaWYgKCF2aXNpYmlsaXR5KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX3RpbGVzUmVuZGVyZWQuc3dhcCh2aXNpYmlsaXR5LT5tX3RpbGVzUmVuZGVy
ZWQpOworICAgICAgICBmb3IgKEhhc2hTZXQ8VGlsZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzUmVuZGVyZWQuYmVnaW4oKTsgaXQgIT0gbV90aWxlc1JlbmRlcmVkLmVuZCgpOyArK2l0KQor
ICAgICAgICAgICAgbV90aWxlc05lZWRpbmdSZW5kZXIucmVtb3ZlKCppdCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEZsb2F0UmVjdCBtX3Zpc2libGVSZWN0OworICAgIEhhc2hTZXQ8VGlsZUlu
ZGV4PiBtX3RpbGVzTmVlZGluZ1JlbmRlcjsKKyAgICBIYXNoU2V0PFRpbGVJbmRleD4gbV90aWxl
c1JlbmRlcmVkOworfTsKKwogLy8gVGhpcyBpcyB1c2VkIHRvIG1ha2UgdGhlIHZpZXdwb3J0IGFz
IHVzZWQgaW4gdGV4dHVyZSB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucwogLy8gc2xpZ2h0bHkgbGFy
Z2VyIHNvIHRleHR1cmVzIGFyZSB1cGxvYWRlZCBiZWZvcmUgYmVjb21pbmcgcmVhbGx5IHZpc2li
bGUuCiAvLyBJbmZsYXRpb24gaXMgZ3JlYXRlciBpbiBZIGRpcmVjdGlvbiAob25lIHNjcmVlbmZ1
bCBpbiBlaXRoZXIgZGlyZWN0aW9uKSBzaW5jZQpAQCAtNDksMTYgKzg5LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGN1cnJlbnQgdmlld3BvcnQgYXMgdmlzaWJsZS4KIGNvbnN0IEZsb2F0
U2l6ZSB2aWV3cG9ydEluZmxhdGlvbigxLjJmLCAzLjBmKTsKIAotc3RhdGljIHZvaWQgdHJhbnNm
b3JtUG9pbnQoZmxvYXQgeCwgZmxvYXQgeSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0s
IGZsb2F0KiByZXN1bHQpCi17Ci0gICAgLy8gU3F1YXNoIHRoZSBaIGNvb3JkaW5hdGUgc28gdGhh
dCBsYXllcnMgYXJlbid0IGNsaXBwZWQgYWdhaW5zdCB0aGUgbmVhciBhbmQKLSAgICAvLyBmYXIg
cGxhbmUuIE5vdGUgdGhhdCB0aGUgcGVyc3BlY3RpdmUgaXMgbWFpbnRhaW5lZCBhcyB3ZSdyZSBz
dGlsbCBwYXNzaW5nCi0gICAgLy8gZG93biB0aGUgVyBjb29yZGluYXRlLgotICAgIHJlc3VsdFsw
XSA9IHggKiBtLm0xMSgpICsgeSAqIG0ubTIxKCkgKyBtLm00MSgpOwotICAgIHJlc3VsdFsxXSA9
IHggKiBtLm0xMigpICsgeSAqIG0ubTIyKCkgKyBtLm00MigpOwotICAgIHJlc3VsdFsyXSA9IDA7
Ci0gICAgcmVzdWx0WzNdID0geCAqIG0ubTE0KCkgKyB5ICogbS5tMjQoKSArIG0ubTQ0KCk7Ci19
CisvLyBUaGlzIGlzIGEgc21hbGwgb3B0aW1pemF0aW9uIHRvIGN1dCBkb3duIG9uIGNhbGxzIHRv
IG9wZXJhdG9yIG5ldy4KKy8vIFNpbmNlIHRoZSBjb21wb3NpdGluZyB0aHJlYWQgbm9ybWFsbHkg
c3dhcHMgaW4gbmV3IHZpc2liaWxpdHkgb2JqZWN0cyBtdWNoIG1vcmUKKy8vIG9mdGVuIHRoYW4g
dGhlIFdlYktpdCB0aHJlYWQgc3dhcHMgdGhlbSBvdXQsIGl0J3MgbGlrZWx5IHRoYXQgaXQgd2ls
bCBzd2FwIG91dAorLy8gdGhlIHByZXZpb3VzIHZpc2liaWxpdHkgb2JqZWN0IGFuZCB3ZSBjYW4g
cmV1c2UgdGhhdC4KK3N0YXRpYyBMYXllclZpc2liaWxpdHkqIHNfc3BhcmVWaXNpYmlsaXR5ID0g
MDsKIAogc3RhdGljIEludFNpemUgZGVmYXVsdFRpbGVTaXplKCkKIHsKQEAgLTY4LDEyICsxMDMs
MTIgQEAgc3RhdGljIEludFNpemUgZGVmYXVsdFRpbGVTaXplKCkKIAogTGF5ZXJUaWxlcjo6TGF5
ZXJUaWxlcihMYXllcldlYktpdFRocmVhZCogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQot
ICAgICwgbV9uZWVkc1JlbmRlckNvdW50KDApCiAgICAgLCBtX25lZWRzQmFja2luZyhmYWxzZSkK
ICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRp
bGVTaXplKCkpCiAgICAgLCBtX2NsZWFyVGV4dHVyZUpvYnMoZmFsc2UpCi0gICAgLCBtX2NvbnRl
bnRzU2NhbGUoMC4wKQorICAgICwgbV9mcm9udFZpc2liaWxpdHkoMCkKKyAgICAsIG1fYmFja1Zp
c2liaWxpdHkoMCkKIHsKICAgICByZWYoKTsgLy8gVGhpcyByZWYoKSBpcyBtYXRjaGVkIGJ5IGEg
ZGVyZWYgaW4gbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3llZCgpOwogfQpAQCAtODQsNiAr
MTE5LDkgQEAgTGF5ZXJUaWxlcjo6fkxheWVyVGlsZXIoKQogICAgIC8vIGJlZm9yZSBub3cuIFdl
IGNhbid0IGNhbGwgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgbm8KICAgICAvLyBPcGVuR0wgY29u
dGV4dC4KICAgICBBU1NFUlQobV90aWxlcy5pc0VtcHR5KCkpOworCisgICAgZGVsZXRlIG1fZnJv
bnRWaXNpYmlsaXR5OworICAgIGRlbGV0ZSBtX2JhY2tWaXNpYmlsaXR5OwogfQogCiB2b2lkIExh
eWVyVGlsZXI6OmxheWVyV2ViS2l0VGhyZWFkRGVzdHJveWVkKCkKQEAgLTExNCwyMiArMTUyLDM2
IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91Ymxl
IHNjYWxlKQogewogICAgIHVwZGF0ZVRpbGVTaXplKCk7CiAKKyAgICBMYXllclZpc2liaWxpdHkq
IGZyb250VmlzaWJpbGl0eSA9IHRha2VGcm9udFZpc2liaWxpdHkoKTsKKyAgICBpZiAoZnJvbnRW
aXNpYmlsaXR5KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGRpcnR5LCBzdGFydCBmcmVzaC4gT3Ro
ZXJ3aXNlLCBrZWVwIHRyYWNrIG9mIHRpbGVzIHJlbmRlcmVkIHNvIGZhciwgdG8gYXZvaWQgcmUt
cmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRlbnQKKyAgICAgICAgaWYgKCFtX2NvbnRlbnRzRGlydHkp
CisgICAgICAgICAgICBmcm9udFZpc2liaWxpdHktPm1lcmdlKG1fYmFja1Zpc2liaWxpdHkpOwor
ICAgICAgICBkZWxldGUgbV9iYWNrVmlzaWJpbGl0eTsKKyAgICAgICAgbV9iYWNrVmlzaWJpbGl0
eSA9IGZyb250VmlzaWJpbGl0eTsKKyAgICB9CisgICAgYm9vbCBuZWVkc1JlbmRlciA9IG1fYmFj
a1Zpc2liaWxpdHkgJiYgbV9iYWNrVmlzaWJpbGl0eS0+bmVlZHNSZW5kZXIoKTsKKwogICAgIC8v
IENoZWNrIGlmIHVwZGF0ZSBpcyBuZWVkZWQKLSAgICBpZiAoIW1fY29udGVudHNEaXJ0eSAmJiAh
bmVlZHNSZW5kZXIoKSkKKyAgICBpZiAoIW1fY29udGVudHNEaXJ0eSAmJiAhbmVlZHNSZW5kZXIp
CiAgICAgICAgIHJldHVybjsKIAorI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkKKyAgICBpZiAo
bV9iYWNrVmlzaWJpbGl0eSAmJiAhbV9iYWNrVmlzaWJpbGl0eS0+dmlzaWJsZVJlY3QoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHByaW50ZigiTGF5ZXIgMHglcCBsb2NhbCB2aXNpYmxlIHJlY3QgJXNc
biIsIG1fbGF5ZXIsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QobV9iYWNrVmlzaWJp
bGl0eS0+dmlzaWJsZVJlY3QoKSkudG9TdHJpbmcoKS5jX3N0cigpKTsKKyNlbmRpZgorCiAgICAg
Ly8gVGhlcmUncyBubyBwb2ludCBpbiBkcmF3aW5nIGNvbnRlbnRzIGF0IGEgaGlnaGVyIHJlc29s
dXRpb24gZm9yIHNjYWxlCiAgICAgLy8gaW52YXJpYW50IGxheWVycy4KICAgICBpZiAobV9sYXll
ci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAgICAgICAgc2NhbGUgPSAxLjA7Ci0KLSAgICBi
b29sIGlzWm9vbUpvYiA9IGZhbHNlOwotICAgIGlmIChzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGUp
IHsKLSAgICAgICAgLy8gVGhlIGZpcnN0IHRpbWUgYXJvdW5kLCBpdCBkb2VzIG5vdCBjb3VudCBh
cyBhIHpvb20gam9iLgotICAgICAgICBpZiAobV9jb250ZW50c1NjYWxlKQotICAgICAgICAgICAg
aXNab29tSm9iID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAg
fQorICAgICAgICBzY2FsZSA9IDE7CisKKyAgICAvLyBSZW5kZXIgb25seSB2aXNpYmxlIHRpbGVz
LiBNYXNrIGxheWVycyBhcmUgYSBzcGVjaWFsIGNhc2UsIGJlY2F1c2UgdGhleSdyZSBuZXZlciBj
b25zaWRlcmVkCisgICAgLy8gdmlzaWJsZS4gV29ya2Fyb3VuZCB0aGlzIGJ5IGFsd2F5cyByZW5k
ZXJpbmcgdGhlbSAoYSB2ZXJ5IGZhc3Qgb3BlcmF0aW9uIHdpdGggdGhlCisgICAgLy8gQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzQ29udGV4dCBzaW5jZSBpdCB3aWxsIGp1c3QgcmVzdWx0
IGluIHJlZidpbmcgdGhlIG1hc2sgaW1hZ2UpLgorICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9
IG1fYmFja1Zpc2liaWxpdHkgPyBtX2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpIDogRmxv
YXRSZWN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5sYXllclRpbGVyUHJlZmlsbFJlY3QoKSkpOworICAg
IGlmIChtX2xheWVyLT5pc01hc2soKSB8fCBtX2xheWVyLT5maWx0ZXJzKCkuc2l6ZSgpKQorICAg
ICAgICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChJbnRQb2ludDo6emVybygpLCBtX2xheWVyLT5i
b3VuZHMoKSk7CiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9k
aXJ0eVJlY3QpOwogICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZTsKQEAgLTE0MSwxMyAr
MTkzLDE2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQo
ZG91YmxlIHNjYWxlKQogICAgICAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KGJv
dW5kc1JlY3QpOwogICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gYm91bmRzUmVjdC5zaXpl
KCk7CiAKLSAgICAgICAgaWYgKHNjYWxlICE9IDEuMCkgeworICAgICAgICBpZiAoc2NhbGUgIT0g
MSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgICAgICAg
ICAgbWF0cml4LnNjYWxlKHNjYWxlKTsKIAogICAgICAgICAgICAgZGlydHlSZWN0ID0gbWF0cml4
Lm1hcFJlY3QodW50cmFuc2Zvcm1lZERpcnR5UmVjdCk7CiAgICAgICAgICAgICByZXF1aXJlZFRl
eHR1cmVTaXplID0gbWF0cml4Lm1hcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZXF1
aXJlZFRleHR1cmVTaXplKSkuc2l6ZSgpOwogICAgICAgICAgICAgYm91bmRzUmVjdCA9IG1hdHJp
eC5tYXBSZWN0KHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KTsKKyAgICAgICAgICAgIC8vIFRoZSB2
aXNpYmxlIHJlY3QgaXMgdXNpbmcgdW5zY2FsZWQgY29vcmRpbmF0ZXMgaW4gbW9zdCBjYXNlcwor
ICAgICAgICAgICAgaWYgKG1fYmFja1Zpc2liaWxpdHkgfHwgbV9sYXllci0+aXNNYXNrKCkgfHwg
bV9sYXllci0+ZmlsdGVycygpLnNpemUoKSkKKyAgICAgICAgICAgICAgICB2aXNpYmxlUmVjdCA9
IG1hdHJpeC5tYXBSZWN0KHZpc2libGVSZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXF1aXJlZFRleHR1cmVTaXplICE9IG1fcGVuZGluZ1RleHR1cmVTaXplKQpAQCAtMTYzLDg2ICsy
MTgsNTcgQEAgdm9pZCBMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZChk
b3VibGUgc2NhbGUpCiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgYm9vbCBkaWRSZXNpemUgPSBm
YWxzZTsKICAgICBJbnRSZWN0IHByZXZpb3VzVGV4dHVyZVJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
bV9wZW5kaW5nVGV4dHVyZVNpemUpOwogICAgIGlmIChtX3BlbmRpbmdUZXh0dXJlU2l6ZSAhPSBy
ZXF1aXJlZFRleHR1cmVTaXplKSB7Ci0gICAgICAgIGRpZFJlc2l6ZSA9IHRydWU7CiAgICAgICAg
IG1fcGVuZGluZ1RleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKICAgICAgICAgYWRk
VGV4dHVyZUpvYihUZXh0dXJlSm9iOjpyZXNpemVDb250ZW50cyhtX3BlbmRpbmdUZXh0dXJlU2l6
ZSkpOwogICAgIH0KIAotICAgIEludFJlY3QgcmVjdEZvck9uZVRpbGUoSW50UG9pbnQ6Onplcm8o
KSwgdGlsZVNpemUoKSk7Ci0gICAgYm9vbCB3YXNPbmVUaWxlID0gcmVjdEZvck9uZVRpbGUuY29u
dGFpbnMocHJldmlvdXNUZXh0dXJlUmVjdCk7Ci0gICAgYm9vbCBpc09uZVRpbGUgPSByZWN0Rm9y
T25lVGlsZS5jb250YWlucyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fcGVuZGluZ1RleHR1
cmVTaXplKSk7CisgICAgYm9vbCBjb250ZW50c0RpcnR5ID0gbV9jb250ZW50c0RpcnR5OworICAg
IGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgbm90IGdvaW5nIHRv
IHJlLXJlbmRlciBhbGwgdGhlIGNvdmVyZWQgdGlsZXMsIG1hcmsgdGhvc2Ugbm90IGNvdmVyZWQg
YXMgZGlydHkuCisgICAgICAgIGlmICghdmlzaWJsZVJlY3QuY29udGFpbnMoZGlydHlSZWN0KSkK
KyAgICAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6ZGlydHlDb250ZW50cyhkaXJ0
eVJlY3QpKTsKKyAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fZGly
dHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgfQogCi0gICAgSGFzaFNldDxUaWxlSW5kZXg+IHJl
bmRlckpvYnM7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4
KTsKLQotICAgICAgICAvLyBBZGQgcHJlZmlsbCBqb2JzCi0gICAgICAgIGlmICghZGlydHlSZWN0
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5sYXllclRpbGVyUHJlZmlsbFJlY3QoKTsKLSAg
ICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgICAgICBUaWxlSW5k
ZXggYmVnaW4gPSBpbmRleE9mVGlsZShyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICAg
ICAgVGlsZUluZGV4IGVuZCA9IGluZGV4T2ZUaWxlKHJlY3QubWF4WE1heFlDb3JuZXIoKSArIHRp
bGVTaXplKCkgLSBJbnRTaXplKDEsIDEpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJlZ2luLmkoKTsgaSA8IGVuZC5pKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IGJlZ2luLmooKTsgaiA8IGVuZC5qKCk7ICsraikKLSAgICAgICAgICAgICAgICAg
ICAgcmVuZGVySm9icy5hZGQoVGlsZUluZGV4KGksIGopKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgIC8vIElmIHdlIG5lZWQgZGlzcGxheSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVk
IHRvIGJlIGRpc3BsYXllZCwgZHVlIHRvIHRleHR1cmUgc2l6ZSBiZWNvbWluZyAwIHggMCwKKyAg
ICAvLyBvciBpZiB3ZSdyZSByZS1yZW5kZXJpbmcgdGhlIHdob2xlIHRoaW5nIGFueXdheSwgY2xl
YXIgb2xkIHRleHR1cmUgam9icy4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc0VtcHR5
KCkgfHwgZGlydHlSZWN0ID09IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVxdWlyZWRUZXh0
dXJlU2l6ZSkpCisgICAgICAgIGNsZWFyVGV4dHVyZUpvYnMoKTsKIAotICAgICAgICBmb3IgKFRp
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7Ci0gICAg
ICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKKyAgICBpZiAodmlzaWJsZVJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFRpbGVJbmRleD4g
cmVuZGVySm9iczsKKyAgICBUaWxlSW5kZXggZmlyc3Q7CisgICAgVGlsZUluZGV4IGxhc3Q7Cisg
ICAgaWYgKG1fbGF5ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKKyAgICAg
ICAgLy8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBk
YXRhIGluIHRoZSBmaXJzdCB0aWxlCisgICAgICAgIGZpcnN0ID0gbGFzdCA9IFRpbGVJbmRleCgw
LCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaXJzdCA9IGluZGV4T2ZUaWxlKGZsb29yZWRJ
bnRQb2ludCh2aXNpYmxlUmVjdC5taW5YTWluWUNvcm5lcigpKSk7CisgICAgICAgIGxhc3QgPSBp
bmRleE9mVGlsZShjZWlsZWRJbnRQb2ludCh2aXNpYmxlUmVjdC5tYXhYTWF4WUNvcm5lcigpKSk7
CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0LmkoKTsgaSA8PSBsYXN0LmkoKTsg
KytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGZpcnN0LmooKTsgaiA8PSBsYXN0Lmoo
KTsgKytqKSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgoaSwgaik7CiAgICAgICAgICAg
ICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGUoaW5kZXgsIHJlcXVpcmVkVGV4dHVyZVNp
emUpOwogICAgICAgICAgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKHRpbGUtPm5lZWRzUmVuZGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICB0aWxlLT5zZXRSZW5kZXJQZW5kaW5nKCk7Ci0gICAgICAgICAgICAgICAg
LS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fbmVlZHNSZW5k
ZXJDb3VudCA+PSAwKTsKKyAgICAgICAgICAgIGlmIChtX2JhY2tWaXNpYmlsaXR5ICYmIG1fYmFj
a1Zpc2liaWxpdHktPnRpbGVOZWVkc1JlbmRlcihpbmRleCkpIHsKKyNpZiBERUJVR19MQVlFUl9W
SVNJQklMSVRZCisgICAgICAgICAgICAgICAgcHJpbnRmKCJUaWxlIGF0ICglZCwgJWQpIG5lZWRz
IHJlbmRlclxuIiwgaW5kZXguaSgpLCBpbmRleC5qKCkpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOworICAgICAgICAgICAgICAgIG1fYmFja1Zpc2liaWxp
dHktPndpbGxSZW5kZXJUaWxlKGluZGV4KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVu
dHNEaXJ0eSAmJiBkaXJ0eVJlY3QuaW50ZXJzZWN0cyh0aWxlUmVjdCkpCiAgICAgICAgICAgICAg
ICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2NvbnRl
bnRzRGlydHkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGxvY2FsRGlydHlSZWN0KGRpcnR5
UmVjdCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxEaXJ0eVJlY3QuaW50ZXJzZWN0KHRpbGVSZWN0
KTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxEaXJ0eVJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbmRlciBvbmx5
IHZpc2libGUgdGlsZXMuIE1hc2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB0
aGV5J3JlIG5ldmVyIGNvbnNpZGVyZWQKLSAgICAgICAgICAgICAgICAvLyB2aXNpYmxlLiBXb3Jr
YXJvdW5kIHRoaXMgYnkgYWx3YXlzIHJlbmRlcmluZyB0aGVtIChhIHZlcnkgZmFzdCBvcGVyYXRp
b24gd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3NDb250ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4gcmVmJ2luZyB0aGUgbWFz
ayBpbWFnZSkuCi0gICAgICAgICAgICAgICAgaWYgKHRpbGUtPmlzVmlzaWJsZSgpIHx8IG1fbGF5
ZXItPmlzTWFzaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlckpvYnMuYWRkKGluZGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGlzY2FyZC9kaXJ0eSB0aGUgdGlsZSBpZiBmb3Igc29t
ZSByZWFzb24gKGUuZy4gcHJlZmlsbCkgYSByZW5kZXIgam9iIHdhcyBhbHJlYWR5IGFkZGVkLgot
ICAgICAgICAgICAgICAgIGlmIChyZW5kZXJKb2JzLmNvbnRhaW5zKGluZGV4KSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvLyBBdm9pZCBjaGVja2Vy
Ym9hcmRpbmcgdW5sZXNzIHRoZSBsYXllciBpcyByZXNpemVkLiBXaGVuCi0gICAgICAgICAgICAg
ICAgLy8gcmVzaXplZCwgdGhlIGNvbnRlbnRzIGFyZSBsaWtlbHkgdG8gY2hhbmdlIGFwcGVhcmFu
Y2UsIGZvcgotICAgICAgICAgICAgICAgIC8vIGV4YW1wbGUgZHVlIHRvIGFzcGVjdCByYXRpbyBj
aGFuZ2UuIEhvd2V2ZXIsIGlmIGl0IGlzIGEKLSAgICAgICAgICAgICAgICAvLyByZXNpemUgZHVl
IHRvIHpvb21pbmcsIHRoZSBhc3BlY3QgcmF0aW8gYW5kIGNvbnRlbnQgd2lsbAotICAgICAgICAg
ICAgICAgIC8vIHN0YXkgdGhlIHNhbWUsIGFuZCB3ZSBjYW4ga2VlcCB0aGUgb2xkIHRleHR1cmUg
Y29udGVudCBhcyBhCi0gICAgICAgICAgICAgICAgLy8gcHJldmlldy4KLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogdGhlIHpvb20gcHJldmlldyBvbmx5IHdvcmtzIGlmIHdlIGRvbid0IHJlLXRp
bGUgdGhlCi0gICAgICAgICAgICAgICAgLy8gbGF5ZXIuIFdlIG5lZWQgdG8gc3RvcmUgdGV4dHVy
ZSBjb29yZGluYXRlcyBpbgotICAgICAgICAgICAgICAgIC8vIFdlYkNvcmU6OkxheWVyVGV4dHVy
ZSB0byBiZSBhYmxlIHRvIGZpeCB0aGF0LgotICAgICAgICAgICAgICAgIGlmIChkaWRSZXNpemUg
JiYgIShpc1pvb21Kb2IgJiYgd2FzT25lVGlsZSAmJiBpc09uZVRpbGUpKQotICAgICAgICAgICAg
ICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpc2NhcmRDb250ZW50cyh0aWxlUmVj
dCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkVGV4dHVy
ZUpvYihUZXh0dXJlSm9iOjpkaXJ0eUNvbnRlbnRzKHRpbGVSZWN0KSk7Ci0gICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBJZiB3ZSBuZWVkIGRpc3BsYXkgYmVjYXVzZSB3
ZSBubyBsb25nZXIgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGR1ZSB0byB0ZXh0dXJlIHNpemUgYmVj
b21pbmcgMCB4IDAsCi0gICAgLy8gb3IgaWYgd2UncmUgcmUtcmVuZGVyaW5nIHRoZSB3aG9sZSB0
aGluZyBhbnl3YXksIGNsZWFyIG9sZCB0ZXh0dXJlIGpvYnMuCi0gICAgaWYgKHJlcXVpcmVkVGV4
dHVyZVNpemUuaXNFbXB0eSgpIHx8IGRpcnR5UmVjdCA9PSBJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHJlcXVpcmVkVGV4dHVyZVNpemUpKQotICAgICAgICBjbGVhclRleHR1cmVKb2JzKCk7Ci0K
ICAgICBpZiAocmVuZGVySm9icy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjY0
LDkgKzI5MCw2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVk
ZWQoZG91YmxlIHNjYWxlKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAg
bV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsK
IH0KIAogQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIExheWVyVGlsZXI6
OmNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMzIwLDYgKzM0MywyMiBAQCB2
b2lkIExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0
aW5nVGhyZWFkKikKICAgICBtX3BlbmRpbmdUZXh0dXJlSm9icy5jbGVhcigpOwogfQogCitMYXll
clZpc2liaWxpdHkqIExheWVyVGlsZXI6OnN3YXBGcm9udFZpc2liaWxpdHkoTGF5ZXJWaXNpYmls
aXR5KiB2aXNpYmlsaXR5KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExheWVyVmlz
aWJpbGl0eSo+KF9zbXBfeGNoZyhyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oJm1fZnJvbnRW
aXNpYmlsaXR5KSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4odmlzaWJpbGl0eSkpKTsKK30K
Kwordm9pZCBMYXllclRpbGVyOjpzZXRGcm9udFZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0JiB2
aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpCit7Cisg
ICAgTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5ID0gc19zcGFyZVZpc2liaWxpdHk7CisgICAg
aWYgKHZpc2liaWxpdHkpIHsKKyAgICAgICAgdmlzaWJpbGl0eS0+c2V0VmlzaWJsZVJlY3Qodmlz
aWJsZVJlY3QpOworICAgICAgICB2aXNpYmlsaXR5LT5zd2FwVGlsZXNOZWVkaW5nUmVuZGVyKHRp
bGVzTmVlZGluZ1JlbmRlcik7CisgICAgfSBlbHNlCisgICAgICAgIHZpc2liaWxpdHkgPSBuZXcg
TGF5ZXJWaXNpYmlsaXR5KHZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5kZXIpOworICAgIHNf
c3BhcmVWaXNpYmlsaXR5ID0gc3dhcEZyb250VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKK30KKwog
dm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqLCBib29sIHZpc2libGUpCiB7CiAgICAgLy8gRm9yIHZpc2libGUgbGF5ZXJzLCB3ZSBo
YW5kbGUgdGhlIHRpbGUtbGV2ZWwgdmlzaWJpbGl0eQpAQCAtMzI3LDI0ICszNjYsMTEgQEAgdm9p
ZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqLCBib29sIHZpc2libGUpCiAgICAgaWYgKHZpc2libGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHsKLSAgICAgICAgLy8gQWxsIHRpbGVzIGFyZSBpbnZpc2libGUgbm93LgotICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLQotICAgICAgICBmb3IgKFRpbGVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7Ci0gICAgICAgICAg
ICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKLSAgICAgICAgICAgIHRpbGUtPnNldFZp
c2libGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHRpbGUtPm5lZWRzUmVuZGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICB0aWxlLT5zZXROZWVkc1JlbmRlcihmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fbmVlZHNS
ZW5kZXJDb3VudCA+PSAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBI
YXNoU2V0PFRpbGVJbmRleD4gZW1wdHlUaWxlU2V0OworICAgIHNldEZyb250VmlzaWJpbGl0eShG
bG9hdFJlY3QoKSwgZW1wdHlUaWxlU2V0KTsKIH0KIAotdm9pZCBMYXllclRpbGVyOjp1cGxvYWRU
ZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQordm9pZCBMYXllclRpbGVy
Ojp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyKQog
ewogICAgIFRpbGVKb2JzTWFwIHRpbGVKb2JzTWFwOwogICAgIERlcXVlPFRleHR1cmVKb2I+Ojpj
b25zdF9pdGVyYXRvciB0ZXh0dXJlSm9iSXRlckVuZCA9IG1fdGV4dHVyZUpvYnMuZW5kKCk7CkBA
IC0zNjAsMTIgKzM4NiwxMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVk
ZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAgICAgICAgICBpZiAob3JpZ2luLngoKSA+
PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4ueSgpID49IG1fcmVxdWly
ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7CiAgICAgICAgICAgICB0
aWxlID0gbmV3IExheWVyVGlsZSgpOwogICAgICAgICAgICAgbV90aWxlcy5hZGQodGlsZUpvYnNJ
dGVyLT5rZXksIHRpbGUpOwogICAgICAgICB9CiAKLSAgICAgICAgcGVyZm9ybVRpbGVKb2IodGls
ZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOworICAgICAgICBwZXJmb3JtVGlsZUpvYihsYXllciwg
dGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOwogICAgIH0KIAogICAgIG1fdGV4dHVyZUpvYnMu
Y2xlYXIoKTsKQEAgLTM4MCw2ICs0MDUsMTUgQEAgdm9pZCBMYXllclRpbGVyOjpwcm9jZXNzVGV4
dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRpbGVKb2JzTWFwJiB0aWxlSm9ic00KIAog
ICAgICAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSBwZW5kaW5nVGV4dHVyZVNpemU7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGly
dHlDb250ZW50cykgeworICAgICAgICBUaWxlSW5kZXggZmlyc3QgPSBpbmRleE9mVGlsZShqb2Iu
bV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgICAgIFRpbGVJbmRleCBsYXN0ID0g
aW5kZXhPZlRpbGUoam9iLm1fZGlydHlSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAgICBm
b3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVz
LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7
CisgICAgICAgICAgICBpZiAoaW5kZXguaSgpID49IGZpcnN0LmkoKSAmJiBpbmRleC5qKCkgPj0g
Zmlyc3QuaigpICYmIGluZGV4LmkoKSA8PSBsYXN0LmkoKSAmJiBpbmRleC5qKCkgPD0gbGFzdC5q
KCkpCisgICAgICAgICAgICAgICAgKCppdCkudmFsdWUtPnNldENvbnRlbnRzRGlydHkoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYWRkVGlsZUpvYihpbmRleE9m
VGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSksIGpvYiwgdGlsZUpvYnNNYXAp
OwpAQCAtMzk0LDEwICs0MjgsNiBAQCB2b2lkIExheWVyVGlsZXI6OmFkZFRpbGVKb2IoY29uc3Qg
VGlsZUluZGV4JiBpbmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSgogICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSW4gdGhpcyBjYXNl
IHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5tX3R5cGUgPT0gVGV4dHVy
ZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tX3R5cGUgPT0g
VGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBP
dmVycmlkZSB0aGUgcHJldmlvdXMgam9iLgogICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fY29udGVudHMpCiAgICAgICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5tX2NvbnRlbnRzKTsKQEAgLTQwNSwxNTYgKzQzNSwxODIgQEAgdm9pZCBMYXllclRpbGVy
OjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRleHR1cmVKb2ImIGpv
YiwgVGlsZUoKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpvYjsKIH0KIAotdm9pZCBM
YXllclRpbGVyOjpwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqIHRpbGUsIGNvbnN0IFRleHR1cmVK
b2ImIGpvYikKK3ZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCogbGF5ZXIsIExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4dHVyZUpvYiYgam9iKQog
ewogICAgIHN3aXRjaCAoam9iLm1fdHlwZSkgewogICAgIGNhc2UgVGV4dHVyZUpvYjo6U2V0Q29u
dGVudHM6CiAgICAgICAgIHRpbGUtPnNldENvbnRlbnRzKGpvYi5tX2NvbnRlbnRzKTsKLSAgICAg
ICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7Ci0gICAg
ICAgICAgICBpZiAodGlsZS0+cmVuZGVyU3RhdGUoKSA9PSBMYXllclRpbGU6OlJlbmRlclBlbmRp
bmcpCi0gICAgICAgICAgICAgICAgdGlsZS0+c2V0UmVuZGVyRG9uZSgpOwotICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFRleHR1cmVKb2I6OlVwZGF0ZUNvbnRlbnRzOgotICAg
ICAgICB0aWxlLT51cGRhdGVDb250ZW50cyhqb2IubV9jb250ZW50cyk7Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwotICAgICAgICAgICAg
aWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpSZW5kZXJQZW5kaW5nKQotICAg
ICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlckRvbmUoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHM6Ci0gICAgICAgIHRp
bGUtPmRpc2NhcmRDb250ZW50cygpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0dXJl
Sm9iOjpEaXJ0eUNvbnRlbnRzOgotICAgICAgICB0aWxlLT5zZXRDb250ZW50c0RpcnR5KCk7Cisg
ICAgICAgIHRpbGUtPnVwZGF0ZUNvbnRlbnRzKGpvYi5tX2NvbnRlbnRzLCBsYXllci0+Y29udGVu
dHNTY2FsZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVGV4dHVyZUpvYjo6VW5rbm93
bjoKICAgICBjYXNlIFRleHR1cmVKb2I6OlJlc2l6ZUNvbnRlbnRzOgorICAgIGNhc2UgVGV4dHVy
ZUpvYjo6RGlydHlDb250ZW50czoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wg
TGF5ZXJUaWxlcjo6ZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRvdWJs
ZSBzY2FsZSwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNv
bnN0IEdMRVMyUHJvZ3JhbSYpCitib29sIExheWVyVGlsZXI6OmRyYXdUaWxlKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIGxheWVyLCBMYXllclRpbGUqIHRpbGUsIGNvbnN0IFRpbGVJbmRleCYgaW5k
ZXgsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0Q2xpcCkKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtID0gbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1s0ICogNF07Ci0KLSAgICBM
YXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChpbmRleCk7Ci0gICAgaWYgKCF0aWxlKSB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwotICAgICAgICB0aWxlID0g
bmV3IExheWVyVGlsZSgpOwotICAgICAgICBtX3RpbGVzLmFkZChpbmRleCwgdGlsZSk7CisgICAg
dW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGxh
eWVyLT5kcmF3T3BhY2l0eSgpICogMjU1KTsKKyAgICBib29sIHNob3VsZERyYXdUaWxlID0gZHN0
LmludGVyc2VjdHMoZHN0Q2xpcCkgJiYgZ2xvYmFsQWxwaGE7CisKKyAgICAvLyBFdmVuIGlmIHRo
ZSB0aWxlIGhhcyB3cm9uZyBzY2FsZSwgaXQgY2FuIGJlIHVzZWQgYXMgYSAicHJldmlldyIgaWYg
dGhlcmUgaXMgbm8gcmlzayBvZiBvdmVybGFwIHdpdGggb3RoZXIgdGlsZXMKKyAgICBib29sIHRp
bGVIYXNDb3JyZWN0U2NhbGUgPSB0aWxlLT5jb250ZW50c1NjYWxlKCkgPT0gMC4wIHx8IHRpbGUt
PmNvbnRlbnRzU2NhbGUoKSA9PSBsYXllci0+Y29udGVudHNTY2FsZSgpOworICAgIGlmICghdGls
ZUhhc0NvcnJlY3RTY2FsZSkKKyAgICAgICAgc2hvdWxkRHJhd1RpbGUgPSBzaG91bGREcmF3VGls
ZSAmJiAobV90aWxlcy5zaXplKCkgPT0gMSAmJiAhaW5kZXguaSgpICYmICFpbmRleC5qKCkpOwor
CisgICAgaWYgKHRpbGUtPmhhc1RleHR1cmUoKSkgeworICAgICAgICBMYXllclRleHR1cmUqIHRl
eHR1cmUgPSB0aWxlLT50ZXh0dXJlKCk7CisgICAgICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkKCktPnRleHR1cmVBY2Nlc3NlZCh0ZXh0dXJlKTsKKworICAgICAgICBpZiAoc2hvdWxk
RHJhd1RpbGUpIHsKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zv
cm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS50
cmFuc2xhdGUoZHN0LngoKSwgZHN0LnkoKSk7CisgICAgICAgICAgICBpZiAobGF5ZXItPmNvbnRl
bnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpCisgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9y
bS5zY2FsZU5vblVuaWZvcm0oZHN0LndpZHRoKCkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lk
dGgoKSwgZHN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHRpbGUtPmNvbnRlbnRzU2NhbGUoKSkKKyAgICAgICAgICAgICAg
ICBkcmF3VHJhbnNmb3JtLnNjYWxlKDEgLyB0aWxlLT5jb250ZW50c1NjYWxlKCkpOworICAgICAg
ICAgICAgaWYgKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFudCgpKQorICAgICAgICAgICAgICAg
IGRyYXdUcmFuc2Zvcm0uc2NhbGUoMSAvIHNjYWxlKTsKKyAgICAgICAgICAgIGJsaXRUb0J1ZmZl
cigwLCB0ZXh0dXJlLT5idWZmZXIoKSwgcmVpbnRlcnByZXRfY2FzdDxCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmPihkcmF3VHJhbnNmb3JtKSwKKyAgICAgICAgICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OlNvdXJjZU92ZXIsIGdsb2JhbEFs
cGhhKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFdlIGFwcGx5IHRoZSB0cmFuc2Zvcm1h
dGlvbiBieSBoYW5kLCBzaW5jZSB3ZSBuZWVkIHRoZSB6IGNvb3JkaW5hdGUKLSAgICAvLyBhcyB3
ZWxsICh0byBkbyBwZXJzcGVjdGl2ZSBjb3JyZWN0IHRleHR1cmluZykgYW5kIHdlIGRvbid0IG5l
ZWQKLSAgICAvLyB0byBkaXZpZGUgYnkgdyBieSBoYW5kLCB0aGUgR1BVIHdpbGwgZG8gdGhhdCBm
b3IgdXMKLSAgICB0cmFuc2Zvcm1Qb2ludChkc3QueCgpLCBkc3QueSgpLCBkcmF3VHJhbnNmb3Jt
LCAmdmVydGljZXNbMF0pOwotICAgIHRyYW5zZm9ybVBvaW50KGRzdC54KCksIGRzdC5tYXhZKCks
IGRyYXdUcmFuc2Zvcm0sICZ2ZXJ0aWNlc1s0XSk7Ci0gICAgdHJhbnNmb3JtUG9pbnQoZHN0Lm1h
eFgoKSwgZHN0Lm1heFkoKSwgZHJhd1RyYW5zZm9ybSwgJnZlcnRpY2VzWzhdKTsKLSAgICB0cmFu
c2Zvcm1Qb2ludChkc3QubWF4WCgpLCBkc3QueSgpLCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNb
MTJdKTsKLQotICAgIC8vIEluZmxhdGUgdGhlIHJlY3Qgc29tZXdoYXQgdG8gYXR0ZW1wdCB0byBt
YWtlIHRleHR1cmVzIHJlbmRlciBiZWZvcmUgdGhleSBzaG93Ci0gICAgLy8gdXAgb24gc2NyZWVu
LiBBcyB5b3UgY2FuIHNlZSwgdGhlIHJlY3QgaXMgaW4gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRp
bmF0ZXMuCi0gICAgRmxvYXRSZWN0IHJlY3QoLXZpZXdwb3J0SW5mbGF0aW9uLndpZHRoKCksIC12
aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSwgMip2aWV3cG9ydEluZmxhdGlvbi53aWR0aCgpLCAy
KnZpZXdwb3J0SW5mbGF0aW9uLmhlaWdodCgpKTsKLSAgICBGbG9hdFF1YWQgcXVhZCgKLSAgICAg
ICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1swXSAvIHZlcnRpY2VzWzNdLCB2ZXJ0aWNlc1sxXSAvIHZl
cnRpY2VzWzNdKSwKLSAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1s0XSAvIHZlcnRpY2VzWzdd
LCB2ZXJ0aWNlc1s1XSAvIHZlcnRpY2VzWzddKSwKLSAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNl
c1s4XSAvIHZlcnRpY2VzWzExXSwgdmVydGljZXNbOV0gLyB2ZXJ0aWNlc1sxMV0pLAotICAgICAg
ICBGbG9hdFBvaW50KHZlcnRpY2VzWzEyXSAvIHZlcnRpY2VzWzE1XSwgdmVydGljZXNbMTNdIC8g
dmVydGljZXNbMTVdKSk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcXVhZC5ib3VuZGlu
Z0JveCgpOwotICAgIGJvb2wgdmlzaWJsZSA9IGJvdW5kaW5nQm94LmludGVyc2VjdHMocmVjdCk7
Ci0gICAgRmxvYXRSZWN0IHZpZXdwb3J0KC0xLCAtMSwgMiwgMik7Ci0gICAgdW5zaWduZWQgY2hh
ciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGxheWVyLT5kcmF3T3Bh
Y2l0eSgpICogMjU1LjBmKTsKLSAgICBib29sIHNob3VsZERyYXdUaWxlID0gYm91bmRpbmdCb3gu
aW50ZXJzZWN0cyh2aWV3cG9ydCkgJiYgZ2xvYmFsQWxwaGE7Ci0KLSAgICBib29sIHdhc1Zpc2li
bGUgPSB0aWxlLT5pc1Zpc2libGUoKTsKLQotICAgIGlmICh2aXNpYmxlKSB7Ci0gICAgICAgIGlm
ICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKLSAgICAgICAgICAgIExheWVyVGV4dHVyZSogdGV4dHVy
ZSA9IHRpbGUtPnRleHR1cmUoKTsKLSAgICAgICAgICAgIHRleHR1cmVDYWNoZUNvbXBvc2l0aW5n
VGhyZWFkKCktPnRleHR1cmVBY2Nlc3NlZCh0ZXh0dXJlKTsKLQotICAgICAgICAgICAgaWYgKHNo
b3VsZERyYXdUaWxlKSB7Ci0gICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUo
ZHN0LngoKSwgZHN0LnkoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxheWVyLT5jb250ZW50c1Jl
c29sdXRpb25JbmRlcGVuZGVudCgpKQotICAgICAgICAgICAgICAgICAgICBkcmF3VHJhbnNmb3Jt
LnNjYWxlTm9uVW5pZm9ybShkc3Qud2lkdGgoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0
aCgpLCBkc3QuaGVpZ2h0KCkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS5zY2Fs
ZSgxLjAgLyBsYXllci0+Y29udGVudHNTY2FsZSgpKTsKLSAgICAgICAgICAgICAgICBkcmF3VHJh
bnNmb3JtLnNjYWxlKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFudCgpID8gMS4wIC8gc2NhbGUg
OiAxLjApOwotICAgICAgICAgICAgICAgIGJsaXRUb0J1ZmZlcigwLCB0ZXh0dXJlLT5idWZmZXIo
KSwgcmVpbnRlcnByZXRfY2FzdDxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmPihkcmF3VHJhbnNmb3JtKSwKLSAgICAgICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VPdmVyLCBnbG9iYWxBbHBoYSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlIHRpbGUgbmVlZHMgdG8g
YmUgKHJlLSlyZW5kZXJlZC4KKyAgICByZXR1cm4gIXRpbGUtPmlzRGlydHkoKSAmJiB0aWxlSGFz
Q29ycmVjdFNjYWxlOworfQogCi0gICAgICAgIGlmICh0aWxlLT5pc0RpcnR5KCkpIHsKLSAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwotICAgICAgICAgICAgdGls
ZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKLSAgICAgICAgICAgIGlmICh0aWxlLT5yZW5kZXJTdGF0
ZSgpID09IExheWVyVGlsZTo6RG9lc05vdE5lZWRSZW5kZXIpIHsKLSAgICAgICAgICAgICAgICB0
aWxlLT5zZXROZWVkc1JlbmRlcih0cnVlKTsKLSAgICAgICAgICAgICAgICArK21fbmVlZHNSZW5k
ZXJDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9CitzdGF0aWMgRmxvYXRSZWN0IGluZmxhdGVWaWV3cG9ydChjb25zdCBGbG9hdFJlY3QmIHZp
ZXdwb3J0KQoreworICAgIC8vIEV2ZXJ5dGhpbmcgaXMgZXhwcmVzc2VkIGluIG5vcm1hbGl6ZWQg
ZGV2aWNlIGNvb3JkaW5hdGVzCisgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZSh2aWV3cG9ydC5z
aXplKCkpOworICAgIHZpZXdwb3J0U2l6ZS5zY2FsZSh2aWV3cG9ydEluZmxhdGlvbi53aWR0aCgp
LCB2aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSk7CiAKLSAgICAgICAgaWYgKCF3YXNWaXNpYmxl
KSB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLSAgICAg
ICAgICAgIHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKHdhc1Zpc2libGUpIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRl
eCk7Ci0gICAgICAgIHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgICAgIGlmICh0aWxl
LT5uZWVkc1JlbmRlcigpKSB7Ci0gICAgICAgICAgICB0aWxlLT5zZXROZWVkc1JlbmRlcihmYWxz
ZSk7Ci0gICAgICAgICAgICAtLW1fbmVlZHNSZW5kZXJDb3VudDsKLSAgICAgICAgICAgIEFTU0VS
VChtX25lZWRzUmVuZGVyQ291bnQgPj0gMCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgRmxvYXRT
aXplIHZpZXdwb3J0T2Zmc2V0KHZpZXdwb3J0LnNpemUoKSk7CisgICAgdmlld3BvcnRPZmZzZXQu
c2NhbGUodmlld3BvcnRJbmZsYXRpb24ud2lkdGgoKSAtIDEsIHZpZXdwb3J0SW5mbGF0aW9uLmhl
aWdodCgpIC0gMSk7CisgICAgdmlld3BvcnRPZmZzZXQuc2NhbGUoMC41KTsKIAotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHZpZXdwb3J0LmxvY2F0aW9uKCkgLSB2aWV3
cG9ydE9mZnNldCwgdmlld3BvcnRTaXplKTsKIH0KIAotdm9pZCBMYXllclRpbGVyOjpkcmF3VGV4
dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRvdWJsZSBzY2FsZSwgY29uc3Qg
R0xFUzJQcm9ncmFtJiBwcm9ncmFtKQordm9pZCBMYXllclRpbGVyOjpkcmF3VGV4dHVyZXMoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IEdMRVMyUHJvZ3JhbSYsIGRvdWJsZSBz
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBGbG9hdFNpemUgYm91bmRz
ID0gbGF5ZXItPmJvdW5kcygpOwotCi0gICAgaWYgKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFu
dCgpKSB7Ci0gICAgICAgIGJvdW5kcy5zZXRXaWR0aChib3VuZHMud2lkdGgoKSAvIHNjYWxlKTsK
LSAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkgLyBzY2FsZSk7CisgICAg
RmxvYXRSZWN0IGJvdW5kc1JlY3QoLWxheWVyLT5vcmlnaW4oKSwgbGF5ZXItPmJvdW5kcygpKTsK
KyAgICBpZiAobGF5ZXItPnNpemVJc1NjYWxlSW52YXJpYW50KCkpCisgICAgICAgIGJvdW5kc1Jl
Y3Quc2NhbGUoMSAvIHNjYWxlKTsKKworICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gYm91bmRzUmVj
dC5sb2NhdGlvbigpOworICAgIEZsb2F0U2l6ZSBib3VuZHMgPSBib3VuZHNSZWN0LnNpemUoKTsK
KyAgICBGbG9hdFNpemUgaGFsZkJvdW5kcyhib3VuZHMpOworICAgIGhhbGZCb3VuZHMuc2NhbGUo
MC41Zik7CisKKyAgICBGbG9hdFJlY3QgaW5mbGF0ZWRWaWV3cG9ydCA9IGluZmxhdGVWaWV3cG9y
dChjbGlwUmVjdCk7CisKKyAgICAvLyBVbnByb2plY3RpbmcgcG9pbnRzIG91dHNpZGUgdGhlIHRy
YW5zZm9ybWVkIGJvdW5kcyBnaXZlcyBwb29yIG51bWVyaWNhbCBzdGFiaWxpdHkgaWYgdGhlcmUn
cyBhIHBlcnNwZWN0aXZlIGVmZmVjdCwKKyAgICAvLyBzbyB1bnByb2plY3QgdGhlIGNsaXBwZWQg
dHJhbnNmb3JtZWQgYm91bmRzIGluc3RlYWQuCisgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDQ+IGNs
aXBQb2x5Z29uID0gaW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KGxheWVyLT50cmFuc2Zvcm1lZEJv
dW5kcygpLCBjbGlwUmVjdCk7CisgICAgaWYgKGNsaXBQb2x5Z29uLmlzRW1wdHkoKSkgeworICAg
ICAgICAvLyBUaGUgTGF5ZXJSZW5kZXJlciBmaWd1cmVzIHdlJ3JlIHZpc2libGUsIG9yIGl0IHdv
dWxkbid0IGhhdmUgY2FsbGVkIGludG8gdGhpcyBtZXRob2QsIGJ1dCB3ZSBiZWcgdG8gZGlmZmVy
LgorICAgICAgICBsYXllci0+c2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBib29sIG5lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIEZsb2F0UmVjdCBub3Jt
YWxpemVkTGF5ZXJDbGlwUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAxLCAxKTsKKyAgICBGbG9hdFJl
Y3Qgbm9ybWFsaXplZExheWVyVmlzaWJsZVJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgMSwgMSk7CiAK
KyAgICBpZiAoY2xpcFBvbHlnb24gIT0gbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkpIHsKKyAg
ICAgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDQ+IG5vcm1hbGl6ZWRMYXllckNsaXBQb2x5Z29uID0g
dW5wcm9qZWN0KGxheWVyLCBjbGlwUG9seWdvbik7CisgICAgICAgIG5vcm1hbGl6ZWRMYXllckNs
aXBSZWN0LmludGVyc2VjdChib3VuZGluZ0JveChub3JtYWxpemVkTGF5ZXJDbGlwUG9seWdvbikp
OworCisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiB2aXNpYmxlUG9seWdvbiA9IGludGVy
c2VjdFBvbHlnb25XaXRoUmVjdChsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKSwgaW5mbGF0ZWRW
aWV3cG9ydCk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiBub3JtYWxpemVkTGF5ZXJW
aXNpYmxlUG9seWdvbiA9IHVucHJvamVjdChsYXllciwgdmlzaWJsZVBvbHlnb24pOworICAgICAg
ICBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVjdC5pbnRlcnNlY3QoYm91bmRpbmdCb3gobm9ybWFs
aXplZExheWVyVmlzaWJsZVBvbHlnb24pKTsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgdGlsZVNp
emU7CisgICAgRmxvYXRSZWN0IGRzdENsaXA7CisgICAgVGlsZUluZGV4IGZpcnN0OworICAgIFRp
bGVJbmRleCBsYXN0OwogICAgIGlmIChsYXllci0+Y29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRl
bnQoKSkgewotICAgICAgICAvLyBSZXNvbHV0aW9uIGluZGVwZW5kZW50IGxheWVycyBoYXZlIGFs
bCB0aGUgbmVlZGVkIGRhdGEgaW4gdGhlIGZpcnN0IHRpbGUgYW5kIGFsbCB0aGUgb3RoZXJzIGFy
ZSB1c2VsZXNzLgotICAgICAgICBGbG9hdFJlY3QgZHN0KC1ib3VuZHMud2lkdGgoKSAvIDIuMCwg
LWJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7
Ci0gICAgICAgIG5lZWRzRGlzcGxheSA9IGRyYXdUaWxlKGxheWVyLCBzY2FsZSwgVGlsZUluZGV4
KDAsIDApLCBkc3QsIHByb2dyYW0pOworICAgICAgICAvLyBSZXNvbHV0aW9uIGluZGVwZW5kZW50
IGxheWVycyBoYXZlIGFsbCB0aGUgbmVlZGVkIGRhdGEgaW4gdGhlIGZpcnN0IHRpbGUKKyAgICAg
ICAgdGlsZVNpemUgPSBib3VuZHM7CisgICAgICAgIGRzdENsaXAgPSBib3VuZHNSZWN0OworICAg
ICAgICBmaXJzdCA9IGxhc3QgPSBUaWxlSW5kZXgoMCwgMCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZmxvYXQgc3ggPSBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLndpZHRoKCkpIC8gbV9yZXF1
aXJlZFRleHR1cmVTaXplLndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHN5ID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGJvdW5kcy5oZWlnaHQoKSkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7
CisgICAgICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBub3JtYWxpemVkTGF5ZXJWaXNp
YmxlUmVjdDsKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKG1fcmVxdWlyZWRUZXh0dXJl
U2l6ZS53aWR0aCgpLCBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogCi0gICAgICAg
IEludFJlY3Qgc3JjKEludFBvaW50Ojp6ZXJvKCksIHRpbGVTaXplKCkpOwotICAgICAgICBmb3Ig
KHNyYy5zZXRYKDApOyBzcmMueCgpIDwgbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCk7IHNy
Yy5zZXRYKHNyYy54KCkgKyBzcmMud2lkdGgoKSkpIHsKLSAgICAgICAgICAgIGZvciAoc3JjLnNl
dFkoMCk7IHNyYy55KCkgPCBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7IHNyYy5zZXRZ
KHNyYy55KCkgKyBzcmMuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICAgICAgVGlsZUluZGV4IGlu
ZGV4ID0gaW5kZXhPZlRpbGUoc3JjLmxvY2F0aW9uKCkpOworICAgICAgICB0aWxlU2l6ZSA9IG1f
dGlsZVNpemU7CisgICAgICAgIHRpbGVTaXplLnNjYWxlKGJvdW5kcy53aWR0aCgpIC8gbV9yZXF1
aXJlZFRleHR1cmVTaXplLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSAvIG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICAgICAgICAgICAgICBmbG9hdCB4ID0gaW5kZXguaSgp
ICogc3JjLndpZHRoKCkgKiBzeDsKLSAgICAgICAgICAgICAgICBmbG9hdCB5ID0gaW5kZXguaigp
ICogc3JjLmhlaWdodCgpICogc3k7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IGRzdCh4IC0g
Ym91bmRzLndpZHRoKCkgLyAyLjAsIHkgLSBib3VuZHMuaGVpZ2h0KCkgLyAyLjAsIG1pbihib3Vu
ZHMud2lkdGgoKSAtIHgsIHNyYy53aWR0aCgpICogc3gpLCBtaW4oYm91bmRzLmhlaWdodCgpIC0g
eSwgc3JjLmhlaWdodCgpICogc3kpKTsKKyAgICAgICAgZHN0Q2xpcCA9IG5vcm1hbGl6ZWRMYXll
ckNsaXBSZWN0OworICAgICAgICBkc3RDbGlwLnNjYWxlKGJvdW5kcy53aWR0aCgpLCBib3VuZHMu
aGVpZ2h0KCkpOworICAgICAgICBkc3RDbGlwLm1vdmVCeShvcmlnaW4pOwogCi0gICAgICAgICAg
ICAgICAgbmVlZHNEaXNwbGF5IHw9IGRyYXdUaWxlKGxheWVyLCBzY2FsZSwgaW5kZXgsIGRzdCwg
cHJvZ3JhbSk7CisgICAgICAgIC8vIFRoZSBsYXllciBjb250YWlucyBwaXhlbHMgd2l0aCBjb29y
ZGluYXRlcyAoMCAuLi4gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgLSAxLCAwIC4uLiBt
X3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgLSAxKSwKKyAgICAgICAgLy8gc28gY2xhbXAg
dGhlIGRlc3RpbmF0aW9uUmVjdC10by10aWxlaW5kZXggY2FsY3VsYXRpb24gYXBwcm9wcmlhdGVs
eS4KKyAgICAgICAgZmlyc3QgPSBpbmRleE9mVGlsZShmbG9vcmVkSW50UG9pbnQoZGVzdGluYXRp
b25SZWN0Lm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAgICAgICAgbGFzdCA9IGluZGV4T2ZUaWxlKGNl
aWxlZEludFBvaW50KGRlc3RpbmF0aW9uUmVjdC5tYXhYTWF4WUNvcm5lcigpKS5zaHJ1bmtUbyhJ
bnRQb2ludCgtMSwgLTEpICsgbV9yZXF1aXJlZFRleHR1cmVTaXplKSk7CisgICAgfQorCisgICAg
SGFzaFNldDxUaWxlSW5kZXg+IHRpbGVzTmVlZGluZ1JlbmRlcjsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBmaXJzdC5pKCk7IGkgPD0gbGFzdC5pKCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSBmaXJzdC5qKCk7IGogPD0gbGFzdC5qKCk7ICsraikgeworICAgICAgICAgICAgVGls
ZUluZGV4IGluZGV4KGksIGopOworICAgICAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxl
cy5nZXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCF0aWxlKSB7CisgICAgICAgICAgICAgICAg
dGlsZSA9IG5ldyBMYXllclRpbGUoKTsKKyAgICAgICAgICAgICAgICBtX3RpbGVzLmFkZChpbmRl
eCwgdGlsZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKHRy
dWUpOworICAgICAgICAgICAgRmxvYXRQb2ludCB0aWxlT3JpZ2luKGluZGV4LmkoKSAqIHRpbGVT
aXplLndpZHRoKCksIGluZGV4LmooKSAqIHRpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAg
IEZsb2F0UmVjdCBkc3QodGlsZU9yaWdpbiAtIGhhbGZCb3VuZHMsIHRpbGVTaXplLnNocnVua1Rv
KGJvdW5kcyAtIHRvRmxvYXRTaXplKHRpbGVPcmlnaW4pKSk7CisgICAgICAgICAgICBpZiAoIWRy
YXdUaWxlKGxheWVyLCB0aWxlLCBpbmRleCwgc2NhbGUsIGRzdCwgZHN0Q2xpcCkpCisgICAgICAg
ICAgICAgICAgdGlsZXNOZWVkaW5nUmVuZGVyLmFkZChpbmRleCk7CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAh
PSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQp
LmtleTsKKyAgICAgICAgaWYgKGluZGV4LmkoKSA8IGZpcnN0LmkoKSB8fCBpbmRleC5qKCkgPCBm
aXJzdC5qKCkgfHwgaW5kZXguaSgpID4gbGFzdC5pKCkgfHwgaW5kZXguaigpID4gbGFzdC5qKCkp
CisgICAgICAgICAgICAoKml0KS52YWx1ZS0+c2V0VmlzaWJsZShmYWxzZSk7CisgICAgfQorCisg
ICAgLy8gVGhlIHZpc2libGUgcmVjdCB3aWxsIGJlIHVzZWQgb24gdGhlIFdlYktpdCB0aHJlYWQg
YW5kIHNob3VsZCB1c2UgdGhlIGJvdW5kcyBleHByZXNzZWQgaW4KKyAgICAvLyBkb2N1bWVudCBj
b29yZGluYXRlcywgbm90IGNvcnJlY3RlZCBmb3Igc2NhbGUgaW52YXJpYW5jZS4gU28gdXNlICJs
YXllci0+Ym91bmRzKCkiIGluc3RlYWQKKyAgICAvLyBvZiB0aGUgbG9jYWwgdmFyaWFibGUgImJv
dW5kcyIuCisgICAgRmxvYXRSZWN0IGxheWVyVmlzaWJsZVJlY3QgPSBub3JtYWxpemVkTGF5ZXJW
aXNpYmxlUmVjdDsKKyAgICBsYXllclZpc2libGVSZWN0LnNjYWxlKGxheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworCisjaWYgREVCVUdfTEFZRVJfVklT
SUJJTElUWQorICAgIFZlY3RvcjxGbG9hdFBvaW50PiB2ID0gdW5wcm9qZWN0KGxheWVyLCBjbGlw
UG9seWdvbik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIHZbaV0uc2NhbGUobGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMo
KS5oZWlnaHQoKSk7CisgICAgICAgIHZbaV0ubW92ZSh0b0Zsb2F0U2l6ZShvcmlnaW4pKTsKKyAg
ICAgICAgdltpXSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUG9pbnQodltpXSk7CisgICAg
fQorCisgICAgLy8gVXNlIGEgdGhpY2sgYm9yZGVyIHRvIG1ha2UgdGhlIGJvcmRlciB2aXNpYmxl
IGV2ZW4gZm9yIHRoZSByb290IGxheWVyICh3aGljaCB0eXBpY2FsbHkgY292ZXJzIHRoZSBzY3Jl
ZW4gd2lkdGggYW5kL29yIGhlaWdodCkuCisgICAgdW5zaWduZWQgdG1wID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZD4odGhpcyk7CisgICAgaW50IHQgPSByYW5kX3IoJnRtcCk7CisgICAgZ2xE
aXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgLy8gV2hlbiBkZWJ1Z2dpbmcsIGRyYXcgZmly
c3QgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCksIHRoZW4gY2xpcFBvbHlnb24sIHRoZW4gdgor
ICAgIC8vIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBwcm9ibGVtIGlzIChjbGlwcGluZyB0byBpbWFn
ZSBwbGFuZSwgY2xpcHBpbmcgdG8gdmlld3BvcnQgb3IgdW5wcm9qZWN0aW5nKS4KKyAgICBsYXll
ci0+bGF5ZXJSZW5kZXJlcigpLT5kcmF3RGVidWdCb3JkZXIoLyogbGF5ZXItPnRyYW5zZm9ybWVk
Qm91bmRzKCkgKi8gLyogY2xpcFBvbHlnb24gKi8gdiwgbWFrZVJHQkFGcm9tSFNMQShzdGF0aWNf
Y2FzdDxkb3VibGU+KHQpIC8gUkFORF9NQVgsIDEsIDAuNSwgMSksIDUpOworICAgIGdsRW5hYmxl
KEdMX1NDSVNTT1JfVEVTVCk7CisjZW5kaWYKKwogICAgIC8vIElmIHdlIHNjaGVkdWxlIGEgY29t
bWl0LCB2aXNpYmlsaXR5IHdpbGwgYmUgdXBkYXRlZCwgYW5kIGRpc3BsYXkgd2lsbAogICAgIC8v
IGhhcHBlbiBpZiB0aGVyZSBhcmUgYW55IHZpc2libGUgYW5kIGRpcnR5IHRleHR1cmVzLgotICAg
IGlmIChuZWVkc0Rpc3BsYXkpCisgICAgaWYgKCF0aWxlc05lZWRpbmdSZW5kZXIuaXNFbXB0eSgp
KQogICAgICAgICBsYXllci0+c2V0TmVlZHNDb21taXQoKTsKKworICAgIHNldEZyb250VmlzaWJp
bGl0eShsYXllclZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5kZXIpOwogfQogCiB2b2lkIExh
eWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQpAQCAtNTg5
LDE0ICs2NDUsMTAgQEAgdm9pZCBMYXllclRpbGVyOjpwcnVuZVRleHR1cmVzKCkKICAgICAgICAg
ICAgIHRpbGVzVG9EZWxldGUuYXBwZW5kKGluZGV4KTsKICAgICB9CiAKLSAgICB7Ci0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwotCi0gICAgICAgIGZvciAoVmVjdG9y
PFRpbGVJbmRleD46Oml0ZXJhdG9yIGl0ID0gdGlsZXNUb0RlbGV0ZS5iZWdpbigpOyBpdCAhPSB0
aWxlc1RvRGVsZXRlLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBMYXllclRpbGUqIHRpbGUg
PSBtX3RpbGVzLnRha2UoKml0KTsKLSAgICAgICAgICAgIHRpbGUtPmRpc2NhcmRDb250ZW50cygp
OwotICAgICAgICAgICAgZGVsZXRlIHRpbGU7Ci0gICAgICAgIH0KKyAgICBmb3IgKFZlY3RvcjxU
aWxlSW5kZXg+OjppdGVyYXRvciBpdCA9IHRpbGVzVG9EZWxldGUuYmVnaW4oKTsgaXQgIT0gdGls
ZXNUb0RlbGV0ZS5lbmQoKTsgKytpdCkgeworICAgICAgICBMYXllclRpbGUqIHRpbGUgPSBtX3Rp
bGVzLnRha2UoKml0KTsKKyAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRlbnRzKCk7CisgICAgICAg
IGRlbGV0ZSB0aWxlOwogICAgIH0KIH0KIApAQCAtNjUwLDggKzcwMiw3IEBAIEludFBvaW50IExh
eWVyVGlsZXI6Om9yaWdpbk9mVGlsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4KQogSW50UmVjdCBM
YXllclRpbGVyOjpyZWN0Rm9yVGlsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBjb25zdCBJbnRT
aXplJiBib3VuZHMpCiB7CiAgICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKGluZGV4
KTsKLSAgICBJbnRTaXplIG9mZnNldChvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKTsKLSAgICBJbnRT
aXplIHNpemUgPSB0aWxlU2l6ZSgpLnNocnVua1RvKGJvdW5kcyAtIG9mZnNldCk7CisgICAgSW50
U2l6ZSBzaXplID0gdGlsZVNpemUoKS5zaHJ1bmtUbyhib3VuZHMgLSB0b0ludFNpemUob3JpZ2lu
KSk7CiAgICAgcmV0dXJuIEludFJlY3Qob3JpZ2luLCBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIu
aAppbmRleCAyZWY2YjIzNTM5ODkyYmQxMzM1ZmRkMTY3Zjk2NjhjZWM5YTM3YWNmLi5mZDM2OTNl
ZTJkNWQwNzk4NjQxZTY4ODc4YjA2OGE1NDJmMDFmNTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaApAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkxheWVyVGlsZUluZGV4LmgiCiAKICNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1HTEVTMlByb2dyYW0uaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0zNiw2ICszNyw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7CitjbGFz
cyBMYXllclZpc2liaWxpdHk7CiBjbGFzcyBMYXllcldlYktpdFRocmVhZDsKIAogY2xhc3MgTGF5
ZXJUaWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXllclRpbGVyPiwgcHVibGlj
IExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgewpAQCAtNjcsMTQgKzY5LDE0IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVy
ZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAgICAgdmlydHVhbCBMYXllclRl
eHR1cmUqIGNvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNj
YWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYp
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCos
IGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91
YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogICAgIHN0YXRpYyB2b2lk
IHdpbGxDb21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGluZ1RleHR1cmVVcGxv
YWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgVGV4
dHVyZUpvYiB7Ci0gICAgICAgIGVudW0gVHlwZSB7IFVua25vd24sIFNldENvbnRlbnRzLCBVcGRh
dGVDb250ZW50cywgRGlzY2FyZENvbnRlbnRzLCBSZXNpemVDb250ZW50cywgRGlydHlDb250ZW50
cyB9OworICAgICAgICBlbnVtIFR5cGUgeyBVbmtub3duLCBTZXRDb250ZW50cywgVXBkYXRlQ29u
dGVudHMsIFJlc2l6ZUNvbnRlbnRzLCBEaXJ0eUNvbnRlbnRzIH07CiAKICAgICAgICAgVGV4dHVy
ZUpvYigpCiAgICAgICAgICAgICA6IG1fdHlwZShVbmtub3duKQpAQCAtOTUsNyArOTcsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgLCBtX2NvbnRlbnRzKDApCiAgICAgICAgICAgICAsIG1fZGly
dHlSZWN0KGRpcnR5UmVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0g
RGlzY2FyZENvbnRlbnRzIHx8IHR5cGUgPT0gRGlydHlDb250ZW50cyk7CisgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBEaXJ0eUNvbnRlbnRzKTsKICAgICAgICAgfQogCiAgICAgICAgIFRleHR1
cmVKb2IoVHlwZSB0eXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciog
Y29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTExMiw3ICsxMTQsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVKb2IoU2V0Q29udGVudHMsIGNvbnRl
bnRzLCBjb250ZW50c1JlY3QpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBUZXh0dXJlSm9i
IHVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBj
b250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7IHJldHVybiBUZXh0dXJlSm9iKFVw
ZGF0ZUNvbnRlbnRzLCBjb250ZW50cywgZGlydHlSZWN0KTsgfQotICAgICAgICBzdGF0aWMgVGV4
dHVyZUpvYiBkaXNjYXJkQ29udGVudHMoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7IHJldHVy
biBUZXh0dXJlSm9iKERpc2NhcmRDb250ZW50cywgZGlydHlSZWN0KTsgfQogICAgICAgICBzdGF0
aWMgVGV4dHVyZUpvYiByZXNpemVDb250ZW50cyhjb25zdCBJbnRTaXplJiBuZXdTaXplKSB7IHJl
dHVybiBUZXh0dXJlSm9iKFJlc2l6ZUNvbnRlbnRzLCBuZXdTaXplKTsgfQogICAgICAgICBzdGF0
aWMgVGV4dHVyZUpvYiBkaXJ0eUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgeyBy
ZXR1cm4gVGV4dHVyZUpvYihEaXJ0eUNvbnRlbnRzLCBkaXJ0eVJlY3QpOyB9CiAKQEAgLTEyNywy
NiArMTI4LDI3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwgTGF5
ZXJUaWxlKj4gVGlsZU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZUluZGV4LCBjb25zdCBU
ZXh0dXJlSm9iKj4gVGlsZUpvYnNNYXA7CiAKLSAgICB2b2lkIHVwZGF0ZVRpbGVTaXplKCk7Ci0K
ICAgICBMYXllclRpbGVyKExheWVyV2ViS2l0VGhyZWFkKik7CiAKKyAgICAvLyBTd2FwcyBpbiBh
IG5ldyBmcm9udCB2aXNpYmlsaXR5IGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IG9uZSwgYXRvbWlj
YWxseS4KKyAgICBMYXllclZpc2liaWxpdHkqIHN3YXBGcm9udFZpc2liaWxpdHkoTGF5ZXJWaXNp
YmlsaXR5Kik7CisKICAgICAvLyBXZWJLaXQgdGhyZWFkCisgICAgdm9pZCB1cGRhdGVUaWxlU2l6
ZSgpOwogICAgIHZvaWQgYWRkVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJik7CiAgICAgdm9p
ZCBjbGVhclRleHR1cmVKb2JzKCk7CiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpCdWZmZXIqIGNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJik7CisgICAgTGF5ZXJWaXNpYmls
aXR5KiB0YWtlRnJvbnRWaXNpYmlsaXR5KCkgeyByZXR1cm4gc3dhcEZyb250VmlzaWJpbGl0eSgw
KTsgfQogCiAgICAgLy8gQ29tcG9zaXRpbmcgdGhyZWFkCiAgICAgdm9pZCB1cGRhdGVUaWxlQ29u
dGVudHMoY29uc3QgVGV4dHVyZUpvYiYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIGFkZFRp
bGVKb2IoY29uc3QgVGlsZUluZGV4JiwgY29uc3QgVGV4dHVyZUpvYiYsIFRpbGVKb2JzTWFwJik7
Ci0gICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqLCBjb25zdCBUZXh0dXJlSm9iJik7
CisgICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgTGF5ZXJU
aWxlKiwgY29uc3QgVGV4dHVyZUpvYiYpOwogICAgIHZvaWQgcHJvY2Vzc1RleHR1cmVKb2IoY29u
c3QgVGV4dHVyZUpvYiYsIFRpbGVKb2JzTWFwJik7CiAgICAgdm9pZCBwcnVuZVRleHR1cmVzKCk7
CiAgICAgdm9pZCB2aXNpYmlsaXR5Q2hhbmdlZChib29sIG5lZWRzRGlzcGxheSk7Ci0gICAgYm9v
bCBkcmF3VGlsZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNjYWxlLCBjb25zdCBU
aWxlSW5kZXgmLCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKLQotICAgIC8vIFRocmVhZHNhZmUKLSAgICBp
bnQgbmVlZHNSZW5kZXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQgY29uc3Qgdm9s
YXRpbGUgJj4obV9uZWVkc1JlbmRlckNvdW50KTsgfQorICAgIGJvb2wgZHJhd1RpbGUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCosIExheWVyVGlsZSosIGNvbnN0IFRpbGVJbmRleCYsIGRvdWJsZSBz
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0Q2xpcCk7Cisg
ICAgdm9pZCBzZXRGcm9udFZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwg
SGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpOwogCiAgICAgLy8gQ2xlYXIg
YWxsIHBlbmRpbmcgdXBkYXRlIGNvbnRlbnQgdGV4dHVyZSBqb2JzCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KQEAgLTE2NSw5ICsxNjcsNyBAQCBwcml2YXRlOgogCiAgICAgTGF5ZXJXZWJLaXRU
aHJlYWQqIG1fbGF5ZXI7CiAKLSAgICBNdXRleCBtX3RpbGVzTXV0ZXg7Ci0gICAgVGlsZU1hcCBt
X3RpbGVzOyAvLyBQcm90ZWN0ZWQgYnkgbV90aWxlc011dGV4Ci0gICAgaW50IG1fbmVlZHNSZW5k
ZXJDb3VudDsgLy8gYXRvbWljCisgICAgVGlsZU1hcCBtX3RpbGVzOwogCiAgICAgYm9vbCBtX25l
ZWRzQmFja2luZzsKIApAQCAtMTgyLDcgKzE4Miw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFRl
eHR1cmVKb2I+IG1fcGVuZGluZ1RleHR1cmVKb2JzOyAvLyBBZGRlZCwgYnV0IG5vdCBjb21taXR0
ZWQgeWV0LgogICAgIERlcXVlPFRleHR1cmVKb2I+IG1fdGV4dHVyZUpvYnM7CiAKLSAgICBkb3Vi
bGUgbV9jb250ZW50c1NjYWxlOworICAgIExheWVyVmlzaWJpbGl0eSogbV9mcm9udFZpc2liaWxp
dHk7CisgICAgTGF5ZXJWaXNpYmlsaXR5KiBtX2JhY2tWaXNpYmlsaXR5OwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclV0aWxpdGllcy5oCmluZGV4IDJjNmMxODQ0MDhmMDFmYTFiNDY0MWFjYmU5NTdhNmYw
ZjE5NTNjODAuLjY0MDU2NGMwYzc1YjBhOTJmOTk1MTE1ZWUyNGI3MzcxMWZhYWRmNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJV
dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyVXRpbGl0aWVzLmgKQEAgLTMzLDYgKzMzLDUyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorLy8gZGV0ZXJtaW5hbnQgb2YgY29sdW1uIHZlY3RvcnMKK2lubGluZSBmbG9hdCBk
ZXQoY29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCit7CisgICAgcmV0dXJu
IGEud2lkdGgoKSAqIGIuaGVpZ2h0KCkgLSBhLmhlaWdodCgpICogYi53aWR0aCgpOworfQorCisv
LyBkb3QgcHJvZHVjdAoraW5saW5lIGZsb2F0IGRvdChjb25zdCBGbG9hdFNpemUmIGEsIGNvbnN0
IEZsb2F0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICogYi53aWR0aCgpICsgYS5o
ZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Cit9CisKKy8vIFJlcHJlc2VudHMgYSBsaW5lLCBub3QgYSBm
aW5pdGUgbGluZSBzZWdtZW50CitjbGFzcyBMYXllckNsaXBFZGdlIHsKK3B1YmxpYzoKKyAgICBM
YXllckNsaXBFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIGZpcnN0LCBjb25zdCBGbG9hdFBvaW50JiBz
ZWNvbmQpCisgICAgICAgIDogbV9maXJzdChmaXJzdCkKKyAgICAgICAgLCBtX3NlY29uZChzZWNv
bmQpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBib29sIGlzUG9pbnRJbnNpZGUoY29uc3Qg
RmxvYXRQb2ludCYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZvciBudW1lcmljIHJvYnVz
dG5lc3MsIHdlIHByZWZlciB0byBjb25zaWRlciBhIHBvaW50IHRvIGJlIGluc2lkZSByYXRoZXIg
dGhhbgorICAgICAgICAvLyBjbGlwIGl0IGFnYWluLgorICAgICAgICBjb25zdCBmbG9hdCBlcHNp
bG9uID0gMWUtNjsKKyAgICAgICAgcmV0dXJuIGRldChtX3NlY29uZCAtIG1fZmlyc3QsIHAgLSBt
X2ZpcnN0KSA+IC1lcHNpbG9uOworICAgIH0KKworICAgIGlubGluZSBGbG9hdFBvaW50IGNvbXB1
dGVJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAy
KSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDMgPSBtX2ZpcnN0Owor
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwNCA9IG1fc2Vjb25kOworICAgICAgICBmbG9hdCBk
ZW5vbWluYXRvciA9IGRldChwMSAtIHAyLCBwMyAtIHA0KTsKKyAgICAgICAgRmxvYXRTaXplIGRl
dHMoZGV0KHRvRmxvYXRTaXplKHAxKSwgdG9GbG9hdFNpemUocDIpKSwgZGV0KHRvRmxvYXRTaXpl
KHAzKSwgdG9GbG9hdFNpemUocDQpKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcmVzdWx0KAorICAg
ICAgICAgICAgZGV0KGRldHMsIEZsb2F0U2l6ZShwMS54KCkgLSBwMi54KCksIHAzLngoKSAtIHA0
LngoKSkpIC8gZGVub21pbmF0b3IsCisgICAgICAgICAgICBkZXQoZGV0cywgRmxvYXRTaXplKHAx
LnkoKSAtIHAyLnkoKSwgcDMueSgpIC0gcDQueSgpKSkgLyBkZW5vbWluYXRvcik7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQgbV9maXJz
dDsKKyAgICBGbG9hdFBvaW50IG1fc2Vjb25kOworfTsKKwogLy8gU3BlY2lmaWVzIGEgY2xpcCBw
bGFuZSB3aXRoIG5vcm1hbCBuIGFuZCBjb250YWluaW5nIHBvaW50IHBfMAogLy8gYXMgcCAqIG4g
KyBkID0gMCwgZCA9IC1wXzAgKiBuLiBUaGUgYXN0ZXJpc2sgaXMgZG90IHByb2R1Y3QuCiBjbGFz
cyBMYXllckNsaXBQbGFuZSB7CkBAIC04MCw2ICsxMjYsMjYgQEAgaW5saW5lIFZlY3RvcjxQb2lu
dCwgaW5saW5lQ2FwYWNpdHk+IGludGVyc2VjdChjb25zdCBWZWN0b3I8UG9pbnQsIGlubGluZUNh
cGFjaXQKICAgICByZXR1cm4gb3V0cHV0TGlzdDsKIH0KIAorLy8gU3V0aGVybGFuZCAtIEhvZGdt
YW4sIG1haW4gZHJpdmVyCit0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CitpbmxpbmUg
VmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiBpbnRlcnNlY3RQb2x5Z29uV2l0aFJl
Y3QoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiYgc3ViamVjdFBvbHln
b24sIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit7CisgICAgRmxvYXRRdWFkIGNsaXBRdWFk
KGNsaXBSZWN0KTsKKyAgICBWZWN0b3I8TGF5ZXJDbGlwRWRnZT4gZWRnZXM7CisgICAgZWRnZXMu
YXBwZW5kKExheWVyQ2xpcEVkZ2UoY2xpcFF1YWQucDEoKSwgY2xpcFF1YWQucDIoKSkpOworICAg
IGVkZ2VzLmFwcGVuZChMYXllckNsaXBFZGdlKGNsaXBRdWFkLnAyKCksIGNsaXBRdWFkLnAzKCkp
KTsKKyAgICBlZGdlcy5hcHBlbmQoTGF5ZXJDbGlwRWRnZShjbGlwUXVhZC5wMygpLCBjbGlwUXVh
ZC5wNCgpKSk7CisgICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2UoY2xpcFF1YWQucDQoKSwg
Y2xpcFF1YWQucDEoKSkpOworCisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG91dHB1dExpc3QgPSBz
dWJqZWN0UG9seWdvbjsKKyAgICBmb3IgKFZlY3RvcjxMYXllckNsaXBFZGdlPjo6Y29uc3RfaXRl
cmF0b3IgY2xpcEVkZ2VJdGVyYXRvciA9IGVkZ2VzLmJlZ2luKCk7IGNsaXBFZGdlSXRlcmF0b3Ig
IT0gZWRnZXMuZW5kKCk7ICsrY2xpcEVkZ2VJdGVyYXRvcikgeworICAgICAgICBjb25zdCBMYXll
ckNsaXBFZGdlJiBjbGlwRWRnZSA9ICpjbGlwRWRnZUl0ZXJhdG9yOworICAgICAgICBWZWN0b3I8
RmxvYXRQb2ludD4gaW5wdXRMaXN0ID0gb3V0cHV0TGlzdDsKKyAgICAgICAgb3V0cHV0TGlzdCA9
IGludGVyc2VjdChpbnB1dExpc3QsIGNsaXBFZGdlKTsKKyAgICB9CisgICAgcmV0dXJuIG91dHB1
dExpc3Q7Cit9CisKIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIGlubGluZSBGbG9h
dFJlY3QgYm91bmRpbmdCb3goY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5
PiYgcG9pbnRzKQogewpAQCAtMTAyLDYgKzE2OCwxMTUgQEAgaW5saW5lIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveChjb25zdCBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBwb2ludHMp
CiAgICAgcmV0dXJuIEZsb2F0UmVjdCh4bWluLCB5bWluLCB4bWF4IC0geG1pbiwgeW1heCAtIHlt
aW4pOwogfQogCitpbmxpbmUgRmxvYXRQb2ludDNEIGNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5h
dGVzKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHQxLCBjb25zdCBGbG9h
dFBvaW50JiB0MiwgY29uc3QgRmxvYXRQb2ludCYgdDMsIGJvb2wqIG9rKQoreworICAgIC8vIENv
bXB1dGUgdmVjdG9ycworICAgIEZsb2F0U2l6ZSB2MCA9IHQyIC0gdDE7CisgICAgRmxvYXRTaXpl
IHYxID0gdDMgLSB0MTsKKyAgICBGbG9hdFNpemUgdjIgPSBwIC0gdDE7CisKKyAgICAvLyBDb21w
dXRlIGRvdCBwcm9kdWN0cworICAgIGZsb2F0IGRvdDAwID0gZG90KHYwLCB2MCk7CisgICAgZmxv
YXQgZG90MDEgPSBkb3QodjAsIHYxKTsKKyAgICBmbG9hdCBkb3QwMiA9IGRvdCh2MCwgdjIpOwor
ICAgIGZsb2F0IGRvdDExID0gZG90KHYxLCB2MSk7CisgICAgZmxvYXQgZG90MTIgPSBkb3QodjEs
IHYyKTsKKworICAgIC8vIENvbXB1dGUgYmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMKKyAgICBmbG9h
dCBkZW5vbWluYXRvciA9IChkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBkb3QwMSk7CisgICAgKm9r
ID0gKGRlbm9taW5hdG9yICE9IDAuMCk7CisgICAgZmxvYXQgdiA9IChkb3QxMSAqIGRvdDAyIC0g
ZG90MDEgKiBkb3QxMikgLyBkZW5vbWluYXRvcjsKKyAgICBmbG9hdCB3ID0gKGRvdDAwICogZG90
MTIgLSBkb3QwMSAqIGRvdDAyKSAvIGRlbm9taW5hdG9yOworCisgICAgcmV0dXJuIEZsb2F0UG9p
bnQzRCgxLjBmIC0gdiAtIHcsIHYsIHcpOworfQorCitpbmxpbmUgZmxvYXQgbWFuaGF0dGFuRGlz
dGFuY2VUb1ZpZXdwb3J0KGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgZmxvYXQgZCA9IDA7
CisgICAgaWYgKGZhYnNmKHAueCgpKSA+IDEpCisgICAgICAgIGQgKz0gZmFic2YocC54KCkpIC0g
MTsKKyAgICBpZiAoZmFic2YocC55KCkpID4gMSkKKyAgICAgICAgZCArPSBmYWJzZihwLnkoKSkg
LSAxOworICAgIHJldHVybiBkOworfQorCitzdHJ1Y3QgVW5wcm9qZWN0aW9uVmVydGV4IHsKKyAg
ICBGbG9hdFBvaW50IHh5OworICAgIGZsb2F0IHc7CisgICAgRmxvYXRTaXplIHV2OworfTsKKwor
aW5saW5lIGJvb2wgY29tcGFyZU1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydChjb25zdCBVbnBy
b2plY3Rpb25WZXJ0ZXgmIGEsIGNvbnN0IFVucHJvamVjdGlvblZlcnRleCYgYikKK3sKKyAgICBy
ZXR1cm4gbWFuaGF0dGFuRGlzdGFuY2VUb1ZpZXdwb3J0KGEueHkpIDwgbWFuaGF0dGFuRGlzdGFu
Y2VUb1ZpZXdwb3J0KGIueHkpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CitpbmxpbmUgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiB1bnByb2plY3QoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50LCBpbmxp
bmVDYXBhY2l0eT4mIHBvaW50cykKK3sKKyAgICAvLyBVc2UgcGVyc3BlY3RpdmUgY29ycmVjdCB0
ZXh0dXJpbmcgbG9naWMgdG8gZmluZCB0aGUgbG9jYXRpb25zIG9mIHRoZXNlIHBvaW50cyBpbiBu
b3JtYWxpemVkIGxheWVyIGNvb3JkaW5hdGVzCisgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDQ+IGJv
dW5kcyA9IGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpOworICAgIFZlY3RvcjxmbG9hdCwgND4g
d3MgPSBsYXllci0+d3MoKTsKKyAgICBpZiAod3MuaXNFbXB0eSgpKQorICAgICAgICB3cy5maWxs
KDAuMGYsIGJvdW5kcy5zaXplKCkpOworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgdGV4
Q29vcmRzID0gbGF5ZXItPnRleHR1cmVDb29yZGluYXRlcygpOworICAgIGlmIChib3VuZHMuc2l6
ZSgpIDwgMykKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBhY2l0
eT4oKTsKKworICAgIFZlY3RvcjxVbnByb2plY3Rpb25WZXJ0ZXgsIDQ+IHZlcnRpY2VzKGJvdW5k
cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYm91bmRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHZlcnRpY2VzW2ldLnh5ID0gYm91bmRzW2ldOworICAgICAgICB2ZXJ0aWNl
c1tpXS53ID0gd3NbaV07CisgICAgICAgIHZlcnRpY2VzW2ldLnV2ID0gdG9GbG9hdFNpemUodGV4
Q29vcmRzW2ldKTsKKyAgICB9CisgICAgLy8gRWFjaCBwb2ludCBuZWVkcyB0byBiZSBxdWFsaWZp
ZWQgYXMgbHlpbmcgaW4gb25lIG9mIHRoZSB0cmlhbmdsZXMgZm9ybWVkIGJ5IHRoZSAiYm91bmRz
IiB0cmlhbmdsZSBzdHJpcAorICAgIC8vIFRyeSB0byB1c2Ugb25seSBwb2ludHMgdGhhdCBhcmUg
b25zY3JlZW4sIGZvciBudW1lcmljYWwgc3RhYmlsaXR5CisgICAgc3RkOjpzb3J0KHZlcnRpY2Vz
LmJlZ2luKCksIHZlcnRpY2VzLmVuZCgpLCBjb21wYXJlTWFuaGF0dGFuRGlzdGFuY2VUb1ZpZXdw
b3J0KTsKKworICAgIFZlY3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBhY2l0eT4gcmVzdWx0Owor
CisgICAgc2l6ZV90IGkwID0gMDsKKworICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAwID0gdmVydGlj
ZXNbaTBdLnh5OworICAgIGZsb2F0IHcwID0gdmVydGljZXNbaTBdLnc7CisgICAgRmxvYXRTaXpl
IHV2MCA9IHZlcnRpY2VzW2kwXS51djsKKworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgcG9p
bnRzLnNpemUoKTsgKytqKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAgPSBwb2ludHNb
al07CisgICAgICAgIEZsb2F0UG9pbnQgdGV4Q29vcmQ7CisgICAgICAgIGZvciAoc2l6ZV90IGRp
ID0gMTsgZGkgKyAxIDwgdmVydGljZXMuc2l6ZSgpOyArK2RpKSB7CisgICAgICAgICAgICBzaXpl
X3QgaSA9IChpMCArIGRpKSAlIHZlcnRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHAxID0gdmVydGljZXNbaV0ueHk7CisgICAgICAgICAgICBmbG9hdCB3MSA9IHZl
cnRpY2VzW2ldLnc7CisgICAgICAgICAgICBGbG9hdFNpemUgdXYxID0gdmVydGljZXNbaV0udXY7
CisgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiA9IHZlcnRpY2VzW2kgKyAxXS54eTsK
KyAgICAgICAgICAgIGZsb2F0IHcyID0gdmVydGljZXNbaSArIDFdLnc7CisgICAgICAgICAgICBG
bG9hdFNpemUgdXYyID0gdmVydGljZXNbaSArIDFdLnV2OworCisgICAgICAgICAgICBib29sIG9r
OworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGIgPSBjb21wdXRlQmFyeWNlbnRyaWNDb29yZGlu
YXRlcyhwLCBwMCwgcDEsIHAyLCAmb2spOworICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHcwICYmIHcxICYmIHcyKSB7Cisg
ICAgICAgICAgICAgICAgLy8gUGVyc3BlY3RpdmUgY29ycmVjdCBpbnRlcnBvbGF0aW9uCisgICAg
ICAgICAgICAgICAgRmxvYXRQb2ludDNEIGJ3KGIueCgpIC8gdzAsIGIueSgpIC8gdzEsIGIueigp
IC8gdzIpOworICAgICAgICAgICAgICAgIGZsb2F0IGRlbm9taW5hdG9yID0gYncueCgpICsgYncu
eSgpICsgYncueigpOworICAgICAgICAgICAgICAgIHRleENvb3JkID0gRmxvYXRQb2ludDo6emVy
bygpICsgKGJ3LngoKSAqIHV2MCArIGJ3LnkoKSAqIHV2MSArIGJ3LnooKSAqIHV2Mik7CisgICAg
ICAgICAgICAgICAgdGV4Q29vcmQuc2V0WCh0ZXhDb29yZC54KCkgLyBkZW5vbWluYXRvcik7Cisg
ICAgICAgICAgICAgICAgdGV4Q29vcmQuc2V0WSh0ZXhDb29yZC55KCkgLyBkZW5vbWluYXRvcik7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIExpbmVhciBpbnRlcnBv
bGF0aW9uCisgICAgICAgICAgICAgICAgdGV4Q29vcmQgPSBGbG9hdFBvaW50Ojp6ZXJvKCkgKyAo
Yi54KCkgKiB1djAgKyBiLnkoKSAqIHV2MSArIGIueigpICogdXYyKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4
Q29vcmQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbmxpbmUgRmxvYXRQb2lu
dDNEIG11bHRWZWNNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29u
c3QgRmxvYXRQb2ludDNEJiBwLCBmbG9hdCYgdykKIHsKICAgICBGbG9hdFBvaW50M0QgcmVzdWx0
KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5jcHAKaW5kZXggMTll
MWEzMTc2N2Y3MDllOGQzNjhkMmVmOGNjM2M5MWRiMzIwN2I5Mi4uYjNmZjc0YjZkOGE4NWFhYmVm
OTBjNWEyNzA1OTg5YzRhYThiODQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L1dlYk92ZXJsYXkuY3BwCkBAIC01MDEsNyArNTAxLDcgQEAgdm9pZCBXZWJPdmVybGF5TGF5ZXJD
b21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBv
c2kKICAgICBtX3RleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVDb250ZW50cyk7CiB9CiAK
LXZvaWQgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJl
cyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91YmxlIHNjYWxlLCBjb25zdCBHTEVT
MlByb2dyYW0mKQordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6
ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBjb25zdCBHTEVTMlBy
b2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgLypjbGlwUmVjdCovKQogewog
ICAgIGlmICghbV90ZXh0dXJlIHx8ICFtX3RleHR1cmUtPmJ1ZmZlcigpKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlf
cC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5X3AuaAppbmRleCA2
ZjU2ODA5MmE1NjdlZmI4M2UyYTgyM2ZiN2IzZjkxMDY5Nzk5MzJkLi4zOTdiNzEwMjg0MjE4YTgx
YWRiZTk1MzhmMGI5MjYyZGEwN2YyYjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYk92ZXJsYXlfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViT3ZlcmxheV9wLmgKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoV2ViQ29yZTo6TGF5ZXJDb21w
b3NpdGluZ1RocmVhZCopOwogICAgIHZpcnR1YWwgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2Vk
KFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpOwogICAgIHZp
cnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRp
bmdUaHJlYWQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKFdlYkNvcmU6OkxheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGNvbnN0IFBsYXRmb3JtOjpHcmFwaGlj
czo6R0xFUzJQcm9ncmFtJik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhXZWJDb3Jl
OjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3QgUGxhdGZvcm06OkdyYXBoaWNzOjpHTEVT
MlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgY2xpcFJl
Y3QpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhXZWJDb3JlOjpMYXllckNvbXBv
c2l0aW5nVGhyZWFkKik7CiAKIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204532</attachid>
            <date>2013-06-12 14:12:01 -0700</date>
            <delta_ts>2013-06-14 03:32:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117211-20130612231020.patch</filename>
            <type>text/plain</type>
            <size>64619</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJjMmQzM2FlYTJiZGJi
OGZhNmFhZjA0YTc2YzQ0NGQ3ZmM1YzY2Ny4uM2U1OTIwNGFlMTc2MzkyMDhiNDdmNmFhNDc2MGM4
NDRjZDg3YjliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMy0wNi0wNCAgQXJ2
aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIExh
eWVyVGlsZXIgZmFpbHMgdG8gdGlsZSByZWFsbHkgYmlnIGxheWVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MjExCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUFIgMjczNTUwCisKKyAgICAgICAgVGhl
IGNhdXNlIGZvciB0aGlzIGJ1ZyB3YXMgdGhhdCBMYXllclRpbGVyIGNvbXB1dGVkIHdoaWNoIHRp
bGVzIGFyZQorICAgICAgICB2aXNpYmxlIGJ5IGV4aGF1c3RpdmVseSBtYXBwaW5nIGV2ZXJ5IHRp
bGUgdG8gbm9ybWFsaXplZCBkZXZpY2UKKyAgICAgICAgY29vcmRpbmF0ZXMgYW5kIGNoZWNraW5n
IGlmIGl0IGludGVyc2VjdGVkIHRoZSB2aWV3cG9ydC4gSWYgdGhlcmUgd2FzIGEKKyAgICAgICAg
bG90IG9mIHRpbGVzLCBpdCB3b3VsZCBnZXQgc3R1Y2sgaW4gdGhpcyBsb29wLCBpdGVyYXRpbmcg
b3ZlciBhbGwKKyAgICAgICAgdGlsZXMsIGZvciBhIHZlcnkgbG9uZyB0aW1lLiBBbHNvLCB0aGUg
dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB3YXMKKyAgICAgICAgdHJhbnNmZXJyZWQgdG8gdGhlIFdl
YktpdCB0aHJlYWQgdXNpbmcgbXV0ZXhlcywgd2hpY2ggYWRkZWQgdW5uZWNlc3NhcnkKKyAgICAg
ICAgbXV0ZXggY29udGVudGlvbiB0byB0aGUgbWl4LgorCisgICAgICAgIEZpeGVkIGJ5IGRvaW5n
IHRoZSByZXZlcnNlIGNhbGN1bGF0aW9uLCB1bnByb2plY3RpbmcgdGhlIHZpc2libGUgcGFydAor
ICAgICAgICBvZiB0aGUgbGF5ZXIgdG8gbGF5ZXIgY29vcmRpbmF0ZSBzcGFjZSB0byBmaW5kIHdo
aWNoIHRpbGVzIGFyZSB2aXNpYmxlLgorICAgICAgICBJbnN0ZWFkIG9mIGRvaW5nIGEgdHJhZGl0
aW9uYWwgdW5wcm9qZWN0aW9uIG9mIHBvaW50IHRvIGxpbmUgYW5kIHNlZQorICAgICAgICB3aGVy
ZSB0aGUgbGluZSBpbnRlcnNlY3RzIHRoZSBsYXllciwgdGhpcyBwYXRjaCB1c2VzIHRoZSB3LWNv
b3JkaW5hdGVzCisgICAgICAgIG9mIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBlcmZvcm0gInBlcnNw
ZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIiBvZiB0aGUKKyAgICAgICAgaW50ZXJzZWN0aW9uIHBv
aW50cyBpbiBkZXZpY2Ugc3BhY2UsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgdW5w
cm9qZWN0aW9uIHNpbmNlIHBlcnNwZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIGNvbXB1dGVzIGEg
MkQKKyAgICAgICAgY29vcmRpbmF0ZSBpbiAobm9ybWFsaXplZCkgbGF5ZXIgY29vcmRpbmF0ZSBz
cGFjZSB3aGljaCBpcyBlYXNpbHkKKyAgICAgICAgc2NhbGVkIHVwIHRvIHRoZSBsYXllciBib3Vu
ZHMgYW5kIGdldCB0aGUgdmlzaWJsZSByZWdpb24gZXhwcmVzc2VkIGluCisgICAgICAgIGxheWVy
IGNvb3JkaW5hdGUgc3BhY2UuCisKKyAgICAgICAgVGhlIHZpc2libGUgYXJlYSBpcyBhcHByb3hp
bWF0ZWQgYnkgYSByZWN0YW5nbGUsIGFuZCBhIHNldCBvZiB0aWxlcworICAgICAgICBuZWVkaW5n
IHJlbmRlciBhcmUgYWRkZWQgdG8gdGhlIG1peCwgYW5kICB3ZSBoYXZlIGEgc3dhcHBhYmxlIGRh
dGEKKyAgICAgICAgc3RydWN0dXJlIHNvIHZpc2JpbGl0eSBjYW4gYmUgdHJhbnNmZXJyZWQgdG8g
V2ViS2l0IHRocmVhZCB3aXRob3V0CisgICAgICAgIG11dGV4ZXMsIGJ1dCBpbnN0ZWFkIHVzaW5n
IGF0b21pYyBzd2FwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQuY3BwOgorICAgICAgICAoQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1Rl
eHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdl
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoRUdMSW1hZ2VMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaDoKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGU6OkxheWVyVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGU6OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6dXBkYXRlQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpkaXNjYXJkQ29udGVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmg6CisgICAg
ICAgIChMYXllclRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpjb250ZW50c1Nj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6c2V0Q29udGVudHNEaXJ0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAg
ICAgICAgKExheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxp
dHk6OkxheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6
OnZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c2V0Vmlz
aWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJWaXNpYmlsaXR5OjpuZWVkc1JlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OnRpbGVOZWVkc1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OndpbGxSZW5kZXJUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c3dhcFRpbGVzTmVlZGluZ1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6Om1lcmdlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjp+TGF5ZXJUaWxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyOjpzd2FwRnJvbnRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXI6OnNldEZyb250VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6cHJvY2Vzc1RleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpwZXJmb3JtVGls
ZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpkcmF3VGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjppbmZsYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBydW5lVGV4
dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cmVjdEZvclRpbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclRpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OlRleHR1cmVKb2I6OlRleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6dGFrZUZyb250VmlzaWJpbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXQpOgorICAgICAgICAoV2ViQ29yZTo6ZG90KToKKyAgICAgICAgKExh
eWVyQ2xpcEVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDbGlwRWRnZTo6TGF5ZXJDbGlw
RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNsaXBFZGdlOjppc1BvaW50SW5zaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2xpcEVkZ2U6OmNvbXB1dGVJbnRlcnNlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Om1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydCk6CisgICAgICAgIChVbnByb2plY3Rpb25WZXJ0
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZU1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjp1bnByb2plY3QpOgorCiAyMDEzLTA1LTMxICBBcnZpZCBO
aWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBpbWFnZSBwbGFuZSBh
cmUgaW5jb3JyZWN0bHkgdHJhbnNmb3JtZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmlu
ZGV4IDE1YzI5YWU2MjY3NDQyMTg2M2YwNmU1NmNhNTBmNDg5YTQwYTA1MDcuLmU2ODdjY2RjOGYy
NjE3Y2IzMzM3OGIxMjhmMGMzMDk3MWRlZmZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA2LTA0ICBBcnZpZCBOaWxzc29uICA8YW5pbHNz
b25AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gTGF5ZXJUaWxlciBmYWlscyB0byB0
aWxlIHJlYWxseSBiaWcgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTcyMTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQUiAyNzM1NTAKKworICAgICAgICBBZGFwdCB0byBjaGFuZ2VzIGluIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgaW50ZXJmYWNlLgorCisgICAgICAgICogQXBpL1dl
Yk92ZXJsYXkuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKiBBcGkv
V2ViT3ZlcmxheV9wLmg6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudCk6CisKIDIwMTMtMDYtMTIgIExlbyBZYW5nICA8bGVveWFuZ0ByaW0uY29tPgogCiAg
ICAgICAgIFtCbGFja0JlcnJ5XSBVc2UgUmVmUHRyIGZvciBIVE1MSW5wdXRFbGVtZW50IGluc2lk
ZSBDcmVkZW50aWFsVHJhbnNmb3JtRGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkLmNwcAppbmRleCA0MzRlNzQxYTBmMzg0ZmNhZWQ2NmM0NjgxZmE3YzI3MjRkOTlh
NGI4Li5jOGE5ZjhjY2RjMzI0MWQzOWFhMjFkMTA5NDIwMzQyZTY1NjhiMWJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVy
V2ViS2l0VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqLCBib29sKSB7IH0KICAgICB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopIHsgfQogCi0gICAgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJik7CisgICAg
dm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IEdMRVMyUHJv
Z3JhbSYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9p
ZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAKICAgICB2b2lkIGNv
bW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CkBAIC01
OSw3ICs1OSw3IEBAIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OkNhbnZhc0xh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoQmxhY2tCZXJyCiB7CiB9CiAKLXZvaWQgQ2FudmFz
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyLCBkb3VibGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpCit2b2lkIENhbnZh
c0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQcm9ncmFtJiwgZG91YmxlLCBjb25zdCBGbG9h
dFJlY3QmIC8qY2xpcFJlY3QqLykKIHsKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudC5jcHAKaW5kZXggMWVmNGY3ZjY2NTFmZDU4MjNmYTE0MzM1NjdiNGVjNDI4
ODAxNGRmNC4uMDViZTVjZmUxOGZkZWRhM2VkYzYwODNjMDNmZmUxNTZiMDNlYzQwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFn
ZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50LmNwcApAQCAtNDUsNyArNDUsNyBAQCB2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aQogewog
fQogCi12b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1
cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgLypzY2FsZSovLCBjb25z
dCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCit2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBj
b25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0sIGRvdWJsZSAvKnNjYWxlKi8sIGNvbnN0IEZsb2F0
UmVjdCYgLypjbGlwUmVjdCovKQogewogICAgIGlmICghbV90ZXh0dXJlQWNjZXNzb3IgfHwgIW1f
dGV4dHVyZUFjY2Vzc29yLT50ZXh0dXJlSUQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgK
aW5kZXggZjQ2OWZjY2RhYWQwZWVhYzFjZWMzZWY2N2NhMjUwNjRhZWI4MWFlOS4uOGQzODlmZGYx
M2I0N2IyNDQ0MDAyMDg0NGM5YThmM2RjZWE4ZDBmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oCkBAIC01NSw3ICs1
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBs
b2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNjYWxl
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91Ymxl
IHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogCiAgICAgdmlydHVhbCB2b2lk
IGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBv
c2l0aW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggODlhYjhlYzhhMGYxYjZhYjg1
ZTcyZDE5ZGY1NmI2ZDQzN2E3ZWQ3Yy4uNDA4M2U0MTE1NmNkMDZhYTEwMWRhZjMxNGI3YTUyNWNk
MzA3NTM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBA
IC0yMjgsNyArMjI4LDcgQEAgRmxvYXRRdWFkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5z
Zm9ybWVkSG9sZVB1bmNoUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybS5t
YXBRdWFkKGhvbGVQdW5jaFJlY3QpOwogfQogCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OmRyYXdUZXh0dXJlcyhkb3VibGUgc2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwg
Y29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKK3ZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZDo6ZHJhd1RleHR1cmVzKGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwgZG91YmxlIHNjYWxl
LCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0
KQogewogICAgIGlmIChtX3BsdWdpblZpZXcpIHsKICAgICAgICAgaWYgKG1faXNWaXNpYmxlKSB7
CkBAIC0yNzksMTAgKzI3OSwxMCBAQCB2b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdU
ZXh0dXJlcyhkb3VibGUgc2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZwogI2VuZGlmCiAK
ICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kcmF3VGV4dHVyZXModGhpcywg
c2NhbGUsIHByb2dyYW0pOworICAgICAgICBtX2NsaWVudC0+ZHJhd1RleHR1cmVzKHRoaXMsIHBy
b2dyYW0sIHNjYWxlLCBjbGlwUmVjdCk7CiB9CiAKLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZDo6ZHJhd1N1cmZhY2UoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0s
IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2ssIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3Jh
bSkKK3ZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1N1cmZhY2UoY29uc3QgR0xFUzJQ
cm9ncmFtJiBwcm9ncmFtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFzaykKIHsKICAgICB1c2luZyBuYW1lc3BhY2Ug
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oCmluZGV4IDJiZGJmOTA2N2ZlNTM5NzRkOGY2NDM1ODBhZmIyNGU2OTc2
ZjI4NDMuLmE2NGE5MWEwMWM4MzExYTVhYjM1YWMwNzhmMWIyNjUzNmZmNWM0YzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oCkBAIC0xOTEsOCArMTkxLDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkZWxldGVUZXh0dXJlcygpOwogCi0gICAgdm9pZCBkcmF3VGV4dHVy
ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpOwotICAgIHZvaWQgZHJh
d1N1cmZhY2UoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiBtYXNrLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJv
Z3JhbSYpOworICAgIHZvaWQgZHJhd1RleHR1cmVzKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2b2lkIGRyYXdT
dXJmYWNlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFt
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBt
YXNrKTsKIAogICAgIHZvaWQgcmVsZWFzZVRleHR1cmVSZXNvdXJjZXMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAppbmRleCAzMTg3OGY0YWNh
NDY0YmRjNTQwMDc2YTg5MzliNDZhYjhkMmZmODVjLi4wOGNmZTFhYTU2MTkyMDRlYjUzNmZhY2Jl
ODMxZTRjMDg2YjQ4MGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQuaApAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBHTEVTMlByb2dyYW07CiB9CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ7CiBjbGFzcyBMYXllclRleHR1cmU7CiAKQEAgLTQyLDcgKzQzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGxv
YWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNj
YWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYs
IGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgPSAwOwogCiAg
ICAgLy8gT3B0aW9uYWwuIEFsbG93cyBsYXllcnMgdG8gc2VydmUgYXMgYSBtYXNrIGZvciBvdGhl
ciBsYXllcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCmluZGV4IDVhNmI4NzVlMTQ5NTRkMWY3
NzUxOTFhZDA2ZGIyNDQ2MDYzNzgxNDAuLjAxM2JmZDBhYWQzMTVkNGEyYWExZDY3NTgxMzBkNGZj
OWY5NmI4ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcApAQCAtOTE5LDcgKzkxOSw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIGxheWVyLCBpbnQKIAogICAgICAgICBpZiAoIWRyYXdTdXJmYWNlKSB7CiAg
ICAgICAgICAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VMYXllclByb2dyYW0o
bGF5ZXJQcm9ncmFtKTsKLSAgICAgICAgICAgIGxheWVyLT5kcmF3VGV4dHVyZXMobV9zY2FsZSwg
cHJvZ3JhbSwgbV92aXNpYmxlUmVjdCk7CisgICAgICAgICAgICBsYXllci0+ZHJhd1RleHR1cmVz
KHByb2dyYW0sIG1fc2NhbGUsIG1fdmlzaWJsZVJlY3QsIGNsaXBSZWN0KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIERyYXcgdGhlIHJlZmxlY3Rpb24gaWYgaXQgZXhpc3RzLgog
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewpAQCAtOTMxLDExICs5MzEs
MTEgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICAgICAgICAgICAgICBtYXNrID0g
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsKIAogICAgICAgICAgICAgICAgIGNv
bnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0s
IG1hc2spOwotICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJS
ZW5kZXJlclN1cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzaywgcHJvZ3JhbSk7
CisgICAgICAgICAgICAgICAgbGF5ZXItPmRyYXdTdXJmYWNlKHByb2dyYW0sIGxheWVyLT5sYXll
clJlbmRlcmVyU3VyZmFjZSgpLT5yZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBtYXNrKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNl
TGF5ZXJQcm9ncmFtKGxheWVyUHJvZ3JhbSwgbGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICAgICAg
ICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJh
d1RyYW5zZm9ybSgpLCBsYXllci0+bWFza0xheWVyKCksIHByb2dyYW0pOworICAgICAgICAgICAg
bGF5ZXItPmRyYXdTdXJmYWNlKHByb2dyYW0sIGxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFjZSgp
LT5kcmF3VHJhbnNmb3JtKCksIGxheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJUaWxlLmNwcAppbmRleCAwNGUxZWQ1MDM1ZDJkNmU3MTI3MTdmYWZlNDBhZDEy
MjNlNjlhMWM5Li5mN2VmMzg3NzQwYzcwNzY2NTUxODEzZDJhMDIzNzAyMzE4MGViMTMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclRpbGUuY3BwCkBAIC0yNyw5ICsyNyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IExheWVyVGlsZTo6TGF5ZXJUaWxlKCkKLSAgICA6IG1fY29udGVudHNEaXJ0eShmYWxzZSkKKyAg
ICA6IG1fc2NhbGUoMC4wKQorICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQogICAgICwgbV92
aXNpYmxlKGZhbHNlKQotICAgICwgbV9uZWVkc1JlbmRlcihmYWxzZSkKIHsKIH0KIApAQCAtNDEs
MTYgKzQxLDE5IEBAIExheWVyVGlsZTo6fkxheWVyVGlsZSgpCiAKIHZvaWQgTGF5ZXJUaWxlOjpz
ZXRDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY29udGVu
dHMpCiB7CisgICAgbV9zY2FsZSA9IDAuMDsgLy8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudAogICAg
IHNldFRleHR1cmUodGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+dGV4dHVyZUZvckNv
bnRlbnRzKGNvbnRlbnRzKSk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlOjp1cGRhdGVDb250ZW50cyhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciogY29udGVudHMpCit2b2lkIExh
eWVyVGlsZTo6dXBkYXRlQ29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpC
dWZmZXIqIGNvbnRlbnRzLCBkb3VibGUgc2NhbGUpCiB7CisgICAgbV9zY2FsZSA9IHNjYWxlOwog
ICAgIHNldFRleHR1cmUodGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+dXBkYXRlQ29u
dGVudHMobV90ZXh0dXJlLCBjb250ZW50cykpOwogfQogCiB2b2lkIExheWVyVGlsZTo6ZGlzY2Fy
ZENvbnRlbnRzKCkKIHsKKyAgICBtX3NjYWxlID0gMC4wOyAvLyBVbmtub3duIHNjYWxlCiAgICAg
c2V0VGV4dHVyZSgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKaW5kZXggMTNkMzJjOWVjNzA1ZjQzYTFl
ZTBkMGZkMTU3YWMxOTM4ODE2YzRmOS4uYzllOTgyMWI3OWMwNjVmYWQ4MTRiODE0NmUzYzIyNjcw
MzE0NzVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyVGlsZS5oCkBAIC00NiwyOSArNDYsMjMgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZSAmJiBtX3RleHR1cmUt
PmJ1ZmZlcigpOyB9CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6QnVmZmVyKik7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciopOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMo
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqLCBkb3VibGUgc2NhbGUpOwog
ICAgIHZvaWQgZGlzY2FyZENvbnRlbnRzKCk7CiAKLSAgICAvLyBUaGUgY3VycmVudCB0ZXh0dXJl
IGlzIGFuIGFjY3VyYXRlIHByZXZpZXcgb2YgdGhpcyBsYXllciwgYnV0IGEgbW9yZQotICAgIC8v
IGRldGFpbGVkIHRleHR1cmUgY291bGQgYmUgb2J0YWluZWQgYnkgcmVwYWludGluZyB0aGUgbGF5
ZXIuIFVzZWQgd2hlbgotICAgIC8vIHpvb20gbGV2ZWwgY2hhbmdlcy4KLSAgICB2b2lkIHNldENv
bnRlbnRzRGlydHkoKSB7IG1fY29udGVudHNEaXJ0eSA9IHRydWU7IH0KKyAgICAvLyBSZXR1cm5z
IDAgaWYgY29udGVudHMgYXJlIHJlc29sdXRpb24gaW5kZXBlbmRlbnQgb3Igc2NhbGUgaXMgc2lt
cGx5IHVua25vd24KKyAgICBkb3VibGUgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NhbGU7IH0KIAotICAgIGVudW0gUmVuZGVyU3RhdGUgeyBEb2VzTm90TmVlZFJlbmRlciA9IDAs
IE5lZWRzUmVuZGVyID0gMSwgUmVuZGVyUGVuZGluZyA9IDIgfTsKLSAgICBSZW5kZXJTdGF0ZSBy
ZW5kZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclN0YXRlPihtX25l
ZWRzUmVuZGVyKTsgfQotICAgIGJvb2wgbmVlZHNSZW5kZXIoKSB7IHJldHVybiBtX25lZWRzUmVu
ZGVyID09IE5lZWRzUmVuZGVyOyB9Ci0gICAgdm9pZCBzZXROZWVkc1JlbmRlcihib29sIG5lZWRz
UmVuZGVyKSB7IG1fbmVlZHNSZW5kZXIgPSBuZWVkc1JlbmRlcjsgfQotICAgIHZvaWQgc2V0UmVu
ZGVyUGVuZGluZygpIHsgbV9uZWVkc1JlbmRlciA9IFJlbmRlclBlbmRpbmc7IH0KLSAgICB2b2lk
IHNldFJlbmRlckRvbmUoKSB7IG1fbmVlZHNSZW5kZXIgPSBEb2VzTm90TmVlZFJlbmRlcjsgfQor
ICAgIC8vIFRoZSB0ZXh0dXJlIGNvbnRlbnRzIGFyZSBkaXJ0eSBkdWUgdG8gYXBwZWFyYW5jZSBv
ZiBwYWdlIGNoYW5naW5nLCBvciBhIGNoYW5nZSBpbiBjb250ZW50cyBzY2FsZS4KKyAgICB2b2lk
IHNldENvbnRlbnRzRGlydHkoKSB7IG1fY29udGVudHNEaXJ0eSA9IHRydWU7IH0KIAogcHJpdmF0
ZToKICAgICB2b2lkIHNldFRleHR1cmUoUGFzc1JlZlB0cjxMYXllclRleHR1cmU+KTsKIAogICAg
IC8vIE5ldmVyIGFzc2lnbiB0byBtX3RleHR1cmUgZGlyZWN0bHksIHVzZSBzZXRUZXh0dXJlKCkg
YWJvdmUuCiAgICAgUmVmUHRyPExheWVyVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIGRvdWJsZSBt
X3NjYWxlOwogICAgIGJvb2wgbV9jb250ZW50c0RpcnR5IDogMTsKICAgICBib29sIG1fdmlzaWJs
ZSA6IDE7Ci0gICAgdW5zaWduZWQgbV9uZWVkc1JlbmRlciA6IDI7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGls
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clRpbGVyLmNwcAppbmRleCA0Y2I3NDU1MGRjNzdiOTNmNGY0YjkxNTZlOWMwYzA5OTg2Zjk5N2Q3
Li4wOGM3YTI3NThjNDNjNDQ4ODA1N2M2MTIwZmFhMTZhNTBlYjA0YzkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJU
aWxlci5jcHAKQEAgLTIyLDkgKzIyLDEyIEBACiAKICNpbmNsdWRlICJMYXllclRpbGVyLmgiCiAK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgog
I2luY2x1ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKICNpbmNsdWRlICJMYXllck1lc3Nh
Z2UuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyLmgiCisjaW5jbHVkZSAiTGF5ZXJVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJMYXllcldlYktpdFRocmVhZC5oIgogI2luY2x1ZGUgIlRleHR1cmVD
YWNoZUNvbXBvc2l0aW5nVGhyZWFkLmgiCiAKQEAgLTMyLDEyICszNSw0OSBAQAogI2luY2x1ZGUg
PEJsYWNrQmVycnlQbGF0Zm9ybVNjcmVlbi5oPgogI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bVNldHRpbmdzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSBfTlRPX0NQVV9I
RFJfKHNtcHhjaGcuaCkKKworI2RlZmluZSBERUJVR19MQVlFUl9WSVNJQklMSVRZIDAgLy8gU2hv
dyB2aXNpYmxlIHJlZ2lvbiBvZiBsYXllcnMgYXMgYSB0aGljayBib3JkZXIsIGFuZCBwcmludCB2
aXNpYmxlIHJlY3QuCisjaWYgREVCVUdfTEFZRVJfVklTSUJJTElUWQorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBMYXllclZpc2liaWxpdHkgeworcHVibGljOgorICAgIExheWVyVmlzaWJpbGl0eShj
b25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBIYXNoU2V0PFRpbGVJbmRleD4mIHRp
bGVzTmVlZGluZ1JlbmRlcikKKyAgICAgICAgOiBtX3Zpc2libGVSZWN0KHZpc2libGVSZWN0KQor
ICAgICAgICAsIG1fdGlsZXNOZWVkaW5nUmVuZGVyKHRpbGVzTmVlZGluZ1JlbmRlcikKKyAgICB7
CisgICAgfQorCisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpYmxlUmVjdDsgfQorICAgIHZvaWQgc2V0VmlzaWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB2
aXNpYmxlUmVjdCkgeyBtX3Zpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7IH0KKworICAgIGJvb2wg
bmVlZHNSZW5kZXIoKSBjb25zdCB7IHJldHVybiAhbV90aWxlc05lZWRpbmdSZW5kZXIuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCB0aWxlTmVlZHNSZW5kZXIoY29uc3QgVGlsZUluZGV4JiBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV90aWxlc05lZWRpbmdSZW5kZXIuY29udGFpbnMoaW5kZXgpOyB9Cisg
ICAgdm9pZCBtYXJrVGlsZUFzUmVuZGVyZWQoY29uc3QgVGlsZUluZGV4JiBpbmRleCkgeyBtX3Rp
bGVzTmVlZGluZ1JlbmRlci5yZW1vdmUoaW5kZXgpOyBtX3RpbGVzUmVuZGVyZWQuYWRkKGluZGV4
KTsgfQorICAgIHZvaWQgc3dhcFRpbGVzTmVlZGluZ1JlbmRlcihIYXNoU2V0PFRpbGVJbmRleD4m
IHRpbGVzTmVlZGluZ1JlbmRlcikgeyBtX3RpbGVzTmVlZGluZ1JlbmRlci5zd2FwKHRpbGVzTmVl
ZGluZ1JlbmRlcik7IH0KKworICAgIHZvaWQgbWVyZ2UoTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmls
aXR5KQorICAgIHsKKyAgICAgICAgaWYgKCF2aXNpYmlsaXR5KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX3RpbGVzUmVuZGVyZWQuc3dhcCh2aXNpYmlsaXR5LT5tX3RpbGVzUmVuZGVy
ZWQpOworICAgICAgICBmb3IgKEhhc2hTZXQ8VGlsZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzUmVuZGVyZWQuYmVnaW4oKTsgaXQgIT0gbV90aWxlc1JlbmRlcmVkLmVuZCgpOyArK2l0KQor
ICAgICAgICAgICAgbV90aWxlc05lZWRpbmdSZW5kZXIucmVtb3ZlKCppdCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEZsb2F0UmVjdCBtX3Zpc2libGVSZWN0OworICAgIEhhc2hTZXQ8VGlsZUlu
ZGV4PiBtX3RpbGVzTmVlZGluZ1JlbmRlcjsKKyAgICBIYXNoU2V0PFRpbGVJbmRleD4gbV90aWxl
c1JlbmRlcmVkOworfTsKKwogLy8gVGhpcyBpcyB1c2VkIHRvIG1ha2UgdGhlIHZpZXdwb3J0IGFz
IHVzZWQgaW4gdGV4dHVyZSB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucwogLy8gc2xpZ2h0bHkgbGFy
Z2VyIHNvIHRleHR1cmVzIGFyZSB1cGxvYWRlZCBiZWZvcmUgYmVjb21pbmcgcmVhbGx5IHZpc2li
bGUuCiAvLyBJbmZsYXRpb24gaXMgZ3JlYXRlciBpbiBZIGRpcmVjdGlvbiAob25lIHNjcmVlbmZ1
bCBpbiBlaXRoZXIgZGlyZWN0aW9uKSBzaW5jZQpAQCAtNDksMTYgKzg5LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGN1cnJlbnQgdmlld3BvcnQgYXMgdmlzaWJsZS4KIGNvbnN0IEZsb2F0
U2l6ZSB2aWV3cG9ydEluZmxhdGlvbigxLjJmLCAzLjBmKTsKIAotc3RhdGljIHZvaWQgdHJhbnNm
b3JtUG9pbnQoZmxvYXQgeCwgZmxvYXQgeSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0s
IGZsb2F0KiByZXN1bHQpCi17Ci0gICAgLy8gU3F1YXNoIHRoZSBaIGNvb3JkaW5hdGUgc28gdGhh
dCBsYXllcnMgYXJlbid0IGNsaXBwZWQgYWdhaW5zdCB0aGUgbmVhciBhbmQKLSAgICAvLyBmYXIg
cGxhbmUuIE5vdGUgdGhhdCB0aGUgcGVyc3BlY3RpdmUgaXMgbWFpbnRhaW5lZCBhcyB3ZSdyZSBz
dGlsbCBwYXNzaW5nCi0gICAgLy8gZG93biB0aGUgVyBjb29yZGluYXRlLgotICAgIHJlc3VsdFsw
XSA9IHggKiBtLm0xMSgpICsgeSAqIG0ubTIxKCkgKyBtLm00MSgpOwotICAgIHJlc3VsdFsxXSA9
IHggKiBtLm0xMigpICsgeSAqIG0ubTIyKCkgKyBtLm00MigpOwotICAgIHJlc3VsdFsyXSA9IDA7
Ci0gICAgcmVzdWx0WzNdID0geCAqIG0ubTE0KCkgKyB5ICogbS5tMjQoKSArIG0ubTQ0KCk7Ci19
CisvLyBUaGlzIGlzIGEgc21hbGwgb3B0aW1pemF0aW9uIHRvIGN1dCBkb3duIG9uIGNhbGxzIHRv
IG9wZXJhdG9yIG5ldy4KKy8vIFNpbmNlIHRoZSBjb21wb3NpdGluZyB0aHJlYWQgbm9ybWFsbHkg
c3dhcHMgaW4gbmV3IHZpc2liaWxpdHkgb2JqZWN0cyBtdWNoIG1vcmUKKy8vIG9mdGVuIHRoYW4g
dGhlIFdlYktpdCB0aHJlYWQgc3dhcHMgdGhlbSBvdXQsIGl0J3MgbGlrZWx5IHRoYXQgaXQgd2ls
bCBzd2FwIG91dAorLy8gdGhlIHByZXZpb3VzIHZpc2liaWxpdHkgb2JqZWN0IGFuZCB3ZSBjYW4g
cmV1c2UgdGhhdC4KK3N0YXRpYyBMYXllclZpc2liaWxpdHkqIHNfc3BhcmVWaXNpYmlsaXR5ID0g
MDsKIAogc3RhdGljIEludFNpemUgZGVmYXVsdFRpbGVTaXplKCkKIHsKQEAgLTY4LDEyICsxMDMs
MTIgQEAgc3RhdGljIEludFNpemUgZGVmYXVsdFRpbGVTaXplKCkKIAogTGF5ZXJUaWxlcjo6TGF5
ZXJUaWxlcihMYXllcldlYktpdFRocmVhZCogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQot
ICAgICwgbV9uZWVkc1JlbmRlckNvdW50KDApCiAgICAgLCBtX25lZWRzQmFja2luZyhmYWxzZSkK
ICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRp
bGVTaXplKCkpCiAgICAgLCBtX2NsZWFyVGV4dHVyZUpvYnMoZmFsc2UpCi0gICAgLCBtX2NvbnRl
bnRzU2NhbGUoMC4wKQorICAgICwgbV9mcm9udFZpc2liaWxpdHkoMCkKKyAgICAsIG1fYmFja1Zp
c2liaWxpdHkoMCkKIHsKICAgICByZWYoKTsgLy8gVGhpcyByZWYoKSBpcyBtYXRjaGVkIGJ5IGEg
ZGVyZWYgaW4gbGF5ZXJDb21wb3NpdGluZ1RocmVhZERlc3Ryb3llZCgpOwogfQpAQCAtODQsNiAr
MTE5LDkgQEAgTGF5ZXJUaWxlcjo6fkxheWVyVGlsZXIoKQogICAgIC8vIGJlZm9yZSBub3cuIFdl
IGNhbid0IGNhbGwgaXQgaGVyZSBiZWNhdXNlIHdlIGhhdmUgbm8KICAgICAvLyBPcGVuR0wgY29u
dGV4dC4KICAgICBBU1NFUlQobV90aWxlcy5pc0VtcHR5KCkpOworCisgICAgZGVsZXRlIG1fZnJv
bnRWaXNpYmlsaXR5OworICAgIGRlbGV0ZSBtX2JhY2tWaXNpYmlsaXR5OwogfQogCiB2b2lkIExh
eWVyVGlsZXI6OmxheWVyV2ViS2l0VGhyZWFkRGVzdHJveWVkKCkKQEAgLTExNCwyMiArMTUyLDM2
IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91Ymxl
IHNjYWxlKQogewogICAgIHVwZGF0ZVRpbGVTaXplKCk7CiAKKyAgICBMYXllclZpc2liaWxpdHkq
IGZyb250VmlzaWJpbGl0eSA9IHRha2VGcm9udFZpc2liaWxpdHkoKTsKKyAgICBpZiAoZnJvbnRW
aXNpYmlsaXR5KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGRpcnR5LCBzdGFydCBmcmVzaC4gT3Ro
ZXJ3aXNlLCBrZWVwIHRyYWNrIG9mIHRpbGVzIHJlbmRlcmVkIHNvIGZhciwgdG8gYXZvaWQgcmUt
cmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRlbnQKKyAgICAgICAgaWYgKCFtX2NvbnRlbnRzRGlydHkp
CisgICAgICAgICAgICBmcm9udFZpc2liaWxpdHktPm1lcmdlKG1fYmFja1Zpc2liaWxpdHkpOwor
ICAgICAgICBkZWxldGUgbV9iYWNrVmlzaWJpbGl0eTsKKyAgICAgICAgbV9iYWNrVmlzaWJpbGl0
eSA9IGZyb250VmlzaWJpbGl0eTsKKyAgICB9CisgICAgYm9vbCBuZWVkc1JlbmRlciA9IG1fYmFj
a1Zpc2liaWxpdHkgJiYgbV9iYWNrVmlzaWJpbGl0eS0+bmVlZHNSZW5kZXIoKTsKKwogICAgIC8v
IENoZWNrIGlmIHVwZGF0ZSBpcyBuZWVkZWQKLSAgICBpZiAoIW1fY29udGVudHNEaXJ0eSAmJiAh
bmVlZHNSZW5kZXIoKSkKKyAgICBpZiAoIW1fY29udGVudHNEaXJ0eSAmJiAhbmVlZHNSZW5kZXIp
CiAgICAgICAgIHJldHVybjsKIAorI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkKKyAgICBpZiAo
bV9iYWNrVmlzaWJpbGl0eSAmJiAhbV9iYWNrVmlzaWJpbGl0eS0+dmlzaWJsZVJlY3QoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHByaW50ZigiTGF5ZXIgMHglcCBsb2NhbCB2aXNpYmxlIHJlY3QgJXNc
biIsIG1fbGF5ZXIsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QobV9iYWNrVmlzaWJp
bGl0eS0+dmlzaWJsZVJlY3QoKSkudG9TdHJpbmcoKS5jX3N0cigpKTsKKyNlbmRpZgorCiAgICAg
Ly8gVGhlcmUncyBubyBwb2ludCBpbiBkcmF3aW5nIGNvbnRlbnRzIGF0IGEgaGlnaGVyIHJlc29s
dXRpb24gZm9yIHNjYWxlCiAgICAgLy8gaW52YXJpYW50IGxheWVycy4KICAgICBpZiAobV9sYXll
ci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKLSAgICAgICAgc2NhbGUgPSAxLjA7Ci0KLSAgICBi
b29sIGlzWm9vbUpvYiA9IGZhbHNlOwotICAgIGlmIChzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGUp
IHsKLSAgICAgICAgLy8gVGhlIGZpcnN0IHRpbWUgYXJvdW5kLCBpdCBkb2VzIG5vdCBjb3VudCBh
cyBhIHpvb20gam9iLgotICAgICAgICBpZiAobV9jb250ZW50c1NjYWxlKQotICAgICAgICAgICAg
aXNab29tSm9iID0gdHJ1ZTsKLSAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAg
fQorICAgICAgICBzY2FsZSA9IDE7CisKKyAgICAvLyBSZW5kZXIgb25seSB2aXNpYmxlIHRpbGVz
LiBNYXNrIGxheWVycyBhcmUgYSBzcGVjaWFsIGNhc2UsIGJlY2F1c2UgdGhleSdyZSBuZXZlciBj
b25zaWRlcmVkCisgICAgLy8gdmlzaWJsZS4gV29ya2Fyb3VuZCB0aGlzIGJ5IGFsd2F5cyByZW5k
ZXJpbmcgdGhlbSAoYSB2ZXJ5IGZhc3Qgb3BlcmF0aW9uIHdpdGggdGhlCisgICAgLy8gQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzQ29udGV4dCBzaW5jZSBpdCB3aWxsIGp1c3QgcmVzdWx0
IGluIHJlZidpbmcgdGhlIG1hc2sgaW1hZ2UpLgorICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9
IG1fYmFja1Zpc2liaWxpdHkgPyBtX2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpIDogRmxv
YXRSZWN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGbG9hdFJlY3QoQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5sYXllclRpbGVyUHJlZmlsbFJlY3QoKSkpOworICAg
IGlmIChtX2xheWVyLT5pc01hc2soKSB8fCBtX2xheWVyLT5maWx0ZXJzKCkuc2l6ZSgpKQorICAg
ICAgICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChJbnRQb2ludDo6emVybygpLCBtX2xheWVyLT5i
b3VuZHMoKSk7CiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9k
aXJ0eVJlY3QpOwogICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZTsKQEAgLTE0MSwxMyAr
MTkzLDE2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQo
ZG91YmxlIHNjYWxlKQogICAgICAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KGJv
dW5kc1JlY3QpOwogICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gYm91bmRzUmVjdC5zaXpl
KCk7CiAKLSAgICAgICAgaWYgKHNjYWxlICE9IDEuMCkgeworICAgICAgICBpZiAoc2NhbGUgIT0g
MSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgICAgICAg
ICAgbWF0cml4LnNjYWxlKHNjYWxlKTsKIAogICAgICAgICAgICAgZGlydHlSZWN0ID0gbWF0cml4
Lm1hcFJlY3QodW50cmFuc2Zvcm1lZERpcnR5UmVjdCk7CiAgICAgICAgICAgICByZXF1aXJlZFRl
eHR1cmVTaXplID0gbWF0cml4Lm1hcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByZXF1
aXJlZFRleHR1cmVTaXplKSkuc2l6ZSgpOwogICAgICAgICAgICAgYm91bmRzUmVjdCA9IG1hdHJp
eC5tYXBSZWN0KHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KTsKKyAgICAgICAgICAgIC8vIFRoZSB2
aXNpYmxlIHJlY3QgaXMgdXNpbmcgdW5zY2FsZWQgY29vcmRpbmF0ZXMgaW4gbW9zdCBjYXNlcwor
ICAgICAgICAgICAgaWYgKG1fYmFja1Zpc2liaWxpdHkgfHwgbV9sYXllci0+aXNNYXNrKCkgfHwg
bV9sYXllci0+ZmlsdGVycygpLnNpemUoKSkKKyAgICAgICAgICAgICAgICB2aXNpYmxlUmVjdCA9
IG1hdHJpeC5tYXBSZWN0KHZpc2libGVSZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChy
ZXF1aXJlZFRleHR1cmVTaXplICE9IG1fcGVuZGluZ1RleHR1cmVTaXplKQpAQCAtMTYzLDg2ICsy
MTgsNTcgQEAgdm9pZCBMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZChk
b3VibGUgc2NhbGUpCiAgICAgICAgIGRpcnR5UmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgYm9vbCBkaWRSZXNpemUgPSBm
YWxzZTsKICAgICBJbnRSZWN0IHByZXZpb3VzVGV4dHVyZVJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
bV9wZW5kaW5nVGV4dHVyZVNpemUpOwogICAgIGlmIChtX3BlbmRpbmdUZXh0dXJlU2l6ZSAhPSBy
ZXF1aXJlZFRleHR1cmVTaXplKSB7Ci0gICAgICAgIGRpZFJlc2l6ZSA9IHRydWU7CiAgICAgICAg
IG1fcGVuZGluZ1RleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKICAgICAgICAgYWRk
VGV4dHVyZUpvYihUZXh0dXJlSm9iOjpyZXNpemVDb250ZW50cyhtX3BlbmRpbmdUZXh0dXJlU2l6
ZSkpOwogICAgIH0KIAotICAgIEludFJlY3QgcmVjdEZvck9uZVRpbGUoSW50UG9pbnQ6Onplcm8o
KSwgdGlsZVNpemUoKSk7Ci0gICAgYm9vbCB3YXNPbmVUaWxlID0gcmVjdEZvck9uZVRpbGUuY29u
dGFpbnMocHJldmlvdXNUZXh0dXJlUmVjdCk7Ci0gICAgYm9vbCBpc09uZVRpbGUgPSByZWN0Rm9y
T25lVGlsZS5jb250YWlucyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fcGVuZGluZ1RleHR1
cmVTaXplKSk7CisgICAgYm9vbCBjb250ZW50c0RpcnR5ID0gbV9jb250ZW50c0RpcnR5OworICAg
IGlmIChtX2NvbnRlbnRzRGlydHkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgbm90IGdvaW5nIHRv
IHJlLXJlbmRlciBhbGwgdGhlIGNvdmVyZWQgdGlsZXMsIG1hcmsgdGhvc2Ugbm90IGNvdmVyZWQg
YXMgZGlydHkuCisgICAgICAgIGlmICghdmlzaWJsZVJlY3QuY29udGFpbnMoZGlydHlSZWN0KSkK
KyAgICAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6ZGlydHlDb250ZW50cyhkaXJ0
eVJlY3QpKTsKKyAgICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fZGly
dHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgfQogCi0gICAgSGFzaFNldDxUaWxlSW5kZXg+IHJl
bmRlckpvYnM7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4
KTsKLQotICAgICAgICAvLyBBZGQgcHJlZmlsbCBqb2JzCi0gICAgICAgIGlmICghZGlydHlSZWN0
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5sYXllclRpbGVyUHJlZmlsbFJlY3QoKTsKLSAg
ICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgICAgICBUaWxlSW5k
ZXggYmVnaW4gPSBpbmRleE9mVGlsZShyZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICAg
ICAgVGlsZUluZGV4IGVuZCA9IGluZGV4T2ZUaWxlKHJlY3QubWF4WE1heFlDb3JuZXIoKSArIHRp
bGVTaXplKCkgLSBJbnRTaXplKDEsIDEpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJlZ2luLmkoKTsgaSA8IGVuZC5pKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IGJlZ2luLmooKTsgaiA8IGVuZC5qKCk7ICsraikKLSAgICAgICAgICAgICAgICAg
ICAgcmVuZGVySm9icy5hZGQoVGlsZUluZGV4KGksIGopKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgIC8vIElmIHdlIG5lZWQgZGlzcGxheSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVk
IHRvIGJlIGRpc3BsYXllZCwgZHVlIHRvIHRleHR1cmUgc2l6ZSBiZWNvbWluZyAwIHggMCwKKyAg
ICAvLyBvciBpZiB3ZSdyZSByZS1yZW5kZXJpbmcgdGhlIHdob2xlIHRoaW5nIGFueXdheSwgY2xl
YXIgb2xkIHRleHR1cmUgam9icy4KKyAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc0VtcHR5
KCkgfHwgZGlydHlSZWN0ID09IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcmVxdWlyZWRUZXh0
dXJlU2l6ZSkpCisgICAgICAgIGNsZWFyVGV4dHVyZUpvYnMoKTsKIAotICAgICAgICBmb3IgKFRp
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7Ci0gICAg
ICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKKyAgICBpZiAodmlzaWJsZVJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFRpbGVJbmRleD4g
cmVuZGVySm9iczsKKyAgICBUaWxlSW5kZXggZmlyc3Q7CisgICAgVGlsZUluZGV4IGxhc3Q7Cisg
ICAgaWYgKG1fbGF5ZXItPmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKKyAgICAg
ICAgLy8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBk
YXRhIGluIHRoZSBmaXJzdCB0aWxlCisgICAgICAgIGZpcnN0ID0gbGFzdCA9IFRpbGVJbmRleCgw
LCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaXJzdCA9IGluZGV4T2ZUaWxlKGZsb29yZWRJ
bnRQb2ludCh2aXNpYmxlUmVjdC5taW5YTWluWUNvcm5lcigpKSk7CisgICAgICAgIGxhc3QgPSBp
bmRleE9mVGlsZShjZWlsZWRJbnRQb2ludCh2aXNpYmxlUmVjdC5tYXhYTWF4WUNvcm5lcigpKSk7
CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0LmkoKTsgaSA8PSBsYXN0LmkoKTsg
KytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGZpcnN0LmooKTsgaiA8PSBsYXN0Lmoo
KTsgKytqKSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgoaSwgaik7CiAgICAgICAgICAg
ICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGUoaW5kZXgsIHJlcXVpcmVkVGV4dHVyZVNp
emUpOwogICAgICAgICAgICAgaWYgKHRpbGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKHRpbGUtPm5lZWRzUmVuZGVyKCkpIHsKLSAg
ICAgICAgICAgICAgICB0aWxlLT5zZXRSZW5kZXJQZW5kaW5nKCk7Ci0gICAgICAgICAgICAgICAg
LS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fbmVlZHNSZW5k
ZXJDb3VudCA+PSAwKTsKKyAgICAgICAgICAgIGlmIChtX2JhY2tWaXNpYmlsaXR5ICYmIG1fYmFj
a1Zpc2liaWxpdHktPnRpbGVOZWVkc1JlbmRlcihpbmRleCkpIHsKKyNpZiBERUJVR19MQVlFUl9W
SVNJQklMSVRZCisgICAgICAgICAgICAgICAgcHJpbnRmKCJUaWxlIGF0ICglZCwgJWQpIG5lZWRz
IHJlbmRlclxuIiwgaW5kZXguaSgpLCBpbmRleC5qKCkpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOworICAgICAgICAgICAgICAgIG1fYmFja1Zpc2liaWxp
dHktPm1hcmtUaWxlQXNSZW5kZXJlZChpbmRleCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNv
bnRlbnRzRGlydHkgJiYgZGlydHlSZWN0LmludGVyc2VjdHModGlsZVJlY3QpKQogICAgICAgICAg
ICAgICAgIHJlbmRlckpvYnMuYWRkKGluZGV4KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9j
b250ZW50c0RpcnR5KSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBsb2NhbERpcnR5UmVjdChk
aXJ0eVJlY3QpOwotICAgICAgICAgICAgICAgIGxvY2FsRGlydHlSZWN0LmludGVyc2VjdCh0aWxl
UmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsRGlydHlSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW5kZXIg
b25seSB2aXNpYmxlIHRpbGVzLiBNYXNrIGxheWVycyBhcmUgYSBzcGVjaWFsIGNhc2UsIGJlY2F1
c2UgdGhleSdyZSBuZXZlciBjb25zaWRlcmVkCi0gICAgICAgICAgICAgICAgLy8gdmlzaWJsZS4g
V29ya2Fyb3VuZCB0aGlzIGJ5IGFsd2F5cyByZW5kZXJpbmcgdGhlbSAoYSB2ZXJ5IGZhc3Qgb3Bl
cmF0aW9uIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgLy8gQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkdyYXBoaWNzQ29udGV4dCBzaW5jZSBpdCB3aWxsIGp1c3QgcmVzdWx0IGluIHJlZidpbmcgdGhl
IG1hc2sgaW1hZ2UpLgotICAgICAgICAgICAgICAgIGlmICh0aWxlLT5pc1Zpc2libGUoKSB8fCBt
X2xheWVyLT5pc01hc2soKSkgewotICAgICAgICAgICAgICAgICAgICByZW5kZXJKb2JzLmFkZChp
bmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIERvbid0IGRpc2NhcmQvZGlydHkgdGhlIHRpbGUgaWYgZm9y
IHNvbWUgcmVhc29uIChlLmcuIHByZWZpbGwpIGEgcmVuZGVyIGpvYiB3YXMgYWxyZWFkeSBhZGRl
ZC4KLSAgICAgICAgICAgICAgICBpZiAocmVuZGVySm9icy5jb250YWlucyhpbmRleCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgLy8gQXZvaWQgY2hl
Y2tlcmJvYXJkaW5nIHVubGVzcyB0aGUgbGF5ZXIgaXMgcmVzaXplZC4gV2hlbgotICAgICAgICAg
ICAgICAgIC8vIHJlc2l6ZWQsIHRoZSBjb250ZW50cyBhcmUgbGlrZWx5IHRvIGNoYW5nZSBhcHBl
YXJhbmNlLCBmb3IKLSAgICAgICAgICAgICAgICAvLyBleGFtcGxlIGR1ZSB0byBhc3BlY3QgcmF0
aW8gY2hhbmdlLiBIb3dldmVyLCBpZiBpdCBpcyBhCi0gICAgICAgICAgICAgICAgLy8gcmVzaXpl
IGR1ZSB0byB6b29taW5nLCB0aGUgYXNwZWN0IHJhdGlvIGFuZCBjb250ZW50IHdpbGwKLSAgICAg
ICAgICAgICAgICAvLyBzdGF5IHRoZSBzYW1lLCBhbmQgd2UgY2FuIGtlZXAgdGhlIG9sZCB0ZXh0
dXJlIGNvbnRlbnQgYXMgYQotICAgICAgICAgICAgICAgIC8vIHByZXZpZXcuCi0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IHRoZSB6b29tIHByZXZpZXcgb25seSB3b3JrcyBpZiB3ZSBkb24ndCBy
ZS10aWxlIHRoZQotICAgICAgICAgICAgICAgIC8vIGxheWVyLiBXZSBuZWVkIHRvIHN0b3JlIHRl
eHR1cmUgY29vcmRpbmF0ZXMgaW4KLSAgICAgICAgICAgICAgICAvLyBXZWJDb3JlOjpMYXllclRl
eHR1cmUgdG8gYmUgYWJsZSB0byBmaXggdGhhdC4KLSAgICAgICAgICAgICAgICBpZiAoZGlkUmVz
aXplICYmICEoaXNab29tSm9iICYmIHdhc09uZVRpbGUgJiYgaXNPbmVUaWxlKSkKLSAgICAgICAg
ICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpkaXNjYXJkQ29udGVudHModGls
ZVJlY3QpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZFRl
eHR1cmVKb2IoVGV4dHVyZUpvYjo6ZGlydHlDb250ZW50cyh0aWxlUmVjdCkpOwotICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gSWYgd2UgbmVlZCBkaXNwbGF5IGJlY2F1
c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gYmUgZGlzcGxheWVkLCBkdWUgdG8gdGV4dHVyZSBzaXpl
IGJlY29taW5nIDAgeCAwLAotICAgIC8vIG9yIGlmIHdlJ3JlIHJlLXJlbmRlcmluZyB0aGUgd2hv
bGUgdGhpbmcgYW55d2F5LCBjbGVhciBvbGQgdGV4dHVyZSBqb2JzLgotICAgIGlmIChyZXF1aXJl
ZFRleHR1cmVTaXplLmlzRW1wdHkoKSB8fCBkaXJ0eVJlY3QgPT0gSW50UmVjdChJbnRQb2ludDo6
emVybygpLCByZXF1aXJlZFRleHR1cmVTaXplKSkKLSAgICAgICAgY2xlYXJUZXh0dXJlSm9icygp
OwotCiAgICAgaWYgKHJlbmRlckpvYnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTI2NCw5ICsyOTAsNiBAQCB2b2lkIExheWVyVGlsZXI6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lm
TmVlZGVkKGRvdWJsZSBzY2FsZSkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQot
ICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwotICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0
KCk7CiB9CiAKIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBMYXllclRp
bGVyOjpjcmVhdGVCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTMyMCw2ICszNDMsMjIg
QEAgdm9pZCBMYXllclRpbGVyOjpjb21taXRQZW5kaW5nVGV4dHVyZVVwbG9hZHMoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCopCiAgICAgbV9wZW5kaW5nVGV4dHVyZUpvYnMuY2xlYXIoKTsKIH0KIAor
TGF5ZXJWaXNpYmlsaXR5KiBMYXllclRpbGVyOjpzd2FwRnJvbnRWaXNpYmlsaXR5KExheWVyVmlz
aWJpbGl0eSogdmlzaWJpbGl0eSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMYXll
clZpc2liaWxpdHkqPihfc21wX3hjaGcocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KCZtX2Zy
b250VmlzaWJpbGl0eSksIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KHZpc2liaWxpdHkpKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUaWxlcjo6c2V0RnJvbnRWaXNpYmlsaXR5KGNvbnN0IEZsb2F0UmVj
dCYgdmlzaWJsZVJlY3QsIEhhc2hTZXQ8VGlsZUluZGV4PiYgdGlsZXNOZWVkaW5nUmVuZGVyKQor
eworICAgIExheWVyVmlzaWJpbGl0eSogdmlzaWJpbGl0eSA9IHNfc3BhcmVWaXNpYmlsaXR5Owor
ICAgIGlmICh2aXNpYmlsaXR5KSB7CisgICAgICAgIHZpc2liaWxpdHktPnNldFZpc2libGVSZWN0
KHZpc2libGVSZWN0KTsKKyAgICAgICAgdmlzaWJpbGl0eS0+c3dhcFRpbGVzTmVlZGluZ1JlbmRl
cih0aWxlc05lZWRpbmdSZW5kZXIpOworICAgIH0gZWxzZQorICAgICAgICB2aXNpYmlsaXR5ID0g
bmV3IExheWVyVmlzaWJpbGl0eSh2aXNpYmxlUmVjdCwgdGlsZXNOZWVkaW5nUmVuZGVyKTsKKyAg
ICBzX3NwYXJlVmlzaWJpbGl0eSA9IHN3YXBGcm9udFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Cit9
CisKIHZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKQogewogICAgIC8vIEZvciB2aXNpYmxlIGxheWVycywg
d2UgaGFuZGxlIHRoZSB0aWxlLWxldmVsIHZpc2liaWxpdHkKQEAgLTMyNywyNCArMzY2LDExIEBA
IHZvaWQgTGF5ZXJUaWxlcjo6bGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiwgYm9vbCB2aXNpYmxlKQogICAgIGlmICh2aXNpYmxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICB7Ci0gICAgICAgIC8vIEFsbCB0aWxlcyBhcmUgaW52aXNpYmxlIG5vdy4KLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7Ci0KLSAgICAgICAgZm9yIChUaWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5OwotICAgICAg
ICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCppdCkudmFsdWU7Ci0gICAgICAgICAgICB0aWxlLT5z
ZXRWaXNpYmxlKGZhbHNlKTsKLSAgICAgICAgICAgIGlmICh0aWxlLT5uZWVkc1JlbmRlcigpKSB7
Ci0gICAgICAgICAgICAgICAgdGlsZS0+c2V0TmVlZHNSZW5kZXIoZmFsc2UpOwotICAgICAgICAg
ICAgICAgIC0tbV9uZWVkc1JlbmRlckNvdW50OwotICAgICAgICAgICAgICAgIEFTU0VSVChtX25l
ZWRzUmVuZGVyQ291bnQgPj0gMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgSGFzaFNldDxUaWxlSW5kZXg+IGVtcHR5VGlsZVNldDsKKyAgICBzZXRGcm9udFZpc2liaWxp
dHkoRmxvYXRSZWN0KCksIGVtcHR5VGlsZVNldCk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlcjo6dXBs
b2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKikKK3ZvaWQgTGF5ZXJU
aWxlcjo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXll
cikKIHsKICAgICBUaWxlSm9ic01hcCB0aWxlSm9ic01hcDsKICAgICBEZXF1ZTxUZXh0dXJlSm9i
Pjo6Y29uc3RfaXRlcmF0b3IgdGV4dHVyZUpvYkl0ZXJFbmQgPSBtX3RleHR1cmVKb2JzLmVuZCgp
OwpAQCAtMzYwLDEyICszODYsMTEgQEAgdm9pZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lm
TmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQogICAgICAgICAgICAgaWYgKG9yaWdpbi54
KCkgPj0gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgfHwgb3JpZ2luLnkoKSA+PSBtX3Jl
cXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwogICAgICAgICAg
ICAgdGlsZSA9IG5ldyBMYXllclRpbGUoKTsKICAgICAgICAgICAgIG1fdGlsZXMuYWRkKHRpbGVK
b2JzSXRlci0+a2V5LCB0aWxlKTsKICAgICAgICAgfQogCi0gICAgICAgIHBlcmZvcm1UaWxlSm9i
KHRpbGUsICp0aWxlSm9ic0l0ZXItPnZhbHVlKTsKKyAgICAgICAgcGVyZm9ybVRpbGVKb2IobGF5
ZXIsIHRpbGUsICp0aWxlSm9ic0l0ZXItPnZhbHVlKTsKICAgICB9CiAKICAgICBtX3RleHR1cmVK
b2JzLmNsZWFyKCk7CkBAIC0zODAsNiArNDA1LDE1IEBAIHZvaWQgTGF5ZXJUaWxlcjo6cHJvY2Vz
c1RleHR1cmVKb2IoY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxlSm9ic01hcCYgdGlsZUpvYnNN
CiAKICAgICAgICAgbV9yZXF1aXJlZFRleHR1cmVTaXplID0gcGVuZGluZ1RleHR1cmVTaXplOwog
ICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChqb2IubV90eXBlID09IFRleHR1cmVKb2I6
OkRpcnR5Q29udGVudHMpIHsKKyAgICAgICAgVGlsZUluZGV4IGZpcnN0ID0gaW5kZXhPZlRpbGUo
am9iLm1fZGlydHlSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICBUaWxlSW5kZXggbGFz
dCA9IGluZGV4T2ZUaWxlKGpvYi5tX2RpcnR5UmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKKyAgICAg
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90
aWxlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCku
a2V5OworICAgICAgICAgICAgaWYgKGluZGV4LmkoKSA+PSBmaXJzdC5pKCkgJiYgaW5kZXguaigp
ID49IGZpcnN0LmooKSAmJiBpbmRleC5pKCkgPD0gbGFzdC5pKCkgJiYgaW5kZXguaigpIDw9IGxh
c3QuaigpKQorICAgICAgICAgICAgICAgICgqaXQpLnZhbHVlLT5zZXRDb250ZW50c0RpcnR5KCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGFkZFRpbGVKb2IoaW5k
ZXhPZlRpbGUoam9iLm1fZGlydHlSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLCBqb2IsIHRpbGVKb2Jz
TWFwKTsKQEAgLTM5NCwxMCArNDI4LDYgQEAgdm9pZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNv
bnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRleHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEluIHRoaXMg
Y2FzZSB3ZSBsZWF2ZSB0aGUgcHJldmlvdXMgam9iLgotICAgIGlmIChqb2IubV90eXBlID09IFRl
eHR1cmVKb2I6OkRpcnR5Q29udGVudHMgJiYgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bV90eXBl
ID09IFRleHR1cmVKb2I6OkRpc2NhcmRDb250ZW50cykKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
Ly8gT3ZlcnJpZGUgdGhlIHByZXZpb3VzIGpvYi4KICAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5tX2NvbnRlbnRzKQogICAgICAgICBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmRlc3Ryb3lCdWZmZXIocmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+bV9jb250ZW50cyk7CkBAIC00MDUsMTU2ICs0MzUsMTc3IEBAIHZvaWQgTGF5ZXJU
aWxlcjo6YWRkVGlsZUpvYihjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBjb25zdCBUZXh0dXJlSm9i
JiBqb2IsIFRpbGVKCiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZqb2I7CiB9CiAKLXZv
aWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiB0aWxlLCBjb25zdCBUZXh0
dXJlSm9iJiBqb2IpCit2b2lkIExheWVyVGlsZXI6OnBlcmZvcm1UaWxlSm9iKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIGxheWVyLCBMYXllclRpbGUqIHRpbGUsIGNvbnN0IFRleHR1cmVKb2ImIGpv
YikKIHsKICAgICBzd2l0Y2ggKGpvYi5tX3R5cGUpIHsKICAgICBjYXNlIFRleHR1cmVKb2I6OlNl
dENvbnRlbnRzOgogICAgICAgICB0aWxlLT5zZXRDb250ZW50cyhqb2IubV9jb250ZW50cyk7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwot
ICAgICAgICAgICAgaWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpSZW5kZXJQ
ZW5kaW5nKQotICAgICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlckRvbmUoKTsKLSAgICAgICAg
fQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBUZXh0dXJlSm9iOjpVcGRhdGVDb250ZW50czoK
LSAgICAgICAgdGlsZS0+dXBkYXRlQ29udGVudHMoam9iLm1fY29udGVudHMpOwotICAgICAgICB7
Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLSAgICAgICAg
ICAgIGlmICh0aWxlLT5yZW5kZXJTdGF0ZSgpID09IExheWVyVGlsZTo6UmVuZGVyUGVuZGluZykK
LSAgICAgICAgICAgICAgICB0aWxlLT5zZXRSZW5kZXJEb25lKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzOgotICAgICAg
ICB0aWxlLT5kaXNjYXJkQ29udGVudHMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVGV4
dHVyZUpvYjo6RGlydHlDb250ZW50czoKLSAgICAgICAgdGlsZS0+c2V0Q29udGVudHNEaXJ0eSgp
OworICAgICAgICB0aWxlLT51cGRhdGVDb250ZW50cyhqb2IubV9jb250ZW50cywgbGF5ZXItPmNv
bnRlbnRzU2NhbGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFRleHR1cmVKb2I6OlVu
a25vd246CiAgICAgY2FzZSBUZXh0dXJlSm9iOjpSZXNpemVDb250ZW50czoKKyAgICBjYXNlIFRl
eHR1cmVKb2I6OkRpcnR5Q29udGVudHM6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1i
b29sIExheWVyVGlsZXI6OmRyYXdUaWxlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBk
b3VibGUgc2NhbGUsIGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
LCBjb25zdCBHTEVTMlByb2dyYW0mKQorYm9vbCBMYXllclRpbGVyOjpkcmF3VGlsZShMYXllckNv
bXBvc2l0aW5nVGhyZWFkKiBsYXllciwgTGF5ZXJUaWxlKiB0aWxlLCBjb25zdCBUaWxlSW5kZXgm
IGluZGV4LCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdENsaXApCiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybSA9
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgZmxvYXQgdmVydGljZXNbNCAqIDRdOwotCi0g
ICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90aWxlcy5nZXQoaW5kZXgpOwotICAgIGlmICghdGlsZSkg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLSAgICAgICAgdGls
ZSA9IG5ldyBMYXllclRpbGUoKTsKLSAgICAgICAgbV90aWxlcy5hZGQoaW5kZXgsIHRpbGUpOwor
ICAgIHVuc2lnbmVkIGNoYXIgZ2xvYmFsQWxwaGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihsYXllci0+ZHJhd09wYWNpdHkoKSAqIDI1NSk7CisgICAgYm9vbCBzaG91bGREcmF3VGlsZSA9
IGRzdC5pbnRlcnNlY3RzKGRzdENsaXApICYmIGdsb2JhbEFscGhhOworCisgICAgLy8gRXZlbiBp
ZiB0aGUgdGlsZSBoYXMgd3Jvbmcgc2NhbGUsIGl0IGNhbiBiZSB1c2VkIGFzIGEgInByZXZpZXci
IGlmIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmxhcCB3aXRoIG90aGVyIHRpbGVzCisgICAgYm9v
bCB0aWxlSGFzQ29ycmVjdFNjYWxlID0gdGlsZS0+Y29udGVudHNTY2FsZSgpID09IDAuMCB8fCB0
aWxlLT5jb250ZW50c1NjYWxlKCkgPT0gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKTsKKyAgICBpZiAo
IXRpbGVIYXNDb3JyZWN0U2NhbGUpCisgICAgICAgIHNob3VsZERyYXdUaWxlID0gc2hvdWxkRHJh
d1RpbGUgJiYgKG1fdGlsZXMuc2l6ZSgpID09IDEgJiYgIWluZGV4LmkoKSAmJiAhaW5kZXguaigp
KTsKKworICAgIGlmICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKKyAgICAgICAgTGF5ZXJUZXh0dXJl
KiB0ZXh0dXJlID0gdGlsZS0+dGV4dHVyZSgpOworICAgICAgICB0ZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHNo
b3VsZERyYXdUaWxlKSB7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJh
bnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGRyYXdUcmFuc2Zv
cm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOworICAgICAgICAgICAgaWYgKGxheWVyLT5j
b250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKQorICAgICAgICAgICAgICAgIGRyYXdUcmFu
c2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGRzdC53aWR0aCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXpl
LndpZHRoKCksIGRzdC5oZWlnaHQoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBlbHNlIGlmICh0aWxlLT5jb250ZW50c1NjYWxlKCkpCisgICAgICAgICAg
ICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZSgxIC8gdGlsZS0+Y29udGVudHNTY2FsZSgpKTsKKyAg
ICAgICAgICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKKyAgICAgICAgICAg
ICAgICBkcmF3VHJhbnNmb3JtLnNjYWxlKDEgLyBzY2FsZSk7CisgICAgICAgICAgICBibGl0VG9C
dWZmZXIoMCwgdGV4dHVyZS0+YnVmZmVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8QmxhY2tCZXJyeTo6
UGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSksCisgICAgICAg
ICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VPdmVyLCBnbG9i
YWxBbHBoYSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBXZSBhcHBseSB0aGUgdHJhbnNm
b3JtYXRpb24gYnkgaGFuZCwgc2luY2Ugd2UgbmVlZCB0aGUgeiBjb29yZGluYXRlCi0gICAgLy8g
YXMgd2VsbCAodG8gZG8gcGVyc3BlY3RpdmUgY29ycmVjdCB0ZXh0dXJpbmcpIGFuZCB3ZSBkb24n
dCBuZWVkCi0gICAgLy8gdG8gZGl2aWRlIGJ5IHcgYnkgaGFuZCwgdGhlIEdQVSB3aWxsIGRvIHRo
YXQgZm9yIHVzCi0gICAgdHJhbnNmb3JtUG9pbnQoZHN0LngoKSwgZHN0LnkoKSwgZHJhd1RyYW5z
Zm9ybSwgJnZlcnRpY2VzWzBdKTsKLSAgICB0cmFuc2Zvcm1Qb2ludChkc3QueCgpLCBkc3QubWF4
WSgpLCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbNF0pOwotICAgIHRyYW5zZm9ybVBvaW50KGRz
dC5tYXhYKCksIGRzdC5tYXhZKCksIGRyYXdUcmFuc2Zvcm0sICZ2ZXJ0aWNlc1s4XSk7Ci0gICAg
dHJhbnNmb3JtUG9pbnQoZHN0Lm1heFgoKSwgZHN0LnkoKSwgZHJhd1RyYW5zZm9ybSwgJnZlcnRp
Y2VzWzEyXSk7Ci0KLSAgICAvLyBJbmZsYXRlIHRoZSByZWN0IHNvbWV3aGF0IHRvIGF0dGVtcHQg
dG8gbWFrZSB0ZXh0dXJlcyByZW5kZXIgYmVmb3JlIHRoZXkgc2hvdwotICAgIC8vIHVwIG9uIHNj
cmVlbi4gQXMgeW91IGNhbiBzZWUsIHRoZSByZWN0IGlzIGluIG5vcm1hbGl6ZWQgZGV2aWNlIGNv
b3JkaW5hdGVzLgotICAgIEZsb2F0UmVjdCByZWN0KC12aWV3cG9ydEluZmxhdGlvbi53aWR0aCgp
LCAtdmlld3BvcnRJbmZsYXRpb24uaGVpZ2h0KCksIDIqdmlld3BvcnRJbmZsYXRpb24ud2lkdGgo
KSwgMip2aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSk7Ci0gICAgRmxvYXRRdWFkIHF1YWQoCi0g
ICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbMF0gLyB2ZXJ0aWNlc1szXSwgdmVydGljZXNbMV0g
LyB2ZXJ0aWNlc1szXSksCi0gICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbNF0gLyB2ZXJ0aWNl
c1s3XSwgdmVydGljZXNbNV0gLyB2ZXJ0aWNlc1s3XSksCi0gICAgICAgIEZsb2F0UG9pbnQodmVy
dGljZXNbOF0gLyB2ZXJ0aWNlc1sxMV0sIHZlcnRpY2VzWzldIC8gdmVydGljZXNbMTFdKSwKLSAg
ICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1sxMl0gLyB2ZXJ0aWNlc1sxNV0sIHZlcnRpY2VzWzEz
XSAvIHZlcnRpY2VzWzE1XSkpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHF1YWQuYm91
bmRpbmdCb3goKTsKLSAgICBib29sIHZpc2libGUgPSBib3VuZGluZ0JveC5pbnRlcnNlY3RzKHJl
Y3QpOwotICAgIEZsb2F0UmVjdCB2aWV3cG9ydCgtMSwgLTEsIDIsIDIpOwotICAgIHVuc2lnbmVk
IGNoYXIgZ2xvYmFsQWxwaGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsYXllci0+ZHJh
d09wYWNpdHkoKSAqIDI1NS4wZik7Ci0gICAgYm9vbCBzaG91bGREcmF3VGlsZSA9IGJvdW5kaW5n
Qm94LmludGVyc2VjdHModmlld3BvcnQpICYmIGdsb2JhbEFscGhhOwotCi0gICAgYm9vbCB3YXNW
aXNpYmxlID0gdGlsZS0+aXNWaXNpYmxlKCk7Ci0KLSAgICBpZiAodmlzaWJsZSkgewotICAgICAg
ICBpZiAodGlsZS0+aGFzVGV4dHVyZSgpKSB7Ci0gICAgICAgICAgICBMYXllclRleHR1cmUqIHRl
eHR1cmUgPSB0aWxlLT50ZXh0dXJlKCk7Ci0gICAgICAgICAgICB0ZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgIGlm
IChzaG91bGREcmF3VGlsZSkgewotICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNs
YXRlKGRzdC54KCksIGRzdC55KCkpOwotICAgICAgICAgICAgICAgIGlmIChsYXllci0+Y29udGVu
dHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgZHJhd1RyYW5z
Zm9ybS5zY2FsZU5vblVuaWZvcm0oZHN0LndpZHRoKCkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUu
d2lkdGgoKSwgZHN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zvcm0u
c2NhbGUoMS4wIC8gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKSk7Ci0gICAgICAgICAgICAgICAgZHJh
d1RyYW5zZm9ybS5zY2FsZShsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSA/IDEuMCAvIHNj
YWxlIDogMS4wKTsKLSAgICAgICAgICAgICAgICBibGl0VG9CdWZmZXIoMCwgdGV4dHVyZS0+YnVm
ZmVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlRyYW5zZm9ybWF0
aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSksCi0gICAgICAgICAgICAgICAgICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3ZlciwgZ2xvYmFsQWxwaGEpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSB0aWxlIG5lZWRz
IHRvIGJlIChyZS0pcmVuZGVyZWQuCisgICAgcmV0dXJuICF0aWxlLT5pc0RpcnR5KCkgJiYgdGls
ZUhhc0NvcnJlY3RTY2FsZTsKK30KIAotICAgICAgICBpZiAodGlsZS0+aXNEaXJ0eSgpKSB7Ci0g
ICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLSAgICAgICAgICAg
IHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgICAgICAgICBpZiAodGlsZS0+cmVuZGVy
U3RhdGUoKSA9PSBMYXllclRpbGU6OkRvZXNOb3ROZWVkUmVuZGVyKSB7Ci0gICAgICAgICAgICAg
ICAgdGlsZS0+c2V0TmVlZHNSZW5kZXIodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgKyttX25lZWRz
UmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQorc3RhdGljIEZsb2F0UmVjdCBpbmZsYXRlVmlld3BvcnQoY29uc3QgRmxvYXRSZWN0
JiB2aWV3cG9ydCkKK3sKKyAgICAvLyBFdmVyeXRoaW5nIGlzIGV4cHJlc3NlZCBpbiBub3JtYWxp
emVkIGRldmljZSBjb29yZGluYXRlcworICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUodmlld3Bv
cnQuc2l6ZSgpKTsKKyAgICB2aWV3cG9ydFNpemUuc2NhbGUodmlld3BvcnRJbmZsYXRpb24ud2lk
dGgoKSwgdmlld3BvcnRJbmZsYXRpb24uaGVpZ2h0KCkpOwogCi0gICAgICAgIGlmICghd2FzVmlz
aWJsZSkgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7Ci0g
ICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKHZpc2libGUpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmICh3YXNWaXNpYmxlKSB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVz
TXV0ZXgpOwotICAgICAgICB0aWxlLT5zZXRWaXNpYmxlKHZpc2libGUpOwotICAgICAgICBpZiAo
dGlsZS0+bmVlZHNSZW5kZXIoKSkgewotICAgICAgICAgICAgdGlsZS0+c2V0TmVlZHNSZW5kZXIo
ZmFsc2UpOwotICAgICAgICAgICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICBB
U1NFUlQobV9uZWVkc1JlbmRlckNvdW50ID49IDApOwotICAgICAgICB9Ci0gICAgfQorICAgIEZs
b2F0U2l6ZSB2aWV3cG9ydE9mZnNldCh2aWV3cG9ydC5zaXplKCkpOworICAgIHZpZXdwb3J0T2Zm
c2V0LnNjYWxlKHZpZXdwb3J0SW5mbGF0aW9uLndpZHRoKCkgLSAxLCB2aWV3cG9ydEluZmxhdGlv
bi5oZWlnaHQoKSAtIDEpOworICAgIHZpZXdwb3J0T2Zmc2V0LnNjYWxlKDAuNSk7CiAKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEZsb2F0UmVjdCh2aWV3cG9ydC5sb2NhdGlvbigpIC0g
dmlld3BvcnRPZmZzZXQsIHZpZXdwb3J0U2l6ZSk7CiB9CiAKLXZvaWQgTGF5ZXJUaWxlcjo6ZHJh
d1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgc2NhbGUsIGNv
bnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSkKK3ZvaWQgTGF5ZXJUaWxlcjo6ZHJhd1RleHR1cmVz
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBjb25zdCBHTEVTMlByb2dyYW0mLCBkb3Vi
bGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgRmxvYXRTaXplIGJv
dW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKLQotICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZh
cmlhbnQoKSkgewotICAgICAgICBib3VuZHMuc2V0V2lkdGgoYm91bmRzLndpZHRoKCkgLyBzY2Fs
ZSk7Ci0gICAgICAgIGJvdW5kcy5zZXRIZWlnaHQoYm91bmRzLmhlaWdodCgpIC8gc2NhbGUpOwor
ICAgIEZsb2F0UmVjdCBib3VuZHNSZWN0KC1sYXllci0+b3JpZ2luKCksIGxheWVyLT5ib3VuZHMo
KSk7CisgICAgaWYgKGxheWVyLT5zaXplSXNTY2FsZUludmFyaWFudCgpKQorICAgICAgICBib3Vu
ZHNSZWN0LnNjYWxlKDEgLyBzY2FsZSk7CisKKyAgICBGbG9hdFJlY3QgaW5mbGF0ZWRWaWV3cG9y
dCA9IGluZmxhdGVWaWV3cG9ydChjbGlwUmVjdCk7CisKKyAgICAvLyBVbnByb2plY3RpbmcgcG9p
bnRzIG91dHNpZGUgdGhlIHRyYW5zZm9ybWVkIGJvdW5kcyBnaXZlcyBwb29yIG51bWVyaWNhbCBz
dGFiaWxpdHkgaWYgdGhlcmUncyBhIHBlcnNwZWN0aXZlIGVmZmVjdCwKKyAgICAvLyBzbyB1bnBy
b2plY3QgdGhlIGNsaXBwZWQgdHJhbnNmb3JtZWQgYm91bmRzIGluc3RlYWQuCisgICAgVmVjdG9y
PEZsb2F0UG9pbnQsIDQ+IGNsaXBQb2x5Z29uID0gaW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KGxh
eWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpLCBjbGlwUmVjdCk7CisgICAgaWYgKGNsaXBQb2x5Z29u
LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBUaGUgTGF5ZXJSZW5kZXJlciBmaWd1cmVzIHdlJ3Jl
IHZpc2libGUsIG9yIGl0IHdvdWxkbid0IGhhdmUgY2FsbGVkIGludG8gdGhpcyBtZXRob2QsIGJ1
dCB3ZSBiZWcgdG8gZGlmZmVyLgorICAgICAgICBsYXllci0+c2V0VmlzaWJsZShmYWxzZSk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIG5lZWRzRGlzcGxheSA9IGZhbHNlOwor
ICAgIEZsb2F0UmVjdCBub3JtYWxpemVkTGF5ZXJDbGlwUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAx
LCAxKTsKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZExheWVyVmlzaWJsZVJlY3QgPSBGbG9hdFJl
Y3QoMCwgMCwgMSwgMSk7CiAKKyAgICBpZiAoY2xpcFBvbHlnb24gIT0gbGF5ZXItPnRyYW5zZm9y
bWVkQm91bmRzKCkpIHsKKyAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDQ+IG5vcm1hbGl6ZWRM
YXllckNsaXBQb2x5Z29uID0gdW5wcm9qZWN0KGxheWVyLCBjbGlwUG9seWdvbik7CisgICAgICAg
IG5vcm1hbGl6ZWRMYXllckNsaXBSZWN0LmludGVyc2VjdChib3VuZGluZ0JveChub3JtYWxpemVk
TGF5ZXJDbGlwUG9seWdvbikpOworCisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiB2aXNp
YmxlUG9seWdvbiA9IGludGVyc2VjdFBvbHlnb25XaXRoUmVjdChsYXllci0+dHJhbnNmb3JtZWRC
b3VuZHMoKSwgaW5mbGF0ZWRWaWV3cG9ydCk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0
PiBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUG9seWdvbiA9IHVucHJvamVjdChsYXllciwgdmlzaWJs
ZVBvbHlnb24pOworICAgICAgICBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVjdC5pbnRlcnNlY3Qo
Ym91bmRpbmdCb3gobm9ybWFsaXplZExheWVyVmlzaWJsZVBvbHlnb24pKTsKKyAgICB9CisKKyAg
ICBGbG9hdFNpemUgdGlsZVNpemU7CisgICAgRmxvYXRSZWN0IGRzdENsaXA7CisgICAgVGlsZUlu
ZGV4IGZpcnN0OworICAgIFRpbGVJbmRleCBsYXN0OwogICAgIGlmIChsYXllci0+Y29udGVudHNS
ZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkgewotICAgICAgICAvLyBSZXNvbHV0aW9uIGluZGVwZW5k
ZW50IGxheWVycyBoYXZlIGFsbCB0aGUgbmVlZGVkIGRhdGEgaW4gdGhlIGZpcnN0IHRpbGUgYW5k
IGFsbCB0aGUgb3RoZXJzIGFyZSB1c2VsZXNzLgotICAgICAgICBGbG9hdFJlY3QgZHN0KC1ib3Vu
ZHMud2lkdGgoKSAvIDIuMCwgLWJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgYm91bmRzLndpZHRoKCks
IGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgIG5lZWRzRGlzcGxheSA9IGRyYXdUaWxlKGxheWVy
LCBzY2FsZSwgVGlsZUluZGV4KDAsIDApLCBkc3QsIHByb2dyYW0pOworICAgICAgICAvLyBSZXNv
bHV0aW9uIGluZGVwZW5kZW50IGxheWVycyBoYXZlIGFsbCB0aGUgbmVlZGVkIGRhdGEgaW4gdGhl
IGZpcnN0IHRpbGUKKyAgICAgICAgdGlsZVNpemUgPSBib3VuZHNSZWN0LnNpemUoKTsKKyAgICAg
ICAgZHN0Q2xpcCA9IGJvdW5kc1JlY3Q7CisgICAgICAgIGZpcnN0ID0gbGFzdCA9IFRpbGVJbmRl
eCgwLCAwKTsKICAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBzeCA9IHN0YXRpY19jYXN0PGZs
b2F0Pihib3VuZHMud2lkdGgoKSkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKTsKLSAg
ICAgICAgZmxvYXQgc3kgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLmhlaWdodCgpKSAvIG1f
cmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0
aW9uUmVjdCA9IG5vcm1hbGl6ZWRMYXllclZpc2libGVSZWN0OworICAgICAgICBkZXN0aW5hdGlv
blJlY3Quc2NhbGUobV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCksIG1fcmVxdWlyZWRUZXh0
dXJlU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICAgICAgSW50UmVjdCBzcmMoSW50UG9pbnQ6Onplcm8o
KSwgdGlsZVNpemUoKSk7Ci0gICAgICAgIGZvciAoc3JjLnNldFgoMCk7IHNyYy54KCkgPCBtX3Jl
cXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKTsgc3JjLnNldFgoc3JjLngoKSArIHNyYy53aWR0aCgp
KSkgewotICAgICAgICAgICAgZm9yIChzcmMuc2V0WSgwKTsgc3JjLnkoKSA8IG1fcmVxdWlyZWRU
ZXh0dXJlU2l6ZS5oZWlnaHQoKTsgc3JjLnNldFkoc3JjLnkoKSArIHNyYy5oZWlnaHQoKSkpIHsK
LSAgICAgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSBpbmRleE9mVGlsZShzcmMubG9jYXRp
b24oKSk7CisgICAgICAgIHRpbGVTaXplID0gbV90aWxlU2l6ZTsKKyAgICAgICAgdGlsZVNpemUu
c2NhbGUoYm91bmRzUmVjdC53aWR0aCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCks
IGJvdW5kc1JlY3QuaGVpZ2h0KCkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOwog
Ci0gICAgICAgICAgICAgICAgZmxvYXQgeCA9IGluZGV4LmkoKSAqIHNyYy53aWR0aCgpICogc3g7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgeSA9IGluZGV4LmooKSAqIHNyYy5oZWlnaHQoKSAqIHN5
OwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBkc3QoeCAtIGJvdW5kcy53aWR0aCgpIC8gMi4w
LCB5IC0gYm91bmRzLmhlaWdodCgpIC8gMi4wLCBtaW4oYm91bmRzLndpZHRoKCkgLSB4LCBzcmMu
d2lkdGgoKSAqIHN4KSwgbWluKGJvdW5kcy5oZWlnaHQoKSAtIHksIHNyYy5oZWlnaHQoKSAqIHN5
KSk7CisgICAgICAgIGRzdENsaXAgPSBub3JtYWxpemVkTGF5ZXJDbGlwUmVjdDsKKyAgICAgICAg
ZHN0Q2xpcC5zY2FsZShib3VuZHNSZWN0LndpZHRoKCksIGJvdW5kc1JlY3QuaGVpZ2h0KCkpOwor
ICAgICAgICBkc3RDbGlwLm1vdmVCeShib3VuZHNSZWN0LmxvY2F0aW9uKCkpOwogCi0gICAgICAg
ICAgICAgICAgbmVlZHNEaXNwbGF5IHw9IGRyYXdUaWxlKGxheWVyLCBzY2FsZSwgaW5kZXgsIGRz
dCwgcHJvZ3JhbSk7CisgICAgICAgIC8vIFRoZSBsYXllciBjb250YWlucyBwaXhlbHMgd2l0aCBj
b29yZGluYXRlcyAoMCAuLi4gbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgLSAxLCAwIC4u
LiBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgLSAxKSwKKyAgICAgICAgLy8gc28gY2xh
bXAgdGhlIGRlc3RpbmF0aW9uUmVjdC10by10aWxlaW5kZXggY2FsY3VsYXRpb24gYXBwcm9wcmlh
dGVseS4KKyAgICAgICAgZmlyc3QgPSBpbmRleE9mVGlsZShmbG9vcmVkSW50UG9pbnQoZGVzdGlu
YXRpb25SZWN0Lm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAgICAgICAgbGFzdCA9IGluZGV4T2ZUaWxl
KGNlaWxlZEludFBvaW50KGRlc3RpbmF0aW9uUmVjdC5tYXhYTWF4WUNvcm5lcigpKS5zaHJ1bmtU
byhJbnRQb2ludCgtMSwgLTEpICsgbV9yZXF1aXJlZFRleHR1cmVTaXplKSk7CisgICAgfQorCisg
ICAgSGFzaFNldDxUaWxlSW5kZXg+IHRpbGVzTmVlZGluZ1JlbmRlcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBmaXJzdC5pKCk7IGkgPD0gbGFzdC5pKCk7ICsraSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBmaXJzdC5qKCk7IGogPD0gbGFzdC5qKCk7ICsraikgeworICAgICAgICAgICAg
VGlsZUluZGV4IGluZGV4KGksIGopOworICAgICAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gbV90
aWxlcy5nZXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCF0aWxlKSB7CisgICAgICAgICAgICAg
ICAgdGlsZSA9IG5ldyBMYXllclRpbGUoKTsKKyAgICAgICAgICAgICAgICBtX3RpbGVzLmFkZChp
bmRleCwgdGlsZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB0aWxlLT5zZXRWaXNpYmxl
KHRydWUpOworICAgICAgICAgICAgRmxvYXRQb2ludCB0aWxlT3JpZ2luKGluZGV4LmkoKSAqIHRp
bGVTaXplLndpZHRoKCksIGluZGV4LmooKSAqIHRpbGVTaXplLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIEZsb2F0UmVjdCBkc3QodGlsZU9yaWdpbiAtIDAuNSAqIGJvdW5kc1JlY3Quc2l6ZSgpLCB0
aWxlU2l6ZS5zaHJ1bmtUbyhib3VuZHNSZWN0LnNpemUoKSAtIHRvRmxvYXRTaXplKHRpbGVPcmln
aW4pKSk7CisgICAgICAgICAgICBpZiAoIWRyYXdUaWxlKGxheWVyLCB0aWxlLCBpbmRleCwgc2Nh
bGUsIGRzdCwgZHN0Q2xpcCkpCisgICAgICAgICAgICAgICAgdGlsZXNOZWVkaW5nUmVuZGVyLmFk
ZChpbmRleCk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7CisgICAg
ICAgIFRpbGVJbmRleCBpbmRleCA9ICgqaXQpLmtleTsKKyAgICAgICAgaWYgKGluZGV4LmkoKSA8
IGZpcnN0LmkoKSB8fCBpbmRleC5qKCkgPCBmaXJzdC5qKCkgfHwgaW5kZXguaSgpID4gbGFzdC5p
KCkgfHwgaW5kZXguaigpID4gbGFzdC5qKCkpCisgICAgICAgICAgICAoKml0KS52YWx1ZS0+c2V0
VmlzaWJsZShmYWxzZSk7CisgICAgfQorCisgICAgLy8gVGhlIHZpc2libGUgcmVjdCB3aWxsIGJl
IHVzZWQgb24gdGhlIFdlYktpdCB0aHJlYWQgYW5kIHNob3VsZCB1c2UgdGhlIGJvdW5kcyBleHBy
ZXNzZWQgaW4KKyAgICAvLyBkb2N1bWVudCBjb29yZGluYXRlcywgbm90IGNvcnJlY3RlZCBmb3Ig
c2NhbGUgaW52YXJpYW5jZS4gU28gdXNlICJsYXllci0+Ym91bmRzKCkiIGluc3RlYWQKKyAgICAv
LyBvZiB0aGUgbG9jYWwgdmFyaWFibGUgImJvdW5kc1JlY3Quc2l6ZSgpIi4KKyAgICBGbG9hdFJl
Y3QgbGF5ZXJWaXNpYmxlUmVjdCA9IG5vcm1hbGl6ZWRMYXllclZpc2libGVSZWN0OworICAgIGxh
eWVyVmlzaWJsZVJlY3Quc2NhbGUobGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3Vu
ZHMoKS5oZWlnaHQoKSk7CisKKyNpZiBERUJVR19MQVlFUl9WSVNJQklMSVRZCisgICAgVmVjdG9y
PEZsb2F0UG9pbnQ+IHYgPSB1bnByb2plY3QobGF5ZXIsIGNsaXBQb2x5Z29uKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHYuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdltpXS5zY2FsZShs
YXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKKyAgICAg
ICAgdltpXS5tb3ZlKHRvRmxvYXRTaXplKGJvdW5kc1JlY3QubG9jYXRpb24oKSkpOworICAgICAg
ICB2W2ldID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBQb2ludCh2W2ldKTsKKyAgICB9CisK
KyAgICAvLyBVc2UgYSB0aGljayBib3JkZXIgdG8gbWFrZSB0aGUgYm9yZGVyIHZpc2libGUgZXZl
biBmb3IgdGhlIHJvb3QgbGF5ZXIgKHdoaWNoIHR5cGljYWxseSBjb3ZlcnMgdGhlIHNjcmVlbiB3
aWR0aCBhbmQvb3IgaGVpZ2h0KS4KKyAgICB1bnNpZ25lZCB0bXAgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPih0aGlzKTsKKyAgICBpbnQgdCA9IHJhbmRfcigmdG1wKTsKKyAgICBnbERpc2Fi
bGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAvLyBXaGVuIGRlYnVnZ2luZywgZHJhdyBmaXJzdCBs
YXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKSwgdGhlbiBjbGlwUG9seWdvbiwgdGhlbiB2CisgICAg
Ly8gdG8gZmluZCBvdXQgd2hlcmUgdGhlIHByb2JsZW0gaXMgKGNsaXBwaW5nIHRvIGltYWdlIHBs
YW5lLCBjbGlwcGluZyB0byB2aWV3cG9ydCBvciB1bnByb2plY3RpbmcpLgorICAgIGxheWVyLT5s
YXllclJlbmRlcmVyKCktPmRyYXdEZWJ1Z0JvcmRlcigvKiBsYXllci0+dHJhbnNmb3JtZWRCb3Vu
ZHMoKSAqLyAvKiBjbGlwUG9seWdvbiAqLyB2LCBtYWtlUkdCQUZyb21IU0xBKHN0YXRpY19jYXN0
PGRvdWJsZT4odCkgLyBSQU5EX01BWCwgMSwgMC41LCAxKSwgNSk7CisgICAgZ2xFbmFibGUoR0xf
U0NJU1NPUl9URVNUKTsKKyNlbmRpZgorCiAgICAgLy8gSWYgd2Ugc2NoZWR1bGUgYSBjb21taXQs
IHZpc2liaWxpdHkgd2lsbCBiZSB1cGRhdGVkLCBhbmQgZGlzcGxheSB3aWxsCiAgICAgLy8gaGFw
cGVuIGlmIHRoZXJlIGFyZSBhbnkgdmlzaWJsZSBhbmQgZGlydHkgdGV4dHVyZXMuCi0gICAgaWYg
KG5lZWRzRGlzcGxheSkKKyAgICBpZiAoIXRpbGVzTmVlZGluZ1JlbmRlci5pc0VtcHR5KCkpCiAg
ICAgICAgIGxheWVyLT5zZXROZWVkc0NvbW1pdCgpOworCisgICAgc2V0RnJvbnRWaXNpYmlsaXR5
KGxheWVyVmlzaWJsZVJlY3QsIHRpbGVzTmVlZGluZ1JlbmRlcik7CiB9CiAKIHZvaWQgTGF5ZXJU
aWxlcjo6ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCkBAIC01ODksMTQg
KzY0MCwxMCBAQCB2b2lkIExheWVyVGlsZXI6OnBydW5lVGV4dHVyZXMoKQogICAgICAgICAgICAg
dGlsZXNUb0RlbGV0ZS5hcHBlbmQoaW5kZXgpOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7Ci0KLSAgICAgICAgZm9yIChWZWN0b3I8VGls
ZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSB0aWxlc1RvRGVsZXRlLmJlZ2luKCk7IGl0ICE9IHRpbGVz
VG9EZWxldGUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIExheWVyVGlsZSogdGlsZSA9IG1f
dGlsZXMudGFrZSgqaXQpOwotICAgICAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRlbnRzKCk7Ci0g
ICAgICAgICAgICBkZWxldGUgdGlsZTsKLSAgICAgICAgfQorICAgIGZvciAoVmVjdG9yPFRpbGVJ
bmRleD46Oml0ZXJhdG9yIGl0ID0gdGlsZXNUb0RlbGV0ZS5iZWdpbigpOyBpdCAhPSB0aWxlc1Rv
RGVsZXRlLmVuZCgpOyArK2l0KSB7CisgICAgICAgIExheWVyVGlsZSogdGlsZSA9IG1fdGlsZXMu
dGFrZSgqaXQpOworICAgICAgICB0aWxlLT5kaXNjYXJkQ29udGVudHMoKTsKKyAgICAgICAgZGVs
ZXRlIHRpbGU7CiAgICAgfQogfQogCkBAIC02NTAsOCArNjk3LDcgQEAgSW50UG9pbnQgTGF5ZXJU
aWxlcjo6b3JpZ2luT2ZUaWxlKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpCiBJbnRSZWN0IExheWVy
VGlsZXI6OnJlY3RGb3JUaWxlKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IEludFNpemUm
IGJvdW5kcykKIHsKICAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUoaW5kZXgpOwot
ICAgIEludFNpemUgb2Zmc2V0KG9yaWdpbi54KCksIG9yaWdpbi55KCkpOwotICAgIEludFNpemUg
c2l6ZSA9IHRpbGVTaXplKCkuc2hydW5rVG8oYm91bmRzIC0gb2Zmc2V0KTsKKyAgICBJbnRTaXpl
IHNpemUgPSB0aWxlU2l6ZSgpLnNocnVua1RvKGJvdW5kcyAtIHRvSW50U2l6ZShvcmlnaW4pKTsK
ICAgICByZXR1cm4gSW50UmVjdChvcmlnaW4sIHNpemUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCmlu
ZGV4IDJlZjZiMjM1Mzk4OTJiZDEzMzVmZGQxNjdmOTY2OGNlYzlhMzdhY2YuLjVkM2Q3NTczN2Yw
MmY4MTcwMjdjZDhlOGY1MGViMTVmOTk3ZmFiNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCkBAIC0zNiw2
ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQ7CitjbGFzcyBMYXllclZpc2liaWxpdHk7CiBjbGFzcyBMYXllcldlYktpdFRocmVhZDsK
IAogY2xhc3MgTGF5ZXJUaWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXllclRp
bGVyPiwgcHVibGljIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgewpAQCAtNjcsMTQgKzY4
LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAgICAgdmly
dHVhbCBMYXllclRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFk
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFk
KiwgZG91YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCosIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQ
cm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogICAg
IHN0YXRpYyB2b2lkIHdpbGxDb21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGlu
Z1RleHR1cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKIAogcHJpdmF0ZToKICAg
ICBzdHJ1Y3QgVGV4dHVyZUpvYiB7Ci0gICAgICAgIGVudW0gVHlwZSB7IFVua25vd24sIFNldENv
bnRlbnRzLCBVcGRhdGVDb250ZW50cywgRGlzY2FyZENvbnRlbnRzLCBSZXNpemVDb250ZW50cywg
RGlydHlDb250ZW50cyB9OworICAgICAgICBlbnVtIFR5cGUgeyBVbmtub3duLCBTZXRDb250ZW50
cywgVXBkYXRlQ29udGVudHMsIFJlc2l6ZUNvbnRlbnRzLCBEaXJ0eUNvbnRlbnRzIH07CiAKICAg
ICAgICAgVGV4dHVyZUpvYigpCiAgICAgICAgICAgICA6IG1fdHlwZShVbmtub3duKQpAQCAtOTUs
NyArOTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX2NvbnRlbnRzKDApCiAgICAgICAg
ICAgICAsIG1fZGlydHlSZWN0KGRpcnR5UmVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gRGlzY2FyZENvbnRlbnRzIHx8IHR5cGUgPT0gRGlydHlDb250ZW50cyk7Cisg
ICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEaXJ0eUNvbnRlbnRzKTsKICAgICAgICAgfQogCiAg
ICAgICAgIFRleHR1cmVKb2IoVHlwZSB0eXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhp
Y3M6OkJ1ZmZlciogY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTExMiw3
ICsxMTMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVKb2IoU2V0Q29u
dGVudHMsIGNvbnRlbnRzLCBjb250ZW50c1JlY3QpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRp
YyBUZXh0dXJlSm9iIHVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGlj
czo6QnVmZmVyKiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7IHJldHVybiBU
ZXh0dXJlSm9iKFVwZGF0ZUNvbnRlbnRzLCBjb250ZW50cywgZGlydHlSZWN0KTsgfQotICAgICAg
ICBzdGF0aWMgVGV4dHVyZUpvYiBkaXNjYXJkQ29udGVudHMoY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KSB7IHJldHVybiBUZXh0dXJlSm9iKERpc2NhcmRDb250ZW50cywgZGlydHlSZWN0KTsgfQog
ICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiByZXNpemVDb250ZW50cyhjb25zdCBJbnRTaXplJiBu
ZXdTaXplKSB7IHJldHVybiBUZXh0dXJlSm9iKFJlc2l6ZUNvbnRlbnRzLCBuZXdTaXplKTsgfQog
ICAgICAgICBzdGF0aWMgVGV4dHVyZUpvYiBkaXJ0eUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkgeyByZXR1cm4gVGV4dHVyZUpvYihEaXJ0eUNvbnRlbnRzLCBkaXJ0eVJlY3QpOyB9
CiAKQEAgLTEyNywyNiArMTI3LDI3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRp
bGVJbmRleCwgTGF5ZXJUaWxlKj4gVGlsZU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZUlu
ZGV4LCBjb25zdCBUZXh0dXJlSm9iKj4gVGlsZUpvYnNNYXA7CiAKLSAgICB2b2lkIHVwZGF0ZVRp
bGVTaXplKCk7Ci0KICAgICBMYXllclRpbGVyKExheWVyV2ViS2l0VGhyZWFkKik7CiAKKyAgICAv
LyBTd2FwcyBpbiBhIG5ldyBmcm9udCB2aXNpYmlsaXR5IGFuZCByZXR1cm5zIHRoZSBjdXJyZW50
IG9uZSwgYXRvbWljYWxseS4KKyAgICBMYXllclZpc2liaWxpdHkqIHN3YXBGcm9udFZpc2liaWxp
dHkoTGF5ZXJWaXNpYmlsaXR5Kik7CisKICAgICAvLyBXZWJLaXQgdGhyZWFkCisgICAgdm9pZCB1
cGRhdGVUaWxlU2l6ZSgpOwogICAgIHZvaWQgYWRkVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9i
Jik7CiAgICAgdm9pZCBjbGVhclRleHR1cmVKb2JzKCk7CiAgICAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpCdWZmZXIqIGNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJik7CisgICAg
TGF5ZXJWaXNpYmlsaXR5KiB0YWtlRnJvbnRWaXNpYmlsaXR5KCkgeyByZXR1cm4gc3dhcEZyb250
VmlzaWJpbGl0eSgwKTsgfQogCiAgICAgLy8gQ29tcG9zaXRpbmcgdGhyZWFkCiAgICAgdm9pZCB1
cGRhdGVUaWxlQ29udGVudHMoY29uc3QgVGV4dHVyZUpvYiYsIGNvbnN0IEludFJlY3QmKTsKICAg
ICB2b2lkIGFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiwgY29uc3QgVGV4dHVyZUpvYiYsIFRp
bGVKb2JzTWFwJik7Ci0gICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqLCBjb25zdCBU
ZXh0dXJlSm9iJik7CisgICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiwgTGF5ZXJUaWxlKiwgY29uc3QgVGV4dHVyZUpvYiYpOwogICAgIHZvaWQgcHJvY2Vzc1Rl
eHR1cmVKb2IoY29uc3QgVGV4dHVyZUpvYiYsIFRpbGVKb2JzTWFwJik7CiAgICAgdm9pZCBwcnVu
ZVRleHR1cmVzKCk7CiAgICAgdm9pZCB2aXNpYmlsaXR5Q2hhbmdlZChib29sIG5lZWRzRGlzcGxh
eSk7Ci0gICAgYm9vbCBkcmF3VGlsZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNj
YWxlLCBjb25zdCBUaWxlSW5kZXgmLCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKLQotICAgIC8vIFRocmVh
ZHNhZmUKLSAgICBpbnQgbmVlZHNSZW5kZXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxp
bnQgY29uc3Qgdm9sYXRpbGUgJj4obV9uZWVkc1JlbmRlckNvdW50KTsgfQorICAgIGJvb2wgZHJh
d1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIExheWVyVGlsZSosIGNvbnN0IFRpbGVJbmRl
eCYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0Q2xpcCk7CisgICAgdm9pZCBzZXRGcm9udFZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0JiB2
aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpOwogCiAg
ICAgLy8gQ2xlYXIgYWxsIHBlbmRpbmcgdXBkYXRlIGNvbnRlbnQgdGV4dHVyZSBqb2JzCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE2NSw5ICsxNjYsNyBAQCBwcml2YXRlOgogCiAgICAg
TGF5ZXJXZWJLaXRUaHJlYWQqIG1fbGF5ZXI7CiAKLSAgICBNdXRleCBtX3RpbGVzTXV0ZXg7Ci0g
ICAgVGlsZU1hcCBtX3RpbGVzOyAvLyBQcm90ZWN0ZWQgYnkgbV90aWxlc011dGV4Ci0gICAgaW50
IG1fbmVlZHNSZW5kZXJDb3VudDsgLy8gYXRvbWljCisgICAgVGlsZU1hcCBtX3RpbGVzOwogCiAg
ICAgYm9vbCBtX25lZWRzQmFja2luZzsKIApAQCAtMTgyLDcgKzE4MSw4IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPFRleHR1cmVKb2I+IG1fcGVuZGluZ1RleHR1cmVKb2JzOyAvLyBBZGRlZCwgYnV0
IG5vdCBjb21taXR0ZWQgeWV0LgogICAgIERlcXVlPFRleHR1cmVKb2I+IG1fdGV4dHVyZUpvYnM7
CiAKLSAgICBkb3VibGUgbV9jb250ZW50c1NjYWxlOworICAgIExheWVyVmlzaWJpbGl0eSogbV9m
cm9udFZpc2liaWxpdHk7CisgICAgTGF5ZXJWaXNpYmlsaXR5KiBtX2JhY2tWaXNpYmlsaXR5Owog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oCmluZGV4IDJjNmMxODQ0MDhmMDFmYTFiNDY0
MWFjYmU5NTdhNmYwZjE5NTNjODAuLjNjN2UxNjc4MzdiZjNiMGY1NjI3ZjU2MjhiYzM2OWM5ZjRl
NmI0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyVXRpbGl0aWVzLmgKQEAgLTMzLDYgKzMzLDUyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gZGV0ZXJtaW5hbnQgb2YgY29sdW1uIHZlY3RvcnMKK2lu
bGluZSBmbG9hdCBkZXQoY29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCit7
CisgICAgcmV0dXJuIGEud2lkdGgoKSAqIGIuaGVpZ2h0KCkgLSBhLmhlaWdodCgpICogYi53aWR0
aCgpOworfQorCisvLyBkb3QgcHJvZHVjdAoraW5saW5lIGZsb2F0IGRvdChjb25zdCBGbG9hdFNp
emUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICogYi53
aWR0aCgpICsgYS5oZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Cit9CisKKy8vIFJlcHJlc2VudHMgYSBs
aW5lLCBub3QgYSBmaW5pdGUgbGluZSBzZWdtZW50CitjbGFzcyBMYXllckNsaXBFZGdlIHsKK3B1
YmxpYzoKKyAgICBMYXllckNsaXBFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIGZpcnN0LCBjb25zdCBG
bG9hdFBvaW50JiBzZWNvbmQpCisgICAgICAgIDogbV9maXJzdChmaXJzdCkKKyAgICAgICAgLCBt
X3NlY29uZChzZWNvbmQpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBib29sIGlzUG9pbnRJ
bnNpZGUoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZvciBu
dW1lcmljIHJvYnVzdG5lc3MsIHdlIHByZWZlciB0byBjb25zaWRlciBhIHBvaW50IHRvIGJlIGlu
c2lkZSByYXRoZXIgdGhhbgorICAgICAgICAvLyBjbGlwIGl0IGFnYWluLgorICAgICAgICBjb25z
dCBmbG9hdCBlcHNpbG9uID0gMWUtNjsKKyAgICAgICAgcmV0dXJuIGRldChtX3NlY29uZCAtIG1f
Zmlyc3QsIHAgLSBtX2ZpcnN0KSA+IC1lcHNpbG9uOworICAgIH0KKworICAgIGlubGluZSBGbG9h
dFBvaW50IGNvbXB1dGVJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHAyKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDMg
PSBtX2ZpcnN0OworICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwNCA9IG1fc2Vjb25kOworICAg
ICAgICBmbG9hdCBkZW5vbWluYXRvciA9IGRldChwMSAtIHAyLCBwMyAtIHA0KTsKKyAgICAgICAg
RmxvYXRTaXplIGRldHMoZGV0KHRvRmxvYXRTaXplKHAxKSwgdG9GbG9hdFNpemUocDIpKSwgZGV0
KHRvRmxvYXRTaXplKHAzKSwgdG9GbG9hdFNpemUocDQpKSk7CisgICAgICAgIEZsb2F0UG9pbnQg
cmVzdWx0KAorICAgICAgICAgICAgZGV0KGRldHMsIEZsb2F0U2l6ZShwMS54KCkgLSBwMi54KCks
IHAzLngoKSAtIHA0LngoKSkpIC8gZGVub21pbmF0b3IsCisgICAgICAgICAgICBkZXQoZGV0cywg
RmxvYXRTaXplKHAxLnkoKSAtIHAyLnkoKSwgcDMueSgpIC0gcDQueSgpKSkgLyBkZW5vbWluYXRv
cik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0
UG9pbnQgbV9maXJzdDsKKyAgICBGbG9hdFBvaW50IG1fc2Vjb25kOworfTsKKwogLy8gU3BlY2lm
aWVzIGEgY2xpcCBwbGFuZSB3aXRoIG5vcm1hbCBuIGFuZCBjb250YWluaW5nIHBvaW50IHBfMAog
Ly8gYXMgcCAqIG4gKyBkID0gMCwgZCA9IC1wXzAgKiBuLiBUaGUgYXN0ZXJpc2sgaXMgZG90IHBy
b2R1Y3QuCiBjbGFzcyBMYXllckNsaXBQbGFuZSB7CkBAIC04MCw2ICsxMjYsMjYgQEAgaW5saW5l
IFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+IGludGVyc2VjdChjb25zdCBWZWN0b3I8UG9p
bnQsIGlubGluZUNhcGFjaXQKICAgICByZXR1cm4gb3V0cHV0TGlzdDsKIH0KIAorLy8gU3V0aGVy
bGFuZCAtIEhvZGdtYW4sIG1haW4gZHJpdmVyCit0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CitpbmxpbmUgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiBpbnRlcnNlY3RQ
b2x5Z29uV2l0aFJlY3QoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiYg
c3ViamVjdFBvbHlnb24sIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit7CisgICAgRmxvYXRR
dWFkIGNsaXBRdWFkKGNsaXBSZWN0KTsKKyAgICBWZWN0b3I8TGF5ZXJDbGlwRWRnZT4gZWRnZXM7
CisgICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2UoY2xpcFF1YWQucDEoKSwgY2xpcFF1YWQu
cDIoKSkpOworICAgIGVkZ2VzLmFwcGVuZChMYXllckNsaXBFZGdlKGNsaXBRdWFkLnAyKCksIGNs
aXBRdWFkLnAzKCkpKTsKKyAgICBlZGdlcy5hcHBlbmQoTGF5ZXJDbGlwRWRnZShjbGlwUXVhZC5w
MygpLCBjbGlwUXVhZC5wNCgpKSk7CisgICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2UoY2xp
cFF1YWQucDQoKSwgY2xpcFF1YWQucDEoKSkpOworCisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG91
dHB1dExpc3QgPSBzdWJqZWN0UG9seWdvbjsKKyAgICBmb3IgKFZlY3RvcjxMYXllckNsaXBFZGdl
Pjo6Y29uc3RfaXRlcmF0b3IgY2xpcEVkZ2VJdGVyYXRvciA9IGVkZ2VzLmJlZ2luKCk7IGNsaXBF
ZGdlSXRlcmF0b3IgIT0gZWRnZXMuZW5kKCk7ICsrY2xpcEVkZ2VJdGVyYXRvcikgeworICAgICAg
ICBjb25zdCBMYXllckNsaXBFZGdlJiBjbGlwRWRnZSA9ICpjbGlwRWRnZUl0ZXJhdG9yOworICAg
ICAgICBWZWN0b3I8RmxvYXRQb2ludD4gaW5wdXRMaXN0ID0gb3V0cHV0TGlzdDsKKyAgICAgICAg
b3V0cHV0TGlzdCA9IGludGVyc2VjdChpbnB1dExpc3QsIGNsaXBFZGdlKTsKKyAgICB9CisgICAg
cmV0dXJuIG91dHB1dExpc3Q7Cit9CisKIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
IGlubGluZSBGbG9hdFJlY3QgYm91bmRpbmdCb3goY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIGlu
bGluZUNhcGFjaXR5PiYgcG9pbnRzKQogewpAQCAtMTAyLDYgKzE2OCwxMTUgQEAgaW5saW5lIEZs
b2F0UmVjdCBib3VuZGluZ0JveChjb25zdCBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNp
dHk+JiBwb2ludHMpCiAgICAgcmV0dXJuIEZsb2F0UmVjdCh4bWluLCB5bWluLCB4bWF4IC0geG1p
biwgeW1heCAtIHltaW4pOwogfQogCitpbmxpbmUgRmxvYXRQb2ludDNEIGNvbXB1dGVCYXJ5Y2Vu
dHJpY0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHQx
LCBjb25zdCBGbG9hdFBvaW50JiB0MiwgY29uc3QgRmxvYXRQb2ludCYgdDMsIGJvb2wmIG9rKQor
eworICAgIC8vIENvbXB1dGUgdmVjdG9ycworICAgIEZsb2F0U2l6ZSB2MCA9IHQyIC0gdDE7Cisg
ICAgRmxvYXRTaXplIHYxID0gdDMgLSB0MTsKKyAgICBGbG9hdFNpemUgdjIgPSBwIC0gdDE7CisK
KyAgICAvLyBDb21wdXRlIGRvdCBwcm9kdWN0cworICAgIGZsb2F0IGRvdDAwID0gZG90KHYwLCB2
MCk7CisgICAgZmxvYXQgZG90MDEgPSBkb3QodjAsIHYxKTsKKyAgICBmbG9hdCBkb3QwMiA9IGRv
dCh2MCwgdjIpOworICAgIGZsb2F0IGRvdDExID0gZG90KHYxLCB2MSk7CisgICAgZmxvYXQgZG90
MTIgPSBkb3QodjEsIHYyKTsKKworICAgIC8vIENvbXB1dGUgYmFyeWNlbnRyaWMgY29vcmRpbmF0
ZXMKKyAgICBmbG9hdCBkZW5vbWluYXRvciA9IChkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBkb3Qw
MSk7CisgICAgb2sgPSAoZGVub21pbmF0b3IgIT0gMC4wKTsKKyAgICBmbG9hdCB2ID0gKGRvdDEx
ICogZG90MDIgLSBkb3QwMSAqIGRvdDEyKSAvIGRlbm9taW5hdG9yOworICAgIGZsb2F0IHcgPSAo
ZG90MDAgKiBkb3QxMiAtIGRvdDAxICogZG90MDIpIC8gZGVub21pbmF0b3I7CisKKyAgICByZXR1
cm4gRmxvYXRQb2ludDNEKDEuMGYgLSB2IC0gdywgdiwgdyk7Cit9CisKK2lubGluZSBmbG9hdCBt
YW5oYXR0YW5EaXN0YW5jZVRvVmlld3BvcnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBm
bG9hdCBkID0gMDsKKyAgICBpZiAoZmFic2YocC54KCkpID4gMSkKKyAgICAgICAgZCArPSBmYWJz
ZihwLngoKSkgLSAxOworICAgIGlmIChmYWJzZihwLnkoKSkgPiAxKQorICAgICAgICBkICs9IGZh
YnNmKHAueSgpKSAtIDE7CisgICAgcmV0dXJuIGQ7Cit9CisKK3N0cnVjdCBVbnByb2plY3Rpb25W
ZXJ0ZXggeworICAgIEZsb2F0UG9pbnQgeHk7CisgICAgZmxvYXQgdzsKKyAgICBGbG9hdFNpemUg
dXY7Cit9OworCitpbmxpbmUgYm9vbCBjb21wYXJlTWFuaGF0dGFuRGlzdGFuY2VUb1ZpZXdwb3J0
KGNvbnN0IFVucHJvamVjdGlvblZlcnRleCYgYSwgY29uc3QgVW5wcm9qZWN0aW9uVmVydGV4JiBi
KQoreworICAgIHJldHVybiBtYW5oYXR0YW5EaXN0YW5jZVRvVmlld3BvcnQoYS54eSkgPCBtYW5o
YXR0YW5EaXN0YW5jZVRvVmlld3BvcnQoYi54eSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KK2lubGluZSBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+IHVu
cHJvamVjdChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgVmVjdG9yPEZsb2F0
UG9pbnQsIGlubGluZUNhcGFjaXR5PiYgcG9pbnRzKQoreworICAgIC8vIFVzZSBwZXJzcGVjdGl2
ZSBjb3JyZWN0IHRleHR1cmluZyBsb2dpYyB0byBmaW5kIHRoZSBsb2NhdGlvbnMgb2YgdGhlc2Ug
cG9pbnRzIGluIG5vcm1hbGl6ZWQgbGF5ZXIgY29vcmRpbmF0ZXMKKyAgICBWZWN0b3I8RmxvYXRQ
b2ludCwgND4gYm91bmRzID0gbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCk7CisgICAgVmVjdG9y
PGZsb2F0LCA0PiB3cyA9IGxheWVyLT53cygpOworICAgIGlmICh3cy5pc0VtcHR5KCkpCisgICAg
ICAgIHdzLmZpbGwoMC4wZiwgYm91bmRzLnNpemUoKSk7CisgICAgY29uc3QgVmVjdG9yPEZsb2F0
UG9pbnQ+JiB0ZXhDb29yZHMgPSBsYXllci0+dGV4dHVyZUNvb3JkaW5hdGVzKCk7CisgICAgaWYg
KGJvdW5kcy5zaXplKCkgPCAzKQorICAgICAgICByZXR1cm4gVmVjdG9yPEZsb2F0UG9pbnQsIGlu
bGluZUNhcGFjaXR5PigpOworCisgICAgVmVjdG9yPFVucHJvamVjdGlvblZlcnRleCwgND4gdmVy
dGljZXMoYm91bmRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBib3VuZHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdmVydGljZXNbaV0ueHkgPSBib3VuZHNbaV07CisgICAg
ICAgIHZlcnRpY2VzW2ldLncgPSB3c1tpXTsKKyAgICAgICAgdmVydGljZXNbaV0udXYgPSB0b0Zs
b2F0U2l6ZSh0ZXhDb29yZHNbaV0pOworICAgIH0KKyAgICAvLyBFYWNoIHBvaW50IG5lZWRzIHRv
IGJlIHF1YWxpZmllZCBhcyBseWluZyBpbiBvbmUgb2YgdGhlIHRyaWFuZ2xlcyBmb3JtZWQgYnkg
dGhlICJib3VuZHMiIHRyaWFuZ2xlIHN0cmlwCisgICAgLy8gVHJ5IHRvIHVzZSBvbmx5IHBvaW50
cyB0aGF0IGFyZSBvbnNjcmVlbiwgZm9yIG51bWVyaWNhbCBzdGFiaWxpdHkKKyAgICBzdGQ6OnNv
cnQodmVydGljZXMuYmVnaW4oKSwgdmVydGljZXMuZW5kKCksIGNvbXBhcmVNYW5oYXR0YW5EaXN0
YW5jZVRvVmlld3BvcnQpOworCisgICAgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5
PiByZXN1bHQ7CisKKyAgICBzaXplX3QgaTAgPSAwOworCisgICAgY29uc3QgRmxvYXRQb2ludCYg
cDAgPSB2ZXJ0aWNlc1tpMF0ueHk7CisgICAgZmxvYXQgdzAgPSB2ZXJ0aWNlc1tpMF0udzsKKyAg
ICBGbG9hdFNpemUgdXYwID0gdmVydGljZXNbaTBdLnV2OworCisgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBwb2ludHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cCA9IHBvaW50c1tqXTsKKyAgICAgICAgRmxvYXRQb2ludCB0ZXhDb29yZDsKKyAgICAgICAgZm9y
IChzaXplX3QgZGkgPSAxOyBkaSArIDEgPCB2ZXJ0aWNlcy5zaXplKCk7ICsrZGkpIHsKKyAgICAg
ICAgICAgIHNpemVfdCBpID0gKGkwICsgZGkpICUgdmVydGljZXMuc2l6ZSgpOworICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcDEgPSB2ZXJ0aWNlc1tpXS54eTsKKyAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHAyID0gdmVydGljZXNbaSArIDFdLnh5OworICAgICAgICAgICAgZmxv
YXQgdzEgPSB2ZXJ0aWNlc1tpXS53OworICAgICAgICAgICAgZmxvYXQgdzIgPSB2ZXJ0aWNlc1tp
ICsgMV0udzsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSB1djEgPSB2ZXJ0aWNlc1tpXS51djsKKyAg
ICAgICAgICAgIEZsb2F0U2l6ZSB1djIgPSB2ZXJ0aWNlc1tpICsgMV0udXY7CisKKyAgICAgICAg
ICAgIGJvb2wgb2s7CisgICAgICAgICAgICBGbG9hdFBvaW50M0QgYiA9IGNvbXB1dGVCYXJ5Y2Vu
dHJpY0Nvb3JkaW5hdGVzKHAsIHAwLCBwMSwgcDIsIG9rKTsKKyAgICAgICAgICAgIGlmICghb2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICh3MCAmJiB3MSAm
JiB3MikgeworICAgICAgICAgICAgICAgIC8vIFBlcnNwZWN0aXZlIGNvcnJlY3QgaW50ZXJwb2xh
dGlvbgorICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBidyhiLngoKSAvIHcwLCBiLnkoKSAv
IHcxLCBiLnooKSAvIHcyKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBkZW5vbWluYXRvciA9IGJ3
LngoKSArIGJ3LnkoKSArIGJ3LnooKTsKKyAgICAgICAgICAgICAgICB0ZXhDb29yZCA9IEZsb2F0
UG9pbnQ6Onplcm8oKSArIChidy54KCkgKiB1djAgKyBidy55KCkgKiB1djEgKyBidy56KCkgKiB1
djIpOworICAgICAgICAgICAgICAgIHRleENvb3JkLnNldFgodGV4Q29vcmQueCgpIC8gZGVub21p
bmF0b3IpOworICAgICAgICAgICAgICAgIHRleENvb3JkLnNldFkodGV4Q29vcmQueSgpIC8gZGVu
b21pbmF0b3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBMaW5l
YXIgaW50ZXJwb2xhdGlvbgorICAgICAgICAgICAgICAgIHRleENvb3JkID0gRmxvYXRQb2ludDo6
emVybygpICsgKGIueCgpICogdXYwICsgYi55KCkgKiB1djEgKyBiLnooKSAqIHV2Mik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQu
YXBwZW5kKHRleENvb3JkKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogaW5saW5l
IEZsb2F0UG9pbnQzRCBtdWx0VmVjTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGNvbnN0IEZsb2F0UG9pbnQzRCYgcCwgZmxvYXQmIHcpCiB7CiAgICAgRmxvYXRQb2lu
dDNEIHJlc3VsdCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
T3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXkuY3Bw
CmluZGV4IDE5ZTFhMzE3NjdmNzA5ZThkMzY4ZDJlZjhjYzNjOTFkYjMyMDdiOTIuLmIzZmY3NGI2
ZDhhODVhYWJlZjkwYzVhMjcwNTk4OWM0YWE4Yjg0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNwcApAQCAtNTAxLDcgKzUwMSw3IEBAIHZvaWQgV2ViT3Zl
cmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQo
TGF5ZXJDb21wb3NpCiAgICAgbV90ZXh0dXJlLT51cGRhdGVDb250ZW50cyh0ZXh0dXJlQ29udGVu
dHMpOwogfQogCi12b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50Ojpk
cmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGRvdWJsZSBzY2FsZSwg
Y29uc3QgR0xFUzJQcm9ncmFtJikKK3ZvaWQgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29u
c3QgR0xFUzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIC8qY2xpcFJl
Y3QqLykKIHsKICAgICBpZiAoIW1fdGV4dHVyZSB8fCAhbV90ZXh0dXJlLT5idWZmZXIoKSkKICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJPdmVybGF5X3AuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheV9w
LmgKaW5kZXggNmY1NjgwOTJhNTY3ZWZiODNlMmE4MjNmYjdiM2Y5MTA2OTc5OTMyZC4uMzk3Yjcx
MDI4NDIxOGE4MWFkYmU5NTM4ZjBiOTI2MmRhMDdmMmI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYk92ZXJsYXlfcC5oCkBAIC0xOTcsNyArMTk3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBsYXllckNvbXBvc2l0aW5nVGhyZWFkRGVzdHJveWVkKFdlYkNvcmU6
OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmls
aXR5Q2hhbmdlZChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxl
KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZXNJZk5lZWRlZChXZWJDb3JlOjpMYXll
ckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhXZWJD
b3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNjYWxlLCBjb25zdCBQbGF0Zm9y
bTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVy
ZXMoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IFBsYXRmb3JtOjpHcmFw
aGljczo6R0xFUzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZXMoV2ViQ29yZTo6
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogCiBwcml2YXRlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204690</attachid>
            <date>2013-06-14 03:32:15 -0700</date>
            <delta_ts>2013-06-14 03:34:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117211-20130614123031.patch</filename>
            <type>text/plain</type>
            <size>37301</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FmMGJmZGM2MmI2ZjJh
NTJjOWFlOTg0NTczMDJmMDQzYmM0ZTI0Mi4uYmJjMmQzM2FlYTJiZGJiOGZhNmFhZjA0YTc2YzQ0
NGQ3ZmM1YzY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEzLTA1LTMxICBBcnZp
ZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gQWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBpbWFnZSBwbGFu
ZSBhcmUgaW5jb3JyZWN0bHkgdHJhbnNmb3JtZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzA2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFBSIDI3MzU1MAorCisgICAgICAgIFRoZSBCbGFja0JlcnJ5
IHBvcnQgdXNlZCB0byBtYXRoZW1hdGljYWxseSBwcm9qZWN0IGVhY2ggY29ybmVyIG9mIGVhY2gK
KyAgICAgICAgbGF5ZXIgYm91bmRzIHJlY3RhbmdsZSwgd2hpY2ggZ2l2ZXMgdGhlIHdyb25nIHJl
c3VsdHMgd2hlbiB0aGUgbGF5ZXIKKyAgICAgICAgaW50ZXJzZWN0cyB0aGUgaW1hZ2UgcGxhbmUu
CisKKyAgICAgICAgRm9yIGRpc3BsYXkgbGlzdHMsIHdlIHN0aWxsIGdvdCB0aGUgY29ycmVjdCBh
cHBlYXJhbmNlIG9mIHRoZSBsYXllcgorICAgICAgICBjb250ZW50cywgc2luY2UgdGhlIGRpc3Bs
YXkgbGlzdCByZXN1bHRzIGluIGdlb21ldHJ5IHRoYXQncyB0cmFuc2Zvcm1lZAorICAgICAgICBp
biB0aGUgdmVydGV4IHNoYWRlciwgb24gdGhlIEdQVS4KKworICAgICAgICBIb3dldmVyLCB0aGUg
dHJhbnNmb3JtZWQgYm91bmRzIGFyZSB1c2VkIGZvciBkcmF3aW5nIHRoZSBkZWJ1ZyBib3JkZXIs
CisgICAgICAgIHBlcmZvcm1pbmcgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMgb24gdGhlIENQVSBh
bmQgZHJhd2luZyBvZiBXZWJHTCwKKyAgICAgICAgbWFza3MvcmVmbGVjdGlvbnMgYW5kIGZpbHRl
cnMuIFVzaW5nIHRoZSBtYXRoZW1hdGljYWwgcHJvamVjdGlvbiBvZgorICAgICAgICBwb2ludHMg
dGhhdCBsaWUgYmVoaW5kIHRoZSBpbWFnZSBwbGFuZSBnaXZlcyB0aGUgd3JvbmcgcmVzdWx0cy4K
KworICAgICAgICBUaGUgbW9zdCBpbXBvcnRhbnQgY29uc2VxdWVuY2Ugb2YgdGhpcyBidWcgd2Fz
IHRoYXQgdGhlIHdyb25nIGFyZWEgb2YKKyAgICAgICAgdGhlIGxheWVyIHdvdWxkIGJlIGNvbnNp
ZGVyZWQgdmlzaWJsZSwgc28gYSB0aWxlZCBsYXllciB3b3VsZCBub3QKKyAgICAgICAgcG9wdWxh
dGUgdGhlIHJpZ2h0IHRpbGVzIChvciBhbnkgdGlsZXMgYXQgYWxsKS4KKworICAgICAgICBGaXhl
ZCBieSBpbXBsZW1lbnRpbmcgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiB0aGUgcmVjaXBl
IGluCisgICAgICAgIHNlY3Rpb24gNi4yIG9mIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdHJh
bnNmb3Jtcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG1hbnVhbGx5IHRlc3RhYmxlIGJ5IGVu
YWJsaW5nIGRlYnVnIGJvcmRlciBvbgorICAgICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi1VUy9kZW1vcy9kZXRhaWwvdGhlLWJveC9sYXVuY2guCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENs
aWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJl
YWRDbGllbnQ6OmRyYXdUZXh0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6c2V0RHJhd1RyYW5zZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OnRleHR1cmVDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5n
VGhyZWFkOjpkcmF3VGV4dHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oOgorICAgICAgICAoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkOjp0cmFu
c2Zvcm1lZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFk
Ojp3cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpjZW50ZXJX
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVu
ZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJGaWx0ZXJSZW5kZXJlcjo6YXBwbHlB
Y3Rpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVu
ZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZUxheWVyVyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlcjo6ZHJhd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVyc1JlY3Vyc2l2
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVy
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKExheWVyUmVuZGVyZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlclN1cmZhY2U6OmJvdW5kaW5nQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJTdXJmYWNlOjp0cmFuc2Zvcm1lZEJvdW5k
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVy
U3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlclN1cmZhY2U6OnNldERy
YXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlclN1cmZhY2U6OnNl
dFJlcGxpY2FEcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKExheWVyUmVuZGVyZXJTdXJmYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVXRpbGl0aWVzLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllckNsaXBQbGFuZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNsaXBQbGFuZTo6TGF5ZXJDbGlwUGxhbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDbGlwUGxhbmU6OmlzUG9pbnRJbnNpZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDbGlwUGxhbmU6OmNvbXB1dGVJbnRlcnNlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kaW5nQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6Om11bHRWZWNNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6dG9WZWN0b3Ip
OgorCiAyMDEzLTA2LTExICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gVGVzdCBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVu
dC1wYXJhZ3JhcGhzLmh0bWwgdGltZXMgb3V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAKaW5kZXggYTcwNzkxY2Q1
NmIyZDUwNGViMTAxMmE3NDdjMTcxMWU3MGYyMjcwNS4uOGQyZjU4OTNlNmRiMTY3MzliZTA2M2Jj
MWFlNWMwZDg4MzUyOGExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1h
Z2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcApAQCAtNDcsOCArNDcsNiBAQCB2b2lk
IEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5l
ZWRlZChMYXllckNvbXBvc2l0aQogCiB2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3Vi
bGUgLypzY2FsZSovLCBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCiB7Ci0gICAgc3RhdGlj
IGZsb2F0IHVwc2lkZURvd25bNCAqIDJdID0geyAwLCAxLCAgMSwgMSwgIDEsIDAsICAwLCAwIH07
Ci0KICAgICBpZiAoIW1fdGV4dHVyZUFjY2Vzc29yIHx8ICFtX3RleHR1cmVBY2Nlc3Nvci0+dGV4
dHVyZUlEKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTYsMTAgKzU0LDEwIEBAIHZvaWQgRUdM
SW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCoKICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNf
QUxQSEEpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLm1fcHJvZ3JhbSk7CiAgICAgZ2xVbmlm
b3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgbGF5ZXItPmRyYXdPcGFjaXR5KCkpOwot
ICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwg
R0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkpOwotICAg
IGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnRleENvb3JkTG9jYXRpb24oKSwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCB1cHNpZGVEb3duKTsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50
ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwg
bGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuZGF0YSgpKTsKKyAgICBnbFZlcnRleEF0dHJpYlBv
aW50ZXIocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwg
MCwgbGF5ZXItPnRleHR1cmVDb29yZGluYXRlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpVcHNp
ZGVEb3duKS5kYXRhKCkpOwogICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0
dXJlQWNjZXNzb3ItPnRleHR1cmVJRCgpKTsKLSAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVf
RkFOLCAwLCA0KTsKKyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCBsYXllci0+
dHJhbnNmb3JtZWRCb3VuZHMoKS5zaXplKCkpOwogfQogCiB2b2lkIEVHTEltYWdlTGF5ZXJDb21w
b3NpdGluZ1RocmVhZENsaWVudDo6ZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcAppbmRleCA1NWFl
ZWZhYjc2N2MzMWIyOTMyNDdhMzVjNmZjNzNmZWVkMjY1ZTljLi44YjMzOWQ5NjAwYjc2M2ZmYmZm
ODM4MzU1ZDM0YTQ0NmQ5YWVhYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZC5jcHAKQEAgLTQwLDEyICs0MCwxNCBAQAogI2luY2x1ZGUgIkxheWVyTWVzc2FnZS5o
IgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXIuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2xp
ZW50LmgiCisjaW5jbHVkZSAiTGF5ZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJMYXllcldlYktp
dFRocmVhZC5oIgogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgog
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaCIKICNlbmRpZgogI2luY2x1
ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJU
ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZC5oIgogCiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBs
YXRmb3JtR0xFUzJDb250ZXh0U3RhdGUuaD4KQEAgLTc2LDYgKzc4LDcgQEAgTGF5ZXJDb21wb3Np
dGluZ1RocmVhZDo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZChMYXllclR5cGUgdHlwZSwgTGF5ZXJD
b21wb3NpdGluZ1QKICAgICA6IExheWVyRGF0YSh0eXBlKQogICAgICwgbV9sYXllclJlbmRlcmVy
KDApCiAgICAgLCBtX3N1cGVybGF5ZXIoMCkKKyAgICAsIG1fY2VudGVyVygwKQogICAgICwgbV9w
bHVnaW5CdWZmZXIoMCkKICAgICAsIG1fZHJhd09wYWNpdHkoMCkKICAgICAsIG1fdmlzaWJsZShm
YWxzZSkKQEAgLTEyNywxNyArMTMwLDkyIEBAIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6
ZGVsZXRlVGV4dHVyZXMoKQogICAgICAgICBtX2NsaWVudC0+ZGVsZXRlVGV4dHVyZXModGhpcyk7
CiB9CiAKLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6c2V0RHJhd1RyYW5zZm9ybShkb3Vi
bGUgc2NhbGUsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit2b2lkIExheWVy
Q29tcG9zaXRpbmdUaHJlYWQ6OnNldERyYXdUcmFuc2Zvcm0oZG91YmxlIHNjYWxlLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cHJvamVjdGlvbk1hdHJpeCkKIHsKLSAgICBtX2RyYXdUcmFuc2Zvcm0gPSBtYXRyaXg7CisgICAg
bV9kcmF3VHJhbnNmb3JtID0gcHJvamVjdGlvbk1hdHJpeCAqIG1hdHJpeDsKIAogICAgIEZsb2F0
UmVjdCBib3VuZHNSZWN0KC1vcmlnaW4oKSwgYm91bmRzKCkpOwogCiAgICAgaWYgKHNpemVJc1Nj
YWxlSW52YXJpYW50KCkpCiAgICAgICAgIGJvdW5kc1JlY3Quc2NhbGUoMSAvIHNjYWxlKTsKIAot
ICAgIG1fdHJhbnNmb3JtZWRCb3VuZHMgPSBtYXRyaXgubWFwUXVhZChib3VuZHNSZWN0KTsKLSAg
ICBtX2JvdW5kaW5nQm94ID0gbV90cmFuc2Zvcm1lZEJvdW5kcy5ib3VuZGluZ0JveCgpOworICAg
IG1fY2VudGVyVyA9IDA7CisgICAgbV90cmFuc2Zvcm1lZEJvdW5kcy5jbGVhcigpOworICAgIG1f
d3MuY2xlYXIoKTsKKyAgICBtX3RleHR1cmVDb29yZGluYXRlcy5jbGVhcigpOworICAgIGlmICht
YXRyaXguaGFzUGVyc3BlY3RpdmUoKSAmJiAhbV9sYXllclJlbmRlcmVyU3VyZmFjZSkgeworICAg
ICAgICAvLyBQZXJmb3JtIHByb2Nlc3NpbmcgYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3Jn
L1RSL2NzczMtdHJhbnNmb3JtcyA2LjIKKyAgICAgICAgLy8gSWYgdyA8IDAgZm9yIGFsbCBmb3Vy
IGNvcm5lcnMgb2YgdGhlIHRyYW5zZm9ybWVkIGJveCwgdGhlIGJveCBpcyBub3QgcmVuZGVyZWQu
CisgICAgICAgIC8vIElmIHcgPCAwIGZvciBvbmUgdG8gdGhyZWUgY29ybmVycyBvZiB0aGUgdHJh
bnNmb3JtZWQgYm94LCB0aGUgYm94CisgICAgICAgIC8vIG11c3QgYmUgcmVwbGFjZWQgYnkgYSBw
b2x5Z29uIHRoYXQgaGFzIGFueSBwYXJ0cyB3aXRoIHcgPCAwIGN1dCBvdXQuCisgICAgICAgIC8v
IElmIHcgPSAwLCAoeOKAsiwgeeKAsiwgeuKAsikgPSAoeCDii4UgbiwgeSDii4UgbiwgeiDii4Ug
bikKKyAgICAgICAgLy8gV2UgaW1wbGVtZW50IHRoaXMgYnkgaW50ZXJzZWN0aW5nIHdpdGggdGhl
IGltYWdlIHBsYW5lLCBpLmUuIHRoZSBsYXN0IHJvdyBvZiB0aGUgY29sdW1uLW1ham9yIG1hdHJp
eC4KKyAgICAgICAgLy8gVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB3IGNsb3NlIHRvIDAsIHdlIHVz
ZSB3ID0gZXBzaWxvbiBhcyB0aGUgbmVhciBwbGFuZSBieSBzdWJ0cmFjdGluZyBlcHNpbG9uIGZy
b20gbWF0cml4Lm00NCgpLgorICAgICAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMWUtMzsKKyAg
ICAgICAgVmVjdG9yPEZsb2F0UG9pbnQzRCwgND4gcXVhZCA9IHRvVmVjdG9yPEZsb2F0UG9pbnQz
RCwgND4oYm91bmRzUmVjdCk7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50M0QsIDQ+IHBvbHln
b24gPSBpbnRlcnNlY3QocXVhZCwgTGF5ZXJDbGlwUGxhbmUoRmxvYXRQb2ludDNEKG1hdHJpeC5t
MTQoKSwgbWF0cml4Lm0yNCgpLCBtYXRyaXgubTM0KCkpLCBtYXRyaXgubTQ0KCkgLSBlcHNpbG9u
KSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY2xpcHBlZCB0ZXh0dXJlIGNvb3JkaW5hdGVz
LgorICAgICAgICBpZiAocG9seWdvbiAhPSBxdWFkKSB7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBvbHlnb24uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBGbG9h
dFBvaW50M0QmIHAgPSBwb2x5Z29uW2ldOworICAgICAgICAgICAgICAgIG1fdGV4dHVyZUNvb3Jk
aW5hdGVzLmFwcGVuZChGbG9hdFBvaW50KHAueCgpIC8gYm91bmRzUmVjdC53aWR0aCgpICsgMC41
ZiwgcC55KCkgLyBib3VuZHNSZWN0LmhlaWdodCgpICsgMC41ZikpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdyA+IDAsICh44oCyLCB54oCyLCB64oCyKSA9ICh4
L3csIHkvdywgei93KQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvbHlnb24uc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGZsb2F0IHc7CisgICAgICAgICAgICBGbG9hdFBvaW50
M0QgcCA9IG11bHRWZWNNYXRyaXgobWF0cml4LCBwb2x5Z29uW2ldLCB3KTsKKyAgICAgICAgICAg
IGlmICh3ICE9IDEpIHsKKyAgICAgICAgICAgICAgICBwLnNldFgocC54KCkgLyB3KTsKKyAgICAg
ICAgICAgICAgICBwLnNldFkocC55KCkgLyB3KTsKKyAgICAgICAgICAgICAgICBwLnNldFoocC56
KCkgLyB3KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRmxvYXRQb2ludDNEIHEgPSBw
cm9qZWN0aW9uTWF0cml4Lm1hcFBvaW50KHApOworICAgICAgICAgICAgbV90cmFuc2Zvcm1lZEJv
dW5kcy5hcHBlbmQoRmxvYXRQb2ludChxLngoKSwgcS55KCkpKTsKKyAgICAgICAgICAgIG1fd3Mu
YXBwZW5kKHcpOworICAgICAgICB9CisKKyAgICAgICAgbV9jZW50ZXJXID0gbWF0cml4Lm00NCgp
OworICAgIH0gZWxzZQorICAgICAgICBtX3RyYW5zZm9ybWVkQm91bmRzID0gdG9WZWN0b3I8Rmxv
YXRQb2ludCwgND4obV9kcmF3VHJhbnNmb3JtLm1hcFF1YWQoYm91bmRzUmVjdCkpOworCisgICAg
bV9ib3VuZGluZ0JveCA9IFdlYkNvcmU6OmJvdW5kaW5nQm94KG1fdHJhbnNmb3JtZWRCb3VuZHMp
OworfQorCitjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OnRleHR1cmVDb29yZGluYXRlcyhUZXh0dXJlQ29vcmRpbmF0ZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdAoreworICAgIGlmIChtX3RleHR1cmVDb29yZGluYXRlcy5zaXplKCkpIHsKKyAg
ICAgICAgaWYgKG9yaWVudGF0aW9uID09IFVwc2lkZURvd24pIHsKKyAgICAgICAgICAgIHN0YXRp
YyBWZWN0b3I8RmxvYXRQb2ludD4gdXBzaWRlRG93bkNvb3JkaW5hdGVzOworICAgICAgICAgICAg
dXBzaWRlRG93bkNvb3JkaW5hdGVzID0gbV90ZXh0dXJlQ29vcmRpbmF0ZXM7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVwc2lkZURvd25Db29yZGluYXRlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICB1cHNpZGVEb3duQ29vcmRpbmF0ZXNbaV0uc2V0WSgxIC0gdXBz
aWRlRG93bkNvb3JkaW5hdGVzW2ldLnkoKSk7CisgICAgICAgICAgICByZXR1cm4gdXBzaWRlRG93
bkNvb3JkaW5hdGVzOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fdGV4dHVyZUNvb3Jk
aW5hdGVzOworICAgIH0KKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBVcHNpZGVEb3duKSB7Cisg
ICAgICAgIHN0YXRpYyBGbG9hdFBvaW50IGRhdGFbNF0gPSB7IEZsb2F0UG9pbnQoMCwgMSksICBG
bG9hdFBvaW50KDEsIDEpLCAgRmxvYXRQb2ludCgxLCAwKSwgIEZsb2F0UG9pbnQoMCwgMCkgfTsK
KyAgICAgICAgc3RhdGljIFZlY3RvcjxGbG9hdFBvaW50PiogdXBzaWRlRG93bkNvb3JkaW5hdGVz
ID0gMDsKKyAgICAgICAgaWYgKCF1cHNpZGVEb3duQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgICAg
IHVwc2lkZURvd25Db29yZGluYXRlcyA9IG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKTsKKyAgICAg
ICAgICAgIHVwc2lkZURvd25Db29yZGluYXRlcy0+YXBwZW5kKGRhdGEsIDQpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiAqdXBzaWRlRG93bkNvb3JkaW5hdGVzOworICAgIH0KKworICAgIHN0
YXRpYyBGbG9hdFBvaW50IGRhdGFbNF0gPSB7IEZsb2F0UG9pbnQoMCwgMCksICBGbG9hdFBvaW50
KDEsIDApLCAgRmxvYXRQb2ludCgxLCAxKSwgIEZsb2F0UG9pbnQoMCwgMSkgfTsKKyAgICBzdGF0
aWMgVmVjdG9yPEZsb2F0UG9pbnQ+KiBjb29yZGluYXRlcyA9IDA7CisgICAgaWYgKCFjb29yZGlu
YXRlcykgeworICAgICAgICBjb29yZGluYXRlcyA9IG5ldyBWZWN0b3I8RmxvYXRQb2ludD4oKTsK
KyAgICAgICAgY29vcmRpbmF0ZXMtPmFwcGVuZChkYXRhLCA0KTsKKyAgICB9CisgICAgcmV0dXJu
ICpjb29yZGluYXRlczsKIH0KIAogRmxvYXRRdWFkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnRy
YW5zZm9ybWVkSG9sZVB1bmNoUmVjdCgpIGNvbnN0CkBAIC0xNDksOCArMjI3LDYgQEAgRmxvYXRR
dWFkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5zZm9ybWVkSG9sZVB1bmNoUmVjdCgpIGNv
bnN0CiAKIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKGRvdWJsZSBz
Y2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtLCBjb25zdCBGbG9hdFJlY3QmIHZpc2li
bGVSZWN0KQogewotICAgIHN0YXRpYyBmbG9hdCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAg
MSwgMCwgIDEsIDEsICAwLCAxIH07Ci0KICAgICBpZiAobV9wbHVnaW5WaWV3KSB7CiAgICAgICAg
IGlmIChtX2lzVmlzaWJsZSkgewogICAgICAgICAgICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIEZs
YXNoLCB2aWRlbywgb3Igb3RoZXIgcGx1Z2luIGNvbnRlbnRzLgpAQCAtMTY5LDkgKzI0NSw5IEBA
IHZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKGRvdWJsZSBzY2FsZSwg
Y29uc3QgR0xFUzJQcm9ncmFtJiBwcm9nCiAgICAgICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7
CiAgICAgICAgICAgICBnbEJsZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEp
OwogICAgICAgICAgICAgZ2xVbmlmb3JtMWYocHJvZ3JhbS5vcGFjaXR5TG9jYXRpb24oKSwgZHJh
d09wYWNpdHkoKSk7Ci0gICAgICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5w
b3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJm1fdHJhbnNmb3Jt
ZWRCb3VuZHMpOwotICAgICAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0udGV4
Q29vcmRMb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRleGNvb3Jkcyk7Ci0g
ICAgICAgICAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKKyAgICAgICAg
ICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwg
R0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCBtX3RyYW5zZm9ybWVkQm91bmRzLmRhdGEoKSk7CisgICAg
ICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS50ZXhDb29yZExvY2F0aW9uKCks
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4dHVyZUNvb3JkaW5hdGVzKCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIG1fdHJhbnNmb3Jt
ZWRCb3VuZHMuc2l6ZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTg1LDggKzI2MSw4IEBAIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVz
KGRvdWJsZSBzY2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9nCiAgICAgICAgICAgICAgICAg
Ly8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMgWy0xLCAxXSB0byB0aGUgJ3Zpc2libGVS
ZWN0Jy4KICAgICAgICAgICAgICAgICBmbG9hdCB2cncyID0gdmlzaWJsZVJlY3Qud2lkdGgoKSAv
IDIuMDsKICAgICAgICAgICAgICAgICBmbG9hdCB2cmgyID0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkg
LyAyLjA7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwKG1fdHJhbnNmb3JtZWRCb3VuZHMu
cDEoKS54KCkgKiB2cncyICsgdnJ3MiArIHZpc2libGVSZWN0LngoKSwKLSAgICAgICAgICAgICAg
ICAgICAgLW1fdHJhbnNmb3JtZWRCb3VuZHMucDEoKS55KCkgKiB2cmgyICsgdnJoMiArIHZpc2li
bGVSZWN0LnkoKSk7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwKG1fdHJhbnNmb3JtZWRC
b3VuZHNbMF0ueCgpICogdnJ3MiArIHZydzIgKyB2aXNpYmxlUmVjdC54KCksCisgICAgICAgICAg
ICAgICAgICAgIC1tX3RyYW5zZm9ybWVkQm91bmRzWzBdLnkoKSAqIHZyaDIgKyB2cmgyICsgdmlz
aWJsZVJlY3QueSgpKTsKICAgICAgICAgICAgICAgICBwYWludFJlY3QgPSBJbnRSZWN0KHJvdW5k
ZWRJbnRQb2ludChwKSwgbV9ib3VuZHMpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgcGFpbnRSZWN0ID0gbV9sYXllclJlbmRlcmVyLT50b1dpbmRvd0Nvb3JkaW5hdGVzKG1f
Ym91bmRpbmdCb3gpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaAppbmRl
eCAwM2U0YTE4NWI5ZDRhZTExNjEyMzI2NGMzZTQyYTMwOWE3MjUxZWIwLi5iZGE4N2ZjMWI4ZGQw
MWJkN2MzOTFmODVjZDQ1MDFhNWY5ZjY4NDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9z
aXRpbmdUaHJlYWQuaApAQCAtMTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZHJh
dyB0cmFuc2Zvcm0gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGxvY2F0ZWQgYXQgdGhlIGNlbnRl
ciBvZiB0aGUgbGF5ZXIuCiAgICAgRmxvYXRQb2ludCBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBG
bG9hdFBvaW50KG1fYm91bmRzLndpZHRoKCkgLyAyLjBmLCBtX2JvdW5kcy5oZWlnaHQoKSAvIDIu
MGYpOyB9CiAKLSAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oZG91YmxlIHNjYWxlLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShkb3VibGUg
c2NhbGUsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4KTsKICAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1Ry
YW5zZm9ybTsgfQogCiAgICAgdm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1f
ZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CkBAIC0xODIsOCArMTgyLDE4IEBAIHB1YmxpYzoKIAog
ICAgIC8vIFRoZXNlIHVzZSBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcwogICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3g7IH0KLSAgICBj
b25zdCBGbG9hdFF1YWQmIHRyYW5zZm9ybWVkQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2Zvcm1lZEJvdW5kczsgfQorICAgIC8vIFRoZSBib3VuZHMgYXJlIHByb2Nlc3NlZCBhY2NvcmRp
bmcgdG8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10cmFuc2Zvcm1zIHBhcmFncmFwaCA2LjIs
IHdoaWNoIGNhbiByZXN1bHQgaW4gYSBwb2x5Z29uIHdpdGggbW9yZSB0aGFuIDQgc2lkZXMuCisg
ICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIDQ+JiB0cmFuc2Zvcm1lZEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNmb3JtZWRCb3VuZHM7IH0KKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQs
IDQ+JiB3cygpIGNvbnN0IHsgcmV0dXJuIG1fd3M7IH0KKworICAgIGVudW0gVGV4dHVyZUNvb3Jk
aW5hdGVPcmllbnRhdGlvbiB7CisgICAgICAgIFJpZ2h0U2lkZVVwID0gMCwKKyAgICAgICAgVXBz
aWRlRG93bgorICAgIH07CisKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHRleHR1cmVD
b29yZGluYXRlcyhUZXh0dXJlQ29vcmRpbmF0ZU9yaWVudGF0aW9uID0gUmlnaHRTaWRlVXApIGNv
bnN0OwogICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZEhvbGVQdW5jaFJlY3QoKSBjb25zdDsKKyAg
ICBmbG9hdCBjZW50ZXJXKCkgY29uc3QgeyByZXR1cm4gbV9jZW50ZXJXOyB9CiAKICAgICB2b2lk
IGRlbGV0ZVRleHR1cmVzKCk7CiAKQEAgLTI0OSw4ICsyNTksMTAgQEAgcHJpdmF0ZToKICAgICBM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiBtX3N1cGVybGF5ZXI7CiAKICAgICAvLyBWZXJ0ZXggZGF0
YSBmb3IgdGhlIGJvdW5kcyBvZiB0aGlzIGxheWVyCi0gICAgRmxvYXRRdWFkIG1fdHJhbnNmb3Jt
ZWRCb3VuZHM7Ci0gICAgLy8gVGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgdHJhbnNmb3Jt
ZWQgbGF5ZXIKKyAgICBWZWN0b3I8RmxvYXRQb2ludCwgND4gbV90cmFuc2Zvcm1lZEJvdW5kczsK
KyAgICBWZWN0b3I8ZmxvYXQsIDQ+IG1fd3M7CisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1fdGV4
dHVyZUNvb3JkaW5hdGVzOyAvLyBPbmx5IHVzZWQgd2hlbiBhIDNEIGxheWVyIGlzIGNsaXBwZWQg
YWdhaW5zdCB6ID0gMAorICAgIGZsb2F0IG1fY2VudGVyVzsKICAgICBGbG9hdFJlY3QgbV9ib3Vu
ZGluZ0JveDsKIAogICAgIE93blB0cjxMYXllclJlbmRlcmVyU3VyZmFjZT4gbV9sYXllclJlbmRl
cmVyU3VyZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyRmlsdGVyUmVuZGVyZXIuY3BwCmluZGV4IDAx
ZGVhNmUyZjAzMmU3ZDEwY2U4MTRkOTVkYzllNmZhNTMzYjAzZjguLmU2NjYyMTgzYjBkNzI1Mzdh
MGM0ODIyMjc1YzQ0MWQxZjc1OWVmNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJGaWx0ZXJSZW5kZXJlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckZpbHRlclJlbmRl
cmVyLmNwcApAQCAtNjgyLDggKzY4Miw2IEBAIFZlY3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5k
ZXJlckFjdGlvbj4gPiBMYXllckZpbHRlclJlbmRlcmVyOjphY3Rpb25zRm9yT3BlcmF0CiAgICAg
cmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGZsb2F0IHRleGNvb3Jkc1s0ICogMl0gPSB7IDAsIDAs
ICAxLCAwLCAgMSwgMSwgIDAsIDEgfTsKLQogdm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjphcHBs
eUFjdGlvbnModW5zaWduZWQmIGZibywgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJGaWx0ZXJSZW5kZXJlckFjdGlvbj4gPiBhY3Rpb25zKQogewogICAg
IGdsQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKQEAgLTcwOSw5ICs3MDcsMTYg
QEAgdm9pZCBMYXllckZpbHRlclJlbmRlcmVyOjphcHBseUFjdGlvbnModW5zaWduZWQmIGZibywg
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGEKIAogICAgIExheWVyUmVuZGVyZXJTdXJmYWNlKiBz
dXJmYWNlID0gbGF5ZXItPmxheWVyUmVuZGVyZXJTdXJmYWNlKCk7CiAKLSAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAs
ICZsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKSk7CisgICAgLy8gRnJvbSB0aGUgY29kZSBpbiBM
YXllclJlbmRlcmVyLCB3ZSBzZWUgdGhhdCB0aGUgbGF5ZXIgd2lsbCBoYXZlIGEgdHJpdmlhbCB0
cmFuc2Zvcm0gdGhhdCB3aWxsCisgICAgLy8gcmVzdWx0IGluIHRoZSB0cmFuc2Zvcm1lZCBib3Vu
ZHMgYmVpbmcgYSBwb2x5Z29uIHdpdGggNCB2ZXJ0aWNlcywgaS5lLiBhIHF1YWQuCisgICAgLy8g
VGhlIExheWVyRmlsdGVyUmVuZGVyZXIgZGVwZW5kcyBvbiB0aGUgbGF5ZXIgYmVpbmcgYSBxdWFk
LCBzbyBhc3NlcnQgdG8gbWFrZSBzdXJlLgorICAgIEFTU0VSVChsYXllci0+dHJhbnNmb3JtZWRC
b3VuZHMoKS5zaXplKCkgPT0gNCk7CisgICAgaWYgKGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygp
LnNpemUoKSAhPSA0KQorICAgICAgICByZXR1cm47CisKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50
ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIGxheWVyLT50
cmFuc2Zvcm1lZEJvdW5kcygpLmRhdGEoKSk7CiAgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShtX3Bvc2l0aW9uTG9jYXRpb24pOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3RleENv
b3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRzKTsKKyAgICBn
bFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xf
RkFMU0UsIDAsIGxheWVyLT50ZXh0dXJlQ29vcmRpbmF0ZXMoKS5kYXRhKCkpOwogICAgIGdsRW5h
YmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXhDb29yZExvY2F0aW9uKTsKIAogICAgIG1fdGV4dHVy
ZS0+cHJvdGVjdChzdXJmYWNlLT50ZXh0dXJlKCktPnNpemUoKSwgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpBbHdheXNCYWNrZWQpOwpAQCAtNzY0LDkgKzc2OSw5IEBAIHZvaWQgTGF5
ZXJGaWx0ZXJSZW5kZXJlcjo6YXBwbHlBY3Rpb25zKHVuc2lnbmVkJiBmYm8sIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIGxhCiAKICAgICAgICAgYWN0aW9uc1tpXS0+cmVzdG9yZVN0YXRlKCk7CiAK
LSAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCAmbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkpOworICAgICAg
ICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAyLCBHTF9GTE9BVCwg
R0xfRkFMU0UsIDAsIGxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpLmRhdGEoKSk7CiAgICAgICAg
IGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLSAgICAgICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4Q29vcmRMb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdM
X0ZBTFNFLCAwLCB0ZXhjb29yZHMpOworICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIobV90
ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIGxheWVyLT50ZXh0dXJl
Q29vcmRpbmF0ZXMoKS5kYXRhKCkpOwogICAgICAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KG1fdGV4Q29vcmRMb2NhdGlvbik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcApp
bmRleCBhNmY1YzYwYmI4OTgzOGQwOTkzMWFlOGE1YTZjNzE5NjRkMDA0MzEzLi41YTZiODc1ZTE0
OTU0ZDFmNzc1MTkxYWQwNmRiMjQ0NjA2Mzc4MTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5j
cHAKQEAgLTIwMSwxMiArMjAxLDkgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpyZWxlYXNlTGF5ZXJS
ZXNvdXJjZXMoKQogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVMYXllcloo
Y29uc3QgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogYSwgY29uc3QgTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCogYikKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJXKGNvbnN0IExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqIGEsIGNvbnN0IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGIpCiB7Ci0g
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUEgPSBhLT5kcmF3VHJhbnNm
b3JtKCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUIgPSBiLT5k
cmF3VHJhbnNmb3JtKCk7Ci0KLSAgICByZXR1cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9y
bUIubTQzKCk7CisgICAgcmV0dXJuIGEtPmNlbnRlclcoKSA+IGItPmNlbnRlclcoKTsKIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyOjpwcmVwYXJlRnJhbWUoZG91YmxlIGFuaW1hdGlvblRpbWUsIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJvb3RMYXllcikKQEAgLTMxMyw3ICszMTAsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVycyhjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4LCBMYXllckNvbQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJz
LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGZsb2F0IG9wYWNpdHkgPSAxOwogICAgICAgICBGbG9h
dFJlY3QgY2xpcFJlY3QobV9jbGlwUmVjdCk7Ci0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2
ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwgc3VyZmFjZUxheWVycywgb3BhY2l0eSwgY2xp
cFJlY3QpOworICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgp
LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBtYXRyaXgsIHN1cmZhY2VMYXllcnMsIG9wYWNpdHks
IGNsaXBSZWN0KTsKICAgICB9CiAKICAgICAvLyBEZWNvbXBvc2UgdGhlIGRpcnR5IHJlY3QgaW50
byBhIHNldCBvZiBub24tb3ZlcmxhcGluZyByZWN0YW5nbGVzCkBAIC01ODAsNiArNTc3LDIyIEBA
IEludFJlY3QgTGF5ZXJSZW5kZXJlcjo6dG9Eb2N1bWVudFZpZXdwb3J0Q29vcmRpbmF0ZXMoY29u
c3QgRmxvYXRSZWN0JiByZWN0KSBjb25zCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVz
dWx0KTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyOjpkcmF3RGVidWdCb3JkZXIoY29uc3QgVmVj
dG9yPEZsb2F0UG9pbnQ+JiB0cmFuc2Zvcm1lZEJvdW5kcywgY29uc3QgQ29sb3ImIGJvcmRlckNv
bG9yLCBmbG9hdCBib3JkZXJXaWR0aCkKK3sKKyAgICBpZiAoYm9yZGVyQ29sb3IuYWxwaGEoKSA8
IDI1NSkgeworICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7CisgICAgICAgIGdsQmxlbmRGdW5j
KEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgfSBlbHNlCisgICAgICAgIGds
RGlzYWJsZShHTF9CTEVORCk7CisKKyAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1
c2VQcm9ncmFtKENvbG9yUHJvZ3JhbSk7CisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dy
YW0ucG9zaXRpb25Mb2NhdGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRyYW5zZm9y
bWVkQm91bmRzLmRhdGEoKSk7CisgICAgZ2xVbmlmb3JtNGYobV9jb2xvckNvbG9yTG9jYXRpb24s
IGJvcmRlckNvbG9yLnJlZCgpIC8gMjU1LjAsIGJvcmRlckNvbG9yLmdyZWVuKCkgLyAyNTUuMCwg
Ym9yZGVyQ29sb3IuYmx1ZSgpIC8gMjU1LjAsIGJvcmRlckNvbG9yLmFscGhhKCkgLyAyNTUuMCk7
CisKKyAgICBnbExpbmVXaWR0aChib3JkZXJXaWR0aCk7CisgICAgZ2xEcmF3QXJyYXlzKEdMX0xJ
TkVfTE9PUCwgMCwgdHJhbnNmb3JtZWRCb3VuZHMuc2l6ZSgpKTsKK30KKwogLy8gRHJhd3MgYSBk
ZWJ1ZyBib3JkZXIgYXJvdW5kIHRoZSBsYXllcidzIGJvdW5kcy4KIHZvaWQgTGF5ZXJSZW5kZXJl
cjo6ZHJhd0RlYnVnQm9yZGVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyKQogewpAQCAt
NTkzLDI4ICs2MDYsMTcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpkcmF3RGVidWdCb3JkZXIoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCiAgICAgaWYgKCFib3JkZXJDb2xvci5hbHBoYSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYm9yZGVyQ29sb3IuYWxwaGEoKSA8IDI1NSkg
ewotICAgICAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgICAgIGdsQmxlbmRGdW5jKEdMX09O
RSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdsRGlzYWJs
ZShHTF9CTEVORCk7Ci0KICAgICAvLyBJZiB3ZSdyZSByZW5kZXJpbmcgdG8gYSBzdXJmYWNlLCBk
b24ndCBpbmNsdWRlIGRlYnVnIGJvcmRlciBpbnNpZGUgdGhlIHN1cmZhY2UuCiAgICAgaWYgKG1f
Y3VycmVudExheWVyUmVuZGVyZXJTdXJmYWNlKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9h
dFF1YWQgdHJhbnNmb3JtZWRCb3VuZHM7CisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IHRyYW5zZm9y
bWVkQm91bmRzOwogICAgIGlmIChsYXllckFscmVhZHlPblN1cmZhY2UobGF5ZXIpKQogICAgICAg
ICB0cmFuc2Zvcm1lZEJvdW5kcyA9IGxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFjZSgpLT50cmFu
c2Zvcm1lZEJvdW5kcygpOwogICAgIGVsc2UKICAgICAgICAgdHJhbnNmb3JtZWRCb3VuZHMgPSBs
YXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKTsKIAotICAgIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJv
Z3JhbSA9IHVzZVByb2dyYW0oQ29sb3JQcm9ncmFtKTsKLSAgICBnbFZlcnRleEF0dHJpYlBvaW50
ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwg
JnRyYW5zZm9ybWVkQm91bmRzKTsKLSAgICBnbFVuaWZvcm00ZihtX2NvbG9yQ29sb3JMb2NhdGlv
biwgYm9yZGVyQ29sb3IucmVkKCkgLyAyNTUuMCwgYm9yZGVyQ29sb3IuZ3JlZW4oKSAvIDI1NS4w
LCBib3JkZXJDb2xvci5ibHVlKCkgLyAyNTUuMCwgMSk7Ci0KLSAgICBnbExpbmVXaWR0aChzdGQ6
Om1heCgxLjBmLCBsYXllci0+Ym9yZGVyV2lkdGgoKSkpOwotICAgIGdsRHJhd0FycmF5cyhHTF9M
SU5FX0xPT1AsIDAsIDQpOworICAgIGRyYXdEZWJ1Z0JvcmRlcih0cmFuc2Zvcm1lZEJvdW5kcywg
Ym9yZGVyQ29sb3IsIHN0ZDo6bWF4KDEuMGYsIGxheWVyLT5ib3JkZXJXaWR0aCgpKSk7CiB9CiAK
IC8vIENsZWFycyBhIHJlY3RhbmdsZSBpbnNpZGUgdGhlIGxheWVyJ3MgYm91bmRzLgpAQCAtNjU3
LDcgKzY1OSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlcjo6cHJlcGFyZUZyYW1lUmVjdXJzaXZlKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUKICAgICAgICAgcHJlcGFyZUZyYW1l
UmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgYW5pbWF0aW9uVGltZSwgaXNDb250ZXh0Q3Vy
cmVudCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlcjo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1cmZhY2VM
YXllcnMsIGZsb2F0IG9wYWNpdHksIEZsb2F0UmVjdCBjbGlwUmVjdCkKK3ZvaWQgTGF5ZXJSZW5k
ZXJlcjo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5n
VGhyZWFkPiA+JiBzdXJmYWNlTGF5ZXJzLCBmbG9hdCBvcGFjaXR5LCBGbG9hdFJlY3QgY2xpcFJl
Y3QpCiB7CiAgICAgLy8gVGhlIGNvbnRyYWN0IGZvciBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpz
ZXRMYXllclJlbmRlcmVyIGlzIGl0IG11c3QgYmUgc2V0IGlmIHRoZSBsYXllciBoYXMgYmVlbiBy
ZW5kZXJlZC4KICAgICAvLyBTbyBkbyBpdCBub3csIGJlZm9yZSB3ZSByZW5kZXIgaXQgaW4gY29t
cG9zaXRlTGF5ZXJzUmVjdXJzaXZlLgpAQCAtNzY4LDYgKzc3MCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlcjo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVy
LCBjb25zdCBUCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBsYXllcidzIG9wYWNpdHkuCiAgICAgb3Bh
Y2l0eSAqPSBsYXllci0+b3BhY2l0eSgpOwogCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9j
YWxQcm9qZWN0aW9uTWF0cml4ID0gcHJvamVjdGlvbk1hdHJpeDsKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCiAgICAgYm9vbCB1c2VMYXllclJlbmRlcmVyU3VyZmFjZSA9IGxheWVyLT5tYXNrTGF5
ZXIoKSB8fCBsYXllci0+cmVwbGljYUxheWVyKCkgfHwgbGF5ZXItPmZpbHRlcnMoKS5zaXplKCk7
CiAjZWxzZQpAQCAtNzg1LDMwICs3ODgsMzAgQEAgdm9pZCBMYXllclJlbmRlcmVyOjp1cGRhdGVM
YXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFQKICAg
ICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEuMCk7CiAgICAgICAgIHN1cmZhY2UtPnNldERy
YXdPcGFjaXR5KG9wYWNpdHkpOwogCi0gICAgICAgIHN1cmZhY2UtPnNldERyYXdUcmFuc2Zvcm0o
bG9jYWxNYXRyaXgpOworICAgICAgICBzdXJmYWNlLT5zZXREcmF3VHJhbnNmb3JtKGxvY2FsTWF0
cml4LCBwcm9qZWN0aW9uTWF0cml4KTsKICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIo
KSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYU1hdHJpeCA9IGxv
Y2FsTWF0cml4OwogICAgICAgICAgICAgcmVwbGljYU1hdHJpeC50cmFuc2xhdGUzZCgtMC41ICog
Ym91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwogICAgICAgICAgICAg
cmVwbGljYU1hdHJpeC50cmFuc2xhdGUzZChsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9u
KCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKICAgICAg
ICAgICAgIHJlcGxpY2FNYXRyaXgubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFu
c2Zvcm0oKSk7CiAgICAgICAgICAgICByZXBsaWNhTWF0cml4LnRyYW5zbGF0ZTNkKGNlbnRlck9m
ZnNldFgsIGNlbnRlck9mZnNldFksIDApOwotICAgICAgICAgICAgc3VyZmFjZS0+c2V0UmVwbGlj
YURyYXdUcmFuc2Zvcm0ocmVwbGljYU1hdHJpeCk7CisgICAgICAgICAgICBzdXJmYWNlLT5zZXRS
ZXBsaWNhRHJhd1RyYW5zZm9ybShyZXBsaWNhTWF0cml4LCBwcm9qZWN0aW9uTWF0cml4KTsKICAg
ICAgICAgfQogCiAgICAgICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGJvdW5kcykpOwogICAgICAgICBzdXJmYWNl
LT5zZXRDb250ZW50UmVjdChjb250ZW50UmVjdCk7CiAKLSAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGNvbnRlbnRSZWN0LngoKSwgY29u
dGVudFJlY3QubWF4WCgpLCBjb250ZW50UmVjdC55KCksIGNvbnRlbnRSZWN0Lm1heFkoKSwgLTEw
MDAsIDEwMDApOworICAgICAgICBsb2NhbFByb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJpeChj
b250ZW50UmVjdC54KCksIGNvbnRlbnRSZWN0Lm1heFgoKSwgY29udGVudFJlY3QueSgpLCBjb250
ZW50UmVjdC5tYXhZKCksIC0xMDAwLCAxMDAwKTsKICAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0
aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllci4KICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTsKICAgICAgICAgZHJhd1Ry
YW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwgMC41ICogYm91bmRzLmhl
aWdodCgpLCAwKTsKICAgICAgICAgLy8gVGhpcyBsYXllciB3aWxsIHN0YXJ0IHVzaW5nIG5ldyB0
cmFuc2Zvcm1hdGlvbi4KLSAgICAgICAgbG9jYWxNYXRyaXggPSBwcm9qZWN0aW9uTWF0cml4ICog
ZHJhd1RyYW5zZm9ybTsKKyAgICAgICAgbG9jYWxNYXRyaXggPSBkcmF3VHJhbnNmb3JtOwogCiAg
ICAgICAgIHN1cmZhY2VMYXllcnMuYXBwZW5kKGxheWVyKTsKICAgICB9CiAKLSAgICBsYXllci0+
c2V0RHJhd1RyYW5zZm9ybShtX3NjYWxlLCBsb2NhbE1hdHJpeCk7CisgICAgbGF5ZXItPnNldERy
YXdUcmFuc2Zvcm0obV9zY2FsZSwgbG9jYWxNYXRyaXgsIGxvY2FsUHJvamVjdGlvbk1hdHJpeCk7
CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgYm9vbCBsYXllclZpc2libGUgPSBjbGlwUmVjdC5p
bnRlcnNlY3RzKGxheWVyLT5ib3VuZGluZ0JveCgpKSB8fCBsYXllci0+bWVkaWFQbGF5ZXIoKTsK
QEAgLTgzMCw4ICs4MzMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vy
c2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgVAogICAgICAgICBsb2Nh
bE1hdHJpeC5zZXRNMjMoMCk7CiAgICAgICAgIGxvY2FsTWF0cml4LnNldE0zMSgwKTsKICAgICAg
ICAgbG9jYWxNYXRyaXguc2V0TTMyKDApOwotICAgICAgICAvLyBUaGlzIGNvcnJlc3BvbmRzIHRv
IHRoZSBkZXB0aCByYW5nZSBzcGVjaWZpZWQgaW4gdGhlIG9yaWdpbmFsIG9ydGhvZ3JhcGhpYyBw
cm9qZWN0aW9uIG1hdHJpeAotICAgICAgICBsb2NhbE1hdHJpeC5zZXRNMzMoMC4wMDEpOworICAg
ICAgICBsb2NhbE1hdHJpeC5zZXRNMzMoMSk7CiAgICAgICAgIGxvY2FsTWF0cml4LnNldE0zNCgw
KTsKICAgICAgICAgbG9jYWxNYXRyaXguc2V0TTQzKDApOwogICAgIH0KQEAgLTg0Nyw3ICs4NDks
NyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBv
c2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgVAogCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllckNvbXBvc2l0aW5nVGhyZWFkPiA+JiBzdWJsYXllcnMgPSBsYXllci0+c3VibGF5ZXJzKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCi0gICAg
ICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIGxvY2FsTWF0cml4
LCBzdXJmYWNlTGF5ZXJzLCBvcGFjaXR5LCBjbGlwUmVjdCk7CisgICAgICAgIHVwZGF0ZUxheWVy
c1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIGxvY2FsTWF0cml4LCBsb2NhbFByb2plY3Rp
b25NYXRyaXgsIHN1cmZhY2VMYXllcnMsIG9wYWNpdHksIGNsaXBSZWN0KTsKIH0KIAogc3RhdGlj
IGJvb2wgaGFzUm90YXRpb25hbENvbXBvbmVudChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bSkKQEAgLTk2NSw4ICs5NjcsOCBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVy
c1JlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgaW50CiAgICAgICAgIHVw
ZGF0ZVNjaXNzb3JJZk5lZWRlZChjbGlwUmVjdCk7CiAgICAgICAgIGNvbnN0IEdMRVMyUHJvZ3Jh
bSYgcHJvZ3JhbSA9IHVzZVByb2dyYW0oQ29sb3JQcm9ncmFtKTsKICAgICAgICAgZ2xDb2xvck1h
c2soR0xfRkFMU0UsIEdMX0ZBTFNFLCBHTF9GQUxTRSwgR0xfRkFMU0UpOwotICAgICAgICBnbFZl
cnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIsIEdMX0ZMT0FU
LCBHTF9GQUxTRSwgMCwgJmxheWVyLT50cmFuc2Zvcm1lZEJvdW5kcygpKTsKLSAgICAgICAgZ2xE
cmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgICAgIGdsVmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtLnBvc2l0aW9uTG9jYXRpb24oKSwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNF
LCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5kYXRhKCkpOworICAgICAgICBnbERyYXdB
cnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKS5zaXpl
KCkpOwogICAgICAgICBnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9U
UlVFKTsKICAgICB9CiAKQEAgLTk4Niw3ICs5ODgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmNv
bXBvc2l0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgaW50
CiAgICAgLy8gY2hpbGRyZW4sIHNvIGJhaWwuCiAgICAgaWYgKHByZXNlcnZlczNEICYmICFzdXBl
cmxheWVyUHJlc2VydmVzM0QpIHsKICAgICAgICAgY29sbGVjdDNEUHJlc2VydmluZ0xheWVycyhz
dWJsYXllcnMpOwotICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHN1YmxheWVycy5iZWdpbigpLCBz
dWJsYXllcnMuZW5kKCksIGNvbXBhcmVMYXllclopOworICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0
KHN1YmxheWVycy5iZWdpbigpLCBzdWJsYXllcnMuZW5kKCksIGNvbXBhcmVMYXllclcpOwogICAg
IH0KIAogICAgIGludCBuZXdTdGVuY2lsVmFsdWUgPSBzdGVuY2lsQ2xpcCA/IHN0ZW5jaWxWYWx1
ZSsxIDogc3RlbmNpbFZhbHVlOwpAQCAtMTAwOCw4ICsxMDEwLDggQEAgdm9pZCBMYXllclJlbmRl
cmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5
ZXIsIGludAogICAgICAgICB1cGRhdGVTY2lzc29ySWZOZWVkZWQoY2xpcFJlY3QpOwogICAgICAg
ICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VQcm9ncmFtKENvbG9yUHJvZ3JhbSk7
CiAgICAgICAgIGdsQ29sb3JNYXNrKEdMX0ZBTFNFLCBHTF9GQUxTRSwgR0xfRkFMU0UsIEdMX0ZB
TFNFKTsKLSAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0ucG9zaXRpb25Mb2Nh
dGlvbigpLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICZsYXllci0+dHJhbnNmb3JtZWRCb3Vu
ZHMoKSk7Ci0gICAgICAgIGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOworICAg
ICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS5wb3NpdGlvbkxvY2F0aW9uKCksIDIs
IEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCkuZGF0YSgp
KTsKKyAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgbGF5ZXItPnRyYW5z
Zm9ybWVkQm91bmRzKCkuc2l6ZSgpKTsKICAgICAgICAgZ2xDb2xvck1hc2soR0xfVFJVRSwgR0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CiAKICAgICAgICAgaWYgKCFzdGVuY2lsVmFsdWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xh
eWVyUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJSZW5kZXJlci5oCmluZGV4IDM2Y2NlOWI1NWI4ZGNhOTc5M2M1ZDIyMDY3NjkwZGMx
ODFmNGE4MjMuLjQ5NTdlYzYzMzAxZDg3OTFhM2U2MWUwMDhjNWQxMDUzY2NmN2JlMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJS
ZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJSZW5kZXJlci5oCkBAIC01MCw2ICs1MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQ29sb3I7CiBjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOwogY2xhc3Mg
TGF5ZXJSZW5kZXJlckNsaWVudDsKIGNsYXNzIExheWVyUmVuZGVyZXJTdXJmYWNlOwpAQCAtMTMz
LDEyICsxMzQsMTQgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSBsYXllciBoYXMgYWxyZWFkeSBi
ZWVuIGRyYXdlZCBvbiBhIHN1cmZhY2UuCiAgICAgYm9vbCBsYXllckFscmVhZHlPblN1cmZhY2Uo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopIGNvbnN0OwogCisgICAgdm9pZCBkcmF3RGVidWdCb3Jk
ZXIoY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiwgY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJX
aWR0aCk7CisKICAgICBzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZSk7CiAgICAgc3RhdGljIEdMdWludCBsb2FkU2hhZGVyUHJvZ3Jh
bShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hh
ZGVyU291cmNlKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHByZXBhcmVGcmFtZVJlY3Vyc2l2ZShM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIGFuaW1hdGlvblRpbWUsIGJvb2wgaXNDb250
ZXh0Q3VycmVudCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VyZmFjZUxheWVycywgZmxv
YXQgb3BhY2l0eSwgRmxvYXRSZWN0IGNsaXBSZWN0KTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyc1Jl
Y3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25N
YXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VyZmFjZUxh
eWVycywgZmxvYXQgb3BhY2l0eSwgRmxvYXRSZWN0IGNsaXBSZWN0KTsKICAgICB2b2lkIGNvbXBv
c2l0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgaW50IHN0ZW5jaWxW
YWx1ZSwgRmxvYXRSZWN0IGNsaXBSZWN0KTsKICAgICB2b2lkIHVwZGF0ZVNjaXNzb3JJZk5lZWRl
ZChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyU3VyZmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVy
ZXJTdXJmYWNlLmNwcAppbmRleCBkZmQ3NGI2Y2NiNDUxMDYyNDI2NWFhODcxY2M2MWRkMzAxOTBl
Y2M0Li4zM2Y3ZjQxMjkzMTcwYTE0Nzk4ODM0ZWQ5YTFiMGQ5MjQ0MWRiNGRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVy
ZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyUmVuZGVyZXJTdXJmYWNlLmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5j
bHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXIu
aCIKKyNpbmNsdWRlICJMYXllclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlRleHR1cmVDYWNoZUNv
bXBvc2l0aW5nVGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3LDcgKzQ4LDcg
QEAgdm9pZCBMYXllclJlbmRlcmVyU3VyZmFjZTo6c2V0Q29udGVudFJlY3QoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QpCiAKIEZsb2F0UmVjdCBMYXllclJlbmRlcmVyU3VyZmFjZTo6Ym91bmRp
bmdCb3goKSBjb25zdAogewotICAgIEZsb2F0UmVjdCByZWN0ID0gdHJhbnNmb3JtZWRCb3VuZHMo
KS5ib3VuZGluZ0JveCgpOworICAgIEZsb2F0UmVjdCByZWN0ID0gV2ViQ29yZTo6Ym91bmRpbmdC
b3godHJhbnNmb3JtZWRCb3VuZHMoKSk7CiAKICAgICBpZiAobV9vd25lckxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkKICAgICAgICAgcmVjdC51bml0ZShtX3JlcGxpY2FEcmF3VHJhbnNmb3JtLm1hcFF1
YWQoRmxvYXRSZWN0KC1vcmlnaW4oKSwgc2l6ZSgpKSkuYm91bmRpbmdCb3goKSk7CkBAIC01NSw5
ICs1Niw5IEBAIEZsb2F0UmVjdCBMYXllclJlbmRlcmVyU3VyZmFjZTo6Ym91bmRpbmdCb3goKSBj
b25zdAogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFF1YWQgTGF5ZXJSZW5kZXJlclN1cmZh
Y2U6OnRyYW5zZm9ybWVkQm91bmRzKCkgY29uc3QKK1ZlY3RvcjxGbG9hdFBvaW50LCA0PiBMYXll
clJlbmRlcmVyU3VyZmFjZTo6dHJhbnNmb3JtZWRCb3VuZHMoKSBjb25zdAogewotICAgIHJldHVy
biBtX2RyYXdUcmFuc2Zvcm0ubWFwUXVhZChGbG9hdFJlY3QoLW9yaWdpbigpLCBzaXplKCkpKTsK
KyAgICByZXR1cm4gdG9WZWN0b3I8RmxvYXRQb2ludCwgND4obV9kcmF3VHJhbnNmb3JtLm1hcFF1
YWQoRmxvYXRSZWN0KC1vcmlnaW4oKSwgc2l6ZSgpKSkpOwogfQogCiBib29sIExheWVyUmVuZGVy
ZXJTdXJmYWNlOjplbnN1cmVUZXh0dXJlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlclN1cmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlclN1cmZh
Y2UuaAppbmRleCA2MWFiNzg3Y2M5Zjc3ZDA1ZjZkY2E0ZjgxYTZkZDA1NDJiOGNlZTBhLi5jYmZm
YTlhZmYzN2VhMDdlM2JhMGY2NTdkMzAwYWY0YWYyNDIwYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXJTdXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clJlbmRlcmVyU3VyZmFjZS5oCkBAIC00NywxNCArNDcsMTQgQEAgcHVibGljOgogCiAgICAgRmxv
YXRQb2ludCBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgp
IC8gMi4wZiwgbV9zaXplLmhlaWdodCgpIC8gMi4wZik7IH0KIAotICAgIHZvaWQgc2V0RHJhd1Ry
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5z
Zm9ybSA9IG1hdHJpeDsgfQorICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVj
dGlvbk1hdHJpeCkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBwcm9qZWN0aW9uTWF0cml4ICogbWF0cml4
OyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KLSAgICB2b2lkIHNldFJlcGxpY2FEcmF3VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9yZXBsaWNhRHJh
d1RyYW5zZm9ybSA9IG1hdHJpeDsgfQorICAgIHZvaWQgc2V0UmVwbGljYURyYXdUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHByb2plY3Rpb25NYXRyaXgpIHsgbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSA9IHByb2pl
Y3Rpb25NYXRyaXggKiBtYXRyaXg7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cmVwbGljYURyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FEcmF3VHJhbnNm
b3JtOyB9CiAKICAgICAvLyBUaGVzZSB1c2Ugbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMK
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKLSAgICBGbG9hdFF1YWQgdHJhbnNm
b3JtZWRCb3VuZHMoKSBjb25zdDsKKyAgICBWZWN0b3I8RmxvYXRQb2ludCwgND4gdHJhbnNmb3Jt
ZWRCb3VuZHMoKSBjb25zdDsKIAogICAgIGJvb2wgZW5zdXJlVGV4dHVyZSgpOwogICAgIHZvaWQg
cmVsZWFzZVRleHR1cmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJVdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzZj
MTg0NDA4ZjAxZmExYjQ2NDFhY2JlOTU3YTZmMGYxOTUzYzgwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGll
cy5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpZm5kZWYgTGF5ZXJVdGlsaXRpZXNfaAorI2RlZmluZSBMYXllclV0aWxpdGllc19o
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIFNwZWNpZmllcyBhIGNsaXAgcGxhbmUgd2l0aCBub3JtYWwgbiBhbmQgY29udGFpbmluZyBw
b2ludCBwXzAKKy8vIGFzIHAgKiBuICsgZCA9IDAsIGQgPSAtcF8wICogbi4gVGhlIGFzdGVyaXNr
IGlzIGRvdCBwcm9kdWN0LgorY2xhc3MgTGF5ZXJDbGlwUGxhbmUgeworcHVibGljOgorICAgIExh
eWVyQ2xpcFBsYW5lKEZsb2F0UG9pbnQzRCBuLCBmbG9hdCBkKQorICAgICAgICA6IG1fbihuKQor
ICAgICAgICAsIG1fZChkKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc1BvaW50
SW5zaWRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBwICogbV9uICsgbV9kID4gMDsKKyAgICB9CisKKyAgICBpbmxpbmUgRmxvYXRQb2ludDNEIGNv
bXB1dGVJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2ludDNEJiBwMSwgY29uc3QgRmxvYXRQb2lu
dDNEJiBwMikgY29uc3QKKyAgICB7CisgICAgICAgIGZsb2F0IHUgPSAoLW1fZCAtIHAxICogbV9u
KSAvICgocDIgLSBwMSkgKiBtX24pOworICAgICAgICByZXR1cm4gcDEgKyB1ICogKHAyIC0gcDEp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEZsb2F0UG9pbnQzRCBtX247CisgICAgZmxvYXQg
bV9kOworfTsKKworLy8gU3V0aGVybGFuZCAtIEhvZGdtYW4sIGlubmVyIGxvb3AKK3RlbXBsYXRl
PHR5cGVuYW1lIFBvaW50LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIENsaXBQcmlt
aXRpdmU+CitpbmxpbmUgVmVjdG9yPFBvaW50LCBpbmxpbmVDYXBhY2l0eT4gaW50ZXJzZWN0KGNv
bnN0IFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBpbnB1dExpc3QsIGNvbnN0IENsaXBQ
cmltaXRpdmUmIGNsaXBQcmltaXRpdmUpCit7CisgICAgVmVjdG9yPFBvaW50LCBpbmxpbmVDYXBh
Y2l0eT4gb3V0cHV0TGlzdDsKKyAgICBQb2ludCBzOworICAgIGlmICghaW5wdXRMaXN0LmlzRW1w
dHkoKSkKKyAgICAgICAgcyA9IGlucHV0TGlzdC5sYXN0KCk7CisgICAgZm9yICh0eXBlbmFtZSBW
ZWN0b3I8UG9pbnQsIGlubGluZUNhcGFjaXR5Pjo6Y29uc3RfaXRlcmF0b3IgZUl0ZXJhdG9yID0g
aW5wdXRMaXN0LmJlZ2luKCk7IGVJdGVyYXRvciAhPSBpbnB1dExpc3QuZW5kKCk7ICsrZUl0ZXJh
dG9yKSB7CisgICAgICAgIGNvbnN0IFBvaW50JiBlID0gKmVJdGVyYXRvcjsKKyAgICAgICAgaWYg
KGNsaXBQcmltaXRpdmUuaXNQb2ludEluc2lkZShlKSkgeworICAgICAgICAgICAgaWYgKCFjbGlw
UHJpbWl0aXZlLmlzUG9pbnRJbnNpZGUocykpCisgICAgICAgICAgICAgICAgb3V0cHV0TGlzdC5h
cHBlbmQoY2xpcFByaW1pdGl2ZS5jb21wdXRlSW50ZXJzZWN0aW9uKHMsIGUpKTsKKyAgICAgICAg
ICAgIG91dHB1dExpc3QuYXBwZW5kKGUpOworICAgICAgICB9IGVsc2UgaWYgKGNsaXBQcmltaXRp
dmUuaXNQb2ludEluc2lkZShzKSkKKyAgICAgICAgICAgIG91dHB1dExpc3QuYXBwZW5kKGNsaXBQ
cmltaXRpdmUuY29tcHV0ZUludGVyc2VjdGlvbihzLCBlKSk7CisgICAgICAgIHMgPSBlOworICAg
IH0KKyAgICByZXR1cm4gb3V0cHV0TGlzdDsKK30KKwordGVtcGxhdGU8c2l6ZV90IGlubGluZUNh
cGFjaXR5PgoraW5saW5lIEZsb2F0UmVjdCBib3VuZGluZ0JveChjb25zdCBWZWN0b3I8RmxvYXRQ
b2ludCwgaW5saW5lQ2FwYWNpdHk+JiBwb2ludHMpCit7CisgICAgaWYgKHBvaW50cy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBmbG9hdCB4bWluLCB4bWF4LCB5
bWluLCB5bWF4OworICAgIHhtaW4gPSB5bWluID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCk7CisgICAgeG1heCA9IHltYXggPSAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcCA9IHBvaW50c1tpXTsKKyAgICAg
ICAgaWYgKHAueCgpIDwgeG1pbikKKyAgICAgICAgICAgIHhtaW4gPSBwLngoKTsKKyAgICAgICAg
aWYgKHAueCgpID4geG1heCkKKyAgICAgICAgICAgIHhtYXggPSBwLngoKTsKKyAgICAgICAgaWYg
KHAueSgpIDwgeW1pbikKKyAgICAgICAgICAgIHltaW4gPSBwLnkoKTsKKyAgICAgICAgaWYgKHAu
eSgpID4geW1heCkKKyAgICAgICAgICAgIHltYXggPSBwLnkoKTsKKyAgICB9CisgICAgcmV0dXJu
IEZsb2F0UmVjdCh4bWluLCB5bWluLCB4bWF4IC0geG1pbiwgeW1heCAtIHltaW4pOworfQorCitp
bmxpbmUgRmxvYXRQb2ludDNEIG11bHRWZWNNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2ludDNEJiBwLCBmbG9hdCYgdykKK3sKKyAgICBGbG9h
dFBvaW50M0QgcmVzdWx0KAorICAgICAgICBtYXRyaXgubTQxKCkgKyBwLngoKSAqIG1hdHJpeC5t
MTEoKSArIHAueSgpICogbWF0cml4Lm0yMSgpICsgcC56KCkgKiBtYXRyaXgubTMxKCksCisgICAg
ICAgIG1hdHJpeC5tNDIoKSArIHAueCgpICogbWF0cml4Lm0xMigpICsgcC55KCkgKiBtYXRyaXgu
bTIyKCkgKyBwLnooKSAqIG1hdHJpeC5tMzIoKSwKKyAgICAgICAgbWF0cml4Lm00MygpICsgcC54
KCkgKiBtYXRyaXgubTEzKCkgKyBwLnkoKSAqIG1hdHJpeC5tMjMoKSArIHAueigpICogbWF0cml4
Lm0zMygpKTsKKyAgICB3ID0gbWF0cml4Lm00NCgpICsgcC54KCkgKiBtYXRyaXgubTE0KCkgKyBw
LnkoKSAqIG1hdHJpeC5tMjQoKSArIHAueigpICogbWF0cml4Lm0zNCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFBvaW50LCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CitpbmxpbmUgVmVjdG9yPFBvaW50LCBpbmxpbmVDYXBhY2l0eT4gdG9WZWN0b3IoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQoreworICAgIFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+IHJl
c3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKHF1YWQucDEoKSk7CisgICAgcmVzdWx0LmFwcGVuZChx
dWFkLnAyKCkpOworICAgIHJlc3VsdC5hcHBlbmQocXVhZC5wMygpKTsKKyAgICByZXN1bHQuYXBw
ZW5kKHF1YWQucDQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5k
aWYgLy8gTGF5ZXJVdGlsaXRpZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204694</attachid>
            <date>2013-06-14 03:45:28 -0700</date>
            <delta_ts>2013-06-14 03:55:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117211-20130614124344.patch</filename>
            <type>text/plain</type>
            <size>64798</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJjMmQzM2FlYTJiZGJi
OGZhNmFhZjA0YTc2YzQ0NGQ3ZmM1YzY2Ny4uM2U1OTIwNGFlMTc2MzkyMDhiNDdmNmFhNDc2MGM4
NDRjZDg3YjliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMy0wNi0wNCAgQXJ2
aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIExh
eWVyVGlsZXIgZmFpbHMgdG8gdGlsZSByZWFsbHkgYmlnIGxheWVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MjExCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUFIgMjczNTUwCisKKyAgICAgICAgVGhl
IGNhdXNlIGZvciB0aGlzIGJ1ZyB3YXMgdGhhdCBMYXllclRpbGVyIGNvbXB1dGVkIHdoaWNoIHRp
bGVzIGFyZQorICAgICAgICB2aXNpYmxlIGJ5IGV4aGF1c3RpdmVseSBtYXBwaW5nIGV2ZXJ5IHRp
bGUgdG8gbm9ybWFsaXplZCBkZXZpY2UKKyAgICAgICAgY29vcmRpbmF0ZXMgYW5kIGNoZWNraW5n
IGlmIGl0IGludGVyc2VjdGVkIHRoZSB2aWV3cG9ydC4gSWYgdGhlcmUgd2FzIGEKKyAgICAgICAg
bG90IG9mIHRpbGVzLCBpdCB3b3VsZCBnZXQgc3R1Y2sgaW4gdGhpcyBsb29wLCBpdGVyYXRpbmcg
b3ZlciBhbGwKKyAgICAgICAgdGlsZXMsIGZvciBhIHZlcnkgbG9uZyB0aW1lLiBBbHNvLCB0aGUg
dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB3YXMKKyAgICAgICAgdHJhbnNmZXJyZWQgdG8gdGhlIFdl
YktpdCB0aHJlYWQgdXNpbmcgbXV0ZXhlcywgd2hpY2ggYWRkZWQgdW5uZWNlc3NhcnkKKyAgICAg
ICAgbXV0ZXggY29udGVudGlvbiB0byB0aGUgbWl4LgorCisgICAgICAgIEZpeGVkIGJ5IGRvaW5n
IHRoZSByZXZlcnNlIGNhbGN1bGF0aW9uLCB1bnByb2plY3RpbmcgdGhlIHZpc2libGUgcGFydAor
ICAgICAgICBvZiB0aGUgbGF5ZXIgdG8gbGF5ZXIgY29vcmRpbmF0ZSBzcGFjZSB0byBmaW5kIHdo
aWNoIHRpbGVzIGFyZSB2aXNpYmxlLgorICAgICAgICBJbnN0ZWFkIG9mIGRvaW5nIGEgdHJhZGl0
aW9uYWwgdW5wcm9qZWN0aW9uIG9mIHBvaW50IHRvIGxpbmUgYW5kIHNlZQorICAgICAgICB3aGVy
ZSB0aGUgbGluZSBpbnRlcnNlY3RzIHRoZSBsYXllciwgdGhpcyBwYXRjaCB1c2VzIHRoZSB3LWNv
b3JkaW5hdGVzCisgICAgICAgIG9mIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBlcmZvcm0gInBlcnNw
ZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIiBvZiB0aGUKKyAgICAgICAgaW50ZXJzZWN0aW9uIHBv
aW50cyBpbiBkZXZpY2Ugc3BhY2UsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgdW5w
cm9qZWN0aW9uIHNpbmNlIHBlcnNwZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIGNvbXB1dGVzIGEg
MkQKKyAgICAgICAgY29vcmRpbmF0ZSBpbiAobm9ybWFsaXplZCkgbGF5ZXIgY29vcmRpbmF0ZSBz
cGFjZSB3aGljaCBpcyBlYXNpbHkKKyAgICAgICAgc2NhbGVkIHVwIHRvIHRoZSBsYXllciBib3Vu
ZHMgYW5kIGdldCB0aGUgdmlzaWJsZSByZWdpb24gZXhwcmVzc2VkIGluCisgICAgICAgIGxheWVy
IGNvb3JkaW5hdGUgc3BhY2UuCisKKyAgICAgICAgVGhlIHZpc2libGUgYXJlYSBpcyBhcHByb3hp
bWF0ZWQgYnkgYSByZWN0YW5nbGUsIGFuZCBhIHNldCBvZiB0aWxlcworICAgICAgICBuZWVkaW5n
IHJlbmRlciBhcmUgYWRkZWQgdG8gdGhlIG1peCwgYW5kICB3ZSBoYXZlIGEgc3dhcHBhYmxlIGRh
dGEKKyAgICAgICAgc3RydWN0dXJlIHNvIHZpc2JpbGl0eSBjYW4gYmUgdHJhbnNmZXJyZWQgdG8g
V2ViS2l0IHRocmVhZCB3aXRob3V0CisgICAgICAgIG11dGV4ZXMsIGJ1dCBpbnN0ZWFkIHVzaW5n
IGF0b21pYyBzd2FwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQuY3BwOgorICAgICAgICAoQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1Rl
eHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdl
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoRUdMSW1hZ2VMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaDoKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGU6OkxheWVyVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGU6OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6dXBkYXRlQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpkaXNjYXJkQ29udGVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmg6CisgICAg
ICAgIChMYXllclRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpjb250ZW50c1Nj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6c2V0Q29udGVudHNEaXJ0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAg
ICAgICAgKExheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxp
dHk6OkxheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6
OnZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c2V0Vmlz
aWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJWaXNpYmlsaXR5OjpuZWVkc1JlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OnRpbGVOZWVkc1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OndpbGxSZW5kZXJUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c3dhcFRpbGVzTmVlZGluZ1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6Om1lcmdlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjp+TGF5ZXJUaWxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyOjpzd2FwRnJvbnRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXI6OnNldEZyb250VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6cHJvY2Vzc1RleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpwZXJmb3JtVGls
ZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpkcmF3VGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjppbmZsYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBydW5lVGV4
dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cmVjdEZvclRpbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclRpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OlRleHR1cmVKb2I6OlRleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6dGFrZUZyb250VmlzaWJpbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXQpOgorICAgICAgICAoV2ViQ29yZTo6ZG90KToKKyAgICAgICAgKExh
eWVyQ2xpcEVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDbGlwRWRnZTo6TGF5ZXJDbGlw
RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNsaXBFZGdlOjppc1BvaW50SW5zaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2xpcEVkZ2U6OmNvbXB1dGVJbnRlcnNlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Om1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydCk6CisgICAgICAgIChVbnByb2plY3Rpb25WZXJ0
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZU1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjp1bnByb2plY3QpOgorCiAyMDEzLTA1LTMxICBBcnZpZCBO
aWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBpbWFnZSBwbGFuZSBh
cmUgaW5jb3JyZWN0bHkgdHJhbnNmb3JtZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmlu
ZGV4IDE1YzI5YWU2MjY3NDQyMTg2M2YwNmU1NmNhNTBmNDg5YTQwYTA1MDcuLmU2ODdjY2RjOGYy
NjE3Y2IzMzM3OGIxMjhmMGMzMDk3MWRlZmZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA2LTA0ICBBcnZpZCBOaWxzc29uICA8YW5pbHNz
b25AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gTGF5ZXJUaWxlciBmYWlscyB0byB0
aWxlIHJlYWxseSBiaWcgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTcyMTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQUiAyNzM1NTAKKworICAgICAgICBBZGFwdCB0byBjaGFuZ2VzIGluIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgaW50ZXJmYWNlLgorCisgICAgICAgICogQXBpL1dl
Yk92ZXJsYXkuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKiBBcGkv
V2ViT3ZlcmxheV9wLmg6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudCk6CisKIDIwMTMtMDYtMTIgIExlbyBZYW5nICA8bGVveWFuZ0ByaW0uY29tPgogCiAg
ICAgICAgIFtCbGFja0JlcnJ5XSBVc2UgUmVmUHRyIGZvciBIVE1MSW5wdXRFbGVtZW50IGluc2lk
ZSBDcmVkZW50aWFsVHJhbnNmb3JtRGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkLmNwcAppbmRleCA0MzRlNzQxYTBmMzg0ZmNhZWQ2NmM0NjgxZmE3YzI3MjRkOTlh
NGI4Li5jOGE5ZjhjY2RjMzI0MWQzOWFhMjFkMTA5NDIwMzQyZTY1NjhiMWJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVy
V2ViS2l0VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqLCBib29sKSB7IH0KICAgICB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopIHsgfQogCi0gICAgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJik7CisgICAg
dm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IEdMRVMyUHJv
Z3JhbSYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9p
ZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAKICAgICB2b2lkIGNv
bW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CkBAIC01
OSw3ICs1OSw3IEBAIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OkNhbnZhc0xh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoQmxhY2tCZXJyCiB7CiB9CiAKLXZvaWQgQ2FudmFz
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyLCBkb3VibGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpCit2b2lkIENhbnZh
c0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQcm9ncmFtJiwgZG91YmxlLCBjb25zdCBGbG9h
dFJlY3QmIC8qY2xpcFJlY3QqLykKIHsKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudC5jcHAKaW5kZXggOGQyZjU4OTNlNmRiMTY3MzliZTA2M2JjMWFlNWMwZDg4
MzUyOGExNC4uZmJlZWYzYzA1M2JjZWRkMGIyYTVjYmYxZmMyYjFiYmNlNjkxNWUyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFn
ZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50LmNwcApAQCAtNDUsNyArNDUsNyBAQCB2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aQogewog
fQogCi12b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1
cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgLypzY2FsZSovLCBjb25z
dCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCit2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBj
b25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0sIGRvdWJsZSAvKnNjYWxlKi8sIGNvbnN0IEZsb2F0
UmVjdCYgLypjbGlwUmVjdCovKQogewogICAgIGlmICghbV90ZXh0dXJlQWNjZXNzb3IgfHwgIW1f
dGV4dHVyZUFjY2Vzc29yLT50ZXh0dXJlSUQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgK
aW5kZXggZjQ2OWZjY2RhYWQwZWVhYzFjZWMzZWY2N2NhMjUwNjRhZWI4MWFlOS4uOGQzODlmZGYx
M2I0N2IyNDQ0MDAyMDg0NGM5YThmM2RjZWE4ZDBmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oCkBAIC01NSw3ICs1
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBs
b2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNjYWxl
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91Ymxl
IHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogCiAgICAgdmlydHVhbCB2b2lk
IGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBv
c2l0aW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggOGIzMzlkOTYwMGI3NjNmZmJm
ZjgzODM1NWQzNGE0NDZkOWFlYWMzNS4uZmZiYTdmMmZmOGNjOTdjMWY1MWJhNzBhZDJmZmRhNGM3
ODA3N2Y0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBA
IC0yMjUsNyArMjI1LDcgQEAgRmxvYXRRdWFkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5z
Zm9ybWVkSG9sZVB1bmNoUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybS5t
YXBRdWFkKGhvbGVQdW5jaFJlY3QpOwogfQogCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OmRyYXdUZXh0dXJlcyhkb3VibGUgc2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwg
Y29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKK3ZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZDo6ZHJhd1RleHR1cmVzKGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwgZG91YmxlIHNjYWxl
LCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0
KQogewogICAgIGlmIChtX3BsdWdpblZpZXcpIHsKICAgICAgICAgaWYgKG1faXNWaXNpYmxlKSB7
CkBAIC0yNzYsMTAgKzI3NiwxMCBAQCB2b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdU
ZXh0dXJlcyhkb3VibGUgc2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZwogI2VuZGlmCiAK
ICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kcmF3VGV4dHVyZXModGhpcywg
c2NhbGUsIHByb2dyYW0pOworICAgICAgICBtX2NsaWVudC0+ZHJhd1RleHR1cmVzKHRoaXMsIHBy
b2dyYW0sIHNjYWxlLCBjbGlwUmVjdCk7CiB9CiAKLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZDo6ZHJhd1N1cmZhY2UoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0s
IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2ssIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3Jh
bSkKK3ZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1N1cmZhY2UoY29uc3QgR0xFUzJQ
cm9ncmFtJiBwcm9ncmFtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFzaykKIHsKICAgICB1c2luZyBuYW1lc3BhY2Ug
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oCmluZGV4IGJkYTg3ZmMxYjhkZDAxYmQ3YzM5MWY4NWNkNDUwMWE1Zjlm
Njg0MmQuLjhiZWUyNjY4YmFhOTMzOWQ1YWIzZmYyNjcyZmU2Y2M4MDlkYmMwZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oCkBAIC0xOTcsOCArMTk3LDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkZWxldGVUZXh0dXJlcygpOwogCi0gICAgdm9pZCBkcmF3VGV4dHVy
ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpOwotICAgIHZvaWQgZHJh
d1N1cmZhY2UoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiBtYXNrLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJv
Z3JhbSYpOworICAgIHZvaWQgZHJhd1RleHR1cmVzKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2b2lkIGRyYXdT
dXJmYWNlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFt
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBt
YXNrKTsKIAogICAgIHZvaWQgcmVsZWFzZVRleHR1cmVSZXNvdXJjZXMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAppbmRleCAzMTg3OGY0YWNh
NDY0YmRjNTQwMDc2YTg5MzliNDZhYjhkMmZmODVjLi4wOGNmZTFhYTU2MTkyMDRlYjUzNmZhY2Jl
ODMxZTRjMDg2YjQ4MGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQuaApAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBHTEVTMlByb2dyYW07CiB9CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ7CiBjbGFzcyBMYXllclRleHR1cmU7CiAKQEAgLTQyLDcgKzQzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGxv
YWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNj
YWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYs
IGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgPSAwOwogCiAg
ICAgLy8gT3B0aW9uYWwuIEFsbG93cyBsYXllcnMgdG8gc2VydmUgYXMgYSBtYXNrIGZvciBvdGhl
ciBsYXllcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCmluZGV4IDVhNmI4NzVlMTQ5NTRkMWY3
NzUxOTFhZDA2ZGIyNDQ2MDYzNzgxNDAuLjAxM2JmZDBhYWQzMTVkNGEyYWExZDY3NTgxMzBkNGZj
OWY5NmI4ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcApAQCAtOTE5LDcgKzkxOSw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIGxheWVyLCBpbnQKIAogICAgICAgICBpZiAoIWRyYXdTdXJmYWNlKSB7CiAg
ICAgICAgICAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VMYXllclByb2dyYW0o
bGF5ZXJQcm9ncmFtKTsKLSAgICAgICAgICAgIGxheWVyLT5kcmF3VGV4dHVyZXMobV9zY2FsZSwg
cHJvZ3JhbSwgbV92aXNpYmxlUmVjdCk7CisgICAgICAgICAgICBsYXllci0+ZHJhd1RleHR1cmVz
KHByb2dyYW0sIG1fc2NhbGUsIG1fdmlzaWJsZVJlY3QsIGNsaXBSZWN0KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIERyYXcgdGhlIHJlZmxlY3Rpb24gaWYgaXQgZXhpc3RzLgog
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewpAQCAtOTMxLDExICs5MzEs
MTEgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICAgICAgICAgICAgICBtYXNrID0g
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsKIAogICAgICAgICAgICAgICAgIGNv
bnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0s
IG1hc2spOwotICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJS
ZW5kZXJlclN1cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzaywgcHJvZ3JhbSk7
CisgICAgICAgICAgICAgICAgbGF5ZXItPmRyYXdTdXJmYWNlKHByb2dyYW0sIGxheWVyLT5sYXll
clJlbmRlcmVyU3VyZmFjZSgpLT5yZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBtYXNrKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNl
TGF5ZXJQcm9ncmFtKGxheWVyUHJvZ3JhbSwgbGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICAgICAg
ICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJh
d1RyYW5zZm9ybSgpLCBsYXllci0+bWFza0xheWVyKCksIHByb2dyYW0pOworICAgICAgICAgICAg
bGF5ZXItPmRyYXdTdXJmYWNlKHByb2dyYW0sIGxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFjZSgp
LT5kcmF3VHJhbnNmb3JtKCksIGxheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJUaWxlLmNwcAppbmRleCAwNGUxZWQ1MDM1ZDJkNmU3MTI3MTdmYWZlNDBhZDEy
MjNlNjlhMWM5Li43ZTkzMzJkN2NkYThlZTM4M2U0MjNiODVlODA2NTYwODQ0ZTU2NGFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclRpbGUuY3BwCkBAIC0yNyw5ICsyNyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IExheWVyVGlsZTo6TGF5ZXJUaWxlKCkKLSAgICA6IG1fY29udGVudHNEaXJ0eShmYWxzZSkKKyAg
ICA6IG1fc2NhbGUoMCkKKyAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAsIG1fdmlz
aWJsZShmYWxzZSkKLSAgICAsIG1fbmVlZHNSZW5kZXIoZmFsc2UpCiB7CiB9CiAKQEAgLTQxLDE2
ICs0MSwxOSBAQCBMYXllclRpbGU6On5MYXllclRpbGUoKQogCiB2b2lkIExheWVyVGlsZTo6c2V0
Q29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNvbnRlbnRz
KQogeworICAgIG1fc2NhbGUgPSAwOyAvLyBSZXNvbHV0aW9uIGluZGVwZW5kZW50CiAgICAgc2V0
VGV4dHVyZSh0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlRm9yQ29udGVu
dHMoY29udGVudHMpKTsKIH0KIAotdm9pZCBMYXllclRpbGU6OnVwZGF0ZUNvbnRlbnRzKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBjb250ZW50cykKK3ZvaWQgTGF5ZXJU
aWxlOjp1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZl
ciogY29udGVudHMsIGRvdWJsZSBzY2FsZSkKIHsKKyAgICBtX3NjYWxlID0gc2NhbGU7CiAgICAg
c2V0VGV4dHVyZSh0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT51cGRhdGVDb250ZW50
cyhtX3RleHR1cmUsIGNvbnRlbnRzKSk7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlOjpkaXNjYXJkQ29u
dGVudHMoKQogeworICAgIG1fc2NhbGUgPSAwOyAvLyBVbmtub3duIHNjYWxlCiAgICAgc2V0VGV4
dHVyZSgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKaW5kZXggMTNkMzJjOWVjNzA1ZjQzYTFlZTBkMGZk
MTU3YWMxOTM4ODE2YzRmOS4uODNhMzY1NDM1YWY2MGQyOTY1NmRhMDVhNjU4OTliMTc1OWMyM2U4
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyVGlsZS5oCkBAIC00NiwyOSArNDYsMjMgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZSAmJiBtX3RleHR1cmUtPmJ1ZmZl
cigpOyB9CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKik7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciopOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqLCBkb3VibGUgc2NhbGUpOwogICAgIHZv
aWQgZGlzY2FyZENvbnRlbnRzKCk7CiAKLSAgICAvLyBUaGUgY3VycmVudCB0ZXh0dXJlIGlzIGFu
IGFjY3VyYXRlIHByZXZpZXcgb2YgdGhpcyBsYXllciwgYnV0IGEgbW9yZQotICAgIC8vIGRldGFp
bGVkIHRleHR1cmUgY291bGQgYmUgb2J0YWluZWQgYnkgcmVwYWludGluZyB0aGUgbGF5ZXIuIFVz
ZWQgd2hlbgotICAgIC8vIHpvb20gbGV2ZWwgY2hhbmdlcy4KLSAgICB2b2lkIHNldENvbnRlbnRz
RGlydHkoKSB7IG1fY29udGVudHNEaXJ0eSA9IHRydWU7IH0KKyAgICAvLyBSZXR1cm5zIDAgaWYg
Y29udGVudHMgYXJlIHJlc29sdXRpb24gaW5kZXBlbmRlbnQgb3Igc2NhbGUgaXMgc2ltcGx5IHVu
a25vd24uCisgICAgZG91YmxlIGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxl
OyB9CiAKLSAgICBlbnVtIFJlbmRlclN0YXRlIHsgRG9lc05vdE5lZWRSZW5kZXIgPSAwLCBOZWVk
c1JlbmRlciA9IDEsIFJlbmRlclBlbmRpbmcgPSAyIH07Ci0gICAgUmVuZGVyU3RhdGUgcmVuZGVy
U3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTdGF0ZT4obV9uZWVkc1Jl
bmRlcik7IH0KLSAgICBib29sIG5lZWRzUmVuZGVyKCkgeyByZXR1cm4gbV9uZWVkc1JlbmRlciA9
PSBOZWVkc1JlbmRlcjsgfQotICAgIHZvaWQgc2V0TmVlZHNSZW5kZXIoYm9vbCBuZWVkc1JlbmRl
cikgeyBtX25lZWRzUmVuZGVyID0gbmVlZHNSZW5kZXI7IH0KLSAgICB2b2lkIHNldFJlbmRlclBl
bmRpbmcoKSB7IG1fbmVlZHNSZW5kZXIgPSBSZW5kZXJQZW5kaW5nOyB9Ci0gICAgdm9pZCBzZXRS
ZW5kZXJEb25lKCkgeyBtX25lZWRzUmVuZGVyID0gRG9lc05vdE5lZWRSZW5kZXI7IH0KKyAgICAv
LyBUaGUgdGV4dHVyZSBjb250ZW50cyBhcmUgZGlydHkgZHVlIHRvIGFwcGVhcmFuY2Ugb2YgcGFn
ZSBjaGFuZ2luZywgb3IgYSBjaGFuZ2UgaW4gY29udGVudHMgc2NhbGUuCisgICAgdm9pZCBzZXRD
b250ZW50c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOyB9CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRUZXh0dXJlKFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPik7CiAKICAgICAvLyBO
ZXZlciBhc3NpZ24gdG8gbV90ZXh0dXJlIGRpcmVjdGx5LCB1c2Ugc2V0VGV4dHVyZSgpIGFib3Zl
LgogICAgIFJlZlB0cjxMYXllclRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBkb3VibGUgbV9zY2Fs
ZTsKICAgICBib29sIG1fY29udGVudHNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX3Zpc2libGUgOiAx
OwotICAgIHVuc2lnbmVkIG1fbmVlZHNSZW5kZXIgOiAyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxl
ci5jcHAKaW5kZXggNGNiNzQ1NTBkYzc3YjkzZjRmNGI5MTU2ZTljMGMwOTk4NmY5OTdkNy4uZmJl
NTExNzk0MWY1YTQ0OTAwM2M4MjdmZTkwNjdmYzBjMTRhMjQxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIu
Y3BwCkBAIC0yMiw5ICsyMiwxMiBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUaWxlci5oIgogCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNs
dWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJNZXNzYWdlLmgi
CisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgorI2luY2x1ZGUgIkxheWVyVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKICNpbmNsdWRlICJUZXh0dXJlQ2FjaGVD
b21wb3NpdGluZ1RocmVhZC5oIgogCkBAIC0zMiwxMiArMzUsNDkgQEAKICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1TY3JlZW4uaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0
aW5ncy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgX05UT19DUFVfSERSXyhz
bXB4Y2hnLmgpCisKKyNkZWZpbmUgREVCVUdfTEFZRVJfVklTSUJJTElUWSAwIC8vIFNob3cgdmlz
aWJsZSByZWdpb24gb2YgbGF5ZXJzIGFzIGEgdGhpY2sgYm9yZGVyLCBhbmQgcHJpbnQgdmlzaWJs
ZSByZWN0LgorI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgTGF5ZXJWaXNpYmlsaXR5IHsKK3B1YmxpYzoKKyAgICBMYXllclZpc2liaWxpdHkoY29uc3Qg
RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05l
ZWRpbmdSZW5kZXIpCisgICAgICAgIDogbV92aXNpYmxlUmVjdCh2aXNpYmxlUmVjdCkKKyAgICAg
ICAgLCBtX3RpbGVzTmVlZGluZ1JlbmRlcih0aWxlc05lZWRpbmdSZW5kZXIpCisgICAgeworICAg
IH0KKworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJs
ZVJlY3Q7IH0KKyAgICB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJs
ZVJlY3QpIHsgbV92aXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OyB9CisKKyAgICBib29sIG5lZWRz
UmVuZGVyKCkgY29uc3QgeyByZXR1cm4gIW1fdGlsZXNOZWVkaW5nUmVuZGVyLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgdGlsZU5lZWRzUmVuZGVyKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdGlsZXNOZWVkaW5nUmVuZGVyLmNvbnRhaW5zKGluZGV4KTsgfQorICAgIHZv
aWQgbWFya1RpbGVBc1JlbmRlcmVkKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIHsgbV90aWxlc05l
ZWRpbmdSZW5kZXIucmVtb3ZlKGluZGV4KTsgbV90aWxlc1JlbmRlcmVkLmFkZChpbmRleCk7IH0K
KyAgICB2b2lkIHN3YXBUaWxlc05lZWRpbmdSZW5kZXIoSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxl
c05lZWRpbmdSZW5kZXIpIHsgbV90aWxlc05lZWRpbmdSZW5kZXIuc3dhcCh0aWxlc05lZWRpbmdS
ZW5kZXIpOyB9CisKKyAgICB2b2lkIG1lcmdlKExheWVyVmlzaWJpbGl0eSogdmlzaWJpbGl0eSkK
KyAgICB7CisgICAgICAgIGlmICghdmlzaWJpbGl0eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgbV90aWxlc1JlbmRlcmVkLnN3YXAodmlzaWJpbGl0eS0+bV90aWxlc1JlbmRlcmVkKTsK
KyAgICAgICAgZm9yIChIYXNoU2V0PFRpbGVJbmRleD46Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1Jl
bmRlcmVkLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXNSZW5kZXJlZC5lbmQoKTsgKytpdCkKKyAgICAg
ICAgICAgIG1fdGlsZXNOZWVkaW5nUmVuZGVyLnJlbW92ZSgqaXQpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlUmVjdDsKKyAgICBIYXNoU2V0PFRpbGVJbmRleD4g
bV90aWxlc05lZWRpbmdSZW5kZXI7CisgICAgSGFzaFNldDxUaWxlSW5kZXg+IG1fdGlsZXNSZW5k
ZXJlZDsKK307CisKIC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHRoZSB2aWV3cG9ydCBhcyB1c2Vk
IGluIHRleHR1cmUgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMKIC8vIHNsaWdodGx5IGxhcmdlciBz
byB0ZXh0dXJlcyBhcmUgdXBsb2FkZWQgYmVmb3JlIGJlY29taW5nIHJlYWxseSB2aXNpYmxlLgog
Ly8gSW5mbGF0aW9uIGlzIGdyZWF0ZXIgaW4gWSBkaXJlY3Rpb24gKG9uZSBzY3JlZW5mdWwgaW4g
ZWl0aGVyIGRpcmVjdGlvbikgc2luY2UKQEAgLTQ5LDE2ICs4OSwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAvLyBjdXJyZW50IHZpZXdwb3J0IGFzIHZpc2libGUuCiBjb25zdCBGbG9hdFNpemUg
dmlld3BvcnRJbmZsYXRpb24oMS4yZiwgMy4wZik7CiAKLXN0YXRpYyB2b2lkIHRyYW5zZm9ybVBv
aW50KGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtLCBmbG9h
dCogcmVzdWx0KQotewotICAgIC8vIFNxdWFzaCB0aGUgWiBjb29yZGluYXRlIHNvIHRoYXQgbGF5
ZXJzIGFyZW4ndCBjbGlwcGVkIGFnYWluc3QgdGhlIG5lYXIgYW5kCi0gICAgLy8gZmFyIHBsYW5l
LiBOb3RlIHRoYXQgdGhlIHBlcnNwZWN0aXZlIGlzIG1haW50YWluZWQgYXMgd2UncmUgc3RpbGwg
cGFzc2luZwotICAgIC8vIGRvd24gdGhlIFcgY29vcmRpbmF0ZS4KLSAgICByZXN1bHRbMF0gPSB4
ICogbS5tMTEoKSArIHkgKiBtLm0yMSgpICsgbS5tNDEoKTsKLSAgICByZXN1bHRbMV0gPSB4ICog
bS5tMTIoKSArIHkgKiBtLm0yMigpICsgbS5tNDIoKTsKLSAgICByZXN1bHRbMl0gPSAwOwotICAg
IHJlc3VsdFszXSA9IHggKiBtLm0xNCgpICsgeSAqIG0ubTI0KCkgKyBtLm00NCgpOwotfQorLy8g
VGhpcyBpcyBhIHNtYWxsIG9wdGltaXphdGlvbiB0byBjdXQgZG93biBvbiBjYWxscyB0byBvcGVy
YXRvciBuZXcuCisvLyBTaW5jZSB0aGUgY29tcG9zaXRpbmcgdGhyZWFkIG5vcm1hbGx5IHN3YXBz
IGluIG5ldyB2aXNpYmlsaXR5IG9iamVjdHMgbXVjaCBtb3JlCisvLyBvZnRlbiB0aGFuIHRoZSBX
ZWJLaXQgdGhyZWFkIHN3YXBzIHRoZW0gb3V0LCBpdCdzIGxpa2VseSB0aGF0IGl0IHdpbGwgc3dh
cCBvdXQKKy8vIHRoZSBwcmV2aW91cyB2aXNpYmlsaXR5IG9iamVjdCBhbmQgd2UgY2FuIHJldXNl
IHRoYXQuCitzdGF0aWMgTGF5ZXJWaXNpYmlsaXR5KiBzX3NwYXJlVmlzaWJpbGl0eSA9IDA7CiAK
IHN0YXRpYyBJbnRTaXplIGRlZmF1bHRUaWxlU2l6ZSgpCiB7CkBAIC02OCwxMiArMTAzLDEyIEBA
IHN0YXRpYyBJbnRTaXplIGRlZmF1bHRUaWxlU2l6ZSgpCiAKIExheWVyVGlsZXI6OkxheWVyVGls
ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKLSAgICAs
IG1fbmVlZHNSZW5kZXJDb3VudCgwKQogICAgICwgbV9uZWVkc0JhY2tpbmcoZmFsc2UpCiAgICAg
LCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlU2l6
ZSgpKQogICAgICwgbV9jbGVhclRleHR1cmVKb2JzKGZhbHNlKQotICAgICwgbV9jb250ZW50c1Nj
YWxlKDAuMCkKKyAgICAsIG1fZnJvbnRWaXNpYmlsaXR5KDApCisgICAgLCBtX2JhY2tWaXNpYmls
aXR5KDApCiB7CiAgICAgcmVmKCk7IC8vIFRoaXMgcmVmKCkgaXMgbWF0Y2hlZCBieSBhIGRlcmVm
IGluIGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoKTsKIH0KQEAgLTg0LDYgKzExOSw5
IEBAIExheWVyVGlsZXI6On5MYXllclRpbGVyKCkKICAgICAvLyBiZWZvcmUgbm93LiBXZSBjYW4n
dCBjYWxsIGl0IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIG5vCiAgICAgLy8gT3BlbkdMIGNvbnRleHQu
CiAgICAgQVNTRVJUKG1fdGlsZXMuaXNFbXB0eSgpKTsKKworICAgIGRlbGV0ZSBtX2Zyb250Vmlz
aWJpbGl0eTsKKyAgICBkZWxldGUgbV9iYWNrVmlzaWJpbGl0eTsKIH0KIAogdm9pZCBMYXllclRp
bGVyOjpsYXllcldlYktpdFRocmVhZERlc3Ryb3llZCgpCkBAIC0xMTQsMjIgKzE1Miw0MCBAQCB2
b2lkIExheWVyVGlsZXI6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKGRvdWJsZSBzY2Fs
ZSkKIHsKICAgICB1cGRhdGVUaWxlU2l6ZSgpOwogCisgICAgTGF5ZXJWaXNpYmlsaXR5KiBmcm9u
dFZpc2liaWxpdHkgPSB0YWtlRnJvbnRWaXNpYmlsaXR5KCk7CisgICAgaWYgKGZyb250VmlzaWJp
bGl0eSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBkaXJ0eSwgc3RhcnQgZnJlc2guIE90aGVyd2lz
ZSwga2VlcCB0cmFjayBvZiB0aWxlcyByZW5kZXJlZCBzbyBmYXIsIHRvIGF2b2lkIHJlLXJlbmRl
cmluZyB0aGUgc2FtZSBjb250ZW50LgorICAgICAgICBpZiAoIW1fY29udGVudHNEaXJ0eSkKKyAg
ICAgICAgICAgIGZyb250VmlzaWJpbGl0eS0+bWVyZ2UobV9iYWNrVmlzaWJpbGl0eSk7CisgICAg
ICAgIGRlbGV0ZSBtX2JhY2tWaXNpYmlsaXR5OworICAgICAgICBtX2JhY2tWaXNpYmlsaXR5ID0g
ZnJvbnRWaXNpYmlsaXR5OworICAgIH0KKyAgICBib29sIG5lZWRzUmVuZGVyID0gbV9iYWNrVmlz
aWJpbGl0eSAmJiBtX2JhY2tWaXNpYmlsaXR5LT5uZWVkc1JlbmRlcigpOworCiAgICAgLy8gQ2hl
Y2sgaWYgdXBkYXRlIGlzIG5lZWRlZAotICAgIGlmICghbV9jb250ZW50c0RpcnR5ICYmICFuZWVk
c1JlbmRlcigpKQorICAgIGlmICghbV9jb250ZW50c0RpcnR5ICYmICFuZWVkc1JlbmRlcikKICAg
ICAgICAgcmV0dXJuOwogCisjaWYgREVCVUdfTEFZRVJfVklTSUJJTElUWQorICAgIGlmIChtX2Jh
Y2tWaXNpYmlsaXR5ICYmICFtX2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpLmlzRW1wdHko
KSkKKyAgICAgICAgcHJpbnRmKCJMYXllciAweCVwIGxvY2FsIHZpc2libGUgcmVjdCAlc1xuIiwg
bV9sYXllciwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVjdChtX2JhY2tWaXNpYmlsaXR5
LT52aXNpYmxlUmVjdCgpKS50b1N0cmluZygpLmNfc3RyKCkpOworI2VuZGlmCisKICAgICAvLyBU
aGVyZSdzIG5vIHBvaW50IGluIGRyYXdpbmcgY29udGVudHMgYXQgYSBoaWdoZXIgcmVzb2x1dGlv
biBmb3Igc2NhbGUKICAgICAvLyBpbnZhcmlhbnQgbGF5ZXJzLgogICAgIGlmIChtX2xheWVyLT5z
aXplSXNTY2FsZUludmFyaWFudCgpKQotICAgICAgICBzY2FsZSA9IDEuMDsKLQotICAgIGJvb2wg
aXNab29tSm9iID0gZmFsc2U7Ci0gICAgaWYgKHNjYWxlICE9IG1fY29udGVudHNTY2FsZSkgewot
ICAgICAgICAvLyBUaGUgZmlyc3QgdGltZSBhcm91bmQsIGl0IGRvZXMgbm90IGNvdW50IGFzIGEg
em9vbSBqb2IuCi0gICAgICAgIGlmIChtX2NvbnRlbnRzU2NhbGUpCi0gICAgICAgICAgICBpc1pv
b21Kb2IgPSB0cnVlOwotICAgICAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLSAgICB9Cisg
ICAgICAgIHNjYWxlID0gMTsKKworICAgIC8vIFJlbmRlciBvbmx5IHZpc2libGUgdGlsZXMuIE1h
c2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB0aGV5J3JlIG5ldmVyIGNvbnNp
ZGVyZWQKKyAgICAvLyB2aXNpYmxlLiBXb3JrYXJvdW5kIHRoaXMgYnkgYWx3YXlzIHJlbmRlcmlu
ZyB0aGVtIChhIHZlcnkgZmFzdCBvcGVyYXRpb24gd2l0aCB0aGUKKyAgICAvLyBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3NDb250ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4g
cmVmJ2luZyB0aGUgbWFzayBpbWFnZSkuCisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0OworICAg
IGlmIChtX2xheWVyLT5pc01hc2soKSB8fCBtX2xheWVyLT5maWx0ZXJzKCkuc2l6ZSgpKQorICAg
ICAgICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChJbnRQb2ludDo6emVybygpLCBtX2xheWVyLT5i
b3VuZHMoKSk7CisgICAgZWxzZSBpZiAobV9iYWNrVmlzaWJpbGl0eSkKKyAgICAgICAgdmlzaWJs
ZVJlY3QgPSBtX2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpOworICAgIGVsc2UKKyAgICAg
ICAgdmlzaWJsZVJlY3QgPSBGbG9hdFJlY3QoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVj
dChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPmxheWVyVGlsZXJQ
cmVmaWxsUmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QobV9kaXJ0eVJlY3QpOwogICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZTsKQEAgLTE0
MSwxMyArMTk3LDE2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZO
ZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRCb3VuZHNS
ZWN0KGJvdW5kc1JlY3QpOwogICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gYm91bmRzUmVj
dC5zaXplKCk7CiAKLSAgICAgICAgaWYgKHNjYWxlICE9IDEuMCkgeworICAgICAgICBpZiAoc2Nh
bGUgIT0gMSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAg
ICAgICAgICAgbWF0cml4LnNjYWxlKHNjYWxlKTsKIAogICAgICAgICAgICAgZGlydHlSZWN0ID0g
bWF0cml4Lm1hcFJlY3QodW50cmFuc2Zvcm1lZERpcnR5UmVjdCk7CiAgICAgICAgICAgICByZXF1
aXJlZFRleHR1cmVTaXplID0gbWF0cml4Lm1hcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCByZXF1aXJlZFRleHR1cmVTaXplKSkuc2l6ZSgpOwogICAgICAgICAgICAgYm91bmRzUmVjdCA9
IG1hdHJpeC5tYXBSZWN0KHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KTsKKyAgICAgICAgICAgIC8v
IFRoZSB2aXNpYmxlIHJlY3QgaXMgdXNpbmcgdW5zY2FsZWQgY29vcmRpbmF0ZXMgaW4gbW9zdCBj
YXNlcy4KKyAgICAgICAgICAgIGlmIChtX2JhY2tWaXNpYmlsaXR5IHx8IG1fbGF5ZXItPmlzTWFz
aygpIHx8IG1fbGF5ZXItPmZpbHRlcnMoKS5zaXplKCkpCisgICAgICAgICAgICAgICAgdmlzaWJs
ZVJlY3QgPSBtYXRyaXgubWFwUmVjdCh2aXNpYmxlUmVjdCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX3BlbmRpbmdUZXh0dXJlU2l6ZSkKQEAgLTE2
Myw4NiArMjIyLDU3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZO
ZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICBkaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpOwogICAgIH0KIAotICAgIGJvb2wgZGlkUmVz
aXplID0gZmFsc2U7CiAgICAgSW50UmVjdCBwcmV2aW91c1RleHR1cmVSZWN0KEludFBvaW50Ojp6
ZXJvKCksIG1fcGVuZGluZ1RleHR1cmVTaXplKTsKICAgICBpZiAobV9wZW5kaW5nVGV4dHVyZVNp
emUgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkgewotICAgICAgICBkaWRSZXNpemUgPSB0cnVlOwog
ICAgICAgICBtX3BlbmRpbmdUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4dHVyZVNpemU7CiAgICAg
ICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6cmVzaXplQ29udGVudHMobV9wZW5kaW5nVGV4
dHVyZVNpemUpKTsKICAgICB9CiAKLSAgICBJbnRSZWN0IHJlY3RGb3JPbmVUaWxlKEludFBvaW50
Ojp6ZXJvKCksIHRpbGVTaXplKCkpOwotICAgIGJvb2wgd2FzT25lVGlsZSA9IHJlY3RGb3JPbmVU
aWxlLmNvbnRhaW5zKHByZXZpb3VzVGV4dHVyZVJlY3QpOwotICAgIGJvb2wgaXNPbmVUaWxlID0g
cmVjdEZvck9uZVRpbGUuY29udGFpbnMoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3BlbmRp
bmdUZXh0dXJlU2l6ZSkpOworICAgIGJvb2wgY29udGVudHNEaXJ0eSA9IG1fY29udGVudHNEaXJ0
eTsKKyAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBn
b2luZyB0byByZS1yZW5kZXIgYWxsIHRoZSBjb3ZlcmVkIHRpbGVzLCBtYXJrIHRob3NlIG5vdCBj
b3ZlcmVkIGFzIGRpcnR5LgorICAgICAgICBpZiAoIXZpc2libGVSZWN0LmNvbnRhaW5zKGRpcnR5
UmVjdCkpCisgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpcnR5Q29udGVu
dHMoZGlydHlSZWN0KSk7CisgICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgICAg
ICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIH0KIAotICAgIEhhc2hTZXQ8VGlsZUlu
ZGV4PiByZW5kZXJKb2JzOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGls
ZXNNdXRleCk7Ci0KLSAgICAgICAgLy8gQWRkIHByZWZpbGwgam9icwotICAgICAgICBpZiAoIWRp
cnR5UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+bGF5ZXJUaWxlclByZWZpbGxSZWN0
KCk7Ci0gICAgICAgICAgICByZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICAgICAg
VGlsZUluZGV4IGJlZ2luID0gaW5kZXhPZlRpbGUocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAg
ICAgICAgICAgIFRpbGVJbmRleCBlbmQgPSBpbmRleE9mVGlsZShyZWN0Lm1heFhNYXhZQ29ybmVy
KCkgKyB0aWxlU2l6ZSgpIC0gSW50U2l6ZSgxLCAxKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBiZWdpbi5pKCk7IGkgPCBlbmQuaSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBiZWdpbi5qKCk7IGogPCBlbmQuaigpOyArK2opCi0gICAgICAgICAg
ICAgICAgICAgIHJlbmRlckpvYnMuYWRkKFRpbGVJbmRleChpLCBqKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAvLyBJZiB3ZSBuZWVkIGRpc3BsYXkgYmVjYXVzZSB3ZSBubyBsb25n
ZXIgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGR1ZSB0byB0ZXh0dXJlIHNpemUgYmVjb21pbmcgMCB4
IDAsCisgICAgLy8gb3IgaWYgd2UncmUgcmUtcmVuZGVyaW5nIHRoZSB3aG9sZSB0aGluZyBhbnl3
YXksIGNsZWFyIG9sZCB0ZXh0dXJlIGpvYnMuCisgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUu
aXNFbXB0eSgpIHx8IGRpcnR5UmVjdCA9PSBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlcXVp
cmVkVGV4dHVyZVNpemUpKQorICAgICAgICBjbGVhclRleHR1cmVKb2JzKCk7CiAKLSAgICAgICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5
OwotICAgICAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCppdCkudmFsdWU7CisgICAgaWYgKHZp
c2libGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxUaWxl
SW5kZXg+IHJlbmRlckpvYnM7CisgICAgVGlsZUluZGV4IGZpcnN0OworICAgIFRpbGVJbmRleCBs
YXN0OworICAgIGlmIChtX2xheWVyLT5jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKSB7
CisgICAgICAgIC8vIFJlc29sdXRpb24gaW5kZXBlbmRlbnQgbGF5ZXJzIGhhdmUgYWxsIHRoZSBu
ZWVkZWQgZGF0YSBpbiB0aGUgZmlyc3QgdGlsZS4KKyAgICAgICAgZmlyc3QgPSBsYXN0ID0gVGls
ZUluZGV4KDAsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpcnN0ID0gaW5kZXhPZlRpbGUo
Zmxvb3JlZEludFBvaW50KHZpc2libGVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAgICAgICAg
bGFzdCA9IGluZGV4T2ZUaWxlKGNlaWxlZEludFBvaW50KHZpc2libGVSZWN0Lm1heFhNYXhZQ29y
bmVyKCkpKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3QuaSgpOyBpIDw9IGxh
c3QuaSgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZmlyc3QuaigpOyBqIDw9
IGxhc3QuaigpOyArK2opIHsKKyAgICAgICAgICAgIFRpbGVJbmRleCBpbmRleChpLCBqKTsKICAg
ICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZShpbmRleCwgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSk7CiAgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAodGlsZS0+bmVlZHNSZW5kZXIo
KSkgewotICAgICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlclBlbmRpbmcoKTsKLSAgICAgICAg
ICAgICAgICAtLW1fbmVlZHNSZW5kZXJDb3VudDsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9u
ZWVkc1JlbmRlckNvdW50ID49IDApOworICAgICAgICAgICAgaWYgKG1fYmFja1Zpc2liaWxpdHkg
JiYgbV9iYWNrVmlzaWJpbGl0eS0+dGlsZU5lZWRzUmVuZGVyKGluZGV4KSkgeworI2lmIERFQlVH
X0xBWUVSX1ZJU0lCSUxJVFkKKyAgICAgICAgICAgICAgICBwcmludGYoIlRpbGUgYXQgKCVkLCAl
ZCkgbmVlZHMgcmVuZGVyXG4iLCBpbmRleC5pKCksIGluZGV4LmooKSk7CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICByZW5kZXJKb2JzLmFkZChpbmRleCk7CisgICAgICAgICAgICAgICAgbV9iYWNr
VmlzaWJpbGl0eS0+bWFya1RpbGVBc1JlbmRlcmVkKGluZGV4KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY29udGVudHNEaXJ0eSAmJiBkaXJ0eVJlY3QuaW50ZXJzZWN0cyh0aWxlUmVjdCkpCiAg
ICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChtX2NvbnRlbnRzRGlydHkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGxvY2FsRGly
dHlSZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxEaXJ0eVJlY3QuaW50ZXJz
ZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxEaXJ0eVJlY3QuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8v
IFJlbmRlciBvbmx5IHZpc2libGUgdGlsZXMuIE1hc2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwgY2Fz
ZSwgYmVjYXVzZSB0aGV5J3JlIG5ldmVyIGNvbnNpZGVyZWQKLSAgICAgICAgICAgICAgICAvLyB2
aXNpYmxlLiBXb3JrYXJvdW5kIHRoaXMgYnkgYWx3YXlzIHJlbmRlcmluZyB0aGVtIChhIHZlcnkg
ZmFzdCBvcGVyYXRpb24gd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3NDb250ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4gcmVm
J2luZyB0aGUgbWFzayBpbWFnZSkuCi0gICAgICAgICAgICAgICAgaWYgKHRpbGUtPmlzVmlzaWJs
ZSgpIHx8IG1fbGF5ZXItPmlzTWFzaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlckpv
YnMuYWRkKGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGlzY2FyZC9kaXJ0eSB0aGUgdGls
ZSBpZiBmb3Igc29tZSByZWFzb24gKGUuZy4gcHJlZmlsbCkgYSByZW5kZXIgam9iIHdhcyBhbHJl
YWR5IGFkZGVkLgotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJKb2JzLmNvbnRhaW5zKGluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
dm9pZCBjaGVja2VyYm9hcmRpbmcgdW5sZXNzIHRoZSBsYXllciBpcyByZXNpemVkLiBXaGVuCi0g
ICAgICAgICAgICAgICAgLy8gcmVzaXplZCwgdGhlIGNvbnRlbnRzIGFyZSBsaWtlbHkgdG8gY2hh
bmdlIGFwcGVhcmFuY2UsIGZvcgotICAgICAgICAgICAgICAgIC8vIGV4YW1wbGUgZHVlIHRvIGFz
cGVjdCByYXRpbyBjaGFuZ2UuIEhvd2V2ZXIsIGlmIGl0IGlzIGEKLSAgICAgICAgICAgICAgICAv
LyByZXNpemUgZHVlIHRvIHpvb21pbmcsIHRoZSBhc3BlY3QgcmF0aW8gYW5kIGNvbnRlbnQgd2ls
bAotICAgICAgICAgICAgICAgIC8vIHN0YXkgdGhlIHNhbWUsIGFuZCB3ZSBjYW4ga2VlcCB0aGUg
b2xkIHRleHR1cmUgY29udGVudCBhcyBhCi0gICAgICAgICAgICAgICAgLy8gcHJldmlldy4KLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogdGhlIHpvb20gcHJldmlldyBvbmx5IHdvcmtzIGlmIHdl
IGRvbid0IHJlLXRpbGUgdGhlCi0gICAgICAgICAgICAgICAgLy8gbGF5ZXIuIFdlIG5lZWQgdG8g
c3RvcmUgdGV4dHVyZSBjb29yZGluYXRlcyBpbgotICAgICAgICAgICAgICAgIC8vIFdlYkNvcmU6
OkxheWVyVGV4dHVyZSB0byBiZSBhYmxlIHRvIGZpeCB0aGF0LgotICAgICAgICAgICAgICAgIGlm
IChkaWRSZXNpemUgJiYgIShpc1pvb21Kb2IgJiYgd2FzT25lVGlsZSAmJiBpc09uZVRpbGUpKQot
ICAgICAgICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpc2NhcmRDb250
ZW50cyh0aWxlUmVjdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpkaXJ0eUNvbnRlbnRzKHRpbGVSZWN0KSk7Ci0g
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBJZiB3ZSBuZWVkIGRpc3Bs
YXkgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGR1ZSB0byB0ZXh0
dXJlIHNpemUgYmVjb21pbmcgMCB4IDAsCi0gICAgLy8gb3IgaWYgd2UncmUgcmUtcmVuZGVyaW5n
IHRoZSB3aG9sZSB0aGluZyBhbnl3YXksIGNsZWFyIG9sZCB0ZXh0dXJlIGpvYnMuCi0gICAgaWYg
KHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgpIHx8IGRpcnR5UmVjdCA9PSBJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpKQotICAgICAgICBjbGVhclRleHR1
cmVKb2JzKCk7Ci0KICAgICBpZiAocmVuZGVySm9icy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjY0LDkgKzI5NCw2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNv
bnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotCi0gICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3QgPSBG
bG9hdFJlY3QoKTsKIH0KIAogQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIq
IExheWVyVGlsZXI6OmNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMzIwLDYg
KzM0NywyMiBAQCB2b2lkIExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhM
YXllckNvbXBvc2l0aW5nVGhyZWFkKikKICAgICBtX3BlbmRpbmdUZXh0dXJlSm9icy5jbGVhcigp
OwogfQogCitMYXllclZpc2liaWxpdHkqIExheWVyVGlsZXI6OnN3YXBGcm9udFZpc2liaWxpdHko
TGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5KQoreworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PExheWVyVmlzaWJpbGl0eSo+KF9zbXBfeGNoZyhyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oJm1fZnJvbnRWaXNpYmlsaXR5KSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4odmlzaWJp
bGl0eSkpKTsKK30KKwordm9pZCBMYXllclRpbGVyOjpzZXRGcm9udFZpc2liaWxpdHkoY29uc3Qg
RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdS
ZW5kZXIpCit7CisgICAgTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5ID0gc19zcGFyZVZpc2li
aWxpdHk7CisgICAgaWYgKHZpc2liaWxpdHkpIHsKKyAgICAgICAgdmlzaWJpbGl0eS0+c2V0Vmlz
aWJsZVJlY3QodmlzaWJsZVJlY3QpOworICAgICAgICB2aXNpYmlsaXR5LT5zd2FwVGlsZXNOZWVk
aW5nUmVuZGVyKHRpbGVzTmVlZGluZ1JlbmRlcik7CisgICAgfSBlbHNlCisgICAgICAgIHZpc2li
aWxpdHkgPSBuZXcgTGF5ZXJWaXNpYmlsaXR5KHZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5k
ZXIpOworICAgIHNfc3BhcmVWaXNpYmlsaXR5ID0gc3dhcEZyb250VmlzaWJpbGl0eSh2aXNpYmls
aXR5KTsKK30KKwogdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiB7CiAgICAgLy8gRm9yIHZpc2libGUg
bGF5ZXJzLCB3ZSBoYW5kbGUgdGhlIHRpbGUtbGV2ZWwgdmlzaWJpbGl0eQpAQCAtMzI3LDI0ICsz
NzAsMTEgQEAgdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiAgICAgaWYgKHZpc2libGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHsKLSAgICAgICAgLy8gQWxsIHRpbGVzIGFyZSBpbnZpc2libGUgbm93
LgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLQotICAgICAgICBm
b3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7
Ci0gICAgICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKLSAgICAgICAgICAg
IHRpbGUtPnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHRpbGUtPm5lZWRzUmVu
ZGVyKCkpIHsKLSAgICAgICAgICAgICAgICB0aWxlLT5zZXROZWVkc1JlbmRlcihmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KKyAgICBIYXNoU2V0PFRpbGVJbmRleD4gZW1wdHlUaWxlU2V0OworICAgIHNldEZyb250
VmlzaWJpbGl0eShGbG9hdFJlY3QoKSwgZW1wdHlUaWxlU2V0KTsKIH0KIAotdm9pZCBMYXllclRp
bGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQordm9p
ZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqIGxheWVyKQogewogICAgIFRpbGVKb2JzTWFwIHRpbGVKb2JzTWFwOwogICAgIERlcXVlPFRl
eHR1cmVKb2I+Ojpjb25zdF9pdGVyYXRvciB0ZXh0dXJlSm9iSXRlckVuZCA9IG1fdGV4dHVyZUpv
YnMuZW5kKCk7CkBAIC0zNjAsMTIgKzM5MCwxMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9hZFRl
eHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAgICAgICAgICBpZiAo
b3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4ueSgp
ID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7CiAg
ICAgICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwogICAgICAgICAgICAgbV90aWxlcy5h
ZGQodGlsZUpvYnNJdGVyLT5rZXksIHRpbGUpOwogICAgICAgICB9CiAKLSAgICAgICAgcGVyZm9y
bVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOworICAgICAgICBwZXJmb3JtVGls
ZUpvYihsYXllciwgdGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOwogICAgIH0KIAogICAgIG1f
dGV4dHVyZUpvYnMuY2xlYXIoKTsKQEAgLTM4MCw2ICs0MDksMTUgQEAgdm9pZCBMYXllclRpbGVy
Ojpwcm9jZXNzVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRpbGVKb2JzTWFwJiB0
aWxlSm9ic00KIAogICAgICAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSBwZW5kaW5nVGV4dHVy
ZVNpemU7CiAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGpvYi5tX3R5cGUgPT0gVGV4
dHVyZUpvYjo6RGlydHlDb250ZW50cykgeworICAgICAgICBUaWxlSW5kZXggZmlyc3QgPSBpbmRl
eE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgICAgIFRpbGVJ
bmRleCBsYXN0ID0gaW5kZXhPZlRpbGUoam9iLm1fZGlydHlSZWN0Lm1heFhNYXhZQ29ybmVyKCkp
OworICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBp
dCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgg
PSAoKml0KS5rZXk7CisgICAgICAgICAgICBpZiAoaW5kZXguaSgpID49IGZpcnN0LmkoKSAmJiBp
bmRleC5qKCkgPj0gZmlyc3QuaigpICYmIGluZGV4LmkoKSA8PSBsYXN0LmkoKSAmJiBpbmRleC5q
KCkgPD0gbGFzdC5qKCkpCisgICAgICAgICAgICAgICAgKCppdCkudmFsdWUtPnNldENvbnRlbnRz
RGlydHkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYWRkVGls
ZUpvYihpbmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSksIGpvYiwg
dGlsZUpvYnNNYXApOwpAQCAtMzk0LDEwICs0MzIsNiBAQCB2b2lkIExheWVyVGlsZXI6OmFkZFRp
bGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxl
SgogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
SW4gdGhpcyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5tX3R5
cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQotICAgICAgICByZXR1cm47
Ci0KICAgICAvLyBPdmVycmlkZSB0aGUgcHJldmlvdXMgam9iLgogICAgIGlmIChyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fY29udGVudHMpCiAgICAg
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5tX2NvbnRlbnRzKTsKQEAgLTQwNSwxNTYgKzQzOSwxNzcgQEAgdm9p
ZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRl
eHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpvYjsK
IH0KIAotdm9pZCBMYXllclRpbGVyOjpwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqIHRpbGUsIGNv
bnN0IFRleHR1cmVKb2ImIGpvYikKK3ZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4dHVy
ZUpvYiYgam9iKQogewogICAgIHN3aXRjaCAoam9iLm1fdHlwZSkgewogICAgIGNhc2UgVGV4dHVy
ZUpvYjo6U2V0Q29udGVudHM6CiAgICAgICAgIHRpbGUtPnNldENvbnRlbnRzKGpvYi5tX2NvbnRl
bnRzKTsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNN
dXRleCk7Ci0gICAgICAgICAgICBpZiAodGlsZS0+cmVuZGVyU3RhdGUoKSA9PSBMYXllclRpbGU6
OlJlbmRlclBlbmRpbmcpCi0gICAgICAgICAgICAgICAgdGlsZS0+c2V0UmVuZGVyRG9uZSgpOwot
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFRleHR1cmVKb2I6OlVwZGF0ZUNv
bnRlbnRzOgotICAgICAgICB0aWxlLT51cGRhdGVDb250ZW50cyhqb2IubV9jb250ZW50cyk7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwot
ICAgICAgICAgICAgaWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpSZW5kZXJQ
ZW5kaW5nKQotICAgICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlckRvbmUoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHM6
Ci0gICAgICAgIHRpbGUtPmRpc2NhcmRDb250ZW50cygpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzOgotICAgICAgICB0aWxlLT5zZXRDb250ZW50
c0RpcnR5KCk7CisgICAgICAgIHRpbGUtPnVwZGF0ZUNvbnRlbnRzKGpvYi5tX2NvbnRlbnRzLCBs
YXllci0+Y29udGVudHNTY2FsZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVGV4dHVy
ZUpvYjo6VW5rbm93bjoKICAgICBjYXNlIFRleHR1cmVKb2I6OlJlc2l6ZUNvbnRlbnRzOgorICAg
IGNhc2UgVGV4dHVyZUpvYjo6RGlydHlDb250ZW50czoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLWJvb2wgTGF5ZXJUaWxlcjo6ZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
bGF5ZXIsIGRvdWJsZSBzY2FsZSwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3QsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpCitib29sIExheWVyVGlsZXI6OmRyYXdUaWxl
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBMYXllclRpbGUqIHRpbGUsIGNvbnN0IFRp
bGVJbmRleCYgaW5kZXgsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0Q2xpcCkKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJh
bnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1s0ICog
NF07Ci0KLSAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChpbmRleCk7Ci0gICAgaWYg
KCF0aWxlKSB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwotICAg
ICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwotICAgICAgICBtX3RpbGVzLmFkZChpbmRleCwg
dGlsZSk7CisgICAgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1KTsKKyAgICBib29sIHNob3VsZERy
YXdUaWxlID0gZHN0LmludGVyc2VjdHMoZHN0Q2xpcCkgJiYgZ2xvYmFsQWxwaGE7CisKKyAgICAv
LyBFdmVuIGlmIHRoZSB0aWxlIGhhcyB3cm9uZyBzY2FsZSwgaXQgY2FuIGJlIHVzZWQgYXMgYSAi
cHJldmlldyIgaWYgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVybGFwIHdpdGggb3RoZXIgdGlsZXMu
CisgICAgYm9vbCB0aWxlSGFzQ29ycmVjdFNjYWxlID0gdGlsZS0+Y29udGVudHNTY2FsZSgpID09
IDAuMCB8fCB0aWxlLT5jb250ZW50c1NjYWxlKCkgPT0gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKTsK
KyAgICBpZiAoIXRpbGVIYXNDb3JyZWN0U2NhbGUpCisgICAgICAgIHNob3VsZERyYXdUaWxlID0g
c2hvdWxkRHJhd1RpbGUgJiYgKG1fdGlsZXMuc2l6ZSgpID09IDEgJiYgIWluZGV4LmkoKSAmJiAh
aW5kZXguaigpKTsKKworICAgIGlmICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKKyAgICAgICAgTGF5
ZXJUZXh0dXJlKiB0ZXh0dXJlID0gdGlsZS0+dGV4dHVyZSgpOworICAgICAgICB0ZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7CisKKyAgICAg
ICAgaWYgKHNob3VsZERyYXdUaWxlKSB7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBkcmF3VHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGRy
YXdUcmFuc2Zvcm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOworICAgICAgICAgICAgaWYg
KGxheWVyLT5jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKQorICAgICAgICAgICAgICAg
IGRyYXdUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGRzdC53aWR0aCgpIC8gbV9yZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCksIGRzdC5oZWlnaHQoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgICAgICBlbHNlIGlmICh0aWxlLT5jb250ZW50c1NjYWxlKCkpCisg
ICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZSgxIC8gdGlsZS0+Y29udGVudHNTY2Fs
ZSgpKTsKKyAgICAgICAgICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKKyAg
ICAgICAgICAgICAgICBkcmF3VHJhbnNmb3JtLnNjYWxlKDEgLyBzY2FsZSk7CisgICAgICAgICAg
ICBibGl0VG9CdWZmZXIoMCwgdGV4dHVyZS0+YnVmZmVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Qmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSks
CisgICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VP
dmVyLCBnbG9iYWxBbHBoYSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBXZSBhcHBseSB0
aGUgdHJhbnNmb3JtYXRpb24gYnkgaGFuZCwgc2luY2Ugd2UgbmVlZCB0aGUgeiBjb29yZGluYXRl
Ci0gICAgLy8gYXMgd2VsbCAodG8gZG8gcGVyc3BlY3RpdmUgY29ycmVjdCB0ZXh0dXJpbmcpIGFu
ZCB3ZSBkb24ndCBuZWVkCi0gICAgLy8gdG8gZGl2aWRlIGJ5IHcgYnkgaGFuZCwgdGhlIEdQVSB3
aWxsIGRvIHRoYXQgZm9yIHVzCi0gICAgdHJhbnNmb3JtUG9pbnQoZHN0LngoKSwgZHN0LnkoKSwg
ZHJhd1RyYW5zZm9ybSwgJnZlcnRpY2VzWzBdKTsKLSAgICB0cmFuc2Zvcm1Qb2ludChkc3QueCgp
LCBkc3QubWF4WSgpLCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbNF0pOwotICAgIHRyYW5zZm9y
bVBvaW50KGRzdC5tYXhYKCksIGRzdC5tYXhZKCksIGRyYXdUcmFuc2Zvcm0sICZ2ZXJ0aWNlc1s4
XSk7Ci0gICAgdHJhbnNmb3JtUG9pbnQoZHN0Lm1heFgoKSwgZHN0LnkoKSwgZHJhd1RyYW5zZm9y
bSwgJnZlcnRpY2VzWzEyXSk7Ci0KLSAgICAvLyBJbmZsYXRlIHRoZSByZWN0IHNvbWV3aGF0IHRv
IGF0dGVtcHQgdG8gbWFrZSB0ZXh0dXJlcyByZW5kZXIgYmVmb3JlIHRoZXkgc2hvdwotICAgIC8v
IHVwIG9uIHNjcmVlbi4gQXMgeW91IGNhbiBzZWUsIHRoZSByZWN0IGlzIGluIG5vcm1hbGl6ZWQg
ZGV2aWNlIGNvb3JkaW5hdGVzLgotICAgIEZsb2F0UmVjdCByZWN0KC12aWV3cG9ydEluZmxhdGlv
bi53aWR0aCgpLCAtdmlld3BvcnRJbmZsYXRpb24uaGVpZ2h0KCksIDIqdmlld3BvcnRJbmZsYXRp
b24ud2lkdGgoKSwgMip2aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSk7Ci0gICAgRmxvYXRRdWFk
IHF1YWQoCi0gICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbMF0gLyB2ZXJ0aWNlc1szXSwgdmVy
dGljZXNbMV0gLyB2ZXJ0aWNlc1szXSksCi0gICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbNF0g
LyB2ZXJ0aWNlc1s3XSwgdmVydGljZXNbNV0gLyB2ZXJ0aWNlc1s3XSksCi0gICAgICAgIEZsb2F0
UG9pbnQodmVydGljZXNbOF0gLyB2ZXJ0aWNlc1sxMV0sIHZlcnRpY2VzWzldIC8gdmVydGljZXNb
MTFdKSwKLSAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1sxMl0gLyB2ZXJ0aWNlc1sxNV0sIHZl
cnRpY2VzWzEzXSAvIHZlcnRpY2VzWzE1XSkpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9
IHF1YWQuYm91bmRpbmdCb3goKTsKLSAgICBib29sIHZpc2libGUgPSBib3VuZGluZ0JveC5pbnRl
cnNlY3RzKHJlY3QpOwotICAgIEZsb2F0UmVjdCB2aWV3cG9ydCgtMSwgLTEsIDIsIDIpOwotICAg
IHVuc2lnbmVkIGNoYXIgZ2xvYmFsQWxwaGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihs
YXllci0+ZHJhd09wYWNpdHkoKSAqIDI1NS4wZik7Ci0gICAgYm9vbCBzaG91bGREcmF3VGlsZSA9
IGJvdW5kaW5nQm94LmludGVyc2VjdHModmlld3BvcnQpICYmIGdsb2JhbEFscGhhOwotCi0gICAg
Ym9vbCB3YXNWaXNpYmxlID0gdGlsZS0+aXNWaXNpYmxlKCk7Ci0KLSAgICBpZiAodmlzaWJsZSkg
ewotICAgICAgICBpZiAodGlsZS0+aGFzVGV4dHVyZSgpKSB7Ci0gICAgICAgICAgICBMYXllclRl
eHR1cmUqIHRleHR1cmUgPSB0aWxlLT50ZXh0dXJlKCk7Ci0gICAgICAgICAgICB0ZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChzaG91bGREcmF3VGlsZSkgewotICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zv
cm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOwotICAgICAgICAgICAgICAgIGlmIChsYXll
ci0+Y29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ZHJhd1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oZHN0LndpZHRoKCkgLyBtX3JlcXVpcmVkVGV4
dHVyZVNpemUud2lkdGgoKSwgZHN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRyYXdU
cmFuc2Zvcm0uc2NhbGUoMS4wIC8gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKSk7Ci0gICAgICAgICAg
ICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZShsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSA/
IDEuMCAvIHNjYWxlIDogMS4wKTsKLSAgICAgICAgICAgICAgICBibGl0VG9CdWZmZXIoMCwgdGV4
dHVyZS0+YnVmZmVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlRy
YW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSksCi0gICAgICAgICAgICAgICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3ZlciwgZ2xvYmFsQWxwaGEp
OwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSB0
aWxlIG5lZWRzIHRvIGJlIChyZS0pcmVuZGVyZWQuCisgICAgcmV0dXJuICF0aWxlLT5pc0RpcnR5
KCkgJiYgdGlsZUhhc0NvcnJlY3RTY2FsZTsKK30KIAotICAgICAgICBpZiAodGlsZS0+aXNEaXJ0
eSgpKSB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLSAg
ICAgICAgICAgIHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgICAgICAgICBpZiAodGls
ZS0+cmVuZGVyU3RhdGUoKSA9PSBMYXllclRpbGU6OkRvZXNOb3ROZWVkUmVuZGVyKSB7Ci0gICAg
ICAgICAgICAgICAgdGlsZS0+c2V0TmVlZHNSZW5kZXIodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
KyttX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQorc3RhdGljIEZsb2F0UmVjdCBpbmZsYXRlVmlld3BvcnQoY29uc3Qg
RmxvYXRSZWN0JiB2aWV3cG9ydCkKK3sKKyAgICAvLyBFdmVyeXRoaW5nIGlzIGV4cHJlc3NlZCBp
biBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcy4KKyAgICBGbG9hdFNpemUgdmlld3BvcnRT
aXplKHZpZXdwb3J0LnNpemUoKSk7CisgICAgdmlld3BvcnRTaXplLnNjYWxlKHZpZXdwb3J0SW5m
bGF0aW9uLndpZHRoKCksIHZpZXdwb3J0SW5mbGF0aW9uLmhlaWdodCgpKTsKIAotICAgICAgICBp
ZiAoIXdhc1Zpc2libGUpIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVz
TXV0ZXgpOwotICAgICAgICAgICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAod2FzVmlzaWJsZSkgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlc011dGV4KTsKLSAgICAgICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKLSAg
ICAgICAgaWYgKHRpbGUtPm5lZWRzUmVuZGVyKCkpIHsKLSAgICAgICAgICAgIHRpbGUtPnNldE5l
ZWRzUmVuZGVyKGZhbHNlKTsKLSAgICAgICAgICAgIC0tbV9uZWVkc1JlbmRlckNvdW50OwotICAg
ICAgICAgICAgQVNTRVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBGbG9hdFNpemUgdmlld3BvcnRPZmZzZXQodmlld3BvcnQuc2l6ZSgpKTsKKyAgICB2
aWV3cG9ydE9mZnNldC5zY2FsZSh2aWV3cG9ydEluZmxhdGlvbi53aWR0aCgpIC0gMSwgdmlld3Bv
cnRJbmZsYXRpb24uaGVpZ2h0KCkgLSAxKTsKKyAgICB2aWV3cG9ydE9mZnNldC5zY2FsZSgwLjUp
OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBGbG9hdFJlY3Qodmlld3BvcnQubG9j
YXRpb24oKSAtIHZpZXdwb3J0T2Zmc2V0LCB2aWV3cG9ydFNpemUpOwogfQogCi12b2lkIExheWVy
VGlsZXI6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91Ymxl
IHNjYWxlLCBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCit2b2lkIExheWVyVGlsZXI6OmRy
YXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQcm9n
cmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIEZs
b2F0U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7Ci0KLSAgICBpZiAobGF5ZXItPnNpemVJ
c1NjYWxlSW52YXJpYW50KCkpIHsKLSAgICAgICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy53aWR0
aCgpIC8gc2NhbGUpOwotICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSAv
IHNjYWxlKTsKKyAgICBGbG9hdFJlY3QgYm91bmRzUmVjdCgtbGF5ZXItPm9yaWdpbigpLCBsYXll
ci0+Ym91bmRzKCkpOworICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKKyAg
ICAgICAgYm91bmRzUmVjdC5zY2FsZSgxIC8gc2NhbGUpOworCisgICAgRmxvYXRSZWN0IGluZmxh
dGVkVmlld3BvcnQgPSBpbmZsYXRlVmlld3BvcnQoY2xpcFJlY3QpOworCisgICAgLy8gVW5wcm9q
ZWN0aW5nIHBvaW50cyBvdXRzaWRlIHRoZSB0cmFuc2Zvcm1lZCBib3VuZHMgZ2l2ZXMgcG9vciBu
dW1lcmljYWwgc3RhYmlsaXR5IGlmIHRoZXJlJ3MgYSBwZXJzcGVjdGl2ZSBlZmZlY3QsCisgICAg
Ly8gc28gdW5wcm9qZWN0IHRoZSBjbGlwcGVkIHRyYW5zZm9ybWVkIGJvdW5kcyBpbnN0ZWFkLgor
ICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiBjbGlwUG9seWdvbiA9IGludGVyc2VjdFBvbHlnb25X
aXRoUmVjdChsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKSwgY2xpcFJlY3QpOworICAgIGlmIChj
bGlwUG9seWdvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhlIExheWVyUmVuZGVyZXIgZmln
dXJlcyB3ZSdyZSB2aXNpYmxlLCBvciBpdCB3b3VsZG4ndCBoYXZlIGNhbGxlZCBpbnRvIHRoaXMg
bWV0aG9kLCBidXQgd2UgYmVnIHRvIGRpZmZlci4KKyAgICAgICAgbGF5ZXItPnNldFZpc2libGUo
ZmFsc2UpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBuZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZExheWVyQ2xpcFJlY3QgPSBGbG9hdFJl
Y3QoMCwgMCwgMSwgMSk7CisgICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRMYXllclZpc2libGVSZWN0
ID0gRmxvYXRSZWN0KDAsIDAsIDEsIDEpOwogCisgICAgaWYgKGNsaXBQb2x5Z29uICE9IGxheWVy
LT50cmFuc2Zvcm1lZEJvdW5kcygpKSB7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiBu
b3JtYWxpemVkTGF5ZXJDbGlwUG9seWdvbiA9IHVucHJvamVjdChsYXllciwgY2xpcFBvbHlnb24p
OworICAgICAgICBub3JtYWxpemVkTGF5ZXJDbGlwUmVjdC5pbnRlcnNlY3QoYm91bmRpbmdCb3go
bm9ybWFsaXplZExheWVyQ2xpcFBvbHlnb24pKTsKKworICAgICAgICBWZWN0b3I8RmxvYXRQb2lu
dCwgND4gdmlzaWJsZVBvbHlnb24gPSBpbnRlcnNlY3RQb2x5Z29uV2l0aFJlY3QobGF5ZXItPnRy
YW5zZm9ybWVkQm91bmRzKCksIGluZmxhdGVkVmlld3BvcnQpOworICAgICAgICBWZWN0b3I8Rmxv
YXRQb2ludCwgND4gbm9ybWFsaXplZExheWVyVmlzaWJsZVBvbHlnb24gPSB1bnByb2plY3QobGF5
ZXIsIHZpc2libGVQb2x5Z29uKTsKKyAgICAgICAgbm9ybWFsaXplZExheWVyVmlzaWJsZVJlY3Qu
aW50ZXJzZWN0KGJvdW5kaW5nQm94KG5vcm1hbGl6ZWRMYXllclZpc2libGVQb2x5Z29uKSk7Cisg
ICAgfQorCisgICAgRmxvYXRTaXplIHRpbGVTaXplOworICAgIEZsb2F0UmVjdCBkc3RDbGlwOwor
ICAgIFRpbGVJbmRleCBmaXJzdDsKKyAgICBUaWxlSW5kZXggbGFzdDsKICAgICBpZiAobGF5ZXIt
PmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKLSAgICAgICAgLy8gUmVzb2x1dGlv
biBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBkYXRhIGluIHRoZSBmaXJz
dCB0aWxlIGFuZCBhbGwgdGhlIG90aGVycyBhcmUgdXNlbGVzcy4KLSAgICAgICAgRmxvYXRSZWN0
IGRzdCgtYm91bmRzLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMuaGVpZ2h0KCkgLyAyLjAsIGJvdW5k
cy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwotICAgICAgICBuZWVkc0Rpc3BsYXkgPSBkcmF3
VGlsZShsYXllciwgc2NhbGUsIFRpbGVJbmRleCgwLCAwKSwgZHN0LCBwcm9ncmFtKTsKKyAgICAg
ICAgLy8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBk
YXRhIGluIHRoZSBmaXJzdCB0aWxlCisgICAgICAgIHRpbGVTaXplID0gYm91bmRzUmVjdC5zaXpl
KCk7CisgICAgICAgIGRzdENsaXAgPSBib3VuZHNSZWN0OworICAgICAgICBmaXJzdCA9IGxhc3Qg
PSBUaWxlSW5kZXgoMCwgMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgc3ggPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYm91bmRzLndpZHRoKCkpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLndp
ZHRoKCk7Ci0gICAgICAgIGZsb2F0IHN5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy5oZWln
aHQoKSkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIEZsb2F0UmVj
dCBkZXN0aW5hdGlvblJlY3QgPSBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVjdDsKKyAgICAgICAg
ZGVzdGluYXRpb25SZWN0LnNjYWxlKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Jl
cXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogCi0gICAgICAgIEludFJlY3Qgc3JjKEludFBv
aW50Ojp6ZXJvKCksIHRpbGVTaXplKCkpOwotICAgICAgICBmb3IgKHNyYy5zZXRYKDApOyBzcmMu
eCgpIDwgbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCk7IHNyYy5zZXRYKHNyYy54KCkgKyBz
cmMud2lkdGgoKSkpIHsKLSAgICAgICAgICAgIGZvciAoc3JjLnNldFkoMCk7IHNyYy55KCkgPCBt
X3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7IHNyYy5zZXRZKHNyYy55KCkgKyBzcmMuaGVp
Z2h0KCkpKSB7Ci0gICAgICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaW5kZXhPZlRpbGUo
c3JjLmxvY2F0aW9uKCkpOworICAgICAgICB0aWxlU2l6ZSA9IG1fdGlsZVNpemU7CisgICAgICAg
IHRpbGVTaXplLnNjYWxlKGJvdW5kc1JlY3Qud2lkdGgoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6
ZS53aWR0aCgpLCBib3VuZHNSZWN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhl
aWdodCgpKTsKIAotICAgICAgICAgICAgICAgIGZsb2F0IHggPSBpbmRleC5pKCkgKiBzcmMud2lk
dGgoKSAqIHN4OwotICAgICAgICAgICAgICAgIGZsb2F0IHkgPSBpbmRleC5qKCkgKiBzcmMuaGVp
Z2h0KCkgKiBzeTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZHN0KHggLSBib3VuZHMud2lk
dGgoKSAvIDIuMCwgeSAtIGJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgbWluKGJvdW5kcy53aWR0aCgp
IC0geCwgc3JjLndpZHRoKCkgKiBzeCksIG1pbihib3VuZHMuaGVpZ2h0KCkgLSB5LCBzcmMuaGVp
Z2h0KCkgKiBzeSkpOworICAgICAgICBkc3RDbGlwID0gbm9ybWFsaXplZExheWVyQ2xpcFJlY3Q7
CisgICAgICAgIGRzdENsaXAuc2NhbGUoYm91bmRzUmVjdC53aWR0aCgpLCBib3VuZHNSZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgZHN0Q2xpcC5tb3ZlQnkoYm91bmRzUmVjdC5sb2NhdGlvbigpKTsK
IAotICAgICAgICAgICAgICAgIG5lZWRzRGlzcGxheSB8PSBkcmF3VGlsZShsYXllciwgc2NhbGUs
IGluZGV4LCBkc3QsIHByb2dyYW0pOworICAgICAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgcGl4
ZWxzIHdpdGggY29vcmRpbmF0ZXMgKDAgLi4uIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgp
IC0gMSwgMCAuLi4gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpIC0gMSksCisgICAgICAg
IC8vIHNvIGNsYW1wIHRoZSBkZXN0aW5hdGlvblJlY3QtdG8tdGlsZWluZGV4IGNhbGN1bGF0aW9u
IGFwcHJvcHJpYXRlbHkuCisgICAgICAgIGZpcnN0ID0gaW5kZXhPZlRpbGUoZmxvb3JlZEludFBv
aW50KGRlc3RpbmF0aW9uUmVjdC5taW5YTWluWUNvcm5lcigpKSk7CisgICAgICAgIGxhc3QgPSBp
bmRleE9mVGlsZShjZWlsZWRJbnRQb2ludChkZXN0aW5hdGlvblJlY3QubWF4WE1heFlDb3JuZXIo
KSkuc2hydW5rVG8oSW50UG9pbnQoLTEsIC0xKSArIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSkpOwor
ICAgIH0KKworICAgIEhhc2hTZXQ8VGlsZUluZGV4PiB0aWxlc05lZWRpbmdSZW5kZXI7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gZmlyc3QuaSgpOyBpIDw9IGxhc3QuaSgpOyArK2kpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gZmlyc3QuaigpOyBqIDw9IGxhc3QuaigpOyArK2opIHsKKyAg
ICAgICAgICAgIFRpbGVJbmRleCBpbmRleChpLCBqKTsKKyAgICAgICAgICAgIExheWVyVGlsZSog
dGlsZSA9IG1fdGlsZXMuZ2V0KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghdGlsZSkgeworICAg
ICAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7CisgICAgICAgICAgICAgICAgbV90
aWxlcy5hZGQoaW5kZXgsIHRpbGUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgdGlsZS0+
c2V0VmlzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgdGlsZU9yaWdpbihpbmRl
eC5pKCkgKiB0aWxlU2l6ZS53aWR0aCgpLCBpbmRleC5qKCkgKiB0aWxlU2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBGbG9hdFJlY3QgZHN0KHRpbGVPcmlnaW4gLSAwLjUgKiBib3VuZHNSZWN0
LnNpemUoKSwgdGlsZVNpemUuc2hydW5rVG8oYm91bmRzUmVjdC5zaXplKCkgLSB0b0Zsb2F0U2l6
ZSh0aWxlT3JpZ2luKSkpOworICAgICAgICAgICAgaWYgKCFkcmF3VGlsZShsYXllciwgdGlsZSwg
aW5kZXgsIHNjYWxlLCBkc3QsIGRzdENsaXApKQorICAgICAgICAgICAgICAgIHRpbGVzTmVlZGlu
Z1JlbmRlci5hZGQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytp
dCkgeworICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7CisgICAgICAgIGlmIChp
bmRleC5pKCkgPCBmaXJzdC5pKCkgfHwgaW5kZXguaigpIDwgZmlyc3QuaigpIHx8IGluZGV4Lmko
KSA+IGxhc3QuaSgpIHx8IGluZGV4LmooKSA+IGxhc3QuaigpKQorICAgICAgICAgICAgKCppdCku
dmFsdWUtPnNldFZpc2libGUoZmFsc2UpOworICAgIH0KKworICAgIC8vIFRoZSB2aXNpYmxlIHJl
Y3Qgd2lsbCBiZSB1c2VkIG9uIHRoZSBXZWJLaXQgdGhyZWFkIGFuZCBzaG91bGQgdXNlIHRoZSBi
b3VuZHMgZXhwcmVzc2VkIGluCisgICAgLy8gZG9jdW1lbnQgY29vcmRpbmF0ZXMsIG5vdCBjb3Jy
ZWN0ZWQgZm9yIHNjYWxlIGludmFyaWFuY2UuIFNvIHVzZSAibGF5ZXItPmJvdW5kcygpIiBpbnN0
ZWFkCisgICAgLy8gb2YgdGhlIGxvY2FsIHZhcmlhYmxlICJib3VuZHNSZWN0LnNpemUoKSIuCisg
ICAgRmxvYXRSZWN0IGxheWVyVmlzaWJsZVJlY3QgPSBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVj
dDsKKyAgICBsYXllclZpc2libGVSZWN0LnNjYWxlKGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBs
YXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworCisjaWYgREVCVUdfTEFZRVJfVklTSUJJTElUWQor
ICAgIFZlY3RvcjxGbG9hdFBvaW50PiB2ID0gdW5wcm9qZWN0KGxheWVyLCBjbGlwUG9seWdvbik7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgKytpKSB7CisgICAgICAgIHZb
aV0uc2NhbGUobGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQo
KSk7CisgICAgICAgIHZbaV0ubW92ZSh0b0Zsb2F0U2l6ZShib3VuZHNSZWN0LmxvY2F0aW9uKCkp
KTsKKyAgICAgICAgdltpXSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUG9pbnQodltpXSk7
CisgICAgfQorCisgICAgLy8gVXNlIGEgdGhpY2sgYm9yZGVyIHRvIG1ha2UgdGhlIGJvcmRlciB2
aXNpYmxlIGV2ZW4gZm9yIHRoZSByb290IGxheWVyICh3aGljaCB0eXBpY2FsbHkgY292ZXJzIHRo
ZSBzY3JlZW4gd2lkdGggYW5kL29yIGhlaWdodCkuCisgICAgdW5zaWduZWQgdG1wID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZD4odGhpcyk7CisgICAgaW50IHQgPSByYW5kX3IoJnRtcCk7Cisg
ICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgLy8gV2hlbiBkZWJ1Z2dpbmcsIGRy
YXcgZmlyc3QgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCksIHRoZW4gY2xpcFBvbHlnb24sIHRo
ZW4gdgorICAgIC8vIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBwcm9ibGVtIGlzIChjbGlwcGluZyB0
byBpbWFnZSBwbGFuZSwgY2xpcHBpbmcgdG8gdmlld3BvcnQgb3IgdW5wcm9qZWN0aW5nKS4KKyAg
ICBsYXllci0+bGF5ZXJSZW5kZXJlcigpLT5kcmF3RGVidWdCb3JkZXIoLyogbGF5ZXItPnRyYW5z
Zm9ybWVkQm91bmRzKCkgKi8gLyogY2xpcFBvbHlnb24gKi8gdiwgbWFrZVJHQkFGcm9tSFNMQShz
dGF0aWNfY2FzdDxkb3VibGU+KHQpIC8gUkFORF9NQVgsIDEsIDAuNSwgMSksIDUpOworICAgIGds
RW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisjZW5kaWYKKwogICAgIC8vIElmIHdlIHNjaGVkdWxl
IGEgY29tbWl0LCB2aXNpYmlsaXR5IHdpbGwgYmUgdXBkYXRlZCwgYW5kIGRpc3BsYXkgd2lsbAog
ICAgIC8vIGhhcHBlbiBpZiB0aGVyZSBhcmUgYW55IHZpc2libGUgYW5kIGRpcnR5IHRleHR1cmVz
LgotICAgIGlmIChuZWVkc0Rpc3BsYXkpCisgICAgaWYgKCF0aWxlc05lZWRpbmdSZW5kZXIuaXNF
bXB0eSgpKQogICAgICAgICBsYXllci0+c2V0TmVlZHNDb21taXQoKTsKKworICAgIHNldEZyb250
VmlzaWJpbGl0eShsYXllclZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5kZXIpOwogfQogCiB2
b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQpA
QCAtNTg5LDE0ICs2NDQsOSBAQCB2b2lkIExheWVyVGlsZXI6OnBydW5lVGV4dHVyZXMoKQogICAg
ICAgICAgICAgdGlsZXNUb0RlbGV0ZS5hcHBlbmQoaW5kZXgpOwogICAgIH0KIAotICAgIHsKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7Ci0KLSAgICAgICAgZm9yIChW
ZWN0b3I8VGlsZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSB0aWxlc1RvRGVsZXRlLmJlZ2luKCk7IGl0
ICE9IHRpbGVzVG9EZWxldGUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIExheWVyVGlsZSog
dGlsZSA9IG1fdGlsZXMudGFrZSgqaXQpOwotICAgICAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRl
bnRzKCk7Ci0gICAgICAgICAgICBkZWxldGUgdGlsZTsKLSAgICAgICAgfQorICAgIGZvciAoVmVj
dG9yPFRpbGVJbmRleD46Oml0ZXJhdG9yIGl0ID0gdGlsZXNUb0RlbGV0ZS5iZWdpbigpOyBpdCAh
PSB0aWxlc1RvRGVsZXRlLmVuZCgpOyArK2l0KSB7CisgICAgICAgIE93blB0cjxMYXllclRpbGU+
IHRpbGUgPSBtX3RpbGVzLnRha2UoKml0KTsKKyAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRlbnRz
KCk7CiAgICAgfQogfQogCkBAIC02NTAsOCArNzAwLDcgQEAgSW50UG9pbnQgTGF5ZXJUaWxlcjo6
b3JpZ2luT2ZUaWxlKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpCiBJbnRSZWN0IExheWVyVGlsZXI6
OnJlY3RGb3JUaWxlKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IEludFNpemUmIGJvdW5k
cykKIHsKICAgICBJbnRQb2ludCBvcmlnaW4gPSBvcmlnaW5PZlRpbGUoaW5kZXgpOwotICAgIElu
dFNpemUgb2Zmc2V0KG9yaWdpbi54KCksIG9yaWdpbi55KCkpOwotICAgIEludFNpemUgc2l6ZSA9
IHRpbGVTaXplKCkuc2hydW5rVG8oYm91bmRzIC0gb2Zmc2V0KTsKKyAgICBJbnRTaXplIHNpemUg
PSB0aWxlU2l6ZSgpLnNocnVua1RvKGJvdW5kcyAtIHRvSW50U2l6ZShvcmlnaW4pKTsKICAgICBy
ZXR1cm4gSW50UmVjdChvcmlnaW4sIHNpemUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCmluZGV4IDJl
ZjZiMjM1Mzk4OTJiZDEzMzVmZGQxNjdmOTY2OGNlYzlhMzdhY2YuLjVkM2Q3NTczN2YwMmY4MTcw
MjdjZDhlOGY1MGViMTVmOTk3ZmFiNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oCkBAIC0zNiw2ICszNiw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7
CitjbGFzcyBMYXllclZpc2liaWxpdHk7CiBjbGFzcyBMYXllcldlYktpdFRocmVhZDsKIAogY2xh
c3MgTGF5ZXJUaWxlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXllclRpbGVyPiwg
cHVibGljIExheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgewpAQCAtNjcsMTQgKzY4LDE0IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChMYXllckNv
bXBvc2l0aW5nVGhyZWFkKiwgYm9vbCB2aXNpYmxlKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBsb2Fk
VGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAgICAgdmlydHVhbCBM
YXllclRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91
YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJv
Z3JhbSYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCosIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFt
JiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogICAgIHN0YXRp
YyB2b2lkIHdpbGxDb21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0UGVuZGluZ1RleHR1
cmVVcGxvYWRzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1
Y3QgVGV4dHVyZUpvYiB7Ci0gICAgICAgIGVudW0gVHlwZSB7IFVua25vd24sIFNldENvbnRlbnRz
LCBVcGRhdGVDb250ZW50cywgRGlzY2FyZENvbnRlbnRzLCBSZXNpemVDb250ZW50cywgRGlydHlD
b250ZW50cyB9OworICAgICAgICBlbnVtIFR5cGUgeyBVbmtub3duLCBTZXRDb250ZW50cywgVXBk
YXRlQ29udGVudHMsIFJlc2l6ZUNvbnRlbnRzLCBEaXJ0eUNvbnRlbnRzIH07CiAKICAgICAgICAg
VGV4dHVyZUpvYigpCiAgICAgICAgICAgICA6IG1fdHlwZShVbmtub3duKQpAQCAtOTUsNyArOTYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX2NvbnRlbnRzKDApCiAgICAgICAgICAgICAs
IG1fZGlydHlSZWN0KGRpcnR5UmVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gRGlzY2FyZENvbnRlbnRzIHx8IHR5cGUgPT0gRGlydHlDb250ZW50cyk7CisgICAgICAg
ICAgICBBU1NFUlQodHlwZSA9PSBEaXJ0eUNvbnRlbnRzKTsKICAgICAgICAgfQogCiAgICAgICAg
IFRleHR1cmVKb2IoVHlwZSB0eXBlLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1
ZmZlciogY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTExMiw3ICsxMTMs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIFRleHR1cmVKb2IoU2V0Q29udGVudHMs
IGNvbnRlbnRzLCBjb250ZW50c1JlY3QpOwogICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBUZXh0
dXJlSm9iIHVwZGF0ZUNvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVm
ZmVyKiBjb250ZW50cywgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7IHJldHVybiBUZXh0dXJl
Sm9iKFVwZGF0ZUNvbnRlbnRzLCBjb250ZW50cywgZGlydHlSZWN0KTsgfQotICAgICAgICBzdGF0
aWMgVGV4dHVyZUpvYiBkaXNjYXJkQ29udGVudHMoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KSB7
IHJldHVybiBUZXh0dXJlSm9iKERpc2NhcmRDb250ZW50cywgZGlydHlSZWN0KTsgfQogICAgICAg
ICBzdGF0aWMgVGV4dHVyZUpvYiByZXNpemVDb250ZW50cyhjb25zdCBJbnRTaXplJiBuZXdTaXpl
KSB7IHJldHVybiBUZXh0dXJlSm9iKFJlc2l6ZUNvbnRlbnRzLCBuZXdTaXplKTsgfQogICAgICAg
ICBzdGF0aWMgVGV4dHVyZUpvYiBkaXJ0eUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCkgeyByZXR1cm4gVGV4dHVyZUpvYihEaXJ0eUNvbnRlbnRzLCBkaXJ0eVJlY3QpOyB9CiAKQEAg
LTEyNywyNiArMTI3LDI3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRl
eCwgTGF5ZXJUaWxlKj4gVGlsZU1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8VGlsZUluZGV4LCBj
b25zdCBUZXh0dXJlSm9iKj4gVGlsZUpvYnNNYXA7CiAKLSAgICB2b2lkIHVwZGF0ZVRpbGVTaXpl
KCk7Ci0KICAgICBMYXllclRpbGVyKExheWVyV2ViS2l0VGhyZWFkKik7CiAKKyAgICAvLyBTd2Fw
cyBpbiBhIG5ldyBmcm9udCB2aXNpYmlsaXR5IGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IG9uZSwg
YXRvbWljYWxseS4KKyAgICBMYXllclZpc2liaWxpdHkqIHN3YXBGcm9udFZpc2liaWxpdHkoTGF5
ZXJWaXNpYmlsaXR5Kik7CisKICAgICAvLyBXZWJLaXQgdGhyZWFkCisgICAgdm9pZCB1cGRhdGVU
aWxlU2l6ZSgpOwogICAgIHZvaWQgYWRkVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJik7CiAg
ICAgdm9pZCBjbGVhclRleHR1cmVKb2JzKCk7CiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpCdWZmZXIqIGNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJik7CisgICAgTGF5ZXJW
aXNpYmlsaXR5KiB0YWtlRnJvbnRWaXNpYmlsaXR5KCkgeyByZXR1cm4gc3dhcEZyb250VmlzaWJp
bGl0eSgwKTsgfQogCiAgICAgLy8gQ29tcG9zaXRpbmcgdGhyZWFkCiAgICAgdm9pZCB1cGRhdGVU
aWxlQ29udGVudHMoY29uc3QgVGV4dHVyZUpvYiYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lk
IGFkZFRpbGVKb2IoY29uc3QgVGlsZUluZGV4JiwgY29uc3QgVGV4dHVyZUpvYiYsIFRpbGVKb2Jz
TWFwJik7Ci0gICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqLCBjb25zdCBUZXh0dXJl
Sm9iJik7CisgICAgdm9pZCBwZXJmb3JtVGlsZUpvYihMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwg
TGF5ZXJUaWxlKiwgY29uc3QgVGV4dHVyZUpvYiYpOwogICAgIHZvaWQgcHJvY2Vzc1RleHR1cmVK
b2IoY29uc3QgVGV4dHVyZUpvYiYsIFRpbGVKb2JzTWFwJik7CiAgICAgdm9pZCBwcnVuZVRleHR1
cmVzKCk7CiAgICAgdm9pZCB2aXNpYmlsaXR5Q2hhbmdlZChib29sIG5lZWRzRGlzcGxheSk7Ci0g
ICAgYm9vbCBkcmF3VGlsZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNjYWxlLCBj
b25zdCBUaWxlSW5kZXgmLCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mKTsKLQotICAgIC8vIFRocmVhZHNhZmUK
LSAgICBpbnQgbmVlZHNSZW5kZXIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQgY29u
c3Qgdm9sYXRpbGUgJj4obV9uZWVkc1JlbmRlckNvdW50KTsgfQorICAgIGJvb2wgZHJhd1RpbGUo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIExheWVyVGlsZSosIGNvbnN0IFRpbGVJbmRleCYsIGRv
dWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0Q2xp
cCk7CisgICAgdm9pZCBzZXRGcm9udFZpc2liaWxpdHkoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxl
UmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdSZW5kZXIpOwogCiAgICAgLy8g
Q2xlYXIgYWxsIHBlbmRpbmcgdXBkYXRlIGNvbnRlbnQgdGV4dHVyZSBqb2JzCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KQEAgLTE2NSw5ICsxNjYsNyBAQCBwcml2YXRlOgogCiAgICAgTGF5ZXJX
ZWJLaXRUaHJlYWQqIG1fbGF5ZXI7CiAKLSAgICBNdXRleCBtX3RpbGVzTXV0ZXg7Ci0gICAgVGls
ZU1hcCBtX3RpbGVzOyAvLyBQcm90ZWN0ZWQgYnkgbV90aWxlc011dGV4Ci0gICAgaW50IG1fbmVl
ZHNSZW5kZXJDb3VudDsgLy8gYXRvbWljCisgICAgVGlsZU1hcCBtX3RpbGVzOwogCiAgICAgYm9v
bCBtX25lZWRzQmFja2luZzsKIApAQCAtMTgyLDcgKzE4MSw4IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPFRleHR1cmVKb2I+IG1fcGVuZGluZ1RleHR1cmVKb2JzOyAvLyBBZGRlZCwgYnV0IG5vdCBj
b21taXR0ZWQgeWV0LgogICAgIERlcXVlPFRleHR1cmVKb2I+IG1fdGV4dHVyZUpvYnM7CiAKLSAg
ICBkb3VibGUgbV9jb250ZW50c1NjYWxlOworICAgIExheWVyVmlzaWJpbGl0eSogbV9mcm9udFZp
c2liaWxpdHk7CisgICAgTGF5ZXJWaXNpYmlsaXR5KiBtX2JhY2tWaXNpYmlsaXR5OwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclV0aWxpdGllcy5oCmluZGV4IDJjNmMxODQ0MDhmMDFmYTFiNDY0MWFjYmU5
NTdhNmYwZjE5NTNjODAuLjE5YWExOTk1ZmFlM2VjZDc0M2EwYjVmMzA2ZGRlZTQ0Y2U1NGNlNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkv
TGF5ZXJVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyVXRpbGl0aWVzLmgKQEAgLTMzLDYgKzMzLDUyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorLy8gZGV0ZXJtaW5hbnQgb2YgY29sdW1uIHZlY3RvcnMKK2lubGluZSBm
bG9hdCBkZXRlcm1pbmFudChjb25zdCBGbG9hdFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikK
K3sKKyAgICByZXR1cm4gYS53aWR0aCgpICogYi5oZWlnaHQoKSAtIGEuaGVpZ2h0KCkgKiBiLndp
ZHRoKCk7Cit9CisKKy8vIGRvdCBwcm9kdWN0CitpbmxpbmUgZmxvYXQgZG90KGNvbnN0IEZsb2F0
U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgKiBi
LndpZHRoKCkgKyBhLmhlaWdodCgpICogYi5oZWlnaHQoKTsKK30KKworLy8gUmVwcmVzZW50cyBh
IGxpbmUsIG5vdCBhIGZpbml0ZSBsaW5lIHNlZ21lbnQKK2NsYXNzIExheWVyQ2xpcEVkZ2Ugewor
cHVibGljOgorICAgIExheWVyQ2xpcEVkZ2UoY29uc3QgRmxvYXRQb2ludCYgZmlyc3QsIGNvbnN0
IEZsb2F0UG9pbnQmIHNlY29uZCkKKyAgICAgICAgOiBtX2ZpcnN0KGZpcnN0KQorICAgICAgICAs
IG1fc2Vjb25kKHNlY29uZCkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNQb2lu
dEluc2lkZShjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gRm9y
IG51bWVyaWMgcm9idXN0bmVzcywgd2UgcHJlZmVyIHRvIGNvbnNpZGVyIGEgcG9pbnQgdG8gYmUg
aW5zaWRlIHJhdGhlciB0aGFuCisgICAgICAgIC8vIGNsaXAgaXQgYWdhaW4uCisgICAgICAgIGNv
bnN0IGZsb2F0IGVwc2lsb24gPSAxZS02OworICAgICAgICByZXR1cm4gZGV0ZXJtaW5hbnQobV9z
ZWNvbmQgLSBtX2ZpcnN0LCBwIC0gbV9maXJzdCkgPiAtZXBzaWxvbjsKKyAgICB9CisKKyAgICBp
bmxpbmUgRmxvYXRQb2ludCBjb21wdXRlSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHAx
LCBjb25zdCBGbG9hdFBvaW50JiBwMikgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHAzID0gbV9maXJzdDsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDQgPSBtX3Nl
Y29uZDsKKyAgICAgICAgZmxvYXQgZGVub21pbmF0b3IgPSBkZXRlcm1pbmFudChwMSAtIHAyLCBw
MyAtIHA0KTsKKyAgICAgICAgRmxvYXRTaXplIGRldGVybWluYW50cyhkZXRlcm1pbmFudCh0b0Zs
b2F0U2l6ZShwMSksIHRvRmxvYXRTaXplKHAyKSksIGRldGVybWluYW50KHRvRmxvYXRTaXplKHAz
KSwgdG9GbG9hdFNpemUocDQpKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcmVzdWx0KAorICAgICAg
ICAgICAgZGV0ZXJtaW5hbnQoZGV0ZXJtaW5hbnRzLCBGbG9hdFNpemUocDEueCgpIC0gcDIueCgp
LCBwMy54KCkgLSBwNC54KCkpKSAvIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgZGV0ZXJtaW5h
bnQoZGV0ZXJtaW5hbnRzLCBGbG9hdFNpemUocDEueSgpIC0gcDIueSgpLCBwMy55KCkgLSBwNC55
KCkpKSAvIGRlbm9taW5hdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgRmxvYXRQb2ludCBtX2ZpcnN0OworICAgIEZsb2F0UG9pbnQgbV9zZWNvbmQ7
Cit9OworCiAvLyBTcGVjaWZpZXMgYSBjbGlwIHBsYW5lIHdpdGggbm9ybWFsIG4gYW5kIGNvbnRh
aW5pbmcgcG9pbnQgcF8wCiAvLyBhcyBwICogbiArIGQgPSAwLCBkID0gLXBfMCAqIG4uIFRoZSBh
c3RlcmlzayBpcyBkb3QgcHJvZHVjdC4KIGNsYXNzIExheWVyQ2xpcFBsYW5lIHsKQEAgLTgwLDYg
KzEyNiwyNiBAQCBpbmxpbmUgVmVjdG9yPFBvaW50LCBpbmxpbmVDYXBhY2l0eT4gaW50ZXJzZWN0
KGNvbnN0IFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdAogICAgIHJldHVybiBvdXRwdXRMaXN0
OwogfQogCisvLyBTdXRoZXJsYW5kIC0gSG9kZ21hbiwgbWFpbiBkcml2ZXIKK3RlbXBsYXRlPHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KK2lubGluZSBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5lQ2Fw
YWNpdHk+IGludGVyc2VjdFBvbHlnb25XaXRoUmVjdChjb25zdCBWZWN0b3I8RmxvYXRQb2ludCwg
aW5saW5lQ2FwYWNpdHk+JiBzdWJqZWN0UG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVj
dCkKK3sKKyAgICBGbG9hdFF1YWQgY2xpcFF1YWQoY2xpcFJlY3QpOworICAgIFZlY3RvcjxMYXll
ckNsaXBFZGdlPiBlZGdlczsKKyAgICBlZGdlcy5hcHBlbmQoTGF5ZXJDbGlwRWRnZShjbGlwUXVh
ZC5wMSgpLCBjbGlwUXVhZC5wMigpKSk7CisgICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2Uo
Y2xpcFF1YWQucDIoKSwgY2xpcFF1YWQucDMoKSkpOworICAgIGVkZ2VzLmFwcGVuZChMYXllckNs
aXBFZGdlKGNsaXBRdWFkLnAzKCksIGNsaXBRdWFkLnA0KCkpKTsKKyAgICBlZGdlcy5hcHBlbmQo
TGF5ZXJDbGlwRWRnZShjbGlwUXVhZC5wNCgpLCBjbGlwUXVhZC5wMSgpKSk7CisKKyAgICBWZWN0
b3I8RmxvYXRQb2ludD4gb3V0cHV0TGlzdCA9IHN1YmplY3RQb2x5Z29uOworICAgIGZvciAoVmVj
dG9yPExheWVyQ2xpcEVkZ2U+Ojpjb25zdF9pdGVyYXRvciBjbGlwRWRnZUl0ZXJhdG9yID0gZWRn
ZXMuYmVnaW4oKTsgY2xpcEVkZ2VJdGVyYXRvciAhPSBlZGdlcy5lbmQoKTsgKytjbGlwRWRnZUl0
ZXJhdG9yKSB7CisgICAgICAgIGNvbnN0IExheWVyQ2xpcEVkZ2UmIGNsaXBFZGdlID0gKmNsaXBF
ZGdlSXRlcmF0b3I7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50PiBpbnB1dExpc3QgPSBvdXRw
dXRMaXN0OworICAgICAgICBvdXRwdXRMaXN0ID0gaW50ZXJzZWN0KGlucHV0TGlzdCwgY2xpcEVk
Z2UpOworICAgIH0KKyAgICByZXR1cm4gb3V0cHV0TGlzdDsKK30KKwogdGVtcGxhdGU8c2l6ZV90
IGlubGluZUNhcGFjaXR5PgogaW5saW5lIEZsb2F0UmVjdCBib3VuZGluZ0JveChjb25zdCBWZWN0
b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBwb2ludHMpCiB7CkBAIC0xMDIsNiArMTY4
LDExOCBAQCBpbmxpbmUgRmxvYXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFZlY3RvcjxGbG9hdFBv
aW50LCBpbmxpbmVDYXBhY2l0eT4mIHBvaW50cykKICAgICByZXR1cm4gRmxvYXRSZWN0KHhtaW4s
IHltaW4sIHhtYXggLSB4bWluLCB5bWF4IC0geW1pbik7CiB9CiAKK2lubGluZSBGbG9hdFBvaW50
M0QgY29tcHV0ZUJhcnljZW50cmljQ29vcmRpbmF0ZXMoY29uc3QgRmxvYXRQb2ludCYgcCwgY29u
c3QgRmxvYXRQb2ludCYgdDEsIGNvbnN0IEZsb2F0UG9pbnQmIHQyLCBjb25zdCBGbG9hdFBvaW50
JiB0MywgYm9vbCYgb2spCit7CisgICAgLy8gQ29tcHV0ZSB2ZWN0b3JzCisgICAgRmxvYXRTaXpl
IHYwID0gdDIgLSB0MTsKKyAgICBGbG9hdFNpemUgdjEgPSB0MyAtIHQxOworICAgIEZsb2F0U2l6
ZSB2MiA9IHAgLSB0MTsKKworICAgIC8vIENvbXB1dGUgZG90IHByb2R1Y3RzCisgICAgZmxvYXQg
ZG90MDAgPSBkb3QodjAsIHYwKTsKKyAgICBmbG9hdCBkb3QwMSA9IGRvdCh2MCwgdjEpOworICAg
IGZsb2F0IGRvdDAyID0gZG90KHYwLCB2Mik7CisgICAgZmxvYXQgZG90MTEgPSBkb3QodjEsIHYx
KTsKKyAgICBmbG9hdCBkb3QxMiA9IGRvdCh2MSwgdjIpOworCisgICAgLy8gQ29tcHV0ZSBiYXJ5
Y2VudHJpYyBjb29yZGluYXRlcworICAgIGZsb2F0IGRlbm9taW5hdG9yID0gKGRvdDAwICogZG90
MTEgLSBkb3QwMSAqIGRvdDAxKTsKKyAgICBvayA9IChkZW5vbWluYXRvciAhPSAwLjApOworICAg
IGlmICghb2spCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50M0QoKTsKKworICAgIGZsb2F0IHYg
PSAoZG90MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIpIC8gZGVub21pbmF0b3I7CisgICAgZmxv
YXQgdyA9IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMikgLyBkZW5vbWluYXRvcjsKKwor
ICAgIHJldHVybiBGbG9hdFBvaW50M0QoMS4wZiAtIHYgLSB3LCB2LCB3KTsKK30KKworaW5saW5l
IGZsb2F0IG1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydChjb25zdCBGbG9hdFBvaW50JiBwKQor
eworICAgIGZsb2F0IGQgPSAwOworICAgIGlmIChmYWJzZihwLngoKSkgPiAxKQorICAgICAgICBk
ICs9IGZhYnNmKHAueCgpKSAtIDE7CisgICAgaWYgKGZhYnNmKHAueSgpKSA+IDEpCisgICAgICAg
IGQgKz0gZmFic2YocC55KCkpIC0gMTsKKyAgICByZXR1cm4gZDsKK30KKworc3RydWN0IFVucHJv
amVjdGlvblZlcnRleCB7CisgICAgRmxvYXRQb2ludCB4eTsKKyAgICBmbG9hdCB3OworICAgIEZs
b2F0U2l6ZSB1djsKK307CisKK2lubGluZSBib29sIGNvbXBhcmVNYW5oYXR0YW5EaXN0YW5jZVRv
Vmlld3BvcnQoY29uc3QgVW5wcm9qZWN0aW9uVmVydGV4JiBhLCBjb25zdCBVbnByb2plY3Rpb25W
ZXJ0ZXgmIGIpCit7CisgICAgcmV0dXJuIG1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydChhLnh5
KSA8IG1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydChiLnh5KTsKK30KKwordGVtcGxhdGU8c2l6
ZV90IGlubGluZUNhcGFjaXR5PgoraW5saW5lIFZlY3RvcjxGbG9hdFBvaW50LCBpbmxpbmVDYXBh
Y2l0eT4gdW5wcm9qZWN0KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBjb25zdCBWZWN0
b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBwb2ludHMpCit7CisgICAgLy8gVXNlIHBl
cnNwZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIGxvZ2ljIHRvIGZpbmQgdGhlIGxvY2F0aW9ucyBv
ZiB0aGVzZSBwb2ludHMgaW4gbm9ybWFsaXplZCBsYXllciBjb29yZGluYXRlcworICAgIFZlY3Rv
cjxGbG9hdFBvaW50LCA0PiBib3VuZHMgPSBsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKTsKKyAg
ICBWZWN0b3I8ZmxvYXQsIDQ+IHdzID0gbGF5ZXItPndzKCk7CisgICAgaWYgKHdzLmlzRW1wdHko
KSkKKyAgICAgICAgd3MuZmlsbCgwLjBmLCBib3VuZHMuc2l6ZSgpKTsKKyAgICBjb25zdCBWZWN0
b3I8RmxvYXRQb2ludD4mIHRleENvb3JkcyA9IGxheWVyLT50ZXh0dXJlQ29vcmRpbmF0ZXMoKTsK
KyAgICBpZiAoYm91bmRzLnNpemUoKSA8IDMpCisgICAgICAgIHJldHVybiBWZWN0b3I8RmxvYXRQ
b2ludCwgaW5saW5lQ2FwYWNpdHk+KCk7CisKKyAgICBWZWN0b3I8VW5wcm9qZWN0aW9uVmVydGV4
LCA0PiB2ZXJ0aWNlcyhib3VuZHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJvdW5kcy5zaXplKCk7ICsraSkgeworICAgICAgICB2ZXJ0aWNlc1tpXS54eSA9IGJvdW5kc1tp
XTsKKyAgICAgICAgdmVydGljZXNbaV0udyA9IHdzW2ldOworICAgICAgICB2ZXJ0aWNlc1tpXS51
diA9IHRvRmxvYXRTaXplKHRleENvb3Jkc1tpXSk7CisgICAgfQorICAgIC8vIEVhY2ggcG9pbnQg
bmVlZHMgdG8gYmUgcXVhbGlmaWVkIGFzIGx5aW5nIGluIG9uZSBvZiB0aGUgdHJpYW5nbGVzIGZv
cm1lZCBieSB0aGUgImJvdW5kcyIgdHJpYW5nbGUgc3RyaXAKKyAgICAvLyBUcnkgdG8gdXNlIG9u
bHkgcG9pbnRzIHRoYXQgYXJlIG9uc2NyZWVuLCBmb3IgbnVtZXJpY2FsIHN0YWJpbGl0eQorICAg
IHN0ZDo6c29ydCh2ZXJ0aWNlcy5iZWdpbigpLCB2ZXJ0aWNlcy5lbmQoKSwgY29tcGFyZU1hbmhh
dHRhbkRpc3RhbmNlVG9WaWV3cG9ydCk7CisKKyAgICBWZWN0b3I8RmxvYXRQb2ludCwgaW5saW5l
Q2FwYWNpdHk+IHJlc3VsdDsKKworICAgIHNpemVfdCBpMCA9IDA7CisKKyAgICBjb25zdCBGbG9h
dFBvaW50JiBwMCA9IHZlcnRpY2VzW2kwXS54eTsKKyAgICBmbG9hdCB3MCA9IHZlcnRpY2VzW2kw
XS53OworICAgIEZsb2F0U2l6ZSB1djAgPSB2ZXJ0aWNlc1tpMF0udXY7CisKKyAgICBmb3IgKHNp
emVfdCBqID0gMDsgaiA8IHBvaW50cy5zaXplKCk7ICsraikgeworICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwID0gcG9pbnRzW2pdOworICAgICAgICBGbG9hdFBvaW50IHRleENvb3JkOworICAg
ICAgICBmb3IgKHNpemVfdCBkaSA9IDE7IGRpICsgMSA8IHZlcnRpY2VzLnNpemUoKTsgKytkaSkg
eworICAgICAgICAgICAgc2l6ZV90IGkgPSAoaTAgKyBkaSkgJSB2ZXJ0aWNlcy5zaXplKCk7Cisg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMSA9IHZlcnRpY2VzW2ldLnh5OworICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDIgPSB2ZXJ0aWNlc1tpICsgMV0ueHk7CisgICAgICAg
ICAgICBmbG9hdCB3MSA9IHZlcnRpY2VzW2ldLnc7CisgICAgICAgICAgICBmbG9hdCB3MiA9IHZl
cnRpY2VzW2kgKyAxXS53OworICAgICAgICAgICAgRmxvYXRTaXplIHV2MSA9IHZlcnRpY2VzW2ld
LnV2OworICAgICAgICAgICAgRmxvYXRTaXplIHV2MiA9IHZlcnRpY2VzW2kgKyAxXS51djsKKwor
ICAgICAgICAgICAgYm9vbCBvazsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBiID0gY29tcHV0
ZUJhcnljZW50cmljQ29vcmRpbmF0ZXMocCwgcDAsIHAxLCBwMiwgb2spOworICAgICAgICAgICAg
aWYgKCFvaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHcw
ICYmIHcxICYmIHcyKSB7CisgICAgICAgICAgICAgICAgLy8gUGVyc3BlY3RpdmUgY29ycmVjdCBp
bnRlcnBvbGF0aW9uCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludDNEIGJ3KGIueCgpIC8gdzAs
IGIueSgpIC8gdzEsIGIueigpIC8gdzIpOworICAgICAgICAgICAgICAgIGZsb2F0IGRlbm9taW5h
dG9yID0gYncueCgpICsgYncueSgpICsgYncueigpOworICAgICAgICAgICAgICAgIHRleENvb3Jk
ID0gRmxvYXRQb2ludDo6emVybygpICsgKGJ3LngoKSAqIHV2MCArIGJ3LnkoKSAqIHV2MSArIGJ3
LnooKSAqIHV2Mik7CisgICAgICAgICAgICAgICAgdGV4Q29vcmQuc2V0WCh0ZXhDb29yZC54KCkg
LyBkZW5vbWluYXRvcik7CisgICAgICAgICAgICAgICAgdGV4Q29vcmQuc2V0WSh0ZXhDb29yZC55
KCkgLyBkZW5vbWluYXRvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIExpbmVhciBpbnRlcnBvbGF0aW9uCisgICAgICAgICAgICAgICAgdGV4Q29vcmQgPSBGbG9h
dFBvaW50Ojp6ZXJvKCkgKyAoYi54KCkgKiB1djAgKyBiLnkoKSAqIHV2MSArIGIueigpICogdXYy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHJlc3VsdC5hcHBlbmQodGV4Q29vcmQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiBpbmxpbmUgRmxvYXRQb2ludDNEIG11bHRWZWNNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgY29uc3QgRmxvYXRQb2ludDNEJiBwLCBmbG9hdCYgdykKIHsKICAgICBG
bG9hdFBvaW50M0QgcmVzdWx0KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3Zl
cmxheS5jcHAKaW5kZXggMTllMWEzMTc2N2Y3MDllOGQzNjhkMmVmOGNjM2M5MWRiMzIwN2I5Mi4u
YjNmZjc0YjZkOGE4NWFhYmVmOTBjNWEyNzA1OTg5YzRhYThiODQ1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXkuY3BwCkBAIC01MDEsNyArNTAxLDcgQEAgdm9p
ZCBXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJ
Zk5lZWRlZChMYXllckNvbXBvc2kKICAgICBtX3RleHR1cmUtPnVwZGF0ZUNvbnRlbnRzKHRleHR1
cmVDb250ZW50cyk7CiB9CiAKLXZvaWQgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRD
bGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91Ymxl
IHNjYWxlLCBjb25zdCBHTEVTMlByb2dyYW0mKQordm9pZCBXZWJPdmVybGF5TGF5ZXJDb21wb3Np
dGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxh
eWVyLCBjb25zdCBHTEVTMlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYg
LypjbGlwUmVjdCovKQogewogICAgIGlmICghbV90ZXh0dXJlIHx8ICFtX3RleHR1cmUtPmJ1ZmZl
cigpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYk92ZXJsYXlfcC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJP
dmVybGF5X3AuaAppbmRleCA2ZjU2ODA5MmE1NjdlZmI4M2UyYTgyM2ZiN2IzZjkxMDY5Nzk5MzJk
Li4zOTdiNzEwMjg0MjE4YTgxYWRiZTk1MzhmMGI5MjYyZGEwN2YyYjQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlfcC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheV9wLmgKQEAgLTE5Nyw3ICsxOTcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQo
V2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogICAgIHZpcnR1YWwgdm9pZCBsYXll
clZpc2liaWxpdHlDaGFuZ2VkKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBib29s
IHZpc2libGUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKFdlYkNv
cmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1
cmVzKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBkb3VibGUgc2NhbGUsIGNvbnN0
IFBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJik7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdUZXh0dXJlcyhXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3QgUGxhdGZv
cm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW0mLCBkb3VibGUgc2NhbGUsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgY2xpcFJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhX
ZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAKIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204696</attachid>
            <date>2013-06-14 03:56:02 -0700</date>
            <delta_ts>2013-06-14 08:00:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117211-20130614125418.patch</filename>
            <type>text/plain</type>
            <size>64808</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJjMmQzM2FlYTJiZGJi
OGZhNmFhZjA0YTc2YzQ0NGQ3ZmM1YzY2Ny4uM2U1OTIwNGFlMTc2MzkyMDhiNDdmNmFhNDc2MGM4
NDRjZDg3YjliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMy0wNi0wNCAgQXJ2
aWQgTmlsc3NvbiAgPGFuaWxzc29uQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIExh
eWVyVGlsZXIgZmFpbHMgdG8gdGlsZSByZWFsbHkgYmlnIGxheWVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MjExCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUFIgMjczNTUwCisKKyAgICAgICAgVGhl
IGNhdXNlIGZvciB0aGlzIGJ1ZyB3YXMgdGhhdCBMYXllclRpbGVyIGNvbXB1dGVkIHdoaWNoIHRp
bGVzIGFyZQorICAgICAgICB2aXNpYmxlIGJ5IGV4aGF1c3RpdmVseSBtYXBwaW5nIGV2ZXJ5IHRp
bGUgdG8gbm9ybWFsaXplZCBkZXZpY2UKKyAgICAgICAgY29vcmRpbmF0ZXMgYW5kIGNoZWNraW5n
IGlmIGl0IGludGVyc2VjdGVkIHRoZSB2aWV3cG9ydC4gSWYgdGhlcmUgd2FzIGEKKyAgICAgICAg
bG90IG9mIHRpbGVzLCBpdCB3b3VsZCBnZXQgc3R1Y2sgaW4gdGhpcyBsb29wLCBpdGVyYXRpbmcg
b3ZlciBhbGwKKyAgICAgICAgdGlsZXMsIGZvciBhIHZlcnkgbG9uZyB0aW1lLiBBbHNvLCB0aGUg
dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB3YXMKKyAgICAgICAgdHJhbnNmZXJyZWQgdG8gdGhlIFdl
YktpdCB0aHJlYWQgdXNpbmcgbXV0ZXhlcywgd2hpY2ggYWRkZWQgdW5uZWNlc3NhcnkKKyAgICAg
ICAgbXV0ZXggY29udGVudGlvbiB0byB0aGUgbWl4LgorCisgICAgICAgIEZpeGVkIGJ5IGRvaW5n
IHRoZSByZXZlcnNlIGNhbGN1bGF0aW9uLCB1bnByb2plY3RpbmcgdGhlIHZpc2libGUgcGFydAor
ICAgICAgICBvZiB0aGUgbGF5ZXIgdG8gbGF5ZXIgY29vcmRpbmF0ZSBzcGFjZSB0byBmaW5kIHdo
aWNoIHRpbGVzIGFyZSB2aXNpYmxlLgorICAgICAgICBJbnN0ZWFkIG9mIGRvaW5nIGEgdHJhZGl0
aW9uYWwgdW5wcm9qZWN0aW9uIG9mIHBvaW50IHRvIGxpbmUgYW5kIHNlZQorICAgICAgICB3aGVy
ZSB0aGUgbGluZSBpbnRlcnNlY3RzIHRoZSBsYXllciwgdGhpcyBwYXRjaCB1c2VzIHRoZSB3LWNv
b3JkaW5hdGVzCisgICAgICAgIG9mIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBlcmZvcm0gInBlcnNw
ZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIiBvZiB0aGUKKyAgICAgICAgaW50ZXJzZWN0aW9uIHBv
aW50cyBpbiBkZXZpY2Ugc3BhY2UsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgdW5w
cm9qZWN0aW9uIHNpbmNlIHBlcnNwZWN0aXZlIGNvcnJlY3QgdGV4dHVyaW5nIGNvbXB1dGVzIGEg
MkQKKyAgICAgICAgY29vcmRpbmF0ZSBpbiAobm9ybWFsaXplZCkgbGF5ZXIgY29vcmRpbmF0ZSBz
cGFjZSB3aGljaCBpcyBlYXNpbHkKKyAgICAgICAgc2NhbGVkIHVwIHRvIHRoZSBsYXllciBib3Vu
ZHMgYW5kIGdldCB0aGUgdmlzaWJsZSByZWdpb24gZXhwcmVzc2VkIGluCisgICAgICAgIGxheWVy
IGNvb3JkaW5hdGUgc3BhY2UuCisKKyAgICAgICAgVGhlIHZpc2libGUgYXJlYSBpcyBhcHByb3hp
bWF0ZWQgYnkgYSByZWN0YW5nbGUsIGFuZCBhIHNldCBvZiB0aWxlcworICAgICAgICBuZWVkaW5n
IHJlbmRlciBhcmUgYWRkZWQgdG8gdGhlIG1peCwgYW5kICB3ZSBoYXZlIGEgc3dhcHBhYmxlIGRh
dGEKKyAgICAgICAgc3RydWN0dXJlIHNvIHZpc2JpbGl0eSBjYW4gYmUgdHJhbnNmZXJyZWQgdG8g
V2ViS2l0IHRocmVhZCB3aXRob3V0CisgICAgICAgIG11dGV4ZXMsIGJ1dCBpbnN0ZWFkIHVzaW5n
IGF0b21pYyBzd2FwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvQ2FudmFz
TGF5ZXJXZWJLaXRUaHJlYWQuY3BwOgorICAgICAgICAoQ2FudmFzTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNvbXBvc2l0aW5nVGhy
ZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1Rl
eHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdl
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoRUdMSW1hZ2VMYXllckNv
bXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuaDoKKyAgICAgICAgKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGU6OkxheWVyVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRp
bGU6OnNldENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6dXBkYXRlQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpkaXNjYXJkQ29udGVudHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmg6CisgICAg
ICAgIChMYXllclRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlOjpjb250ZW50c1Nj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZTo6c2V0Q29udGVudHNEaXJ0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcDoKKyAg
ICAgICAgKExheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxp
dHk6OkxheWVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6
OnZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c2V0Vmlz
aWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJWaXNpYmlsaXR5OjpuZWVkc1JlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OnRpbGVOZWVkc1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6OndpbGxSZW5kZXJUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVmlzaWJpbGl0eTo6c3dhcFRpbGVzTmVlZGluZ1JlbmRlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclZpc2liaWxpdHk6Om1lcmdlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6TGF5ZXJUaWxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjp+TGF5ZXJUaWxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyOjp1cGRhdGVUZXh0dXJlQ29udGVudHNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRpbGVyOjpzd2FwRnJvbnRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXI6OnNldEZyb250VmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OnVwbG9hZFRleHR1cmVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6cHJvY2Vzc1RleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6YWRkVGlsZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpwZXJmb3JtVGls
ZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyOjpkcmF3VGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjppbmZsYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXI6OnBydW5lVGV4
dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlcjo6cmVjdEZvclRpbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclRpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGlsZXI6OlRleHR1cmVKb2I6OlRleHR1cmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlcjo6dGFrZUZyb250VmlzaWJpbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXQpOgorICAgICAgICAoV2ViQ29yZTo6ZG90KToKKyAgICAgICAgKExh
eWVyQ2xpcEVkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDbGlwRWRnZTo6TGF5ZXJDbGlw
RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNsaXBFZGdlOjppc1BvaW50SW5zaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2xpcEVkZ2U6OmNvbXB1dGVJbnRlcnNlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6aW50ZXJzZWN0UG9seWdvbldpdGhSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Om1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9ydCk6CisgICAgICAgIChVbnByb2plY3Rpb25WZXJ0
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZU1hbmhhdHRhbkRpc3RhbmNlVG9WaWV3cG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjp1bnByb2plY3QpOgorCiAyMDEzLTA1LTMxICBBcnZpZCBO
aWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgbGF5ZXJzIHRoYXQgaW50ZXJzZWN0IHRoZSBpbWFnZSBwbGFuZSBh
cmUgaW5jb3JyZWN0bHkgdHJhbnNmb3JtZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmlu
ZGV4IDE1YzI5YWU2MjY3NDQyMTg2M2YwNmU1NmNhNTBmNDg5YTQwYTA1MDcuLmU2ODdjY2RjOGYy
NjE3Y2IzMzM3OGIxMjhmMGMzMDk3MWRlZmZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA2LTA0ICBBcnZpZCBOaWxzc29uICA8YW5pbHNz
b25AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gTGF5ZXJUaWxlciBmYWlscyB0byB0
aWxlIHJlYWxseSBiaWcgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTcyMTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQUiAyNzM1NTAKKworICAgICAgICBBZGFwdCB0byBjaGFuZ2VzIGluIExh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQgaW50ZXJmYWNlLgorCisgICAgICAgICogQXBpL1dl
Yk92ZXJsYXkuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJPdmVybGF5TGF5
ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKToKKyAgICAgICAgKiBBcGkv
V2ViT3ZlcmxheV9wLmg6CisgICAgICAgIChXZWJPdmVybGF5TGF5ZXJDb21wb3NpdGluZ1RocmVh
ZENsaWVudCk6CisKIDIwMTMtMDYtMTIgIExlbyBZYW5nICA8bGVveWFuZ0ByaW0uY29tPgogCiAg
ICAgICAgIFtCbGFja0JlcnJ5XSBVc2UgUmVmUHRyIGZvciBIVE1MSW5wdXRFbGVtZW50IGluc2lk
ZSBDcmVkZW50aWFsVHJhbnNmb3JtRGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9DYW52YXNMYXllcldlYktpdFRocmVhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVyV2Vi
S2l0VGhyZWFkLmNwcAppbmRleCA0MzRlNzQxYTBmMzg0ZmNhZWQ2NmM0NjgxZmE3YzI3MjRkOTlh
NGI4Li5jOGE5ZjhjY2RjMzI0MWQzOWFhMjFkMTA5NDIwMzQyZTY1NjhiMWJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0NhbnZhc0xheWVy
V2ViS2l0VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0NhbnZhc0xheWVyV2ViS2l0VGhyZWFkLmNwcApAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqLCBib29sKSB7IH0KICAgICB2b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCopIHsgfQogCi0gICAgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21w
b3NpdGluZ1RocmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJik7CisgICAg
dm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNvbnN0IEdMRVMyUHJv
Z3JhbSYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9p
ZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAKICAgICB2b2lkIGNv
bW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CkBAIC01
OSw3ICs1OSw3IEBAIENhbnZhc0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OkNhbnZhc0xh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQoQmxhY2tCZXJyCiB7CiB9CiAKLXZvaWQgQ2FudmFz
TGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyLCBkb3VibGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpCit2b2lkIENhbnZh
c0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQcm9ncmFtJiwgZG91YmxlLCBjb25zdCBGbG9h
dFJlY3QmIC8qY2xpcFJlY3QqLykKIHsKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudC5jcHAKaW5kZXggOGQyZjU4OTNlNmRiMTY3MzliZTA2M2JjMWFlNWMwZDg4
MzUyOGExNC4uZmJlZWYzYzA1M2JjZWRkMGIyYTVjYmYxZmMyYjFiYmNlNjkxNWUyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFn
ZUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFk
Q2xpZW50LmNwcApAQCAtNDUsNyArNDUsNyBAQCB2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZENsaWVudDo6dXBsb2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aQogewog
fQogCi12b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudDo6ZHJhd1RleHR1
cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgLypzY2FsZSovLCBjb25z
dCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCit2b2lkIEVHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZENsaWVudDo6ZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBj
b25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0sIGRvdWJsZSAvKnNjYWxlKi8sIGNvbnN0IEZsb2F0
UmVjdCYgLypjbGlwUmVjdCovKQogewogICAgIGlmICghbV90ZXh0dXJlQWNjZXNzb3IgfHwgIW1f
dGV4dHVyZUFjY2Vzc29yLT50ZXh0dXJlSUQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvRUdMSW1hZ2VMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50LmgK
aW5kZXggZjQ2OWZjY2RhYWQwZWVhYzFjZWMzZWY2N2NhMjUwNjRhZWI4MWFlOS4uOGQzODlmZGYx
M2I0N2IyNDQ0MDAyMDg0NGM5YThmM2RjZWE4ZDBmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9FR0xJbWFnZUxheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0VHTEltYWdlTGF5ZXJDb21wb3NpdGluZ1RocmVhZENsaWVudC5oCkBAIC01NSw3ICs1
NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChM
YXllckNvbXBvc2l0aW5nVGhyZWFkKiwgYm9vbCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBs
b2FkVGV4dHVyZXNJZk5lZWRlZChMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNjYWxl
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91Ymxl
IHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogCiAgICAgdmlydHVhbCB2b2lk
IGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBv
c2l0aW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKaW5kZXggOGIzMzlkOTYwMGI3NjNmZmJm
ZjgzODM1NWQzNGE0NDZkOWFlYWMzNS4uZmZiYTdmMmZmOGNjOTdjMWY1MWJhNzBhZDJmZmRhNGM3
ODA3N2Y0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCkBA
IC0yMjUsNyArMjI1LDcgQEAgRmxvYXRRdWFkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnRyYW5z
Zm9ybWVkSG9sZVB1bmNoUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybS5t
YXBRdWFkKGhvbGVQdW5jaFJlY3QpOwogfQogCi12b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6
OmRyYXdUZXh0dXJlcyhkb3VibGUgc2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwg
Y29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCkKK3ZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZDo6ZHJhd1RleHR1cmVzKGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSwgZG91YmxlIHNjYWxl
LCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0
KQogewogICAgIGlmIChtX3BsdWdpblZpZXcpIHsKICAgICAgICAgaWYgKG1faXNWaXNpYmxlKSB7
CkBAIC0yNzYsMTAgKzI3NiwxMCBAQCB2b2lkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRyYXdU
ZXh0dXJlcyhkb3VibGUgc2NhbGUsIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZwogI2VuZGlmCiAK
ICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kcmF3VGV4dHVyZXModGhpcywg
c2NhbGUsIHByb2dyYW0pOworICAgICAgICBtX2NsaWVudC0+ZHJhd1RleHR1cmVzKHRoaXMsIHBy
b2dyYW0sIHNjYWxlLCBjbGlwUmVjdCk7CiB9CiAKLXZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVh
ZDo6ZHJhd1N1cmZhY2UoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0s
IExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIG1hc2ssIGNvbnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3Jh
bSkKK3ZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1N1cmZhY2UoY29uc3QgR0xFUzJQ
cm9ncmFtJiBwcm9ncmFtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbWFzaykKIHsKICAgICB1c2luZyBuYW1lc3BhY2Ug
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oCmluZGV4IGJkYTg3ZmMxYjhkZDAxYmQ3YzM5MWY4NWNkNDUwMWE1Zjlm
Njg0MmQuLjhiZWUyNjY4YmFhOTMzOWQ1YWIzZmYyNjcyZmU2Y2M4MDlkYmMwZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oCkBAIC0xOTcsOCArMTk3LDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkZWxldGVUZXh0dXJlcygpOwogCi0gICAgdm9pZCBkcmF3VGV4dHVy
ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpOwotICAgIHZvaWQgZHJh
d1N1cmZhY2UoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiBtYXNrLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJv
Z3JhbSYpOworICAgIHZvaWQgZHJhd1RleHR1cmVzKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2b2lkIGRyYXdT
dXJmYWNlKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFt
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBt
YXNrKTsKIAogICAgIHZvaWQgcmVsZWFzZVRleHR1cmVSZXNvdXJjZXMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBv
c2l0aW5nVGhyZWFkQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAppbmRleCAzMTg3OGY0YWNh
NDY0YmRjNTQwMDc2YTg5MzliNDZhYjhkMmZmODVjLi4wOGNmZTFhYTU2MTkyMDRlYjUzNmZhY2Jl
ODMxZTRjMDg2YjQ4MGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyQ29tcG9zaXRpbmdU
aHJlYWRDbGllbnQuaApAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBHTEVTMlByb2dyYW07CiB9CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIExheWVyQ29tcG9z
aXRpbmdUaHJlYWQ7CiBjbGFzcyBMYXllclRleHR1cmU7CiAKQEAgLTQyLDcgKzQzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGxv
YWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNj
YWxlLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYs
IGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKikgPSAwOwogCiAg
ICAgLy8gT3B0aW9uYWwuIEFsbG93cyBsYXllcnMgdG8gc2VydmUgYXMgYSBtYXNrIGZvciBvdGhl
ciBsYXllcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCmluZGV4IDVhNmI4NzVlMTQ5NTRkMWY3
NzUxOTFhZDA2ZGIyNDQ2MDYzNzgxNDAuLjAxM2JmZDBhYWQzMTVkNGEyYWExZDY3NTgxMzBkNGZj
OWY5NmI4ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcApAQCAtOTE5LDcgKzkxOSw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9z
aXRpbmdUaHJlYWQqIGxheWVyLCBpbnQKIAogICAgICAgICBpZiAoIWRyYXdTdXJmYWNlKSB7CiAg
ICAgICAgICAgICBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0gPSB1c2VMYXllclByb2dyYW0o
bGF5ZXJQcm9ncmFtKTsKLSAgICAgICAgICAgIGxheWVyLT5kcmF3VGV4dHVyZXMobV9zY2FsZSwg
cHJvZ3JhbSwgbV92aXNpYmxlUmVjdCk7CisgICAgICAgICAgICBsYXllci0+ZHJhd1RleHR1cmVz
KHByb2dyYW0sIG1fc2NhbGUsIG1fdmlzaWJsZVJlY3QsIGNsaXBSZWN0KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIERyYXcgdGhlIHJlZmxlY3Rpb24gaWYgaXQgZXhpc3RzLgog
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewpAQCAtOTMxLDExICs5MzEs
MTEgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
b21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAogICAgICAgICAgICAgICAgICAgICBtYXNrID0g
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsKIAogICAgICAgICAgICAgICAgIGNv
bnN0IEdMRVMyUHJvZ3JhbSYgcHJvZ3JhbSA9IHVzZUxheWVyUHJvZ3JhbShsYXllclByb2dyYW0s
IG1hc2spOwotICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJS
ZW5kZXJlclN1cmZhY2UoKS0+cmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgbWFzaywgcHJvZ3JhbSk7
CisgICAgICAgICAgICAgICAgbGF5ZXItPmRyYXdTdXJmYWNlKHByb2dyYW0sIGxheWVyLT5sYXll
clJlbmRlcmVyU3VyZmFjZSgpLT5yZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBtYXNrKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY29uc3QgR0xFUzJQcm9ncmFtJiBwcm9ncmFtID0gdXNl
TGF5ZXJQcm9ncmFtKGxheWVyUHJvZ3JhbSwgbGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICAgICAg
ICAgIGxheWVyLT5kcmF3U3VyZmFjZShsYXllci0+bGF5ZXJSZW5kZXJlclN1cmZhY2UoKS0+ZHJh
d1RyYW5zZm9ybSgpLCBsYXllci0+bWFza0xheWVyKCksIHByb2dyYW0pOworICAgICAgICAgICAg
bGF5ZXItPmRyYXdTdXJmYWNlKHByb2dyYW0sIGxheWVyLT5sYXllclJlbmRlcmVyU3VyZmFjZSgp
LT5kcmF3VHJhbnNmb3JtKCksIGxheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgICAgIH0KICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvTGF5ZXJUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJUaWxlLmNwcAppbmRleCAwNGUxZWQ1MDM1ZDJkNmU3MTI3MTdmYWZlNDBhZDEy
MjNlNjlhMWM5Li43ZTkzMzJkN2NkYThlZTM4M2U0MjNiODVlODA2NTYwODQ0ZTU2NGFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVy
VGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclRpbGUuY3BwCkBAIC0yNyw5ICsyNyw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IExheWVyVGlsZTo6TGF5ZXJUaWxlKCkKLSAgICA6IG1fY29udGVudHNEaXJ0eShmYWxzZSkKKyAg
ICA6IG1fc2NhbGUoMCkKKyAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKICAgICAsIG1fdmlz
aWJsZShmYWxzZSkKLSAgICAsIG1fbmVlZHNSZW5kZXIoZmFsc2UpCiB7CiB9CiAKQEAgLTQxLDE2
ICs0MSwxOSBAQCBMYXllclRpbGU6On5MYXllclRpbGUoKQogCiB2b2lkIExheWVyVGlsZTo6c2V0
Q29udGVudHMoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGNvbnRlbnRz
KQogeworICAgIG1fc2NhbGUgPSAwOyAvLyBSZXNvbHV0aW9uIGluZGVwZW5kZW50CiAgICAgc2V0
VGV4dHVyZSh0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlRm9yQ29udGVu
dHMoY29udGVudHMpKTsKIH0KIAotdm9pZCBMYXllclRpbGU6OnVwZGF0ZUNvbnRlbnRzKEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBjb250ZW50cykKK3ZvaWQgTGF5ZXJU
aWxlOjp1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZl
ciogY29udGVudHMsIGRvdWJsZSBzY2FsZSkKIHsKKyAgICBtX3NjYWxlID0gc2NhbGU7CiAgICAg
c2V0VGV4dHVyZSh0ZXh0dXJlQ2FjaGVDb21wb3NpdGluZ1RocmVhZCgpLT51cGRhdGVDb250ZW50
cyhtX3RleHR1cmUsIGNvbnRlbnRzKSk7CiB9CiAKIHZvaWQgTGF5ZXJUaWxlOjpkaXNjYXJkQ29u
dGVudHMoKQogeworICAgIG1fc2NhbGUgPSAwOyAvLyBVbmtub3duIHNjYWxlCiAgICAgc2V0VGV4
dHVyZSgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9MYXllclRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlLmgKaW5kZXggMTNkMzJjOWVjNzA1ZjQzYTFlZTBkMGZk
MTU3YWMxOTM4ODE2YzRmOS4uODNhMzY1NDM1YWY2MGQyOTY1NmRhMDVhNjU4OTliMTc1OWMyM2U4
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJy
eS9MYXllclRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFj
a2JlcnJ5L0xheWVyVGlsZS5oCkBAIC00NiwyOSArNDYsMjMgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZSAmJiBtX3RleHR1cmUtPmJ1ZmZl
cigpOyB9CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFw
aGljczo6QnVmZmVyKik7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciopOworICAgIHZvaWQgdXBkYXRlQ29udGVudHMoQmxhY2tC
ZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqLCBkb3VibGUgc2NhbGUpOwogICAgIHZv
aWQgZGlzY2FyZENvbnRlbnRzKCk7CiAKLSAgICAvLyBUaGUgY3VycmVudCB0ZXh0dXJlIGlzIGFu
IGFjY3VyYXRlIHByZXZpZXcgb2YgdGhpcyBsYXllciwgYnV0IGEgbW9yZQotICAgIC8vIGRldGFp
bGVkIHRleHR1cmUgY291bGQgYmUgb2J0YWluZWQgYnkgcmVwYWludGluZyB0aGUgbGF5ZXIuIFVz
ZWQgd2hlbgotICAgIC8vIHpvb20gbGV2ZWwgY2hhbmdlcy4KLSAgICB2b2lkIHNldENvbnRlbnRz
RGlydHkoKSB7IG1fY29udGVudHNEaXJ0eSA9IHRydWU7IH0KKyAgICAvLyBSZXR1cm5zIDAgaWYg
Y29udGVudHMgYXJlIHJlc29sdXRpb24gaW5kZXBlbmRlbnQgb3Igc2NhbGUgaXMgc2ltcGx5IHVu
a25vd24uCisgICAgZG91YmxlIGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxl
OyB9CiAKLSAgICBlbnVtIFJlbmRlclN0YXRlIHsgRG9lc05vdE5lZWRSZW5kZXIgPSAwLCBOZWVk
c1JlbmRlciA9IDEsIFJlbmRlclBlbmRpbmcgPSAyIH07Ci0gICAgUmVuZGVyU3RhdGUgcmVuZGVy
U3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTdGF0ZT4obV9uZWVkc1Jl
bmRlcik7IH0KLSAgICBib29sIG5lZWRzUmVuZGVyKCkgeyByZXR1cm4gbV9uZWVkc1JlbmRlciA9
PSBOZWVkc1JlbmRlcjsgfQotICAgIHZvaWQgc2V0TmVlZHNSZW5kZXIoYm9vbCBuZWVkc1JlbmRl
cikgeyBtX25lZWRzUmVuZGVyID0gbmVlZHNSZW5kZXI7IH0KLSAgICB2b2lkIHNldFJlbmRlclBl
bmRpbmcoKSB7IG1fbmVlZHNSZW5kZXIgPSBSZW5kZXJQZW5kaW5nOyB9Ci0gICAgdm9pZCBzZXRS
ZW5kZXJEb25lKCkgeyBtX25lZWRzUmVuZGVyID0gRG9lc05vdE5lZWRSZW5kZXI7IH0KKyAgICAv
LyBUaGUgdGV4dHVyZSBjb250ZW50cyBhcmUgZGlydHkgZHVlIHRvIGFwcGVhcmFuY2Ugb2YgcGFn
ZSBjaGFuZ2luZywgb3IgYSBjaGFuZ2UgaW4gY29udGVudHMgc2NhbGUuCisgICAgdm9pZCBzZXRD
b250ZW50c0RpcnR5KCkgeyBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOyB9CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRUZXh0dXJlKFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlPik7CiAKICAgICAvLyBO
ZXZlciBhc3NpZ24gdG8gbV90ZXh0dXJlIGRpcmVjdGx5LCB1c2Ugc2V0VGV4dHVyZSgpIGFib3Zl
LgogICAgIFJlZlB0cjxMYXllclRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICBkb3VibGUgbV9zY2Fs
ZTsKICAgICBib29sIG1fY29udGVudHNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX3Zpc2libGUgOiAx
OwotICAgIHVuc2lnbmVkIG1fbmVlZHNSZW5kZXIgOiAyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxl
ci5jcHAKaW5kZXggNGNiNzQ1NTBkYzc3YjkzZjRmNGI5MTU2ZTljMGMwOTk4NmY5OTdkNy4uNWU0
YjIyZmM0MjgwZjA5ZDgyYTBhZTcxY2YxN2RhMTY1NTJlZDg4ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIu
Y3BwCkBAIC0yMiw5ICsyMiwxMiBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUaWxlci5oIgogCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNs
dWRlICJMYXllckNvbXBvc2l0aW5nVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJNZXNzYWdlLmgi
CisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgorI2luY2x1ZGUgIkxheWVyVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKICNpbmNsdWRlICJUZXh0dXJlQ2FjaGVD
b21wb3NpdGluZ1RocmVhZC5oIgogCkBAIC0zMiwxMiArMzUsNDkgQEAKICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1TY3JlZW4uaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0
aW5ncy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgX05UT19DUFVfSERSXyhz
bXB4Y2hnLmgpCisKKyNkZWZpbmUgREVCVUdfTEFZRVJfVklTSUJJTElUWSAwIC8vIFNob3cgdmlz
aWJsZSByZWdpb24gb2YgbGF5ZXJzIGFzIGEgdGhpY2sgYm9yZGVyLCBhbmQgcHJpbnQgdmlzaWJs
ZSByZWN0LgorI2lmIERFQlVHX0xBWUVSX1ZJU0lCSUxJVFkKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkdyYXBoaWNzOjpHTEVTMlByb2dyYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgTGF5ZXJWaXNpYmlsaXR5IHsKK3B1YmxpYzoKKyAgICBMYXllclZpc2liaWxpdHkoY29uc3Qg
RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05l
ZWRpbmdSZW5kZXIpCisgICAgICAgIDogbV92aXNpYmxlUmVjdCh2aXNpYmxlUmVjdCkKKyAgICAg
ICAgLCBtX3RpbGVzTmVlZGluZ1JlbmRlcih0aWxlc05lZWRpbmdSZW5kZXIpCisgICAgeworICAg
IH0KKworICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaWJs
ZVJlY3Q7IH0KKyAgICB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJs
ZVJlY3QpIHsgbV92aXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OyB9CisKKyAgICBib29sIG5lZWRz
UmVuZGVyKCkgY29uc3QgeyByZXR1cm4gIW1fdGlsZXNOZWVkaW5nUmVuZGVyLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgdGlsZU5lZWRzUmVuZGVyKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdGlsZXNOZWVkaW5nUmVuZGVyLmNvbnRhaW5zKGluZGV4KTsgfQorICAgIHZv
aWQgbWFya1RpbGVBc1JlbmRlcmVkKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIHsgbV90aWxlc05l
ZWRpbmdSZW5kZXIucmVtb3ZlKGluZGV4KTsgbV90aWxlc1JlbmRlcmVkLmFkZChpbmRleCk7IH0K
KyAgICB2b2lkIHN3YXBUaWxlc05lZWRpbmdSZW5kZXIoSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxl
c05lZWRpbmdSZW5kZXIpIHsgbV90aWxlc05lZWRpbmdSZW5kZXIuc3dhcCh0aWxlc05lZWRpbmdS
ZW5kZXIpOyB9CisKKyAgICB2b2lkIG1lcmdlKExheWVyVmlzaWJpbGl0eSogdmlzaWJpbGl0eSkK
KyAgICB7CisgICAgICAgIGlmICghdmlzaWJpbGl0eSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgbV90aWxlc1JlbmRlcmVkLnN3YXAodmlzaWJpbGl0eS0+bV90aWxlc1JlbmRlcmVkKTsK
KyAgICAgICAgZm9yIChIYXNoU2V0PFRpbGVJbmRleD46Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1Jl
bmRlcmVkLmJlZ2luKCk7IGl0ICE9IG1fdGlsZXNSZW5kZXJlZC5lbmQoKTsgKytpdCkKKyAgICAg
ICAgICAgIG1fdGlsZXNOZWVkaW5nUmVuZGVyLnJlbW92ZSgqaXQpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlUmVjdDsKKyAgICBIYXNoU2V0PFRpbGVJbmRleD4g
bV90aWxlc05lZWRpbmdSZW5kZXI7CisgICAgSGFzaFNldDxUaWxlSW5kZXg+IG1fdGlsZXNSZW5k
ZXJlZDsKK307CisKIC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHRoZSB2aWV3cG9ydCBhcyB1c2Vk
IGluIHRleHR1cmUgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMKIC8vIHNsaWdodGx5IGxhcmdlciBz
byB0ZXh0dXJlcyBhcmUgdXBsb2FkZWQgYmVmb3JlIGJlY29taW5nIHJlYWxseSB2aXNpYmxlLgog
Ly8gSW5mbGF0aW9uIGlzIGdyZWF0ZXIgaW4gWSBkaXJlY3Rpb24gKG9uZSBzY3JlZW5mdWwgaW4g
ZWl0aGVyIGRpcmVjdGlvbikgc2luY2UKQEAgLTQ5LDE2ICs4OSwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAvLyBjdXJyZW50IHZpZXdwb3J0IGFzIHZpc2libGUuCiBjb25zdCBGbG9hdFNpemUg
dmlld3BvcnRJbmZsYXRpb24oMS4yZiwgMy4wZik7CiAKLXN0YXRpYyB2b2lkIHRyYW5zZm9ybVBv
aW50KGZsb2F0IHgsIGZsb2F0IHksIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtLCBmbG9h
dCogcmVzdWx0KQotewotICAgIC8vIFNxdWFzaCB0aGUgWiBjb29yZGluYXRlIHNvIHRoYXQgbGF5
ZXJzIGFyZW4ndCBjbGlwcGVkIGFnYWluc3QgdGhlIG5lYXIgYW5kCi0gICAgLy8gZmFyIHBsYW5l
LiBOb3RlIHRoYXQgdGhlIHBlcnNwZWN0aXZlIGlzIG1haW50YWluZWQgYXMgd2UncmUgc3RpbGwg
cGFzc2luZwotICAgIC8vIGRvd24gdGhlIFcgY29vcmRpbmF0ZS4KLSAgICByZXN1bHRbMF0gPSB4
ICogbS5tMTEoKSArIHkgKiBtLm0yMSgpICsgbS5tNDEoKTsKLSAgICByZXN1bHRbMV0gPSB4ICog
bS5tMTIoKSArIHkgKiBtLm0yMigpICsgbS5tNDIoKTsKLSAgICByZXN1bHRbMl0gPSAwOwotICAg
IHJlc3VsdFszXSA9IHggKiBtLm0xNCgpICsgeSAqIG0ubTI0KCkgKyBtLm00NCgpOwotfQorLy8g
VGhpcyBpcyBhIHNtYWxsIG9wdGltaXphdGlvbiB0byBjdXQgZG93biBvbiBjYWxscyB0byBvcGVy
YXRvciBuZXcuCisvLyBTaW5jZSB0aGUgY29tcG9zaXRpbmcgdGhyZWFkIG5vcm1hbGx5IHN3YXBz
IGluIG5ldyB2aXNpYmlsaXR5IG9iamVjdHMgbXVjaCBtb3JlCisvLyBvZnRlbiB0aGFuIHRoZSBX
ZWJLaXQgdGhyZWFkIHN3YXBzIHRoZW0gb3V0LCBpdCdzIGxpa2VseSB0aGF0IGl0IHdpbGwgc3dh
cCBvdXQKKy8vIHRoZSBwcmV2aW91cyB2aXNpYmlsaXR5IG9iamVjdCBhbmQgd2UgY2FuIHJldXNl
IHRoYXQuCitzdGF0aWMgTGF5ZXJWaXNpYmlsaXR5KiBzX3NwYXJlVmlzaWJpbGl0eSA9IDA7CiAK
IHN0YXRpYyBJbnRTaXplIGRlZmF1bHRUaWxlU2l6ZSgpCiB7CkBAIC02OCwxMiArMTAzLDEyIEBA
IHN0YXRpYyBJbnRTaXplIGRlZmF1bHRUaWxlU2l6ZSgpCiAKIExheWVyVGlsZXI6OkxheWVyVGls
ZXIoTGF5ZXJXZWJLaXRUaHJlYWQqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKLSAgICAs
IG1fbmVlZHNSZW5kZXJDb3VudCgwKQogICAgICwgbV9uZWVkc0JhY2tpbmcoZmFsc2UpCiAgICAg
LCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlU2l6
ZSgpKQogICAgICwgbV9jbGVhclRleHR1cmVKb2JzKGZhbHNlKQotICAgICwgbV9jb250ZW50c1Nj
YWxlKDAuMCkKKyAgICAsIG1fZnJvbnRWaXNpYmlsaXR5KDApCisgICAgLCBtX2JhY2tWaXNpYmls
aXR5KDApCiB7CiAgICAgcmVmKCk7IC8vIFRoaXMgcmVmKCkgaXMgbWF0Y2hlZCBieSBhIGRlcmVm
IGluIGxheWVyQ29tcG9zaXRpbmdUaHJlYWREZXN0cm95ZWQoKTsKIH0KQEAgLTg0LDYgKzExOSw5
IEBAIExheWVyVGlsZXI6On5MYXllclRpbGVyKCkKICAgICAvLyBiZWZvcmUgbm93LiBXZSBjYW4n
dCBjYWxsIGl0IGhlcmUgYmVjYXVzZSB3ZSBoYXZlIG5vCiAgICAgLy8gT3BlbkdMIGNvbnRleHQu
CiAgICAgQVNTRVJUKG1fdGlsZXMuaXNFbXB0eSgpKTsKKworICAgIGRlbGV0ZSBtX2Zyb250Vmlz
aWJpbGl0eTsKKyAgICBkZWxldGUgbV9iYWNrVmlzaWJpbGl0eTsKIH0KIAogdm9pZCBMYXllclRp
bGVyOjpsYXllcldlYktpdFRocmVhZERlc3Ryb3llZCgpCkBAIC0xMTQsMjIgKzE1Miw0MCBAQCB2
b2lkIExheWVyVGlsZXI6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKGRvdWJsZSBzY2Fs
ZSkKIHsKICAgICB1cGRhdGVUaWxlU2l6ZSgpOwogCisgICAgTGF5ZXJWaXNpYmlsaXR5KiBmcm9u
dFZpc2liaWxpdHkgPSB0YWtlRnJvbnRWaXNpYmlsaXR5KCk7CisgICAgaWYgKGZyb250VmlzaWJp
bGl0eSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBkaXJ0eSwgc3RhcnQgZnJlc2guIE90aGVyd2lz
ZSwga2VlcCB0cmFjayBvZiB0aWxlcyByZW5kZXJlZCBzbyBmYXIsIHRvIGF2b2lkIHJlLXJlbmRl
cmluZyB0aGUgc2FtZSBjb250ZW50LgorICAgICAgICBpZiAoIW1fY29udGVudHNEaXJ0eSkKKyAg
ICAgICAgICAgIGZyb250VmlzaWJpbGl0eS0+bWVyZ2UobV9iYWNrVmlzaWJpbGl0eSk7CisgICAg
ICAgIGRlbGV0ZSBtX2JhY2tWaXNpYmlsaXR5OworICAgICAgICBtX2JhY2tWaXNpYmlsaXR5ID0g
ZnJvbnRWaXNpYmlsaXR5OworICAgIH0KKyAgICBib29sIG5lZWRzUmVuZGVyID0gbV9iYWNrVmlz
aWJpbGl0eSAmJiBtX2JhY2tWaXNpYmlsaXR5LT5uZWVkc1JlbmRlcigpOworCiAgICAgLy8gQ2hl
Y2sgaWYgdXBkYXRlIGlzIG5lZWRlZAotICAgIGlmICghbV9jb250ZW50c0RpcnR5ICYmICFuZWVk
c1JlbmRlcigpKQorICAgIGlmICghbV9jb250ZW50c0RpcnR5ICYmICFuZWVkc1JlbmRlcikKICAg
ICAgICAgcmV0dXJuOwogCisjaWYgREVCVUdfTEFZRVJfVklTSUJJTElUWQorICAgIGlmIChtX2Jh
Y2tWaXNpYmlsaXR5ICYmICFtX2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpLmlzRW1wdHko
KSkKKyAgICAgICAgcHJpbnRmKCJMYXllciAweCVwIGxvY2FsIHZpc2libGUgcmVjdCAlc1xuIiwg
bV9sYXllciwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVjdChtX2JhY2tWaXNpYmlsaXR5
LT52aXNpYmxlUmVjdCgpKS50b1N0cmluZygpLmNfc3RyKCkpOworI2VuZGlmCisKICAgICAvLyBU
aGVyZSdzIG5vIHBvaW50IGluIGRyYXdpbmcgY29udGVudHMgYXQgYSBoaWdoZXIgcmVzb2x1dGlv
biBmb3Igc2NhbGUKICAgICAvLyBpbnZhcmlhbnQgbGF5ZXJzLgogICAgIGlmIChtX2xheWVyLT5z
aXplSXNTY2FsZUludmFyaWFudCgpKQotICAgICAgICBzY2FsZSA9IDEuMDsKLQotICAgIGJvb2wg
aXNab29tSm9iID0gZmFsc2U7Ci0gICAgaWYgKHNjYWxlICE9IG1fY29udGVudHNTY2FsZSkgewot
ICAgICAgICAvLyBUaGUgZmlyc3QgdGltZSBhcm91bmQsIGl0IGRvZXMgbm90IGNvdW50IGFzIGEg
em9vbSBqb2IuCi0gICAgICAgIGlmIChtX2NvbnRlbnRzU2NhbGUpCi0gICAgICAgICAgICBpc1pv
b21Kb2IgPSB0cnVlOwotICAgICAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLSAgICB9Cisg
ICAgICAgIHNjYWxlID0gMTsKKworICAgIC8vIFJlbmRlciBvbmx5IHZpc2libGUgdGlsZXMuIE1h
c2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSB0aGV5J3JlIG5ldmVyIGNvbnNp
ZGVyZWQKKyAgICAvLyB2aXNpYmxlLiBXb3JrYXJvdW5kIHRoaXMgYnkgYWx3YXlzIHJlbmRlcmlu
ZyB0aGVtIChhIHZlcnkgZmFzdCBvcGVyYXRpb24gd2l0aCB0aGUKKyAgICAvLyBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6R3JhcGhpY3NDb250ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4g
cmVmJ2luZyB0aGUgbWFzayBpbWFnZSkuCisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0OworICAg
IGlmIChtX2xheWVyLT5pc01hc2soKSB8fCBtX2xheWVyLT5maWx0ZXJzKCkuc2l6ZSgpKQorICAg
ICAgICB2aXNpYmxlUmVjdCA9IEZsb2F0UmVjdChJbnRQb2ludDo6emVybygpLCBtX2xheWVyLT5i
b3VuZHMoKSk7CisgICAgZWxzZSBpZiAobV9iYWNrVmlzaWJpbGl0eSkKKyAgICAgICAgdmlzaWJs
ZVJlY3QgPSBtX2JhY2tWaXNpYmlsaXR5LT52aXNpYmxlUmVjdCgpOworICAgIGVsc2UKKyAgICAg
ICAgdmlzaWJsZVJlY3QgPSBGbG9hdFJlY3QoQmxhY2tCZXJyeTo6UGxhdGZvcm06OkZsb2F0UmVj
dChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6Omluc3RhbmNlKCktPmxheWVyVGlsZXJQ
cmVmaWxsUmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QobV9kaXJ0eVJlY3QpOwogICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZTsKQEAgLTE0
MSwxMyArMTk3LDE2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZO
ZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICBJbnRSZWN0IHVudHJhbnNmb3JtZWRCb3VuZHNS
ZWN0KGJvdW5kc1JlY3QpOwogICAgICAgICByZXF1aXJlZFRleHR1cmVTaXplID0gYm91bmRzUmVj
dC5zaXplKCk7CiAKLSAgICAgICAgaWYgKHNjYWxlICE9IDEuMCkgeworICAgICAgICBpZiAoc2Nh
bGUgIT0gMSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAg
ICAgICAgICAgbWF0cml4LnNjYWxlKHNjYWxlKTsKIAogICAgICAgICAgICAgZGlydHlSZWN0ID0g
bWF0cml4Lm1hcFJlY3QodW50cmFuc2Zvcm1lZERpcnR5UmVjdCk7CiAgICAgICAgICAgICByZXF1
aXJlZFRleHR1cmVTaXplID0gbWF0cml4Lm1hcFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCByZXF1aXJlZFRleHR1cmVTaXplKSkuc2l6ZSgpOwogICAgICAgICAgICAgYm91bmRzUmVjdCA9
IG1hdHJpeC5tYXBSZWN0KHVudHJhbnNmb3JtZWRCb3VuZHNSZWN0KTsKKyAgICAgICAgICAgIC8v
IFRoZSB2aXNpYmxlIHJlY3QgaXMgdXNpbmcgdW5zY2FsZWQgY29vcmRpbmF0ZXMgaW4gbW9zdCBj
YXNlcy4KKyAgICAgICAgICAgIGlmIChtX2JhY2tWaXNpYmlsaXR5IHx8IG1fbGF5ZXItPmlzTWFz
aygpIHx8IG1fbGF5ZXItPmZpbHRlcnMoKS5zaXplKCkpCisgICAgICAgICAgICAgICAgdmlzaWJs
ZVJlY3QgPSBtYXRyaXgubWFwUmVjdCh2aXNpYmxlUmVjdCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX3BlbmRpbmdUZXh0dXJlU2l6ZSkKQEAgLTE2
Myw4NiArMjIyLDU3IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZO
ZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICBkaXJ0eVJlY3QgPSBJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpOwogICAgIH0KIAotICAgIGJvb2wgZGlkUmVz
aXplID0gZmFsc2U7CiAgICAgSW50UmVjdCBwcmV2aW91c1RleHR1cmVSZWN0KEludFBvaW50Ojp6
ZXJvKCksIG1fcGVuZGluZ1RleHR1cmVTaXplKTsKICAgICBpZiAobV9wZW5kaW5nVGV4dHVyZVNp
emUgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkgewotICAgICAgICBkaWRSZXNpemUgPSB0cnVlOwog
ICAgICAgICBtX3BlbmRpbmdUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4dHVyZVNpemU7CiAgICAg
ICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6cmVzaXplQ29udGVudHMobV9wZW5kaW5nVGV4
dHVyZVNpemUpKTsKICAgICB9CiAKLSAgICBJbnRSZWN0IHJlY3RGb3JPbmVUaWxlKEludFBvaW50
Ojp6ZXJvKCksIHRpbGVTaXplKCkpOwotICAgIGJvb2wgd2FzT25lVGlsZSA9IHJlY3RGb3JPbmVU
aWxlLmNvbnRhaW5zKHByZXZpb3VzVGV4dHVyZVJlY3QpOwotICAgIGJvb2wgaXNPbmVUaWxlID0g
cmVjdEZvck9uZVRpbGUuY29udGFpbnMoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3BlbmRp
bmdUZXh0dXJlU2l6ZSkpOworICAgIGJvb2wgY29udGVudHNEaXJ0eSA9IG1fY29udGVudHNEaXJ0
eTsKKyAgICBpZiAobV9jb250ZW50c0RpcnR5KSB7CisgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBn
b2luZyB0byByZS1yZW5kZXIgYWxsIHRoZSBjb3ZlcmVkIHRpbGVzLCBtYXJrIHRob3NlIG5vdCBj
b3ZlcmVkIGFzIGRpcnR5LgorICAgICAgICBpZiAoIXZpc2libGVSZWN0LmNvbnRhaW5zKGRpcnR5
UmVjdCkpCisgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpcnR5Q29udGVu
dHMoZGlydHlSZWN0KSk7CisgICAgICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgICAg
ICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIH0KIAotICAgIEhhc2hTZXQ8VGlsZUlu
ZGV4PiByZW5kZXJKb2JzOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGls
ZXNNdXRleCk7Ci0KLSAgICAgICAgLy8gQWRkIHByZWZpbGwgam9icwotICAgICAgICBpZiAoIWRp
cnR5UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5zdGFuY2UoKS0+bGF5ZXJUaWxlclByZWZpbGxSZWN0
KCk7Ci0gICAgICAgICAgICByZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICAgICAg
VGlsZUluZGV4IGJlZ2luID0gaW5kZXhPZlRpbGUocmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAg
ICAgICAgICAgIFRpbGVJbmRleCBlbmQgPSBpbmRleE9mVGlsZShyZWN0Lm1heFhNYXhZQ29ybmVy
KCkgKyB0aWxlU2l6ZSgpIC0gSW50U2l6ZSgxLCAxKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBiZWdpbi5pKCk7IGkgPCBlbmQuaSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBiZWdpbi5qKCk7IGogPCBlbmQuaigpOyArK2opCi0gICAgICAgICAg
ICAgICAgICAgIHJlbmRlckpvYnMuYWRkKFRpbGVJbmRleChpLCBqKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAvLyBJZiB3ZSBuZWVkIGRpc3BsYXkgYmVjYXVzZSB3ZSBubyBsb25n
ZXIgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGR1ZSB0byB0ZXh0dXJlIHNpemUgYmVjb21pbmcgMCB4
IDAsCisgICAgLy8gb3IgaWYgd2UncmUgcmUtcmVuZGVyaW5nIHRoZSB3aG9sZSB0aGluZyBhbnl3
YXksIGNsZWFyIG9sZCB0ZXh0dXJlIGpvYnMuCisgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUu
aXNFbXB0eSgpIHx8IGRpcnR5UmVjdCA9PSBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJlcXVp
cmVkVGV4dHVyZVNpemUpKQorICAgICAgICBjbGVhclRleHR1cmVKb2JzKCk7CiAKLSAgICAgICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gKCppdCkua2V5
OwotICAgICAgICAgICAgTGF5ZXJUaWxlKiB0aWxlID0gKCppdCkudmFsdWU7CisgICAgaWYgKHZp
c2libGVSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxUaWxl
SW5kZXg+IHJlbmRlckpvYnM7CisgICAgVGlsZUluZGV4IGZpcnN0OworICAgIFRpbGVJbmRleCBs
YXN0OworICAgIGlmIChtX2xheWVyLT5jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKSB7
CisgICAgICAgIC8vIFJlc29sdXRpb24gaW5kZXBlbmRlbnQgbGF5ZXJzIGhhdmUgYWxsIHRoZSBu
ZWVkZWQgZGF0YSBpbiB0aGUgZmlyc3QgdGlsZS4KKyAgICAgICAgZmlyc3QgPSBsYXN0ID0gVGls
ZUluZGV4KDAsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpcnN0ID0gaW5kZXhPZlRpbGUo
Zmxvb3JlZEludFBvaW50KHZpc2libGVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpKTsKKyAgICAgICAg
bGFzdCA9IGluZGV4T2ZUaWxlKGNlaWxlZEludFBvaW50KHZpc2libGVSZWN0Lm1heFhNYXhZQ29y
bmVyKCkpKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3QuaSgpOyBpIDw9IGxh
c3QuaSgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZmlyc3QuaigpOyBqIDw9
IGxhc3QuaigpOyArK2opIHsKKyAgICAgICAgICAgIFRpbGVJbmRleCBpbmRleChpLCBqKTsKICAg
ICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZShpbmRleCwgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSk7CiAgICAgICAgICAgICBpZiAodGlsZVJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAodGlsZS0+bmVlZHNSZW5kZXIo
KSkgewotICAgICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlclBlbmRpbmcoKTsKLSAgICAgICAg
ICAgICAgICAtLW1fbmVlZHNSZW5kZXJDb3VudDsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9u
ZWVkc1JlbmRlckNvdW50ID49IDApOworICAgICAgICAgICAgaWYgKG1fYmFja1Zpc2liaWxpdHkg
JiYgbV9iYWNrVmlzaWJpbGl0eS0+dGlsZU5lZWRzUmVuZGVyKGluZGV4KSkgeworI2lmIERFQlVH
X0xBWUVSX1ZJU0lCSUxJVFkKKyAgICAgICAgICAgICAgICBwcmludGYoIlRpbGUgYXQgKCVkLCAl
ZCkgbmVlZHMgcmVuZGVyXG4iLCBpbmRleC5pKCksIGluZGV4LmooKSk7CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICByZW5kZXJKb2JzLmFkZChpbmRleCk7CisgICAgICAgICAgICAgICAgbV9iYWNr
VmlzaWJpbGl0eS0+bWFya1RpbGVBc1JlbmRlcmVkKGluZGV4KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY29udGVudHNEaXJ0eSAmJiBkaXJ0eVJlY3QuaW50ZXJzZWN0cyh0aWxlUmVjdCkpCiAg
ICAgICAgICAgICAgICAgcmVuZGVySm9icy5hZGQoaW5kZXgpOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChtX2NvbnRlbnRzRGlydHkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGxvY2FsRGly
dHlSZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxEaXJ0eVJlY3QuaW50ZXJz
ZWN0KHRpbGVSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxEaXJ0eVJlY3QuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8v
IFJlbmRlciBvbmx5IHZpc2libGUgdGlsZXMuIE1hc2sgbGF5ZXJzIGFyZSBhIHNwZWNpYWwgY2Fz
ZSwgYmVjYXVzZSB0aGV5J3JlIG5ldmVyIGNvbnNpZGVyZWQKLSAgICAgICAgICAgICAgICAvLyB2
aXNpYmxlLiBXb3JrYXJvdW5kIHRoaXMgYnkgYWx3YXlzIHJlbmRlcmluZyB0aGVtIChhIHZlcnkg
ZmFzdCBvcGVyYXRpb24gd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAvLyBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3NDb250ZXh0IHNpbmNlIGl0IHdpbGwganVzdCByZXN1bHQgaW4gcmVm
J2luZyB0aGUgbWFzayBpbWFnZSkuCi0gICAgICAgICAgICAgICAgaWYgKHRpbGUtPmlzVmlzaWJs
ZSgpIHx8IG1fbGF5ZXItPmlzTWFzaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlckpv
YnMuYWRkKGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGlzY2FyZC9kaXJ0eSB0aGUgdGls
ZSBpZiBmb3Igc29tZSByZWFzb24gKGUuZy4gcHJlZmlsbCkgYSByZW5kZXIgam9iIHdhcyBhbHJl
YWR5IGFkZGVkLgotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJKb2JzLmNvbnRhaW5zKGluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
dm9pZCBjaGVja2VyYm9hcmRpbmcgdW5sZXNzIHRoZSBsYXllciBpcyByZXNpemVkLiBXaGVuCi0g
ICAgICAgICAgICAgICAgLy8gcmVzaXplZCwgdGhlIGNvbnRlbnRzIGFyZSBsaWtlbHkgdG8gY2hh
bmdlIGFwcGVhcmFuY2UsIGZvcgotICAgICAgICAgICAgICAgIC8vIGV4YW1wbGUgZHVlIHRvIGFz
cGVjdCByYXRpbyBjaGFuZ2UuIEhvd2V2ZXIsIGlmIGl0IGlzIGEKLSAgICAgICAgICAgICAgICAv
LyByZXNpemUgZHVlIHRvIHpvb21pbmcsIHRoZSBhc3BlY3QgcmF0aW8gYW5kIGNvbnRlbnQgd2ls
bAotICAgICAgICAgICAgICAgIC8vIHN0YXkgdGhlIHNhbWUsIGFuZCB3ZSBjYW4ga2VlcCB0aGUg
b2xkIHRleHR1cmUgY29udGVudCBhcyBhCi0gICAgICAgICAgICAgICAgLy8gcHJldmlldy4KLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogdGhlIHpvb20gcHJldmlldyBvbmx5IHdvcmtzIGlmIHdl
IGRvbid0IHJlLXRpbGUgdGhlCi0gICAgICAgICAgICAgICAgLy8gbGF5ZXIuIFdlIG5lZWQgdG8g
c3RvcmUgdGV4dHVyZSBjb29yZGluYXRlcyBpbgotICAgICAgICAgICAgICAgIC8vIFdlYkNvcmU6
OkxheWVyVGV4dHVyZSB0byBiZSBhYmxlIHRvIGZpeCB0aGF0LgotICAgICAgICAgICAgICAgIGlm
IChkaWRSZXNpemUgJiYgIShpc1pvb21Kb2IgJiYgd2FzT25lVGlsZSAmJiBpc09uZVRpbGUpKQot
ICAgICAgICAgICAgICAgICAgICBhZGRUZXh0dXJlSm9iKFRleHR1cmVKb2I6OmRpc2NhcmRDb250
ZW50cyh0aWxlUmVjdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpkaXJ0eUNvbnRlbnRzKHRpbGVSZWN0KSk7Ci0g
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBJZiB3ZSBuZWVkIGRpc3Bs
YXkgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCB0byBiZSBkaXNwbGF5ZWQsIGR1ZSB0byB0ZXh0
dXJlIHNpemUgYmVjb21pbmcgMCB4IDAsCi0gICAgLy8gb3IgaWYgd2UncmUgcmUtcmVuZGVyaW5n
IHRoZSB3aG9sZSB0aGluZyBhbnl3YXksIGNsZWFyIG9sZCB0ZXh0dXJlIGpvYnMuCi0gICAgaWYg
KHJlcXVpcmVkVGV4dHVyZVNpemUuaXNFbXB0eSgpIHx8IGRpcnR5UmVjdCA9PSBJbnRSZWN0KElu
dFBvaW50Ojp6ZXJvKCksIHJlcXVpcmVkVGV4dHVyZVNpemUpKQotICAgICAgICBjbGVhclRleHR1
cmVKb2JzKCk7Ci0KICAgICBpZiAocmVuZGVySm9icy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjY0LDkgKzI5NCw2IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNv
bnRlbnRzSWZOZWVkZWQoZG91YmxlIHNjYWxlKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotCi0gICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Ci0gICAgbV9kaXJ0eVJlY3QgPSBG
bG9hdFJlY3QoKTsKIH0KIAogQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIq
IExheWVyVGlsZXI6OmNyZWF0ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMzIwLDYg
KzM0NywyMiBAQCB2b2lkIExheWVyVGlsZXI6OmNvbW1pdFBlbmRpbmdUZXh0dXJlVXBsb2FkcyhM
YXllckNvbXBvc2l0aW5nVGhyZWFkKikKICAgICBtX3BlbmRpbmdUZXh0dXJlSm9icy5jbGVhcigp
OwogfQogCitMYXllclZpc2liaWxpdHkqIExheWVyVGlsZXI6OnN3YXBGcm9udFZpc2liaWxpdHko
TGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5KQoreworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PExheWVyVmlzaWJpbGl0eSo+KF9zbXBfeGNoZyhyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oJm1fZnJvbnRWaXNpYmlsaXR5KSwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4odmlzaWJp
bGl0eSkpKTsKK30KKwordm9pZCBMYXllclRpbGVyOjpzZXRGcm9udFZpc2liaWxpdHkoY29uc3Qg
RmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgSGFzaFNldDxUaWxlSW5kZXg+JiB0aWxlc05lZWRpbmdS
ZW5kZXIpCit7CisgICAgTGF5ZXJWaXNpYmlsaXR5KiB2aXNpYmlsaXR5ID0gc19zcGFyZVZpc2li
aWxpdHk7CisgICAgaWYgKHZpc2liaWxpdHkpIHsKKyAgICAgICAgdmlzaWJpbGl0eS0+c2V0Vmlz
aWJsZVJlY3QodmlzaWJsZVJlY3QpOworICAgICAgICB2aXNpYmlsaXR5LT5zd2FwVGlsZXNOZWVk
aW5nUmVuZGVyKHRpbGVzTmVlZGluZ1JlbmRlcik7CisgICAgfSBlbHNlCisgICAgICAgIHZpc2li
aWxpdHkgPSBuZXcgTGF5ZXJWaXNpYmlsaXR5KHZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5k
ZXIpOworICAgIHNfc3BhcmVWaXNpYmlsaXR5ID0gc3dhcEZyb250VmlzaWJpbGl0eSh2aXNpYmls
aXR5KTsKK30KKwogdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVy
Q29tcG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiB7CiAgICAgLy8gRm9yIHZpc2libGUg
bGF5ZXJzLCB3ZSBoYW5kbGUgdGhlIHRpbGUtbGV2ZWwgdmlzaWJpbGl0eQpAQCAtMzI3LDI0ICsz
NzAsMTEgQEAgdm9pZCBMYXllclRpbGVyOjpsYXllclZpc2liaWxpdHlDaGFuZ2VkKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqLCBib29sIHZpc2libGUpCiAgICAgaWYgKHZpc2libGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHsKLSAgICAgICAgLy8gQWxsIHRpbGVzIGFyZSBpbnZpc2libGUgbm93
LgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLQotICAgICAgICBm
b3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBtX3RpbGVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7
Ci0gICAgICAgICAgICBMYXllclRpbGUqIHRpbGUgPSAoKml0KS52YWx1ZTsKLSAgICAgICAgICAg
IHRpbGUtPnNldFZpc2libGUoZmFsc2UpOwotICAgICAgICAgICAgaWYgKHRpbGUtPm5lZWRzUmVu
ZGVyKCkpIHsKLSAgICAgICAgICAgICAgICB0aWxlLT5zZXROZWVkc1JlbmRlcihmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgLS1tX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KKyAgICBIYXNoU2V0PFRpbGVJbmRleD4gZW1wdHlUaWxlU2V0OworICAgIHNldEZyb250
VmlzaWJpbGl0eShGbG9hdFJlY3QoKSwgZW1wdHlUaWxlU2V0KTsKIH0KIAotdm9pZCBMYXllclRp
bGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQordm9p
ZCBMYXllclRpbGVyOjp1cGxvYWRUZXh0dXJlc0lmTmVlZGVkKExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqIGxheWVyKQogewogICAgIFRpbGVKb2JzTWFwIHRpbGVKb2JzTWFwOwogICAgIERlcXVlPFRl
eHR1cmVKb2I+Ojpjb25zdF9pdGVyYXRvciB0ZXh0dXJlSm9iSXRlckVuZCA9IG1fdGV4dHVyZUpv
YnMuZW5kKCk7CkBAIC0zNjAsMTIgKzM5MCwxMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwbG9hZFRl
eHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopCiAgICAgICAgICAgICBpZiAo
b3JpZ2luLngoKSA+PSBtX3JlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSB8fCBvcmlnaW4ueSgp
ID49IG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7CiAg
ICAgICAgICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwogICAgICAgICAgICAgbV90aWxlcy5h
ZGQodGlsZUpvYnNJdGVyLT5rZXksIHRpbGUpOwogICAgICAgICB9CiAKLSAgICAgICAgcGVyZm9y
bVRpbGVKb2IodGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOworICAgICAgICBwZXJmb3JtVGls
ZUpvYihsYXllciwgdGlsZSwgKnRpbGVKb2JzSXRlci0+dmFsdWUpOwogICAgIH0KIAogICAgIG1f
dGV4dHVyZUpvYnMuY2xlYXIoKTsKQEAgLTM4MCw2ICs0MDksMTUgQEAgdm9pZCBMYXllclRpbGVy
Ojpwcm9jZXNzVGV4dHVyZUpvYihjb25zdCBUZXh0dXJlSm9iJiBqb2IsIFRpbGVKb2JzTWFwJiB0
aWxlSm9ic00KIAogICAgICAgICBtX3JlcXVpcmVkVGV4dHVyZVNpemUgPSBwZW5kaW5nVGV4dHVy
ZVNpemU7CiAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGpvYi5tX3R5cGUgPT0gVGV4
dHVyZUpvYjo6RGlydHlDb250ZW50cykgeworICAgICAgICBUaWxlSW5kZXggZmlyc3QgPSBpbmRl
eE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgICAgIFRpbGVJ
bmRleCBsYXN0ID0gaW5kZXhPZlRpbGUoam9iLm1fZGlydHlSZWN0Lm1heFhNYXhZQ29ybmVyKCkp
OworICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBp
dCAhPSBtX3RpbGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgg
PSAoKml0KS5rZXk7CisgICAgICAgICAgICBpZiAoaW5kZXguaSgpID49IGZpcnN0LmkoKSAmJiBp
bmRleC5qKCkgPj0gZmlyc3QuaigpICYmIGluZGV4LmkoKSA8PSBsYXN0LmkoKSAmJiBpbmRleC5q
KCkgPD0gbGFzdC5qKCkpCisgICAgICAgICAgICAgICAgKCppdCkudmFsdWUtPnNldENvbnRlbnRz
RGlydHkoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYWRkVGls
ZUpvYihpbmRleE9mVGlsZShqb2IubV9kaXJ0eVJlY3QubWluWE1pbllDb3JuZXIoKSksIGpvYiwg
dGlsZUpvYnNNYXApOwpAQCAtMzk0LDEwICs0MzIsNiBAQCB2b2lkIExheWVyVGlsZXI6OmFkZFRp
bGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgVGV4dHVyZUpvYiYgam9iLCBUaWxl
SgogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
SW4gdGhpcyBjYXNlIHdlIGxlYXZlIHRoZSBwcmV2aW91cyBqb2IuCi0gICAgaWYgKGpvYi5tX3R5
cGUgPT0gVGV4dHVyZUpvYjo6RGlydHlDb250ZW50cyAmJiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5tX3R5cGUgPT0gVGV4dHVyZUpvYjo6RGlzY2FyZENvbnRlbnRzKQotICAgICAgICByZXR1cm47
Ci0KICAgICAvLyBPdmVycmlkZSB0aGUgcHJldmlvdXMgam9iLgogICAgIGlmIChyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlICYmIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPm1fY29udGVudHMpCiAgICAg
ICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6ZGVzdHJveUJ1ZmZlcihyZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5tX2NvbnRlbnRzKTsKQEAgLTQwNSwxNTYgKzQzOSwxNzcgQEAgdm9p
ZCBMYXllclRpbGVyOjphZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYgaW5kZXgsIGNvbnN0IFRl
eHR1cmVKb2ImIGpvYiwgVGlsZUoKICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gJmpvYjsK
IH0KIAotdm9pZCBMYXllclRpbGVyOjpwZXJmb3JtVGlsZUpvYihMYXllclRpbGUqIHRpbGUsIGNv
bnN0IFRleHR1cmVKb2ImIGpvYikKK3ZvaWQgTGF5ZXJUaWxlcjo6cGVyZm9ybVRpbGVKb2IoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIExheWVyVGlsZSogdGlsZSwgY29uc3QgVGV4dHVy
ZUpvYiYgam9iKQogewogICAgIHN3aXRjaCAoam9iLm1fdHlwZSkgewogICAgIGNhc2UgVGV4dHVy
ZUpvYjo6U2V0Q29udGVudHM6CiAgICAgICAgIHRpbGUtPnNldENvbnRlbnRzKGpvYi5tX2NvbnRl
bnRzKTsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNN
dXRleCk7Ci0gICAgICAgICAgICBpZiAodGlsZS0+cmVuZGVyU3RhdGUoKSA9PSBMYXllclRpbGU6
OlJlbmRlclBlbmRpbmcpCi0gICAgICAgICAgICAgICAgdGlsZS0+c2V0UmVuZGVyRG9uZSgpOwot
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFRleHR1cmVKb2I6OlVwZGF0ZUNv
bnRlbnRzOgotICAgICAgICB0aWxlLT51cGRhdGVDb250ZW50cyhqb2IubV9jb250ZW50cyk7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwot
ICAgICAgICAgICAgaWYgKHRpbGUtPnJlbmRlclN0YXRlKCkgPT0gTGF5ZXJUaWxlOjpSZW5kZXJQ
ZW5kaW5nKQotICAgICAgICAgICAgICAgIHRpbGUtPnNldFJlbmRlckRvbmUoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0dXJlSm9iOjpEaXNjYXJkQ29udGVudHM6
Ci0gICAgICAgIHRpbGUtPmRpc2NhcmRDb250ZW50cygpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBUZXh0dXJlSm9iOjpEaXJ0eUNvbnRlbnRzOgotICAgICAgICB0aWxlLT5zZXRDb250ZW50
c0RpcnR5KCk7CisgICAgICAgIHRpbGUtPnVwZGF0ZUNvbnRlbnRzKGpvYi5tX2NvbnRlbnRzLCBs
YXllci0+Y29udGVudHNTY2FsZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVGV4dHVy
ZUpvYjo6VW5rbm93bjoKICAgICBjYXNlIFRleHR1cmVKb2I6OlJlc2l6ZUNvbnRlbnRzOgorICAg
IGNhc2UgVGV4dHVyZUpvYjo6RGlydHlDb250ZW50czoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLWJvb2wgTGF5ZXJUaWxlcjo6ZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
bGF5ZXIsIGRvdWJsZSBzY2FsZSwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3QsIGNvbnN0IEdMRVMyUHJvZ3JhbSYpCitib29sIExheWVyVGlsZXI6OmRyYXdUaWxl
KExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBMYXllclRpbGUqIHRpbGUsIGNvbnN0IFRp
bGVJbmRleCYgaW5kZXgsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0Q2xpcCkKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJh
bnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKLSAgICBmbG9hdCB2ZXJ0aWNlc1s0ICog
NF07Ci0KLSAgICBMYXllclRpbGUqIHRpbGUgPSBtX3RpbGVzLmdldChpbmRleCk7Ci0gICAgaWYg
KCF0aWxlKSB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVzTXV0ZXgpOwotICAg
ICAgICB0aWxlID0gbmV3IExheWVyVGlsZSgpOwotICAgICAgICBtX3RpbGVzLmFkZChpbmRleCwg
dGlsZSk7CisgICAgdW5zaWduZWQgY2hhciBnbG9iYWxBbHBoYSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGxheWVyLT5kcmF3T3BhY2l0eSgpICogMjU1KTsKKyAgICBib29sIHNob3VsZERy
YXdUaWxlID0gZHN0LmludGVyc2VjdHMoZHN0Q2xpcCkgJiYgZ2xvYmFsQWxwaGE7CisKKyAgICAv
LyBFdmVuIGlmIHRoZSB0aWxlIGhhcyB3cm9uZyBzY2FsZSwgaXQgY2FuIGJlIHVzZWQgYXMgYSAi
cHJldmlldyIgaWYgdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVybGFwIHdpdGggb3RoZXIgdGlsZXMu
CisgICAgYm9vbCB0aWxlSGFzQ29ycmVjdFNjYWxlID0gdGlsZS0+Y29udGVudHNTY2FsZSgpID09
IDAuMCB8fCB0aWxlLT5jb250ZW50c1NjYWxlKCkgPT0gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKTsK
KyAgICBpZiAoIXRpbGVIYXNDb3JyZWN0U2NhbGUpCisgICAgICAgIHNob3VsZERyYXdUaWxlID0g
c2hvdWxkRHJhd1RpbGUgJiYgKG1fdGlsZXMuc2l6ZSgpID09IDEgJiYgIWluZGV4LmkoKSAmJiAh
aW5kZXguaigpKTsKKworICAgIGlmICh0aWxlLT5oYXNUZXh0dXJlKCkpIHsKKyAgICAgICAgTGF5
ZXJUZXh0dXJlKiB0ZXh0dXJlID0gdGlsZS0+dGV4dHVyZSgpOworICAgICAgICB0ZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7CisKKyAgICAg
ICAgaWYgKHNob3VsZERyYXdUaWxlKSB7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBkcmF3VHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGRy
YXdUcmFuc2Zvcm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOworICAgICAgICAgICAgaWYg
KGxheWVyLT5jb250ZW50c1Jlc29sdXRpb25JbmRlcGVuZGVudCgpKQorICAgICAgICAgICAgICAg
IGRyYXdUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGRzdC53aWR0aCgpIC8gbV9yZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCksIGRzdC5oZWlnaHQoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgICAgICBlbHNlIGlmICh0aWxlLT5jb250ZW50c1NjYWxlKCkpCisg
ICAgICAgICAgICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZSgxIC8gdGlsZS0+Y29udGVudHNTY2Fs
ZSgpKTsKKyAgICAgICAgICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKKyAg
ICAgICAgICAgICAgICBkcmF3VHJhbnNmb3JtLnNjYWxlKDEgLyBzY2FsZSk7CisgICAgICAgICAg
ICBibGl0VG9CdWZmZXIoMCwgdGV4dHVyZS0+YnVmZmVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Qmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSks
CisgICAgICAgICAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpTb3VyY2VP
dmVyLCBnbG9iYWxBbHBoYSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBXZSBhcHBseSB0
aGUgdHJhbnNmb3JtYXRpb24gYnkgaGFuZCwgc2luY2Ugd2UgbmVlZCB0aGUgeiBjb29yZGluYXRl
Ci0gICAgLy8gYXMgd2VsbCAodG8gZG8gcGVyc3BlY3RpdmUgY29ycmVjdCB0ZXh0dXJpbmcpIGFu
ZCB3ZSBkb24ndCBuZWVkCi0gICAgLy8gdG8gZGl2aWRlIGJ5IHcgYnkgaGFuZCwgdGhlIEdQVSB3
aWxsIGRvIHRoYXQgZm9yIHVzCi0gICAgdHJhbnNmb3JtUG9pbnQoZHN0LngoKSwgZHN0LnkoKSwg
ZHJhd1RyYW5zZm9ybSwgJnZlcnRpY2VzWzBdKTsKLSAgICB0cmFuc2Zvcm1Qb2ludChkc3QueCgp
LCBkc3QubWF4WSgpLCBkcmF3VHJhbnNmb3JtLCAmdmVydGljZXNbNF0pOwotICAgIHRyYW5zZm9y
bVBvaW50KGRzdC5tYXhYKCksIGRzdC5tYXhZKCksIGRyYXdUcmFuc2Zvcm0sICZ2ZXJ0aWNlc1s4
XSk7Ci0gICAgdHJhbnNmb3JtUG9pbnQoZHN0Lm1heFgoKSwgZHN0LnkoKSwgZHJhd1RyYW5zZm9y
bSwgJnZlcnRpY2VzWzEyXSk7Ci0KLSAgICAvLyBJbmZsYXRlIHRoZSByZWN0IHNvbWV3aGF0IHRv
IGF0dGVtcHQgdG8gbWFrZSB0ZXh0dXJlcyByZW5kZXIgYmVmb3JlIHRoZXkgc2hvdwotICAgIC8v
IHVwIG9uIHNjcmVlbi4gQXMgeW91IGNhbiBzZWUsIHRoZSByZWN0IGlzIGluIG5vcm1hbGl6ZWQg
ZGV2aWNlIGNvb3JkaW5hdGVzLgotICAgIEZsb2F0UmVjdCByZWN0KC12aWV3cG9ydEluZmxhdGlv
bi53aWR0aCgpLCAtdmlld3BvcnRJbmZsYXRpb24uaGVpZ2h0KCksIDIqdmlld3BvcnRJbmZsYXRp
b24ud2lkdGgoKSwgMip2aWV3cG9ydEluZmxhdGlvbi5oZWlnaHQoKSk7Ci0gICAgRmxvYXRRdWFk
IHF1YWQoCi0gICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbMF0gLyB2ZXJ0aWNlc1szXSwgdmVy
dGljZXNbMV0gLyB2ZXJ0aWNlc1szXSksCi0gICAgICAgIEZsb2F0UG9pbnQodmVydGljZXNbNF0g
LyB2ZXJ0aWNlc1s3XSwgdmVydGljZXNbNV0gLyB2ZXJ0aWNlc1s3XSksCi0gICAgICAgIEZsb2F0
UG9pbnQodmVydGljZXNbOF0gLyB2ZXJ0aWNlc1sxMV0sIHZlcnRpY2VzWzldIC8gdmVydGljZXNb
MTFdKSwKLSAgICAgICAgRmxvYXRQb2ludCh2ZXJ0aWNlc1sxMl0gLyB2ZXJ0aWNlc1sxNV0sIHZl
cnRpY2VzWzEzXSAvIHZlcnRpY2VzWzE1XSkpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9
IHF1YWQuYm91bmRpbmdCb3goKTsKLSAgICBib29sIHZpc2libGUgPSBib3VuZGluZ0JveC5pbnRl
cnNlY3RzKHJlY3QpOwotICAgIEZsb2F0UmVjdCB2aWV3cG9ydCgtMSwgLTEsIDIsIDIpOwotICAg
IHVuc2lnbmVkIGNoYXIgZ2xvYmFsQWxwaGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihs
YXllci0+ZHJhd09wYWNpdHkoKSAqIDI1NS4wZik7Ci0gICAgYm9vbCBzaG91bGREcmF3VGlsZSA9
IGJvdW5kaW5nQm94LmludGVyc2VjdHModmlld3BvcnQpICYmIGdsb2JhbEFscGhhOwotCi0gICAg
Ym9vbCB3YXNWaXNpYmxlID0gdGlsZS0+aXNWaXNpYmxlKCk7Ci0KLSAgICBpZiAodmlzaWJsZSkg
ewotICAgICAgICBpZiAodGlsZS0+aGFzVGV4dHVyZSgpKSB7Ci0gICAgICAgICAgICBMYXllclRl
eHR1cmUqIHRleHR1cmUgPSB0aWxlLT50ZXh0dXJlKCk7Ci0gICAgICAgICAgICB0ZXh0dXJlQ2Fj
aGVDb21wb3NpdGluZ1RocmVhZCgpLT50ZXh0dXJlQWNjZXNzZWQodGV4dHVyZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChzaG91bGREcmF3VGlsZSkgewotICAgICAgICAgICAgICAgIGRyYXdUcmFuc2Zv
cm0udHJhbnNsYXRlKGRzdC54KCksIGRzdC55KCkpOwotICAgICAgICAgICAgICAgIGlmIChsYXll
ci0+Y29udGVudHNSZXNvbHV0aW9uSW5kZXBlbmRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ZHJhd1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oZHN0LndpZHRoKCkgLyBtX3JlcXVpcmVkVGV4
dHVyZVNpemUud2lkdGgoKSwgZHN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRyYXdU
cmFuc2Zvcm0uc2NhbGUoMS4wIC8gbGF5ZXItPmNvbnRlbnRzU2NhbGUoKSk7Ci0gICAgICAgICAg
ICAgICAgZHJhd1RyYW5zZm9ybS5zY2FsZShsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSA/
IDEuMCAvIHNjYWxlIDogMS4wKTsKLSAgICAgICAgICAgICAgICBibGl0VG9CdWZmZXIoMCwgdGV4
dHVyZS0+YnVmZmVyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlRy
YW5zZm9ybWF0aW9uTWF0cml4Jj4oZHJhd1RyYW5zZm9ybSksCi0gICAgICAgICAgICAgICAgICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6U291cmNlT3ZlciwgZ2xvYmFsQWxwaGEp
OwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSB0
aWxlIG5lZWRzIHRvIGJlIChyZS0pcmVuZGVyZWQuCisgICAgcmV0dXJuICF0aWxlLT5pc0RpcnR5
KCkgJiYgdGlsZUhhc0NvcnJlY3RTY2FsZTsKK30KIAotICAgICAgICBpZiAodGlsZS0+aXNEaXJ0
eSgpKSB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlc011dGV4KTsKLSAg
ICAgICAgICAgIHRpbGUtPnNldFZpc2libGUodmlzaWJsZSk7Ci0gICAgICAgICAgICBpZiAodGls
ZS0+cmVuZGVyU3RhdGUoKSA9PSBMYXllclRpbGU6OkRvZXNOb3ROZWVkUmVuZGVyKSB7Ci0gICAg
ICAgICAgICAgICAgdGlsZS0+c2V0TmVlZHNSZW5kZXIodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
KyttX25lZWRzUmVuZGVyQ291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQorc3RhdGljIEZsb2F0UmVjdCBpbmZsYXRlVmlld3BvcnQoY29uc3Qg
RmxvYXRSZWN0JiB2aWV3cG9ydCkKK3sKKyAgICAvLyBFdmVyeXRoaW5nIGlzIGV4cHJlc3NlZCBp
biBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcy4KKyAgICBGbG9hdFNpemUgdmlld3BvcnRT
aXplKHZpZXdwb3J0LnNpemUoKSk7CisgICAgdmlld3BvcnRTaXplLnNjYWxlKHZpZXdwb3J0SW5m
bGF0aW9uLndpZHRoKCksIHZpZXdwb3J0SW5mbGF0aW9uLmhlaWdodCgpKTsKIAotICAgICAgICBp
ZiAoIXdhc1Zpc2libGUpIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVz
TXV0ZXgpOwotICAgICAgICAgICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAod2FzVmlzaWJsZSkgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlc011dGV4KTsKLSAgICAgICAgdGlsZS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKLSAg
ICAgICAgaWYgKHRpbGUtPm5lZWRzUmVuZGVyKCkpIHsKLSAgICAgICAgICAgIHRpbGUtPnNldE5l
ZWRzUmVuZGVyKGZhbHNlKTsKLSAgICAgICAgICAgIC0tbV9uZWVkc1JlbmRlckNvdW50OwotICAg
ICAgICAgICAgQVNTRVJUKG1fbmVlZHNSZW5kZXJDb3VudCA+PSAwKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBGbG9hdFNpemUgdmlld3BvcnRPZmZzZXQodmlld3BvcnQuc2l6ZSgpKTsKKyAgICB2
aWV3cG9ydE9mZnNldC5zY2FsZSh2aWV3cG9ydEluZmxhdGlvbi53aWR0aCgpIC0gMSwgdmlld3Bv
cnRJbmZsYXRpb24uaGVpZ2h0KCkgLSAxKTsKKyAgICB2aWV3cG9ydE9mZnNldC5zY2FsZSgwLjUp
OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBGbG9hdFJlY3Qodmlld3BvcnQubG9j
YXRpb24oKSAtIHZpZXdwb3J0T2Zmc2V0LCB2aWV3cG9ydFNpemUpOwogfQogCi12b2lkIExheWVy
VGlsZXI6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgZG91Ymxl
IHNjYWxlLCBjb25zdCBHTEVTMlByb2dyYW0mIHByb2dyYW0pCit2b2lkIExheWVyVGlsZXI6OmRy
YXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQcm9n
cmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIEZs
b2F0U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7Ci0KLSAgICBpZiAobGF5ZXItPnNpemVJ
c1NjYWxlSW52YXJpYW50KCkpIHsKLSAgICAgICAgYm91bmRzLnNldFdpZHRoKGJvdW5kcy53aWR0
aCgpIC8gc2NhbGUpOwotICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSAv
IHNjYWxlKTsKKyAgICBGbG9hdFJlY3QgYm91bmRzUmVjdCgtbGF5ZXItPm9yaWdpbigpLCBsYXll
ci0+Ym91bmRzKCkpOworICAgIGlmIChsYXllci0+c2l6ZUlzU2NhbGVJbnZhcmlhbnQoKSkKKyAg
ICAgICAgYm91bmRzUmVjdC5zY2FsZSgxIC8gc2NhbGUpOworCisgICAgRmxvYXRSZWN0IGluZmxh
dGVkVmlld3BvcnQgPSBpbmZsYXRlVmlld3BvcnQoY2xpcFJlY3QpOworCisgICAgLy8gVW5wcm9q
ZWN0aW5nIHBvaW50cyBvdXRzaWRlIHRoZSB0cmFuc2Zvcm1lZCBib3VuZHMgZ2l2ZXMgcG9vciBu
dW1lcmljYWwgc3RhYmlsaXR5IGlmIHRoZXJlJ3MgYSBwZXJzcGVjdGl2ZSBlZmZlY3QsCisgICAg
Ly8gc28gdW5wcm9qZWN0IHRoZSBjbGlwcGVkIHRyYW5zZm9ybWVkIGJvdW5kcyBpbnN0ZWFkLgor
ICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiBjbGlwUG9seWdvbiA9IGludGVyc2VjdFBvbHlnb25X
aXRoUmVjdChsYXllci0+dHJhbnNmb3JtZWRCb3VuZHMoKSwgY2xpcFJlY3QpOworICAgIGlmIChj
bGlwUG9seWdvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhlIExheWVyUmVuZGVyZXIgZmln
dXJlcyB3ZSdyZSB2aXNpYmxlLCBvciBpdCB3b3VsZG4ndCBoYXZlIGNhbGxlZCBpbnRvIHRoaXMg
bWV0aG9kLCBidXQgd2UgYmVnIHRvIGRpZmZlci4KKyAgICAgICAgbGF5ZXItPnNldFZpc2libGUo
ZmFsc2UpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCBuZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZExheWVyQ2xpcFJlY3QgPSBGbG9hdFJl
Y3QoMCwgMCwgMSwgMSk7CisgICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRMYXllclZpc2libGVSZWN0
ID0gRmxvYXRSZWN0KDAsIDAsIDEsIDEpOwogCisgICAgaWYgKGNsaXBQb2x5Z29uICE9IGxheWVy
LT50cmFuc2Zvcm1lZEJvdW5kcygpKSB7CisgICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCA0PiBu
b3JtYWxpemVkTGF5ZXJDbGlwUG9seWdvbiA9IHVucHJvamVjdChsYXllciwgY2xpcFBvbHlnb24p
OworICAgICAgICBub3JtYWxpemVkTGF5ZXJDbGlwUmVjdC5pbnRlcnNlY3QoYm91bmRpbmdCb3go
bm9ybWFsaXplZExheWVyQ2xpcFBvbHlnb24pKTsKKworICAgICAgICBWZWN0b3I8RmxvYXRQb2lu
dCwgND4gdmlzaWJsZVBvbHlnb24gPSBpbnRlcnNlY3RQb2x5Z29uV2l0aFJlY3QobGF5ZXItPnRy
YW5zZm9ybWVkQm91bmRzKCksIGluZmxhdGVkVmlld3BvcnQpOworICAgICAgICBWZWN0b3I8Rmxv
YXRQb2ludCwgND4gbm9ybWFsaXplZExheWVyVmlzaWJsZVBvbHlnb24gPSB1bnByb2plY3QobGF5
ZXIsIHZpc2libGVQb2x5Z29uKTsKKyAgICAgICAgbm9ybWFsaXplZExheWVyVmlzaWJsZVJlY3Qu
aW50ZXJzZWN0KGJvdW5kaW5nQm94KG5vcm1hbGl6ZWRMYXllclZpc2libGVQb2x5Z29uKSk7Cisg
ICAgfQorCisgICAgRmxvYXRTaXplIHRpbGVTaXplOworICAgIEZsb2F0UmVjdCBkc3RDbGlwOwor
ICAgIFRpbGVJbmRleCBmaXJzdDsKKyAgICBUaWxlSW5kZXggbGFzdDsKICAgICBpZiAobGF5ZXIt
PmNvbnRlbnRzUmVzb2x1dGlvbkluZGVwZW5kZW50KCkpIHsKLSAgICAgICAgLy8gUmVzb2x1dGlv
biBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBkYXRhIGluIHRoZSBmaXJz
dCB0aWxlIGFuZCBhbGwgdGhlIG90aGVycyBhcmUgdXNlbGVzcy4KLSAgICAgICAgRmxvYXRSZWN0
IGRzdCgtYm91bmRzLndpZHRoKCkgLyAyLjAsIC1ib3VuZHMuaGVpZ2h0KCkgLyAyLjAsIGJvdW5k
cy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwotICAgICAgICBuZWVkc0Rpc3BsYXkgPSBkcmF3
VGlsZShsYXllciwgc2NhbGUsIFRpbGVJbmRleCgwLCAwKSwgZHN0LCBwcm9ncmFtKTsKKyAgICAg
ICAgLy8gUmVzb2x1dGlvbiBpbmRlcGVuZGVudCBsYXllcnMgaGF2ZSBhbGwgdGhlIG5lZWRlZCBk
YXRhIGluIHRoZSBmaXJzdCB0aWxlCisgICAgICAgIHRpbGVTaXplID0gYm91bmRzUmVjdC5zaXpl
KCk7CisgICAgICAgIGRzdENsaXAgPSBib3VuZHNSZWN0OworICAgICAgICBmaXJzdCA9IGxhc3Qg
PSBUaWxlSW5kZXgoMCwgMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgc3ggPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYm91bmRzLndpZHRoKCkpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLndp
ZHRoKCk7Ci0gICAgICAgIGZsb2F0IHN5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy5oZWln
aHQoKSkgLyBtX3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIEZsb2F0UmVj
dCBkZXN0aW5hdGlvblJlY3QgPSBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVjdDsKKyAgICAgICAg
ZGVzdGluYXRpb25SZWN0LnNjYWxlKG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCBtX3Jl
cXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogCi0gICAgICAgIEludFJlY3Qgc3JjKEludFBv
aW50Ojp6ZXJvKCksIHRpbGVTaXplKCkpOwotICAgICAgICBmb3IgKHNyYy5zZXRYKDApOyBzcmMu
eCgpIDwgbV9yZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCk7IHNyYy5zZXRYKHNyYy54KCkgKyBz
cmMud2lkdGgoKSkpIHsKLSAgICAgICAgICAgIGZvciAoc3JjLnNldFkoMCk7IHNyYy55KCkgPCBt
X3JlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCk7IHNyYy5zZXRZKHNyYy55KCkgKyBzcmMuaGVp
Z2h0KCkpKSB7Ci0gICAgICAgICAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gaW5kZXhPZlRpbGUo
c3JjLmxvY2F0aW9uKCkpOworICAgICAgICB0aWxlU2l6ZSA9IG1fdGlsZVNpemU7CisgICAgICAg
IHRpbGVTaXplLnNjYWxlKGJvdW5kc1JlY3Qud2lkdGgoKSAvIG1fcmVxdWlyZWRUZXh0dXJlU2l6
ZS53aWR0aCgpLCBib3VuZHNSZWN0LmhlaWdodCgpIC8gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhl
aWdodCgpKTsKIAotICAgICAgICAgICAgICAgIGZsb2F0IHggPSBpbmRleC5pKCkgKiBzcmMud2lk
dGgoKSAqIHN4OwotICAgICAgICAgICAgICAgIGZsb2F0IHkgPSBpbmRleC5qKCkgKiBzcmMuaGVp
Z2h0KCkgKiBzeTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZHN0KHggLSBib3VuZHMud2lk
dGgoKSAvIDIuMCwgeSAtIGJvdW5kcy5oZWlnaHQoKSAvIDIuMCwgbWluKGJvdW5kcy53aWR0aCgp
IC0geCwgc3JjLndpZHRoKCkgKiBzeCksIG1pbihib3VuZHMuaGVpZ2h0KCkgLSB5LCBzcmMuaGVp
Z2h0KCkgKiBzeSkpOworICAgICAgICBkc3RDbGlwID0gbm9ybWFsaXplZExheWVyQ2xpcFJlY3Q7
CisgICAgICAgIGRzdENsaXAuc2NhbGUoYm91bmRzUmVjdC53aWR0aCgpLCBib3VuZHNSZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgZHN0Q2xpcC5tb3ZlQnkoYm91bmRzUmVjdC5sb2NhdGlvbigpKTsK
IAotICAgICAgICAgICAgICAgIG5lZWRzRGlzcGxheSB8PSBkcmF3VGlsZShsYXllciwgc2NhbGUs
IGluZGV4LCBkc3QsIHByb2dyYW0pOworICAgICAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgcGl4
ZWxzIHdpdGggY29vcmRpbmF0ZXMgKDAgLi4uIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgp
IC0gMSwgMCAuLi4gbV9yZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpIC0gMSksCisgICAgICAg
IC8vIHNvIGNsYW1wIHRoZSBkZXN0aW5hdGlvblJlY3QtdG8tdGlsZWluZGV4IGNhbGN1bGF0aW9u
IGFwcHJvcHJpYXRlbHkuCisgICAgICAgIGZpcnN0ID0gaW5kZXhPZlRpbGUoZmxvb3JlZEludFBv
aW50KGRlc3RpbmF0aW9uUmVjdC5taW5YTWluWUNvcm5lcigpKSk7CisgICAgICAgIGxhc3QgPSBp
bmRleE9mVGlsZShjZWlsZWRJbnRQb2ludChkZXN0aW5hdGlvblJlY3QubWF4WE1heFlDb3JuZXIo
KSkuc2hydW5rVG8oSW50UG9pbnQoLTEsIC0xKSArIG1fcmVxdWlyZWRUZXh0dXJlU2l6ZSkpOwor
ICAgIH0KKworICAgIEhhc2hTZXQ8VGlsZUluZGV4PiB0aWxlc05lZWRpbmdSZW5kZXI7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gZmlyc3QuaSgpOyBpIDw9IGxhc3QuaSgpOyArK2kpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gZmlyc3QuaigpOyBqIDw9IGxhc3QuaigpOyArK2opIHsKKyAg
ICAgICAgICAgIFRpbGVJbmRleCBpbmRleChpLCBqKTsKKyAgICAgICAgICAgIExheWVyVGlsZSog
dGlsZSA9IG1fdGlsZXMuZ2V0KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghdGlsZSkgeworICAg
ICAgICAgICAgICAgIHRpbGUgPSBuZXcgTGF5ZXJUaWxlKCk7CisgICAgICAgICAgICAgICAgbV90
aWxlcy5hZGQoaW5kZXgsIHRpbGUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgdGlsZS0+
c2V0VmlzaWJsZSh0cnVlKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgdGlsZU9yaWdpbihpbmRl
eC5pKCkgKiB0aWxlU2l6ZS53aWR0aCgpLCBpbmRleC5qKCkgKiB0aWxlU2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBGbG9hdFJlY3QgZHN0KHRpbGVPcmlnaW4gLSAwLjUgKiBib3VuZHNSZWN0
LnNpemUoKSwgdGlsZVNpemUuc2hydW5rVG8oYm91bmRzUmVjdC5zaXplKCkgLSB0b0Zsb2F0U2l6
ZSh0aWxlT3JpZ2luKSkpOworICAgICAgICAgICAgaWYgKCFkcmF3VGlsZShsYXllciwgdGlsZSwg
aW5kZXgsIHNjYWxlLCBkc3QsIGRzdENsaXApKQorICAgICAgICAgICAgICAgIHRpbGVzTmVlZGlu
Z1JlbmRlci5hZGQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gbV90aWxlcy5lbmQoKTsgKytp
dCkgeworICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKml0KS5rZXk7CisgICAgICAgIGlmIChp
bmRleC5pKCkgPCBmaXJzdC5pKCkgfHwgaW5kZXguaigpIDwgZmlyc3QuaigpIHx8IGluZGV4Lmko
KSA+IGxhc3QuaSgpIHx8IGluZGV4LmooKSA+IGxhc3QuaigpKQorICAgICAgICAgICAgKCppdCku
dmFsdWUtPnNldFZpc2libGUoZmFsc2UpOworICAgIH0KKworICAgIC8vIFRoZSB2aXNpYmxlIHJl
Y3Qgd2lsbCBiZSB1c2VkIG9uIHRoZSBXZWJLaXQgdGhyZWFkIGFuZCBzaG91bGQgdXNlIHRoZSBi
b3VuZHMgZXhwcmVzc2VkIGluCisgICAgLy8gZG9jdW1lbnQgY29vcmRpbmF0ZXMsIG5vdCBjb3Jy
ZWN0ZWQgZm9yIHNjYWxlIGludmFyaWFuY2UuIFNvIHVzZSAibGF5ZXItPmJvdW5kcygpIiBpbnN0
ZWFkCisgICAgLy8gb2YgdGhlIGxvY2FsIHZhcmlhYmxlICJib3VuZHNSZWN0LnNpemUoKSIuCisg
ICAgRmxvYXRSZWN0IGxheWVyVmlzaWJsZVJlY3QgPSBub3JtYWxpemVkTGF5ZXJWaXNpYmxlUmVj
dDsKKyAgICBsYXllclZpc2libGVSZWN0LnNjYWxlKGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBs
YXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworCisjaWYgREVCVUdfTEFZRVJfVklTSUJJTElUWQor
ICAgIFZlY3RvcjxGbG9hdFBvaW50PiB2ID0gdW5wcm9qZWN0KGxheWVyLCBjbGlwUG9seWdvbik7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgKytpKSB7CisgICAgICAgIHZb
aV0uc2NhbGUobGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQo
KSk7CisgICAgICAgIHZbaV0ubW92ZSh0b0Zsb2F0U2l6ZShib3VuZHNSZWN0LmxvY2F0aW9uKCkp
KTsKKyAgICAgICAgdltpXSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUG9pbnQodltpXSk7
CisgICAgfQorCisgICAgLy8gVXNlIGEgdGhpY2sgYm9yZGVyIHRvIG1ha2UgdGhlIGJvcmRlciB2
aXNpYmxlIGV2ZW4gZm9yIHRoZSByb290IGxheWVyICh3aGljaCB0eXBpY2FsbHkgY292ZXJzIHRo
ZSBzY3JlZW4gd2lkdGggYW5kL29yIGhlaWdodCkuCisgICAgdW5zaWduZWQgdG1wID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZD4odGhpcyk7CisgICAgaW50IHQgPSByYW5kX3IoJnRtcCk7Cisg
ICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgLy8gV2hlbiBkZWJ1Z2dpbmcsIGRy
YXcgZmlyc3QgbGF5ZXItPnRyYW5zZm9ybWVkQm91bmRzKCksIHRoZW4gY2xpcFBvbHlnb24sIHRo
ZW4gdgorICAgIC8vIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBwcm9ibGVtIGlzIChjbGlwcGluZyB0
byBpbWFnZSBwbGFuZSwgY2xpcHBpbmcgdG8gdmlld3BvcnQgb3IgdW5wcm9qZWN0aW5nKS4KKyAg
ICBsYXllci0+bGF5ZXJSZW5kZXJlcigpLT5kcmF3RGVidWdCb3JkZXIoLyogbGF5ZXItPnRyYW5z
Zm9ybWVkQm91bmRzKCkgKi8gLyogY2xpcFBvbHlnb24gKi8gdiwgbWFrZVJHQkFGcm9tSFNMQShz
dGF0aWNfY2FzdDxkb3VibGU+KHQpIC8gUkFORF9NQVgsIDEsIDAuNSwgMSksIDUpOworICAgIGds
RW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisjZW5kaWYKKwogICAgIC8vIElmIHdlIHNjaGVkdWxl
IGEgY29tbWl0LCB2aXNpYmlsaXR5IHdpbGwgYmUgdXBkYXRlZCwgYW5kIGRpc3BsYXkgd2lsbAog
ICAgIC8vIGhhcHBlbiBpZiB0aGVyZSBhcmUgYW55IHZpc2libGUgYW5kIGRpcnR5IHRleHR1cmVz
LgotICAgIGlmIChuZWVkc0Rpc3BsYXkpCisgICAgaWYgKCF0aWxlc05lZWRpbmdSZW5kZXIuaXNF
bXB0eSgpKQogICAgICAgICBsYXllci0+c2V0TmVlZHNDb21taXQoKTsKKworICAgIHNldEZyb250
VmlzaWJpbGl0eShsYXllclZpc2libGVSZWN0LCB0aWxlc05lZWRpbmdSZW5kZXIpOwogfQogCiB2
b2lkIExheWVyVGlsZXI6OmRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKQpA
QCAtNTg5LDE0ICs2NDQsOSBAQCB2b2lkIExheWVyVGlsZXI6OnBydW5lVGV4dHVyZXMoKQogICAg
ICAgICAgICAgdGlsZXNUb0RlbGV0ZS5hcHBlbmQoaW5kZXgpOwogICAgIH0KIAotICAgIHsKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZXNNdXRleCk7Ci0KLSAgICAgICAgZm9yIChW
ZWN0b3I8VGlsZUluZGV4Pjo6aXRlcmF0b3IgaXQgPSB0aWxlc1RvRGVsZXRlLmJlZ2luKCk7IGl0
ICE9IHRpbGVzVG9EZWxldGUuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIExheWVyVGlsZSog
dGlsZSA9IG1fdGlsZXMudGFrZSgqaXQpOwotICAgICAgICAgICAgdGlsZS0+ZGlzY2FyZENvbnRl
bnRzKCk7Ci0gICAgICAgICAgICBkZWxldGUgdGlsZTsKLSAgICAgICAgfQorICAgIGZvciAoVmVj
dG9yPFRpbGVJbmRleD46Oml0ZXJhdG9yIGl0ID0gdGlsZXNUb0RlbGV0ZS5iZWdpbigpOyBpdCAh
PSB0aWxlc1RvRGVsZXRlLmVuZCgpOyArK2l0KSB7CisgICAgICAgIE93blB0cjxMYXllclRpbGU+
IHRpbGUgPSBhZG9wdFB0cihtX3RpbGVzLnRha2UoKml0KSk7CisgICAgICAgIHRpbGUtPmRpc2Nh
cmRDb250ZW50cygpOwogICAgIH0KIH0KIApAQCAtNjUwLDggKzcwMCw3IEBAIEludFBvaW50IExh
eWVyVGlsZXI6Om9yaWdpbk9mVGlsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4KQogSW50UmVjdCBM
YXllclRpbGVyOjpyZWN0Rm9yVGlsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBjb25zdCBJbnRT
aXplJiBib3VuZHMpCiB7CiAgICAgSW50UG9pbnQgb3JpZ2luID0gb3JpZ2luT2ZUaWxlKGluZGV4
KTsKLSAgICBJbnRTaXplIG9mZnNldChvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKTsKLSAgICBJbnRT
aXplIHNpemUgPSB0aWxlU2l6ZSgpLnNocnVua1RvKGJvdW5kcyAtIG9mZnNldCk7CisgICAgSW50
U2l6ZSBzaXplID0gdGlsZVNpemUoKS5zaHJ1bmtUbyhib3VuZHMgLSB0b0ludFNpemUob3JpZ2lu
KSk7CiAgICAgcmV0dXJuIEludFJlY3Qob3JpZ2luLCBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIu
aAppbmRleCAyZWY2YjIzNTM5ODkyYmQxMzM1ZmRkMTY3Zjk2NjhjZWM5YTM3YWNmLi41ZDNkNzU3
MzdmMDJmODE3MDI3Y2Q4ZThmNTBlYjE1Zjk5N2ZhYjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuaApAQCAt
MzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNvbXBvc2l0
aW5nVGhyZWFkOworY2xhc3MgTGF5ZXJWaXNpYmlsaXR5OwogY2xhc3MgTGF5ZXJXZWJLaXRUaHJl
YWQ7CiAKIGNsYXNzIExheWVyVGlsZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5
ZXJUaWxlcj4sIHB1YmxpYyBMYXllckNvbXBvc2l0aW5nVGhyZWFkQ2xpZW50IHsKQEAgLTY3LDE0
ICs2OCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheWVyVmlzaWJpbGl0eUNoYW5n
ZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGJvb2wgdmlzaWJsZSk7CiAgICAgdmlydHVhbCB2
b2lkIHVwbG9hZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogICAg
IHZpcnR1YWwgTGF5ZXJUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1Ro
cmVhZCosIGRvdWJsZSBzY2FsZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpHTEVTMlByb2dyYW0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmVzKExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdM
RVMyUHJvZ3JhbSYsIGRvdWJsZSBzY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmVzKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsK
ICAgICBzdGF0aWMgdm9pZCB3aWxsQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFBl
bmRpbmdUZXh0dXJlVXBsb2FkcyhMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CiAKIHByaXZhdGU6
CiAgICAgc3RydWN0IFRleHR1cmVKb2IgewotICAgICAgICBlbnVtIFR5cGUgeyBVbmtub3duLCBT
ZXRDb250ZW50cywgVXBkYXRlQ29udGVudHMsIERpc2NhcmRDb250ZW50cywgUmVzaXplQ29udGVu
dHMsIERpcnR5Q29udGVudHMgfTsKKyAgICAgICAgZW51bSBUeXBlIHsgVW5rbm93biwgU2V0Q29u
dGVudHMsIFVwZGF0ZUNvbnRlbnRzLCBSZXNpemVDb250ZW50cywgRGlydHlDb250ZW50cyB9Owog
CiAgICAgICAgIFRleHR1cmVKb2IoKQogICAgICAgICAgICAgOiBtX3R5cGUoVW5rbm93bikKQEAg
LTk1LDcgKzk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgbV9jb250ZW50cygwKQogICAg
ICAgICAgICAgLCBtX2RpcnR5UmVjdChkaXJ0eVJlY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCh0eXBlID09IERpc2NhcmRDb250ZW50cyB8fCB0eXBlID09IERpcnR5Q29udGVudHMp
OworICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRGlydHlDb250ZW50cyk7CiAgICAgICAgIH0K
IAogICAgICAgICBUZXh0dXJlSm9iKFR5cGUgdHlwZSwgQmxhY2tCZXJyeTo6UGxhdGZvcm06Okdy
YXBoaWNzOjpCdWZmZXIqIGNvbnRlbnRzLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0x
MTIsNyArMTEzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBUZXh0dXJlSm9iKFNl
dENvbnRlbnRzLCBjb250ZW50cywgY29udGVudHNSZWN0KTsKICAgICAgICAgfQogICAgICAgICBz
dGF0aWMgVGV4dHVyZUpvYiB1cGRhdGVDb250ZW50cyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3Jh
cGhpY3M6OkJ1ZmZlciogY29udGVudHMsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkgeyByZXR1
cm4gVGV4dHVyZUpvYihVcGRhdGVDb250ZW50cywgY29udGVudHMsIGRpcnR5UmVjdCk7IH0KLSAg
ICAgICAgc3RhdGljIFRleHR1cmVKb2IgZGlzY2FyZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkgeyByZXR1cm4gVGV4dHVyZUpvYihEaXNjYXJkQ29udGVudHMsIGRpcnR5UmVjdCk7
IH0KICAgICAgICAgc3RhdGljIFRleHR1cmVKb2IgcmVzaXplQ29udGVudHMoY29uc3QgSW50U2l6
ZSYgbmV3U2l6ZSkgeyByZXR1cm4gVGV4dHVyZUpvYihSZXNpemVDb250ZW50cywgbmV3U2l6ZSk7
IH0KICAgICAgICAgc3RhdGljIFRleHR1cmVKb2IgZGlydHlDb250ZW50cyhjb25zdCBJbnRSZWN0
JiBkaXJ0eVJlY3QpIHsgcmV0dXJuIFRleHR1cmVKb2IoRGlydHlDb250ZW50cywgZGlydHlSZWN0
KTsgfQogCkBAIC0xMjcsMjYgKzEyNywyNyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1h
cDxUaWxlSW5kZXgsIExheWVyVGlsZSo+IFRpbGVNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFRp
bGVJbmRleCwgY29uc3QgVGV4dHVyZUpvYio+IFRpbGVKb2JzTWFwOwogCi0gICAgdm9pZCB1cGRh
dGVUaWxlU2l6ZSgpOwotCiAgICAgTGF5ZXJUaWxlcihMYXllcldlYktpdFRocmVhZCopOwogCisg
ICAgLy8gU3dhcHMgaW4gYSBuZXcgZnJvbnQgdmlzaWJpbGl0eSBhbmQgcmV0dXJucyB0aGUgY3Vy
cmVudCBvbmUsIGF0b21pY2FsbHkuCisgICAgTGF5ZXJWaXNpYmlsaXR5KiBzd2FwRnJvbnRWaXNp
YmlsaXR5KExheWVyVmlzaWJpbGl0eSopOworCiAgICAgLy8gV2ViS2l0IHRocmVhZAorICAgIHZv
aWQgdXBkYXRlVGlsZVNpemUoKTsKICAgICB2b2lkIGFkZFRleHR1cmVKb2IoY29uc3QgVGV4dHVy
ZUpvYiYpOwogICAgIHZvaWQgY2xlYXJUZXh0dXJlSm9icygpOwogICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBjcmVhdGVCdWZmZXIoY29uc3QgSW50U2l6ZSYpOwor
ICAgIExheWVyVmlzaWJpbGl0eSogdGFrZUZyb250VmlzaWJpbGl0eSgpIHsgcmV0dXJuIHN3YXBG
cm9udFZpc2liaWxpdHkoMCk7IH0KIAogICAgIC8vIENvbXBvc2l0aW5nIHRocmVhZAogICAgIHZv
aWQgdXBkYXRlVGlsZUNvbnRlbnRzKGNvbnN0IFRleHR1cmVKb2ImLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgdm9pZCBhZGRUaWxlSm9iKGNvbnN0IFRpbGVJbmRleCYsIGNvbnN0IFRleHR1cmVKb2Im
LCBUaWxlSm9ic01hcCYpOwotICAgIHZvaWQgcGVyZm9ybVRpbGVKb2IoTGF5ZXJUaWxlKiwgY29u
c3QgVGV4dHVyZUpvYiYpOworICAgIHZvaWQgcGVyZm9ybVRpbGVKb2IoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCosIExheWVyVGlsZSosIGNvbnN0IFRleHR1cmVKb2ImKTsKICAgICB2b2lkIHByb2Nl
c3NUZXh0dXJlSm9iKGNvbnN0IFRleHR1cmVKb2ImLCBUaWxlSm9ic01hcCYpOwogICAgIHZvaWQg
cHJ1bmVUZXh0dXJlcygpOwogICAgIHZvaWQgdmlzaWJpbGl0eUNoYW5nZWQoYm9vbCBuZWVkc0Rp
c3BsYXkpOwotICAgIGJvb2wgZHJhd1RpbGUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGRvdWJs
ZSBzY2FsZSwgY29uc3QgVGlsZUluZGV4JiwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJik7Ci0KLSAgICAvLyBU
aHJlYWRzYWZlCi0gICAgaW50IG5lZWRzUmVuZGVyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50IGNvbnN0IHZvbGF0aWxlICY+KG1fbmVlZHNSZW5kZXJDb3VudCk7IH0KKyAgICBib29s
IGRyYXdUaWxlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBMYXllclRpbGUqLCBjb25zdCBUaWxl
SW5kZXgmLCBkb3VibGUgc2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdENsaXApOworICAgIHZvaWQgc2V0RnJvbnRWaXNpYmlsaXR5KGNvbnN0IEZsb2F0UmVj
dCYgdmlzaWJsZVJlY3QsIEhhc2hTZXQ8VGlsZUluZGV4PiYgdGlsZXNOZWVkaW5nUmVuZGVyKTsK
IAogICAgIC8vIENsZWFyIGFsbCBwZW5kaW5nIHVwZGF0ZSBjb250ZW50IHRleHR1cmUgam9icwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNjUsOSArMTY2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIExheWVyV2ViS2l0VGhyZWFkKiBtX2xheWVyOwogCi0gICAgTXV0ZXggbV90aWxlc011dGV4
OwotICAgIFRpbGVNYXAgbV90aWxlczsgLy8gUHJvdGVjdGVkIGJ5IG1fdGlsZXNNdXRleAotICAg
IGludCBtX25lZWRzUmVuZGVyQ291bnQ7IC8vIGF0b21pYworICAgIFRpbGVNYXAgbV90aWxlczsK
IAogICAgIGJvb2wgbV9uZWVkc0JhY2tpbmc7CiAKQEAgLTE4Miw3ICsxODEsOCBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxUZXh0dXJlSm9iPiBtX3BlbmRpbmdUZXh0dXJlSm9iczsgLy8gQWRkZWQs
IGJ1dCBub3QgY29tbWl0dGVkIHlldC4KICAgICBEZXF1ZTxUZXh0dXJlSm9iPiBtX3RleHR1cmVK
b2JzOwogCi0gICAgZG91YmxlIG1fY29udGVudHNTY2FsZTsKKyAgICBMYXllclZpc2liaWxpdHkq
IG1fZnJvbnRWaXNpYmlsaXR5OworICAgIExheWVyVmlzaWJpbGl0eSogbV9iYWNrVmlzaWJpbGl0
eTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvTGF5ZXJVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJVdGlsaXRpZXMuaAppbmRleCAyYzZjMTg0NDA4ZjAxZmEx
YjQ2NDFhY2JlOTU3YTZmMGYxOTUzYzgwLi4xOWFhMTk5NWZhZTNlY2Q3NDNhMGI1ZjMwNmRkZWU0
NGNlNTRjZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9i
bGFja2JlcnJ5L0xheWVyVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclV0aWxpdGllcy5oCkBAIC0zMyw2ICszMyw1MiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIGRldGVybWluYW50IG9mIGNvbHVtbiB2ZWN0b3Jz
CitpbmxpbmUgZmxvYXQgZGV0ZXJtaW5hbnQoY29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9h
dFNpemUmIGIpCit7CisgICAgcmV0dXJuIGEud2lkdGgoKSAqIGIuaGVpZ2h0KCkgLSBhLmhlaWdo
dCgpICogYi53aWR0aCgpOworfQorCisvLyBkb3QgcHJvZHVjdAoraW5saW5lIGZsb2F0IGRvdChj
b25zdCBGbG9hdFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53
aWR0aCgpICogYi53aWR0aCgpICsgYS5oZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Cit9CisKKy8vIFJl
cHJlc2VudHMgYSBsaW5lLCBub3QgYSBmaW5pdGUgbGluZSBzZWdtZW50CitjbGFzcyBMYXllckNs
aXBFZGdlIHsKK3B1YmxpYzoKKyAgICBMYXllckNsaXBFZGdlKGNvbnN0IEZsb2F0UG9pbnQmIGZp
cnN0LCBjb25zdCBGbG9hdFBvaW50JiBzZWNvbmQpCisgICAgICAgIDogbV9maXJzdChmaXJzdCkK
KyAgICAgICAgLCBtX3NlY29uZChzZWNvbmQpCisgICAgeworICAgIH0KKworICAgIGlubGluZSBi
b29sIGlzUG9pbnRJbnNpZGUoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKKyAgICB7CisgICAg
ICAgIC8vIEZvciBudW1lcmljIHJvYnVzdG5lc3MsIHdlIHByZWZlciB0byBjb25zaWRlciBhIHBv
aW50IHRvIGJlIGluc2lkZSByYXRoZXIgdGhhbgorICAgICAgICAvLyBjbGlwIGl0IGFnYWluLgor
ICAgICAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0gMWUtNjsKKyAgICAgICAgcmV0dXJuIGRldGVy
bWluYW50KG1fc2Vjb25kIC0gbV9maXJzdCwgcCAtIG1fZmlyc3QpID4gLWVwc2lsb247CisgICAg
fQorCisgICAgaW5saW5lIEZsb2F0UG9pbnQgY29tcHV0ZUludGVyc2VjdGlvbihjb25zdCBGbG9h
dFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIpIGNvbnN0CisgICAgeworICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBwMyA9IG1fZmlyc3Q7CisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHA0ID0gbV9zZWNvbmQ7CisgICAgICAgIGZsb2F0IGRlbm9taW5hdG9yID0gZGV0ZXJtaW5hbnQo
cDEgLSBwMiwgcDMgLSBwNCk7CisgICAgICAgIEZsb2F0U2l6ZSBkZXRlcm1pbmFudHMoZGV0ZXJt
aW5hbnQodG9GbG9hdFNpemUocDEpLCB0b0Zsb2F0U2l6ZShwMikpLCBkZXRlcm1pbmFudCh0b0Zs
b2F0U2l6ZShwMyksIHRvRmxvYXRTaXplKHA0KSkpOworICAgICAgICBGbG9hdFBvaW50IHJlc3Vs
dCgKKyAgICAgICAgICAgIGRldGVybWluYW50KGRldGVybWluYW50cywgRmxvYXRTaXplKHAxLngo
KSAtIHAyLngoKSwgcDMueCgpIC0gcDQueCgpKSkgLyBkZW5vbWluYXRvciwKKyAgICAgICAgICAg
IGRldGVybWluYW50KGRldGVybWluYW50cywgRmxvYXRTaXplKHAxLnkoKSAtIHAyLnkoKSwgcDMu
eSgpIC0gcDQueSgpKSkgLyBkZW5vbWluYXRvcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UG9pbnQgbV9maXJzdDsKKyAgICBGbG9hdFBvaW50
IG1fc2Vjb25kOworfTsKKwogLy8gU3BlY2lmaWVzIGEgY2xpcCBwbGFuZSB3aXRoIG5vcm1hbCBu
IGFuZCBjb250YWluaW5nIHBvaW50IHBfMAogLy8gYXMgcCAqIG4gKyBkID0gMCwgZCA9IC1wXzAg
KiBuLiBUaGUgYXN0ZXJpc2sgaXMgZG90IHByb2R1Y3QuCiBjbGFzcyBMYXllckNsaXBQbGFuZSB7
CkBAIC04MCw2ICsxMjYsMjYgQEAgaW5saW5lIFZlY3RvcjxQb2ludCwgaW5saW5lQ2FwYWNpdHk+
IGludGVyc2VjdChjb25zdCBWZWN0b3I8UG9pbnQsIGlubGluZUNhcGFjaXQKICAgICByZXR1cm4g
b3V0cHV0TGlzdDsKIH0KIAorLy8gU3V0aGVybGFuZCAtIEhvZGdtYW4sIG1haW4gZHJpdmVyCit0
ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CitpbmxpbmUgVmVjdG9yPEZsb2F0UG9pbnQs
IGlubGluZUNhcGFjaXR5PiBpbnRlcnNlY3RQb2x5Z29uV2l0aFJlY3QoY29uc3QgVmVjdG9yPEZs
b2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiYgc3ViamVjdFBvbHlnb24sIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcFJlY3QpCit7CisgICAgRmxvYXRRdWFkIGNsaXBRdWFkKGNsaXBSZWN0KTsKKyAgICBW
ZWN0b3I8TGF5ZXJDbGlwRWRnZT4gZWRnZXM7CisgICAgZWRnZXMuYXBwZW5kKExheWVyQ2xpcEVk
Z2UoY2xpcFF1YWQucDEoKSwgY2xpcFF1YWQucDIoKSkpOworICAgIGVkZ2VzLmFwcGVuZChMYXll
ckNsaXBFZGdlKGNsaXBRdWFkLnAyKCksIGNsaXBRdWFkLnAzKCkpKTsKKyAgICBlZGdlcy5hcHBl
bmQoTGF5ZXJDbGlwRWRnZShjbGlwUXVhZC5wMygpLCBjbGlwUXVhZC5wNCgpKSk7CisgICAgZWRn
ZXMuYXBwZW5kKExheWVyQ2xpcEVkZ2UoY2xpcFF1YWQucDQoKSwgY2xpcFF1YWQucDEoKSkpOwor
CisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG91dHB1dExpc3QgPSBzdWJqZWN0UG9seWdvbjsKKyAg
ICBmb3IgKFZlY3RvcjxMYXllckNsaXBFZGdlPjo6Y29uc3RfaXRlcmF0b3IgY2xpcEVkZ2VJdGVy
YXRvciA9IGVkZ2VzLmJlZ2luKCk7IGNsaXBFZGdlSXRlcmF0b3IgIT0gZWRnZXMuZW5kKCk7ICsr
Y2xpcEVkZ2VJdGVyYXRvcikgeworICAgICAgICBjb25zdCBMYXllckNsaXBFZGdlJiBjbGlwRWRn
ZSA9ICpjbGlwRWRnZUl0ZXJhdG9yOworICAgICAgICBWZWN0b3I8RmxvYXRQb2ludD4gaW5wdXRM
aXN0ID0gb3V0cHV0TGlzdDsKKyAgICAgICAgb3V0cHV0TGlzdCA9IGludGVyc2VjdChpbnB1dExp
c3QsIGNsaXBFZGdlKTsKKyAgICB9CisgICAgcmV0dXJuIG91dHB1dExpc3Q7Cit9CisKIHRlbXBs
YXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIGlubGluZSBGbG9hdFJlY3QgYm91bmRpbmdCb3go
Y29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiYgcG9pbnRzKQogewpAQCAt
MTAyLDYgKzE2OCwxMTggQEAgaW5saW5lIEZsb2F0UmVjdCBib3VuZGluZ0JveChjb25zdCBWZWN0
b3I8RmxvYXRQb2ludCwgaW5saW5lQ2FwYWNpdHk+JiBwb2ludHMpCiAgICAgcmV0dXJuIEZsb2F0
UmVjdCh4bWluLCB5bWluLCB4bWF4IC0geG1pbiwgeW1heCAtIHltaW4pOwogfQogCitpbmxpbmUg
RmxvYXRQb2ludDNEIGNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UG9p
bnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHQxLCBjb25zdCBGbG9hdFBvaW50JiB0MiwgY29uc3Qg
RmxvYXRQb2ludCYgdDMsIGJvb2wmIG9rKQoreworICAgIC8vIENvbXB1dGUgdmVjdG9ycworICAg
IEZsb2F0U2l6ZSB2MCA9IHQyIC0gdDE7CisgICAgRmxvYXRTaXplIHYxID0gdDMgLSB0MTsKKyAg
ICBGbG9hdFNpemUgdjIgPSBwIC0gdDE7CisKKyAgICAvLyBDb21wdXRlIGRvdCBwcm9kdWN0cwor
ICAgIGZsb2F0IGRvdDAwID0gZG90KHYwLCB2MCk7CisgICAgZmxvYXQgZG90MDEgPSBkb3QodjAs
IHYxKTsKKyAgICBmbG9hdCBkb3QwMiA9IGRvdCh2MCwgdjIpOworICAgIGZsb2F0IGRvdDExID0g
ZG90KHYxLCB2MSk7CisgICAgZmxvYXQgZG90MTIgPSBkb3QodjEsIHYyKTsKKworICAgIC8vIENv
bXB1dGUgYmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMKKyAgICBmbG9hdCBkZW5vbWluYXRvciA9IChk
b3QwMCAqIGRvdDExIC0gZG90MDEgKiBkb3QwMSk7CisgICAgb2sgPSAoZGVub21pbmF0b3IgIT0g
MC4wKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gRmxvYXRQb2ludDNEKCk7CisKKyAg
ICBmbG9hdCB2ID0gKGRvdDExICogZG90MDIgLSBkb3QwMSAqIGRvdDEyKSAvIGRlbm9taW5hdG9y
OworICAgIGZsb2F0IHcgPSAoZG90MDAgKiBkb3QxMiAtIGRvdDAxICogZG90MDIpIC8gZGVub21p
bmF0b3I7CisKKyAgICByZXR1cm4gRmxvYXRQb2ludDNEKDEuMGYgLSB2IC0gdywgdiwgdyk7Cit9
CisKK2lubGluZSBmbG9hdCBtYW5oYXR0YW5EaXN0YW5jZVRvVmlld3BvcnQoY29uc3QgRmxvYXRQ
b2ludCYgcCkKK3sKKyAgICBmbG9hdCBkID0gMDsKKyAgICBpZiAoZmFic2YocC54KCkpID4gMSkK
KyAgICAgICAgZCArPSBmYWJzZihwLngoKSkgLSAxOworICAgIGlmIChmYWJzZihwLnkoKSkgPiAx
KQorICAgICAgICBkICs9IGZhYnNmKHAueSgpKSAtIDE7CisgICAgcmV0dXJuIGQ7Cit9CisKK3N0
cnVjdCBVbnByb2plY3Rpb25WZXJ0ZXggeworICAgIEZsb2F0UG9pbnQgeHk7CisgICAgZmxvYXQg
dzsKKyAgICBGbG9hdFNpemUgdXY7Cit9OworCitpbmxpbmUgYm9vbCBjb21wYXJlTWFuaGF0dGFu
RGlzdGFuY2VUb1ZpZXdwb3J0KGNvbnN0IFVucHJvamVjdGlvblZlcnRleCYgYSwgY29uc3QgVW5w
cm9qZWN0aW9uVmVydGV4JiBiKQoreworICAgIHJldHVybiBtYW5oYXR0YW5EaXN0YW5jZVRvVmll
d3BvcnQoYS54eSkgPCBtYW5oYXR0YW5EaXN0YW5jZVRvVmlld3BvcnQoYi54eSk7Cit9CisKK3Rl
bXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK2lubGluZSBWZWN0b3I8RmxvYXRQb2ludCwg
aW5saW5lQ2FwYWNpdHk+IHVucHJvamVjdChMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwg
Y29uc3QgVmVjdG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PiYgcG9pbnRzKQoreworICAg
IC8vIFVzZSBwZXJzcGVjdGl2ZSBjb3JyZWN0IHRleHR1cmluZyBsb2dpYyB0byBmaW5kIHRoZSBs
b2NhdGlvbnMgb2YgdGhlc2UgcG9pbnRzIGluIG5vcm1hbGl6ZWQgbGF5ZXIgY29vcmRpbmF0ZXMK
KyAgICBWZWN0b3I8RmxvYXRQb2ludCwgND4gYm91bmRzID0gbGF5ZXItPnRyYW5zZm9ybWVkQm91
bmRzKCk7CisgICAgVmVjdG9yPGZsb2F0LCA0PiB3cyA9IGxheWVyLT53cygpOworICAgIGlmICh3
cy5pc0VtcHR5KCkpCisgICAgICAgIHdzLmZpbGwoMC4wZiwgYm91bmRzLnNpemUoKSk7CisgICAg
Y29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiB0ZXhDb29yZHMgPSBsYXllci0+dGV4dHVyZUNvb3Jk
aW5hdGVzKCk7CisgICAgaWYgKGJvdW5kcy5zaXplKCkgPCAzKQorICAgICAgICByZXR1cm4gVmVj
dG9yPEZsb2F0UG9pbnQsIGlubGluZUNhcGFjaXR5PigpOworCisgICAgVmVjdG9yPFVucHJvamVj
dGlvblZlcnRleCwgND4gdmVydGljZXMoYm91bmRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBib3VuZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdmVydGljZXNbaV0ueHkg
PSBib3VuZHNbaV07CisgICAgICAgIHZlcnRpY2VzW2ldLncgPSB3c1tpXTsKKyAgICAgICAgdmVy
dGljZXNbaV0udXYgPSB0b0Zsb2F0U2l6ZSh0ZXhDb29yZHNbaV0pOworICAgIH0KKyAgICAvLyBF
YWNoIHBvaW50IG5lZWRzIHRvIGJlIHF1YWxpZmllZCBhcyBseWluZyBpbiBvbmUgb2YgdGhlIHRy
aWFuZ2xlcyBmb3JtZWQgYnkgdGhlICJib3VuZHMiIHRyaWFuZ2xlIHN0cmlwCisgICAgLy8gVHJ5
IHRvIHVzZSBvbmx5IHBvaW50cyB0aGF0IGFyZSBvbnNjcmVlbiwgZm9yIG51bWVyaWNhbCBzdGFi
aWxpdHkKKyAgICBzdGQ6OnNvcnQodmVydGljZXMuYmVnaW4oKSwgdmVydGljZXMuZW5kKCksIGNv
bXBhcmVNYW5oYXR0YW5EaXN0YW5jZVRvVmlld3BvcnQpOworCisgICAgVmVjdG9yPEZsb2F0UG9p
bnQsIGlubGluZUNhcGFjaXR5PiByZXN1bHQ7CisKKyAgICBzaXplX3QgaTAgPSAwOworCisgICAg
Y29uc3QgRmxvYXRQb2ludCYgcDAgPSB2ZXJ0aWNlc1tpMF0ueHk7CisgICAgZmxvYXQgdzAgPSB2
ZXJ0aWNlc1tpMF0udzsKKyAgICBGbG9hdFNpemUgdXYwID0gdmVydGljZXNbaTBdLnV2OworCisg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBwb2ludHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcCA9IHBvaW50c1tqXTsKKyAgICAgICAgRmxvYXRQb2ludCB0ZXhD
b29yZDsKKyAgICAgICAgZm9yIChzaXplX3QgZGkgPSAxOyBkaSArIDEgPCB2ZXJ0aWNlcy5zaXpl
KCk7ICsrZGkpIHsKKyAgICAgICAgICAgIHNpemVfdCBpID0gKGkwICsgZGkpICUgdmVydGljZXMu
c2l6ZSgpOworICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDEgPSB2ZXJ0aWNlc1tpXS54
eTsKKyAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAyID0gdmVydGljZXNbaSArIDFdLnh5
OworICAgICAgICAgICAgZmxvYXQgdzEgPSB2ZXJ0aWNlc1tpXS53OworICAgICAgICAgICAgZmxv
YXQgdzIgPSB2ZXJ0aWNlc1tpICsgMV0udzsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSB1djEgPSB2
ZXJ0aWNlc1tpXS51djsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSB1djIgPSB2ZXJ0aWNlc1tpICsg
MV0udXY7CisKKyAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICBGbG9hdFBvaW50M0Qg
YiA9IGNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzKHAsIHAwLCBwMSwgcDIsIG9rKTsKKyAg
ICAgICAgICAgIGlmICghb2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIGlmICh3MCAmJiB3MSAmJiB3MikgeworICAgICAgICAgICAgICAgIC8vIFBlcnNwZWN0aXZl
IGNvcnJlY3QgaW50ZXJwb2xhdGlvbgorICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBidyhi
LngoKSAvIHcwLCBiLnkoKSAvIHcxLCBiLnooKSAvIHcyKTsKKyAgICAgICAgICAgICAgICBmbG9h
dCBkZW5vbWluYXRvciA9IGJ3LngoKSArIGJ3LnkoKSArIGJ3LnooKTsKKyAgICAgICAgICAgICAg
ICB0ZXhDb29yZCA9IEZsb2F0UG9pbnQ6Onplcm8oKSArIChidy54KCkgKiB1djAgKyBidy55KCkg
KiB1djEgKyBidy56KCkgKiB1djIpOworICAgICAgICAgICAgICAgIHRleENvb3JkLnNldFgodGV4
Q29vcmQueCgpIC8gZGVub21pbmF0b3IpOworICAgICAgICAgICAgICAgIHRleENvb3JkLnNldFko
dGV4Q29vcmQueSgpIC8gZGVub21pbmF0b3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBMaW5lYXIgaW50ZXJwb2xhdGlvbgorICAgICAgICAgICAgICAgIHRleENv
b3JkID0gRmxvYXRQb2ludDo6emVybygpICsgKGIueCgpICogdXYwICsgYi55KCkgKiB1djEgKyBi
LnooKSAqIHV2Mik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICByZXN1bHQuYXBwZW5kKHRleENvb3JkKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogaW5saW5lIEZsb2F0UG9pbnQzRCBtdWx0VmVjTWF0cml4KGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UG9pbnQzRCYgcCwgZmxvYXQmIHcp
CiB7CiAgICAgRmxvYXRQb2ludDNEIHJlc3VsdCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYk92ZXJsYXkuY3BwCmluZGV4IDE5ZTFhMzE3NjdmNzA5ZThkMzY4ZDJlZjhjYzNjOTFk
YjMyMDdiOTIuLmIzZmY3NGI2ZDhhODVhYWJlZjkwYzVhMjcwNTk4OWM0YWE4Yjg0NWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViT3ZlcmxheS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5LmNwcApAQCAtNTAxLDcgKzUw
MSw3IEBAIHZvaWQgV2ViT3ZlcmxheUxheWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OnVwbG9h
ZFRleHR1cmVzSWZOZWVkZWQoTGF5ZXJDb21wb3NpCiAgICAgbV90ZXh0dXJlLT51cGRhdGVDb250
ZW50cyh0ZXh0dXJlQ29udGVudHMpOwogfQogCi12b2lkIFdlYk92ZXJsYXlMYXllckNvbXBvc2l0
aW5nVGhyZWFkQ2xpZW50OjpkcmF3VGV4dHVyZXMoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5
ZXIsIGRvdWJsZSBzY2FsZSwgY29uc3QgR0xFUzJQcm9ncmFtJikKK3ZvaWQgV2ViT3ZlcmxheUxh
eWVyQ29tcG9zaXRpbmdUaHJlYWRDbGllbnQ6OmRyYXdUZXh0dXJlcyhMYXllckNvbXBvc2l0aW5n
VGhyZWFkKiBsYXllciwgY29uc3QgR0xFUzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25zdCBG
bG9hdFJlY3QmIC8qY2xpcFJlY3QqLykKIHsKICAgICBpZiAoIW1fdGV4dHVyZSB8fCAhbV90ZXh0
dXJlLT5idWZmZXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5X3AuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvV2ViT3ZlcmxheV9wLmgKaW5kZXggNmY1NjgwOTJhNTY3ZWZiODNlMmE4MjNmYjdiM2Y5
MTA2OTc5OTMyZC4uMzk3YjcxMDI4NDIxOGE4MWFkYmU5NTM4ZjBiOTI2MmRhMDdmMmI0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJPdmVybGF5X3AuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYk92ZXJsYXlfcC5oCkBAIC0xOTcsNyAr
MTk3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXllckNvbXBvc2l0aW5nVGhyZWFk
RGVzdHJveWVkKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqKTsKICAgICB2aXJ0dWFs
IHZvaWQgbGF5ZXJWaXNpYmlsaXR5Q2hhbmdlZChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhy
ZWFkKiwgYm9vbCB2aXNpYmxlKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZXNJZk5l
ZWRlZChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdUZXh0dXJlcyhXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgZG91YmxlIHNj
YWxlLCBjb25zdCBQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyUHJvZ3JhbSYpOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3VGV4dHVyZXMoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCosIGNv
bnN0IFBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJQcm9ncmFtJiwgZG91YmxlIHNjYWxlLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXBSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
VGV4dHVyZXMoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogCiBwcml2YXRlOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>