<?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>72202</bug_id>
          
          <creation_ts>2011-11-11 18:58:48 -0800</creation_ts>
          <short_desc>[chromium] Set texture limits as multiples of viewport size instead of hardcoded values</short_desc>
          <delta_ts>2011-12-08 17:05:53 -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>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="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>klobag</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>501315</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-11 18:58:48 -0800</bug_when>
    <thetext>[chromium] Set texture limits as multiples of viewport size instead of hardcoded values</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501316</commentid>
    <comment_count>1</comment_count>
      <attachid>114813</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-11 18:59:09 -0800</bug_when>
    <thetext>Created attachment 114813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501317</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-11 18:59:26 -0800</bug_when>
    <thetext>Thought for food, not fully baked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502550</commentid>
    <comment_count>3</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-14 17:48:29 -0800</bug_when>
    <thetext>This is intriguing, but I&apos;ll admit I&apos;m kind of dubious.  I&apos;d worry about making one of our worst cases even worse (bad hardware, large display).  What use case in particular were you thinking about solving here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502558</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-14 18:01:24 -0800</bug_when>
    <thetext>Really small displays/windows and really big ones.  We have tiny ~ 600x400 popup windows and 2560x1600 fullscreen 30&quot; tabs using the same memory cap, which seems pretty suboptimal.  For, say, scrolling it makes sense to express the cap in terms of how many screenfuls of tiles we want to keep around.  The other thought is that displays that can handle really large viewport sizes are probably associated with graphics cards that can handle more memory, whereas tiny viewports might mean tiny displays and tiny memories.

We could add a floor or a ceiling to these values as well - I&apos;m not sure what the ideal shape of the curve is, but I think it should be a curve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512405</commentid>
    <comment_count>5</comment_count>
      <attachid>117320</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-11-30 20:51:40 -0800</bug_when>
    <thetext>Created attachment 117320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512414</commentid>
    <comment_count>6</comment_count>
      <attachid>117320</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-30 21:04:47 -0800</bug_when>
    <thetext>Comment on attachment 117320
Patch

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

I like this idea a lot.  I&apos;m really curious what Vangelis and Enne think about these limits.

Left a few comments inline for you as well, Eric.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

You need to do something with this line or an svn presubmit hook will reject your change.  If you&apos;ve tested this change manually saying so here would be useful, or otherwise describe what the state of testing this code is. Perhaps it&apos;s just a link to a bug saying that we should add some tests :)

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:38
&gt; +    if (viewportSize.width() * viewportSize.height() &lt;= 0)

with IntSize you can spell this &quot;viewportSize.isEmpty()&quot;, which I think is a bit clearer

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:41
&gt; +    // To avoid wasting memory round up assuming the viewport straddles 256x256 tiles on both sides.
&gt; +    // Since most textures will need alpha, this assumes 32-bit textures (4 bytes-per-pixel).

The tile assumption makes a lot of sense for the contents texture manager since it manages mostly tiled layers, but it doesn&apos;t really make much sense for the render surface manager since it never deals with tiles. Do you think we should have different limits for these cases?

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:42
&gt; +    return viewportMultiplier * 4 * 256 * 256 * ((viewportSize.width() + 255) / 256 + 1) * ((viewportSize.height() + 255) / 256 + 1);

I think rather than hardcoding 4bytes/pixel here we should re-use the memoryUseBytes() function. That function also currently also hardcodes 4 bytes/pixel but at least that way we can only hardcode it once and update it if we ever start using other texture formats.

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:49
&gt; +#if OS(ANDROID)
&gt; +    return 32 * 1024 * 1024;
&gt; +#else

rather than hardcoding this, should memoryLimitBytes() take a max values? I&apos;m assuming that you expect this to be lower than 8*viewport, correct?

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:70
&gt; +    return memoryLimitBytes(1, viewportSize, 3);

I think we want to use a memory cap here as well even on desktop.

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:57
&gt;      // Absolute maximum limit for texture allocations for this instance.

at this point having these all be statics isn&apos;t quite so useful. what about having the viewport size be the thing we set on the TextureManager and it can internally set these limits?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512839</commentid>
    <comment_count>7</comment_count>
      <attachid>117320</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-12-01 09:30:40 -0800</bug_when>
    <thetext>Comment on attachment 117320
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:42
&gt;&gt; +    return viewportMultiplier * 4 * 256 * 256 * ((viewportSize.width() + 255) / 256 + 1) * ((viewportSize.height() + 255) / 256 + 1);
&gt; 
&gt; I think rather than hardcoding 4bytes/pixel here we should re-use the memoryUseBytes() function. That function also currently also hardcodes 4 bytes/pixel but at least that way we can only hardcode it once and update it if we ever start using other texture formats.

No, no.  The TextureManager definitely supports different formats these days, so we should use the memoryUseBytes function.

Also, please don&apos;t hardcode the tile size.  If you&apos;re going to use it, then expose it from TiledLayerChromium (if it&apos;s not already).

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:60
&gt; +#if OS(ANDROID)
&gt; +    return memoryLimitBytes(3, viewportSize, 6);
&gt; +#else
&gt; +    return memoryLimitBytes(4, viewportSize, 64);
&gt; +#endif

I don&apos;t really like the #ifdef warts and implicit limit setting.  If we want to have settings for the texture manager, maybe we should push them up to CCSettings, where a particular platform can set all of its custom settings at once, in one place, and then pass them in to the texture manager as explicit multipliers and limits. I&apos;m sure other platforms might have similiar needs in the future.

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:67
&gt; +    // Hidden tabs should release all their textures on Android.

Don&apos;t we have a CCSetting for this?

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:57
&gt;&gt;      // Absolute maximum limit for texture allocations for this instance.
&gt; 
&gt; at this point having these all be statics isn&apos;t quite so useful. what about having the viewport size be the thing we set on the TextureManager and it can internally set these limits?

Very much agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513023</commentid>
    <comment_count>8</comment_count>
      <attachid>117320</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-01 13:04:11 -0800</bug_when>
    <thetext>Comment on attachment 117320
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:38
&gt;&gt; +    if (viewportSize.width() * viewportSize.height() &lt;= 0)
&gt; 
&gt; with IntSize you can spell this &quot;viewportSize.isEmpty()&quot;, which I think is a bit clearer

Sounds good.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:41
&gt;&gt; +    // Since most textures will need alpha, this assumes 32-bit textures (4 bytes-per-pixel).
&gt; 
&gt; The tile assumption makes a lot of sense for the contents texture manager since it manages mostly tiled layers, but it doesn&apos;t really make much sense for the render surface manager since it never deals with tiles. Do you think we should have different limits for these cases?

This function doesn&apos;t have to be used for all TextureManagers. Doesn&apos;t that manager set it&apos;s limits based on the remaining memory from another manager?

The way this rounds up definitely helps most in the tiled case, but the goal is to simply round up the limit to something reasonable based on the viewport (when the viewport is relevant)

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:42
&gt;&gt;&gt; +    return viewportMultiplier * 4 * 256 * 256 * ((viewportSize.width() + 255) / 256 + 1) * ((viewportSize.height() + 255) / 256 + 1);
&gt;&gt; 
&gt;&gt; I think rather than hardcoding 4bytes/pixel here we should re-use the memoryUseBytes() function. That function also currently also hardcodes 4 bytes/pixel but at least that way we can only hardcode it once and update it if we ever start using other texture formats.
&gt; 
&gt; No, no.  The TextureManager definitely supports different formats these days, so we should use the memoryUseBytes function.
&gt; 
&gt; Also, please don&apos;t hardcode the tile size.  If you&apos;re going to use it, then expose it from TiledLayerChromium (if it&apos;s not already).

Since the TextureManager supports different formats (even at the same time), I considered memoryUseBytes. But what is the best size when multiple formats are being used at once? I would also say that changes to memoryUseBytes shouldn&apos;t implicitly change this function unless we explicitly decide we want to also change the memory limit.

Regarding tiles size, I got a bit carried away given the observation that 256x256 tiles are used in practice, but the goal here wasn&apos;t to use the tile size, but rather the viewport size. I don&apos;t think it&apos;s really useful to use the tile size in the general case. Perhaps just rounding to the nearest megabyte would be better if you want less magic numbers?

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:49
&gt;&gt; +#else
&gt; 
&gt; rather than hardcoding this, should memoryLimitBytes() take a max values? I&apos;m assuming that you expect this to be lower than 8*viewport, correct?

Do you mean the hard-coding of 32MB above?  In any case having a max value is probably good idea.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:60
&gt;&gt; +#endif
&gt; 
&gt; I don&apos;t really like the #ifdef warts and implicit limit setting.  If we want to have settings for the texture manager, maybe we should push them up to CCSettings, where a particular platform can set all of its custom settings at once, in one place, and then pass them in to the texture manager as explicit multipliers and limits. I&apos;m sure other platforms might have similiar needs in the future.

I&apos;m not against moving it to CCSettings. This was just where the current hard-coded value was.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:67
&gt;&gt; +    // Hidden tabs should release all their textures on Android.
&gt; 
&gt; Don&apos;t we have a CCSetting for this?

Do you mean discardAllTextures? I think it&apos;s relatively new, but it looks like it does what we need.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:70
&gt;&gt; +    return memoryLimitBytes(1, viewportSize, 3);
&gt; 
&gt; I think we want to use a memory cap here as well even on desktop.

Do you mean a maximum in addition to the current curve, or just a straight constant?

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:57
&gt;&gt;&gt;      // Absolute maximum limit for texture allocations for this instance.
&gt;&gt; 
&gt;&gt; at this point having these all be statics isn&apos;t quite so useful. what about having the viewport size be the thing we set on the TextureManager and it can internally set these limits?
&gt; 
&gt; Very much agreed.

Having these be non-static makes sense, especially since the TextureManager will eventually need to know these values internally. However, I don&apos;t really like the texture manager having a viewport member (what if we use this class for a different purpose that no relationship to the viewport). 

Perhaps this class should just have setters/getters and the logic can be applied by the caller if that is what is desired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513455</commentid>
    <comment_count>9</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-01 21:05:44 -0800</bug_when>
    <thetext>A few uncharacteristically non-grumpy thoughts from me on this patch...

a) I don&apos;t really think its a problem to have #ifdef ANDROID stuff up in cc for now. I&apos;d vastly prefer that to dealing with merge conflicts. That is to say, yes, long term these should go away, but as long as the ifdef is guarding a special case or a corner, I dont think we need to force the android specific feature out as a setting. Personally, I&apos;d suggest this though:
int x;
#if OS_ANDROID
x = blah;
#else
x = unblah;
#endif


b) I&apos;m not sure that puttging texture limits on ccsettings makes sense. Again, this bakes into our settings api the idea that there is a per-CCLayerTreeHost memory budget. If we ever go to a more global memory mgmt strategy, which I think makes a TON of sense, then we&apos;re going to have to unwind this spaghetti.

When you add a+b, I think you end up in a place where this is by-and-large tolerable to me. Again, I think the overarching goals here are to avoid genuine spaghetti and prevent divergence.

The &quot;release textures on going invisible&quot; should definitely land where it is, and not behind a CCSetting. Again, over time this should just automagically work. A CCSetting is someting that, from my pov, is not a way to hide device-specific configs but rather overall features of our compositor.&quot; &quot;Small Footprint Mode&quot; I&apos;m fine with, for xample.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513462</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 21:19:33 -0800</bug_when>
    <thetext>Keep in mind that the only reason the various limits are in TextureManager.cpp at all is for namespacing and the fact that it needed to go somewhere.  All of the logic in TextureManager itself depends on the initial memory limit set in the constructor and on the setMemoryLimitBytes() API calls.  With that in mind...

(In reply to comment #8)
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:41
&gt; &gt;&gt; +    // Since most textures will need alpha, this assumes 32-bit textures (4 bytes-per-pixel).
&gt; &gt; 
&gt; &gt; The tile assumption makes a lot of sense for the contents texture manager since it manages mostly tiled layers, but it doesn&apos;t really make much sense for the render surface manager since it never deals with tiles. Do you think we should have different limits for these cases?
&gt; 
&gt; This function doesn&apos;t have to be used for all TextureManagers. Doesn&apos;t that manager set it&apos;s limits based on the remaining memory from another manager?

TextureManagers do not set their limits.  CCLayerTreeHostImpl adjusts the limits for the render surface TextureManager based on the memory used for content textures:
http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp&amp;exact_package=chromium&amp;q=m_renderSurfaceTextureManager&amp;type=cs&amp;l=307
 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:42
&gt; &gt;&gt;&gt; +    return viewportMultiplier * 4 * 256 * 256 * ((viewportSize.width() + 255) / 256 + 1) * ((viewportSize.height() + 255) / 256 + 1);
&gt; &gt;&gt; 
&gt; &gt;&gt; I think rather than hardcoding 4bytes/pixel here we should re-use the memoryUseBytes() function. That function also currently also hardcodes 4 bytes/pixel but at least that way we can only hardcode it once and update it if we ever start using other texture formats.
&gt; &gt; 
&gt; &gt; No, no.  The TextureManager definitely supports different formats these days, so we should use the memoryUseBytes function.
&gt; &gt; 
&gt; &gt; Also, please don&apos;t hardcode the tile size.  If you&apos;re going to use it, then expose it from TiledLayerChromium (if it&apos;s not already).
&gt; 
&gt; Since the TextureManager supports different formats (even at the same time), I considered memoryUseBytes. But what is the best size when multiple formats are being used at once? I would also say that changes to memoryUseBytes shouldn&apos;t implicitly change this function unless we explicitly decide we want to also change the memory limit.
&gt; 
&gt; Regarding tiles size, I got a bit carried away given the observation that 256x256 tiles are used in practice, but the goal here wasn&apos;t to use the tile size, but rather the viewport size. I don&apos;t think it&apos;s really useful to use the tile size in the general case. Perhaps just rounding to the nearest megabyte would be better if you want less magic numbers?

I was thinking that the multiplier on the viewport size would be plenty of &apos;magic&apos;. Keep in mind that we will pretty much always have some textures that aren&apos;t 256x256 tiles (scrollbars, sublayers, etc) so rounding to a tile size multiple will in practice pretty much never result in the memory limit fitting actual texture use exactly.

&gt; &gt; 
&gt; &gt; rather than hardcoding this, should memoryLimitBytes() take a max values? I&apos;m assuming that you expect this to be lower than 8*viewport, correct?
&gt; 
&gt; Do you mean the hard-coding of 32MB above?  In any case having a max value is probably good idea.
&gt; &gt; 
&gt; &gt; I think we want to use a memory cap here as well even on desktop.
&gt; 
&gt; Do you mean a maximum in addition to the current curve, or just a straight constant?

I mean having a max value for these calculation.

&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:57
&gt; &gt;&gt;&gt;      // Absolute maximum limit for texture allocations for this instance.
&gt; &gt;&gt; 
&gt; &gt;&gt; at this point having these all be statics isn&apos;t quite so useful. what about having the viewport size be the thing we set on the TextureManager and it can internally set these limits?
&gt; &gt; 
&gt; &gt; Very much agreed.
&gt; 
&gt; Having these be non-static makes sense, especially since the TextureManager will eventually need to know these values internally. However, I don&apos;t really like the texture manager having a viewport member (what if we use this class for a different purpose that no relationship to the viewport). 
&gt; 
&gt; Perhaps this class should just have setters/getters and the logic can be applied by the caller if that is what is desired.

We have a setter on TextureManager for the memory limit.  We don&apos;t need more setters on TextureManager.

I think the current situation is that we want the TextureManager&apos;s limits to scale with the viewport size, modulo some floors and ceilings.  We also want to be able to adjust the scaling factor and possibly limits for some platforms.  We also need a way to evict all textures when going invisible but we already have that.

So with those goals in mind I think allowing for setting a viewport size multiplier and absolute memory cap on CCSettings should suffice.  We can set the reclaim limit to be 50% of the viewport and absolute caps, and the low limit to be 5% of the absolute cap.  This will match current behavior pretty closely for desktop platforms and provide enough flexibility for other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513463</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 21:20:30 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; b) I&apos;m not sure that puttging texture limits on ccsettings makes sense. Again, this bakes into our settings api the idea that there is a per-CCLayerTreeHost memory budget. If we ever go to a more global memory mgmt strategy, which I think makes a TON of sense, then we&apos;re going to have to unwind this spaghetti.
&gt; 

What do you think about putting the limit stuff on CCLayerTreeHost instead of CCSettings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513465</commentid>
    <comment_count>12</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-01 21:26:41 -0800</bug_when>
    <thetext>Actually, there&apos;s a better way to do the &apos;drop tiles on going invisible&apos;:
https://bugs.webkit.org/show_bug.cgi?id=72956

If we just commit an upstream #if OS(ANDROID) to chrome&apos;s feature_info.cc bit where it decides to advertise having a preserving frontbuffer, then you should get the benefits of that patch.

Or my memory serves me wrong. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514184</commentid>
    <comment_count>13</comment_count>
      <attachid>117699</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 14:48:42 -0800</bug_when>
    <thetext>Created attachment 117699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514198</commentid>
    <comment_count>14</comment_count>
      <attachid>117699</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 14:56:26 -0800</bug_when>
    <thetext>Comment on attachment 117699
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:311
&gt; +    reclaimLimit = std::max&lt;size_t&gt;(0, reclaimLimit - contentsMemoryUseBytes);

silly webkit style nit time - the WebKit style guide says for this you are supposed to instead add a

using namespace std;

declaration at the top of the .cpp and call max() without any std:: prefix. LayerRendererChromium.cpp already has the using declaration so all you need to do here is drop the std:: prefix

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:41
&gt; +    IntSize resolution = viewportSize;

something seems amiss here - this local is created, and it&apos;s set in the #if OS(ANDROID) block, but it&apos;s never actually used. Did you mean to pass this to TextureMemoryUseBytes() on line 47?

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:47
&gt; +    return std::min(maxLimitMegabytes * 1024 * 1024, viewportMultiplier * TextureManager::memoryUseBytes(viewportSize, GraphicsContext3D::RGBA));

same comment as above - drop the std:: and add a &apos;using namespace std&apos; declaration at the top of the .cpp if this needs one

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:85
&gt; +    // FIXME: Use non-zero once discardAllTextures or something similar is working on Android.

I think this is working today - if not could you find/file the appropriate bugs.webkit.org bug and put a link to it in this comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514200</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 14:56:55 -0800</bug_when>
    <thetext>This approach works for me! I don&apos;t think some of the OS(ANDROID) logic will work as you intend, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514204</commentid>
    <comment_count>16</comment_count>
      <attachid>117701</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 14:58:39 -0800</bug_when>
    <thetext>Created attachment 117701
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514206</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 14:59:54 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=117701) [details]
&gt; Patch

this patch still has std::&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514230</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 15:36:06 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Created an attachment (id=117701) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; this patch still has std::&apos;s

The other patch was already on route when I got your comment. Uploading now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514233</commentid>
    <comment_count>19</comment_count>
      <attachid>117705</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 15:41:13 -0800</bug_when>
    <thetext>Created attachment 117705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514240</commentid>
    <comment_count>20</comment_count>
      <attachid>117705</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 15:48:28 -0800</bug_when>
    <thetext>Comment on attachment 117705
Patch

Attachment 117705 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10728179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514255</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 16:05:43 -0800</bug_when>
    <thetext>Rebasing

(In reply to comment #20)
&gt; (From update of attachment 117705 [details])
&gt; Attachment 117705 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/10728179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514273</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 16:46:57 -0800</bug_when>
    <thetext>As expected we now need:

a.) The reclaim limit added as a member to TextureManager, or
b.) The viewport added to TextureManager (by which it can calculate reclaim limit) in requestTexture.

I&apos;m in favor of a.) but happy to do b.) if that is what is desired. 

(In reply to comment #21)
&gt; Rebasing
&gt; 
&gt; (In reply to comment #20)
&gt; &gt; (From update of attachment 117705 [details] [details])
&gt; &gt; Attachment 117705 [details] [details] did not pass chromium-ews (chromium-xvfb):
&gt; &gt; Output: http://queues.webkit.org/results/10728179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514302</commentid>
    <comment_count>23</comment_count>
      <attachid>117718</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 17:41:07 -0800</bug_when>
    <thetext>Created attachment 117718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514310</commentid>
    <comment_count>24</comment_count>
      <attachid>117718</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 17:50:12 -0800</bug_when>
    <thetext>Comment on attachment 117718
Patch

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

Sorry, this has a bad math error that I should have caught sooner.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:308
&gt; +    size_t maxLimit = max&lt;size_t&gt;(0, TextureManager::highLimitBytes(viewportSize()) - contentsMemoryUseBytes);
&gt; +    size_t reclaimLimit = max&lt;size_t&gt;(0, TextureManager::reclaimLimitBytes(viewportSize()) - contentsMemoryUseBytes);

wait a second, are you sure this does what you expect it does? TextureManager::reclaimLimitBytes() returns a size_t, which is an unsigned type. contentsMemoryUseBytes is an unsigned type. The binary &quot;-&quot; operator is thus run as an unsigned operation. So if we had, for instance. a reclaimLimitBytes of 5 and a contentsMemoryUseBytes of 12 - the output of this operation when size_t is 64 bits would be 2^64-8 and the max of 0, 2^64-8 would be 2^64-8 - not zero.

The way this code was structured before was deliberate to avoid this overflow issue.  The fact that this bug is here also makes me wonder how much testing this logic has received.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514318</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 17:59:19 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 117718 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117718&amp;action=review
&gt; 
&gt; Sorry, this has a bad math error that I should have caught sooner.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:308
&gt; &gt; +    size_t maxLimit = max&lt;size_t&gt;(0, TextureManager::highLimitBytes(viewportSize()) - contentsMemoryUseBytes);
&gt; &gt; +    size_t reclaimLimit = max&lt;size_t&gt;(0, TextureManager::reclaimLimitBytes(viewportSize()) - contentsMemoryUseBytes);
&gt; 
&gt; wait a second, are you sure this does what you expect it does? TextureManager::reclaimLimitBytes() returns a size_t, which is an unsigned type. contentsMemoryUseBytes is an unsigned type. The binary &quot;-&quot; operator is thus run as an unsigned operation. So if we had, for instance. a reclaimLimitBytes of 5 and a contentsMemoryUseBytes of 12 - the output of this operation when size_t is 64 bits would be 2^64-8 and the max of 0, 2^64-8 would be 2^64-8 - not zero.
&gt; 
&gt; The way this code was structured before was deliberate to avoid this overflow issue.  The fact that this bug is here also makes me wonder how much testing this logic has received.

That&apos;s a great point. I think I had max&lt;int&gt; in a prior iteration. I still like the reduced code lines though, but I can change back to if-statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514324</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 18:02:23 -0800</bug_when>
    <thetext>It&apos;s tricky to do this sort of thing in C++. I originally wrote this with ternary statements but the lines got really long (especially since the variable names are long) which is why I went the the if/else blocks. If you find something that looks nicer I&apos;m all for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514325</commentid>
    <comment_count>27</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 18:03:08 -0800</bug_when>
    <thetext>Another possibility is to switch over to ssize_t everywhere (assuming that&apos;s supported - I assume it would be).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514327</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 18:05:56 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Another possibility is to switch over to ssize_t everywhere (assuming that&apos;s supported - I assume it would be).

Wouldn&apos;t a simple cast to int work assuming both are reasonable sized?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514331</commentid>
    <comment_count>29</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-02 18:08:54 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; Another possibility is to switch over to ssize_t everywhere (assuming that&apos;s supported - I assume it would be).
&gt; 
&gt; Wouldn&apos;t a simple cast to int work assuming both are reasonable sized?

Yes, assuming we&apos;re careful about any subsequent comparisons or operations with unsigned variables (since C/C++ will not-so-usefully typically &quot;promote&quot; to unsigned in mixed expression). How about we go back to the if/else or equivalent structure for now and then we can do an examination of our types later on if it&apos;s deemed worthwhile?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514365</commentid>
    <comment_count>30</comment_count>
      <attachid>117733</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-02 18:50:23 -0800</bug_when>
    <thetext>Created attachment 117733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514379</commentid>
    <comment_count>31</comment_count>
      <attachid>117733</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-02 19:35:42 -0800</bug_when>
    <thetext>Comment on attachment 117733
Patch

Attachment 117733 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10733223</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515267</commentid>
    <comment_count>32</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-05 12:07:57 -0800</bug_when>
    <thetext>I thought of a basic example to illustrate the single viewport multiplier causing problems:

For a small viewport of 270x270, we would need ~8.1X the viewport memory just to support one visible layer (9 256x256 tiles). If we set the memory limit large enough to support 3 layers (~24X) we would quickly hit maximum limit for larger viewports. This problem diminishes as the viewport gets larger, but it is still biased even at more reasonable sizes. If anything I think the memory limit should be biased the opposite way.

The code that rounded up the viewport dimensions took care of this. Of course, other random sized textures could eat into the memory limit, but at least we start at right amount of memory to support N viewports.

We could add tile size as an additional parameter to all the memory limit functions, but I&apos;m wondering whether the plumbing required is justified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515272</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 12:17:04 -0800</bug_when>
    <thetext>What about just having fixed floors in addition to maximums?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515285</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-05 12:24:37 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; What about just having fixed floors in addition to maximums?

A fixed floor on the resolution would help. But only up to when we hit that floor size, at which point we will have the same bias (although diminished by the time we hit the floor).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515322</commentid>
    <comment_count>35</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 12:53:00 -0800</bug_when>
    <thetext>Note that for tiles that are actually visible, the texture limit doesn&apos;t matter since they will be protected every frame.  It&apos;s only relevant for just-barely-offscreen tiles.

I don&apos;t feel we need to get this curve completely perfect. There are cases that will break pretty much any scheme we can come up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515334</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-05 13:11:54 -0800</bug_when>
    <thetext>TiledLayerChromium calls ManagedTexture::reserve() which can fail at the maximum memory limit. The small viewport case I described exceeds not only the reclaim limit but also the maximum limit, even though the viewport multiplier was 8X.

In any case, I&apos;ll change it to just clamp to min/max megabytes as it seems this is what you have in mind.

(In reply to comment #35)
&gt; Note that for tiles that are actually visible, the texture limit doesn&apos;t matter since they will be protected every frame.  It&apos;s only relevant for just-barely-offscreen tiles.
&gt; 
&gt; I don&apos;t feel we need to get this curve completely perfect. There are cases that will break pretty much any scheme we can come up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515434</commentid>
    <comment_count>37</comment_count>
      <attachid>117945</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-05 15:07:21 -0800</bug_when>
    <thetext>Created attachment 117945
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515505</commentid>
    <comment_count>38</comment_count>
      <attachid>117945</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 16:59:51 -0800</bug_when>
    <thetext>Comment on attachment 117945
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:313
&gt; +    if (maxLimit &gt; contentsMemoryUseBytes)
&gt; +        m_renderSurfaceTextureManager-&gt;setMaxMemoryLimitBytes(maxLimit - contentsMemoryUseBytes);
&gt;      else
&gt; +        m_renderSurfaceTextureManager-&gt;setMaxMemoryLimitBytes(0);

How could the contents memory use be bigger than the max memory limit? The high memory limit is called that because we should never exceed it. I think this should be an ASSERT() but not an actual code branch.

We do need this logic for the reclaim limit since the contents memory can (and will) exceed the reclaim limit if the currently visible contents take more memory than the reclaim limit.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:322
&gt; +        m_renderSurfaceTextureManager-&gt;setPreferredMemoryLimitBytes(reclaimLimit - contentsMemoryUseBytes);
&gt; +        m_renderSurfaceTextureManager-&gt;reduceMemoryToLimit(reclaimLimit - contentsMemoryUseBytes);
&gt; +    } else {
&gt; +        m_renderSurfaceTextureManager-&gt;setPreferredMemoryLimitBytes(0);
&gt;          m_renderSurfaceTextureManager-&gt;reduceMemoryToLimit(0);

rather than having to make 2 calls here could we have reduceMemoryToLimit() set the preferred memory limit implicitly, or have setPreferredMemoryLimitBytes() implicitly reduce the memory limit to that size? it doesn&apos;t seem very useful to have two separate calls for this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515530</commentid>
    <comment_count>39</comment_count>
      <attachid>117945</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-05 17:26:03 -0800</bug_when>
    <thetext>Comment on attachment 117945
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:313
&gt;&gt; +        m_renderSurfaceTextureManager-&gt;setMaxMemoryLimitBytes(0);
&gt; 
&gt; How could the contents memory use be bigger than the max memory limit? The high memory limit is called that because we should never exceed it. I think this should be an ASSERT() but not an actual code branch.
&gt; 
&gt; We do need this logic for the reclaim limit since the contents memory can (and will) exceed the reclaim limit if the currently visible contents take more memory than the reclaim limit.

Hmm, TextureManager doesn&apos;t explicitly protect against going over the limit. However, after a search it look like only one place calls protectTexture, and that checks the limit and fails. So it looks like an ASSERT good. I&apos;ll change it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:322
&gt;&gt;          m_renderSurfaceTextureManager-&gt;reduceMemoryToLimit(0);
&gt; 
&gt; rather than having to make 2 calls here could we have reduceMemoryToLimit() set the preferred memory limit implicitly, or have setPreferredMemoryLimitBytes() implicitly reduce the memory limit to that size? it doesn&apos;t seem very useful to have two separate calls for this

See CCLayerTreeHost::setViewport below.  At that point we know what the new preferred limit is, so we should update the member variable (so TextureManager::requestTexture will work correctly).  But at that time we do not want to reduce the memory to the preferred limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515535</commentid>
    <comment_count>40</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 17:33:04 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; 
&gt; See CCLayerTreeHost::setViewport below.  At that point we know what the new preferred limit is, so we should update the member variable (so TextureManager::requestTexture will work correctly).  But at that time we do not want to reduce the memory to the preferred limit.

Why don&apos;t we want to reduce memory use at that point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515547</commentid>
    <comment_count>41</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 17:44:36 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; 
&gt; See CCLayerTreeHost::setViewport below.  At that point we know what the new preferred limit is, so we should update the member variable (so TextureManager::requestTexture will work correctly).  But at that time we do not want to reduce the memory to the preferred limit.

Why don&apos;t we want to reduce memory use at that point? That seems like a good thing to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515576</commentid>
    <comment_count>42</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-05 18:25:28 -0800</bug_when>
    <thetext>I&apos;m assuming SetViewport could happen at any time. So if it&apos;s okay to reduce to reclaim limit at any time then sure. I thought it was something we did at a set time in the frame. 

(In reply to comment #41)
&gt; (In reply to comment #39)
&gt; &gt; 
&gt; &gt; See CCLayerTreeHost::setViewport below.  At that point we know what the new preferred limit is, so we should update the member variable (so TextureManager::requestTexture will work correctly).  But at that time we do not want to reduce the memory to the preferred limit.
&gt; 
&gt; Why don&apos;t we want to reduce memory use at that point? That seems like a good thing to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515583</commentid>
    <comment_count>43</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-05 18:42:09 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; I&apos;m assuming SetViewport could happen at any time. So if it&apos;s okay to reduce to reclaim limit at any time then sure.

It is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515662</commentid>
    <comment_count>44</comment_count>
      <attachid>117990</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-05 22:45:56 -0800</bug_when>
    <thetext>Created attachment 117990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515711</commentid>
    <comment_count>45</comment_count>
      <attachid>117990</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-06 00:37:43 -0800</bug_when>
    <thetext>Comment on attachment 117990
Patch

Thanks for persisting. I think this looks great now - R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515767</commentid>
    <comment_count>46</comment_count>
      <attachid>117990</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-06 03:05:18 -0800</bug_when>
    <thetext>Comment on attachment 117990
Patch

Clearing flags on attachment: 117990

Committed r102115: &lt;http://trac.webkit.org/changeset/102115&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515768</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-06 03:05:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517545</commentid>
    <comment_count>48</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 10:46:24 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517546</commentid>
    <comment_count>49</comment_count>
      <attachid>118420</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 10:46:26 -0800</bug_when>
    <thetext>Created attachment 118420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517547</commentid>
    <comment_count>50</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2011-12-08 10:48:18 -0800</bug_when>
    <thetext>Ack! ignore the last patch. Wrong bug number.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114813</attachid>
            <date>2011-11-11 18:59:09 -0800</date>
            <delta_ts>2011-11-30 20:51:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111111185907.patch</filename>
            <type>text/plain</type>
            <size>9050</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwMDYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDFkMGVkODdlYjQ5NzBm
MTNmYzRjZTRlMjRlMDZiNWEzOTRhY2FiNi4uM2UxYmZkNjZjNzJmOWVmYjViYTZiOTM1OTZkYWE4
NjAxZDg2ZTIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4IEBACiAyMDExLTExLTExICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBT
ZXQgdGV4dHVyZSBsaW1pdHMgYXMgbXVsdGlwbGVzIG9mIHZpZXdwb3J0IHNpemUgaW5zdGVhZCBv
ZiBoYXJkY29kZWQgdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MjIwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3Bv
cnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRp
YWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6
aGlnaExpbWl0Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlY2xh
aW1MaW1pdEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpUZXh0dXJl
TWFuYWdlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1h
bmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpjcmVhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhyZWFk
KToKKworMjAxMS0xMS0xMSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgor
CiAgICAgICAgIFJvbGxvdXQgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTk4NDQK
ICAgICAgICAgU29sdXRpb24gaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSBwcm9ibGVtIGl0
IHdhcyBpbnRlbmRlZCB0byBzb2x2ZS4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKaW5kZXggNjU2YTI4NmU4ZjdjMzExNWVlNmI5YmYwMDM2YmFhN2RhOTcyN2RjYy4uYWUw
NzM3MDgxZDUwZGRjODczMGE0YTQ0MmY3MTAwNWZkYTFiYTRkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0yNzUsNiArMjc1LDggQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCiAgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQg
cmVuZGVyIHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKICAg
ICAvLyBwcm9qZWN0aW9uIG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxs
ZWQuCiAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7CisKKyAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6cmVj
bGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnMoKQpAQCAtMjg4LDExICsyOTAsMTEgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXpl
X3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLT5j
dXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
ci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAt
IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2
aWV3cG9ydFNpemUoKSkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKICAgICBkcmF3TGF5ZXJz
SW50ZXJuYWwoKTsKIAotICAgIGlmIChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMo
KSA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGlt
aXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CisgICAgaWYgKFRleHR1cmVNYW5h
Z2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkgPiBjb250ZW50c01lbW9yeVVz
ZUJ5dGVzKQorICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVt
b3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CiAgICAgZWxzZQogICAgICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKICAgICBtX3Jl
bmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwpAQCAtNjYzLDcgKzY2NSw3IEBAIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5h
Z2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7Cisg
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICBtX2NvbnRlbnRzVGV4dHVyZUFs
bG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQo
KSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggYzYwMGQ5ZTY0OTFkN2QxZTc1NzIyMjE0ZTMxOWRh
N2YwYzE4ODRjZS4uOTBmMzNlODhmMzVmZTNkMTA0NDMwMzZhNGYzODAzNjNkMWE5ZDlhMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpCitzaXpl
X3QgVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0
U2l6ZSkKIHsKLSAgICByZXR1cm4gMTI4ICogMTAyNCAqIDEwMjQ7CisgICAgcmV0dXJuIDggKiB2
aWV3cG9ydFNpemUud2lkdGgoKSAqIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSAqIDQ7CiB9CiAKLXNp
emVfdCBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKQorc2l6ZV90IFRleHR1cmVN
YW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7
Ci0gICAgcmV0dXJuIDY0ICogMTAyNCAqIDEwMjQ7CisgICAgcmV0dXJuIDQgKiB2aWV3cG9ydFNp
emUud2lkdGgoKSAqIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSAqIDQ7CiB9CiAKIHNpemVfdCBUZXh0
dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcygpCkBAIC02MCw4ICs2MCw4IEBAIHNpemVfdCBUZXh0
dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0g
dGV4dHVyZUZvcm1hCiB9CiAKIAotVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVf
dCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCi0gICAgOiBtX21lbW9yeUxp
bWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRlcykKK1RleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFuYWdl
cihpbnQgbWF4VGV4dHVyZVNpemUpCisgICAgOiBtX21lbW9yeUxpbWl0Qnl0ZXMoMCkKICAgICAs
IG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWF4VGV4dHVyZVNpemUobWF4VGV4dHVyZVNp
emUpCiAgICAgLCBtX25leHRUb2tlbigxKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXggZjMyN2I0
Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIwZjIwOC4uNWJlYzdlYWNjZTBiZWRlOTFiMmNm
ZjEwOTNiYTJmMDhkZWM4YjI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC00OSwxNSArNDks
MTUgQEAgcHJvdGVjdGVkOgogY2xhc3MgVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFRleHR1cmVNYW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4
VGV4dHVyZVNpemUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+IGNyZWF0
ZShpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFRleHR1cmVNYW5hZ2VyKG1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFnZXIobWF4VGV4dHVyZVNpemUpKTsK
ICAgICB9CiAKLSAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9j
YXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgotICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0
ZXMoKTsKLSAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVk
ZWQgaWYgbmVlZGVkLgotICAgIHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAg
ICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciBh
IGdpdmVuIHZpZXdwb3J0IHNpemUuCisgICAgc3RhdGljIHNpemVfdCBoaWdoTGltaXRCeXRlcyhj
b25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOworICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJlIHNp
emUgbGltaXQgZm9yIGEgZ2l2ZW4gdmlld3BvcnQgc2l6ZS4gQ2FuIGJlIGV4Y2VlZGVkIGlmIG5l
ZWRlZC4KKyAgICBzdGF0aWMgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSk7CiAgICAgLy8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ug
d2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1cmVzLgogICAgIHN0YXRpYyBzaXplX3QgbG93TGlt
aXRCeXRlcygpOwogCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgY3VycmVu
dE1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsgfQogCiBw
cml2YXRlOgotICAgIFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQg
bWF4VGV4dHVyZVNpemUpOworICAgIGV4cGxpY2l0IFRleHR1cmVNYW5hZ2VyKGludCBtYXhUZXh0
dXJlU2l6ZSk7CiAKICAgICBzdHJ1Y3QgVGV4dHVyZUluZm8gewogICAgICAgICBJbnRTaXplIHNp
emU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA0ZjJjMWZiNjI2NGVlN2Mz
YTllNjE3NTM3YTAyODk4MmY4YWIzM2ZlLi5jMjJjMGQxMmMyNTc5YTA1ZmUyYTYyOTFmZDllMmM3
MDRlNDA3NTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTg1LDcgKzg1
LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogICAgIC8vIFVwZGF0ZSBt
X3NldHRpbmdzIGJhc2VkIG9uIGNhcGFiaWxpdGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhl
IHJlbmRlcmVyLgogICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gbV9wcm94eS0+
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsKIAot
ICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4
dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
ID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTcsNyAr
MTE3LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0
aGlzLCAwKTsKIAotICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9M
aW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CisgICAgY29udGVudHNU
ZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNs
YWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkpOwogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxv
Y2F0b3IoKSk7CiB9CiAKQEAgLTIyNiw2ICsyMjYsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c2V0TmVlZHNSZWRyYXcoKQogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0
IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKICAgICBtX3ZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0
U2l6ZTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQo
VGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSkpOwogICAgIHNldE5l
ZWRzQ29tbWl0KCk7CiB9CiAKQEAgLTI2OCw3ICsyNjksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVj
b21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQog
ewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgY29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWlt
TGltaXRCeXRlcygpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9y
eVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgp
KSk7CiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMo
aG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117320</attachid>
            <date>2011-11-30 20:51:40 -0800</date>
            <delta_ts>2011-12-02 14:48:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111130205139.patch</filename>
            <type>text/plain</type>
            <size>8890</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uZDFjZmI4ZTc0OTI1ZjJjOTMyMzZmMWY1NjkyNmYw
ZTJmYjdlNmI2MyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTExLTMwICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1lbW9yeUxpbWl0Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
bmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2Vy
OjpyZWNsYWltTGltaXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6
bG93TGltaXRCeXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4
dHVyZU1hbmFnZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21t
aXRPbkltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52
aXNpYmxlT25JbXBsVGhyZWFkKToKKwogMjAxMS0xMS0yOCAgVGltb3RoeSBIYXRjaGVyICA8dGlt
b3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGtub3dpbmcgd2hlbiBh
IFRyZWVFbGVtZW50IGlzIGFkZGVkIG9yIGNoYW5nZWQgYW55d2hlcmUgaW4gYSBUcmVlT3V0bGlu
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGViYzM5NGM0YzVk
YWQzMTZjY2RiZGE2MTU1MjRlZjkwN2EyNDA1NmIuLmRhMDA1YmEwNWIyMjFlOWRkNTc5OGQ4MmM3
MTI0YTZkMTZjMTI5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApA
QCAtMzA0LDEzICszMDQsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRl
cyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsK
LSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhU
ZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMp
OworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVz
KFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkgLSBjb250ZW50
c01lbW9yeVVzZUJ5dGVzKTsKICAgICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKIAotICAgIGlmIChU
ZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlU
b0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpIC0gY29udGVudHNNZW1v
cnlVc2VCeXRlcyk7Ci0gICAgZWxzZQotICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFu
YWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKKyAgICBzaXplX3QgcmVjbGFpbUxpbWl0ID0g
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKTsKKyAgICBy
ZWNsYWltTGltaXQgPSBzdGQ6Om1heDxzaXplX3Q+KDAsIHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRz
TWVtb3J5VXNlQnl0ZXMpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1
Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7CisKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0
dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRleHR1cmVB
bGxvY2F0b3IuZ2V0KCkpOwogCiAgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVu
KQpAQCAtNjY4LDcgKzY2OCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmZsdXNoKCkpOwogCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX2NhcGFi
aWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFn
ZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRl
cyh2aWV3cG9ydFNpemUoKSksIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICBt
X2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3Jl
YXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRv
ciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggYzYwMGQ5ZTY0OTFk
N2QxZTc1NzIyMjE0ZTMxOWRhN2YwYzE4ODRjZS4uZjVmZTlhOTZhZGRjZjYyZmQ2OThiMjM1N2Ez
ZGViZTFjZDJkNzA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzIsMTkgKzMyLDQz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdo
TGltaXRCeXRlcygpCisKK3NpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCB2aWV3cG9ydE11
bHRpcGxpZXIsIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgc2l6ZV90IGRlZmF1bHRMaW1p
dE1lZ2FieXRlcykKK3sKKyAgICBpZiAodmlld3BvcnRTaXplLndpZHRoKCkgKiB2aWV3cG9ydFNp
emUuaGVpZ2h0KCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRMaW1pdE1lZ2FieXRlcyAq
IDEwMjQgKiAxMDI0OworICAgIC8vIFRvIGF2b2lkIHdhc3RpbmcgbWVtb3J5IHJvdW5kIHVwIGFz
c3VtaW5nIHRoZSB2aWV3cG9ydCBzdHJhZGRsZXMgMjU2eDI1NiB0aWxlcyBvbiBib3RoIHNpZGVz
LgorICAgIC8vIFNpbmNlIG1vc3QgdGV4dHVyZXMgd2lsbCBuZWVkIGFscGhhLCB0aGlzIGFzc3Vt
ZXMgMzItYml0IHRleHR1cmVzICg0IGJ5dGVzLXBlci1waXhlbCkuCisgICAgcmV0dXJuIHZpZXdw
b3J0TXVsdGlwbGllciAqIDQgKiAyNTYgKiAyNTYgKiAoKHZpZXdwb3J0U2l6ZS53aWR0aCgpICsg
MjU1KSAvIDI1NiArIDEpICogKCh2aWV3cG9ydFNpemUuaGVpZ2h0KCkgKyAyNTUpIC8gMjU2ICsg
MSk7Cit9CisKK3NpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoY29uc3QgSW50
U2l6ZSYgdmlld3BvcnRTaXplKQogewotICAgIHJldHVybiAxMjggKiAxMDI0ICogMTAyNDsKKyNp
ZiBPUyhBTkRST0lEKQorICAgIHJldHVybiAzMiAqIDEwMjQgKiAxMDI0OworI2Vsc2UKKyAgICBy
ZXR1cm4gbWVtb3J5TGltaXRCeXRlcyg4LCB2aWV3cG9ydFNpemUsIDEyOCk7CisjZW5kaWYKIH0K
IAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpCitzaXplX3QgVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6
ZSkKIHsKLSAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKKyNpZiBPUyhBTkRST0lEKQorICAg
IHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKDMsIHZpZXdwb3J0U2l6ZSwgNik7CisjZWxzZQorICAg
IHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKDQsIHZpZXdwb3J0U2l6ZSwgNjQpOworI2VuZGlmCisK
IH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3NpemVfdCBUZXh0
dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7
Ci0gICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKKyNpZiBPUyhBTkRST0lEKQorICAgIC8vIEhp
ZGRlbiB0YWJzIHNob3VsZCByZWxlYXNlIGFsbCB0aGVpciB0ZXh0dXJlcyBvbiBBbmRyb2lkLgor
ICAgIHJldHVybiAwOworI2Vsc2UKKyAgICByZXR1cm4gbWVtb3J5TGltaXRCeXRlcygxLCB2aWV3
cG9ydFNpemUsIDMpOworI2VuZGlmCiB9CiAKIHNpemVfdCBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5
VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
ZXh0dXJlTWFuYWdlci5oCmluZGV4IGYzMjdiNGNmY2QxYjEwZGFlN2RhZDYzNDYwNGY2NzM5YjUy
MGYyMDguLmJjNzZiZGE4NDQ5MzZkZmNmNWNmYzMyOTE5ZTk0NGE0NTdiY2YxM2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4
dHVyZU1hbmFnZXIuaApAQCAtNTUsMTEgKzU1LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAv
LyBBYnNvbHV0ZSBtYXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlz
IGluc3RhbmNlLgotICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsKLSAgICAvLyBQ
cmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgot
ICAgIHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90
IGhpZ2hMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSk7CisgICAgLy8gUHJl
ZmVycmVkIHRleHR1cmUgc2l6ZSBsaW1pdCBnaXZlbiB0aGUgdmlld3BvcnQgc2l6ZS4KKyAgICBz
dGF0aWMgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6
ZSk7CiAgICAgLy8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0
byByZWxlYXNlIHRleHR1cmVzLgotICAgIHN0YXRpYyBzaXplX3QgbG93TGltaXRCeXRlcygpOwor
ICAgIHN0YXRpYyBzaXplX3QgbG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydCk7
CiAKICAgICBzdGF0aWMgc2l6ZV90IG1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNE
ZW51bSBmb3JtYXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA2Yzhk
YTQ2MWFjZDE3NDEwYTEwMjVlODkzMjU0ZWRhYzAxMTczZWY2Li4zYTUyYTFkN2ZjMWM0YTkzYmFj
MzhhYmJkM2VmMWVlNzAzZGQxYmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogICAg
IG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcygpLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsKICAgICBtX3NldHRpbmdzLmRp
c2NhcmRBbGxUZXh0dXJlcyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51
c2luZ0Zyb250QnVmZmVyQ2FjaGVkOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0g
VGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwg
bV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1
cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksIG1fcHJveHktPmxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21t
aXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOwogCi0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
KTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNv
bnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIAogICAgIG1fdmlzaWJs
ZSA9IHZpc2libGU7CiAgICAgaWYgKCF2aXNpYmxlKSB7Ci0gICAgICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRC
eXRlcygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlU
b0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAg
ICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsK
ICAgICB9CiAKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVj
b21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbQogICAg
IGlmIChtX3NldHRpbmdzLmRpc2NhcmRBbGxUZXh0dXJlcykKICAgICAgICAgY29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50
c1RleHR1cmVBbGxvY2F0b3IoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnRlbnRzVGV4dHVy
ZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxp
bWl0Qnl0ZXMoKSk7CisgICAgICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVt
b3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpKTsKICAgICAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4
dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117699</attachid>
            <date>2011-12-02 14:48:42 -0800</date>
            <delta_ts>2011-12-02 14:58:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111202144841.patch</filename>
            <type>text/plain</type>
            <size>9948</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uZDU3YjBhOTgzMzNjZWIwNzJlOTJjYTY2NWJmYWNl
NjY5ZWQ3ZjZkNyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTEyLTAyICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOiBhZGRpbmcgdmlld3BvcnQgcGFyYW1ldGVyCisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOiBhZGRpbmcgdmlld3BvcnQgcGFyYW1ldGVyCisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRP
YmplY3RzKTogYWRkaW5nIHZpZXdwb3J0IHBhcmFtZXRlcgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcDogY2hhbmdpbmcgaGFyZC1jb2RlZCB2
YWx1ZXMgdG8gdXNlIHZpZXdwb3J0CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6
aGlnaExpbWl0Qnl0ZXMpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6
OnJlY2xhaW1MaW1pdEJ5dGVzKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5h
Z2VyOjpsb3dMaW1pdEJ5dGVzKTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOiBkaXR0bworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6IGFkZGluZyB2aWV3cG9ydCBwYXJh
bWV0ZXIKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6ICBh
ZGRpbmcgdmlld3BvcnQgcGFyYW1ldGVyCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKTogIGFkZGluZyB2aWV3cG9ydCBwYXJhbWV0ZXIK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6ICBhZGRpbmcg
dmlld3BvcnQgcGFyYW1ldGVyCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRp
ZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6ICBhZGRpbmcgdmlld3BvcnQgcGFyYW1ldGVy
CisKIDIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBrbm93aW5nIHdoZW4gYSBUcmVlRWxlbWVudCBpcyBhZGRl
ZCBvciBjaGFuZ2VkIGFueXdoZXJlIGluIGEgVHJlZU91dGxpbmUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBlYmMzOTRjNGM1ZGFkMzE2Y2NkYmRhNjE1NTI0ZWY5
MDdhMjQwNTZiLi5kYTAwNWJhMDViMjIxZTlkZDU3OThkODJjNzEyNGE2ZDE2YzEyOTc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMwNCwxMyArMzA0LDEzIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6OmhpZ2hM
aW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6aGln
aExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CiAg
ICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAKLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xh
aW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdl
cjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGVs
c2UKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRv
TGltaXQoMCk7CisgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNs
YWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7CisgICAgcmVjbGFpbUxpbWl0ID0gc3RkOjpt
YXg8c2l6ZV90PigwLCByZWNsYWltTGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChyZWNs
YWltTGltaXQpOworCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2
aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIAog
ICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2OCw3ICs2NjgsNyBA
QCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQog
CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAotICAgIG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0
dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNp
emUpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLCBt
X2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVBbGxv
Y2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkp
OwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVB
bGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVy
ZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IGM2MDBkOWU2NDkxZDdkMWU3NTcyMjIxNGUzMTlkYTdm
MGMxODg0Y2UuLjYyODBlYWM1Y2IxNDM0MTY0NWEwYjdjYjE1OWFkN2I1ODc5ODFkOGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTMyLDE5ICszMiw2NiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXNpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQorCituYW1l
c3BhY2Ugeworc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IHZpZXdwb3J0TXVsdGlwbGll
ciwgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBzaXplX3QgZGVmYXVsdExpbWl0TWVnYWJ5
dGVzLCBzaXplX3QgbWF4TGltaXRNZWdhYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIDEyOCAqIDEwMjQg
KiAxMDI0OworICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZGVmYXVsdExpbWl0TWVnYWJ5dGVzICogMTAyNCAqIDEwMjQ7CisgICAgSW50U2l6ZSByZXNvbHV0
aW9uID0gdmlld3BvcnRTaXplOworI2lmIE9TKEFORFJPSUQpCisgICAgLy8gVGhpcyB3YXMgZm91
bmQgdG8gYmUgb3B0aW1hbCBpbiBwcmFjdGljZS4gJ251ZmYgc2FpZC4KKyAgICByZXNvbHV0aW9u
LnNldFdpZHRoKDI1NiAqICgodmlld3BvcnRTaXplLndpZHRoKCkgKyAyNTUpIC8gMjU2ICsgMSkp
OworICAgIHJlc29sdXRpb24uc2V0SGVpZ2h0KDI1NiAqICgodmlld3BvcnRTaXplLmhlaWdodCgp
ICsgMjU1KSAvIDI1NiArIDEpKTsKKyNlbmRpZgorICAgIHJldHVybiBzdGQ6Om1pbihtYXhMaW1p
dE1lZ2FieXRlcyAqIDEwMjQgKiAxMDI0LCB2aWV3cG9ydE11bHRpcGxpZXIgKiBUZXh0dXJlTWFu
YWdlcjo6bWVtb3J5VXNlQnl0ZXModmlld3BvcnRTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSkpOworfQogfQogCi1zaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkK
K3NpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmll
d3BvcnRTaXplKQogewotICAgIHJldHVybiA2NCAqIDEwMjQgKiAxMDI0OworICAgIHNpemVfdCB2
aWV3cG9ydE11bHRpcGxpZXIsIGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlczsKKyNpZiBP
UyhBTkRST0lEKQorICAgIHZpZXdwb3J0TXVsdGlwbGllciA9IDg7CisgICAgZGVmYXVsdE1lZ2Fi
eXRlcyA9IDMyOworICAgIG1heE1lZ2FieXRlcyA9IDMyOworI2Vsc2UKKyAgICB2aWV3cG9ydE11
bHRpcGxpZXIgPSA4OworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSAxMjg7CisgICAgbWF4TWVnYWJ5
dGVzID0gMTI4OworI2VuZGlmCisgICAgcmV0dXJuIG1lbW9yeUxpbWl0Qnl0ZXModmlld3BvcnRN
dWx0aXBsaWVyLCB2aWV3cG9ydFNpemUsIGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7
CiB9CiAKLXNpemVfdCBUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcygpCitzaXplX3QgVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6
ZSkKIHsKLSAgICByZXR1cm4gMyAqIDEwMjQgKiAxMDI0OworICAgIHNpemVfdCB2aWV3cG9ydE11
bHRpcGxpZXIsIGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlczsKKyNpZiBPUyhBTkRST0lE
KQorICAgIHZpZXdwb3J0TXVsdGlwbGllciA9IDM7CisgICAgZGVmYXVsdE1lZ2FieXRlcyA9IDY7
CisgICAgbWF4TWVnYWJ5dGVzID0gMzI7CisjZWxzZQorICAgIHZpZXdwb3J0TXVsdGlwbGllciA9
IDQ7CisgICAgZGVmYXVsdE1lZ2FieXRlcyA9IDY0OworICAgIG1heE1lZ2FieXRlcyA9IDY0Owor
I2VuZGlmCisgICAgcmV0dXJuIG1lbW9yeUxpbWl0Qnl0ZXModmlld3BvcnRNdWx0aXBsaWVyLCB2
aWV3cG9ydFNpemUsIGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7Cit9CisKK3NpemVf
dCBUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNp
emUpCit7CisgICAgc2l6ZV90IHZpZXdwb3J0TXVsdGlwbGllciwgZGVmYXVsdE1lZ2FieXRlcywg
bWF4TWVnYWJ5dGVzOworI2lmIE9TKEFORFJPSUQpCisgICAgLy8gRklYTUU6IFVzZSBub24temVy
byBvbmNlIGRpc2NhcmRBbGxUZXh0dXJlcyBvciBzb21ldGhpbmcgc2ltaWxhciBpcyB3b3JraW5n
IG9uIEFuZHJvaWQuCisgICAgdmlld3BvcnRNdWx0aXBsaWVyID0gMDsKKyAgICBkZWZhdWx0TWVn
YWJ5dGVzID0gMDsKKyAgICBtYXhNZWdhYnl0ZXMgPSAwOworI2Vsc2UKKyAgICB2aWV3cG9ydE11
bHRpcGxpZXIgPSAxOworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSAzOworICAgIG1heE1lZ2FieXRl
cyA9IDM7CisjZW5kaWYKKyAgICByZXR1cm4gbWVtb3J5TGltaXRCeXRlcyh2aWV3cG9ydE11bHRp
cGxpZXIsIHZpZXdwb3J0U2l6ZSwgZGVmYXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzKTsKIH0K
IAogc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRTaXplJiBz
aXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXggZjMy
N2I0Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIwZjIwOC4uYmM3NmJkYTg0NDkzNmRmY2Y1
Y2ZjMzI5MTllOTQ0YTQ1N2JjZjEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC01NSwxMSAr
NTUsMTEgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFic29sdXRlIG1heGltdW0gbGltaXQg
Zm9yIHRleHR1cmUgYWxsb2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuCi0gICAgc3RhdGljIHNp
emVfdCBoaWdoTGltaXRCeXRlcygpOwotICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJlIHNpemUgbGlt
aXQuIENhbiBiZSBleGNlZWRlZCBpZiBuZWVkZWQuCi0gICAgc3RhdGljIHNpemVfdCByZWNsYWlt
TGltaXRCeXRlcygpOworICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoY29uc3QgSW50
U2l6ZSYgdmlld3BvcnRTaXplKTsKKyAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXplIGxpbWl0
IGdpdmVuIHRoZSB2aWV3cG9ydCBzaXplLgorICAgIHN0YXRpYyBzaXplX3QgcmVjbGFpbUxpbWl0
Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsKICAgICAvLyBUaGUgbWF4aW11bSB0
ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMuCi0gICAg
c3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7CisgICAgc3RhdGljIHNpemVfdCBsb3dMaW1p
dEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0KTsKIAogICAgIHN0YXRpYyBzaXplX3QgbWVt
b3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDZjOGRhNDYxYWNkMTc0MTBhMTAyNWU4OTMyNTRl
ZGFjMDExNzNlZjYuLjNhNTJhMWQ3ZmMxYzRhOTNiYWMzOGFiYmQzZWYxZWU3MDNkZDFiYzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtODQsNyArODQsNyBAQCBib29sIEND
TGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFp
bnRpbmcgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdBY2NlbGVy
YXRlZFBhaW50aW5nOwogICAgIG1fc2V0dGluZ3MuZGlzY2FyZEFsbFRleHR1cmVzID0gbV9wcm94
eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nRnJvbnRCdWZmZXJDYWNoZWQ7CiAK
LSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRl
eHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVz
KHZpZXdwb3J0U2l6ZSgpKSwgbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1h
eFRleHR1cmVTaXplKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTE2LDcgKzExNiw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkp
OwogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvIiwgdGhpcywgMCk7
CiAKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4
dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0
Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkp
OwogfQogCkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2li
bGUoYm9vbCB2aXNpYmxlKQogCiAgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKICAgICBpZiAoIXZp
c2libGUpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlU
b0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkpOworICAgICAgICBtX2NvbnRl
bnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6Omxv
d0xpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgbV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIH0KIApAQCAtMjY5LDcgKzI2OSw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRCZWNvbWVJbnZpc2libGVPbkltcGxUaHJlYWQo
Q0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltCiAgICAgaWYgKG1fc2V0dGluZ3MuZGlzY2FyZEFs
bFRleHR1cmVzKQogICAgICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmV2aWN0QW5kRGVs
ZXRlQWxsVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlU
b0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpKTsKKyAgICAgICAgY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2Vy
OjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkpOwogICAgICAgICBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNU
ZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117701</attachid>
            <date>2011-12-02 14:58:39 -0800</date>
            <delta_ts>2011-12-02 15:41:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111202145838.patch</filename>
            <type>text/plain</type>
            <size>9667</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uMDA4ZjJmYTU1NDNjOTE5OTM3ZDc5NmM5MTBkNTVi
YWVjMjU3MTJkOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTEyLTAyICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpoaWdoTGlt
aXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0
Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRo
cmVhZCk6CisKIDIwMTEtMTEtMjggIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBrbm93aW5nIHdoZW4gYSBUcmVlRWxlbWVudCBp
cyBhZGRlZCBvciBjaGFuZ2VkIGFueXdoZXJlIGluIGEgVHJlZU91dGxpbmUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBlYmMzOTRjNGM1ZGFkMzE2Y2NkYmRhNjE1
NTI0ZWY5MDdhMjQwNTZiLi5kYTAwNWJhMDViMjIxZTlkZDU3OThkODJjNzEyNGE2ZDE2YzEyOTc5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMwNCwxMyArMzA0
LDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRz
VGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6
OmhpZ2hMaW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpIC0gY29udGVudHNNZW1vcnlVc2VCeXRl
cyk7CiAgICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAKLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6
OnJlY2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJl
TWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1l
bW9yeVRvTGltaXQoMCk7CisgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2Vy
OjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7CisgICAgcmVjbGFpbUxpbWl0ID0g
c3RkOjptYXg8c2l6ZV90PigwLCByZWNsYWltTGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVz
KTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1p
dChyZWNsYWltTGltaXQpOworCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgp
KTsKIAogICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2OCw3ICs2
NjgsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVj
dHMoKQogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAot
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4
dHVyZVNpemUpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgbV9jb250ZW50c1RleHR1
cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1Rl
eHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IGM2MDBkOWU2NDkxZDdkMWU3NTcyMjIxNGUz
MTlkYTdmMGMxODg0Y2UuLmM5ZDZiMzBlNDFjOTIyYTFhYzhhNDM1YWY2ODY0ZjU4ZDllZmJiMTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTMyLDE5ICszMiw2NiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXNpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQor
CituYW1lc3BhY2Ugeworc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IHZpZXdwb3J0TXVs
dGlwbGllciwgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBzaXplX3QgZGVmYXVsdExpbWl0
TWVnYWJ5dGVzLCBzaXplX3QgbWF4TGltaXRNZWdhYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIDEyOCAq
IDEwMjQgKiAxMDI0OworICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZGVmYXVsdExpbWl0TWVnYWJ5dGVzICogMTAyNCAqIDEwMjQ7CisgICAgSW50U2l6ZSBy
ZXNvbHV0aW9uID0gdmlld3BvcnRTaXplOworI2lmIE9TKEFORFJPSUQpCisgICAgLy8gVGhpcyB3
YXMgZm91bmQgdG8gYmUgb3B0aW1hbCBpbiBwcmFjdGljZS4gJ251ZmYgc2FpZC4KKyAgICByZXNv
bHV0aW9uLnNldFdpZHRoKDI1NiAqICgodmlld3BvcnRTaXplLndpZHRoKCkgKyAyNTUpIC8gMjU2
ICsgMSkpOworICAgIHJlc29sdXRpb24uc2V0SGVpZ2h0KDI1NiAqICgodmlld3BvcnRTaXplLmhl
aWdodCgpICsgMjU1KSAvIDI1NiArIDEpKTsKKyNlbmRpZgorICAgIHJldHVybiBzdGQ6Om1pbiht
YXhMaW1pdE1lZ2FieXRlcyAqIDEwMjQgKiAxMDI0LCB2aWV3cG9ydE11bHRpcGxpZXIgKiBUZXh0
dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMocmVzb2x1dGlvbiwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpKTsKK30KIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cygpCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSkKIHsKLSAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKKyAgICBzaXpl
X3Qgdmlld3BvcnRNdWx0aXBsaWVyLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXM7Cisj
aWYgT1MoQU5EUk9JRCkKKyAgICB2aWV3cG9ydE11bHRpcGxpZXIgPSA4OworICAgIGRlZmF1bHRN
ZWdhYnl0ZXMgPSAzMjsKKyAgICBtYXhNZWdhYnl0ZXMgPSAzMjsKKyNlbHNlCisgICAgdmlld3Bv
cnRNdWx0aXBsaWVyID0gODsKKyAgICBkZWZhdWx0TWVnYWJ5dGVzID0gMTI4OworICAgIG1heE1l
Z2FieXRlcyA9IDEyODsKKyNlbmRpZgorICAgIHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKHZpZXdw
b3J0TXVsdGlwbGllciwgdmlld3BvcnRTaXplLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0
ZXMpOwogfQogCi1zaXplX3QgVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoKQorc2l6ZV90
IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9y
dFNpemUpCiB7Ci0gICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKKyAgICBzaXplX3Qgdmlld3Bv
cnRNdWx0aXBsaWVyLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXM7CisjaWYgT1MoQU5E
Uk9JRCkKKyAgICB2aWV3cG9ydE11bHRpcGxpZXIgPSAzOworICAgIGRlZmF1bHRNZWdhYnl0ZXMg
PSA2OworICAgIG1heE1lZ2FieXRlcyA9IDMyOworI2Vsc2UKKyAgICB2aWV3cG9ydE11bHRpcGxp
ZXIgPSA0OworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSA2NDsKKyAgICBtYXhNZWdhYnl0ZXMgPSA2
NDsKKyNlbmRpZgorICAgIHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKHZpZXdwb3J0TXVsdGlwbGll
ciwgdmlld3BvcnRTaXplLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXMpOworfQorCitz
aXplX3QgVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplKQoreworICAgIHNpemVfdCB2aWV3cG9ydE11bHRpcGxpZXIsIGRlZmF1bHRNZWdhYnl0
ZXMsIG1heE1lZ2FieXRlczsKKyNpZiBPUyhBTkRST0lEKQorICAgIC8vIEZJWE1FOiBVc2Ugbm9u
LXplcm8gb25jZSBkaXNjYXJkQWxsVGV4dHVyZXMgb3Igc29tZXRoaW5nIHNpbWlsYXIgaXMgd29y
a2luZyBvbiBBbmRyb2lkLgorICAgIHZpZXdwb3J0TXVsdGlwbGllciA9IDA7CisgICAgZGVmYXVs
dE1lZ2FieXRlcyA9IDA7CisgICAgbWF4TWVnYWJ5dGVzID0gMDsKKyNlbHNlCisgICAgdmlld3Bv
cnRNdWx0aXBsaWVyID0gMTsKKyAgICBkZWZhdWx0TWVnYWJ5dGVzID0gMzsKKyAgICBtYXhNZWdh
Ynl0ZXMgPSAzOworI2VuZGlmCisgICAgcmV0dXJuIG1lbW9yeUxpbWl0Qnl0ZXModmlld3BvcnRN
dWx0aXBsaWVyLCB2aWV3cG9ydFNpemUsIGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7
CiB9CiAKIHNpemVfdCBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCmluZGV4
IGYzMjdiNGNmY2QxYjEwZGFlN2RhZDYzNDYwNGY2NzM5YjUyMGYyMDguLmJjNzZiZGE4NDQ5MzZk
ZmNmNWNmYzMyOTE5ZTk0NGE0NTdiY2YxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaApAQCAtNTUs
MTEgKzU1LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBYnNvbHV0ZSBtYXhpbXVtIGxp
bWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgotICAgIHN0YXRp
YyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsKLSAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBzaXpl
IGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgotICAgIHN0YXRpYyBzaXplX3QgcmVj
bGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGhpZ2hMaW1pdEJ5dGVzKGNvbnN0
IEludFNpemUmIHZpZXdwb3J0U2l6ZSk7CisgICAgLy8gUHJlZmVycmVkIHRleHR1cmUgc2l6ZSBs
aW1pdCBnaXZlbiB0aGUgdmlld3BvcnQgc2l6ZS4KKyAgICBzdGF0aWMgc2l6ZV90IHJlY2xhaW1M
aW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSk7CiAgICAgLy8gVGhlIG1heGlt
dW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1cmVzLgot
ICAgIHN0YXRpYyBzaXplX3QgbG93TGltaXRCeXRlcygpOworICAgIHN0YXRpYyBzaXplX3QgbG93
TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydCk7CiAKICAgICBzdGF0aWMgc2l6ZV90
IG1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA2YzhkYTQ2MWFjZDE3NDEwYTEwMjVlODkz
MjU0ZWRhYzAxMTczZWY2Li4zYTUyYTFkN2ZjMWM0YTkzYmFjMzhhYmJkM2VmMWVlNzAzZGQxYmMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgYm9v
bCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0
ZVBhaW50aW5nID0gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nQWNj
ZWxlcmF0ZWRQYWludGluZzsKICAgICBtX3NldHRpbmdzLmRpc2NhcmRBbGxUZXh0dXJlcyA9IG1f
cHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0Zyb250QnVmZmVyQ2FjaGVk
OwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSwgbV9wcm94eS0+bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRC
eXRlcyh2aWV3cG9ydFNpemUoKSksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNiw3ICsxMTYs
NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXRPbkltcGxUaHJlYWQoQ0NMYXll
clRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyIsIHRoaXMs
IDApOwogCi0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0
KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpKTsKKyAgICBjb250ZW50c1RleHR1
cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1M
aW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRv
cigpKTsKIH0KIApAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKIAogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CiAgICAgaWYg
KCF2aXNpYmxlKSB7Ci0gICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVt
b3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcygpKTsKKyAgICAgICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2Vy
Ojpsb3dMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAgICB9CiAKQEAgLTI2OSw3ICsy
NjksNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbQogICAgIGlmIChtX3NldHRpbmdzLmRpc2Nh
cmRBbGxUZXh0dXJlcykKICAgICAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5ldmljdEFu
ZERlbGV0ZUFsbFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVt
b3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CisgICAgICAg
IGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFu
YWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117705</attachid>
            <date>2011-12-02 15:41:13 -0800</date>
            <delta_ts>2011-12-02 17:41:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111202154111.patch</filename>
            <type>text/plain</type>
            <size>9656</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uZDhiYTUxZDkxNjRmODZiZDBjN2Q3MmQyYmNhMjQy
OTA1MGQ3ZTM2OSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTEyLTAyICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KTogYWRkaW5nIHZpZXdwb3J0IHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6IGRpdHRvCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOiB1c2luZyB2aWV3
cG9ydCBmb3IgbWVtb3J5IGNhbGN1bGF0aW9uCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFu
YWdlcjo6aGlnaExpbWl0Qnl0ZXMpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
bmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKTogZGl0dG8KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oOiBkaXR0bworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6IGFkZGluZyB2aWV3cG9y
dCBwYXJhbWV0ZXIKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6
ZSk6IGRpdHR5CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0
T25JbXBsVGhyZWFkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
c2V0VmlzaWJsZSk6IGRpdHR5CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRp
ZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6IGRpdHRvCisKIDIwMTEtMTEtMjggIFRpbW90
aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZv
ciBrbm93aW5nIHdoZW4gYSBUcmVlRWxlbWVudCBpcyBhZGRlZCBvciBjaGFuZ2VkIGFueXdoZXJl
IGluIGEgVHJlZU91dGxpbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCBlYmMzOTRjNGM1ZGFkMzE2Y2NkYmRhNjE1NTI0ZWY5MDdhMjQwNTZiLi5jOGE1MmM0MThl
MDc4OWY1YTVhOTA4ZDMwODJjYjY0NTE3MmNhYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTMwNCwxMyArMzA0LDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IGNvbnRl
bnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1l
bW9yeVVzZUJ5dGVzKCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1l
bW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCkgLSBjb250ZW50
c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0
TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRT
aXplKCkpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CiAgICAgZHJhd0xheWVyc0ludGVybmFs
KCk7CiAKLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250
ZW50c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
ci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMo
KSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7CisgICAgc2l6ZV90
IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9y
dFNpemUoKSk7CisgICAgcmVjbGFpbUxpbWl0ID0gbWF4PHNpemVfdD4oMCwgcmVjbGFpbUxpbWl0
IC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1h
bmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQocmVjbGFpbUxpbWl0KTsKKwogICAgIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9yZW5kZXJTdXJm
YWNlVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiAKICAgICBpZiAoc2V0dGluZ3MoKS5jb21wb3Np
dGVPZmZzY3JlZW4pCkBAIC02NjgsNyArNjY4LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+Zmx1c2goKSk7CiAKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
ciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVz
KCksIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6Omhp
Z2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNp
emUpOwogICAgIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0
dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0
LmdldCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAppbmRleCBj
NjAwZDllNjQ5MWQ3ZDFlNzU3MjIyMTRlMzE5ZGE3ZjBjMTg4NGNlLi4xNTYxMDA2ODQ3Yjk4YmI4
MzkzODY4MTRiZmJjNzk3OGI0OTc3Zjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC0z
MCwyMSArMzAsNjMgQEAKIAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXNpemVfdCBUZXh0
dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQorCituYW1lc3BhY2Ugeworc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMoc2l6ZV90IHZpZXdwb3J0TXVsdGlwbGllciwgY29uc3QgSW50U2l6ZSYgdmll
d3BvcnRTaXplLCBzaXplX3QgZGVmYXVsdExpbWl0TWVnYWJ5dGVzLCBzaXplX3QgbWF4TGltaXRN
ZWdhYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIDEyOCAqIDEwMjQgKiAxMDI0OworICAgIGlmICh2aWV3
cG9ydFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZGVmYXVsdExpbWl0TWVnYWJ5dGVz
ICogMTAyNCAqIDEwMjQ7CisgICAgSW50U2l6ZSByZXNvbHV0aW9uID0gdmlld3BvcnRTaXplOwor
I2lmIE9TKEFORFJPSUQpCisgICAgLy8gVGhpcyB3YXMgZm91bmQgdG8gYmUgb3B0aW1hbCBpbiBw
cmFjdGljZS4gJ251ZmYgc2FpZC4KKyAgICByZXNvbHV0aW9uLnNldFdpZHRoKDI1NiAqICgodmll
d3BvcnRTaXplLndpZHRoKCkgKyAyNTUpIC8gMjU2ICsgMSkpOworICAgIHJlc29sdXRpb24uc2V0
SGVpZ2h0KDI1NiAqICgodmlld3BvcnRTaXplLmhlaWdodCgpICsgMjU1KSAvIDI1NiArIDEpKTsK
KyNlbmRpZgorICAgIHJldHVybiBtaW4obWF4TGltaXRNZWdhYnl0ZXMgKiAxMDI0ICogMTAyNCwg
dmlld3BvcnRNdWx0aXBsaWVyICogVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKHJlc29s
dXRpb24sIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSk7Cit9CiB9CiAKLXNpemVfdCBUZXh0dXJl
TWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKQorc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdo
TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7Ci0gICAgcmV0dXJuIDY0
ICogMTAyNCAqIDEwMjQ7CisgICAgc2l6ZV90IHZpZXdwb3J0TXVsdGlwbGllciwgZGVmYXVsdE1l
Z2FieXRlcywgbWF4TWVnYWJ5dGVzOworI2lmIE9TKEFORFJPSUQpCisgICAgdmlld3BvcnRNdWx0
aXBsaWVyID0gODsKKyAgICBkZWZhdWx0TWVnYWJ5dGVzID0gMzI7CisgICAgbWF4TWVnYWJ5dGVz
ID0gMzI7CisjZWxzZQorICAgIHZpZXdwb3J0TXVsdGlwbGllciA9IDg7CisgICAgZGVmYXVsdE1l
Z2FieXRlcyA9IDEyODsKKyAgICBtYXhNZWdhYnl0ZXMgPSAxMjg7CisjZW5kaWYKKyAgICByZXR1
cm4gbWVtb3J5TGltaXRCeXRlcyh2aWV3cG9ydE11bHRpcGxpZXIsIHZpZXdwb3J0U2l6ZSwgZGVm
YXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzKTsKK30KKworc2l6ZV90IFRleHR1cmVNYW5hZ2Vy
OjpyZWNsYWltTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCit7CisgICAg
c2l6ZV90IHZpZXdwb3J0TXVsdGlwbGllciwgZGVmYXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5dGVz
OworI2lmIE9TKEFORFJPSUQpCisgICAgdmlld3BvcnRNdWx0aXBsaWVyID0gMzsKKyAgICBkZWZh
dWx0TWVnYWJ5dGVzID0gNjsKKyAgICBtYXhNZWdhYnl0ZXMgPSAzMjsKKyNlbHNlCisgICAgdmll
d3BvcnRNdWx0aXBsaWVyID0gNDsKKyAgICBkZWZhdWx0TWVnYWJ5dGVzID0gNjQ7CisgICAgbWF4
TWVnYWJ5dGVzID0gNjQ7CisjZW5kaWYKKyAgICByZXR1cm4gbWVtb3J5TGltaXRCeXRlcyh2aWV3
cG9ydE11bHRpcGxpZXIsIHZpZXdwb3J0U2l6ZSwgZGVmYXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5
dGVzKTsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKK3NpemVf
dCBUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNp
emUpCiB7Ci0gICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKKyAgICBzaXplX3Qgdmlld3BvcnRN
dWx0aXBsaWVyLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXM7CisgICAgdmlld3BvcnRN
dWx0aXBsaWVyID0gMTsKKyAgICBkZWZhdWx0TWVnYWJ5dGVzID0gMzsKKyAgICBtYXhNZWdhYnl0
ZXMgPSAzOworICAgIHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKHZpZXdwb3J0TXVsdGlwbGllciwg
dmlld3BvcnRTaXplLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXMpOwogfQogCiBzaXpl
X3QgVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmIHNpemUsIEdD
M0RlbnVtIHRleHR1cmVGb3JtYXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAppbmRleCBmMzI3YjRjZmNk
MWIxMGRhZTdkYWQ2MzQ2MDRmNjczOWI1MjBmMjA4Li5iYzc2YmRhODQ0OTM2ZGZjZjVjZmMzMjkx
OWU5NDRhNDU3YmNmMTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKQEAgLTU1LDExICs1NSwxMSBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4
dHVyZSBhbGxvY2F0aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KLSAgICBzdGF0aWMgc2l6ZV90IGhp
Z2hMaW1pdEJ5dGVzKCk7Ci0gICAgLy8gUHJlZmVycmVkIHRleHR1cmUgc2l6ZSBsaW1pdC4gQ2Fu
IGJlIGV4Y2VlZGVkIGlmIG5lZWRlZC4KLSAgICBzdGF0aWMgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5
dGVzKCk7CisgICAgc3RhdGljIHNpemVfdCBoaWdoTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUpOworICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJlIHNpemUgbGltaXQgZ2l2ZW4g
dGhlIHZpZXdwb3J0IHNpemUuCisgICAgc3RhdGljIHNpemVfdCByZWNsYWltTGltaXRCeXRlcyhj
b25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOwogICAgIC8vIFRoZSBtYXhpbXVtIHRleHR1cmUg
bWVtb3J5IHVzYWdlIHdoZW4gYXNrZWQgdG8gcmVsZWFzZSB0ZXh0dXJlcy4KLSAgICBzdGF0aWMg
c2l6ZV90IGxvd0xpbWl0Qnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGxvd0xpbWl0Qnl0ZXMo
Y29uc3QgSW50U2l6ZSYgdmlld3BvcnQpOwogCiAgICAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VC
eXRlcyhjb25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKaW5kZXggNmM4ZGE0NjFhY2QxNzQxMGExMDI1ZTg5MzI1NGVkYWMwMTE3
M2VmNi4uM2E1MmExZDdmYzFjNGE5M2JhYzM4YWJiZDNlZjFlZTcwM2RkMWJjMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgQ0NMYXllclRy
ZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9
IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFp
bnRpbmc7CiAgICAgbV9zZXR0aW5ncy5kaXNjYXJkQWxsVGV4dHVyZXMgPSBtX3Byb3h5LT5sYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdGcm9udEJ1ZmZlckNhY2hlZDsKIAotICAgIG1f
Y29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1h
bmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3Bv
cnRTaXplKCkpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVy
ZVNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdElt
cGwqIGhvc3RJbXBsKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKIAotICAg
IGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFu
YWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CisgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigp
LT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2
aWV3cG9ydFNpemUoKSkpOwogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZp
Y3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CiB9CiAK
QEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29s
IHZpc2libGUpCiAKICAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwogICAgIGlmICghdmlzaWJsZSkg
ewotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQo
VGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoKSk7CisgICAgICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRC
eXRlcyh2aWV3cG9ydFNpemUoKSkpOwogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIt
PnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CiAgICAgfQogCkBAIC0yNjksNyArMjY5LDcgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVy
VHJlZUhvc3RJbXBsKiBob3N0SW0KICAgICBpZiAobV9zZXR0aW5ncy5kaXNjYXJkQWxsVGV4dHVy
ZXMpCiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZXZpY3RBbmREZWxldGVBbGxU
ZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgIGVsc2Ug
ewotICAgICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQo
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOworICAgICAgICBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xh
aW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVB
bGxvY2F0b3IoKSk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117718</attachid>
            <date>2011-12-02 17:41:07 -0800</date>
            <delta_ts>2011-12-02 18:50:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111202174106.patch</filename>
            <type>text/plain</type>
            <size>14164</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5MDhiN2FhMjcxMDky
NWIxYjYxZTk3ODMwYmI4NzljNmY4ZjBmNS4uMzFjNDJjZDU4MWE5Zjk0ZmU5MzExMzdjZThjNjAy
ZGY4M2IxOWU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAyICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpoaWdoTGlt
aXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0
Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRQcmVmZXJyZWRNZW1vcnlMaW1p
dEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6CisKIDIwMTEtMTIt
MDIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDE3MzEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAppbmRleCAwNzk3NGRmOWM4YmM4YmM4MDJkY2U5M2QyYzg0NDYxYzg2MzUy
ZTBjLi5kYzliYTY0MmM3NzI2Mjg0ZTkyYjY2ZGEwNTIzZDFkMjE2NmNlNGEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMwNCwxMyArMzA0LDE0IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9j
YXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5
dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKyAgICBzaXplX3QgbWF4TGltaXQgPSBt
YXg8c2l6ZV90PigwLCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CisgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9
IG1heDxzaXplX3Q+KDAsIFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9y
dFNpemUoKSkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKKworICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExpbWl0KTsKICAgICBk
cmF3TGF5ZXJzSW50ZXJuYWwoKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhyZWNsYWltTGltaXQpOworICAgIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHJlY2xhaW1MaW1pdCk7
CiAKLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50
c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSAt
IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7CiAgICAgbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIAogICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0
ZU9mZnNjcmVlbikKQEAgLTY2OSw3ICs2NzAsOSBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT5mbHVzaCgpKTsKIAotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2Vy
ID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMo
KSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOworICAgIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGln
aExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxp
bWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6
ZSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1
cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCkpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDM3
OTViZTQzYzVkNmRkNTFkZDMzYjUxYzE1ZmY5YTY1MTgyOWQ3YTcuLjE1YzdhMDFjOTM0NDQ4ZmEx
YzM4ODgxODcwNTcyZGY5NDU2NmI2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTMw
LDIxICszMCw2MyBAQAogCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2l6ZV90IFRleHR1
cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpCisKK25hbWVzcGFjZSB7CitzaXplX3QgbWVtb3J5
TGltaXRCeXRlcyhzaXplX3Qgdmlld3BvcnRNdWx0aXBsaWVyLCBjb25zdCBJbnRTaXplJiB2aWV3
cG9ydFNpemUsIHNpemVfdCBkZWZhdWx0TGltaXRNZWdhYnl0ZXMsIHNpemVfdCBtYXhMaW1pdE1l
Z2FieXRlcykKK3sKKyAgICBpZiAodmlld3BvcnRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGRlZmF1bHRMaW1pdE1lZ2FieXRlcyAqIDEwMjQgKiAxMDI0OworICAgIEludFNpemUgcmVz
b2x1dGlvbiA9IHZpZXdwb3J0U2l6ZTsKKyNpZiBPUyhBTkRST0lEKQorICAgIC8vIFRoaXMgd2Fz
IGZvdW5kIHRvIGJlIG9wdGltYWwgaW4gcHJhY3RpY2UuCisgICAgcmVzb2x1dGlvbi5zZXRXaWR0
aCgyNTYgKiAoKHZpZXdwb3J0U2l6ZS53aWR0aCgpICsgMjU1KSAvIDI1NiArIDEpKTsKKyAgICBy
ZXNvbHV0aW9uLnNldEhlaWdodCgyNTYgKiAoKHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSArIDI1NSkg
LyAyNTYgKyAxKSk7CisjZW5kaWYKKyAgICByZXR1cm4gbWluKG1heExpbWl0TWVnYWJ5dGVzICog
MTAyNCAqIDEwMjQsIHZpZXdwb3J0TXVsdGlwbGllciAqIFRleHR1cmVNYW5hZ2VyOjptZW1vcnlV
c2VCeXRlcyhyZXNvbHV0aW9uLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpOworfQorfQorCitz
aXplX3QgVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdw
b3J0U2l6ZSkKIHsKLSAgICByZXR1cm4gMTI4ICogMTAyNCAqIDEwMjQ7CisgICAgc2l6ZV90IHZp
ZXdwb3J0TXVsdGlwbGllciwgZGVmYXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzOworI2lmIE9T
KEFORFJPSUQpCisgICAgdmlld3BvcnRNdWx0aXBsaWVyID0gODsKKyAgICBkZWZhdWx0TWVnYWJ5
dGVzID0gMzI7CisgICAgbWF4TWVnYWJ5dGVzID0gMzI7CisjZWxzZQorICAgIHZpZXdwb3J0TXVs
dGlwbGllciA9IDg7CisgICAgZGVmYXVsdE1lZ2FieXRlcyA9IDEyODsKKyAgICBtYXhNZWdhYnl0
ZXMgPSAxMjg7CisjZW5kaWYKKyAgICByZXR1cm4gbWVtb3J5TGltaXRCeXRlcyh2aWV3cG9ydE11
bHRpcGxpZXIsIHZpZXdwb3J0U2l6ZSwgZGVmYXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzKTsK
IH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpCitzaXplX3Qg
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0
U2l6ZSkKIHsKLSAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKKyAgICBzaXplX3Qgdmlld3Bv
cnRNdWx0aXBsaWVyLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXM7CisjaWYgT1MoQU5E
Uk9JRCkKKyAgICB2aWV3cG9ydE11bHRpcGxpZXIgPSAzOworICAgIGRlZmF1bHRNZWdhYnl0ZXMg
PSA2OworICAgIG1heE1lZ2FieXRlcyA9IDMyOworI2Vsc2UKKyAgICB2aWV3cG9ydE11bHRpcGxp
ZXIgPSA0OworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSA2NDsKKyAgICBtYXhNZWdhYnl0ZXMgPSA2
NDsKKyNlbmRpZgorICAgIHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKHZpZXdwb3J0TXVsdGlwbGll
ciwgdmlld3BvcnRTaXplLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXMpOwogfQogCi1z
aXplX3QgVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoKQorc2l6ZV90IFRleHR1cmVNYW5h
Z2VyOjpsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKLSAgICBy
ZXR1cm4gMyAqIDEwMjQgKiAxMDI0OworICAgIHNpemVfdCB2aWV3cG9ydE11bHRpcGxpZXIsIGRl
ZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlczsKKyAgICB2aWV3cG9ydE11bHRpcGxpZXIgPSAx
OworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSAzOworICAgIG1heE1lZ2FieXRlcyA9IDM7CisgICAg
cmV0dXJuIG1lbW9yeUxpbWl0Qnl0ZXModmlld3BvcnRNdWx0aXBsaWVyLCB2aWV3cG9ydFNpemUs
IGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7CiB9CiAKIHNpemVfdCBUZXh0dXJlTWFu
YWdlcjo6bWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gdGV4dHVy
ZUZvcm1hdCkKQEAgLTYwLDE5ICsxMDIsMjUgQEAgc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjptZW1v
cnlVc2VCeXRlcyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWEKIH0K
IAogCi1UZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0
ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKLSAgICA6IG1fbWVtb3J5TGltaXRCeXRlcyhtZW1vcnlM
aW1pdEJ5dGVzKQorVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1v
cnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRl
eHR1cmVTaXplKQorICAgIDogbV9tYXhNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUxpbWl0Qnl0ZXMp
CisgICAgLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMocHJlZmVycmVkTWVtb3J5TGltaXRC
eXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWF4VGV4dHVyZVNpemUo
bWF4VGV4dHVyZVNpemUpCiAgICAgLCBtX25leHRUb2tlbigxKQogewogfQogCi12b2lkIFRleHR1
cmVNYW5hZ2VyOjpzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQor
dm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhzaXplX3QgbWVtb3J5
TGltaXRCeXRlcykKIHsKICAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KG1lbW9yeUxpbWl0Qnl0ZXMp
OwogICAgIEFTU0VSVChjdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA8PSBtZW1vcnlMaW1pdEJ5dGVz
KTsKLSAgICBtX21lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOworICAgIG1fbWF4
TWVtb3J5TGltaXRCeXRlcyA9IG1lbW9yeUxpbWl0Qnl0ZXM7Cit9CisKK3ZvaWQgVGV4dHVyZU1h
bmFnZXI6OnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0
ZXMpCit7CisgICAgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5TGltaXRCeXRl
czsKIH0KIAogVGV4dHVyZVRva2VuIFRleHR1cmVNYW5hZ2VyOjpnZXRUb2tlbigpCkBAIC0yNDMs
MTEgKzI5MSwxMSBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJl
VG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIH0KIAogICAgIHNpemVf
dCBtZW1vcnlSZXF1aXJlZEJ5dGVzID0gbWVtb3J5VXNlQnl0ZXMoc2l6ZSwgZm9ybWF0KTsKLSAg
ICBpZiAobWVtb3J5UmVxdWlyZWRCeXRlcyA+IG1fbWVtb3J5TGltaXRCeXRlcykKKyAgICBpZiAo
bWVtb3J5UmVxdWlyZWRCeXRlcyA+IG1fbWF4TWVtb3J5TGltaXRCeXRlcykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtX21lbW9yeUxpbWl0Qnl0ZXMg
LSBtZW1vcnlSZXF1aXJlZEJ5dGVzKTsKLSAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9y
eVJlcXVpcmVkQnl0ZXMgPiBtX21lbW9yeUxpbWl0Qnl0ZXMpCisgICAgcmVkdWNlTWVtb3J5VG9M
aW1pdChtX21heE1lbW9yeUxpbWl0Qnl0ZXMgLSBtZW1vcnlSZXF1aXJlZEJ5dGVzKTsKKyAgICBp
ZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBtX21heE1lbW9yeUxp
bWl0Qnl0ZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFRleHR1cmVJbmZvIGluZm87
CkBAIC0yNjAsNyArMzA4LDcgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUo
VGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKICNlbmRpZgogICAg
IC8vIEF2b2lkIGNodXJuaW5nIGJ5IHJldXNpbmcgdGhlIHRleHR1cmUgaWYgaXQgaXMgYWJvdXQg
dG8gYmUgcmVjbGFpbWVkIGFuZAogICAgIC8vIGl0IGhhcyB0aGUgc2FtZSBzaXplIGFuZCBmb3Jt
YXQgYXMgdGhlIHJlcXVlc3RpbmcgdGV4dHVyZS4KLSAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyAr
IG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiByZWNsYWltTGltaXRCeXRlcygpKSB7CisgICAgaWYgKG1f
bWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9wcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzKSB7CiAgICAgICAgIHRleHR1cmVJZCA9IHJlcGxhY2VUZXh0dXJlKHRva2VuLCBp
bmZvKTsKICAgICAgICAgaWYgKHRleHR1cmVJZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4
dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmgKaW5kZXggYjE5MWY3YjY4YmFiMjFiZDljNDAxMjdkMmEwZmQzZmMx
ODRhN2E5My4uYzZjMjFhZDU5Yzg0YjFlZDg2MGE0NTcxNjY0ZWZiMGQ0NWUxYmFkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1h
bmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
ZXh0dXJlTWFuYWdlci5oCkBAIC00OSwyMSArNDksMjIgQEAgcHJvdGVjdGVkOgogY2xhc3MgVGV4
dHVyZU1hbmFnZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHR1cmVNYW5hZ2VyKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFuYWdlcj4gY3JlYXRlKHNp
emVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+IGNyZWF0ZShzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRl
cywgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFnZXIobWVtb3J5
TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBUZXh0dXJlTWFuYWdlcihtYXhNZW1vcnlMaW1pdEJ5dGVzLCBwcmVmZXJyZWRNZW1vcnlMaW1p
dEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkpOwogICAgIH0KIAogICAgIC8vIEFic29sdXRlIG1heGlt
dW0gbGltaXQgZm9yIHRleHR1cmUgYWxsb2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuCi0gICAg
c3RhdGljIHNpemVfdCBoaWdoTGltaXRCeXRlcygpOwotICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJl
IHNpemUgbGltaXQuIENhbiBiZSBleGNlZWRlZCBpZiBuZWVkZWQuCi0gICAgc3RhdGljIHNpemVf
dCByZWNsYWltTGltaXRCeXRlcygpOworICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMo
Y29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsKKyAgICAvLyBQcmVmZXJyZWQgdGV4dHVyZSBz
aXplIGxpbWl0IGdpdmVuIHRoZSB2aWV3cG9ydCBzaXplLgorICAgIHN0YXRpYyBzaXplX3QgcmVj
bGFpbUxpbWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsKICAgICAvLyBUaGUg
bWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2UgdGV4dHVy
ZXMuCi0gICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7CisgICAgc3RhdGljIHNpemVf
dCBsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0KTsKIAogICAgIHN0YXRpYyBz
aXplX3QgbWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CiAK
LSAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsKKyAgICB2b2lkIHNldE1heE1l
bW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsKKyAgICB2b2lkIHNldFByZWZlcnJlZE1lbW9yeUxpbWl0
Qnl0ZXMoc2l6ZV90KTsKIAogICAgIFRleHR1cmVUb2tlbiBnZXRUb2tlbigpOwogICAgIHZvaWQg
cmVsZWFzZVRva2VuKFRleHR1cmVUb2tlbik7CkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKICAg
ICBzaXplX3QgY3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlV
c2VCeXRlczsgfQogCiBwcml2YXRlOgotICAgIFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtZW1vcnlM
aW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIFRleHR1cmVNYW5hZ2VyKHNpemVf
dCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcywg
aW50IG1heFRleHR1cmVTaXplKTsKIAogICAgIHN0cnVjdCBUZXh0dXJlSW5mbyB7CiAgICAgICAg
IEludFNpemUgc2l6ZTsKQEAgLTEwNSw3ICsxMDYsOCBAQCBwcml2YXRlOgogICAgIFRleHR1cmVN
YXAgbV90ZXh0dXJlczsKICAgICBMaXN0SGFzaFNldDxUZXh0dXJlVG9rZW4+IG1fdGV4dHVyZUxS
VVNldDsKIAotICAgIHNpemVfdCBtX21lbW9yeUxpbWl0Qnl0ZXM7CisgICAgc2l6ZV90IG1fbWF4
TWVtb3J5TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVz
OwogICAgIHNpemVfdCBtX21lbW9yeVVzZUJ5dGVzOwogICAgIGludCBtX21heFRleHR1cmVTaXpl
OwogICAgIFRleHR1cmVUb2tlbiBtX25leHRUb2tlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCmluZGV4IGRiMTgwOWUwOGNiZmJlNzEyNDRjZDhkYzVhOGRhOGJhNTY1MDhiYTAuLjI3
YzE3MDRlNzIyMzg2YmVkYTdkMDliYjVhNzc0YTA1Mzc5ZjQxODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcApAQCAtOTMsNyArOTMsOSBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZSgpCiAgICAgLy8gVXBkYXRlIG1fc2V0dGluZ3MgYmFzZWQgb24gY2FwYWJpbGl0
aWVzIHRoYXQgd2UgZ290IGJhY2sgZnJvbSB0aGUgcmVuZGVyZXIuCiAgICAgbV9zZXR0aW5ncy5h
Y2NlbGVyYXRlUGFpbnRpbmcgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCku
dXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
ID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMo
KSwgbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsK
KyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRl
eHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlTWFuYWdl
cjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm94eS0+bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTI2LDcgKzEyOCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1w
bFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNv
bW1pdFRvIiwgdGhpcywgMCk7CiAKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVj
ZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOworICAg
IGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFu
YWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNU
ZXh0dXJlQWxsb2NhdG9yKCkpOwogfQogCkBAIC0yMzMsNiArMjM1LDggQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZp
ZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKKyAgICBjb250ZW50c1RleHR1
cmVNYW5hZ2VyKCktPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6OmhpZ2hM
aW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+
c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0
Qnl0ZXModmlld3BvcnRTaXplKSk7CiAgICAgbV92aWV3cG9ydFNpemUgPSB2aWV3cG9ydFNpemU7
CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KQEAgLTI2Myw3ICsyNjcsNyBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAKICAgICBtX3Zpc2libGUgPSB2
aXNpYmxlOwogICAgIGlmICghdmlzaWJsZSkgewotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1h
bmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMo
KSk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1p
dChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkpOwogICAgICAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CiAgICAg
fQogCkBAIC0yNzksNyArMjgzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUlu
dmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW0KICAgICBpZiAo
bV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmNvbnRleHRIYXNDYWNoZWRGcm9u
dEJ1ZmZlcikKICAgICAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5ldmljdEFuZERlbGV0
ZUFsbFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9M
aW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CisgICAgICAgIGNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6
cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgY29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4
dHVyZUFsbG9jYXRvcigpKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117733</attachid>
            <date>2011-12-02 18:50:23 -0800</date>
            <delta_ts>2011-12-05 15:07:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111202185022.patch</filename>
            <type>text/plain</type>
            <size>14458</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5MDhiN2FhMjcxMDky
NWIxYjYxZTk3ODMwYmI4NzljNmY4ZjBmNS4uMzFjNDJjZDU4MWE5Zjk0ZmU5MzExMzdjZThjNjAy
ZGY4M2IxOWU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTAyICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpoaWdoTGlt
aXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0
Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRQcmVmZXJyZWRNZW1vcnlMaW1p
dEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6CisKIDIwMTEtMTIt
MDIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDE3MzEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAppbmRleCAwNzk3NGRmOWM4YmM4YmM4MDJkY2U5M2QyYzg0NDYxYzg2MzUy
ZTBjLi5hNDE1Y2Y0ZjJhMDg3ZDZjMzI4NTYyZmU5OTc1NmRjMzdmMWFmYjhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTMwNCwxMyArMzA0LDI0IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9j
YXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5
dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKLSAgICBkcmF3TGF5ZXJzSW50ZXJuYWwo
KTsKKyAgICBzaXplX3QgbWF4TGltaXQgPSBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMo
dmlld3BvcnRTaXplKCkpOworICAgIHNpemVfdCByZWNsYWltTGltaXQgPSBUZXh0dXJlTWFuYWdl
cjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOwogCi0gICAgaWYgKFRleHR1cmVN
YW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpID4gY29udGVudHNNZW1vcnlVc2VCeXRlcykKLSAg
ICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQo
VGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgLSBjb250ZW50c01lbW9yeVVzZUJ5
dGVzKTsKKyAgICBpZiAobWF4TGltaXQgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQorICAgICAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyht
YXhMaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwogICAgIGVsc2UKKyAgICAgICAgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoMCk7CisK
KyAgICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKKworICAgIGlmIChyZWNsYWltTGltaXQgPiBjb250
ZW50c01lbW9yeVVzZUJ5dGVzKSB7CisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRz
TWVtb3J5VXNlQnl0ZXMpOworICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
cmVkdWNlTWVtb3J5VG9MaW1pdChyZWNsYWltTGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVz
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcygwKTsKICAgICAgICAgbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7CisgICAgfQorCiAgICAgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX3JlbmRl
clN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIAogICAgIGlmIChzZXR0aW5ncygpLmNv
bXBvc2l0ZU9mZnNjcmVlbikKQEAgLTY2OSw3ICs2ODAsOSBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0
Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOworICAgIG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdl
cjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlTWFuYWdlcjo6cmVj
bGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhcGFiaWxpdGllcy5tYXhUZXh0
dXJlU2l6ZSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1
cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2Nv
bnRleHQuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmlu
ZGV4IDM3OTViZTQzYzVkNmRkNTFkZDMzYjUxYzE1ZmY5YTY1MTgyOWQ3YTcuLmY5NGI3MWNiOGU3
YTMwYzMxOThiZDFlYWY1NGUzZWUyNzY5ZTMxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAK
QEAgLTMwLDIxICszMCw2MyBAQAogCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2l6ZV90
IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpCisKK25hbWVzcGFjZSB7CitzaXplX3Qg
bWVtb3J5TGltaXRCeXRlcyhzaXplX3Qgdmlld3BvcnRNdWx0aXBsaWVyLCBjb25zdCBJbnRTaXpl
JiB2aWV3cG9ydFNpemUsIHNpemVfdCBkZWZhdWx0TGltaXRNZWdhYnl0ZXMsIHNpemVfdCBtYXhM
aW1pdE1lZ2FieXRlcykKK3sKKyAgICBpZiAodmlld3BvcnRTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGRlZmF1bHRMaW1pdE1lZ2FieXRlcyAqIDEwMjQgKiAxMDI0OworICAgIEludFNp
emUgcmVzb2x1dGlvbiA9IHZpZXdwb3J0U2l6ZTsKKyNpZiBPUyhBTkRST0lEKQorICAgIC8vIFRo
aXMgd2FzIGZvdW5kIHRvIGJlIG9wdGltYWwgaW4gcHJhY3RpY2UuCisgICAgcmVzb2x1dGlvbi5z
ZXRXaWR0aCgyNTYgKiAoKHZpZXdwb3J0U2l6ZS53aWR0aCgpICsgMjU1KSAvIDI1NiArIDEpKTsK
KyAgICByZXNvbHV0aW9uLnNldEhlaWdodCgyNTYgKiAoKHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSAr
IDI1NSkgLyAyNTYgKyAxKSk7CisjZW5kaWYKKyAgICByZXR1cm4gbWluKG1heExpbWl0TWVnYWJ5
dGVzICogMTAyNCAqIDEwMjQsIHZpZXdwb3J0TXVsdGlwbGllciAqIFRleHR1cmVNYW5hZ2VyOjpt
ZW1vcnlVc2VCeXRlcyhyZXNvbHV0aW9uLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpOworfQor
fQorCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSkKIHsKLSAgICByZXR1cm4gMTI4ICogMTAyNCAqIDEwMjQ7CisgICAgc2l6
ZV90IHZpZXdwb3J0TXVsdGlwbGllciwgZGVmYXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzOwor
I2lmIE9TKEFORFJPSUQpCisgICAgdmlld3BvcnRNdWx0aXBsaWVyID0gODsKKyAgICBkZWZhdWx0
TWVnYWJ5dGVzID0gMzI7CisgICAgbWF4TWVnYWJ5dGVzID0gMzI7CisjZWxzZQorICAgIHZpZXdw
b3J0TXVsdGlwbGllciA9IDg7CisgICAgZGVmYXVsdE1lZ2FieXRlcyA9IDEyODsKKyAgICBtYXhN
ZWdhYnl0ZXMgPSAxMjg7CisjZW5kaWYKKyAgICByZXR1cm4gbWVtb3J5TGltaXRCeXRlcyh2aWV3
cG9ydE11bHRpcGxpZXIsIHZpZXdwb3J0U2l6ZSwgZGVmYXVsdE1lZ2FieXRlcywgbWF4TWVnYWJ5
dGVzKTsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpCitz
aXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZp
ZXdwb3J0U2l6ZSkKIHsKLSAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKKyAgICBzaXplX3Qg
dmlld3BvcnRNdWx0aXBsaWVyLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXM7CisjaWYg
T1MoQU5EUk9JRCkKKyAgICB2aWV3cG9ydE11bHRpcGxpZXIgPSAzOworICAgIGRlZmF1bHRNZWdh
Ynl0ZXMgPSA2OworICAgIG1heE1lZ2FieXRlcyA9IDMyOworI2Vsc2UKKyAgICB2aWV3cG9ydE11
bHRpcGxpZXIgPSA0OworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSA2NDsKKyAgICBtYXhNZWdhYnl0
ZXMgPSA2NDsKKyNlbmRpZgorICAgIHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKHZpZXdwb3J0TXVs
dGlwbGllciwgdmlld3BvcnRTaXplLCBkZWZhdWx0TWVnYWJ5dGVzLCBtYXhNZWdhYnl0ZXMpOwog
fQogCi1zaXplX3QgVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMoKQorc2l6ZV90IFRleHR1
cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsK
LSAgICByZXR1cm4gMyAqIDEwMjQgKiAxMDI0OworICAgIHNpemVfdCB2aWV3cG9ydE11bHRpcGxp
ZXIsIGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlczsKKyAgICB2aWV3cG9ydE11bHRpcGxp
ZXIgPSAxOworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSAzOworICAgIG1heE1lZ2FieXRlcyA9IDM7
CisgICAgcmV0dXJuIG1lbW9yeUxpbWl0Qnl0ZXModmlld3BvcnRNdWx0aXBsaWVyLCB2aWV3cG9y
dFNpemUsIGRlZmF1bHRNZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7CiB9CiAKIHNpemVfdCBUZXh0
dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0g
dGV4dHVyZUZvcm1hdCkKQEAgLTYwLDE5ICsxMDIsMjUgQEAgc2l6ZV90IFRleHR1cmVNYW5hZ2Vy
OjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9y
bWEKIH0KIAogCi1UZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxp
bWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSkKLSAgICA6IG1fbWVtb3J5TGltaXRCeXRlcyht
ZW1vcnlMaW1pdEJ5dGVzKQorVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKHNpemVfdCBt
YXhNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcywgaW50
IG1heFRleHR1cmVTaXplKQorICAgIDogbV9tYXhNZW1vcnlMaW1pdEJ5dGVzKG1heE1lbW9yeUxp
bWl0Qnl0ZXMpCisgICAgLCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMocHJlZmVycmVkTWVt
b3J5TGltaXRCeXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0ZXMoMCkKICAgICAsIG1fbWF4VGV4
dHVyZVNpemUobWF4VGV4dHVyZVNpemUpCiAgICAgLCBtX25leHRUb2tlbigxKQogewogfQogCi12
b2lkIFRleHR1cmVNYW5hZ2VyOjpzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1p
dEJ5dGVzKQordm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhzaXpl
X3QgbWVtb3J5TGltaXRCeXRlcykKIHsKICAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KG1lbW9yeUxp
bWl0Qnl0ZXMpOwogICAgIEFTU0VSVChjdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSA8PSBtZW1vcnlM
aW1pdEJ5dGVzKTsKLSAgICBtX21lbW9yeUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOwor
ICAgIG1fbWF4TWVtb3J5TGltaXRCeXRlcyA9IG1lbW9yeUxpbWl0Qnl0ZXM7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hbmFnZXI6OnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1lbW9y
eUxpbWl0Qnl0ZXMpCit7CisgICAgbV9wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5
TGltaXRCeXRlczsKIH0KIAogVGV4dHVyZVRva2VuIFRleHR1cmVNYW5hZ2VyOjpnZXRUb2tlbigp
CkBAIC0yNDMsMTEgKzI5MSwxMSBAQCBib29sIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVy
ZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZgogICAgIH0KIAog
ICAgIHNpemVfdCBtZW1vcnlSZXF1aXJlZEJ5dGVzID0gbWVtb3J5VXNlQnl0ZXMoc2l6ZSwgZm9y
bWF0KTsKLSAgICBpZiAobWVtb3J5UmVxdWlyZWRCeXRlcyA+IG1fbWVtb3J5TGltaXRCeXRlcykK
KyAgICBpZiAobWVtb3J5UmVxdWlyZWRCeXRlcyA+IG1fbWF4TWVtb3J5TGltaXRCeXRlcykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtX21lbW9yeUxp
bWl0Qnl0ZXMgLSBtZW1vcnlSZXF1aXJlZEJ5dGVzKTsKLSAgICBpZiAobV9tZW1vcnlVc2VCeXRl
cyArIG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBtX21lbW9yeUxpbWl0Qnl0ZXMpCisgICAgcmVkdWNl
TWVtb3J5VG9MaW1pdChtX21heE1lbW9yeUxpbWl0Qnl0ZXMgLSBtZW1vcnlSZXF1aXJlZEJ5dGVz
KTsKKyAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBtX21h
eE1lbW9yeUxpbWl0Qnl0ZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFRleHR1cmVJ
bmZvIGluZm87CkBAIC0yNjAsNyArMzA4LDcgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVz
dFRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKICNl
bmRpZgogICAgIC8vIEF2b2lkIGNodXJuaW5nIGJ5IHJldXNpbmcgdGhlIHRleHR1cmUgaWYgaXQg
aXMgYWJvdXQgdG8gYmUgcmVjbGFpbWVkIGFuZAogICAgIC8vIGl0IGhhcyB0aGUgc2FtZSBzaXpl
IGFuZCBmb3JtYXQgYXMgdGhlIHJlcXVlc3RpbmcgdGV4dHVyZS4KLSAgICBpZiAobV9tZW1vcnlV
c2VCeXRlcyArIG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiByZWNsYWltTGltaXRCeXRlcygpKSB7Cisg
ICAgaWYgKG1fbWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9wcmVmZXJy
ZWRNZW1vcnlMaW1pdEJ5dGVzKSB7CiAgICAgICAgIHRleHR1cmVJZCA9IHJlcGxhY2VUZXh0dXJl
KHRva2VuLCBpbmZvKTsKICAgICAgICAgaWYgKHRleHR1cmVJZCkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXggYjE5MWY3YjY4YmFiMjFiZDljNDAxMjdk
MmEwZmQzZmMxODRhN2E5My4uYzZjMjFhZDU5Yzg0YjFlZDg2MGE0NTcxNjY0ZWZiMGQ0NWUxYmFk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC00OSwyMSArNDksMjIgQEAgcHJvdGVjdGVkOgog
Y2xhc3MgVGV4dHVyZU1hbmFnZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHR1cmVN
YW5hZ2VyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFuYWdlcj4g
Y3JlYXRlKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCisgICAg
c3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+IGNyZWF0ZShzaXplX3QgbWF4TWVtb3J5
TGltaXRCeXRlcywgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0
dXJlU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZU1hbmFn
ZXIobWVtb3J5TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtYXhNZW1vcnlMaW1pdEJ5dGVzLCBwcmVmZXJyZWRN
ZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkpOwogICAgIH0KIAogICAgIC8vIEFic29s
dXRlIG1heGltdW0gbGltaXQgZm9yIHRleHR1cmUgYWxsb2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFu
Y2UuCi0gICAgc3RhdGljIHNpemVfdCBoaWdoTGltaXRCeXRlcygpOwotICAgIC8vIFByZWZlcnJl
ZCB0ZXh0dXJlIHNpemUgbGltaXQuIENhbiBiZSBleGNlZWRlZCBpZiBuZWVkZWQuCi0gICAgc3Rh
dGljIHNpemVfdCByZWNsYWltTGltaXRCeXRlcygpOworICAgIHN0YXRpYyBzaXplX3QgaGlnaExp
bWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsKKyAgICAvLyBQcmVmZXJyZWQg
dGV4dHVyZSBzaXplIGxpbWl0IGdpdmVuIHRoZSB2aWV3cG9ydCBzaXplLgorICAgIHN0YXRpYyBz
aXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsKICAg
ICAvLyBUaGUgbWF4aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVh
c2UgdGV4dHVyZXMuCi0gICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7CisgICAgc3Rh
dGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0KTsKIAogICAg
IHN0YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZv
cm1hdCk7CiAKLSAgICB2b2lkIHNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsKKyAgICB2b2lk
IHNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsKKyAgICB2b2lkIHNldFByZWZlcnJlZE1l
bW9yeUxpbWl0Qnl0ZXMoc2l6ZV90KTsKIAogICAgIFRleHR1cmVUb2tlbiBnZXRUb2tlbigpOwog
ICAgIHZvaWQgcmVsZWFzZVRva2VuKFRleHR1cmVUb2tlbik7CkBAIC04NSw3ICs4Niw3IEBAIHB1
YmxpYzoKICAgICBzaXplX3QgY3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9tZW1vcnlVc2VCeXRlczsgfQogCiBwcml2YXRlOgotICAgIFRleHR1cmVNYW5hZ2VyKHNpemVf
dCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIFRleHR1cmVNYW5h
Z2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsKIAogICAgIHN0cnVjdCBUZXh0dXJlSW5mbyB7
CiAgICAgICAgIEludFNpemUgc2l6ZTsKQEAgLTEwNSw3ICsxMDYsOCBAQCBwcml2YXRlOgogICAg
IFRleHR1cmVNYXAgbV90ZXh0dXJlczsKICAgICBMaXN0SGFzaFNldDxUZXh0dXJlVG9rZW4+IG1f
dGV4dHVyZUxSVVNldDsKIAotICAgIHNpemVfdCBtX21lbW9yeUxpbWl0Qnl0ZXM7CisgICAgc2l6
ZV90IG1fbWF4TWVtb3J5TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9wcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzOwogICAgIHNpemVfdCBtX21lbW9yeVVzZUJ5dGVzOwogICAgIGludCBtX21heFRl
eHR1cmVTaXplOwogICAgIFRleHR1cmVUb2tlbiBtX25leHRUb2tlbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IGRiMTgwOWUwOGNiZmJlNzEyNDRjZDhkYzVhOGRhOGJhNTY1
MDhiYTAuLjI3YzE3MDRlNzIyMzg2YmVkYTdkMDliYjVhNzc0YTA1Mzc5ZjQxODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtOTMsNyArOTMsOSBAQCBib29sIENDTGF5ZXJU
cmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiAgICAgLy8gVXBkYXRlIG1fc2V0dGluZ3MgYmFzZWQgb24g
Y2FwYWJpbGl0aWVzIHRoYXQgd2UgZ290IGJhY2sgZnJvbSB0aGUgcmVuZGVyZXIuCiAgICAgbV9z
ZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkudXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOwogCi0gICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExp
bWl0Qnl0ZXMoKSwgbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1
cmVTaXplKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0
dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm94eS0+bGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTI2LDcgKzEyOCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNv
bW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvIiwgdGhpcywgMCk7CiAKLSAgICBjb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVz
KCkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChU
ZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICBj
b250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhob3N0SW1wbC0+
Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOwogfQogCkBAIC0yMzMsNiArMjM1LDggQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKKyAgICBjb250
ZW50c1RleHR1cmVNYW5hZ2VyKCktPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFn
ZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSkpOworICAgIGNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKS0+c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6cmVj
bGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKSk7CiAgICAgbV92aWV3cG9ydFNpemUgPSB2aWV3
cG9ydFNpemU7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KQEAgLTI2Myw3ICsyNjcsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAKICAgICBtX3Zp
c2libGUgPSB2aXNpYmxlOwogICAgIGlmICghdmlzaWJsZSkgewotICAgICAgICBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6Omxvd0xp
bWl0Qnl0ZXMoKSk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVt
b3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSkp
OwogICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7CiAgICAgfQogCkBAIC0yNzksNyArMjgzLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRp
ZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW0K
ICAgICBpZiAobV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmNvbnRleHRIYXND
YWNoZWRGcm9udEJ1ZmZlcikKICAgICAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5ldmlj
dEFuZERlbGV0ZUFsbFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3Io
KSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNl
TWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CisgICAg
ICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJl
TWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNv
bnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117945</attachid>
            <date>2011-12-05 15:07:21 -0800</date>
            <delta_ts>2011-12-05 22:45:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111205150720.patch</filename>
            <type>text/plain</type>
            <size>15952</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5MDhiN2FhMjcxMDky
NWIxYjYxZTk3ODMwYmI4NzljNmY4ZjBmNS4uMDVhN2JkNmIxM2I3ZTNmMjIyNjQzMzkwOWVmNzRl
ZjI0YTQ0M2ZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTA1ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpoaWdoTGlt
aXRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0
Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRQcmVmZXJyZWRNZW1vcnlMaW1p
dEJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6CisKIDIwMTEtMTIt
MDIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDE3MzEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IGY2ZTQwYjQxNzVhNTllN2Y2NDE2MzZkNGZhM2FmNTRlNjc5MGYwYzguLmJlMDk0MmE4
NmMyMzA2ODgxMDQzNTUzMWQ0NjAxNTI3ZDI2ZTIwN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTItMDUgIEVyaWMgUGVubmVyICA8ZXBlbm5lckBn
b29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2V0IHRleHR1cmUgbGltaXRzIGFzIG11
bHRpcGxlcyBvZiB2aWV3cG9ydCBzaXplIGluc3RlYWQgb2YgaGFyZGNvZGVkIHZhbHVlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyMDIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL1RpbGVk
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoV1RGOjpURVNUKToKKwogMjAxMS0xMi0w
MiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjEwMTMzNy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDA3OTc0ZGY5YzhiYzhiYzgwMmRjZTkzZDJjODQ0NjFjODYzNTJlMGMuLmE0MTVj
ZjRmMmEwODdkNmMzMjg1NjJmZTk5NzU2ZGMzN2YxYWZiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzA0LDEzICszMDQsMjQgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgICAgICByZXR1cm47CiAKICAgICBzaXplX3Qg
Y29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJy
ZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIGNv
bnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwotICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOworICAgIHNp
emVfdCBtYXhMaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNp
emUoKSk7CisgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWlt
TGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7CiAKLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJl
Y2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3Jl
bmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFu
YWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOworICAg
IGlmIChtYXhMaW1pdCA+IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heExpbWl0IC0g
Y29udGVudHNNZW1vcnlVc2VCeXRlcyk7CiAgICAgZWxzZQorICAgICAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygwKTsKKworICAgIGRyYXdM
YXllcnNJbnRlcm5hbCgpOworCisgICAgaWYgKHJlY2xhaW1MaW1pdCA+IGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMpIHsKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldFBy
ZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMocmVjbGFpbUxpbWl0IC0gY29udGVudHNNZW1vcnlVc2VC
eXRlcyk7CisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1v
cnlUb0xpbWl0KHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRQcmVmZXJy
ZWRNZW1vcnlMaW1pdEJ5dGVzKDApOwogICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFu
YWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKKyAgICB9CisKICAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogCiAgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zm
c2NyZWVuKQpAQCAtNjY5LDcgKzY4MCw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBU
ZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBt
X2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGlt
aXRCeXRlcyh2aWV3cG9ydFNpemUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRC
eXRlcyh2aWV3cG9ydFNpemUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsK
ICAgICBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRv
cjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFs
bG9jYXRvciA9IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQo
KSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggMzc5NWJl
NDNjNWQ2ZGQ1MWRkMzNiNTFjMTVmZjlhNjUxODI5ZDdhNy4uYjkyMDNjYTU2NTA5YzUwNTdkYjdh
ZjMzOWFkZjU5NjVmYTExMjRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMzAsMjEg
KzMwLDYyIEBACiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKIAordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaXplX3QgVGV4dHVyZU1h
bmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCkKKworbmFtZXNwYWNlIHsKK3NpemVfdCBtZW1vcnlMaW1p
dEJ5dGVzKHNpemVfdCB2aWV3cG9ydE11bHRpcGxpZXIsIGNvbnN0IEludFNpemUmIHZpZXdwb3J0
U2l6ZSwgc2l6ZV90IGRlZmF1bHRNZWdhYnl0ZXMsIHNpemVfdCBtaW5NZWdhYnl0ZXMsIHNpemVf
dCBtYXhNZWdhYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIDEyOCAqIDEwMjQgKiAxMDI0OworICAgIGlm
ICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZGVmYXVsdE1lZ2FieXRl
cyAqIDEwMjQgKiAxMDI0OworICAgIHJldHVybiBtYXgobWluTWVnYWJ5dGVzICogMTAyNCAqIDEw
MjQsIG1pbihtYXhNZWdhYnl0ZXMgKiAxMDI0ICogMTAyNCwgdmlld3BvcnRNdWx0aXBsaWVyICog
VGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKHZpZXdwb3J0U2l6ZSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpKSk7Cit9CiB9CiAKLXNpemVfdCBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxp
bWl0Qnl0ZXMoKQorc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyhjb25zdCBJ
bnRTaXplJiB2aWV3cG9ydFNpemUpCiB7Ci0gICAgcmV0dXJuIDY0ICogMTAyNCAqIDEwMjQ7Cisg
ICAgc2l6ZV90IHZpZXdwb3J0TXVsdGlwbGllciwgZGVmYXVsdE1lZ2FieXRlcywgbWluTWVnYWJ5
dGVzLCBtYXhNZWdhYnl0ZXM7CisjaWYgT1MoQU5EUk9JRCkKKyAgICB2aWV3cG9ydE11bHRpcGxp
ZXIgPSA4OworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSAzMjsKKyAgICBtaW5NZWdhYnl0ZXMgPSAx
NjsKKyAgICBtYXhNZWdhYnl0ZXMgPSAzMjsKKyNlbHNlCisgICAgdmlld3BvcnRNdWx0aXBsaWVy
ID0gODsKKyAgICBkZWZhdWx0TWVnYWJ5dGVzID0gMTI4OworICAgIG1pbk1lZ2FieXRlcyA9IDE2
OworICAgIG1heE1lZ2FieXRlcyA9IDEyODsKKyNlbmRpZgorICAgIHJldHVybiBtZW1vcnlMaW1p
dEJ5dGVzKHZpZXdwb3J0TXVsdGlwbGllciwgdmlld3BvcnRTaXplLCBkZWZhdWx0TWVnYWJ5dGVz
LCBtaW5NZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7CiB9CiAKLXNpemVfdCBUZXh0dXJlTWFuYWdl
cjo6bG93TGltaXRCeXRlcygpCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5
dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKLSAgICByZXR1cm4gMyAqIDEwMjQg
KiAxMDI0OworICAgIHNpemVfdCB2aWV3cG9ydE11bHRpcGxpZXIsIGRlZmF1bHRNZWdhYnl0ZXMs
IG1pbk1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzOworI2lmIE9TKEFORFJPSUQpCisgICAgdmlld3Bv
cnRNdWx0aXBsaWVyID0gMzsKKyAgICBkZWZhdWx0TWVnYWJ5dGVzID0gNjsKKyAgICBtaW5NZWdh
Ynl0ZXMgPSA4OworICAgIG1heE1lZ2FieXRlcyA9IDMyOworI2Vsc2UKKyAgICB2aWV3cG9ydE11
bHRpcGxpZXIgPSA0OworICAgIGRlZmF1bHRNZWdhYnl0ZXMgPSA2NDsKKyAgICBtaW5NZWdhYnl0
ZXMgPSAxNjsKKyAgICBtYXhNZWdhYnl0ZXMgPSA2NDsKKyNlbmRpZgorICAgIHJldHVybiBtZW1v
cnlMaW1pdEJ5dGVzKHZpZXdwb3J0TXVsdGlwbGllciwgdmlld3BvcnRTaXplLCBkZWZhdWx0TWVn
YWJ5dGVzLCBtaW5NZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7Cit9CisKK3NpemVfdCBUZXh0dXJl
TWFuYWdlcjo6bG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCit7Cisg
ICAgc2l6ZV90IHZpZXdwb3J0TXVsdGlwbGllciwgZGVmYXVsdE1lZ2FieXRlcywgbWluTWVnYWJ5
dGVzLCBtYXhNZWdhYnl0ZXM7CisgICAgdmlld3BvcnRNdWx0aXBsaWVyID0gMTsKKyAgICBkZWZh
dWx0TWVnYWJ5dGVzID0gMzsKKyAgICBtaW5NZWdhYnl0ZXMgPSAyOworICAgIG1heE1lZ2FieXRl
cyA9IDM7CisgICAgcmV0dXJuIG1lbW9yeUxpbWl0Qnl0ZXModmlld3BvcnRNdWx0aXBsaWVyLCB2
aWV3cG9ydFNpemUsIGRlZmF1bHRNZWdhYnl0ZXMsIG1pbk1lZ2FieXRlcywgbWF4TWVnYWJ5dGVz
KTsKIH0KIAogc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRT
aXplJiBzaXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQpAQCAtNjAsMTkgKzEwMSwyNSBAQCBz
aXplX3QgVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmIHNpemUs
IEdDM0RlbnVtIHRleHR1cmVGb3JtYQogfQogCiAKLVRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFu
YWdlcihzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQotICAgIDog
bV9tZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUxpbWl0Qnl0ZXMpCitUZXh0dXJlTWFuYWdlcjo6VGV4
dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRN
ZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCisgICAgOiBtX21heE1lbW9yeUxp
bWl0Qnl0ZXMobWF4TWVtb3J5TGltaXRCeXRlcykKKyAgICAsIG1fcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcyhwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKQogICAgICwgbV9tZW1vcnlVc2VCeXRl
cygwKQogICAgICwgbV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKICAgICAsIG1fbmV4
dFRva2VuKDEpCiB7CiB9CiAKLXZvaWQgVGV4dHVyZU1hbmFnZXI6OnNldE1lbW9yeUxpbWl0Qnl0
ZXMoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMpCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpzZXRNYXhN
ZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQogewogICAgIHJlZHVjZU1l
bW9yeVRvTGltaXQobWVtb3J5TGltaXRCeXRlcyk7CiAgICAgQVNTRVJUKGN1cnJlbnRNZW1vcnlV
c2VCeXRlcygpIDw9IG1lbW9yeUxpbWl0Qnl0ZXMpOwotICAgIG1fbWVtb3J5TGltaXRCeXRlcyA9
IG1lbW9yeUxpbWl0Qnl0ZXM7CisgICAgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5TGlt
aXRCeXRlczsKK30KKwordm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0UHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykKK3sKKyAgICBtX3ByZWZlcnJlZE1lbW9y
eUxpbWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOwogfQogCiBUZXh0dXJlVG9rZW4gVGV4dHVy
ZU1hbmFnZXI6OmdldFRva2VuKCkKQEAgLTI0MywxMSArMjkwLDExIEBAIGJvb2wgVGV4dHVyZU1h
bmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1
bnNpZ25lZCBmCiAgICAgfQogCiAgICAgc2l6ZV90IG1lbW9yeVJlcXVpcmVkQnl0ZXMgPSBtZW1v
cnlVc2VCeXRlcyhzaXplLCBmb3JtYXQpOwotICAgIGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4g
bV9tZW1vcnlMaW1pdEJ5dGVzKQorICAgIGlmIChtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9tYXhN
ZW1vcnlMaW1pdEJ5dGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZWR1Y2VNZW1v
cnlUb0xpbWl0KG1fbWVtb3J5TGltaXRCeXRlcyAtIG1lbW9yeVJlcXVpcmVkQnl0ZXMpOwotICAg
IGlmIChtX21lbW9yeVVzZUJ5dGVzICsgbWVtb3J5UmVxdWlyZWRCeXRlcyA+IG1fbWVtb3J5TGlt
aXRCeXRlcykKKyAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KG1fbWF4TWVtb3J5TGltaXRCeXRlcyAt
IG1lbW9yeVJlcXVpcmVkQnl0ZXMpOworICAgIGlmIChtX21lbW9yeVVzZUJ5dGVzICsgbWVtb3J5
UmVxdWlyZWRCeXRlcyA+IG1fbWF4TWVtb3J5TGltaXRCeXRlcykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgVGV4dHVyZUluZm8gaW5mbzsKQEAgLTI2MCw3ICszMDcsNyBAQCBib29sIFRl
eHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUg
c2l6ZSwgdW5zaWduZWQgZgogI2VuZGlmCiAgICAgLy8gQXZvaWQgY2h1cm5pbmcgYnkgcmV1c2lu
ZyB0aGUgdGV4dHVyZSBpZiBpdCBpcyBhYm91dCB0byBiZSByZWNsYWltZWQgYW5kCiAgICAgLy8g
aXQgaGFzIHRoZSBzYW1lIHNpemUgYW5kIGZvcm1hdCBhcyB0aGUgcmVxdWVzdGluZyB0ZXh0dXJl
LgotICAgIGlmIChtX21lbW9yeVVzZUJ5dGVzICsgbWVtb3J5UmVxdWlyZWRCeXRlcyA+IHJlY2xh
aW1MaW1pdEJ5dGVzKCkpIHsKKyAgICBpZiAobV9tZW1vcnlVc2VCeXRlcyArIG1lbW9yeVJlcXVp
cmVkQnl0ZXMgPiBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMpIHsKICAgICAgICAgdGV4dHVy
ZUlkID0gcmVwbGFjZVRleHR1cmUodG9rZW4sIGluZm8pOwogICAgICAgICBpZiAodGV4dHVyZUlk
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAppbmRleCBiMTkx
ZjdiNjhiYWIyMWJkOWM0MDEyN2QyYTBmZDNmYzE4NGE3YTkzLi5jNmMyMWFkNTljODRiMWVkODYw
YTQ1NzE2NjRlZmIwZDQ1ZTFiYWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKQEAgLTQ5LDIxICs0
OSwyMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBUZXh0dXJlTWFuYWdlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVGV4dHVyZU1hbmFnZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFRleHR1cmVNYW5hZ2VyPiBjcmVhdGUoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBt
YXhUZXh0dXJlU2l6ZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFuYWdlcj4gY3Jl
YXRlKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5dGVzLCBzaXplX3QgcHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKG1heE1lbW9yeUxp
bWl0Qnl0ZXMsIHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CiAg
ICAgfQogCiAgICAgLy8gQWJzb2x1dGUgbWF4aW11bSBsaW1pdCBmb3IgdGV4dHVyZSBhbGxvY2F0
aW9ucyBmb3IgdGhpcyBpbnN0YW5jZS4KLSAgICBzdGF0aWMgc2l6ZV90IGhpZ2hMaW1pdEJ5dGVz
KCk7Ci0gICAgLy8gUHJlZmVycmVkIHRleHR1cmUgc2l6ZSBsaW1pdC4gQ2FuIGJlIGV4Y2VlZGVk
IGlmIG5lZWRlZC4KLSAgICBzdGF0aWMgc2l6ZV90IHJlY2xhaW1MaW1pdEJ5dGVzKCk7CisgICAg
c3RhdGljIHNpemVfdCBoaWdoTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUp
OworICAgIC8vIFByZWZlcnJlZCB0ZXh0dXJlIHNpemUgbGltaXQgZ2l2ZW4gdGhlIHZpZXdwb3J0
IHNpemUuCisgICAgc3RhdGljIHNpemVfdCByZWNsYWltTGltaXRCeXRlcyhjb25zdCBJbnRTaXpl
JiB2aWV3cG9ydFNpemUpOwogICAgIC8vIFRoZSBtYXhpbXVtIHRleHR1cmUgbWVtb3J5IHVzYWdl
IHdoZW4gYXNrZWQgdG8gcmVsZWFzZSB0ZXh0dXJlcy4KLSAgICBzdGF0aWMgc2l6ZV90IGxvd0xp
bWl0Qnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGxvd0xpbWl0Qnl0ZXMoY29uc3QgSW50U2l6
ZSYgdmlld3BvcnQpOwogCiAgICAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VCeXRlcyhjb25zdCBJ
bnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKIAotICAgIHZvaWQgc2V0TWVtb3J5TGltaXRCeXRl
cyhzaXplX3QpOworICAgIHZvaWQgc2V0TWF4TWVtb3J5TGltaXRCeXRlcyhzaXplX3QpOworICAg
IHZvaWQgc2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhzaXplX3QpOwogCiAgICAgVGV4dHVy
ZVRva2VuIGdldFRva2VuKCk7CiAgICAgdm9pZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRva2VuKTsK
QEAgLTg1LDcgKzg2LDcgQEAgcHVibGljOgogICAgIHNpemVfdCBjdXJyZW50TWVtb3J5VXNlQnl0
ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVzZUJ5dGVzOyB9CiAKIHByaXZhdGU6Ci0gICAg
VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0dXJlU2l6
ZSk7CisgICAgVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVf
dCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCiAgICAg
c3RydWN0IFRleHR1cmVJbmZvIHsKICAgICAgICAgSW50U2l6ZSBzaXplOwpAQCAtMTA1LDcgKzEw
Niw4IEBAIHByaXZhdGU6CiAgICAgVGV4dHVyZU1hcCBtX3RleHR1cmVzOwogICAgIExpc3RIYXNo
U2V0PFRleHR1cmVUb2tlbj4gbV90ZXh0dXJlTFJVU2V0OwogCi0gICAgc2l6ZV90IG1fbWVtb3J5
TGltaXRCeXRlczsKKyAgICBzaXplX3QgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzOworICAgIHNpemVf
dCBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXM7CiAgICAgc2l6ZV90IG1fbWVtb3J5VXNlQnl0
ZXM7CiAgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CiAgICAgVGV4dHVyZVRva2VuIG1fbmV4dFRv
a2VuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZGIxODA5ZTA4Y2JmYmU3
MTI0NGNkOGRjNWE4ZGE4YmE1NjUwOGJhMC4uMjdjMTcwNGU3MjIzODZiZWRhN2QwOWJiNWE3NzRh
MDUzNzlmNDE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC05Myw3ICs5
Myw5IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKICAgICAvLyBVcGRhdGUg
bV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRo
ZSByZW5kZXJlci4KICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJveHkt
PmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAK
LSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRl
eHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcygpLCBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVz
KHZpZXdwb3J0U2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9y
dFNpemUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNp
emUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMjYsNyArMTI4LDcgQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwq
IGhvc3RJbXBsKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKIAotICAgIGNv
bnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdl
cjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7CisgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5y
ZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3
cG9ydFNpemUoKSkpOwogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3Rl
ZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CiB9CiAKQEAg
LTIzMyw2ICsyMzUsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcoKQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplKQogeworICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+c2V0TWF4TWVtb3J5TGlt
aXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKSk7Cisg
ICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5zZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVz
KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUpKTsKICAgICBt
X3ZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0U2l6ZTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQpA
QCAtMjYzLDcgKzI2Nyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKIAogICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CiAgICAgaWYgKCF2aXNpYmxlKSB7
Ci0gICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChU
ZXh0dXJlTWFuYWdlcjo6bG93TGltaXRCeXRlcygpKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5
dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAgICB9CiAKQEAgLTI3OSw3ICsyODMsNyBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6ZGlkQmVjb21lSW52aXNpYmxlT25JbXBsVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqIGhvc3RJbQogICAgIGlmIChtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkuY29udGV4dEhhc0NhY2hlZEZyb250QnVmZmVyKQogICAgICAgICBjb250ZW50c1Rl
eHR1cmVNYW5hZ2VyKCktPmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKICAgICBlbHNlIHsKLSAgICAgICAgY29udGVudHNUZXh0
dXJlTWFuYWdlcigpLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWlt
TGltaXRCeXRlcygpKTsKKyAgICAgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5yZWR1Y2VN
ZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNp
emUoKSkpOwogICAgICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPmRlbGV0ZUV2aWN0ZWRU
ZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9t
aXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCmluZGV4IGE5MThmN2Q1N2Y0Yjg4NTU0ZmU2Yzk3N2EyODIyZGJkMjVhZGFi
YzguLjYzYWE0NTZhZDhkOGNjYjNmZTA0ZmFmYzE2MjBiZjBmMjRlNjdmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0
LmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAKIFRFU1QoVGlsZWRMYXllckNocm9t
aXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiB7Ci0gICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQp
OworICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAyKjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRy
PEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExh
eWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldElt
cGxUaHJlYWQgaW1wbFRocmVhZDsKICAgICBSZWZQdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbCA9IGFkb3B0UmVmKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117990</attachid>
            <date>2011-12-05 22:45:56 -0800</date>
            <delta_ts>2011-12-08 10:46:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111205224555.patch</filename>
            <type>text/plain</type>
            <size>15585</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5MDhiN2FhMjcxMDky
NWIxYjYxZTk3ODMwYmI4NzljNmY4ZjBmNS4uOTdmYjkxODMyZjZiMTgyNDFlYTcyYWUwNmU1MGRl
YTU0MDdmYWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTA1ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cyk6IGFkZGVkIHZpZXdwb3J0IHBhcmFtCisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKTogZGl0dG8gCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOiAKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyk6IGNhbGN1bGF0ZWQgYmFzZWQg
b24gdmlld3BvcnQKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGlt
aXRCeXRlcyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6bG93TGlt
aXRCeXRlcyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6VGV4dHVy
ZU1hbmFnZXIpOiBhZGRlZCB2aWV3cG9ydCBwYXJhbQorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hbmFnZXI6OnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMpOiBjaGFuZ2VkIG5hbWUKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpzZXRQcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKTog
YWRkZWQgZnVuY3Rpb24KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0
VGV4dHVyZSk6IGFkZGVkIHZpZXdwb3J0IHBhcmFtCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaDogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYW5hZ2VyOjpjcmVhdGUpOiBkaXR0bworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZCk6IGRpdHRvCisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KTogZGl0dG8KKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZSk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZEJlY29tZUludmlzaWJsZU9uSW1wbFRocmVhZCk6
IGRpdHRvCisKIDIwMTEtMTItMDIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDE3MzEuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY2ZTQwYjQxNzVhNTllN2Y2NDE2MzZkNGZhM2FmNTRl
Njc5MGYwYzguLmJlMDk0MmE4NmMyMzA2ODgxMDQzNTUzMWQ0NjAxNTI3ZDI2ZTIwN2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTItMDUgIEVyaWMg
UGVubmVyICA8ZXBlbm5lckBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2V0IHRl
eHR1cmUgbGltaXRzIGFzIG11bHRpcGxlcyBvZiB2aWV3cG9ydCBzaXplIGluc3RlYWQgb2YgaGFy
ZGNvZGVkIHZhbHVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIyMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoV1RGOjpU
RVNUKToKKwogMjAxMS0xMi0wMiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwMTMzNy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDA3OTc0ZGY5YzhiYzhiYzgwMmRjZTkzZDJjODQ0
NjFjODYzNTJlMGMuLjdiOTRlZTRmYzRjZWZkMDUwODNhOTE4ZmI4OTJlMTM4MzY3OWEzOWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzA0LDEzICszMDQsMTgg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgICAgICByZXR1
cm47CiAKICAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0
dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6aGln
aExpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOworICAgIHNpemVfdCBtYXhM
aW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7Cisg
ICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRl
cyh2aWV3cG9ydFNpemUoKSk7CisKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtYXhMaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMp
OworCiAgICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAKLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6
OnJlY2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQotICAgICAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJl
TWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwor
ICAgIGlmIChyZWNsYWltTGltaXQgPiBjb250ZW50c01lbW9yeVVzZUJ5dGVzKQorICAgICAgICBt
X3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRl
cyhyZWNsYWltTGltaXQgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzKTsKICAgICBlbHNlCi0gICAg
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDAp
OworICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0UHJlZmVycmVkTWVt
b3J5TGltaXRCeXRlcygwKTsKKwogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5k
ZWxldGVFdmljdGVkVGV4dHVyZXMobV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvci5nZXQo
KSk7CiAKICAgICBpZiAoc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pCkBAIC02NjksNyAr
Njc0LDkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKCkKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Zmx1c2goKSk7CiAK
LSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCksIG1fY2FwYWJpbGl0aWVzLm1heFRl
eHR1cmVTaXplKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKHZpZXdwb3J0U2l6
ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwogICAgIG1fY29udGVudHNUZXh0
dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0
LmdldCgpKTsKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAppbmRleCAzNzk1YmU0M2M1ZDZkZDUxZGQzM2I1MWMx
NWZmOWE2NTE4MjlkN2E3Li5kNjZiMDZhZTNkMjBkYTliZDE1MTMxZjU3MGUzYTY3MzY1YzYzOGQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
ZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCkBAIC0zMCwyMSArMzAsNTUgQEAKIAogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXNpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0
ZXMoKQorCituYW1lc3BhY2Ugeworc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IHZpZXdw
b3J0TXVsdGlwbGllciwgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBzaXplX3QgbWluTWVn
YWJ5dGVzLCBzaXplX3QgbWF4TWVnYWJ5dGVzKQoreworICAgIGlmICh2aWV3cG9ydFNpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbWluTWVnYWJ5dGVzICogMTAyNCAqIDEwMjQ7CisgICAg
cmV0dXJuIG1heChtaW5NZWdhYnl0ZXMgKiAxMDI0ICogMTAyNCwgbWluKG1heE1lZ2FieXRlcyAq
IDEwMjQgKiAxMDI0LCB2aWV3cG9ydE11bHRpcGxpZXIgKiBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5
VXNlQnl0ZXModmlld3BvcnRTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpKTsKK30KK30K
Kworc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUpCiB7Ci0gICAgcmV0dXJuIDEyOCAqIDEwMjQgKiAxMDI0OworICAgIHNpemVf
dCB2aWV3cG9ydE11bHRpcGxpZXIsIG1pbk1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzOworICAgIHZp
ZXdwb3J0TXVsdGlwbGllciA9IDg7CisjaWYgT1MoQU5EUk9JRCkKKyAgICBtaW5NZWdhYnl0ZXMg
PSAyNDsKKyAgICBtYXhNZWdhYnl0ZXMgPSAzMjsKKyNlbHNlCisgICAgbWluTWVnYWJ5dGVzID0g
NjQ7CisgICAgbWF4TWVnYWJ5dGVzID0gMTI4OworI2VuZGlmCisgICAgcmV0dXJuIG1lbW9yeUxp
bWl0Qnl0ZXModmlld3BvcnRNdWx0aXBsaWVyLCB2aWV3cG9ydFNpemUsIG1pbk1lZ2FieXRlcywg
bWF4TWVnYWJ5dGVzKTsKIH0KIAotc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRC
eXRlcygpCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKLSAgICByZXR1cm4gNjQgKiAxMDI0ICogMTAyNDsKKyAg
ICBzaXplX3Qgdmlld3BvcnRNdWx0aXBsaWVyLCBtaW5NZWdhYnl0ZXMsIG1heE1lZ2FieXRlczsK
KyAgICB2aWV3cG9ydE11bHRpcGxpZXIgPSA0OworI2lmIE9TKEFORFJPSUQpCisgICAgbWluTWVn
YWJ5dGVzID0gOTsKKyAgICBtYXhNZWdhYnl0ZXMgPSAzMjsKKyNlbHNlCisgICAgbWluTWVnYWJ5
dGVzID0gMzI7CisgICAgbWF4TWVnYWJ5dGVzID0gNjQ7CisjZW5kaWYKKyAgICByZXR1cm4gbWVt
b3J5TGltaXRCeXRlcyh2aWV3cG9ydE11bHRpcGxpZXIsIHZpZXdwb3J0U2l6ZSwgbWluTWVnYWJ5
dGVzLCBtYXhNZWdhYnl0ZXMpOwogfQogCi1zaXplX3QgVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0
Qnl0ZXMoKQorc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSkKIHsKLSAgICByZXR1cm4gMyAqIDEwMjQgKiAxMDI0OworICAgIHNp
emVfdCB2aWV3cG9ydE11bHRpcGxpZXIsIG1pbk1lZ2FieXRlcywgbWF4TWVnYWJ5dGVzOworICAg
IHZpZXdwb3J0TXVsdGlwbGllciA9IDE7CisgICAgbWluTWVnYWJ5dGVzID0gMjsKKyAgICBtYXhN
ZWdhYnl0ZXMgPSAzOworICAgIHJldHVybiBtZW1vcnlMaW1pdEJ5dGVzKHZpZXdwb3J0TXVsdGlw
bGllciwgdmlld3BvcnRTaXplLCBtaW5NZWdhYnl0ZXMsIG1heE1lZ2FieXRlcyk7CiB9CiAKIHNp
emVfdCBUZXh0dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
R0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKQEAgLTYwLDE5ICs5NCwyNiBAQCBzaXplX3QgVGV4dHVy
ZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIHRl
eHR1cmVGb3JtYQogfQogCiAKLVRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFuYWdlcihzaXplX3Qg
bWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQotICAgIDogbV9tZW1vcnlMaW1p
dEJ5dGVzKG1lbW9yeUxpbWl0Qnl0ZXMpCitUZXh0dXJlTWFuYWdlcjo6VGV4dHVyZU1hbmFnZXIo
c2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5
dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCisgICAgOiBtX21heE1lbW9yeUxpbWl0Qnl0ZXMobWF4
TWVtb3J5TGltaXRCeXRlcykKKyAgICAsIG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhwcmVm
ZXJyZWRNZW1vcnlMaW1pdEJ5dGVzKQogICAgICwgbV9tZW1vcnlVc2VCeXRlcygwKQogICAgICwg
bV9tYXhUZXh0dXJlU2l6ZShtYXhUZXh0dXJlU2l6ZSkKICAgICAsIG1fbmV4dFRva2VuKDEpCiB7
CiB9CiAKLXZvaWQgVGV4dHVyZU1hbmFnZXI6OnNldE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1l
bW9yeUxpbWl0Qnl0ZXMpCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpzZXRNYXhNZW1vcnlMaW1pdEJ5
dGVzKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzKQogewogICAgIHJlZHVjZU1lbW9yeVRvTGltaXQo
bWVtb3J5TGltaXRCeXRlcyk7CiAgICAgQVNTRVJUKGN1cnJlbnRNZW1vcnlVc2VCeXRlcygpIDw9
IG1lbW9yeUxpbWl0Qnl0ZXMpOwotICAgIG1fbWVtb3J5TGltaXRCeXRlcyA9IG1lbW9yeUxpbWl0
Qnl0ZXM7CisgICAgbV9tYXhNZW1vcnlMaW1pdEJ5dGVzID0gbWVtb3J5TGltaXRCeXRlczsKK30K
Kwordm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0UHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyhzaXpl
X3QgbWVtb3J5TGltaXRCeXRlcykKK3sKKyAgICByZWR1Y2VNZW1vcnlUb0xpbWl0KG1lbW9yeUxp
bWl0Qnl0ZXMpOworICAgIG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyA9IG1lbW9yeUxpbWl0
Qnl0ZXM7CiB9CiAKIFRleHR1cmVUb2tlbiBUZXh0dXJlTWFuYWdlcjo6Z2V0VG9rZW4oKQpAQCAt
MjQzLDExICsyODQsMTEgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUoVGV4
dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKICAgICB9CiAKICAgICBz
aXplX3QgbWVtb3J5UmVxdWlyZWRCeXRlcyA9IG1lbW9yeVVzZUJ5dGVzKHNpemUsIGZvcm1hdCk7
Ci0gICAgaWYgKG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBtX21lbW9yeUxpbWl0Qnl0ZXMpCisgICAg
aWYgKG1lbW9yeVJlcXVpcmVkQnl0ZXMgPiBtX21heE1lbW9yeUxpbWl0Qnl0ZXMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJlZHVjZU1lbW9yeVRvTGltaXQobV9tZW1vcnlMaW1pdEJ5
dGVzIC0gbWVtb3J5UmVxdWlyZWRCeXRlcyk7Ci0gICAgaWYgKG1fbWVtb3J5VXNlQnl0ZXMgKyBt
ZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9tZW1vcnlMaW1pdEJ5dGVzKQorICAgIHJlZHVjZU1lbW9y
eVRvTGltaXQobV9tYXhNZW1vcnlMaW1pdEJ5dGVzIC0gbWVtb3J5UmVxdWlyZWRCeXRlcyk7Cisg
ICAgaWYgKG1fbWVtb3J5VXNlQnl0ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gbV9tYXhNZW1v
cnlMaW1pdEJ5dGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBUZXh0dXJlSW5mbyBp
bmZvOwpAQCAtMjYwLDcgKzMwMSw3IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0
dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAjZW5kaWYK
ICAgICAvLyBBdm9pZCBjaHVybmluZyBieSByZXVzaW5nIHRoZSB0ZXh0dXJlIGlmIGl0IGlzIGFi
b3V0IHRvIGJlIHJlY2xhaW1lZCBhbmQKICAgICAvLyBpdCBoYXMgdGhlIHNhbWUgc2l6ZSBhbmQg
Zm9ybWF0IGFzIHRoZSByZXF1ZXN0aW5nIHRleHR1cmUuCi0gICAgaWYgKG1fbWVtb3J5VXNlQnl0
ZXMgKyBtZW1vcnlSZXF1aXJlZEJ5dGVzID4gcmVjbGFpbUxpbWl0Qnl0ZXMoKSkgeworICAgIGlm
IChtX21lbW9yeVVzZUJ5dGVzICsgbWVtb3J5UmVxdWlyZWRCeXRlcyA+IG1fcHJlZmVycmVkTWVt
b3J5TGltaXRCeXRlcykgewogICAgICAgICB0ZXh0dXJlSWQgPSByZXBsYWNlVGV4dHVyZSh0b2tl
biwgaW5mbyk7CiAgICAgICAgIGlmICh0ZXh0dXJlSWQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5oCmluZGV4IGIxOTFmN2I2OGJhYjIxYmQ5YzQwMTI3ZDJhMGZk
M2ZjMTg0YTdhOTMuLmM2YzIxYWQ1OWM4NGIxZWQ4NjBhNDU3MTY2NGVmYjBkNDVlMWJhZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1
cmVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZU1hbmFnZXIuaApAQCAtNDksMjEgKzQ5LDIyIEBAIHByb3RlY3RlZDoKIGNsYXNz
IFRleHR1cmVNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0dXJlTWFuYWdl
cik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VGV4dHVyZU1hbmFnZXI+IGNyZWF0
ZShzaXplX3QgbWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBjcmVhdGUoc2l6ZV90IG1heE1lbW9yeUxpbWl0
Qnl0ZXMsIHNpemVfdCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNp
emUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleHR1cmVNYW5hZ2VyKG1l
bW9yeUxpbWl0Qnl0ZXMsIG1heFRleHR1cmVTaXplKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVGV4dHVyZU1hbmFnZXIobWF4TWVtb3J5TGltaXRCeXRlcywgcHJlZmVycmVkTWVtb3J5
TGltaXRCeXRlcywgbWF4VGV4dHVyZVNpemUpKTsKICAgICB9CiAKICAgICAvLyBBYnNvbHV0ZSBt
YXhpbXVtIGxpbWl0IGZvciB0ZXh0dXJlIGFsbG9jYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLgot
ICAgIHN0YXRpYyBzaXplX3QgaGlnaExpbWl0Qnl0ZXMoKTsKLSAgICAvLyBQcmVmZXJyZWQgdGV4
dHVyZSBzaXplIGxpbWl0LiBDYW4gYmUgZXhjZWVkZWQgaWYgbmVlZGVkLgotICAgIHN0YXRpYyBz
aXplX3QgcmVjbGFpbUxpbWl0Qnl0ZXMoKTsKKyAgICBzdGF0aWMgc2l6ZV90IGhpZ2hMaW1pdEJ5
dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSk7CisgICAgLy8gUHJlZmVycmVkIHRleHR1
cmUgc2l6ZSBsaW1pdCBnaXZlbiB0aGUgdmlld3BvcnQgc2l6ZS4KKyAgICBzdGF0aWMgc2l6ZV90
IHJlY2xhaW1MaW1pdEJ5dGVzKGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSk7CiAgICAgLy8g
VGhlIG1heGltdW0gdGV4dHVyZSBtZW1vcnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRl
eHR1cmVzLgotICAgIHN0YXRpYyBzaXplX3QgbG93TGltaXRCeXRlcygpOworICAgIHN0YXRpYyBz
aXplX3QgbG93TGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydCk7CiAKICAgICBzdGF0
aWMgc2l6ZV90IG1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQp
OwogCi0gICAgdm9pZCBzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRQcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzKHNpemVfdCk7CiAKICAgICBUZXh0dXJlVG9rZW4gZ2V0VG9rZW4oKTsKICAgICB2
b2lkIHJlbGVhc2VUb2tlbihUZXh0dXJlVG9rZW4pOwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6
CiAgICAgc2l6ZV90IGN1cnJlbnRNZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVt
b3J5VXNlQnl0ZXM7IH0KIAogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFuYWdlcihzaXplX3QgbWVt
b3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBUZXh0dXJlTWFuYWdlcihz
aXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0
ZXMsIGludCBtYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBzdHJ1Y3QgVGV4dHVyZUluZm8gewogICAg
ICAgICBJbnRTaXplIHNpemU7CkBAIC0xMDUsNyArMTA2LDggQEAgcHJpdmF0ZToKICAgICBUZXh0
dXJlTWFwIG1fdGV4dHVyZXM7CiAgICAgTGlzdEhhc2hTZXQ8VGV4dHVyZVRva2VuPiBtX3RleHR1
cmVMUlVTZXQ7CiAKLSAgICBzaXplX3QgbV9tZW1vcnlMaW1pdEJ5dGVzOworICAgIHNpemVfdCBt
X21heE1lbW9yeUxpbWl0Qnl0ZXM7CisgICAgc2l6ZV90IG1fcHJlZmVycmVkTWVtb3J5TGltaXRC
eXRlczsKICAgICBzaXplX3QgbV9tZW1vcnlVc2VCeXRlczsKICAgICBpbnQgbV9tYXhUZXh0dXJl
U2l6ZTsKICAgICBUZXh0dXJlVG9rZW4gbV9uZXh0VG9rZW47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAppbmRleCBkYjE4MDllMDhjYmZiZTcxMjQ0Y2Q4ZGM1YThkYThiYTU2NTA4YmEw
Li4yN2MxNzA0ZTcyMjM4NmJlZGE3ZDA5YmI1YTc3NGEwNTM3OWY0MTg3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTkzLDcgKzkzLDkgQEAgYm9vbCBDQ0xheWVyVHJlZUhv
c3Q6OmluaXRpYWxpemUoKQogICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIGNhcGFi
aWxpdGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhlIHJlbmRlcmVyLgogICAgIG1fc2V0dGlu
Z3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cygpLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsKIAotICAgIG1fY29udGVudHNUZXh0dXJlTWFu
YWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoVGV4dHVyZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5
dGVzKCksIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6
ZSk7CisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0
ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZU1h
bmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJveHktPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTEyNiw3ICsxMjgsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXRP
bkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiAgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
Ojpjb21taXRUbyIsIHRoaXMsIDApOwogCi0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5y
ZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpKTsK
KyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVy
ZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIH0KIApAQCAtMjMzLDYgKzIzNSw4IEBAIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdygpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpz
ZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7CisgICAgY29udGVudHNU
ZXh0dXJlTWFuYWdlcigpLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpo
aWdoTGltaXRCeXRlcyh2aWV3cG9ydFNpemUpKTsKKyAgICBjb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCktPnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1M
aW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSkpOwogICAgIG1fdmlld3BvcnRTaXplID0gdmlld3BvcnRT
aXplOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CkBAIC0yNjMsNyArMjY3LDcgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogCiAgICAgbV92aXNpYmxl
ID0gdmlzaWJsZTsKICAgICBpZiAoIXZpc2libGUpIHsKLSAgICAgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5
dGVzKCkpOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRv
TGltaXQoVGV4dHVyZU1hbmFnZXI6Omxvd0xpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpKTsKICAg
ICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwog
ICAgIH0KIApAQCAtMjc5LDcgKzI4Myw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRCZWNv
bWVJbnZpc2libGVPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltCiAgICAg
aWYgKG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5jb250ZXh0SGFzQ2FjaGVk
RnJvbnRCdWZmZXIpCiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+ZXZpY3RBbmRE
ZWxldGVBbGxUZXh0dXJlcyhob3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOwog
ICAgIGVsc2UgewotICAgICAgICBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9y
eVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkpOworICAgICAgICBj
b250ZW50c1RleHR1cmVNYW5hZ2VyKCktPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFn
ZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgICAgIGNvbnRlbnRz
VGV4dHVyZU1hbmFnZXIoKS0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKGhvc3RJbXBsLT5jb250ZW50
c1RleHR1cmVBbGxvY2F0b3IoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggYTkxOGY3
ZDU3ZjRiODg1NTRmZTZjOTc3YTI4MjJkYmQyNWFkYWJjOC4uNjNhYTQ1NmFkOGQ4Y2NiM2ZlMDRm
YWZjMTYyMGJmMGYyNGU2N2Y0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAg
cHJpdmF0ZToKIAogVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxlcykK
IHsKLSAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CisgICAgT3duUHRyPFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQs
IDIqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4g
bGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwogICAg
IFJlZlB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsID0gYWRvcHRSZWYobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDApKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118420</attachid>
            <date>2011-12-08 10:46:26 -0800</date>
            <delta_ts>2011-12-08 17:05:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72202-20111208104625.patch</filename>
            <type>text/plain</type>
            <size>34604</size>
            <attacher name="Eric Penner">epenner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMjk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ0YjMwNGE3NGU0NjQ1
NjRiOTE5YTUxNTdlZTRiOGQ2ZTNjZDk3Mi4uNzA2YzVlYTRmZGZmMjAwMGMwZWUyMDJlN2RjYTkw
M2JmMGUzYjhjYSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTEyLTA4ICBFcmlj
IFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFNldCB0
ZXh0dXJlIGxpbWl0cyBhcyBtdWx0aXBsZXMgb2Ygdmlld3BvcnQgc2l6ZSBpbnN0ZWFkIG9mIGhh
cmRjb2RlZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyMjAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29u
dGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlkbGVQ
YWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6
OnByb3RlY3RUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9t
aXVtOjpUaWxlZExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlSWRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50UmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250
ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Npbmds
ZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdCk6CisKIDIwMTEtMTItMDcgIFNo
YXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBDbGVhcmluZyByb290IHN1cmZhY2Ugc2hvdWxkIGhhcHBlbiBhZnRlciBkYW1hZ2UgdHJhY2tp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjhkZWMyMjkwZWJmM2ZlYzM0ZWNjNmRk
NmZlNmZkOTRjMjlkZGZlYy4uYjUyNjY3NjhkZjc0NzU0YmM5NjY4OTg3NjRmYzdkMzI1MjFiNmQx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0xMi0w
OCAgRXJpYyBQZW5uZXIgIDxlcGVubmVyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVt
XSBTZXQgdGV4dHVyZSBsaW1pdHMgYXMgbXVsdGlwbGVzIG9mIHZpZXdwb3J0IHNpemUgaW5zdGVh
ZCBvZiBoYXJkY29kZWQgdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MjIwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChX
VEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nOjppZGxlUGFpbnRDb250
ZW50c0NvdW50KToKKyAgICAgICAgKFdURjo6Q29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRl
VHJhY2tpbmc6OnJlc2V0UGFpbnRDb250ZW50c0NvdW50KToKKyAgICAgICAgKFdURjo6Q29udGVu
dExheWVyQ2hyb21pdW1XaXRoVXBkYXRlVHJhY2tpbmc6OmlkbGVQYWludENvbnRlbnRzSWZEaXJ0
eSk6CisgICAgICAgIChXVEY6OkNvbnRlbnRMYXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5n
OjpDb250ZW50TGF5ZXJDaHJvbWl1bVdpdGhVcGRhdGVUcmFja2luZyk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3RPcGFjaXR5Q2hhbmdlOjphZnRlclRlc3QpOgorICAgICAgICAq
IHRlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoV1RGOjpGYWtlVGls
ZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKToKKyAgICAgICAgKFdURjo6RmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bTo6bmVlZHNJZGxlUGFpbnQpOgorICAgICAgICAoV1RGOjpURVNU
KToKKwogMjAxMS0xMi0wNyAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBQcmVzZXJ2ZSBvcmlnaW5hbCBwYWdlU2NhbGUgbGltaXRzIGlu
IFdlYlZpZXdJbXBsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMmEy
NDY2ZDkxMjlhZWMzNjQwOTMyMjljYjkzNWFmODJkNTA3MjRiNi4uYzI4NGVlYTMxYTQwMGUzZTky
NTMyOTViNWYyNjAzNDQ5ZjlkODBkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcApAQCAtMTA5LDYgKzEwOSwyMCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKIH0KIAordm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6aWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKK3sKKyAg
ICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CisgICAgaWYgKGxheWVyUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUlkbGUobGF5
ZXJSZWN0KTsKKyAgICBpZiAobmVlZHNJZGxlUGFpbnQobGF5ZXJSZWN0KSkKKyAgICAgICAgc2V0
TmVlZHNDb21taXQoKTsKK30KKwogYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250
ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kZWxlZ2F0ZSAmJiBtX2RlbGVnYXRlLT5kcmF3
c0NvbnRlbnQoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXggYjgzNGU2NzZiZDYzNDQ1YWE0NTNiMzY1ZWVl
MjgwMjQwZjM4MDljMS4uMGM1NzRiNWRmZGMwYTU3MWI4MTFiZTAzOTc2NGFjNzViMWMyZTNlZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC01MCw2ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgdmlydHVhbCB2b2lkIGlkbGVQYWludENv
bnRlbnRzSWZEaXJ0eSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVy
Q2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNWUwNWMx
NTdjNzk1Y2UxZTA2NGRmMmRmOTY0NDA3YWRiZmU1NTBiMC4uZThjNzJhYjQ0OWExZTNmNTc5N2I4
MjQxMWVkYTliYjQxMDQ1MGU3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTYxLDYgKzE2MSw3
IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92
ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaWRsZVBhaW50Q29udGVudHNJZkRp
cnR5KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3Jh
cGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldElzTWFzayhib29sKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNU
ZXh0dXJlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggZDY2YjA2YWUzZDIwZGE5
YmQxNTEzMWY1NzBlM2E2NzM2NWM2MzhkMi4uZWRkMWY2ODA5YzRlOTFlMzA3YzNiMjhmMDhlMDdi
ZGY4MTE4OTE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcApAQCAtMTQxLDcgKzE0MSw2IEBA
IGJvb2wgVGV4dHVyZU1hbmFnZXI6OmlzUHJvdGVjdGVkKFRleHR1cmVUb2tlbiB0b2tlbikKIHZv
aWQgVGV4dHVyZU1hbmFnZXI6OnByb3RlY3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbikKIHsK
ICAgICBBU1NFUlQoaGFzVGV4dHVyZSh0b2tlbikpOwotICAgIEFTU0VSVCghbV90ZXh0dXJlcy5n
ZXQodG9rZW4pLmlzUHJvdGVjdGVkKTsKICAgICBUZXh0dXJlSW5mbyBpbmZvID0gbV90ZXh0dXJl
cy50YWtlKHRva2VuKTsKICAgICBpbmZvLmlzUHJvdGVjdGVkID0gdHJ1ZTsKICAgICBtX3RleHR1
cmVzLmFkZCh0b2tlbiwgaW5mbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRl
eCA1YzU1ZjU5YmYzZTczNzJmZTllYzUxMmVmNjM2MTEwMWFjNWEwNWU1Li5lMzE4Y2IxNTdhNDFl
YWUzOWI2ZGNjM2IxZGY1ZmQ2ZmQ2NmYxYzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTcyLDYgKzcyLDcgQEAgVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hy
b21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKICAgICA6IExheWVyQ2hyb21pdW0oZGVs
ZWdhdGUpCiAgICAgLCBtX3RleHR1cmVGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSkKICAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQorICAgICwgbV9za2lwc0lkbGVQYWludChm
YWxzZSkKICAgICAsIG1fdGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0ZXI6Oklu
dmFsaWRPcmllbnRhdGlvbikKICAgICAsIG1fc2FtcGxlZFRleGVsRm9ybWF0KExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQpCiAgICAgLCBtX3RpbGluZ09wdGlv
bihBdXRvVGlsZSkKQEAgLTkzLDcgKzk0LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNs
ZWFudXBSZXNvdXJjZXMoKQogCiAgICAgbV90aWxlci5jbGVhcigpOwogICAgIG1fcGFpbnRSZWN0
ID0gSW50UmVjdCgpOwotICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAg
ICBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QoKTsKIH0KIAogdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCkKQEAgLTE3OSwx
MSArMTgwLDEzIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlCiAgICAgQVNTRVJUKG1fdGlsZXIp
OwogCiAgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5l
ZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1p
ZC11cGRhdGUuCi0gICAgaWYgKG1fc2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlUmVjdC5p
c0VtcHR5KCkgfHwgIW1fdGlsZXIgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgaWYgKG1f
c2tpcHNEcmF3IHx8IG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0LmlzRW1wdHkoKSB8fCAhbV90
aWxlciB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKLSAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGls
ZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20p
OworICAgIGludCBsZWZ0ID0gbV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QueCgpOworICAgIGlu
dCB0b3AgPSBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdC55KCk7CisgICAgaW50IHJpZ2h0ID0g
bV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0g
bV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1JlY3QubWF4WSgpIC0gMTsKICAgICBmb3IgKGludCBqID0g
dG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9
IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQo
aSwgaik7CkBAIC0zNDIsMzggKzM0NSwxNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJv
dGVjdFRpbGVUZXh0dXJlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKICAgICB9CiB9CiAK
LXZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QpCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlVGls
ZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQog
ewotICAgIGlmICghbV90aWxlcikKLSAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3NpdGVk
Q29udGVudCgpID8gQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRp
bGluZ0RhdGE6Okhhc0JvcmRlclRleGVscyk7Ci0KLSAgICBBU1NFUlQobV90aWxlcik7Ci0KLSAg
ICBtX3NraXBzRHJhdyA9IGZhbHNlOwotCiAgICAgLy8gUmVzZXQgbV91cGRhdGVSZWN0IGZvciBh
bGwgdGlsZXMuCiAgICAgZm9yIChDQ0xheWVyVGlsaW5nRGF0YTo6VGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fdGlsZXItPnRpbGVzKCkuYmVnaW4oKTsgaXRlciAhPSBtX3RpbGVyLT50
aWxlcygpLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHN0
YXRpY19jYXN0PFVwZGF0YWJsZVRpbGUqPihpdGVyLT5zZWNvbmQuZ2V0KCkpOwogICAgICAgICB0
aWxlLT5tX3VwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7CiAgICAgfQogCi0gICAgaWYgKGNvbnRlbnRS
ZWN0LmlzRW1wdHkoKSkgewotICAgICAgICBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QgPSBJbnRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3RpbGVyLT5ncm93TGF5ZXJUb0Nv
bnRhaW4oY29udGVudFJlY3QpOwotCi0gICAgaWYgKCFtX3RpbGVyLT5udW1UaWxlcygpKSB7Ci0g
ICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3QoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIC8vIENyZWF0ZSB0aWxlcyBhcyBuZWVkZWQsIGV4cGFuZGluZyBhIGRp
cnR5IHJlY3QgdG8gY29udGFpbiBhbGwKICAgICAvLyB0aGUgZGlydHkgcmVnaW9ucyBjdXJyZW50
bHkgYmVpbmcgZHJhd24uCiAgICAgSW50UmVjdCBkaXJ0eUxheWVyUmVjdDsKLSAgICBpbnQgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tOwotICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5k
aWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBmb3IgKGlu
dCBqID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0
OyBpIDw9IHJpZ2h0OyArK2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0
aWxlQXQoaSwgaik7CkBAIC0zODQsOCArMzY2LDExIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAgICAgICAg
ICAgICAgdGlsZS0+bV9kaXJ0eUxheWVyUmVjdCA9IG1fdGlsZXItPnRpbGVMYXllclJlY3QodGls
ZSk7CiAKICAgICAgICAgICAgIGlmICghdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+cmVzZXJ2ZSht
X3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpKSB7Ci0gICAgICAgICAgICAgICAg
bV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNsZWFudXBSZXNvdXJjZXMoKTsK
KyAgICAgICAgICAgICAgICBtX3NraXBzSWRsZVBhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlkbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtMzkzLDIyICsz
NzgsMjIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIER1ZSB0byBi
b3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmll
cywgaXQKLSAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUg
b3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKLSAgICAvLyB0aGF0IG9yaWdpbmFsIHJlY3Qg
c28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCi0gICAgbV9yZXF1
ZXN0ZWRVcGRhdGVSZWN0ID0gY29udGVudFJlY3Q7Ci0KICAgICBtX3BhaW50UmVjdCA9IG1fdGls
ZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QoZGlydHlMYXllclJlY3QpOwogICAgIGlmIChkaXJ0
eUxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIER1ZSB0byBi
b3JkZXJzLCB3aGVuIHRoZSBwYWludCByZWN0IGlzIGV4dGVuZGVkIHRvIHRpbGUgYm91bmRhcmll
cywgaXQKKyAgICAvLyBtYXkgZW5kIHVwIG92ZXJsYXBwaW5nIG1vcmUgdGlsZXMgdGhhbiB0aGUg
b3JpZ2luYWwgY29udGVudCByZWN0LiBSZWNvcmQKKyAgICAvLyB0aGUgb3JpZ2luYWwgdGlsZXMg
c28gd2UgZG9uJ3QgdXBsb2FkIG1vcmUgdGlsZXMgdGhhbiBuZWNlc3NhcnkuCisgICAgaWYgKCFt
X3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlVGlsZXNSZWN0
ID0gSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCArIDEsIGJvdHRvbSAtIHRvcCArIDEp
OworCiAgICAgLy8gQ2FsbGluZyBwcmVwYXJlVG9VcGRhdGUoKSBjYWxscyBpbnRvIFdlYktpdCB0
byBwYWludCwgd2hpY2ggbWF5IGhhdmUgdGhlIHNpZGUKICAgICAvLyBlZmZlY3Qgb2YgZGlzYWJs
aW5nIGNvbXBvc2l0aW5nLCB3aGljaCBjYXVzZXMgb3VyIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVy
ZSB1cGRhdGVyIHRvIGJlIGRlbGV0ZWQuCiAgICAgLy8gSG93ZXZlciwgd2UgY2FuJ3QgZnJlZSB0
aGUgbWVtb3J5IGJhY2tpbmcgdGhlIEdyYXBoaWNzQ29udGV4dCB1bnRpbCB0aGUgcGFpbnQgZmlu
aXNoZXMsCiAgICAgLy8gc28gd2UgZ3JhYiBhIGxvY2FsIHJlZmVyZW5jZSBoZXJlIHRvIGhvbGQg
dGhlIHVwZGF0ZXIgYWxpdmUgdW50aWwgdGhlIHBhaW50IGNvbXBsZXRlcy4KICAgICBSZWZQdHI8
TGF5ZXJUZXh0dXJlVXBkYXRlcj4gcHJvdGVjdG9yKHRleHR1cmVVcGRhdGVyKCkpOwogICAgIHRl
eHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShtX3BhaW50UmVjdCwgbV90aWxlci0+dGls
ZVNpemUoKSwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCksIGNvbnRlbnRzU2NhbGUoKSk7Ci0g
ICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fcmVxdWVzdGVkVXBkYXRlUmVj
dCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBmb3IgKGludCBqID0gdG9wOyBqIDw9
IGJvdHRvbTsgKytqKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyAr
K2kpIHsKICAgICAgICAgICAgIFVwZGF0YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CkBA
IC00NDAsNSArNDI1LDEyMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIH0KIH0KIAorCit2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KQoreworICAgIGlmICghbV90aWxlcikKKyAgICAgICAgY3JlYXRlVGlsZXIoaXNOb25Db21wb3Np
dGVkQ29udGVudCgpID8gQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXll
clRpbGluZ0RhdGE6Okhhc0JvcmRlclRleGVscyk7CisKKyAgICBBU1NFUlQobV90aWxlcik7CisK
KyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAgIG1fc2tpcHNJZGxlUGFpbnQgPSBmYWxzZTsK
KyAgICBtX3JlcXVlc3RlZFVwZGF0ZVRpbGVzUmVjdCA9IEludFJlY3QoKTsKKyAgICBtX3BhaW50
UmVjdCA9IEludFJlY3QoKTsKKworICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fdGlsZXItPmdyb3dMYXllclRvQ29udGFpbihjb250ZW50UmVj
dCk7CisKKyAgICBpZiAoIW1fdGlsZXItPm51bVRpbGVzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgbV90aWxlci0+Y29udGVudFJl
Y3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwor
CisgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXMoZmFsc2UsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRv
bSk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQoreworICAgIC8vIEFib3J0IGlmIHdlIGhhdmUgYWxy
ZWFkeSBwcmVwYXJlZCBhIHBhaW50IG9yIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGlmIChtX3Nr
aXBzSWRsZVBhaW50IHx8ICFtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIEludFJlY3QgaWRsZVBhaW50Q29udGVudFJl
Y3QgPSBpZGxlUGFpbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBtX3RpbGVyLT5ncm93TGF5ZXJU
b0NvbnRhaW4oaWRsZVBhaW50Q29udGVudFJlY3QpOworCisgICAgaWYgKCFtX3RpbGVyLT5udW1U
aWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcm90ZWN0IGFueSB0ZXh0dXJlcyBp
biB0aGUgcHJlLXBhaW50IGFyZWEgc28gd2UgZG9uJ3QgZW5kIHVwIGp1c3QKKyAgICAvLyByZWNs
YWltaW5nIHRoZW0gYmVsb3cuCisgICAgcHJvdGVjdFRpbGVUZXh0dXJlcyhpZGxlUGFpbnRDb250
ZW50UmVjdCk7CisKKyAgICAvLyBFeHBhbmQgb3V0d2FyZHMgdW50aWwgd2UgZmluZCBhIGRpcnR5
IHJvdyBvciBjb2x1bW4gdG8gdXBkYXRlLgorICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b207CisgICAgbV90aWxlci0+Y29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBs
ZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGludCBwcmVwYWludExlZnQsIHByZXBhaW50
VG9wLCBwcmVwYWludFJpZ2h0LCBwcmVwYWludEJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50
UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50Q29udGVudFJlY3QsIHByZXBhaW50TGVmdCwgcHJl
cGFpbnRUb3AsIHByZXBhaW50UmlnaHQsIHByZXBhaW50Qm90dG9tKTsKKyAgICB3aGlsZSAoIW1f
c2tpcHNJZGxlUGFpbnQgJiYgKGxlZnQgPiBwcmVwYWludExlZnQgfHwgdG9wID4gcHJlcGFpbnRU
b3AgfHwgcmlnaHQgPCBwcmVwYWludFJpZ2h0IHx8IGJvdHRvbSA8IHByZXBhaW50Qm90dG9tKSkg
eworICAgICAgICBpZiAoYm90dG9tIDwgcHJlcGFpbnRCb3R0b20pIHsKKyAgICAgICAgICAgICsr
Ym90dG9tOworICAgICAgICAgICAgcHJlcGFyZVRvVXBkYXRlVGlsZXModHJ1ZSwgbGVmdCwgYm90
dG9tLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0
eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHRvcCA+IHByZXBhaW50VG9wKSB7CisgICAgICAgICAgICAtLXRvcDsK
KyAgICAgICAgICAgIHByZXBhcmVUb1VwZGF0ZVRpbGVzKHRydWUsIGxlZnQsIHRvcCwgcmlnaHQs
IHRvcCk7CisgICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBz
SWRsZVBhaW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm
IChsZWZ0ID4gcHJlcGFpbnRMZWZ0KSB7CisgICAgICAgICAgICAtLWxlZnQ7CisgICAgICAgICAg
ICBwcmVwYXJlVG9VcGRhdGVUaWxlcyh0cnVlLCBsZWZ0LCB0b3AsIGxlZnQsIGJvdHRvbSk7Cisg
ICAgICAgICAgICBpZiAoIW1fcGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBtX3NraXBzSWRsZVBhaW50
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodCA8
IHByZXBhaW50UmlnaHQpIHsKKyAgICAgICAgICAgICsrcmlnaHQ7CisgICAgICAgICAgICBwcmVw
YXJlVG9VcGRhdGVUaWxlcyh0cnVlLCByaWdodCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICAg
ICAgICAgIGlmICghbV9wYWludFJlY3QuaXNFbXB0eSgpIHx8IG1fc2tpcHNJZGxlUGFpbnQpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGlsZWRM
YXllckNocm9taXVtOjpuZWVkc0lkbGVQYWludChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkK
K3sKKyAgICBpZiAobV9za2lwc0lkbGVQYWludCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgSW50UmVjdCBpZGxlUGFpbnRDb250ZW50UmVjdCA9
IGlkbGVQYWludFJlY3QoY29udGVudFJlY3QpOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQs
IGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMoaWRsZVBhaW50
Q29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9
IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8
PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9yZXF1ZXN0ZWRVcGRhdGVUaWxlc1Jl
Y3QuY29udGFpbnMoSW50UG9pbnQoaSwgaikpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAg
ICAgIGlmICghdGlsZSB8fCAhdGlsZS0+bWFuYWdlZFRleHR1cmUoKS0+aXNWYWxpZChtX3RpbGVy
LT50aWxlU2l6ZSgpLCBtX3RleHR1cmVGb3JtYXQpIHx8IHRpbGUtPmlzRGlydHkoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0ludFJlY3QgVGlsZWRMYXllckNocm9taXVtOjppZGxlUGFpbnRSZWN0KGNvbnN0
IEludFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKK3sKKyAgICBBU1NFUlQobV90aWxlcik7Cisg
ICAgSW50UmVjdCBwcmVwYWludFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7CisgICAgLy8gRklY
TUU6IFRoaXMgY2FuIGJlIG1hZGUgYSBsb3QgbGFyZ2VyIGlmIHdlIGNhbjoKKyAgICAvLyAtIHJl
c2VydmUgbWVtb3J5IGF0IGEgbG93ZXIgcHJpb3JpdHkgdGhhbiBmb3IgdmlzaWJsZSBjb250ZW50
CisgICAgLy8gLSBvbmx5IHJlc2VydmUgaWRsZSBwYWludCB0aWxlcyB1cCB0byBhIG1lbW9yeSBy
ZWNsYWltIHRocmVzaG9sZCBhbmQKKyAgICAvLyAtIGluc3VyZSB3ZSBwbGF5IG5pY2VseSB3aXRo
IG90aGVyIGxheWVycworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWChtX3RpbGVyLT50aWxlU2l6
ZSgpLndpZHRoKCkpOworICAgIHByZXBhaW50UmVjdC5pbmZsYXRlWShtX3RpbGVyLT50aWxlU2l6
ZSgpLmhlaWdodCgpKTsKKyAgICBwcmVwYWludFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgY29udGVudEJvdW5kcygpKSk7CisgICAgcmV0dXJuIHByZXBhaW50UmVjdDsK
K30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmgKaW5kZXggMjhlN2QxZDBjNTY5NjgwMGYzZDYyMTI0MDhkZDhkMThi
Y2VkYmVjMi4uNzRlYmZlY2VlNmVjN2ExYjk0MzlmNzg2ZTc2MTQ0NWRjYzU5N2ZlNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTc1LDkgKzc1LDE2IEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJlcGFpbnRlZCBkdXJp
bmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CisKICAgICAvLyBQcmVwYXJlIGRhdGEgbmVlZGVkIHRvIHVwZGF0ZSB0ZXh0dXJl
cyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHZvaWQgcHJlcGFyZVRvVXBk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKIAorICAgIC8vIFNhbWUgYXMgYWJvdmUs
IGJ1dCB0aGlzIHdpbGwgdHJ5IHRvIHBhaW50IGFkZGl0aW9uYWwgc3Vycm91bmRpbmcgY29udGVu
dCBpZiBpZGxlLgorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCk7CisKKyAgICAvLyBBZnRlciBwcmVwYXJpbmcgYW4gdXBkYXRlLCByZXR1cm5z
IHRydWUgaWYgbW9yZSBwcmUtcGFpbnRpbmcgaXMgbmVlZGVkLgorICAgIGJvb2wgbmVlZHNJZGxl
UGFpbnQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOworCiAgICAgdmlydHVhbCB2b2lkIHBy
b3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKICAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2Vy
KiB0ZXh0dXJlTWFuYWdlcigpIGNvbnN0OwpAQCAtOTAsMTcgKzk3LDIyIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24o
VGlsaW5nT3B0aW9uKTsKIAorICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlVGlsZXMoYm9vbCBpZGxl
LCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKTsKKyAgICBJbnRSZWN0
IGlkbGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KTsKKwogICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAgICAgVXBkYXRhYmxlVGls
ZSogY3JlYXRlVGlsZShpbnQsIGludCk7CiAKICAgICAvLyBUZW1wb3Jhcnkgc3RhdGUgaGVsZCBi
ZXR3ZWVuIHByZXBhcmVUb1VwZGF0ZSgpIGFuZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCku
Ci0gICAgSW50UmVjdCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3Q7CisgICAgSW50UmVjdCBtX3JlcXVl
c3RlZFVwZGF0ZVRpbGVzUmVjdDsKKwogICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiBwcmVwYXJl
VG9VcGRhdGUoKSBhbmQgcHVzaFByb3BlcnRpZXNUbygpLiBUaGlzIHJlcHJlc2VudHMgdGhlIGFy
ZWEKICAgICAvLyBvZiB0aGUgbGF5ZXIgdGhhdCBpcyBhY3R1YWxseSByZS1wYWludGVkIGJ5IFdl
YktpdC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogCiAgICAgR0MzRGVudW0gbV90ZXh0dXJl
Rm9ybWF0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CisgICAgYm9vbCBtX3NraXBzSWRsZVBhaW50
OwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9yaWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0
aW9uOwogICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBs
ZWRUZXhlbEZvcm1hdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMjdk
OTU2YTdjN2FmYmQwOTVkYjk0NWI5MzRhMTY2ZWZhNTVmMzc0Zi4uYWIyN2IyMmU5MWI0N2Q1Yzkz
ZWFjMWM3NjI1MjhlMTNhYWZjNzE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSgpCiAg
ICAgc3RhdGljX2Nhc3Q8Q0NTaW5nbGVUaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0KCkpLT5jb21w
b3NpdGVJbW1lZGlhdGVseSgpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5
ZXJzKCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoYm9vbCB0cmlnZ2VySWRs
ZVBhaW50cykKIHsKICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CkBAIC0z
MjIsMTAgKzMyMiwxMCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKCkKICAg
ICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1
cGRhdGVMYXllcnMocm9vdExheWVyKCkpOworICAgIHVwZGF0ZUxheWVycyh0cmlnZ2VySWRsZVBh
aW50cywgcm9vdExheWVyKCkpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5
ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRh
dGVMYXllcnMoYm9vbCB0cmlnZ2VySWRsZVBhaW50cywgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
KQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyIsIHRo
aXMsIDApOwogCkBAIC0zNTAsMTAgKzM1MCwyNCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVy
LCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgbV91cGRhdGVMaXN0
LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgfQogCi0gICAgcGFpbnRMYXllckNvbnRlbnRzKG1f
dXBkYXRlTGlzdCk7CisgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCwgUGFpbnRW
aXNpYmxlKTsKKyAgICAvLyBUaGUgc2Vjb25kIChpZGxlKSBwYWludCB3aWxsIGJlIGEgbm8tb3Ag
aW4gbGF5ZXJzIHdoZXJlIHBhaW50aW5nIGFscmVhZHkgb2NjdXJlZCBhYm92ZS4KKyAgICBpZiAo
dHJpZ2dlcklkbGVQYWludHMpCisgICAgICAgIHBhaW50TGF5ZXJDb250ZW50cyhtX3VwZGF0ZUxp
c3QsIFBhaW50SWRsZSk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRS
ZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIp
CisvLyBzdGF0aWMKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eShM
YXllckNocm9taXVtKiBsYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSkKK3sKKyAgICBBU1NFUlQo
bGF5ZXIpOworICAgIEFTU0VSVChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlIHx8IFBhaW50SWRs
ZSA9PSBwYWludFR5cGUpOworICAgIGlmIChQYWludFZpc2libGUgPT0gcGFpbnRUeXBlKQorICAg
ICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICBlbHNlCisgICAgICAgIGxh
eWVyLT5pZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJl
bmRlclN1cmZhY2VMYXllciwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICAvLyBOb3RlOiBN
YXNrcyBhbmQgcmVwbGljYXMgb25seSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBz
dXJmYWNlcy4gSWYgd2UgcmVhY2ggdGhpcyBwb2ludAogICAgIC8vIGluIGNvZGUsIHdlIGFscmVh
ZHkga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0aGluZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyBy
ZW5kZXIgc3VyZmFjZSwgc28gdGhlCkBAIC0zNjIsMjQgKzM3NiwyNCBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1
bSogcmVuZGVyUwogICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CiAg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldFZpc2li
bGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRl
bnRCb3VuZHMoKSkpOwotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5w
YWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5k
ZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBwYWludFR5cGUpOwogICAgIH0KIAogICAgIExh
eWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxh
eWVyKCk7CiAgICAgaWYgKHJlcGxpY2FMYXllcikgewogCiAgICAgICAgIHJlcGxpY2FMYXllci0+
c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcmVwbGljYUxheWVyLT5wYWludENvbnRl
bnRzSWZEaXJ0eSgpOworICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIs
IHBhaW50VHlwZSk7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsK
ICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3Qo
dGhpcyk7CiAgICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRWaXNpYmxl
TGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+
Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigp
LT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwgcGFpbnRUeXBlKTsKICAgICAgICAgfQogICAg
IH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgUGFpbnRUeXBlIHBhaW50VHlwZSkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1z
dXJmYWNlSW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVy
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtMzg4LDcg
KzQwMiw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3Qg
TGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlLT5kcmF3T3BhY2l0eSgpKTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNl
dExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5k
ZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllcik7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxp
Y2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2VMYXllciwgcGFpbnRUeXBlKTsKIAogICAg
ICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwg
bGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CkBAIC00MDEsMTAgKzQxNSw5IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAKICAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclRyZWVI
b3N0KHRoaXMpOwogCi0gICAgICAgICAgICBBU1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIWxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpOwogCi0gICAgICAgICAg
ICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVu
dHNJZkRpcnR5KGxheWVyLCBwYWludFR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBhYWFkMTQyMjlkMzUxMGVlMTkxMDIxYzc2NGM3NWI0
ZmI0NzNhYjU1Li5hYzNlM2ZlYzkzYWY5NWVmZjgwMDdiMTY2MTFjMDQ4NzczMDA5MWU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTg2LDcgKzE4Niw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhib29sKTsKIAotICAgIHZvaWQgdXBk
YXRlTGF5ZXJzKCk7CisgICAgdm9pZCB1cGRhdGVMYXllcnMoYm9vbCB0cmlnZ2VySWRsZVBhaW50
cyk7CiAKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0
M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CiAgICAgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNv
bnN0IENDU2Nyb2xsQW5kU2NhbGVTZXQmKTsKQEAgLTIwMCwxMCArMjAwLDEyIEBAIHByb3RlY3Rl
ZDoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
TGF5ZXJMaXN0OwogCi0gICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0
Jik7Ci0gICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNo
cm9taXVtKik7CisgICAgZW51bSBQYWludFR5cGUgeyBQYWludFZpc2libGUsIFBhaW50SWRsZSB9
OworICAgIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qLCBQ
YWludFR5cGUpOworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYs
IFBhaW50VHlwZSk7CisgICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFj
ZShMYXllckNocm9taXVtKiwgUGFpbnRUeXBlKTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExh
eWVyQ2hyb21pdW0qKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVycyhib29sIHRyaWdnZXJJZGxlUGFp
bnRzLCBMYXllckNocm9taXVtKik7CiAgICAgdm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKIAog
ICAgIGludCBtX2NvbXBvc2l0b3JJZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcAppbmRleCA3MmJlYzJhNzE2NjRhZjQzY2Q2NGQwMTRkMjhiODQyNjUwOTVi
MjAzLi45OGRkY2MyZjFkMmExNWEzYWM5OTdjZjg3OGM0MDY2NWU1ZDhmOWNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtNzQsNyArNzQsNyBAQCBib29sIEND
U2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdAogICAgIGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29tbWl0SWZOZWVkZWQoKTsKKyAgICBjb21taXRJ
Zk5lZWRlZChmYWxzZSk7CiAKICAgICBpZiAoIWRvQ29tcG9zaXRlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUltbWVkaWF0ZWx5KCkKICAgICBpZiAoIXJlY3JlYXRlQ29udGV4dElmTmVlZGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbW1pdElmTmVlZGVkKCk7CisgICAgY29tbWl0SWZO
ZWVkZWQodHJ1ZSk7CiAKICAgICBpZiAoZG9Db21wb3NpdGUoKSkKICAgICAgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+c3dhcEJ1ZmZlcnMoKTsKQEAgLTI2OCwxMSArMjY4LDExIEBAIGJvb2wgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCit2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKGJvb2wgdHJpZ2dlcklkbGVQ
YWludHMpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAotICAgIG1f
bGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT51cGRh
dGVMYXllcnModHJpZ2dlcklkbGVQYWludHMpOwogCiAgICAgZG9Db21taXQoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaAppbmRleCAwZDVhNGEyZDhhNTE2YjFkN2JjZjk5
MWE5OWUxYzc4Nzg5OTQzZWM1Li45NGRmOGQwYzZmNGFjMWM2YzFlMzBjMTQyMzk1NDg3NGU3OTlm
ZjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC02Niw3ICs2Niw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NTaW5nbGVUaHJlYWRQcm94eShD
Q0xheWVyVHJlZUhvc3QqKTsKICAgICBib29sIHJlY3JlYXRlQ29udGV4dElmTmVlZGVkKCk7Ci0g
ICAgdm9pZCBjb21taXRJZk5lZWRlZCgpOworICAgIHZvaWQgY29tbWl0SWZOZWVkZWQoYm9vbCB0
cmlnZ2VySWRsZVBhaW50cyk7CiAgICAgdm9pZCBkb0NvbW1pdCgpOwogICAgIGJvb2wgZG9Db21w
b3NpdGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCA4ZTc3NDI1ZTQ0MGE0
ZWRjZjI5ZjI2NWFjM2U5ZWVmZGJlMjE1ZDg3Li5iMjY2OTliYWE1NzhkZWE0MmI5MjVhNWQwYjFm
Yjg0NDAzNjhmNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMzczLDcgKzM3
Myw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVu
Y2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltCiAgICAgLy8gdXBkYXRlTGF5ZXJzLgogICAg
IG1fY29tbWl0UmVxdWVzdGVkID0gZmFsc2U7CiAKLSAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0
ZUxheWVycygpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHRydWUpOwogCiAg
ICAgLy8gQmVmb3JlIGFwcGx5aW5nIHNjcm9sbHMgYW5kIGNhbGxpbmcgYW5pbWF0ZSwgd2Ugc2V0
IG1fYW5pbWF0ZVJlcXVlc3RlZCB0byBmYWxzZS4KICAgICAvLyBJZiBpdCBpcyB0cnVlIG5vdywg
aXQgbWVhbnMgc2V0TmVlZEFuaW1hdGUgd2FzIGNhbGxlZCBhZ2Fpbi4gQ2FsbCBzZXROZWVkc0Nv
bW1pdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKaW5kZXggMzZmZDdkYmQwN2JkYzdjZjFjODYxZmQ4MmFlYmMyYjA4NGEwM2Ez
My4uYTY2N2VkYzA2NDVkNTlhYTg4OTkzZjZhMzY3MGQ3NzM4ODI2OTE2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCkBA
IC05NDgsNyArOTQ4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRM
YXllckNocm9taXVtV2l0aFVwZGF0ZVRyYWNraW5nPiBjcmVhdGUoQ0NMYXllckRlbGVnYXRlICpk
ZWxlZ2F0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRlbnRMYXllckNocm9taXVtV2l0aFVw
ZGF0ZVRyYWNraW5nKGRlbGVnYXRlKSk7IH0KIAogICAgIGludCBwYWludENvbnRlbnRzQ291bnQo
KSB7IHJldHVybiBtX3BhaW50Q29udGVudHNDb3VudDsgfQotICAgIHZvaWQgcmVzZXRQYWludENv
bnRlbnRzQ291bnQoKSB7IG1fcGFpbnRDb250ZW50c0NvdW50ID0gMDsgfQorICAgIGludCBpZGxl
UGFpbnRDb250ZW50c0NvdW50KCkgeyByZXR1cm4gbV9pZGxlUGFpbnRDb250ZW50c0NvdW50OyB9
CisgICAgdm9pZCByZXNldFBhaW50Q29udGVudHNDb3VudCgpIHsgbV9wYWludENvbnRlbnRzQ291
bnQgPSAwOyBtX2lkbGVQYWludENvbnRlbnRzQ291bnQgPSAwO30KIAogICAgIGludCB1cGRhdGVD
b3VudCgpIHsgcmV0dXJuIG1fdXBkYXRlQ291bnQ7IH0KICAgICB2b2lkIHJlc2V0VXBkYXRlQ291
bnQoKSB7IG1fdXBkYXRlQ291bnQgPSAwOyB9CkBAIC05NTksNiArOTYwLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9wYWludENvbnRlbnRzQ291bnQrKzsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZv
aWQgaWRsZVBhaW50Q29udGVudHNJZkRpcnR5KCkKKyAgICB7CisgICAgICAgIENvbnRlbnRMYXll
ckNocm9taXVtOjppZGxlUGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbV9pZGxlUGFp
bnRDb250ZW50c0NvdW50Kys7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0
ZXImIHVwZGF0ZXIpCiAgICAgewogICAgICAgICBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCB1cGRhdGVyKTsKQEAgLTk2OSwxMiArOTc2LDE0
IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW1XaXRoVXBkYXRl
VHJhY2tpbmcoQ0NMYXllckRlbGVnYXRlICpkZWxlZ2F0ZSkKICAgICAgICAgOiBDb250ZW50TGF5
ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAgICAgLCBtX3BhaW50Q29udGVudHNDb3VudCgwKQor
ICAgICAgICAsIG1faWRsZVBhaW50Q29udGVudHNDb3VudCgwKQogICAgICAgICAsIG1fdXBkYXRl
Q291bnQoMCkKICAgICB7CiAgICAgICAgIHNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAg
IH0KIAogICAgIGludCBtX3BhaW50Q29udGVudHNDb3VudDsKKyAgICBpbnQgbV9pZGxlUGFpbnRD
b250ZW50c0NvdW50OwogICAgIGludCBtX3VwZGF0ZUNvdW50OwogfTsKIApAQCAtMTAwNSw2ICsx
MDE0LDkgQEAgcHVibGljOgogICAgICAgICAvLyBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHNob3Vs
ZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UuCiAgICAgICAgIEVYUEVDVF9FUSgxLCBtX3VwZGF0ZUNo
ZWNrTGF5ZXItPnBhaW50Q29udGVudHNDb3VudCgpKTsKIAorICAgICAgICAvLyBpZGxlUGFpbnRD
b250ZW50c0lmRGlydHkoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlCisgICAgICAgIEVY
UEVDVF9FUSgxLCBtX3VwZGF0ZUNoZWNrTGF5ZXItPmlkbGVQYWludENvbnRlbnRzQ291bnQoKSk7
CisKICAgICAgICAgLy8gdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpIHNob3VsZCBoYXZlIGJl
ZW4gY2FsbGVkIHRoZSBzYW1lCiAgICAgICAgIC8vIGFtb3V0IG9mIHRpbWVzIGFzIHBhaW50Q29u
dGVudHNJZkRpcnR5KCkuCiAgICAgICAgIEVYUEVDVF9FUShtX3VwZGF0ZUNoZWNrTGF5ZXItPnBh
aW50Q29udGVudHNDb3VudCgpLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggNjNhYTQ1NmFkOGQ4Y2NiM2Zl
MDRmYWZjMTYyMGJmMGYyNGU2N2Y0My4uMjI5ZTQ1YmVjM2IyYTA3YjMwYjI4MjA0OGMzOTc2N2Jk
MGI2ZGJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Rp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC05OCw2ICs5OCwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKHJlY3QpOwogICAgIH0KIAor
ICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlSWRsZShjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsK
KyAgICAgICAgVGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGVJZGxlKHJlY3QpOwor
ICAgIH0KKworICAgIGJvb2wgbmVlZHNJZGxlUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBUaWxlZExheWVyQ2hyb21pdW06Om5lZWRzSWRsZVBhaW50KHJl
Y3QpOworICAgIH0KKwogICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2Vy
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFuYWdlcjsgfQogCiBwcml2YXRlOgpAQCAtMTQ2
LDUgKzE1NiwxMDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoRGlydHlUaWxl
cykKICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoMCwgMSkpOwogfQogCitU
RVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHB1c2hJZGxlUGFpbnRUaWxlcykKK3sKKyAgICBP
d25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZSg0KjEwMjQqMTAyNCwgMioxMDI0KjEwMjQsIDEwMjQpOworICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CisgICAgUmVmUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwg
PSBhZG9wdFJlZihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpOworCisgICAgRmFrZVRleHR1
cmVBbGxvY2F0b3IgdGV4dHVyZUFsbG9jYXRvcjsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0
ZXIoJnRleHR1cmVBbGxvY2F0b3IpOworCisgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAw
LiBTZXR1cCA1eDUgdGlsZXMgd2l0aCBvbmUgdmlzaWJsZSB0aWxlIGluIHRoZSBjZW50ZXIuCisg
ICAgSW50U2l6ZSBjb250ZW50Qm91bmRzKDUwMCwgNTAwKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRCb3VuZHMpOworICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QoMjAwLCAyMDAsIDEwMCwgMTAwKTsKKworICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgMjUg
dGlsZXMgYW5kIHRoZW4gcGFpbnRzIG9uZSB2aXNpYmxlIHRpbGUuCisgICAgbGF5ZXItPnNldEJv
dW5kcyhjb250ZW50Qm91bmRzKTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNp
YmxlUmVjdCk7CisgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBs
YXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdlIHNob3VsZCBu
ZWVkIGlkbGUtcGFpbnRpbmcgZm9yIDN4MyB0aWxlcyBpbiB0aGUgY2VudGVyLgorICAgIEVYUEVD
VF9UUlVFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisgICAgbGF5ZXIt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5ZXItPnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9u
ZSB0aWxlIG9uIHRoZSBpbXBsIHNpZGUuCisgICAgRVhQRUNUX1RSVUUobGF5ZXJJbXBsLT5oYXNU
aWxlQXQoMiwgMikpOworCisgICAgdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7CisKKyAgICAvLyBGb3IgdGhlIG5leHQgZm91ciB1cGRhdGVzLCB3ZSBzaG91bGQgZGV0ZWN0
IHdlIHN0aWxsIG5lZWQgaWRsZSBwYWludGluZy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
IGkrKykgeworICAgICAgICBsYXllci0+cHJlcGFyZVRvVXBkYXRlKHZpc2libGVSZWN0KTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUobGF5ZXItPm5lZWRzSWRsZVBhaW50KHZpc2libGVSZWN0KSk7Cisg
ICAgICAgIGxheWVyLT5wcmVwYXJlVG9VcGRhdGVJZGxlKHZpc2libGVSZWN0KTsKKyAgICAgICAg
bGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CisgICAgICAgIHRleHR1cmVN
YW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAgIH0KKworICAgIC8vIEFmdGVyIGZv
dXIgcGFzc2VzIG9mIGlkbGUgcGFpbnRpbmcsIHdlIHNob3VsZCBiZSBmaW5pc2hlZCBwYWludGlu
ZworICAgIEVYUEVDVF9GQUxTRShsYXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsK
KworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSB0aWxlIHN1cnJvdW5kaW5nIHRoZSB2aXNpYmxl
IHRpbGUgb24gYWxsIHNpZGVzLCBidXQgbm8gb3RoZXIgdGlsZXMuCisgICAgSW50UmVjdCBpZGxl
UGFpbnRUaWxlcygxLCAxLCAzLCAzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykg
eworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykgeworICAgICAgICAgICAgaWYg
KGlkbGVQYWludFRpbGVzLmNvbnRhaW5zKGksIGopKQorICAgICAgICAgICAgICAgIEVYUEVDVF9U
UlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KGksIGopKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBFWFBFQ1RfRkFMU0UobGF5ZXJJbXBsLT5oYXNUaWxlQXQoaSwgaikpOworICAg
ICAgICB9CisgICAgfQorfQorCisKK1RFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBh
aW50T3V0T2ZNZW1vcnkpCit7CisgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLiBTZXR1
cCA1eDUgdGlsZXMgd2l0aCBvbmUgMXgxIHZpc2libGUgdGlsZSBpbiB0aGUgY2VudGVyLgorICAg
IEludFNpemUgY29udGVudEJvdW5kcygzMDAsIDMwMCk7CisgICAgSW50UmVjdCBjb250ZW50UmVj
dChJbnRQb2ludDo6emVybygpLCBjb250ZW50Qm91bmRzKTsKKyAgICBJbnRSZWN0IHZpc2libGVS
ZWN0KDEwMCwgMTAwLCAxMDAsIDEwMCk7CisKKyAgICAvLyBXZSBoYXZlIGVub3VnaCBtZW1vcnkg
Zm9yIG9ubHkgdGhlIHZpc2libGUgcmVjdCwgc28gd2Ugd2lsbCBydW4gb3V0IG9mIG1lbW9yeSBp
biBmaXJzdCBpZGxlIHBhaW50LgorICAgIGludCBtZW1vcnlMaW1pdCA9IDQgKiAxMDAgKiAxMDA7
IC8vIDIgdGlsZXMsIDQgYnl0ZXMgcGVyIHBpeGVsLgorCisgICAgT3duUHRyPFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUobWVtb3J5TGltaXQs
IG1lbW9yeUxpbWl0IC8gMiwgMTAyNCk7CisgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21p
dW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1h
bmFnZXIuZ2V0KCkpKTsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
KyAgICBSZWZQdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbCA9IGFkb3B0UmVmKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSk7CisKKyAgICBGYWtlVGV4dHVyZUFsbG9jYXRvciB0
ZXh0dXJlQWxsb2NhdG9yOworICAgIENDVGV4dHVyZVVwZGF0ZXIgdXBkYXRlcigmdGV4dHVyZUFs
bG9jYXRvcik7CisKKyAgICAvLyBUaGlzIGludmFsaWRhdGVzIDkgdGlsZXMgYW5kIHRoZW4gcGFp
bnRzIG9uZSB2aXNpYmxlIHRpbGUuCisgICAgbGF5ZXItPnNldEJvdW5kcyhjb250ZW50Qm91bmRz
KTsKKyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlUmVjdCk7CisgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICBsYXllci0+cHJlcGFyZVRvVXBk
YXRlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdlIHNob3VsZCBuZWVkIGlkbGUtcGFpbnRpbmcg
Zm9yIDN4MyB0aWxlcyBzdXJvdW5kaW5nIHZpc2libGUgdGlsZS4KKyAgICBFWFBFQ1RfVFJVRShs
YXllci0+bmVlZHNJZGxlUGFpbnQodmlzaWJsZVJlY3QpKTsKKworICAgIGxheWVyLT51cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKDAsIHVwZGF0ZXIpOworICAgIGxheWVyLT5wdXNoUHJvcGVydGll
c1RvKGxheWVySW1wbC5nZXQoKSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgdGlsZSBv
biB0aGUgaW1wbCBzaWRlLgorICAgIEVYUEVDVF9UUlVFKGxheWVySW1wbC0+aGFzVGlsZUF0KDEs
IDEpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworICAg
IGxheWVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZVJlY3QpOworICAgIGxheWVyLT5wcmVwYXJl
VG9VcGRhdGVJZGxlKHZpc2libGVSZWN0KTsKKworICAgIC8vIFdlIHNob3VsZG4ndCBzaWduYWwg
d2UgbmVlZCBhbm90aGVyIGlkbGUgcGFpbnQgYWZ0ZXIgd2UgcnVuIG91dCBvZiBtZW1vcnkuCisg
ICAgRVhQRUNUX0ZBTFNFKGxheWVyLT5uZWVkc0lkbGVQYWludCh2aXNpYmxlUmVjdCkpOworCisg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoMCwgdXBkYXRlcik7CisgICAgbGF5
ZXItPnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXJJbXBsLmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>