<?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>82117</bug_id>
          
          <creation_ts>2012-03-23 21:47:29 -0700</creation_ts>
          <short_desc>[chromium] Layers with animating transforms should prepaint even if they are not visible yet</short_desc>
          <delta_ts>2012-03-25 23:03:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>587006</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-23 21:47:29 -0700</bug_when>
    <thetext>[chromium] Layers with animating transforms should prepaint even if they are not visible yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587007</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-23 21:49:29 -0700</bug_when>
    <thetext>Currently we early-out on these layers in two places.

1) ContentLayerChromium exits the idle paint if visibleLayerRect.isEmpty()
2) TiledLayerChomium exits prepareToUpdateIdle if the set of tiles is empty (true when no tiles have been painted because visibleLayerRect.isEmpty())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587011</commentid>
    <comment_count>2</comment_count>
      <attachid>133618</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-23 22:02:34 -0700</bug_when>
    <thetext>Created attachment 133618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587012</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-23 22:04:53 -0700</bug_when>
    <thetext>Verified that this hides (not fixes) the poster circle stutter[1] as expected.

[1] http://code.google.com/p/chromium/issues/detail?id=119730</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587023</commentid>
    <comment_count>4</comment_count>
      <attachid>133618</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-23 23:15:01 -0700</bug_when>
    <thetext>Comment on attachment 133618
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:620
&gt; -    if (m_tiler-&gt;isEmpty())
&gt; +    if ((m_tiler-&gt;isEmpty() || layerRect.isEmpty()) &amp;&amp; !drawTransformIsAnimating() &amp;&amp; !screenSpaceTransformIsAnimating())
&gt;          return;

I think this conditional is wrong, possibly due to m_tiler-&gt;isEmpty() being confusing.  I think if !m_tiler-&gt;numTiles() (i.e. the bounds are zero), then we definitely need to bail out even if we&apos;re animating, because the layer size is zero.  I&apos;m pretty sure layerRectToTileIndices will assert at you if that&apos;s the case.

Can you add a test involving prepareToUpdate/prepareToUpdateIdle where there&apos;s a layer with empty bounds?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:672
&gt; +    if ((m_tiler-&gt;isEmpty() || layerRect.isEmpty()) &amp;&amp; !drawTransformIsAnimating() &amp;&amp; !screenSpaceTransformIsAnimating())
&gt; +        return false;

This should be changed to match the above.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:696
&gt; +    if (visibleLayerRect.isEmpty() &amp;&amp; (drawTransformIsAnimating() || screenSpaceTransformIsAnimating()))
&gt; +        return IntRect(IntPoint(), contentBounds());

I&apos;m not so sure about this, since returning the whole bounds means that it&apos;s going to try to prepaint the entire layer in one go.  Current behavior is that if we OOM during prepainting, we don&apos;t do any prepainting, but if it happens to fit and is really large, that could be a huge hitch while you wait for all of that to paint, with no guarantee it will fit.  Additionally, we prepaint in front-to-back order, so prepainting a large animated layer would take precedence over a scrollable layer, which also seems problematic.

This kind of feels like a stopgap solution, where in some ideal world you could predict which tiles will eventually be visible during the animation, prioritizing the ones that become visible first and filtering out the ones that will never be visible.  Maybe I&apos;d prefer that this solution be more conservative, possibly by creating a rect of n tiles (maybe ~3ish?), and letting prepaint rect growth take care of reserving more if there&apos;s not more memory contention from other layers.  For small layers, we&apos;ll still get them prepainted quickly, but larger layers have less of a chance of causing problematic behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587025</commentid>
    <comment_count>5</comment_count>
      <attachid>133618</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-23 23:21:37 -0700</bug_when>
    <thetext>Comment on attachment 133618
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:696
&gt;&gt; +        return IntRect(IntPoint(), contentBounds());
&gt; 
&gt; I&apos;m not so sure about this, since returning the whole bounds means that it&apos;s going to try to prepaint the entire layer in one go.  Current behavior is that if we OOM during prepainting, we don&apos;t do any prepainting, but if it happens to fit and is really large, that could be a huge hitch while you wait for all of that to paint, with no guarantee it will fit.  Additionally, we prepaint in front-to-back order, so prepainting a large animated layer would take precedence over a scrollable layer, which also seems problematic.
&gt; 
&gt; This kind of feels like a stopgap solution, where in some ideal world you could predict which tiles will eventually be visible during the animation, prioritizing the ones that become visible first and filtering out the ones that will never be visible.  Maybe I&apos;d prefer that this solution be more conservative, possibly by creating a rect of n tiles (maybe ~3ish?), and letting prepaint rect growth take care of reserving more if there&apos;s not more memory contention from other layers.  For small layers, we&apos;ll still get them prepainted quickly, but larger layers have less of a chance of causing problematic behavior.

Is this true? I thought it starts with the layerRect (which would be 0 or 1 tiles.. not sure.. and then adds rows/columns until it fills the prepaint rect which is the whole layer here, so it would still do a bit at a time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587028</commentid>
    <comment_count>6</comment_count>
      <attachid>133618</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-23 23:25:32 -0700</bug_when>
    <thetext>Comment on attachment 133618
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:696
&gt;&gt;&gt; +        return IntRect(IntPoint(), contentBounds());
&gt;&gt; 
&gt;&gt; I&apos;m not so sure about this, since returning the whole bounds means that it&apos;s going to try to prepaint the entire layer in one go.  Current behavior is that if we OOM during prepainting, we don&apos;t do any prepainting, but if it happens to fit and is really large, that could be a huge hitch while you wait for all of that to paint, with no guarantee it will fit.  Additionally, we prepaint in front-to-back order, so prepainting a large animated layer would take precedence over a scrollable layer, which also seems problematic.
&gt;&gt; 
&gt;&gt; This kind of feels like a stopgap solution, where in some ideal world you could predict which tiles will eventually be visible during the animation, prioritizing the ones that become visible first and filtering out the ones that will never be visible.  Maybe I&apos;d prefer that this solution be more conservative, possibly by creating a rect of n tiles (maybe ~3ish?), and letting prepaint rect growth take care of reserving more if there&apos;s not more memory contention from other layers.  For small layers, we&apos;ll still get them prepainted quickly, but larger layers have less of a chance of causing problematic behavior.
&gt; 
&gt; Is this true? I thought it starts with the layerRect (which would be 0 or 1 tiles.. not sure.. and then adds rows/columns until it fills the prepaint rect which is the whole layer here, so it would still do a bit at a time?

It does protect the whole layer though, maybe it should just protect the tiles it is going to prepaint in this iteration?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587029</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-23 23:32:10 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 133618 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133618&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:696
&gt; &gt;&gt;&gt; +        return IntRect(IntPoint(), contentBounds());
&gt; &gt;&gt; 
&gt; &gt;&gt; I&apos;m not so sure about this, since returning the whole bounds means that it&apos;s going to try to prepaint the entire layer in one go.  Current behavior is that if we OOM during prepainting, we don&apos;t do any prepainting, but if it happens to fit and is really large, that could be a huge hitch while you wait for all of that to paint, with no guarantee it will fit.  Additionally, we prepaint in front-to-back order, so prepainting a large animated layer would take precedence over a scrollable layer, which also seems problematic.
&gt; &gt;&gt; 
&gt; &gt;&gt; This kind of feels like a stopgap solution, where in some ideal world you could predict which tiles will eventually be visible during the animation, prioritizing the ones that become visible first and filtering out the ones that will never be visible.  Maybe I&apos;d prefer that this solution be more conservative, possibly by creating a rect of n tiles (maybe ~3ish?), and letting prepaint rect growth take care of reserving more if there&apos;s not more memory contention from other layers.  For small layers, we&apos;ll still get them prepainted quickly, but larger layers have less of a chance of causing problematic behavior.
&gt; &gt; 
&gt; &gt; Is this true? I thought it starts with the layerRect (which would be 0 or 1 tiles.. not sure.. and then adds rows/columns until it fills the prepaint rect which is the whole layer here, so it would still do a bit at a time?
&gt; 
&gt; It does protect the whole layer though, maybe it should just protect the tiles it is going to prepaint in this iteration?

You&apos;re quite right.  It uses idlePaintRect for protection, but layerRect for the initial number of tiles to draw.  So, my worries above are unfounded.  Sorry for the panic.  :)

As for handling the protection end of things, the protection there I think is not necessary anymore.  As it prepaints, it will reserve textures as it goes.
Maybe to avoid reserving the entire layer, this logic above should only affect needsIdlePaint but not idlePaintRect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587236</commentid>
    <comment_count>8</comment_count>
      <attachid>133671</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-24 21:09:42 -0700</bug_when>
    <thetext>Created attachment 133671
Patch

The needsIdlePaint() and prepareToUpdateIdle() must match in their expectations of what we would prepaint if we had infinite memory, to prevent from committing indefinitely trying to prepaint more (needsIdlePaint() says there is more to do!) while prepareToUpdateIdle() thinks it is done. So it is important that idlePaintRect() give them both the same answer, and that they early out under the same conditions.

I discussed that protect of the whole prepaintRect with @epenner, and understand its purpose now. Layers toward the front would steal tiles from layers behind them over time until all layers finished prepainting anyways (each time through they would reserve more, and possibly evict tiles from below). And the benefit is that if a tile was already painted, but we didn&apos;t get to it yet in the prepaint order, we don&apos;t end up causing it to get evicted by some layer below, whose tile will get evicted by us again in the future anyways!

Great catch on the layers with no tiles (empty bounds()) point. Fixed the early outs to leave in this case, and have unit tests for empty bounded layers with or without animations.

So attached is new proposal for prepainting animating layers that won&apos;t trash low memory environments (android).
1. We limit prepainting non-visible animating layers to layers that are at most 9 tiles.
2. For such layers, we prepaint the outer set of tiles on the layer (the outer set here is pretty much all the tiles for the layer sizes concerned).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587380</commentid>
    <comment_count>9</comment_count>
      <attachid>133671</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-25 17:00:46 -0700</bug_when>
    <thetext>Comment on attachment 133671
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h:106
&gt; +    size_t numPaintedTiles() { return m_tiler-&gt;tiles().size(); }

Can you group this with the other testing functions above?

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:837
&gt; +            bool hasTile = i &lt; have || j &lt; have || i &gt;= width - have || j &gt;= height - have;

Cute.

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:867
&gt; +            bool shouldPrepaint = contentBounds.width() / 100 * contentBounds.height() / 100 &lt;= 9;

I don&apos;t like having this magic constant baked in here and in the implementation. Can you use idlePaintRect as the condition instead so that the test is more independent of the exact implementation?

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:883
&gt; +                printf(&quot;fail\n&quot;);

Debugging code you forgot to remove?

&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:888
&gt; +            testHaveOuterTiles(layerImpl.get(), width[i] / 100, height[j] / 100, shouldPrepaint ? 1 : 0);

Use tile size here instead of a magic number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587407</commentid>
    <comment_count>10</comment_count>
      <attachid>133714</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-25 19:19:55 -0700</bug_when>
    <thetext>Created attachment 133714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587408</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-25 19:20:18 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=133671&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h:106
&gt;&gt; +    size_t numPaintedTiles() { return m_tiler-&gt;tiles().size(); }
&gt; 
&gt; Can you group this with the other testing functions above?

done.

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:837
&gt;&gt; +            bool hasTile = i &lt; have || j &lt; have || i &gt;= width - have || j &gt;= height - have;
&gt; 
&gt; Cute.

:)

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:867
&gt;&gt; +            bool shouldPrepaint = contentBounds.width() / 100 * contentBounds.height() / 100 &lt;= 9;
&gt; 
&gt; I don&apos;t like having this magic constant baked in here and in the implementation. Can you use idlePaintRect as the condition instead so that the test is more independent of the exact implementation?

ok. i wanted to test that small layers were getting prepainted, but large ones were not. maybe that is not something that belongs in a unit test tho..

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:883
&gt;&gt; +                printf(&quot;fail\n&quot;);
&gt; 
&gt; Debugging code you forgot to remove?

wooops

&gt;&gt; Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp:888
&gt;&gt; +            testHaveOuterTiles(layerImpl.get(), width[i] / 100, height[j] / 100, shouldPrepaint ? 1 : 0);
&gt; 
&gt; Use tile size here instead of a magic number.

done, and made the arrays hold number of tiles instead of number of pixels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587410</commentid>
    <comment_count>12</comment_count>
      <attachid>133715</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-25 19:24:00 -0700</bug_when>
    <thetext>Created attachment 133715
Patch

comment fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587415</commentid>
    <comment_count>13</comment_count>
      <attachid>133718</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-03-25 19:29:51 -0700</bug_when>
    <thetext>Created attachment 133718
Patch

comment fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587452</commentid>
    <comment_count>14</comment_count>
      <attachid>133718</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-03-25 22:29:34 -0700</bug_when>
    <thetext>Comment on attachment 133718
Patch

Thanks for all the changes. R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587460</commentid>
    <comment_count>15</comment_count>
      <attachid>133718</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-25 23:03:12 -0700</bug_when>
    <thetext>Comment on attachment 133718
Patch

Clearing flags on attachment: 133718

Committed r112049: &lt;http://trac.webkit.org/changeset/112049&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587461</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-25 23:03:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133618</attachid>
            <date>2012-03-23 22:02:34 -0700</date>
            <delta_ts>2012-03-24 21:09:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82117-20120324010232.patch</filename>
            <type>text/plain</type>
            <size>9255</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2I1MzI3Yjk4ZmQ0MzFh
ZjFmODE1MzUxZTEyMjllYmU5YmUxOTc4NS4uNThkZDhhMzZjMjJkMTljNDdjNGExZDkzMjA4Mzgz
MDhjZmViMmJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAzLTIzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5
ZXJzIHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhl
eSBhcmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZvciBhbmltYXRpbmcgdHJhbnNmb3JtcywgaW5zdGVhZCBvZiBlYXJseS1v
dXRpbmcgd2hlbiB0aGUgbGF5ZXIncworICAgICAgICB2aXNpYmxlIHJlY3QgaXMgZW1wdHksIGxl
dCBpdCBwcmVwYWludCByZWdhcmRsZXNzLgorCisgICAgICAgIEZvciBub3csIHdlIGp1c3QgYWdn
cmVzc2l2ZWx5IHRyeSB0byBwYWludCB0aGUgd2hvbGUgbGF5ZXIuCisKKyAgICAgICAgVGhpcyBj
aGFuZ2VzIHRoZSBiZWhhdmlvdXIgb2YgQ29udGVudExheWVyQ2hyb21pdW06OmlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eQorICAgICAgICBzbyBJJ3ZlIGd1YXJkZWQgdGhlIGJlaGF2aW91ciBvZiB0
aGUgdHdvIHByZXBhaW50aW5nIGZ1bmN0aW9ucyB0aGF0IGl0IGNhbGxzCisgICAgICAgIHRvIGVu
c3VyZSB0aGUgb2xkIGJlaGF2aW91ciBob2xkcyB3aXRob3V0IGFuaW1hdGlvbnMsIGFuZCB0aGUg
bmV3IGJlaGF2aW91cgorICAgICAgICB3b3JrcyB3aXRoIHRoZW0uCisKKyAgICAgICAgVW5pdCB0
ZXN0OiBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmlkbGVQYWludE5vblZpc2libGVMYXllcnMKKyAg
ICAgICAgICAgICAgICAgICBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmlkbGVQYWludE5vblZpc2li
bGVBbmltYXRpbmdMYXllcnMKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQYWludFJlY3QpOgorCiAyMDEyLTAzLTIz
ICBEYXZlIE1pY2hhZWwgIDxkbWljaGFlbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVsYW5k
aW5nKHIxMTE3NTQpOiBIVE1MUGx1Z2luRWxlbWVudCBpcyBub3QgZGVzdHJveWVkIG9uIHJlbG9h
ZCBvciBuYXZpZ2F0aW9uIGlmIGdldE5QT2JqZWN0IGlzIGNhbGxlZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA5MjU2N2FjOTFmNzk3OGUxOWYyMGQyMWExMGZlMzM4MmE5MWM5OWRjLi44
MmVhNzk3NGM3MzNlYmMwYmM5ZTE1YTUyNmQ1N2ZkYmU5ZGFlMWEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAzLTIzICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJzIHdpdGggYW5p
bWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhleSBhcmUgbm90IHZp
c2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChXVEY6OlRFU1Qp
OgorICAgICAgICAoV1RGKToKKwogMjAxMi0wMy0yMyAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBn
b29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IHNjcm9sbGJhckxheWVyTG9zdENv
bnRleHQgZmxha3kgdGVzdCBjcmFzaCBvbiAxMC42CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggYzAwNzIxNTc5NzlkNzhiNTlhYjM3ZTBmMjJkYjI2NTYyMjljMDQ5OS4u
NzNhOGE0MjQ2MTU3MTNlNjlkNWEyYzFlNzhjZmU5M2NiNjg4MDA1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTE0LDEwICsxMTQsNyBAQCB2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgQ0NPY2NsdXNpb25U
cmFja2VyKiBvYwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsKLSAgICBp
ZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgY29uc3QgSW50
UmVjdCBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAgICAgcHJlcGFyZVRvVXBkYXRl
SWRsZShsYXllclJlY3QsIG9jY2x1c2lvbik7CiAgICAgaWYgKG5lZWRzSWRsZVBhaW50KGxheWVy
UmVjdCkpCiAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcAppbmRleCAwODk0NGQxNTA4MGYwMTk5NWQxM2U0N2MwOTYwMjY4Njc4ZDEwNGFlLi5k
MzgwMzViZjI3MGY0OGFmMDVhMmM4NmRkNzgxYTJhN2NkM2ZhMmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYxNiw3ICs2MTYsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0
IENDTwogCiAgICAgdXBkYXRlQm91bmRzKCk7CiAKLSAgICBpZiAobV90aWxlci0+aXNFbXB0eSgp
KQorICAgIGlmICgobV90aWxlci0+aXNFbXB0eSgpIHx8IGxheWVyUmVjdC5pc0VtcHR5KCkpICYm
ICFkcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcoKSAmJiAhc2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0Fu
aW1hdGluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJl
cyBpbiB0aGUgcHJlLXBhaW50IGFyZWEgc28gd2UgZG9uJ3QgZW5kIHVwIGp1c3QKQEAgLTY2OCw2
ICs2NjgsOSBAQCBib29sIFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KQogICAgIGlmIChtX3NraXBzSWRsZVBhaW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoKG1fdGlsZXItPmlzRW1wdHkoKSB8fCBsYXllclJlY3Qu
aXNFbXB0eSgpKSAmJiAhZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKCkgJiYgIXNjcmVlblNwYWNl
VHJhbnNmb3JtSXNBbmltYXRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgSW50
UmVjdCBpZGxlUGFpbnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7CiAKICAg
ICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwpAQCAtNjg2LDYgKzY4OSwxMiBAQCBib29s
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgbGF5ZXJS
ZWN0KQogCiBJbnRSZWN0IFRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50UmVjdChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KQogeworICAgIC8vIEZvciBsYXllcnMgdGhhdCBhcmUg
YW5pbWF0aW5nIHRyYW5zZm9ybXMgYnV0IG5vdCB2aXNpYmxlIGF0IGFsbCwgd2UgZG9uJ3Qga25v
dyB3aGF0IHBhcnQKKyAgICAvLyBvZiB0aGVtIGlzIGdvaW5nIHRvIGJlY29tZSB2aXNpYmxlLiBG
b3Igbm93IHdlIGp1c3QgYWdncmVzc2l2ZWx5IHByZXBhaW50IHRoZSB3aG9sZQorICAgIC8vIGxh
eWVyIGlmIHBvc3NpYmxlLgorICAgIGlmICh2aXNpYmxlTGF5ZXJSZWN0LmlzRW1wdHkoKSAmJiAo
ZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKCkgfHwgc2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0FuaW1h
dGluZygpKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5k
cygpKTsKKwogICAgIEludFJlY3QgcHJlcGFpbnRSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsKICAg
ICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIgaWYgd2UgY2FuOgogICAg
IC8vIC0gcmVzZXJ2ZSBtZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0aGFuIGZvciB2aXNpYmxl
IGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDk0ZjllYjRkOGEyNjZiNmEzZjYzZjdiYzkwNzMy
MjUyNzRmYTVjMWYuLmI3ZTY0OTlmYzk3NzM4ZGZjYTNjNDQzMjFlYmFlZWFiZTM1NzUyNTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVt
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hy
b21pdW1UZXN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiVGlsZWRMYXllckNo
cm9taXVtLmgiCiAKKyNpbmNsdWRlICJDQ0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRl
ICJDQ0xheWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJGYWtlQ0NMYXllclRyZWVIb3N0
Q2xpZW50LmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgpAQCAtMzgsNiArMzks
NyBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAog
I2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCkBAIC02MDIsNiArNjA0LDg5IEBAIFRFU1Qo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAgbGF5ZXIt
PnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKIH0KIAorVEVTVChUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQoreworICAgIEludFNpemUg
Y29udGVudEJvdW5kcygxMDAsIDEwMCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKKworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4g
dGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAwMCwgMTAy
NCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MCkpKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAg
Q0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIElu
dmFsaWRhdGUgdGhlIGxheWVyIGJ1dCBtYWtlIG5vbmUgb2YgaXQgdmlzaWJsZSwgc28gbm90aGlu
ZyBwYWludHMuCisgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKKworICAgIGxheWVyLT5zZXRCb3Vu
ZHMoY29udGVudEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJs
ZVJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5
ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCwgMCk7CisKKyAgICAvLyBOb24tdmlzaWJs
ZSBsYXllcnMgZG9uJ3QgbmVlZCBpZGxlIHBhaW50LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+
bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxh
eWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHRpbGVzIHB1
c2hlZCBzaW5jZSB0aGUgbGF5ZXIgaXMgbm90IHZpc2libGUuCisgICAgRVhQRUNUX0ZBTFNFKGxh
eWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKworICAgIC8vIE5vbi12aXNpYmxlIGxheWVycyBk
b24ndCBpZGxlIHBhaW50LgorICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVS
ZWN0LCAwKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0
ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAg
ICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHRpbGVzIHB1c2hlZCBzaW5jZSB0aGUgbGF5ZXIg
aXMgbm90IHZpc2libGUuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAs
IDApKTsKK30KKworVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNp
YmxlQW5pbWF0aW5nTGF5ZXJzKQoreworICAgIEludFNpemUgY29udGVudEJvdW5kcygxMDAsIDEw
MCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91
bmRzKTsKKworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAwLCA0MDAwMCwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VU
aWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hy
b21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJl
YWQgaW1wbFRocmVhZDsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKworICAgIEZha2VUZXh0
dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRh
dGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIFByZXRlbmQgdGhlIGxheWVyIGlzIGFu
aW1hdGluZy4KKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKHRydWUpOwor
CisgICAgLy8gSW52YWxpZGF0ZSB0aGUgbGF5ZXIgYnV0IG1ha2Ugbm9uZSBvZiBpdCB2aXNpYmxl
LCBzbyBub3RoaW5nIHBhaW50cy4KKyAgICBJbnRSZWN0IHZpc2libGVSZWN0OworCisgICAgbGF5
ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVy
UmVjdCh2aXNpYmxlUmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0
KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0LCAwKTsKKworICAgIC8v
IE5vcm1hbGx5IHdlIGRvbid0IG5lZWQgaWRsZSBwYWludCwgYnV0IHNpbmNlIHdlJ3JlIGFuaW1h
dGluZyB3ZSBkby4KKyAgICBFWFBFQ1RfVFJVRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJs
ZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0
ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAg
ICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHRpbGVzIHB1c2hlZCB5ZXQgc2luY2UgdGhlIGxh
eWVyIGlzIG5vdCB2aXNpYmxlLgorICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVB
dCgwLCAwKSk7CisKKyAgICAvLyBOb3JtYWxseSB3ZSBkb24ndCBhbGxvdyBub24tdmlzaWJsZSBs
YXllcnMgdG8gcHJlLXBhaW50LCBidXQgaWYgdGhleSBhcmUgYW5pbWF0aW5nIHRoZW4gd2Ugc2hv
dWxkLgorICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVSZWN0LCAwKTsKKwor
ICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBzdWNj
ZXNzZnVsbHkgcHJlcGFpbnRlZCB0aGUgYW5pbWF0aW5nIGxheWVyIQorICAgIEVYUEVDVF9UUlVF
KGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKK30KKwogVEVTVChUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBpbnZhbGlkYXRlRnJvbVByZXBhcmUpCiB7CiAgICAgT3duUHRyPFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDIqMTAyNCoxMDI0LCAxMDI0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133671</attachid>
            <date>2012-03-24 21:09:42 -0700</date>
            <delta_ts>2012-03-25 19:19:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82117-20120325000941.patch</filename>
            <type>text/plain</type>
            <size>18353</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJmMjk0OTVjMThjZjA3
YTRkODI2ZDc4ODY4NDAzZjM2NjVlMGEwNS4uYjAxYzk3OWJiMzMyODcxMzRiNjJmNWM3NjI3ZmI4
Y2E2OTc4M2YwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTI0ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5
ZXJzIHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhl
eSBhcmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZvciBhbmltYXRpbmcgdHJhbnNmb3JtcywgaW5zdGVhZCBvZiBlYXJseS1v
dXRpbmcgd2hlbiB0aGUgbGF5ZXIncworICAgICAgICB2aXNpYmxlIHJlY3QgaXMgZW1wdHksIGxl
dCBpdCBwcmVwYWludCByZWdhcmRsZXNzLgorCisgICAgICAgIEZvciBub3csIHdlIGp1c3Qgb25s
eSBwYWludCB0aGUgb3V0ZXJtb3N0IHRpbGVzLCBhbmQgb25seSBmb3Igc21hbGwKKyAgICAgICAg
bGF5ZXJzLCB3aXRoIGF0IG1vc3QgOSB0aWxlcy4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhl
IGJlaGF2aW91ciBvZiBDb250ZW50TGF5ZXJDaHJvbWl1bSdzCisgICAgICAgIGlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpIHNvIEkndmUgZ3VhcmRlZCB0aGUgYmVoYXZpb3VyIG9mIHRoZSB0d28K
KyAgICAgICAgcHJlcGFpbnRpbmcgZnVuY3Rpb25zIHRoYXQgaXQgY2FsbHMgdG8gZW5zdXJlIHRo
ZSBvbGQgYmVoYXZpb3VyIGhvbGRzCisgICAgICAgIHdpdGhvdXQgYW5pbWF0aW9ucywgYW5kIHRo
ZSBuZXcgYmVoYXZpb3VyIHdvcmtzIHdpdGggdGhlbS4KKworICAgICAgICBVbml0IHRlc3Q6IFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIKKyAgICAgICAgICAg
ICAgICAgICBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmlkbGVQYWludFplcm9TaXplZEFuaW1hdGlu
Z0xheWVyCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVtVGVzdC5pZGxlUGFp
bnROb25WaXNpYmxlTGF5ZXJzCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVt
VGVzdC5pZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9V
cGRhdGVJZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJ
ZGxlUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFp
bnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om51bVBhaW50ZWRUaWxlcyk6CisKIDIwMTItMDMtMjQg
IEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBp
biBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAwYzcwZDNjZTkwNmViYzMxNTgxMmI1MTk3MzFmNWE3MjA5
ZGVkZTMxLi44ZDViNmQwMDEyMzRmNzk1YjE1YzBmODAzN2JmNjgzMzg2NTM2MTFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAzLTI0ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJz
IHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhleSBh
cmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChX
VEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06Om51bVBhaW50ZWRUaWxlcyk6CisgICAgICAgIChG
YWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisgICAgICAgIChX
VEYpOgorICAgICAgICAoV1RGOjppZGxlUGFpbnRSZXBlYXQpOgorICAgICAgICAoV1RGOjp0ZXN0
SGF2ZU91dGVyVGlsZXMpOgorCiAyMDEyLTAzLTIzICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gSW5jb3JyZWN0IHJlcGxpY2Egb3Jp
Z2luVHJhbnNmb3JtIHVzZWQgaW4gQ0NEYW1hZ2VUcmFja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzAwNzIxNTc5NzlkNzhiNTlhYjM3ZTBmMjJkYjI2NTYyMjlj
MDQ5OS4uNzNhOGE0MjQ2MTU3MTNlNjlkNWEyYzFlNzhjZmU5M2NiNjg4MDA1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTE0LDEwICsxMTQsNyBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgQ0NPY2Ns
dXNpb25UcmFja2VyKiBvYwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsK
LSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgY29u
c3QgSW50UmVjdCBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAgICAgcHJlcGFyZVRv
VXBkYXRlSWRsZShsYXllclJlY3QsIG9jY2x1c2lvbik7CiAgICAgaWYgKG5lZWRzSWRsZVBhaW50
KGxheWVyUmVjdCkpCiAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCBhZjU5NGQ0YjcwYjJiOTZmN2MyZmZiY2JmMGM3ODliZDVkNzYy
Yzg1Li5jOWU3MTVjNWIxYmNjYmI5MDkwMDczNGE1YzBmNTI3ZGIzZmJkOTBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYyOCwyNSArNjI4LDQ2IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCwgY29uc3QgQ0NPCiAKICAgICB1cGRhdGVCb3VuZHMoKTsKIAotICAgIGlmIChtX3RpbGVyLT5p
c0VtcHR5KCkpCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJlcyBpbiB0aGUgcHJlLXBhaW50IGFyZWEgc28g
d2UgZG9uJ3QgZW5kIHVwIGp1c3QKLSAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCiAgICAg
SW50UmVjdCBpZGxlUGFpbnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7Cisg
ICAgaWYgKGlkbGVQYWludExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFByb3RlY3QgYW55IHRleHR1cmVzIGluIHRoZSBwcmUtcGFpbnQgYXJlYSwgYXMgd2Ug
d291bGQgc3RlYWwgdGhlbSBmcm9tIG90aGVyIGxheWVycworICAgIC8vIG92ZXIgdGltZSBhbnlo
b3cuIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBsb3NlIHRpbGVzIGluIHRoZSBmaXJzdCByb3VuZHMg
b2YgaWRsZSBwYWludGluZworICAgIC8vIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHBhaW50ZWQuCiAg
ICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhpZGxlUGFpbnRMYXllclJlY3QpOwogCisgICAgaW50IHBy
ZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOwor
ICAgIG1fdGlsZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50TGF5ZXJSZWN0LCBw
cmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSk7
CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IHZpc2libGUsIHdlIGhhdmUgbm90aGluZyB0
byBleHBhbmQgZnJvbSwgc28gaW5zdGVhZCB3ZSBwcmVwYWludCB0aGUgb3V0ZXItbW9zdCBzZXQg
b2YgdGlsZXMuCisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJlcGFy
ZVRvVXBkYXRlVGlsZXModHJ1ZSwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRS
aWdodCwgcHJlcGFpbnRUb3AsIDApOworICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcmVw
YXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludExlZnQsIHByZXBhaW50Qm90dG9tLCBwcmVw
YWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSwgMCk7CisgICAgICAgIGlmICghbV9wYWludFJlY3Qu
aXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3As
IHByZXBhaW50TGVmdCwgcHJlcGFpbnRCb3R0b20sIDApOworICAgICAgICBpZiAoIW1fcGFpbnRS
ZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludFJpZ2h0LCBwcmVwYWlu
dFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b20sIDApOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwogICAgIG1fdGls
ZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMobGF5ZXJSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOwogCi0gICAgLy8gUHJlcGFpbnQgYW55dGhpbmcgdGhhdCB3YXMgb2NjbHVkZWQgYnV0
IGluc2lkZSB0aGUgbGF5ZXIncyB2aXNpYmxlIHJlZ2lvbi4KKyAgICAvLyBPdGhlcndpc2UsIHBy
ZXBhaW50IGFueXRoaW5nIHRoYXQgd2FzIG9jY2x1ZGVkIGJ1dCBpbnNpZGUgdGhlIGxheWVyJ3Mg
dmlzaWJsZSByZWdpb24uCiAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tLCAwKTsKICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBt
X3NraXBzSWRsZVBhaW50KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBFeHBhbmQgb3V0d2Fy
ZHMgdW50aWwgd2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgotICAgIGlu
dCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRv
bTsKLSAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludExheWVyUmVj
dCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0
b20pOworICAgIC8vIFRoZW4gZXhwYW5kIG91dHdhcmRzIGZyb20gdGhlIHZpc2libGUgYXJlYSB1
bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCiAgICAgd2hpbGUg
KCFtX3NraXBzSWRsZVBhaW50ICYmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0IHx8IHRvcCA+IHByZXBh
aW50VG9wIHx8IHJpZ2h0IDwgcHJlcGFpbnRSaWdodCB8fCBib3R0b20gPCBwcmVwYWludEJvdHRv
bSkpIHsKICAgICAgICAgaWYgKGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSB7CiAgICAgICAgICAg
ICArK2JvdHRvbTsKQEAgLTY4MCwxMiArNzAxLDIwIEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVt
OjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiAgICAgaWYgKG1fc2tp
cHNJZGxlUGFpbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghbV90aWxlci0+
bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgSW50UmVjdCBpZGxlUGFp
bnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7CisgICAgaWYgKGlkbGVQYWlu
dExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CiAgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5k
aWNlcyhpZGxlUGFpbnRMYXllclJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXJS
ZWN0IGlzIGVtcHR5LCB0aGVuIHdlIGFyZSBwYWludGluZyB0aGUgb3V0ZXItbW9zdCBzZXQgb2Yg
dGlsZXMgb25seS4KKyAgICAgICAgICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpICYmIGkgIT0g
bGVmdCAmJiBpICE9IHJpZ2h0ICYmIGogIT0gdG9wICYmIGogIT0gYm90dG9tKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNS
ZWN0LmNvbnRhaW5zKEludFBvaW50KGksIGopKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC02OTgs
NiArNzI3LDE1IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QpCiAKIEludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxl
UGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpCiB7CisgICAgLy8gRm9y
IGxheWVycyB0aGF0IGFyZSBhbmltYXRpbmcgdHJhbnNmb3JtcyBidXQgbm90IHZpc2libGUgYXQg
YWxsLCB3ZSBkb24ndCBrbm93IHdoYXQgcGFydAorICAgIC8vIG9mIHRoZW0gaXMgZ29pbmcgdG8g
YmVjb21lIHZpc2libGUuIEZvciBzbWFsbCBsYXllcnMgd2UgcmV0dXJuIHRoZSBlbnRpcmUgcmVj
dCwgZm9yIGxhcmdlcgorICAgIC8vIG9uZXMgd2UgYXZvaWQgcHJlcGFpbnRpbmcgdGhlIGxheWVy
IGF0IGFsbC4KKyAgICBpZiAodmlzaWJsZUxheWVyUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKChkcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcoKSB8fCBzY3JlZW5TcGFjZVRyYW5zZm9ybUlz
QW5pbWF0aW5nKCkpICYmIG1fdGlsZXItPm51bVRpbGVzKCkgPD0gOSkKKyAgICAgICAgICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7CisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgfQorCiAgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxl
TGF5ZXJSZWN0OwogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBtYWRlIGEgbG90IGxhcmdlciBp
ZiB3ZSBjYW46CiAgICAgLy8gLSByZXNlcnZlIG1lbW9yeSBhdCBhIGxvd2VyIHByaW9yaXR5IHRo
YW4gZm9yIHZpc2libGUgY29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCA2
NDNmNjk2NDAwMjk0MThhNDc3YzZmMjE0MzNkZGE3ODM2Y2Q0OGJiLi5mYWFiMDgwZTkwZTg4Mzcx
ZTJlODljODU4NmQ3M2YzMmE0N2E4MWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApA
QCAtMTAyLDYgKzEwMiw5IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFn
ZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CiAKKyAgICAvLyBFeGlzdHMgZm9yIHRlc3Rpbmcu
CisgICAgc2l6ZV90IG51bVBhaW50ZWRUaWxlcygpIHsgcmV0dXJuIG1fdGlsZXItPnRpbGVzKCku
c2l6ZSgpOyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJJbXBs
PiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCAwNmE5YTk3ZjFmNmFk
NzkwODZkNjM3ZTEwMGY4NThkMTg4MDg4OWJjLi5mNjY3YmVhN2NmYThlMjg1M2EzZjczMTJkZjIz
MWJmM2I2ZjEzOGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmgiCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiRmFr
ZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIu
aCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKICNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXApAQCAtMjA5LDYg
KzIxMSw4IEBAIHB1YmxpYzoKICAgICAgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJl
Y3QoKSwgb2NjbHVzaW9uKTsKICAgICB9CiAKKyAgICBzaXplX3QgbnVtUGFpbnRlZFRpbGVzKCkg
eyByZXR1cm4gVGlsZWRMYXllckNocm9taXVtOjpudW1QYWludGVkVGlsZXMoKTsgfQorCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIoKSBj
b25zdAogICAgIHsKQEAgLTY4Nyw2ICs2OTEsMjEwIEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgaWRsZVBhaW50T3V0T2ZNZW1vcnkpCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKIH0KIAorVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxl
UGFpbnRaZXJvU2l6ZWRMYXllcikKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1
cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAwMDAsIDEwMjQpOwor
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7
CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4
dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICAvLyBUaGUgbGF5
ZXIncyBib3VuZHMgYXJlIGVtcHR5LgorICAgIEludFJlY3QgY29udGVudFJlY3Q7CisKKyAgICBs
YXllci0+c2V0Qm91bmRzKGNvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgbGF5ZXItPnNldFZpc2li
bGVMYXllclJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250
ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZShjb250ZW50UmVjdCwgMCk7CisK
KyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBFWFBFQ1RfRVEoMHUs
IGxheWVyLT5udW1QYWludGVkVGlsZXMoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3Qg
bmVlZCBwcmVwYWludC4KKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KGNv
bnRlbnRSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1
cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwor
CisgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCisgICAgRVhQRUNUX0ZBTFNF
KGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKKworICAgIC8vIE5vbi12aXNpYmxlIGxheWVy
cyBkb24ndCBpZGxlIHBhaW50LgorICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnRl
bnRSZWN0LCAwKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAg
IEVYUEVDVF9FUSgwdSwgbGF5ZXItPm51bVBhaW50ZWRUaWxlcygpKTsKKworICAgIGxheWVyLT51
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJv
cGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3Qg
aGF2ZSB0aWxlcy4KKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkp
OworfQorCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludFplcm9TaXplZEFu
aW1hdGluZ0xheWVyKQoreworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFn
ZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAwMCwgMTAyNCk7CisgICAgUmVm
UHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxl
ZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+
IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKworICAg
IEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJlVXBk
YXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIFByZXRlbmQgdGhlIGxh
eWVyIGlzIGFuaW1hdGluZy4KKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5n
KHRydWUpOworCisgICAgLy8gVGhlIGxheWVyJ3MgYm91bmRzIGFyZSBlbXB0eS4KKyAgICBJbnRS
ZWN0IGNvbnRlbnRSZWN0OworCisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50UmVjdC5zaXpl
KCkpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBs
YXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5wcmVwYXJlVG9V
cGRhdGUoY29udGVudFJlY3QsIDApOworCisgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUg
dGlsZXMuCisgICAgRVhQRUNUX0VRKDB1LCBsYXllci0+bnVtUGFpbnRlZFRpbGVzKCkpOworCisg
ICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IG5lZWQgcHJlcGFpbnQuCisgICAgRVhQRUNUX0ZBTFNF
KGxheWVyLT5uZWVkc0lkbGVQYWludChjb250ZW50UmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0
aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZl
IHRpbGVzLgorICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CisK
KyAgICAvLyBOb24tdmlzaWJsZSBsYXllcnMgZG9uJ3QgaWRsZSBwYWludC4KKyAgICBsYXllci0+
cHJlcGFyZVRvVXBkYXRlSWRsZShjb250ZW50UmVjdCwgMCk7CisKKyAgICAvLyBFbXB0eSBsYXll
cnMgZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBFWFBFQ1RfRVEoMHUsIGxheWVyLT5udW1QYWludGVk
VGlsZXMoKSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRh
dGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisg
ICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCisgICAgRVhQRUNUX0ZBTFNFKGxh
eWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKK30KKworVEVTVChUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlTGF5ZXJzKQoreworICAgIEludFNpemUgY29udGVudEJv
dW5kcygxMDAsIDEwMCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChJbnRQb2ludDo6emVybygp
LCBjb250ZW50Qm91bmRzKTsKKworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAwMCwgMTAyNCk7CisgICAg
UmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VU
aWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllcklt
cGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKwor
ICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7CisgICAgQ0NUZXh0dXJl
VXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAgIC8vIEludmFsaWRhdGUg
dGhlIGxheWVyIGJ1dCBtYWtlIG5vbmUgb2YgaXQgdmlzaWJsZSwgc28gbm90aGluZyBwYWludHMu
CisgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKKworICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVu
dEJvdW5kcyk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZVJlY3QpOwor
ICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPnByZXBh
cmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCwgMCk7CisKKyAgICAvLyBOb24tdmlzaWJsZSBsYXllcnMg
ZG9uJ3QgbmVlZCBpZGxlIHBhaW50LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxl
UGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHRpbGVzIHB1c2hlZCBzaW5j
ZSB0aGUgbGF5ZXIgaXMgbm90IHZpc2libGUuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+
aGFzVGlsZUF0KDAsIDApKTsKKworICAgIC8vIE5vbi12aXNpYmxlIGxheWVycyBkb24ndCBpZGxl
IHBhaW50LgorICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVSZWN0LCAwKTsK
KworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAg
IGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBz
aG91bGQgbm90IGhhdmUgYW55IHRpbGVzIHB1c2hlZCBzaW5jZSB0aGUgbGF5ZXIgaXMgbm90IHZp
c2libGUuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0KDAsIDApKTsKK30K
Kworc3RhdGljIHZvaWQgaWRsZVBhaW50UmVwZWF0KGludCByZXBlYXRUaW1lcywgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBsYXllckltcGwsIEND
VGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQorewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwZWF0VGltZXM7ICsraSkgeworICAgICAgICBsYXll
ci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0LCAwKTsKKyAgICAgICAgbGF5ZXItPnByZXBh
cmVUb1VwZGF0ZUlkbGUodmlzaWJsZVJlY3QsIDApOworICAgICAgICBsYXllci0+dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0
aWVzVG8obGF5ZXJJbXBsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RIYXZlT3V0ZXJU
aWxlcyhGYWtlQ0NUaWxlZExheWVySW1wbCogbGF5ZXJJbXBsLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCBoYXZlKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7ICsraSkgewor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGhlaWdodDsgKytqKSB7CisgICAgICAgICAgICBi
b29sIGhhc1RpbGUgPSBpIDwgaGF2ZSB8fCBqIDwgaGF2ZSB8fCBpID49IHdpZHRoIC0gaGF2ZSB8
fCBqID49IGhlaWdodCAtIGhhdmU7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFzVGlsZSwgbGF5
ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikpOworICAgICAgICB9CisgICAgfQorfQorCitURVNUKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVBbmltYXRpbmdMYXllcnMp
Cit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoODAwKjgwMCo4LCA4MDAqODAwKjQsIDEwMjQpOworICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3Ig
dGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVB
bGxvY2F0b3IpOworCisgICAgaW50IHdpZHRoW10gPSB7IDEwMCwgMjAwLCAzMDAsIDQwMCwgOTAw
LCAxMDAwLCAwIH07CisgICAgaW50IGhlaWdodFtdID0geyAxMDAsIDIwMCwgMzAwLCA0MDAsIDkw
MCwgMTAwMCwgMCB9OworCisgICAgZm9yIChpbnQgaiA9IDA7IGhlaWdodFtqXTsgKytqKSB7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyB3aWR0aFtpXTsgKytpKSB7CisgICAgICAgICAgICBSZWZQ
dHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgICAgICAgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKDApKSk7CisKKyAgICAgICAgICAgIC8vIFByZXRlbmQgdGhlIGxheWVyIGlzIGFu
aW1hdGluZy4KKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNBbmltYXRpbmco
dHJ1ZSk7CisKKyAgICAgICAgICAgIEludFNpemUgY29udGVudEJvdW5kcyh3aWR0aFtpXSwgaGVp
Z2h0W2pdKTsKKyAgICAgICAgICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgY29udGVudEJvdW5kcyk7CisgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0OworCisg
ICAgICAgICAgICAvLyBMYXllcnMgd2l0aCBhdCBtb3N0IDkgdGlsZXMgd2lsbCBwcmVwYWludC4K
KyAgICAgICAgICAgIGJvb2wgc2hvdWxkUHJlcGFpbnQgPSBjb250ZW50Qm91bmRzLndpZHRoKCkg
LyAxMDAgKiBjb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMTAwIDw9IDk7CisKKyAgICAgICAgICAg
IGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcyk7CisgICAgICAgICAgICBsYXllci0+c2V0
VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CisgICAgICAgICAgICBsYXllci0+aW52YWxp
ZGF0ZVJlY3QoY29udGVudFJlY3QpOworCisgICAgICAgICAgICAvLyBUaGlzIHBhaW50cyB0aGUg
bGF5ZXIgYnV0IHRoZXJlJ3Mgbm90aGluZyB2aXNpYmxlIHNvIGl0J3MgYSBuby1vcC4KKyAgICAg
ICAgICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QsIDApOworICAgICAgICAg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgICAg
ICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHRpbGVzIHB1c2hlZCB5ZXQgc2luY2UgdGhl
IGxheWVyIGlzIG5vdCB2aXNpYmxlIGFuZCB3ZSd2ZSBub3QgcHJlcGFpbnRlZC4KKyAgICAgICAg
ICAgIHRlc3RIYXZlT3V0ZXJUaWxlcyhsYXllckltcGwuZ2V0KCksIHdpZHRoW2ldIC8gMTAwLCBo
ZWlnaHRbal0gLyAxMDAsIDApOworCisgICAgICAgICAgICAvLyBOb3JtYWxseSB3ZSBkb24ndCBh
bGxvdyBub24tdmlzaWJsZSBsYXllcnMgdG8gcHJlLXBhaW50LCBidXQgaWYgdGhleSBhcmUgYW5p
bWF0aW5nIHRoZW4gd2Ugc2hvdWxkLgorICAgICAgICAgICAgaWYgKHNob3VsZFByZXBhaW50ICE9
IGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpCisgICAgICAgICAgICAgICAgcHJp
bnRmKCJmYWlsXG4iKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzaG91bGRQcmVwYWludCwgbGF5
ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICAgICAgICAgIC8vIElmIHRo
ZXkgYXJlIHdpdGhpbiBvdXIgYm91bmRzLCB0aGVuIGFmdGVyIGZvdXIgdXBkYXRlcyB3ZSBzaG91
bGQgaGF2ZSB0aGUgb3V0ZXIgcm93L2NvbHVtbnMgcGFpbnRlZC4KKyAgICAgICAgICAgIGlkbGVQ
YWludFJlcGVhdCg0LCBsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpLCB1cGRhdGVyLCB2aXNp
YmxlUmVjdCk7CisgICAgICAgICAgICB0ZXN0SGF2ZU91dGVyVGlsZXMobGF5ZXJJbXBsLmdldCgp
LCB3aWR0aFtpXSAvIDEwMCwgaGVpZ2h0W2pdIC8gMTAwLCBzaG91bGRQcmVwYWludCA/IDEgOiAw
KTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGlkbGUgcGFpbnQgcGFzdCB0
aGUgb3V0ZXJtb3N0IHRpbGVzLgorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVk
c0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaWRsZVBhaW50UmVwZWF0KDQs
IGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksIHVwZGF0ZXIsIHZpc2libGVSZWN0KTsKKyAg
ICAgICAgICAgIHRlc3RIYXZlT3V0ZXJUaWxlcyhsYXllckltcGwuZ2V0KCksIHdpZHRoW2ldIC8g
MTAwLCBoZWlnaHRbal0gLyAxMDAsIHNob3VsZFByZXBhaW50ID8gMSA6IDApOworICAgICAgICB9
CisgICAgfQorfQorCiBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGludmFsaWRhdGVGcm9t
UHJlcGFyZSkKIHsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133714</attachid>
            <date>2012-03-25 19:19:55 -0700</date>
            <delta_ts>2012-03-25 19:23:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82117-20120325221954.patch</filename>
            <type>text/plain</type>
            <size>20813</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJmMjk0OTVjMThjZjA3
YTRkODI2ZDc4ODY4NDAzZjM2NjVlMGEwNS4uMzgyMmI4MzJlNGE5MjE2NDU1MzA5ZGYwNjNjY2Vi
MjI0MjNiY2Q1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5
ZXJzIHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhl
eSBhcmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZvciBhbmltYXRpbmcgdHJhbnNmb3JtcywgaW5zdGVhZCBvZiBlYXJseS1v
dXRpbmcgd2hlbiB0aGUgbGF5ZXIncworICAgICAgICB2aXNpYmxlIHJlY3QgaXMgZW1wdHksIGxl
dCBpdCBwcmVwYWludCByZWdhcmRsZXNzLgorCisgICAgICAgIEZvciBub3csIHdlIGp1c3Qgb25s
eSBwYWludCB0aGUgb3V0ZXJtb3N0IHRpbGVzLCBhbmQgb25seSBmb3Igc21hbGwKKyAgICAgICAg
bGF5ZXJzLCB3aXRoIGF0IG1vc3QgOSB0aWxlcy4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhl
IGJlaGF2aW91ciBvZiBDb250ZW50TGF5ZXJDaHJvbWl1bSdzCisgICAgICAgIGlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpIHNvIEkndmUgZ3VhcmRlZCB0aGUgYmVoYXZpb3VyIG9mIHRoZSB0d28K
KyAgICAgICAgcHJlcGFpbnRpbmcgZnVuY3Rpb25zIHRoYXQgaXQgY2FsbHMgdG8gZW5zdXJlIHRo
ZSBvbGQgYmVoYXZpb3VyIGhvbGRzCisgICAgICAgIHdpdGhvdXQgYW5pbWF0aW9ucywgYW5kIHRo
ZSBuZXcgYmVoYXZpb3VyIHdvcmtzIHdpdGggdGhlbS4KKworICAgICAgICBVbml0IHRlc3Q6IFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIKKyAgICAgICAgICAg
ICAgICAgICBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmlkbGVQYWludFplcm9TaXplZEFuaW1hdGlu
Z0xheWVyCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVtVGVzdC5pZGxlUGFp
bnROb25WaXNpYmxlTGF5ZXJzCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVt
VGVzdC5pZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9V
cGRhdGVJZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJ
ZGxlUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFp
bnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFp
bnRlZFRpbGVzKToKKyAgICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisKIDIwMTItMDMtMjQg
IEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBp
biBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAwYzcwZDNjZTkwNmViYzMxNTgxMmI1MTk3MzFmNWE3MjA5
ZGVkZTMxLi42ZWQ5YzFmNTAxMjhmNzk4Y2QyOTJiNWNhY2YyMmZkZmIwZDM3YTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTI1ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJz
IHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhleSBh
cmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChX
VEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OkZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSk6CisgICAgICAgIChG
YWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisgICAgICAgIChX
VEYpOgorICAgICAgICAoV1RGOjppZGxlUGFpbnRSZXBlYXQpOgorICAgICAgICAoV1RGOjp0ZXN0
SGF2ZU91dGVyVGlsZXMpOgorCiAyMDEyLTAzLTIzICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gSW5jb3JyZWN0IHJlcGxpY2Egb3Jp
Z2luVHJhbnNmb3JtIHVzZWQgaW4gQ0NEYW1hZ2VUcmFja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzAwNzIxNTc5NzlkNzhiNTlhYjM3ZTBmMjJkYjI2NTYyMjlj
MDQ5OS4uNzNhOGE0MjQ2MTU3MTNlNjlkNWEyYzFlNzhjZmU5M2NiNjg4MDA1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTE0LDEwICsxMTQsNyBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgQ0NPY2Ns
dXNpb25UcmFja2VyKiBvYwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsK
LSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgY29u
c3QgSW50UmVjdCBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAgICAgcHJlcGFyZVRv
VXBkYXRlSWRsZShsYXllclJlY3QsIG9jY2x1c2lvbik7CiAgICAgaWYgKG5lZWRzSWRsZVBhaW50
KGxheWVyUmVjdCkpCiAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCBhZjU5NGQ0YjcwYjJiOTZmN2MyZmZiY2JmMGM3ODliZDVkNzYy
Yzg1Li5jOWU3MTVjNWIxYmNjYmI5MDkwMDczNGE1YzBmNTI3ZGIzZmJkOTBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYyOCwyNSArNjI4LDQ2IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCwgY29uc3QgQ0NPCiAKICAgICB1cGRhdGVCb3VuZHMoKTsKIAotICAgIGlmIChtX3RpbGVyLT5p
c0VtcHR5KCkpCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJlcyBpbiB0aGUgcHJlLXBhaW50IGFyZWEgc28g
d2UgZG9uJ3QgZW5kIHVwIGp1c3QKLSAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCiAgICAg
SW50UmVjdCBpZGxlUGFpbnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7Cisg
ICAgaWYgKGlkbGVQYWludExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFByb3RlY3QgYW55IHRleHR1cmVzIGluIHRoZSBwcmUtcGFpbnQgYXJlYSwgYXMgd2Ug
d291bGQgc3RlYWwgdGhlbSBmcm9tIG90aGVyIGxheWVycworICAgIC8vIG92ZXIgdGltZSBhbnlo
b3cuIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBsb3NlIHRpbGVzIGluIHRoZSBmaXJzdCByb3VuZHMg
b2YgaWRsZSBwYWludGluZworICAgIC8vIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHBhaW50ZWQuCiAg
ICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhpZGxlUGFpbnRMYXllclJlY3QpOwogCisgICAgaW50IHBy
ZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOwor
ICAgIG1fdGlsZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50TGF5ZXJSZWN0LCBw
cmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSk7
CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IHZpc2libGUsIHdlIGhhdmUgbm90aGluZyB0
byBleHBhbmQgZnJvbSwgc28gaW5zdGVhZCB3ZSBwcmVwYWludCB0aGUgb3V0ZXItbW9zdCBzZXQg
b2YgdGlsZXMuCisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJlcGFy
ZVRvVXBkYXRlVGlsZXModHJ1ZSwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRS
aWdodCwgcHJlcGFpbnRUb3AsIDApOworICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcmVw
YXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludExlZnQsIHByZXBhaW50Qm90dG9tLCBwcmVw
YWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSwgMCk7CisgICAgICAgIGlmICghbV9wYWludFJlY3Qu
aXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3As
IHByZXBhaW50TGVmdCwgcHJlcGFpbnRCb3R0b20sIDApOworICAgICAgICBpZiAoIW1fcGFpbnRS
ZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludFJpZ2h0LCBwcmVwYWlu
dFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b20sIDApOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwogICAgIG1fdGls
ZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMobGF5ZXJSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOwogCi0gICAgLy8gUHJlcGFpbnQgYW55dGhpbmcgdGhhdCB3YXMgb2NjbHVkZWQgYnV0
IGluc2lkZSB0aGUgbGF5ZXIncyB2aXNpYmxlIHJlZ2lvbi4KKyAgICAvLyBPdGhlcndpc2UsIHBy
ZXBhaW50IGFueXRoaW5nIHRoYXQgd2FzIG9jY2x1ZGVkIGJ1dCBpbnNpZGUgdGhlIGxheWVyJ3Mg
dmlzaWJsZSByZWdpb24uCiAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tLCAwKTsKICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBt
X3NraXBzSWRsZVBhaW50KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBFeHBhbmQgb3V0d2Fy
ZHMgdW50aWwgd2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgotICAgIGlu
dCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRv
bTsKLSAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludExheWVyUmVj
dCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0
b20pOworICAgIC8vIFRoZW4gZXhwYW5kIG91dHdhcmRzIGZyb20gdGhlIHZpc2libGUgYXJlYSB1
bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCiAgICAgd2hpbGUg
KCFtX3NraXBzSWRsZVBhaW50ICYmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0IHx8IHRvcCA+IHByZXBh
aW50VG9wIHx8IHJpZ2h0IDwgcHJlcGFpbnRSaWdodCB8fCBib3R0b20gPCBwcmVwYWludEJvdHRv
bSkpIHsKICAgICAgICAgaWYgKGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSB7CiAgICAgICAgICAg
ICArK2JvdHRvbTsKQEAgLTY4MCwxMiArNzAxLDIwIEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVt
OjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiAgICAgaWYgKG1fc2tp
cHNJZGxlUGFpbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghbV90aWxlci0+
bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgSW50UmVjdCBpZGxlUGFp
bnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7CisgICAgaWYgKGlkbGVQYWlu
dExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CiAgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5k
aWNlcyhpZGxlUGFpbnRMYXllclJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXJS
ZWN0IGlzIGVtcHR5LCB0aGVuIHdlIGFyZSBwYWludGluZyB0aGUgb3V0ZXItbW9zdCBzZXQgb2Yg
dGlsZXMgb25seS4KKyAgICAgICAgICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpICYmIGkgIT0g
bGVmdCAmJiBpICE9IHJpZ2h0ICYmIGogIT0gdG9wICYmIGogIT0gYm90dG9tKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNS
ZWN0LmNvbnRhaW5zKEludFBvaW50KGksIGopKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC02OTgs
NiArNzI3LDE1IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QpCiAKIEludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxl
UGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpCiB7CisgICAgLy8gRm9y
IGxheWVycyB0aGF0IGFyZSBhbmltYXRpbmcgdHJhbnNmb3JtcyBidXQgbm90IHZpc2libGUgYXQg
YWxsLCB3ZSBkb24ndCBrbm93IHdoYXQgcGFydAorICAgIC8vIG9mIHRoZW0gaXMgZ29pbmcgdG8g
YmVjb21lIHZpc2libGUuIEZvciBzbWFsbCBsYXllcnMgd2UgcmV0dXJuIHRoZSBlbnRpcmUgcmVj
dCwgZm9yIGxhcmdlcgorICAgIC8vIG9uZXMgd2UgYXZvaWQgcHJlcGFpbnRpbmcgdGhlIGxheWVy
IGF0IGFsbC4KKyAgICBpZiAodmlzaWJsZUxheWVyUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKChkcmF3VHJhbnNmb3JtSXNBbmltYXRpbmcoKSB8fCBzY3JlZW5TcGFjZVRyYW5zZm9ybUlz
QW5pbWF0aW5nKCkpICYmIG1fdGlsZXItPm51bVRpbGVzKCkgPD0gOSkKKyAgICAgICAgICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7CisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgfQorCiAgICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxl
TGF5ZXJSZWN0OwogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBtYWRlIGEgbG90IGxhcmdlciBp
ZiB3ZSBjYW46CiAgICAgLy8gLSByZXNlcnZlIG1lbW9yeSBhdCBhIGxvd2VyIHByaW9yaXR5IHRo
YW4gZm9yIHZpc2libGUgY29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCA2
NDNmNjk2NDAwMjk0MThhNDc3YzZmMjE0MzNkZGE3ODM2Y2Q0OGJiLi5mZDQ3OGRlNjc4MTkzNDA4
YmI1ODQ0NTQyMzEyODQ0Y2YxZmYwYTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApA
QCAtNzcsNiArNzcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRUZXh0dXJlRm9ybWF0KEdD
M0RlbnVtIHRleHR1cmVGb3JtYXQpIHsgbV90ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZUZvcm1hdDsg
fQogICAgIHZvaWQgc2V0Qm9yZGVyVGV4ZWxPcHRpb24oQ0NMYXllclRpbGluZ0RhdGE6OkJvcmRl
clRleGVsT3B0aW9uKTsKICAgICB2b2lkIHNldFNhbXBsZWRUZXhlbEZvcm1hdChMYXllclRleHR1
cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KSB7IG1fc2Ft
cGxlZFRleGVsRm9ybWF0ID0gc2FtcGxlZFRleGVsRm9ybWF0OyB9CisgICAgc2l6ZV90IG51bVBh
aW50ZWRUaWxlcygpIHsgcmV0dXJuIG1fdGlsZXItPnRpbGVzKCkuc2l6ZSgpOyB9CiAKICAgICB2
aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkgPSAwOwpAQCAt
OTYsNiArOTcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gQWZ0ZXIgcHJlcGFyaW5nIGFuIHVwZGF0
ZSwgcmV0dXJucyB0cnVlIGlmIG1vcmUgcHJlLXBhaW50aW5nIGlzIG5lZWRlZC4KICAgICBib29s
IG5lZWRzSWRsZVBhaW50KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7CiAKKyAgICBJbnRSZWN0
IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCk7CisKICAgICBi
b29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKQEAgLTExMiw3ICsxMTUsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgdGlsZU5lZWRzQnVmZmVyZWRVcGRhdGUoVXBkYXRhYmxlVGls
ZSopOwogCiAgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVUaWxlcyhib29sIGlkbGUsIGludCBsZWZ0
LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tl
ciopOwotICAgIEludFJlY3QgaWRsZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5
ZXJSZWN0KTsKIAogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAg
ICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRl
eCAwNmE5YTk3ZjFmNmFkNzkwODZkNjM3ZTEwMGY4NThkMTg4MDg4OWJjLi42ZDAxOTYwNWU4MmM3
ZTQ5Mzk2NGFjMzhkNjcwMDM1NjEzZDYyMWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiQ0NB
bmltYXRpb25UZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ0NMYXllclRyZWVUZXN0Q29tbW9uLmgi
CiAjaW5jbHVkZSAiRmFrZUNDTGF5ZXJUcmVlSG9zdENsaWVudC5oIgogI2luY2x1ZGUgIkxheWVy
VGV4dHVyZVVwZGF0ZXIuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXRU
ZXN0czsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKICNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwg
YikgXApAQCAtMTYwLDM3ICsxNjIsMjIgQEAgcHVibGljOgogICAgICAgICAsIG1fZmFrZVRleHR1
cmVVcGRhdGVyKGFkb3B0UmVmKG5ldyBGYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcikpCiAgICAgICAg
ICwgbV90ZXh0dXJlTWFuYWdlcih0ZXh0dXJlTWFuYWdlcikKICAgICB7Ci0gICAgICAgIHNldFRp
bGVTaXplKEludFNpemUoMTAwLCAxMDApKTsKKyAgICAgICAgc2V0VGlsZVNpemUodGlsZVNpemUo
KSk7CiAgICAgICAgIHNldFRleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwog
ICAgICAgICBzZXRCb3JkZXJUZXhlbE9wdGlvbihDQ0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJU
ZXhlbHMpOwogICAgICAgICBzZXRJc0RyYXdhYmxlKHRydWUpOyAvLyBTbyB0aGF0IHdlIGRvbid0
IGdldCBmYWxzZSBwb3NpdGl2ZXMgaWYgYW55IG9mIHRoZXNlIHRlc3RzIGV4cGVjdCB0byByZXR1
cm4gZmFsc2UgZnJvbSBkcmF3c0NvbnRlbnQoKSBmb3Igb3RoZXIgcmVhc29ucy4KICAgICB9CiAg
ICAgdmlydHVhbCB+RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSgpIHsgfQogCi0gICAgdm9pZCBpbnZh
bGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgVGlsZWRMYXll
ckNocm9taXVtOjppbnZhbGlkYXRlUmVjdChyZWN0KTsKLSAgICB9CisgICAgc3RhdGljIEludFNp
emUgdGlsZVNpemUoKSB7IHJldHVybiBJbnRTaXplKDEwMCwgMTAwKTsgfQogCi0gICAgdm9pZCBw
cmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ0NPY2NsdXNpb25UcmFj
a2VyKiBvY2NsdXNpb24pCi0gICAgewotICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBh
cmVUb1VwZGF0ZShyZWN0LCBvY2NsdXNpb24pOwotICAgIH0KLQotICAgIHZvaWQgcHJlcGFyZVRv
VXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIq
IG9jY2x1c2lvbikKLSAgICB7Ci0gICAgICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRv
VXBkYXRlSWRsZShyZWN0LCBvY2NsdXNpb24pOwotICAgIH0KLQotICAgIGJvb2wgbmVlZHNJZGxl
UGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUaWxlZExh
eWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KHJlY3QpOwotICAgIH0KLQotICAgIGJvb2wgc2tp
cHNEcmF3KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUaWxlZExheWVyQ2hyb21pdW06
OnNraXBzRHJhdygpOwotICAgIH0KKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OmludmFs
aWRhdGVSZWN0OworICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRl
OworICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZTsKKyAg
ICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50OworICAgIHVzaW5nIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2tpcHNEcmF3OworICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6bnVtUGFpbnRlZFRpbGVzOworICAgIHVzaW5nIFRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBh
aW50UmVjdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKICAgICB7CkBAIC02ODcsNiArNjc0LDIxMSBAQCBURVNUKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE91dE9mTWVtb3J5KQogICAgIGxheWVyLT5wdXNoUHJv
cGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiB9CiAKK1RFU1QoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIpCit7CisgICAgT3duUHRyPFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAw
LCAxMDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwor
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsK
KyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAg
Ly8gVGhlIGxheWVyJ3MgYm91bmRzIGFyZSBlbXB0eS4KKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0
OworCisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50UmVjdC5zaXplKCkpOworICAgIGxheWVy
LT5zZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUoY29udGVudFJl
Y3QsIDApOworCisgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCisgICAgRVhQ
RUNUX0VRKDB1LCBsYXllci0+bnVtUGFpbnRlZFRpbGVzKCkpOworCisgICAgLy8gRW1wdHkgbGF5
ZXJzIGRvbid0IG5lZWQgcHJlcGFpbnQuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lk
bGVQYWludChjb250ZW50UmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBs
LmdldCgpKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVY
UEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CisKKyAgICAvLyBOb24tdmlz
aWJsZSBsYXllcnMgZG9uJ3QgaWRsZSBwYWludC4KKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRl
SWRsZShjb250ZW50UmVjdCwgMCk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0
aWxlcy4KKyAgICBFWFBFQ1RfRVEoMHUsIGxheWVyLT5udW1QYWludGVkVGlsZXMoKSk7CisKKyAg
ICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXll
ci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAgLy8gRW1wdHkgbGF5
ZXJzIGRvbid0IGhhdmUgdGlsZXMuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGls
ZUF0KDAsIDApKTsKK30KKworVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRa
ZXJvU2l6ZWRBbmltYXRpbmdMYXllcikKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRl
eHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAwMDAsIDEwMjQp
OworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgT3duUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDAp
KSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOworICAgIEND
VGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICAvLyBQcmV0
ZW5kIHRoZSBsYXllciBpcyBhbmltYXRpbmcuCisgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm1J
c0FuaW1hdGluZyh0cnVlKTsKKworICAgIC8vIFRoZSBsYXllcidzIGJvdW5kcyBhcmUgZW1wdHku
CisgICAgSW50UmVjdCBjb250ZW50UmVjdDsKKworICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVu
dFJlY3Quc2l6ZSgpKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVj
dCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+
cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRSZWN0LCAwKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBk
b24ndCBoYXZlIHRpbGVzLgorICAgIEVYUEVDVF9FUSgwdSwgbGF5ZXItPm51bVBhaW50ZWRUaWxl
cygpKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBuZWVkIHByZXBhaW50LgorICAgIEVY
UEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQoY29udGVudFJlY3QpKTsKKworICAgIGxh
eWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5w
dXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMg
ZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQo
MCwgMCkpOworCisgICAgLy8gTm9uLXZpc2libGUgbGF5ZXJzIGRvbid0IGlkbGUgcGFpbnQuCisg
ICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlkbGUoY29udGVudFJlY3QsIDApOworCisgICAgLy8g
RW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUgdGlsZXMuCisgICAgRVhQRUNUX0VRKDB1LCBsYXllci0+
bnVtUGFpbnRlZFRpbGVzKCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdl
dCgpKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVYUEVD
VF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7Cit9CisKK1RFU1QoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUxheWVycykKK3sKKyAgICBJbnRTaXpl
IGNvbnRlbnRCb3VuZHMoMTAwLCAxMDApOworICAgIEludFJlY3QgY29udGVudFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CisKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAwMDAsIDEw
MjQpOworICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVm
KG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAg
RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KDApKSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOworICAg
IENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICAvLyBJ
bnZhbGlkYXRlIHRoZSBsYXllciBidXQgbWFrZSBub25lIG9mIGl0IHZpc2libGUsIHNvIG5vdGhp
bmcgcGFpbnRzLgorICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CisKKyAgICBsYXllci0+c2V0Qm91
bmRzKGNvbnRlbnRCb3VuZHMpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2li
bGVSZWN0KTsKKyAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoY29udGVudFJlY3QpOworICAgIGxh
eWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QsIDApOworCisgICAgLy8gTm9uLXZpc2li
bGUgbGF5ZXJzIGRvbid0IG5lZWQgaWRsZSBwYWludC4KKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXIt
Pm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhs
YXllckltcGwuZ2V0KCkpOworCisgICAgLy8gV2Ugc2hvdWxkIG5vdCBoYXZlIGFueSB0aWxlcyBw
dXNoZWQgc2luY2UgdGhlIGxheWVyIGlzIG5vdCB2aXNpYmxlLgorICAgIEVYUEVDVF9GQUxTRShs
YXllckltcGwtPmhhc1RpbGVBdCgwLCAwKSk7CisKKyAgICAvLyBOb24tdmlzaWJsZSBsYXllcnMg
ZG9uJ3QgaWRsZSBwYWludC4KKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxl
UmVjdCwgMCk7CisKKyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRh
dGVyKTsKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisg
ICAgLy8gV2Ugc2hvdWxkIG5vdCBoYXZlIGFueSB0aWxlcyBwdXNoZWQgc2luY2UgdGhlIGxheWVy
IGlzIG5vdCB2aXNpYmxlLgorICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1RpbGVBdCgw
LCAwKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVQYWludFJlcGVhdChpbnQgcmVwZWF0VGltZXMs
IEZha2VUaWxlZExheWVyQ2hyb21pdW0qIGxheWVyLCBGYWtlQ0NUaWxlZExheWVySW1wbCogbGF5
ZXJJbXBsLCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcGVhdFRpbWVzOyArK2kpIHsKKyAg
ICAgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCwgMCk7CisgICAgICAgIGxh
eWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVSZWN0LCAwKTsKKyAgICAgICAgbGF5ZXIt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgICAgIGxheWVyLT5w
dXNoUHJvcGVydGllc1RvKGxheWVySW1wbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0
SGF2ZU91dGVyVGlsZXMoRmFrZUNDVGlsZWRMYXllckltcGwqIGxheWVySW1wbCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgaGF2ZSkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRo
OyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgeworICAg
ICAgICAgICAgYm9vbCBoYXNUaWxlID0gaSA8IGhhdmUgfHwgaiA8IGhhdmUgfHwgaSA+PSB3aWR0
aCAtIGhhdmUgfHwgaiA+PSBoZWlnaHQgLSBoYXZlOworICAgICAgICAgICAgRVhQRUNUX0VRKGhh
c1RpbGUsIGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0
aW5nTGF5ZXJzKQoreworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIg
PSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDgwMDAqODAwMCo4LCA4MDAwKjgwMDAqNCwgMTAyNCk7
CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisKKyAgICBGYWtlVGV4
dHVyZUFsbG9jYXRvciB0ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBk
YXRlcigmdGV4dHVyZUFsbG9jYXRvcik7CisKKyAgICBpbnQgdGlsZVdpZHRoID0gRmFrZVRpbGVk
TGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUoKS53aWR0aCgpOworICAgIGludCB0aWxlSGVpZ2h0ID0g
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsZVNpemUoKS5oZWlnaHQoKTsKKyAgICBpbnQgd2lk
dGhbXSA9IHsgMSwgMiwgMywgNCwgOSwgMTAsIDAgfTsKKyAgICBpbnQgaGVpZ2h0W10gPSB7IDEs
IDIsIDMsIDQsIDksIDEwLCAwIH07CisKKyAgICBmb3IgKGludCBqID0gMDsgaGVpZ2h0W2pdOyAr
K2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IHdpZHRoW2ldOyArK2kpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBG
YWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgICAgICAg
ICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFr
ZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKworICAgICAgICAgICAgLy8gUHJldGVuZCB0aGUgbGF5
ZXIgaXMgYW5pbWF0aW5nLgorICAgICAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm1Jc0Fu
aW1hdGluZyh0cnVlKTsKKworICAgICAgICAgICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKHdpZHRo
W2ldICogdGlsZVdpZHRoLCBoZWlnaHRbal0gKiB0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAgIElu
dFJlY3QgY29udGVudFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgY29udGVudEJvdW5kcyk7CisgICAg
ICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0OworCisgICAgICAgICAgICBsYXllci0+c2V0Qm91
bmRzKGNvbnRlbnRCb3VuZHMpOworICAgICAgICAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJl
Y3QodmlzaWJsZVJlY3QpOworICAgICAgICAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRl
bnRSZWN0KTsKKworICAgICAgICAgICAgLy8gSWYgaWRsZVBhaW50UmVjdCBnaXZlcyBiYWNrIGEg
bm9uLWVtcHR5IHJlc3VsdCB0aGVuIHdlIHNob3VsZCBwYWludCBpdC4gT3RoZXJ3aXNlLAorICAg
ICAgICAgICAgLy8gd2Ugc2hvdWQgcGFpbnQgbm90aGluZy4KKyAgICAgICAgICAgIGJvb2wgc2hv
dWxkUHJlcGFpbnQgPSAhbGF5ZXItPmlkbGVQYWludFJlY3QodmlzaWJsZVJlY3QpLmlzRW1wdHko
KTsKKworICAgICAgICAgICAgLy8gVGhpcyBwYWludHMgdGhlIGxheWVyIGJ1dCB0aGVyZSdzIG5v
dGhpbmcgdmlzaWJsZSBzbyBpdCdzIGEgbm8tb3AuCisgICAgICAgICAgICBsYXllci0+cHJlcGFy
ZVRvVXBkYXRlKHZpc2libGVSZWN0LCAwKTsKKyAgICAgICAgICAgIGxheWVyLT51cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgICAgICAgICAgbGF5ZXItPnB1c2hQcm9w
ZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5v
dCBoYXZlIGFueSB0aWxlcyBwdXNoZWQgeWV0IHNpbmNlIHRoZSBsYXllciBpcyBub3QgdmlzaWJs
ZSBhbmQgd2UndmUgbm90IHByZXBhaW50ZWQuCisgICAgICAgICAgICB0ZXN0SGF2ZU91dGVyVGls
ZXMobGF5ZXJJbXBsLmdldCgpLCB3aWR0aFtpXSwgaGVpZ2h0W2pdLCAwKTsKKworICAgICAgICAg
ICAgLy8gTm9ybWFsbHkgd2UgZG9uJ3QgYWxsb3cgbm9uLXZpc2libGUgbGF5ZXJzIHRvIHByZS1w
YWludCwgYnV0IGlmIHRoZXkgYXJlIGFuaW1hdGluZyB0aGVuIHdlIHNob3VsZC4KKyAgICAgICAg
ICAgIEVYUEVDVF9FUShzaG91bGRQcmVwYWludCwgbGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2li
bGVSZWN0KSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZXkgYXJlIHdpdGhpbiBvdXIgYm91bmRz
LCB0aGVuIGFmdGVyIGZvdXIgdXBkYXRlcyB3ZSBzaG91bGQgaGF2ZSB0aGUgb3V0ZXIgcm93L2Nv
bHVtbnMgcGFpbnRlZC4KKyAgICAgICAgICAgIGlkbGVQYWludFJlcGVhdCg0LCBsYXllci5nZXQo
KSwgbGF5ZXJJbXBsLmdldCgpLCB1cGRhdGVyLCB2aXNpYmxlUmVjdCk7CisgICAgICAgICAgICB0
ZXN0SGF2ZU91dGVyVGlsZXMobGF5ZXJJbXBsLmdldCgpLCB3aWR0aFtpXSwgaGVpZ2h0W2pdLCBz
aG91bGRQcmVwYWludCA/IDEgOiAwKTsKKworICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY3VycmVu
dGx5IGlkbGUgcGFpbnQgcGFzdCB0aGUgb3V0ZXJtb3N0IHRpbGVzLgorICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworICAgICAgICAg
ICAgaWRsZVBhaW50UmVwZWF0KDQsIGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksIHVwZGF0
ZXIsIHZpc2libGVSZWN0KTsKKyAgICAgICAgICAgIHRlc3RIYXZlT3V0ZXJUaWxlcyhsYXllcklt
cGwuZ2V0KCksIHdpZHRoW2ldLCBoZWlnaHRbal0sIHNob3VsZFByZXBhaW50ID8gMSA6IDApOwor
ICAgICAgICB9CisgICAgfQorfQorCiBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIGludmFs
aWRhdGVGcm9tUHJlcGFyZSkKIHsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVN
YW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQs
IDEwMjQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133715</attachid>
            <date>2012-03-25 19:24:00 -0700</date>
            <delta_ts>2012-03-25 19:29:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82117-20120325222359.patch</filename>
            <type>text/plain</type>
            <size>20814</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJmMjk0OTVjMThjZjA3
YTRkODI2ZDc4ODY4NDAzZjM2NjVlMGEwNS4uMzgyMmI4MzJlNGE5MjE2NDU1MzA5ZGYwNjNjY2Vi
MjI0MjNiY2Q1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5
ZXJzIHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhl
eSBhcmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZvciBhbmltYXRpbmcgdHJhbnNmb3JtcywgaW5zdGVhZCBvZiBlYXJseS1v
dXRpbmcgd2hlbiB0aGUgbGF5ZXIncworICAgICAgICB2aXNpYmxlIHJlY3QgaXMgZW1wdHksIGxl
dCBpdCBwcmVwYWludCByZWdhcmRsZXNzLgorCisgICAgICAgIEZvciBub3csIHdlIGp1c3Qgb25s
eSBwYWludCB0aGUgb3V0ZXJtb3N0IHRpbGVzLCBhbmQgb25seSBmb3Igc21hbGwKKyAgICAgICAg
bGF5ZXJzLCB3aXRoIGF0IG1vc3QgOSB0aWxlcy4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhl
IGJlaGF2aW91ciBvZiBDb250ZW50TGF5ZXJDaHJvbWl1bSdzCisgICAgICAgIGlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpIHNvIEkndmUgZ3VhcmRlZCB0aGUgYmVoYXZpb3VyIG9mIHRoZSB0d28K
KyAgICAgICAgcHJlcGFpbnRpbmcgZnVuY3Rpb25zIHRoYXQgaXQgY2FsbHMgdG8gZW5zdXJlIHRo
ZSBvbGQgYmVoYXZpb3VyIGhvbGRzCisgICAgICAgIHdpdGhvdXQgYW5pbWF0aW9ucywgYW5kIHRo
ZSBuZXcgYmVoYXZpb3VyIHdvcmtzIHdpdGggdGhlbS4KKworICAgICAgICBVbml0IHRlc3Q6IFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIKKyAgICAgICAgICAg
ICAgICAgICBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmlkbGVQYWludFplcm9TaXplZEFuaW1hdGlu
Z0xheWVyCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVtVGVzdC5pZGxlUGFp
bnROb25WaXNpYmxlTGF5ZXJzCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVt
VGVzdC5pZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9V
cGRhdGVJZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJ
ZGxlUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFp
bnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFp
bnRlZFRpbGVzKToKKyAgICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisKIDIwMTItMDMtMjQg
IEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBp
biBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAwYzcwZDNjZTkwNmViYzMxNTgxMmI1MTk3MzFmNWE3MjA5
ZGVkZTMxLi42ZWQ5YzFmNTAxMjhmNzk4Y2QyOTJiNWNhY2YyMmZkZmIwZDM3YTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTI1ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJz
IHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhleSBh
cmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChX
VEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OkZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSk6CisgICAgICAgIChG
YWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisgICAgICAgIChX
VEYpOgorICAgICAgICAoV1RGOjppZGxlUGFpbnRSZXBlYXQpOgorICAgICAgICAoV1RGOjp0ZXN0
SGF2ZU91dGVyVGlsZXMpOgorCiAyMDEyLTAzLTIzICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gSW5jb3JyZWN0IHJlcGxpY2Egb3Jp
Z2luVHJhbnNmb3JtIHVzZWQgaW4gQ0NEYW1hZ2VUcmFja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzAwNzIxNTc5NzlkNzhiNTlhYjM3ZTBmMjJkYjI2NTYyMjlj
MDQ5OS4uNzNhOGE0MjQ2MTU3MTNlNjlkNWEyYzFlNzhjZmU5M2NiNjg4MDA1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTE0LDEwICsxMTQsNyBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgQ0NPY2Ns
dXNpb25UcmFja2VyKiBvYwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsK
LSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgY29u
c3QgSW50UmVjdCBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAgICAgcHJlcGFyZVRv
VXBkYXRlSWRsZShsYXllclJlY3QsIG9jY2x1c2lvbik7CiAgICAgaWYgKG5lZWRzSWRsZVBhaW50
KGxheWVyUmVjdCkpCiAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCBhZjU5NGQ0YjcwYjJiOTZmN2MyZmZiY2JmMGM3ODliZDVkNzYy
Yzg1Li41YjAwODlhYTgxODg5OGRjZmE2YjYyZDZlZTQ1NzdjMmM3NWJlMTliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYyOCwyNSArNjI4LDQ2IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCwgY29uc3QgQ0NPCiAKICAgICB1cGRhdGVCb3VuZHMoKTsKIAotICAgIGlmIChtX3RpbGVyLT5p
c0VtcHR5KCkpCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJlcyBpbiB0aGUgcHJlLXBhaW50IGFyZWEgc28g
d2UgZG9uJ3QgZW5kIHVwIGp1c3QKLSAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCiAgICAg
SW50UmVjdCBpZGxlUGFpbnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7Cisg
ICAgaWYgKGlkbGVQYWludExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFByb3RlY3QgYW55IHRleHR1cmVzIGluIHRoZSBwcmUtcGFpbnQgYXJlYSwgYXMgd2Ug
d291bGQgc3RlYWwgdGhlbSBmcm9tIG90aGVyIGxheWVycworICAgIC8vIG92ZXIgdGltZSBhbnlo
b3cuIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBsb3NlIHRpbGVzIGluIHRoZSBmaXJzdCByb3VuZHMg
b2YgaWRsZSBwYWludGluZworICAgIC8vIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHBhaW50ZWQuCiAg
ICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhpZGxlUGFpbnRMYXllclJlY3QpOwogCisgICAgaW50IHBy
ZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOwor
ICAgIG1fdGlsZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50TGF5ZXJSZWN0LCBw
cmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSk7
CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IHZpc2libGUsIHdlIGhhdmUgbm90aGluZyB0
byBleHBhbmQgZnJvbSwgc28gaW5zdGVhZCB3ZSBwcmVwYWludCB0aGUgb3V0ZXItbW9zdCBzZXQg
b2YgdGlsZXMuCisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJlcGFy
ZVRvVXBkYXRlVGlsZXModHJ1ZSwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRS
aWdodCwgcHJlcGFpbnRUb3AsIDApOworICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcmVw
YXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludExlZnQsIHByZXBhaW50Qm90dG9tLCBwcmVw
YWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSwgMCk7CisgICAgICAgIGlmICghbV9wYWludFJlY3Qu
aXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3As
IHByZXBhaW50TGVmdCwgcHJlcGFpbnRCb3R0b20sIDApOworICAgICAgICBpZiAoIW1fcGFpbnRS
ZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludFJpZ2h0LCBwcmVwYWlu
dFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b20sIDApOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwogICAgIG1fdGls
ZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMobGF5ZXJSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOwogCi0gICAgLy8gUHJlcGFpbnQgYW55dGhpbmcgdGhhdCB3YXMgb2NjbHVkZWQgYnV0
IGluc2lkZSB0aGUgbGF5ZXIncyB2aXNpYmxlIHJlZ2lvbi4KKyAgICAvLyBPdGhlcndpc2UsIHBy
ZXBhaW50IGFueXRoaW5nIHRoYXQgd2FzIG9jY2x1ZGVkIGJ1dCBpbnNpZGUgdGhlIGxheWVyJ3Mg
dmlzaWJsZSByZWdpb24uCiAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tLCAwKTsKICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBt
X3NraXBzSWRsZVBhaW50KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBFeHBhbmQgb3V0d2Fy
ZHMgdW50aWwgd2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgotICAgIGlu
dCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRv
bTsKLSAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludExheWVyUmVj
dCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0
b20pOworICAgIC8vIFRoZW4gZXhwYW5kIG91dHdhcmRzIGZyb20gdGhlIHZpc2libGUgYXJlYSB1
bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCiAgICAgd2hpbGUg
KCFtX3NraXBzSWRsZVBhaW50ICYmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0IHx8IHRvcCA+IHByZXBh
aW50VG9wIHx8IHJpZ2h0IDwgcHJlcGFpbnRSaWdodCB8fCBib3R0b20gPCBwcmVwYWludEJvdHRv
bSkpIHsKICAgICAgICAgaWYgKGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSB7CiAgICAgICAgICAg
ICArK2JvdHRvbTsKQEAgLTY4MCwxMiArNzAxLDIwIEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVt
OjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiAgICAgaWYgKG1fc2tp
cHNJZGxlUGFpbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghbV90aWxlci0+
bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgSW50UmVjdCBpZGxlUGFp
bnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7CisgICAgaWYgKGlkbGVQYWlu
dExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CiAgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5k
aWNlcyhpZGxlUGFpbnRMYXllclJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXJS
ZWN0IGlzIGVtcHR5LCB0aGVuIHdlIGFyZSBwYWludGluZyB0aGUgb3V0ZXItbW9zdCBzZXQgb2Yg
dGlsZXMgb25seS4KKyAgICAgICAgICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpICYmIGkgIT0g
bGVmdCAmJiBpICE9IHJpZ2h0ICYmIGogIT0gdG9wICYmIGogIT0gYm90dG9tKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNS
ZWN0LmNvbnRhaW5zKEludFBvaW50KGksIGopKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC02OTgs
NiArNzI3LDE1IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QpCiAKIEludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxl
UGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpCiB7CisgICAgLy8gRm9y
IGxheWVycyB0aGF0IGFyZSBhbmltYXRpbmcgdHJhbnNmb3JtcyBidXQgbm90IHZpc2libGUgYXQg
YWxsLCB3ZSBkb24ndCBrbm93IHdoYXQgcGFydAorICAgIC8vIG9mIHRoZW0gaXMgZ29pbmcgdG8g
YmVjb21lIHZpc2libGUuIEZvciBzbWFsbCBsYXllcnMgd2UgcmV0dXJuIHRoZSBlbnRpcmUgbGF5
ZXIsIGZvciBsYXJnZXIKKyAgICAvLyBvbmVzIHdlIGF2b2lkIHByZXBhaW50aW5nIHRoZSBsYXll
ciBhdCBhbGwuCisgICAgaWYgKHZpc2libGVMYXllclJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAg
IGlmICgoZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKCkgfHwgc2NyZWVuU3BhY2VUcmFuc2Zvcm1J
c0FuaW1hdGluZygpKSAmJiBtX3RpbGVyLT5udW1UaWxlcygpIDw9IDkpCisgICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpOworICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworICAgIH0KKwogICAgIEludFJlY3QgcHJlcGFpbnRSZWN0ID0gdmlzaWJs
ZUxheWVyUmVjdDsKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIg
aWYgd2UgY2FuOgogICAgIC8vIC0gcmVzZXJ2ZSBtZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0
aGFuIGZvciB2aXNpYmxlIGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXgg
NjQzZjY5NjQwMDI5NDE4YTQ3N2M2ZjIxNDMzZGRhNzgzNmNkNDhiYi4uZmQ0NzhkZTY3ODE5MzQw
OGJiNTg0NDU0MjMxMjg0NGNmMWZmMGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgK
QEAgLTc3LDYgKzc3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0VGV4dHVyZUZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KSB7IG1fdGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7
IH0KICAgICB2b2lkIHNldEJvcmRlclRleGVsT3B0aW9uKENDTGF5ZXJUaWxpbmdEYXRhOjpCb3Jk
ZXJUZXhlbE9wdGlvbik7CiAgICAgdm9pZCBzZXRTYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdCkgeyBtX3Nh
bXBsZWRUZXhlbEZvcm1hdCA9IHNhbXBsZWRUZXhlbEZvcm1hdDsgfQorICAgIHNpemVfdCBudW1Q
YWludGVkVGlsZXMoKSB7IHJldHVybiBtX3RpbGVyLT50aWxlcygpLnNpemUoKTsgfQogCiAgICAg
dmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsKQEAg
LTk2LDYgKzk3LDggQEAgcHJvdGVjdGVkOgogICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRh
dGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQuCiAgICAgYm9v
bCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOwogCisgICAgSW50UmVj
dCBpZGxlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpOworCiAgICAg
Ym9vbCBza2lwc0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CkBAIC0xMTIsNyArMTE1LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIHRpbGVOZWVkc0J1ZmZlcmVkVXBkYXRlKFVwZGF0YWJsZVRp
bGUqKTsKIAogICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVm
dCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLCBjb25zdCBDQ09jY2x1c2lvblRyYWNr
ZXIqKTsKLSAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUxh
eWVyUmVjdCk7CiAKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0Owog
ICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5k
ZXggMDZhOWE5N2YxZjZhZDc5MDg2ZDYzN2UxMDBmODU4ZDE4ODA4ODliYy4uNmQwMTk2MDVlODJj
N2U0OTM5NjRhYzM4ZDY3MDAzNTYxM2Q2MjFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAKICNpbmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkND
QW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5o
IgogI2luY2x1ZGUgIkZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQuaCIKICNpbmNsdWRlICJMYXll
clRleHR1cmVVcGRhdGVyLmgiCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
VGVzdHM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiAjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEs
IGIpIFwKQEAgLTE2MCwzNyArMTYyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Zha2VUZXh0
dXJlVXBkYXRlcihhZG9wdFJlZihuZXcgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIpKQogICAgICAg
ICAsIG1fdGV4dHVyZU1hbmFnZXIodGV4dHVyZU1hbmFnZXIpCiAgICAgewotICAgICAgICBzZXRU
aWxlU2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIHNldFRpbGVTaXplKHRpbGVTaXpl
KCkpOwogICAgICAgICBzZXRUZXh0dXJlRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsK
ICAgICAgICAgc2V0Qm9yZGVyVGV4ZWxPcHRpb24oQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVy
VGV4ZWxzKTsKICAgICAgICAgc2V0SXNEcmF3YWJsZSh0cnVlKTsgLy8gU28gdGhhdCB3ZSBkb24n
dCBnZXQgZmFsc2UgcG9zaXRpdmVzIGlmIGFueSBvZiB0aGVzZSB0ZXN0cyBleHBlY3QgdG8gcmV0
dXJuIGZhbHNlIGZyb20gZHJhd3NDb250ZW50KCkgZm9yIG90aGVyIHJlYXNvbnMuCiAgICAgfQog
ICAgIHZpcnR1YWwgfkZha2VUaWxlZExheWVyQ2hyb21pdW0oKSB7IH0KIAotICAgIHZvaWQgaW52
YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QocmVjdCk7Ci0gICAgfQorICAgIHN0YXRpYyBJbnRT
aXplIHRpbGVTaXplKCkgeyByZXR1cm4gSW50U2l6ZSgxMDAsIDEwMCk7IH0KIAotICAgIHZvaWQg
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJh
Y2tlciogb2NjbHVzaW9uKQotICAgIHsKLSAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpwcmVw
YXJlVG9VcGRhdGUocmVjdCwgb2NjbHVzaW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByZXBhcmVU
b1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2Vy
KiBvY2NsdXNpb24pCi0gICAgewotICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlkbGUocmVjdCwgb2NjbHVzaW9uKTsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRzSWRs
ZVBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QpCi0gICAgewotICAgICAgICByZXR1cm4gVGlsZWRM
YXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChyZWN0KTsKLSAgICB9Ci0KLSAgICBib29sIHNr
aXBzRHJhdygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVGlsZWRMYXllckNocm9taXVt
Ojpza2lwc0RyYXcoKTsKLSAgICB9CisgICAgdXNpbmcgVGlsZWRMYXllckNocm9taXVtOjppbnZh
bGlkYXRlUmVjdDsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZTsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGU7Cisg
ICAgdXNpbmcgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludDsKKyAgICB1c2luZyBU
aWxlZExheWVyQ2hyb21pdW06OnNraXBzRHJhdzsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21p
dW06Om51bVBhaW50ZWRUaWxlczsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQ
YWludFJlY3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgewpAQCAtNjg3LDYgKzY3NCwyMTEgQEAgVEVTVChUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKICAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwogfQogCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQoreworICAgIE93blB0cjxUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAw
MCwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7
CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAg
IC8vIFRoZSBsYXllcidzIGJvdW5kcyBhcmUgZW1wdHkuCisgICAgSW50UmVjdCBjb250ZW50UmVj
dDsKKworICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudFJlY3Quc2l6ZSgpKTsKKyAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRh
dGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRS
ZWN0LCAwKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVY
UEVDVF9FUSgwdSwgbGF5ZXItPm51bVBhaW50ZWRUaWxlcygpKTsKKworICAgIC8vIEVtcHR5IGxh
eWVycyBkb24ndCBuZWVkIHByZXBhaW50LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJ
ZGxlUGFpbnQoY29udGVudFJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBF
WFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworCisgICAgLy8gTm9uLXZp
c2libGUgbGF5ZXJzIGRvbid0IGlkbGUgcGFpbnQuCisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZUlkbGUoY29udGVudFJlY3QsIDApOworCisgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUg
dGlsZXMuCisgICAgRVhQRUNUX0VRKDB1LCBsYXllci0+bnVtUGFpbnRlZFRpbGVzKCkpOworCisg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5
ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIEVtcHR5IGxh
eWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1Rp
bGVBdCgwLCAwKSk7Cit9CisKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50
WmVyb1NpemVkQW5pbWF0aW5nTGF5ZXIpCit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0
KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgw
KSkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBD
Q1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gUHJl
dGVuZCB0aGUgbGF5ZXIgaXMgYW5pbWF0aW5nLgorICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3Jt
SXNBbmltYXRpbmcodHJ1ZSk7CisKKyAgICAvLyBUaGUgbGF5ZXIncyBib3VuZHMgYXJlIGVtcHR5
LgorICAgIEludFJlY3QgY29udGVudFJlY3Q7CisKKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRl
bnRSZWN0LnNpemUoKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoY29udGVudFJl
Y3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXIt
PnByZXBhcmVUb1VwZGF0ZShjb250ZW50UmVjdCwgMCk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMg
ZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBFWFBFQ1RfRVEoMHUsIGxheWVyLT5udW1QYWludGVkVGls
ZXMoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgbmVlZCBwcmVwYWludC4KKyAgICBF
WFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KGNvbnRlbnRSZWN0KSk7CisKKyAgICBs
YXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+
cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAgLy8gRW1wdHkgbGF5ZXJz
IGRvbid0IGhhdmUgdGlsZXMuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0
KDAsIDApKTsKKworICAgIC8vIE5vbi12aXNpYmxlIGxheWVycyBkb24ndCBpZGxlIHBhaW50Lgor
ICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnRlbnRSZWN0LCAwKTsKKworICAgIC8v
IEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVYUEVDVF9FUSgwdSwgbGF5ZXIt
Pm51bVBhaW50ZWRUaWxlcygpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBFWFBF
Q1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworfQorCitURVNUKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCit7CisgICAgSW50U2l6
ZSBjb250ZW50Qm91bmRzKDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworCisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAx
MDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgwKSkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAg
ICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8g
SW52YWxpZGF0ZSB0aGUgbGF5ZXIgYnV0IG1ha2Ugbm9uZSBvZiBpdCB2aXNpYmxlLCBzbyBub3Ro
aW5nIHBhaW50cy4KKyAgICBJbnRSZWN0IHZpc2libGVSZWN0OworCisgICAgbGF5ZXItPnNldEJv
dW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNp
YmxlUmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBs
YXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0LCAwKTsKKworICAgIC8vIE5vbi12aXNp
YmxlIGxheWVycyBkb24ndCBuZWVkIGlkbGUgcGFpbnQuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVy
LT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBhbnkgdGlsZXMg
cHVzaGVkIHNpbmNlIHRoZSBsYXllciBpcyBub3QgdmlzaWJsZS4KKyAgICBFWFBFQ1RfRkFMU0Uo
bGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworCisgICAgLy8gTm9uLXZpc2libGUgbGF5ZXJz
IGRvbid0IGlkbGUgcGFpbnQuCisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlkbGUodmlzaWJs
ZVJlY3QsIDApOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBk
YXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKwor
ICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBhbnkgdGlsZXMgcHVzaGVkIHNpbmNlIHRoZSBsYXll
ciBpcyBub3QgdmlzaWJsZS4KKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQo
MCwgMCkpOworfQorCitzdGF0aWMgdm9pZCBpZGxlUGFpbnRSZXBlYXQoaW50IHJlcGVhdFRpbWVz
LCBGYWtlVGlsZWRMYXllckNocm9taXVtKiBsYXllciwgRmFrZUNDVGlsZWRMYXllckltcGwqIGxh
eWVySW1wbCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXRUaW1lczsgKytpKSB7Cisg
ICAgICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QsIDApOworICAgICAgICBs
YXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCwgMCk7CisgICAgICAgIGxheWVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgICAgICBsYXllci0+
cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVz
dEhhdmVPdXRlclRpbGVzKEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBsYXllckltcGwsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IGhhdmUpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0
aDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaGVpZ2h0OyArK2opIHsKKyAg
ICAgICAgICAgIGJvb2wgaGFzVGlsZSA9IGkgPCBoYXZlIHx8IGogPCBoYXZlIHx8IGkgPj0gd2lk
dGggLSBoYXZlIHx8IGogPj0gaGVpZ2h0IC0gaGF2ZTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSho
YXNUaWxlLCBsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUFuaW1h
dGluZ0xheWVycykKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg4MDAwKjgwMDAqOCwgODAwMCo4MDAwKjQsIDEwMjQp
OworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworCisgICAgRmFrZVRl
eHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVw
ZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgaW50IHRpbGVXaWR0aCA9IEZha2VUaWxl
ZExheWVyQ2hyb21pdW06OnRpbGVTaXplKCkud2lkdGgoKTsKKyAgICBpbnQgdGlsZUhlaWdodCA9
IEZha2VUaWxlZExheWVyQ2hyb21pdW06OnRpbGVTaXplKCkuaGVpZ2h0KCk7CisgICAgaW50IHdp
ZHRoW10gPSB7IDEsIDIsIDMsIDQsIDksIDEwLCAwIH07CisgICAgaW50IGhlaWdodFtdID0geyAx
LCAyLCAzLCA0LCA5LCAxMCwgMCB9OworCisgICAgZm9yIChpbnQgaiA9IDA7IGhlaWdodFtqXTsg
KytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyB3aWR0aFtpXTsgKytpKSB7CisgICAgICAg
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgICAgICAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisKKyAgICAgICAgICAgIC8vIFByZXRlbmQgdGhlIGxh
eWVyIGlzIGFuaW1hdGluZy4KKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNB
bmltYXRpbmcodHJ1ZSk7CisKKyAgICAgICAgICAgIEludFNpemUgY29udGVudEJvdW5kcyh3aWR0
aFtpXSAqIHRpbGVXaWR0aCwgaGVpZ2h0W2pdICogdGlsZUhlaWdodCk7CisgICAgICAgICAgICBJ
bnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworICAg
ICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKKworICAgICAgICAgICAgbGF5ZXItPnNldEJv
dW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KHZpc2libGVSZWN0KTsKKyAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250
ZW50UmVjdCk7CisKKyAgICAgICAgICAgIC8vIElmIGlkbGVQYWludFJlY3QgZ2l2ZXMgYmFjayBh
IG5vbi1lbXB0eSByZXN1bHQgdGhlbiB3ZSBzaG91bGQgcGFpbnQgaXQuIE90aGVyd2lzZSwKKyAg
ICAgICAgICAgIC8vIHdlIHNob3VkIHBhaW50IG5vdGhpbmcuCisgICAgICAgICAgICBib29sIHNo
b3VsZFByZXBhaW50ID0gIWxheWVyLT5pZGxlUGFpbnRSZWN0KHZpc2libGVSZWN0KS5pc0VtcHR5
KCk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgcGFpbnRzIHRoZSBsYXllciBidXQgdGhlcmUncyBu
b3RoaW5nIHZpc2libGUgc28gaXQncyBhIG5vLW9wLgorICAgICAgICAgICAgbGF5ZXItPnByZXBh
cmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCwgMCk7CisgICAgICAgICAgICBsYXllci0+dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICAgICAgICAgIGxheWVyLT5wdXNoUHJv
cGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBu
b3QgaGF2ZSBhbnkgdGlsZXMgcHVzaGVkIHlldCBzaW5jZSB0aGUgbGF5ZXIgaXMgbm90IHZpc2li
bGUgYW5kIHdlJ3ZlIG5vdCBwcmVwYWludGVkLgorICAgICAgICAgICAgdGVzdEhhdmVPdXRlclRp
bGVzKGxheWVySW1wbC5nZXQoKSwgd2lkdGhbaV0sIGhlaWdodFtqXSwgMCk7CisKKyAgICAgICAg
ICAgIC8vIE5vcm1hbGx5IHdlIGRvbid0IGFsbG93IG5vbi12aXNpYmxlIGxheWVycyB0byBwcmUt
cGFpbnQsIGJ1dCBpZiB0aGV5IGFyZSBhbmltYXRpbmcgdGhlbiB3ZSBzaG91bGQuCisgICAgICAg
ICAgICBFWFBFQ1RfRVEoc2hvdWxkUHJlcGFpbnQsIGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNp
YmxlUmVjdCkpOworCisgICAgICAgICAgICAvLyBJZiB0aGV5IGFyZSB3aXRoaW4gb3VyIGJvdW5k
cywgdGhlbiBhZnRlciBmb3VyIHVwZGF0ZXMgd2Ugc2hvdWxkIGhhdmUgdGhlIG91dGVyIHJvdy9j
b2x1bW5zIHBhaW50ZWQuCisgICAgICAgICAgICBpZGxlUGFpbnRSZXBlYXQoNCwgbGF5ZXIuZ2V0
KCksIGxheWVySW1wbC5nZXQoKSwgdXBkYXRlciwgdmlzaWJsZVJlY3QpOworICAgICAgICAgICAg
dGVzdEhhdmVPdXRlclRpbGVzKGxheWVySW1wbC5nZXQoKSwgd2lkdGhbaV0sIGhlaWdodFtqXSwg
c2hvdWxkUHJlcGFpbnQgPyAxIDogMCk7CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGN1cnJl
bnRseSBpZGxlIHBhaW50IHBhc3QgdGhlIG91dGVybW9zdCB0aWxlcy4KKyAgICAgICAgICAgIEVY
UEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKyAgICAgICAg
ICAgIGlkbGVQYWludFJlcGVhdCg0LCBsYXllci5nZXQoKSwgbGF5ZXJJbXBsLmdldCgpLCB1cGRh
dGVyLCB2aXNpYmxlUmVjdCk7CisgICAgICAgICAgICB0ZXN0SGF2ZU91dGVyVGlsZXMobGF5ZXJJ
bXBsLmdldCgpLCB3aWR0aFtpXSwgaGVpZ2h0W2pdLCBzaG91bGRQcmVwYWludCA/IDEgOiAwKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwogVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZh
bGlkYXRlRnJvbVByZXBhcmUpCiB7CiAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJl
TWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDIqMTAyNCoxMDI0
LCAxMDI0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133718</attachid>
            <date>2012-03-25 19:29:51 -0700</date>
            <delta_ts>2012-03-25 23:03:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82117-20120325222950.patch</filename>
            <type>text/plain</type>
            <size>20824</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJmMjk0OTVjMThjZjA3
YTRkODI2ZDc4ODY4NDAzZjM2NjVlMGEwNS4uMzgyMmI4MzJlNGE5MjE2NDU1MzA5ZGYwNjNjY2Vi
MjI0MjNiY2Q1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTI1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5
ZXJzIHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhl
eSBhcmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZvciBhbmltYXRpbmcgdHJhbnNmb3JtcywgaW5zdGVhZCBvZiBlYXJseS1v
dXRpbmcgd2hlbiB0aGUgbGF5ZXIncworICAgICAgICB2aXNpYmxlIHJlY3QgaXMgZW1wdHksIGxl
dCBpdCBwcmVwYWludCByZWdhcmRsZXNzLgorCisgICAgICAgIEZvciBub3csIHdlIGp1c3Qgb25s
eSBwYWludCB0aGUgb3V0ZXJtb3N0IHRpbGVzLCBhbmQgb25seSBmb3Igc21hbGwKKyAgICAgICAg
bGF5ZXJzLCB3aXRoIGF0IG1vc3QgOSB0aWxlcy4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhl
IGJlaGF2aW91ciBvZiBDb250ZW50TGF5ZXJDaHJvbWl1bSdzCisgICAgICAgIGlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpIHNvIEkndmUgZ3VhcmRlZCB0aGUgYmVoYXZpb3VyIG9mIHRoZSB0d28K
KyAgICAgICAgcHJlcGFpbnRpbmcgZnVuY3Rpb25zIHRoYXQgaXQgY2FsbHMgdG8gZW5zdXJlIHRo
ZSBvbGQgYmVoYXZpb3VyIGhvbGRzCisgICAgICAgIHdpdGhvdXQgYW5pbWF0aW9ucywgYW5kIHRo
ZSBuZXcgYmVoYXZpb3VyIHdvcmtzIHdpdGggdGhlbS4KKworICAgICAgICBVbml0IHRlc3Q6IFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuaWRsZVBhaW50WmVyb1NpemVkTGF5ZXIKKyAgICAgICAgICAg
ICAgICAgICBUaWxlZExheWVyQ2hyb21pdW1UZXN0LmlkbGVQYWludFplcm9TaXplZEFuaW1hdGlu
Z0xheWVyCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVtVGVzdC5pZGxlUGFp
bnROb25WaXNpYmxlTGF5ZXJzCisgICAgICAgICAgICAgICAgICAgVGlsZWRMYXllckNocm9taXVt
VGVzdC5pZGxlUGFpbnROb25WaXNpYmxlQW5pbWF0aW5nTGF5ZXJzCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9V
cGRhdGVJZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJ
ZGxlUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjppZGxlUGFp
bnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6bnVtUGFp
bnRlZFRpbGVzKToKKyAgICAgICAgKFRpbGVkTGF5ZXJDaHJvbWl1bSk6CisKIDIwMTItMDMtMjQg
IEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBp
biBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAwYzcwZDNjZTkwNmViYzMxNTgxMmI1MTk3MzFmNWE3MjA5
ZGVkZTMxLi42ZWQ5YzFmNTAxMjhmNzk4Y2QyOTJiNWNhY2YyMmZkZmIwZDM3YTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAzLTI1ICBEYW5hIEph
bnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTGF5ZXJz
IHdpdGggYW5pbWF0aW5nIHRyYW5zZm9ybXMgc2hvdWxkIHByZXBhaW50IGV2ZW4gaWYgdGhleSBh
cmUgbm90IHZpc2libGUgeWV0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04MjExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChX
VEY6OkZha2VUaWxlZExheWVyQ2hyb21pdW06OkZha2VUaWxlZExheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV1RGOjpGYWtlVGlsZWRMYXllckNocm9taXVtOjp0aWxlU2l6ZSk6CisgICAgICAgIChG
YWtlVGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdURjo6VEVTVCk6CisgICAgICAgIChX
VEYpOgorICAgICAgICAoV1RGOjppZGxlUGFpbnRSZXBlYXQpOgorICAgICAgICAoV1RGOjp0ZXN0
SGF2ZU91dGVyVGlsZXMpOgorCiAyMDEyLTAzLTIzICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gSW5jb3JyZWN0IHJlcGxpY2Egb3Jp
Z2luVHJhbnNmb3JtIHVzZWQgaW4gQ0NEYW1hZ2VUcmFja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggYzAwNzIxNTc5NzlkNzhiNTlhYjM3ZTBmMjJkYjI2NTYyMjlj
MDQ5OS4uNzNhOGE0MjQ2MTU3MTNlNjlkNWEyYzFlNzhjZmU5M2NiNjg4MDA1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTE0LDEwICsxMTQsNyBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgQ0NPY2Ns
dXNpb25UcmFja2VyKiBvYwogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QoKTsK
LSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgY29u
c3QgSW50UmVjdCBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CiAgICAgcHJlcGFyZVRv
VXBkYXRlSWRsZShsYXllclJlY3QsIG9jY2x1c2lvbik7CiAgICAgaWYgKG5lZWRzSWRsZVBhaW50
KGxheWVyUmVjdCkpCiAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCBhZjU5NGQ0YjcwYjJiOTZmN2MyZmZiY2JmMGM3ODliZDVkNzYy
Yzg1Li41YjAwODlhYTgxODg5OGRjZmE2YjYyZDZlZTQ1NzdjMmM3NWJlMTliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYyOCwyNSArNjI4LDQ2IEBAIHZvaWQgVGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCwgY29uc3QgQ0NPCiAKICAgICB1cGRhdGVCb3VuZHMoKTsKIAotICAgIGlmIChtX3RpbGVyLT5p
c0VtcHR5KCkpCisgICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJlcyBpbiB0aGUgcHJlLXBhaW50IGFyZWEgc28g
d2UgZG9uJ3QgZW5kIHVwIGp1c3QKLSAgICAvLyByZWNsYWltaW5nIHRoZW0gYmVsb3cuCiAgICAg
SW50UmVjdCBpZGxlUGFpbnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7Cisg
ICAgaWYgKGlkbGVQYWludExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFByb3RlY3QgYW55IHRleHR1cmVzIGluIHRoZSBwcmUtcGFpbnQgYXJlYSwgYXMgd2Ug
d291bGQgc3RlYWwgdGhlbSBmcm9tIG90aGVyIGxheWVycworICAgIC8vIG92ZXIgdGltZSBhbnlo
b3cuIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBsb3NlIHRpbGVzIGluIHRoZSBmaXJzdCByb3VuZHMg
b2YgaWRsZSBwYWludGluZworICAgIC8vIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHBhaW50ZWQuCiAg
ICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhpZGxlUGFpbnRMYXllclJlY3QpOwogCisgICAgaW50IHBy
ZXBhaW50TGVmdCwgcHJlcGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tOwor
ICAgIG1fdGlsZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50TGF5ZXJSZWN0LCBw
cmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSk7
CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgbm90IHZpc2libGUsIHdlIGhhdmUgbm90aGluZyB0
byBleHBhbmQgZnJvbSwgc28gaW5zdGVhZCB3ZSBwcmVwYWludCB0aGUgb3V0ZXItbW9zdCBzZXQg
b2YgdGlsZXMuCisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcHJlcGFy
ZVRvVXBkYXRlVGlsZXModHJ1ZSwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRS
aWdodCwgcHJlcGFpbnRUb3AsIDApOworICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHko
KSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcmVw
YXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludExlZnQsIHByZXBhaW50Qm90dG9tLCBwcmVw
YWludFJpZ2h0LCBwcmVwYWludEJvdHRvbSwgMCk7CisgICAgICAgIGlmICghbV9wYWludFJlY3Qu
aXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIHByZXBhaW50TGVmdCwgcHJlcGFpbnRUb3As
IHByZXBhaW50TGVmdCwgcHJlcGFpbnRCb3R0b20sIDApOworICAgICAgICBpZiAoIW1fcGFpbnRS
ZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBwcmVwYWludFJpZ2h0LCBwcmVwYWlu
dFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0b20sIDApOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwogICAgIG1fdGls
ZXItPmxheWVyUmVjdFRvVGlsZUluZGljZXMobGF5ZXJSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBi
b3R0b20pOwogCi0gICAgLy8gUHJlcGFpbnQgYW55dGhpbmcgdGhhdCB3YXMgb2NjbHVkZWQgYnV0
IGluc2lkZSB0aGUgbGF5ZXIncyB2aXNpYmxlIHJlZ2lvbi4KKyAgICAvLyBPdGhlcndpc2UsIHBy
ZXBhaW50IGFueXRoaW5nIHRoYXQgd2FzIG9jY2x1ZGVkIGJ1dCBpbnNpZGUgdGhlIGxheWVyJ3Mg
dmlzaWJsZSByZWdpb24uCiAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgdG9w
LCByaWdodCwgYm90dG9tLCAwKTsKICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBt
X3NraXBzSWRsZVBhaW50KQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBFeHBhbmQgb3V0d2Fy
ZHMgdW50aWwgd2UgZmluZCBhIGRpcnR5IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgotICAgIGlu
dCBwcmVwYWludExlZnQsIHByZXBhaW50VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRv
bTsKLSAgICBtX3RpbGVyLT5sYXllclJlY3RUb1RpbGVJbmRpY2VzKGlkbGVQYWludExheWVyUmVj
dCwgcHJlcGFpbnRMZWZ0LCBwcmVwYWludFRvcCwgcHJlcGFpbnRSaWdodCwgcHJlcGFpbnRCb3R0
b20pOworICAgIC8vIFRoZW4gZXhwYW5kIG91dHdhcmRzIGZyb20gdGhlIHZpc2libGUgYXJlYSB1
bnRpbCB3ZSBmaW5kIGEgZGlydHkgcm93IG9yIGNvbHVtbiB0byB1cGRhdGUuCiAgICAgd2hpbGUg
KCFtX3NraXBzSWRsZVBhaW50ICYmIChsZWZ0ID4gcHJlcGFpbnRMZWZ0IHx8IHRvcCA+IHByZXBh
aW50VG9wIHx8IHJpZ2h0IDwgcHJlcGFpbnRSaWdodCB8fCBib3R0b20gPCBwcmVwYWludEJvdHRv
bSkpIHsKICAgICAgICAgaWYgKGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSB7CiAgICAgICAgICAg
ICArK2JvdHRvbTsKQEAgLTY4MCwxMiArNzAxLDIwIEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVt
OjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiAgICAgaWYgKG1fc2tp
cHNJZGxlUGFpbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghbV90aWxlci0+
bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgSW50UmVjdCBpZGxlUGFp
bnRMYXllclJlY3QgPSBpZGxlUGFpbnRSZWN0KGxheWVyUmVjdCk7CisgICAgaWYgKGlkbGVQYWlu
dExheWVyUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CiAgICAgbV90aWxlci0+bGF5ZXJSZWN0VG9UaWxlSW5k
aWNlcyhpZGxlUGFpbnRMYXllclJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXJS
ZWN0IGlzIGVtcHR5LCB0aGVuIHdlIGFyZSBwYWludGluZyB0aGUgb3V0ZXItbW9zdCBzZXQgb2Yg
dGlsZXMgb25seS4KKyAgICAgICAgICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpICYmIGkgIT0g
bGVmdCAmJiBpICE9IHJpZ2h0ICYmIGogIT0gdG9wICYmIGogIT0gYm90dG9tKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNS
ZWN0LmNvbnRhaW5zKEludFBvaW50KGksIGopKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBAIC02OTgs
NiArNzI3LDE1IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QpCiAKIEludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxl
UGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpCiB7CisgICAgLy8gRm9y
IGxheWVycyB0aGF0IGFyZSBhbmltYXRpbmcgdHJhbnNmb3JtcyBidXQgbm90IHZpc2libGUgYXQg
YWxsLCB3ZSBkb24ndCBrbm93IHdoYXQgcGFydAorICAgIC8vIG9mIHRoZW0gaXMgZ29pbmcgdG8g
YmVjb21lIHZpc2libGUuIEZvciBzbWFsbCBsYXllcnMgd2UgcmV0dXJuIHRoZSBlbnRpcmUgbGF5
ZXIsIGZvciBsYXJnZXIKKyAgICAvLyBvbmVzIHdlIGF2b2lkIHByZXBhaW50aW5nIHRoZSBsYXll
ciBhdCBhbGwuCisgICAgaWYgKHZpc2libGVMYXllclJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAg
IGlmICgoZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKCkgfHwgc2NyZWVuU3BhY2VUcmFuc2Zvcm1J
c0FuaW1hdGluZygpKSAmJiBtX3RpbGVyLT5udW1UaWxlcygpIDw9IDkpCisgICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpOworICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworICAgIH0KKwogICAgIEludFJlY3QgcHJlcGFpbnRSZWN0ID0gdmlzaWJs
ZUxheWVyUmVjdDsKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgbWFkZSBhIGxvdCBsYXJnZXIg
aWYgd2UgY2FuOgogICAgIC8vIC0gcmVzZXJ2ZSBtZW1vcnkgYXQgYSBsb3dlciBwcmlvcml0eSB0
aGFuIGZvciB2aXNpYmxlIGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXgg
NjQzZjY5NjQwMDI5NDE4YTQ3N2M2ZjIxNDMzZGRhNzgzNmNkNDhiYi4uZmQ0NzhkZTY3ODE5MzQw
OGJiNTg0NDU0MjMxMjg0NGNmMWZmMGE2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgK
QEAgLTc3LDYgKzc3LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0VGV4dHVyZUZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KSB7IG1fdGV4dHVyZUZvcm1hdCA9IHRleHR1cmVGb3JtYXQ7
IH0KICAgICB2b2lkIHNldEJvcmRlclRleGVsT3B0aW9uKENDTGF5ZXJUaWxpbmdEYXRhOjpCb3Jk
ZXJUZXhlbE9wdGlvbik7CiAgICAgdm9pZCBzZXRTYW1wbGVkVGV4ZWxGb3JtYXQoTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdCkgeyBtX3Nh
bXBsZWRUZXhlbEZvcm1hdCA9IHNhbXBsZWRUZXhlbEZvcm1hdDsgfQorICAgIHNpemVfdCBudW1Q
YWludGVkVGlsZXMoKSB7IHJldHVybiBtX3RpbGVyLT50aWxlcygpLnNpemUoKTsgfQogCiAgICAg
dmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsKQEAg
LTk2LDYgKzk3LDggQEAgcHJvdGVjdGVkOgogICAgIC8vIEFmdGVyIHByZXBhcmluZyBhbiB1cGRh
dGUsIHJldHVybnMgdHJ1ZSBpZiBtb3JlIHByZS1wYWludGluZyBpcyBuZWVkZWQuCiAgICAgYm9v
bCBuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOwogCisgICAgSW50UmVj
dCBpZGxlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVMYXllclJlY3QpOworCiAgICAg
Ym9vbCBza2lwc0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CkBAIC0xMTIsNyArMTE1LDYg
QEAgcHJpdmF0ZToKICAgICBib29sIHRpbGVOZWVkc0J1ZmZlcmVkVXBkYXRlKFVwZGF0YWJsZVRp
bGUqKTsKIAogICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVm
dCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLCBjb25zdCBDQ09jY2x1c2lvblRyYWNr
ZXIqKTsKLSAgICBJbnRSZWN0IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUxh
eWVyUmVjdCk7CiAKICAgICBVcGRhdGFibGVUaWxlKiB0aWxlQXQoaW50LCBpbnQpIGNvbnN0Owog
ICAgIFVwZGF0YWJsZVRpbGUqIGNyZWF0ZVRpbGUoaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5k
ZXggMDZhOWE5N2YxZjZhZDc5MDg2ZDYzN2UxMDBmODU4ZDE4ODA4ODliYy4uYzE5YWM0NmQ2NDY3
MWZmNGEwNTNlYmE0M2MxMjY5ZGE4ZDU4ZjljZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAKICNpbmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkND
QW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5o
IgogI2luY2x1ZGUgIkZha2VDQ0xheWVyVHJlZUhvc3RDbGllbnQuaCIKICNpbmNsdWRlICJMYXll
clRleHR1cmVVcGRhdGVyLmgiCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
VGVzdHM7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiAjZGVmaW5lIEVYUEVDVF9FUV9SRUNUKGEs
IGIpIFwKQEAgLTE2MCwzNyArMTYyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Zha2VUZXh0
dXJlVXBkYXRlcihhZG9wdFJlZihuZXcgRmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIpKQogICAgICAg
ICAsIG1fdGV4dHVyZU1hbmFnZXIodGV4dHVyZU1hbmFnZXIpCiAgICAgewotICAgICAgICBzZXRU
aWxlU2l6ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgICAgIHNldFRpbGVTaXplKHRpbGVTaXpl
KCkpOwogICAgICAgICBzZXRUZXh0dXJlRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsK
ICAgICAgICAgc2V0Qm9yZGVyVGV4ZWxPcHRpb24oQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVy
VGV4ZWxzKTsKICAgICAgICAgc2V0SXNEcmF3YWJsZSh0cnVlKTsgLy8gU28gdGhhdCB3ZSBkb24n
dCBnZXQgZmFsc2UgcG9zaXRpdmVzIGlmIGFueSBvZiB0aGVzZSB0ZXN0cyBleHBlY3QgdG8gcmV0
dXJuIGZhbHNlIGZyb20gZHJhd3NDb250ZW50KCkgZm9yIG90aGVyIHJlYXNvbnMuCiAgICAgfQog
ICAgIHZpcnR1YWwgfkZha2VUaWxlZExheWVyQ2hyb21pdW0oKSB7IH0KIAotICAgIHZvaWQgaW52
YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QocmVjdCk7Ci0gICAgfQorICAgIHN0YXRpYyBJbnRT
aXplIHRpbGVTaXplKCkgeyByZXR1cm4gSW50U2l6ZSgxMDAsIDEwMCk7IH0KIAotICAgIHZvaWQg
cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENDT2NjbHVzaW9uVHJh
Y2tlciogb2NjbHVzaW9uKQotICAgIHsKLSAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpwcmVw
YXJlVG9VcGRhdGUocmVjdCwgb2NjbHVzaW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByZXBhcmVU
b1VwZGF0ZUlkbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2Vy
KiBvY2NsdXNpb24pCi0gICAgewotICAgICAgICBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZUlkbGUocmVjdCwgb2NjbHVzaW9uKTsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRzSWRs
ZVBhaW50KGNvbnN0IEludFJlY3QmIHJlY3QpCi0gICAgewotICAgICAgICByZXR1cm4gVGlsZWRM
YXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChyZWN0KTsKLSAgICB9Ci0KLSAgICBib29sIHNr
aXBzRHJhdygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVGlsZWRMYXllckNocm9taXVt
Ojpza2lwc0RyYXcoKTsKLSAgICB9CisgICAgdXNpbmcgVGlsZWRMYXllckNocm9taXVtOjppbnZh
bGlkYXRlUmVjdDsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0
ZTsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZUlkbGU7Cisg
ICAgdXNpbmcgVGlsZWRMYXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludDsKKyAgICB1c2luZyBU
aWxlZExheWVyQ2hyb21pdW06OnNraXBzRHJhdzsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21p
dW06Om51bVBhaW50ZWRUaWxlczsKKyAgICB1c2luZyBUaWxlZExheWVyQ2hyb21pdW06OmlkbGVQ
YWludFJlY3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgewpAQCAtNjg3LDYgKzY3NCwyMTEgQEAgVEVTVChUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKICAgICBsYXllci0+cHVzaFBy
b3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOwogfQogCitURVNUKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludFplcm9TaXplZExheWVyKQoreworICAgIE93blB0cjxUZXh0dXJlTWFu
YWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAxMDAw
MCwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRv
cHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsK
KyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBPd25QdHI8RmFr
ZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXll
ckltcGwoMCkpKTsKKworICAgIEZha2VUZXh0dXJlQWxsb2NhdG9yIHRleHR1cmVBbGxvY2F0b3I7
CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZ0ZXh0dXJlQWxsb2NhdG9yKTsKKworICAg
IC8vIFRoZSBsYXllcidzIGJvdW5kcyBhcmUgZW1wdHkuCisgICAgSW50UmVjdCBjb250ZW50UmVj
dDsKKworICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudFJlY3Quc2l6ZSgpKTsKKyAgICBsYXll
ci0+c2V0VmlzaWJsZUxheWVyUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRh
dGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKGNvbnRlbnRS
ZWN0LCAwKTsKKworICAgIC8vIEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVY
UEVDVF9FUSgwdSwgbGF5ZXItPm51bVBhaW50ZWRUaWxlcygpKTsKKworICAgIC8vIEVtcHR5IGxh
eWVycyBkb24ndCBuZWVkIHByZXBhaW50LgorICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJ
ZGxlUGFpbnQoY29udGVudFJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1w
bC5nZXQoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBF
WFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworCisgICAgLy8gTm9uLXZp
c2libGUgbGF5ZXJzIGRvbid0IGlkbGUgcGFpbnQuCisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0
ZUlkbGUoY29udGVudFJlY3QsIDApOworCisgICAgLy8gRW1wdHkgbGF5ZXJzIGRvbid0IGhhdmUg
dGlsZXMuCisgICAgRVhQRUNUX0VRKDB1LCBsYXllci0+bnVtUGFpbnRlZFRpbGVzKCkpOworCisg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5
ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIEVtcHR5IGxh
eWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVYUEVDVF9GQUxTRShsYXllckltcGwtPmhhc1Rp
bGVBdCgwLCAwKSk7Cit9CisKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50
WmVyb1NpemVkQW5pbWF0aW5nTGF5ZXIpCit7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAxMDI0
KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgw
KSkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBD
Q1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gUHJl
dGVuZCB0aGUgbGF5ZXIgaXMgYW5pbWF0aW5nLgorICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3Jt
SXNBbmltYXRpbmcodHJ1ZSk7CisKKyAgICAvLyBUaGUgbGF5ZXIncyBib3VuZHMgYXJlIGVtcHR5
LgorICAgIEludFJlY3QgY29udGVudFJlY3Q7CisKKyAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRl
bnRSZWN0LnNpemUoKSk7CisgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoY29udGVudFJl
Y3QpOworICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250ZW50UmVjdCk7CisgICAgbGF5ZXIt
PnByZXBhcmVUb1VwZGF0ZShjb250ZW50UmVjdCwgMCk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMg
ZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBFWFBFQ1RfRVEoMHUsIGxheWVyLT5udW1QYWludGVkVGls
ZXMoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgbmVlZCBwcmVwYWludC4KKyAgICBF
WFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KGNvbnRlbnRSZWN0KSk7CisKKyAgICBs
YXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICBsYXllci0+
cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwuZ2V0KCkpOworCisgICAgLy8gRW1wdHkgbGF5ZXJz
IGRvbid0IGhhdmUgdGlsZXMuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVySW1wbC0+aGFzVGlsZUF0
KDAsIDApKTsKKworICAgIC8vIE5vbi12aXNpYmxlIGxheWVycyBkb24ndCBpZGxlIHBhaW50Lgor
ICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKGNvbnRlbnRSZWN0LCAwKTsKKworICAgIC8v
IEVtcHR5IGxheWVycyBkb24ndCBoYXZlIHRpbGVzLgorICAgIEVYUEVDVF9FUSgwdSwgbGF5ZXIt
Pm51bVBhaW50ZWRUaWxlcygpKTsKKworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5n
ZXQoKSk7CisKKyAgICAvLyBFbXB0eSBsYXllcnMgZG9uJ3QgaGF2ZSB0aWxlcy4KKyAgICBFWFBF
Q1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworfQorCitURVNUKFRpbGVkTGF5
ZXJDaHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCit7CisgICAgSW50U2l6
ZSBjb250ZW50Qm91bmRzKDEwMCwgMTAwKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworCisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoMjAwMDAsIDEwMDAwLCAx
MDI0KTsKKyAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgwKSkpOworCisgICAgRmFrZVRleHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAg
ICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8g
SW52YWxpZGF0ZSB0aGUgbGF5ZXIgYnV0IG1ha2Ugbm9uZSBvZiBpdCB2aXNpYmxlLCBzbyBub3Ro
aW5nIHBhaW50cy4KKyAgICBJbnRSZWN0IHZpc2libGVSZWN0OworCisgICAgbGF5ZXItPnNldEJv
dW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNp
YmxlUmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBs
YXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0LCAwKTsKKworICAgIC8vIE5vbi12aXNp
YmxlIGxheWVycyBkb24ndCBuZWVkIGlkbGUgcGFpbnQuCisgICAgRVhQRUNUX0ZBTFNFKGxheWVy
LT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBhbnkgdGlsZXMg
cHVzaGVkIHNpbmNlIHRoZSBsYXllciBpcyBub3QgdmlzaWJsZS4KKyAgICBFWFBFQ1RfRkFMU0Uo
bGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMCkpOworCisgICAgLy8gTm9uLXZpc2libGUgbGF5ZXJz
IGRvbid0IGlkbGUgcGFpbnQuCisgICAgbGF5ZXItPnByZXBhcmVUb1VwZGF0ZUlkbGUodmlzaWJs
ZVJlY3QsIDApOworCisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBk
YXRlcik7CisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKwor
ICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBhbnkgdGlsZXMgcHVzaGVkIHNpbmNlIHRoZSBsYXll
ciBpcyBub3QgdmlzaWJsZS4KKyAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQo
MCwgMCkpOworfQorCitzdGF0aWMgdm9pZCBpZGxlUGFpbnRSZXBlYXQoaW50IHJlcGVhdFRpbWVz
LCBGYWtlVGlsZWRMYXllckNocm9taXVtKiBsYXllciwgRmFrZUNDVGlsZWRMYXllckltcGwqIGxh
eWVySW1wbCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlciwgY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBlYXRUaW1lczsgKytpKSB7Cisg
ICAgICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QsIDApOworICAgICAgICBs
YXllci0+cHJlcGFyZVRvVXBkYXRlSWRsZSh2aXNpYmxlUmVjdCwgMCk7CisgICAgICAgIGxheWVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgICAgICBsYXllci0+
cHVzaFByb3BlcnRpZXNUbyhsYXllckltcGwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVz
dEhhdmVPdXRlclRpbGVzKEZha2VDQ1RpbGVkTGF5ZXJJbXBsKiBsYXllckltcGwsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IGhhdmUpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0
aDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaGVpZ2h0OyArK2opIHsKKyAg
ICAgICAgICAgIGJvb2wgaGFzVGlsZSA9IGkgPCBoYXZlIHx8IGogPCBoYXZlIHx8IGkgPj0gd2lk
dGggLSBoYXZlIHx8IGogPj0gaGVpZ2h0IC0gaGF2ZTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSho
YXNUaWxlLCBsYXllckltcGwtPmhhc1RpbGVBdChpLCBqKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlzaWJsZUFuaW1h
dGluZ0xheWVycykKK3sKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2Vy
ID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg4MDAwKjgwMDAqOCwgODAwMCo4MDAwKjQsIDEwMjQp
OworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworCisgICAgRmFrZVRl
eHR1cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVw
ZGF0ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgaW50IHRpbGVXaWR0aCA9IEZha2VUaWxl
ZExheWVyQ2hyb21pdW06OnRpbGVTaXplKCkud2lkdGgoKTsKKyAgICBpbnQgdGlsZUhlaWdodCA9
IEZha2VUaWxlZExheWVyQ2hyb21pdW06OnRpbGVTaXplKCkuaGVpZ2h0KCk7CisgICAgaW50IHdp
ZHRoW10gPSB7IDEsIDIsIDMsIDQsIDksIDEwLCAwIH07CisgICAgaW50IGhlaWdodFtdID0geyAx
LCAyLCAzLCA0LCA5LCAxMCwgMCB9OworCisgICAgZm9yIChpbnQgaiA9IDA7IGhlaWdodFtqXTsg
KytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyB3aWR0aFtpXTsgKytpKSB7CisgICAgICAg
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOworICAgICAgICAg
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisKKyAgICAgICAgICAgIC8vIFByZXRlbmQgdGhlIGxh
eWVyIGlzIGFuaW1hdGluZy4KKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNB
bmltYXRpbmcodHJ1ZSk7CisKKyAgICAgICAgICAgIEludFNpemUgY29udGVudEJvdW5kcyh3aWR0
aFtpXSAqIHRpbGVXaWR0aCwgaGVpZ2h0W2pdICogdGlsZUhlaWdodCk7CisgICAgICAgICAgICBJ
bnRSZWN0IGNvbnRlbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworICAg
ICAgICAgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKKworICAgICAgICAgICAgbGF5ZXItPnNldEJv
dW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJS
ZWN0KHZpc2libGVSZWN0KTsKKyAgICAgICAgICAgIGxheWVyLT5pbnZhbGlkYXRlUmVjdChjb250
ZW50UmVjdCk7CisKKyAgICAgICAgICAgIC8vIElmIGlkbGVQYWludFJlY3QgZ2l2ZXMgYmFjayBh
IG5vbi1lbXB0eSByZXN1bHQgdGhlbiB3ZSBzaG91bGQgcGFpbnQgaXQuIE90aGVyd2lzZSwKKyAg
ICAgICAgICAgIC8vIHdlIHNob3VkIHBhaW50IG5vdGhpbmcuCisgICAgICAgICAgICBib29sIHNo
b3VsZFByZXBhaW50ID0gIWxheWVyLT5pZGxlUGFpbnRSZWN0KHZpc2libGVSZWN0KS5pc0VtcHR5
KCk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgcGFpbnRzIHRoZSBsYXllciBidXQgdGhlcmUncyBu
b3RoaW5nIHZpc2libGUgc28gaXQncyBhIG5vLW9wLgorICAgICAgICAgICAgbGF5ZXItPnByZXBh
cmVUb1VwZGF0ZSh2aXNpYmxlUmVjdCwgMCk7CisgICAgICAgICAgICBsYXllci0+dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygwLCB1cGRhdGVyKTsKKyAgICAgICAgICAgIGxheWVyLT5wdXNoUHJv
cGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBu
b3QgaGF2ZSBhbnkgdGlsZXMgcHVzaGVkIHlldCBzaW5jZSB0aGUgbGF5ZXIgaXMgbm90IHZpc2li
bGUgYW5kIHdlJ3ZlIG5vdCBwcmVwYWludGVkLgorICAgICAgICAgICAgdGVzdEhhdmVPdXRlclRp
bGVzKGxheWVySW1wbC5nZXQoKSwgd2lkdGhbaV0sIGhlaWdodFtqXSwgMCk7CisKKyAgICAgICAg
ICAgIC8vIE5vcm1hbGx5IHdlIGRvbid0IGFsbG93IG5vbi12aXNpYmxlIGxheWVycyB0byBwcmUt
cGFpbnQsIGJ1dCBpZiB0aGV5IGFyZSBhbmltYXRpbmcgdGhlbiB3ZSBzaG91bGQuCisgICAgICAg
ICAgICBFWFBFQ1RfRVEoc2hvdWxkUHJlcGFpbnQsIGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNp
YmxlUmVjdCkpOworCisgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgdG8gYmUgcHJlcGFp
bnRlZCBhdCBhbGwsIHRoZW4gYWZ0ZXIgZm91ciB1cGRhdGVzIHdlIHNob3VsZCBoYXZlIHRoZSBv
dXRlciByb3cvY29sdW1ucyBwYWludGVkLgorICAgICAgICAgICAgaWRsZVBhaW50UmVwZWF0KDQs
IGxheWVyLmdldCgpLCBsYXllckltcGwuZ2V0KCksIHVwZGF0ZXIsIHZpc2libGVSZWN0KTsKKyAg
ICAgICAgICAgIHRlc3RIYXZlT3V0ZXJUaWxlcyhsYXllckltcGwuZ2V0KCksIHdpZHRoW2ldLCBo
ZWlnaHRbal0sIHNob3VsZFByZXBhaW50ID8gMSA6IDApOworCisgICAgICAgICAgICAvLyBXZSBk
b24ndCBjdXJyZW50bHkgaWRsZSBwYWludCBwYXN0IHRoZSBvdXRlcm1vc3QgdGlsZXMuCisgICAg
ICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7
CisgICAgICAgICAgICBpZGxlUGFpbnRSZXBlYXQoNCwgbGF5ZXIuZ2V0KCksIGxheWVySW1wbC5n
ZXQoKSwgdXBkYXRlciwgdmlzaWJsZVJlY3QpOworICAgICAgICAgICAgdGVzdEhhdmVPdXRlclRp
bGVzKGxheWVySW1wbC5nZXQoKSwgd2lkdGhbaV0sIGhlaWdodFtqXSwgc2hvdWxkUHJlcGFpbnQg
PyAxIDogMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFRFU1QoVGlsZWRMYXllckNocm9taXVt
VGVzdCwgaW52YWxpZGF0ZUZyb21QcmVwYXJlKQogewogICAgIE93blB0cjxUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAy
KjEwMjQqMTAyNCwgMTAyNCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>