<?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>117550</bug_id>
          
          <creation_ts>2013-06-12 09:33:31 -0700</creation_ts>
          <short_desc>[CSS Shaders] Animations and transitions should use validated custom programs</short_desc>
          <delta_ts>2014-02-13 07:18:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>117763</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Ralph T">ralpht+bugs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achicu</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>ralpht+bugs</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>899576</commentid>
    <comment_count>0</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-12 09:33:31 -0700</bug_when>
    <thetext>[CSS Shaders] Animations and transitions should use validated custom programs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899578</commentid>
    <comment_count>1</comment_count>
      <attachid>204448</attachid>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-12 09:37:32 -0700</bug_when>
    <thetext>Created attachment 204448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899582</commentid>
    <comment_count>2</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-12 09:45:01 -0700</bug_when>
    <thetext>CoordinatedGraphics is unable to proxy non-validated custom shaders to the UIProcess. I don&apos;t know enough about the architecture of custom filters to know that the filters in keyframes should be validated though.

Also, none of the CoordinatedGraphics ports enable CSS Shaders. With this patch and some others (which I will submit next) I have made everything work on EFL, but I don&apos;t know if this change regresses Mac (I&apos;m a long-time reader, first time writer, so please forgive me if I&apos;ve gone about this all wrong).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899620</commentid>
    <comment_count>3</comment_count>
      <attachid>204448</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-06-12 10:41:16 -0700</bug_when>
    <thetext>Comment on attachment 204448
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899621</commentid>
    <comment_count>4</comment_count>
      <attachid>204448</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-06-12 10:41:37 -0700</bug_when>
    <thetext>Comment on attachment 204448
Patch

actually.. you need a test for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899622</commentid>
    <comment_count>5</comment_count>
      <attachid>204448</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-06-12 10:46:24 -0700</bug_when>
    <thetext>Comment on attachment 204448
Patch

Ok, looks like no platform can run this yet. Add a comment in the changelog saying that you had no new tests as no platform can do custom-filters accelerated animations yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899625</commentid>
    <comment_count>6</comment_count>
      <attachid>204456</attachid>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-12 10:55:21 -0700</bug_when>
    <thetext>Created attachment 204456
Updated test section of changelog

Add note to changelog that there are no new tests because no platform currently runs accelerated custom filter animations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899628</commentid>
    <comment_count>7</comment_count>
      <attachid>204456</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-12 10:59:14 -0700</bug_when>
    <thetext>Comment on attachment 204456
Updated test section of changelog

Rejecting attachment 204456 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 204456, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.

Full output: http://webkit-queues.appspot.com/results/726829</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899629</commentid>
    <comment_count>8</comment_count>
      <attachid>204456</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-06-12 11:01:22 -0700</bug_when>
    <thetext>Comment on attachment 204456
Updated test section of changelog

Trying the cq again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899642</commentid>
    <comment_count>9</comment_count>
      <attachid>204456</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-12 11:28:37 -0700</bug_when>
    <thetext>Comment on attachment 204456
Updated test section of changelog

Clearing flags on attachment: 204456

Committed r151513: &lt;http://trac.webkit.org/changeset/151513&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899643</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-12 11:28:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901582</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-18 16:36:19 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 117763</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901793</commentid>
    <comment_count>12</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-19 07:35:54 -0700</bug_when>
    <thetext>This change was rolled out because it caused an assert in StyleCustomFilterProgram.h StyleCustomFilterProgram::isLoaded called from RenderLayer::computeFilterOperations.


    virtual bool isLoaded() const
    {
        // Do not use the CachedResource:isLoaded method here, because it actually means !isLoading(),
        // so missing and canceled resources will have isLoaded set to true, even if they are not loaded yet.
        ASSERT(!m_vertexShader || m_vertexShader-&gt;isCachedShader());
        ASSERT(!m_fragmentShader || m_fragmentShader-&gt;isCachedShader());
        ASSERT(m_cachedVertexShader.get() || m_cachedFragmentShader.get());
        return (!m_cachedVertexShader.get() || m_isVertexShaderLoaded)
            &amp;&amp; (!m_cachedFragmentShader.get() || m_isFragmentShaderLoaded);
    }

The third assert failed on keyframe animations where the custom filter existed only in a keyframe and had never been loaded before -- m_cachedVertexShader and m_cachedFragmentShader were both null.

If I do something to cause StyleCustomFilterProgram::willHaveClients to be called then the layout tests work without assertions.

I&apos;m not sure what the right approach is here. Some questions:

1. Are there any other keyframe animatable resources which are loaded?

2. Does the RenderLayer want to become the loader client for all custom shaders in keyframes for the duration of the keyframe animation?

3. Does anything break like this if the server is slow to serve up fragment and vertex shaders? (i.e.: in the unanimated case, RenderLayer::computeFilterOperations is called with custom shaders in a state that the assertions above fail). I can test this one later today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901803</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-06-19 08:19:38 -0700</bug_when>
    <thetext> &gt;2. Does the RenderLayer want to become the loader client for all custom shaders in keyframes for the duration of the keyframe animation?
No. It&apos;s wrong for RenderLayer to have to know anything about shaders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901808</commentid>
    <comment_count>14</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-19 08:34:29 -0700</bug_when>
    <thetext>Ok, would it be OK for RenderLayerFilterInfo to become the CustomFilterClient for all of the custom filters in an animation?

This would need plumbing in RenderLayerBacking::startAnimation, animationFinished, startTransition and transitionFinished. Obviously RenderLayerBacking doesn&apos;t see the keyframes after the animation has started, so RenderLayerFilterInfo would have to keep a map from animation name to a list of CustomFilterPrograms (instead of the single list that it keeps right now).

The GraphicsLayer implementations already keep a list of animations and add and remove from it. Maybe the GraphicsLayer implementation has to load and validate custom filters in keyframes? I could add this to GraphicsLayerAnimations so that texmap/CoordinatedGraphics does it -- it will basically duplicate RenderLayer::computeFilterOperations and an empty implementation of CustomFilterProgramClient.

Also the GraphicsLayer is the only thing that knows if it can run custom filter animations itself and the only thing that can invalidate if an animated shader loads partway though an animation. So maybe making GraphicsLayer responsible for loading and validating is OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901895</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-06-19 12:44:55 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Ok, would it be OK for RenderLayerFilterInfo to become the CustomFilterClient for all of the custom filters in an animation?
&gt; 
&gt; This would need plumbing in RenderLayerBacking::startAnimation, animationFinished, startTransition and transitionFinished. Obviously RenderLayerBacking doesn&apos;t see the keyframes after the animation has started, so RenderLayerFilterInfo would have to keep a map from animation name to a list of CustomFilterPrograms (instead of the single list that it keeps right now).
&gt; 
&gt; The GraphicsLayer implementations already keep a list of animations and add and remove from it. Maybe the GraphicsLayer implementation has to load and validate custom filters in keyframes? I could add this to GraphicsLayerAnimations so that texmap/CoordinatedGraphics does it -- it will basically duplicate RenderLayer::computeFilterOperations and an empty implementation of CustomFilterProgramClient.
&gt; 
&gt; Also the GraphicsLayer is the only thing that knows if it can run custom filter animations itself and the only thing that can invalidate if an animated shader loads partway though an animation. So maybe making GraphicsLayer responsible for loading and validating is OK?

GraphicsLayer should not do any loading. If you are going to kick off resource loads, you should do that in a similar way to how we load images for style, or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901927</commentid>
    <comment_count>16</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-06-19 15:40:42 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; GraphicsLayer should not do any loading. If you are going to kick off resource loads, you should do that in a similar way to how we load images for style, or something.

I think we should teach RenderLayer::updateOrRemoveFilterClients about the animations. It should iterate on the &quot;-webkit-filter&quot; property keyframes and add the clients as needed. I suppose you would need to slightly change RenderLayerFilterInfo::updateCustomFilterClients to do that. This way the shaders are going to be loaded ahead of time, even if the animation is not running in the compositor.

AnimationController should be able to tell what are the animations running on a RenderObject and iterate on the keyframes of a specific property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902853</commentid>
    <comment_count>17</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-23 18:01:00 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; GraphicsLayer should not do any loading. If you are going to kick off resource loads, you should do that in a similar way to how we load images for style, or something.

I misspoke. The loads are scheduled by StyleResolver when the animated style is computed.

I have a patch which does the following in RenderLayerBacking:

 1. Checks a filter list for custom filters. These will be of type StyleCustomFilterProgram. If any shaders haven&apos;t been downloaded then we don&apos;t offer them to GraphicsLayer to animate.

  XXX: The isLoaded method on StyleCustomFilterProgram isn&apos;t exactly what I want; I want to know if all of the shaders are available and not ASSERT that they are. Currently I add an empty CustomFilterProgramClient prior to calling isLoaded but this isn&apos;t really correct either.

 2. If a filter is loaded, then we can add a CustomFilterProgramClient for it, which grabs the cached shaders and lets us retrieve the shader strings.

 3. We can validate loaded shaders. This creates a list of filters with ValidatedCustomFilterPrograms, not StyleCustomFilterPrograms. We don&apos;t care about keeping the cached shaders or StyleCustomFilterPrograms anymore.

 4. Remove our empty client from the StyleCustomFilterPrograms, since they&apos;re unneeded.

My reasoning for doing the above is:
 1. If a shader isn&apos;t loaded yet, we can&apos;t animate it anyway, so the compositor shouldn&apos;t be offered it.

 2. It&apos;s OK to use an empty CustomFilterProgramClient in this case, because we only need the shader strings to mangle through ANGLE. We check that the shader is loaded, so the notifyCustomFilterProgram loaded is useless to us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902855</commentid>
    <comment_count>18</comment_count>
      <attachid>205273</attachid>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-23 18:03:05 -0700</bug_when>
    <thetext>Created attachment 205273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902856</commentid>
    <comment_count>19</comment_count>
      <attachid>205273</attachid>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-23 18:04:41 -0700</bug_when>
    <thetext>Comment on attachment 205273
Patch

Simon, Alexandru, is this on the right track or am I off in the weeds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903662</commentid>
    <comment_count>20</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-06-26 05:45:26 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 205273 [details])
&gt; Simon, Alexandru, is this on the right track or am I off in the weeds?

I think you can update computeFilterOperations to avoid adding the clients, but I think that we still need a real client. For example, what happens if the shaders are loaded when the animation is already supposed to be running? My expectation would be that the animation will load the shaders and still be able to run. At least that&apos;s what happens in the software pipeline.

Also, this problem might be a good question for the w3c CSS group: Should the navigator postpone the start of the filter animations until the shaders are loaded? I think shaders are the first to have this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903688</commentid>
    <comment_count>21</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-06-26 06:55:11 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I think you can update computeFilterOperations to avoid adding the clients, but I think that we still need a real client. For example, what happens if the shaders are loaded when the animation is already supposed to be running? My expectation would be that the animation will load the shaders and still be able to run. At least that&apos;s what happens in the software pipeline.

With this patch I&apos;m saying that if a shader isn&apos;t loaded at the start of the animation then the compositor shouldn&apos;t run the animation -- WebCore will run it instead (as it runs all custom filter animations currently). The compositor running animations is just a fast path to avoid recalculating style for every frame.

So if a shader does load while the animation is running then this patch doesn&apos;t change behavior -- and I think it&apos;s OK to say that the compositor won&apos;t handle any &quot;hard&quot; cases.

&gt; Also, this problem might be a good question for the w3c CSS group: Should the navigator postpone the start of the filter animations until the shaders are loaded? I think shaders are the first to have this problem.

Personally I wouldn&apos;t want that in the places I&apos;m using CSS Shaders -- for transitional effects where I wouldn&apos;t want the page to block on a load.

I think of it like animating background-position when the background-image hasn&apos;t loaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906738</commentid>
    <comment_count>22</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-07-08 05:09:58 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; I think you can update computeFilterOperations to avoid adding the clients, but I think that we still need a real client. For example, what happens if the shaders are loaded when the animation is already supposed to be running? My expectation would be that the animation will load the shaders and still be able to run. At least that&apos;s what happens in the software pipeline.
&gt; 
&gt; With this patch I&apos;m saying that if a shader isn&apos;t loaded at the start of the animation then the compositor shouldn&apos;t run the animation -- WebCore will run it instead (as it runs all custom filter animations currently). The compositor running animations is just a fast path to avoid recalculating style for every frame.
&gt; 
&gt; So if a shader does load while the animation is running then this patch doesn&apos;t change behavior -- and I think it&apos;s OK to say that the compositor won&apos;t handle any &quot;hard&quot; cases.
Ok, now I get it. Makes sense.

&gt; 
&gt; &gt; Also, this problem might be a good question for the w3c CSS group: Should the navigator postpone the start of the filter animations until the shaders are loaded? I think shaders are the first to have this problem.
&gt; 
&gt; Personally I wouldn&apos;t want that in the places I&apos;m using CSS Shaders -- for transitional effects where I wouldn&apos;t want the page to block on a load.
&gt; 
&gt; I think of it like animating background-position when the background-image hasn&apos;t loaded.
Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907395</commentid>
    <comment_count>23</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2013-07-10 10:27:53 -0700</bug_when>
    <thetext>So should I clean this up and submit something for review?

I don&apos;t like the empty client, but I&apos;m not sure how to do away with it.

I need to coerce the StyleCustomFilterProgram into being loaded if the shader strings are available and the client mechanism causes all of this to happen (it extracts the &quot;CachedShaders&quot;, becomes a client of them which updates the m_isXYZShaderLoaded values, which makes isLoaded return a reasonable value).

Is the empty client something that would cause an r-? I think this case is unique since there are no animations of something that&apos;s loaded currently...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914198</commentid>
    <comment_count>24</comment_count>
      <attachid>205273</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-08-02 10:52:29 -0700</bug_when>
    <thetext>Comment on attachment 205273
Patch

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

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:2120
&gt; +        // Calling CustomFilterProgram::isLoaded with no clients will make it assert; add

If you need EmptyCustomFilterProgramClient just for this, why not fix the assert?

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:2268
&gt; +            FilterOperations validatedFromFilters;
&gt; +            FilterOperations validatedToFilters;
&gt; +            if (validateCustomFilters(owningLayer(), fromStyle, validatedFromFilters))
&gt; +                filterVector.insert(FilterAnimationValue::create(0, validatedFromFilters));
&gt; +            if (validateCustomFilters(owningLayer(), toStyle, validatedToFilters))
&gt; +                filterVector.insert(FilterAnimationValue::create(1, validatedToFilters));

I don&apos;t think we should pay the cost of two FilterOperations on the stack when there are no custom filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980235</commentid>
    <comment_count>25</comment_count>
      <attachid>204448</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-13 04:04:59 -0800</bug_when>
    <thetext>Comment on attachment 204448
Patch

Cleared Alexandru Chiculita&apos;s review+ from obsolete attachment 204448 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980293</commentid>
    <comment_count>26</comment_count>
    <who name="Ralph T">ralpht+bugs</who>
    <bug_when>2014-02-13 07:18:38 -0800</bug_when>
    <thetext>CSS Shaders are gone. Don&apos;t need this bug anymore.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204448</attachid>
            <date>2013-06-12 09:37:32 -0700</date>
            <delta_ts>2014-02-13 04:04:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117550-20130612093552.patch</filename>
            <type>text/plain</type>
            <size>2845</size>
            <attacher name="Ralph T">ralpht+bugs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI0MjRkMmY2YzA3MjNm
YzA5YTQzZDdjOTNhNjdkYjI2YTc0ZGVlOS4uM2NiNjEzNmVmNzEwODAzMDg3NjExNDc2N2NkYmMw
NWU5YWU1Y2U5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA2LTEyICBSYWxw
aCBUaG9tYXMgIDxyYWxwaHRAZ21haWwuY29tPgorCisgICAgICAgIFtDU1MgU2hhZGVyc10gQW5p
bWF0aW9ucyBhbmQgdHJhbnNpdGlvbnMgc2hvdWxkIHVzZSB2YWxpZGF0ZWQgY3VzdG9tIHByb2dy
YW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc1
NTAKKworICAgICAgICBSdW4gZmlsdGVycyB1c2VkIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0
aW9ucyB0aHJvdWdoIFJlbmRlckxheWVyOjpjb21wdXRlRmlsdGVyT3BlcmF0aW9ucworICAgICAg
ICBpbiBvcmRlciB0byB2YWxpZGF0ZSBjdXN0b20gZmlsdGVyIG9wZXJhdGlvbnMuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChP
T1BTISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c3RhcnRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24pOgorCiAy
MDEzLTA2LTA2ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
c3RyaWN0IFdlYkF1ZGlvIGZyb20gcGxheWluZyB3aGVuIGRpc2FsbG93ZWQgYnkgcGFnZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXgg
ODA3ZmQ4ZjExZjc1MzUxOGMzYzk0MmMxYTI0MmZjMDcyMmQzMWNiOS4uMWNjOGUxNjVlYjliMDk3
ZGNlMzBlYzVmMWJkZmQyYWMwZmQ5Y2Q5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTIxMjEsNyArMjEyMSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3Qg
QW5pbWF0aW9uKiBhbmltCiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgICAgIGlmICgo
aGFzRmlsdGVyICYmIGlzRmlyc3RPckxhc3RLZXlmcmFtZSkgfHwgY3VycmVudEtleWZyYW1lLmNv
bnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXIpKQotICAgICAgICAgICAgZmls
dGVyVmVjdG9yLmluc2VydChGaWx0ZXJBbmltYXRpb25WYWx1ZTo6Y3JlYXRlKGtleSwga2V5ZnJh
bWVTdHlsZS0+ZmlsdGVyKCksIHRmKSk7CisgICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0
KEZpbHRlckFuaW1hdGlvblZhbHVlOjpjcmVhdGUoa2V5LCBvd25pbmdMYXllcigpLT5jb21wdXRl
RmlsdGVyT3BlcmF0aW9ucyhrZXlmcmFtZVN0eWxlKSwgdGYpKTsKICNlbmRpZgogICAgIH0KIApA
QCAtMjE5MSw4ICsyMTkxLDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJhbnNp
dGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXIKICAgICAgICAgY29u
c3QgQW5pbWF0aW9uKiBmaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5
KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKTsKICAgICAgICAgaWYgKGZpbHRlckFuaW0gJiYgIWZp
bHRlckFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7CiAgICAgICAgICAgICBLZXlmcmFt
ZVZhbHVlTGlzdCBmaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcik7Ci0g
ICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KEZpbHRlckFuaW1hdGlvblZhbHVlOjpjcmVh
dGUoMCwgZnJvbVN0eWxlLT5maWx0ZXIoKSkpOwotICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmlu
c2VydChGaWx0ZXJBbmltYXRpb25WYWx1ZTo6Y3JlYXRlKDEsIHRvU3R5bGUtPmZpbHRlcigpKSk7
CisgICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KEZpbHRlckFuaW1hdGlvblZhbHVlOjpj
cmVhdGUoMCwgb3duaW5nTGF5ZXIoKS0+Y29tcHV0ZUZpbHRlck9wZXJhdGlvbnMoZnJvbVN0eWxl
KSkpOworICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmluc2VydChGaWx0ZXJBbmltYXRpb25WYWx1
ZTo6Y3JlYXRlKDEsIG93bmluZ0xheWVyKCktPmNvbXB1dGVGaWx0ZXJPcGVyYXRpb25zKHRvU3R5
bGUpKSk7CiAgICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oZmls
dGVyVmVjdG9yLCBJbnRTaXplKCksIGZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlv
bk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpLCB0aW1lT2Zm
c2V0KSkgewogICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGZp
bHRlciBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNldCB0aGUgZmlu
YWwgZmlsdGVyLgogICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlcnModG9TdHlsZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204456</attachid>
            <date>2013-06-12 10:55:21 -0700</date>
            <delta_ts>2013-06-23 18:02:59 -0700</delta_ts>
            <desc>Updated test section of changelog</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2907</size>
            <attacher name="Ralph T">ralpht+bugs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI0MjRkMmY2YzA3MjNm
YzA5YTQzZDdjOTNhNjdkYjI2YTc0ZGVlOS4uM2NiNjEzNmVmNzEwODAzMDg3NjExNDc2N2NkYmMw
NWU5YWU1Y2U5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA2LTEyICBSYWxw
aCBUaG9tYXMgIDxyYWxwaHRAZ21haWwuY29tPgorCisgICAgICAgIFtDU1MgU2hhZGVyc10gQW5p
bWF0aW9ucyBhbmQgdHJhbnNpdGlvbnMgc2hvdWxkIHVzZSB2YWxpZGF0ZWQgY3VzdG9tIHByb2dy
YW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc1
NTAKKworICAgICAgICBSdW4gZmlsdGVycyB1c2VkIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0
aW9ucyB0aHJvdWdoIFJlbmRlckxheWVyOjpjb21wdXRlRmlsdGVyT3BlcmF0aW9ucworICAgICAg
ICBpbiBvcmRlciB0byB2YWxpZGF0ZSBjdXN0b20gZmlsdGVyIG9wZXJhdGlvbnMuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFz
IG5vIHBsYXRmb3JtIGNhbiBydW4gY3VzdG9tIGZpbHRlcnMgd2l0aCBhY2NlbGVyYXRlZCBhbmlt
YXRpb25zIHlldC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJhbnNpdGlvbik6
CisKIDIwMTMtMDYtMDYgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVzdHJpY3QgV2ViQXVkaW8gZnJvbSBwbGF5aW5nIHdoZW4gZGlzYWxsb3dlZCBieSBwYWdl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApp
bmRleCA4MDdmZDhmMTFmNzUzNTE4YzNjOTQyYzFhMjQyZmMwNzIyZDMxY2I5Li4xY2M4ZTE2NWVi
OWIwOTdkY2UzMGVjNWYxYmRmZDJhYzBmZDljZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjEyMSw3ICsyMTIxLDcgQEAgYm9v
bCBSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBj
b25zdCBBbmltYXRpb24qIGFuaW0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAgICAg
aWYgKChoYXNGaWx0ZXIgJiYgaXNGaXJzdE9yTGFzdEtleWZyYW1lKSB8fCBjdXJyZW50S2V5ZnJh
bWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcikpCi0gICAgICAgICAg
ICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KEZpbHRlckFuaW1hdGlvblZhbHVlOjpjcmVhdGUoa2V5LCBr
ZXlmcmFtZVN0eWxlLT5maWx0ZXIoKSwgdGYpKTsKKyAgICAgICAgICAgIGZpbHRlclZlY3Rvci5p
bnNlcnQoRmlsdGVyQW5pbWF0aW9uVmFsdWU6OmNyZWF0ZShrZXksIG93bmluZ0xheWVyKCktPmNv
bXB1dGVGaWx0ZXJPcGVyYXRpb25zKGtleWZyYW1lU3R5bGUpLCB0ZikpOwogI2VuZGlmCiAgICAg
fQogCkBAIC0yMTkxLDggKzIxOTEsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRU
cmFuc2l0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEIHByb3BlcgogICAgICAg
ICBjb25zdCBBbmltYXRpb24qIGZpbHRlckFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJv
cGVydHkoQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXIpOwogICAgICAgICBpZiAoZmlsdGVyQW5pbSAm
JiAhZmlsdGVyQW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKICAgICAgICAgICAgIEtl
eWZyYW1lVmFsdWVMaXN0IGZpbHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVy
KTsKLSAgICAgICAgICAgIGZpbHRlclZlY3Rvci5pbnNlcnQoRmlsdGVyQW5pbWF0aW9uVmFsdWU6
OmNyZWF0ZSgwLCBmcm9tU3R5bGUtPmZpbHRlcigpKSk7Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0
b3IuaW5zZXJ0KEZpbHRlckFuaW1hdGlvblZhbHVlOjpjcmVhdGUoMSwgdG9TdHlsZS0+ZmlsdGVy
KCkpKTsKKyAgICAgICAgICAgIGZpbHRlclZlY3Rvci5pbnNlcnQoRmlsdGVyQW5pbWF0aW9uVmFs
dWU6OmNyZWF0ZSgwLCBvd25pbmdMYXllcigpLT5jb21wdXRlRmlsdGVyT3BlcmF0aW9ucyhmcm9t
U3R5bGUpKSk7CisgICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KEZpbHRlckFuaW1hdGlv
blZhbHVlOjpjcmVhdGUoMSwgb3duaW5nTGF5ZXIoKS0+Y29tcHV0ZUZpbHRlck9wZXJhdGlvbnMo
dG9TdHlsZSkpKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlv
bihmaWx0ZXJWZWN0b3IsIEludFNpemUoKSwgZmlsdGVyQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5p
bWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlciksIHRp
bWVPZmZzZXQpKSB7CiAgICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJl
Y3QgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRo
ZSBmaW5hbCBmaWx0ZXIuCiAgICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVycyh0b1N0eWxlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205273</attachid>
            <date>2013-06-23 18:03:05 -0700</date>
            <delta_ts>2013-08-02 10:52:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117550-20130623180111.patch</filename>
            <type>text/plain</type>
            <size>6489</size>
            <attacher name="Ralph T">ralpht+bugs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTkyZjFjY2M3NzExYzU2
ZTNiOTM0MmE1YWM2ZTE2OWM5MzdjMzZjNS4uYmJlY2JkYmE2OWIyNTI0YzEwNWNkNjI5NjlkYzIw
YTVkZjNiMjAwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTA2LTIzICBSYWxw
aCBUaG9tYXMgIDxyYWxwaHRAZ21haWwuY29tPgorCisgICAgICAgIFtDU1MgU2hhZGVyc10gQW5p
bWF0aW9ucyBhbmQgdHJhbnNpdGlvbnMgc2hvdWxkIHVzZSB2YWxpZGF0ZWQgY3VzdG9tIHByb2dy
YW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc1
NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3Qg
aW50ZW5kZWQgZm9yIGNvbW1pdHRpbmcuIEp1c3QgdG8gY2hlY2sgaWYgdGhpcyBpcyBvbiB0aGUg
cmlnaHQgdHJhY2suCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5Q3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudDo6fkVtcHR5Q3VzdG9tRmlsdGVyUHJvZ3JhbUNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbXB0eUN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQ6
Om5vdGlmeUN1c3RvbUZpbHRlclByb2dyYW1Mb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6dmFs
aWRhdGVDdXN0b21GaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6c3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24pOgorCiAyMDEzLTA2LTIxICBSdXRoIEZvbmcgIDxydXRoX2ZvbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBUZXh0VHJhY2tDdWU6OmN1ZUluZGV4KCkgdG8gaGFu
ZGxlIHRoZSBudWxsIGNhc2Ugb2YgVGV4dFRyYWNrOjpjdWVzKCgpIHByb3Blcmx5CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDE3Y2Rl
NzgwOTk2ZGRhOGEwYjYzNzhlOTVhYmQyMDdmNTIyN2NjZDYuLjE2YTMxOWRjMzk2NzRiNzM0Mzcz
MjUwY2Q0MmE2Yzc3ODMyYzBlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0UmVuZGVyZXIuaCIKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAjaW5jbHVkZSAiQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVu
dC5oIgogI2VuZGlmCiAjZW5kaWYKIApAQCAtMjA4MSw2ICsyMDgyLDY0IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp2ZXJpZnlOb3RQYWludGluZygpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKworY2xhc3MgRW1wdHlDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50IDog
cHVibGljIEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkVtcHR5Q3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudCgpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlDdXN0b21GaWx0ZXJQcm9ncmFtTG9hZGVkKEN1c3RvbUZpbHRlclBy
b2dyYW0qKQorICAgIHsKKyAgICB9Cit9OworCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUN1c3RvbUZp
bHRlcnMoUmVuZGVyTGF5ZXIqIG93bmluZ0xheWVyLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IEZpbHRlck9wZXJhdGlvbnMmIG91dCkKK3sKKyAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXIgPSBzdHlsZS0+ZmlsdGVyKCk7CisgICAgaWYgKCFmaWx0ZXIuaGFzQ3VzdG9tRmlsdGVy
KCkpIHsKKyAgICAgICAgb3V0ID0gZmlsdGVyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBib29sIGZvdW5kVW5sb2FkZWRQcm9ncmFtcyA9IGZhbHNlOworICAgIFZlY3RvcjxS
ZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gPiBjdXN0b21Qcm9ncmFtczsKKyAgICBFbXB0eUN1
c3RvbUZpbHRlclByb2dyYW1DbGllbnQgZW1wdHlGaWx0ZXJDbGllbnQ7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbHRlci5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGaWx0
ZXJPcGVyYXRpb24qIG9wID0gZmlsdGVyLmF0KGkpOworICAgICAgICBpZiAob3AtPmdldE9wZXJh
dGlvblR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtKiBwcm9ncmFtID0gc3RhdGljX2Nhc3Q8
Y29uc3QgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4ob3ApLT5wcm9ncmFtKCk7CisgICAgICAgIGlm
ICghcHJvZ3JhbSkgeworICAgICAgICAgICAgLy8gWFhYOiBDYW4gdGhpcyBoYXBwZW4/CisgICAg
ICAgICAgICBmb3VuZFVubG9hZGVkUHJvZ3JhbXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2FsbGluZyBDdXN0b21GaWx0ZXJQcm9ncmFtOjppc0xv
YWRlZCB3aXRoIG5vIGNsaWVudHMgd2lsbCBtYWtlIGl0IGFzc2VydDsgYWRkCisgICAgICAgIC8v
IG91ciBjbGllbnQgZmlyc3QuCisgICAgICAgIGN1c3RvbVByb2dyYW1zLmFwcGVuZChwcm9ncmFt
KTsKKyAgICAgICAgcHJvZ3JhbS0+YWRkQ2xpZW50KCZlbXB0eUZpbHRlckNsaWVudCk7CisgICAg
ICAgIGlmICghcHJvZ3JhbS0+aXNMb2FkZWQoKSkgeworICAgICAgICAgICAgZm91bmRVbmxvYWRl
ZFByb2dyYW1zID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIC8vIElmIGFsbCBvZiBvdXIgcHJvZ3JhbXMgd2VyZSBsb2FkZWQgdGhlbiBnZXQgdGhlbSB2
YWxpZGF0ZWQuCisgICAgaWYgKCFmb3VuZFVubG9hZGVkUHJvZ3JhbXMpCisgICAgICAgIG91dCA9
IG93bmluZ0xheWVyLT5jb21wdXRlRmlsdGVyT3BlcmF0aW9ucyhzdHlsZSk7CisKKyAgICAvLyBO
b3cgdGhhdCB3ZSBoYXZlIHZhbGlkYXRlZCBvdXIgc2hhZGVycyAoaWYgdGhleSB3ZXJlIGxvYWRl
ZCkgd2UgZG9uJ3QgbmVlZCB0aGUKKyAgICAvLyBDdXN0b21GaWx0ZXJQcm9ncmFtcyBhbnltb3Jl
OyB3ZSBoYXZlIFZhbGlkYXRlZEN1c3RvbUZpbHRlclByb2dyYW1zIGluICJvdXQiCisgICAgLy8g
d2hpY2ggZG9uJ3QgZGVwZW5kIG9uIHRoZSBzb3VyY2UgZmlsdGVycy4gUmVtb3ZlIG91ciBjbGll
bnQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdXN0b21Qcm9ncmFtcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgY3VzdG9tUHJvZ3JhbXNbaV0tPnJlbW92ZUNsaWVudCgmZW1wdHlGaWx0ZXJD
bGllbnQpOworCisgICAgcmV0dXJuICFmb3VuZFVubG9hZGVkUHJvZ3JhbXM7Cit9CisjZW5kaWYK
KwogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zm
c2V0LCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IEtleWZyYW1lTGlzdCYga2V5ZnJhbWVz
KQogewogICAgIGJvb2wgaGFzT3BhY2l0eSA9IGtleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENT
U1Byb3BlcnR5T3BhY2l0eSk7CkBAIC0yMTIwLDkgKzIxNzksMTggQEAgYm9vbCBSZW5kZXJMYXll
ckJhY2tpbmc6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRp
b24qIGFuaW0KICAgICAgICAgICAgIG9wYWNpdHlWZWN0b3IuaW5zZXJ0KEZsb2F0QW5pbWF0aW9u
VmFsdWU6OmNyZWF0ZShrZXksIGtleWZyYW1lU3R5bGUtPm9wYWNpdHkoKSwgdGYpKTsKIAogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICAgICAgaWYgKChoYXNGaWx0ZXIgJiYgaXNGaXJzdE9y
TGFzdEtleWZyYW1lKSB8fCBjdXJyZW50S2V5ZnJhbWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdEZpbHRlcikpCisgICAgICAgIGlmICgoaGFzRmlsdGVyICYmIGlzRmlyc3RPckxh
c3RLZXlmcmFtZSkgfHwgY3VycmVudEtleWZyYW1lLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVy
dHlXZWJraXRGaWx0ZXIpKSB7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICAgICAg
Ly8gSWYgdGhpcyBpcyBhIGN1c3RvbSBmaWx0ZXIgd2hpY2ggaXMgd2FpdGluZyBvbiB0aGUgbG9h
ZGVyIHRoZW4gaXQgY2Fubm90IGJlIGFuaW1hdGVkIGhlcmUuCisgICAgICAgICAgICBGaWx0ZXJP
cGVyYXRpb25zIHZhbGlkYXRlZEZpbHRlcnM7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlQ3Vz
dG9tRmlsdGVycyhvd25pbmdMYXllcigpLCBrZXlmcmFtZVN0eWxlLCB2YWxpZGF0ZWRGaWx0ZXJz
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZpbHRlclZlY3Rvci5p
bnNlcnQoRmlsdGVyQW5pbWF0aW9uVmFsdWU6OmNyZWF0ZShrZXksIHZhbGlkYXRlZEZpbHRlcnMs
IHRmKSk7CisjZWxzZQogICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmluc2VydChGaWx0ZXJBbmlt
YXRpb25WYWx1ZTo6Y3JlYXRlKGtleSwga2V5ZnJhbWVTdHlsZS0+ZmlsdGVyKCksIHRmKSk7CiAj
ZW5kaWYKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgYm9vbCBkaWRBbmltYXRlID0g
ZmFsc2U7CkBAIC0yMTkxLDkgKzIyNTksMTggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnN0
YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXIKICAg
ICAgICAgY29uc3QgQW5pbWF0aW9uKiBmaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZv
clByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0RmlsdGVyKTsKICAgICAgICAgaWYgKGZpbHRlckFu
aW0gJiYgIWZpbHRlckFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7CiAgICAgICAgICAg
ICBLZXlmcmFtZVZhbHVlTGlzdCBmaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZp
bHRlcik7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICAgICAgRmlsdGVyT3BlcmF0
aW9ucyB2YWxpZGF0ZWRGcm9tRmlsdGVyczsKKyAgICAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMg
dmFsaWRhdGVkVG9GaWx0ZXJzOworICAgICAgICAgICAgaWYgKHZhbGlkYXRlQ3VzdG9tRmlsdGVy
cyhvd25pbmdMYXllcigpLCBmcm9tU3R5bGUsIHZhbGlkYXRlZEZyb21GaWx0ZXJzKSkKKyAgICAg
ICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KEZpbHRlckFuaW1hdGlvblZhbHVlOjpjcmVh
dGUoMCwgdmFsaWRhdGVkRnJvbUZpbHRlcnMpKTsKKyAgICAgICAgICAgIGlmICh2YWxpZGF0ZUN1
c3RvbUZpbHRlcnMob3duaW5nTGF5ZXIoKSwgdG9TdHlsZSwgdmFsaWRhdGVkVG9GaWx0ZXJzKSkK
KyAgICAgICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KEZpbHRlckFuaW1hdGlvblZhbHVl
OjpjcmVhdGUoMSwgdmFsaWRhdGVkVG9GaWx0ZXJzKSk7CisjZWxzZQogICAgICAgICAgICAgZmls
dGVyVmVjdG9yLmluc2VydChGaWx0ZXJBbmltYXRpb25WYWx1ZTo6Y3JlYXRlKDAsIGZyb21TdHls
ZS0+ZmlsdGVyKCkpKTsKICAgICAgICAgICAgIGZpbHRlclZlY3Rvci5pbnNlcnQoRmlsdGVyQW5p
bWF0aW9uVmFsdWU6OmNyZWF0ZSgxLCB0b1N0eWxlLT5maWx0ZXIoKSkpOwotICAgICAgICAgICAg
aWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKGZpbHRlclZlY3RvciwgSW50U2l6ZSgp
LCBmaWx0ZXJBbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihB
bmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKSwgdGltZU9mZnNldCkpIHsKKyNlbmRpZgorICAg
ICAgICAgICAgaWYgKGZpbHRlclZlY3Rvci5zaXplKCkgPT0gMiAmJiBtX2dyYXBoaWNzTGF5ZXIt
PmFkZEFuaW1hdGlvbihmaWx0ZXJWZWN0b3IsIEludFNpemUoKSwgZmlsdGVyQW5pbSwgR3JhcGhp
Y3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dEZpbHRlciksIHRpbWVPZmZzZXQpKSB7CiAgICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRo
YXQgdGhlIGNvcnJlY3QgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMs
IGFsc28gc2V0IHRoZSBmaW5hbCBmaWx0ZXIuCiAgICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVy
cyh0b1N0eWxlKTsKICAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>