<?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>56749</bug_id>
          
          <creation_ts>2011-03-21 09:23:29 -0700</creation_ts>
          <short_desc>Enable skia gpu rendering for content layers</short_desc>
          <delta_ts>2011-05-24 15:40:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>60719</dependson>
    
    <dependson>61143</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alok Priyadarshi">alokp</reporter>
          <assigned_to name="Alok Priyadarshi">alokp</assigned_to>
          <cc>bsalomon</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>joone.hur</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>370414</commentid>
    <comment_count>0</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-21 09:23:29 -0700</bug_when>
    <thetext>SKIA can now do hardware accelerated rendering. Enable it for content layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370439</commentid>
    <comment_count>1</comment_count>
      <attachid>86331</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-21 10:10:49 -0700</bug_when>
    <thetext>Created attachment 86331
proposed patch

The attached patch enables skia to render directly into the texture used by the compositor. It is rather crude at this point but conveys the approach I plan on taking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370815</commentid>
    <comment_count>2</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2011-03-21 12:02:54 -0700</bug_when>
    <thetext>Alok, the Gr side of this looks correct to me. Obviously there are the shared-context issues to work out but this looks like a good start so that we can begin to experiment and find the bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370956</commentid>
    <comment_count>3</comment_count>
      <attachid>86375</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-21 15:30:36 -0700</bug_when>
    <thetext>Created attachment 86375
proposed patch

I think it is ready to submit. It is hacky at this point but good enough for skia guys to play with. I will enable skia-gpu for root layer next, after which I should have a better idea on how to refactor stuff to hide the ugliness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370957</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-21 15:32:49 -0700</bug_when>
    <thetext>Attachment 86375 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:55:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:67:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:68:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370963</commentid>
    <comment_count>5</comment_count>
      <attachid>86375</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-21 15:43:11 -0700</bug_when>
    <thetext>Comment on attachment 86375
proposed patch

Please fix the style issues.

Why doesn&apos;t the fbo live on the PlatformCanvas or something further down?  It seems odd to put that on the ContentLayerChromium.  I feel like we keep creating this same abstraction multiple times in multiple places.

Additionally, tying this behavior to ENABLE(SKIA_GPU) will make it harder to evaluate using skia for just canvas 2d vs for everything.  Have you figured out how we can test these two configurations independently?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371367</commentid>
    <comment_count>6</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2011-03-22 06:53:07 -0700</bug_when>
    <thetext>&gt; Additionally, tying this behavior to ENABLE(SKIA_GPU) will make it harder to evaluate using skia for just canvas 2d vs for everything.  Have you figured out how we can test these two configurations independently?

+1. I hadn&apos;t thought of this but James is right but enabling gpu skia for C2D and layers should be testable independently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371407</commentid>
    <comment_count>7</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-22 09:04:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Additionally, tying this behavior to ENABLE(SKIA_GPU) will make it harder to evaluate using skia for just canvas 2d vs for everything.  Have you figured out how we can test these two configurations independently?
&gt; 
&gt; +1. I hadn&apos;t thought of this but James is right but enabling gpu skia for C2D and layers should be testable independently.

I would recommend making it a runtime flag option.  The &quot;--enable-composite-to-texture&quot; is a good example of a chrome-only flag that gets propagated through the webkit settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371467</commentid>
    <comment_count>8</comment_count>
      <attachid>86476</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-22 10:37:29 -0700</bug_when>
    <thetext>Created attachment 86476
proposed patch

- Fixed style issues
- Added command-line flag --enable-accelerated-content-layers. Please note that this will only come into effect if SKIA_GPU compile-time flag is enabled. I will send out the changes on chromium side shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371473</commentid>
    <comment_count>9</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-22 10:42:23 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 86375 [details])
&gt; Please fix the style issues.
&gt; 
&gt; Why doesn&apos;t the fbo live on the PlatformCanvas or something further down?  It seems odd to put that on the ContentLayerChromium.  I feel like we keep creating this same abstraction multiple times in multiple places.
&gt; 

Yes fbo on ContentLayerChromium is wrong! This is a quick hack for skia guys to play with. I would prefer to do the refactoring once I have looked at root-layer and have a better idea on how to do it. At present there are three potential candidates for refactoring - skia::PlatformCanvas, WebCore::PlatformCanvas, and WebCore::PlatformContextSkia. Mike is also looking at skia::PlatformCanvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371746</commentid>
    <comment_count>10</comment_count>
      <attachid>86530</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-22 15:49:33 -0700</bug_when>
    <thetext>Created attachment 86530
proposed patch

Reused an existing flag acceleratedDrawingEnabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371748</commentid>
    <comment_count>11</comment_count>
      <attachid>86530</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-22 15:50:52 -0700</bug_when>
    <thetext>Comment on attachment 86530
proposed patch

Please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371754</commentid>
    <comment_count>12</comment_count>
      <attachid>86530</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-22 15:56:41 -0700</bug_when>
    <thetext>Comment on attachment 86530
proposed patch

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

Overall looks good, but some things need addressing.

Please remember to add this flag to DumpRenderTree as well as chrome (see --enable-accelerated-compositing as one example) so we can run the layout tests in this configuration.

&gt; Source/WebCore/ChangeLog:8
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=56749
&gt; +
&gt; +        * platform/graphics/chromium/ContentLayerChromium.cpp:

You should try to explain a patch in the ChangeLog.  For example, on this patch it&apos;d be really nice to understand which macros this behavior is tied to, how it works at a high level, and what bits are unfinished (for example keeping m_fbo on the ContentLayerChromium is bad, so explain why it&apos;s done that way and what the plan to improve it is).

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:344
&gt; +        GraphicsContext3D* context = layerRendererContext();
&gt; +        m_contentsTexture = LayerTexture::create(context, layerRenderer()-&gt;textureManager());

not sure why you are putting &apos;context&apos; in a local here - it doesn&apos;t seem to buy much.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:68
&gt; +    bool isContentsTextureValid(const IntSize&amp;) const;
&gt; +    bool reserveContentsTexture(const IntSize&amp;);

should these go in the private section? the current subclass (ImageLayerChromium) isn&apos;t calling these functions from what I can tell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372010</commentid>
    <comment_count>13</comment_count>
      <attachid>86530</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-23 00:43:29 -0700</bug_when>
    <thetext>Comment on attachment 86530
proposed patch

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

I don&apos;t think this is quite ready to check in yet.  I&apos;m changing to r- as I think there are some issues that need to be addressed even for a prototype implementation.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:54
&gt; +    if (!gGR) {

This suffers from the same issue that the global GrContext used by Canvas2D does. There will be one global GrContext per Render process, however there could be multiple GC3D&apos;s used (one per tab).  The easy way to trigger the bug is to run chrome in --single-process mode and open two composited tabs.  A quick workaround here would be to have one GrContext per LayerRenderChromium.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:94
&gt; +        layerRendererContext()-&gt;deleteFramebuffer(m_fbo);

need to also set m_fbo to 0

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:215
&gt; +        context-&gt;bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);

I&apos;m surprised that this works at all. Doesn&apos;t binding the new framebuffer interfere with the framebuffer the compositor is using?  Same for the viewport...  This method is currently getting called while the compositor is in the middle of rendering which means that changes to the bound framebuffer and/or viewport will be unexpected.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2429
&gt; +    m_layerRenderer-&gt;setAcceleratedDrawingEnabled(m_page-&gt;settings()-&gt;acceleratedDrawingEnabled());

m_page-&gt;settings()   -&gt;  settings()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372414</commentid>
    <comment_count>14</comment_count>
      <attachid>86530</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-23 13:56:20 -0700</bug_when>
    <thetext>Comment on attachment 86530
proposed patch

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

&gt;&gt; Source/WebCore/ChangeLog:8

&gt; 
&gt; You should try to explain a patch in the ChangeLog.  For example, on this patch it&apos;d be really nice to understand which macros this behavior is tied to, how it works at a high level, and what bits are unfinished (for example keeping m_fbo on the ContentLayerChromium is bad, so explain why it&apos;s done that way and what the plan to improve it is).

DONE

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:54
&gt;&gt; +    if (!gGR) {
&gt; 
&gt; This suffers from the same issue that the global GrContext used by Canvas2D does. There will be one global GrContext per Render process, however there could be multiple GC3D&apos;s used (one per tab).  The easy way to trigger the bug is to run chrome in --single-process mode and open two composited tabs.  A quick workaround here would be to have one GrContext per LayerRenderChromium.

Moved to LayerRenderChromium with a FIXME comment.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:94
&gt;&gt; +        layerRendererContext()-&gt;deleteFramebuffer(m_fbo);
&gt; 
&gt; need to also set m_fbo to 0

DONE

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:215
&gt;&gt; +        context-&gt;bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo);
&gt; 
&gt; I&apos;m surprised that this works at all. Doesn&apos;t binding the new framebuffer interfere with the framebuffer the compositor is using?  Same for the viewport...  This method is currently getting called while the compositor is in the middle of rendering which means that changes to the bound framebuffer and/or viewport will be unexpected.

It works because the compositor works in two stages - update and draw. This function is called in the update phase and hence does not mess with the draw phase of the compositor. Anyways I have added code to save and restore state.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:344
&gt;&gt; +        m_contentsTexture = LayerTexture::create(context, layerRenderer()-&gt;textureManager());
&gt; 
&gt; not sure why you are putting &apos;context&apos; in a local here - it doesn&apos;t seem to buy much.

DONE

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:68
&gt;&gt; +    bool reserveContentsTexture(const IntSize&amp;);
&gt; 
&gt; should these go in the private section? the current subclass (ImageLayerChromium) isn&apos;t calling these functions from what I can tell.

DONE

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2429
&gt;&gt; +    m_layerRenderer-&gt;setAcceleratedDrawingEnabled(m_page-&gt;settings()-&gt;acceleratedDrawingEnabled());
&gt; 
&gt; m_page-&gt;settings()   -&gt;  settings()

This is actually correct. settings() returns WebSettings which does not give access to WebCore::Settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372434</commentid>
    <comment_count>15</comment_count>
      <attachid>86686</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-23 14:20:25 -0700</bug_when>
    <thetext>Created attachment 86686
proposed patch

PTAL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372470</commentid>
    <comment_count>16</comment_count>
      <attachid>86686</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-03-23 15:10:03 -0700</bug_when>
    <thetext>Comment on attachment 86686
proposed patch

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

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:89
&gt; +            context-&gt;getIntegerv(WebCore::GraphicsContext3D::FRAMEBUFFER_BINDING,

I&apos;m afraid that the get calls would really kill the performance of this path.  I now see why changing the fbo and viewport doesn&apos;t affect the compositor so you&apos;ll be probably better off with the code you had before... Sorry... :(

Long term, if we want to get skia mixing calls with the compositor, we&apos;ll need to implement a resetContext call for the compositor that will allow it to return to a state it expects to be in.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2429
&gt; +    m_layerRenderer-&gt;setAcceleratedDrawingEnabled(m_page-&gt;settings()-&gt;acceleratedDrawingEnabled());

I see now why you need to go through m_page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373067</commentid>
    <comment_count>17</comment_count>
      <attachid>86827</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-24 13:59:49 -0700</bug_when>
    <thetext>Created attachment 86827
proposed patch

Ok I removed state caching. I was also able to get rid of SkGpuDevice::Current3DApiRenderTarget() which makes glGet calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373083</commentid>
    <comment_count>18</comment_count>
      <attachid>86827</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-24 14:11:48 -0700</bug_when>
    <thetext>Comment on attachment 86827
proposed patch

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

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:91
&gt; +#if USE(SKIA) &amp;&amp; ENABLE(SKIA_GPU)
&gt; +    // FIXME: Find a better place to move this. What we really need is a
&gt; +    // graphics context that can draw into a texture whether accelerated
&gt; +    // or not.
&gt; +    Platform3DObject m_fbo;

This comment doesn&apos;t make sense - what would it mean to draw into a texture if not accelerated?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:152
&gt; +        m_skiaContext-&gt;setTextureCacheLimits(512, 50 * 1024 * 1024);

magic numbers are bad, give these a descriptive name at least to start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373096</commentid>
    <comment_count>19</comment_count>
      <attachid>86827</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-24 14:26:47 -0700</bug_when>
    <thetext>Comment on attachment 86827
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h:91
&gt;&gt; +    Platform3DObject m_fbo;
&gt; 
&gt; This comment doesn&apos;t make sense - what would it mean to draw into a texture if not accelerated?

The same thing we do now - render into a bitmap and upload it to the texture. I have not given much thought to how the two paths will be hidden from ContentLayerChromium. But it seems like we need some sort of a graphics context with texture as the render target. If the context is not accelerated the graphics context will do the copy underneath.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:152
&gt;&gt; +        m_skiaContext-&gt;setTextureCacheLimits(512, 50 * 1024 * 1024);
&gt; 
&gt; magic numbers are bad, give these a descriptive name at least to start.

I copied it from PlatformContextSkia.
Brian: Are these required for my use case? and if yes what do these numbers mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373106</commentid>
    <comment_count>20</comment_count>
      <attachid>86840</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-24 14:40:03 -0700</bug_when>
    <thetext>Created attachment 86840
proposed patch

Mike helped me add comments and var names for those magic numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373109</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-24 14:42:59 -0700</bug_when>
    <thetext>Attachment 86840 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:152:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 3 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373131</commentid>
    <comment_count>22</comment_count>
      <attachid>86845</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-24 15:13:12 -0700</bug_when>
    <thetext>Created attachment 86845
proposed patch

Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373135</commentid>
    <comment_count>23</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2011-03-24 15:15:24 -0700</bug_when>
    <thetext>For some reason I don&apos;t have permission to comment on the patch diff. Alok, to answer your Q about the magic numbers:

They give the size of Ganesh&apos;s texture and glyph caches. I think Mike set the values in PlatformContextSkia. My suggestion: make a local descriptive name here using the current values. Mike has another patch out to associate the GrContext with a SGC3D. Once that is in we can set these to some reasonable values in a well-defined place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373234</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-24 18:07:44 -0700</bug_when>
    <thetext>I think you should try to use the GrContext and GL context from the SharedGraphicsContext3D that Mike made work with http://trac.webkit.org/changeset/81915.  I&apos;m going to remove the ability for arbitrary objects to use the compositor context at arbitrary times soon and this patch will just add to the problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373699</commentid>
    <comment_count>25</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-25 13:29:39 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; I think you should try to use the GrContext and GL context from the SharedGraphicsContext3D that Mike made work with http://trac.webkit.org/changeset/81915.  I&apos;m going to remove the ability for arbitrary objects to use the compositor context at arbitrary times soon and this patch will just add to the problems.

When doing accelerated drawing I think we are wasting vram by rendering to a texture. We might be better off rendering the content layers directly to the window or root fbo, in which case we should just use the compositor context to do the drawing. A separate context or backing texture may be justified for image layers and canvas, but not for content and root layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373701</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-25 13:34:20 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; I think you should try to use the GrContext and GL context from the SharedGraphicsContext3D that Mike made work with http://trac.webkit.org/changeset/81915.  I&apos;m going to remove the ability for arbitrary objects to use the compositor context at arbitrary times soon and this patch will just add to the problems.
&gt; 
&gt; When doing accelerated drawing I think we are wasting vram by rendering to a texture. We might be better off rendering the content layers directly to the window or root fbo, in which case we should just use the compositor context to do the drawing. A separate context or backing texture may be justified for image layers and canvas, but not for content and root layers.

Possibly some day, but for now we can&apos;t use the compositor context for content draws directly.  To do that we&apos;d need to marshall the draw calls in some form.

In the longer term we&apos;d need to do some careful testing to make sure we can handle animated transforms on complex content layers efficiently without rendering to an intermediate surface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376727</commentid>
    <comment_count>27</comment_count>
      <attachid>86845</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-03-30 15:20:50 -0700</bug_when>
    <thetext>Comment on attachment 86845
proposed patch

R- to clear it from the queue.  I&apos;m also pretty sure this doesn&apos;t apply to ToT - we&apos;ve changed a lot in this area lately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397425</commentid>
    <comment_count>28</comment_count>
      <attachid>92141</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-03 15:07:57 -0700</bug_when>
    <thetext>Created attachment 92141
proposed patch

Now we also accelerate root layer. One caveat is that the gpu path will not render native UI controls on windows.
Related CL on the chromium side: http://codereview.chromium.org/6914029/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397437</commentid>
    <comment_count>29</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-03 15:14:38 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=92141) [details]
&gt; proposed patch
&gt; 
&gt; Now we also accelerate root layer. One caveat is that the gpu path will not render native UI controls on windows.

Well that&apos;s pretty bad - what&apos;s the fix?  It&apos;s not going to be very useful to users if native controls are missing.

&gt; Related CL on the chromium side: http://codereview.chromium.org/6914029/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397683</commentid>
    <comment_count>30</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-03 21:24:11 -0700</bug_when>
    <thetext>
&gt; &gt; Now we also accelerate root layer. One caveat is that the gpu path will not render native UI controls on windows.
&gt; 
&gt; Well that&apos;s pretty bad - what&apos;s the fix?  It&apos;s not going to be very useful to users if native controls are missing.
&gt; 

The fix has to be done on the chromium side. Please see TODO in the chromium CL - http://codereview.chromium.org/6914029/

A simple fix would be to render the control to a bitmap and copy that bitmap to skia canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398260</commentid>
    <comment_count>31</comment_count>
      <attachid>92141</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-05-04 14:34:15 -0700</bug_when>
    <thetext>Comment on attachment 92141
proposed patch

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

This looks really good.  Just a couple of small comments.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:88
&gt; +    m_pixels = pixels;

Should these two lines be moved to the base class implementation of beginUpload?

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:260
&gt; +    GLC(m_context, m_context-&gt;clearColor(0, 1, 0, 1));

I would recommend putting this in a DEBUG build guard.  We&apos;ve seen platforms where the clears are really slow.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:537
&gt; +        m_pictureUploader = new TilePictureUploader(m_tileSize, m_layerRenderer-&gt;context(), m_layerRenderer-&gt;skiaContext());

Remove the braces or you&apos;ll get a style error

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:49
&gt; +// Updates texture of a given tile.

This comment should be omitted as it&apos;s not particularly enlightening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398262</commentid>
    <comment_count>32</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-05-04 14:35:10 -0700</bug_when>
    <thetext>Also, definitely get Enne to have a look as it touches a lot of tiler code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398282</commentid>
    <comment_count>33</comment_count>
      <attachid>92141</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-04 15:04:05 -0700</bug_when>
    <thetext>Comment on attachment 92141
proposed patch

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

Patch seems a bit stale - which is expected given all the churn in LayerRendererChromium and friends lately.  Can you confirm that the patch still applies and compiles with the new OwnPtr&lt;&gt; strictness enabled?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:333
&gt; +    // Update compositor resources for root layer.
&gt; +    m_rootLayerContentTiler-&gt;uploadCanvas();

this is an odd place to upload the root layer&apos;s canvas - looks like this patch is against a slightly older rev.  In ToT we upload the root layer tiler&apos;s contents before calling updateLayers().  See http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp#L208

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp:118
&gt; +PlatformCanvas::Painter::Painter(PlatformCanvas* canvas, PlatformCanvas::Painter::TextOption option) : m_canvas(canvas)

nit: normally we put the initializers on their own lines with a 4-space indent, even if there&apos;s just one

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp:132
&gt; +    m_skiaContext = new PlatformContextSkia(skiaCanvas);

can you verify if this compiles on ToT?  The rules for OwnPtr&lt;&gt; initialization recently were tightened and I think you need an adoptPtr() here and possibly in other places as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398344</commentid>
    <comment_count>34</comment_count>
      <attachid>92141</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-04 15:57:38 -0700</bug_when>
    <thetext>Comment on attachment 92141
proposed patch

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

I am kind of frustrated at the large amount of #ifdefs that are creeping into LayerTilerChromium here where it previously had none.  That&apos;s usually a sign to me that a better abstraction is needed or (minimally) code should be more data-driven.  The The TileTextureInterface class is a great abstraction to handle most of the differences between the Skia GPU path and the other paths.  However, I think there a number of additional places where codepaths can be merged or behavioral changes should be passed in as constructor flags rather than as in-class #ifdefs.  I apologize in advance for all the refactoring nits that I&apos;m about to make.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-160
&gt; -void LayerRendererChromium::useShader(unsigned programId)
&gt; -{
&gt; -    if (programId != m_currentShader) {
&gt; -        GLC(m_context.get(), m_context-&gt;useProgram(programId));
&gt; -        m_currentShader = programId;
&gt; -    }
&gt; -}
&gt; -

I don&apos;t understand this change.  Does the driver always handle checking if we&apos;re changing to same program or are we checking this value somewhere outside this patch?

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:51
&gt; +class TileTextureInterface {

Can this and its subclasses get moved to their own file(s)? There&apos;s a fair amount of code, #includes, and #ifdefs to support them.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:64
&gt; +    void beginUpload(const uint8_t* pixels, const IntRect&amp; paintRect);
&gt; +    void endUpload();
&gt; +    virtual void upload(LayerTexture*, const IntRect&amp; sourceRect, const IntRect&amp; destRect);

This is a weird mix of virtual and non-virtual functions.  This whole patch would feel cleaner to me if LayerTilerChromium had exactly one uploader member variable and these functions were all virtual.  I think that would clean up a large number of #ifdefs and duplicate codepaths.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:96
&gt; +void TilePixelUploader::upload(LayerTexture* texture, const IntRect&amp; sourceRect, const IntRect&amp; destRect)

All of the code in this function is probably going to conflict with https://bugs.webkit.org/show_bug.cgi?id=60008.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:306
&gt;      m_tileSize = size;

The uploader caches the tile size.  I suspect you need to modify it in this function too.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:491
&gt; +#if USE(SKIA)
&gt; +    PlatformCanvas::Backing canvasBacking = layerRenderer()-&gt;acceleratedDrawingEnabled() ?
&gt; +            PlatformCanvas::PictureBacking : PlatformCanvas::BitmapBacking;
&gt; +    m_canvas.setBacking(canvasBacking);
&gt; +#endif

There are a number of places where layerRenderer()-&gt;acceleratedDrawingEnabled() is used to mean &quot;use skia&quot;.  Can this backing parameter be passed in via the constructor to be set on the PlatformCanvas or maybe the PlatformCanvas be created elsewhere with this parameter and passed into the constructor?

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:537
&gt;&gt; +        m_pictureUploader = new TilePictureUploader(m_tileSize, m_layerRenderer-&gt;context(), m_layerRenderer-&gt;skiaContext());
&gt; 
&gt; Remove the braces or you&apos;ll get a style error

Is there a reason to create this lazily? It seems cleaner to create it in the constructor (if possible) so there&apos;s never a worry that it&apos;s invalid.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:597
&gt; +#if USE(SKIA)
&gt; +            // SKIA coordinate system origin is top-left while that in OpenGL is bottom-left.
&gt; +            // So the texture rendered by skia is upside-down for OpenGL. Note that this is
&gt; +            // not a problem for the bitmap path because the pixels get flipped when uploading
&gt; +            // them using glTexImage2D. We need to fix this only for the accelerated path.
&gt; +            // The following transforms flips the texture coordinates such that the texture
&gt; +            // is upright for OpenGL.
&gt; +            if (layerRenderer()-&gt;acceleratedDrawingEnabled()) {
&gt; +                texTranslateY += 1.0;
&gt; +                texScaleY *= -1.0;
&gt; +            }
&gt; +#endif

Would you mind adding a member variable to flip the final texture and then pass in a flag to the constructor to specify whether we should do this? I&apos;d prefer that over another #ifdef wart.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:80
&gt; -    void updateFromPixels(const IntRect&amp; contentRect, const IntRect&amp; paintRect, const uint8_t* pixels);
&gt; +    void uploadPixels(const IntRect&amp; contentRect, const IntRect&amp; paintRect, const uint8_t* pixels);
&gt; +
&gt; +#if USE(SKIA)
&gt; +    // Reserve and upload tile textures from an externally painted picture.
&gt; +    void uploadPicture(const IntRect&amp; contentRect, const IntRect&amp; paintRect, const SkPicture*);
&gt; +#endif

See above comments.  I think these can be the same function.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:179
&gt; +    OwnPtr&lt;TilePixelUploader&gt; m_pixelUploader;
&gt; +#if USE(SKIA)
&gt; +    OwnPtr&lt;TilePictureUploader&gt; m_pictureUploader;
&gt; +#endif

See above note.  I think there should be one &quot;OwnPtr&lt;TileTextureInterface&gt; m_uploader;&quot; member for this class.

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp:80
&gt; +void PlatformCanvas::reset()
&gt; +{
&gt;  #if USE(SKIA)
&gt; -    m_skiaCanvas = skia::CreateBitmapCanvas(size.width(), size.height(), false);
&gt; +    m_skiaCanvas.clear();
&gt; +    m_skiaPicture.clear();

I like the changes to PlatformCanvas to defer allocations until painting rather than doing it at resize.  Thanks for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398847</commentid>
    <comment_count>35</comment_count>
      <attachid>92141</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-05 11:11:34 -0700</bug_when>
    <thetext>Comment on attachment 92141
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-160
&gt;&gt; -
&gt; 
&gt; I don&apos;t understand this change.  Does the driver always handle checking if we&apos;re changing to same program or are we checking this value somewhere outside this patch?

The motivation behind removing the cached shader is that skia does not use LayerRendererChromium interface. It directly uses the GL interface. So if we have to do caching, we will do it at the command-buffer or even lower level. But I think the driver should do the right thing. I have not seen any regressions.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:333
&gt;&gt; +    m_rootLayerContentTiler-&gt;uploadCanvas();
&gt; 
&gt; this is an odd place to upload the root layer&apos;s canvas - looks like this patch is against a slightly older rev.  In ToT we upload the root layer tiler&apos;s contents before calling updateLayers().  See http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp#L208

updateRootLayerContents() does not upload the canvas. It just paints the canvas. I have moved uploadCanvas from drawRootLayer(). See http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp#L172. We do not want to be uploading canvas in the middle of the draw to keep GL state consistent.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:51
&gt;&gt; +class TileTextureInterface {
&gt; 
&gt; Can this and its subclasses get moved to their own file(s)? There&apos;s a fair amount of code, #includes, and #ifdefs to support them.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:64
&gt;&gt; +    virtual void upload(LayerTexture*, const IntRect&amp; sourceRect, const IntRect&amp; destRect);
&gt; 
&gt; This is a weird mix of virtual and non-virtual functions.  This whole patch would feel cleaner to me if LayerTilerChromium had exactly one uploader member variable and these functions were all virtual.  I think that would clean up a large number of #ifdefs and duplicate codepaths.

beginUpload is not virtual because it takes different arguments. TilePixelUploader takes pixels while TilePictureUploader takes picture. With the same approach of two uploaders, I could cleanup a couple of ifdefs. But there will always be a few mainly because the accelerated path is not implemented for CG. Another approach that pushes the upload responsibility to PlatformCanvas would cleanup all the ifdefs. What do you think?

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:88
&gt;&gt; +    m_pixels = pixels;
&gt; 
&gt; Should these two lines be moved to the base class implementation of beginUpload?

The arguments are different - pixels and picture.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:260
&gt;&gt; +    GLC(m_context, m_context-&gt;clearColor(0, 1, 0, 1));
&gt; 
&gt; I would recommend putting this in a DEBUG build guard.  We&apos;ve seen platforms where the clears are really slow.

will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:306
&gt;&gt;      m_tileSize = size;
&gt; 
&gt; The uploader caches the tile size.  I suspect you need to modify it in this function too.

LayerTilerChromium::reset() deletes the uploader, so it is already handled.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:491
&gt;&gt; +#endif
&gt; 
&gt; There are a number of places where layerRenderer()-&gt;acceleratedDrawingEnabled() is used to mean &quot;use skia&quot;.  Can this backing parameter be passed in via the constructor to be set on the PlatformCanvas or maybe the PlatformCanvas be created elsewhere with this parameter and passed into the constructor?

Yes passing it in the constructor is a good idea. In which case we should pass that flag to LayerRendererChromium constructor too and remove LayerRendererChromium::setAcceleratedDrawingEnabled() function.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:537
&gt;&gt;&gt; +        m_pictureUploader = new TilePictureUploader(m_tileSize, m_layerRenderer-&gt;context(), m_layerRenderer-&gt;skiaContext());
&gt;&gt; 
&gt;&gt; Remove the braces or you&apos;ll get a style error
&gt; 
&gt; Is there a reason to create this lazily? It seems cleaner to create it in the constructor (if possible) so there&apos;s never a worry that it&apos;s invalid.

I was creating it lazily because ImageLayerChromium would not use the picture-uploader, only pixel-uploader.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:597
&gt;&gt; +#endif
&gt; 
&gt; Would you mind adding a member variable to flip the final texture and then pass in a flag to the constructor to specify whether we should do this? I&apos;d prefer that over another #ifdef wart.

yes.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:49
&gt;&gt; +// Updates texture of a given tile.
&gt; 
&gt; This comment should be omitted as it&apos;s not particularly enlightening.

will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:80
&gt;&gt; +#endif
&gt; 
&gt; See above comments.  I think these can be the same function.

Sorry. I did not understand - which can be same function?

&gt;&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp:118
&gt;&gt; +PlatformCanvas::Painter::Painter(PlatformCanvas* canvas, PlatformCanvas::Painter::TextOption option) : m_canvas(canvas)
&gt; 
&gt; nit: normally we put the initializers on their own lines with a 4-space indent, even if there&apos;s just one

will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.cpp:132
&gt;&gt; +    m_skiaContext = new PlatformContextSkia(skiaCanvas);
&gt; 
&gt; can you verify if this compiles on ToT?  The rules for OwnPtr&lt;&gt; initialization recently were tightened and I think you need an adoptPtr() here and possibly in other places as well

It does compile fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399753</commentid>
    <comment_count>36</comment_count>
      <attachid>92630</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-06 13:08:51 -0700</bug_when>
    <thetext>Created attachment 92630
proposed patch

Adrienne: Removed most of ifdefs from LayerTilerChromium. The ones remaining are because the CG path is not implemented yet. There are two uploaders in LayerTilerChromium because it also needs to support ImageLayerChromium that directly uses uploadPixels. I could not think of a clean way for ImageLayerChromium to express which uploader it wants to use.

Addressed other comments from Vangelis and James.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399778</commentid>
    <comment_count>37</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 13:37:31 -0700</bug_when>
    <thetext>It really sucks that ImageLayerChromium subclasses ContentLayerChromium.  That made sense when they shared 99% of their implementations, but now they don&apos;t.

I haven&apos;t looked at the patch closely yet, but maybe it&apos;d be better to divorce them before doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399779</commentid>
    <comment_count>38</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 13:40:29 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 92141 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92141&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-160
&gt; &gt;&gt; -
&gt; &gt; 
&gt; &gt; I don&apos;t understand this change.  Does the driver always handle checking if we&apos;re changing to same program or are we checking this value somewhere outside this patch?
&gt; 
&gt; The motivation behind removing the cached shader is that skia does not use LayerRendererChromium interface. It directly uses the GL interface. So if we have to do caching, we will do it at the command-buffer or even lower level. But I think the driver should do the right thing. I have not seen any regressions.

I&apos;m missing why this is changing - your code changes the program switching from happening on the LayerRendererChromium to happening on the GraphicsContext3D, but both are completely invisible to skia.  What is the benefit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399800</commentid>
    <comment_count>39</comment_count>
      <attachid>92630</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-05-06 14:10:46 -0700</bug_when>
    <thetext>Comment on attachment 92630
proposed patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:-252
&gt; -            else

The reason why we do the reserve operation here is that we don&apos;t want the texture manager to reclaim the texture between update and upload.  If that were to happen, we wouldn&apos;t have enough pixels to upload.  So I think the reserve needs to stay here.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:267
&gt; +#if USE(SKIA)

Does this really need to be inside an #if USE(SKIA) ?  I think it would be better to get rid of the fence and rely on the fact that acceleratedDrawingEnabled won&apos;t be set on CG platforms (for now)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399847</commentid>
    <comment_count>40</comment_count>
      <attachid>92141</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-06 15:24:27 -0700</bug_when>
    <thetext>Comment on attachment 92141
proposed patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-160
&gt;&gt;&gt;&gt; -
&gt;&gt;&gt; 
&gt;&gt;&gt; I don&apos;t understand this change.  Does the driver always handle checking if we&apos;re changing to same program or are we checking this value somewhere outside this patch?
&gt;&gt; 
&gt;&gt; The motivation behind removing the cached shader is that skia does not use LayerRendererChromium interface. It directly uses the GL interface. So if we have to do caching, we will do it at the command-buffer or even lower level. But I think the driver should do the right thing. I have not seen any regressions.
&gt; 
&gt; I&apos;m missing why this is changing - your code changes the program switching from happening on the LayerRendererChromium to happening on the GraphicsContext3D, but both are completely invisible to skia.  What is the benefit?

GraphicsContext3D::useProgram() does not cache programId. The main thing I wanted to remove from here is this - &quot;if (programId != m_currentShader)&quot;. SKIA was setting a different shader without LayerRendererChromium knowing about it. As I said before IF we need to do caching, it should be done at a common point used by both compositor and skia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399856</commentid>
    <comment_count>41</comment_count>
      <attachid>92630</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-06 15:30:27 -0700</bug_when>
    <thetext>Comment on attachment 92630
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:-252
&gt;&gt; -            else
&gt; 
&gt; The reason why we do the reserve operation here is that we don&apos;t want the texture manager to reclaim the texture between update and upload.  If that were to happen, we wouldn&apos;t have enough pixels to upload.  So I think the reserve needs to stay here.

Hmm. I guess I could leave it here for this patch. But it will have to be moved before compositor can be moved to a different thread. AFAIK update will run in the webkit thread which will not have access to the compositor context. LayerTexture::reserve makes GL calls.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:267
&gt;&gt; +#if USE(SKIA)
&gt; 
&gt; Does this really need to be inside an #if USE(SKIA) ?  I think it would be better to get rid of the fence and rely on the fact that acceleratedDrawingEnabled won&apos;t be set on CG platforms (for now)

No it does not need to be inside an #if guard. This is just ignoring the accelerated flag. The flag either needs to be ignored here or at WebView level. I thought it would be better to ignore it here because this class is closer to the uploader. But I do not have strong opinion about doing it either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399863</commentid>
    <comment_count>42</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-06 15:36:28 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; It really sucks that ImageLayerChromium subclasses ContentLayerChromium.  That made sense when they shared 99% of their implementations, but now they don&apos;t.
&gt; 
&gt; I haven&apos;t looked at the patch closely yet, but maybe it&apos;d be better to divorce them before doing this.

ImageLayerChromium would still use the tiler, right? I think it should. In which case we would also need to refactor LayerTilerChromium into two classes. The one used by ImageLayerChromium will not have an internal canvas or a update member function.

I would let Adrienne make this call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399900</commentid>
    <comment_count>43</comment_count>
      <attachid>92630</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 16:31:40 -0700</bug_when>
    <thetext>Comment on attachment 92630
proposed patch

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

Adrienne and I spent some time whiteboarding where this patch is going and where we want to take this code in general.  Unfortunately this isn&apos;t the cleanest design to start with, but I think that we can make progress without stepping on each other&apos;s toes too much.

Conceptually it seems that with this patch there are three types of tiled layers:

Image layers: these have an image as a source and update textures by uploading regions of the decoded image via texSubImage2D

Content layers in the non-accelerated case: these are backed by a GraphicsLayerClient and update textures by first painting into a PlatformCanvas and then uploading regions of the software buffer via texSubImage2D

Content layers in the accelerated case: these are backed by a GraphicsLayerClient and update textures by first painting into a SkPicture and then by drawPicture()ing into textures

At a high level, then, it seems to make more sense to leave PlatformCanvas alone and have the abstraction be at the TileTextureInterface/TextureUpdater level.  Image and non-accelerated content layers can own a TilePixelUploader (I&apos;d suggest the name PlatformCanvasTextureUpdater) which owns a PlatformCanvas.  Accelerated content layers can own a TilePaintUploader (possibly renamed to SkiaTextureUpdater) which owns an SkPicture.  Then LayerTilerChromium only needs to interface with the updater.

If it makes things easier I think it&apos;d be OK to leave the uploader/updater owned by the LayerTilerChromium for now, and we can move it later.  We definitely don&apos;t want to have both SkPictures and PlatformCanvas coexist on a given layer.

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:76
&gt; +    void uploadPixels(const IntRect&amp; contentRect, const IntRect&amp; paintRect, const uint8_t* pixels);
&gt; +
&gt; +    // Reserve and upload tile textures from an externally painted picture.
&gt; +    void uploadPicture(const IntRect&amp; contentRect, const IntRect&amp; paintRect, const PlatformCanvas::Picture*);

it doesn&apos;t make much sense to have both of these functions exist on the same class since you&apos;ll never mix calls - for a given LayerTilerChromium you will either always uploadPixels() or uploadPicture().

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:118
&gt; +        bool m_topDown; // True if texture is top-down.

Is this a property of each tile?  I think all tiles within a tiler will have the same value for this, right?

&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.h:70
&gt; +    typedef int Picture;

this doesn&apos;t make much sense - what does &apos;int&apos; mean as a Picture?

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:158
&gt; +    GLC(m_context.get(), m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, 0));

why do you need to change the binding here? this seems unnecessary

&gt; Source/WebCore/platform/graphics/chromium/TilePictureUploader.cpp:106
&gt; +    m_context-&gt;viewport(0, 0, m_tileSize.width(), m_tileSize.height());
&gt; +    clearFrameBuffer();
&gt; +
&gt; +    // Notify SKIA to sync its internal GL state.
&gt; +    m_skiaContext-&gt;resetContext();
&gt; +    // Offset from source rectangle to this destination rectangle.
&gt; +    IntPoint offset(sourceRect.x() - m_paintRect.x(), sourceRect.y() - m_paintRect.y());
&gt; +    m_canvas-&gt;save();
&gt; +    m_canvas-&gt;translate(-offset.x(), -offset.y());
&gt; +    m_canvas-&gt;drawPicture(const_cast&lt;SkPicture&amp;&gt;(*m_picture));
&gt; +    m_canvas-&gt;restore();
&gt; +    // Flush SKIA context so that all the rendered stuff appears on the texture.
&gt; +    m_skiaContext-&gt;flush(GrContext::kForceCurrentRenderTarget_FlushBit);
&gt; +
&gt; +    // Unbind texture.
&gt; +    m_context-&gt;framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, 0, 0);

this doesn&apos;t really seem like &quot;uploading&quot; - i think the function needs a better name.  update()? draw()?

should you set a clip before calling drawPicture()? it seems that without that skia will have to issue draw calls for all content in the layer, not just the content that intersects sourceRect

&gt; Source/WebCore/platform/graphics/chromium/TilePictureUploader.h:49
&gt; +class TilePictureUploader : public TileTextureInterface {

this should have &apos;skia&apos; somewhere in the name since this implementation is skia-specific

&gt; Source/WebCore/platform/graphics/chromium/TilePictureUploader.h:79
&gt; +// FIXME: Implement CG path.
&gt; +class TilePictureUploader : public TileTextureInterface {

this class doesn&apos;t appear to be instantiated in the CG path, so do you need to provide an empty implementation?  it&apos;d be better if this file only implemented the skia version and was named appropriately

&gt; Source/WebCore/platform/graphics/chromium/TilePixelUploader.h:56
&gt; +    GraphicsContext3D* m_context;

i think it&apos;d be better if rather than stashing a pointer to a GraphicsContext3D the upload() call took a GC3D as a parameter.

&gt; Source/WebCore/platform/graphics/chromium/TileTextureInterface.h:37
&gt; +class TileTextureInterface {

this name is not very descriptive. what about TextureUpdater?

&gt; Source/WebCore/platform/graphics/chromium/TileTextureInterface.h:49
&gt; +    // Uploads resources into layer-texture.
&gt; +    virtual void upload(LayerTexture*, const IntRect&amp; sourceRect, const IntRect&amp; destRect) = 0;

the ganesh implementation does more than just texSubImage2D, so i think something like &apos;updateTextureRect&apos; would be a better name for this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399902</commentid>
    <comment_count>44</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 16:34:08 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 92141 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92141&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-160
&gt; &gt;&gt;&gt;&gt; -
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; I don&apos;t understand this change.  Does the driver always handle checking if we&apos;re changing to same program or are we checking this value somewhere outside this patch?
&gt; &gt;&gt; 
&gt; &gt;&gt; The motivation behind removing the cached shader is that skia does not use LayerRendererChromium interface. It directly uses the GL interface. So if we have to do caching, we will do it at the command-buffer or even lower level. But I think the driver should do the right thing. I have not seen any regressions.
&gt; &gt; 
&gt; &gt; I&apos;m missing why this is changing - your code changes the program switching from happening on the LayerRendererChromium to happening on the GraphicsContext3D, but both are completely invisible to skia.  What is the benefit?
&gt; 
&gt; GraphicsContext3D::useProgram() does not cache programId. The main thing I wanted to remove from here is this - &quot;if (programId != m_currentShader)&quot;. SKIA was setting a different shader without LayerRendererChromium knowing about it. As I said before IF we need to do caching, it should be done at a common point used by both compositor and skia.

That&apos;s sad, it&apos;ll make the compositor slower.  The command buffer service side doesn&apos;t appear to have a fastpath for setting the program to the same value so we&apos;re going to issue a _lot_ of redundant useProgram() calls with this patch.

Is adding caching difficult?  Can you profile the effect of not having it (independently of everything else in this patch) to see if we still need it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399903</commentid>
    <comment_count>45</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 16:35:07 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #37)
&gt; &gt; It really sucks that ImageLayerChromium subclasses ContentLayerChromium.  That made sense when they shared 99% of their implementations, but now they don&apos;t.
&gt; &gt; 
&gt; &gt; I haven&apos;t looked at the patch closely yet, but maybe it&apos;d be better to divorce them before doing this.
&gt; 
&gt; ImageLayerChromium would still use the tiler, right? I think it should. In which case we would also need to refactor LayerTilerChromium into two classes. The one used by ImageLayerChromium will not have an internal canvas or a update member function.
&gt; 
&gt; I would let Adrienne make this call.

LayerTilerChromium could still be reused by both, it just needs to be less tied to the actual mechanism by which the textures are updated.  You don&apos;t need to do this refactoring now but it&apos;ll happen soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400538</commentid>
    <comment_count>46</comment_count>
      <attachid>92630</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-09 08:59:57 -0700</bug_when>
    <thetext>Comment on attachment 92630
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:76
&gt;&gt; +    void uploadPicture(const IntRect&amp; contentRect, const IntRect&amp; paintRect, const PlatformCanvas::Picture*);
&gt; 
&gt; it doesn&apos;t make much sense to have both of these functions exist on the same class since you&apos;ll never mix calls - for a given LayerTilerChromium you will either always uploadPixels() or uploadPicture().

This will go away with refactoring.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h:118
&gt;&gt; +        bool m_topDown; // True if texture is top-down.
&gt; 
&gt; Is this a property of each tile?  I think all tiles within a tiler will have the same value for this, right?

This too.

&gt;&gt; Source/WebCore/platform/graphics/chromium/PlatformCanvas.h:70
&gt;&gt; +    typedef int Picture;
&gt; 
&gt; this doesn&apos;t make much sense - what does &apos;int&apos; mean as a Picture?

it means it is not implemented yet. int is just a placeholder. It should have a FIXME.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:158
&gt;&gt; +    GLC(m_context.get(), m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, 0));
&gt; 
&gt; why do you need to change the binding here? this seems unnecessary

The texture created here is used as an FBO attachment for accelerated path, in which case you need to unbind the texture. For unaccelerated path we always bind the texture before updating it, so I think it is better for this function to not leave the texture bound.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TilePictureUploader.cpp:106
&gt;&gt; +    m_context-&gt;framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, 0, 0);
&gt; 
&gt; this doesn&apos;t really seem like &quot;uploading&quot; - i think the function needs a better name.  update()? draw()?
&gt; 
&gt; should you set a clip before calling drawPicture()? it seems that without that skia will have to issue draw calls for all content in the layer, not just the content that intersects sourceRect

I like update. It can be renamed with the refactoring you suggested.

about clip: you may be right. I will look into it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TilePictureUploader.h:49
&gt;&gt; +class TilePictureUploader : public TileTextureInterface {
&gt; 
&gt; this should have &apos;skia&apos; somewhere in the name since this implementation is skia-specific

yes for now we could add &apos;skia&apos; somewhere.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TilePictureUploader.h:79
&gt;&gt; +class TilePictureUploader : public TileTextureInterface {
&gt; 
&gt; this class doesn&apos;t appear to be instantiated in the CG path, so do you need to provide an empty implementation?  it&apos;d be better if this file only implemented the skia version and was named appropriately

If we do not provide an empty implementation, a member OwnPtr&lt;TilePictureUploader&gt; member variable will complain. But this will go away with refactoring.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TilePixelUploader.h:56
&gt;&gt; +    GraphicsContext3D* m_context;
&gt; 
&gt; i think it&apos;d be better if rather than stashing a pointer to a GraphicsContext3D the upload() call took a GC3D as a parameter.

TilePictureUploader constructor needs GraphicsContext3D. You also do not want GraphicsContext3D changing with every upload call where you need to recreate FBOs.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TileTextureInterface.h:37
&gt;&gt; +class TileTextureInterface {
&gt; 
&gt; this name is not very descriptive. what about TextureUpdater?

TextureUpdater is fine. I wanted to keep it consistent with TilePaintInterface.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TileTextureInterface.h:49
&gt;&gt; +    virtual void upload(LayerTexture*, const IntRect&amp; sourceRect, const IntRect&amp; destRect) = 0;
&gt; 
&gt; the ganesh implementation does more than just texSubImage2D, so i think something like &apos;updateTextureRect&apos; would be a better name for this

I like updateTextureRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400543</commentid>
    <comment_count>47</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-09 09:19:52 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 92630 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92630&amp;action=review
&gt; 
&gt; Adrienne and I spent some time whiteboarding where this patch is going and where we want to take this code in general.  Unfortunately this isn&apos;t the cleanest design to start with, but I think that we can make progress without stepping on each other&apos;s toes too much.
&gt; 
&gt; Conceptually it seems that with this patch there are three types of tiled layers:
&gt; 
&gt; Image layers: these have an image as a source and update textures by uploading regions of the decoded image via texSubImage2D
&gt; 
&gt; Content layers in the non-accelerated case: these are backed by a GraphicsLayerClient and update textures by first painting into a PlatformCanvas and then uploading regions of the software buffer via texSubImage2D
&gt; 
&gt; Content layers in the accelerated case: these are backed by a GraphicsLayerClient and update textures by first painting into a SkPicture and then by drawPicture()ing into textures
&gt; 

There are another two cases - root layer (accelerated and non-accelerated). The root layers are handled in the same way as content layers. So whatever abstraction/code we add at the content-layer level, also needs to be added to LayerRendererChromium for root layer. Is there a particular reason why the root layer is not a content layer?

&gt; At a high level, then, it seems to make more sense to leave PlatformCanvas alone and have the abstraction be at the TileTextureInterface/TextureUpdater level.  Image and non-accelerated content layers can own a TilePixelUploader (I&apos;d suggest the name PlatformCanvasTextureUpdater) which owns a PlatformCanvas.  Accelerated content layers can own a TilePaintUploader (possibly renamed to SkiaTextureUpdater) which owns an SkPicture.  Then LayerTilerChromium only needs to interface with the updater.
&gt;

I like the idea of moving the canvas to TextureUpdater. But image layer does not use PlatformCanvas. It only needs a way to upload pixels it already has. The current implementation of TilePixelUploader serves this purpose perfectly well. So I think it will be best to leave TilePixelUploader and TilePictureUploader the way I have implemented. We could extend PlatformCanvas to also upload its backing. PlatformCanvas will take an extra bool accelerated flag and choose the backing, and use TilePixelUploader or TilePictureUploader depending on the backing.

I could sketch this in a design doc and discuss it in a VC.

&gt; If it makes things easier I think it&apos;d be OK to leave the uploader/updater owned by the LayerTilerChromium for now, and we can move it later.  We definitely don&apos;t want to have both SkPictures and PlatformCanvas coexist on a given layer.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400578</commentid>
    <comment_count>48</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-09 10:53:29 -0700</bug_when>
    <thetext>(In reply to comment #47)

&gt; Is there a particular reason why the root layer is not a content layer?

There&apos;s no technical reason.  It&apos;s a change we&apos;ve wanted to do because having the root layer not be a content layer creates some special case warts in LayerRendererChromium. We just haven&apos;t had the time to do that yet.

&gt; I like the idea of moving the canvas to TextureUpdater. But image layer does not use PlatformCanvas. It only needs a way to upload pixels it already has. The current implementation of TilePixelUploader serves this purpose perfectly well. So I think it will be best to leave TilePixelUploader and TilePictureUploader the way I have implemented. We could extend PlatformCanvas to also upload its backing. PlatformCanvas will take an extra bool accelerated flag and choose the backing, and use TilePixelUploader or TilePictureUploader depending on the backing.
&gt; 
&gt; I could sketch this in a design doc and discuss it in a VC.

I think the ownership model that you describe is backwards.  PlatformCanvas and SkPicture feel like implementation details and TilePaintUploader feels like the abstracted interface to draw into from a backing and then update tiles from.

You bring up an excellent point that ImageLayerChromium doesn&apos;t really use the PlatformCanvas.  That says to me that we just need three texture updaters for each of these use cases with a different backing.

SkiaTextureUpdater -&gt; owns an SkPicture
ContentTextureUpdater -&gt; owns a PlatformCanvas
ImageTextureUpdater -&gt; owns a decoded image

In this path, the LayerTilerChromium does not need multiple texture updating paths for images, canvases, and pictures.  It merely needs one that takes a base texture updater pointer.  In the future, we can then move the texture updaters to the layers themselves and LayerTilerChromium won&apos;t need any #ifdefs or multiple paths at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400647</commentid>
    <comment_count>49</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-09 12:15:25 -0700</bug_when>
    <thetext>&gt; I think the ownership model that you describe is backwards.  PlatformCanvas and SkPicture feel like implementation details and TilePaintUploader feels like the abstracted interface to draw into from a backing and then update tiles from.
&gt;
&gt; You bring up an excellent point that ImageLayerChromium doesn&apos;t really use the PlatformCanvas.  That says to me that we just need three texture updaters for each of these use cases with a different backing.
&gt; 
&gt; SkiaTextureUpdater -&gt; owns an SkPicture
&gt; ContentTextureUpdater -&gt; owns a PlatformCanvas
&gt; ImageTextureUpdater -&gt; owns a decoded image
&gt; 

I think there is potential for code sharing between ContentTextureUpdater and ImageTextureUpdater. They both need to upload pixels. This common code could be TilePixelUploader.

&gt; In this path, the LayerTilerChromium does not need multiple texture updating paths for images, canvases, and pictures.  It merely needs one that takes a base texture updater pointer.  In the future, we can then move the texture updaters to the layers themselves and LayerTilerChromium won&apos;t need any #ifdefs or multiple paths at all.

Completely agree on a base texture updater pointer. I think we should move forward with the things we all agree on:
- Move PlatformCanvas out of LayerTilerChromium
- Create an abstract TileTextureUpdater to be used by LayerTilerChromium
- ImageLayerChromium does not subclass ContentLayerChromium

Should I file a separate bug? Anyone volunteering to do this refactor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400669</commentid>
    <comment_count>50</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-09 12:38:12 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; &gt; I think the ownership model that you describe is backwards.  PlatformCanvas and SkPicture feel like implementation details and TilePaintUploader feels like the abstracted interface to draw into from a backing and then update tiles from.
&gt; &gt;
&gt; &gt; You bring up an excellent point that ImageLayerChromium doesn&apos;t really use the PlatformCanvas.  That says to me that we just need three texture updaters for each of these use cases with a different backing.
&gt; &gt; 
&gt; &gt; SkiaTextureUpdater -&gt; owns an SkPicture
&gt; &gt; ContentTextureUpdater -&gt; owns a PlatformCanvas
&gt; &gt; ImageTextureUpdater -&gt; owns a decoded image
&gt; 
&gt; I think there is potential for code sharing between ContentTextureUpdater and ImageTextureUpdater. They both need to upload pixels. This common code could be TilePixelUploader.

That seems quite reasonable, as there&apos;s already this shared path in LayerTilerChromium.  They would both need to share the temporary pixel buffer for uploading too.

&gt; &gt; In this path, the LayerTilerChromium does not need multiple texture updating paths for images, canvases, and pictures.  It merely needs one that takes a base texture updater pointer.  In the future, we can then move the texture updaters to the layers themselves and LayerTilerChromium won&apos;t need any #ifdefs or multiple paths at all.
&gt; 
&gt; Completely agree on a base texture updater pointer. I think we should move forward with the things we all agree on:
&gt; - Move PlatformCanvas out of LayerTilerChromium
&gt; - Create an abstract TileTextureUpdater to be used by LayerTilerChromium
&gt; - ImageLayerChromium does not subclass ContentLayerChromium
&gt; 
&gt; Should I file a separate bug? Anyone volunteering to do this refactor?

In terms of making this patch landable sooner, I would say that ImageLayerChromium deriving from ContentLayerChromium is a separate piece of work and can be its own bug.  LayerTilerChromium can own all the texture updaters in the short term.

I would also split out the change to LayerRendererChromium::useShader into a separate patch.  It doesn&apos;t seem relevant to this change and you could address James&apos;s concerns above independently without adding more friction to this discussion.

As for creating an abstract TileTextureUpdater, I&apos;m neutral on whether that needs to be done in this patch or as part of some later ContentLayerChromium/ImageLayerChromium refactoring.  If it seems easier to go that route, I think it&apos;d be better.

However, I think moving PlatformCanvas out of LayerTilerChromium and into the pixel updater and moving SkPicture out of PlatformCanvas and into its picture updater seems like it needs to happen before this can land.  It doesn&apos;t make any sense to me to make large changes to PlatformCanvas only to take them all back out again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407365</commentid>
    <comment_count>51</comment_count>
      <attachid>94280</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-20 15:33:26 -0700</bug_when>
    <thetext>Created attachment 94280
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407367</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 15:36:03 -0700</bug_when>
    <thetext>Attachment 94280 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:288:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:132:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408012</commentid>
    <comment_count>53</comment_count>
      <attachid>94434</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-23 09:45:36 -0700</bug_when>
    <thetext>Created attachment 94434
Fixed style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408082</commentid>
    <comment_count>54</comment_count>
      <attachid>94434</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-23 11:03:21 -0700</bug_when>
    <thetext>Comment on attachment 94434
Fixed style errors

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

Please use DrawingBuffer for the LayerTextureUpdaterSkPicture, or let us know why it won&apos;t work for this use case.  Otherwise this is looking pretty close!

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:76
&gt; +    static PassRefPtr&lt;LayerRendererChromium&gt; create(PassRefPtr&lt;GraphicsContext3D&gt;, PassOwnPtr&lt;LayerPainterChromium&gt; contentPaint, bool acceleratedDrawing);

this is a somewhat awkward variable name - it would read better with &quot;acceleratedDrawingEnabled&quot; or &quot;accelerateDrawing&quot;.

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:149
&gt; +    IntPoint offset(sourceRect.x() - contentRect().x(), sourceRect.y() - contentRect().y());
&gt; +    m_canvas-&gt;save();
&gt; +    m_canvas-&gt;translate(-offset.x(), -offset.y());
&gt; +    m_canvas-&gt;drawPicture(m_picture);
&gt; +    m_canvas-&gt;restore();

should you set a clip here? it seems that this code will generate a display list for the entire layer&apos;s contents for each tile, which would be fairly wasteful

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:196
&gt; +    context()-&gt;bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, m_stencilBuffer);
&gt; +    context()-&gt;renderbufferStorage(GraphicsContext3D::RENDERBUFFER, GraphicsContext3D::STENCIL_INDEX8, m_bufferSize.width(), m_bufferSize.height());
&gt; +    context()-&gt;framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_stencilBuffer);

this section all feels redundant with DrawingBuffer.  DrawingBuffer supports creating+managing a frame buffer with a stencil attachment, managing the lifetime, etc.  Why aren&apos;t you using one here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408128</commentid>
    <comment_count>55</comment_count>
      <attachid>94434</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-05-23 12:09:31 -0700</bug_when>
    <thetext>Comment on attachment 94434
Fixed style errors

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:149
&gt;&gt; +    m_canvas-&gt;restore();
&gt; 
&gt; should you set a clip here? it seems that this code will generate a display list for the entire layer&apos;s contents for each tile, which would be fairly wasteful

The canvas is always clipped to its device, which is the texture/tile in question in this case, so no need for an extra clipRect.

Just for clarity, we are not generating a displaylist at this point: we already have one. We are in playback mode now (playing m_picture into m_canvas).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408137</commentid>
    <comment_count>56</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-23 12:18:34 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (From update of attachment 94434 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94434&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:149
&gt; &gt;&gt; +    m_canvas-&gt;restore();
&gt; &gt; 
&gt; &gt; should you set a clip here? it seems that this code will generate a display list for the entire layer&apos;s contents for each tile, which would be fairly wasteful
&gt; 
&gt; The canvas is always clipped to its device, which is the texture/tile in question in this case, so no need for an extra clipRect.
&gt; 
&gt; Just for clarity, we are not generating a displaylist at this point: we already have one. We are in playback mode now (playing m_picture into m_canvas).

Thanks for the clarification - I misread that part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408194</commentid>
    <comment_count>57</comment_count>
      <attachid>94434</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-23 13:10:29 -0700</bug_when>
    <thetext>Comment on attachment 94434
Fixed style errors

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:76
&gt;&gt; +    static PassRefPtr&lt;LayerRendererChromium&gt; create(PassRefPtr&lt;GraphicsContext3D&gt;, PassOwnPtr&lt;LayerPainterChromium&gt; contentPaint, bool acceleratedDrawing);
&gt; 
&gt; this is a somewhat awkward variable name - it would read better with &quot;acceleratedDrawingEnabled&quot; or &quot;accelerateDrawing&quot;.

changed to accelerateDrawing

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:196
&gt;&gt; +    context()-&gt;framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_stencilBuffer);
&gt; 
&gt; this section all feels redundant with DrawingBuffer.  DrawingBuffer supports creating+managing a frame buffer with a stencil attachment, managing the lifetime, etc.  Why aren&apos;t you using one here?

Two main reasons:
1. DrawingBuffer has its own color buffer. In our case, the color buffer is provided by LayerTexture.
2. It seems heavily tied to canvas 2d - has PlatformLayer for example.

It may be good to refactor it eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408207</commentid>
    <comment_count>58</comment_count>
      <attachid>94472</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-23 13:25:46 -0700</bug_when>
    <thetext>Created attachment 94472
proposed patch

Renamed acceleratedDrawing -&gt; accelerateDrawing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408493</commentid>
    <comment_count>59</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-23 17:16:55 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.cpp:196
&gt; &gt;&gt; +    context()-&gt;framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_stencilBuffer);
&gt; &gt; 
&gt; &gt; this section all feels redundant with DrawingBuffer.  DrawingBuffer supports creating+managing a frame buffer with a stencil attachment, managing the lifetime, etc.  Why aren&apos;t you using one here?
&gt; 
&gt; Two main reasons:
&gt; 1. DrawingBuffer has its own color buffer. In our case, the color buffer is provided by LayerTexture.
&gt; 2. It seems heavily tied to canvas 2d - has PlatformLayer for example.
&gt; 
&gt; It may be good to refactor it eventually.

It makes me sad to reinvent infrastructure rather than modifying the existing infrastructure to cover new use cases.  We&apos;re just going to end up with more and more near-copies of the same code to do nearly the same thing :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408532</commentid>
    <comment_count>60</comment_count>
      <attachid>94472</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-23 18:15:39 -0700</bug_when>
    <thetext>Comment on attachment 94472
proposed patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408982</commentid>
    <comment_count>61</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-24 10:43:07 -0700</bug_when>
    <thetext>Committed r87167: &lt;http://trac.webkit.org/changeset/87167&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409159</commentid>
    <comment_count>62</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-24 13:28:09 -0700</bug_when>
    <thetext>With this patch and --enable-accelerated-drawing ASSERT(context()-&gt;checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) == GraphicsContext3D::FRAMEBUFFER_COMPLETE); on line 137 of LayerTextureUpdaterCanvas.cpp fails on every composited page I visit (for example, try the poster circle example or any of the compositing layout tests).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409162</commentid>
    <comment_count>63</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-24 13:30:56 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; With this patch and --enable-accelerated-drawing ASSERT(context()-&gt;checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) == GraphicsContext3D::FRAMEBUFFER_COMPLETE); on line 137 of LayerTextureUpdaterCanvas.cpp fails on every composited page I visit (for example, try the poster circle example or any of the compositing layout tests).

I just ran into it on Linux. I can also repro on windows with --use-gl=desktop. Works fine with ANGLE. Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409266</commentid>
    <comment_count>64</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-05-24 15:40:32 -0700</bug_when>
    <thetext>(In reply to comment #63)
&gt; (In reply to comment #62)
&gt; &gt; With this patch and --enable-accelerated-drawing ASSERT(context()-&gt;checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) == GraphicsContext3D::FRAMEBUFFER_COMPLETE); on line 137 of LayerTextureUpdaterCanvas.cpp fails on every composited page I visit (for example, try the poster circle example or any of the compositing layout tests).
&gt; 

We are hitting this assert on desktop GL because it does not support an FBO without a depth buffer or separate stencil and depth buffers. It insists on using a packed depth and stencil buffer, even though SKIA does not use the depth buffer.

SKIA has extensive code to check for various FBO configs that I am reluctant to copy-paste here. DrawingBuffer has some code to check for a couple of configs, but not as robust as that in SKIA. It seems it will be better to let skia create the frame-buffer. I am looking at ways SKIA API can be changed for this case.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86331</attachid>
            <date>2011-03-21 10:10:49 -0700</date>
            <delta_ts>2011-03-21 15:30:36 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>7127</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNTg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMjEgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChHZXRHbG9iYWxHckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlc2l6ZVVwbG9hZEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjppc0NvbnRlbnRzVGV4dHVyZVZh
bGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNlcnZlQ29u
dGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsYXRmb3JtQ2FudmFzLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6c2tp
YUNhbnZhcyk6CisKIDIwMTEtMDMtMjEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDgxNTg2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwyOCBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAorI2lmIFVTRShT
S0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5j
bHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKKyNpbmNsdWRlICJT
a0dwdURldmljZUZhY3RvcnkuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMu
aCIKKworc3RhdGljIEdyQ29udGV4dCogR2V0R2xvYmFsR3JDb250ZXh0KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIHN0YXRpYyBHckNvbnRleHQqIGdHUiA9IDA7
CisgICAgaWYgKCFnR1IpIHsKKyAgICAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOw0KKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7DQorICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworCisg
ICAgICAgIGdHUiA9IEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJDb250ZXh0KCk7CisgICAgICAg
IGdHUi0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKDUxMiwgNTAgKiAxMDI0ICogMTAyNCk7CisgICAg
fQorICAgIHJldHVybiBnR1I7Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
YXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCkBAIC0xNzEsMTIgKzE5Myw0NiBAQCB2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50CiB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAg
ICBtX2NhbnZhcy5yZXNpemUoc2l6ZSk7CisKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFf
R1BVKQorICAgIC8vIFdoZW4gdXNpbmcgR1BVIHdlIG5lZWQgdG8gcmVzZXJ2ZSB0ZXh0dXJlIG5v
dyBiZWNhdXNlIHdlIHdpbGwgYmUKKyAgICAvLyBkaXJlY3RseSByZW5kZXJpbmcgaW50byB0aGUg
dGV4dHVyZS4KKyAgICBpZiAoIXJlc2VydmVDb250ZW50c1RleHR1cmUoc2l6ZSkpCisgICAgewor
ICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAg
IC8vIFRPRE8oYWxva3ApOiBOZWVkIHRvIGRlbGV0ZSBGQk8uCisgICAgaW50IGZyYW1lQnVmZmVy
ID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmcmFtZUJ1ZmZlcik7CisgICAg
bV9jb250ZW50c1RleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKCk7CisgICAgY29udGV4dC0+
dmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKworICAgIC8vIFBs
YXRmb3JtQ2FudmFzOjpyZXNpemUgY3JlYXRlcyBhIG5ldyBza2lhIGNhbnZhcy4KKyAgICAvLyBT
byB3ZSBuZWVkIHRvIGluc3RhbGwgYSBuZXcgc2tpYSBkZXZpY2Ugb24gdGhlIGNhbnZhcy4KKyAg
ICAvLyBOb3RlIHRoYXQgaW5zdGFsbGluZyBhbiBhcmJpdHJhcnkgZGV2aWNlIGlzIGRhbmdlcm91
cyBiZWNhdXNlCisgICAgLy8gY2hyb21pdW0gYXNzdW1lcyB0aGF0IGFsbCBkZXZpY2VzIGFyZSBk
ZXJpdmVkIGZyb20gc2tpYTo6UGxhdGZvcm1EZXZpY2UuCisgICAgLy8gU2VlIHNraWE6OlBsYXRm
b3JtQ2FudmFzOjpnZXRUb3BQbGF0Zm9ybURldmljZSgpIGZvciBkZXRhaWxzLgorICAgIHNraWE6
OlBsYXRmb3JtQ2FudmFzKiBza2lhQ2FudmFzID0gbV9jYW52YXMuc2tpYUNhbnZhcygpOworICAg
IEdyQ29udGV4dCogZ3IgPSBHZXRHbG9iYWxHckNvbnRleHQoY29udGV4dCk7CisgICAgZ3ItPnJl
c2V0Q29udGV4dCgpOworICAgIFNrRGV2aWNlRmFjdG9yeSogZmFjdG9yeSA9IG5ldyBTa0dwdURl
dmljZUZhY3RvcnkoZ3IsIFNrR3B1RGV2aWNlOjpDdXJyZW50M0RBcGlSZW5kZXJUYXJnZXQoKSk7
CisgICAgU2tEZXZpY2UqIGRldmljZSA9IGZhY3RvcnktPm5ld0RldmljZShza2lhQ2FudmFzLCBT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwg
ZmFsc2UsIGZhbHNlKTsKKyAgICBza2lhQ2FudmFzLT5zZXREZXZpY2UoZGV2aWNlKS0+dW5yZWYo
KTsKKyAgICBza2lhQ2FudmFzLT5zZXREZXZpY2VGYWN0b3J5KGZhY3RvcnkpOworI2VuZGlmCiB9
CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpCiB7
CisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkKKyAgICAvLyBObyBuZWVkIHRvIGRv
IGFueXRoaW5nLgorICAgIC8vIFdoZW4gdXNpbmcgR1BVIHdlIHJlbmRlciBkaXJlY3RseSBpbnRv
IHRoZSB0ZXh0dXJlLgorI2Vsc2UKICAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2Nr
ZXIoJm1fY2FudmFzKTsKICAgICB1cGRhdGVUZXh0dXJlKGxvY2tlci5waXhlbHMoKSwgbV9jYW52
YXMuc2l6ZSgpKTsKKyNlbmRpZgogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlKGNvbnN0IHVpbnQ4X3QqIHBpeGVscywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAg
LTE4NSwxNiArMjQxLDEzIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1
cmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBs
YXllclJlbmRlcmVyQ29udGV4dCgpOwotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAg
ICAgIG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKLQotICAgIC8vIElmIHdlIGhhdmUgdG8g
YWxsb2NhdGUgYSBuZXcgdGV4dHVyZSB3ZSBoYXZlIHRvIHVwbG9hZCB0aGUgZnVsbCBjb250ZW50
cy4KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHNpemUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBKSkKKyAgICBpZiAoIWlzQ29udGVudHNUZXh0dXJlVmFsaWQoc2l6ZSkpIHsK
KyAgICAgICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUg
dG8gdXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgogICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3Qg
PSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKTsKLQotICAgIGlmICghbV9jb250ZW50c1Rl
eHR1cmUtPnJlc2VydmUoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAg
IG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXJlc2Vy
dmVDb250ZW50c1RleHR1cmUoc2l6ZSkpIHsKKyAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEludFJlY3Qg
c3JjUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUpOwpAQCAtMjY5LDYgKzMyMiwy
MSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KCkKICAgICB1bnJlc2VydmVDb250
ZW50c1RleHR1cmUoKTsKIH0KIAorYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50
c1RleHR1cmVWYWxpZChjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIHJldHVybiBt
X2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChzaXplLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKK2Jvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJl
c2VydmVDb250ZW50c1RleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1f
Y29udGVudHNUZXh0dXJlKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
bGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmUgPSBMYXll
clRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnRleHR1cmVNYW5hZ2Vy
KCkpOworICAgIH0KKworICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShzaXpl
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiB7CiAgICAgaWYgKCFtX3NraXBzRHJhdyAm
JiBtX2NvbnRlbnRzVGV4dHVyZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gODE1ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2
NCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7
CiAgICAgYm9vbCByZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBp
c0NvbnRlbnRzVGV4dHVyZVZhbGlkKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0OworICAgIGJv
b2wgcmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXplKTsKICAgICB2b2lk
IHJlc2l6ZVVwbG9hZEJ1ZmZlcihjb25zdCBJbnRTaXplJik7CiAKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRm
b3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkocmV2aXNpb24gODE1ODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw2ICs5NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNpemUoY29u
c3QgSW50U2l6ZSYpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogCisjaWYgVVNFKFNLSUEpCisgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIHNraWFDYW52YXMo
KSB7IHJldHVybiBtX3NraWFDYW52YXMuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogI2lm
IFVTRShTS0lBKQogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9za2lhQ2FudmFz
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86375</attachid>
            <date>2011-03-21 15:30:36 -0700</date>
            <delta_ts>2011-03-22 10:37:29 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>7930</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNjE0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDMtMjEgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChHZXRHbG9iYWxHckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRl
eHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50
c1RleHR1cmVWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1D
YW52YXM6OnNraWFDYW52YXMpOgorCiAyMDExLTAzLTIxICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBNYXJyaW4gYW5kIFNpbW9uIEZy
YXNlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDgxNTg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwyOCBAQAog
I2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
IAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNELmgiCisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIK
KyNpbmNsdWRlICJTa0dwdURldmljZUZhY3RvcnkuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0
Zm9ybV9jYW52YXMuaCIKKworc3RhdGljIEdyQ29udGV4dCogR2V0R2xvYmFsR3JDb250ZXh0KFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIHN0YXRpYyBHckNvbnRl
eHQqIGdHUiA9IDA7CisgICAgaWYgKCFnR1IpIHsKKyAgICAgICAgV2ViQ29yZTo6RXh0ZW5zaW9u
czNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOw0KKyAgICAgICAgZXh0
ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7
DQorICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRf
YmdyYSIpOworCisgICAgICAgIGdHUiA9IEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJDb250ZXh0
KCk7CisgICAgICAgIGdHUi0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKDUxMiwgNTAgKiAxMDI0ICog
MTAyNCk7CisgICAgfQorICAgIHJldHVybiBnR1I7Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCkBAIC01Miw2ICs3
NCw5IEBAIENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWkKICAgICA6IExh
eWVyQ2hyb21pdW0ob3duZXIpCiAgICAgLCBtX2NvbnRlbnRzVGV4dHVyZSgwKQogICAgICwgbV9z
a2lwc0RyYXcoZmFsc2UpCisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkKKyAgICAs
IG1fZmJvKDApCisjZW5kaWYKIHsKIH0KIApAQCAtNjQsNiArODksMTAgQEAgdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cgogewogICAgIExheWVyQ2hyb21pdW06OmNsZWFu
dXBSZXNvdXJjZXMoKTsKICAgICBtX2NvbnRlbnRzVGV4dHVyZS5jbGVhcigpOworI2lmIFVTRShT
S0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKG1fZmJvKQorICAgICAgICBsYXllclJl
bmRlcmVyQ29udGV4dCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7CisjZW5kaWYKIH0KIAog
Ym9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNv
bnN0CkBAIC0xNzEsMTIgKzIwMCw0NSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRh
dGVDb250ZW50CiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX2NhbnZhcy5yZXNpemUoc2l6ZSk7CisKKyNp
ZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIC8vIFdoZW4gdXNpbmcgR1BVIHdl
IG5lZWQgdG8gcmVzZXJ2ZSB0ZXh0dXJlIG5vdyBiZWNhdXNlIHdlIHdpbGwgYmUKKyAgICAvLyBk
aXJlY3RseSByZW5kZXJpbmcgaW50byB0aGUgdGV4dHVyZS4KKyAgICBpZiAoIXJlc2VydmVDb250
ZW50c1RleHR1cmUoc2l6ZSkpIHsKKyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJS
ZW5kZXJlckNvbnRleHQoKTsKKyAgICBpZiAoIW1fZmJvKQorICAgICAgICBtX2ZibyA9IGNvbnRl
eHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fY29udGVudHNUZXh0
dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCgpOworICAgIGNvbnRleHQtPnZpZXdwb3J0KDAsIDAs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBQbGF0Zm9ybUNhbnZhczo6
cmVzaXplIGNyZWF0ZXMgYSBuZXcgc2tpYSBjYW52YXMuCisgICAgLy8gU28gd2UgbmVlZCB0byBp
bnN0YWxsIGEgbmV3IHNraWEgZGV2aWNlIG9uIHRoZSBjYW52YXMuCisgICAgLy8gTm90ZSB0aGF0
IGluc3RhbGxpbmcgYW4gYXJiaXRyYXJ5IGRldmljZSBpcyBkYW5nZXJvdXMgYmVjYXVzZQorICAg
IC8vIGNocm9taXVtIGFzc3VtZXMgdGhhdCBhbGwgZGV2aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHNr
aWE6OlBsYXRmb3JtRGV2aWNlLgorICAgIC8vIFNlZSBza2lhOjpQbGF0Zm9ybUNhbnZhczo6Z2V0
VG9wUGxhdGZvcm1EZXZpY2UoKSBmb3IgZGV0YWlscy4KKyAgICBza2lhOjpQbGF0Zm9ybUNhbnZh
cyogc2tpYUNhbnZhcyA9IG1fY2FudmFzLnNraWFDYW52YXMoKTsKKyAgICBHckNvbnRleHQqIGdy
ID0gR2V0R2xvYmFsR3JDb250ZXh0KGNvbnRleHQpOworICAgIGdyLT5yZXNldENvbnRleHQoKTsK
KyAgICBTa0RldmljZUZhY3RvcnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KGdy
LCBTa0dwdURldmljZTo6Q3VycmVudDNEQXBpUmVuZGVyVGFyZ2V0KCkpOworICAgIFNrRGV2aWNl
KiBkZXZpY2UgPSBmYWN0b3J5LT5uZXdEZXZpY2Uoc2tpYUNhbnZhcywgU2tCaXRtYXA6OmtBUkdC
Xzg4ODhfQ29uZmlnLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlLCBmYWxzZSk7
CisgICAgc2tpYUNhbnZhcy0+c2V0RGV2aWNlKGRldmljZSktPnVucmVmKCk7CisgICAgc2tpYUNh
bnZhcy0+c2V0RGV2aWNlRmFjdG9yeShmYWN0b3J5KTsKKyNlbmRpZgogfQogCiB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlSWZOZWVkZWQoKQogeworI2lmIFVTRShTS0lB
KSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgLy8gTm8gbmVlZCB0byBkbyBhbnl0aGluZy4KKyAg
ICAvLyBXaGVuIHVzaW5nIEdQVSB3ZSByZW5kZXIgZGlyZWN0bHkgaW50byB0aGUgdGV4dHVyZS4K
KyNlbHNlCiAgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZhcyk7
CiAgICAgdXBkYXRlVGV4dHVyZShsb2NrZXIucGl4ZWxzKCksIG1fY2FudmFzLnNpemUoKSk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZShjb25z
dCB1aW50OF90KiBwaXhlbHMsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0xODUsMTYgKzI0Nywx
MyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNv
bnRleHQoKTsKLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICBtX2NvbnRlbnRz
VGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+
dGV4dHVyZU1hbmFnZXIoKSk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3
IHRleHR1cmUgd2UgaGF2ZSB0byB1cGxvYWQgdGhlIGZ1bGwgY29udGVudHMuCi0gICAgaWYgKCFt
X2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkp
CisgICAgaWYgKCFpc0NvbnRlbnRzVGV4dHVyZVZhbGlkKHNpemUpKSB7CisgICAgICAgIC8vIElm
IHdlIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgdGV4dHVyZSB3ZSBoYXZlIHRvIHVwbG9hZCB0aGUg
ZnVsbCBjb250ZW50cy4KICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0ID0gSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgc2l6ZSk7Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZl
KHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkgewotICAgICAgICBtX3NraXBzRHJhdyA9
IHRydWU7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFyZXNlcnZlQ29udGVudHNUZXh0
dXJlKHNpemUpKSB7CisgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBJbnRSZWN0IHNyY1JlY3QgPSBJbnRS
ZWN0KEludFBvaW50KDAsIDApLCBzaXplKTsKQEAgLTI2OSw2ICszMjgsMjEgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCiAgICAgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7
CiB9CiAKK2Jvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmlzQ29udGVudHNUZXh0dXJlVmFsaWQo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c1RleHR1
cmUgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpOworfQorCitib29sIENvbnRlbnRMYXllckNocm9taXVtOjpyZXNlcnZlQ29udGVudHNU
ZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVy
ZSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJD
b250ZXh0KCk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVh
dGUoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUoc2l6ZSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpOworfQorCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1bnJlc2VydmVD
b250ZW50c1RleHR1cmUoKQogewogICAgIGlmICghbV9za2lwc0RyYXcgJiYgbV9jb250ZW50c1Rl
eHR1cmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDgx
NTg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogICAgIGJvb2wgcmVx
dWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0OworICAgIGJvb2wgaXNDb250ZW50c1RleHR1
cmVWYWxpZChjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdDsKKyAgICBib29sIHJlc2VydmVDb250
ZW50c1RleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CiAgICAgdm9pZCByZXNpemVVcGxvYWRC
dWZmZXIoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5
cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9CkBAIC04MCw2ICs4
Miw5IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZh
czsKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9mYm87CisjZW5kaWYKIAogICAgIEludFJlY3QgbV92aXNpYmxlUmVjdEluTGF5ZXJDb29y
ZHM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1DYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCShyZXZpc2lvbiA4MTU4NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2l6
ZShjb25zdCBJbnRTaXplJik7CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CiAKKyNpZiBVU0UoU0tJQSkKKyAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogc2tpYUNh
bnZhcygpIHsgcmV0dXJuIG1fc2tpYUNhbnZhcy5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6
CiAjaWYgVVNFKFNLSUEpCiAgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3NraWFD
YW52YXM7Cg==
</data>
<flag name="review"
          id="78625"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86476</attachid>
            <date>2011-03-22 10:37:29 -0700</date>
            <delta_ts>2011-03-22 15:49:33 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>14475</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNjc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDMtMjIgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChHZXRHbG9iYWxHckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRl
eHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50
c1RleHR1cmVWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRBY2NlbGVyYXRlZENvbnRl
bnRMYXllcnNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6YWNjZWxlcmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ2FudmFzOjpza2lhQ2FudmFzKToKKwogMjAxMS0wMy0yMiAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjgxNjUzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAko
cmV2aXNpb24gODE1ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDI4IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgogCisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkKKyNpbmNsdWRlICJF
eHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNpbmNsdWRlICJTa0dwdURl
dmljZS5oIgorI2luY2x1ZGUgIlNrR3B1RGV2aWNlRmFjdG9yeS5oIgorI2luY2x1ZGUgInNraWEv
ZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorCitzdGF0aWMgR3JDb250ZXh0KiBHZXRHbG9iYWxHckNv
bnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgc3RhdGlj
IEdyQ29udGV4dCogZ0dSID0gMDsKKyAgICBpZiAoIWdHUikgeworICAgICAgICBXZWJDb3JlOjpF
eHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAg
ICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCIpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9m
b3JtYXRfYmdyYSIpOworCisgICAgICAgIGdHUiA9IEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJD
b250ZXh0KCk7CisgICAgICAgIGdHUi0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKDUxMiwgNTAgKiAx
MDI0ICogMTAyNCk7CisgICAgfQorICAgIHJldHVybiBnR1I7Cit9CisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCkBAIC01
Miw2ICs3NCw5IEBAIENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWkKICAg
ICA6IExheWVyQ2hyb21pdW0ob3duZXIpCiAgICAgLCBtX2NvbnRlbnRzVGV4dHVyZSgwKQogICAg
ICwgbV9za2lwc0RyYXcoZmFsc2UpCisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkK
KyAgICAsIG1fZmJvKDApCisjZW5kaWYKIHsKIH0KIApAQCAtNjQsNiArODksMTAgQEAgdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cgogewogICAgIExheWVyQ2hyb21pdW06
OmNsZWFudXBSZXNvdXJjZXMoKTsKICAgICBtX2NvbnRlbnRzVGV4dHVyZS5jbGVhcigpOworI2lm
IFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKG1fZmJvKQorICAgICAgICBs
YXllclJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7CisjZW5kaWYK
IH0KIAogYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVj
dCgpIGNvbnN0CkBAIC0xNzEsMTAgKzIwMCw0NyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVt
Ojp1cGRhdGVDb250ZW50CiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX2NhbnZhcy5yZXNpemUoc2l6ZSk7
CisKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlmIChsYXllclJlbmRl
cmVyKCktPmFjY2VsZXJhdGVkQ29udGVudExheWVyc0VuYWJsZWQoKSkgeworICAgICAgICAvLyBX
aGVuIHVzaW5nIEdQVSB3ZSBuZWVkIHRvIHJlc2VydmUgdGV4dHVyZSBub3cgYmVjYXVzZSB3ZSB3
aWxsIGJlCisgICAgICAgIC8vIGRpcmVjdGx5IHJlbmRlcmluZyBpbnRvIHRoZSB0ZXh0dXJlLgor
ICAgICAgICBpZiAoIXJlc2VydmVDb250ZW50c1RleHR1cmUoc2l6ZSkpIHsKKyAgICAgICAgICAg
IG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7
CisgICAgICAgIGlmICghbV9mYm8pCisgICAgICAgICAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0
ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1
cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKCk7CisgICAgICAgIGNvbnRleHQtPnZpZXdwb3J0KDAs
IDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gUGxhdGZvcm1D
YW52YXM6OnJlc2l6ZSBjcmVhdGVzIGEgbmV3IHNraWEgY2FudmFzLgorICAgICAgICAvLyBTbyB3
ZSBuZWVkIHRvIGluc3RhbGwgYSBuZXcgc2tpYSBkZXZpY2Ugb24gdGhlIGNhbnZhcy4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IGluc3RhbGxpbmcgYW4gYXJiaXRyYXJ5IGRldmljZSBpcyBkYW5nZXJv
dXMgYmVjYXVzZQorICAgICAgICAvLyBjaHJvbWl1bSBhc3N1bWVzIHRoYXQgYWxsIGRldmljZXMg
YXJlIGRlcml2ZWQgZnJvbSBza2lhOjpQbGF0Zm9ybURldmljZS4KKyAgICAgICAgLy8gU2VlIHNr
aWE6OlBsYXRmb3JtQ2FudmFzOjpnZXRUb3BQbGF0Zm9ybURldmljZSgpIGZvciBkZXRhaWxzLgor
ICAgICAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogc2tpYUNhbnZhcyA9IG1fY2FudmFzLnNraWFD
YW52YXMoKTsKKyAgICAgICAgR3JDb250ZXh0KiBnciA9IEdldEdsb2JhbEdyQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgZ3ItPnJlc2V0Q29udGV4dCgpOworICAgICAgICBTa0RldmljZUZhY3Rv
cnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KGdyLCBTa0dwdURldmljZTo6Q3Vy
cmVudDNEQXBpUmVuZGVyVGFyZ2V0KCkpOworICAgICAgICBTa0RldmljZSogZGV2aWNlID0gZmFj
dG9yeS0+bmV3RGV2aWNlKHNraWFDYW52YXMsIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBza2lh
Q2FudmFzLT5zZXREZXZpY2UoZGV2aWNlKS0+dW5yZWYoKTsKKyAgICAgICAgc2tpYUNhbnZhcy0+
c2V0RGV2aWNlRmFjdG9yeShmYWN0b3J5KTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUlmTmVlZGVkKCkKIHsKKyNpZiBVU0UoU0tJ
QSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcuCisg
ICAgLy8gV2hlbiB1c2luZyBHUFUgd2UgcmVuZGVyIGRpcmVjdGx5IGludG8gdGhlIHRleHR1cmUu
CisgICAgaWYgKGxheWVyUmVuZGVyZXIoKS0+YWNjZWxlcmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRv
TG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwogICAgIHVwZGF0ZVRleHR1cmUobG9ja2VyLnBpeGVs
cygpLCBtX2NhbnZhcy5zaXplKCkpOwogfQpAQCAtMTg1LDE2ICsyNTEsMTMgQEAgdm9pZCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZQogICAgICAgICByZXR1cm47CiAKICAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAg
aWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUgPSBMYXll
clRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBsYXllclJlbmRlcmVyKCktPnRleHR1cmVNYW5hZ2Vy
KCkpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhh
dmUgdG8gdXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgotICAgIGlmICghbV9jb250ZW50c1RleHR1
cmUtPmlzVmFsaWQoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgIGlmICghaXND
b250ZW50c1RleHR1cmVWYWxpZChzaXplKSkgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIHRvIGFs
bG9jYXRlIGEgbmV3IHRleHR1cmUgd2UgaGF2ZSB0byB1cGxvYWQgdGhlIGZ1bGwgY29udGVudHMu
CiAgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNp
emUpOwotCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShzaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpIHsKLSAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmICghcmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShzaXplKSkgewor
ICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgSW50UmVjdCBzcmNSZWN0ID0gSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgc2l6ZSk7CkBAIC0yNjksNiArMzMyLDIxIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXcoKQogICAgIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwogfQogCitib29sIENv
bnRlbnRMYXllckNocm9taXVtOjppc0NvbnRlbnRzVGV4dHVyZVZhbGlkKGNvbnN0IEludFNpemUm
IHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVu
dHNUZXh0dXJlLT5pc1ZhbGlkKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKK30KKwor
Ym9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAg
ICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGNvbnRleHQsIGxh
eWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1hbmFnZXIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1f
Y29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsK
K30KKwogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJl
KCkKIHsKICAgICBpZiAoIW1fc2tpcHNEcmF3ICYmIG1fY29udGVudHNUZXh0dXJlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4MTU4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdmly
dHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICBib29sIHJlcXVpcmVzQ2xpcHBlZFVw
ZGF0ZVJlY3QoKSBjb25zdDsKKyAgICBib29sIGlzQ29udGVudHNUZXh0dXJlVmFsaWQoY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OworICAgIGJvb2wgcmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShjb25zdCBJ
bnRTaXplJik7CiAgICAgdm9pZCByZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYpOwog
CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuICJDb250ZW50TGF5ZXIiOyB9CkBAIC04MCw2ICs4Miw5IEBAIHByb3RlY3RlZDoKIAogcHJp
dmF0ZToKICAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyNpZiBVU0UoU0tJQSkgJiYgRU5B
QkxFKFNLSUFfR1BVKQorICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisjZW5kaWYKIAogICAg
IEludFJlY3QgbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHM7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4MTU4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OkxheWVyUmVuZGVyZXJDaHJvCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAg
ICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAgICAsIG1fY29tcG9zaXRlT2Zmc2Ny
ZWVuKGZhbHNlKQorICAgICwgbV9hY2NlbGVyYXRlZENvbnRlbnRMYXllcnNFbmFibGVkKGZhbHNl
KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNl
KDApCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24g
ODE1ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCk7CiAgICAgYm9vbCBpc0Nv
bXBvc2l0aW5nT2Zmc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW47
IH0KIAorICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9hY2NlbGVyYXRlZENvbnRlbnRMYXllcnNFbmFibGVkID0gZW5hYmxlZDsgfQor
ICAgIGJvb2wgYWNjZWxlcmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYWNjZWxlcmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxlZDsgfQorCiAgICAgdW5zaWduZWQgY3Jl
YXRlTGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBkZWxldGVMYXllclRleHR1cmUodW5zaWduZWQp
OwogCkBAIC0xODUsNiArMTg4LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX29mZnNjcmVl
bkZyYW1lYnVmZmVySWQ7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsKIAorICAgIGJv
b2wgbV9hY2NlbGVyYXRlZENvbnRlbnRMYXllcnNFbmFibGVkOworCiAjaWYgVVNFKFNLSUEpCiAg
ICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKICAgICBP
d25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9yb290TGF5ZXJTa2lhQ29udGV4dDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGxhdGZvcm1DYW52YXMuaAkocmV2aXNpb24gODE1ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NSw2ICs5NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6
ZSYpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCisjaWYg
VVNFKFNLSUEpCisgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIHNraWFDYW52YXMoKSB7IHJldHVy
biBtX3NraWFDYW52YXMuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogI2lmIFVTRShTS0lB
KQogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9za2lhQ2FudmFzOwpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNjc2KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAx
MS0wMy0yMiAgQWxvayBwcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgc2tpYSBncHUg
cmVuZGVyaW5nIGZvciBjb250ZW50IGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3NDkKKworICAgICAgICAqIHB1YmxpYy9XZWJTZXR0aW5n
cy5oOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJs
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkQ29u
dGVudExheWVyc0VuYWJsZWQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjphY2NlbGVyYXRlZENvbnRlbnRMYXllcnNF
bmFibGVkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgorCiAyMDExLTAzLTIyICBOb2VsIEdvcmRvbiAg
PG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5n
LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCShy
ZXZpc2lvbiA4MTU4NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRp
bmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JDYW52YXNFbmFibGVkKGJvb2wp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclBsdWdp
bnNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRBY2NlbGVyYXRlZENvbnRlbnRMYXllcnNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgYWNjZWxlcmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxlZCgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZChib29sKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHJldmlzaW9u
IDgxNTg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFdl
YlNldHRpbmdzSW1wbDo6V2ViU2V0dGluZ3NJbXBsKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICA6
IG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX2NvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQo
ZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGVkQ29udGVudExheWVyc0VuYWJsZWQoZmFsc2UpCiAg
ICAgLCBtX3Nob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICwgbV9zaG93UGxhdGZvcm1MYXllclRy
ZWUoZmFsc2UpCiB7CkBAIC0zNDMsNiArMzQ0LDExIEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpz
ZXRBY2NlbGVyYXRlZENvbXAKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJTZXR0aW5nc0lt
cGw6OnNldEFjY2VsZXJhdGVkQ29udGVudExheWVyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQorewor
ICAgIG1fYWNjZWxlcmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZv
aWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sIGVu
YWJsZWQpCiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQo
ZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0lt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5n
c0ltcGwuaAkocmV2aXNpb24gODE1ODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5h
YmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zv
clBsdWdpbnNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7ICAgIAorICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChi
b29sKTsgCisgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29udGVudExheWVyc0VuYWJs
ZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGFjY2VsZXJhdGVkQ29udGVudExheWVyc0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVkQ29udGVudExheWVyc0VuYWJsZWQ7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoYm9vbCk7CkBAIC0xMTQsNiArMTE2LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsK
ICAgICBib29sIG1fY29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZDsKKyAgICBib29sIG1fYWNjZWxl
cmF0ZWRDb250ZW50TGF5ZXJzRW5hYmxlZDsKICAgICBib29sIG1fc2hvd0ZQU0NvdW50ZXI7CiAg
ICAgYm9vbCBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4MTU4NikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ1NCw2ICsyNDU0LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIGh1
ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKSk7CiAgICAg
aHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKCkpOwogCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRBY2NlbGVyYXRlZENvbnRlbnRM
YXllcnNFbmFibGVkKHNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29udGVudExheWVyc0VuYWJsZWQo
KSk7CiAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVBbmREcmF3TGF5ZXJzKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86530</attachid>
            <date>2011-03-22 15:49:33 -0700</date>
            <delta_ts>2011-03-23 14:20:25 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>13559</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNzEwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDMtMjIgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChHZXRHbG9iYWxHckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRl
eHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50
c1RleHR1cmVWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRBY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUGxhdGZvcm1DYW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFz
Ojpza2lhQ2FudmFzKToKKwogMjAxMS0wMy0yMiAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgS2lsemVyLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gODE2OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDI4IEBACiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCisjaWYgVVNFKFNLSUEp
ICYmIEVOQUJMRShTS0lBX0dQVSkKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRl
ICJHckNvbnRleHQuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2luY2x1ZGUgIlNrR3B1
RGV2aWNlRmFjdG9yeS5oIgorI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgor
CitzdGF0aWMgR3JDb250ZXh0KiBHZXRHbG9iYWxHckNvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgc3RhdGljIEdyQ29udGV4dCogZ0dSID0gMDsKKyAg
ICBpZiAoIWdHUikgeworICAgICAgICBXZWJDb3JlOjpFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVu
YWJsZWQoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICBleHRlbnNp
b25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworCisgICAgICAg
IGdHUiA9IEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJDb250ZXh0KCk7CisgICAgICAgIGdHUi0+
c2V0VGV4dHVyZUNhY2hlTGltaXRzKDUxMiwgNTAgKiAxMDI0ICogMTAyNCk7CisgICAgfQorICAg
IHJldHVybiBnR1I7Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPENvbnRlbnRMYXllckNocm9taXVtPiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCkBAIC01Miw2ICs3NCw5IEBAIENvbnRlbnRMYXll
ckNocm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWkKICAgICA6IExheWVyQ2hyb21pdW0ob3duZXIp
CiAgICAgLCBtX2NvbnRlbnRzVGV4dHVyZSgwKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisj
aWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkKKyAgICAsIG1fZmJvKDApCisjZW5kaWYK
IHsKIH0KIApAQCAtNjQsNiArODksMTAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFJlc291cgogewogICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKICAg
ICBtX2NvbnRlbnRzVGV4dHVyZS5jbGVhcigpOworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJ
QV9HUFUpCisgICAgaWYgKG1fZmJvKQorICAgICAgICBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5k
ZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7CisjZW5kaWYKIH0KIAogYm9vbCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0CkBAIC0xNzEsMTAgKzIw
MCw0NyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50CiB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKICAgICBtX2NhbnZhcy5yZXNpemUoc2l6ZSk7CisKKyNpZiBVU0UoU0tJQSkgJiYgRU5B
QkxFKFNLSUFfR1BVKQorICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoKSkgeworICAgICAgICAvLyBXaGVuIHVzaW5nIEdQVSB3ZSBuZWVkIHRvIHJlc2Vy
dmUgdGV4dHVyZSBub3cgYmVjYXVzZSB3ZSB3aWxsIGJlCisgICAgICAgIC8vIGRpcmVjdGx5IHJl
bmRlcmluZyBpbnRvIHRoZSB0ZXh0dXJlLgorICAgICAgICBpZiAoIXJlc2VydmVDb250ZW50c1Rl
eHR1cmUoc2l6ZSkpIHsKKyAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgICAgIGlmICghbV9mYm8pCisgICAgICAg
ICAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIGNvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKCk7Cisg
ICAgICAgIGNvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CisKKyAgICAgICAgLy8gUGxhdGZvcm1DYW52YXM6OnJlc2l6ZSBjcmVhdGVzIGEgbmV3IHNr
aWEgY2FudmFzLgorICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGluc3RhbGwgYSBuZXcgc2tpYSBk
ZXZpY2Ugb24gdGhlIGNhbnZhcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGluc3RhbGxpbmcgYW4g
YXJiaXRyYXJ5IGRldmljZSBpcyBkYW5nZXJvdXMgYmVjYXVzZQorICAgICAgICAvLyBjaHJvbWl1
bSBhc3N1bWVzIHRoYXQgYWxsIGRldmljZXMgYXJlIGRlcml2ZWQgZnJvbSBza2lhOjpQbGF0Zm9y
bURldmljZS4KKyAgICAgICAgLy8gU2VlIHNraWE6OlBsYXRmb3JtQ2FudmFzOjpnZXRUb3BQbGF0
Zm9ybURldmljZSgpIGZvciBkZXRhaWxzLgorICAgICAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyog
c2tpYUNhbnZhcyA9IG1fY2FudmFzLnNraWFDYW52YXMoKTsKKyAgICAgICAgR3JDb250ZXh0KiBn
ciA9IEdldEdsb2JhbEdyQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgZ3ItPnJlc2V0Q29udGV4
dCgpOworICAgICAgICBTa0RldmljZUZhY3RvcnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VG
YWN0b3J5KGdyLCBTa0dwdURldmljZTo6Q3VycmVudDNEQXBpUmVuZGVyVGFyZ2V0KCkpOworICAg
ICAgICBTa0RldmljZSogZGV2aWNlID0gZmFjdG9yeS0+bmV3RGV2aWNlKHNraWFDYW52YXMsIFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBm
YWxzZSwgZmFsc2UpOworICAgICAgICBza2lhQ2FudmFzLT5zZXREZXZpY2UoZGV2aWNlKS0+dW5y
ZWYoKTsKKyAgICAgICAgc2tpYUNhbnZhcy0+c2V0RGV2aWNlRmFjdG9yeShmYWN0b3J5KTsKKyAg
ICB9CisjZW5kaWYKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVy
ZUlmTmVlZGVkKCkKIHsKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIC8v
IE5vIG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgLy8gV2hlbiB1c2luZyBHUFUgd2UgcmVuZGVy
IGRpcmVjdGx5IGludG8gdGhlIHRleHR1cmUuCisgICAgaWYgKGxheWVyUmVuZGVyZXIoKS0+YWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAg
IFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwogICAgIHVwZGF0
ZVRleHR1cmUobG9ja2VyLnBpeGVscygpLCBtX2NhbnZhcy5zaXplKCkpOwogfQpAQCAtMTg1LDE2
ICsyNTEsMTMgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZQogICAg
ICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVu
ZGVyZXJDb250ZXh0KCk7Ci0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgbV9j
b250ZW50c1RleHR1cmUgPSBMYXllclRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBsYXllclJlbmRl
cmVyKCktPnRleHR1cmVNYW5hZ2VyKCkpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0
ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8gdXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgotICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpKQorICAgIGlmICghaXNDb250ZW50c1RleHR1cmVWYWxpZChzaXplKSkgeworICAgICAg
ICAvLyBJZiB3ZSBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IHRleHR1cmUgd2UgaGF2ZSB0byB1cGxv
YWQgdGhlIGZ1bGwgY29udGVudHMuCiAgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIHNpemUpOwotCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+
cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsKLSAgICAgICAgbV9za2lw
c0RyYXcgPSB0cnVlOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghcmVzZXJ2ZUNvbnRl
bnRzVGV4dHVyZShzaXplKSkgeworICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgSW50UmVjdCBzcmNSZWN0
ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgc2l6ZSk7CkBAIC0yNjksNiArMzMyLDIxIEBAIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIHVucmVzZXJ2ZUNvbnRlbnRzVGV4
dHVyZSgpOwogfQogCitib29sIENvbnRlbnRMYXllckNocm9taXVtOjppc0NvbnRlbnRzVGV4dHVy
ZVZhbGlkKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVu
dHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHNpemUsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBKTsKK30KKworYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZUNv
bnRlbnRzVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghbV9jb250ZW50
c1RleHR1cmUpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJl
bmRlcmVyQ29udGV4dCgpOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVy
ZTo6Y3JlYXRlKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+dGV4dHVyZU1hbmFnZXIoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHNpemUsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKTsKK30KKwogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dW5y
ZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1fc2tpcHNEcmF3ICYmIG1fY29u
dGVudHNUZXh0dXJlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZp
c2lvbiA4MTY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAg
cHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICBi
b29sIHJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3QoKSBjb25zdDsKKyAgICBib29sIGlzQ29udGVu
dHNUZXh0dXJlVmFsaWQoY29uc3QgSW50U2l6ZSYpIGNvbnN0OworICAgIGJvb2wgcmVzZXJ2ZUNv
bnRlbnRzVGV4dHVyZShjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCByZXNpemVVcGxvYWRCdWZm
ZXIoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVB
c1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9CkBAIC04MCw2ICs4Miw5
IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsK
KyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV9mYm87CisjZW5kaWYKIAogICAgIEludFJlY3QgbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHM7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lv
biA4MTY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBA
QCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvCiAgICAgLCBtX2N1cnJl
bnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAg
ICAsIG1fY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQorICAgICwgbV9hY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlKDApCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAkocmV2aXNpb24gODE2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NiArOTYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCk7
CiAgICAgYm9vbCBpc0NvbXBvc2l0aW5nT2Zmc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
b3NpdGVPZmZzY3JlZW47IH0KIAorICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gZW5hYmxlZDsg
fQorICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQorCiAgICAgdW5zaWduZWQgY3JlYXRlTGF5ZXJU
ZXh0dXJlKCk7CiAgICAgdm9pZCBkZWxldGVMYXllclRleHR1cmUodW5zaWduZWQpOwogCkBAIC0x
ODUsNiArMTg4LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX29mZnNjcmVlbkZyYW1lYnVm
ZmVySWQ7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsKIAorICAgIGJvb2wgbV9hY2Nl
bGVyYXRlZERyYXdpbmdFbmFibGVkOworCiAjaWYgVVNFKFNLSUEpCiAgICAgT3duUHRyPHNraWE6
OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1D
b250ZXh0U2tpYT4gbV9yb290TGF5ZXJTa2lhQ29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52
YXMuaAkocmV2aXNpb24gODE2OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYpOwogICAgIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCisjaWYgVVNFKFNLSUEpCisgICAg
c2tpYTo6UGxhdGZvcm1DYW52YXMqIHNraWFDYW52YXMoKSB7IHJldHVybiBtX3NraWFDYW52YXMu
Z2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogI2lmIFVTRShTS0lBKQogICAgIE93blB0cjxz
a2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9za2lhQ2FudmFzOwpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDgxNzEwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMy0yMiAgQWxvayBw
cml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgc2tpYSBncHUgcmVuZGVyaW5nIGZvciBj
b250ZW50IGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTY3NDkKKworICAgICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAq
IHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0lt
cGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0
aW5nc0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgorCiAyMDExLTAzLTIyICBKYXkgQ2l2ZWxs
aSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBM
ZXZpbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3Mu
aAkocmV2aXNpb24gODE2OTkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
ZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luc0VuYWJsZWQo
Ym9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
QW5pbWF0aW9uRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJh
dGVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxl
cmF0ZWREcmF3aW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldE1lbW9y
eUluZm9FbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SHlwZXJsaW5rQXVk
aXRpbmdFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkgPSAwOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCShyZXZpc2lvbiA4MTY5OSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0Myw2ICszNDMsMTEgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJh
dGVkQ29tcAogICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmlt
YXRpb25FbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9zZXR0aW5ncy0+
c2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChlbmFibGVkKTsKK30KKwogdm9pZCBXZWJTZXR0
aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
ICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChlbmFibGVkKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCShy
ZXZpc2lvbiA4MTY5OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdz
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFibGVkKGJvb2wp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yUGx1Z2luc0Vu
YWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JDYW52YXNFbmFibGVkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29sKTsgICAgCisgICAgdmlydHVhbCB2b2lk
IHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0TWVtb3J5SW5mb0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXN5
bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4MTY5OSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQyNiw2ICsyNDI2LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIGh1
ZC0+c2V0U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKSk7CiAgICAg
aHVkLT5zZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKCkpOwogCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRBY2NlbGVyYXRlZERyYXdpbmdF
bmFibGVkKG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsK
ICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUFuZERyYXdMYXllcnMoKTsKIH0KIAo=
</data>
<flag name="review"
          id="78817"
          type_id="1"
          status="-"
          setter="vangelis"
    />
    <flag name="commit-queue"
          id="78818"
          type_id="3"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86686</attachid>
            <date>2011-03-23 14:20:25 -0700</date>
            <delta_ts>2011-03-24 13:59:49 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>19804</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDMtMjMgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNraWEgdG8gZG8gaGFyZHdh
cmUgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGludG8KKyAgICAgICAgY29udGVudCBsYXllcnMuIEl0
IGNvbWVzIGludG8gZWZmZWN0IGlmIGJvdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgYW5kCisg
ICAgICAgIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBhcmUgZW5hYmxlZCBpbiBwYWdlIHNldHRpbmdz
LiBZb3UgYWxzbyBuZWVkIHRvCisgICAgICAgIGNvbXBpbGUgd2l0aCBTS0lBX0dQVSBmbGFnIGVu
YWJsZWQuCisgICAgICAgIAorICAgICAgICBXZSB3ZXJlIGVhcmxpZXIgdXNpbmcgc2tpYSB0byBy
ZW5kZXIgaW50byBhIGJpdG1hcCB3aGljaCB3YXMgbGF0ZXIKKyAgICAgICAgY29waWVkIGludG8g
YSB0ZXh0dXJlIHRvIGJlIGNvbXBvc2l0ZWQuIFRoaXMgcGF0Y2ggYWxsb3dzIHNraWEgdG8KKyAg
ICAgICAgZGlyZWN0bHkgcmVuZGVyIGludG8gdGhlIHRleHR1cmUuCisgICAgICAgIAorICAgICAg
ICBUaGlzIHdvcmsgaXMgc3RpbGwgaW4gcHJvdG90eXBpbmcgcGhhc2Ugd2l0aCBtYW55IEZJWE1F
cy4gVGhlcmUgYXJlCisgICAgICAgIHR3byBtYWluIHJlbGF0ZWQgY2hhbGxlbmdlcyAtIHRleHQg
cmVuZGVyaW5nIGFuZCBlbmNhcHN1bGF0aW5nIGludGVybmFsCisgICAgICAgIGltcGxlbWVudGF0
aW9uIGRldGFpbHMuIENocm9taXVtIGlzIGRvaW5nIHNvbWV0aGluZyBzcGVjaWFsIHdpdGggdGV4
dAorICAgICAgICB3aGljaCBzb21laG93IG1lc3NlcyB1cCBza2lhIHN0YWNrLiBUaGUgY2hyb21p
dW0gcG9ydCBtYWtlcyBhbHNvIG1ha2VzCisgICAgICAgIGl0IHJlYWxseSBoYXJkIHRvIGluc3Rh
bGwgYW4gYXJiaXRyYXJ5IGRldmljZSBvbiBhIGNhbnZhcywgd2hpY2ggcmVzdWx0cworICAgICAg
ICBpbiBzaW1pbGFyIGhhY2tzIGF0IG11bHRpcGxlIHBsYWNlcy4gSSB0aGluayB3ZSBuZWVkIHRv
IHJlZmFjdG9yIGVpdGhlcgorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhcyBvciBza2lh
OjpQbGF0Zm9ybUNhbnZhcyB0byBtYWtlIGl0IGNvbXBsZXRlbHkKKyAgICAgICAgdHJhbnNwYXJl
bnQgdG8gdGhlIGNsaWVudHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChTY29wZWRHcmFwaGljc1N0YXRl
OjpGcmFtZUJ1ZmZlclN0YXRlOjpWaWV3cG9ydFN0YXRlOjpWaWV3cG9ydFN0YXRlKToKKyAgICAg
ICAgKFNjb3BlZEdyYXBoaWNzU3RhdGU6OkZyYW1lQnVmZmVyU3RhdGU6OlZpZXdwb3J0U3RhdGU6
OnNhdmUpOgorICAgICAgICAoU2NvcGVkR3JhcGhpY3NTdGF0ZTo6RnJhbWVCdWZmZXJTdGF0ZTo6
Vmlld3BvcnRTdGF0ZTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Q29udGVudExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzaXplVXBsb2FkQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmlzQ29udGVudHNUZXh0dXJlVmFsaWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnJlc2VydmVDb250ZW50c1Rl
eHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YWNjZWxlcmF0ZWREcmF3aW5nRW5h
YmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52
YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpza2lhQ2FudmFzKToKKwog
MjAxMS0wMy0yMyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAJKHJldmlzaW9uIDgxNjk5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw4OCBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisj
aW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKKyNpbmNsdWRl
ICJTa0dwdURldmljZUZhY3RvcnkuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52
YXMuaCIKKworbmFtZXNwYWNlIHsKKy8vIFV0aWxpdHkgY2xhc3MgdG8gc2F2ZSBhbmQgcmVzdG9y
ZSBncmFwaGljcyBjb250ZXh0IHN0YXRlLgorLy8gSXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBv
biBhIGZ1bmN0aW9uIHN0YWNrIHdoZXJlIGdyYXBoaWNzIHN0YXRlIG5lZWRzIHRvCisvLyBjaGFu
Z2VkIHRlbXBvcmFyaWx5LiBUaGUgZGVzdHJ1Y3RvciB3aWxsIHJlc3RvcmUgYWxsIHNhdmVkIHN0
YXRlcy4KKy8vIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIHN0YWNrIC0gaXQgb25seSByZXN0b3Jl
cyB0aGUgbGFzdCBzYXZlZCBzdGFjay4KKy8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gYSBzZXBhcmF0
ZSBmaWxlIGlmIGl0IGlzIHVzZWZ1bCBhdCBvdGhlciBwbGFjZXMgdG9vLgorLy8gSXQgbWlnaHQg
bm90IGJlIG5lZWRlZCBpZiB3ZSB1c2UgYSBzZXBhcmF0ZSBjb250ZXh0IGZvciBza2lhIGdwdSBk
cmF3aW5nLgorY2xhc3MgU2NvcGVkR3JhcGhpY3NTdGF0ZSB7CitwdWJsaWM6CisgICAgU2NvcGVk
R3JhcGhpY3NTdGF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkgOiBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorICAgIH5TY29wZWRHcmFwaGljc1N0YXRlKCkK
KyAgICB7CisgICAgICAgIGlmIChtX2ZyYW1lQnVmZmVyU3RhdGUpCisgICAgICAgICAgICBtX2Zy
YW1lQnVmZmVyU3RhdGUtPnJlc3RvcmUobV9jb250ZXh0KTsKKyAgICAgICAgaWYgKG1fdmlld3Bv
cnRTdGF0ZSkKKyAgICAgICAgICAgIG1fdmlld3BvcnRTdGF0ZS0+cmVzdG9yZShtX2NvbnRleHQp
OworICAgIH0KKworICAgIHZvaWQgc2F2ZUZyYW1lQnVmZmVyKCkKKyAgICB7CisgICAgICAgIG1f
ZnJhbWVCdWZmZXJTdGF0ZSA9IG5ldyBGcmFtZUJ1ZmZlclN0YXRlOworICAgICAgICBtX2ZyYW1l
QnVmZmVyU3RhdGUtPnNhdmUobV9jb250ZXh0KTsKKyAgICB9CisgICAgdm9pZCBzYXZlVmlld3Bv
cnQoKQorICAgIHsKKyAgICAgICAgbV92aWV3cG9ydFN0YXRlID0gbmV3IFZpZXdwb3J0U3RhdGU7
CisgICAgICAgIG1fdmlld3BvcnRTdGF0ZS0+c2F2ZShtX2NvbnRleHQpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjbGFzcyBGcmFtZUJ1ZmZlclN0YXRlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEZyYW1lQnVmZmVyU3RhdGUoKSA6IG1fZnJhbWVCdWZmZXIoMCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIHZvaWQgc2F2ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbV9mcmFtZUJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgdm9p
ZCByZXN0b3JlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZnJhbWVCdWZmZXIpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50
IG1fZnJhbWVCdWZmZXI7CisgICAgfTsKKworICAgIGNsYXNzIFZpZXdwb3J0U3RhdGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgVmlld3BvcnRTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fdmlld3BvcnRbMF0gPSBtX3ZpZXdwb3J0WzFdID0gbV92aWV3cG9ydFsyXSA9IG1fdmlld3Bv
cnRbM10gPSAwOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2F2ZShXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+Z2V0
SW50ZWdlcnYoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JULCBtX3ZpZXdwb3J0
KTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHJlc3RvcmUoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnZpZXdwb3J0
KG1fdmlld3BvcnRbMF0sIG1fdmlld3BvcnRbMV0sIG1fdmlld3BvcnRbMl0sIG1fdmlld3BvcnRb
M10pOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fdmlld3BvcnRbNF07
CisgICAgfTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Cisg
ICAgT3duUHRyPEZyYW1lQnVmZmVyU3RhdGU+IG1fZnJhbWVCdWZmZXJTdGF0ZTsKKyAgICBPd25Q
dHI8Vmlld3BvcnRTdGF0ZT4gbV92aWV3cG9ydFN0YXRlOworfTsKK30KKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IENvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKQEAg
LTUyLDYgKzEzNCw5IEBAIENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJDaHJvbWkK
ICAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCiAgICAgLCBtX2NvbnRlbnRzVGV4dHVyZSgwKQog
ICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQ
VSkKKyAgICAsIG1fZmJvKDApCisjZW5kaWYKIHsKIH0KIApAQCAtNjQsNiArMTQ5LDEyIEBAIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXIKIHsKICAgICBMYXllckNocm9t
aXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgbV9jb250ZW50c1RleHR1cmUuY2xlYXIoKTsK
KyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlmIChtX2ZibykgeworICAg
ICAgICBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7Cisg
ICAgICAgIG1fZmJvID0gMDsKKyAgICB9CisjZW5kaWYKIH0KIAogYm9vbCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVjdCgpIGNvbnN0CkBAIC0xNTgsNiArMjQ5
LDI4IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnQKICAgICBpZiAo
ZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgVVNFKFNLSUEpICYm
IEVOQUJMRShTS0lBX0dQVSkKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVy
UmVuZGVyZXJDb250ZXh0KCk7CisgICAgU2NvcGVkR3JhcGhpY3NTdGF0ZSBncmFwaGljc1N0YXRl
KGNvbnRleHQpOworICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoKSkgeworICAgICAgICAvLyBXZSB3aWxsIGJlIGNoYW5naW5nIHNvbWUgZ3JhcGhpY3Mg
c3RhdGUgd2hpbGUgZHJhd2luZyB0aGUgY29udGVudCBsYXllci4KKyAgICAgICAgLy8gU2F2ZSBh
bmQgcmVzdG9yZSB0aG9zZSBzdGF0ZXMgdG8gcHJldmVudCBtZXNzaW5nIHdpdGggY29tcG9zaXRv
ci4KKyAgICAgICAgZ3JhcGhpY3NTdGF0ZS5zYXZlRnJhbWVCdWZmZXIoKTsKKyAgICAgICAgZ3Jh
cGhpY3NTdGF0ZS5zYXZlVmlld3BvcnQoKTsKKworICAgICAgICAvLyBXaGVuIHVzaW5nIEdQVSB3
ZSBuZWVkIHRvIHJlc2VydmUgdGV4dHVyZSBub3cgYmVjYXVzZSB3ZSB3aWxsIGJlCisgICAgICAg
IC8vIGRpcmVjdGx5IHJlbmRlcmluZyBpbnRvIHRoZSB0ZXh0dXJlLgorICAgICAgICBpZiAoIXJl
c2VydmVDb250ZW50c1RleHR1cmUoZGlydHlSZWN0LnNpemUoKSkpIHsKKyAgICAgICAgICAgIG1f
c2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUy
RCgpOworICAgICAgICBjb250ZXh0LT52aWV3cG9ydCgwLCAwLCBkaXJ0eVJlY3Qud2lkdGgoKSwg
ZGlydHlSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4
dCgpLT5yZXNldENvbnRleHQoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIFBsYXRmb3JtQ2FudmFz
OjpQYWludGVyIHBhaW50ZXIoJm1fY2FudmFzKTsKICAgICBwYWludGVyLmNvbnRleHQoKS0+c2F2
ZSgpOwogICAgIHBhaW50ZXIuY29udGV4dCgpLT50cmFuc2xhdGUoLXBhaW50aW5nT2Zmc2V0Lngo
KSwgLXBhaW50aW5nT2Zmc2V0LnkoKSk7CkBAIC0xNjYsMTUgKzI3OSw0OCBAQCB2b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50CiAKICAgICBtX293bmVyLT5wYWludEdyYXBo
aWNzTGF5ZXJDb250ZW50cygqcGFpbnRlci5jb250ZXh0KCksIGRpcnR5UmVjdCk7CiAgICAgcGFp
bnRlci5jb250ZXh0KCktPnJlc3RvcmUoKTsKKworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJ
QV9HUFUpCisgICAgaWYgKGxheWVyUmVuZGVyZXIoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZCgpKQorICAgICAgICBsYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCktPmZsdXNoKDApOwor
I2VuZGlmCiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnJlc2l6ZVVwbG9hZEJ1ZmZl
cihjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIG1fY2FudmFzLnJlc2l6ZShzaXplKTsKKwor
I2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKGxheWVyUmVuZGVyZXIo
KS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFtX2Zi
bykKKyAgICAgICAgICAgIG1fZmJvID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKwor
ICAgICAgICAvLyBQbGF0Zm9ybUNhbnZhczo6cmVzaXplIGNyZWF0ZXMgYSBuZXcgc2tpYSBjYW52
YXMuCisgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gaW5zdGFsbCBhIG5ldyBza2lhIGRldmljZSBv
biB0aGUgY2FudmFzLgorICAgICAgICAvLyBOb3RlIHRoYXQgaW5zdGFsbGluZyBhbiBhcmJpdHJh
cnkgZGV2aWNlIGlzIGRhbmdlcm91cyBiZWNhdXNlCisgICAgICAgIC8vIGNocm9taXVtIGFzc3Vt
ZXMgdGhhdCBhbGwgZGV2aWNlcyBhcmUgZGVyaXZlZCBmcm9tIHNraWE6OlBsYXRmb3JtRGV2aWNl
LgorICAgICAgICAvLyBTZWUgc2tpYTo6UGxhdGZvcm1DYW52YXM6OmdldFRvcFBsYXRmb3JtRGV2
aWNlKCkgZm9yIGRldGFpbHMuCisgICAgICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBza2lhQ2Fu
dmFzID0gbV9jYW52YXMuc2tpYUNhbnZhcygpOworICAgICAgICBHckNvbnRleHQqIHNraWFDb250
ZXh0ID0gbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpOworICAgICAgICBHclJlbmRlclRh
cmdldCogdGFyZ2V0ID0gc2tpYUNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtUmVuZGVyVGFyZ2V0KG1f
ZmJvLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBTa0RldmljZUZh
Y3RvcnkqIGZhY3RvcnkgPSBuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KHNraWFDb250ZXh0LCB0YXJn
ZXQpOworICAgICAgICBTa0RldmljZSogZGV2aWNlID0gZmFjdG9yeS0+bmV3RGV2aWNlKHNraWFD
YW52YXMsIFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBza2lhQ2FudmFzLT5zZXREZXZpY2UoZGV2
aWNlKS0+dW5yZWYoKTsKKyAgICAgICAgc2tpYUNhbnZhcy0+c2V0RGV2aWNlRmFjdG9yeShmYWN0
b3J5KTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVGV4dHVyZUlmTmVlZGVkKCkKIHsKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BV
KQorICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgLy8gV2hlbiB1c2luZyBHUFUg
d2UgcmVuZGVyIGRpcmVjdGx5IGludG8gdGhlIHRleHR1cmUuCisgICAgaWYgKGxheWVyUmVuZGVy
ZXIoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisjZW5k
aWYKKwogICAgIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwog
ICAgIHVwZGF0ZVRleHR1cmUobG9ja2VyLnBpeGVscygpLCBtX2NhbnZhcy5zaXplKCkpOwogfQpA
QCAtMTg1LDE2ICszMzEsMTMgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4
dHVyZQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Ci0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKLSAg
ICAgICAgbV9jb250ZW50c1RleHR1cmUgPSBMYXllclRleHR1cmU6OmNyZWF0ZShjb250ZXh0LCBs
YXllclJlbmRlcmVyKCktPnRleHR1cmVNYW5hZ2VyKCkpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSB0
byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8gdXBsb2FkIHRoZSBmdWxsIGNvbnRl
bnRzLgotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQoc2l6ZSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpKQorICAgIGlmICghaXNDb250ZW50c1RleHR1cmVWYWxpZChzaXplKSkg
eworICAgICAgICAvLyBJZiB3ZSBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IHRleHR1cmUgd2UgaGF2
ZSB0byB1cGxvYWQgdGhlIGZ1bGwgY29udGVudHMuCiAgICAgICAgIG1fdXBsb2FkVXBkYXRlUmVj
dCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUpOwotCi0gICAgaWYgKCFtX2NvbnRlbnRz
VGV4dHVyZS0+cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsKLSAgICAg
ICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghcmVz
ZXJ2ZUNvbnRlbnRzVGV4dHVyZShzaXplKSkgeworICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgSW50UmVj
dCBzcmNSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgc2l6ZSk7CkBAIC0yNjksNiArNDEy
LDIwIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQogICAgIHVucmVzZXJ2ZUNv
bnRlbnRzVGV4dHVyZSgpOwogfQogCitib29sIENvbnRlbnRMYXllckNocm9taXVtOjppc0NvbnRl
bnRzVGV4dHVyZVZhbGlkKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHNpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKK30KKworYm9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICgh
bV9jb250ZW50c1RleHR1cmUpCisgICAgICAgIG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0
dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllclJlbmRlcmVyKCktPnRleHR1cmVNYW5h
Z2VyKCkpOworCisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHNpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKK30KKwogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1fc2tpcHNEcmF3ICYmIG1f
Y29udGVudHNUZXh0dXJlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCShy
ZXZpc2lvbiA4MTY5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDE2
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHVwZGF0ZVRleHR1cmUoY29uc3QgdWludDhfdCogcGl4
ZWxzLCBjb25zdCBJbnRTaXplJik7CiAKIHByaXZhdGU6CisgICAgYm9vbCBpc0NvbnRlbnRzVGV4
dHVyZVZhbGlkKGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICBib29sIHJlc2VydmVDb250ZW50
c1RleHR1cmUoY29uc3QgSW50U2l6ZSYpOworCiAgICAgUGxhdGZvcm1DYW52YXMgbV9jYW52YXM7
CisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkKKyAgICAvLyBGSVhNRTogRmluZCBh
IGJldHRlciBwbGFjZSB0byBtb3ZlIHRoaXMuIFdoYXQgd2UgcmVhbGx5IG5lZWQgaXMgYQorICAg
IC8vIGdyYXBoaWNzIGNvbnRleHQgdGhhdCBjYW4gZHJhdyBpbnRvIGEgdGV4dHVyZSB3aGV0aGVy
IGFjY2VsZXJhdGVkCisgICAgLy8gb3Igbm90LgorICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87
CisjZW5kaWYKIAogICAgIEludFJlY3QgbV92aXNpYmxlUmVjdEluTGF5ZXJDb29yZHM7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4MTY5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjaWYg
VVNFKFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgorI2lmIEVOQUJMRShTS0lBX0dQVSkKKyNpbmNsdWRlICJFeHRlbnNp
b25zM0QuaCIKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNlbmRpZiAvLyBTS0lBX0dQVQogI2Vs
aWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5o
PgogI2VuZGlmCkBAIC0xMTMsNiArMTE3LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXll
clJlbmRlcmVyQ2hybwogICAgICwgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9v
ZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDApCiAgICAgLCBtX2NvbXBvc2l0ZU9mZnNjcmVlbihmYWxz
ZSkKKyAgICAsIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fY29u
dGV4dChjb250ZXh0KQogICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogewpAQCAtMTM0
LDYgKzEzOSwyMSBAQCBHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJSZW5kZXJlckNocm9taXVtCiAg
ICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUo
U0tJQV9HUFUpCitHckNvbnRleHQqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQo
KQoreworICAgIGlmICghbV9za2lhQ29udGV4dCkgeworICAgICAgICBXZWJDb3JlOjpFeHRlbnNp
b25zM0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAg
ZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
Iik7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9yZWFkX2Zvcm1h
dF9iZ3JhIik7CisKKyAgICAgICAgbV9za2lhQ29udGV4dCA9IEdyQ29udGV4dDo6Q3JlYXRlR0xT
aGFkZXJDb250ZXh0KCk7CisgICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxp
bWl0cyg1MTIsIDUwICogMTAyNCAqIDEwMjQpOworICAgIH0KKyAgICByZXR1cm4gbV9za2lhQ29u
dGV4dC5nZXQoKTsKK30KKyNlbmRpZgorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVi
dWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQs
IGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKQogewogICAgIHVuc2lnbmVkIGxvbmcgZXJyb3Ig
PSBjb250ZXh0LT5nZXRFcnJvcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgJKHJldmlzaW9uIDgxNjk5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKKyNpZiBV
U0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllckltcGw7CkBAIC03MSw2ICs3NSw5
IEBAIHB1YmxpYzoKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKICAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCgpOworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUp
CisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCiAKICAgICB2b2lkIGludmFs
aWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CiAKQEAgLTk2LDYg
KzEwMyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sKTsK
ICAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2NvbXBv
c2l0ZU9mZnNjcmVlbjsgfQogCisgICAgdm9pZCBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQgPSBlbmFibGVkOyB9
CisgICAgYm9vbCBhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9h
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOyB9CisKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRl
eHR1cmUoKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNpZ25lZCk7CiAKQEAgLTE4
NSw2ICsxOTUsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZm
ZXJJZDsKICAgICBib29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCisgICAgYm9vbCBtX2FjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQ7CisKICNpZiBVU0UoU0tJQSkKICAgICBPd25QdHI8c2tpYTo6
UGxhdGZvcm1DYW52YXM+IG1fcm9vdExheWVyQ2FudmFzOwogICAgIE93blB0cjxQbGF0Zm9ybUNv
bnRleHRTa2lhPiBtX3Jvb3RMYXllclNraWFDb250ZXh0OwpAQCAtMjE4LDYgKzIzMCwxMSBAQCBw
cml2YXRlOgogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5PiBtX2hlYWRzVXBEaXNwbGF5Owog
CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisjaWYgVVNFKFNLSUEp
ICYmIEVOQUJMRShTS0lBX0dQVSkKKyAgICAvLyBGSVhNRTogRmluZCBhbiBhcHByb3ByaWF0ZSBh
YnN0cmFjdGlvbiB0byBjb250YWluIHNraWEgY29udGV4dAorICAgIC8vIHdpdGhvdXQgI2lmIHVn
bGluZXNzIGV2ZXJ5d2hlcmUuCisgICAgT3duUHRyPEdyQ29udGV4dD4gbV9za2lhQ29udGV4dDsK
KyNlbmRpZgogCiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRSZW5kZXJTdXJm
YWNlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsYXRmb3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkocmV2aXNpb24gODE2OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNp
emUoY29uc3QgSW50U2l6ZSYpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQogCisjaWYgVVNFKFNLSUEpCisgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIHNraWFD
YW52YXMoKSB7IHJldHVybiBtX3NraWFDYW52YXMuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRl
OgogI2lmIFVTRShTS0lBKQogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9za2lh
Q2FudmFzOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODAyKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNyBAQAorMjAxMS0wMy0yMyAgQWxvayBwcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bmFibGUgc2tpYSBncHUgcmVuZGVyaW5nIGZvciBjb250ZW50IGxheWVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3NDkKKworICAgICAgICAqIHB1
YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3Np
dGUpOgorCiAyMDExLTAzLTIzICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCShyZXZpc2lvbiA4MTY5OSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMCw2ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGJvb2wp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5SW5mb0VuYWJsZWQoYm9vbCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoYm9vbCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29s
KSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdz
SW1wbC5jcHAJKHJldmlzaW9uIDgxNjk5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQzLDYgKzM0MywxMSBAQCB2
b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wCiAgICAgbV9zZXR0aW5ncy0+
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFi
bGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWQy
ZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fc2V0dGluZ3MtPnNldEFjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgJKHJldmlzaW9uIDgxNjk5KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw4ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNhbnZhc0VuYWJsZWQoYm9vbCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFi
bGVkKGJvb2wpOyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJh
dGVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5h
YmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVk
KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5h
YmxlZChib29sKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAJKHJldmlzaW9uIDgxNjk5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDI2LDYgKzI0MjYsNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAgICAgaHVkLT5zZXRTaG93RlBTQ291bnRlcihzZXR0
aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKICAgICBodWQtPnNldFNob3dQbGF0Zm9ybUxheWVy
VHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7CiAKKyAgICBtX2xheWVy
UmVuZGVyZXItPnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQobV9wYWdlLT5zZXR0aW5ncygp
LT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwogICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBk
YXRlQW5kRHJhd0xheWVycygpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86827</attachid>
            <date>2011-03-24 13:59:49 -0700</date>
            <delta_ts>2011-03-24 14:40:03 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>18172</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMjQgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNraWEgdG8gZG8gaGFyZHdh
cmUgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGludG8KKyAgICAgICAgY29udGVudCBsYXllcnMuIEl0
IGNvbWVzIGludG8gZWZmZWN0IGlmIGJvdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgYW5kCisg
ICAgICAgIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBhcmUgZW5hYmxlZCBpbiBwYWdlIHNldHRpbmdz
LiBZb3UgYWxzbyBuZWVkIHRvCisgICAgICAgIGNvbXBpbGUgd2l0aCBTS0lBX0dQVSBmbGFnIGVu
YWJsZWQuCisKKyAgICAgICAgV2Ugd2VyZSBlYXJsaWVyIHVzaW5nIHNraWEgdG8gcmVuZGVyIGlu
dG8gYSBiaXRtYXAgd2hpY2ggd2FzIGxhdGVyCisgICAgICAgIGNvcGllZCBpbnRvIGEgdGV4dHVy
ZSB0byBiZSBjb21wb3NpdGVkLiBUaGlzIHBhdGNoIGFsbG93cyBza2lhIHRvCisgICAgICAgIGRp
cmVjdGx5IHJlbmRlciBpbnRvIHRoZSB0ZXh0dXJlLgorCisgICAgICAgIFRoaXMgd29yayBpcyBz
dGlsbCBpbiBwcm90b3R5cGluZyBwaGFzZSB3aXRoIG1hbnkgRklYTUVzLiBUaGVyZSBhcmUKKyAg
ICAgICAgdHdvIG1haW4gcmVsYXRlZCBjaGFsbGVuZ2VzIC0gdGV4dCByZW5kZXJpbmcgYW5kIGVu
Y2Fwc3VsYXRpbmcgaW50ZXJuYWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gQ2hy
b21pdW0gaXMgZG9pbmcgc29tZXRoaW5nIHNwZWNpYWwgd2l0aCB0ZXh0CisgICAgICAgIHdoaWNo
IHNvbWVob3cgbWVzc2VzIHVwIHNraWEgc3RhY2suIFRoZSBjaHJvbWl1bSBwb3J0IG1ha2VzIGFs
c28gbWFrZXMKKyAgICAgICAgaXQgcmVhbGx5IGhhcmQgdG8gaW5zdGFsbCBhbiBhcmJpdHJhcnkg
ZGV2aWNlIG9uIGEgY2FudmFzLCB3aGljaCByZXN1bHRzCisgICAgICAgIGluIHNpbWlsYXIgaGFj
a3MgYXQgbXVsdGlwbGUgcGxhY2VzLiBJIHRoaW5rIHdlIG5lZWQgdG8gcmVmYWN0b3IgZWl0aGVy
CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzIG9yIHNraWE6OlBsYXRmb3JtQ2FudmFz
IHRvIG1ha2UgaXQgY29tcGxldGVseQorICAgICAgICB0cmFuc3BhcmVudCB0byB0aGUgY2xpZW50
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpDb250
ZW50TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50c1RleHR1cmVWYWxpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXRE
aXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1D
YW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpza2lhQ2FudmFzKToK
KwogMjAxMS0wMy0yNCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSwxMyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUp
CisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKKyNpbmNs
dWRlICJTa0dwdURldmljZUZhY3RvcnkuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9j
YW52YXMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q29u
dGVudExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lcikKQEAgLTUyLDYgKzU5LDkgQEAgQ29udGVudExheWVyQ2hyb21p
dW06OkNvbnRlbnRMYXllckNocm9taQogICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKICAgICAs
IG1fY29udGVudHNUZXh0dXJlKDApCiAgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKKyNpZiBVU0Uo
U0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgICwgbV9mYm8oMCkKKyNlbmRpZgogewogfQog
CkBAIC02NCw2ICs3NCwxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVz
b3VyCiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwogICAgIG1fY29u
dGVudHNUZXh0dXJlLmNsZWFyKCk7CisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkK
KyAgICBpZiAobV9mYm8pIHsKKyAgICAgICAgbGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+ZGVsZXRl
RnJhbWVidWZmZXIobV9mYm8pOworICAgICAgICBtX2ZibyA9IDA7CisgICAgfQorI2VuZGlmCiB9
CiAKIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3Qo
KSBjb25zdApAQCAtMTU4LDYgKzE3NCwyMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50CiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKGxheWVyUmVu
ZGVyZXIoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIC8vIFdoZW4g
dXNpbmcgR1BVIHdlIG5lZWQgdG8gcmVzZXJ2ZSB0ZXh0dXJlIG5vdyBiZWNhdXNlIHdlIHdpbGwg
YmUKKyAgICAgICAgLy8gZGlyZWN0bHkgcmVuZGVyaW5nIGludG8gdGhlIHRleHR1cmUuCisgICAg
ICAgIGlmICghcmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShkaXJ0eVJlY3Quc2l6ZSgpKSkgeworICAg
ICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNv
bnRleHQoKTsKKyAgICAgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoKTsKKyAgICAgICAgY29udGV4dC0+dmlld3BvcnQoMCwgMCwgZGly
dHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGxheWVyUmVuZGVy
ZXIoKS0+c2tpYUNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7CisgICAgfQorI2VuZGlmCisKICAg
ICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBwYWludGVyKCZtX2NhbnZhcyk7CiAgICAgcGFpbnRl
ci5jb250ZXh0KCktPnNhdmUoKTsKICAgICBwYWludGVyLmNvbnRleHQoKS0+dHJhbnNsYXRlKC1w
YWludGluZ09mZnNldC54KCksIC1wYWludGluZ09mZnNldC55KCkpOwpAQCAtMTY2LDE1ICsxOTgs
NTAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudAogCiAgICAgbV9v
d25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKnBhaW50ZXIuY29udGV4dCgpLCBkaXJ0
eVJlY3QpOwogICAgIHBhaW50ZXIuY29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyNpZiBVU0UoU0tJ
QSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4
dCgpLT5mbHVzaCgwKTsKKyNlbmRpZgogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpy
ZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX2NhbnZhcy5y
ZXNpemUoc2l6ZSk7CisKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlm
IChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Cisg
ICAgICAgIGlmICghbV9mYm8pCisgICAgICAgICAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisKKyAgICAgICAgLy8gUGxhdGZvcm1DYW52YXM6OnJlc2l6ZSBjcmVhdGVz
IGEgbmV3IHNraWEgY2FudmFzLgorICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGluc3RhbGwgYSBu
ZXcgc2tpYSBkZXZpY2Ugb24gdGhlIGNhbnZhcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGluc3Rh
bGxpbmcgYW4gYXJiaXRyYXJ5IGRldmljZSBpcyBkYW5nZXJvdXMgYmVjYXVzZQorICAgICAgICAv
LyBjaHJvbWl1bSBhc3N1bWVzIHRoYXQgYWxsIGRldmljZXMgYXJlIGRlcml2ZWQgZnJvbSBza2lh
OjpQbGF0Zm9ybURldmljZS4KKyAgICAgICAgLy8gU2VlIHNraWE6OlBsYXRmb3JtQ2FudmFzOjpn
ZXRUb3BQbGF0Zm9ybURldmljZSgpIGZvciBkZXRhaWxzLgorICAgICAgICBza2lhOjpQbGF0Zm9y
bUNhbnZhcyogc2tpYUNhbnZhcyA9IG1fY2FudmFzLnNraWFDYW52YXMoKTsKKyAgICAgICAgR3JD
b250ZXh0KiBza2lhQ29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+c2tpYUNvbnRleHQoKTsKKyAg
ICAgICAgR3JSZW5kZXJUYXJnZXQqIHRhcmdldCA9IHNraWFDb250ZXh0LT5jcmVhdGVQbGF0Zm9y
bVJlbmRlclRhcmdldChtX2ZibywgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgU2tEZXZpY2VGYWN0b3J5KiBmYWN0b3J5ID0gbmV3IFNrR3B1RGV2aWNlRmFjdG9yeShz
a2lhQ29udGV4dCwgdGFyZ2V0KTsKKyAgICAgICAgU2tEZXZpY2UqIGRldmljZSA9IGZhY3Rvcnkt
Pm5ld0RldmljZShza2lhQ2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgc2tpYUNhbnZh
cy0+c2V0RGV2aWNlKGRldmljZSktPnVucmVmKCk7CisgICAgICAgIHNraWFDYW52YXMtPnNldERl
dmljZUZhY3RvcnkoZmFjdG9yeSk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpCiB7CisjaWYgVVNFKFNLSUEpICYm
IEVOQUJMRShTS0lBX0dQVSkKKyAgICAvLyBObyBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIC8v
IFdoZW4gdXNpbmcgR1BVIHdlIHJlbmRlciBkaXJlY3RseSBpbnRvIHRoZSB0ZXh0dXJlLgorICAg
IGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkgeworICAg
ICAgICByZXNldERpcnR5UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK
ICAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKICAgICB1
cGRhdGVUZXh0dXJlKGxvY2tlci5waXhlbHMoKSwgbV9jYW52YXMuc2l6ZSgpKTsKIH0KQEAgLTE4
NSwxNiArMjUyLDEzIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyQ29udGV4dCgpOwotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAg
IG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKLQotICAgIC8vIElmIHdlIGhhdmUgdG8gYWxs
b2NhdGUgYSBuZXcgdGV4dHVyZSB3ZSBoYXZlIHRvIHVwbG9hZCB0aGUgZnVsbCBjb250ZW50cy4K
LSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHNpemUsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkKKyAgICBpZiAoIWlzQ29udGVudHNUZXh0dXJlVmFsaWQoc2l6ZSkpIHsKKyAg
ICAgICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8g
dXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgogICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKTsKLQotICAgIGlmICghbV9jb250ZW50c1RleHR1
cmUtPnJlc2VydmUoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAgIG1f
c2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXJlc2VydmVD
b250ZW50c1RleHR1cmUoc2l6ZSkpIHsKKyAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEludFJlY3Qgc3Jj
UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUpOwpAQCAtMjIzLDExICsyODcsNyBA
QCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxv
YWRVcGRhdGVSZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBk
YXRlUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkUGl4ZWxz
KSk7Ci0KLSAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9kaXJ0eVJl
Y3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7Ci0gICAgLy8gTGFyZ2UgbGF5ZXJzIGFsd2F5cyBzdGF5
IGRpcnR5LCBiZWNhdXNlIHRoZXkgbmVlZCB0byB1cGRhdGUgd2hlbiB0aGUgY29udGVudCByZWN0
IGNoYW5nZXMuCi0gICAgbV9jb250ZW50c0RpcnR5ID0gcmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVj
dCgpOworICAgIHJlc2V0RGlydHlSZWN0KCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXcoKQpAQCAtMjY5LDYgKzMyOSwyMCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjpkcmF3KCkKICAgICB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKIH0KIAorYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50c1RleHR1cmVWYWxpZChjb25zdCBJbnRTaXplJiBz
aXplKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRz
VGV4dHVyZS0+aXNWYWxpZChzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKK2Jv
b2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlc2VydmVDb250ZW50c1RleHR1cmUoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQorICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKKworICAgIHJldHVybiBtX2NvbnRlbnRz
VGV4dHVyZS0+cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiB7CiAg
ICAgaWYgKCFtX3NraXBzRHJhdyAmJiBtX2NvbnRlbnRzVGV4dHVyZSkKQEAgLTI4Myw2ICszNTcs
MTQgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVAogICAgICAgICBt
X2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cmVzZXREaXJ0eVJlY3QoKQoreworICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IElu
dFJlY3QoKTsKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICAvLyBM
YXJnZSBsYXllcnMgYWx3YXlzIHN0YXkgZGlydHksIGJlY2F1c2UgdGhleSBuZWVkIHRvIHVwZGF0
ZSB3aGVuIHRoZSBjb250ZW50IHJlY3QgY2hhbmdlcy4KKyAgICBtX2NvbnRlbnRzRGlydHkgPSBy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCk7Cit9CisKIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQogewogICAgIGZvciAoaW50IGkgPSAwOyBpICE9
IGluZGVudDsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZp
c2lvbiA4MTg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDE3IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHVwZGF0ZVRleHR1cmUoY29uc3QgdWludDhfdCogcGl4ZWxz
LCBjb25zdCBJbnRTaXplJik7CiAKIHByaXZhdGU6CisgICAgYm9vbCBpc0NvbnRlbnRzVGV4dHVy
ZVZhbGlkKGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICBib29sIHJlc2VydmVDb250ZW50c1Rl
eHR1cmUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzZXREaXJ0eVJlY3QoKTsKKwogICAg
IFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9H
UFUpCisgICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gbW92ZSB0aGlzLiBXaGF0
IHdlIHJlYWxseSBuZWVkIGlzIGEKKyAgICAvLyBncmFwaGljcyBjb250ZXh0IHRoYXQgY2FuIGRy
YXcgaW50byBhIHRleHR1cmUgd2hldGhlciBhY2NlbGVyYXRlZAorICAgIC8vIG9yIG5vdC4KKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOworI2VuZGlmCiAKICAgICBJbnRSZWN0IG1fdmlzaWJs
ZVJlY3RJbkxheWVyQ29vcmRzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAkocmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw2ICs1MCwxMCBAQAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpZiBFTkFCTEUoU0tJ
QV9HUFUpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JDb250ZXh0Lmgi
CisjZW5kaWYgLy8gU0tJQV9HUFUKICNlbGlmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNlbmRpZgpAQCAtMTE0LDYgKzExOCw3IEBAIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm8KICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwg
bV9jb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UoMCkKIHsKQEAgLTEzNSw2ICsxNDAsMjEgQEAgR3JhcGhpY3NDb250ZXh0M0Qq
IExheWVyUmVuZGVyZXJDaHJvbWl1bQogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAK
KyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorR3JDb250ZXh0KiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnNraWFDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fc2tpYUNvbnRleHQpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCk7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VY
VF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworCisgICAgICAgIG1fc2tpYUNvbnRl
eHQgPSBHckNvbnRleHQ6OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOworICAgICAgICBtX3NraWFD
b250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMoNTEyLCA1MCAqIDEwMjQgKiAxMDI0KTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fc2tpYUNvbnRleHQuZ2V0KCk7Cit9CisjZW5kaWYKKwogdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkKIHsK
ICAgICB1bnNpZ25lZCBsb25nIGVycm9yID0gY29udGV4dC0+Z2V0RXJyb3IoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4MTg5MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KICNlbmRpZgogCisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkKK2Ns
YXNzIEdyQ29udGV4dDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEND
TGF5ZXJJbXBsOwpAQCAtNzEsNiArNzUsOSBAQCBwdWJsaWM6CiAgICAgfkxheWVyUmVuZGVyZXJD
aHJvbWl1bSgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyNpZiBVU0Uo
U0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKTsK
KyNlbmRpZgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0
JiBkaXJ0eVJlY3QpOwogCkBAIC05Niw2ICsxMDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRD
b21wb3NpdGVPZmZzY3JlZW4oYm9vbCk7CiAgICAgYm9vbCBpc0NvbXBvc2l0aW5nT2Zmc2NyZWVu
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW47IH0KIAorICAgIHZvaWQgc2V0
QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQorCiAg
ICAgdW5zaWduZWQgY3JlYXRlTGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBkZWxldGVMYXllclRl
eHR1cmUodW5zaWduZWQpOwogCkBAIC0xODUsNiArMTk1LDggQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZU9mZnNj
cmVlbjsKIAorICAgIGJvb2wgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOworCiAjaWYgVVNF
KFNLSUEpCiAgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZh
czsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9yb290TGF5ZXJTa2lhQ29udGV4
dDsKQEAgLTIxOCw2ICsyMzAsMTEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q0NIZWFkc1VwRGlz
cGxheT4gbV9oZWFkc1VwRGlzcGxheTsKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bV9jb250ZXh0OworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgLy8gRklY
TUU6IEZpbmQgYW4gYXBwcm9wcmlhdGUgYWJzdHJhY3Rpb24gdG8gY29udGFpbiBza2lhIGNvbnRl
eHQKKyAgICAvLyB3aXRob3V0ICNpZiB1Z2xpbmVzcyBldmVyeXdoZXJlLgorICAgIE93blB0cjxH
ckNvbnRleHQ+IG1fc2tpYUNvbnRleHQ7CisjZW5kaWYKIAogICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFz
LmgJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgcmVzaXplKGNvbnN0IEludFNpemUmKTsKICAgICBJbnRTaXpl
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAorI2lmIFVTRShTS0lBKQorICAgIHNr
aWE6OlBsYXRmb3JtQ2FudmFzKiBza2lhQ2FudmFzKCkgeyByZXR1cm4gbV9za2lhQ2FudmFzLmdl
dCgpOyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICNpZiBVU0UoU0tJQSkKICAgICBPd25QdHI8c2tp
YTo6UGxhdGZvcm1DYW52YXM+IG1fc2tpYUNhbnZhczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiA4MTg5MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMjQgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBz
cmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBs
OjpzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGlu
Z3NJbXBsLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKToKKwogMjAxMS0wMy0yNCAgTmF0IER1Y2EgIDxu
ZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxs
LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCShy
ZXZpc2lvbiA4MTg5MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRp
bmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxlZChib29s
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmlt
YXRpb25FbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQy
ZENhbnZhc0VuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5SW5m
b0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIeXBlcmxpbmtBdWRpdGlu
Z0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQzLDYgKzM0MywxMSBAQCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0QWNjZWxlcmF0ZWRD
b21wCiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlv
bkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVy
YXRlZERyYXdpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRB
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGVuYWJsZWQpOworfQorCiB2b2lkIFdlYlNldHRpbmdz
SW1wbDo6c2V0QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAg
IG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGVuYWJsZWQpOwpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgJKHJldmlz
aW9uIDgxODkxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQoYm9vbCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JQbHVnaW5zRW5hYmxl
ZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckNh
bnZhc0VuYWJsZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wpOyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SHlw
ZXJsaW5rQXVkaXRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBc3luY2hy
b25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQx
LDYgKzI0NDEsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCiAgICAgaHVkLT5z
ZXRTaG93RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKICAgICBodWQt
PnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRy
ZWUoKSk7CiAKKyAgICBtX2xheWVyUmVuZGVyZXItPnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQobV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwogICAg
IG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlQW5kRHJhd0xheWVycygpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86840</attachid>
            <date>2011-03-24 14:40:03 -0700</date>
            <delta_ts>2011-03-24 15:13:12 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>18483</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMjQgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNraWEgdG8gZG8gaGFyZHdh
cmUgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGludG8KKyAgICAgICAgY29udGVudCBsYXllcnMuIEl0
IGNvbWVzIGludG8gZWZmZWN0IGlmIGJvdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgYW5kCisg
ICAgICAgIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBhcmUgZW5hYmxlZCBpbiBwYWdlIHNldHRpbmdz
LiBZb3UgYWxzbyBuZWVkIHRvCisgICAgICAgIGNvbXBpbGUgd2l0aCBTS0lBX0dQVSBmbGFnIGVu
YWJsZWQuCisKKyAgICAgICAgV2Ugd2VyZSBlYXJsaWVyIHVzaW5nIHNraWEgdG8gcmVuZGVyIGlu
dG8gYSBiaXRtYXAgd2hpY2ggd2FzIGxhdGVyCisgICAgICAgIGNvcGllZCBpbnRvIGEgdGV4dHVy
ZSB0byBiZSBjb21wb3NpdGVkLiBUaGlzIHBhdGNoIGFsbG93cyBza2lhIHRvCisgICAgICAgIGRp
cmVjdGx5IHJlbmRlciBpbnRvIHRoZSB0ZXh0dXJlLgorCisgICAgICAgIFRoaXMgd29yayBpcyBz
dGlsbCBpbiBwcm90b3R5cGluZyBwaGFzZSB3aXRoIG1hbnkgRklYTUVzLiBUaGVyZSBhcmUKKyAg
ICAgICAgdHdvIG1haW4gcmVsYXRlZCBjaGFsbGVuZ2VzIC0gdGV4dCByZW5kZXJpbmcgYW5kIGVu
Y2Fwc3VsYXRpbmcgaW50ZXJuYWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gQ2hy
b21pdW0gaXMgZG9pbmcgc29tZXRoaW5nIHNwZWNpYWwgd2l0aCB0ZXh0CisgICAgICAgIHdoaWNo
IHNvbWVob3cgbWVzc2VzIHVwIHNraWEgc3RhY2suIFRoZSBjaHJvbWl1bSBwb3J0IG1ha2VzIGFs
c28gbWFrZXMKKyAgICAgICAgaXQgcmVhbGx5IGhhcmQgdG8gaW5zdGFsbCBhbiBhcmJpdHJhcnkg
ZGV2aWNlIG9uIGEgY2FudmFzLCB3aGljaCByZXN1bHRzCisgICAgICAgIGluIHNpbWlsYXIgaGFj
a3MgYXQgbXVsdGlwbGUgcGxhY2VzLiBJIHRoaW5rIHdlIG5lZWQgdG8gcmVmYWN0b3IgZWl0aGVy
CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzIG9yIHNraWE6OlBsYXRmb3JtQ2FudmFz
IHRvIG1ha2UgaXQgY29tcGxldGVseQorICAgICAgICB0cmFuc3BhcmVudCB0byB0aGUgY2xpZW50
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpDb250
ZW50TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50c1RleHR1cmVWYWxpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXRE
aXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1D
YW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpza2lhQ2FudmFzKToK
KwogMjAxMS0wMy0yNCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSwxMyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUp
CisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKKyNpbmNs
dWRlICJTa0dwdURldmljZUZhY3RvcnkuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9j
YW52YXMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q29u
dGVudExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lcikKQEAgLTUyLDYgKzU5LDkgQEAgQ29udGVudExheWVyQ2hyb21p
dW06OkNvbnRlbnRMYXllckNocm9taQogICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKICAgICAs
IG1fY29udGVudHNUZXh0dXJlKDApCiAgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKKyNpZiBVU0Uo
U0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgICwgbV9mYm8oMCkKKyNlbmRpZgogewogfQog
CkBAIC02NCw2ICs3NCwxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVz
b3VyCiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwogICAgIG1fY29u
dGVudHNUZXh0dXJlLmNsZWFyKCk7CisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkK
KyAgICBpZiAobV9mYm8pIHsKKyAgICAgICAgbGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+ZGVsZXRl
RnJhbWVidWZmZXIobV9mYm8pOworICAgICAgICBtX2ZibyA9IDA7CisgICAgfQorI2VuZGlmCiB9
CiAKIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3Qo
KSBjb25zdApAQCAtMTU4LDYgKzE3NCwyMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50CiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKGxheWVyUmVu
ZGVyZXIoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIC8vIFdoZW4g
dXNpbmcgR1BVIHdlIG5lZWQgdG8gcmVzZXJ2ZSB0ZXh0dXJlIG5vdyBiZWNhdXNlIHdlIHdpbGwg
YmUKKyAgICAgICAgLy8gZGlyZWN0bHkgcmVuZGVyaW5nIGludG8gdGhlIHRleHR1cmUuCisgICAg
ICAgIGlmICghcmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShkaXJ0eVJlY3Quc2l6ZSgpKSkgeworICAg
ICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNv
bnRleHQoKTsKKyAgICAgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoKTsKKyAgICAgICAgY29udGV4dC0+dmlld3BvcnQoMCwgMCwgZGly
dHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGxheWVyUmVuZGVy
ZXIoKS0+c2tpYUNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7CisgICAgfQorI2VuZGlmCisKICAg
ICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBwYWludGVyKCZtX2NhbnZhcyk7CiAgICAgcGFpbnRl
ci5jb250ZXh0KCktPnNhdmUoKTsKICAgICBwYWludGVyLmNvbnRleHQoKS0+dHJhbnNsYXRlKC1w
YWludGluZ09mZnNldC54KCksIC1wYWludGluZ09mZnNldC55KCkpOwpAQCAtMTY2LDE1ICsxOTgs
NTAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudAogCiAgICAgbV9v
d25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKnBhaW50ZXIuY29udGV4dCgpLCBkaXJ0
eVJlY3QpOwogICAgIHBhaW50ZXIuY29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyNpZiBVU0UoU0tJ
QSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4
dCgpLT5mbHVzaCgwKTsKKyNlbmRpZgogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpy
ZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX2NhbnZhcy5y
ZXNpemUoc2l6ZSk7CisKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlm
IChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Cisg
ICAgICAgIGlmICghbV9mYm8pCisgICAgICAgICAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisKKyAgICAgICAgLy8gUGxhdGZvcm1DYW52YXM6OnJlc2l6ZSBjcmVhdGVz
IGEgbmV3IHNraWEgY2FudmFzLgorICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGluc3RhbGwgYSBu
ZXcgc2tpYSBkZXZpY2Ugb24gdGhlIGNhbnZhcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGluc3Rh
bGxpbmcgYW4gYXJiaXRyYXJ5IGRldmljZSBpcyBkYW5nZXJvdXMgYmVjYXVzZQorICAgICAgICAv
LyBjaHJvbWl1bSBhc3N1bWVzIHRoYXQgYWxsIGRldmljZXMgYXJlIGRlcml2ZWQgZnJvbSBza2lh
OjpQbGF0Zm9ybURldmljZS4KKyAgICAgICAgLy8gU2VlIHNraWE6OlBsYXRmb3JtQ2FudmFzOjpn
ZXRUb3BQbGF0Zm9ybURldmljZSgpIGZvciBkZXRhaWxzLgorICAgICAgICBza2lhOjpQbGF0Zm9y
bUNhbnZhcyogc2tpYUNhbnZhcyA9IG1fY2FudmFzLnNraWFDYW52YXMoKTsKKyAgICAgICAgR3JD
b250ZXh0KiBza2lhQ29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+c2tpYUNvbnRleHQoKTsKKyAg
ICAgICAgR3JSZW5kZXJUYXJnZXQqIHRhcmdldCA9IHNraWFDb250ZXh0LT5jcmVhdGVQbGF0Zm9y
bVJlbmRlclRhcmdldChtX2ZibywgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgU2tEZXZpY2VGYWN0b3J5KiBmYWN0b3J5ID0gbmV3IFNrR3B1RGV2aWNlRmFjdG9yeShz
a2lhQ29udGV4dCwgdGFyZ2V0KTsKKyAgICAgICAgU2tEZXZpY2UqIGRldmljZSA9IGZhY3Rvcnkt
Pm5ld0RldmljZShza2lhQ2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgc2tpYUNhbnZh
cy0+c2V0RGV2aWNlKGRldmljZSktPnVucmVmKCk7CisgICAgICAgIHNraWFDYW52YXMtPnNldERl
dmljZUZhY3RvcnkoZmFjdG9yeSk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpCiB7CisjaWYgVVNFKFNLSUEpICYm
IEVOQUJMRShTS0lBX0dQVSkKKyAgICAvLyBObyBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIC8v
IFdoZW4gdXNpbmcgR1BVIHdlIHJlbmRlciBkaXJlY3RseSBpbnRvIHRoZSB0ZXh0dXJlLgorICAg
IGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkgeworICAg
ICAgICByZXNldERpcnR5UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK
ICAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKICAgICB1
cGRhdGVUZXh0dXJlKGxvY2tlci5waXhlbHMoKSwgbV9jYW52YXMuc2l6ZSgpKTsKIH0KQEAgLTE4
NSwxNiArMjUyLDEzIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyQ29udGV4dCgpOwotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAg
IG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKLQotICAgIC8vIElmIHdlIGhhdmUgdG8gYWxs
b2NhdGUgYSBuZXcgdGV4dHVyZSB3ZSBoYXZlIHRvIHVwbG9hZCB0aGUgZnVsbCBjb250ZW50cy4K
LSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHNpemUsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkKKyAgICBpZiAoIWlzQ29udGVudHNUZXh0dXJlVmFsaWQoc2l6ZSkpIHsKKyAg
ICAgICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8g
dXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgogICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKTsKLQotICAgIGlmICghbV9jb250ZW50c1RleHR1
cmUtPnJlc2VydmUoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAgIG1f
c2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXJlc2VydmVD
b250ZW50c1RleHR1cmUoc2l6ZSkpIHsKKyAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEludFJlY3Qgc3Jj
UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUpOwpAQCAtMjIzLDExICsyODcsNyBA
QCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxv
YWRVcGRhdGVSZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBk
YXRlUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkUGl4ZWxz
KSk7Ci0KLSAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9kaXJ0eVJl
Y3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7Ci0gICAgLy8gTGFyZ2UgbGF5ZXJzIGFsd2F5cyBzdGF5
IGRpcnR5LCBiZWNhdXNlIHRoZXkgbmVlZCB0byB1cGRhdGUgd2hlbiB0aGUgY29udGVudCByZWN0
IGNoYW5nZXMuCi0gICAgbV9jb250ZW50c0RpcnR5ID0gcmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVj
dCgpOworICAgIHJlc2V0RGlydHlSZWN0KCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXcoKQpAQCAtMjY5LDYgKzMyOSwyMCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjpkcmF3KCkKICAgICB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKIH0KIAorYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50c1RleHR1cmVWYWxpZChjb25zdCBJbnRTaXplJiBz
aXplKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRz
VGV4dHVyZS0+aXNWYWxpZChzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKK2Jv
b2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlc2VydmVDb250ZW50c1RleHR1cmUoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQorICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKKworICAgIHJldHVybiBtX2NvbnRlbnRz
VGV4dHVyZS0+cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiB7CiAg
ICAgaWYgKCFtX3NraXBzRHJhdyAmJiBtX2NvbnRlbnRzVGV4dHVyZSkKQEAgLTI4Myw2ICszNTcs
MTQgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVAogICAgICAgICBt
X2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cmVzZXREaXJ0eVJlY3QoKQoreworICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IElu
dFJlY3QoKTsKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICAvLyBM
YXJnZSBsYXllcnMgYWx3YXlzIHN0YXkgZGlydHksIGJlY2F1c2UgdGhleSBuZWVkIHRvIHVwZGF0
ZSB3aGVuIHRoZSBjb250ZW50IHJlY3QgY2hhbmdlcy4KKyAgICBtX2NvbnRlbnRzRGlydHkgPSBy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCk7Cit9CisKIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQogewogICAgIGZvciAoaW50IGkgPSAwOyBpICE9
IGluZGVudDsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZp
c2lvbiA4MTg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDE3IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHVwZGF0ZVRleHR1cmUoY29uc3QgdWludDhfdCogcGl4ZWxz
LCBjb25zdCBJbnRTaXplJik7CiAKIHByaXZhdGU6CisgICAgYm9vbCBpc0NvbnRlbnRzVGV4dHVy
ZVZhbGlkKGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICBib29sIHJlc2VydmVDb250ZW50c1Rl
eHR1cmUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzZXREaXJ0eVJlY3QoKTsKKwogICAg
IFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9H
UFUpCisgICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gbW92ZSB0aGlzLiBXaGF0
IHdlIHJlYWxseSBuZWVkIGlzIGEKKyAgICAvLyBncmFwaGljcyBjb250ZXh0IHRoYXQgY2FuIGRy
YXcgaW50byBhIHRleHR1cmUgd2hldGhlciBhY2NlbGVyYXRlZAorICAgIC8vIG9yIG5vdC4KKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOworI2VuZGlmCiAKICAgICBJbnRSZWN0IG1fdmlzaWJs
ZVJlY3RJbkxheWVyQ29vcmRzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAkocmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw2ICs1MCwxMCBAQAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpZiBFTkFCTEUoU0tJ
QV9HUFUpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JDb250ZXh0Lmgi
CisjZW5kaWYgLy8gU0tJQV9HUFUKICNlbGlmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNlbmRpZgpAQCAtMTE0LDYgKzExOCw3IEBAIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm8KICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwg
bV9jb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UoMCkKIHsKQEAgLTEzNSw2ICsxNDAsMjUgQEAgR3JhcGhpY3NDb250ZXh0M0Qq
IExheWVyUmVuZGVyZXJDaHJvbWl1bQogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAK
KyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorR3JDb250ZXh0KiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnNraWFDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fc2tpYUNvbnRleHQpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCk7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VY
VF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworCisgICAgICAgIG1fc2tpYUNvbnRl
eHQgPSBHckNvbnRleHQ6OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOworICAgICAgICAvLyBMaW1p
dCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBj
YWNoZS4NCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1
MTI7DQorICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJl
cyBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLg0KKyAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CisgICAgICAgIG1f
c2tpYUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwg
bWF4VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgIH0KKyAgICByZXR1cm4gbV9za2lhQ29udGV4dC5n
ZXQoKTsKK30KKyNlbmRpZgorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENh
bGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0
IGNoYXIqIGZpbGUsIGludCBsaW5lKQogewogICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBjb250
ZXh0LT5nZXRFcnJvcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJ
KHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2
LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKKyNpZiBVU0UoU0tJ
QSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllckltcGw7CkBAIC03MSw2ICs3NSw5IEBAIHB1
YmxpYzoKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKICAgICBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCgpOworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAg
R3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCiAKICAgICB2b2lkIGludmFsaWRhdGVS
b290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CiAKQEAgLTk2LDYgKzEwMyw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sKTsKICAgICBi
b29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9m
ZnNjcmVlbjsgfQogCisgICAgdm9pZCBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQgPSBlbmFibGVkOyB9CisgICAg
Ym9vbCBhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVy
YXRlZERyYXdpbmdFbmFibGVkOyB9CisKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1cmUo
KTsKICAgICB2b2lkIGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNpZ25lZCk7CiAKQEAgLTE4NSw2ICsx
OTUsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsK
ICAgICBib29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCisgICAgYm9vbCBtX2FjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQ7CisKICNpZiBVU0UoU0tJQSkKICAgICBPd25QdHI8c2tpYTo6UGxhdGZv
cm1DYW52YXM+IG1fcm9vdExheWVyQ2FudmFzOwogICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRT
a2lhPiBtX3Jvb3RMYXllclNraWFDb250ZXh0OwpAQCAtMjE4LDYgKzIzMCwxMSBAQCBwcml2YXRl
OgogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5PiBtX2hlYWRzVXBEaXNwbGF5OwogCiAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisjaWYgVVNFKFNLSUEpICYmIEVO
QUJMRShTS0lBX0dQVSkKKyAgICAvLyBGSVhNRTogRmluZCBhbiBhcHByb3ByaWF0ZSBhYnN0cmFj
dGlvbiB0byBjb250YWluIHNraWEgY29udGV4dAorICAgIC8vIHdpdGhvdXQgI2lmIHVnbGluZXNz
IGV2ZXJ5d2hlcmUuCisgICAgT3duUHRyPEdyQ29udGV4dD4gbV9za2lhQ29udGV4dDsKKyNlbmRp
ZgogCiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRm
b3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkocmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw2ICs5NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNpemUoY29u
c3QgSW50U2l6ZSYpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogCisjaWYgVVNFKFNLSUEpCisgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIHNraWFDYW52YXMo
KSB7IHJldHVybiBtX3NraWFDYW52YXMuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogI2lm
IFVTRShTS0lBKQogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9za2lhQ2FudmFz
OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODkzKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMS0wMy0yNCAgQWxvayBwcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUg
c2tpYSBncHUgcmVuZGVyaW5nIGZvciBjb250ZW50IGxheWVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3NDkKKworICAgICAgICAqIHB1YmxpYy9X
ZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQp
OgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgor
CiAyMDExLTAzLTI0ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJTZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlNldHRpbmdzLmgJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYg
KzExMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvclBsdWdpbnNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpID0gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAko
cmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5n
c0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsNiArMzQzLDExIEBAIHZvaWQgV2ViU2V0
dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXAKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBX
ZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9vbCBlbmFibGVk
KQoreworICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZW5hYmxl
ZCk7Cit9CisKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQyZENh
bnZhc0VuYWJsZWQoZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuaAkocmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEw
MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvclZpZGVvRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0
aW9uRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZh
c0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJvb2wp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoYm9vbCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wp
OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2
aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NDEsNiArMjQ0MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6
OmRvQ29tcG9zaXRlKCkKICAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNo
b3dGUFNDb3VudGVyKCkpOwogICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRp
bmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKIAorICAgIG1fbGF5ZXJSZW5kZXJlci0+
c2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoKSk7CiAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVBbmREcmF3
TGF5ZXJzKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86845</attachid>
            <date>2011-03-24 15:13:12 -0700</date>
            <delta_ts>2011-05-03 15:07:57 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>18480</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMjQgIEFsb2sgcHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHNraWEgdG8gZG8gaGFyZHdh
cmUgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGludG8KKyAgICAgICAgY29udGVudCBsYXllcnMuIEl0
IGNvbWVzIGludG8gZWZmZWN0IGlmIGJvdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgYW5kCisg
ICAgICAgIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBhcmUgZW5hYmxlZCBpbiBwYWdlIHNldHRpbmdz
LiBZb3UgYWxzbyBuZWVkIHRvCisgICAgICAgIGNvbXBpbGUgd2l0aCBTS0lBX0dQVSBmbGFnIGVu
YWJsZWQuCisKKyAgICAgICAgV2Ugd2VyZSBlYXJsaWVyIHVzaW5nIHNraWEgdG8gcmVuZGVyIGlu
dG8gYSBiaXRtYXAgd2hpY2ggd2FzIGxhdGVyCisgICAgICAgIGNvcGllZCBpbnRvIGEgdGV4dHVy
ZSB0byBiZSBjb21wb3NpdGVkLiBUaGlzIHBhdGNoIGFsbG93cyBza2lhIHRvCisgICAgICAgIGRp
cmVjdGx5IHJlbmRlciBpbnRvIHRoZSB0ZXh0dXJlLgorCisgICAgICAgIFRoaXMgd29yayBpcyBz
dGlsbCBpbiBwcm90b3R5cGluZyBwaGFzZSB3aXRoIG1hbnkgRklYTUVzLiBUaGVyZSBhcmUKKyAg
ICAgICAgdHdvIG1haW4gcmVsYXRlZCBjaGFsbGVuZ2VzIC0gdGV4dCByZW5kZXJpbmcgYW5kIGVu
Y2Fwc3VsYXRpbmcgaW50ZXJuYWwKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gQ2hy
b21pdW0gaXMgZG9pbmcgc29tZXRoaW5nIHNwZWNpYWwgd2l0aCB0ZXh0CisgICAgICAgIHdoaWNo
IHNvbWVob3cgbWVzc2VzIHVwIHNraWEgc3RhY2suIFRoZSBjaHJvbWl1bSBwb3J0IG1ha2VzIGFs
c28gbWFrZXMKKyAgICAgICAgaXQgcmVhbGx5IGhhcmQgdG8gaW5zdGFsbCBhbiBhcmJpdHJhcnkg
ZGV2aWNlIG9uIGEgY2FudmFzLCB3aGljaCByZXN1bHRzCisgICAgICAgIGluIHNpbWlsYXIgaGFj
a3MgYXQgbXVsdGlwbGUgcGxhY2VzLiBJIHRoaW5rIHdlIG5lZWQgdG8gcmVmYWN0b3IgZWl0aGVy
CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzIG9yIHNraWE6OlBsYXRmb3JtQ2FudmFz
IHRvIG1ha2UgaXQgY29tcGxldGVseQorICAgICAgICB0cmFuc3BhcmVudCB0byB0aGUgY2xpZW50
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpDb250
ZW50TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpyZXNpemVVcGxvYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50c1RleHR1cmVWYWxpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6cmVzZXRE
aXJ0eVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6YWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1D
YW52YXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpza2lhQ2FudmFzKToK
KwogMjAxMS0wMy0yNCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSwxMyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUp
CisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2UuaCIKKyNpbmNs
dWRlICJTa0dwdURldmljZUZhY3RvcnkuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9j
YW52YXMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q29u
dGVudExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lcikKQEAgLTUyLDYgKzU5LDkgQEAgQ29udGVudExheWVyQ2hyb21p
dW06OkNvbnRlbnRMYXllckNocm9taQogICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKICAgICAs
IG1fY29udGVudHNUZXh0dXJlKDApCiAgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKKyNpZiBVU0Uo
U0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgICwgbV9mYm8oMCkKKyNlbmRpZgogewogfQog
CkBAIC02NCw2ICs3NCwxMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVz
b3VyCiB7CiAgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwogICAgIG1fY29u
dGVudHNUZXh0dXJlLmNsZWFyKCk7CisjaWYgVVNFKFNLSUEpICYmIEVOQUJMRShTS0lBX0dQVSkK
KyAgICBpZiAobV9mYm8pIHsKKyAgICAgICAgbGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+ZGVsZXRl
RnJhbWVidWZmZXIobV9mYm8pOworICAgICAgICBtX2ZibyA9IDA7CisgICAgfQorI2VuZGlmCiB9
CiAKIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlcXVpcmVzQ2xpcHBlZFVwZGF0ZVJlY3Qo
KSBjb25zdApAQCAtMTU4LDYgKzE3NCwyMiBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50CiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgaWYgKGxheWVyUmVu
ZGVyZXIoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKSB7CisgICAgICAgIC8vIFdoZW4g
dXNpbmcgR1BVIHdlIG5lZWQgdG8gcmVzZXJ2ZSB0ZXh0dXJlIG5vdyBiZWNhdXNlIHdlIHdpbGwg
YmUKKyAgICAgICAgLy8gZGlyZWN0bHkgcmVuZGVyaW5nIGludG8gdGhlIHRleHR1cmUuCisgICAg
ICAgIGlmICghcmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZShkaXJ0eVJlY3Quc2l6ZSgpKSkgeworICAg
ICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNv
bnRleHQoKTsKKyAgICAgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoKTsKKyAgICAgICAgY29udGV4dC0+dmlld3BvcnQoMCwgMCwgZGly
dHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGxheWVyUmVuZGVy
ZXIoKS0+c2tpYUNvbnRleHQoKS0+cmVzZXRDb250ZXh0KCk7CisgICAgfQorI2VuZGlmCisKICAg
ICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBwYWludGVyKCZtX2NhbnZhcyk7CiAgICAgcGFpbnRl
ci5jb250ZXh0KCktPnNhdmUoKTsKICAgICBwYWludGVyLmNvbnRleHQoKS0+dHJhbnNsYXRlKC1w
YWludGluZ09mZnNldC54KCksIC1wYWludGluZ09mZnNldC55KCkpOwpAQCAtMTY2LDE1ICsxOTgs
NTAgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudAogCiAgICAgbV9v
d25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKnBhaW50ZXIuY29udGV4dCgpLCBkaXJ0
eVJlY3QpOwogICAgIHBhaW50ZXIuY29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyNpZiBVU0UoU0tJ
QSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4
dCgpLT5mbHVzaCgwKTsKKyNlbmRpZgogfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpy
ZXNpemVVcGxvYWRCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX2NhbnZhcy5y
ZXNpemUoc2l6ZSk7CisKKyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorICAgIGlm
IChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7Cisg
ICAgICAgIGlmICghbV9mYm8pCisgICAgICAgICAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisKKyAgICAgICAgLy8gUGxhdGZvcm1DYW52YXM6OnJlc2l6ZSBjcmVhdGVz
IGEgbmV3IHNraWEgY2FudmFzLgorICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGluc3RhbGwgYSBu
ZXcgc2tpYSBkZXZpY2Ugb24gdGhlIGNhbnZhcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGluc3Rh
bGxpbmcgYW4gYXJiaXRyYXJ5IGRldmljZSBpcyBkYW5nZXJvdXMgYmVjYXVzZQorICAgICAgICAv
LyBjaHJvbWl1bSBhc3N1bWVzIHRoYXQgYWxsIGRldmljZXMgYXJlIGRlcml2ZWQgZnJvbSBza2lh
OjpQbGF0Zm9ybURldmljZS4KKyAgICAgICAgLy8gU2VlIHNraWE6OlBsYXRmb3JtQ2FudmFzOjpn
ZXRUb3BQbGF0Zm9ybURldmljZSgpIGZvciBkZXRhaWxzLgorICAgICAgICBza2lhOjpQbGF0Zm9y
bUNhbnZhcyogc2tpYUNhbnZhcyA9IG1fY2FudmFzLnNraWFDYW52YXMoKTsKKyAgICAgICAgR3JD
b250ZXh0KiBza2lhQ29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+c2tpYUNvbnRleHQoKTsKKyAg
ICAgICAgR3JSZW5kZXJUYXJnZXQqIHRhcmdldCA9IHNraWFDb250ZXh0LT5jcmVhdGVQbGF0Zm9y
bVJlbmRlclRhcmdldChtX2ZibywgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgU2tEZXZpY2VGYWN0b3J5KiBmYWN0b3J5ID0gbmV3IFNrR3B1RGV2aWNlRmFjdG9yeShz
a2lhQ29udGV4dCwgdGFyZ2V0KTsKKyAgICAgICAgU2tEZXZpY2UqIGRldmljZSA9IGZhY3Rvcnkt
Pm5ld0RldmljZShza2lhQ2FudmFzLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgc2tpYUNhbnZh
cy0+c2V0RGV2aWNlKGRldmljZSktPnVucmVmKCk7CisgICAgICAgIHNraWFDYW52YXMtPnNldERl
dmljZUZhY3RvcnkoZmFjdG9yeSk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVJZk5lZWRlZCgpCiB7CisjaWYgVVNFKFNLSUEpICYm
IEVOQUJMRShTS0lBX0dQVSkKKyAgICAvLyBObyBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIC8v
IFdoZW4gdXNpbmcgR1BVIHdlIHJlbmRlciBkaXJlY3RseSBpbnRvIHRoZSB0ZXh0dXJlLgorICAg
IGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSkgeworICAg
ICAgICByZXNldERpcnR5UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK
ICAgICBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKICAgICB1
cGRhdGVUZXh0dXJlKGxvY2tlci5waXhlbHMoKSwgbV9jYW52YXMuc2l6ZSgpKTsKIH0KQEAgLTE4
NSwxNiArMjUyLDEzIEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyQ29udGV4dCgpOwotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAg
IG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUoY29udGV4dCwgbGF5ZXJS
ZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKLQotICAgIC8vIElmIHdlIGhhdmUgdG8gYWxs
b2NhdGUgYSBuZXcgdGV4dHVyZSB3ZSBoYXZlIHRvIHVwbG9hZCB0aGUgZnVsbCBjb250ZW50cy4K
LSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHNpemUsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkKKyAgICBpZiAoIWlzQ29udGVudHNUZXh0dXJlVmFsaWQoc2l6ZSkpIHsKKyAg
ICAgICAgLy8gSWYgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlIHdlIGhhdmUgdG8g
dXBsb2FkIHRoZSBmdWxsIGNvbnRlbnRzLgogICAgICAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKTsKLQotICAgIGlmICghbV9jb250ZW50c1RleHR1
cmUtPnJlc2VydmUoc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAgIG1f
c2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXJlc2VydmVD
b250ZW50c1RleHR1cmUoc2l6ZSkpIHsKKyAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEludFJlY3Qgc3Jj
UmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUpOwpAQCAtMjIzLDExICsyODcsNyBA
QCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91cGxvYWRVcGRhdGVSZWN0LngoKSwgbV91cGxv
YWRVcGRhdGVSZWN0LnkoKSwgbV91cGxvYWRVcGRhdGVSZWN0LndpZHRoKCksIG1fdXBsb2FkVXBk
YXRlUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkUGl4ZWxz
KSk7Ci0KLSAgICBtX3VwbG9hZFVwZGF0ZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9kaXJ0eVJl
Y3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7Ci0gICAgLy8gTGFyZ2UgbGF5ZXJzIGFsd2F5cyBzdGF5
IGRpcnR5LCBiZWNhdXNlIHRoZXkgbmVlZCB0byB1cGRhdGUgd2hlbiB0aGUgY29udGVudCByZWN0
IGNoYW5nZXMuCi0gICAgbV9jb250ZW50c0RpcnR5ID0gcmVxdWlyZXNDbGlwcGVkVXBkYXRlUmVj
dCgpOworICAgIHJlc2V0RGlydHlSZWN0KCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXcoKQpAQCAtMjY5LDYgKzMyOSwyMCBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjpkcmF3KCkKICAgICB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKIH0KIAorYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6aXNDb250ZW50c1RleHR1cmVWYWxpZChjb25zdCBJbnRTaXplJiBz
aXplKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRz
VGV4dHVyZS0+aXNWYWxpZChzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKK2Jv
b2wgQ29udGVudExheWVyQ2hyb21pdW06OnJlc2VydmVDb250ZW50c1RleHR1cmUoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQorICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5
ZXJSZW5kZXJlcigpLT50ZXh0dXJlTWFuYWdlcigpKTsKKworICAgIHJldHVybiBtX2NvbnRlbnRz
VGV4dHVyZS0+cmVzZXJ2ZShzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisKIHZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCiB7CiAg
ICAgaWYgKCFtX3NraXBzRHJhdyAmJiBtX2NvbnRlbnRzVGV4dHVyZSkKQEAgLTI4Myw2ICszNTcs
MTQgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVAogICAgICAgICBt
X2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6cmVzZXREaXJ0eVJlY3QoKQoreworICAgIG1fdXBsb2FkVXBkYXRlUmVjdCA9IElu
dFJlY3QoKTsKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICAvLyBM
YXJnZSBsYXllcnMgYWx3YXlzIHN0YXkgZGlydHksIGJlY2F1c2UgdGhleSBuZWVkIHRvIHVwZGF0
ZSB3aGVuIHRoZSBjb250ZW50IHJlY3QgY2hhbmdlcy4KKyAgICBtX2NvbnRlbnRzRGlydHkgPSBy
ZXF1aXJlc0NsaXBwZWRVcGRhdGVSZWN0KCk7Cit9CisKIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQogewogICAgIGZvciAoaW50IGkgPSAwOyBpICE9
IGluZGVudDsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCShyZXZp
c2lvbiA4MTg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDE3IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIHVwZGF0ZVRleHR1cmUoY29uc3QgdWludDhfdCogcGl4ZWxz
LCBjb25zdCBJbnRTaXplJik7CiAKIHByaXZhdGU6CisgICAgYm9vbCBpc0NvbnRlbnRzVGV4dHVy
ZVZhbGlkKGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICBib29sIHJlc2VydmVDb250ZW50c1Rl
eHR1cmUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzZXREaXJ0eVJlY3QoKTsKKwogICAg
IFBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9H
UFUpCisgICAgLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgdG8gbW92ZSB0aGlzLiBXaGF0
IHdlIHJlYWxseSBuZWVkIGlzIGEKKyAgICAvLyBncmFwaGljcyBjb250ZXh0IHRoYXQgY2FuIGRy
YXcgaW50byBhIHRleHR1cmUgd2hldGhlciBhY2NlbGVyYXRlZAorICAgIC8vIG9yIG5vdC4KKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOworI2VuZGlmCiAKICAgICBJbnRSZWN0IG1fdmlzaWJs
ZVJlY3RJbkxheWVyQ29vcmRzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAkocmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw2ICs1MCwxMCBAQAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpZiBFTkFCTEUoU0tJ
QV9HUFUpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JDb250ZXh0Lmgi
CisjZW5kaWYgLy8gU0tJQV9HUFUKICNlbGlmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNlbmRpZgpAQCAtMTE0LDYgKzExOCw3IEBAIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm8KICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwg
bV9jb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UoMCkKIHsKQEAgLTEzNSw2ICsxNDAsMjUgQEAgR3JhcGhpY3NDb250ZXh0M0Qq
IExheWVyUmVuZGVyZXJDaHJvbWl1bQogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAK
KyNpZiBVU0UoU0tJQSkgJiYgRU5BQkxFKFNLSUFfR1BVKQorR3JDb250ZXh0KiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnNraWFDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fc2tpYUNvbnRleHQpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCk7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VY
VF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworCisgICAgICAgIG1fc2tpYUNvbnRl
eHQgPSBHckNvbnRleHQ6OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOworICAgICAgICAvLyBMaW1p
dCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBj
YWNoZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUx
MjsKKyAgICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMg
aW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CisgICAgICAgIG1fc2tp
YUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4
VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgIH0KKyAgICByZXR1cm4gbV9za2lhQ29udGV4dC5nZXQo
KTsKK30KKyNlbmRpZgorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNo
YXIqIGZpbGUsIGludCBsaW5lKQogewogICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBjb250ZXh0
LT5nZXRFcnJvcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHJl
dmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEw
IEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKKyNpZiBVU0UoU0tJQSkg
JiYgRU5BQkxFKFNLSUFfR1BVKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllckltcGw7CkBAIC03MSw2ICs3NSw5IEBAIHB1Ymxp
YzoKICAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOworI2lmIFVTRShTS0lBKSAmJiBFTkFCTEUoU0tJQV9HUFUpCisgICAgR3JD
b250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCiAKICAgICB2b2lkIGludmFsaWRhdGVSb290
TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CiAKQEAgLTk2LDYgKzEwMyw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sKTsKICAgICBib29s
IGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9mZnNj
cmVlbjsgfQogCisgICAgdm9pZCBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCkgeyBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQgPSBlbmFibGVkOyB9CisgICAgYm9v
bCBhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkOyB9CisKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1cmUoKTsK
ICAgICB2b2lkIGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNpZ25lZCk7CiAKQEAgLTE4NSw2ICsxOTUs
OCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKICAg
ICBib29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCisgICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJh
d2luZ0VuYWJsZWQ7CisKICNpZiBVU0UoU0tJQSkKICAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1D
YW52YXM+IG1fcm9vdExheWVyQ2FudmFzOwogICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lh
PiBtX3Jvb3RMYXllclNraWFDb250ZXh0OwpAQCAtMjE4LDYgKzIzMCwxMSBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5PiBtX2hlYWRzVXBEaXNwbGF5OwogCiAgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisjaWYgVVNFKFNLSUEpICYmIEVOQUJM
RShTS0lBX0dQVSkKKyAgICAvLyBGSVhNRTogRmluZCBhbiBhcHByb3ByaWF0ZSBhYnN0cmFjdGlv
biB0byBjb250YWluIHNraWEgY29udGV4dAorICAgIC8vIHdpdGhvdXQgI2lmIHVnbGluZXNzIGV2
ZXJ5d2hlcmUuCisgICAgT3duUHRyPEdyQ29udGV4dD4gbV9za2lhQ29udGV4dDsKKyNlbmRpZgog
CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3Jt
Q2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkocmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw2ICs5NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNpemUoY29uc3Qg
SW50U2l6ZSYpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQog
CisjaWYgVVNFKFNLSUEpCisgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIHNraWFDYW52YXMoKSB7
IHJldHVybiBtX3NraWFDYW52YXMuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogI2lmIFVT
RShTS0lBKQogICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9za2lhQ2FudmFzOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxODkzKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxMS0wMy0yNCAgQWxvayBwcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgc2tp
YSBncHUgcmVuZGVyaW5nIGZvciBjb250ZW50IGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3NDkKKworICAgICAgICAqIHB1YmxpYy9XZWJT
ZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQpOgor
ICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViVmlld0lt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgorCiAy
MDExLTAzLTI0ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJTZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlNldHRpbmdzLmgJKHJldmlzaW9uIDgxODkxKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzEx
MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvclBsdWdpbnNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAkocmV2
aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0lt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsNiArMzQzLDExIEBAIHZvaWQgV2ViU2V0dGlu
Z3NJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXAKICAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBXZWJT
ZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQor
eworICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZW5hYmxlZCk7
Cit9CisKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9zZXR0aW5ncy0+c2V0QWNjZWxlcmF0ZWQyZENhbnZh
c0VuYWJsZWQoZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaAkocmV2aXNpb24gODE4OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zv
clZpZGVvRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvclBsdWdpbnNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yQ2FudmFzRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckFuaW1hdGlvbkVuYWJsZWQoYm9vbCk7ICAg
IAorICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9u
RW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWQyZENhbnZhc0Vu
YWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNp
b24gODE4OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0NDEsNiArMjQ0MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRv
Q29tcG9zaXRlKCkKICAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNob3dG
UFNDb3VudGVyKCkpOwogICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdz
KCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKIAorICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0
QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoKSk7CiAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVBbmREcmF3TGF5
ZXJzKCk7CiB9CiAK
</data>
<flag name="review"
          id="79201"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92141</attachid>
            <date>2011-05-03 15:07:57 -0700</date>
            <delta_ts>2011-05-06 15:24:27 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>layer.txt</filename>
            <type>text/plain</type>
            <size>50717</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NjY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODQgQEAKKzIwMTEtMDUtMDMgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBhbmQgcm9vdCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGdwdSBhY2NlbGVy
YXRlZCByZW5kZXJpbmcgZm9yIGNvbnRlbnQgYW5kIHJvb3QgbGF5ZXJzLgorICAgICAgICBMYXll
ciB0ZXh0dXJlcyBhcmUgdXBkYXRlZCBpbiB0d28gc3RhZ2VzOgorICAgICAgICAxLiBQYWludDog
VGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRoIHBhaW50cyB0aGUgbGF5ZXIgY29udGVudHMgaW50byBh
IGJpdG1hcC4KKyAgICAgICAgICAgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBwYXRoIHBhaW50cyBp
bnRvIGFuIFNrUGljdHVyZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBkaXNwbGF5IGxpc3QuCisg
ICAgICAgIDIuIFVwbG9hZDogVGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRoIHVwbG9hZHMgdGhlIHBp
eGVscyBvYnRhaW5lZCBpbiB0aGUgZmlyc3Qgc3RhZ2UgdG8gYSB0ZXh0dXJlLgorICAgICAgICAg
ICAgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBwYXRoIHJlbmRlcnMgdGhlIHBpY3R1cmUgZGlyZWN0
bHkgaW50byB0aGUgdGV4dHVyZS4KKyAgICAgICAgVGhlIGFjY2VsZXJhdGVkIHBhdGggY2FuIGJl
IGVuYWJsZWQgYnkgLS1lbmFibGUtYWNjZWxlcmF0ZWQtZHJhd2luZyBjb21tYW5kLWxpbmUgZmxh
ZyBpbiBjaHJvbWl1bS4KKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3QgYWNj
ZWxlcmF0ZSB0aGUgQ0cgcGF0aCBvbiBtYWMuIFdlIGhhdmUgdHdvIG9wdGlvbnMgaGVyZSAtIHVz
ZSBza2lhCisgICAgICAgIG9yIGFjY2VscmF0ZSBDRyBwYXRoLgorICAgICAgICAKKyAgICAgICAg
QW55IGJ1Z3Mgc2hvdWxkIGJlIGNhdWdodCBieSBsYXlvdXQgdGVzdHMuIEFkZGluZyAtLWVuYWJs
ZS1hY2NlbGVyYXRlZC1kcmF3aW5nIGZsYWcgdG8gRFJUIGlzIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjphY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZVRleHR1cmVJbnRlcmZhY2U6
On5UaWxlVGV4dHVyZUludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlUGl4ZWxVcGxv
YWRlcjo6flRpbGVQaXhlbFVwbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaXhlbFVw
bG9hZGVyOjpUaWxlUGl4ZWxVcGxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlUGl4ZWxV
cGxvYWRlcjo6YmVnaW5VcGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpeGVsVXBsb2Fk
ZXI6OmVuZFVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlUGl4ZWxVcGxvYWRlcjo6dXBs
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaWN0dXJlVXBsb2FkZXI6OlRpbGVQaWN0dXJl
VXBsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpY3R1cmVVcGxvYWRlcjo6flRpbGVQ
aWN0dXJlVXBsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpY3R1cmVVcGxvYWRlcjo6
YmVnaW5VcGxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpY3R1cmVVcGxvYWRlcjo6ZW5k
VXBsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaWN0dXJlVXBsb2FkZXI6OnVwbG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlUGljdHVyZVVwbG9hZGVyOjpjcmVhdGVGcmFtZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlUGljdHVyZVVwbG9hZGVyOjpjbGVhckZyYW1lQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6c2V0VGlsZVNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyQ2hyb21pdW06OnVwbG9hZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OnVwbG9hZFBpY3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1
bTo6ZHJhd1RleHR1cmVkUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21p
dW06OnVwZGF0ZVRleHR1cmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZh
czo6UGxhdGZvcm1DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DYW52YXM6OnNl
dEJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DYW52YXM6OnJlc2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6cmVzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXI6OkF1dG9Mb2NrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlBhaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6On5QYWludGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXI6OnBpY3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1DYW52YXM6OmJhY2tpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
Q2FudmFzTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNV
cERpc3BsYXk6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3RGVi
dWdCb3JkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXdZVVYp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEpOgorCiAyMDEx
LTA1LTAzICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA4NTY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZgog
dm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQogewog
ICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KDAsIDApLCBtX2RlY29kZWRJbWFnZS5zaXpl
KCkpOwotICAgIG1fdGlsZXItPnVwZGF0ZUZyb21QaXhlbHMocGFpbnRSZWN0LCBwYWludFJlY3Qs
IG1fZGVjb2RlZEltYWdlLnBpeGVscygpKTsKKyAgICBtX3RpbGVyLT51cGxvYWRQaXhlbHMocGFp
bnRSZWN0LCBwYWludFJlY3QsIG1fZGVjb2RlZEltYWdlLnBpeGVscygpKTsKIH0KIAogSW50UmVj
dCBJbWFnZUxheWVyQ2hyb21pdW06OmxheWVyQm91bmRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gODU2NTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSAiV2ViR0xMYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpZiBVU0UoU0tJQSkK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKICNpbmNs
dWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
CiAjZWxpZiBVU0UoQ0cpCkBAIC0xMTUsNyArMTE3LDcgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpMYXllclJlbmRlcmVyQ2hybwogICAgIDogbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KC0xLCAtMSkpCiAgICAgLCBtX3Jvb3RMYXllcigwKQogICAgICwgbV9yb290TGF5ZXJDb250
ZW50UGFpbnQoY29udGVudFBhaW50KQotICAgICwgbV9jdXJyZW50U2hhZGVyKDApCisgICAgLCBt
X2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJT
dXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAgICAsIG1fY29t
cG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQpAQCAtMTQzLDYgKzE0NSwyNSBAQCBHcmFwaGljc0NvbnRl
eHQzRCogTGF5ZXJSZW5kZXJlckNocm9taXVtCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsK
IH0KIAorI2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNr
aWFDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fc2tpYUNvbnRleHQpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7
CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2Zvcm1h
dF9CR1JBODg4OCIpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRf
cmVhZF9mb3JtYXRfYmdyYSIpOworCisgICAgICAgIG1fc2tpYUNvbnRleHQgPSBHckNvbnRleHQ6
OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOworICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9m
IHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKKyAgICAgICAgLy8g
TGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+
dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2Fj
aGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CisgICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRl
eHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0
ZXMpOworICAgIH0KKyAgICByZXR1cm4gbV9za2lhQ29udGV4dC5nZXQoKTsKK30KKyNlbmRpZgor
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBs
aW5lKQogewogICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBjb250ZXh0LT5nZXRFcnJvcigpOwpA
QCAtMTUwLDE0ICsxNzEsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENh
bGwoCiAgICAgICAgIExPR19FUlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6ICVzXG5cdExp
bmUgJWRcblx0Y29tbWFuZDogJXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBjb21tYW5kLCBz
dGF0aWNfY2FzdDxpbnQ+KGVycm9yKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQotewotICAgIGlmIChwcm9ncmFtSWQgIT0g
bV9jdXJyZW50U2hhZGVyKSB7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+dXNlUHJvZ3JhbShwcm9ncmFtSWQpKTsKLSAgICAgICAgbV9jdXJyZW50U2hhZGVyID0gcHJv
Z3JhbUlkOwotICAgIH0KLX0KLQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKQEAgLTE3NCw3ICsx
ODcsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsOwogICAgIHNjcm9sbC50cmFuc2xhdGUoLW1fdmlld3Bv
cnRWaXNpYmxlUmVjdC54KCksIC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3QueSgpKTsKIAotICAgIG1f
cm9vdExheWVyQ29udGVudFRpbGVyLT51cGxvYWRDYW52YXMoKTsKICAgICBtX3Jvb3RMYXllckNv
bnRlbnRUaWxlci0+ZHJhdyhtX3ZpZXdwb3J0VmlzaWJsZVJlY3QsIHNjcm9sbCwgMS4wZik7CiB9
CiAKQEAgLTIxMyw3ICsyMjUsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
QW5kRHJhCiAgICAgICAgIHJldHVybjsKIAogICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0OwotCiAgICAgdXBkYXRlTGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAg
ICAgLy8gQmVmb3JlIGRyYXdMYXllcnM6CkBAIC0zMTgsNiArMzI5LDggQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycwogLy8gIH0KIAogICAgIHVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXNSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIC8vIFVwZGF0ZSBj
b21wb3NpdG9yIHJlc291cmNlcyBmb3Igcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllckNvbnRl
bnRUaWxlci0+dXBsb2FkQ2FudmFzKCk7CiAKICAgICAvLyBBZnRlciB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzUmVjdXJzaXZlLCBzZXQvd2FpdCBsYXRjaGVzIGZvciBhbGwgY2hpbGQKICAgICAv
LyBjb250ZXh0cy4gVGhpcyB3aWxsIHByZXZlbnQgdGhlIGNvbXBvc2l0b3IgZnJvbSB1c2luZyBh
bnkgb2YgdGhlIGNoaWxkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAko
cmV2aXNpb24gODU2NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
MTAgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lmIFVTRShTS0lB
KQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ0NIZWFkc1VwRGlzcGxheTsKQEAgLTcyLDYgKzc2LDkgQEAgcHVibGljOgogICAgIH5MYXll
clJlbmRlcmVyQ2hyb21pdW0oKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7
CisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCiAK
ICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCk7CiAKQEAgLTk3LDYgKzEwNCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbXBvc2l0ZU9m
ZnNjcmVlbihib29sKTsKICAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBjb25zdCB7
IHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsgfQogCisgICAgdm9pZCBzZXRBY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQgPSBlbmFibGVkOyB9CisgICAgYm9vbCBhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOyB9IAorCiAgICAgdW5zaWdu
ZWQgY3JlYXRlTGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBkZWxldGVMYXllclRleHR1cmUodW5z
aWduZWQpOwogCkBAIC0xMDQsOCArMTE0LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX3Byb2pl
Y3Rpb25NYXRyaXg7IH0KIAotICAgIHZvaWQgdXNlU2hhZGVyKHVuc2lnbmVkKTsKLQogICAgIGJv
b2wgY2hlY2tUZXh0dXJlU2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICBjb25zdCBHZW9tZXRy
eUJpbmRpbmcqIHNoYXJlZEdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRHZW9tZXRy
eS5nZXQoKTsgfQpAQCAtMTgzLDEwICsxOTEsOSBAQCBwcml2YXRlOgogICAgIE93blB0cjxMYXll
clRpbGVyQ2hyb21pdW0+IG1fcm9vdExheWVyQ29udGVudFRpbGVyOwogCiAgICAgYm9vbCBtX2hh
cmR3YXJlQ29tcG9zaXRpbmc7CisgICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7
CiAKLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRTaGFkZXI7CiAgICAgUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlOwotCiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5G
cmFtZWJ1ZmZlcklkOwogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZzY3JlZW47CiAKQEAgLTIyMyw4
ICsyMzAsMTEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q0NIZWFkc1VwRGlzcGxheT4gbV9oZWFk
c1VwRGlzcGxheTsKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0Owot
ICAgIENoaWxkQ29udGV4dE1hcCBtX2NoaWxkQ29udGV4dHM7CisjaWYgVVNFKFNLSUEpCisgICAg
T3duUHRyPEdyQ29udGV4dD4gbV9za2lhQ29udGV4dDsKKyNlbmRpZgogCisgICAgQ2hpbGRDb250
ZXh0TWFwIG1fY2hpbGRDb250ZXh0czsKICAgICAvLyBJZiB0cnVlLCB0aGUgY2hpbGQgY29udGV4
dHMgd2VyZSBjb3BpZWQgdG8gdGhlIGNvbXBvc2l0b3IgdGV4dHVyZSB0YXJnZXRzCiAgICAgLy8g
YW5kIHRoZSBjb21wb3NpdG9yIHdpbGwgbmVlZCB0byB3YWl0IG9uIHRoZSBwcm9wZXIgbGF0Y2hl
cyBiZWZvcmUgdXNpbmcKICAgICAvLyB0aGUgdGFyZ2V0IHRleHR1cmVzLiBJZiBmYWxzZSwgdGhl
IGNvbXBvc2l0b3IgaXMgcmV1c2luZyB0aGUgdGV4dHVyZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
aWxlckNocm9taXVtLmNwcAkocmV2aXNpb24gODU2NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxMCArMzgsMjMwIEBACiAKICNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRy
Lmg+CiAKKyNpZiBVU0UoU0tJQSkKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNpbmNsdWRlICJT
a0dwdURldmljZS5oIgorI2luY2x1ZGUgIlNrR3B1RGV2aWNlRmFjdG9yeS5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgVGls
ZVRleHR1cmVJbnRlcmZhY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgflRpbGVUZXh0dXJlSW50
ZXJmYWNlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwbG9hZChMYXllclRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworfTsK
KworY2xhc3MgVGlsZVBpeGVsVXBsb2FkZXIgOiBwdWJsaWMgVGlsZVRleHR1cmVJbnRlcmZhY2Ug
eworcHVibGljOgorICAgIFRpbGVQaXhlbFVwbG9hZGVyKGNvbnN0IEludFNpemUmIHRpbGVTaXpl
LCBHQzNEaW50IGZpbHRlciwgR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2aXJ0dWFsIH5UaWxl
UGl4ZWxVcGxvYWRlcigpIHsgfQorCisgICAgdm9pZCBiZWdpblVwbG9hZChjb25zdCB1aW50OF90
KiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCk7CisgICAgdm9pZCBlbmRVcGxvYWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkKExheWVyVGV4dHVyZSosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBJ
bnRTaXplIG1fdGlsZVNpemU7CisgICAgR0MzRGludCBtX2ZpbHRlcjsKKyAgICBHcmFwaGljc0Nv
bnRleHQzRCogbV9jb250ZXh0OworCisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV90aWxlUGl4
ZWxzOworCisgICAgY29uc3QgdWludDhfdCogbV9waXhlbHM7CisgICAgSW50UmVjdCBtX3BhaW50
UmVjdDsKK307CisKK1RpbGVQaXhlbFVwbG9hZGVyOjpUaWxlUGl4ZWxVcGxvYWRlcihjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSwgR0MzRGludCBmaWx0ZXIsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fZmlsdGVyKGZpbHRlcikK
KyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9waXhlbHMoMCkKK3sKKyAgICBtX3Rp
bGVQaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fdGlsZVNpemUud2lkdGgoKSAq
IG1fdGlsZVNpemUuaGVpZ2h0KCkgKiA0XSk7Cit9CisKK3ZvaWQgVGlsZVBpeGVsVXBsb2FkZXI6
OmJlZ2luVXBsb2FkKGNvbnN0IHVpbnQ4X3QqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcGFpbnRS
ZWN0KQoreworICAgIG1fcGl4ZWxzID0gcGl4ZWxzOworICAgIG1fcGFpbnRSZWN0ID0gcGFpbnRS
ZWN0OworfQorCit2b2lkIFRpbGVQaXhlbFVwbG9hZGVyOjplbmRVcGxvYWQoKQoreworfQorCit2
b2lkIFRpbGVQaXhlbFVwbG9hZGVyOjp1cGxvYWQoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICAv
LyBPZmZzZXQgZnJvbSBwYWludCByZWN0YW5nbGUgdG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFu
Z2xlLgorICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJl
Y3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7CisKKyAgICBjb25zdCB1
aW50OF90KiBwaXhlbFNvdXJjZTsKKyAgICBpZiAobV9wYWludFJlY3Qud2lkdGgoKSA9PSBzb3Vy
Y2VSZWN0LndpZHRoKCkgJiYgIXBhaW50T2Zmc2V0LngoKSkKKyAgICAgICAgcGl4ZWxTb3VyY2Ug
PSAmbV9waXhlbHNbNCAqIHBhaW50T2Zmc2V0LnkoKSAqIG1fcGFpbnRSZWN0LndpZHRoKCldOwor
ICAgIGVsc2UgeworICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnkt
cm93IG1lbWNweSBmcm9tIHRoZQorICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0ZW1w
IGJ1ZmZlciBmb3IgdXBsb2FkaW5nLgorICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBk
ZXN0UmVjdC5oZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICBtZW1jcHkoJm1fdGlsZVBpeGVs
c1tkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICAgICAgICAgJm1fcGl4
ZWxzWzQgKiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBtX3Bh
aW50UmVjdC53aWR0aCgpKV0sCisgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAq
IDQpOworCisgICAgICAgIHBpeGVsU291cmNlID0gJm1fdGlsZVBpeGVsc1swXTsKKyAgICB9CisK
KyAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgbV9maWx0ZXIpKTsKKyAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIG1fZmlsdGVyKSk7Cisg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qu
d2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxTb3VyY2UpKTsKK30KKworI2lmIFVT
RShTS0lBKQorY2xhc3MgVGlsZVBpY3R1cmVVcGxvYWRlciA6IHB1YmxpYyBUaWxlVGV4dHVyZUlu
dGVyZmFjZSB7CitwdWJsaWM6CisgICAgVGlsZVBpY3R1cmVVcGxvYWRlcihjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0QqLCBHckNvbnRleHQqKTsKKyAgICB2aXJ0dWFs
IH5UaWxlUGljdHVyZVVwbG9hZGVyKCk7CisKKyAgICB2b2lkIGJlZ2luVXBsb2FkKGNvbnN0IFNr
UGljdHVyZSosIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCk7CisgICAgdm9pZCBlbmRVcGxvYWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkKExheWVyVGV4dHVyZSosIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICBi
b29sIGNyZWF0ZUZyYW1lQnVmZmVyKCk7CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyKCk7CisK
KyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKKyAgICBHckNvbnRleHQqIG1fc2tpYUNvbnRleHQ7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9zdGVuY2lsQnVmZmVyOworICAgIE93blB0
cjxTa0NhbnZhcz4gbV9jYW52YXM7CisKKyAgICBjb25zdCBTa1BpY3R1cmUqIG1fcGljdHVyZTsK
KyAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OworfTsKKworVGlsZVBpY3R1cmVVcGxvYWRlcjo6VGls
ZVBpY3R1cmVVcGxvYWRlcihjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEdyQ29udGV4dCogc2tpYUNvbnRleHQpCisgICAgOiBtX3RpbGVTaXplKHRp
bGVTaXplKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NraWFDb250ZXh0KHNr
aWFDb250ZXh0KQorICAgICwgbV9mYm8oMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQorICAg
ICwgbV9waWN0dXJlKDApCit7CisgICAgY3JlYXRlRnJhbWVCdWZmZXIoKTsKK30KKworVGlsZVBp
Y3R1cmVVcGxvYWRlcjo6flRpbGVQaWN0dXJlVXBsb2FkZXIoKQoreworICAgIG1fY2FudmFzLmNs
ZWFyKCk7CisKKyAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQorICAgICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX3N0ZW5jaWxCdWZmZXIpKTsKKyAgICBp
ZiAobV9mYm8pCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVi
dWZmZXIobV9mYm8pKTsKK30KKwordm9pZCBUaWxlUGljdHVyZVVwbG9hZGVyOjpiZWdpblVwbG9h
ZChjb25zdCBTa1BpY3R1cmUqIHBpY3R1cmUsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCkKK3sK
KyAgICBtX3BpY3R1cmUgPSBwaWN0dXJlOworICAgIG1fcGFpbnRSZWN0ID0gcGFpbnRSZWN0Owor
CisgICAgaWYgKG1fZmJvKQorICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKSk7Cit9CisK
K3ZvaWQgVGlsZVBpY3R1cmVVcGxvYWRlcjo6ZW5kVXBsb2FkKCkKK3sKKyAgICBpZiAobV9mYm8p
CisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworfQorCit2b2lkIFRpbGVQaWN0dXJlVXBs
b2FkZXI6OnVwbG9hZChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIGlmICghbV9mYm8pCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEJpbmQgdGV4dHVyZS4KKyAgICB0ZXh0dXJlLT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCgpOworICAgIEFTU0VSVChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpOworCisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT52aWV3cG9ydCgwLCAwLCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCkp
KTsKKyAgICBjbGVhckZyYW1lQnVmZmVyKCk7CisKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5j
IGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4KKyAgICBtX3NraWFDb250ZXh0LT5yZXNldENvbnRleHQo
KTsKKyAgICAvLyBPZmZzZXQgZnJvbSBzb3VyY2UgcmVjdGFuZ2xlIHRvIHRoaXMgZGVzdGluYXRp
b24gcmVjdGFuZ2xlLgorICAgIEludFBvaW50IG9mZnNldChzb3VyY2VSZWN0LngoKSAtIG1fcGFp
bnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBtX3BhaW50UmVjdC55KCkpOworICAgIG1fY2Fu
dmFzLT5zYXZlKCk7CisgICAgbV9jYW52YXMtPnRyYW5zbGF0ZSgtb2Zmc2V0LngoKSwgLW9mZnNl
dC55KCkpOworICAgIG1fY2FudmFzLT5kcmF3UGljdHVyZShjb25zdF9jYXN0PFNrUGljdHVyZSY+
KCptX3BpY3R1cmUpKTsKKyAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOworICAgIC8vIEZsdXNoIFNL
SUEgY29udGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVuZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUg
dGV4dHVyZS4KKyAgICBtX3NraWFDb250ZXh0LT5mbHVzaCgwKTsKKworICAgIC8vIFVuYmluZCB0
ZXh0dXJlLgorICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKSk7Cit9
CisKK2Jvb2wgVGlsZVBpY3R1cmVVcGxvYWRlcjo6Y3JlYXRlRnJhbWVCdWZmZXIoKQoreworICAg
IC8vIFNLSUEgbmVlZHMgc3RlbmNpbCBidWZmZXIgZm9yIHBhdGggcmVuZGVyaW5nLgorICAgIC8v
IE1ha2Ugc3VyZSBpdCBpcyBhdmFpbGFibGUuCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgY29udGV4dEF0dHJpYnMgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7
CisgICAgaWYgKCFjb250ZXh0QXR0cmlicy5zdGVuY2lsKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBDcmVhdGUgYW5kIGJpbmQgYSBmcmFtZS1idWZmZXItb2JqZWN0LgorICAgIEdM
QyhtX2NvbnRleHQsIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKKyAg
ICBpZiAoIW1fZmJvKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2ZibykpOworCisgICAgLy8gV2UganVzdCBuZWVkIHRvIGNyZWF0ZSBhIHN0ZW5jaWwgYnVm
ZmVyIGZvciBGQk8uCisgICAgLy8gVGhlIGNvbG9yIGJ1ZmZlciAodGV4dHVyZSkgd2lsbCBiZSBw
cm92aWRlZCBieSB0aWxlcy4KKyAgICAvLyBTS0lBIGRvZXMgbm90IG5lZWQgZGVwdGggYnVmZmVy
LgorICAgIEdMQyhtX2NvbnRleHQsIG1fc3RlbmNpbEJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRl
UmVuZGVyYnVmZmVyKCkpOworICAgIGlmICghbV9zdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pKTsKKyAgICAg
ICAgbV9mYm8gPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRl
eHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBtX3RpbGVTaXplLndpZHRoKCksIG1f
dGlsZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKSk7CisKKyAgICAvLyBDcmVhdGUgYSBza2lhIGdwdSBj
YW52YXMuCisgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7CisgICAgdGFyZ2V0
RGVzYy5yZXNldCgpOworICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0ga1JlbmRlclRhcmdl
dF9HclBsYXRmb3JtU3VyZmFjZVR5cGU7CisgICAgdGFyZ2V0RGVzYy5mUmVuZGVyVGFyZ2V0Rmxh
Z3MgPSBrTm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKKyAgICB0YXJnZXREZXNj
LmZXaWR0aCA9IG1fdGlsZVNpemUud2lkdGgoKTsKKyAgICB0YXJnZXREZXNjLmZIZWlnaHQgPSBt
X3RpbGVTaXplLmhlaWdodCgpOworICAgIHRhcmdldERlc2MuZkNvbmZpZyA9IGtSR0JBXzg4ODhf
R3JQaXhlbENvbmZpZzsKKyAgICB0YXJnZXREZXNjLmZTdGVuY2lsQml0cyA9IDg7CisgICAgdGFy
Z2V0RGVzYy5mUGxhdGZvcm1SZW5kZXJUYXJnZXQgPSBtX2ZibzsKKyAgICBTa0F1dG9UVW5yZWY8
R3JSZW5kZXJUYXJnZXQ+IHRhcmdldChzdGF0aWNfY2FzdDxHclJlbmRlclRhcmdldCo+KG1fc2tp
YUNvbnRleHQtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZSh0YXJnZXREZXNjKSkpOworICAgIFNrQXV0
b1RVbnJlZjxTa0RldmljZUZhY3Rvcnk+IGZhY3RvcnkobmV3IFNrR3B1RGV2aWNlRmFjdG9yeSht
X3NraWFDb250ZXh0LCB0YXJnZXQuZ2V0KCkpKTsKKyAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2U+
IGRldmljZShmYWN0b3J5LmdldCgpLT5uZXdEZXZpY2UoMCwgU2tCaXRtYXA6OmtBUkdCXzg4ODhf
Q29uZmlnLCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCksIGZhbHNlLCBm
YWxzZSkpOyAgICAgICAgCisgICAgbV9jYW52YXMgPSBuZXcgU2tDYW52YXMoZmFjdG9yeS5nZXQo
KSk7CisgICAgbV9jYW52YXMtPnNldERldmljZShkZXZpY2UuZ2V0KCkpOworCisgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCAwKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGlsZVBpY3R1cmVV
cGxvYWRlcjo6Y2xlYXJGcmFtZUJ1ZmZlcigpCit7CisgICAgLy8gQ2xlYXIgdG8gZ3JlZW4gdG8g
bWFrZSBpdCBlYXNpZXIgdG8gc3BvdCB1bnJlbmRlcmVkIHJlZ2lvbnMuCisgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDEsIDAsIDEpKTsKKyAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklU
IHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpOworfQorI2VuZGlmCisK
IFBhc3NPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRp
bGVTaXplLCBCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCiB7CiAgICAgaWYgKCFsYXllclJlbmRl
cmVyIHx8IHRpbGVTaXplLmlzRW1wdHkoKSkKQEAgLTg0LDcgKzMwNCw2IEBAIHZvaWQgTGF5ZXJU
aWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShjb24KICAgICByZXNldCgpOwogCiAgICAgbV90aWxl
U2l6ZSA9IHNpemU7Ci0gICAgbV90aWxlUGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdWludDhf
dFttX3RpbGVTaXplLndpZHRoKCkgKiBtX3RpbGVTaXplLmhlaWdodCgpICogNF0pOwogICAgIG1f
dGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKSk7CiB9CiAKQEAgLTk2LDYgKzMxNSw5IEBAIExheWVyVGV4dHVyZSogTGF5ZXJUaWxlckNo
cm9taXVtOjpnZXRTaW4KIAogdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnJlc2V0KCkKIHsKKyAg
ICBtX3BpeGVsVXBsb2FkZXIuY2xlYXIoKTsKKyAgICBtX3BpY3R1cmVVcGxvYWRlci5jbGVhcigp
OworCiAgICAgbV90aWxlcy5jbGVhcigpOwogICAgIG1fdW51c2VkVGlsZXMuY2xlYXIoKTsKICAg
ICBtX3RpbGluZ0RhdGEuc2V0VG90YWxTaXplKDAsIDApOwpAQCAtMjQ5LDggKzQ3MSw2IEBAIHZv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUoVGlsZVBhaW4KICAgICAgICAgICAgICAgICB0
aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKICAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgp
LT5pc1ZhbGlkKG1fdGlsZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKICAgICAgICAg
ICAgICAgICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gdGlsZUxheWVyUmVjdCh0aWxlKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPnJlc2VydmUo
bV90aWxlU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwogICAgICAgICAgICAgZGlydHlM
YXllclJlY3QudW5pdGUodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0yNjQsMTA5ICs0ODQsNjMgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShU
aWxlUGFpbgogICAgIGlmIChkaXJ0eUxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorI2lmIFVTRShTS0lBKQorICAgIFBsYXRmb3JtQ2FudmFzOjpCYWNraW5nIGNhbnZhc0Jh
Y2tpbmcgPSBsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSA/Cisg
ICAgICAgICAgICBQbGF0Zm9ybUNhbnZhczo6UGljdHVyZUJhY2tpbmcgOiBQbGF0Zm9ybUNhbnZh
czo6Qml0bWFwQmFja2luZzsKKyAgICBtX2NhbnZhcy5zZXRCYWNraW5nKGNhbnZhc0JhY2tpbmcp
OworI2VuZGlmCiAgICAgbV9jYW52YXMucmVzaXplKG1fcGFpbnRSZWN0LnNpemUoKSk7Ci0KICAg
ICAvLyBBc3N1bXB0aW9uOiBpZiBhIHRpbGVyIGlzIHVzaW5nIGJvcmRlciB0ZXhlbHMsIHRoZW4g
aXQgaXMgYmVjYXVzZSB0aGUKICAgICAvLyBsYXllciBpcyBsaWtlbHkgdG8gYmUgZmlsdGVyZWQg
b3IgdHJhbnNmb3JtZWQuIEJlY2F1c2Ugb2YgaXQgbWlnaHQgYmUKICAgICAvLyB0cmFuc2Zvcm1l
ZCwgZHJhdyB0aGUgdGV4dCBpbiBncmF5c2NhbGUgaW5zdGVhZCBvZiBzdWJwaXhlbCBhbnRpYWxp
YXNpbmcuCiAgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gdGV4dE9wdGlv
biA9IG1fdGlsaW5nRGF0YS5ib3JkZXJUZXhlbHMoKSA/IFBsYXRmb3JtQ2FudmFzOjpQYWludGVy
OjpHcmF5c2NhbGVUZXh0IDogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlN1YnBpeGVsVGV4dDsK
ICAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlciBjYW52YXNQYWludGVyKCZtX2NhbnZhcywgdGV4
dE9wdGlvbik7Ci0gICAgY2FudmFzUGFpbnRlci5jb250ZXh0KCktPnRyYW5zbGF0ZSgtbV9wYWlu
dFJlY3QueCgpLCAtbV9wYWludFJlY3QueSgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQgPSBjYW52YXNQYWludGVyLmNvbnRleHQoKTsKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoLW1f
cGFpbnRSZWN0LngoKSwgLW1fcGFpbnRSZWN0LnkoKSk7CiAgICAgewogICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGU6OnBhaW50IiwgdGhpcywgMCk7Ci0gICAg
ICAgIHBhaW50ZXIucGFpbnQoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBtX3BhaW50UmVjdCk7
CisgICAgICAgIHBhaW50ZXIucGFpbnQoKmNvbnRleHQsIG1fcGFpbnRSZWN0KTsKICAgICB9CiB9
CiAKIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGxvYWRDYW52YXMoKQogewogICAgIFBsYXRm
b3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmbV9jYW52YXMpOwotICAgIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQoIkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlRnJvbVBpeGVscyIsIHRoaXMs
IDApOwotICAgICAgICB1cGRhdGVGcm9tUGl4ZWxzKG1fdXBkYXRlUmVjdCwgbV9wYWludFJlY3Qs
IGxvY2tlci5waXhlbHMoKSk7CisjaWYgVVNFKFNLSUEpCisgICAgaWYgKGxheWVyUmVuZGVyZXIo
KS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKQorICAgICAgICB1cGxvYWRQaWN0dXJlKG1f
dXBkYXRlUmVjdCwgbV9wYWludFJlY3QsIGxvY2tlci5waWN0dXJlKCkpOworICAgIGVsc2UKKyAg
ICAgICAgdXBsb2FkUGl4ZWxzKG1fdXBkYXRlUmVjdCwgbV9wYWludFJlY3QsIGxvY2tlci5waXhl
bHMoKSk7CisjZWxzZQorICAgIHVwbG9hZFBpeGVscyhtX3VwZGF0ZVJlY3QsIG1fcGFpbnRSZWN0
LCBsb2NrZXIucGl4ZWxzKCkpOworI2VuZGlmCit9CisKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVt
Ojp1cGxvYWRQaXhlbHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJlY3Qm
IHBhaW50UmVjdCwgY29uc3QgdWludDhfdCogcGFpbnRQaXhlbHMpCit7CisgICAgVFJBQ0VfRVZF
TlQoIkxheWVyVGlsZXJDaHJvbWl1bTo6dXBsb2FkUGl4ZWxzIiwgdGhpcywgMCk7CisgICAgaWYg
KCFtX3BpeGVsVXBsb2FkZXIpIHsKKyAgICAgICAgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGluZ0Rh
dGEuYm9yZGVyVGV4ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3ND
b250ZXh0M0Q6Ok5FQVJFU1Q7CisgICAgICAgIG1fcGl4ZWxVcGxvYWRlciA9IG5ldyBUaWxlUGl4
ZWxVcGxvYWRlcihtX3RpbGVTaXplLCBmaWx0ZXIsIGxheWVyUmVuZGVyZXJDb250ZXh0KCkpOwog
ICAgIH0KKyAgICBtX3BpeGVsVXBsb2FkZXItPmJlZ2luVXBsb2FkKHBhaW50UGl4ZWxzLCBwYWlu
dFJlY3QpOworICAgIHVwZGF0ZVRleHR1cmVzKCptX3BpeGVsVXBsb2FkZXIsIGNvbnRlbnRSZWN0
LCBwYWludFJlY3QpOworICAgIG1fcGl4ZWxVcGxvYWRlci0+ZW5kVXBsb2FkKCk7CiB9CiAKLXZv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0IHVpbnQ4X3QqIHBhaW50
UGl4ZWxzKQorI2lmIFVTRShTS0lBKQordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZFBp
Y3R1cmUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJlY3QmIHBhaW50UmVj
dCwgY29uc3QgU2tQaWN0dXJlKiBwaWN0dXJlKQogewotICAgIC8vIFBhaW50aW5nIGNvdWxkIGNh
dXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRp
bGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgotICAgIGlmICghbV90aWxpbmdE
YXRhLnRvdGFsU2l6ZVgoKSB8fCAhbV90aWxpbmdEYXRhLnRvdGFsU2l6ZVkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVy
Q29udGV4dCgpOworICAgIFRSQUNFX0VWRU5UKCJMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZFBp
Y3R1cmUiLCB0aGlzLCAwKTsKIAotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207Ci0g
ICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAgICAgICAg
VGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAg
ICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KCF0aWxlLT5kaXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgotICAgICAg
ICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGlsZUNvbnRlbnRSZWN0KHRpbGUpOwotICAgICAg
ICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOwotICAg
ICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxl
LT5tX2RpcnR5TGF5ZXJSZWN0KSk7Ci0gICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFy
YW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbwotICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0Lgot
ICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QocGFpbnRSZWN0KTsKLSAgICAgICAgICAg
IGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkgewotICAgICAg
ICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZVNpemUsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKSkgewotICAgICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KLSAgICAg
ICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3Iu
eCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7Ci0g
ICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCi0gICAgICAgICAgICAgICAgQ1JB
U0goKTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRo
aXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KLSAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zm
c2V0KHNvdXJjZVJlY3QueCgpIC0gcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBwYWlu
dFJlY3QueSgpKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAwKQotICAgICAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgpIDwgMCkK
LSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0Lngo
KSArIGRlc3RSZWN0LndpZHRoKCkgPiBwYWludFJlY3Qud2lkdGgoKSkKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RSZWN0Lmhl
aWdodCgpID4gcGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0K
LSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlOwotICAgICAgICAgICAgaWYg
KHBhaW50UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRPZmZzZXQu
eCgpKQotICAgICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJnBhaW50UGl4ZWxzWzQgKiBwYWlu
dE9mZnNldC55KCkgKiBwYWludFJlY3Qud2lkdGgoKV07Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1l
bWNweSBmcm9tIHRoZQotICAgICAgICAgICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50byBhIHRl
bXAgYnVmZmVyIGZvciB1cGxvYWRpbmcuCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0g
MDsgcm93IDwgZGVzdFJlY3QuaGVpZ2h0KCk7ICsrcm93KQotICAgICAgICAgICAgICAgICAgICBt
ZW1jcHkoJm1fdGlsZVBpeGVsc1tkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAmcGFpbnRQaXhlbHNbNCAqIChwYWludE9mZnNldC54KCkgKyAo
cGFpbnRPZmZzZXQueSgpICsgcm93KSAqIHBhaW50UmVjdC53aWR0aCgpKV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0aCgpICogNCk7Ci0KLSAgICAgICAgICAgICAg
ICBwaXhlbFNvdXJjZSA9ICZtX3RpbGVQaXhlbHNbMF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoKTsKLQotICAgICAgICAgICAgY29u
c3QgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgPyBHcmFwaGlj
c0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7Ci0gICAgICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmls
dGVyKSk7Ci0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUFHX0ZJTFRFUiwgZmlsdGVyKSk7Ci0KLSAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBkZXN0UmVj
dC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgcGl4ZWxTb3VyY2UpKTsKLQotICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwotICAg
ICAgICB9CisgICAgaWYgKCFtX3BpY3R1cmVVcGxvYWRlcikgeworICAgICAgICBtX3BpY3R1cmVV
cGxvYWRlciA9IG5ldyBUaWxlUGljdHVyZVVwbG9hZGVyKG1fdGlsZVNpemUsIG1fbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpLCBtX2xheWVyUmVuZGVyZXItPnNraWFDb250ZXh0KCkpOwogICAgIH0K
KyAgICBtX3BpY3R1cmVVcGxvYWRlci0+YmVnaW5VcGxvYWQocGljdHVyZSwgcGFpbnRSZWN0KTsK
KyAgICB1cGRhdGVUZXh0dXJlcygqbV9waWN0dXJlVXBsb2FkZXIsIGNvbnRlbnRSZWN0LCBwYWlu
dFJlY3QpOworICAgIG1fcGljdHVyZVVwbG9hZGVyLT5lbmRVcGxvYWQoKTsKIH0KKyNlbmRpZgog
CiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJQb3NpdGlvbihjb25zdCBJbnRQb2lu
dCYgbGF5ZXJQb3NpdGlvbikKIHsKQEAgLTM4MCw4ICs1NTQsOSBAQCB2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSCiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAgICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVt
OjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW0oKTsKLSAg
ICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogCiAgICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKICAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVu
dFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkBAIC00MDgsNyArNTgzLDE4IEBAIHZv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFIKICAgICAgICAgICAgIGZsb2F0
IHRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdodDsKICAgICAgICAgICAg
IGZsb2F0IHRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkgLyB0aWxlV2lkdGg7CiAgICAgICAg
ICAgICBmbG9hdCB0ZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7Ci0K
KyNpZiBVU0UoU0tJQSkKKyAgICAgICAgICAgIC8vIFNLSUEgY29vcmRpbmF0ZSBzeXN0ZW0gb3Jp
Z2luIGlzIHRvcC1sZWZ0IHdoaWxlIHRoYXQgaW4gT3BlbkdMIGlzIGJvdHRvbS1sZWZ0LgorICAg
ICAgICAgICAgLy8gU28gdGhlIHRleHR1cmUgcmVuZGVyZWQgYnkgc2tpYSBpcyB1cHNpZGUtZG93
biBmb3IgT3BlbkdMLiBOb3RlIHRoYXQgdGhpcyBpcworICAgICAgICAgICAgLy8gbm90IGEgcHJv
YmxlbSBmb3IgdGhlIGJpdG1hcCBwYXRoIGJlY2F1c2UgdGhlIHBpeGVscyBnZXQgZmxpcHBlZCB3
aGVuIHVwbG9hZGluZworICAgICAgICAgICAgLy8gdGhlbSB1c2luZyBnbFRleEltYWdlMkQuIFdl
IG5lZWQgdG8gZml4IHRoaXMgb25seSBmb3IgdGhlIGFjY2VsZXJhdGVkIHBhdGguCisgICAgICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIHRyYW5zZm9ybXMgZmxpcHMgdGhlIHRleHR1cmUgY29vcmRp
bmF0ZXMgc3VjaCB0aGF0IHRoZSB0ZXh0dXJlCisgICAgICAgICAgICAvLyBpcyB1cHJpZ2h0IGZv
ciBPcGVuR0wuCisgICAgICAgICAgICBpZiAobGF5ZXJSZW5kZXJlcigpLT5hY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXhUcmFuc2xhdGVZICs9IDEuMDsK
KyAgICAgICAgICAgICAgICB0ZXhTY2FsZVkgKj0gLTEuMDsKKyAgICAgICAgICAgIH0KKyNlbmRp
ZgogICAgICAgICAgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRlcmVyKCkt
PnByb2plY3Rpb25NYXRyaXgoKSwgdGlsZU1hdHJpeCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJl
Y3QuaGVpZ2h0KCksIG9wYWNpdHksIHRleFRyYW5zbGF0ZVgsIHRleFRyYW5zbGF0ZVksIHRleFNj
YWxlWCwgdGV4U2NhbGVZLCBwcm9ncmFtKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ1MSw2ICs2
MzcsNTYgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YQogICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFO
R0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKK3Zv
aWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVUZXh0dXJlcyhUaWxlVGV4dHVyZUludGVyZmFj
ZSYgdGV4dHVyZUludGVyZmFjZSwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IElu
dFJlY3QmIHBhaW50UmVjdCkKK3sKKyAgICAvLyBQYWludGluZyBjb3VsZCBjYXVzZSBjb21wb3Np
dGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5IGNhdXNlIHRoZSB0aWxlciB0byBiZWNv
bWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KKyAgICBpZiAoIW1fdGlsaW5nRGF0YS50b3RhbFNp
emVYKCkgfHwgIW1fdGlsaW5nRGF0YS50b3RhbFNpemVZKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CisgICAgY29udGVudFJlY3RUb1RpbGVJ
bmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAo
aW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxl
ZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChp
LCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICB0aWxlID0gY3Jl
YXRlVGlsZShpLCBqKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1z
cGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VS
ZWN0ID0gdGlsZUNvbnRlbnRSZWN0KHRpbGUpOworICAgICAgICAgICAgY29uc3QgSW50UG9pbnQg
YW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigpOworICAgICAgICAgICAgc291cmNlUmVjdC5p
bnRlcnNlY3QobGF5ZXJSZWN0VG9Db250ZW50UmVjdCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7
CisgICAgICAgICAgICAvLyBQYWludCByZWN0IG5vdCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24g
dGlsZSBib3VuZGFyaWVzLCBzbworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNl
UmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9mIGl0LgorICAgICAgICAgICAgc291cmNlUmVj
dC5pbnRlcnNlY3QocGFpbnRSZWN0KTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCF0aWxl
LT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkgeworICAgICAgICAgICAgICAgIGlmICghdGlsZS0+
dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZVNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkg
eworICAgICAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHJlc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNw
YWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4KKyAgICAgICAgICAgIEludFJlY3QgZGVzdFJl
Y3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAt
IGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7CisgICAgICAgICAgICBBU1NFUlQoKGRl
c3RSZWN0LngoKSA+PSAwKSAmJiAoZGVzdFJlY3QueSgpID49IDApKTsKKworICAgICAgICAgICAg
Ly8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3Rh
bmdsZS4KKyAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0g
cGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkgLSBwYWludFJlY3QueSgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVCgocGFpbnRPZmZzZXQueCgpID49IDApICYmIChwYWludE9mZnNldC55KCkgPj0g
MCkpOworICAgICAgICAgICAgQVNTRVJUKHBhaW50T2Zmc2V0LngoKSArIGRlc3RSZWN0LndpZHRo
KCkgPD0gcGFpbnRSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgQVNTRVJUKHBhaW50T2Zmc2V0
LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpIDw9IHBhaW50UmVjdC5oZWlnaHQoKSk7CisKKyAgICAg
ICAgICAgIHRleHR1cmVJbnRlcmZhY2UudXBsb2FkKHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVj
dCwgZGVzdFJlY3QpOworICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworICAgICAgICB9
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAko
cmV2aXNpb24gODU2NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTAg
QEAgY2xhc3MgVGlsZVBhaW50SW50ZXJmYWNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCkgPSAwOwogfTsKKy8vIFVwZGF0ZXMgdGV4dHVyZSBvZiBhIGdpdmVuIHRpbGUuCitjbGFzcyBU
aWxlVGV4dHVyZUludGVyZmFjZTsKK2NsYXNzIFRpbGVQaXhlbFVwbG9hZGVyOworY2xhc3MgVGls
ZVBpY3R1cmVVcGxvYWRlcjsKIAogY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMYXllclRpbGVyQ2hyb21pdW0pOwpAQCAtNjgsNyArNzIsMTIgQEAg
cHVibGljOgogICAgIHZvaWQgdXBsb2FkQ2FudmFzKCk7CiAKICAgICAvLyBSZXNlcnZlIGFuZCB1
cGxvYWQgdGlsZSB0ZXh0dXJlcyBmcm9tIGFuIGV4dGVybmFsbHkgcGFpbnRlZCBidWZmZXIuCi0g
ICAgdm9pZCB1cGRhdGVGcm9tUGl4ZWxzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0IHVpbnQ4X3QqIHBpeGVscyk7CisgICAgdm9pZCB1
cGxvYWRQaXhlbHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJlY3QmIHBh
aW50UmVjdCwgY29uc3QgdWludDhfdCogcGl4ZWxzKTsKKworI2lmIFVTRShTS0lBKQorICAgIC8v
IFJlc2VydmUgYW5kIHVwbG9hZCB0aWxlIHRleHR1cmVzIGZyb20gYW4gZXh0ZXJuYWxseSBwYWlu
dGVkIHBpY3R1cmUuCisgICAgdm9pZCB1cGxvYWRQaWN0dXJlKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0IFNrUGljdHVyZSopOworI2Vu
ZGlmCiAKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250
ZW50IHJlY3QuCiAgICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwpAQCAtMTM0LDYgKzE0Myw5
IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCB0aWxlQ29udGVudFJlY3QoY29uc3QgVGlsZSopIGNv
bnN0OwogICAgIEludFJlY3QgdGlsZUxheWVyUmVjdChjb25zdCBUaWxlKikgY29uc3Q7CiAKKyAg
ICAvLyBVcGRhdGVzIHRleHR1cmVzIGZvciBhbGwgZGlydHkgdGlsZXMgdGhhdCBpbnRlcnNlY3Qg
d2l0aCBwYWludFJlY3QuCisgICAgdm9pZCB1cGRhdGVUZXh0dXJlcyhUaWxlVGV4dHVyZUludGVy
ZmFjZSYsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBwYWludFJl
Y3QpOworCiAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwogICAgIEludFBvaW50IG1fbGF5ZXJQb3Np
dGlvbjsKIApAQCAtMTYxLDkgKzE3MywxMCBAQCBwcml2YXRlOgogICAgIEludFJlY3QgbV9wYWlu
dFJlY3Q7CiAgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7CiAgICAgUGxhdGZvcm1DYW52YXMgbV9j
YW52YXM7Ci0KLSAgICAvLyBDYWNoZSBhIHRpbGUtc2l6ZWQgcGl4ZWwgYnVmZmVyIHRvIGRyYXcg
aW50by4KLSAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX3RpbGVQaXhlbHM7CisgICAgT3duUHRy
PFRpbGVQaXhlbFVwbG9hZGVyPiBtX3BpeGVsVXBsb2FkZXI7CisjaWYgVVNFKFNLSUEpCisgICAg
T3duUHRyPFRpbGVQaWN0dXJlVXBsb2FkZXI+IG1fcGljdHVyZVVwbG9hZGVyOworI2VuZGlmCiAK
ICAgICBUaWxpbmdEYXRhIG1fdGlsaW5nRGF0YTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFz
LmNwcAkocmV2aXNpb24gODU2NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2tDb2xvclByaXYuaCIKKyNpbmNsdWRlICJTa1BpY3R1
cmUuaCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKICNlbGlmIFVTRShD
RykKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CkBAIC00MCw3ICs0
MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGxhdGZvcm1DYW52YXM6OlBsYXRmb3Jt
Q2FudmFzKCkKK1BsYXRmb3JtQ2FudmFzOjpQbGF0Zm9ybUNhbnZhcygpIDogbV9iYWNraW5nKEJp
dG1hcEJhY2tpbmcpCiB7CiB9CiAKQEAgLTQ4LDM0ICs0OSw1OSBAQCBQbGF0Zm9ybUNhbnZhczo6
flBsYXRmb3JtQ2FudmFzKCkKIHsKIH0KIAordm9pZCBQbGF0Zm9ybUNhbnZhczo6c2V0QmFja2lu
ZyhCYWNraW5nIGJhY2tpbmcpCit7CisgICAgaWYgKGJhY2tpbmcgPT0gbV9iYWNraW5nKQorICAg
ICAgICByZXR1cm47CisKKyNpZiBVU0UoQ0cpCisgICAgaWYgKGJhY2tpbmcgPT0gUGljdHVyZUJh
Y2tpbmcpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBwaWN0dXJlIGJhY2tpbmcgZm9y
IENHLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisjZW5kaWYKKworICAg
IG1fYmFja2luZyA9IGJhY2tpbmc7CisgICAgcmVzZXQoKTsKK30KKwogdm9pZCBQbGF0Zm9ybUNh
bnZhczo6cmVzaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKG1fc2l6ZSA9PSBz
aXplKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaXplID0gc2l6ZTsKKyAgICByZXNldCgpOwor
fQorCit2b2lkIFBsYXRmb3JtQ2FudmFzOjpyZXNldCgpCit7CiAjaWYgVVNFKFNLSUEpCi0gICAg
bV9za2lhQ2FudmFzID0gc2tpYTo6Q3JlYXRlQml0bWFwQ2FudmFzKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwgZmFsc2UpOworICAgIG1fc2tpYUNhbnZhcy5jbGVhcigpOworICAgIG1fc2tp
YVBpY3R1cmUuY2xlYXIoKTsKICNlbGlmIFVTRShDRykKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OwotICAgIG1fcGl4ZWxEYXRhID0gYWRv
cHRBcnJheVB0cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7Ci0gICAgbWVtc2V0KG1fcGl4ZWxE
YXRhLmdldCgpLCAwLCBidWZmZXJTaXplKTsKKyAgICBtX3BpeGVsRGF0YS5jbGVhcigpOwogI2Vu
ZGlmCiB9CiAKIFBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyOjpBdXRvTG9ja2VyKFBsYXRmb3Jt
Q2FudmFzKiBjYW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMpCiAgICAgLCBtX3BpeGVscygw
KQorICAgICwgbV9waWN0dXJlKDApCisjaWYgVVNFKFNLSUEpCisgICAgLCBtX2JpdG1hcCgwKQor
I2VuZGlmCiB7CiAjaWYgVVNFKFNLSUEpCi0gICAgaWYgKG1fY2FudmFzLT5tX3NraWFDYW52YXMp
IHsKKyAgICBpZiAoKG1fY2FudmFzLT5iYWNraW5nKCkgPT0gQml0bWFwQmFja2luZykgJiYgbV9j
YW52YXMtPm1fc2tpYUNhbnZhcykgewogICAgICAgICBtX2JpdG1hcCA9ICZtX2NhbnZhcy0+bV9z
a2lhQ2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKICAgICAgICAgbV9i
aXRtYXAtPmxvY2tQaXhlbHMoKTsKIAogICAgICAgICBpZiAobV9iaXRtYXAtPmNvbmZpZygpID09
IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKICAgICAgICAgICAgIG1fcGl4ZWxzID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KG1fYml0bWFwLT5nZXRQaXhlbHMoKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1fYml0bWFwID0gMDsKKyAgICB9IGVsc2UgaWYgKG1fY2FudmFzLT5iYWNraW5nKCkg
PT0gUGljdHVyZUJhY2tpbmcpCisgICAgICAgIG1fcGljdHVyZSA9IG1fY2FudmFzLT5tX3NraWFQ
aWN0dXJlLmdldCgpOwogI2VsaWYgVVNFKENHKQorICAgIEFTU0VSVChjYW52YXMtPmJhY2tpbmco
KSA9PSBCaXRtYXBCYWNraW5nKTsKICAgICBpZiAoY2FudmFzLT5tX3BpeGVsRGF0YSkKICAgICAg
ICAgbV9waXhlbHMgPSAmY2FudmFzLT5tX3BpeGVsRGF0YVswXTsKICNlbmRpZgpAQCAtODksMTYg
KzExNSwzMCBAQCBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlcjo6fkF1dG9Mb2NrZXIoCiAjZW5k
aWYKIH0KIAotUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlBhaW50ZXIoUGxhdGZvcm1DYW52YXMq
IGNhbnZhcywgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gb3B0aW9uKQorUGxh
dGZvcm1DYW52YXM6OlBhaW50ZXI6OlBhaW50ZXIoUGxhdGZvcm1DYW52YXMqIGNhbnZhcywgUGxh
dGZvcm1DYW52YXM6OlBhaW50ZXI6OlRleHRPcHRpb24gb3B0aW9uKSA6IG1fY2FudmFzKGNhbnZh
cykKIHsKICNpZiBVU0UoU0tJQSkKLSAgICBtX3NraWFDb250ZXh0ID0gYWRvcHRQdHIobmV3IFBs
YXRmb3JtQ29udGV4dFNraWEoY2FudmFzLT5tX3NraWFDYW52YXMuZ2V0KCkpKTsKLQorICAgIFNr
Q2FudmFzKiBza2lhQ2FudmFzID0gMDsKKyAgICBpZiAoY2FudmFzLT5iYWNraW5nKCkgPT0gQml0
bWFwQmFja2luZykgeworICAgICAgICBpZiAoIWNhbnZhcy0+bV9za2lhQ2FudmFzKQorICAgICAg
ICAgICAgY2FudmFzLT5tX3NraWFDYW52YXMgPSBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoY2Fu
dmFzLT5zaXplKCkud2lkdGgoKSwgY2FudmFzLT5zaXplKCkuaGVpZ2h0KCksIGZhbHNlKTsKKyAg
ICAgICAgc2tpYUNhbnZhcyA9IGNhbnZhcy0+bV9za2lhQ2FudmFzLmdldCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIFBpY3R1cmUgYmFja2luZy4KKyAgICAgICAgaWYgKCFjYW52YXMtPm1f
c2tpYVBpY3R1cmUpCisgICAgICAgICAgICBjYW52YXMtPm1fc2tpYVBpY3R1cmUgPSBuZXcgU2tQ
aWN0dXJlOworICAgICAgICBza2lhQ2FudmFzID0gY2FudmFzLT5tX3NraWFQaWN0dXJlLT5iZWdp
blJlY29yZGluZyhjYW52YXMtPnNpemUoKS53aWR0aCgpLCBjYW52YXMtPnNpemUoKS5oZWlnaHQo
KSk7CisgICAgfQorICAgIG1fc2tpYUNvbnRleHQgPSBuZXcgUGxhdGZvcm1Db250ZXh0U2tpYShz
a2lhQ2FudmFzKTsKICAgICBtX3NraWFDb250ZXh0LT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcihv
cHRpb24gPT0gR3JheXNjYWxlVGV4dCk7Ci0KICAgICBtX2NvbnRleHQgPSBhZG9wdFB0cihuZXcg
R3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
PihtX3NraWFDb250ZXh0LmdldCgpKSkpOwogI2VsaWYgVVNFKENHKQotCisgICAgQVNTRVJUKGNh
bnZhcy0+YmFja2luZygpID09IEJpdG1hcEJhY2tpbmcpOworICAgIGlmICghY2FudmFzLT5tX3Bp
eGVsRGF0YSkgeworICAgICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IGNhbnZhcy0+c2l6ZSgpLndp
ZHRoKCkgKiBjYW52YXMtPnNpemUoKS5oZWlnaHQoKSAqIDQ7CisgICAgICAgIGNhbnZhcy0+bV9w
aXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKKyAgICAg
ICAgbWVtc2V0KGNhbnZhcy0+bV9waXhlbERhdGEuZ2V0KCksIDAsIGJ1ZmZlclNpemUpOworICAg
IH0KICAgICBtX2NvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKICAg
ICBzaXplX3Qgcm93Qnl0ZXMgPSBjYW52YXMtPnNpemUoKS53aWR0aCgpICogNDsKICAgICBtX2Nv
bnRleHRDRyA9IENHQml0bWFwQ29udGV4dENyZWF0ZShjYW52YXMtPm1fcGl4ZWxEYXRhLmdldCgp
LApAQCAtMTE1LDYgKzE1NSwxMiBAQCBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6UGFpbnRlcihQ
bGF0Zm9yCiBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6flBhaW50ZXIoKQogewogICAgIGNvbnRl
eHQoKS0+cmVzdG9yZSgpOworI2lmIFVTRShTS0lBKQorICAgIGlmIChtX2NhbnZhcy0+bV9za2lh
UGljdHVyZSkgeworICAgICAgICBBU1NFUlQobV9jYW52YXMtPmJhY2tpbmcoKSA9PSBQaWN0dXJl
QmFja2luZyk7CisgICAgICAgIG1fY2FudmFzLT5tX3NraWFQaWN0dXJlLT5lbmRSZWNvcmRpbmco
KTsKKyAgICB9CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Q
bGF0Zm9ybUNhbnZhcy5oCShyZXZpc2lvbiA4NTY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDcgQEAKICNpZiBVU0UoU0tJQSkKIGNsYXNzIFNrQml0bWFwOwogY2xhc3MgU2tD
YW52YXM7CitjbGFzcyBTa1BpY3R1cmU7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTEsMTQgKzUyLDI1IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFBsYXRmb3Jt
Q29udGV4dFNraWE7CiAjZW5kaWYKIAotLy8gQSAyRCBidWZmZXIgb2YgcGl4ZWxzIHdpdGggYW4g
YXNzb2NpYXRlZCBHcmFwaGljc0NvbnRleHQuCisvLyBBIDJEIGNhbnZhcyB3aXRoIGFuIGFzc29j
aWF0ZWQgR3JhcGhpY3NDb250ZXh0LgogY2xhc3MgUGxhdGZvcm1DYW52YXMgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFBsYXRmb3JtQ2FudmFzKTsKIHB1YmxpYzoKICAgICBQbGF0Zm9ybUNh
bnZhcygpOwogICAgIH5QbGF0Zm9ybUNhbnZhcygpOwogCi0gICAgLy8gU2NvcGVkIGxvY2sgY2xh
c3MgdG8gZ2V0IHRlbXBvcmFyeSBhY2Nlc3MgdG8gdGhpcyBjYW52YXMncyBwaXhlbHMuCisgICAg
Ly8gVGhlIHR5cGUgb2Ygc3VyZmFjZSB0aGlzIGNhbnZhcyBpcyBiYWNrZWQgd2l0aC4KKyAgICBl
bnVtIEJhY2tpbmcgeworICAgICAgICBCaXRtYXBCYWNraW5nLAorICAgICAgICBQaWN0dXJlQmFj
a2luZyAvLyBPZmYtc2NyZWVuIHJlbmRlcmluZyB0aGF0IGNhbiBiZSB1c2VkIGZvciByZXBlYXRl
ZCBkcmF3aW5nIG9uIHNjcmVlbi4KKyAgICB9OworI2lmIFVTRShTS0lBKQorICAgIHR5cGVkZWYg
U2tQaWN0dXJlIFBpY3R1cmU7CisjZWxzZQorICAgIHR5cGVkZWYgaW50IFBpY3R1cmU7CisjZW5k
aWYKKworICAgIC8vIFNjb3BlZCBsb2NrIGNsYXNzIHRvIGdldCB0ZW1wb3JhcnkgYWNjZXNzIHRv
IHRoaXMgY2FudmFzJ3MgYmFja2luZy4KICAgICBjbGFzcyBBdXRvTG9ja2VyIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQXV0b0xvY2tlcik7CiAgICAgcHVibGljOgpAQCAtNjYsMTIg
Kzc4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgfkF1dG9Mb2NrZXIoKTsKIAogICAgICAgICBjb25z
dCB1aW50OF90KiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsczsgfQorICAgICAgICBj
b25zdCBQaWN0dXJlKiBwaWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9waWN0dXJlOyB9CisKICAg
ICBwcml2YXRlOgogICAgICAgICBQbGF0Zm9ybUNhbnZhcyogbV9jYW52YXM7CisgICAgICAgIHVp
bnQ4X3QqIG1fcGl4ZWxzOworICAgICAgICBjb25zdCBQaWN0dXJlKiBtX3BpY3R1cmU7CiAjaWYg
VVNFKFNLSUEpCiAgICAgICAgIGNvbnN0IFNrQml0bWFwKiBtX2JpdG1hcDsKICNlbmRpZgotICAg
ICAgICB1aW50OF90KiBtX3BpeGVsczsKICAgICB9OwogCiAgICAgLy8gU2NvcGVkIGxvY2sgY2xh
c3MgdG8gZ2V0IHRlbXBvcmFyeSBhY2Nlc3MgdG8gcGFpbnQgaW50byB0aGlzIGNhbnZhcy4KQEAg
LTg2LDYgKzEwMSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBwcml2YXRlOgorICAg
ICAgICBQbGF0Zm9ybUNhbnZhcyogbV9jYW52YXM7CiAgICAgICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQ+IG1fY29udGV4dDsKICNpZiBVU0UoU0tJQSkKICAgICAgICAgT3duUHRyPFBsYXRmb3Jt
Q29udGV4dFNraWE+IG1fc2tpYUNvbnRleHQ7CkBAIC05NSwxNiArMTExLDIzIEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgIH07CiAKKyAgICB2b2lkIHNldEJhY2tpbmcoQmFja2luZyk7CisgICAgQmFj
a2luZyBiYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nOyB9CisKICAgICB2b2lkIHJl
c2l6ZShjb25zdCBJbnRTaXplJik7CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CiAKIHByaXZhdGU6CisgICAgdm9pZCByZXNldCgpOworCisgICAgQmFja2luZyBt
X2JhY2tpbmc7CisgICAgSW50U2l6ZSBtX3NpemU7CiAjaWYgVVNFKFNLSUEpCiAgICAgT3duUHRy
PFNrQ2FudmFzPiBtX3NraWFDYW52YXM7CisgICAgT3duUHRyPFNrUGljdHVyZT4gbV9za2lhUGlj
dHVyZTsKICNlbGlmIFVTRShDRykKICAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX3BpeGVsRGF0
YTsKICNlbmRpZgotICAgIEludFNpemUgbV9zaXplOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCShyZXZpc2lv
biA4NTY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Jl
bmRlclN1cmZhY2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBA
QCB2b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd1N1cmZhY2UoCiAgICAgaWYgKG1hc2tM
YXllciAmJiBtYXNrTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIGlmICghbWFza0xh
eWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbnRleHQzRC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgICAgICAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlciht
YXNrUHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRl
eHQzRC0+dXNlUHJvZ3JhbShtYXNrUHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgICAgICAgICBH
TEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKSk7CiAgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPnVuaWZv
cm0xaShtYXNrUHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkp
OwogICAgICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0dXJlKCk7CkBAIC0xMjYs
NyArMTI2LDcgQEAgdm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKAogICAg
IH0KIAogICAgIGlmICghdXNlTWFzaykgewotICAgICAgICBsYXllclJlbmRlcmVyKCktPnVzZVNo
YWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOworICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0
M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgICAgIG1fY29udGVudHNU
ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwogICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0Qt
PnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAw
KSk7CiAgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkubWF0cml4TG9jYXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAJKHJldmlz
aW9uIDg1NjUxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgdW5z
aWduZWQgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKAogICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkp
OwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNl
U2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIDAsIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUpKTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7CiAgICAgVGV4dHVyZUluZm8gaW5m
bzsKICAgICBpbmZvLnNpemUgPSBzaXplOwogICAgIGluZm8uZm9ybWF0ID0gZm9ybWF0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAkocmV2aXNpb24gODU2NTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xh
eWVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBDQ0NhbnZh
c0xheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZQogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsK
ICAgICBHQzNEZW51bSBzZmFjdG9yID0gbV9wcmVtdWx0aXBsaWVkQWxwaGEgPyBHcmFwaGljc0Nv
bnRleHQzRDo6T05FIDogR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBIQTsKICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3IsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKSk7Ci0gICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3Jh
bS0+cHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5wcm9ncmFtKCkpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKICAgICBMYXll
ckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJv
amVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09w
YWNpdHkoKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCShyZXZpc2lv
biA4NTY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSGVhZHNVcERpc3BsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAg
dm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKICAgICAgICAgUGxhdGZvcm1DYW52YXM6OkF1
dG9Mb2NrZXIgbG9ja2VyKCZjYW52YXMpOwogCiAgICAgICAgIG1faHVkVGV4dHVyZS0+YmluZFRl
eHR1cmUoKTsKLSAgICAgICAgR0xDKGNvbnRleHQuZ2V0KCksIGNvbnRleHQtPnRleEltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBjYW52YXMuc2l6ZSgpLndpZHRoKCksIGNhbnZhcy5zaXplKCkuaGVpZ2h0KCksIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbG9j
a2VyLnBpeGVscygpKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgY2FudmFzLnNpemUoKS53aWR0aCgpLCBjYW52YXMuc2l6ZSgpLmhlaWdodCgpLCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGxv
Y2tlci5waXhlbHMoKSkpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIEhVRCBvbnRvIHRoZSBk
ZWZhdWx0IHJlbmRlciBzdXJmYWNlLgpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgQ0NIZWFkc1Vw
RGlzcGxheTo6ZHJhdygpCiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwKSk7CiAgICAgbV9odWRUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwot
ICAgIG1fbGF5ZXJSZW5kZXJlci0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
YXRyaXg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCShyZXZpc2lvbiA4NTY1MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEzICsxNzAsMTYgQEAgdm9pZCBDQ0xheWVySW1w
bDo6ZHJhd0RlYnVnQm9yZGVyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGxheWVy
UmVuZGVyZXIoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyKCktPmNvbnRleHQoKTsKKwogICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRlclByb2dy
YW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPmJvcmRlclByb2dyYW0oKTsKICAgICBBU1NF
UlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICBsYXllclJlbmRlcmVy
KCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcmVuZGVyTWF0cml4ID0gZHJhd1RyYW5zZm9ybSgpOwogICAgIHJlbmRlck1hdHJp
eC5zY2FsZTNkKGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCAxKTsKICAgICB0
b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4
KCkgKiByZW5kZXJNYXRyaXgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisgICAgCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24o
KSwgZmFsc2UsICZnbE1hdHJpeFswXSwgMSkpOwogCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm00Zihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgZGVi
dWdCb3JkZXJDb2xvcigpLnJlZCgpIC8gMjU1LjAsIGRlYnVnQm9yZGVyQ29sb3IoKS5ncmVlbigp
IC8gMjU1LjAsIGRlYnVnQm9yZGVyQ29sb3IoKS5ibHVlKCkgLyAyNTUuMCwgMSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAkocmV2aXNpb24gODU2NTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBDQ1BsdWdpbkxh
eWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZQogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CiAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKIAotICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hh
ZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVBy
b2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7
CiAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJlbmRl
cmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0
KCksIGRyYXdPcGFjaXR5KCksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNw
cAkocmV2aXNpb24gODU2NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcg
KzExNSw3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVihjb25zdCBDQ1YKICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTMpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLmlkKSk7CiAKLSAgICBsYXllclJlbmRlcmVy
KCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogCiAgICAgZmxvYXQgeVdpZHRo
U2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUudmlzaWJsZVNpemUud2lk
dGgoKSkgLyB5VGV4dHVyZS5zaXplLndpZHRoKCk7CiAgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0
aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgpAQCAt
MTQ3LDcgKzE0Nyw3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEoY29uc3QgQ0MK
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUuaWQpKTsKIAotICAgIGxheWVyUmVu
ZGVyZXIoKS0+dXNlU2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgZmxvYXQgd2lk
dGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJlLnZpc2libGVTaXplLndp
ZHRoKCkpIC8gdGV4dHVyZS5zaXplLndpZHRoKCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiA4NTY2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDUtMDMgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUpOgorCiAyMDExLTA1LTAzICBUb255IENoYW5n
ICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyB0aGUg
dmVyc2lvbiBvZiBjaHJvbWl1bSB0byByODM5MjIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4NTY1MSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5Miw2
ICsyNDkyLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQogICAgIGh1ZC0+c2V0
U2hvd0ZQU0NvdW50ZXIoc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKSk7CiAgICAgaHVkLT5z
ZXRTaG93UGxhdGZvcm1MYXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KCkpOwogCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVk
KG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKICAgICBt
X2xheWVyUmVuZGVyZXItPnVwZGF0ZUFuZERyYXdMYXllcnMoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92630</attachid>
            <date>2011-05-06 13:08:51 -0700</date>
            <delta_ts>2011-05-20 15:33:26 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>layer.patch</filename>
            <type>text/plain</type>
            <size>65130</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1OTcwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMTEtMDUtMDYgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBhbmQgcm9vdCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGdwdSBhY2NlbGVy
YXRlZCByZW5kZXJpbmcgZm9yIGNvbnRlbnQgYW5kIHJvb3QgbGF5ZXJzLgorICAgICAgICBMYXll
ciB0ZXh0dXJlcyBhcmUgdXBkYXRlZCBpbiB0d28gc3RhZ2VzOgorICAgICAgICAxLiBQYWludDog
VGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRoIHBhaW50cyB0aGUgbGF5ZXIgY29udGVudHMgaW50byBh
IGJpdG1hcC4KKyAgICAgICAgICAgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBwYXRoIHBhaW50cyBp
bnRvIGFuIFNrUGljdHVyZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBkaXNwbGF5IGxpc3QuCisg
ICAgICAgIDIuIFVwbG9hZDogVGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRoIHVwbG9hZHMgdGhlIHBp
eGVscyBvYnRhaW5lZCBpbiB0aGUgZmlyc3Qgc3RhZ2UgdG8gYSB0ZXh0dXJlLgorICAgICAgICAg
ICAgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBwYXRoIHJlbmRlcnMgdGhlIHBpY3R1cmUgZGlyZWN0
bHkgaW50byB0aGUgdGV4dHVyZS4KKyAgICAgICAgCisgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBw
YXRoIGNhbiBiZSBlbmFibGVkIGJ5IC0tZW5hYmxlLWFjY2VsZXJhdGVkLWRyYXdpbmcgY29tbWFu
ZC1saW5lIGZsYWcgaW4gY2hyb21pdW0uCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIHBhdGNoIGRv
ZXMgbm90IGFjY2VsZXJhdGUgdGhlIENHIHBhdGggb24gbWFjLiBXZSBoYXZlIHR3byBvcHRpb25z
IGhlcmUgLSB1c2Ugc2tpYSBvciBhY2NlbHJhdGUgQ0cgcGF0aC4KKyAgICAgICAgQW55IGJ1Z3Mg
c2hvdWxkIGJlIGNhdWdodCBieSBsYXlvdXQgdGVzdHMuIEFkZGluZyAtLWVuYWJsZS1hY2NlbGVy
YXRlZC1kcmF3aW5nIGZsYWcgdG8gRFJUIGlzIGluIHByb2dyZXNzLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmFjY2VsZXJhdGVkRHJh
d2luZ0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGlsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06
OnNldFRpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp1cGxvYWRDYW52YXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp1cGxvYWRQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp1cGxvYWRQaWN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRpbGVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlckNocm9taXVtOjp1cGRhdGVUZXh0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclRpbGVyQ2hyb21pdW06OlRpbGU6OlRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
aWxlckNocm9taXVtOjpUaWxlOjp0b3BEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGls
ZXJDaHJvbWl1bTo6VGlsZTo6c2V0VG9wRG93bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DYW52YXM6OlBsYXRmb3JtQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2Fu
dmFzOjpzZXRCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpyZXNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DYW52YXM6OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyOjpBdXRvTG9ja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpQYWludGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjp+UGFpbnRlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpBdXRvTG9ja2VyOjpwaWN0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpiYWNraW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlUGljdHVyZVVwbG9hZGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpUaWxlUGljdHVyZVVwbG9hZGVyOjpUaWxlUGljdHVyZVVwbG9hZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVQaWN0dXJlVXBsb2FkZXI6On5UaWxlUGljdHVyZVVwbG9hZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaWN0dXJlVXBsb2FkZXI6OmJlZ2luVXBsb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaWN0dXJlVXBsb2FkZXI6OmVuZFVwbG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUaWxlUGljdHVyZVVwbG9hZGVyOjp1cGxvYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZVBpY3R1cmVVcGxvYWRlcjo6Y3JlYXRlRnJhbWVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZVBpY3R1cmVVcGxvYWRlcjo6Y2xlYXJGcmFtZUJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZVBpY3R1cmVVcGxvYWRlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaWN0dXJlVXBsb2FkZXI6Om9yaWVudGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaWN0dXJlVXBsb2FkZXI6OlRpbGVQaWN0dXJlVXBsb2Fk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpY3R1cmVVcGxvYWRlcjo6flRpbGVQaWN0dXJl
VXBsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpY3R1cmVVcGxvYWRlcjo6dXBsb2Fk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlUGl4ZWxVcGxvYWRl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpeGVsVXBsb2FkZXI6OlRpbGVQ
aXhlbFVwbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaXhlbFVwbG9hZGVyOjpiZWdp
blVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlUGl4ZWxVcGxvYWRlcjo6ZW5kVXBsb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVQaXhlbFVwbG9hZGVyOjp1cGxvYWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVQaXhlbFVwbG9hZGVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGlsZVBpeGVsVXBsb2FkZXI6On5UaWxlUGl4ZWxVcGxvYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlUGl4ZWxVcGxvYWRlcjo6b3JpZW50YXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVUZXh0dXJlSW50ZXJmYWNl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGlsZVRleHR1cmVJbnRlcmZhY2U6On5UaWxl
VGV4dHVyZUludGVyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXll
ckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRyYXdEZWJ1Z0JvcmRlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllcklt
cGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVik6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQSk6CisKIDIwMTEtMDUtMDYgIERh
dmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBC
ZXJuc3RlaW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4NTk3MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDA0NSw2ICs0MDQ1LDEx
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFMaW51eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZU1hbmFnZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZVBpY3R1cmVVcGxvYWRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVQaWN0dXJlVXBsb2FkZXIuaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZVBpeGVsVXBsb2FkZXIuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlUGl4ZWxVcGxvYWRlci5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlVGV4dHVyZUludGVyZmFj
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVu
Y3lXaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFu
c3BhcmVuY3lXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VW5pc2NyaWJlSGVscGVyLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9UcmFjZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vVHJhY2VFdmVudC5oCShyZXZpc2lvbiA4NTk3MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1RyYWNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2RlZmluZSBUcmFjZUV2ZW50X2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdl
LmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIC8vIEltcGxlbWVudGF0aW9uIGRl
dGFpbDogdHJhY2UgZXZlbnQgbWFjcm9zIGNyZWF0ZSB0ZW1wb3JhcnkgdmFyaWFibGVzCiAvLyB0
byBrZWVwIGluc3RydW1lbnRhdGlvbiBvdmVyaGVhZCBsb3cuIFRoZXNlIG1hY3JvcyBnaXZlIGVh
Y2ggdGVtcG9yYXJ5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDg1OTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2
b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmCiB2b2lkIEltYWdlTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7CiAgICAgSW50UmVjdCBwYWlu
dFJlY3QoSW50UG9pbnQoMCwgMCksIG1fZGVjb2RlZEltYWdlLnNpemUoKSk7Ci0gICAgbV90aWxl
ci0+dXBkYXRlRnJvbVBpeGVscyhwYWludFJlY3QsIHBhaW50UmVjdCwgbV9kZWNvZGVkSW1hZ2Uu
cGl4ZWxzKCkpOworICAgIG1fdGlsZXItPnVwbG9hZFBpeGVscyhwYWludFJlY3QsIHBhaW50UmVj
dCwgbV9kZWNvZGVkSW1hZ2UucGl4ZWxzKCkpOwogfQogCiBJbnRSZWN0IEltYWdlTGF5ZXJDaHJv
bWl1bTo6bGF5ZXJCb3VuZHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA4NTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2lmIFVTRShTS0lBKQorI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyQ29udGV4dC5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNlbGlmIFVTRShDRykK
QEAgLTExMCw3ICsxMTIsNyBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJD
aHJvCiAgICAgOiBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKICAg
ICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX3Jvb3RMYXllckNvbnRlbnRQYWludChjb250ZW50
UGFpbnQpCi0gICAgLCBtX2N1cnJlbnRTaGFkZXIoMCkKKyAgICAsIG1fYWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAs
IG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9jb21wb3NpdGVPZmZzY3JlZW4o
ZmFsc2UpCkBAIC0xMzgsNiArMTQwLDI1IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRl
cmVyQ2hyb21pdW0KICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCisjaWYgVVNFKFNL
SUEpCitHckNvbnRleHQqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQoKQorewor
ICAgIGlmICghbV9za2lhQ29udGV4dCkgeworICAgICAgICBXZWJDb3JlOjpFeHRlbnNpb25zM0Qq
IGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgZXh0ZW5z
aW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Cisg
ICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3Jh
Iik7CisKKyAgICAgICAgbV9za2lhQ29udGV4dCA9IEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJD
b250ZXh0KCk7CisgICAgICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9s
ZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heFRleHR1cmVDYWNoZUNvdW50ID0gNTEyOworICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMg
YWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgor
ICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAx
MDI0ICogMTAyNDsKKyAgICAgICAgbV9za2lhQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRz
KG1heFRleHR1cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgfQorICAg
IHJldHVybiBtX3NraWFDb250ZXh0LmdldCgpOworfQorI2VuZGlmCisKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgY2hhciogY29tbWFuZCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpCiB7CiAgICAgdW5z
aWduZWQgbG9uZyBlcnJvciA9IGNvbnRleHQtPmdldEVycm9yKCk7CkBAIC0xNDUsMTQgKzE2Niw2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbCgKICAgICAgICAgTE9H
X0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDogRmlsZTogJXNcblx0TGluZSAlZFxuXHRjb21tYW5k
OiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxpbmUsIGNvbW1hbmQsIHN0YXRpY19jYXN0PGludD4o
ZXJyb3IpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcih1bnNp
Z25lZCBwcm9ncmFtSWQpCi17Ci0gICAgaWYgKHByb2dyYW1JZCAhPSBtX2N1cnJlbnRTaGFkZXIp
IHsKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT51c2VQcm9ncmFtKHBy
b2dyYW1JZCkpOwotICAgICAgICBtX2N1cnJlbnRTaGFkZXIgPSBwcm9ncmFtSWQ7Ci0gICAgfQot
fQotCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3Qo
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVy
LT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwpAQCAtMTY5LDcgKzE4Miw2IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Um9vdExheWUKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBzY3JvbGw7CiAgICAgc2Nyb2xsLnRyYW5zbGF0ZSgtbV92aWV3cG9ydFZpc2libGVSZWN0Lngo
KSwgLW1fdmlld3BvcnRWaXNpYmxlUmVjdC55KCkpOwogCi0gICAgbV9yb290TGF5ZXJDb250ZW50
VGlsZXItPnVwbG9hZENhbnZhcygpOwogICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5kcmF3
KG1fdmlld3BvcnRWaXNpYmxlUmVjdCwgc2Nyb2xsLCAxLjBmKTsKIH0KIApAQCAtMjA4LDcgKzIy
MCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmEKICAgICAgICAg
cmV0dXJuOwogCiAgICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0KICAgICB1
cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICAvLyBCZWZvcmUgZHJh
d0xheWVyczoKQEAgLTMxMyw2ICszMjQsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlTGF5ZXJzCiAvLyAgfQogCiAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vy
c2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgLy8gVXBkYXRlIGNvbXBvc2l0b3IgcmVzb3Vy
Y2VzIGZvciByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT51cGxvYWRD
YW52YXMoKTsKIAogICAgIC8vIEFmdGVyIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNp
dmUsIHNldC93YWl0IGxhdGNoZXMgZm9yIGFsbCBjaGlsZAogICAgIC8vIGNvbnRleHRzLiBUaGlz
IHdpbGwgcHJldmVudCB0aGUgY29tcG9zaXRvciBmcm9tIHVzaW5nIGFueSBvZiB0aGUgY2hpbGQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4NTk3MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMCBAQAogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRl
eHQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0hlYWRzVXBEaXNw
bGF5OwpAQCAtNzMsNiArNzcsOSBAQCBwdWJsaWM6CiAgICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1
bSgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyNpZiBVU0UoU0tJQSkK
KyAgICBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKIAogICAgIHZvaWQgaW52YWxp
ZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIApAQCAtOTgsNiAr
MTA1LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wpOwog
ICAgIGJvb2wgaXNDb21wb3NpdGluZ09mZnNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9z
aXRlT2Zmc2NyZWVuOyB9CiAKKyAgICB2b2lkIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0K
KyAgICBib29sIGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Fj
Y2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7IH0gCisKICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRl
eHR1cmUoKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNpZ25lZCk7CiAKQEAgLTEw
NSw4ICsxMTUsNiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvamVjdGlvbk1hdHJpeDsgfQog
Ci0gICAgdm9pZCB1c2VTaGFkZXIodW5zaWduZWQpOwotCiAgICAgYm9vbCBjaGVja1RleHR1cmVT
aXplKGNvbnN0IEludFNpemUmKTsKIAogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyogc2hhcmVk
R2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9CkBAIC0x
ODQsMTAgKzE5Miw5IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4g
bV9yb290TGF5ZXJDb250ZW50VGlsZXI7CiAKICAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGlu
ZzsKKyAgICBib29sIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsKIAotICAgIHVuc2lnbmVk
IG1fY3VycmVudFNoYWRlcjsKICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fY3VycmVudFJl
bmRlclN1cmZhY2U7Ci0KICAgICB1bnNpZ25lZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAg
ICAgYm9vbCBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsKIApAQCAtMjI0LDggKzIzMSwxMSBAQCBwcml2
YXRlOgogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5PiBtX2hlYWRzVXBEaXNwbGF5OwogCiAg
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgQ2hpbGRDb250ZXh0
TWFwIG1fY2hpbGRDb250ZXh0czsKKyNpZiBVU0UoU0tJQSkKKyAgICBPd25QdHI8R3JDb250ZXh0
PiBtX3NraWFDb250ZXh0OworI2VuZGlmCiAKKyAgICBDaGlsZENvbnRleHRNYXAgbV9jaGlsZENv
bnRleHRzOwogICAgIC8vIElmIHRydWUsIHRoZSBjaGlsZCBjb250ZXh0cyB3ZXJlIGNvcGllZCB0
byB0aGUgY29tcG9zaXRvciB0ZXh0dXJlIHRhcmdldHMKICAgICAvLyBhbmQgdGhlIGNvbXBvc2l0
b3Igd2lsbCBuZWVkIHRvIHdhaXQgb24gdGhlIHByb3BlciBsYXRjaGVzIGJlZm9yZSB1c2luZwog
ICAgIC8vIHRoZSB0YXJnZXQgdGV4dHVyZXMuIElmIGZhbHNlLCB0aGUgY29tcG9zaXRvciBpcyBy
ZXVzaW5nIHRoZSB0ZXh0dXJlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA4NTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICsz
NCwxMCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAi
VGlsZVBpY3R1cmVVcGxvYWRlci5oIgorI2luY2x1ZGUgIlRpbGVQaXhlbFVwbG9hZGVyLmgiCiAj
aW5jbHVkZSAiVHJhY2VFdmVudC5oIgogCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5o
PgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NCw3
ICs4NCw2IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZShjb24KICAgICBy
ZXNldCgpOwogCiAgICAgbV90aWxlU2l6ZSA9IHNpemU7Ci0gICAgbV90aWxlUGl4ZWxzID0gYWRv
cHRBcnJheVB0cihuZXcgdWludDhfdFttX3RpbGVTaXplLndpZHRoKCkgKiBtX3RpbGVTaXplLmhl
aWdodCgpICogNF0pOwogICAgIG1fdGlsaW5nRGF0YS5zZXRNYXhUZXh0dXJlU2l6ZShtYXgoc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiB9CiAKQEAgLTk2LDYgKzk1LDkgQEAgTGF5ZXJU
ZXh0dXJlKiBMYXllclRpbGVyQ2hyb21pdW06OmdldFNpbgogCiB2b2lkIExheWVyVGlsZXJDaHJv
bWl1bTo6cmVzZXQoKQogeworICAgIG1fcGl4ZWxVcGxvYWRlci5jbGVhcigpOworICAgIG1fcGlj
dHVyZVVwbG9hZGVyLmNsZWFyKCk7CisKICAgICBtX3RpbGVzLmNsZWFyKCk7CiAgICAgbV91bnVz
ZWRUaWxlcy5jbGVhcigpOwogICAgIG1fdGlsaW5nRGF0YS5zZXRUb3RhbFNpemUoMCwgMCk7CkBA
IC0yNDksOCArMjUxLDYgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZShUaWxlUGFp
bgogICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOwogICAgICAgICAgICAg
aWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFsaWQobV90aWxlU2l6ZSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEpKQogICAgICAgICAgICAgICAgIHRpbGUtPm1fZGlydHlMYXllclJlY3QgPSB0aWxl
TGF5ZXJSZWN0KHRpbGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRpbGUt
PnRleHR1cmUoKS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7
CiAgICAgICAgICAgICBkaXJ0eUxheWVyUmVjdC51bml0ZSh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI2NCwxMDggKzI2NCw2MCBAQCB2b2lkIExheWVyVGls
ZXJDaHJvbWl1bTo6dXBkYXRlKFRpbGVQYWluCiAgICAgaWYgKGRpcnR5TGF5ZXJSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgVVNFKFNLSUEpCisgICAgUGxhdGZvcm1DYW52
YXM6OkJhY2tpbmcgY2FudmFzQmFja2luZyA9IGxheWVyUmVuZGVyZXIoKS0+YWNjZWxlcmF0ZWRE
cmF3aW5nRW5hYmxlZCgpID8KKyAgICAgICAgICAgIFBsYXRmb3JtQ2FudmFzOjpQaWN0dXJlQmFj
a2luZyA6IFBsYXRmb3JtQ2FudmFzOjpCaXRtYXBCYWNraW5nOworICAgIG1fY2FudmFzLnNldEJh
Y2tpbmcoY2FudmFzQmFja2luZyk7CisjZW5kaWYKICAgICBtX2NhbnZhcy5yZXNpemUobV9wYWlu
dFJlY3Quc2l6ZSgpKTsKLQogICAgIC8vIEFzc3VtcHRpb246IGlmIGEgdGlsZXIgaXMgdXNpbmcg
Ym9yZGVyIHRleGVscywgdGhlbiBpdCBpcyBiZWNhdXNlIHRoZQogICAgIC8vIGxheWVyIGlzIGxp
a2VseSB0byBiZSBmaWx0ZXJlZCBvciB0cmFuc2Zvcm1lZC4gQmVjYXVzZSBvZiBpdCBtaWdodCBi
ZQogICAgIC8vIHRyYW5zZm9ybWVkLCBkcmF3IHRoZSB0ZXh0IGluIGdyYXlzY2FsZSBpbnN0ZWFk
IG9mIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6
VGV4dE9wdGlvbiB0ZXh0T3B0aW9uID0gbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpID8gUGxh
dGZvcm1DYW52YXM6OlBhaW50ZXI6OkdyYXlzY2FsZVRleHQgOiBQbGF0Zm9ybUNhbnZhczo6UGFp
bnRlcjo6U3VicGl4ZWxUZXh0OwogICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyIGNhbnZhc1Bh
aW50ZXIoJm1fY2FudmFzLCB0ZXh0T3B0aW9uKTsKLSAgICBjYW52YXNQYWludGVyLmNvbnRleHQo
KS0+dHJhbnNsYXRlKC1tX3BhaW50UmVjdC54KCksIC1tX3BhaW50UmVjdC55KCkpOworICAgIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCA9IGNhbnZhc1BhaW50ZXIuY29udGV4dCgpOworICAgIGNv
bnRleHQtPnRyYW5zbGF0ZSgtbV9wYWludFJlY3QueCgpLCAtbV9wYWludFJlY3QueSgpKTsKICAg
ICB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZTo6cGFp
bnQiLCB0aGlzLCAwKTsKLSAgICAgICAgcGFpbnRlci5wYWludCgqY2FudmFzUGFpbnRlci5jb250
ZXh0KCksIG1fcGFpbnRSZWN0KTsKKyAgICAgICAgcGFpbnRlci5wYWludCgqY29udGV4dCwgbV9w
YWludFJlY3QpOwogICAgIH0KIH0KIAogdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwbG9hZENh
bnZhcygpCiB7CiAgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZtX2NhbnZh
cyk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUaWxlckNocm9taXVtOjp1cGRh
dGVGcm9tUGl4ZWxzIiwgdGhpcywgMCk7Ci0gICAgICAgIHVwZGF0ZUZyb21QaXhlbHMobV91cGRh
dGVSZWN0LCBtX3BhaW50UmVjdCwgbG9ja2VyLnBpeGVscygpKTsKLSAgICB9CisgICAgaWYgKG1f
Y2FudmFzLmJhY2tpbmcoKSA9PSBQbGF0Zm9ybUNhbnZhczo6Qml0bWFwQmFja2luZykKKyAgICAg
ICAgdXBsb2FkUGl4ZWxzKG1fdXBkYXRlUmVjdCwgbV9wYWludFJlY3QsIGxvY2tlci5waXhlbHMo
KSk7CisgICAgZWxzZQorICAgICAgICB1cGxvYWRQaWN0dXJlKG1fdXBkYXRlUmVjdCwgbV9wYWlu
dFJlY3QsIGxvY2tlci5waWN0dXJlKCkpOwogfQogCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
dXBkYXRlRnJvbVBpeGVscyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UmVj
dCYgcGFpbnRSZWN0LCBjb25zdCB1aW50OF90KiBwYWludFBpeGVscykKLXsKLSAgICAvLyBQYWlu
dGluZyBjb3VsZCBjYXVzZSBjb21wb3NpdGluZyB0byBnZXQgdHVybmVkIG9mZiwgd2hpY2ggbWF5
IGNhdXNlIHRoZSB0aWxlciB0byBiZWNvbWUgaW52YWxpZGF0ZWQgbWlkLXVwZGF0ZS4KLSAgICBp
ZiAoIW1fdGlsaW5nRGF0YS50b3RhbFNpemVYKCkgfHwgIW1fdGlsaW5nRGF0YS50b3RhbFNpemVZ
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0g
bGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKLQotICAgIGludCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0
b207Ci0gICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKGNvbnRlbnRSZWN0LCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOwotICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2op
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewotICAgICAg
ICAgICAgVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSkK
LSAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgot
ICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdGlsZUNvbnRlbnRSZWN0KHRpbGUpOwot
ICAgICAgICAgICAgY29uc3QgSW50UG9pbnQgYW5jaG9yID0gc291cmNlUmVjdC5sb2NhdGlvbigp
OwotICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QobGF5ZXJSZWN0VG9Db250ZW50UmVj
dCh0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0KSk7Ci0gICAgICAgICAgICAvLyBQYWludCByZWN0IG5v
dCBndWFyYW50ZWVkIHRvIGxpbmUgdXAgb24gdGlsZSBib3VuZGFyaWVzLCBzbwotICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHRoYXQgc291cmNlUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIG9m
IGl0LgotICAgICAgICAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QocGFpbnRSZWN0KTsKLSAgICAg
ICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzUmVzZXJ2ZWQoKSkgewot
ICAgICAgICAgICAgICAgIGlmICghdGlsZS0+dGV4dHVyZSgpLT5yZXNlcnZlKG1fdGlsZVNpemUs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkgewotICAgICAgICAgICAgICAgICAgICBtX3NraXBz
RHJhdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSB0aWxlLXNwYWNlIHJlY3RhbmdsZSB0byB1cGxvYWQgaW50by4K
LSAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBh
bmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUo
KSk7Ci0gICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKLSAgICAgICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCi0gICAgICAgICAgICAg
ICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xl
IHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KLSAgICAgICAgICAgIEludFBvaW50IHBh
aW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gcGFpbnRSZWN0LngoKSwgc291cmNlUmVjdC55KCkg
LSBwYWludFJlY3QueSgpKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgPCAwKQot
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueSgp
IDwgMCkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zm
c2V0LngoKSArIGRlc3RSZWN0LndpZHRoKCkgPiBwYWludFJlY3Qud2lkdGgoKSkKLSAgICAgICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIGRlc3RS
ZWN0LmhlaWdodCgpID4gcGFpbnRSZWN0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgIENSQVNI
KCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHBpeGVsU291cmNlOwotICAgICAgICAg
ICAgaWYgKHBhaW50UmVjdC53aWR0aCgpID09IHNvdXJjZVJlY3Qud2lkdGgoKSAmJiAhcGFpbnRP
ZmZzZXQueCgpKQotICAgICAgICAgICAgICAgIHBpeGVsU291cmNlID0gJnBhaW50UGl4ZWxzWzQg
KiBwYWludE9mZnNldC55KCkgKiBwYWludFJlY3Qud2lkdGgoKV07Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnkt
cm93IG1lbWNweSBmcm9tIHRoZQotICAgICAgICAgICAgICAgIC8vIHBhaW50IHJlc3VsdHMgaW50
byBhIHRlbXAgYnVmZmVyIGZvciB1cGxvYWRpbmcuCi0gICAgICAgICAgICAgICAgZm9yIChpbnQg
cm93ID0gMDsgcm93IDwgZGVzdFJlY3QuaGVpZ2h0KCk7ICsrcm93KQotICAgICAgICAgICAgICAg
ICAgICBtZW1jcHkoJm1fdGlsZVBpeGVsc1tkZXN0UmVjdC53aWR0aCgpICogNCAqIHJvd10sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFpbnRQaXhlbHNbNCAqIChwYWludE9mZnNldC54
KCkgKyAocGFpbnRPZmZzZXQueSgpICsgcm93KSAqIHBhaW50UmVjdC53aWR0aCgpKV0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC53aWR0aCgpICogNCk7Ci0KLSAgICAgICAg
ICAgICAgICBwaXhlbFNvdXJjZSA9ICZtX3RpbGVQaXhlbHNbMF07Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoKTsKLQotICAgICAgICAg
ICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgPyBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7Ci0g
ICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgZmlsdGVyKSk7Ci0gICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUFHX0ZJTFRFUiwgZmlsdGVyKSk7Ci0KLSAgICAgICAgICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBk
ZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVp
Z2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgcGl4ZWxTb3VyY2UpKTsKLQotICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgp
OwotICAgICAgICB9Cit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBsb2FkUGl4ZWxzKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGNvbnN0IHVp
bnQ4X3QqIHBhaW50UGl4ZWxzKQoreworICAgIFRSQUNFX0VWRU5UKCJMYXllclRpbGVyQ2hyb21p
dW06OnVwbG9hZFBpeGVscyIsIHRoaXMsIDApOworICAgIGlmICghbV9waXhlbFVwbG9hZGVyKSB7
CisgICAgICAgIEdDM0RpbnQgZmlsdGVyID0gbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygpID8g
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwor
ICAgICAgICBtX3BpeGVsVXBsb2FkZXIgPSBuZXcgVGlsZVBpeGVsVXBsb2FkZXIobV90aWxlU2l6
ZSwgZmlsdGVyLCBsYXllclJlbmRlcmVyQ29udGV4dCgpKTsKICAgICB9CisgICAgbV9waXhlbFVw
bG9hZGVyLT5iZWdpblVwbG9hZChwYWludFBpeGVscywgcGFpbnRSZWN0KTsKKyAgICB1cGRhdGVU
ZXh0dXJlcygqbV9waXhlbFVwbG9hZGVyLCBjb250ZW50UmVjdCwgcGFpbnRSZWN0KTsKKyAgICBt
X3BpeGVsVXBsb2FkZXItPmVuZFVwbG9hZCgpOworfQorCit2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6dXBsb2FkUGljdHVyZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UmVj
dCYgcGFpbnRSZWN0LCBjb25zdCBQbGF0Zm9ybUNhbnZhczo6UGljdHVyZSogcGljdHVyZSkKK3sK
KyAgICBUUkFDRV9FVkVOVCgiTGF5ZXJUaWxlckNocm9taXVtOjp1cGxvYWRQaWN0dXJlIiwgdGhp
cywgMCk7CisKKyNpZiBVU0UoU0tJQSkKKyAgICBpZiAoIW1fcGljdHVyZVVwbG9hZGVyKQorICAg
ICAgICBtX3BpY3R1cmVVcGxvYWRlciA9IG5ldyBUaWxlUGljdHVyZVVwbG9hZGVyKG1fdGlsZVNp
emUsIG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBtX2xheWVyUmVuZGVyZXItPnNraWFDb250
ZXh0KCkpOworICAgIG1fcGljdHVyZVVwbG9hZGVyLT5iZWdpblVwbG9hZChwaWN0dXJlLCBwYWlu
dFJlY3QpOworICAgIHVwZGF0ZVRleHR1cmVzKCptX3BpY3R1cmVVcGxvYWRlciwgY29udGVudFJl
Y3QsIHBhaW50UmVjdCk7CisgICAgbV9waWN0dXJlVXBsb2FkZXItPmVuZFVwbG9hZCgpOworI2Vs
c2UKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBDRy4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyNlbmRpZgogfQogCiB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgbGF5ZXJQb3NpdGlvbikKQEAgLTM4MCw4ICszMzIsOSBAQCB2
b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSCiAKICAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAgICAgY29uc3QgTGF5
ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT50aWxl
clByb2dyYW0oKTsKLSAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9n
cmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+
ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwog
CiAgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKICAgICBjb250ZW50UmVjdFRvVGls
ZUluZGljZXMoY29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkBAIC00MDgs
NyArMzYxLDEyIEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFIKICAg
ICAgICAgICAgIGZsb2F0IHRleFRyYW5zbGF0ZVkgPSB0ZXhPZmZzZXQueSgpIC8gdGlsZUhlaWdo
dDsKICAgICAgICAgICAgIGZsb2F0IHRleFNjYWxlWCA9IHRpbGVSZWN0LndpZHRoKCkgLyB0aWxl
V2lkdGg7CiAgICAgICAgICAgICBmbG9hdCB0ZXhTY2FsZVkgPSB0aWxlUmVjdC5oZWlnaHQoKSAv
IHRpbGVIZWlnaHQ7Ci0KKyAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBp
cyBib3R0b20tdXAuCisgICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUgaXMgdG9wLWRvd24s
IHdlIG5lZWQgdG8gZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KKyAgICAgICAgICAgIGlm
ICh0aWxlLT50b3BEb3duKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXhUcmFuc2xhdGVZICs9IDEu
MDsKKyAgICAgICAgICAgICAgICB0ZXhTY2FsZVkgKj0gLTEuMDsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9q
ZWN0aW9uTWF0cml4KCksIHRpbGVNYXRyaXgsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0Lmhl
aWdodCgpLCBvcGFjaXR5LCB0ZXhUcmFuc2xhdGVYLCB0ZXhUcmFuc2xhdGVZLCB0ZXhTY2FsZVgs
IHRleFNjYWxlWSwgcHJvZ3JhbSk7CiAgICAgICAgIH0KICAgICB9CkBAIC00NTEsNiArNDA5LDU3
IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWEKICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMs
IDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCkpOwogfQogCit2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZXMoVGlsZVRleHR1cmVJbnRlcmZhY2UmIHRl
eHR1cmVJbnRlcmZhY2UsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRSZWN0
JiBwYWludFJlY3QpCit7CisgICAgLy8gUGFpbnRpbmcgY291bGQgY2F1c2UgY29tcG9zaXRpbmcg
dG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0aGUgdGlsZXIgdG8gYmVjb21lIGlu
dmFsaWRhdGVkIG1pZC11cGRhdGUuCisgICAgaWYgKCFtX3RpbGluZ0RhdGEudG90YWxTaXplWCgp
IHx8ICFtX3RpbGluZ0RhdGEudG90YWxTaXplWSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIGNvbnRlbnRSZWN0VG9UaWxlSW5kaWNl
cyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICBmb3IgKGludCBq
ID0gdG9wOyBqIDw9IGJvdHRvbTsgKytqKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBsZWZ0OyBp
IDw9IHJpZ2h0OyArK2kpIHsKKyAgICAgICAgICAgIFRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7
CisgICAgICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgdGlsZSA9IGNyZWF0ZVRp
bGUoaSwgaik7CisgICAgICAgICAgICBlbHNlIGlmICghdGlsZS0+ZGlydHkoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2Ug
cmVjdGFuZ2xlIHRvIGNvcHkgZnJvbS4KKyAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9
IHRpbGVDb250ZW50UmVjdCh0aWxlKTsKKyAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hv
ciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJz
ZWN0KGxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOworICAg
ICAgICAgICAgLy8gUGFpbnQgcmVjdCBub3QgZ3VhcmFudGVlZCB0byBsaW5lIHVwIG9uIHRpbGUg
Ym91bmRhcmllcywgc28KKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3Qg
ZG9lc24ndCBleHRlbmQgb3V0c2lkZSBvZiBpdC4KKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50
ZXJzZWN0KHBhaW50UmVjdCk7CisgICAgICAgICAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghdGlsZS0+dGV4
dHVyZSgpLT5pc1Jlc2VydmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRpbGUtPnRleHR1
cmUoKS0+cmVzZXJ2ZShtX3RpbGVTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICByZXNldCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGlsZS1zcGFjZSBy
ZWN0YW5nbGUgdG8gdXBsb2FkIGludG8uCisgICAgICAgICAgICBJbnRSZWN0IGRlc3RSZWN0KElu
dFBvaW50KHNvdXJjZVJlY3QueCgpIC0gYW5jaG9yLngoKSwgc291cmNlUmVjdC55KCkgLSBhbmNo
b3IueSgpKSwgc291cmNlUmVjdC5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKChkZXN0UmVj
dC54KCkgPj0gMCkgJiYgKGRlc3RSZWN0LnkoKSA+PSAwKSk7CisKKyAgICAgICAgICAgIC8vIE9m
ZnNldCBmcm9tIHBhaW50IHJlY3RhbmdsZSB0byB0aGlzIHRpbGUncyBkaXJ0eSByZWN0YW5nbGUu
CisgICAgICAgICAgICBJbnRQb2ludCBwYWludE9mZnNldChzb3VyY2VSZWN0LngoKSAtIHBhaW50
UmVjdC54KCksIHNvdXJjZVJlY3QueSgpIC0gcGFpbnRSZWN0LnkoKSk7CisgICAgICAgICAgICBB
U1NFUlQoKHBhaW50T2Zmc2V0LngoKSA+PSAwKSAmJiAocGFpbnRPZmZzZXQueSgpID49IDApKTsK
KyAgICAgICAgICAgIEFTU0VSVChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpIDw9
IHBhaW50UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChwYWludE9mZnNldC55KCkg
KyBkZXN0UmVjdC5oZWlnaHQoKSA8PSBwYWludFJlY3QuaGVpZ2h0KCkpOworCisgICAgICAgICAg
ICB0ZXh0dXJlSW50ZXJmYWNlLnVwbG9hZCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QsIGRl
c3RSZWN0KTsKKyAgICAgICAgICAgIHRpbGUtPnNldFRvcERvd24odGV4dHVyZUludGVyZmFjZS5v
cmllbnRhdGlvbigpID09IFRpbGVUZXh0dXJlSW50ZXJmYWNlOjpUb3BEb3duT3JpZW50YXRpb24p
OworICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworICAgICAgICB9CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclRpbGVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAkocmV2aXNpb24gODU5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE1IEBACiAjaW5jbHVk
ZSAiUGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworY2xhc3MgVGlsZVBp
eGVsVXBsb2FkZXI7CitjbGFzcyBUaWxlUGljdHVyZVVwbG9hZGVyOworY2xhc3MgVGlsZVRleHR1
cmVJbnRlcmZhY2U7CiAKIGNsYXNzIFRpbGVQYWludEludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC02
OCw3ICs3MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGxvYWRDYW52YXMoKTsKIAogICAgIC8v
IFJlc2VydmUgYW5kIHVwbG9hZCB0aWxlIHRleHR1cmVzIGZyb20gYW4gZXh0ZXJuYWxseSBwYWlu
dGVkIGJ1ZmZlci4KLSAgICB2b2lkIHVwZGF0ZUZyb21QaXhlbHMoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgY29uc3QgdWludDhfdCogcGl4ZWxz
KTsKKyAgICB2b2lkIHVwbG9hZFBpeGVscyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50UmVjdCYgcGFpbnRSZWN0LCBjb25zdCB1aW50OF90KiBwaXhlbHMpOworCisgICAgLy8g
UmVzZXJ2ZSBhbmQgdXBsb2FkIHRpbGUgdGV4dHVyZXMgZnJvbSBhbiBleHRlcm5hbGx5IHBhaW50
ZWQgcGljdHVyZS4KKyAgICB2b2lkIHVwbG9hZFBpY3R1cmUoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgY29uc3QgUGxhdGZvcm1DYW52YXM6OlBp
Y3R1cmUqKTsKIAogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhl
IGNvbnRlbnQgcmVjdC4KICAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CkBAIC05MiwxMCAr
OTcsMTMgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8VGls
ZT4gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlKTsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBtX3Rl
eCh0ZXgpLCBtX2koLTEpLCBtX2ooLTEpIHt9CisgICAgICAgIGV4cGxpY2l0IFRpbGUoUGFzc093
blB0cjxMYXllclRleHR1cmU+IHRleCkgOiBtX3RleCh0ZXgpLCBtX3RvcERvd24oZmFsc2UpLCBt
X2koLTEpLCBtX2ooLTEpIHsgfQogCiAgICAgICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSgpIHsg
cmV0dXJuIG1fdGV4LmdldCgpOyB9CiAKKyAgICAgICAgYm9vbCB0b3BEb3duKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3BEb3duOyB9CisgICAgICAgIHZvaWQgc2V0VG9wRG93bihib29sIGlzVG9wRG93
bikgeyBtX3RvcERvd24gPSBpc1RvcERvd247IH0KKwogICAgICAgICBib29sIGRpcnR5KCkgY29u
c3QgeyByZXR1cm4gIW1fZGlydHlMYXllclJlY3QuaXNFbXB0eSgpOyB9CiAgICAgICAgIHZvaWQg
Y2xlYXJEaXJ0eSgpIHsgbV9kaXJ0eUxheWVyUmVjdCA9IEludFJlY3QoKTsgfQogCkBAIC0xMDcs
NiArMTE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgSW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0Owog
ICAgIHByaXZhdGU6CiAgICAgICAgIE93blB0cjxMYXllclRleHR1cmU+IG1fdGV4OworICAgICAg
ICBib29sIG1fdG9wRG93bjsgLy8gVHJ1ZSBpZiB0ZXh0dXJlIGlzIHRvcC1kb3duLgogICAgICAg
ICBpbnQgbV9pOwogICAgICAgICBpbnQgbV9qOwogICAgIH07CkBAIC0xMzQsNiArMTQzLDkgQEAg
cHJpdmF0ZToKICAgICBJbnRSZWN0IHRpbGVDb250ZW50UmVjdChjb25zdCBUaWxlKikgY29uc3Q7
CiAgICAgSW50UmVjdCB0aWxlTGF5ZXJSZWN0KGNvbnN0IFRpbGUqKSBjb25zdDsKIAorICAgIC8v
IFVwZGF0ZXMgdGV4dHVyZXMgZm9yIGFsbCBkaXJ0eSB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRo
IHBhaW50UmVjdC4KKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVzKFRpbGVUZXh0dXJlSW50ZXJmYWNl
JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCk7
CisKICAgICBJbnRTaXplIG1fdGlsZVNpemU7CiAgICAgSW50UG9pbnQgbV9sYXllclBvc2l0aW9u
OwogCkBAIC0xNjEsOSArMTczLDggQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0
OwogICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwogICAgIFBsYXRmb3JtQ2FudmFzIG1fY2FudmFz
OwotCi0gICAgLy8gQ2FjaGUgYSB0aWxlLXNpemVkIHBpeGVsIGJ1ZmZlciB0byBkcmF3IGludG8u
Ci0gICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV90aWxlUGl4ZWxzOworICAgIE93blB0cjxUaWxl
UGl4ZWxVcGxvYWRlcj4gbV9waXhlbFVwbG9hZGVyOworICAgIE93blB0cjxUaWxlUGljdHVyZVVw
bG9hZGVyPiBtX3BpY3R1cmVVcGxvYWRlcjsKIAogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRh
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0
Zm9ybUNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwCShyZXZpc2lvbiA4NTk3MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTa0Nv
bG9yUHJpdi5oIgorI2luY2x1ZGUgIlNrUGljdHVyZS5oIgogI2luY2x1ZGUgInNraWEvZXh0L3Bs
YXRmb3JtX2NhbnZhcy5oIgogI2VsaWYgVVNFKENHKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0JpdG1hcENvbnRleHQuaD4KQEAgLTQxLDYgKzQyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUGxhdGZvcm1DYW52YXM6OlBsYXRmb3JtQ2FudmFzKCkKKyAgICA6IG1fYmFja2luZyhCaXRt
YXBCYWNraW5nKQogewogfQogCkBAIC00OCwzNCArNTAsNTkgQEAgUGxhdGZvcm1DYW52YXM6On5Q
bGF0Zm9ybUNhbnZhcygpCiB7CiB9CiAKK3ZvaWQgUGxhdGZvcm1DYW52YXM6OnNldEJhY2tpbmco
QmFja2luZyBiYWNraW5nKQoreworICAgIGlmIChiYWNraW5nID09IG1fYmFja2luZykKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgVVNFKENHKQorICAgIGlmIChiYWNraW5nID09IFBpY3R1cmVCYWNr
aW5nKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcGljdHVyZSBiYWNraW5nIGZvciBD
Ry4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBt
X2JhY2tpbmcgPSBiYWNraW5nOworICAgIHJlc2V0KCk7Cit9CisKIHZvaWQgUGxhdGZvcm1DYW52
YXM6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlmIChtX3NpemUgPT0gc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2l6ZSA9IHNpemU7CisgICAgcmVzZXQoKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUNhbnZhczo6cmVzZXQoKQorewogI2lmIFVTRShTS0lBKQotICAgIG1f
c2tpYUNhbnZhcyA9IHNraWE6OkNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksIGZhbHNlKTsKKyAgICBtX3NraWFDYW52YXMuY2xlYXIoKTsKKyAgICBtX3NraWFQ
aWN0dXJlLmNsZWFyKCk7CiAjZWxpZiBVU0UoQ0cpCi0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBz
aXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNDsKLSAgICBtX3BpeGVsRGF0YSA9IGFkb3B0
QXJyYXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOwotICAgIG1lbXNldChtX3BpeGVsRGF0
YS5nZXQoKSwgMCwgYnVmZmVyU2l6ZSk7CisgICAgbV9waXhlbERhdGEuY2xlYXIoKTsKICNlbmRp
ZgogfQogCiBQbGF0Zm9ybUNhbnZhczo6QXV0b0xvY2tlcjo6QXV0b0xvY2tlcihQbGF0Zm9ybUNh
bnZhcyogY2FudmFzKQogICAgIDogbV9jYW52YXMoY2FudmFzKQogICAgICwgbV9waXhlbHMoMCkK
KyAgICAsIG1fcGljdHVyZSgwKQorI2lmIFVTRShTS0lBKQorICAgICwgbV9iaXRtYXAoMCkKKyNl
bmRpZgogewogI2lmIFVTRShTS0lBKQotICAgIGlmIChtX2NhbnZhcy0+bV9za2lhQ2FudmFzKSB7
CisgICAgaWYgKChtX2NhbnZhcy0+YmFja2luZygpID09IEJpdG1hcEJhY2tpbmcpICYmIG1fY2Fu
dmFzLT5tX3NraWFDYW52YXMpIHsKICAgICAgICAgbV9iaXRtYXAgPSAmbV9jYW52YXMtPm1fc2tp
YUNhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7CiAgICAgICAgIG1fYml0
bWFwLT5sb2NrUGl4ZWxzKCk7CiAKICAgICAgICAgaWYgKG1fYml0bWFwLT5jb25maWcoKSA9PSBT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCiAgICAgICAgICAgICBtX3BpeGVscyA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihtX2JpdG1hcC0+Z2V0UGl4ZWxzKCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2JpdG1hcCA9IDA7CisgICAgfSBlbHNlIGlmIChtX2NhbnZhcy0+YmFja2luZygpID09
IFBpY3R1cmVCYWNraW5nKQorICAgICAgICBtX3BpY3R1cmUgPSBtX2NhbnZhcy0+bV9za2lhUGlj
dHVyZS5nZXQoKTsKICNlbGlmIFVTRShDRykKKyAgICBBU1NFUlQoY2FudmFzLT5iYWNraW5nKCkg
PT0gQml0bWFwQmFja2luZyk7CiAgICAgaWYgKGNhbnZhcy0+bV9waXhlbERhdGEpCiAgICAgICAg
IG1fcGl4ZWxzID0gJmNhbnZhcy0+bV9waXhlbERhdGFbMF07CiAjZW5kaWYKQEAgLTg5LDE2ICsx
MTYsMzAgQEAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXI6On5BdXRvTG9ja2VyKAogI2VuZGlm
CiB9CiAKLVBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpQYWludGVyKFBsYXRmb3JtQ2FudmFzKiBj
YW52YXMsIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIG9wdGlvbikKK1BsYXRm
b3JtQ2FudmFzOjpQYWludGVyOjpQYWludGVyKFBsYXRmb3JtQ2FudmFzKiBjYW52YXMsIFBsYXRm
b3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIG9wdGlvbikgOiBtX2NhbnZhcyhjYW52YXMp
CiB7CiAjaWYgVVNFKFNLSUEpCi0gICAgbV9za2lhQ29udGV4dCA9IGFkb3B0UHRyKG5ldyBQbGF0
Zm9ybUNvbnRleHRTa2lhKGNhbnZhcy0+bV9za2lhQ2FudmFzLmdldCgpKSk7Ci0KKyAgICBTa0Nh
bnZhcyogc2tpYUNhbnZhcyA9IDA7CisgICAgaWYgKGNhbnZhcy0+YmFja2luZygpID09IEJpdG1h
cEJhY2tpbmcpIHsKKyAgICAgICAgaWYgKCFjYW52YXMtPm1fc2tpYUNhbnZhcykKKyAgICAgICAg
ICAgIGNhbnZhcy0+bV9za2lhQ2FudmFzID0gc2tpYTo6Q3JlYXRlQml0bWFwQ2FudmFzKGNhbnZh
cy0+c2l6ZSgpLndpZHRoKCksIGNhbnZhcy0+c2l6ZSgpLmhlaWdodCgpLCBmYWxzZSk7CisgICAg
ICAgIHNraWFDYW52YXMgPSBjYW52YXMtPm1fc2tpYUNhbnZhcy5nZXQoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBQaWN0dXJlIGJhY2tpbmcuCisgICAgICAgIGlmICghY2FudmFzLT5tX3Nr
aWFQaWN0dXJlKQorICAgICAgICAgICAgY2FudmFzLT5tX3NraWFQaWN0dXJlID0gbmV3IFNrUGlj
dHVyZTsKKyAgICAgICAgc2tpYUNhbnZhcyA9IGNhbnZhcy0+bV9za2lhUGljdHVyZS0+YmVnaW5S
ZWNvcmRpbmcoY2FudmFzLT5zaXplKCkud2lkdGgoKSwgY2FudmFzLT5zaXplKCkuaGVpZ2h0KCkp
OworICAgIH0KKyAgICBtX3NraWFDb250ZXh0ID0gbmV3IFBsYXRmb3JtQ29udGV4dFNraWEoc2tp
YUNhbnZhcyk7CiAgICAgbV9za2lhQ29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIob3B0
aW9uID09IEdyYXlzY2FsZVRleHQpOwotCiAgICAgbV9jb250ZXh0ID0gYWRvcHRQdHIobmV3IEdy
YXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4o
bV9za2lhQ29udGV4dC5nZXQoKSkpKTsKICNlbGlmIFVTRShDRykKLQorICAgIEFTU0VSVChjYW52
YXMtPmJhY2tpbmcoKSA9PSBCaXRtYXBCYWNraW5nKTsKKyAgICBpZiAoIWNhbnZhcy0+bV9waXhl
bERhdGEpIHsKKyAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBjYW52YXMtPnNpemUoKS53aWR0
aCgpICogY2FudmFzLT5zaXplKCkuaGVpZ2h0KCkgKiA0OworICAgICAgICBjYW52YXMtPm1fcGl4
ZWxEYXRhID0gYWRvcHRBcnJheVB0cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CisgICAgICAg
IG1lbXNldChjYW52YXMtPm1fcGl4ZWxEYXRhLmdldCgpLCAwLCBidWZmZXJTaXplKTsKKyAgICB9
CiAgICAgbV9jb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CiAgICAg
c2l6ZV90IHJvd0J5dGVzID0gY2FudmFzLT5zaXplKCkud2lkdGgoKSAqIDQ7CiAgICAgbV9jb250
ZXh0Q0cgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUoY2FudmFzLT5tX3BpeGVsRGF0YS5nZXQoKSwK
QEAgLTExNSw2ICsxNTYsMTIgQEAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6OlBhaW50ZXIoUGxh
dGZvcgogUGxhdGZvcm1DYW52YXM6OlBhaW50ZXI6On5QYWludGVyKCkKIHsKICAgICBjb250ZXh0
KCktPnJlc3RvcmUoKTsKKyNpZiBVU0UoU0tJQSkKKyAgICBpZiAobV9jYW52YXMtPm1fc2tpYVBp
Y3R1cmUpIHsKKyAgICAgICAgQVNTRVJUKG1fY2FudmFzLT5iYWNraW5nKCkgPT0gUGljdHVyZUJh
Y2tpbmcpOworICAgICAgICBtX2NhbnZhcy0+bV9za2lhUGljdHVyZS0+ZW5kUmVjb3JkaW5nKCk7
CisgICAgfQorI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxh
dGZvcm1DYW52YXMuaAkocmV2aXNpb24gODU5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiAjaWYgVVNFKFNLSUEpCiBjbGFzcyBTa0JpdG1hcDsKIGNsYXNzIFNrQ2Fu
dmFzOworY2xhc3MgU2tQaWN0dXJlOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUxLDE0ICs1MiwyNSBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybUNv
bnRleHRTa2lhOwogI2VuZGlmCiAKLS8vIEEgMkQgYnVmZmVyIG9mIHBpeGVscyB3aXRoIGFuIGFz
c29jaWF0ZWQgR3JhcGhpY3NDb250ZXh0LgorLy8gQSAyRCBjYW52YXMgd2l0aCBhbiBhc3NvY2lh
dGVkIEdyYXBoaWNzQ29udGV4dC4KIGNsYXNzIFBsYXRmb3JtQ2FudmFzIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQbGF0Zm9ybUNhbnZhcyk7CiBwdWJsaWM6CiAgICAgUGxhdGZvcm1DYW52
YXMoKTsKICAgICB+UGxhdGZvcm1DYW52YXMoKTsKIAotICAgIC8vIFNjb3BlZCBsb2NrIGNsYXNz
IHRvIGdldCB0ZW1wb3JhcnkgYWNjZXNzIHRvIHRoaXMgY2FudmFzJ3MgcGl4ZWxzLgorICAgIC8v
IFRoZSB0eXBlIG9mIHN1cmZhY2UgdGhpcyBjYW52YXMgaXMgYmFja2VkIHdpdGguCisgICAgZW51
bSBCYWNraW5nIHsKKyAgICAgICAgQml0bWFwQmFja2luZywKKyAgICAgICAgUGljdHVyZUJhY2tp
bmcgLy8gT2ZmLXNjcmVlbiByZW5kZXJpbmcgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVwZWF0ZWQg
ZHJhd2luZyBvbiBzY3JlZW4uCisgICAgfTsKKyNpZiBVU0UoU0tJQSkKKyAgICB0eXBlZGVmIFNr
UGljdHVyZSBQaWN0dXJlOworI2Vsc2UKKyAgICB0eXBlZGVmIGludCBQaWN0dXJlOworI2VuZGlm
CisKKyAgICAvLyBTY29wZWQgbG9jayBjbGFzcyB0byBnZXQgdGVtcG9yYXJ5IGFjY2VzcyB0byB0
aGlzIGNhbnZhcydzIGJhY2tpbmcuCiAgICAgY2xhc3MgQXV0b0xvY2tlciB7CiAgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEF1dG9Mb2NrZXIpOwogICAgIHB1YmxpYzoKQEAgLTY2LDEyICs3
OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIH5BdXRvTG9ja2VyKCk7CiAKICAgICAgICAgY29uc3Qg
dWludDhfdCogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHM7IH0KKyAgICAgICAgY29u
c3QgUGljdHVyZSogcGljdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGljdHVyZTsgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUGxhdGZvcm1DYW52YXMqIG1fY2FudmFzOworICAgICAgICB1aW50
OF90KiBtX3BpeGVsczsKKyAgICAgICAgY29uc3QgUGljdHVyZSogbV9waWN0dXJlOwogI2lmIFVT
RShTS0lBKQogICAgICAgICBjb25zdCBTa0JpdG1hcCogbV9iaXRtYXA7CiAjZW5kaWYKLSAgICAg
ICAgdWludDhfdCogbV9waXhlbHM7CiAgICAgfTsKIAogICAgIC8vIFNjb3BlZCBsb2NrIGNsYXNz
IHRvIGdldCB0ZW1wb3JhcnkgYWNjZXNzIHRvIHBhaW50IGludG8gdGhpcyBjYW52YXMuCkBAIC04
Niw2ICsxMDEsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgcHJpdmF0ZToKKyAgICAg
ICAgUGxhdGZvcm1DYW52YXMqIG1fY2FudmFzOwogICAgICAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBtX2NvbnRleHQ7CiAjaWYgVVNFKFNLSUEpCiAgICAgICAgIE93blB0cjxQbGF0Zm9ybUNv
bnRleHRTa2lhPiBtX3NraWFDb250ZXh0OwpAQCAtOTUsMTYgKzExMSwyMyBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB9OwogCisgICAgdm9pZCBzZXRCYWNraW5nKEJhY2tpbmcpOworICAgIEJhY2tp
bmcgYmFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZzsgfQorCiAgICAgdm9pZCByZXNp
emUoY29uc3QgSW50U2l6ZSYpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQogCiBwcml2YXRlOgorICAgIHZvaWQgcmVzZXQoKTsKKworICAgIEJhY2tpbmcgbV9i
YWNraW5nOworICAgIEludFNpemUgbV9zaXplOwogI2lmIFVTRShTS0lBKQogICAgIE93blB0cjxT
a0NhbnZhcz4gbV9za2lhQ2FudmFzOworICAgIE93blB0cjxTa1BpY3R1cmU+IG1fc2tpYVBpY3R1
cmU7CiAjZWxpZiBVU0UoQ0cpCiAgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV9waXhlbERhdGE7
CiAjZW5kaWYKLSAgICBJbnRTaXplIG1fc2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRl
clN1cmZhY2VDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAkocmV2aXNpb24g
ODU5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAg
dm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKAogICAgIGlmIChtYXNrTGF5
ZXIgJiYgbWFza0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewogICAgICAgICBpZiAoIW1hc2tMYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjb250ZXh0M0QtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgICAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIobWFz
a1Byb2dyYW0tPnByb2dyYW0oKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0
M0QtPnVzZVByb2dyYW0obWFza1Byb2dyYW0tPnByb2dyYW0oKSkpOwogICAgICAgICAgICAgR0xD
KGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCkpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3Jt
MWkobWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsK
ICAgICAgICAgICAgIG1fY29udGVudHNUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwpAQCAtMTI2LDcg
KzEyNiw3IEBAIHZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3U3VyZmFjZSgKICAgICB9
CiAKICAgICBpZiAoIXVzZU1hc2spIHsKLSAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFk
ZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNE
LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogICAgICAgICBtX2NvbnRlbnRzVGV4
dHVyZS0+YmluZFRleHR1cmUoKTsKICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51
bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkp
OwogICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigp
Lm1hdHJpeExvY2F0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCShyZXZpc2lv
biA4NTk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBAIHVuc2ln
bmVkIFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4dHVyZSgKICAgICBHTEMobV9jb250ZXh0Lmdl
dCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpKTsKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsK
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNh
ZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCAwLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCkpOwogICAgIFRleHR1cmVJbmZvIGluZm87
CiAgICAgaW5mby5zaXplID0gc2l6ZTsKICAgICBpbmZvLmZvcm1hdCA9IGZvcm1hdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVQaWN0dXJlVXBs
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVQaWN0dXJlVXBsb2FkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZVBpY3R1cmVVcGxvYWRlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJU
aWxlUGljdHVyZVVwbG9hZGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorCisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAiR3JD
b250ZXh0LmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5o
IgorI2luY2x1ZGUgIlNrR3B1RGV2aWNlRmFjdG9yeS5oIgorI2VuZGlmIC8vIFVTRShTS0lBKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoU0tJQSkKK1RpbGVQaWN0dXJlVXBsb2Fk
ZXI6OlRpbGVQaWN0dXJlVXBsb2FkZXIoY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBHckNvbnRleHQqIHNraWFDb250ZXh0KQorICAgIDogbV90aWxl
U2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9za2lhQ29u
dGV4dChza2lhQ29udGV4dCkKKyAgICAsIG1fZmJvKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIo
MCkKKyAgICAsIG1fcGljdHVyZSgwKQoreworICAgIGNyZWF0ZUZyYW1lQnVmZmVyKCk7Cit9CisK
K1RpbGVQaWN0dXJlVXBsb2FkZXI6On5UaWxlUGljdHVyZVVwbG9hZGVyKCkKK3sKKyAgICBtX2Nh
bnZhcy5jbGVhcigpOworCisgICAgaWYgKG1fc3RlbmNpbEJ1ZmZlcikKKyAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9zdGVuY2lsQnVmZmVyKTsKKyAgICBpZiAobV9mYm8p
CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOworfQorCit2b2lk
IFRpbGVQaWN0dXJlVXBsb2FkZXI6OmJlZ2luVXBsb2FkKGNvbnN0IFNrUGljdHVyZSogcGljdHVy
ZSwgY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0KQoreworICAgIG1fcGljdHVyZSA9IHBpY3R1cmU7
CisgICAgbV9wYWludFJlY3QgPSBwYWludFJlY3Q7CisKKyAgICBpZiAobV9mYm8pCisgICAgICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9mYm8pOworfQorCit2b2lkIFRpbGVQaWN0dXJlVXBsb2FkZXI6OmVuZFVwbG9hZCgpCit7
CisgICAgaWYgKG1fZmJvKQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOworfQorCit2b2lkIFRpbGVQaWN0dXJlVXBs
b2FkZXI6OnVwbG9hZChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIGlmICghbV9mYm8pCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEJpbmQgdGV4dHVyZS4KKyAgICB0ZXh0dXJlLT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCgpOworICAgIEFTU0VSVChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpOworCisgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAw
LCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCkpOworICAgIGNsZWFyRnJh
bWVCdWZmZXIoKTsKKworICAgIC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdM
IHN0YXRlLgorICAgIG1fc2tpYUNvbnRleHQtPnJlc2V0Q29udGV4dCgpOworICAgIC8vIE9mZnNl
dCBmcm9tIHNvdXJjZSByZWN0YW5nbGUgdG8gdGhpcyBkZXN0aW5hdGlvbiByZWN0YW5nbGUuCisg
ICAgSW50UG9pbnQgb2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3Vy
Y2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7CisgICAgbV9jYW52YXMtPnNhdmUoKTsKKyAg
ICBtX2NhbnZhcy0+dHJhbnNsYXRlKC1vZmZzZXQueCgpLCAtb2Zmc2V0LnkoKSk7CisgICAgbV9j
YW52YXMtPmRyYXdQaWN0dXJlKGNvbnN0X2Nhc3Q8U2tQaWN0dXJlJj4oKm1fcGljdHVyZSkpOwor
ICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CisgICAgLy8gRmx1c2ggU0tJQSBjb250ZXh0IHNvIHRo
YXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9uIHRoZSB0ZXh0dXJlLgorICAgIG1f
c2tpYUNvbnRleHQtPmZsdXNoKEdyQ29udGV4dDo6a0ZvcmNlQ3VycmVudFJlbmRlclRhcmdldF9G
bHVzaEJpdCk7CisKKyAgICAvLyBVbmJpbmQgdGV4dHVyZS4KKyAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgMCk7Cit9CisKK2Jvb2wgVGlsZVBpY3R1cmVVcGxvYWRlcjo6Y3JlYXRlRnJhbWVCdWZm
ZXIoKQoreworICAgIC8vIFNLSUEgbmVlZHMgc3RlbmNpbCBidWZmZXIgZm9yIHBhdGggcmVuZGVy
aW5nLgorICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBhdmFpbGFibGUuCisgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgY29udGV4dEF0dHJpYnMgPSBtX2NvbnRleHQtPmdldENvbnRleHRB
dHRyaWJ1dGVzKCk7CisgICAgaWYgKCFjb250ZXh0QXR0cmlicy5zdGVuY2lsKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYW5kIGJpbmQgYSBmcmFtZS1idWZmZXItb2Jq
ZWN0LgorICAgIG1fZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGlm
ICghbV9mYm8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKworICAgIC8v
IFdlIGp1c3QgbmVlZCB0byBjcmVhdGUgYSBzdGVuY2lsIGJ1ZmZlciBmb3IgRkJPLgorICAgIC8v
IFRoZSBjb2xvciBidWZmZXIgKHRleHR1cmUpIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGlsZXMuCisg
ICAgLy8gU0tJQSBkb2VzIG5vdCBuZWVkIGRlcHRoIGJ1ZmZlci4KKyAgICBtX3N0ZW5jaWxCdWZm
ZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIGlmICghbV9zdGVuY2ls
QnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOwor
ICAgICAgICBtX2ZibyA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9j
b250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0lOREVYOCwgbV90aWxlU2l6ZS53aWR0aCgpLCBtX3RpbGVTaXplLmhlaWdodCgpKTsKKyAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKworICAgIC8vIENyZWF0
ZSBhIHNraWEgZ3B1IGNhbnZhcy4KKyAgICBHclBsYXRmb3JtU3VyZmFjZURlc2MgdGFyZ2V0RGVz
YzsKKyAgICB0YXJnZXREZXNjLnJlc2V0KCk7CisgICAgdGFyZ2V0RGVzYy5mU3VyZmFjZVR5cGUg
PSBrUmVuZGVyVGFyZ2V0X0dyUGxhdGZvcm1TdXJmYWNlVHlwZTsKKyAgICB0YXJnZXREZXNjLmZS
ZW5kZXJUYXJnZXRGbGFncyA9IGtOb25lX0dyUGxhdGZvcm1SZW5kZXJUYXJnZXRGbGFnQml0Owor
ICAgIHRhcmdldERlc2MuZldpZHRoID0gbV90aWxlU2l6ZS53aWR0aCgpOworICAgIHRhcmdldERl
c2MuZkhlaWdodCA9IG1fdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgdGFyZ2V0RGVzYy5mQ29uZmln
ID0ga1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOworICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRz
ID0gODsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOworICAg
IFNrQXV0b1RVbnJlZjxHclJlbmRlclRhcmdldD4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyUmVuZGVy
VGFyZ2V0Kj4obV9za2lhQ29udGV4dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2Mp
KSk7CisgICAgU2tBdXRvVFVucmVmPFNrRGV2aWNlRmFjdG9yeT4gZmFjdG9yeShuZXcgU2tHcHVE
ZXZpY2VGYWN0b3J5KG1fc2tpYUNvbnRleHQsIHRhcmdldC5nZXQoKSkpOworICAgIFNrQXV0b1RV
bnJlZjxTa0RldmljZT4gZGV2aWNlKGZhY3RvcnkuZ2V0KCktPm5ld0RldmljZSgwLCBTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIG1fdGlsZVNpemUud2lkdGgoKSwgbV90aWxlU2l6ZS5oZWln
aHQoKSwgZmFsc2UsIGZhbHNlKSk7ICAgICAgICAKKyAgICBtX2NhbnZhcyA9IG5ldyBTa0NhbnZh
cyhmYWN0b3J5LmdldCgpKTsKKyAgICBtX2NhbnZhcy0+c2V0RGV2aWNlKGRldmljZS5nZXQoKSk7
CisKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIDApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRpbGVQaWN0dXJlVXBs
b2FkZXI6OmNsZWFyRnJhbWVCdWZmZXIoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBDbGVh
ciB0byBncmVlbiB0byBtYWtlIGl0IGVhc2llciB0byBzcG90IHVucmVuZGVyZWQgcmVnaW9ucy4K
KyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMSwgMCwgMSk7CisgICAgbV9jb250ZXh0LT5j
bGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOworI2VuZGlmCit9CisjZW5kaWYgLy8gVVNFKFNLSUEp
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlUGljdHVyZVVwbG9hZGVyLmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlUGljdHVyZVVwbG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZVBpY3R1cmVVcGxvYWRl
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZVBpY3R1cmVVcGxvYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIFRpbGVQaWN0dXJlVXBsb2FkZXJfaAorI2RlZmluZSBUaWxlUGlj
dHVyZVVwbG9hZGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGlsZVRleHR1cmVJbnRlcmZhY2UuaCIKKworI2lmIFVT
RShTS0lBKQorY2xhc3MgR3JDb250ZXh0OworY2xhc3MgU2tDYW52YXM7CitjbGFzcyBTa1BpY3R1
cmU7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKKworI2lmIFVTRShTS0lBKQorCitjbGFzcyBUaWxlUGljdHVyZVVwbG9hZGVyIDogcHVi
bGljIFRpbGVUZXh0dXJlSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBUaWxlUGljdHVyZVVwbG9h
ZGVyKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBHcmFwaGljc0NvbnRleHQzRCosIEdyQ29udGV4
dCopOworICAgIHZpcnR1YWwgflRpbGVQaWN0dXJlVXBsb2FkZXIoKTsKKworICAgIHZpcnR1YWwg
T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBUaWxlVGV4dHVyZUludGVyZmFjZTo6
VG9wRG93bk9yaWVudGF0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHVwbG9hZChMYXllclRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CisKKyAgICB2b2lkIGJlZ2luVXBsb2FkKGNvbnN0IFNrUGljdHVyZSosIGNvbnN0IEludFJlY3Qm
IHBhaW50UmVjdCk7CisgICAgdm9pZCBlbmRVcGxvYWQoKTsKKworcHJpdmF0ZToKKyAgICBib29s
IGNyZWF0ZUZyYW1lQnVmZmVyKCk7CisgICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyKCk7CisKKyAg
ICBJbnRTaXplIG1fdGlsZVNpemU7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsK
KyAgICBHckNvbnRleHQqIG1fc2tpYUNvbnRleHQ7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
ZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9zdGVuY2lsQnVmZmVyOworICAgIE93blB0cjxT
a0NhbnZhcz4gbV9jYW52YXM7CisKKyAgICBjb25zdCBTa1BpY3R1cmUqIG1fcGljdHVyZTsKKyAg
ICBJbnRSZWN0IG1fcGFpbnRSZWN0OworfTsKKworI2Vsc2UKKworLy8gRklYTUU6IEltcGxlbWVu
dCBDRyBwYXRoLgorY2xhc3MgVGlsZVBpY3R1cmVVcGxvYWRlciA6IHB1YmxpYyBUaWxlVGV4dHVy
ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgVGlsZVBpY3R1cmVVcGxvYWRlcigpCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgdmlydHVhbCB+VGlsZVBp
Y3R1cmVVcGxvYWRlcigpIHsgfQorCisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpCisgICAgeworICAgICAgICByZXR1cm4gVGlsZVRleHR1cmVJbnRlcmZhY2U6OkJvdHRvbVVw
T3JpZW50YXRpb247CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCB1cGxvYWQoTGF5ZXJUZXh0dXJl
KiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpIHsg
fQorfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlbmRpZiAvLyBUaWxlUGljdHVyZVVwbG9hZGVyX2gK
KwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZVBpY3R1cmVVcGxvYWRlci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVQaXhlbFVwbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlUGl4ZWxVcGxvYWRlci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
UGl4ZWxVcGxvYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIlRpbGVQaXhlbFVwbG9hZGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1RpbGVQaXhlbFVwbG9hZGVyOjpUaWxlUGl4ZWxVcGxvYWRlcihjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgR0MzRGludCBmaWx0ZXIsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
ICAgIDogbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fZmlsdGVyKGZpbHRlcikKKyAgICAs
IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9waXhlbHMoMCkKK3sKKyAgICBtX3RpbGVQaXhl
bHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W21fdGlsZVNpemUud2lkdGgoKSAqIG1fdGls
ZVNpemUuaGVpZ2h0KCkgKiA0XSk7Cit9CisKK3ZvaWQgVGlsZVBpeGVsVXBsb2FkZXI6OmJlZ2lu
VXBsb2FkKGNvbnN0IHVpbnQ4X3QqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0KQor
eworICAgIG1fcGl4ZWxzID0gcGl4ZWxzOworICAgIG1fcGFpbnRSZWN0ID0gcGFpbnRSZWN0Owor
fQorCit2b2lkIFRpbGVQaXhlbFVwbG9hZGVyOjplbmRVcGxvYWQoKQoreworfQorCit2b2lkIFRp
bGVQaXhlbFVwbG9hZGVyOjp1cGxvYWQoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICAvLyBPZmZz
ZXQgZnJvbSBwYWludCByZWN0YW5nbGUgdG8gdGhpcyB0aWxlJ3MgZGlydHkgcmVjdGFuZ2xlLgor
ICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgp
LCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7CisKKyAgICBjb25zdCB1aW50OF90
KiBwaXhlbFNvdXJjZTsKKyAgICBpZiAobV9wYWludFJlY3Qud2lkdGgoKSA9PSBzb3VyY2VSZWN0
LndpZHRoKCkgJiYgIXBhaW50T2Zmc2V0LngoKSkKKyAgICAgICAgcGl4ZWxTb3VyY2UgPSAmbV9w
aXhlbHNbNCAqIHBhaW50T2Zmc2V0LnkoKSAqIG1fcGFpbnRSZWN0LndpZHRoKCldOworICAgIGVs
c2UgeworICAgICAgICAvLyBTdHJpZGVzIG5vdCBlcXVhbCwgc28gZG8gYSByb3ctYnktcm93IG1l
bWNweSBmcm9tIHRoZQorICAgICAgICAvLyBwYWludCByZXN1bHRzIGludG8gYSB0ZW1wIGJ1ZmZl
ciBmb3IgdXBsb2FkaW5nLgorICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkZXN0UmVj
dC5oZWlnaHQoKTsgKytyb3cpCisgICAgICAgICAgICBtZW1jcHkoJm1fdGlsZVBpeGVsc1tkZXN0
UmVjdC53aWR0aCgpICogNCAqIHJvd10sCisgICAgICAgICAgICAgICAgICAgJm1fcGl4ZWxzWzQg
KiAocGFpbnRPZmZzZXQueCgpICsgKHBhaW50T2Zmc2V0LnkoKSArIHJvdykgKiBtX3BhaW50UmVj
dC53aWR0aCgpKV0sCisgICAgICAgICAgICAgICAgICAgZGVzdFJlY3Qud2lkdGgoKSAqIDQpOwor
CisgICAgICAgIHBpeGVsU291cmNlID0gJm1fdGlsZVBpeGVsc1swXTsKKyAgICB9CisKKyAgICB0
ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgbV9maWx0ZXIpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUiwgbV9maWx0ZXIpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RS
ZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVsU291cmNlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZVBpeGVsVXBsb2FkZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVQaXhlbFVwbG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZVBpeGVsVXBsb2FkZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVQ
aXhlbFVwbG9hZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNp
Zm5kZWYgVGlsZVBpeGVsVXBsb2FkZXJfaAorI2RlZmluZSBUaWxlUGl4ZWxVcGxvYWRlcl9oCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJHcmFwaGljc1R5
cGVzM0QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2lu
Y2x1ZGUgIlRpbGVUZXh0dXJlSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisK
K2NsYXNzIFRpbGVQaXhlbFVwbG9hZGVyIDogcHVibGljIFRpbGVUZXh0dXJlSW50ZXJmYWNlIHsK
K3B1YmxpYzoKKyAgICBUaWxlUGl4ZWxVcGxvYWRlcihjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
R0MzRGludCBmaWx0ZXIsIEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdmlydHVhbCB+VGlsZVBp
eGVsVXBsb2FkZXIoKSB7IH0KKworICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24o
KSB7IHJldHVybiBUaWxlVGV4dHVyZUludGVyZmFjZTo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGxvYWQoTGF5ZXJUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCisgICAgdm9pZCBiZWdpblVwbG9h
ZChjb25zdCB1aW50OF90KiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCk7CisgICAg
dm9pZCBlbmRVcGxvYWQoKTsKKworcHJpdmF0ZToKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7Cisg
ICAgR0MzRGludCBtX2ZpbHRlcjsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owor
CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV90aWxlUGl4ZWxzOworCisgICAgY29uc3QgdWlu
dDhfdCogbV9waXhlbHM7CisgICAgSW50UmVjdCBtX3BhaW50UmVjdDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisj
ZW5kaWYgLy8gVGlsZVBpeGVsVXBsb2FkZXJfaAorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlUGl4ZWxVcGxvYWRlci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVUZXh0dXJlSW50ZXJmYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZVRleHR1cmVJbnRlcmZhY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVUZXh0dXJlSW50ZXJmYWNlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgVGlsZVRleHR1cmVJbnRlcmZh
Y2VfaAorI2RlZmluZSBUaWxlVGV4dHVyZUludGVyZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50UmVjdDsK
K2NsYXNzIExheWVyVGV4dHVyZTsKKworY2xhc3MgVGlsZVRleHR1cmVJbnRlcmZhY2UgeworcHVi
bGljOgorICAgIHZpcnR1YWwgflRpbGVUZXh0dXJlSW50ZXJmYWNlKCkgeyB9CisKKyAgICBlbnVt
IE9yaWVudGF0aW9uIHsKKyAgICAgICAgQm90dG9tVXBPcmllbnRhdGlvbiwKKyAgICAgICAgVG9w
RG93bk9yaWVudGF0aW9uCisgICAgfTsKKyAgICAvLyBSZXR1cm5zIHRoZSBvcmllbnRhdGlvbiBv
ZiB0aGUgdGV4dHVyZSB1cGxvYWRlZCBieSB0aGlzIGludGVyZmFjZS4KKyAgICB2aXJ0dWFsIE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgPSAwOworCisgICAgLy8gVXBsb2FkcyByZXNvdXJjZXMg
aW50byBsYXllci10ZXh0dXJlLgorICAgIHZpcnR1YWwgdm9pZCB1cGxvYWQoTGF5ZXJUZXh0dXJl
KiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpID0g
MDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisjZW5kaWYgLy8gVGlsZVRleHR1cmVJbnRlcmZhY2VfaAorCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlVGV4dHVyZUludGVyZmFjZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
ICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAJKHJldmlz
aW9uIDg1OTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBA
IHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmRyYXcoY29uc3QgSW50UmUKICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
dGV4dHVyZUlkKSk7CiAgICAgR0MzRGVudW0gc2ZhY3RvciA9IG1fcHJlbXVsdGlwbGllZEFscGhh
ID8gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSA6IEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEE7
CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwotICAgIGxheWVyUmVuZGVyZXIoKS0+dXNl
U2hhZGVyKHByb2dyYW0tPnByb2dyYW0oKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAw
KSk7CiAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXllclJl
bmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVp
Z2h0KCksIGRyYXdPcGFjaXR5KCksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5
LmNwcAkocmV2aXNpb24gODU5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2
LDcgKzEwNiw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdygpCiAgICAgICAgIFBsYXRm
b3JtQ2FudmFzOjpBdXRvTG9ja2VyIGxvY2tlcigmY2FudmFzKTsKIAogICAgICAgICBtX2h1ZFRl
eHR1cmUtPmJpbmRUZXh0dXJlKCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LmdldCgpLCBjb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgY2FudmFzLnNpemUoKS53aWR0aCgpLCBjYW52YXMuc2l6ZSgpLmhlaWdo
dCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGxvY2tlci5waXhlbHMoKSkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIGNhbnZhcy5zaXplKCkud2lkdGgoKSwgY2FudmFzLnNpemUoKS5oZWln
aHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBsb2NrZXIucGl4ZWxzKCkpKTsKICAgICB9CiAKICAgICAvLyBEcmF3IHRoZSBI
VUQgb250byB0aGUgZGVmYXVsdCByZW5kZXIgc3VyZmFjZS4KQEAgLTExNCw3ICsxMTQsNyBAQCB2
b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoKQogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dy
YW0tPmluaXRpYWxpemVkKCkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogICAgIG1faHVkVGV4dHVyZS0+Ymlu
ZFRleHR1cmUoKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9n
cmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+
ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwogCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAkocmV2aXNp
b24gODU5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMyArMTcwLDE2IEBAIHZv
aWQgQ0NMYXllckltcGw6OmRyYXdEZWJ1Z0JvcmRlcigpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisKICAgICBjb25zdCBMYXllckNocm9taXVt
OjpCb3JkZXJQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5ib3JkZXJQcm9ncmFt
KCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAg
bGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdUcmFuc2Zvcm0oKTsKICAg
ICByZW5kZXJNYXRyaXguc2NhbGUzZChib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQo
KSwgMSk7CiAgICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGxheWVyUmVuZGVyZXIoKS0+cHJv
amVjdGlvbk1hdHJpeCgpICogcmVuZGVyTWF0cml4KTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOworICAgIAogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1h
dHJpeExvY2F0aW9uKCksIGZhbHNlLCAmZ2xNYXRyaXhbMF0sIDEpKTsKIAogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5jb2xvckxv
Y2F0aW9uKCksIGRlYnVnQm9yZGVyQ29sb3IoKS5yZWQoKSAvIDI1NS4wLCBkZWJ1Z0JvcmRlckNv
bG9yKCkuZ3JlZW4oKSAvIDI1NS4wLCBkZWJ1Z0JvcmRlckNvbG9yKCkuYmx1ZSgpIC8gMjU1LjAs
IDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAJKHJldmlzaW9u
IDg1OTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5MYXllckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZv
aWQgQ0NQbHVnaW5MYXllckltcGw6OmRyYXcoY29uc3QgSW50UmUKICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CiAKLSAgICBsYXllclJlbmRl
cmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9j
YXRpb24oKSwgMCkpOwogICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29udGV4
dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJv
dW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHAJKHJldmlzaW9uIDg1OTcwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoY29u
c3QgQ0NWCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUzKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB2VGV4dHVyZS5pZCkpOwogCi0gICAg
bGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIocHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKyAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKIAogICAg
IGZsb2F0IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLnZp
c2libGVTaXplLndpZHRoKCkpIC8geVRleHR1cmUuc2l6ZS53aWR0aCgpOwogICAgIC8vIEFyYml0
cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlk
ZW50aWNhbC4KQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdS
R0JBKGNvbnN0IENDCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlLmlkKSk7CiAK
LSAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihwcm9ncmFtLT5wcm9ncmFtKCkpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwog
ICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS52
aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUuc2l6ZS53aWR0aCgpOwogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNm
b3JtTG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3RvciwgMSkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODU5NzApCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA1
LTA2ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBza2lhIGdwdSByZW5k
ZXJpbmcgZm9yIGNvbnRlbnQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01Njc0OQorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKToKKwogMjAxMS0wNS0w
NiAgSm9obiBBYmQtRWwtTWFsZWsgIDxqYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gODU5NzApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0ODksNiArMjQ4OSw3
IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKCkKICAgICBodWQtPnNldFNob3dGUFND
b3VudGVyKHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOwogICAgIGh1ZC0+c2V0U2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKIAor
ICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChtX3BhZ2Ut
PnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CiAgICAgbV9sYXllclJl
bmRlcmVyLT51cGRhdGVBbmREcmF3TGF5ZXJzKCk7CiB9CiAK
</data>
<flag name="review"
          id="85626"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94280</attachid>
            <date>2011-05-20 15:33:26 -0700</date>
            <delta_ts>2011-05-23 09:45:36 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>56749.patch</filename>
            <type>text/plain</type>
            <size>23079</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDUtMjAgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGdwdSBhY2NlbGVyYXRlZCByZW5k
ZXJpbmcgZm9yIGNvbnRlbnQgYW5kIHJvb3QgbGF5ZXJzLgorICAgICAgICBMYXllciB0ZXh0dXJl
cyBhcmUgdXBkYXRlZCBpbiB0d28gc3RhZ2VzOgorICAgICAgICAxLiBQYWludDogVGhlIG5vbi1h
Y2NlbGVyYXRlZCBwYXRoIHBhaW50cyB0aGUgbGF5ZXIgY29udGVudHMgaW50byBhIGJpdG1hcC4K
KyAgICAgICAgICAgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBwYXRoIHBhaW50cyBpbnRvIGFuIFNr
UGljdHVyZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBkaXNwbGF5IGxpc3QuCisgICAgICAgIDIu
IFVwbG9hZDogVGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRoIHVwbG9hZHMgdGhlIHBpeGVscyBvYnRh
aW5lZCBpbiB0aGUgZmlyc3Qgc3RhZ2UgdG8gYSB0ZXh0dXJlLgorICAgICAgICAgICAgICAgICAg
IFRoZSBhY2NlbGVyYXRlZCBwYXRoIHJlbmRlcnMgdGhlIHBpY3R1cmUgZGlyZWN0bHkgaW50byB0
aGUgdGV4dHVyZS4KKworICAgICAgICBUaGUgYWNjZWxlcmF0ZWQgcGF0aCBjYW4gYmUgZW5hYmxl
ZCBieSAtLWVuYWJsZS1hY2NlbGVyYXRlZC1kcmF3aW5nIGNvbW1hbmQtbGluZSBmbGFnIGluIGNo
cm9taXVtLgorICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBhY2NlbGVyYXRl
IHRoZSBDRyBwYXRoIG9uIG1hYy4gV2UgaGF2ZSB0d28gb3B0aW9ucyBoZXJlIC0gdXNlIHNraWEg
b3IgYWNjZWxyYXRlIENHIHBhdGguCisgICAgICAgIEFueSBidWdzIHNob3VsZCBiZSBjYXVnaHQg
YnkgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVy
Q2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVSb290TGF5ZXJUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmFjY2VsZXJhdGVkRHJhd2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6On5MYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmU6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpkZWxldGVGcmFtZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGVG
cmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpjbGVhckZyYW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpvcmllbnRhdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorCiAyMDExLTA1LTIwICBFbnJpY2EgQ2FzdWNj
aSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgS2lsemVy
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gODY5
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw2ICsxMjgsMTEgQEAgdm9p
ZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZQogUGFzc093blB0cjxMYXllclRl
eHR1cmVVcGRhdGVyPiBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIo
KQogewogICAgIE93blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciA9IGFkb3B0UHRy
KG5ldyBDb250ZW50TGF5ZXJQYWludGVyKG1fb3duZXIpKTsKKyNpZiBVU0UoU0tJQSkKKyAgICBp
ZiAobGF5ZXJSZW5kZXJlcigpLT5hY2NlbGVyYXRlZERyYXdpbmcoKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKGxheWVyUmVuZGVyZXJD
b250ZXh0KCksIHBhaW50ZXIucmVsZWFzZSgpLCBsYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0
KCkpKTsKKyAgICBlbHNlCisjZW5kaWYKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXAobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgcGFpbnRlci5yZWxlYXNl
KCksIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA4Njk3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAKICNpbmNsdWRl
ICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2lm
IFVTRShTS0lBKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyQ29udGV4
dC5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dFNraWEuaCIKICNlbGlmIFVTRShDRykKQEAgLTk2LDEyICs5OCwxMiBAQCBzdGF0aWMgYm9v
bCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUCiAKIH0KIAotUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+IGNvbnRlbnRQYWludCkKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJv
b2wgYWNjZWxlcmF0ZWREcmF3aW5nKQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVy
KGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY29udGV4dCwgY29udGVudFBhaW50
KSkpOworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRv
cHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjb250ZXh0LCBjb250ZW50UGFpbnQsIGFj
Y2VsZXJhdGVkRHJhd2luZykpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29t
cG9zaXRpbmcoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwOSw5ICsxMTEsMTEgQEAgUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUgogfQogCiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlbGVyYXRlZERyYXdpbmcpCiAgICAgOiBtX3ZpZXdw
b3J0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkKICAgICAsIG1fcm9vdExheWVyKDAp
CisgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZyhhY2NlbGVyYXRlZERyYXdpbmcpCiAgICAgLCBt
X2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQo
MCkKICAgICAsIG1fY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQpAQCAtMTI3LDggKzEzMSw3IEBA
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm8KICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX21hcF9zdWIi
KTsKICAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
OwogCi0gICAgT3duUHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IHRleHR1cmVVcGRhdGVyID0gYWRv
cHRQdHIobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAobV9jb250ZXh0LmdldCgpLCBjb250
ZW50UGFpbnQsIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKSk7Ci0gICAgbV9yb290TGF5ZXJDb250
ZW50VGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0ZXh0dXJlVXBkYXRl
ci5yZWxlYXNlKCksIEludFNpemUoMjU2LCAyNTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9y
ZGVyVGV4ZWxzKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlciA9IExheWVyVGlsZXJDaHJv
bWl1bTo6Y3JlYXRlKHRoaXMsIGNyZWF0ZVJvb3RMYXllclRleHR1cmVVcGRhdGVyKGNvbnRlbnRQ
YWludCksIEludFNpemUoMjU2LCAyNTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4
ZWxzKTsKICAgICBBU1NFUlQobV9yb290TGF5ZXJDb250ZW50VGlsZXIpOwogCiAgICAgbV9oZWFk
c1VwRGlzcGxheSA9IENDSGVhZHNVcERpc3BsYXk6OmNyZWF0ZSh0aGlzKTsKQEAgLTE0NSw2ICsx
NDgsMjUgQEAgR3JhcGhpY3NDb250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bQogICAgIHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpza2lhQ29udGV4dCgpCit7CisgICAgaWYgKCFtX3NraWFDb250
ZXh0KSB7CisgICAgICAgIFdlYkNvcmU6OkV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVk
KCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKKworICAgICAgICBtX3Nr
aWFDb250ZXh0ID0gYWRvcHRQdHIoR3JDb250ZXh0OjpDcmVhdGVHTFNoYWRlckNvbnRleHQoKSk7
CisgICAgICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUg
Yml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heFRleHR1
cmVDYWNoZUNvdW50ID0gNTEyOworICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVk
IHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAy
NDsKKyAgICAgICAgbV9za2lhQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1
cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgfQorICAgIHJldHVybiBt
X3NraWFDb250ZXh0LmdldCgpOworfQorI2VuZGlmCisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkZWJ1Z0dMQ2FsbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhciog
Y29tbWFuZCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpCiB7CiAgICAgdW5zaWduZWQgbG9u
ZyBlcnJvciA9IGNvbnRleHQtPmdldEVycm9yKCk7CkBAIC0yNjAsNiArMjgyLDE2IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmEKICAgICAgICAgY29weU9mZnNjcmVl
blRleHR1cmVUb0Rpc3BsYXkoKTsKIH0KIAorUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVy
PiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZVJvb3RMYXllclRleHR1cmVVcGRhdGVyKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCit7CisjaWYgVVNFKFNLSUEp
CisgICAgaWYgKGFjY2VsZXJhdGVkRHJhd2luZygpKQorICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoY29udGV4dCgpLCBwYWludGVyLCBza2lh
Q29udGV4dCgpKSk7CisgICAgZWxzZQorI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBM
YXllclRleHR1cmVVcGRhdGVyQml0bWFwKGNvbnRleHQoKSwgcGFpbnRlciwgY29udGV4dFN1cHBv
cnRzTWFwU3ViKCkpKTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzIiwgdGhpcywgMCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gODY5NzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsMTAgQEAKICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lmIFVTRShTS0lBKQorY2xhc3MgR3JDb250ZXh0Owor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsK
QEAgLTY5LDEyICs3MywxNSBAQCBjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKIC8vIENsYXNz
IHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBH
TC4KIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQ
YXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50
UGFpbnQsIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nKTsKIAogICAgIH5MYXllclJlbmRlcmVyQ2hy
b21pdW0oKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAgICAgYm9vbCBj
b250ZXh0U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01h
cFN1YjsgfQorI2lmIFVTRShTS0lBKQorICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKTsKKyNl
bmRpZgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpOwogCkBAIC0xMDEsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNm
ZXJSb290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBvdGhlcik7CiAKICAgICBib29sIGhh
cmR3YXJlQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7
IH0KKyAgICBib29sIGFjY2VsZXJhdGVkRHJhd2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxl
cmF0ZWREcmF3aW5nOyB9IAogCiAgICAgdm9pZCBzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCk7
CiAgICAgYm9vbCBpc0NvbXBvc2l0aW5nT2Zmc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
b3NpdGVPZmZzY3JlZW47IH0KQEAgLTE1MCw3ICsxNTgsOSBAQCBwcml2YXRlOgogICAgIC8vIEZJ
WE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ1ZpZXdJbXBsIHdoZW4gdGhhdCBj
bGFzcyBleGlzdHMuCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsK
IAotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KTsKKyAgICBM
YXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwgYm9vbCBhY2NlbGVyYXRl
ZERyYXdpbmcpOworCisgICAgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVS
b290TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7
CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKQEAgLTE5Myw5ICsyMDMs
OSBAQCBwcml2YXRlOgogICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fcm9vdExheWVy
Q29udGVudFRpbGVyOwogCiAgICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CisgICAgYm9v
bCBtX2FjY2VsZXJhdGVkRHJhd2luZzsKIAogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9j
dXJyZW50UmVuZGVyU3VyZmFjZTsKLQogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZm
ZXJJZDsKICAgICBib29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCkBAIC0yMjIsOCArMjMyLDEx
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk+IG1faGVhZHNVcERpc3Bs
YXk7CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBDaGls
ZENvbnRleHRNYXAgbV9jaGlsZENvbnRleHRzOworI2lmIFVTRShTS0lBKQorICAgIE93blB0cjxH
ckNvbnRleHQ+IG1fc2tpYUNvbnRleHQ7CisjZW5kaWYKIAorICAgIENoaWxkQ29udGV4dE1hcCBt
X2NoaWxkQ29udGV4dHM7CiAgICAgLy8gSWYgdHJ1ZSwgdGhlIGNoaWxkIGNvbnRleHRzIHdlcmUg
Y29waWVkIHRvIHRoZSBjb21wb3NpdG9yIHRleHR1cmUgdGFyZ2V0cwogICAgIC8vIGFuZCB0aGUg
Y29tcG9zaXRvciB3aWxsIG5lZWQgdG8gd2FpdCBvbiB0aGUgcHJvcGVyIGxhdGNoZXMgYmVmb3Jl
IHVzaW5nCiAgICAgLy8gdGhlIHRhcmdldCB0ZXh0dXJlcy4gSWYgZmFsc2UsIHRoZSBjb21wb3Np
dG9yIGlzIHJldXNpbmcgdGhlIHRleHR1cmVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzLmNwcAkocmV2aXNpb24gODY5NzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTQgQEAKICNpbmNsdWRlICJMYXllclRleHR1
cmUuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAKKyNpZiBVU0UoU0tJQSkKKyNpbmNsdWRl
ICJHckNvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVk
ZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2luY2x1ZGUgIlNrR3B1
RGV2aWNlRmFjdG9yeS5oIgorI2VuZGlmIC8vIFVTRShTS0lBKQorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IHBhaW50ZXIpCkBAIC04MSw2ICs4OSwxNDIgQEAgdm9pZCBMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwOjp1cGRhdGVUZQogICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKGxvY2tlci5waXhl
bHMoKSwgY29udGVudFJlY3QoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QsIGNvbnRleHQoKSk7CiB9
CiAKKyNpZiBVU0UoU0tJQSkKK0xheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXJTa1BpY3R1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25Q
dHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIsIEdyQ29udGV4dCogc2tpYUNvbnRleHQp
CisgICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKGNvbnRleHQsIHBhaW50ZXIpCisgICAg
LCBtX3NraWFDb250ZXh0KHNraWFDb250ZXh0KQorICAgICwgbV9jcmVhdGVGcmFtZUJ1ZmZlcihm
YWxzZSkKKyAgICAsIG1fZmJvKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKK3sKK30KKwor
TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmUoKQoreworICAgIGRlbGV0ZUZyYW1lQnVmZmVyKCk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJl
VXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKK3sKKyAgICAv
LyBOZWVkIHRvIHJlY3JlYXRlIEZCTyBpZiB0aWxlLXNpemUgY2hhbmdlZC4KKyAgICAvLyBOb3Rl
IHRoYXQgd2UgY2Fubm90IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgaGVyZSBiZWNhdXNlIHRoaXMg
ZnVuY3Rpb24gZG9lcyBub3QgcnVuIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgLy8gYW5kIGhl
bmNlIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0b3IgY29udGV4dC4KKyAgICBpZiAo
bV9idWZmZXJTaXplICE9IHRpbGVTaXplKSB7CisgICAgICAgIG1fY3JlYXRlRnJhbWVCdWZmZXIg
PSB0cnVlOworICAgICAgICBtX2J1ZmZlclNpemUgPSB0aWxlU2l6ZTsKKyAgICB9CisKKyAgICBT
a0NhbnZhcyogY2FudmFzID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0Lndp
ZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBs
YXRmb3JtQ29udGV4dChjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRl
eHQoJnBsYXRmb3JtQ29udGV4dCk7CisgICAgcGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQs
IGNvbnRlbnRSZWN0KTsKKyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7Cit9CisKK3ZvaWQg
TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6dXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0
dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCkKK3sKKyAgICBpZiAobV9jcmVhdGVGcmFtZUJ1ZmZlcikgeworICAgICAgICBkZWxl
dGVGcmFtZUJ1ZmZlcigpOworICAgICAgICBjcmVhdGVGcmFtZUJ1ZmZlcigpOworICAgICAgICBt
X2NyZWF0ZUZyYW1lQnVmZmVyID0gZmFsc2U7CisgICAgfQorICAgIGlmICghbV9mYm8pCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEJpbmQgdGV4dHVyZS4KKyAgICBjb250ZXh0KCktPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB0
ZXh0dXJlLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCgpOworICAgIEFTU0VSVChjb250ZXh0KCktPmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpOworCisgICAgY29udGV4dCgp
LT52aWV3cG9ydCgwLCAwLCBtX2J1ZmZlclNpemUud2lkdGgoKSwgbV9idWZmZXJTaXplLmhlaWdo
dCgpKTsKKyAgICBjbGVhckZyYW1lQnVmZmVyKCk7CisKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBz
eW5jIGl0cyBpbnRlcm5hbCBHTCBzdGF0ZS4KKyAgICBtX3NraWFDb250ZXh0LT5yZXNldENvbnRl
eHQoKTsKKyAgICAvLyBPZmZzZXQgZnJvbSBzb3VyY2UgcmVjdGFuZ2xlIHRvIHRoaXMgZGVzdGlu
YXRpb24gcmVjdGFuZ2xlLgorICAgIEludFBvaW50IG9mZnNldChzb3VyY2VSZWN0LngoKSAtIGNv
bnRlbnRSZWN0KCkueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGNvbnRlbnRSZWN0KCkueSgpKTsKKyAg
ICBtX2NhbnZhcy0+c2F2ZSgpOworICAgIG1fY2FudmFzLT50cmFuc2xhdGUoLW9mZnNldC54KCks
IC1vZmZzZXQueSgpKTsKKyAgICBtX2NhbnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKKyAg
ICBtX2NhbnZhcy0+cmVzdG9yZSgpOworICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0
IGFsbCB0aGUgcmVuZGVyZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KKyAgICBtX3Nr
aWFDb250ZXh0LT5mbHVzaChHckNvbnRleHQ6OmtGb3JjZUN1cnJlbnRSZW5kZXJUYXJnZXRfRmx1
c2hCaXQpOworCisgICAgLy8gVW5iaW5kIHRleHR1cmUuCisgICAgY29udGV4dCgpLT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDApOworICAgIGNvbnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgMCk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6ZGVsZXRlRnJhbWVCdWZmZXIoKQoreworICAgIG1fY2FudmFzLmNsZWFyKCk7CisKKyAgICBp
ZiAobV9zdGVuY2lsQnVmZmVyKQorICAgICAgICBjb250ZXh0KCktPmRlbGV0ZVJlbmRlcmJ1ZmZl
cihtX3N0ZW5jaWxCdWZmZXIpOworICAgIGlmIChtX2ZibykKKyAgICAgICAgY29udGV4dCgpLT5k
ZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7Cit9CisKK2Jvb2wgTGF5ZXJUZXh0dXJlVXBkYXRlclNr
UGljdHVyZTo6Y3JlYXRlRnJhbWVCdWZmZXIoKQoreworICAgIEFTU0VSVCghbV9mYm8pOworICAg
IEFTU0VSVCghbV9idWZmZXJTaXplLmlzRW1wdHkoKSk7CisKKyAgICAvLyBTS0lBIG5lZWRzIHN0
ZW5jaWwgYnVmZmVyIGZvciBwYXRoIHJlbmRlcmluZy4KKyAgICAvLyBNYWtlIHN1cmUgaXQgaXMg
YXZhaWxhYmxlLgorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGNvbnRleHRBdHRy
aWJzID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIGlmICghY29udGV4
dEF0dHJpYnMuc3RlbmNpbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRl
IGFuZCBiaW5kIGEgZnJhbWUtYnVmZmVyLW9iamVjdC4KKyAgICBtX2ZibyA9IGNvbnRleHQoKS0+
Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBpZiAoIW1fZmJvKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY29udGV4dCgpLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7CisKKyAgICAvLyBXZSBqdXN0IG5lZWQgdG8gY3JlYXRlIGEgc3Rl
bmNpbCBidWZmZXIgZm9yIEZCTy4KKyAgICAvLyBUaGUgY29sb3IgYnVmZmVyICh0ZXh0dXJlKSB3
aWxsIGJlIHByb3ZpZGVkIGJ5IHRpbGVzLgorICAgIC8vIFNLSUEgZG9lcyBub3QgbmVlZCBkZXB0
aCBidWZmZXIuCisgICAgbV9zdGVuY2lsQnVmZmVyID0gY29udGV4dCgpLT5jcmVhdGVSZW5kZXJi
dWZmZXIoKTsKKyAgICBpZiAoIW1fc3RlbmNpbEJ1ZmZlcikgeworICAgICAgICBjb250ZXh0KCkt
PmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKKyAgICAgICAgbV9mYm8gPSAwOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnRleHQoKS0+YmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOworICAgIGNvbnRl
eHQoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fYnVmZmVyU2l6ZS53aWR0aCgp
LCBtX2J1ZmZlclNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS0+ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBt
X3N0ZW5jaWxCdWZmZXIpOworCisgICAgLy8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgorICAg
IEdyUGxhdGZvcm1TdXJmYWNlRGVzYyB0YXJnZXREZXNjOworICAgIHRhcmdldERlc2MucmVzZXQo
KTsKKyAgICB0YXJnZXREZXNjLmZTdXJmYWNlVHlwZSA9IGtSZW5kZXJUYXJnZXRfR3JQbGF0Zm9y
bVN1cmZhY2VUeXBlOworICAgIHRhcmdldERlc2MuZlJlbmRlclRhcmdldEZsYWdzID0ga05vbmVf
R3JQbGF0Zm9ybVJlbmRlclRhcmdldEZsYWdCaXQ7CisgICAgdGFyZ2V0RGVzYy5mV2lkdGggPSBt
X2J1ZmZlclNpemUud2lkdGgoKTsKKyAgICB0YXJnZXREZXNjLmZIZWlnaHQgPSBtX2J1ZmZlclNp
emUuaGVpZ2h0KCk7CisgICAgdGFyZ2V0RGVzYy5mQ29uZmlnID0ga1JHQkFfODg4OF9HclBpeGVs
Q29uZmlnOworICAgIHRhcmdldERlc2MuZlN0ZW5jaWxCaXRzID0gODsKKyAgICB0YXJnZXREZXNj
LmZQbGF0Zm9ybVJlbmRlclRhcmdldCA9IG1fZmJvOworICAgIFNrQXV0b1RVbnJlZjxHclJlbmRl
clRhcmdldD4gdGFyZ2V0KHN0YXRpY19jYXN0PEdyUmVuZGVyVGFyZ2V0Kj4obV9za2lhQ29udGV4
dC0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKHRhcmdldERlc2MpKSk7CisgICAgU2tBdXRvVFVucmVm
PFNrRGV2aWNlRmFjdG9yeT4gZmFjdG9yeShuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KG1fc2tpYUNv
bnRleHQsIHRhcmdldC5nZXQoKSkpOworICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4gZGV2aWNl
KGZhY3RvcnkuZ2V0KCktPm5ld0RldmljZSgwLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcs
IG1fYnVmZmVyU2l6ZS53aWR0aCgpLCBtX2J1ZmZlclNpemUuaGVpZ2h0KCksIGZhbHNlLCBmYWxz
ZSkpOyAgICAgICAgCisgICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZmFjdG9y
eS5nZXQoKSkpOworICAgIG1fY2FudmFzLT5zZXREZXZpY2UoZGV2aWNlLmdldCgpKTsKKworICAg
IGNvbnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNr
UGljdHVyZTo6Y2xlYXJGcmFtZUJ1ZmZlcigpCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIENs
ZWFyIHRvIGdyZWVuIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgdW5yZW5kZXJlZCByZWdpb25z
LgorICAgIGNvbnRleHQoKS0+Y2xlYXJDb2xvcigwLCAxLCAwLCAxKTsKKyAgICBjb250ZXh0KCkt
PmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBTS0lBCisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgJ
KHJldmlzaW9uIDg2OTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MSArMjksMjAgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgi
CiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ2Fu
dmFzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAorI2lmIFVTRShTS0lBKQorI2lu
Y2x1ZGUgIlNrUGljdHVyZS5oIgorCitjbGFzcyBHckNvbnRleHQ7CitjbGFzcyBTa0NhbnZhczsK
K2NsYXNzIFNrUGljdHVyZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOwpAQCAtNjksNiArNzgsMzIgQEAgcHJpdmF0ZToKICAgICBMYXll
clRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAorI2lmIFVTRShTS0lBKQorY2xh
c3MgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzIHsKK3B1YmxpYzoKKyAgICBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKEdy
YXBoaWNzQ29udGV4dDNEKiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIEdyQ29u
dGV4dCopOworICAgIHZpcnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKTsKKwor
ICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1
cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFy
ZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSwgaW50IGJvcmRlclRleGVscyk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVS
ZWN0KExheWVyVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGRlbGV0ZUZyYW1lQnVmZmVyKCk7
CisgICAgYm9vbCBjcmVhdGVGcmFtZUJ1ZmZlcigpOworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZl
cigpOworCisgICAgR3JDb250ZXh0KiBtX3NraWFDb250ZXh0OyAvLyBTS0lBIGdyYXBoaWNzIGNv
bnRleHQuCisKKyAgICBib29sIG1fY3JlYXRlRnJhbWVCdWZmZXI7IC8vIE5lZWQgdG8gY3JlYXRl
IEZCTyBpZiB0cnVlLgorICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52
YXMuCisgICAgSW50U2l6ZSBtX2J1ZmZlclNpemU7IC8vIEZyYW1lIGJ1ZmZlciBzaXplLgorICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9mYm87IC8vIEZyYW1lIGJ1ZmZlciBpZC4KKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fc3RlbmNpbEJ1ZmZlcjsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFz
OyAvLyBHUFUgYWNjZWxlcmF0ZWQgY2FudmFzLgorfTsKKyNlbmRpZiAvLyBTS0lBCisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAjZW5kaWYgLy8gTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGlsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg2OTc2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE4LDYgKzMxOCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRh
dGVSZWN0KCkKICAgICAgICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxpbmdEYXRh
LmJvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29u
dGV4dDNEOjpORUFSRVNUOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOworICAgICAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKSk7CiAKICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZVRl
eHR1cmVSZWN0KHRpbGUtPnRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwogICAgICAg
ICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOwpAQCAtMzM5LDYgKzM0MCw3IEBAIHZvaWQgTGF5ZXJU
aWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFIKICAgICBjb25zdCBMYXllclRpbGVyQ2hyb21p
dW06OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbSgpOwog
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkp
OwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogCiAgICAgaW50
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKICAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMo
Y29udGVudFJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODY5ODgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA1LTIwICBB
bG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBza2lhIGdwdSByZW5kZXJpbmcg
Zm9yIGNvbnRlbnQgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01Njc0OQorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIpOgor
CiAyMDExLTA1LTIwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA4Njk3NikKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3OCw3
ICsyNDc4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvcwogICAg
ICAgICB9CiAKIAotICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZShjb250ZXh0LnJlbGVhc2UoKSwgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6
Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVudFBhaW50
ZXI6OmNyZWF0ZSh0aGlzKSwgbV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdF
bmFibGVkKCkpOwogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgICAgICBt
X2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAgICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwpAQCAtMjUyMiw3
ICsyNTIyLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKICAgICAg
ICAgbmV3Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoCiAgICAgICAgICAgICBn
ZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAvLyBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2Ug
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVybiAwLgotICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpj
cmVhdGUodGhpcykpOworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVu
ZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3
SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcyksIG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKIAogICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxh
eWVyLiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBv
ZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCiAgICAgaWYgKGxheWVyUmVuZGVyZXIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94434</attachid>
            <date>2011-05-23 09:45:36 -0700</date>
            <delta_ts>2011-05-23 13:25:46 -0700</delta_ts>
            <desc>Fixed style errors</desc>
            <filename>accel.patch</filename>
            <type>text/plain</type>
            <size>23067</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MDc0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDUtMjAgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGdwdSBhY2NlbGVyYXRlZCByZW5k
ZXJpbmcgZm9yIGNvbnRlbnQgYW5kIHJvb3QgbGF5ZXJzLgorICAgICAgICBMYXllciB0ZXh0dXJl
cyBhcmUgdXBkYXRlZCBpbiB0d28gc3RhZ2VzOgorICAgICAgICAxLiBQYWludDogVGhlIG5vbi1h
Y2NlbGVyYXRlZCBwYXRoIHBhaW50cyB0aGUgbGF5ZXIgY29udGVudHMgaW50byBhIGJpdG1hcC4K
KyAgICAgICAgICAgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBwYXRoIHBhaW50cyBpbnRvIGFuIFNr
UGljdHVyZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBkaXNwbGF5IGxpc3QuCisgICAgICAgIDIu
IFVwbG9hZDogVGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRoIHVwbG9hZHMgdGhlIHBpeGVscyBvYnRh
aW5lZCBpbiB0aGUgZmlyc3Qgc3RhZ2UgdG8gYSB0ZXh0dXJlLgorICAgICAgICAgICAgICAgICAg
IFRoZSBhY2NlbGVyYXRlZCBwYXRoIHJlbmRlcnMgdGhlIHBpY3R1cmUgZGlyZWN0bHkgaW50byB0
aGUgdGV4dHVyZS4KKworICAgICAgICBUaGUgYWNjZWxlcmF0ZWQgcGF0aCBjYW4gYmUgZW5hYmxl
ZCBieSAtLWVuYWJsZS1hY2NlbGVyYXRlZC1kcmF3aW5nIGNvbW1hbmQtbGluZSBmbGFnIGluIGNo
cm9taXVtLgorICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBhY2NlbGVyYXRl
IHRoZSBDRyBwYXRoIG9uIG1hYy4gV2UgaGF2ZSB0d28gb3B0aW9ucyBoZXJlIC0gdXNlIHNraWEg
b3IgYWNjZWxyYXRlIENHIHBhdGguCisgICAgICAgIEFueSBidWdzIHNob3VsZCBiZSBjYXVnaHQg
YnkgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVy
Q2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVSb290TGF5ZXJUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmFjY2VsZXJhdGVkRHJhd2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6On5MYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmU6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpkZWxldGVGcmFtZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGVG
cmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpjbGVhckZyYW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpvcmllbnRhdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorCiAyMDExLTA1LTIzICBZdXJ5IFNlbWlraGF0
c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZl
bGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lv
biA4NzA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCwxMCBA
QCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlCiBQYXNzT3duUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBk
YXRlcigpCiB7CiAgICAgT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyID0gYWRv
cHRQdHIobmV3IENvbnRlbnRMYXllclBhaW50ZXIobV9vd25lcikpOworI2lmIFVTRShTS0lBKQor
ICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVkRHJhd2luZygpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUobGF5ZXJSZW5k
ZXJlckNvbnRleHQoKSwgcGFpbnRlci5yZWxlYXNlKCksIGxheWVyUmVuZGVyZXIoKS0+c2tpYUNv
bnRleHQoKSkpOworI2VuZGlmCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRleHR1cmVV
cGRhdGVyQml0bWFwKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIHBhaW50ZXIucmVsZWFzZSgpLCBs
YXllclJlbmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gODcwNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBACiAjaW5jbHVkZSAiV2Vi
R0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpZiBVU0Uo
U0tJQSkKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJHckNvbnRleHQuaCIK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRT
a2lhLmgiCiAjZWxpZiBVU0UoQ0cpCkBAIC05NiwxMiArOTgsMTIgQEAgc3RhdGljIGJvb2wgaXNT
Y2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVAogCiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBj
b250ZW50UGFpbnQpCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LCBib29sIGFj
Y2VsZXJhdGVkRHJhd2luZykKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9w
dFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKGNvbnRleHQsIGNvbnRlbnRQYWludCkpKTsK
KyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVm
KG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY29udGV4dCwgY29udGVudFBhaW50LCBhY2NlbGVy
YXRlZERyYXdpbmcpKSk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyLT5oYXJkd2FyZUNvbXBvc2l0
aW5nKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMDksOSArMTExLDExIEBAIFBhc3NSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclIKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IGNvbnRlbnRQYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nKQogICAgIDogbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCiAgICAgLCBtX3Jvb3RMYXllcigwKQorICAg
ICwgbV9hY2NlbGVyYXRlZERyYXdpbmcoYWNjZWxlcmF0ZWREcmF3aW5nKQogICAgICwgbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDApCiAg
ICAgLCBtX2NvbXBvc2l0ZU9mZnNjcmVlbihmYWxzZSkKQEAgLTEyNyw4ICsxMzEsNyBAQCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvCiAgICAgICAgIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAg
ICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKIAot
ICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiB0ZXh0dXJlVXBkYXRlciA9IGFkb3B0UHRy
KG5ldyBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwKG1fY29udGV4dC5nZXQoKSwgY29udGVudFBh
aW50LCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YikpOwotICAgIG1fcm9vdExheWVyQ29udGVudFRp
bGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUodGhpcywgdGV4dHVyZVVwZGF0ZXIucmVs
ZWFzZSgpLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxlckNocm9taXVtOjpOb0JvcmRlclRl
eGVscyk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXllclRpbGVyQ2hyb21pdW06
OmNyZWF0ZSh0aGlzLCBjcmVhdGVSb290TGF5ZXJUZXh0dXJlVXBkYXRlcihjb250ZW50UGFpbnQp
LCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxlckNocm9taXVtOjpOb0JvcmRlclRleGVscyk7
CiAgICAgQVNTRVJUKG1fcm9vdExheWVyQ29udGVudFRpbGVyKTsKIAogICAgIG1faGVhZHNVcERp
c3BsYXkgPSBDQ0hlYWRzVXBEaXNwbGF5OjpjcmVhdGUodGhpcyk7CkBAIC0xNDUsNiArMTQ4LDI1
IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW0KICAgICByZXR1cm4g
bV9jb250ZXh0LmdldCgpOwogfQogCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQoKQoreworICAgIGlmICghbV9za2lhQ29udGV4dCkg
eworICAgICAgICBXZWJDb3JlOjpFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7CisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3Vy
ZUVuYWJsZWQoIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CisKKyAgICAgICAgbV9za2lhQ29u
dGV4dCA9IGFkb3B0UHRyKEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJDb250ZXh0KCkpOworICAg
ICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1h
cC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhUZXh0dXJlQ2Fj
aGVDb3VudCA9IDUxMjsKKyAgICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dh
cmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7Cisg
ICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2Fj
aGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgIH0KKyAgICByZXR1cm4gbV9za2lh
Q29udGV4dC5nZXQoKTsKK30KKyNlbmRpZgorCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1h
bmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKQogewogICAgIHVuc2lnbmVkIGxvbmcgZXJy
b3IgPSBjb250ZXh0LT5nZXRFcnJvcigpOwpAQCAtMjYwLDYgKzI4MiwxNSBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0
dXJlVG9EaXNwbGF5KCk7CiB9CiAKK1Bhc3NPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVSb290TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taXVtPiBwYWludGVyKQoreworI2lmIFVTRShTS0lBKQorICAg
IGlmIChhY2NlbGVyYXRlZERyYXdpbmcoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBM
YXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKGNvbnRleHQoKSwgcGFpbnRlciwgc2tpYUNvbnRl
eHQoKSkpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclRleHR1cmVVcGRh
dGVyQml0bWFwKGNvbnRleHQoKSwgcGFpbnRlciwgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkpKTsK
K30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzIiwgdGhpcywgMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gODcwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNiArNTgsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAj
ZW5kaWYKIAorI2lmIFVTRShTS0lBKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKQEAgLTY5LDEyICs3Mywx
NSBAQCBjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBk
cmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KIGNsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExh
eWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wgYWNj
ZWxlcmF0ZWREcmF3aW5nKTsKIAogICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAogICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAgICAgYm9vbCBjb250ZXh0U3VwcG9ydHNN
YXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsgfQorI2lmIFVT
RShTS0lBKQorICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKTsKKyNlbmRpZgogCiAgICAgdm9p
ZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCkBA
IC0xMDEsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNmZXJSb290TGF5ZXIoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBvdGhlcik7CiAKICAgICBib29sIGhhcmR3YXJlQ29tcG9zaXRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7IH0KKyAgICBib29sIGFj
Y2VsZXJhdGVkRHJhd2luZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWREcmF3aW5nOyB9
IAogCiAgICAgdm9pZCBzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCk7CiAgICAgYm9vbCBpc0Nv
bXBvc2l0aW5nT2Zmc2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW47
IH0KQEAgLTE1MCw3ICsxNTgsOSBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRz
IHRvIGJlIG1vdmVkIHRvIHRoZSBDQ1ZpZXdJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCiAg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKIAotICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KTsKKyAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwgYm9vbCBhY2NlbGVyYXRlZERyYXdpbmcpOworCisg
ICAgUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBjcmVhdGVSb290TGF5ZXJUZXh0dXJl
VXBkYXRlcihQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CiAKICAgICB2b2lkIHVw
ZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQg
dXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKQEAgLTE5Myw5ICsyMDMsOSBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fcm9vdExheWVyQ29udGVudFRpbGVyOwog
CiAgICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7CisgICAgYm9vbCBtX2FjY2VsZXJhdGVk
RHJhd2luZzsKIAogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVyU3Vy
ZmFjZTsKLQogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKICAgICBib29s
IG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCkBAIC0yMjIsOCArMjMyLDExIEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk+IG1faGVhZHNVcERpc3BsYXk7CiAKICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBDaGlsZENvbnRleHRNYXAgbV9j
aGlsZENvbnRleHRzOworI2lmIFVTRShTS0lBKQorICAgIE93blB0cjxHckNvbnRleHQ+IG1fc2tp
YUNvbnRleHQ7CisjZW5kaWYKIAorICAgIENoaWxkQ29udGV4dE1hcCBtX2NoaWxkQ29udGV4dHM7
CiAgICAgLy8gSWYgdHJ1ZSwgdGhlIGNoaWxkIGNvbnRleHRzIHdlcmUgY29waWVkIHRvIHRoZSBj
b21wb3NpdG9yIHRleHR1cmUgdGFyZ2V0cwogICAgIC8vIGFuZCB0aGUgY29tcG9zaXRvciB3aWxs
IG5lZWQgdG8gd2FpdCBvbiB0aGUgcHJvcGVyIGxhdGNoZXMgYmVmb3JlIHVzaW5nCiAgICAgLy8g
dGhlIHRhcmdldCB0ZXh0dXJlcy4gSWYgZmFsc2UsIHRoZSBjb21wb3NpdG9yIGlzIHJldXNpbmcg
dGhlIHRleHR1cmVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2Fu
dmFzLmNwcAkocmV2aXNpb24gODcwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsMTQgQEAKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKICNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCiAKKyNpZiBVU0UoU0tJQSkKKyNpbmNsdWRlICJHckNvbnRleHQuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2tDYW52YXMuaCIK
KyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2luY2x1ZGUgIlNrR3B1RGV2aWNlRmFjdG9yeS5o
IgorI2VuZGlmIC8vIFVTRShTS0lBKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIExheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXM6OkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIp
CkBAIC04MSw2ICs4OSwxNDIgQEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRh
dGVUZQogICAgIG1fdGV4U3ViSW1hZ2UudXBsb2FkKGxvY2tlci5waXhlbHMoKSwgY29udGVudFJl
Y3QoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QsIGNvbnRleHQoKSk7CiB9CiAKKyNpZiBVU0UoU0tJ
QSkKK0xheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1Bp
Y3R1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IHBhaW50ZXIsIEdyQ29udGV4dCogc2tpYUNvbnRleHQpCisgICAgOiBMYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzKGNvbnRleHQsIHBhaW50ZXIpCisgICAgLCBtX3NraWFDb250ZXh0
KHNraWFDb250ZXh0KQorICAgICwgbV9jcmVhdGVGcmFtZUJ1ZmZlcihmYWxzZSkKKyAgICAsIG1f
ZmJvKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKK3sKK30KKworTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZTo6fkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKQoreworICAgIGRl
bGV0ZUZyYW1lQnVmZmVyKCk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykKK3sKKyAgICAvLyBOZWVkIHRvIHJlY3Jl
YXRlIEZCTyBpZiB0aWxlLXNpemUgY2hhbmdlZC4KKyAgICAvLyBOb3RlIHRoYXQgd2UgY2Fubm90
IGNyZWF0ZSB0aGUgZnJhbWVidWZmZXIgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gZG9lcyBu
b3QgcnVuIGluIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgLy8gYW5kIGhlbmNlIGRvZXMgbm90IGhh
dmUgYWNjZXNzIHRvIGNvbXBvc2l0b3IgY29udGV4dC4KKyAgICBpZiAobV9idWZmZXJTaXplICE9
IHRpbGVTaXplKSB7CisgICAgICAgIG1fY3JlYXRlRnJhbWVCdWZmZXIgPSB0cnVlOworICAgICAg
ICBtX2J1ZmZlclNpemUgPSB0aWxlU2l6ZTsKKyAgICB9CisKKyAgICBTa0NhbnZhcyogY2FudmFz
ID0gbV9waWN0dXJlLmJlZ2luUmVjb3JkaW5nKGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRS
ZWN0LmhlaWdodCgpKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dChj
YW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoJnBsYXRmb3JtQ29u
dGV4dCk7CisgICAgcGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGNvbnRlbnRSZWN0KTsK
KyAgICBtX3BpY3R1cmUuZW5kUmVjb3JkaW5nKCk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZTo6dXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAg
ICBpZiAobV9jcmVhdGVGcmFtZUJ1ZmZlcikgeworICAgICAgICBkZWxldGVGcmFtZUJ1ZmZlcigp
OworICAgICAgICBjcmVhdGVGcmFtZUJ1ZmZlcigpOworICAgICAgICBtX2NyZWF0ZUZyYW1lQnVm
ZmVyID0gZmFsc2U7CisgICAgfQorICAgIGlmICghbV9mYm8pCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEJpbmQgdGV4dHVyZS4KKyAgICBjb250ZXh0KCktPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB0ZXh0dXJlLT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCgpOworICAgIEFTU0VSVChjb250ZXh0KCktPmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpOworCisgICAgY29udGV4dCgpLT52aWV3cG9ydCgwLCAw
LCBtX2J1ZmZlclNpemUud2lkdGgoKSwgbV9idWZmZXJTaXplLmhlaWdodCgpKTsKKyAgICBjbGVh
ckZyYW1lQnVmZmVyKCk7CisKKyAgICAvLyBOb3RpZnkgU0tJQSB0byBzeW5jIGl0cyBpbnRlcm5h
bCBHTCBzdGF0ZS4KKyAgICBtX3NraWFDb250ZXh0LT5yZXNldENvbnRleHQoKTsKKyAgICAvLyBP
ZmZzZXQgZnJvbSBzb3VyY2UgcmVjdGFuZ2xlIHRvIHRoaXMgZGVzdGluYXRpb24gcmVjdGFuZ2xl
LgorICAgIEludFBvaW50IG9mZnNldChzb3VyY2VSZWN0LngoKSAtIGNvbnRlbnRSZWN0KCkueCgp
LCBzb3VyY2VSZWN0LnkoKSAtIGNvbnRlbnRSZWN0KCkueSgpKTsKKyAgICBtX2NhbnZhcy0+c2F2
ZSgpOworICAgIG1fY2FudmFzLT50cmFuc2xhdGUoLW9mZnNldC54KCksIC1vZmZzZXQueSgpKTsK
KyAgICBtX2NhbnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKKyAgICBtX2NhbnZhcy0+cmVz
dG9yZSgpOworICAgIC8vIEZsdXNoIFNLSUEgY29udGV4dCBzbyB0aGF0IGFsbCB0aGUgcmVuZGVy
ZWQgc3R1ZmYgYXBwZWFycyBvbiB0aGUgdGV4dHVyZS4KKyAgICBtX3NraWFDb250ZXh0LT5mbHVz
aChHckNvbnRleHQ6OmtGb3JjZUN1cnJlbnRSZW5kZXJUYXJnZXRfRmx1c2hCaXQpOworCisgICAg
Ly8gVW5iaW5kIHRleHR1cmUuCisgICAgY29udGV4dCgpLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgIGNv
bnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
MCk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6ZGVsZXRlRnJhbWVC
dWZmZXIoKQoreworICAgIG1fY2FudmFzLmNsZWFyKCk7CisKKyAgICBpZiAobV9zdGVuY2lsQnVm
ZmVyKQorICAgICAgICBjb250ZXh0KCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX3N0ZW5jaWxCdWZm
ZXIpOworICAgIGlmIChtX2ZibykKKyAgICAgICAgY29udGV4dCgpLT5kZWxldGVGcmFtZWJ1ZmZl
cihtX2Zibyk7Cit9CisKK2Jvb2wgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRl
RnJhbWVCdWZmZXIoKQoreworICAgIEFTU0VSVCghbV9mYm8pOworICAgIEFTU0VSVCghbV9idWZm
ZXJTaXplLmlzRW1wdHkoKSk7CisKKyAgICAvLyBTS0lBIG5lZWRzIHN0ZW5jaWwgYnVmZmVyIGZv
ciBwYXRoIHJlbmRlcmluZy4KKyAgICAvLyBNYWtlIHN1cmUgaXQgaXMgYXZhaWxhYmxlLgorICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGNvbnRleHRBdHRyaWJzID0gY29udGV4dCgp
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIGlmICghY29udGV4dEF0dHJpYnMuc3RlbmNp
bCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGFuZCBiaW5kIGEgZnJh
bWUtYnVmZmVyLW9iamVjdC4KKyAgICBtX2ZibyA9IGNvbnRleHQoKS0+Y3JlYXRlRnJhbWVidWZm
ZXIoKTsKKyAgICBpZiAoIW1fZmJvKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29udGV4
dCgpLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CisKKyAgICAvLyBXZSBqdXN0IG5lZWQgdG8gY3JlYXRlIGEgc3RlbmNpbCBidWZmZXIgZm9y
IEZCTy4KKyAgICAvLyBUaGUgY29sb3IgYnVmZmVyICh0ZXh0dXJlKSB3aWxsIGJlIHByb3ZpZGVk
IGJ5IHRpbGVzLgorICAgIC8vIFNLSUEgZG9lcyBub3QgbmVlZCBkZXB0aCBidWZmZXIuCisgICAg
bV9zdGVuY2lsQnVmZmVyID0gY29udGV4dCgpLT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBp
ZiAoIW1fc3RlbmNpbEJ1ZmZlcikgeworICAgICAgICBjb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVm
ZmVyKG1fZmJvKTsKKyAgICAgICAgbV9mYm8gPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGNvbnRleHQoKS0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOworICAgIGNvbnRleHQoKS0+cmVuZGVyYnVm
ZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fYnVmZmVyU2l6ZS53aWR0aCgpLCBtX2J1ZmZlclNpemUu
aGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRB
Q0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIp
OworCisgICAgLy8gQ3JlYXRlIGEgc2tpYSBncHUgY2FudmFzLgorICAgIEdyUGxhdGZvcm1TdXJm
YWNlRGVzYyB0YXJnZXREZXNjOworICAgIHRhcmdldERlc2MucmVzZXQoKTsKKyAgICB0YXJnZXRE
ZXNjLmZTdXJmYWNlVHlwZSA9IGtSZW5kZXJUYXJnZXRfR3JQbGF0Zm9ybVN1cmZhY2VUeXBlOwor
ICAgIHRhcmdldERlc2MuZlJlbmRlclRhcmdldEZsYWdzID0ga05vbmVfR3JQbGF0Zm9ybVJlbmRl
clRhcmdldEZsYWdCaXQ7CisgICAgdGFyZ2V0RGVzYy5mV2lkdGggPSBtX2J1ZmZlclNpemUud2lk
dGgoKTsKKyAgICB0YXJnZXREZXNjLmZIZWlnaHQgPSBtX2J1ZmZlclNpemUuaGVpZ2h0KCk7Cisg
ICAgdGFyZ2V0RGVzYy5mQ29uZmlnID0ga1JHQkFfODg4OF9HclBpeGVsQ29uZmlnOworICAgIHRh
cmdldERlc2MuZlN0ZW5jaWxCaXRzID0gODsKKyAgICB0YXJnZXREZXNjLmZQbGF0Zm9ybVJlbmRl
clRhcmdldCA9IG1fZmJvOworICAgIFNrQXV0b1RVbnJlZjxHclJlbmRlclRhcmdldD4gdGFyZ2V0
KHN0YXRpY19jYXN0PEdyUmVuZGVyVGFyZ2V0Kj4obV9za2lhQ29udGV4dC0+Y3JlYXRlUGxhdGZv
cm1TdXJmYWNlKHRhcmdldERlc2MpKSk7CisgICAgU2tBdXRvVFVucmVmPFNrRGV2aWNlRmFjdG9y
eT4gZmFjdG9yeShuZXcgU2tHcHVEZXZpY2VGYWN0b3J5KG1fc2tpYUNvbnRleHQsIHRhcmdldC5n
ZXQoKSkpOworICAgIFNrQXV0b1RVbnJlZjxTa0RldmljZT4gZGV2aWNlKGZhY3RvcnkuZ2V0KCkt
Pm5ld0RldmljZSgwLCBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIG1fYnVmZmVyU2l6ZS53
aWR0aCgpLCBtX2J1ZmZlclNpemUuaGVpZ2h0KCksIGZhbHNlLCBmYWxzZSkpOyAgICAgICAgCisg
ICAgbV9jYW52YXMgPSBhZG9wdFB0cihuZXcgU2tDYW52YXMoZmFjdG9yeS5nZXQoKSkpOworICAg
IG1fY2FudmFzLT5zZXREZXZpY2UoZGV2aWNlLmdldCgpKTsKKworICAgIGNvbnRleHQoKS0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y2xlYXJG
cmFtZUJ1ZmZlcigpCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIENsZWFyIHRvIGdyZWVuIHRv
IG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgdW5yZW5kZXJlZCByZWdpb25zLgorICAgIGNvbnRleHQo
KS0+Y2xlYXJDb2xvcigwLCAxLCAwLCAxKTsKKyAgICBjb250ZXh0KCktPmNsZWFyKEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QlVGRkVSX0JJVCk7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBTS0lBCisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgJKHJldmlzaW9uIDg3MDc0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMjAgQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMzRC5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCiAjaW5jbHVkZSAiTGF5
ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAorI2lmIFVTRShTS0lBKQorI2luY2x1ZGUgIlNrUGljdHVy
ZS5oIgorCitjbGFzcyBHckNvbnRleHQ7CitjbGFzcyBTa0NhbnZhczsKK2NsYXNzIFNrUGljdHVy
ZTsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwpAQCAtNjksNiArNzgsMzIgQEAgcHJpdmF0ZToKICAgICBMYXllclRleHR1cmVTdWJJbWFn
ZSBtX3RleFN1YkltYWdlOwogfTsKIAorI2lmIFVTRShTS0lBKQorY2xhc3MgTGF5ZXJUZXh0dXJl
VXBkYXRlclNrUGljdHVyZSA6IHB1YmxpYyBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzIHsKK3B1
YmxpYzoKKyAgICBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKEdyYXBoaWNzQ29udGV4dDNE
KiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4sIEdyQ29udGV4dCopOworICAgIHZp
cnR1YWwgfkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKTsKKworICAgIHZpcnR1YWwgT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BE
b3duT3JpZW50YXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRl
clRleGVscyk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KExheWVyVGV4dHVy
ZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGRlbGV0ZUZyYW1lQnVmZmVyKCk7CisgICAgYm9vbCBjcmVh
dGVGcmFtZUJ1ZmZlcigpOworICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlcigpOworCisgICAgR3JD
b250ZXh0KiBtX3NraWFDb250ZXh0OyAvLyBTS0lBIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICBi
b29sIG1fY3JlYXRlRnJhbWVCdWZmZXI7IC8vIE5lZWQgdG8gY3JlYXRlIEZCTyBpZiB0cnVlLgor
ICAgIFNrUGljdHVyZSBtX3BpY3R1cmU7IC8vIFJlY29yZGluZyBjYW52YXMuCisgICAgSW50U2l6
ZSBtX2J1ZmZlclNpemU7IC8vIEZyYW1lIGJ1ZmZlciBzaXplLgorICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9mYm87IC8vIEZyYW1lIGJ1ZmZlciBpZC4KKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fc3Rl
bmNpbEJ1ZmZlcjsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOyAvLyBHUFUgYWNjZWxl
cmF0ZWQgY2FudmFzLgorfTsKKyNlbmRpZiAvLyBTS0lBCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjZW5kaWYgLy8gTGF5
ZXJUZXh0dXJlVXBkYXRlckNhbnZhc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDg3MDc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4
LDYgKzMxOCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRhdGVSZWN0KCkKICAgICAg
ICAgICAgIGNvbnN0IEdDM0RpbnQgZmlsdGVyID0gbV90aWxpbmdEYXRhLmJvcmRlclRleGVscygp
ID8gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNU
OwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVIsIGZpbHRlcikpOworICAgICAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7
CiAKICAgICAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZVRleHR1cmVSZWN0KHRpbGUt
PnRleHR1cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOwogICAgICAgICAgICAgdGlsZS0+Y2xl
YXJEaXJ0eSgpOwpAQCAtMzM5LDYgKzM0MCw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpk
cmF3KGNvbnN0IEludFIKICAgICBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0qIHBy
b2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbSgpOwogICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVy
TG9jYXRpb24oKSwgMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogCiAgICAgaW50IGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbTsKICAgICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMoY29udGVudFJlY3QsIGxl
ZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gODcwNzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTA1LTIwICBBbG9rIFByaXlhZGFyc2hp
ICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEVuYWJsZSBza2lhIGdwdSByZW5kZXJpbmcgZm9yIGNvbnRlbnQgbGF5
ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Njc0
OQorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIpOgorCiAyMDExLTA1LTIzICBZ
dXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCShyZXZpc2lvbiA4NzA3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3OCw3ICsyNDc4LDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvcwogICAgICAgICB9CiAKIAot
ICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShj
b250ZXh0LnJlbGVhc2UoKSwgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMp
KTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0
aGlzKSwgbV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwog
ICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
QWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAgICAgICAgICAgbV9pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwpAQCAtMjUyMiw3ICsyNTIyLDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKICAgICAgICAgbmV3Q29udGV4
dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoCiAgICAgICAgICAgICBnZXRDb21wb3NpdG9y
Q29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAvLyBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2UgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVybiAwLgotICAgIFJlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNy
ZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykp
OworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShuZXdDb250ZXh0LCBXZWJWaWV3SW1wbENvbnRlbnRQ
YWludGVyOjpjcmVhdGUodGhpcyksIG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZCgpKTsKIAogICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxheWVyLiAgQ2hpbGQg
bGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVMYXll
cnNSZWN1cnNpdmUuCiAgICAgaWYgKGxheWVyUmVuZGVyZXIpIHsK
</data>
<flag name="review"
          id="87730"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94472</attachid>
            <date>2011-05-23 13:25:46 -0700</date>
            <delta_ts>2011-05-23 18:15:39 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>accel.patch</filename>
            <type>text/plain</type>
            <size>23041</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MDg5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDUtMjAgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29u
dGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzQ5CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGdwdSBhY2NlbGVyYXRlZCByZW5k
ZXJpbmcgZm9yIGNvbnRlbnQgYW5kIHJvb3QgbGF5ZXJzLgorICAgICAgICBMYXllciB0ZXh0dXJl
cyBhcmUgdXBkYXRlZCBpbiB0d28gc3RhZ2VzOgorICAgICAgICAxLiBQYWludDogVGhlIG5vbi1h
Y2NlbGVyYXRlZCBwYXRoIHBhaW50cyB0aGUgbGF5ZXIgY29udGVudHMgaW50byBhIGJpdG1hcC4K
KyAgICAgICAgICAgICAgICAgIFRoZSBhY2NlbGVyYXRlZCBwYXRoIHBhaW50cyBpbnRvIGFuIFNr
UGljdHVyZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBkaXNwbGF5IGxpc3QuCisgICAgICAgIDIu
IFVwbG9hZDogVGhlIG5vbi1hY2NlbGVyYXRlZCBwYXRoIHVwbG9hZHMgdGhlIHBpeGVscyBvYnRh
aW5lZCBpbiB0aGUgZmlyc3Qgc3RhZ2UgdG8gYSB0ZXh0dXJlLgorICAgICAgICAgICAgICAgICAg
IFRoZSBhY2NlbGVyYXRlZCBwYXRoIHJlbmRlcnMgdGhlIHBpY3R1cmUgZGlyZWN0bHkgaW50byB0
aGUgdGV4dHVyZS4KKworICAgICAgICBUaGUgYWNjZWxlcmF0ZWQgcGF0aCBjYW4gYmUgZW5hYmxl
ZCBieSAtLWVuYWJsZS1hY2NlbGVyYXRlZC1kcmF3aW5nIGNvbW1hbmQtbGluZSBmbGFnIGluIGNo
cm9taXVtLgorICAgICAgICBOb3RlIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdCBhY2NlbGVyYXRl
IHRoZSBDRyBwYXRoIG9uIG1hYy4gV2UgaGF2ZSB0d28gb3B0aW9ucyBoZXJlIC0gdXNlIHNraWEg
b3IgYWNjZWxyYXRlIENHIHBhdGguCisgICAgICAgIEFueSBidWdzIHNob3VsZCBiZSBjYXVnaHQg
YnkgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVy
Q2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVSb290TGF5ZXJUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmFjY2VsZXJhdGVkRHJhd2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6On5MYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmU6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpkZWxldGVGcmFtZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGVG
cmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpjbGVhckZyYW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpvcmllbnRhdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXcpOgorCiAyMDExLTA1LTIzICBSdWJlbiAgPGNocm9t
aXVtQGh5YnJpZHNvdXJjZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg3MDg5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDEwIEBAIHZvaWQg
Q29udGVudExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGUKIFBhc3NPd25QdHI8TGF5ZXJUZXh0
dXJlVXBkYXRlcj4gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKCkK
IHsKICAgICBPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIgPSBhZG9wdFB0cihu
ZXcgQ29udGVudExheWVyUGFpbnRlcihtX293bmVyKSk7CisjaWYgVVNFKFNLSUEpCisgICAgaWYg
KGxheWVyUmVuZGVyZXIoKS0+YWNjZWxlcmF0ZURyYXdpbmcoKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKGxheWVyUmVuZGVyZXJDb250
ZXh0KCksIHBhaW50ZXIucmVsZWFzZSgpLCBsYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCkp
KTsKKyNlbmRpZgogICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJp
dG1hcChsYXllclJlbmRlcmVyQ29udGV4dCgpLCBwYWludGVyLnJlbGVhc2UoKSwgbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg3MDg5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgIldlYkdMTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaWYgVVNFKFNLSUEpCisj
aW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgog
I2VsaWYgVVNFKENHKQpAQCAtOTYsMTIgKzk4LDEyIEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRy
YW5zbGF0aW9uKGNvbnN0IFQKIAogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBh
aW50KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NP
d25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwgYm9vbCBhY2NlbGVyYXRl
RHJhd2luZykKIHsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcg
TGF5ZXJSZW5kZXJlckNocm9taXVtKGNvbnRleHQsIGNvbnRlbnRQYWludCkpKTsKKyAgICBSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXll
clJlbmRlcmVyQ2hyb21pdW0oY29udGV4dCwgY29udGVudFBhaW50LCBhY2NlbGVyYXRlRHJhd2lu
ZykpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwOSw5ICsxMTEsMTEgQEAgUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IExheWVyUgogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4g
Y29udGVudFBhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhY2NlbGVyYXRlRHJhd2luZykKICAgICA6IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlv
bihJbnRQb2ludCgtMSwgLTEpKQogICAgICwgbV9yb290TGF5ZXIoMCkKKyAgICAsIG1fYWNjZWxl
cmF0ZURyYXdpbmcoYWNjZWxlcmF0ZURyYXdpbmcpCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJm
YWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAgICAsIG1fY29tcG9z
aXRlT2Zmc2NyZWVuKGZhbHNlKQpAQCAtMTI3LDggKzEzMSw3IEBAIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm8KICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX21hcF9zdWIiKTsKICAgICBtX2hhcmR3YXJl
Q29tcG9zaXRpbmcgPSBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwogCi0gICAgT3duUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI+IHRleHR1cmVVcGRhdGVyID0gYWRvcHRQdHIobmV3IExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXAobV9jb250ZXh0LmdldCgpLCBjb250ZW50UGFpbnQsIG1fY29udGV4
dFN1cHBvcnRzTWFwU3ViKSk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXllclRp
bGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCB0ZXh0dXJlVXBkYXRlci5yZWxlYXNlKCksIEludFNp
emUoMjU2LCAyNTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKKyAgICBt
X3Jvb3RMYXllckNvbnRlbnRUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMs
IGNyZWF0ZVJvb3RMYXllclRleHR1cmVVcGRhdGVyKGNvbnRlbnRQYWludCksIEludFNpemUoMjU2
LCAyNTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICBBU1NFUlQo
bV9yb290TGF5ZXJDb250ZW50VGlsZXIpOwogCiAgICAgbV9oZWFkc1VwRGlzcGxheSA9IENDSGVh
ZHNVcERpc3BsYXk6OmNyZWF0ZSh0aGlzKTsKQEAgLTE0NSw2ICsxNDgsMjUgQEAgR3JhcGhpY3ND
b250ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bQogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7CiB9CiAKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpza2lhQ29udGV4dCgpCit7CisgICAgaWYgKCFtX3NraWFDb250ZXh0KSB7CisgICAgICAgIFdl
YkNvcmU6OkV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpOworICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9m
b3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKKworICAgICAgICBtX3NraWFDb250ZXh0ID0gYWRvcHRQ
dHIoR3JDb250ZXh0OjpDcmVhdGVHTFNoYWRlckNvbnRleHQoKSk7CisgICAgICAgIC8vIExpbWl0
IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNh
Y2hlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heFRleHR1cmVDYWNoZUNvdW50ID0gNTEy
OworICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBp
biB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgbV9za2lh
Q29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1cmVDYWNoZUNvdW50LCBtYXhU
ZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgfQorICAgIHJldHVybiBtX3NraWFDb250ZXh0LmdldCgp
OworfQorI2VuZGlmCisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbChH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgY2hhciogY29tbWFuZCwgY29uc3QgY2hh
ciogZmlsZSwgaW50IGxpbmUpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBlcnJvciA9IGNvbnRleHQt
PmdldEVycm9yKCk7CkBAIC0yNjAsNiArMjgyLDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVBbmREcmEKICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXko
KTsKIH0KIAorUGFzc093blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZVJvb3RMYXllclRleHR1cmVVcGRhdGVyKFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+IHBhaW50ZXIpCit7CisjaWYgVVNFKFNLSUEpCisgICAgaWYgKGFjY2VsZXJh
dGVEcmF3aW5nKCkpCisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZShjb250ZXh0KCksIHBhaW50ZXIsIHNraWFDb250ZXh0KCkpKTsKKyNlbmRp
ZgorICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChjb250
ZXh0KCksIHBhaW50ZXIsIGNvbnRleHRTdXBwb3J0c01hcFN1YigpKSk7Cit9CisKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVycyIsIHRoaXMsIDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgJKHJldmlzaW9uIDg3MDg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKKyNpZiBV
U0UoU0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CkBAIC02OSwxMiArNzMsMTUgQEAgY2xhc3MgTGF5
ZXJQYWludGVyQ2hyb21pdW07CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21w
b3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gY29udGVudFBhaW50KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LCBib29sIGFjY2VsZXJhdGVEcmF3aW5n
KTsKIAogICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAogICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KCk7CiAgICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsgfQorI2lmIFVTRShTS0lBKQorICAgIEdy
Q29udGV4dCogc2tpYUNvbnRleHQoKTsKKyNlbmRpZgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9v
dExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCkBAIC0xMDEsNiArMTA4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNmZXJSb290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBvdGhlcik7CiAKICAgICBib29sIGhhcmR3YXJlQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7IH0KKyAgICBib29sIGFjY2VsZXJhdGVEcmF3aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlRHJhd2luZzsgfSAKIAogICAgIHZvaWQgc2V0
Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wpOwogICAgIGJvb2wgaXNDb21wb3NpdGluZ09mZnNjcmVl
bigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVuOyB9CkBAIC0xNTAsNyArMTU4
LDkgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0
aGUgQ0NWaWV3SW1wbCB3aGVuIHRoYXQgY2xhc3MgZXhpc3RzLgogICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gbV9yb290Q0NMYXllckltcGw7CiAKLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+IGNvbnRlbnRQYWludCk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250
ZW50UGFpbnQsIGJvb2wgYWNjZWxlcmF0ZURyYXdpbmcpOworCisgICAgUGFzc093blB0cjxMYXll
clRleHR1cmVVcGRhdGVyPiBjcmVhdGVSb290TGF5ZXJUZXh0dXJlVXBkYXRlcihQYXNzT3duUHRy
PExheWVyUGFpbnRlckNocm9taXVtPik7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29u
dGVudHMoKTsKQEAgLTE5Myw5ICsyMDMsOSBAQCBwcml2YXRlOgogICAgIE93blB0cjxMYXllclRp
bGVyQ2hyb21pdW0+IG1fcm9vdExheWVyQ29udGVudFRpbGVyOwogCiAgICAgYm9vbCBtX2hhcmR3
YXJlQ29tcG9zaXRpbmc7CisgICAgYm9vbCBtX2FjY2VsZXJhdGVEcmF3aW5nOwogCiAgICAgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlOwotCiAgICAgdW5zaWdu
ZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZzY3Jl
ZW47CiAKQEAgLTIyMiw4ICsyMzIsMTEgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q0NIZWFkc1Vw
RGlzcGxheT4gbV9oZWFkc1VwRGlzcGxheTsKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbV9jb250ZXh0OwotICAgIENoaWxkQ29udGV4dE1hcCBtX2NoaWxkQ29udGV4dHM7CisjaWYg
VVNFKFNLSUEpCisgICAgT3duUHRyPEdyQ29udGV4dD4gbV9za2lhQ29udGV4dDsKKyNlbmRpZgog
CisgICAgQ2hpbGRDb250ZXh0TWFwIG1fY2hpbGRDb250ZXh0czsKICAgICAvLyBJZiB0cnVlLCB0
aGUgY2hpbGQgY29udGV4dHMgd2VyZSBjb3BpZWQgdG8gdGhlIGNvbXBvc2l0b3IgdGV4dHVyZSB0
YXJnZXRzCiAgICAgLy8gYW5kIHRoZSBjb21wb3NpdG9yIHdpbGwgbmVlZCB0byB3YWl0IG9uIHRo
ZSBwcm9wZXIgbGF0Y2hlcyBiZWZvcmUgdXNpbmcKICAgICAvLyB0aGUgdGFyZ2V0IHRleHR1cmVz
LiBJZiBmYWxzZSwgdGhlIGNvbXBvc2l0b3IgaXMgcmV1c2luZyB0aGUgdGV4dHVyZXMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCShyZXZpc2lvbiA4
NzA4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxNCBA
QAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKIAor
I2lmIFVTRShTS0lBKQorI2luY2x1ZGUgIkdyQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2luY2x1ZGUgIlNrR3B1RGV2
aWNlLmgiCisjaW5jbHVkZSAiU2tHcHVEZXZpY2VGYWN0b3J5LmgiCisjZW5kaWYgLy8gVVNFKFNL
SUEpCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGFz
c093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKQEAgLTgxLDYgKzg5LDE0MiBA
QCB2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRlCiAgICAgbV90ZXhTdWJJ
bWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgpLCBzb3VyY2VSZWN0LCBk
ZXN0UmVjdCwgY29udGV4dCgpKTsKIH0KIAorI2lmIFVTRShTS0lBKQorTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlciwg
R3JDb250ZXh0KiBza2lhQ29udGV4dCkKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMo
Y29udGV4dCwgcGFpbnRlcikKKyAgICAsIG1fc2tpYUNvbnRleHQoc2tpYUNvbnRleHQpCisgICAg
LCBtX2NyZWF0ZUZyYW1lQnVmZmVyKGZhbHNlKQorICAgICwgbV9mYm8oMCkKKyAgICAsIG1fc3Rl
bmNpbEJ1ZmZlcigwKQoreworfQorCitMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp+TGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSgpCit7CisgICAgZGVsZXRlRnJhbWVCdWZmZXIoKTsK
K30KKwordm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQg
Ym9yZGVyVGV4ZWxzKQoreworICAgIC8vIE5lZWQgdG8gcmVjcmVhdGUgRkJPIGlmIHRpbGUtc2l6
ZSBjaGFuZ2VkLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW5ub3QgY3JlYXRlIHRoZSBmcmFtZWJ1
ZmZlciBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBydW4gaW4gY29tcG9zaXRv
ciB0aHJlYWQKKyAgICAvLyBhbmQgaGVuY2UgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gY29tcG9z
aXRvciBjb250ZXh0LgorICAgIGlmIChtX2J1ZmZlclNpemUgIT0gdGlsZVNpemUpIHsKKyAgICAg
ICAgbV9jcmVhdGVGcmFtZUJ1ZmZlciA9IHRydWU7CisgICAgICAgIG1fYnVmZmVyU2l6ZSA9IHRp
bGVTaXplOworICAgIH0KKworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5S
ZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOworICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7CisgICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKyAgICBwYWludENv
bnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QpOworICAgIG1fcGljdHVyZS5lbmRS
ZWNvcmRpbmcoKTsKK30KKwordm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRh
dGVUZXh0dXJlUmVjdChMYXllclRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIGlmIChtX2NyZWF0ZUZyYW1l
QnVmZmVyKSB7CisgICAgICAgIGRlbGV0ZUZyYW1lQnVmZmVyKCk7CisgICAgICAgIGNyZWF0ZUZy
YW1lQnVmZmVyKCk7CisgICAgICAgIG1fY3JlYXRlRnJhbWVCdWZmZXIgPSBmYWxzZTsKKyAgICB9
CisgICAgaWYgKCFtX2ZibykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQmluZCB0ZXh0dXJl
LgorICAgIGNvbnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOworICAgIHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKCk7Cisg
ICAgQVNTRVJUKGNvbnRleHQoKS0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01Q
TEVURSk7CisKKyAgICBjb250ZXh0KCktPnZpZXdwb3J0KDAsIDAsIG1fYnVmZmVyU2l6ZS53aWR0
aCgpLCBtX2J1ZmZlclNpemUuaGVpZ2h0KCkpOworICAgIGNsZWFyRnJhbWVCdWZmZXIoKTsKKwor
ICAgIC8vIE5vdGlmeSBTS0lBIHRvIHN5bmMgaXRzIGludGVybmFsIEdMIHN0YXRlLgorICAgIG1f
c2tpYUNvbnRleHQtPnJlc2V0Q29udGV4dCgpOworICAgIC8vIE9mZnNldCBmcm9tIHNvdXJjZSBy
ZWN0YW5nbGUgdG8gdGhpcyBkZXN0aW5hdGlvbiByZWN0YW5nbGUuCisgICAgSW50UG9pbnQgb2Zm
c2V0KHNvdXJjZVJlY3QueCgpIC0gY29udGVudFJlY3QoKS54KCksIHNvdXJjZVJlY3QueSgpIC0g
Y29udGVudFJlY3QoKS55KCkpOworICAgIG1fY2FudmFzLT5zYXZlKCk7CisgICAgbV9jYW52YXMt
PnRyYW5zbGF0ZSgtb2Zmc2V0LngoKSwgLW9mZnNldC55KCkpOworICAgIG1fY2FudmFzLT5kcmF3
UGljdHVyZShtX3BpY3R1cmUpOworICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CisgICAgLy8gRmx1
c2ggU0tJQSBjb250ZXh0IHNvIHRoYXQgYWxsIHRoZSByZW5kZXJlZCBzdHVmZiBhcHBlYXJzIG9u
IHRoZSB0ZXh0dXJlLgorICAgIG1fc2tpYUNvbnRleHQtPmZsdXNoKEdyQ29udGV4dDo6a0ZvcmNl
Q3VycmVudFJlbmRlclRhcmdldF9GbHVzaEJpdCk7CisKKyAgICAvLyBVbmJpbmQgdGV4dHVyZS4K
KyAgICBjb250ZXh0KCktPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgY29udGV4dCgpLT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKK30KKwordm9pZCBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpkZWxldGVGcmFtZUJ1ZmZlcigpCit7CisgICAgbV9j
YW52YXMuY2xlYXIoKTsKKworICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgIGNvbnRl
eHQoKS0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgaWYgKG1fZmJv
KQorICAgICAgICBjb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKK30KKworYm9v
bCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGVGcmFtZUJ1ZmZlcigpCit7Cisg
ICAgQVNTRVJUKCFtX2Zibyk7CisgICAgQVNTRVJUKCFtX2J1ZmZlclNpemUuaXNFbXB0eSgpKTsK
KworICAgIC8vIFNLSUEgbmVlZHMgc3RlbmNpbCBidWZmZXIgZm9yIHBhdGggcmVuZGVyaW5nLgor
ICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBhdmFpbGFibGUuCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgY29udGV4dEF0dHJpYnMgPSBjb250ZXh0KCktPmdldENvbnRleHRBdHRyaWJ1
dGVzKCk7CisgICAgaWYgKCFjb250ZXh0QXR0cmlicy5zdGVuY2lsKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYW5kIGJpbmQgYSBmcmFtZS1idWZmZXItb2JqZWN0Lgor
ICAgIG1fZmJvID0gY29udGV4dCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGlmICghbV9m
Ym8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb250ZXh0KCktPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKworICAgIC8vIFdlIGp1
c3QgbmVlZCB0byBjcmVhdGUgYSBzdGVuY2lsIGJ1ZmZlciBmb3IgRkJPLgorICAgIC8vIFRoZSBj
b2xvciBidWZmZXIgKHRleHR1cmUpIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGlsZXMuCisgICAgLy8g
U0tJQSBkb2VzIG5vdCBuZWVkIGRlcHRoIGJ1ZmZlci4KKyAgICBtX3N0ZW5jaWxCdWZmZXIgPSBj
b250ZXh0KCktPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIGlmICghbV9zdGVuY2lsQnVmZmVy
KSB7CisgICAgICAgIGNvbnRleHQoKS0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOworICAgICAg
ICBtX2ZibyA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29udGV4dCgp
LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3Rl
bmNpbEJ1ZmZlcik7CisgICAgY29udGV4dCgpLT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVY
OCwgbV9idWZmZXJTaXplLndpZHRoKCksIG1fYnVmZmVyU2l6ZS5oZWlnaHQoKSk7CisgICAgY29u
dGV4dCgpLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisKKyAgICAvLyBDcmVhdGUg
YSBza2lhIGdwdSBjYW52YXMuCisgICAgR3JQbGF0Zm9ybVN1cmZhY2VEZXNjIHRhcmdldERlc2M7
CisgICAgdGFyZ2V0RGVzYy5yZXNldCgpOworICAgIHRhcmdldERlc2MuZlN1cmZhY2VUeXBlID0g
a1JlbmRlclRhcmdldF9HclBsYXRmb3JtU3VyZmFjZVR5cGU7CisgICAgdGFyZ2V0RGVzYy5mUmVu
ZGVyVGFyZ2V0RmxhZ3MgPSBrTm9uZV9HclBsYXRmb3JtUmVuZGVyVGFyZ2V0RmxhZ0JpdDsKKyAg
ICB0YXJnZXREZXNjLmZXaWR0aCA9IG1fYnVmZmVyU2l6ZS53aWR0aCgpOworICAgIHRhcmdldERl
c2MuZkhlaWdodCA9IG1fYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAgICB0YXJnZXREZXNjLmZDb25m
aWcgPSBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7CisgICAgdGFyZ2V0RGVzYy5mU3RlbmNpbEJp
dHMgPSA4OworICAgIHRhcmdldERlc2MuZlBsYXRmb3JtUmVuZGVyVGFyZ2V0ID0gbV9mYm87Cisg
ICAgU2tBdXRvVFVucmVmPEdyUmVuZGVyVGFyZ2V0PiB0YXJnZXQoc3RhdGljX2Nhc3Q8R3JSZW5k
ZXJUYXJnZXQqPihtX3NraWFDb250ZXh0LT5jcmVhdGVQbGF0Zm9ybVN1cmZhY2UodGFyZ2V0RGVz
YykpKTsKKyAgICBTa0F1dG9UVW5yZWY8U2tEZXZpY2VGYWN0b3J5PiBmYWN0b3J5KG5ldyBTa0dw
dURldmljZUZhY3RvcnkobV9za2lhQ29udGV4dCwgdGFyZ2V0LmdldCgpKSk7CisgICAgU2tBdXRv
VFVucmVmPFNrRGV2aWNlPiBkZXZpY2UoZmFjdG9yeS5nZXQoKS0+bmV3RGV2aWNlKDAsIFNrQml0
bWFwOjprQVJHQl84ODg4X0NvbmZpZywgbV9idWZmZXJTaXplLndpZHRoKCksIG1fYnVmZmVyU2l6
ZS5oZWlnaHQoKSwgZmFsc2UsIGZhbHNlKSk7ICAgICAgICAKKyAgICBtX2NhbnZhcyA9IGFkb3B0
UHRyKG5ldyBTa0NhbnZhcyhmYWN0b3J5LmdldCgpKSk7CisgICAgbV9jYW52YXMtPnNldERldmlj
ZShkZXZpY2UuZ2V0KCkpOworCisgICAgY29udGV4dCgpLT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjbGVhckZyYW1lQnVmZmVyKCkKK3sKKyNp
Zm5kZWYgTkRFQlVHCisgICAgLy8gQ2xlYXIgdG8gZ3JlZW4gdG8gbWFrZSBpdCBlYXNpZXIgdG8g
c3BvdCB1bnJlbmRlcmVkIHJlZ2lvbnMuCisgICAgY29udGV4dCgpLT5jbGVhckNvbG9yKDAsIDEs
IDAsIDEpOworICAgIGNvbnRleHQoKS0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JV
RkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKKyNlbmRp
ZgorfQorI2VuZGlmIC8vIFNLSUEKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXMuaAkocmV2aXNpb24gODcwODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwyMCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1DYW52YXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogCisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAiU2tQaWN0dXJlLmgiCisKK2NsYXNzIEdyQ29u
dGV4dDsKK2NsYXNzIFNrQ2FudmFzOworY2xhc3MgU2tQaWN0dXJlOworI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC02OSw2ICs3OCwz
MiBAQCBwcml2YXRlOgogICAgIExheWVyVGV4dHVyZVN1YkltYWdlIG1fdGV4U3ViSW1hZ2U7CiB9
OwogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDog
cHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgeworcHVibGljOgorICAgIExheWVyVGV4
dHVyZVVwZGF0ZXJTa1BpY3R1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQYXNzT3duUHRyPExheWVy
UGFpbnRlckNocm9taXVtPiwgR3JDb250ZXh0Kik7CisgICAgdmlydHVhbCB+TGF5ZXJUZXh0dXJl
VXBkYXRlclNrUGljdHVyZSgpOworCisgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIHsgcmV0dXJuIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbjsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoTGF5ZXJUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAgIHZv
aWQgZGVsZXRlRnJhbWVCdWZmZXIoKTsKKyAgICBib29sIGNyZWF0ZUZyYW1lQnVmZmVyKCk7Cisg
ICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyKCk7CisKKyAgICBHckNvbnRleHQqIG1fc2tpYUNvbnRl
eHQ7IC8vIFNLSUEgZ3JhcGhpY3MgY29udGV4dC4KKworICAgIGJvb2wgbV9jcmVhdGVGcmFtZUJ1
ZmZlcjsgLy8gTmVlZCB0byBjcmVhdGUgRkJPIGlmIHRydWUuCisgICAgU2tQaWN0dXJlIG1fcGlj
dHVyZTsgLy8gUmVjb3JkaW5nIGNhbnZhcy4KKyAgICBJbnRTaXplIG1fYnVmZmVyU2l6ZTsgLy8g
RnJhbWUgYnVmZmVyIHNpemUuCisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsgLy8gRnJhbWUg
YnVmZmVyIGlkLgorICAgIFBsYXRmb3JtM0RPYmplY3QgbV9zdGVuY2lsQnVmZmVyOworICAgIE93
blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7IC8vIEdQVSBhY2NlbGVyYXRlZCBjYW52YXMuCit9Owor
I2VuZGlmIC8vIFNLSUEKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICNlbmRpZiAvLyBMYXllclRleHR1cmVVcGRhdGVyQ2Fu
dmFzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGlsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkocmV2aXNpb24gODcw
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNiArMzE4LDcgQEAgdm9pZCBM
YXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZVJlY3QoKQogICAgICAgICAgICAgY29uc3QgR0MzRGlu
dCBmaWx0ZXIgPSBtX3RpbGluZ0RhdGEuYm9yZGVyVGV4ZWxzKCkgPyBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q7CiAgICAgICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgZmlsdGVyKSk7CiAg
ICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgZmlsdGVyKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApKTsKIAogICAgICAgICAgICAgbV90
ZXh0dXJlVXBkYXRlci0+dXBkYXRlVGV4dHVyZVJlY3QodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VS
ZWN0LCBkZXN0UmVjdCk7CiAgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CkBAIC0zMzks
NiArMzQwLDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UgogICAg
IGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVy
ZXIoKS0+dGlsZXJQcm9ncmFtKCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dy
YW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKSk7CiAKICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwogICAgIGNv
bnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhjb250ZW50UmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90
dG9tKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzA4OSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDUtMjAgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5h
YmxlIHNraWEgZ3B1IHJlbmRlcmluZyBmb3IgY29udGVudCBsYXllcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NzQ5CisKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnJlYWxsb2NhdGVSZW5kZXJlcik6CisKIDIwMTEtMDUtMjMgIFJ1YmVuICA8Y2hyb21pdW1AaHli
cmlkc291cmNlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gODcw
ODkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0NzgsNyArMjQ3OCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNj
ZWxlcmF0ZWRDb21wb3MKICAgICAgICAgfQogCiAKLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0g
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoY29udGV4dC5yZWxlYXNlKCksIFdlYlZpZXdJ
bXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJl
ciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQucmVsZWFzZSgpLCBXZWJW
aWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcyksIG1fcGFnZS0+c2V0dGluZ3MoKS0+
YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
cikgewogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyh0cnVlKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
ID0gdHJ1ZTsKQEAgLTI1MjIsNyArMjUyMiw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2Nh
dGVSZW5kZXJlcigpCiAgICAgICAgIG5ld0NvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlKAogICAgICAgICAgICAgZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFn
ZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyk7CiAgICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1
cm4gMCwgaW4gdGhhdCBjYXNlIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlIHdpbGwgYWxz
byByZXR1cm4gMC4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRl
cmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobmV3Q29udGV4dCwgV2ViVmlld0lt
cGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
bmV3Q29udGV4dCwgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBtX3Bh
Z2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CiAKICAgICAvLyBS
ZWF0dGFjaCB0aGUgcm9vdCBsYXllci4gIENoaWxkIGxheWVycyB3aWxsIGdldCByZWF0dGFjaGVk
IGFzIGEgc2lkZSBlZmZlY3Qgb2YgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlLgogICAgIGlmIChsYXll
clJlbmRlcmVyKSB7Cg==
</data>
<flag name="review"
          id="87780"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>