<?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>27561</bug_id>
          
          <creation_ts>2009-07-22 14:11:33 -0700</creation_ts>
          <short_desc>ImageDecoder enhancements for WINCE port</short_desc>
          <delta_ts>2012-04-17 08:52:44 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>27511</dependson>
    
    <dependson>27543</dependson>
          <blocked>23154</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>manyoso</cc>
    
    <cc>pkasting</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133892</commentid>
    <comment_count>0</comment_count>
      <attachid>33288</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 14:11:33 -0700</bug_when>
    <thetext>Created attachment 33288
this is the patch

1) be able to write output directly to scaled image buffer
2) use ImageFrameSink which supports 16bit, and directly writes to platform image buffer
3) be able to work with segmented SharedBuffer
4) other changes: assign memory allocator to libpng

The patch depends on bug 27543.

It&apos;s currently only for WINCE port, but it can be easily modified to in order be used for other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133893</commentid>
    <comment_count>1</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 14:14:01 -0700</bug_when>
    <thetext>see bug 26467</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133911</commentid>
    <comment_count>2</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-07-22 14:35:47 -0700</bug_when>
    <thetext>A few comments:

* Can you break this into distinct patches for the different pieces here?  This patch is very large and hard to review.

* You don&apos;t include ImageFrameSink.*, so no one can actually compile or use this.

* &quot;#if PLATFORM (WINCE)&quot; and similar all over, especially with &quot;#else &lt;existing code&gt;&quot;, really sucks for readability.  Making this worse is the fact that frequently the two blocks of code are very similar or even share many common parts, and differ only slightly.  A combination of helper functions and subclasses seems like it could do this much more readably.

* goto?  Really?  It doesn&apos;t look necessary at all (a helper function plus a &quot;continue;&quot; would have served just as well).

Overall it seems like these capabilities should be added to the existing code in a way that blends more seamlessly and is usable by any port.  If I can manage to get back to working on Image system cleanup, maybe we can find a way of doing that stepwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133915</commentid>
    <comment_count>3</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-07-22 14:49:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; A few comments:
&gt; 
&gt; * Can you break this into distinct patches for the different pieces here?  This
&gt; patch is very large and hard to review.
&gt; 
&gt; * You don&apos;t include ImageFrameSink.*, so no one can actually compile or use
&gt; this.

   Those are asking the opposite things...  It was broken up to do the sink part separately.
 
&gt; * &quot;#if PLATFORM (WINCE)&quot; and similar all over, especially with &quot;#else &lt;existing
&gt; code&gt;&quot;, really sucks for readability.  Making this worse is the fact that
&gt; frequently the two blocks of code are very similar or even share many common
&gt; parts, and differ only slightly.  A combination of helper functions and
&gt; subclasses seems like it could do this much more readably.
&gt; 
&gt; * goto?  Really?  It doesn&apos;t look necessary at all (a helper function plus a
&gt; &quot;continue;&quot; would have served just as well).
&gt; 
&gt; Overall it seems like these capabilities should be added to the existing code
&gt; in a way that blends more seamlessly and is usable by any port.  If I can
&gt; manage to get back to working on Image system cleanup, maybe we can find a way
&gt; of doing that stepwise.

  I think it needs more cleanup too.  I don&apos;t think we have any intention of making our code potentially less fast for the sake of readability though, and we don&apos;t want to risk breaking anything for others.  There is a balancing act here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133916</commentid>
    <comment_count>4</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 14:50:51 -0700</bug_when>
    <thetext>
(In reply to comment #2)
&gt; A few comments:
&gt; 
&gt; * Can you break this into distinct patches for the different pieces here?  This
&gt; patch is very large and hard to review.

I will do it.

&gt; 
&gt; * You don&apos;t include ImageFrameSink.*, so no one can actually compile or use
&gt; this.

ImageFrameSink.* is in bug 27511, still being under review

&gt; 
&gt; * &quot;#if PLATFORM (WINCE)&quot; and similar all over, especially with &quot;#else &lt;existing
&gt; code&gt;&quot;, really sucks for readability.  Making this worse is the fact that
&gt; frequently the two blocks of code are very similar or even share many common
&gt; parts, and differ only slightly.  A combination of helper functions and
&gt; subclasses seems like it could do this much more readably.

Just don&apos;t want to affect other platforms :)

&gt; 
&gt; * goto?  Really?  It doesn&apos;t look necessary at all (a helper function plus a
&gt; &quot;continue;&quot; would have served just as well).
&gt; 
&gt; Overall it seems like these capabilities should be added to the existing code
&gt; in a way that blends more seamlessly and is usable by any port.  If I can
&gt; manage to get back to working on Image system cleanup, maybe we can find a way
&gt; of doing that stepwise.

I don&apos;t except that this patch can be merged soon. Agree with that more cleanup is necessary to finally merge it up. Just hope that people can see it, and discuss on this topic, and finally dig out a way how to make it more common.

Thanks for your quick response.

-Yong</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133920</commentid>
    <comment_count>5</comment_count>
      <attachid>33292</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 14:57:46 -0700</bug_when>
    <thetext>Created attachment 33292
part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133921</commentid>
    <comment_count>6</comment_count>
      <attachid>33293</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 14:58:21 -0700</bug_when>
    <thetext>Created attachment 33293
part 2 GIF Decoder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133922</commentid>
    <comment_count>7</comment_count>
      <attachid>33294</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 14:58:48 -0700</bug_when>
    <thetext>Created attachment 33294
part 3 JPEG decoder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133924</commentid>
    <comment_count>8</comment_count>
      <attachid>33296</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 14:59:24 -0700</bug_when>
    <thetext>Created attachment 33296
part 4 PNG decoder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133930</commentid>
    <comment_count>9</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-07-22 15:03:12 -0700</bug_when>
    <thetext>OK... that&apos;s not at all what I meant about breaking things into pieces.  Those patches are physically separate, but logically intertwined.  I meant to break things into patches where each patch added exactly one capability.

I think doing that would help address all the concerns above, e.g. make it easier to see how other ports would be affected, and make it easier to test if something decreased execution speed.

Overall I&apos;m not worried about decreasing speed by cleaning things up; for example, replacing the gotos with calls to a small non-virtual helper function in the same file will not hurt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133941</commentid>
    <comment_count>10</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-22 15:17:24 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; OK... that&apos;s not at all what I meant about breaking things into pieces.  Those
&gt; patches are physically separate, but logically intertwined.  I meant to break
&gt; things into patches where each patch added exactly one capability.
&gt; 
&gt; I think doing that would help address all the concerns above, e.g. make it
&gt; easier to see how other ports would be affected, and make it easier to test if
&gt; something decreased execution speed.
&gt; 
OK, I will sort it out.

&gt; Overall I&apos;m not worried about decreasing speed by cleaning things up; for
&gt; example, replacing the gotos with calls to a small non-virtual helper function
&gt; in the same file will not hurt.

If ImageFrameSink and &quot;segmented&quot; SharedBuffer are accepted for all platforms, then the code can be easier to simplify. I hate those #if ..., too.

Without &quot;segmented&quot; SharedBuffer, a 4MB image file must be stored in a 4MB flat memory block as encoded image data. Also, the buffer will be resized many times when ResourceHandle keeps adding new data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133945</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-07-22 15:26:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; If ImageFrameSink and &quot;segmented&quot; SharedBuffer are accepted for all platforms,
&gt; then the code can be easier to simplify. I hate those #if ..., too.
&gt; 
&gt; Without &quot;segmented&quot; SharedBuffer, a 4MB image file must be stored in a 4MB flat
&gt; memory block as encoded image data. Also, the buffer will be resized many times
&gt; when ResourceHandle keeps adding new data.

While those two items probably don&apos;t affect desktop users too much (I would be surprised if the actual overhead for the buffer resizes is noticeable on the desktop, since we should do few of them), it would definitely be nice for both mobile and desktop use to find a way of trimming the image decoder memory footprint.

See for example bug 27308, where I propose re-encoding &quot;large&quot; decoded formats as smaller ones internally, in hopes of reducing memory cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134132</commentid>
    <comment_count>12</comment_count>
      <attachid>33341</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-23 09:48:09 -0700</bug_when>
    <thetext>Created attachment 33341
make image decoders use ImageFrameSink

1) use ImageFrameSink
2) use secondary GIF reader for size &amp; frame count only
3) able to decode big image down to smaller destination buffer on the fly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134134</commentid>
    <comment_count>13</comment_count>
      <attachid>33342</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-23 09:54:27 -0700</bug_when>
    <thetext>Created attachment 33342
decode from stream source data

Make decoders able to decode from stream or segmented source .

Decoders can grab segment by segment from the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134142</commentid>
    <comment_count>14</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-07-23 10:19:56 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=33342) [details]
&gt; decode from stream source data

It looks like this patch expects the prior patch to already be applied.  Is that true?

Also it looks like you don&apos;t modify BMPImageDecoder, ICOImageDecoder, or XBMImageDecoder.  Will that cause problems when you encounter one of these image types?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134152</commentid>
    <comment_count>15</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-23 10:42:23 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Created an attachment (id=33342) [details] [details]
&gt; &gt; decode from stream source data
&gt; 
&gt; It looks like this patch expects the prior patch to already be applied.  Is
&gt; that true?

yes.

&gt; 
&gt; Also it looks like you don&apos;t modify BMPImageDecoder, ICOImageDecoder, or
&gt; XBMImageDecoder.  Will that cause problems when you encounter one of these
&gt; image types?

We haven&apos;t supported bmp, ico and xbm images yet.

Code blocks under USE(IMAGEFRAMESINK) must be modified to work for other platforms.

I just found that there are still something there WINCE-specific. For example:

1) always use 16bit for JPEG images
2) use 16bit for those PNG images that don&apos;t have alpha channel
3) decode GIF to 32bit first, checking transparent color during decoding. if the transparent color is unique and it doesn&apos;t conflict with other colors after converting 16bit, then we convert the image buffer from 32bit to 16bit. On Windows platform, TransparentBlt can paint an image without specified transparent color used as a mask, which could be cheaper than AlphaBlend.

On other platforms, people may want different behaviors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134155</commentid>
    <comment_count>16</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-23 10:45:27 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; Created an attachment (id=33342) [details] [details] [details]
&gt; &gt; &gt; decode from stream source data
&gt; &gt; 
&gt; &gt; It looks like this patch expects the prior patch to already be applied.  Is
&gt; &gt; that true?
&gt; 
&gt; yes.
&gt; 
&gt; &gt; 
&gt; &gt; Also it looks like you don&apos;t modify BMPImageDecoder, ICOImageDecoder, or
&gt; &gt; XBMImageDecoder.  Will that cause problems when you encounter one of these
&gt; &gt; image types?
&gt; 
&gt; We haven&apos;t supported bmp, ico and xbm images yet.
&gt; 
&gt; Code blocks under USE(IMAGEFRAMESINK) must be modified to work for other
&gt; platforms.
&gt; 
&gt; I just found that there are still something there WINCE-specific. For example:
&gt; 
&gt; 1) always use 16bit for JPEG images
&gt; 2) use 16bit for those PNG images that don&apos;t have alpha channel
&gt; 3) decode GIF to 32bit first, checking transparent color during decoding. if
&gt; the transparent color is unique and it doesn&apos;t conflict with other colors after
&gt; converting 16bit, then we convert the image buffer from 32bit to 16bit. On
&gt; Windows platform, TransparentBlt can paint an image without specified
&gt; transparent color used as a mask, which could be cheaper than AlphaBlend.
&gt; 
&gt; On other platforms, people may want different behaviors.

Correction: &quot;without specified transparent color&quot; should be &quot;with ...&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138097</commentid>
    <comment_count>17</comment_count>
      <attachid>33342</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 13:26:35 -0700</bug_when>
    <thetext>Comment on attachment 33342
decode from stream source data

No ChangeLog, r-.

Normaly this would be in the header:
+    unsigned currentBufferSize() const { return m_currentBufferSize; }

no c-style casts:
+        if (!querySize &amp;&amp; m_reader.images_decoded &gt;= (int)haltFrame)

while please:
+        for (;!m_jobComplete;) {

Why?
+#if PLATFORM(WINCE) &amp;&amp; PLATFORM(TORCHMOBILE)
+        m_secondaryReader-&gt;decode(*m_data, GIFFrameCountQuery);
+#else
         m_secondaryReader-&gt;decode(m_data.get(), GIFFrameCountQuery);
+#endif

Peter Kasting should see and comment on this patch please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138100</commentid>
    <comment_count>18</comment_count>
      <attachid>33341</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 13:28:25 -0700</bug_when>
    <thetext>Comment on attachment 33341
make image decoders use ImageFrameSink

Tabs:
84 	for (int scaledX = 0;;) {
 85 		int x = scaledX * zoom + 0.5;
 86 		if (x &lt; width) {
 87 			m_scaledColumns.append(x);
 88 			++scaledX;
 89 		} else
 90 			break;
 91 	}
Why not while(true) there?

No:
 #if USE(IMAGEFRAMESINK)
 251 #else

Peter Kasting should see this patch.

r- for tabs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138101</commentid>
    <comment_count>19</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-07 13:32:17 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 33342 [details])
&gt; No ChangeLog, r-.
&gt; 
&gt; Normaly this would be in the header:
&gt; +    unsigned currentBufferSize() const { return m_currentBufferSize; }

The class is defined in the cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138105</commentid>
    <comment_count>20</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-07 13:35:05 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 33341 [details])
&gt; Tabs:
&gt; 84     for (int scaledX = 0;;) {
&gt;  85         int x = scaledX * zoom + 0.5;
&gt;  86         if (x &lt; width) {
&gt;  87             m_scaledColumns.append(x);
&gt;  88             ++scaledX;
&gt;  89         } else
&gt;  90             break;
&gt;  91     }
&gt; Why not while(true) there?

why &quot;while(true)&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138106</commentid>
    <comment_count>21</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-08-07 13:36:46 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 33341 [details] [details])
&gt; &gt; Tabs:
&gt; &gt; 84     for (int scaledX = 0;;) {
&gt; &gt;  85         int x = scaledX * zoom + 0.5;
&gt; &gt;  86         if (x &lt; width) {
&gt; &gt;  87             m_scaledColumns.append(x);
&gt; &gt;  88             ++scaledX;
&gt; &gt;  89         } else
&gt; &gt;  90             break;
&gt; &gt;  91     }
&gt; &gt; Why not while(true) there?
&gt; 
&gt; why &quot;while(true)&quot;?

Definitely not while(true).  you initialize a variable for use in the for() and then let it pop off the stack once the loop exits.  The code is right as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138107</commentid>
    <comment_count>22</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-07 13:39:15 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Definitely not while(true).  you initialize a variable for use in the for() and
&gt; then let it pop off the stack once the loop exits.  The code is right as-is.

FWIW (which isn&apos;t much since I&apos;m not a reviewer), I&apos;m fine with the code the way it&apos;s written, but I don&apos;t think changing it to expose scaledX and scaledY at the function scope, and using while (true), would hurt the code.  This function is pretty short and simple.  Dunno if there&apos;s an applicable WebKit style rule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139980</commentid>
    <comment_count>23</comment_count>
      <attachid>34772</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-13 12:44:05 -0700</bug_when>
    <thetext>Created attachment 34772
1) ImageFrameSink

seems it should be post here.

not except it can be landed soon. but discussions wanted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140016</commentid>
    <comment_count>24</comment_count>
      <attachid>34782</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-13 13:57:49 -0700</bug_when>
    <thetext>Created attachment 34782
2) use ImageFrameSink in decoders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140017</commentid>
    <comment_count>25</comment_count>
      <attachid>34783</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-13 13:58:48 -0700</bug_when>
    <thetext>Created attachment 34783
3) able to directly write to scaled buffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140018</commentid>
    <comment_count>26</comment_count>
      <attachid>34784</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-13 13:59:26 -0700</bug_when>
    <thetext>Created attachment 34784
4) able to read from segmented buffer or data stream</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140106</commentid>
    <comment_count>27</comment_count>
      <attachid>34783</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-13 17:10:41 -0700</bug_when>
    <thetext>Comment on attachment 34783
3) able to directly write to scaled buffer

This is being reworked according to conversation I had with Yong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140108</commentid>
    <comment_count>28</comment_count>
      <attachid>34783</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-08-13 17:18:02 -0700</bug_when>
    <thetext>Comment on attachment 34783
3) able to directly write to scaled buffer

Just clear the review flag then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140262</commentid>
    <comment_count>29</comment_count>
      <attachid>34856</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 10:26:54 -0700</bug_when>
    <thetext>Created attachment 34856
2) Use ImageFrameSink for JPEG, PNG, and GIF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140268</commentid>
    <comment_count>30</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-14 10:51:53 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Created an attachment (id=34772) [details]
&gt; 1) ImageFrameSink

Here&apos;s a spattering of comments all over this patch, based on a quick glance.

I assume that your motive for resurrecting the &quot;decoded height&quot; variable is so that when you paint a SharedBitmap you can do an opaque blit of the valid height (and avoid the undecoded portion entirely) instead of doing a transparent blit of the entire frame size?  If so, I&apos;m not necessarily opposed to resurrecting the height member, although no other ports do this and I wonder if it actually saves much time (it&apos;s only relevant while an image is half-decoded and being painted, and at that point the user isn&apos;t getting high-speed animation or similar anyway).  If it doesn&apos;t actually buy meaningful performance, then returning true for frameHasAlphaAtIndex() (either using the method it has now, which I think is fine, or pushing this into all the decoders, which I think is unnecessary code duplication for no benefit) seems like a simpler and better way.

I don&apos;t understand what createInstance() and deleteInstance() buy you.  Callers could just use &quot;foo = new ImageFrameSink(bool);&quot; or &quot;delete foo;&quot;.

Some of the variable names seem problematic to me; e.g. I would change m_expectedHeight to m_height, m_height to m_decodedHeight, m_bmp to m_bitmap, can to canFreeBuffer.

I&apos;m skeptical of the utility of m_compositedWithPreviousFrame.  The only use for this would be in decoding GIFs, to avoid creating the complete frame at a particular index.  But this means you can&apos;t use the &quot;large GIF, discard unnecessary frames&quot; memory optimization which makes an enormous difference for large animated GIFs, because you need to keep around an arbitrary number of
frames.

Why are the data members protected instead of private?  Per Darin Adler we should make things as private as possible.

Having both setRGB16() and setRGBA() seems like a poor API for callers.  Why doesn&apos;t setRGBA() just write the data in 16-bit format if the bitmap is 16-bit?  If the answer is &quot;we&apos;re worried about putting an if() in there for performance reasons&quot;, I&apos;d like to see data on the effect of such a thing before prematurely optimizing.  Note that there&apos;s already an if() in setRGBA().

Not a big fan of things like &quot;foo &gt;&gt; 1 &lt;&lt; 1&quot;.  &quot;foo &amp; ~0x1&quot; would be clearer.  Same with &quot;foo &gt;&gt; 3 &lt;&lt; 7&quot;; &quot;(foo &lt;&lt; 4) &amp; 0xFFFFFF80&quot; seems clearer.

Why does getFrame() return 0 when the status is frameEmpty?  An empty frame is still a valid one.

The proper use of setCanFreeBuffer() is not obvious to me.

Overall there seems to be a lot of functions to explicitly allocate and free things inside the ImageFrameSink.  This doesn&apos;t feel like a particularly friendly API.  Note that the existing RGBA32Buffer has only a few functions, mostly to support deep versus shallow copies of the underlying data.

This file is also entirely missing a large number of functions from the current RGBA32Buffer, such as clear(), copyRowNTimes(), asNewNativeImage(), etc., which are used in various different cases.  I assume this is because you wrote this code quite a while ago.  If we wanted to use ImageFrameSink, I think a lot of these would need to be supported, so you wouldn&apos;t be massively rewriting the decoders or other cross-platform Image code (especially if such rewrites removed optimizations, like the GIF frame-clearing optimization).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140269</commentid>
    <comment_count>31</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-14 10:54:57 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Created an attachment (id=34856) [details]
&gt; 2) Use ImageFrameSink for JPEG, PNG, and GIF

I don&apos;t see the point of marking r? on this when it can&apos;t land until ImageFrameSink does, and that&apos;s a ways away.

Much of this patch is a copy-and-paste of old code from the image decoders that has since been changed for both clarity and correctness.  You need to discard that and find a way to modify in-line the existing decoding code, instead of completely rewriting entire functions under #ifdefs.  We still wouldn&apos;t land the patch that way, but it would at least allow a precise understanding of what ImageFrameSink requires, which is impossible with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140272</commentid>
    <comment_count>32</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-08-14 11:03:26 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #23)
&gt; &gt; Created an attachment (id=34772) [details] [details]
&gt; &gt; 1) ImageFrameSink
&gt; 
&gt; Here&apos;s a spattering of comments all over this patch, based on a quick glance.
&gt; 
&gt; I assume that your motive for resurrecting the &quot;decoded height&quot; variable is so
&gt; that when you paint a SharedBitmap you can do an opaque blit of the valid
&gt; height (and avoid the undecoded portion entirely) instead of doing a
&gt; transparent blit of the entire frame size?  If so, I&apos;m not necessarily opposed
&gt; to resurrecting the height member, although no other ports do this and I wonder
&gt; if it actually saves much time (it&apos;s only relevant while an image is
&gt; half-decoded and being painted, and at that point the user isn&apos;t getting
&gt; high-speed animation or similar anyway).  If it doesn&apos;t actually buy meaningful
&gt; performance, then returning true for frameHasAlphaAtIndex() (either using the
&gt; method it has now, which I think is fine, or pushing this into all the
&gt; decoders, which I think is unnecessary code duplication for no benefit) seems
&gt; like a simpler and better way.

   The performance issue is very valid for our target platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140278</commentid>
    <comment_count>33</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-14 11:13:57 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #30)
&gt; &gt; I wonder
&gt; &gt; if it actually saves much time (it&apos;s only relevant while an image is
&gt; &gt; half-decoded and being painted, and at that point the user isn&apos;t getting
&gt; &gt; high-speed animation or similar anyway).  If it doesn&apos;t actually buy meaningful
&gt; &gt; performance, then returning true for frameHasAlphaAtIndex() (either using the
&gt; &gt; method it has now, which I think is fine, or pushing this into all the
&gt; &gt; decoders, which I think is unnecessary code duplication for no benefit) seems
&gt; &gt; like a simpler and better way.
&gt; 
&gt;    The performance issue is very valid for our target platform.

OK, do you have some data (e.g. page load times or animation frame rates) around this issue?  It would be helpful in deciding whether we should also try to convert the other backends over to a similar mechanism.  I could be totally overlooking a particular case where this is really useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140283</commentid>
    <comment_count>34</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-08-14 11:25:55 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; I wonder
&gt; &gt; &gt; if it actually saves much time (it&apos;s only relevant while an image is
&gt; &gt; &gt; half-decoded and being painted, and at that point the user isn&apos;t getting
&gt; &gt; &gt; high-speed animation or similar anyway).  If it doesn&apos;t actually buy meaningful
&gt; &gt; &gt; performance, then returning true for frameHasAlphaAtIndex() (either using the
&gt; &gt; &gt; method it has now, which I think is fine, or pushing this into all the
&gt; &gt; &gt; decoders, which I think is unnecessary code duplication for no benefit) seems
&gt; &gt; &gt; like a simpler and better way.
&gt; &gt; 
&gt; &gt;    The performance issue is very valid for our target platform.
&gt; 
&gt; OK, do you have some data (e.g. page load times or animation frame rates)
&gt; around this issue?  It would be helpful in deciding whether we should also try
&gt; to convert the other backends over to a similar mechanism.  I could be totally
&gt; overlooking a particular case where this is really useful.

No numbers right now but alpha blending is ugly, blitting is slow.  Every pixel causes pain here.  I don&apos;t expect it to be an issue in other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140284</commentid>
    <comment_count>35</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 11:29:38 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #23)
&gt; &gt; Created an attachment (id=34772) [details] [details]
&gt; &gt; 1) ImageFrameSink
&gt; 
&gt; Here&apos;s a spattering of comments all over this patch, based on a quick glance.
&gt; 
&gt; I assume that your motive for resurrecting the &quot;decoded height&quot; variable is so
&gt; that when you paint a SharedBitmap you can do an opaque blit of the valid
&gt; height (and avoid the undecoded portion entirely) instead of doing a
&gt; transparent blit of the entire frame size?  If so, I&apos;m not necessarily opposed
&gt; to resurrecting the height member, although no other ports do this and I wonder
&gt; if it actually saves much time (it&apos;s only relevant while an image is
&gt; half-decoded and being painted, and at that point the user isn&apos;t getting
&gt; high-speed animation or similar anyway).  If it doesn&apos;t actually buy meaningful
&gt; performance, then returning true for frameHasAlphaAtIndex() (either using the
&gt; method it has now, which I think is fine, or pushing this into all the
&gt; decoders, which I think is unnecessary code duplication for no benefit) seems
&gt; like a simpler and better way.
&gt; 

Seems RGBA32Buffer will be modified to support more formats. Are you planning to do this? After that, you will find that JPEG doesn&apos;t have alpha channel, so it may use 24bit format or RGB565 to store decoded data. So even you hack frameHasAlphaAtIndex(), it won&apos;t work. Also, on some devices, alpha blending may be slow, or even not supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140289</commentid>
    <comment_count>36</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-14 11:42:26 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Seems RGBA32Buffer will be modified to support more formats. Are you planning
&gt; to do this?

I&apos;m planning to remove the name &quot;RGBA32&quot; from the class, since that class actually doesn&apos;t support any formats at all; the underlying native image types do.  Though right now none of those native image types uses anything other than 32-bit ARGB (or RGBA, or whatever), they could, and my suspicion is that that decision is best left to those classes.  I haven&apos;t coded it so I can&apos;t be sure, of course, but I think rather than having things like is16Bit() and raw bit-writing ops directly in this header, those should be pushed to places like what you&apos;ve written as SharedBuffer.

Being able to cleanly integrate ports like WinCE that desire lower-bitdepth storage formats is a key motivator to doing this, so whatever solution we land on certainly has to work for you guys.

&gt; After that, you will find that JPEG doesn&apos;t have alpha channel, so
&gt; it may use 24bit format or RGB565 to store decoded data.

It could; it&apos;s not clear without trying it whether that will be a big win for backends like Skia and Cairo.  Backends that did this would also need to ensure that their code doesn&apos;t rely on the image storage being 32-bit; I think Skia might, at the moment.

&gt; So even you hack frameHasAlphaAtIndex(), it won&apos;t work.

FWIW, at the moment Cairo uses frameHasAlphaAtIndex() to determine its compositing op, but Skia just uses the real image data inside the SkBitmap, and ignores this function entirely.  It might make sense to have that kind of pattern everywhere, since I imagine most native image storage formats can tell you if they use an alpha channel...

&gt; Also, on some devices, alpha blending may be slow, or even not supported.

Having it not supported entirely would make a platform pretty unusable since not only most of the image formats, but all kinds of other CSS, SVG, etc. operations need alpha.  So I&apos;m not as concerned with designing for that case.  Slow is another story; we do probably want to make it possible for ports to avoid alpha-blending where possible.  I wonder if we need ensureHeight() and friends to do that, though; in the current RGBA32Buffer API, it would be pretty simple to set the decoded height correctly on an underlying native image without needing an explicit call from the decoder.  This is because the decoders move monotonically through the rows of an image, and set the status to FrameComplete when they finish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140290</commentid>
    <comment_count>37</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 11:43:27 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #23)
&gt; &gt; Created an attachment (id=34772) [details] [details]
&gt; &gt; 1) ImageFrameSink
&gt; 
&gt; I don&apos;t understand what createInstance() and deleteInstance() buy you.  Callers
&gt; could just use &quot;foo = new ImageFrameSink(bool);&quot; or &quot;delete foo;&quot;.
&gt;
createInstance is useful in this case:

class ImageFrameSinkXxxxWithMoreMembers : public ImageFrameSink
{
 more members here;
};

ImageFrameSink* ImageFrameSink::createInstance()
{
  return new ImageFrameSinkXxxxWithMoreMembers ;
}

&gt; 
&gt; Some of the variable names seem problematic to me; e.g. I would change
&gt; m_expectedHeight to m_height, m_height to m_decodedHeight

m_height as RGBA32Buffer defined. Yeah, now it&apos;s ok to change the name as m_height has been removed from RGBA32Buffer.

&gt; 
&gt; I&apos;m skeptical of the utility of m_compositedWithPreviousFrame.  The only use
&gt; for this would be in decoding GIFs, to avoid creating the complete frame at a
&gt; particular index.  But this means you can&apos;t use the &quot;large GIF, discard
&gt; unnecessary frames&quot; memory optimization which makes an enormous difference for
&gt; large animated GIFs, because you need to keep around an arbitrary number of
&gt; frames.

m_compositedWithPreviousFrame is not only for &quot;avoiding someting&quot;, but also important for transparent effects in GIF animation.

&gt; 
&gt; Why are the data members protected instead of private?  Per Darin Adler we
&gt; should make things as private as possible.

because the subclasses need to access them

&gt; 
&gt; Having both setRGB16() and setRGBA() seems like a poor API for callers.  Why
&gt; doesn&apos;t setRGBA() just write the data in 16-bit format if the bitmap is 16-bit?
&gt;  If the answer is &quot;we&apos;re worried about putting an if() in there for performance
&gt; reasons&quot;, I&apos;d like to see data on the effect of such a thing before prematurely
&gt; optimizing.  Note that there&apos;s already an if() in setRGBA().

they also have different inputs

&gt; 
&gt; Not a big fan of things like &quot;foo &gt;&gt; 1 &lt;&lt; 1&quot;.  &quot;foo &amp; ~0x1&quot; would be clearer. 

&gt;&gt; 1 &lt;&lt; 1 seems cleaner to. but I&apos;m not sure which one is faster.

&gt; Same with &quot;foo &gt;&gt; 3 &lt;&lt; 7&quot;; &quot;(foo &lt;&lt; 4) &amp; 0xFFFFFF80&quot; seems clearer.

Same thing here, I don&apos;t think the latter is clean.

&gt; 
&gt; Why does getFrame() return 0 when the status is frameEmpty?  An empty frame is
&gt; still a valid one.

why? Who likes to waste CPU time on empty frame?

&gt; 
&gt; The proper use of setCanFreeBuffer() is not obvious to me.

This nofities the buffer that decoder has finished writting to the buffer, so the buffer can be released when it&apos;s under memory pressure.

&gt; 
&gt; Overall there seems to be a lot of functions to explicitly allocate and free
&gt; things inside the ImageFrameSink.  This doesn&apos;t feel like a particularly
&gt; friendly API.  Note that the existing RGBA32Buffer has only a few functions,
&gt; mostly to support deep versus shallow copies of the underlying data.
&gt; 
&gt; This file is also entirely missing a large number of functions from the current
&gt; RGBA32Buffer, such as clear(), copyRowNTimes(), asNewNativeImage(), etc., which
&gt; are used in various different cases.  I assume this is because you wrote this
&gt; code quite a while ago.  If we wanted to use ImageFrameSink, I think a lot of
&gt; these would need to be supported, so you wouldn&apos;t be massively rewriting the
&gt; decoders or other cross-platform Image code (especially if such rewrites
&gt; removed optimizations, like the GIF frame-clearing optimization).

I still think it&apos;s not difficult to replace RGBA32Buffer with ImageFrameSink. Yeah, it needs some work definitely. 

The one that I&apos;m most concerned is about GIF m_compositedWithPreviousFrame thing. That&apos;s complicated, and ImageFrameSink code works in a little different way. Want to talk to somebody on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140294</commentid>
    <comment_count>38</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-14 11:59:16 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #30)
&gt; &gt; I don&apos;t understand what createInstance() and deleteInstance() buy you.  Callers
&gt; &gt; could just use &quot;foo = new ImageFrameSink(bool);&quot; or &quot;delete foo;&quot;.
&gt; &gt;
&gt; createInstance is useful in this case:
&gt; 
&gt; class ImageFrameSinkXxxxWithMoreMembers : public ImageFrameSink
&gt; {
&gt;  more members here;
&gt; };
&gt; 
&gt; ImageFrameSink* ImageFrameSink::createInstance()
&gt; {
&gt;   return new ImageFrameSinkXxxxWithMoreMembers ;
&gt; }

But does anyone do that?  It doesn&apos;t look like it from this patch.  Why build factory functions unless you need them?

&gt; &gt; I&apos;m skeptical of the utility of m_compositedWithPreviousFrame.  The only use
&gt; &gt; for this would be in decoding GIFs, to avoid creating the complete frame at a
&gt; &gt; particular index.  But this means you can&apos;t use the &quot;large GIF, discard
&gt; &gt; unnecessary frames&quot; memory optimization which makes an enormous difference for
&gt; &gt; large animated GIFs, because you need to keep around an arbitrary number of
&gt; &gt; frames.
&gt; 
&gt; m_compositedWithPreviousFrame is not only for &quot;avoiding someting&quot;, but also
&gt; important for transparent effects in GIF animation.

I don&apos;t understand.  I know how GIF animation and frame disposal methods work.  The existing ports handle them correctly without using this mechanism.  Why doesn&apos;t the existing mechanism work for you, and how do you deal with not having the frame-clearing optimization for large GIFs?  I would think on a memory-constrained platform that&apos;d be even more important than it is on desktops.

&gt; &gt; Why are the data members protected instead of private?  Per Darin Adler we
&gt; &gt; should make things as private as possible.
&gt; 
&gt; because the subclasses need to access them

What subclasses?

&gt; &gt; Having both setRGB16() and setRGBA() seems like a poor API for callers.  Why
&gt; &gt; doesn&apos;t setRGBA() just write the data in 16-bit format if the bitmap is 16-bit?
&gt; 
&gt; they also have different inputs

This response is vague enough that I haven&apos;t learned anything.  What is the difference and why can&apos;t it be created at the SharedBuffer or ImageFrameSink level?

&gt; &gt; Why does getFrame() return 0 when the status is frameEmpty?  An empty frame is
&gt; &gt; still a valid one.
&gt; 
&gt; why? Who likes to waste CPU time on empty frame?

What CPU is being wasted?  We don&apos;t blit anything with empty frames.

&gt; &gt; The proper use of setCanFreeBuffer() is not obvious to me.
&gt; 
&gt; This nofities the buffer that decoder has finished writting to the buffer, so
&gt; the buffer can be released when it&apos;s under memory pressure.

Isn&apos;t this the same signal as setting the status to FrameComplete?

&gt; The one that I&apos;m most concerned is about GIF m_compositedWithPreviousFrame
&gt; thing. That&apos;s complicated, and ImageFrameSink code works in a little different
&gt; way. Want to talk to somebody on this.

Maybe you could write up a short doc with descriptions of the existing code and your code, pointing out the differences and why they are valuable?

I can guess how someone would implement GIF animation with a flag like this but I can&apos;t see how to do it without needing to keep a potentially arbitrary number of frames around, for example if you scroll an animated GIF out of the viewport and then back in (causing the animation to need to spin forward).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140298</commentid>
    <comment_count>39</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 12:17:03 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #37)
&gt; &gt; (In reply to comment #30)
&gt; 
&gt; But does anyone do that?  It doesn&apos;t look like it from this patch.  Why build
&gt; factory functions unless you need them?

See first patch. We have ImageFrameSinkWince defined which holds a SharedBitmap as the buffer provider.

&gt; 
&gt; I don&apos;t understand.  I know how GIF animation and frame disposal methods work. 
&gt; The existing ports handle them correctly without using this mechanism.  Why
&gt; doesn&apos;t the existing mechanism work for you, and how do you deal with not
&gt; having the frame-clearing optimization for large GIFs?  I would think on a
&gt; memory-constrained platform that&apos;d be even more important than it is on
&gt; desktops.

I&apos;ve fixed many bugs on it, and our browser runs OK. Let me review this and get back to you. I did that so long time ago :) 

&gt; What subclasses?

ImageFrameSinkWince, if I am not wrong.

&gt; 
&gt; &gt; &gt; Having both setRGB16() and setRGBA() seems like a poor API for callers.  Why
&gt; &gt; &gt; doesn&apos;t setRGBA() just write the data in 16-bit format if the bitmap is 16-bit?
&gt; &gt; 
&gt; &gt; they also have different inputs
&gt; 
&gt; This response is vague enough that I haven&apos;t learned anything.  What is the
&gt; difference and why can&apos;t it be created at the SharedBuffer or ImageFrameSink
&gt; level?

I&apos;m lost now. I thought you mean why setRGB16 and setRGBA cannot share a same function. If that was the question, I would say separate functions are definitely better.

&gt; 
&gt; &gt; &gt; Why does getFrame() return 0 when the status is frameEmpty?  An empty frame is
&gt; &gt; &gt; still a valid one.
&gt; &gt; 
&gt; &gt; why? Who likes to waste CPU time on empty frame?
&gt; 
&gt; What CPU is being wasted?  We don&apos;t blit anything with empty frames.

So why cannot it return 0?

&gt; 
&gt; &gt; &gt; The proper use of setCanFreeBuffer() is not obvious to me.
&gt; &gt; 
&gt; &gt; This nofities the buffer that decoder has finished writting to the buffer, so
&gt; &gt; the buffer can be released when it&apos;s under memory pressure.
&gt; 
&gt; Isn&apos;t this the same signal as setting the status to FrameComplete?

FrameComplete is just for a single frame. But GIF decoder may still want to read a finished frame when it processes the next one. 

&gt; 
&gt; &gt; The one that I&apos;m most concerned is about GIF m_compositedWithPreviousFrame
&gt; &gt; thing. That&apos;s complicated, and ImageFrameSink code works in a little different
&gt; &gt; way. Want to talk to somebody on this.
&gt; 
&gt; Maybe you could write up a short doc with descriptions of the existing code and
&gt; your code, pointing out the differences and why they are valuable?

ok. but for why they are valuable, I have mentioned in bug 26467, see comment #5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140306</commentid>
    <comment_count>40</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-08-14 12:57:08 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; (In reply to comment #37)
&gt; &gt; &gt; (In reply to comment #30)
&gt; &gt; 
&gt; &gt; But does anyone do that?  It doesn&apos;t look like it from this patch.  Why build
&gt; &gt; factory functions unless you need them?
&gt; 
&gt; See first patch. We have ImageFrameSinkWince defined which holds a SharedBitmap
&gt; as the buffer provider.

I looked at most of the patches and missed any ImageFrameSinkWince class.  It looks in this patch like you have an ImageFrameSinkWince.cpp, but it&apos;s just filling out the functions of ImageFrameSink and doesn&apos;t do any subclassing.

Maybe I&apos;m missing something.

&gt; &gt; I don&apos;t understand.  I know how GIF animation and frame disposal methods work. 
&gt; &gt; The existing ports handle them correctly without using this mechanism.  Why
&gt; &gt; doesn&apos;t the existing mechanism work for you, and how do you deal with not
&gt; &gt; having the frame-clearing optimization for large GIFs?  I would think on a
&gt; &gt; memory-constrained platform that&apos;d be even more important than it is on
&gt; &gt; desktops.
&gt; 
&gt; I&apos;ve fixed many bugs on it, and our browser runs OK. Let me review this and get
&gt; back to you. I did that so long time ago :)

Try cases like http://www.aintitcool.com/files/HoD2.gif and http://img2.abload.de/img/almost_failedovs.gif and make sure that:
* Images animate in the same time as Chrome 2/Safari 4 (not slower)
* You don&apos;t blow out memory or CPU usage

&gt; &gt; &gt; &gt; Having both setRGB16() and setRGBA() seems like a poor API for callers.  Why
&gt; &gt; &gt; &gt; doesn&apos;t setRGBA() just write the data in 16-bit format if the bitmap is 16-bit?
&gt; &gt; &gt; 
&gt; &gt; &gt; they also have different inputs
&gt; &gt; 
&gt; &gt; This response is vague enough that I haven&apos;t learned anything.  What is the
&gt; &gt; difference and why can&apos;t it be created at the SharedBuffer or ImageFrameSink
&gt; &gt; level?
&gt; 
&gt; I&apos;m lost now. I thought you mean why setRGB16 and setRGBA cannot share a same
&gt; function. If that was the question, I would say separate functions are
&gt; definitely better.

It sounds like we&apos;re not understanding each other.

My object is to reduce the complexity and special-casing of shared code, especially the decoders themselves.  Let&apos;s say platform X supports native image storage in various formats (565, 888, 8888, etc.).  The pattern that makes sense to me is:

Image Decoder reads the pixel values out of the source image and calls setRGBA with them
ImageFrameSink/RGBA32Buffer/whatever passes these values along to the backend&apos;s underlying NativeImage functions
These functions decide how to downsample to an appropriate format

With your existing code, the downsampling would need to be done in the decoder, which would need to check whether the image frame claims to be 16-bit.  All that seems to do is cause us to plumb more state up through shared code and push the complexity on everyone.

&gt; &gt; &gt; &gt; Why does getFrame() return 0 when the status is frameEmpty?  An empty frame is
&gt; &gt; &gt; &gt; still a valid one.
&gt; &gt; &gt; 
&gt; &gt; &gt; why? Who likes to waste CPU time on empty frame?
&gt; &gt; 
&gt; &gt; What CPU is being wasted?  We don&apos;t blit anything with empty frames.
&gt; 
&gt; So why cannot it return 0?

Practically, it can; there are only two reasons I wouldn&apos;t do it:
* The API is lying
* A backend can&apos;t read any data off a NULL pointer, such as the size of the frame, if it wants it

If it makes no difference, I don&apos;t see why we should lie to callers.  It&apos;s not a big deal, it just seems like a waste to explicitly check for an empty frame so we can lie.

&gt; &gt; &gt; &gt; The proper use of setCanFreeBuffer() is not obvious to me.
&gt; &gt; &gt; 
&gt; &gt; &gt; This nofities the buffer that decoder has finished writting to the buffer, so
&gt; &gt; &gt; the buffer can be released when it&apos;s under memory pressure.
&gt; &gt; 
&gt; &gt; Isn&apos;t this the same signal as setting the status to FrameComplete?
&gt; 
&gt; FrameComplete is just for a single frame. But GIF decoder may still want to
&gt; read a finished frame when it processes the next one. 

So it&apos;s _not_ about the decoder being finished writing to the buffer.  It&apos;s some signal that the decoder is finished reading the buffer too.  In that case it seems like a bug that you don&apos;t finishBitmap() when we go to FrameComplete.

In this case I suggest copying clear() from the existing code, which is designed for precisely this functionality.  Note that there are fewer member variables involved (no &quot;should&quot; and &quot;can&quot; distinction).

&gt; &gt; &gt; The one that I&apos;m most concerned is about GIF m_compositedWithPreviousFrame
&gt; &gt; &gt; thing. That&apos;s complicated, and ImageFrameSink code works in a little different
&gt; &gt; &gt; way. Want to talk to somebody on this.
&gt; &gt; 
&gt; &gt; Maybe you could write up a short doc with descriptions of the existing code and
&gt; &gt; your code, pointing out the differences and why they are valuable?
&gt; 
&gt; ok. but for why they are valuable, I have mentioned in bug 26467, see comment
&gt; #5

It&apos;s not at all obvious in the code that these are useful for dynamic image scaling.  Nor do I see what they buy you for scaling versus the decoding technique in the existing code.  I think I&apos;d benefit from a writeup :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140311</commentid>
    <comment_count>41</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 13:07:05 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; (In reply to comment #38)
&gt; &gt; &gt; (In reply to comment #37)
&gt; &gt; &gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; 
&gt; I looked at most of the patches and missed any ImageFrameSinkWince class.  It
&gt; looks in this patch like you have an ImageFrameSinkWince.cpp, but it&apos;s just
&gt; filling out the functions of ImageFrameSink and doesn&apos;t do any subclassing.
&gt; 
&gt; Maybe I&apos;m missing something.

Hm... Sorry, ImageFrameSinkWince has been removed by refactoring... too long story. But createInstance and deleteInstance are already added, providing ability to subclass ImageFrameSink, which should be fine.

&gt; 
&gt; &gt; &gt; I don&apos;t understand.  I know how GIF animation and frame disposal methods work. 
&gt; &gt; &gt; The existing ports handle them correctly without using this mechanism.  Why
&gt; &gt; &gt; doesn&apos;t the existing mechanism work for you, and how do you deal with not
&gt; &gt; &gt; having the frame-clearing optimization for large GIFs?  I would think on a
&gt; &gt; &gt; memory-constrained platform that&apos;d be even more important than it is on
&gt; &gt; &gt; desktops.
&gt; &gt; 
&gt; &gt; I&apos;ve fixed many bugs on it, and our browser runs OK. Let me review this and get
&gt; &gt; back to you. I did that so long time ago :)
&gt; 
&gt; Try cases like http://www.aintitcool.com/files/HoD2.gif and
&gt; http://img2.abload.de/img/almost_failedovs.gif and make sure that:
&gt; * Images animate in the same time as Chrome 2/Safari 4 (not slower)
&gt; * You don&apos;t blow out memory or CPU usage

Thanks for providing this test case. I&apos;m confident our browser won&apos;t crash :) Will try it
&gt; 
&gt; My object is to reduce the complexity and special-casing of shared code,
&gt; especially the decoders themselves.  Let&apos;s say platform X supports native image
&gt; storage in various formats (565, 888, 8888, etc.).  The pattern that makes
&gt; sense to me is:
&gt; 
&gt; Image Decoder reads the pixel values out of the source image and calls setRGBA
&gt; with them
&gt; ImageFrameSink/RGBA32Buffer/whatever passes these values along to the backend&apos;s
&gt; underlying NativeImage functions
&gt; These functions decide how to downsample to an appropriate format
&gt; 
&gt; With your existing code, the downsampling would need to be done in the decoder,
&gt; which would need to check whether the image frame claims to be 16-bit.  All
&gt; that seems to do is cause us to plumb more state up through shared code and
&gt; push the complexity on everyone.

I think you make a good point here.

&gt; 
&gt; &gt; &gt; &gt; &gt; Why does getFrame() return 0 when the status is frameEmpty?  An empty frame is
&gt; &gt; &gt; &gt; &gt; still a valid one.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; why? Who likes to waste CPU time on empty frame?
&gt; &gt; &gt; 
&gt; &gt; &gt; What CPU is being wasted?  We don&apos;t blit anything with empty frames.
&gt; &gt; 
&gt; &gt; So why cannot it return 0?
&gt; 
&gt; Practically, it can; there are only two reasons I wouldn&apos;t do it:
&gt; * The API is lying
&gt; * A backend can&apos;t read any data off a NULL pointer, such as the size of the
&gt; frame, if it wants it
&gt; 
&gt; If it makes no difference, I don&apos;t see why we should lie to callers.  It&apos;s not
&gt; a big deal, it just seems like a waste to explicitly check for an empty frame
&gt; so we can lie.

The object itself has size and all information. getFrame() just return a platform image, which can be null when it doesn&apos;t want to return a valid image. for example, failed to allocated memory for it.

&gt; 
&gt; &gt; &gt; &gt; &gt; The proper use of setCanFreeBuffer() is not obvious to me.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This nofities the buffer that decoder has finished writting to the buffer, so
&gt; &gt; &gt; &gt; the buffer can be released when it&apos;s under memory pressure.
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t this the same signal as setting the status to FrameComplete?
&gt; &gt; 
&gt; &gt; FrameComplete is just for a single frame. But GIF decoder may still want to
&gt; &gt; read a finished frame when it processes the next one. 
&gt; 
&gt; So it&apos;s _not_ about the decoder being finished writing to the buffer.  It&apos;s
&gt; some signal that the decoder is finished reading the buffer too.  In that case
&gt; it seems like a bug that you don&apos;t finishBitmap() when we go to FrameComplete.

finisheBitmap() is called when ImageSource is taking the bitmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140318</commentid>
    <comment_count>42</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-14 13:19:04 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; &gt; My object is to reduce the complexity and special-casing of shared code,
&gt; &gt; especially the decoders themselves.  Let&apos;s say platform X supports native image
&gt; &gt; storage in various formats (565, 888, 8888, etc.).  The pattern that makes
&gt; &gt; sense to me is:
&gt; &gt; 
&gt; &gt; Image Decoder reads the pixel values out of the source image and calls setRGBA
&gt; &gt; with them
&gt; &gt; ImageFrameSink/RGBA32Buffer/whatever passes these values along to the backend&apos;s
&gt; &gt; underlying NativeImage functions
&gt; &gt; These functions decide how to downsample to an appropriate format
&gt; &gt; 
&gt; &gt; With your existing code, the downsampling would need to be done in the decoder,
&gt; &gt; which would need to check whether the image frame claims to be 16-bit.  All
&gt; &gt; that seems to do is cause us to plumb more state up through shared code and
&gt; &gt; push the complexity on everyone.
&gt; 
&gt; I think you make a good point here.

You both are assuming that the decoder can stream pixels directly into the native image buffer.

That simply isn&apos;t the case for some of the existing users of the built-in image decoders.  This was covered I think by Holger.  It might not even be the case that the native image buffer is in main memory.

At this point, I think the discussion should move away from WinCE&apos;s ImageFrameSink and more towards the path we want to take in the future.  I still do not believe we are all on the same page.  Perhaps a conference call or two with all interested parties would be in order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140322</commentid>
    <comment_count>43</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 13:20:59 -0700</bug_when>
    <thetext>
&gt; Try cases like http://www.aintitcool.com/files/HoD2.gif and
&gt; http://img2.abload.de/img/almost_failedovs.gif and make sure that:
&gt; * Images animate in the same time as Chrome 2/Safari 4 (not slower)
&gt; * You don&apos;t blow out memory or CPU usage

Hm... you&apos;re right, these are too big GIF, we have to clean the memory for previous frames. thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140324</commentid>
    <comment_count>44</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 13:23:13 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; &gt; Try cases like http://www.aintitcool.com/files/HoD2.gif and
&gt; &gt; http://img2.abload.de/img/almost_failedovs.gif and make sure that:
&gt; &gt; * Images animate in the same time as Chrome 2/Safari 4 (not slower)
&gt; &gt; * You don&apos;t blow out memory or CPU usage
&gt; 
&gt; Hm... you&apos;re right, these are too big GIF, we have to clean the memory for
&gt; previous frames. thanks.

seems the crash is due to some changes made in upstream. our previous builds work with them with no problem. investigating</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140332</commentid>
    <comment_count>45</comment_count>
      <attachid>34772</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-08-14 13:39:53 -0700</bug_when>
    <thetext>Comment on attachment 34772
1) ImageFrameSink

Clearing flags as these need more discussion anyways</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33288</attachid>
            <date>2009-07-22 14:11:33 -0700</date>
            <delta_ts>2009-07-22 14:57:46 -0700</delta_ts>
            <desc>this is the patch</desc>
            <filename>image_decoder.patch</filename>
            <type>text/plain</type>
            <size>56027</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQxZWY1Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBA
IC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKwllbnVtIE1h
dGNoVHlwZXsKKwkJRXhhY3QsCisJCVVwcGVyQm91bmQsCisJCUxvd2VyQm91bmQKKwl9OworfQor
Cit0ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IHN0YXRpYyBpbnQgZ2V0U2NhbGVkVmFsdWUoY29u
c3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVlcywgaW50IG9yaWcsIGludCBzZWFyY2hTdGFydCkK
K3sKKwlpbnQgc2l6ZSA9IHNjYWxlZFZhbHVlcy5zaXplKCk7CisgICAgY29uc3QgaW50KiBkYXRh
U3RhcnQgPSBzY2FsZWRWYWx1ZXMuZGF0YSgpOworICAgIGNvbnN0IGludCogZGF0YUVuZCA9IGRh
dGFTdGFydCArIHNpemU7CisgICAgY29uc3QgaW50KiBwb3MgPSBzdGQ6Omxvd2VyX2JvdW5kKGRh
dGFTdGFydCArIHNlYXJjaFN0YXJ0LCBkYXRhRW5kLCBvcmlnKTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBFeGFjdDoKKyAgICAgICAgICAgIHJldHVybiBwb3MgIT0gZGF0YUVu
ZCAmJiAqcG9zID09IG9yaWcgPyBwb3MgLSBkYXRhU3RhcnQgOiAtMTsKKyAgICAgICAgY2FzZSBM
b3dlckJvdW5kOgorICAgICAgICAgICAgcmV0dXJuIHBvcyAhPSBkYXRhRW5kICYmICpwb3MgPT0g
b3JpZyA/IHBvcyAtIGRhdGFTdGFydCA6IHBvcyAtIGRhdGFTdGFydCAtIDE7CisgICAgICAgIGNh
c2UgVXBwZXJCb3VuZDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBwb3Mg
IT0gZGF0YUVuZCA/IHBvcyAtIGRhdGFTdGFydCA6IC0xOworICAgIH0KK30KKworaW50IEltYWdl
RGVjb2Rlcjo6dXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCit7
CisJcmV0dXJuIGdldFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3Jp
Z1gsIHNlYXJjaFN0YXJ0KTsKK30KKworaW50IEltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxl
ZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCit7CisJcmV0dXJuIGdldFNjYWxlZFZhbHVl
PExvd2VyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0YXJ0KTsKK30KKwor
aW50IEltYWdlRGVjb2Rlcjo6c2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCkKK3sK
KwlyZXR1cm4gZ2V0U2NhbGVkVmFsdWU8RXhhY3Q+KG1fc2NhbGVkUm93cywgb3JpZ1ksIHNlYXJj
aFN0YXJ0KTsKK30KKwordm9pZCBJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vz
c2FyeSgpIAoreworCWludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOworCWludCBoZWlnaHQgPSBt
X3NpemUuaGVpZ2h0KCk7CisJaW50IG51bVBpeGVscyA9IGhlaWdodCAqIHdpZHRoOworICAgIGlm
IChtX21heE51bVBpeGVscyA8PSAwIHx8IG51bVBpeGVscyA8PSBtX21heE51bVBpeGVscykgewor
CQltX3NjYWxlZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisJbV9zY2FsZWQg
PSB0cnVlOworCWRvdWJsZSBzaHJpbmsgPSBzcXJ0KG1fbWF4TnVtUGl4ZWxzIC8gKGRvdWJsZSlu
dW1QaXhlbHMpOworCWRvdWJsZSB6b29tID0gMS4gL3NocmluazsKKwltX3NjYWxlZENvbHVtbnMu
cmVzZXJ2ZUNhcGFjaXR5KHdpZHRoICogc2hyaW5rICsgMC41KTsKKwlmb3IgKGludCBzY2FsZWRY
ID0gMDs7KSB7CisJCWludCB4ID0gc2NhbGVkWCAqIHpvb20gKyAwLjU7CisJCWlmICh4IDwgd2lk
dGgpIHsKKwkJCW1fc2NhbGVkQ29sdW1ucy5hcHBlbmQoeCk7CisJCQkrK3NjYWxlZFg7CisJCX0g
ZWxzZQorCQkJYnJlYWs7CisJfQorCW1fc2NhbGVkUm93cy5yZXNlcnZlQ2FwYWNpdHkoaGVpZ2h0
ICogc2hyaW5rICsgMC41KTsKKwlmb3IgKGludCBzY2FsZWRZID0gMDs7KSB7CisJCWludCB5ID0g
c2NhbGVkWSAqIHpvb20gKyAwLjU7CisJCWlmICh5IDwgaGVpZ2h0KSB7CisJCQltX3NjYWxlZFJv
d3MuYXBwZW5kKHkpOworCQkJKytzY2FsZWRZOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KK30K
KworfQorCisjZW5kaWYgLy8gVVNFKElNQUdFRlJBTUVTSU5LKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggOWMyYTlkNy4uNWQ2NGRkMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2
ICszNCw5IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykK
KyNpbmNsdWRlICJJbWFnZUZyYW1lU2luay5oIgorI2VuZGlmCiAKICNpZiBQTEFURk9STShTS0lB
KQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgpAQCAtNDEsNiArNDUsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIC8vIFRoZSBS
R0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBS
R0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwKICAgICAvLyBkZWNvZGVycyB3
cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBm
b3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBidWZmZXIuCiAgICAgY2xhc3MgUkdCQTMy
QnVmZmVyIHsKQEAgLTE3Niw2ICsxODEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGlu
aXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KICAgICB9OworI2VuZGlmIC8vICFVU0UoSU1BR0VG
UkFNRVNJTkspCiAKICAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBi
YXNlIGNsYXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQgZGVjb2RlcnMKICAgICAvLyAoZS5n
LiwgR0lGLCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNv
ZGUgaW50byBSR0JBMzIgZm9ybWF0CkBAIC0xODUsMTYgKzE5MSwzNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIEltYWdlRGVjb2RlcigpCiAgICAgICAgICAgICA6IG1fZmFpbGVkKGZh
bHNlKQogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCisjaWYgVVNFKElNQUdF
RlJBTUVTSU5LKQorICAgICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAg
ICAgICAgICAgLCBtX21heE51bVBpeGVscygtMSkKKyAgICAgICAgICAgICwgbV9zY2FsZWQoZmFs
c2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB+SW1h
Z2VEZWNvZGVyKCkge30KKyAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkKKyAgICAgICAg
eworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgICAgIGZvciAoVmVjdG9yPEltYWdl
RnJhbWVTaW5rKj46Oml0ZXJhdG9yIGkgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKTsgaSA8
IG1fZnJhbWVCdWZmZXJDYWNoZS5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgIEltYWdlRnJh
bWVTaW5rOjpkZWxldGVJbnN0YW5jZSgqaSk7CisjZW5kaWYKKyAgICAgICAgfQogCiAgICAgICAg
IC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFu
IHVuZGVjb2RlZCBpbWFnZSBvZiB0aGlzIHR5cGUuCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQor
ICAgICAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERh
dGFSZWNlaXZlZDsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Rh
dGEgPSBkYXRhOworICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNl
aXZlZDsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIg
cGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKSB7IG1fZGF0YSA9IGRhdGE7IH0KKyNlbmRpZgogCiAgICAgICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LiBU
aGlzIGRlZmF1bHQKICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRydWUg
aWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0IGFuZCB3ZSBoYXZlIG5vdApAQCAtMjM2LDEwICsyNjIs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0
aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFs
IGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQog
CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5r
KiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSA9IDA7CisgICAgICAgIHZvaWQgc2V0
TWF4TnVtUGl4ZWxzKGludCBtKSB7IG1fbWF4TnVtUGl4ZWxzID0gbTsgfQorICAgICAgICBTaGFy
ZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KKyNlbHNlCiAgICAgICAg
IC8vIENhbGxlZCB0byBvYnRhaW4gdGhlIFJHQkEzMkJ1ZmZlciBmdWxsIG9mIGRlY29kZWQgZGF0
YSBmb3IgcmVuZGVyaW5nLiAgVGhlCiAgICAgICAgIC8vIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVj
b2RlIGFzIG11Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUgaGFuZGluZwogICAgICAg
ICAvLyBiYWNrIHRoZSBidWZmZXIuCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSA9IDA7CisjZW5kaWYKIAogICAgICAgICAvLyBX
aGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQgZXZlbiBzdXBwb3J0cyBh
bHBoYSB0cmFuc3BhcmVuY3kuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjU3LDEwICsyODksMjUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAg
ICAgICBpbnQgbV9tYXhOdW1QaXhlbHM7CisgICAgICAgIFZlY3RvcjxJbWFnZUZyYW1lU2luayo+
IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRDb2x1bW5z
OworICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZFJvd3M7CisgICAgICAgIGJvb2wgbV9zY2Fs
ZWQ7CisgICAgICAgIGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgdm9pZCBwcmVw
YXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaW50IHVwcGVyQm91bmRTY2FsZWRY
KGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CisgICAgICAgIGludCBsb3dlckJvdW5k
U2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCA9IDApOworICAgICAgICBpbnQgc2Nh
bGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCA9IDApOworI2Vsc2UKICAgICAgICAgVmVj
dG9yPFJHQkEzMkJ1ZmZlcj4gbV9mcmFtZUJ1ZmZlckNhY2hlOworI2VuZGlmCiAgICAgICAgIGJv
b2wgbV9mYWlsZWQ7CiAKKyNpZiAhVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIHByaXZhdGU6Cisj
ZW5kaWYKICAgICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhl
IGltYWdlIGFzICJ3aWR0aCAqIGhlaWdodCAqIDQiCiAgICAgICAgIC8vIGFuZCByZXR1cm4gaXQg
YXMgYSAoc2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KICAgICAgICAgc3RhdGljIGJvb2wg
aXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAK
aW5kZXggMWM2YjYyZC4uYmRjMThiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNSwxMCBAQCBwdWJs
aWM6CiAgICAgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZShHSUZJbWFnZURlY29kZXIqIGRlY29kZXIg
PSAwKQogICAgICAgICA6IG1fcmVhZGVyKGRlY29kZXIpCiAgICAgICAgICwgbV9yZWFkT2Zmc2V0
KDApCisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgICAg
ICAsIG1fY3VycmVudEJ1ZmZlclNpemUoMCkKKyAgICAgICAgLCBtX2pvYkNvbXBsZXRlKGZhbHNl
KQorI2VuZGlmCiAgICAgewogICAgIH0KIApAQCAtNDIsNiArNDcsNDUgQEAgcHVibGljOgogICAg
ICAgICBtX3JlYWRlci5jbG9zZSgpOwogICAgIH0KIAorCisjaWYgUExBVEZPUk0oV0lOQ0UpICYm
IFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgIHVuc2lnbmVkIGN1cnJlbnRCdWZmZXJTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50QnVmZmVyU2l6ZTsgfQorICAgIHZvaWQgc2V0Q29tcGxl
dGUoKSB7IG1fam9iQ29tcGxldGUgPSB0cnVlOyB9CisgICAgYm9vbCBkZWNvZGUoY29uc3QgU2hh
cmVkQnVmZmVyJiBkYXRhLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5ID0gR0lGSW1h
Z2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksIHVuc2lnbmVkIGludCBoYWx0RnJhbWUgPSAtMSkKKyAg
ICB7CisgICAgICAgIGJvb2wgcXVlcnlTaXplID0gcXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpH
SUZTaXplUXVlcnk7CisgICAgICAgIGlmICghcXVlcnlTaXplICYmIG1fcmVhZGVyLmltYWdlc19k
ZWNvZGVkID49IChpbnQpaGFsdEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgZm9yICg7IW1fam9iQ29tcGxldGU7KSB7CisgICAgICAgICAgICBpZiAobV9yZWFkZXIu
Y2xpZW50cHRyICYmIG1fcmVhZGVyLmNsaWVudHB0ci0+ZmFpbGVkKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKG1fcmVhZE9mZnNldCA+PSBkYXRhLnNp
emUoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9qb2JDb21wbGV0ZSAmJiBtX3JlYWRlci5j
bGllbnRwdHIgJiYgbV9yZWFkZXIuY2xpZW50cHRyLT5pc0FsbERhdGFSZWNlaXZlZCgpKQorICAg
ICAgICAgICAgICAgICAgICBtX3JlYWRlci5jbGllbnRwdHItPmdpZkNvbXBsZXRlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIG5vIG1vcmUgZGF0YQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgU2hhcmVkQnVmZmVyU2VnbWVudCBzZWdtZW50KGRhdGEsIG1fcmVhZE9mZnNl
dCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCdWZmZXJTaXplID0gbV9yZWFkT2Zmc2V0ICsgc2Vn
bWVudC5sZW5ndGgoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9yaWdPZmZzZXQgPSBtX3JlYWRP
ZmZzZXQ7CisgICAgICAgICAgICBpZiAoIW1fcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNo
YXIqKXNlZ21lbnQuZGF0YSgpLCBzZWdtZW50Lmxlbmd0aCgpLCBxdWVyeSwgaGFsdEZyYW1lKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChxdWVyeVNp
emUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9yZWFkZXIuY2xpZW50cHRyID8gbV9yZWFkZXIu
Y2xpZW50cHRyLT5pc1NpemVBdmFpbGFibGVXaXRob3V0RGVjb2RpbmcoKSA6IG1fcmVhZE9mZnNl
dCAhPSBvcmlnT2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9yZWFkZXIuaW1hZ2VzX2RlY29kZWQgPj0gKGludCloYWx0RnJh
bWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fam9iQ29tcGxldGUgJiYgbV9yZWFkZXIuY2xp
ZW50cHRyICYmIG1fcmVhZGVyLmNsaWVudHB0ci0+aXNTaXplQXZhaWxhYmxlV2l0aG91dERlY29k
aW5nKCkgJiYgbV9yZWFkZXIuaW1hZ2VzX2RlY29kZWQgPT0gbV9yZWFkZXIuY2xpZW50cHRyLT5m
cmFtZUNvdW50KCkgJiYgbV9yZWFkZXIuY2xpZW50cHRyLT5pc0FsbERhdGFSZWNlaXZlZCgpKQor
ICAgICAgICAgICAgICAgICAgICBtX3JlYWRlci5jbGllbnRwdHItPmdpZkNvbXBsZXRlKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHVwZGF0ZSByZWFkIG9mZnNldCBieSBvdXJzZWx2
ZXMuCisgICAgICAgICAgICBtX3JlYWRPZmZzZXQgPSBtX2N1cnJlbnRCdWZmZXJTaXplOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbHNlCiAgICAgYm9vbCBkZWNv
ZGUoU2hhcmVkQnVmZmVyKiBkYXRhLCAKICAgICAgICAgICAgICAgICBHSUZJbWFnZURlY29kZXI6
OkdJRlF1ZXJ5IHF1ZXJ5ID0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksCiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGhhbHRGcmFtZSA9IC0xKQpAQCAtNTAsNiArOTQsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoYWx0RnJhbWUpOwogICAgIH0KKyNlbmRpZgogCiAgICAgdW5zaWdu
ZWQgZnJhbWVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmltYWdlc19jb3VudDsgfQog
ICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5sb29wX2Nv
dW50OyB9CkBAIC04MSwxOCArMTI2LDI5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR0lGSW1h
Z2VSZWFkZXIgbV9yZWFkZXI7CiAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OworI2lmIFBMQVRG
T1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICB1bnNpZ25lZCBtX2N1cnJl
bnRCdWZmZXJTaXplOworICAgIGJvb2wgbV9qb2JDb21wbGV0ZTsKKyNlbmRpZgogfTsKIAogR0lG
SW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoKQogICAgIDogbV9mcmFtZUNvdW50VmFsaWQo
dHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSkKICAgICAs
IG1fcmVhZGVyKDApCisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxF
KQorICAgICwgbV9jdXJyZW50UmVhZGVyKDApCisgICAgLCBtX3NlY29uZGFyeVJlYWRlcigwKQor
I2VuZGlmCiB7CiB9CiAKIEdJRkltYWdlRGVjb2Rlcjo6fkdJRkltYWdlRGVjb2RlcigpCiB7CiAg
ICAgZGVsZXRlIG1fcmVhZGVyOworI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JD
SE1PQklMRSkKKyAgICBkZWxldGUgbV9zZWNvbmRhcnlSZWFkZXI7CisjZW5kaWYKIH0KIAogLy8g
VGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCkBAIC0xMDgsOCArMTY0LDEzIEBAIHZvaWQgR0lG
SW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpCiAgICAgbV9mcmFtZUNvdW50VmFsaWQgPSBmYWxzZTsKIAogICAgIC8vIENyZWF0ZSB0
aGUgR0lGIHJlYWRlci4KLSAgICBpZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxlZCkKKyAgICBpZiAo
IW1fcmVhZGVyICYmICFtX2ZhaWxlZCkgewogICAgICAgICBtX3JlYWRlciA9IG5ldyBHSUZJbWFn
ZURlY29kZXJQcml2YXRlKHRoaXMpOworI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShU
T1JDSE1PQklMRSkKKyAgICAgICAgbV9zZWNvbmRhcnlSZWFkZXIgPSBuZXcgR0lGSW1hZ2VEZWNv
ZGVyUHJpdmF0ZSh0aGlzKTsKKyAgICAgICAgbV9jdXJyZW50UmVhZGVyID0gbV9yZWFkZXI7Cisj
ZW5kaWYKKyAgICB9CiB9CiAKIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9u
IGhhcyBiZWVuIGRlY29kZWQgeWV0LgpAQCAtMTI4LDYgKzE4OSwyNyBAQCBpbnQgR0lGSW1hZ2VE
ZWNvZGVyOjpmcmFtZUNvdW50KCkKICAgICAvLyBJZiB0aGUgZGVjb2RlciBoYWQgYW4gZWFybGll
ciBlcnJvciwgd2Ugd2lsbCBqdXN0IHJldHVybiB3aGF0IHdlIGhhZCBkZWNvZGVkCiAgICAgLy8g
c28gZmFyLgogICAgIGlmICghbV9mcmFtZUNvdW50VmFsaWQpIHsKKyNpZiBQTEFURk9STShXSU5D
RSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgIG1fY3VycmVudFJlYWRlciA9IG1f
c2Vjb25kYXJ5UmVhZGVyOworICAgICAgICBtX3NlY29uZGFyeVJlYWRlci0+ZGVjb2RlKCptX2Rh
dGEsIEdJRkZyYW1lQ291bnRRdWVyeSk7CisgICAgICAgIG1fY3VycmVudFJlYWRlciA9IG1fcmVh
ZGVyOworCisgICAgICAgIHVuc2lnbmVkIG5ld0NvdW50ID0gbV9zZWNvbmRhcnlSZWFkZXItPmZy
YW1lQ291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkQ291bnQgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGUuc2l6ZSgpOworICAgICAgICBpZiAobmV3Q291bnQgPiBvbGRDb3VudCkgeworICAgICAgICAg
ICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2VydmVDYXBhY2l0eShuZXdDb3VudCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRDb3VudDsgaSA8IG5ld0NvdW50OyArK2kpCisgICAg
ICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmFwcGVuZChJbWFnZUZyYW1lU2luazo6Y3Jl
YXRlSW5zdGFuY2UoZmFsc2UpKTsKKyAgICAgICAgfQorICAgICAgICBtX2ZyYW1lQ291bnRWYWxp
ZCA9IHRydWU7CisjZWxpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIEdJRkltYWdlRGVj
b2RlclByaXZhdGUgcmVhZGVyOworICAgICAgICByZWFkZXIuZGVjb2RlKG1fZGF0YS0+YnVmZmVy
KCksIEdJRkZyYW1lQ291bnRRdWVyeSk7CisgICAgICAgIG1fZnJhbWVDb3VudFZhbGlkID0gdHJ1
ZTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2VydmVDYXBhY2l0eShyZWFkZXIuZnJh
bWVDb3VudCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9mcmFtZUJ1ZmZlckNhY2hl
LnNpemUoKTsgaSA8IHJlYWRlci5mcmFtZUNvdW50KCk7ICsraSkKKyAgICAgICAgICAgIG1fZnJh
bWVCdWZmZXJDYWNoZS5hcHBlbmQoSW1hZ2VGcmFtZVNpbms6OmNyZWF0ZUluc3RhbmNlKGZhbHNl
KSk7CisjZWxzZQogICAgICAgICAvLyBGSVhNRTogU2Nhbm5pbmcgYWxsIHRoZSBkYXRhIGhhcyBP
KG5eMikgYmVoYXZpb3IgaWYgdGhlIGRhdGEgd2VyZSB0byBjb21lIGluIHJlYWxseQogICAgICAg
ICAvLyBzbG93bHkuICBNaWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8gY2xvbmUgb3VyIGV4
aXN0aW5nIHJlYWQgc2Vzc2lvbiB0byBwcmVzZXJ2ZQogICAgICAgICAvLyBzdGF0ZSwgYnV0IGZv
ciBub3cgd2UganVzdCBjcmF3bCBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3
b3JzZSB0aGFuIHdoYXQKQEAgLTEzOSw2ICsyMjEsNyBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvdW50KCkKICAgICAgICAgcmVhZGVyLmRlY29kZShtX2RhdGEuZ2V0KCksIEdJRkZyYW1l
Q291bnRRdWVyeSk7CiAgICAgICAgIG1fZnJhbWVDb3VudFZhbGlkID0gdHJ1ZTsKICAgICAgICAg
bV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuZnJhbWVDb3VudCgpKTsKKyNlbmRpZgog
ICAgIH0KIAogICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwpAQCAtMTQ3LDYg
KzIzMCwxOSBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKIC8vIFRoZSBudW1i
ZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCiBpbnQg
R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAogeworI2lmIFBMQVRGT1JN
KFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICBpZiAobV9yZWFkZXIpIHsKKyAg
ICAgICAgY29uc3QgaW50IHJlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5yZXBldGl0aW9uQ291
bnQoKTsKKyAgICAgICAgaWYgKHJlcGV0aXRpb25Db3VudCAhPSBjTG9vcENvdW50Tm90U2VlbikK
KyAgICAgICAgICAgIHJldHVybiByZXBldGl0aW9uQ291bnQ7CisgICAgfQorICAgIGlmIChtX3Nl
Y29uZGFyeVJlYWRlcikgeworICAgICAgICBjb25zdCBpbnQgcmVwZXRpdGlvbkNvdW50ID0gbV9z
ZWNvbmRhcnlSZWFkZXItPnJlcGV0aXRpb25Db3VudCgpOworICAgICAgICBpZiAocmVwZXRpdGlv
bkNvdW50ICE9IGNMb29wQ291bnROb3RTZWVuKQorICAgICAgICAgICAgcmV0dXJuIHJlcGV0aXRp
b25Db3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyNlbHNlCiAg
ICAgLy8gVGhpcyB2YWx1ZSBjYW4gYXJyaXZlIGF0IGFueSBwb2ludCBpbiB0aGUgaW1hZ2UgZGF0
YSBzdHJlYW0uICBNb3N0IEdJRnMKICAgICAvLyBpbiB0aGUgd2lsZCBkZWNsYXJlIGl0IG5lYXIg
dGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgc28gaXQgdXN1YWxseSBpcwogICAgIC8vIHNldCBi
eSB0aGUgdGltZSB3ZSd2ZSBkZWNvZGVkIHRoZSBzaXplLCBidXQgKGRlcGVuZGluZyBvbiB0aGUg
R0lGIGFuZCB0aGUKQEAgLTE2Niw4ICsyNjIsMjIgQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6cmVw
ZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gcmVw
ZXRpdGlvbkNvdW50OwogICAgIH0KICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CisjZW5k
aWYKIH0KIAorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKK0ltYWdlRnJhbWVTaW5rKiBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKGlu
ZGV4IDwgMCB8fCBpbmRleCA+PSBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEltYWdlRnJhbWVTaW5rKiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVtpbmRleF07CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCisgICAgICAgIC8vIERlY29kZSB0aGlzIGZy
YW1lLgorICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCsxKTsKKyAgICByZXR1cm4g
ZnJhbWU7Cit9CisjZWxzZQogUkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0
PHNpemVfdD4oZnJhbWVDb3VudCgpKSkKQEAgLTE3OCw5ICsyODgsMTIgQEAgUkdCQTMyQnVmZmVy
KiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAg
ICAgIGRlY29kZShHSUZGdWxsUXVlcnksIGluZGV4ICsgMSk7IC8vIERlY29kZSB0aGlzIGZyYW1l
LgogICAgIHJldHVybiAmZnJhbWU7CiB9CisjZW5kaWYKIAogdm9pZCBHSUZJbWFnZURlY29kZXI6
OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKIHsKKyNpZiBV
U0UoSU1BR0VGUkFNRVNJTkspCisjZWxzZQogICAgIC8vIEluIHNvbWUgY2FzZXMsIGxpa2UgaWYg
dGhlIGRlY29kZXIgd2FzIGRlc3Ryb3llZCB3aGlsZSBhbmltYXRpbmcsIHdlCiAgICAgLy8gY2Fu
IGJlIGFza2VkIHRvIGNsZWFyIG1vcmUgZnJhbWVzIHRoYW4gd2UgY3VycmVudGx5IGhhdmUuCiAg
ICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC0yMjcsNiArMzQwLDcgQEAg
dm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJC
ZWZvcmVGcmFtZSkKICAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVFbXB0eSkKICAgICAgICAgICAgIGotPmNsZWFyKCk7CiAgICAgfQorI2VuZGlmCiB9CiAKIC8v
IEZlZWQgZGF0YSB0byB0aGUgR0lGIHJlYWRlci4KQEAgLTIzNSw3ICszNDksMTEgQEAgdm9pZCBH
SUZJbWFnZURlY29kZXI6OmRlY29kZShHSUZRdWVyeSBxdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJh
bWUpCiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm47CiAKKyNpZiBQTEFURk9STShX
SU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgbV9mYWlsZWQgPSAhbV9yZWFkZXIt
PmRlY29kZSgqbV9kYXRhLCBxdWVyeSwgaGFsdEF0RnJhbWUpOworI2Vsc2UKICAgICBtX2ZhaWxl
ZCA9ICFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS5nZXQoKSwgcXVlcnksIGhhbHRBdEZyYW1lKTsK
KyNlbmRpZgogICAgIAogICAgIGlmIChtX2ZhaWxlZCkgewogICAgICAgICBkZWxldGUgbV9yZWFk
ZXI7CkBAIC0yNDYsMTYgKzM2NCw4NCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKEdJ
RlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKIC8vIENhbGxiYWNrcyBmcm9tIHRo
ZSBHSUYgcmVhZGVyLgogYm9vbCBHSUZJbWFnZURlY29kZXI6OnNpemVOb3dBdmFpbGFibGUodW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTksp
CisgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CisjZW5kaWYKICAgICByZXR1cm4g
c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29k
aW5nSGFsdGVkKHVuc2lnbmVkIGJ5dGVzTGVmdCkKIHsKKyNpZiBQTEFURk9STShXSU5DRSkgJiYg
UExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgbV9jdXJyZW50UmVhZGVyLT5zZXRSZWFkT2Zmc2V0
KG1fY3VycmVudFJlYWRlci0+Y3VycmVudEJ1ZmZlclNpemUoKSAtIGJ5dGVzTGVmdCk7CisjZWxz
ZQogICAgIG1fcmVhZGVyLT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0
KTsKKyNlbmRpZgogfQogCiBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
c2lnbmVkIGZyYW1lSW5kZXgpCiB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KKyAgICBJbnRSZWN0IGZyYW1l
UmVjdChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSwK
KyAgICAgICAgbV9yZWFkZXItPmZyYW1lV2lkdGgoKSwgbV9yZWFkZXItPmZyYW1lSGVpZ2h0KCkp
OworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZVJlY3QgZG9lc24ndCBleHRlbmQgcGFzdCB0
aGUgYm90dG9tLXJpZ2h0IG9mIHRoZSBidWZmZXIuCisgICAgaWYgKGZyYW1lUmVjdC5yaWdodCgp
ID4gbV9zaXplLndpZHRoKCkpCisgICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChtX3NpemUud2lk
dGgoKSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSk7CisgICAgaWYgKGZyYW1lUmVjdC5ib3R0
b20oKSA+IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChtX3Np
emUuaGVpZ2h0KCkgLSBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkpOworCisgICAgSW1hZ2VGcmFt
ZVNpbmsmIGJ1ZmZlciA9ICptX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CisgICAgYnVm
ZmVyLnNldFJlY3QoZnJhbWVSZWN0KTsKKworICAgIGJvb2wgaXNTdWJSZWN0ID0gKGZyYW1lUmVj
dC54KCkgPiAwIHx8IGZyYW1lUmVjdC55KCkgPiAwIHx8CisgICAgICAgIGZyYW1lUmVjdC53aWR0
aCgpIDwgbV9zaXplLndpZHRoKCkgfHwKKyAgICAgICAgZnJhbWVSZWN0LmhlaWdodCgpIDwgbV9z
aXplLmhlaWdodCgpKTsKKworICAgIC8vIExldCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0
aGUgY29ycmVjdCB3aWR0aC9oZWlnaHQgYW5kIHRoZW4KKyAgICAvLyBpbml0aWFsaXplIHBvcnRp
b25zIG9mIGl0IGlmIG5lZWRlZC4KKyAgICBpbnQgc2hydW5rV2lkdGggPSBtX3NjYWxlZCA/IG1f
c2NhbGVkQ29sdW1ucy5zaXplKCkgOiBtX3NpemUud2lkdGgoKTsKKyAgICBpbnQgc2hydW5rSGVp
Z2h0ID0gbV9zY2FsZWQgPyBtX3NjYWxlZFJvd3Muc2l6ZSgpIDogbV9zaXplLmhlaWdodCgpOwor
CisgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaHJ1bmtXaWR0aCwgc2hydW5rSGVpZ2h0LCBmYWxz
ZSkpIHsKKyAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHZvaWQqIGJ5dGVzID0gYnVmZmVyLmJ5dGVzKCk7CisgICAgaW50IHRvdGFsQnl0
ZXMgPSBidWZmZXIudG90YWxCeXRlcygpOworCisgICAgSW1hZ2VGcmFtZVNpbmsqIHByZXZpb3Vz
QnVmZmVyID0gKGZyYW1lSW5kZXggPiAwKSA/IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
LTFdIDogMDsKKyAgICBpZiAocHJldmlvdXNCdWZmZXIpIHsKKyAgICAgICAgd2hpbGUgKGZyYW1l
SW5kZXggPiAwICYmIHByZXZpb3VzQnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFJHQkEzMkJ1
ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKQorICAgICAgICAgICAgcHJldmlvdXNCdWZm
ZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKKyAgICB9CisKKyAgICAvLyBX
aGljaCBidWZmZXIgdG8gY29weSBmcm9tPworICAgIEltYWdlRnJhbWVTaW5rKiBjb3B5RnJvbTsK
KyAgICBpZiAoIXByZXZpb3VzQnVmZmVyKQorICAgICAgICBjb3B5RnJvbSA9IDA7CisgICAgZWxz
ZSBpZiAocHJldmlvdXNCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpE
aXNwb3NlTm90U3BlY2lmaWVkIHx8IHByZXZpb3VzQnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09
IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZUtlZXApIHsKKyAgICAgICAgY29weUZyb20gPSBwcmV2aW91
c0J1ZmZlcjsKKyAgICAgICAgYnVmZmVyLnNldENvbXBvc2l0ZWRXaXRoUHJldmlvdXNGcmFtZSgp
OworICAgIH0gZWxzZSBpZiAoaXNTdWJSZWN0KQorICAgICAgICBjb3B5RnJvbSA9IG1fZnJhbWVC
dWZmZXJDYWNoZVswXTsKKyAgICBlbHNlCisgICAgICAgIGNvcHlGcm9tID0gMDsKKworICAgIGlm
IChjb3B5RnJvbSkgeworICAgICAgICBtZW1jcHkoYnl0ZXMsIGNvcHlGcm9tLT5ieXRlcygpLCB0
b3RhbEJ5dGVzKTsKKyAgICAgICAgYnVmZmVyLmVuc3VyZUhlaWdodChtX3NpemUuaGVpZ2h0KCkp
OworICAgICAgICBpZiAoY29weUZyb20tPnVzZXNUcmFuc3BhcmVudENvbG9yKCkpCisgICAgICAg
ICAgICBidWZmZXIuc2V0VHJhbnNwYXJlbnRDb2xvcihjb3B5RnJvbS0+dHJhbnNwYXJlbnRDb2xv
cigpKTsKKworICAgICAgICBpZiAoY29weUZyb20tPmhhc0FscGhhKCkpCisgICAgICAgICAgICBi
dWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG91ciBzdGF0
dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgorICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMy
QnVmZmVyOjpGcmFtZVBhcnRpYWwpOworI2Vsc2UKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFt
ZSByZWN0IGluIG91ciBidWZmZXIuCiAgICAgSW50UmVjdCBmcmFtZVJlY3QobV9yZWFkZXItPmZy
YW1lWE9mZnNldCgpLCBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgbV9yZWFkZXItPmZyYW1lV2lkdGgoKSwgbV9yZWFkZXItPmZyYW1lSGVpZ2h0KCkpOwpA
QCAtMzI1LDYgKzUxMSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIo
dW5zaWduZWQgZnJhbWVJbmRleCkKIAogICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBh
cnRpYWxseSBjb21wbGV0ZS4KICAgICBidWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZy
YW1lUGFydGlhbCk7CisjZW5kaWYKIAogICAgIC8vIFJlc2V0IHRoZSBhbHBoYSBwaXhlbCB0cmFj
a2VyIGZvciB0aGlzIGZyYW1lLgogICAgIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhID0gZmFsc2U7
CkBAIC0zMzgsNiArNTI1LDEyMCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRS
b3codW5zaWduZWQgZnJhbWVJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpCiB7CisjaWYgVVNFKElNQUdFRlJB
TUVTSU5LKQorICAgIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdIHx8IG1fZmFp
bGVkKQorICAgICAgICByZXR1cm47CisgICAgSW1hZ2VGcmFtZVNpbmsmIGJ1ZmZlciA9ICptX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CisKKyAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgp
IHx8ICFidWZmZXIuaXNCdWZmZXJSZWFkeSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
cm93QnVmZmVyID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGludCBzb3VyY2VXaWR0aCA9
IHJvd0VuZCAtIHJvd0J1ZmZlcjsKKyAgICBpZiAoc291cmNlV2lkdGggPD0gMCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaW50IGRlc3RZID0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpICsgcm93
TnVtYmVyOworICAgIGludCBkZXN0WCA9IG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKKyAgICBp
bnQgZGVzdEVuZFggPSBkZXN0WCArIHNvdXJjZVdpZHRoOworICAgIGlmIChtX3NjYWxlZCkgewor
ICAgICAgICBkZXN0WSA9IHNjYWxlZFkoZGVzdFkpOworICAgICAgICBpZiAoZGVzdFkgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZXN0WCA9IHVwcGVyQm91bmRTY2FsZWRYKGRl
c3RYKTsKKyAgICAgICAgaWYgKGRlc3RYIDwgMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZGVzdEVuZFggPSBsb3dlckJvdW5kU2NhbGVkWChkZXN0RW5kWCAtIDEsIGRlc3RYICsgMSk7
CisgICAgICAgIGlmIChkZXN0RW5kWCA8IGRlc3RYKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICArK2Rlc3RFbmRYOworICAgIH0KKworICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsKKyAgICBtX3JlYWRlci0+Z2V0Q29sb3JNYXAoY29s
b3JNYXAsIGNvbG9yTWFwU2l6ZSk7CisgICAgaWYgKCFjb2xvck1hcCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5pc1RyYW5zcGFyZW50KCk7IAorICAg
IGJvb2wgc2F3QWxwaGEgPSBidWZmZXIudXNlc1RyYW5zcGFyZW50Q29sb3IoKSB8fCBidWZmZXIu
aGFzQWxwaGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyIHRyYW5zcGFyZW50Q29sb3IgPSBtX3JlYWRl
ci0+dHJhbnNwYXJlbnRQaXhlbCgpOworCisgICAgdW5zaWduZWQqIGRzdEVuZCA9ICh1bnNpZ25l
ZCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci5idWZmZXJXaWR0aCgpOworICAgIHVu
c2lnbmVkKiBkc3QgPSBkc3RFbmQgKyBkZXN0WDsKKyAgICBkc3RFbmQgKz0gZGVzdEVuZFg7Cisg
ICAgdW5zaWduZWQqIGN1cnJEc3QgPSBkc3Q7CisgICAgdW5zaWduZWQgY2hhciogY3VycmVudFJv
d0J5dGUgPSByb3dCdWZmZXI7CisKKyAgICB3aGlsZSAoY3VyckRzdCA8IGRzdEVuZCkgeworICAg
ICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsOworICAgICAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAg
ICAgICAgIGludCBzb3VyY2VYID0gbV9zY2FsZWRDb2x1bW5zW2N1cnJEc3QgLSBkc3RdIC0gbV9y
ZWFkZXItPmZyYW1lWU9mZnNldCgpOworICAgICAgICAgICAgQVNTRVJUKHNvdXJjZVggPj0gMCAm
JiBzb3VyY2VYIDwgc291cmNlV2lkdGgpOworICAgICAgICAgICAgcGl4ZWwgPSByb3dCdWZmZXJb
c291cmNlWF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFJvd0J5
dGUgPT0gcm93RW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcGl4ZWwg
PSAqY3VycmVudFJvd0J5dGUrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwaXhlbCA+PSBj
b2xvck1hcFNpemUpCisgICAgICAgICAgICBwaXhlbCA9IHRyYW5zcGFyZW50Q29sb3I7CisgICAg
ICAgIGJvb2wgdHJhbnNwYXJlbnQgPSBoYXNBbHBoYSAmJiBwaXhlbCA9PSB0cmFuc3BhcmVudENv
bG9yOworICAgICAgICBpZiAodHJhbnNwYXJlbnQgJiYgYnVmZmVyLmNvbXBvc2l0ZWRXaXRoUHJl
dmlvdXNGcmFtZSgpKSB7CisgICAgICAgICAgICAvLyBMZWF2ZSB0aGUgb3JpZ2luYWwgY29sb3Ig
aW4gcHJldmlvdXMgZnJhbWUKKyAgICAgICAgfSBlbHNlIGlmIChwaXhlbCA8IGNvbG9yTWFwU2l6
ZSkgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogY29sb3IgPSBjb2xvck1hcCArIHBpeGVs
ICogMzsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICpjb2xvcisrOworICAgICAgICAgICAg
dW5zaWduZWQgZ3JlZW4gPSAqY29sb3IrKzsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAq
Y29sb3I7CisgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCQSgqY3VyckRzdCwgcmVk
LCBncmVlbiwgYmx1ZSwgdHJhbnNwYXJlbnQgPyAwIDogMjU1KTsKKworICAgICAgICAgICAgaWYg
KHRyYW5zcGFyZW50KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEkgYXNzdW1lIHRoYXQg
dGhlIHRyYW5zcGFyZW50IGNvbG9yIG5ldmVyIGNoYW5nZXMgZHVyaW5nIGRlY29kaW5nIGEgc2lu
Z2xlIGZyYW1lLgorICAgICAgICAgICAgICAgIGlmICghc2F3QWxwaGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2F3QWxwaGEgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0
SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRyYW5z
cGFyZW50Q29sb3I7CisgICAgICAgICAgICAgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0Ix
Nih0cmFuc3BhcmVudENvbG9yLCByZWQsIGdyZWVuLCBibHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLnNldFRyYW5zcGFyZW50Q29sb3IodHJhbnNwYXJlbnRDb2xvcik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIudXNlc1RyYW5zcGFyZW50
Q29sb3IoKSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHBpeGVsMTY7CisgICAg
ICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQjE2KHBpeGVsMTYsIHJlZCwgZ3JlZW4s
IGJsdWUpOworICAgICAgICAgICAgICAgIGlmIChwaXhlbDE2ID09IGJ1ZmZlci50cmFuc3BhcmVu
dENvbG9yKCkpCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhclRyYW5zcGFyZW50Q29s
b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHRy
YW5zcGFyZW50Q29sb3IgbXVzdCBiZSBpbnZhbGlkIHRvbworICAgICAgICAgICAgSW1hZ2VGcmFt
ZVNpbms6OnNldFJHQkEoKmN1cnJEc3QsIDI1NSwgMjU1LCAyNTUsIHRyYW5zcGFyZW50ID8gMCA6
IDI1NSk7CisgICAgICAgICAgICBpZiAoYnVmZmVyLnVzZXNUcmFuc3BhcmVudENvbG9yKCkpCisg
ICAgICAgICAgICAgICAgYnVmZmVyLmNsZWFyVHJhbnNwYXJlbnRDb2xvcigpOworICAgICAgICAg
ICAgZWxzZSBpZiAoIXNhd0FscGhhKSB7CisgICAgICAgICAgICAgICAgc2F3QWxwaGEgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBjdXJyRHN0Kys7CisgICAgfQorCisgICAgaWYgKHJlcGVh
dENvdW50ID4gMSkgeworICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50fC0xIHRp
bWVzLgorICAgICAgICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OworICAgICAgICB1bnNp
Z25lZCBzaXplID0gbnVtICogc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICAgICAgdW5zaWduZWQgd2lk
dGggPSBidWZmZXIuYnVmZmVyV2lkdGgoKTsKKyAgICAgICAgdW5zaWduZWQqIGVuZCA9ICh1bnNp
Z25lZCopKCh1bnNpZ25lZCBjaGFyKilidWZmZXIuYnl0ZXMoKSArIGJ1ZmZlci50b3RhbEJ5dGVz
KCkpOworICAgICAgICBjdXJyRHN0ID0gZHN0ICsgd2lkdGg7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCByZXBlYXRDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoY3VyckRz
dCArIG51bSA+IGVuZCkgLy8gUHJvdGVjdCBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJydW4gZnJvbSBh
IGJvZ3VzIHJlcGVhdENvdW50LgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
bWVtY3B5KGN1cnJEc3QsIGRzdCwgc2l6ZSk7CisgICAgICAgICAgICBjdXJyRHN0ICs9IHdpZHRo
OworICAgICAgICB9CisgICAgfQorI2Vsc2UKICAgICAvLyBUaGUgcGl4ZWwgZGF0YSBhbmQgY29v
cmRpbmF0ZXMgc3VwcGxpZWQgdG8gdXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSdzCiAgICAg
Ly8gb3JpZ2luIHdpdGhpbiB0aGUgZW50aXJlIGltYWdlIHNpemUsIGkuZS4KICAgICAvLyAobV9y
ZWFkZXItPmZyYW1lWE9mZnNldCgpLCBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkpLgpAQCAtMzg2
LDEwICs2ODcsMjIgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2ln
bmVkIGZyYW1lSW5kZXgsCiAgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0aGUgcm93IGRh
dGEgaWYgbmVlZCBiZS4KICAgICBpZiAocmVwZWF0Q291bnQgPiAxKQogICAgICAgICBidWZmZXIu
Y29weVJvd05UaW1lcyhtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIHgsIHksIHN0ZDo6bWluKHkg
KyBzdGF0aWNfY2FzdDxpbnQ+KHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSk7CisjZW5k
aWYKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJh
bWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bv
c2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQogeworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAg
ICBJbWFnZUZyYW1lU2luayogYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhd
OworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdC
QTMyQnVmZmVyOjpGcmFtZUVtcHR5ICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJ1ZmZlci0+c2V0U3RhdHVzKFJHQkEzMkJ1ZmZl
cjo6RnJhbWVDb21wbGV0ZSk7CisgICAgICAgIGJ1ZmZlci0+c2V0RHVyYXRpb24oZnJhbWVEdXJh
dGlvbik7CisgICAgICAgIGJ1ZmZlci0+c2V0RGlzcG9zYWxNZXRob2QoZGlzcG9zYWxNZXRob2Qp
OworICAgICAgICBidWZmZXItPmVuc3VyZUhlaWdodChtX3NpemUuaGVpZ2h0KCkpOworICAgIH0K
KyNlbHNlCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBH
SUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5l
dmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4KICAgICBSR0JB
MzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKQEAgLTQz
MiwxNCArNzQ1LDI1IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2ln
bmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sCiAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKyNlbmRpZgogfQog
CiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQogeworI2lmIFBMQVRGT1JNKFdJ
TkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICBtX2N1cnJlbnRSZWFkZXItPnNldENv
bXBsZXRlKCk7CisgICAgaWYgKG1fcmVhZGVyID09IG1fY3VycmVudFJlYWRlcikgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlW2ldKQorICAgICAgICAgICAg
ICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS0+c2V0Q2FuRnJlZUJ1ZmZlcih0cnVlKTsKKyAgICAg
ICAgfQorICAgIH0KKyNlbHNlCiAgICAgaWYgKG1fcmVhZGVyKQogICAgICAgICBtX3JlcGV0aXRp
b25Db3VudCA9IG1fcmVhZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKICAgICBkZWxldGUgbV9yZWFk
ZXI7CiAgICAgbV9yZWFkZXIgPSAwOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmgKaW5kZXggY2QyYTBiYy4uNjFhMWY4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzU0LDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0
aW9ucyB0byBwZXJmb3JtIGZvciBhbiBhbmltYXRpb24gbG9vcC4KICAgICAgICAgdmlydHVhbCBp
bnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisg
ICAgICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlV2l0aG91dERlY29kaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplQXZhaWxhYmxlOyB9CisgICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZVNpbmsqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworI2Vsc2UKICAgICAgICAgdmlydHVhbCBS
R0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworI2VuZGlmCiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJC
ZWZvcmVGcmFtZSk7CiAKQEAgLTgxLDYgKzg3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsKICAgICAgICAgbXV0YWJsZSBpbnQg
bV9yZXBldGl0aW9uQ291bnQ7CiAgICAgICAgIEdJRkltYWdlRGVjb2RlclByaXZhdGUqIG1fcmVh
ZGVyOworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgbXV0YWJsZSBHSUZJbWFnZURl
Y29kZXJQcml2YXRlKiBtX3NlY29uZGFyeVJlYWRlcjsKKyAgICAgICAgbXV0YWJsZSBHSUZJbWFn
ZURlY29kZXJQcml2YXRlKiBtX2N1cnJlbnRSZWFkZXI7CisjZW5kaWYKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggOTM2N2I4ZS4uZWFlYWVk
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
Zy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtNiw2ICs2LDggQEAKICAqIE90aGVyIGNvbnRyaWJ1
dG9yczoKICAqICAgU3R1YXJ0IFBhcm1lbnRlciA8c3R1YXJ0QG1vemlsbGEuY29tPgogICoKKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKICAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgpAQCAtNDAsNiArNDIsMTcgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNp
bmNsdWRlIDxzdGRpby5oPiAgLy8gTmVlZGVkIGJ5IGpwZWdsaWIuaCBmb3IgRklMRS4KIAorI2lm
IFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyNpbmNsdWRlICJJbWFn
ZURlY29kZXJVdGlsaXRpZXMuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOQ0UpCisvLyBS
ZW1vdmUgd2FybmluZzogJ0ZBUicgbWFjcm8gcmVkZWZpbml0aW9uCisjdW5kZWYgRkFSCisvLyBG
aXggSU5UMzIgcmVkZWZpbml0aW9uIGVycm9yCisjZGVmaW5lIFhNRF9ICisjZW5kaWYKKwogZXh0
ZXJuICJDIiB7CiAjaW5jbHVkZSAianBlZ2xpYi5oIgogfQpAQCAtODksNiArMTAyLDkgQEAgcHVi
bGljOgogICAgICAgICAsIG1fYnl0ZXNUb1NraXAoMCkKICAgICAgICAgLCBtX3N0YXRlKEpQRUdf
SEVBREVSKQogICAgICAgICAsIG1fc2FtcGxlcygwKQorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQ
TEFURk9STShUT1JDSE1PQklMRSkKKyAgICAgICAgLCBtX2pvYkNvbXBsZXRlKGZhbHNlKQorI2Vu
ZGlmCiAgICAgewogICAgICAgICBtZW1zZXQoJm1faW5mbywgMCwgc2l6ZW9mKGpwZWdfZGVjb21w
cmVzc19zdHJ1Y3QpKTsKICAKQEAgLTEzMSw2ICsxNDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aW5mby5zcmMgPSAwOwogCiAgICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZtX2luZm8p
OworI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICAgICAg
bV9qb2JDb21wbGV0ZSA9IGZhbHNlOworI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBza2lwQnl0
ZXMobG9uZyBudW1fYnl0ZXMpIHsKQEAgLTE0NSw2ICsxNjQsNjAgQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9ieXRlc1RvU2tpcCA9IDA7CiAgICAgfQogCisjaWYgUExBVEZPUk0oV0lOQ0UpICYm
IFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgIHZvaWQgc2V0Q29tcGxldGUoKSB7IG1fam9iQ29t
cGxldGUgPSB0cnVlOyB9CisgICAgYm9vbCBkZWNvZGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRh
LCBib29sIHNpemVPbmx5KSB7CisgICAgICAgIG1fZGVjb2RpbmdTaXplT25seSA9IHNpemVPbmx5
OworCisgICAgICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSAtMTsKKyAgICAgICAgQnl0ZUJ1ZmZl
ciBidWZmZXI7CisgICAgICAgIFNoYXJlZEJ1ZmZlclNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAg
Zm9yICg7OykgeworICAgICAgICAgICAgaWYgKG1fZGVjb2Rlci0+ZmFpbGVkKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICB1bnNpZ25lZCByZWFkT2Zmc2V0
ID0gbV9idWZmZXJMZW5ndGggLSBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXI7CisgICAgICAg
ICAgICBpZiAocmVhZE9mZnNldCA9PSBsYXN0T2Zmc2V0ICYmIG1fYnVmZmVyTGVuZ3RoID09IGRh
dGEuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2pvYkNvbXBsZXRlICYmIG1fZGVj
b2Rlci0+aXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9kZWNvZGVy
LT5qcGVnQ29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdW5zaWduZWQgc2VnbWVudExlbmd0aCA9IDA7CisgICAgICAgICAgICBp
ZiAocmVhZE9mZnNldCA9PSBsYXN0T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5zZXQoZGF0YSwgcmVh
ZE9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSBzZWdtZW50Lmxl
bmd0aCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci5hcHBlbmQoc2VnbWVudC5k
YXRhKCksIHNlZ21lbnRMZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWdtZW50LnNldChkYXRh
LCByZWFkT2Zmc2V0ICsgYnVmZmVyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgc2VnbWVudExl
bmd0aCA9IHNlZ21lbnQubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIuYXBw
ZW5kKHNlZ21lbnQuZGF0YSgpLCBzZWdtZW50TGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZl
ciArPSBzZWdtZW50TGVuZ3RoOworICAgICAgICAgICAgICAgIG1faW5mby5zcmMtPm5leHRfaW5w
dXRfYnl0ZSA9IChKT0NURVQqKWJ1ZmZlci5kYXRhKCk7CisgICAgICAgICAgICAgICAgbV9idWZm
ZXJMZW5ndGggPSByZWFkT2Zmc2V0ICsgYnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICBidWZmZXIuY2xlYXIoKTsKKworICAgICAgICAgICAgICAgIGxhc3RPZmZzZXQgPSBy
ZWFkT2Zmc2V0OworCisgICAgICAgICAgICAgICAgc2VnbWVudC5zZXQoZGF0YSwgcmVhZE9mZnNl
dCArIGJ1ZmZlci5zaXplKCkpOworICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSBzZWdt
ZW50Lmxlbmd0aCgpOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gcmVh
ZE9mZnNldCArIHNlZ21lbnRMZW5ndGg7CisgICAgICAgICAgICAgICAgbV9pbmZvLnNyYy0+Ynl0
ZXNfaW5fYnVmZmVyICs9IHRvdGFsU2l6ZSAtIG1fYnVmZmVyTGVuZ3RoOworICAgICAgICAgICAg
ICAgIG1faW5mby5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IChKT0NURVQqKXNlZ21lbnQuZGF0YSgp
OworCisgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RpbGwgaGF2ZSBieXRlcyB0byBza2lwLCB0
cnkgdG8gc2tpcCB0aG9zZSBub3cuCisgICAgICAgICAgICAgICAgaWYgKG1fYnl0ZXNUb1NraXAp
CisgICAgICAgICAgICAgICAgICAgIHNraXBCeXRlcyhtX2J5dGVzVG9Ta2lwKTsKKworICAgICAg
ICAgICAgICAgIG1fYnVmZmVyTGVuZ3RoID0gdG90YWxTaXplOworICAgICAgICAgICAgfQorI2Vs
c2UKICAgICBib29sIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgc2l6ZU9u
bHkpIHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CiAgICAgICAgIApA
QCAtMTU5LDYgKzIzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNraXBCeXRlcyhtX2J5dGVz
VG9Ta2lwKTsKIAogICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IGRhdGEuc2l6ZSgpOworI2VuZGlm
CiAgICAgICAgIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3Ro
ZXJ3aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4KICAgICAgICAgaWYgKHNldGptcChtX2Vyci5z
ZXRqbXBfYnVmZmVyKSkgewpAQCAtMTcyLDcgKzI0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgLyogUmVhZCBmaWxlIHBhcmFtZXRlcnMgd2l0aCBqcGVnX3Jl
YWRfaGVhZGVyKCkgKi8KICAgICAgICAgICAgICAgICBpZiAoanBlZ19yZWFkX2hlYWRlcigmbV9p
bmZvLCB0cnVlKSA9PSBKUEVHX1NVU1BFTkRFRCkKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExB
VEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gTkVYVF9TRUdNRU5U
OworI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5z
aW9uICovCisjZW5kaWYKIAogICAgICAgICAgICAgICAgIC8qIGxldCBsaWJqcGVnIHRha2UgY2Fy
ZSBvZiBncmF5LT5SR0IgYW5kIFlDYkNyLT5SR0IgY29udmVyc2lvbnMgKi8KICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG1faW5mby5qcGVnX2NvbG9yX3NwYWNlKSB7CkBAIC0yNDIsNyArMzIwLDEx
IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGRlY29tcHJlc3NvciAqLwog
ICAgICAgICAgICAgICAgIGlmICghanBlZ19zdGFydF9kZWNvbXByZXNzKCZtX2luZm8pKQorI2lm
IFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICAgICAgICAgICAg
ICAgICAgZ290byBORVhUX1NFR01FTlQ7CisjZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsgLyogSS9PIHN1c3BlbnNpb24gKi8KKyNlbmRpZgogCiAgICAgICAgICAgICAgICAg
LyogSWYgdGhpcyBpcyBhIHByb2dyZXNzaXZlIEpQRUcgLi4uICovCiAgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IChtX2luZm8uYnVmZmVyZWRfaW1hZ2UpID8gSlBFR19ERUNPTVBSRVNTX1BST0dS
RVNTSVZFIDogSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUw7CkBAIC0yNTMsNyArMzM1LDExIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBKUEVHX0RFQ09NUFJFU1Nf
U0VRVUVOVElBTCkgewogICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9kZWNvZGVy
LT5vdXRwdXRTY2FubGluZXMoKSkKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9S
Q0hNT0JJTEUpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIE5FWFRfU0VHTUVOVDsKKyNl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyogSS9PIHN1c3BlbnNp
b24gKi8KKyNlbmRpZgogICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlJ3ZlIGNv
bXBsZXRlZCBpbWFnZSBvdXRwdXQgLi4uICovCiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCht
X2luZm8ub3V0cHV0X3NjYW5saW5lID09IG1faW5mby5vdXRwdXRfaGVpZ2h0KTsKQEAgLTI4Myw3
ICszNjksMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2Fu
LS07CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWpwZWdfc3RhcnRfb3V0cHV0
KCZtX2luZm8sIHNjYW4pKQorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1P
QklMRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBORVhUX1NFR01FTlQ7
CisjZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyog
SS9PIHN1c3BlbnNpb24gKi8KKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1dF9zY2FubGluZSA9PSAweGZm
ZmZmZikKQEAgLTI5NCwxMiArMzg0LDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyogZGlkbid0IG1hbmFnZSB0byByZWFkIGFueSBsaW5lcyAtIGZsYWcgc28g
d2UgZG9uJ3QgY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX3N0YXJ0
X291dHB1dCgpIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBzY2FuICovCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPSAweGZmZmZmZjsK
KyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBORVhUX1NFR01FTlQ7CisjZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLworI2VuZGlm
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09IG1faW5mby5vdXRwdXRfaGVpZ2h0KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFqcGVnX2ZpbmlzaF9vdXRwdXQoJm1faW5mbykp
CisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIE5FWFRfU0VHTUVOVDsKKyNlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAq
LworI2VuZGlmCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanBlZ19pbnB1dF9j
b21wbGV0ZSgmbV9pbmZvKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9p
bmZvLmlucHV0X3NjYW5fbnVtYmVyID09IG1faW5mby5vdXRwdXRfc2Nhbl9udW1iZXIpKQpAQCAt
MzE3LDcgKzQxNSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
LyogRmluaXNoIGRlY29tcHJlc3Npb24gKi8KICAgICAgICAgICAgICAgICBpZiAoIWpwZWdfZmlu
aXNoX2RlY29tcHJlc3MoJm1faW5mbykpCisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JN
KFRPUkNITU9CSUxFKQorICAgICAgICAgICAgICAgICAgICBnb3RvIE5FWFRfU0VHTUVOVDsKKyNl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAq
LworI2VuZGlmCiAKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19TSU5LX05PTl9KUEVH
X1RSQUlMRVI7CiAKQEAgLTMzMSw2ICs0MzMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgY2Fz
ZSBKUEVHX0VSUk9SOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisjaWYgUExB
VEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorTkVYVF9TRUdNRU5UOgorICAg
ICAgICBpZiAoc2l6ZU9ubHkgJiYgbV9zdGF0ZSAhPSBKUEVHX0hFQURFUiB8fCBtX2pvYkNvbXBs
ZXRlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCiAKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtMzUxLDYgKzQ1OSw5IEBAIHByaXZhdGU6CiAgICAganN0YXRlIG1f
c3RhdGU7CiAKICAgICBKU0FNUEFSUkFZIG1fc2FtcGxlczsKKyNpZiBQTEFURk9STShXSU5DRSkg
JiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgYm9vbCBtX2pvYkNvbXBsZXRlOworI2VuZGlm
CiB9OwogCiAvKiBPdmVycmlkZSB0aGUgc3RhbmRhcmQgZXJyb3IgbWV0aG9kIGluIHRoZSBJSkcg
SlBFRyBkZWNvZGVyIGNvZGUuICovCkBAIC00MDQsOCArNTE1LDE2IEBAIHZvaWQgSlBFR0ltYWdl
RGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQogICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogCiAg
ICAgLy8gQ3JlYXRlIHRoZSBKUEVHIHJlYWRlci4KLSAgICBpZiAoIW1fcmVhZGVyICYmICFtX2Zh
aWxlZCkKKyAgICBpZiAoIW1fcmVhZGVyICYmICFtX2ZhaWxlZCkgeworI2lmIFBMQVRGT1JNKFdJ
TkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKwkJTWVtb3J5QWxsb2NhdGlvbkNhbkZhaWwg
Y2FuRmFpbDsKKyNlbmRpZgogICAgICAgICBtX3JlYWRlciA9IG5ldyBKUEVHSW1hZ2VSZWFkZXIo
dGhpcyk7CisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorCQlp
ZiAoIW1fcmVhZGVyKQorCQkJbV9mYWlsZWQgPSB0cnVlOworI2VuZGlmCisgICAgfQogfQogCiAv
LyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHll
dC4KQEAgLTQxNyw2ICs1MzYsMjIgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQog
CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorSW1hZ2VGcmFtZVNpbmsqIEpQRUdJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKGluZGV4KQor
ICAgICAgICByZXR1cm4gMDsKKworCWlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQor
CQltX2ZyYW1lQnVmZmVyQ2FjaGUuYXBwZW5kKEltYWdlRnJhbWVTaW5rOjpjcmVhdGVJbnN0YW5j
ZSh0cnVlKSk7CisKKyAgICBJbWFnZUZyYW1lU2luayogZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF07CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCisgICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1l
LgorICAgICAgICBkZWNvZGUoKTsKKyAgICByZXR1cm4gZnJhbWU7Cit9CisjZWxzZQogUkdCQTMy
QnVmZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KQogewogICAgIGlmIChpbmRleCkKQEAgLTQzMSw2ICs1NjYsNyBAQCBSR0JBMzJCdWZmZXIqIEpQ
RUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAg
IGRlY29kZSgpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CisjZW5kaWYKIAogLy8gRmVlZCBkYXRh
IHRvIHRoZSBKUEVHIHJlYWRlci4KIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wg
c2l6ZU9ubHkpCkBAIC00MzgsOSArNTc0LDIxIEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgc2l6ZU9ubHkpCiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm47CiAK
KyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisJeworCQlNZW1v
cnlBbGxvY2F0aW9uQ2FuRmFpbCBjYW5GYWlsOworCQltX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVj
b2RlKCptX2RhdGEsIHNpemVPbmx5KTsKKwl9CisjZWxzZQogICAgIG1fZmFpbGVkID0gIW1fcmVh
ZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIoKSwgc2l6ZU9ubHkpOwotCi0gICAgaWYgKG1fZmFp
bGVkIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkgeworI2VuZGlm
CisKKyAgICBpZiAobV9mYWlsZWQKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisJCXx8ICghbV9m
cmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAoIW1fZnJhbWVCdWZmZXJDYWNoZVswXSB8fCBt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF0tPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZSkpKSB7CisjZWxzZQorICAgICAgICB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVDb21wbGV0ZSkpIHsKKyNlbmRpZgogICAgICAgICBkZWxldGUgbV9yZWFkZXI7CiAgICAgICAg
IG1fcmVhZGVyID0gMDsKICAgICB9CkBAIC00NDgsNiArNTk2LDczIEBAIHZvaWQgSlBFR0ltYWdl
RGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCiAKIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
b3V0cHV0U2NhbmxpbmVzKCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgaWYgKG1f
ZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgfHwgIW1fZnJhbWVCdWZmZXJDYWNoZVswXSkgewor
ICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBSZXNpemUgdG8gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGltYWdlLgorICAg
IEltYWdlRnJhbWVTaW5rKiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYg
KGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CisgICAgICAg
IGludCBzaHJ1bmtXaWR0aCA9IG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IG1f
c2l6ZS53aWR0aCgpOworICAgICAgICBpbnQgc2hydW5rSGVpZ2h0ID0gbV9zY2FsZWQgPyBtX3Nj
YWxlZFJvd3Muc2l6ZSgpIDogbV9zaXplLmhlaWdodCgpOworCisgICAgICAgIC8vIExldCdzIHJl
c2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUgY29ycmVjdCB3aWR0aC9oZWlnaHQuCisgICAgICAg
IGlmICghYnVmZmVyLT5zZXRTaXplKHNocnVua1dpZHRoLCBzaHJ1bmtIZWlnaHQsIHRydWUpKSB7
CisgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFs
bHkgY29tcGxldGUuCisgICAgICAgIGJ1ZmZlci0+c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJh
bWVQYXJ0aWFsKTsKKworICAgICAgICAvLyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmls
bHMgdGhlIGVudGlyZSBpbWFnZS4KKyAgICAgICAgYnVmZmVyLT5zZXRSZWN0KEludFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAgIC8vIFdlIGRv
bid0IGhhdmUgYWxwaGEgKHRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgYnVmZmVyIGlzIGNv
bnN0cnVjdGVkKS4KKyAgICB9CisKKyAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0g
bV9yZWFkZXItPmluZm8oKTsKKyAgICBKU0FNUEFSUkFZIHNhbXBsZXMgPSBtX3JlYWRlci0+c2Ft
cGxlcygpOworCisgICAgd2hpbGUgKGluZm8tPm91dHB1dF9zY2FubGluZSA8IGluZm8tPm91dHB1
dF9oZWlnaHQpIHsKKyAgICAgICAgaW50IHNvdXJjZVkgPSBpbmZvLT5vdXRwdXRfc2NhbmxpbmU7
CisgICAgICAgIGludCBzb3VyY2VSb3dzID0ganBlZ19yZWFkX3NjYW5saW5lcyhpbmZvLCBzYW1w
bGVzLCAxKTsKKyAgICAgICAgaWYgKHNvdXJjZVJvd3MgIT0gMSkgeworICAgICAgICAgICAgaWYg
KHNvdXJjZVJvd3MgIT0gMCkKKyAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9zY2FsZWQp
IHsKKyAgICAgICAgICAgIGludCBkZXN0WSA9IHNjYWxlZFkoc291cmNlWSk7CisgICAgICAgICAg
ICBpZiAoZGVzdFkgPCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCogZHN0ID0gKHVuc2lnbmVkIHNob3J0KilidWZmZXItPmJ5dGVzKCkg
KyBkZXN0WSAqIGJ1ZmZlci0+YnVmZmVyV2lkdGgoKTsKKyAgICAgICAgICAgIEpTQU1QTEUgKmpC
ZWdpbiA9IHNhbXBsZXNbMF07CisgICAgICAgICAgICBpbnQgY29sdW1ucyA9IG1fc2NhbGVkQ29s
dW1ucy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvbHVtbnM7ICsr
eCkgeworICAgICAgICAgICAgICAgIEpTQU1QTEUgKmoxID0gakJlZ2luICsgbV9zY2FsZWRDb2x1
bW5zW3hdICogMzsJCQkJCisgICAgICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQjE2
KCpkc3QrKywgajFbMF0sIGoxWzFdLCBqMVsyXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBidWZmZXItPmVuc3VyZUhlaWdodChkZXN0WSArIDEpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQqIGRzdCA9ICh1bnNpZ25lZCBzaG9ydCopYnVmZmVyLT5i
eXRlcygpICsgc291cmNlWSAqIGJ1ZmZlci0+YnVmZmVyV2lkdGgoKTsKKyAgICAgICAgICAgIEpT
QU1QTEUgKmoxID0gc2FtcGxlc1swXTsKKyAgICAgICAgICAgIEpTQU1QTEUgKmpFbmQgPSBqMSAr
IGluZm8tPm91dHB1dF93aWR0aCArIGluZm8tPm91dHB1dF93aWR0aCArIGluZm8tPm91dHB1dF93
aWR0aDsKKyAgICAgICAgICAgIGZvciAoO2oxIDwgakVuZDspIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCByID0gKmoxKys7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZyA9ICpqMSsrOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGIgPSAqajErKzsKKyAgICAgICAgICAgICAgICBJbWFn
ZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdCsrLCByLCBnLCBiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJ1ZmZlci0+ZW5zdXJlSGVpZ2h0KGluZm8tPm91dHB1dF9zY2FubGluZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisjZWxzZQogICAgIGlmIChtX2ZyYW1l
QnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ4NCwx
NiArNjk5LDIzIEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAg
ICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogfQogCiB2b2lkIEpQRUdJbWFnZURlY29k
ZXI6OmpwZWdDb21wbGV0ZSgpCiB7CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgbV9yZWFkZXIt
PnNldENvbXBsZXRlKCk7CisgICAgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYm
IG1fZnJhbWVCdWZmZXJDYWNoZVswXSkKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLT5z
ZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyNlbHNlCiAgICAgaWYgKG1f
ZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEhh
bmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZlbiBpZiB0aGUgaW1hZ2Ug
ZW5kZWQgdXAgYmVpbmcgZW1wdHkuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGVbMF07CiAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1l
Q29tcGxldGUpOworI2VuZGlmCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCmluZGV4IDU2ZTAwN2QuLmZm
ZWRkNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNyArNDcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBk
ZWNvZGVkIHlldC4KICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogCisj
aWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5rKiBm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyNlbHNlCiAgICAgICAgIHZpcnR1YWwg
UkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyNlbmRpZgog
ICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCkBAIC01Nyw2ICs2MiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRl
KCk7CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIGJvb2wgc2V0U2l6ZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRoLCBo
ZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbV9zaXpl
QXZhaWxhYmxlKSB7CisgICAgICAgICAgICAgICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICBwcml2YXRlOgogICAg
ICAgICBKUEVHSW1hZ2VSZWFkZXIqIG1fcmVhZGVyOwogICAgIH07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRl
eCBkMTQzMzNmLi5hYTYyNzU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29w
eXJpZ2h0IChDKSAyMDAxIG1vemlsbGEub3JnCiAgKgpAQCAtNDAsNiArNDEsMTYgQEAKICNpbmNs
dWRlICJwbmcuaCIKICNpbmNsdWRlICJhc3NlcnQuaCIKIAorI2lmIFBMQVRGT1JNKFdJTkNFKSAm
JiBQTEFURk9STShUT1JDSE1PQklMRSkKKworc3RhdGljIHBuZ192b2lkcCBQTkdBUEkgcG5nX21h
bGxvYyhwbmdfc3RydWN0cCwgcG5nX3NpemVfdCBzKSB7CisJcmV0dXJuIE1lbW9yeU1hbmFnZXI6
Om1fbWFsbG9jKHMpOworfQorc3RhdGljIHZvaWQgUE5HQVBJIHBuZ19mcmVlKHBuZ19zdHJ1Y3Rw
LCBwbmdfdm9pZHAgcCkgeworCU1lbW9yeU1hbmFnZXI6Om1fZnJlZShwKTsKK30KKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEdhbW1hIGNvbnN0YW50cy4KQEAgLTczLDEwICs4
NCwxOSBAQCBwdWJsaWM6CiAgICAgUE5HSW1hZ2VSZWFkZXIoUE5HSW1hZ2VEZWNvZGVyKiBkZWNv
ZGVyKQogICAgICAgICA6IG1fcmVhZE9mZnNldCgwKQogICAgICAgICAsIG1fZGVjb2RpbmdTaXpl
T25seShmYWxzZSkKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUp
CisgICAgICAgICwgbV9jdXJyZW50QnVmZmVyU2l6ZSgwKQorICAgICAgICAsIG1fam9iQ29tcGxl
dGUoZmFsc2UpCisjZWxzZQogICAgICAgICAsIG1faW50ZXJsYWNlQnVmZmVyKDApCisjZW5kaWYK
ICAgICAgICAgLCBtX2hhc0FscGhhKDApCiAgICAgeworI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQ
TEFURk9STShUT1JDSE1PQklMRSkKKyAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3Ry
dWN0XzIoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCBOVUxMLCBkZWNvZGluZ0ZhaWxlZCwgZGVjb2Rp
bmdXYXJuaW5nICwgMCwgcG5nX21hbGxvYywgcG5nX2ZyZWUpOworI2Vsc2UKICAgICAgICAgbV9w
bmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwgZGVj
b2RpbmdGYWlsZWQsIGRlY29kaW5nV2FybmluZyk7CisjZW5kaWYKICAgICAgICAgbV9pbmZvID0g
cG5nX2NyZWF0ZV9pbmZvX3N0cnVjdChtX3BuZyk7CiAgICAgICAgIHBuZ19zZXRfcHJvZ3Jlc3Np
dmVfcmVhZF9mbihtX3BuZywgZGVjb2RlciwgaGVhZGVyQXZhaWxhYmxlLCByb3dBdmFpbGFibGUs
IHBuZ0NvbXBsZXRlKTsKICAgICB9CkBAIC04OSwxMSArMTA5LDY3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsb3NlKCkgewogICAgICAgICBpZiAobV9wbmcgJiYgbV9pbmZvKQogICAgICAgICAgICAg
cG5nX2Rlc3Ryb3lfcmVhZF9zdHJ1Y3QoJm1fcG5nLCAmbV9pbmZvLCAwKTsgIC8vIFdpbGwgemVy
byB0aGUgcG9pbnRlcnMuCisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9C
SUxFKQorICAgICAgICBjbGVhckludGVyZmFjZUJ1ZmZlcigpOworICAgICAgICBtX2pvYkNvbXBs
ZXRlID0gZmFsc2U7CisjZWxzZQogICAgICAgICBkZWxldGUgW11tX2ludGVybGFjZUJ1ZmZlcjsK
ICAgICAgICAgbV9pbnRlcmxhY2VCdWZmZXIgPSAwOworI2VuZGlmCiAgICAgICAgIG1fcmVhZE9m
ZnNldCA9IDA7CiAgICAgfQogCisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNI
TU9CSUxFKQorICAgIHVuc2lnbmVkIGN1cnJlbnRCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50QnVmZmVyU2l6ZTsgfQorICAgIHZvaWQgc2V0Q29tcGxldGUoKSB7IG1fam9iQ29t
cGxldGUgPSB0cnVlOyB9CisgICAgcG5nX2J5dGVwIGludGVybGFjZUJ1ZmZlcih1bnNpZ25lZCBy
b3cpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbnRlcmxhY2VCdWZmZXIuaXNFbXB0
eSgpID8gMCA6IG1faW50ZXJsYWNlQnVmZmVyW3Jvd107CisgICAgfQorICAgIHZvaWQgY2xlYXJJ
bnRlcmZhY2VCdWZmZXIoKSB7CisgICAgICAgIGZvciAoVmVjdG9yPHBuZ19ieXRlcD46Oml0ZXJh
dG9yIGkgPSBtX2ludGVybGFjZUJ1ZmZlci5iZWdpbigpIDsgaSAhPSBtX2ludGVybGFjZUJ1ZmZl
ci5lbmQoKSA7ICsraSkKKyAgICAgICAgICAgIGRlbGV0ZVtdICppOworICAgICAgICBtX2ludGVy
bGFjZUJ1ZmZlci5jbGVhcigpOworICAgIH0KKyAgICBib29sIGNyZWF0ZUludGVybGFjZUJ1ZmZl
cihpbnQgcm93cywgaW50IHJvd1NpemUpIHsKKyAgICAgICAgY2xlYXJJbnRlcmZhY2VCdWZmZXIo
KTsKKyAgICAgICAgTWVtb3J5QWxsb2NhdGlvbkNhbkZhaWwgY2FuRmFpbDsKKyAgICAgICAgd2hp
bGUgKHJvd3MtLSkgeworICAgICAgICAgICAgaWYgKHBuZ19ieXRlKiBidWZmZXIgPSBuZXcgcG5n
X2J5dGVbcm93U2l6ZV0pCisgICAgICAgICAgICAgICAgbV9pbnRlcmxhY2VCdWZmZXIuYXBwZW5k
KGJ1ZmZlcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjbGVhckludGVy
ZmFjZUJ1ZmZlcigpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgdm9pZCBkZWNv
ZGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQorICAgIHsKKyAgICAg
ICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CisKKyAgICAgICAgLy8gV2UgbmVlZCB0
byBkbyB0aGUgc2V0am1wIGhlcmUuIE90aGVyd2lzZSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuCisg
ICAgICAgIGlmIChzZXRqbXAobV9wbmctPmptcGJ1ZikpCisgICAgICAgICAgICBjbG9zZSgpOwor
CisgICAgICAgIFBOR0ltYWdlRGVjb2RlciogZGVjb2RlciA9IHN0YXRpY19jYXN0PFBOR0ltYWdl
RGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKG1fcG5nKSk7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIFNoYXJlZEJ1ZmZlclNlZ21lbnQgc2VnbWVudChkYXRhLCBtX3Jl
YWRPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFzZWdtZW50Lmxlbmd0aCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFtX2pvYkNvbXBsZXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChk
ZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVj
b2Rlci0+cG5nQ29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3JlYWRPZmZzZXQgKz0gc2VnbWVu
dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJ1ZmZlclNpemUgPSBtX3JlYWRPZmZz
ZXQ7CisgICAgICAgICAgICBwbmdfcHJvY2Vzc19kYXRhKG1fcG5nLCBtX2luZm8sIChwbmdfYnl0
ZXApc2VnbWVudC5kYXRhKCksIHNlZ21lbnQubGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKChz
aXplT25seSAmJiBkZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSkgfHwgbV9qb2JDb21wbGV0ZSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfTsKKyAgICB9CisjZWxzZQogICAgIHZv
aWQgZGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBzaXplT25seSkKICAgICB7
CiAgICAgICAgIG1fZGVjb2RpbmdTaXplT25seSA9IHNpemVPbmx5OwpAQCAtMTEzLDMxICsxODks
NDIgQEAgcHVibGljOgogICAgICAgICBwbmdfcHJvY2Vzc19kYXRhKG1fcG5nLCBtX2luZm8sIChw
bmdfYnl0ZXApKGRhdGEuZGF0YSgpKSArIG9mZnNldCwgcmVtYWluaW5nKTsKICAgICB9CiAKKyAg
ICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcmxhY2VC
dWZmZXI7IH0KKworICAgIHZvaWQgY3JlYXRlSW50ZXJsYWNlQnVmZmVyKGludCBzaXplKSB7Cisg
ICAgICAgIG1faW50ZXJsYWNlQnVmZmVyID0gbmV3IHBuZ19ieXRlW3NpemVdOworICAgIH0KKyNl
bmRpZgorCiAgICAgYm9vbCBkZWNvZGluZ1NpemVPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9kZWNv
ZGluZ1NpemVPbmx5OyB9CiAgICAgcG5nX3N0cnVjdHAgcG5nUHRyKCkgY29uc3QgeyByZXR1cm4g
bV9wbmc7IH0KICAgICBwbmdfaW5mb3AgaW5mb1B0cigpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsg
fQotICAgIHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2ludGVy
bGFjZUJ1ZmZlcjsgfQogICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0Fs
cGhhOyB9CiAKICAgICB2b2lkIHNldFJlYWRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fcmVh
ZE9mZnNldCA9IG9mZnNldDsgfQogICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBiKSB7IG1faGFz
QWxwaGEgPSBiOyB9CiAKLSAgICB2b2lkIGNyZWF0ZUludGVybGFjZUJ1ZmZlcihpbnQgc2l6ZSkg
ewotICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9IG5ldyBwbmdfYnl0ZVtzaXplXTsKLSAgICB9
Ci0KIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OwogICAgIGJvb2wgbV9kZWNv
ZGluZ1NpemVPbmx5OwogICAgIHBuZ19zdHJ1Y3RwIG1fcG5nOwogICAgIHBuZ19pbmZvcCBtX2lu
Zm87CisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgIHVu
c2lnbmVkIG1fY3VycmVudEJ1ZmZlclNpemU7CisgICAgYm9vbCBtX2pvYkNvbXBsZXRlOworICAg
IFZlY3RvcjxwbmdfYnl0ZXA+IG1faW50ZXJsYWNlQnVmZmVyOworI2Vsc2UKICAgICBwbmdfYnl0
ZXAgbV9pbnRlcmxhY2VCdWZmZXI7CisjZW5kaWYKICAgICBib29sIG1faGFzQWxwaGE7CiB9Owog
CiBQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdlRGVjb2RlcigpCiAgICAgOiBtX3JlYWRlcigwKQog
eworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuYXBwZW5k
KEltYWdlRnJhbWVTaW5rOjpjcmVhdGVJbnN0YW5jZSh0cnVlKSk7CisjZW5kaWYKIH0KIAogUE5H
SW1hZ2VEZWNvZGVyOjp+UE5HSW1hZ2VEZWNvZGVyKCkKQEAgLTE2OCw2ICsyNTUsMTYgQEAgYm9v
bCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCitJ
bWFnZUZyYW1lU2luayogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KQoreworICAgIEltYWdlRnJhbWVTaW5rKiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVswXTsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6
RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKKyAgICAgICAgLy8gRGVjb2RlIHRoaXMgZnJhbWUu
CisgICAgICAgIGRlY29kZSgpOworICAgIHJldHVybiBmcmFtZTsKK30KKyNlbHNlCiBSR0JBMzJC
dWZmZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkK
IHsKICAgICBpZiAoaW5kZXgpCkBAIC0xODIsNiArMjc5LDcgQEAgUkdCQTMyQnVmZmVyKiBQTkdJ
bWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIGRl
Y29kZSgpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CisjZW5kaWYKIAogLy8gRmVlZCBkYXRhIHRv
IHRoZSBQTkcgcmVhZGVyLgogdm9pZCBQTkdJbWFnZURlY29kZXI6OmRlY29kZShib29sIHNpemVP
bmx5KQpAQCAtMTg5LDkgKzI4NywxOCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJv
b2wgc2l6ZU9ubHkpCiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm47CiAKKworI2lm
IFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICBtX3JlYWRlci0+
ZGVjb2RlKCptX2RhdGEsIHNpemVPbmx5KTsKKyNlbHNlCiAgICAgbV9yZWFkZXItPmRlY29kZSht
X2RhdGEtPmJ1ZmZlcigpLCBzaXplT25seSk7CisjZW5kaWYKICAgICAKKyNpZiBVU0UoSU1BR0VG
UkFNRVNJTkspCisgICAgaWYgKG1fZmFpbGVkIHx8ICFtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0gfHwg
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29t
cGxldGUpIHsKKyNlbHNlIAogICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKKyNlbmRpZgogICAgICAgICBkZWxldGUgbV9yZWFkZXI7
CiAgICAgICAgIG1fcmVhZGVyID0gMDsKICAgICB9CkBAIC0yMzcsNiArMzQ0LDkgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgCiAgICAgLy8gV2UgY2FuIGZp
bGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCiAgICAgaWYg
KCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisjaWYgVVNFKElNQUdFRlJBTUVT
SU5LKQorICAgICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAg
ICAgICBpZiAoIXNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgICAgIC8vIFNpemUg
dW5yZWFzb25hYmxlLCBiYWlsIG91dC4KICAgICAgICAgICAgIGxvbmdqbXAocG5nLT5qbXBidWYs
IDEpOwpAQCAtMjk0LDcgKzQwNCwxMSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZh
aWxhYmxlKCkKIAogICAgIGlmIChyZWFkZXIoKS0+ZGVjb2RpbmdTaXplT25seSgpKSB7CiAgICAg
ICAgIC8vIElmIHdlIG9ubHkgbmVlZGVkIHRoZSBzaXplLCBoYWx0IHRoZSByZWFkZXIuICAgICAK
KyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgIHJl
YWRlcigpLT5zZXRSZWFkT2Zmc2V0KHJlYWRlcigpLT5jdXJyZW50QnVmZmVyU2l6ZSgpIC0gcG5n
LT5idWZmZXJfc2l6ZSk7CisjZWxzZQogICAgICAgICByZWFkZXIoKS0+c2V0UmVhZE9mZnNldCht
X2RhdGEtPnNpemUoKSAtIHBuZy0+YnVmZmVyX3NpemUpOworI2VuZGlmCiAgICAgICAgIHBuZy0+
YnVmZmVyX3NpemUgPSAwOwogICAgIH0KIH0KQEAgLTMxMCw2ICs0MjQsMTA0IEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNp
Z25lZCByb3dJbmRleCwKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCisKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgaWYgKG1fZmFp
bGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0pCisg
ICAgICAgIHJldHVybjsKKyAgICBJbWFnZUZyYW1lU2luayYgYnVmZmVyID0gKm1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKKyAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVFbXB0eSkgeworICAgICAgICBpbnQgd2lkdGggPSBtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1u
cy5zaXplKCkgOiBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgaW50IGhlaWdodCA9IG1fc2NhbGVk
ID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFi
dWZmZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCAhcmVhZGVyKCktPmhhc0FscGhhKCkpKSB7Cisg
ICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7
CisKKyAgICAgICAgLy8gRm9yIFBOR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGly
ZSBpbWFnZS4KKyAgICAgICAgYnVmZmVyLnNldFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKSk7CisKKyAgICAgICAgaWYgKHJlYWRlcigpLT5wbmdQdHIo
KS0+aW50ZXJsYWNlZCkgeworICAgICAgICAgICAgaWYgKCFyZWFkZXIoKS0+Y3JlYXRlSW50ZXJs
YWNlQnVmZmVyKG1fc2l6ZS5oZWlnaHQoKSwgKHJlYWRlcigpLT5oYXNBbHBoYSgpID8gNCA6IDMp
ICogbV9zaXplLndpZHRoKCkpKSB7CisgICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChyb3dCdWZmZXIgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGRl
c3RZID0gcm93SW5kZXg7CisgICAgaWYgKG1fc2NhbGVkKSB7CisgICAgICAgIGRlc3RZID0gc2Nh
bGVkWShkZXN0WSk7CisgICAgICAgIGlmIChkZXN0WSA8IDApCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgcG5nX3N0cnVjdHAgcG5nID0gcmVhZGVyKCktPnBuZ1B0cigpOworICAg
IGJvb2wgaGFzQWxwaGEgPSByZWFkZXIoKS0+aGFzQWxwaGEoKTsKKyAgICB1bnNpZ25lZCBjb2xv
ckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKKyAgICBwbmdfYnl0ZXAgcm93ID0gcmVhZGVy
KCktPmludGVybGFjZUJ1ZmZlcihyb3dJbmRleCk7CisgICAgaWYgKHJvdykKKyAgICAgICAgcG5n
X3Byb2dyZXNzaXZlX2NvbWJpbmVfcm93KHBuZywgcm93LCByb3dCdWZmZXIpOworICAgIGVsc2UK
KyAgICAgICAgcm93ID0gcm93QnVmZmVyOworCisgICAgLy8gQ29weSB0aGUgZGF0YSBpbnRvIG91
ciBidWZmZXIuCisgICAgaWYgKG1fc2NhbGVkKSB7CisgICAgICAgIGludCBjb2x1bW5zID0gbV9z
Y2FsZWRDb2x1bW5zLnNpemUoKTsKKyAgICAgICAgLy8gZXF1aXZhbGVudCB0byBpZiAoIWhhc0Fs
cGhhKQorICAgICAgICBpZiAoYnVmZmVyLmlzMTZiaXQoKSkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQqIGRzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilidWZmZXIuYnl0ZXMoKSArIGRlc3RZ
ICogYnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvbHVtbnM7IGkrKykgeworICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyAr
IG1fc2NhbGVkQ29sdW1uc1tpXSAqIDM7CisgICAgICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6
OnNldFJHQjE2KCpkc3QxNisrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBkc3QgPSAo
dW5zaWduZWQqKWJ1ZmZlci5ieXRlcygpICsgZGVzdFkgKiBidWZmZXIuYnVmZmVyV2lkdGgoKTsK
KyAgICAgICAgICAgIGJvb2wgc2F3QWxwaGEgPSBidWZmZXIuaGFzQWxwaGEoKTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uczsgaSsrKSB7CisgICAgICAgICAgICAgICAg
cG5nX2J5dGVwIHBpeGVsID0gcm93ICsgbV9zY2FsZWRDb2x1bW5zW2ldICogNDsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHBpeGVsWzNdOworICAgICAgICAgICAgICAgIEltYWdl
RnJhbWVTaW5rOjpzZXRSR0JBKCpkc3QrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwg
YWxwaGEpOworICAgICAgICAgICAgICAgIGlmICghc2F3QWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsK
KyAgICAgICAgICAgICAgICAgICAgc2F3QWxwaGEgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHdpZHRoID0gbV9zaXpl
LndpZHRoKCk7CisgICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gaWYgKCFoYXNBbHBoYSkKKyAgICAg
ICAgaWYgKGJ1ZmZlci5pczE2Yml0KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBk
c3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopYnVmZmVyLmJ5dGVzKCkgKyByb3dJbmRleCAqIGJ1ZmZl
ci5idWZmZXJXaWR0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gKnJvdysrOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKnJvdysrOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJsdWUgPSAqcm93Kys7CisgICAgICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQjE2
KCpkc3QxNisrLCByZWQsIGdyZWVuLCBibHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBkc3QgPSAodW5zaWduZWQqKWJ1ZmZlci5ieXRl
cygpICsgcm93SW5kZXggKiB3aWR0aDsKKyAgICAgICAgICAgIGJvb2wgc2F3QWxwaGEgPSBidWZm
ZXIuaGFzQWxwaGEoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkr
KykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICpyb3crKzsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBncmVlbiA9ICpyb3crKzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBi
bHVlID0gKnJvdysrOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gKnJvdysrOwor
ICAgICAgICAgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0JBKCpkc3QrKywgcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOworICAgICAgICAgICAgICAgIGlmICghc2F3QWxwaGEgJiYgYWxwaGEg
PCAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2F3QWxwaGEgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGJ1ZmZlci5lbnN1cmVIZWlnaHQo
cm93SW5kZXggKyAxKTsKKyNlbHNlCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIg
aWYgbmVlZGVkLgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5
KSB7CkBAIC0zODUsNiArNTk3LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICAg
ICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiB9
CiAKIHZvaWQgcG5nQ29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKQEAg
LTM5Nyw5ICs2MTAsMTUgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkKICAg
ICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisg
I2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKwltX3JlYWRlci0+c2V0Q29tcGxldGUoKTsKKwlpZiAo
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdKQorCQltX2ZyYW1lQnVmZmVyQ2FjaGVbMF0tPnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworI2Vsc2UKICAgICAvLyBIYW5kIGJhY2sg
YW4gYXBwcm9wcmlhdGVseSBzaXplZCBidWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdlIGVuZGVkIHVw
IGJlaW5nIGVtcHR5LgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNh
Y2hlWzBdOwogICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRl
KTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCmluZGV4IDNj
MDUzNWIuLmM5NTljZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw3ICs0NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBi
ZWVuIGRlY29kZWQgeWV0LgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7
CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZVNp
bmsqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworI2Vsc2UKICAgICAgICAgdmly
dHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworI2Vu
ZGlmCiAKICAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBzaXplT25seSA9IGZhbHNlKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33292</attachid>
            <date>2009-07-22 14:57:46 -0700</date>
            <delta_ts>2009-07-23 09:43:18 -0700</delta_ts>
            <desc>part 1</desc>
            <filename>image_decoder.patch</filename>
            <type>text/plain</type>
            <size>7853</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQxZWY1Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBA
IC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKwllbnVtIE1h
dGNoVHlwZXsKKwkJRXhhY3QsCisJCVVwcGVyQm91bmQsCisJCUxvd2VyQm91bmQKKwl9OworfQor
Cit0ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IHN0YXRpYyBpbnQgZ2V0U2NhbGVkVmFsdWUoY29u
c3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVlcywgaW50IG9yaWcsIGludCBzZWFyY2hTdGFydCkK
K3sKKwlpbnQgc2l6ZSA9IHNjYWxlZFZhbHVlcy5zaXplKCk7CisgICAgY29uc3QgaW50KiBkYXRh
U3RhcnQgPSBzY2FsZWRWYWx1ZXMuZGF0YSgpOworICAgIGNvbnN0IGludCogZGF0YUVuZCA9IGRh
dGFTdGFydCArIHNpemU7CisgICAgY29uc3QgaW50KiBwb3MgPSBzdGQ6Omxvd2VyX2JvdW5kKGRh
dGFTdGFydCArIHNlYXJjaFN0YXJ0LCBkYXRhRW5kLCBvcmlnKTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBFeGFjdDoKKyAgICAgICAgICAgIHJldHVybiBwb3MgIT0gZGF0YUVu
ZCAmJiAqcG9zID09IG9yaWcgPyBwb3MgLSBkYXRhU3RhcnQgOiAtMTsKKyAgICAgICAgY2FzZSBM
b3dlckJvdW5kOgorICAgICAgICAgICAgcmV0dXJuIHBvcyAhPSBkYXRhRW5kICYmICpwb3MgPT0g
b3JpZyA/IHBvcyAtIGRhdGFTdGFydCA6IHBvcyAtIGRhdGFTdGFydCAtIDE7CisgICAgICAgIGNh
c2UgVXBwZXJCb3VuZDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBwb3Mg
IT0gZGF0YUVuZCA/IHBvcyAtIGRhdGFTdGFydCA6IC0xOworICAgIH0KK30KKworaW50IEltYWdl
RGVjb2Rlcjo6dXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCit7
CisJcmV0dXJuIGdldFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3Jp
Z1gsIHNlYXJjaFN0YXJ0KTsKK30KKworaW50IEltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxl
ZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCit7CisJcmV0dXJuIGdldFNjYWxlZFZhbHVl
PExvd2VyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0YXJ0KTsKK30KKwor
aW50IEltYWdlRGVjb2Rlcjo6c2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCkKK3sK
KwlyZXR1cm4gZ2V0U2NhbGVkVmFsdWU8RXhhY3Q+KG1fc2NhbGVkUm93cywgb3JpZ1ksIHNlYXJj
aFN0YXJ0KTsKK30KKwordm9pZCBJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vz
c2FyeSgpIAoreworCWludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOworCWludCBoZWlnaHQgPSBt
X3NpemUuaGVpZ2h0KCk7CisJaW50IG51bVBpeGVscyA9IGhlaWdodCAqIHdpZHRoOworICAgIGlm
IChtX21heE51bVBpeGVscyA8PSAwIHx8IG51bVBpeGVscyA8PSBtX21heE51bVBpeGVscykgewor
CQltX3NjYWxlZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisJbV9zY2FsZWQg
PSB0cnVlOworCWRvdWJsZSBzaHJpbmsgPSBzcXJ0KG1fbWF4TnVtUGl4ZWxzIC8gKGRvdWJsZSlu
dW1QaXhlbHMpOworCWRvdWJsZSB6b29tID0gMS4gL3NocmluazsKKwltX3NjYWxlZENvbHVtbnMu
cmVzZXJ2ZUNhcGFjaXR5KHdpZHRoICogc2hyaW5rICsgMC41KTsKKwlmb3IgKGludCBzY2FsZWRY
ID0gMDs7KSB7CisJCWludCB4ID0gc2NhbGVkWCAqIHpvb20gKyAwLjU7CisJCWlmICh4IDwgd2lk
dGgpIHsKKwkJCW1fc2NhbGVkQ29sdW1ucy5hcHBlbmQoeCk7CisJCQkrK3NjYWxlZFg7CisJCX0g
ZWxzZQorCQkJYnJlYWs7CisJfQorCW1fc2NhbGVkUm93cy5yZXNlcnZlQ2FwYWNpdHkoaGVpZ2h0
ICogc2hyaW5rICsgMC41KTsKKwlmb3IgKGludCBzY2FsZWRZID0gMDs7KSB7CisJCWludCB5ID0g
c2NhbGVkWSAqIHpvb20gKyAwLjU7CisJCWlmICh5IDwgaGVpZ2h0KSB7CisJCQltX3NjYWxlZFJv
d3MuYXBwZW5kKHkpOworCQkJKytzY2FsZWRZOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KK30K
KworfQorCisjZW5kaWYgLy8gVVNFKElNQUdFRlJBTUVTSU5LKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggOWMyYTlkNy4uNWQ2NGRkMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2
ICszNCw5IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykK
KyNpbmNsdWRlICJJbWFnZUZyYW1lU2luay5oIgorI2VuZGlmCiAKICNpZiBQTEFURk9STShTS0lB
KQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgpAQCAtNDEsNiArNDUsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIC8vIFRoZSBS
R0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBS
R0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwKICAgICAvLyBkZWNvZGVycyB3
cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBm
b3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBidWZmZXIuCiAgICAgY2xhc3MgUkdCQTMy
QnVmZmVyIHsKQEAgLTE3Niw2ICsxODEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGlu
aXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KICAgICB9OworI2VuZGlmIC8vICFVU0UoSU1BR0VG
UkFNRVNJTkspCiAKICAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBi
YXNlIGNsYXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQgZGVjb2RlcnMKICAgICAvLyAoZS5n
LiwgR0lGLCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNv
ZGUgaW50byBSR0JBMzIgZm9ybWF0CkBAIC0xODUsMTYgKzE5MSwzNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIEltYWdlRGVjb2RlcigpCiAgICAgICAgICAgICA6IG1fZmFpbGVkKGZh
bHNlKQogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCisjaWYgVVNFKElNQUdF
RlJBTUVTSU5LKQorICAgICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAg
ICAgICAgICAgLCBtX21heE51bVBpeGVscygtMSkKKyAgICAgICAgICAgICwgbV9zY2FsZWQoZmFs
c2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB+SW1h
Z2VEZWNvZGVyKCkge30KKyAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkKKyAgICAgICAg
eworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgICAgIGZvciAoVmVjdG9yPEltYWdl
RnJhbWVTaW5rKj46Oml0ZXJhdG9yIGkgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKTsgaSA8
IG1fZnJhbWVCdWZmZXJDYWNoZS5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgIEltYWdlRnJh
bWVTaW5rOjpkZWxldGVJbnN0YW5jZSgqaSk7CisjZW5kaWYKKyAgICAgICAgfQogCiAgICAgICAg
IC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFu
IHVuZGVjb2RlZCBpbWFnZSBvZiB0aGlzIHR5cGUuCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQor
ICAgICAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERh
dGFSZWNlaXZlZDsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Rh
dGEgPSBkYXRhOworICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNl
aXZlZDsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIg
cGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKSB7IG1fZGF0YSA9IGRhdGE7IH0KKyNlbmRpZgogCiAgICAgICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LiBU
aGlzIGRlZmF1bHQKICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRydWUg
aWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0IGFuZCB3ZSBoYXZlIG5vdApAQCAtMjM2LDEwICsyNjIs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0
aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFs
IGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQog
CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5r
KiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSA9IDA7CisgICAgICAgIHZvaWQgc2V0
TWF4TnVtUGl4ZWxzKGludCBtKSB7IG1fbWF4TnVtUGl4ZWxzID0gbTsgfQorICAgICAgICBTaGFy
ZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KKyNlbHNlCiAgICAgICAg
IC8vIENhbGxlZCB0byBvYnRhaW4gdGhlIFJHQkEzMkJ1ZmZlciBmdWxsIG9mIGRlY29kZWQgZGF0
YSBmb3IgcmVuZGVyaW5nLiAgVGhlCiAgICAgICAgIC8vIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVj
b2RlIGFzIG11Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUgaGFuZGluZwogICAgICAg
ICAvLyBiYWNrIHRoZSBidWZmZXIuCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSA9IDA7CisjZW5kaWYKIAogICAgICAgICAvLyBX
aGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQgZXZlbiBzdXBwb3J0cyBh
bHBoYSB0cmFuc3BhcmVuY3kuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjU3LDEwICsyODksMjUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAg
ICAgICBpbnQgbV9tYXhOdW1QaXhlbHM7CisgICAgICAgIFZlY3RvcjxJbWFnZUZyYW1lU2luayo+
IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRDb2x1bW5z
OworICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZFJvd3M7CisgICAgICAgIGJvb2wgbV9zY2Fs
ZWQ7CisgICAgICAgIGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgdm9pZCBwcmVw
YXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaW50IHVwcGVyQm91bmRTY2FsZWRY
KGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CisgICAgICAgIGludCBsb3dlckJvdW5k
U2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCA9IDApOworICAgICAgICBpbnQgc2Nh
bGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCA9IDApOworI2Vsc2UKICAgICAgICAgVmVj
dG9yPFJHQkEzMkJ1ZmZlcj4gbV9mcmFtZUJ1ZmZlckNhY2hlOworI2VuZGlmCiAgICAgICAgIGJv
b2wgbV9mYWlsZWQ7CiAKKyNpZiAhVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIHByaXZhdGU6Cisj
ZW5kaWYKICAgICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhl
IGltYWdlIGFzICJ3aWR0aCAqIGhlaWdodCAqIDQiCiAgICAgICAgIC8vIGFuZCByZXR1cm4gaXQg
YXMgYSAoc2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KICAgICAgICAgc3RhdGljIGJvb2wg
aXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33293</attachid>
            <date>2009-07-22 14:58:21 -0700</date>
            <delta_ts>2009-07-23 09:43:28 -0700</delta_ts>
            <desc>part 2 GIF Decoder</desc>
            <filename>gif_decoder.patch</filename>
            <type>text/plain</type>
            <size>20210</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCmluZGV4IDFjNmI2MmQuLmJkYzE4YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiAr
MzUsMTAgQEAgcHVibGljOgogICAgIEdJRkltYWdlRGVjb2RlclByaXZhdGUoR0lGSW1hZ2VEZWNv
ZGVyKiBkZWNvZGVyID0gMCkKICAgICAgICAgOiBtX3JlYWRlcihkZWNvZGVyKQogICAgICAgICAs
IG1fcmVhZE9mZnNldCgwKQorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1P
QklMRSkKKyAgICAgICAgLCBtX2N1cnJlbnRCdWZmZXJTaXplKDApCisgICAgICAgICwgbV9qb2JD
b21wbGV0ZShmYWxzZSkKKyNlbmRpZgogICAgIHsKICAgICB9CiAKQEAgLTQyLDYgKzQ3LDQ1IEBA
IHB1YmxpYzoKICAgICAgICAgbV9yZWFkZXIuY2xvc2UoKTsKICAgICB9CiAKKworI2lmIFBMQVRG
T1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICB1bnNpZ25lZCBjdXJyZW50
QnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEJ1ZmZlclNpemU7IH0KKyAgICB2
b2lkIHNldENvbXBsZXRlKCkgeyBtX2pvYkNvbXBsZXRlID0gdHJ1ZTsgfQorICAgIGJvb2wgZGVj
b2RlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBx
dWVyeSA9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBpbnQgaGFsdEZy
YW1lID0gLTEpCisgICAgeworICAgICAgICBib29sIHF1ZXJ5U2l6ZSA9IHF1ZXJ5ID09IEdJRklt
YWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5OworICAgICAgICBpZiAoIXF1ZXJ5U2l6ZSAmJiBtX3Jl
YWRlci5pbWFnZXNfZGVjb2RlZCA+PSAoaW50KWhhbHRGcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIGZvciAoOyFtX2pvYkNvbXBsZXRlOykgeworICAgICAgICAgICAg
aWYgKG1fcmVhZGVyLmNsaWVudHB0ciAmJiBtX3JlYWRlci5jbGllbnRwdHItPmZhaWxlZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChtX3JlYWRPZmZz
ZXQgPj0gZGF0YS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fam9iQ29tcGxldGUg
JiYgbV9yZWFkZXIuY2xpZW50cHRyICYmIG1fcmVhZGVyLmNsaWVudHB0ci0+aXNBbGxEYXRhUmVj
ZWl2ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9yZWFkZXIuY2xpZW50cHRyLT5naWZDb21w
bGV0ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBubyBtb3JlIGRhdGEKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFNoYXJlZEJ1ZmZlclNlZ21lbnQgc2VnbWVudChkYXRh
LCBtX3JlYWRPZmZzZXQpOworICAgICAgICAgICAgbV9jdXJyZW50QnVmZmVyU2l6ZSA9IG1fcmVh
ZE9mZnNldCArIHNlZ21lbnQubGVuZ3RoKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBvcmlnT2Zm
c2V0ID0gbV9yZWFkT2Zmc2V0OworICAgICAgICAgICAgaWYgKCFtX3JlYWRlci5yZWFkKChjb25z
dCB1bnNpZ25lZCBjaGFyKilzZWdtZW50LmRhdGEoKSwgc2VnbWVudC5sZW5ndGgoKSwgcXVlcnks
IGhhbHRGcmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICBpZiAocXVlcnlTaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcmVhZGVyLmNsaWVudHB0
ciA/IG1fcmVhZGVyLmNsaWVudHB0ci0+aXNTaXplQXZhaWxhYmxlV2l0aG91dERlY29kaW5nKCkg
OiBtX3JlYWRPZmZzZXQgIT0gb3JpZ09mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcmVhZGVyLmltYWdlc19kZWNvZGVkID49
IChpbnQpaGFsdEZyYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2pvYkNvbXBsZXRlICYm
IG1fcmVhZGVyLmNsaWVudHB0ciAmJiBtX3JlYWRlci5jbGllbnRwdHItPmlzU2l6ZUF2YWlsYWJs
ZVdpdGhvdXREZWNvZGluZygpICYmIG1fcmVhZGVyLmltYWdlc19kZWNvZGVkID09IG1fcmVhZGVy
LmNsaWVudHB0ci0+ZnJhbWVDb3VudCgpICYmIG1fcmVhZGVyLmNsaWVudHB0ci0+aXNBbGxEYXRh
UmVjZWl2ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9yZWFkZXIuY2xpZW50cHRyLT5naWZD
b21wbGV0ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byB1cGRhdGUgcmVhZCBvZmZz
ZXQgYnkgb3Vyc2VsdmVzLgorICAgICAgICAgICAgbV9yZWFkT2Zmc2V0ID0gbV9jdXJyZW50QnVm
ZmVyU2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZWxzZQog
ICAgIGJvb2wgZGVjb2RlKFNoYXJlZEJ1ZmZlciogZGF0YSwgCiAgICAgICAgICAgICAgICAgR0lG
SW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSA9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1
ZXJ5LAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYWx0RnJhbWUgPSAtMSkKQEAgLTUw
LDYgKzk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsdEZyYW1lKTsKICAgICB9CisjZW5kaWYK
IAogICAgIHVuc2lnbmVkIGZyYW1lQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5pbWFn
ZXNfY291bnQ7IH0KICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkZXIubG9vcF9jb3VudDsgfQpAQCAtODEsMTggKzEyNiwyOSBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEdJRkltYWdlUmVhZGVyIG1fcmVhZGVyOwogICAgIHVuc2lnbmVkIG1fcmVhZE9mZnNl
dDsKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgdW5z
aWduZWQgbV9jdXJyZW50QnVmZmVyU2l6ZTsKKyAgICBib29sIG1fam9iQ29tcGxldGU7CisjZW5k
aWYKIH07CiAKIEdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKCkKICAgICA6IG1fZnJh
bWVDb3VudFZhbGlkKHRydWUpCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTG9v
cE9uY2UpCiAgICAgLCBtX3JlYWRlcigwKQorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9S
TShUT1JDSE1PQklMRSkKKyAgICAsIG1fY3VycmVudFJlYWRlcigwKQorICAgICwgbV9zZWNvbmRh
cnlSZWFkZXIoMCkKKyNlbmRpZgogewogfQogCiBHSUZJbWFnZURlY29kZXI6On5HSUZJbWFnZURl
Y29kZXIoKQogewogICAgIGRlbGV0ZSBtX3JlYWRlcjsKKyNpZiBQTEFURk9STShXSU5DRSkgJiYg
UExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgZGVsZXRlIG1fc2Vjb25kYXJ5UmVhZGVyOworI2Vu
ZGlmCiB9CiAKIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgpAQCAtMTA4LDggKzE2NCwx
MyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIG1fZnJhbWVDb3VudFZhbGlkID0gZmFsc2U7CiAKICAg
ICAvLyBDcmVhdGUgdGhlIEdJRiByZWFkZXIuCi0gICAgaWYgKCFtX3JlYWRlciAmJiAhbV9mYWls
ZWQpCisgICAgaWYgKCFtX3JlYWRlciAmJiAhbV9mYWlsZWQpIHsKICAgICAgICAgbV9yZWFkZXIg
PSBuZXcgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSh0aGlzKTsKKyNpZiBQTEFURk9STShXSU5DRSkg
JiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgIG1fc2Vjb25kYXJ5UmVhZGVyID0gbmV3
IEdJRkltYWdlRGVjb2RlclByaXZhdGUodGhpcyk7CisgICAgICAgIG1fY3VycmVudFJlYWRlciA9
IG1fcmVhZGVyOworI2VuZGlmCisgICAgfQogfQogCiAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6
ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KQEAgLTEyOCw2ICsxODksMjcgQEAg
aW50IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiAgICAgLy8gSWYgdGhlIGRlY29kZXIg
aGFkIGFuIGVhcmxpZXIgZXJyb3IsIHdlIHdpbGwganVzdCByZXR1cm4gd2hhdCB3ZSBoYWQgZGVj
b2RlZAogICAgIC8vIHNvIGZhci4KICAgICBpZiAoIW1fZnJhbWVDb3VudFZhbGlkKSB7CisjaWYg
UExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgICAgICBtX2N1cnJl
bnRSZWFkZXIgPSBtX3NlY29uZGFyeVJlYWRlcjsKKyAgICAgICAgbV9zZWNvbmRhcnlSZWFkZXIt
PmRlY29kZSgqbV9kYXRhLCBHSUZGcmFtZUNvdW50UXVlcnkpOworICAgICAgICBtX2N1cnJlbnRS
ZWFkZXIgPSBtX3JlYWRlcjsKKworICAgICAgICB1bnNpZ25lZCBuZXdDb3VudCA9IG1fc2Vjb25k
YXJ5UmVhZGVyLT5mcmFtZUNvdW50KCk7CisgICAgICAgIHVuc2lnbmVkIG9sZENvdW50ID0gbV9m
cmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKKyAgICAgICAgaWYgKG5ld0NvdW50ID4gb2xkQ291bnQp
IHsKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNlcnZlQ2FwYWNpdHkobmV3Q291
bnQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkQ291bnQ7IGkgPCBuZXdDb3Vu
dDsgKytpKQorICAgICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5hcHBlbmQoSW1hZ2VG
cmFtZVNpbms6OmNyZWF0ZUluc3RhbmNlKGZhbHNlKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9m
cmFtZUNvdW50VmFsaWQgPSB0cnVlOworI2VsaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAg
ICBHSUZJbWFnZURlY29kZXJQcml2YXRlIHJlYWRlcjsKKyAgICAgICAgcmVhZGVyLmRlY29kZSht
X2RhdGEtPmJ1ZmZlcigpLCBHSUZGcmFtZUNvdW50UXVlcnkpOworICAgICAgICBtX2ZyYW1lQ291
bnRWYWxpZCA9IHRydWU7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNlcnZlQ2FwYWNp
dHkocmVhZGVyLmZyYW1lQ291bnQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZnJh
bWVCdWZmZXJDYWNoZS5zaXplKCk7IGkgPCByZWFkZXIuZnJhbWVDb3VudCgpOyArK2kpCisgICAg
ICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuYXBwZW5kKEltYWdlRnJhbWVTaW5rOjpjcmVhdGVJ
bnN0YW5jZShmYWxzZSkpOworI2Vsc2UKICAgICAgICAgLy8gRklYTUU6IFNjYW5uaW5nIGFsbCB0
aGUgZGF0YSBoYXMgTyhuXjIpIGJlaGF2aW9yIGlmIHRoZSBkYXRhIHdlcmUgdG8gY29tZSBpbiBy
ZWFsbHkKICAgICAgICAgLy8gc2xvd2x5LiAgTWlnaHQgYmUgaW50ZXJlc3RpbmcgdG8gdHJ5IHRv
IGNsb25lIG91ciBleGlzdGluZyByZWFkIHNlc3Npb24gdG8gcHJlc2VydmUKICAgICAgICAgLy8g
c3RhdGUsIGJ1dCBmb3Igbm93IHdlIGp1c3QgY3Jhd2wgYWxsIHRoZSBkYXRhLiAgTm90ZSB0aGF0
IHRoaXMgaXMgbm8gd29yc2UgdGhhbiB3aGF0CkBAIC0xMzksNiArMjIxLDcgQEAgaW50IEdJRklt
YWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiAgICAgICAgIHJlYWRlci5kZWNvZGUobV9kYXRhLmdl
dCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwogICAgICAgICBtX2ZyYW1lQ291bnRWYWxpZCA9IHRy
dWU7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUocmVhZGVyLmZyYW1lQ291bnQo
KSk7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KTsKQEAgLTE0Nyw2ICsyMzAsMTkgQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgp
CiAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlv
biBsb29wLgogaW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKIHsK
KyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgaWYgKG1f
cmVhZGVyKSB7CisgICAgICAgIGNvbnN0IGludCByZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+
cmVwZXRpdGlvbkNvdW50KCk7CisgICAgICAgIGlmIChyZXBldGl0aW9uQ291bnQgIT0gY0xvb3BD
b3VudE5vdFNlZW4pCisgICAgICAgICAgICByZXR1cm4gcmVwZXRpdGlvbkNvdW50OworICAgIH0K
KyAgICBpZiAobV9zZWNvbmRhcnlSZWFkZXIpIHsKKyAgICAgICAgY29uc3QgaW50IHJlcGV0aXRp
b25Db3VudCA9IG1fc2Vjb25kYXJ5UmVhZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICAgICAg
aWYgKHJlcGV0aXRpb25Db3VudCAhPSBjTG9vcENvdW50Tm90U2VlbikKKyAgICAgICAgICAgIHJl
dHVybiByZXBldGl0aW9uQ291bnQ7CisgICAgfQorICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9u
Y2U7CisjZWxzZQogICAgIC8vIFRoaXMgdmFsdWUgY2FuIGFycml2ZSBhdCBhbnkgcG9pbnQgaW4g
dGhlIGltYWdlIGRhdGEgc3RyZWFtLiAgTW9zdCBHSUZzCiAgICAgLy8gaW4gdGhlIHdpbGQgZGVj
bGFyZSBpdCBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHNvIGl0IHVzdWFsbHkgaXMK
ICAgICAvLyBzZXQgYnkgdGhlIHRpbWUgd2UndmUgZGVjb2RlZCB0aGUgc2l6ZSwgYnV0IChkZXBl
bmRpbmcgb24gdGhlIEdJRiBhbmQgdGhlCkBAIC0xNjYsOCArMjYyLDIyIEBAIGludCBHSUZJbWFn
ZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0CiAgICAgICAgICAgICBtX3JlcGV0aXRp
b25Db3VudCA9IHJlcGV0aXRpb25Db3VudDsKICAgICB9CiAgICAgcmV0dXJuIG1fcmVwZXRpdGlv
bkNvdW50OworI2VuZGlmCiB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCitJbWFnZUZyYW1l
U2luayogR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQor
eworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBJbWFnZUZyYW1lU2luayogZnJhbWUgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbaW5kZXhdOworICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c3RhdHVzKCkg
IT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVyKQorICAgICAgICAvLyBE
ZWNvZGUgdGhpcyBmcmFtZS4KKyAgICAgICAgZGVjb2RlKEdJRkZ1bGxRdWVyeSwgaW5kZXgrMSk7
CisgICAgcmV0dXJuIGZyYW1lOworfQorI2Vsc2UKIFJHQkEzMkJ1ZmZlciogR0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCA+
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGZyYW1lQ291bnQoKSkpCkBAIC0xNzgsOSArMjg4LDEyIEBA
IFJHQkEzMkJ1ZmZlciogR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KQogICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCArIDEpOyAvLyBEZWNv
ZGUgdGhpcyBmcmFtZS4KICAgICByZXR1cm4gJmZyYW1lOwogfQorI2VuZGlmCiAKIHZvaWQgR0lG
SW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJh
bWUpCiB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorI2Vsc2UKICAgICAvLyBJbiBzb21lIGNh
c2VzLCBsaWtlIGlmIHRoZSBkZWNvZGVyIHdhcyBkZXN0cm95ZWQgd2hpbGUgYW5pbWF0aW5nLCB3
ZQogICAgIC8vIGNhbiBiZSBhc2tlZCB0byBjbGVhciBtb3JlIGZyYW1lcyB0aGFuIHdlIGN1cnJl
bnRseSBoYXZlLgogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQpAQCAtMjI3
LDYgKzM0MCw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUo
c2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgICAgIGlmIChqLT5zdGF0dXMoKSAhPSBSR0JB
MzJCdWZmZXI6OkZyYW1lRW1wdHkpCiAgICAgICAgICAgICBqLT5jbGVhcigpOwogICAgIH0KKyNl
bmRpZgogfQogCiAvLyBGZWVkIGRhdGEgdG8gdGhlIEdJRiByZWFkZXIuCkBAIC0yMzUsNyArMzQ5
LDExIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXVlcnksIHVuc2ln
bmVkIGhhbHRBdEZyYW1lKQogICAgIGlmIChtX2ZhaWxlZCkKICAgICAgICAgcmV0dXJuOwogCisj
aWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgIG1fZmFpbGVk
ID0gIW1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgcXVlcnksIGhhbHRBdEZyYW1lKTsKKyNlbHNl
CiAgICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPmRlY29kZShtX2RhdGEuZ2V0KCksIHF1ZXJ5LCBo
YWx0QXRGcmFtZSk7CisjZW5kaWYKICAgICAKICAgICBpZiAobV9mYWlsZWQpIHsKICAgICAgICAg
ZGVsZXRlIG1fcmVhZGVyOwpAQCAtMjQ2LDE2ICszNjQsODQgQEAgdm9pZCBHSUZJbWFnZURlY29k
ZXI6OmRlY29kZShHSUZRdWVyeSBxdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpCiAvLyBDYWxs
YmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpzaXplTm93
QXZhaWxhYmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7CisjaWYgVVNFKElN
QUdFRlJBTUVTSU5LKQorICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOworI2VuZGlm
CiAgICAgcmV0dXJuIHNldFNpemUod2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR0lGSW1hZ2VE
ZWNvZGVyOjpkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpCiB7CisjaWYgUExBVEZP
Uk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgIG1fY3VycmVudFJlYWRlci0+
c2V0UmVhZE9mZnNldChtX2N1cnJlbnRSZWFkZXItPmN1cnJlbnRCdWZmZXJTaXplKCkgLSBieXRl
c0xlZnQpOworI2Vsc2UKICAgICBtX3JlYWRlci0+c2V0UmVhZE9mZnNldChtX2RhdGEtPnNpemUo
KSAtIGJ5dGVzTGVmdCk7CisjZW5kaWYKIH0KIAogYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogeworI2lmIFVTRShJTUFHRUZSQU1FU0lO
SykKKyAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSByZWN0IGluIG91ciBidWZmZXIuCisgICAg
SW50UmVjdCBmcmFtZVJlY3QobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCBtX3JlYWRlci0+ZnJh
bWVZT2Zmc2V0KCksCisgICAgICAgIG1fcmVhZGVyLT5mcmFtZVdpZHRoKCksIG1fcmVhZGVyLT5m
cmFtZUhlaWdodCgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVSZWN0IGRvZXNuJ3Qg
ZXh0ZW5kIHBhc3QgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgYnVmZmVyLgorICAgIGlmIChmcmFt
ZVJlY3QucmlnaHQoKSA+IG1fc2l6ZS53aWR0aCgpKQorICAgICAgICBmcmFtZVJlY3Quc2V0V2lk
dGgobV9zaXplLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCkpOworICAgIGlmIChm
cmFtZVJlY3QuYm90dG9tKCkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIGZyYW1lUmVjdC5z
ZXRIZWlnaHQobV9zaXplLmhlaWdodCgpIC0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKTsKKwor
ICAgIEltYWdlRnJhbWVTaW5rJiBidWZmZXIgPSAqbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5k
ZXhdOworICAgIGJ1ZmZlci5zZXRSZWN0KGZyYW1lUmVjdCk7CisKKyAgICBib29sIGlzU3ViUmVj
dCA9IChmcmFtZVJlY3QueCgpID4gMCB8fCBmcmFtZVJlY3QueSgpID4gMCB8fAorICAgICAgICBm
cmFtZVJlY3Qud2lkdGgoKSA8IG1fc2l6ZS53aWR0aCgpIHx8CisgICAgICAgIGZyYW1lUmVjdC5o
ZWlnaHQoKSA8IG1fc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1
ZmZlciBub3cgdG8gdGhlIGNvcnJlY3Qgd2lkdGgvaGVpZ2h0IGFuZCB0aGVuCisgICAgLy8gaW5p
dGlhbGl6ZSBwb3J0aW9ucyBvZiBpdCBpZiBuZWVkZWQuCisgICAgaW50IHNocnVua1dpZHRoID0g
bV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnMuc2l6ZSgpIDogbV9zaXplLndpZHRoKCk7CisgICAg
aW50IHNocnVua0hlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6IG1fc2l6
ZS5oZWlnaHQoKTsKKworICAgIGlmICghYnVmZmVyLnNldFNpemUoc2hydW5rV2lkdGgsIHNocnVu
a0hlaWdodCwgZmFsc2UpKSB7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICB2b2lkKiBieXRlcyA9IGJ1ZmZlci5ieXRlcygpOworICAg
IGludCB0b3RhbEJ5dGVzID0gYnVmZmVyLnRvdGFsQnl0ZXMoKTsKKworICAgIEltYWdlRnJhbWVT
aW5rKiBwcmV2aW91c0J1ZmZlciA9IChmcmFtZUluZGV4ID4gMCkgPyBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbZnJhbWVJbmRleC0xXSA6IDA7CisgICAgaWYgKHByZXZpb3VzQnVmZmVyKSB7CisgICAgICAg
IHdoaWxlIChmcmFtZUluZGV4ID4gMCAmJiBwcmV2aW91c0J1ZmZlci0+ZGlzcG9zYWxNZXRob2Qo
KSA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykKKyAgICAgICAgICAg
IHByZXZpb3VzQnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CisgICAg
fQorCisgICAgLy8gV2hpY2ggYnVmZmVyIHRvIGNvcHkgZnJvbT8KKyAgICBJbWFnZUZyYW1lU2lu
ayogY29weUZyb207CisgICAgaWYgKCFwcmV2aW91c0J1ZmZlcikKKyAgICAgICAgY29weUZyb20g
PSAwOworICAgIGVsc2UgaWYgKHByZXZpb3VzQnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFJH
QkEzMkJ1ZmZlcjo6RGlzcG9zZU5vdFNwZWNpZmllZCB8fCBwcmV2aW91c0J1ZmZlci0+ZGlzcG9z
YWxNZXRob2QoKSA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSB7CisgICAgICAgIGNvcHlG
cm9tID0gcHJldmlvdXNCdWZmZXI7CisgICAgICAgIGJ1ZmZlci5zZXRDb21wb3NpdGVkV2l0aFBy
ZXZpb3VzRnJhbWUoKTsKKyAgICB9IGVsc2UgaWYgKGlzU3ViUmVjdCkKKyAgICAgICAgY29weUZy
b20gPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgZWxzZQorICAgICAgICBjb3B5RnJvbSA9
IDA7CisKKyAgICBpZiAoY29weUZyb20pIHsKKyAgICAgICAgbWVtY3B5KGJ5dGVzLCBjb3B5RnJv
bS0+Ynl0ZXMoKSwgdG90YWxCeXRlcyk7CisgICAgICAgIGJ1ZmZlci5lbnN1cmVIZWlnaHQobV9z
aXplLmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGNvcHlGcm9tLT51c2VzVHJhbnNwYXJlbnRDb2xv
cigpKQorICAgICAgICAgICAgYnVmZmVyLnNldFRyYW5zcGFyZW50Q29sb3IoY29weUZyb20tPnRy
YW5zcGFyZW50Q29sb3IoKSk7CisKKyAgICAgICAgaWYgKGNvcHlGcm9tLT5oYXNBbHBoYSgpKQor
ICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOworICAgIH0KKworICAgIC8vIFVw
ZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KKyAgICBidWZmZXIuc2V0
U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKyNlbHNlCiAgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVmZmVyLgogICAgIEludFJlY3QgZnJhbWVSZWN0
KG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpLAogICAg
ICAgICAgICAgICAgICAgICAgIG1fcmVhZGVyLT5mcmFtZVdpZHRoKCksIG1fcmVhZGVyLT5mcmFt
ZUhlaWdodCgpKTsKQEAgLTMyNSw2ICs1MTEsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAKICAgICAvLyBVcGRhdGUgb3VyIHN0
YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgYnVmZmVyLT5zZXRTdGF0dXMoUkdC
QTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworI2VuZGlmCiAKICAgICAvLyBSZXNldCB0aGUgYWxw
aGEgcGl4ZWwgdHJhY2tlciBmb3IgdGhpcyBmcmFtZS4KICAgICBtX2N1cnJlbnRCdWZmZXJTYXdB
bHBoYSA9IGZhbHNlOwpAQCAtMzM4LDYgKzUyNSwxMjAgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6
OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0Q291bnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogeworI2lm
IFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUlu
ZGV4XSB8fCBtX2ZhaWxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlRnJhbWVTaW5rJiBi
dWZmZXIgPSAqbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworCisgICAgaWYgKGJ1ZmZl
ci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkgJiYgIWluaXRGcmFtZUJ1ZmZl
cihmcmFtZUluZGV4KSB8fCAhYnVmZmVyLmlzQnVmZmVyUmVhZHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHJvd0J1ZmZlciA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
c291cmNlV2lkdGggPSByb3dFbmQgLSByb3dCdWZmZXI7CisgICAgaWYgKHNvdXJjZVdpZHRoIDw9
IDApCisgICAgICAgIHJldHVybjsKKworICAgIGludCBkZXN0WSA9IG1fcmVhZGVyLT5mcmFtZVlP
ZmZzZXQoKSArIHJvd051bWJlcjsKKyAgICBpbnQgZGVzdFggPSBtX3JlYWRlci0+ZnJhbWVYT2Zm
c2V0KCk7CisgICAgaW50IGRlc3RFbmRYID0gZGVzdFggKyBzb3VyY2VXaWR0aDsKKyAgICBpZiAo
bV9zY2FsZWQpIHsKKyAgICAgICAgZGVzdFkgPSBzY2FsZWRZKGRlc3RZKTsKKyAgICAgICAgaWYg
KGRlc3RZIDwgMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVzdFggPSB1cHBlckJv
dW5kU2NhbGVkWChkZXN0WCk7CisgICAgICAgIGlmIChkZXN0WCA8IDApCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlc3RFbmRYID0gbG93ZXJCb3VuZFNjYWxlZFgoZGVzdEVuZFggLSAx
LCBkZXN0WCArIDEpOworICAgICAgICBpZiAoZGVzdEVuZFggPCBkZXN0WCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgKytkZXN0RW5kWDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb2xv
ck1hcFNpemU7CisgICAgdW5zaWduZWQgY2hhciogY29sb3JNYXA7CisgICAgbV9yZWFkZXItPmdl
dENvbG9yTWFwKGNvbG9yTWFwLCBjb2xvck1hcFNpemUpOworICAgIGlmICghY29sb3JNYXApCisg
ICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzQWxwaGEgPSBtX3JlYWRlci0+aXNUcmFuc3Bh
cmVudCgpOyAKKyAgICBib29sIHNhd0FscGhhID0gYnVmZmVyLnVzZXNUcmFuc3BhcmVudENvbG9y
KCkgfHwgYnVmZmVyLmhhc0FscGhhKCk7CisgICAgdW5zaWduZWQgY2hhciB0cmFuc3BhcmVudENv
bG9yID0gbV9yZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKTsKKworICAgIHVuc2lnbmVkKiBkc3RF
bmQgPSAodW5zaWduZWQqKWJ1ZmZlci5ieXRlcygpICsgZGVzdFkgKiBidWZmZXIuYnVmZmVyV2lk
dGgoKTsKKyAgICB1bnNpZ25lZCogZHN0ID0gZHN0RW5kICsgZGVzdFg7CisgICAgZHN0RW5kICs9
IGRlc3RFbmRYOworICAgIHVuc2lnbmVkKiBjdXJyRHN0ID0gZHN0OworICAgIHVuc2lnbmVkIGNo
YXIqIGN1cnJlbnRSb3dCeXRlID0gcm93QnVmZmVyOworCisgICAgd2hpbGUgKGN1cnJEc3QgPCBk
c3RFbmQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbDsKKyAgICAgICAgaWYgKG1fc2Nh
bGVkKSB7CisgICAgICAgICAgICBpbnQgc291cmNlWCA9IG1fc2NhbGVkQ29sdW1uc1tjdXJyRHN0
IC0gZHN0XSAtIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChz
b3VyY2VYID49IDAgJiYgc291cmNlWCA8IHNvdXJjZVdpZHRoKTsKKyAgICAgICAgICAgIHBpeGVs
ID0gcm93QnVmZmVyW3NvdXJjZVhdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KGN1cnJlbnRSb3dCeXRlID09IHJvd0VuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHBpeGVsID0gKmN1cnJlbnRSb3dCeXRlKys7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocGl4ZWwgPj0gY29sb3JNYXBTaXplKQorICAgICAgICAgICAgcGl4ZWwgPSB0cmFuc3BhcmVu
dENvbG9yOworICAgICAgICBib29sIHRyYW5zcGFyZW50ID0gaGFzQWxwaGEgJiYgcGl4ZWwgPT0g
dHJhbnNwYXJlbnRDb2xvcjsKKyAgICAgICAgaWYgKHRyYW5zcGFyZW50ICYmIGJ1ZmZlci5jb21w
b3NpdGVkV2l0aFByZXZpb3VzRnJhbWUoKSkgeworICAgICAgICAgICAgLy8gTGVhdmUgdGhlIG9y
aWdpbmFsIGNvbG9yIGluIHByZXZpb3VzIGZyYW1lCisgICAgICAgIH0gZWxzZSBpZiAocGl4ZWwg
PCBjb2xvck1hcFNpemUpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGNvbG9yID0gY29s
b3JNYXAgKyBwaXhlbCAqIDM7CisgICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAqY29sb3IrKzsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKmNvbG9yKys7CisgICAgICAgICAgICB1bnNp
Z25lZCBibHVlID0gKmNvbG9yOworICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQkEo
KmN1cnJEc3QsIHJlZCwgZ3JlZW4sIGJsdWUsIHRyYW5zcGFyZW50ID8gMCA6IDI1NSk7CisKKyAg
ICAgICAgICAgIGlmICh0cmFuc3BhcmVudCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
IGFzc3VtZSB0aGF0IHRoZSB0cmFuc3BhcmVudCBjb2xvciBuZXZlciBjaGFuZ2VzIGR1cmluZyBk
ZWNvZGluZyBhIHNpbmdsZSBmcmFtZS4KKyAgICAgICAgICAgICAgICBpZiAoIXNhd0FscGhhKSB7
CisgICAgICAgICAgICAgICAgICAgIHNhd0FscGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCB0cmFuc3BhcmVudENvbG9yOworICAgICAgICAgICAgICAgICAgICBJbWFnZUZyYW1l
U2luazo6c2V0UkdCMTYodHJhbnNwYXJlbnRDb2xvciwgcmVkLCBncmVlbiwgYmx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRUcmFuc3BhcmVudENvbG9yKHRyYW5zcGFyZW50Q29s
b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyLnVz
ZXNUcmFuc3BhcmVudENvbG9yKCkpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBw
aXhlbDE2OworICAgICAgICAgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0IxNihwaXhlbDE2
LCByZWQsIGdyZWVuLCBibHVlKTsKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWwxNiA9PSBidWZm
ZXIudHJhbnNwYXJlbnRDb2xvcigpKQorICAgICAgICAgICAgICAgICAgICBidWZmZXIuY2xlYXJU
cmFuc3BhcmVudENvbG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyB0cmFuc3BhcmVudENvbG9yIG11c3QgYmUgaW52YWxpZCB0b28KKyAgICAgICAg
ICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0JBKCpjdXJyRHN0LCAyNTUsIDI1NSwgMjU1LCB0cmFu
c3BhcmVudCA/IDAgOiAyNTUpOworICAgICAgICAgICAgaWYgKGJ1ZmZlci51c2VzVHJhbnNwYXJl
bnRDb2xvcigpKQorICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhclRyYW5zcGFyZW50Q29sb3Io
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzYXdBbHBoYSkgeworICAgICAgICAgICAgICAgIHNh
d0FscGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY3VyckRzdCsrOworICAgIH0KKwor
ICAgIGlmIChyZXBlYXRDb3VudCA+IDEpIHsKKyAgICAgICAgLy8gQ29weSB0aGUgcm93IHxyZXBl
YXRDb3VudHwtMSB0aW1lcy4KKyAgICAgICAgdW5zaWduZWQgbnVtID0gY3VyckRzdCAtIGRzdDsK
KyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CisgICAgICAg
IHVuc2lnbmVkIHdpZHRoID0gYnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgIHVuc2lnbmVk
KiBlbmQgPSAodW5zaWduZWQqKSgodW5zaWduZWQgY2hhciopYnVmZmVyLmJ5dGVzKCkgKyBidWZm
ZXIudG90YWxCeXRlcygpKTsKKyAgICAgICAgY3VyckRzdCA9IGRzdCArIHdpZHRoOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykgeworICAgICAgICAg
ICAgaWYgKGN1cnJEc3QgKyBudW0gPiBlbmQpIC8vIFByb3RlY3QgYWdhaW5zdCBhIGJ1ZmZlciBv
dmVycnVuIGZyb20gYSBib2d1cyByZXBlYXRDb3VudC4KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIHNpemUpOworICAgICAgICAgICAgY3Vy
ckRzdCArPSB3aWR0aDsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCiAgICAgLy8gVGhlIHBpeGVs
IGRhdGEgYW5kIGNvb3JkaW5hdGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUg
ZnJhbWUncwogICAgIC8vIG9yaWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUu
CiAgICAgLy8gKG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNl
dCgpKS4KQEAgLTM4NiwxMCArNjg3LDIyIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LAogICAgIC8vIFRlbGwgdGhlIGZyYW1lIHRvIGNv
cHkgdGhlIHJvdyBkYXRhIGlmIG5lZWQgYmUuCiAgICAgaWYgKHJlcGVhdENvdW50ID4gMSkKICAg
ICAgICAgYnVmZmVyLmNvcHlSb3dOVGltZXMobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCB4LCB5
LCBzdGQ6Om1pbih5ICsgc3RhdGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5oZWln
aHQoKSkpOworI2VuZGlmCiB9CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZl
cjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKIHsKKyNpZiBVU0UoSU1BR0VG
UkFNRVNJTkspCisgICAgSW1hZ2VGcmFtZVNpbmsqIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVtmcmFtZUluZGV4XTsKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIGlmIChidWZmZXItPnN0
YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZy
YW1lSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBidWZmZXItPnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworICAgICAgICBidWZmZXItPnNldER1cmF0
aW9uKGZyYW1lRHVyYXRpb24pOworICAgICAgICBidWZmZXItPnNldERpc3Bvc2FsTWV0aG9kKGRp
c3Bvc2FsTWV0aG9kKTsKKyAgICAgICAgYnVmZmVyLT5lbnN1cmVIZWlnaHQobV9zaXplLmhlaWdo
dCgpKTsKKyAgICB9CisjZWxzZQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vz
c2FyeS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGluZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hp
Y2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2RlZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhl
cmUuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJ
bmRleF07CkBAIC00MzIsMTQgKzc0NSwyNSBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLAogICAg
ICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9
CisjZW5kaWYKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmdpZkNvbXBsZXRlKCkKIHsKKyNp
ZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgbV9jdXJyZW50
UmVhZGVyLT5zZXRDb21wbGV0ZSgpOworICAgIGlmIChtX3JlYWRlciA9PSBtX2N1cnJlbnRSZWFk
ZXIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnJhbWVCdWZmZXJDYWNo
ZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZVtpXSkK
KyAgICAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0tPnNldENhbkZyZWVCdWZmZXIo
dHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQogICAgIGlmIChtX3JlYWRlcikKICAgICAg
ICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+cmVwZXRpdGlvbkNvdW50KCk7CiAgICAg
ZGVsZXRlIG1fcmVhZGVyOwogICAgIG1fcmVhZGVyID0gMDsKKyNlbmRpZgogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCmluZGV4IGNkMmEwYmMuLjYxYTFmODEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01Myw3ICs1NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRoZSBudW1i
ZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCiAgICAg
ICAgIHZpcnR1YWwgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwogCisjaWYgVVNFKElNQUdF
RlJBTUVTSU5LKQorICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZVdpdGhvdXREZWNvZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsgfQorICAgICAgICB2aXJ0dWFsIEltYWdl
RnJhbWVTaW5rKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyNlbHNlCiAgICAg
ICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KTsKKyNlbmRpZgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUo
c2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpOwogCkBAIC04MSw2ICs4NywxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGE7CiAgICAgICAg
IG11dGFibGUgaW50IG1fcmVwZXRpdGlvbkNvdW50OwogICAgICAgICBHSUZJbWFnZURlY29kZXJQ
cml2YXRlKiBtX3JlYWRlcjsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIG11dGFi
bGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9zZWNvbmRhcnlSZWFkZXI7CisgICAgICAgIG11
dGFibGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9jdXJyZW50UmVhZGVyOworI2VuZGlmCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33294</attachid>
            <date>2009-07-22 14:58:48 -0700</date>
            <delta_ts>2009-07-23 09:43:36 -0700</delta_ts>
            <desc>part 3 JPEG decoder</desc>
            <filename>jpeg_decoder.patch</filename>
            <type>text/plain</type>
            <size>14898</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAppbmRleCA5MzY3YjhlLi5lYWVhZWQ5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
Y3BwCkBAIC02LDYgKzYsOCBAQAogICogT3RoZXIgY29udHJpYnV0b3JzOgogICogICBTdHVhcnQg
UGFybWVudGVyIDxzdHVhcnRAbW96aWxsYS5jb20+CiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC00
MCw2ICs0MiwxNyBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+ICAv
LyBOZWVkZWQgYnkganBlZ2xpYi5oIGZvciBGSUxFLgogCisjaWYgUExBVEZPUk0oV0lOQ0UpICYm
IFBMQVRGT1JNKFRPUkNITU9CSUxFKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlclV0aWxpdGllcy5o
IgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU5DRSkKKy8vIFJlbW92ZSB3YXJuaW5nOiAnRkFS
JyBtYWNybyByZWRlZmluaXRpb24KKyN1bmRlZiBGQVIKKy8vIEZpeCBJTlQzMiByZWRlZmluaXRp
b24gZXJyb3IKKyNkZWZpbmUgWE1EX0gKKyNlbmRpZgorCiBleHRlcm4gIkMiIHsKICNpbmNsdWRl
ICJqcGVnbGliLmgiCiB9CkBAIC04OSw2ICsxMDIsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9i
eXRlc1RvU2tpcCgwKQogICAgICAgICAsIG1fc3RhdGUoSlBFR19IRUFERVIpCiAgICAgICAgICwg
bV9zYW1wbGVzKDApCisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxF
KQorICAgICAgICAsIG1fam9iQ29tcGxldGUoZmFsc2UpCisjZW5kaWYKICAgICB7CiAgICAgICAg
IG1lbXNldCgmbV9pbmZvLCAwLCBzaXplb2YoanBlZ19kZWNvbXByZXNzX3N0cnVjdCkpOwogIApA
QCAtMTMxLDYgKzE0Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9pbmZvLnNyYyA9IDA7CiAKICAg
ICAgICAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJm1faW5mbyk7CisjaWYgUExBVEZPUk0oV0lO
Q0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgICAgICBtX2pvYkNvbXBsZXRlID0gZmFs
c2U7CisjZW5kaWYKICAgICB9CiAKICAgICB2b2lkIHNraXBCeXRlcyhsb25nIG51bV9ieXRlcykg
ewpAQCAtMTQ1LDYgKzE2NCw2MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2J5dGVzVG9Ta2lw
ID0gMDsKICAgICB9CiAKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJ
TEUpCisgICAgdm9pZCBzZXRDb21wbGV0ZSgpIHsgbV9qb2JDb21wbGV0ZSA9IHRydWU7IH0KKyAg
ICBib29sIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgc2l6ZU9ubHkpIHsK
KyAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CisKKyAgICAgICAgdW5zaWdu
ZWQgbGFzdE9mZnNldCA9IC0xOworICAgICAgICBCeXRlQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAg
U2hhcmVkQnVmZmVyU2VnbWVudCBzZWdtZW50OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICBpZiAobV9kZWNvZGVyLT5mYWlsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlYWRPZmZzZXQgPSBtX2J1ZmZlckxlbmd0aCAt
IG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsKKyAgICAgICAgICAgIGlmIChyZWFkT2Zmc2V0
ID09IGxhc3RPZmZzZXQgJiYgbV9idWZmZXJMZW5ndGggPT0gZGF0YS5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fam9iQ29tcGxldGUgJiYgbV9kZWNvZGVyLT5pc0FsbERhdGFSZWNl
aXZlZCgpKQorICAgICAgICAgICAgICAgICAgICBtX2RlY29kZXItPmpwZWdDb21wbGV0ZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNp
Z25lZCBzZWdtZW50TGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGlmIChyZWFkT2Zmc2V0ID09IGxh
c3RPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICBzZWdtZW50LnNldChkYXRhLCByZWFkT2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHNlZ21lbnQubGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghYnVmZmVyLmFwcGVuZChzZWdtZW50LmRhdGEoKSwgc2VnbWVudExlbmd0
aCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHNlZ21lbnQuc2V0KGRhdGEsIHJlYWRPZmZzZXQgKyBidWZm
ZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gc2VnbWVudC5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci5hcHBlbmQoc2VnbWVudC5kYXRhKCks
IHNlZ21lbnRMZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyICs9IHNlZ21lbnRMZW5ndGg7
CisgICAgICAgICAgICAgICAgbV9pbmZvLnNyYy0+bmV4dF9pbnB1dF9ieXRlID0gKEpPQ1RFVCop
YnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IHJlYWRPZmZz
ZXQgKyBidWZmZXIuc2l6ZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVh
cigpOworCisgICAgICAgICAgICAgICAgbGFzdE9mZnNldCA9IHJlYWRPZmZzZXQ7CisKKyAgICAg
ICAgICAgICAgICBzZWdtZW50LnNldChkYXRhLCByZWFkT2Zmc2V0ICsgYnVmZmVyLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHNlZ21lbnQubGVuZ3RoKCk7CisKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSByZWFkT2Zmc2V0ICsgc2VnbWVudExl
bmd0aDsKKyAgICAgICAgICAgICAgICBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXIgKz0gdG90
YWxTaXplIC0gbV9idWZmZXJMZW5ndGg7CisgICAgICAgICAgICAgICAgbV9pbmZvLnNyYy0+bmV4
dF9pbnB1dF9ieXRlID0gKEpPQ1RFVCopc2VnbWVudC5kYXRhKCk7CisKKyAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSBzdGlsbCBoYXZlIGJ5dGVzIHRvIHNraXAsIHRyeSB0byBza2lwIHRob3NlIG5v
dy4KKyAgICAgICAgICAgICAgICBpZiAobV9ieXRlc1RvU2tpcCkKKyAgICAgICAgICAgICAgICAg
ICAgc2tpcEJ5dGVzKG1fYnl0ZXNUb1NraXApOworCisgICAgICAgICAgICAgICAgbV9idWZmZXJM
ZW5ndGggPSB0b3RhbFNpemU7CisgICAgICAgICAgICB9CisjZWxzZQogICAgIGJvb2wgZGVjb2Rl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBzaXplT25seSkgewogICAgICAgICBtX2Rl
Y29kaW5nU2l6ZU9ubHkgPSBzaXplT25seTsKICAgICAgICAgCkBAIC0xNTksNiArMjMyLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgc2tpcEJ5dGVzKG1fYnl0ZXNUb1NraXApOwogCiAgICAgICAg
IG1fYnVmZmVyTGVuZ3RoID0gZGF0YS5zaXplKCk7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZG8gdGhlIHNldGptcCBoZXJlLiBPdGhlcndpc2UgYmFkIHRoaW5ncyB3
aWxsIGhhcHBlbgogICAgICAgICBpZiAoc2V0am1wKG1fZXJyLnNldGptcF9idWZmZXIpKSB7CkBA
IC0xNzIsNyArMjQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAvKiBSZWFkIGZpbGUgcGFyYW1ldGVycyB3aXRoIGpwZWdfcmVhZF9oZWFkZXIoKSAqLwogICAg
ICAgICAgICAgICAgIGlmIChqcGVnX3JlYWRfaGVhZGVyKCZtX2luZm8sIHRydWUpID09IEpQRUdf
U1VTUEVOREVEKQorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkK
KyAgICAgICAgICAgICAgICAgICAgZ290byBORVhUX1NFR01FTlQ7CisjZWxzZQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyogSS9PIHN1c3BlbnNpb24gKi8KKyNlbmRpZgogCiAg
ICAgICAgICAgICAgICAgLyogbGV0IGxpYmpwZWcgdGFrZSBjYXJlIG9mIGdyYXktPlJHQiBhbmQg
WUNiQ3ItPlJHQiBjb252ZXJzaW9ucyAqLwogICAgICAgICAgICAgICAgIHN3aXRjaCAobV9pbmZv
LmpwZWdfY29sb3Jfc3BhY2UpIHsKQEAgLTI0Miw3ICszMjAsMTEgQEAgcHVibGljOgogCiAgICAg
ICAgICAgICAgICAgLyogU3RhcnQgZGVjb21wcmVzc29yICovCiAgICAgICAgICAgICAgICAgaWYg
KCFqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJm1faW5mbykpCisjaWYgUExBVEZPUk0oV0lOQ0UpICYm
IFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgICAgICAgICAgICAgICAgICBnb3RvIE5FWFRfU0VH
TUVOVDsKKyNlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3Vz
cGVuc2lvbiAqLworI2VuZGlmCiAKICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIGEgcHJv
Z3Jlc3NpdmUgSlBFRyAuLi4gKi8KICAgICAgICAgICAgICAgICBtX3N0YXRlID0gKG1faW5mby5i
dWZmZXJlZF9pbWFnZSkgPyBKUEVHX0RFQ09NUFJFU1NfUFJPR1JFU1NJVkUgOiBKUEVHX0RFQ09N
UFJFU1NfU0VRVUVOVElBTDsKQEAgLTI1Myw3ICszMzUsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGlmIChtX3N0YXRlID09IEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMKSB7CiAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPm91dHB1dFNjYW5saW5lcygp
KQorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gTkVYVF9TRUdNRU5UOworI2Vsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLworI2VuZGlmCiAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UndmUgY29tcGxldGVkIGltYWdlIG91dHB1
dCAuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG1faW5mby5vdXRwdXRfc2Nhbmxp
bmUgPT0gbV9pbmZvLm91dHB1dF9oZWlnaHQpOwpAQCAtMjgzLDcgKzM2OSwxMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW4tLTsKIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghanBlZ19zdGFydF9vdXRwdXQoJm1faW5mbywgc2NhbikpCisj
aWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIE5FWFRfU0VHTUVOVDsKKyNlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLwor
I2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09IDB4ZmZmZmZmKQpAQCAtMjk0LDEyICsz
ODQsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaWRu
J3QgbWFuYWdlIHRvIHJlYWQgYW55IGxpbmVzIC0gZmxhZyBzbyB3ZSBkb24ndCBjYWxsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfc3RhcnRfb3V0cHV0KCkgbXVsdGlwbGUg
dGltZXMgZm9yIHRoZSBzYW1lIHNjYW4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmZvLm91dHB1dF9zY2FubGluZSA9IDB4ZmZmZmZmOworI2lmIFBMQVRGT1JNKFdJTkNF
KSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIE5FWFRfU0VHTUVOVDsKKyNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5zaW9uICovCisjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1faW5mby5vdXRwdXRfc2Nh
bmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWpwZWdfZmluaXNoX291dHB1dCgmbV9pbmZvKSkKKyNpZiBQTEFURk9STShXSU5D
RSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gTkVYVF9TRUdNRU5UOworI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5zaW9uICovCisjZW5kaWYKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChqcGVnX2lucHV0X2NvbXBsZXRlKCZtX2luZm8pICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2luZm8uaW5wdXRfc2Nhbl9udW1i
ZXIgPT0gbV9pbmZvLm91dHB1dF9zY2FuX251bWJlcikpCkBAIC0zMTcsNyArNDE1LDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvKiBGaW5pc2ggZGVjb21wcmVz
c2lvbiAqLwogICAgICAgICAgICAgICAgIGlmICghanBlZ19maW5pc2hfZGVjb21wcmVzcygmbV9p
bmZvKSkKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAg
ICAgICAgICAgICAgICAgIGdvdG8gTkVYVF9TRUdNRU5UOworI2Vsc2UKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5zaW9uICovCisjZW5kaWYKIAogICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NJTktfTk9OX0pQRUdfVFJBSUxFUjsKIApAQCAtMzMx
LDYgKzQzMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIEpQRUdfRVJST1I6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExB
VEZPUk0oVE9SQ0hNT0JJTEUpCitORVhUX1NFR01FTlQ6CisgICAgICAgIGlmIChzaXplT25seSAm
JiBtX3N0YXRlICE9IEpQRUdfSEVBREVSIHx8IG1fam9iQ29tcGxldGUpCisgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisjZW5kaWYKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0z
NTEsNiArNDU5LDkgQEAgcHJpdmF0ZToKICAgICBqc3RhdGUgbV9zdGF0ZTsKIAogICAgIEpTQU1Q
QVJSQVkgbV9zYW1wbGVzOworI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1P
QklMRSkKKyAgICBib29sIG1fam9iQ29tcGxldGU7CisjZW5kaWYKIH07CiAKIC8qIE92ZXJyaWRl
IHRoZSBzdGFuZGFyZCBlcnJvciBtZXRob2QgaW4gdGhlIElKRyBKUEVHIGRlY29kZXIgY29kZS4g
Ki8KQEAgLTQwNCw4ICs1MTUsMTYgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgSW1hZ2VEZWNvZGVy
OjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAKICAgICAvLyBDcmVhdGUgdGhlIEpQ
RUcgcmVhZGVyLgotICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQorICAgIGlmICghbV9y
ZWFkZXIgJiYgIW1fZmFpbGVkKSB7CisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRP
UkNITU9CSUxFKQorCQlNZW1vcnlBbGxvY2F0aW9uQ2FuRmFpbCBjYW5GYWlsOworI2VuZGlmCiAg
ICAgICAgIG1fcmVhZGVyID0gbmV3IEpQRUdJbWFnZVJlYWRlcih0aGlzKTsKKyNpZiBQTEFURk9S
TShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisJCWlmICghbV9yZWFkZXIpCisJCQlt
X2ZhaWxlZCA9IHRydWU7CisjZW5kaWYKKyAgICB9CiB9CiAKIC8vIFdoZXRoZXIgb3Igbm90IHRo
ZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgpAQCAtNDE3LDYgKzUzNiwy
MiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJu
IEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKKyNpZiBVU0UoSU1BR0VGUkFN
RVNJTkspCitJbWFnZUZyYW1lU2luayogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXgpCisgICAgICAgIHJldHVybiAwOwor
CisJaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisJCW1fZnJhbWVCdWZmZXJDYWNo
ZS5hcHBlbmQoSW1hZ2VGcmFtZVNpbms6OmNyZWF0ZUluc3RhbmNlKHRydWUpKTsKKworICAgIElt
YWdlRnJhbWVTaW5rKiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBpZiAoZnJh
bWUgJiYgZnJhbWUtPnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBt
X3JlYWRlcikKKyAgICAgICAgLy8gRGVjb2RlIHRoaXMgZnJhbWUuCisgICAgICAgIGRlY29kZSgp
OworICAgIHJldHVybiBmcmFtZTsKK30KKyNlbHNlCiBSR0JBMzJCdWZmZXIqIEpQRUdJbWFnZURl
Y29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4
KQpAQCAtNDMxLDYgKzU2Niw3IEBAIFJHQkEzMkJ1ZmZlciogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAgICAgZGVjb2RlKCk7CiAgICAgcmV0
dXJuICZmcmFtZTsKIH0KKyNlbmRpZgogCiAvLyBGZWVkIGRhdGEgdG8gdGhlIEpQRUcgcmVhZGVy
Lgogdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkKQEAgLTQzOCw5
ICs1NzQsMjEgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkK
ICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFBMQVRGT1JNKFdJTkNF
KSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKwl7CisJCU1lbW9yeUFsbG9jYXRpb25DYW5GYWls
IGNhbkZhaWw7CisJCW1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgc2l6ZU9u
bHkpOworCX0KKyNlbHNlCiAgICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPmRlY29kZShtX2RhdGEt
PmJ1ZmZlcigpLCBzaXplT25seSk7Ci0KLSAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7CisjZW5kaWYKKworICAgIGlmIChtX2ZhaWxl
ZAorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKwkJfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNF
bXB0eSgpICYmICghbV9mcmFtZUJ1ZmZlckNhY2hlWzBdIHx8IG1fZnJhbWVCdWZmZXJDYWNoZVsw
XS0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkpIHsKKyNlbHNlCisg
ICAgICAgIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkgeworI2Vu
ZGlmCiAgICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsKICAgICAgICAgbV9yZWFkZXIgPSAwOwogICAg
IH0KQEAgLTQ0OCw2ICs1OTYsNzMgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9v
bCBzaXplT25seSkKIAogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQog
eworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlz
RW1wdHkoKSB8fCAhbV9mcmFtZUJ1ZmZlckNhY2hlWzBdKSB7CisgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFJlc2l6ZSB0byB0
aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgaW1hZ2UuCisgICAgSW1hZ2VGcmFtZVNpbmsqIGJ1
ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSA9
PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgaW50IHNocnVua1dpZHRoID0g
bV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnMuc2l6ZSgpIDogbV9zaXplLndpZHRoKCk7CisgICAg
ICAgIGludCBzaHJ1bmtIZWlnaHQgPSBtX3NjYWxlZCA/IG1fc2NhbGVkUm93cy5zaXplKCkgOiBt
X3NpemUuaGVpZ2h0KCk7CisKKyAgICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93
IHRvIHRoZSBjb3JyZWN0IHdpZHRoL2hlaWdodC4KKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNp
emUoc2hydW5rV2lkdGgsIHNocnVua0hlaWdodCwgdHJ1ZSkpIHsKKyAgICAgICAgICAgIG1fZmFp
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KKyAgICAg
ICAgYnVmZmVyLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworCisgICAg
ICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdl
LgorICAgICAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKSk7CisKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbHBoYSAodGhp
cyBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBidWZmZXIgaXMgY29uc3RydWN0ZWQpLgorICAgIH0K
KworICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwor
ICAgIEpTQU1QQVJSQVkgc2FtcGxlcyA9IG1fcmVhZGVyLT5zYW1wbGVzKCk7CisKKyAgICB3aGls
ZSAoaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgaW5mby0+b3V0cHV0X2hlaWdodCkgeworICAgICAg
ICBpbnQgc291cmNlWSA9IGluZm8tPm91dHB1dF9zY2FubGluZTsKKyAgICAgICAgaW50IHNvdXJj
ZVJvd3MgPSBqcGVnX3JlYWRfc2NhbmxpbmVzKGluZm8sIHNhbXBsZXMsIDEpOworICAgICAgICBp
ZiAoc291cmNlUm93cyAhPSAxKSB7CisgICAgICAgICAgICBpZiAoc291cmNlUm93cyAhPSAwKQor
ICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3NjYWxlZCkgeworICAgICAgICAgICAgaW50
IGRlc3RZID0gc2NhbGVkWShzb3VyY2VZKTsKKyAgICAgICAgICAgIGlmIChkZXN0WSA8IDApCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBk
c3QgPSAodW5zaWduZWQgc2hvcnQqKWJ1ZmZlci0+Ynl0ZXMoKSArIGRlc3RZICogYnVmZmVyLT5i
dWZmZXJXaWR0aCgpOworICAgICAgICAgICAgSlNBTVBMRSAqakJlZ2luID0gc2FtcGxlc1swXTsK
KyAgICAgICAgICAgIGludCBjb2x1bW5zID0gbV9zY2FsZWRDb2x1bW5zLnNpemUoKTsKKyAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29sdW1uczsgKyt4KSB7CisgICAgICAgICAgICAg
ICAgSlNBTVBMRSAqajEgPSBqQmVnaW4gKyBtX3NjYWxlZENvbHVtbnNbeF0gKiAzOwkJCQkKKyAg
ICAgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdCsrLCBqMVswXSwgajFb
MV0sIGoxWzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlci0+ZW5zdXJlSGVp
Z2h0KGRlc3RZICsgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCogZHN0ID0gKHVuc2lnbmVkIHNob3J0KilidWZmZXItPmJ5dGVzKCkgKyBzb3VyY2VZICog
YnVmZmVyLT5idWZmZXJXaWR0aCgpOworICAgICAgICAgICAgSlNBTVBMRSAqajEgPSBzYW1wbGVz
WzBdOworICAgICAgICAgICAgSlNBTVBMRSAqakVuZCA9IGoxICsgaW5mby0+b3V0cHV0X3dpZHRo
ICsgaW5mby0+b3V0cHV0X3dpZHRoICsgaW5mby0+b3V0cHV0X3dpZHRoOworICAgICAgICAgICAg
Zm9yICg7ajEgPCBqRW5kOykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHIgPSAqajErKzsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBnID0gKmoxKys7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgYiA9ICpqMSsrOworICAgICAgICAgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0Ix
NigqZHN0KyssIHIsIGcsIGIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyLT5l
bnN1cmVIZWlnaHQoaW5mby0+b3V0cHV0X3NjYW5saW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbHNlCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDg0LDE2ICs2OTksMjMgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgIH0KIAogICAgIHJldHVybiB0
cnVlOworI2VuZGlmCiB9CiAKIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkK
IHsKKyNpZiBQTEFURk9STShXSU5DRSkKKyAgICBtX3JlYWRlci0+c2V0Q29tcGxldGUoKTsKKyAg
ICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdKQorICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0tPnNldFN0YXR1cyhSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUpOworI2Vsc2UKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSGFuZCBiYWNrIGFuIGFwcHJvcHJp
YXRlbHkgc2l6ZWQgYnVmZmVyLCBldmVuIGlmIHRoZSBpbWFnZSBlbmRlZCB1cCBiZWluZyBlbXB0
eS4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAg
ICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CisjZW5kaWYK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
Zy9KUEVHSW1hZ2VEZWNvZGVyLmgKaW5kZXggNTZlMDA3ZC4uZmZlZGQ0MiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00Niw3ICs0NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJ
TkspCisgICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZVNpbmsqIGZyYW1lQnVmZmVyQXRJbmRleChz
aXplX3QgaW5kZXgpOworI2Vsc2UKICAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworI2VuZGlmCiAgICAgICAgIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAg
LTU3LDYgKzYyLDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBvdXRwdXRT
Y2FubGluZXMoKTsKICAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKIAorI2lmIFVTRShJTUFH
RUZSQU1FU0lOSykKKyAgICAgICAgYm9vbCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkg
eworICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtX3NpemVBdmFpbGFibGUpIHsKKyAgICAg
ICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fc2l6
ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw
cmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIEpQRUdJbWFnZVJlYWRl
ciogbV9yZWFkZXI7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33296</attachid>
            <date>2009-07-22 14:59:24 -0700</date>
            <delta_ts>2009-07-23 09:43:43 -0700</delta_ts>
            <desc>part 4 PNG decoder</desc>
            <filename>png_decoder.patch</filename>
            <type>text/plain</type>
            <size>13066</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwCmluZGV4IGQxNDMzM2YuLmFhNjI3NTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAq
IFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEgbW96aWxsYS5vcmcKICAqCkBAIC00MCw2
ICs0MSwxNiBAQAogI2luY2x1ZGUgInBuZy5oIgogI2luY2x1ZGUgImFzc2VydC5oIgogCisjaWYg
UExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorCitzdGF0aWMgcG5nX3Zv
aWRwIFBOR0FQSSBwbmdfbWFsbG9jKHBuZ19zdHJ1Y3RwLCBwbmdfc2l6ZV90IHMpIHsKKwlyZXR1
cm4gTWVtb3J5TWFuYWdlcjo6bV9tYWxsb2Mocyk7Cit9CitzdGF0aWMgdm9pZCBQTkdBUEkgcG5n
X2ZyZWUocG5nX3N0cnVjdHAsIHBuZ192b2lkcCBwKSB7CisJTWVtb3J5TWFuYWdlcjo6bV9mcmVl
KHApOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gR2FtbWEgY29uc3Rh
bnRzLgpAQCAtNzMsMTAgKzg0LDE5IEBAIHB1YmxpYzoKICAgICBQTkdJbWFnZVJlYWRlcihQTkdJ
bWFnZURlY29kZXIqIGRlY29kZXIpCiAgICAgICAgIDogbV9yZWFkT2Zmc2V0KDApCiAgICAgICAg
ICwgbV9kZWNvZGluZ1NpemVPbmx5KGZhbHNlKQorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFU
Rk9STShUT1JDSE1PQklMRSkKKyAgICAgICAgLCBtX2N1cnJlbnRCdWZmZXJTaXplKDApCisgICAg
ICAgICwgbV9qb2JDb21wbGV0ZShmYWxzZSkKKyNlbHNlCiAgICAgICAgICwgbV9pbnRlcmxhY2VC
dWZmZXIoMCkKKyNlbmRpZgogICAgICAgICAsIG1faGFzQWxwaGEoMCkKICAgICB7CisjaWYgUExB
VEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgICAgICBtX3BuZyA9IHBu
Z19jcmVhdGVfcmVhZF9zdHJ1Y3RfMihQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIE5VTEwsIGRlY29k
aW5nRmFpbGVkLCBkZWNvZGluZ1dhcm5pbmcgLCAwLCBwbmdfbWFsbG9jLCBwbmdfZnJlZSk7Cisj
ZWxzZQogICAgICAgICBtX3BuZyA9IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QoUE5HX0xJQlBOR19W
RVJfU1RSSU5HLCAwLCBkZWNvZGluZ0ZhaWxlZCwgZGVjb2RpbmdXYXJuaW5nKTsKKyNlbmRpZgog
ICAgICAgICBtX2luZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KG1fcG5nKTsKICAgICAgICAg
cG5nX3NldF9wcm9ncmVzc2l2ZV9yZWFkX2ZuKG1fcG5nLCBkZWNvZGVyLCBoZWFkZXJBdmFpbGFi
bGUsIHJvd0F2YWlsYWJsZSwgcG5nQ29tcGxldGUpOwogICAgIH0KQEAgLTg5LDExICsxMDksNjcg
QEAgcHVibGljOgogICAgIHZvaWQgY2xvc2UoKSB7CiAgICAgICAgIGlmIChtX3BuZyAmJiBtX2lu
Zm8pCiAgICAgICAgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmbV9wbmcsICZtX2luZm8s
IDApOyAgLy8gV2lsbCB6ZXJvIHRoZSBwb2ludGVycy4KKyNpZiBQTEFURk9STShXSU5DRSkgJiYg
UExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgIGNsZWFySW50ZXJmYWNlQnVmZmVyKCk7Cisg
ICAgICAgIG1fam9iQ29tcGxldGUgPSBmYWxzZTsKKyNlbHNlCiAgICAgICAgIGRlbGV0ZSBbXW1f
aW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9IDA7CisjZW5kaWYK
ICAgICAgICAgbV9yZWFkT2Zmc2V0ID0gMDsKICAgICB9CiAKKyNpZiBQTEFURk9STShXSU5DRSkg
JiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgdW5zaWduZWQgY3VycmVudEJ1ZmZlclNpemUo
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRCdWZmZXJTaXplOyB9CisgICAgdm9pZCBzZXRDb21w
bGV0ZSgpIHsgbV9qb2JDb21wbGV0ZSA9IHRydWU7IH0KKyAgICBwbmdfYnl0ZXAgaW50ZXJsYWNl
QnVmZmVyKHVuc2lnbmVkIHJvdykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ludGVy
bGFjZUJ1ZmZlci5pc0VtcHR5KCkgPyAwIDogbV9pbnRlcmxhY2VCdWZmZXJbcm93XTsKKyAgICB9
CisgICAgdm9pZCBjbGVhckludGVyZmFjZUJ1ZmZlcigpIHsKKyAgICAgICAgZm9yIChWZWN0b3I8
cG5nX2J5dGVwPjo6aXRlcmF0b3IgaSA9IG1faW50ZXJsYWNlQnVmZmVyLmJlZ2luKCkgOyBpICE9
IG1faW50ZXJsYWNlQnVmZmVyLmVuZCgpIDsgKytpKQorICAgICAgICAgICAgZGVsZXRlW10gKmk7
CisgICAgICAgIG1faW50ZXJsYWNlQnVmZmVyLmNsZWFyKCk7CisgICAgfQorICAgIGJvb2wgY3Jl
YXRlSW50ZXJsYWNlQnVmZmVyKGludCByb3dzLCBpbnQgcm93U2l6ZSkgeworICAgICAgICBjbGVh
ckludGVyZmFjZUJ1ZmZlcigpOworICAgICAgICBNZW1vcnlBbGxvY2F0aW9uQ2FuRmFpbCBjYW5G
YWlsOworICAgICAgICB3aGlsZSAocm93cy0tKSB7CisgICAgICAgICAgICBpZiAocG5nX2J5dGUq
IGJ1ZmZlciA9IG5ldyBwbmdfYnl0ZVtyb3dTaXplXSkKKyAgICAgICAgICAgICAgICBtX2ludGVy
bGFjZUJ1ZmZlci5hcHBlbmQoYnVmZmVyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIGNsZWFySW50ZXJmYWNlQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICB2b2lkIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgc2l6ZU9u
bHkpCisgICAgeworICAgICAgICBtX2RlY29kaW5nU2l6ZU9ubHkgPSBzaXplT25seTsKKworICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGlu
Z3Mgd2lsbCBoYXBwZW4KKyAgICAgICAgaWYgKHNldGptcChtX3BuZy0+am1wYnVmKSkKKyAgICAg
ICAgICAgIGNsb3NlKCk7CisKKyAgICAgICAgUE5HSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gc3Rh
dGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIobV9wbmcp
KTsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgU2hhcmVkQnVmZmVyU2VnbWVudCBz
ZWdtZW50KGRhdGEsIG1fcmVhZE9mZnNldCk7CisgICAgICAgICAgICBpZiAoIXNlZ21lbnQubGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fam9iQ29tcGxldGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGRlY29kZXItPmlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWNvZGVyLT5wbmdDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcmVh
ZE9mZnNldCArPSBzZWdtZW50Lmxlbmd0aCgpOworICAgICAgICAgICAgbV9jdXJyZW50QnVmZmVy
U2l6ZSA9IG1fcmVhZE9mZnNldDsKKyAgICAgICAgICAgIHBuZ19wcm9jZXNzX2RhdGEobV9wbmcs
IG1faW5mbywgKHBuZ19ieXRlcClzZWdtZW50LmRhdGEoKSwgc2VnbWVudC5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICBpZiAoKHNpemVPbmx5ICYmIGRlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB8
fCBtX2pvYkNvbXBsZXRlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAg
IH0KKyNlbHNlCiAgICAgdm9pZCBkZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBib29s
IHNpemVPbmx5KQogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7
CkBAIC0xMTMsMzEgKzE4OSw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHBuZ19wcm9jZXNzX2RhdGEo
bV9wbmcsIG1faW5mbywgKHBuZ19ieXRlcCkoZGF0YS5kYXRhKCkpICsgb2Zmc2V0LCByZW1haW5p
bmcpOwogICAgIH0KIAorICAgIHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2ludGVybGFjZUJ1ZmZlcjsgfQorCisgICAgdm9pZCBjcmVhdGVJbnRlcmxhY2VCdWZm
ZXIoaW50IHNpemUpIHsKKyAgICAgICAgbV9pbnRlcmxhY2VCdWZmZXIgPSBuZXcgcG5nX2J5dGVb
c2l6ZV07CisgICAgfQorI2VuZGlmCisKICAgICBib29sIGRlY29kaW5nU2l6ZU9ubHkoKSBjb25z
dCB7IHJldHVybiBtX2RlY29kaW5nU2l6ZU9ubHk7IH0KICAgICBwbmdfc3RydWN0cCBwbmdQdHIo
KSBjb25zdCB7IHJldHVybiBtX3BuZzsgfQogICAgIHBuZ19pbmZvcCBpbmZvUHRyKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmZvOyB9Ci0gICAgcG5nX2J5dGVwIGludGVybGFjZUJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1faW50ZXJsYWNlQnVmZmVyOyB9CiAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KIAogICAgIHZvaWQgc2V0UmVhZE9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQpIHsgbV9yZWFkT2Zmc2V0ID0gb2Zmc2V0OyB9CiAgICAgdm9pZCBzZXRIYXNBbHBo
YShib29sIGIpIHsgbV9oYXNBbHBoYSA9IGI7IH0KIAotICAgIHZvaWQgY3JlYXRlSW50ZXJsYWNl
QnVmZmVyKGludCBzaXplKSB7Ci0gICAgICAgIG1faW50ZXJsYWNlQnVmZmVyID0gbmV3IHBuZ19i
eXRlW3NpemVdOwotICAgIH0KLQogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3JlYWRPZmZzZXQ7
CiAgICAgYm9vbCBtX2RlY29kaW5nU2l6ZU9ubHk7CiAgICAgcG5nX3N0cnVjdHAgbV9wbmc7CiAg
ICAgcG5nX2luZm9wIG1faW5mbzsKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9S
Q0hNT0JJTEUpCisgICAgdW5zaWduZWQgbV9jdXJyZW50QnVmZmVyU2l6ZTsKKyAgICBib29sIG1f
am9iQ29tcGxldGU7CisgICAgVmVjdG9yPHBuZ19ieXRlcD4gbV9pbnRlcmxhY2VCdWZmZXI7Cisj
ZWxzZQogICAgIHBuZ19ieXRlcCBtX2ludGVybGFjZUJ1ZmZlcjsKKyNlbmRpZgogICAgIGJvb2wg
bV9oYXNBbHBoYTsKIH07CiAKIFBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKICAg
ICA6IG1fcmVhZGVyKDApCiB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIG1fZnJhbWVC
dWZmZXJDYWNoZS5hcHBlbmQoSW1hZ2VGcmFtZVNpbms6OmNyZWF0ZUluc3RhbmNlKHRydWUpKTsK
KyNlbmRpZgogfQogCiBQTkdJbWFnZURlY29kZXI6On5QTkdJbWFnZURlY29kZXIoKQpAQCAtMTY4
LDYgKzI1NSwxNiBAQCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAorI2lmIFVTRShJ
TUFHRUZSQU1FU0lOSykKK0ltYWdlRnJhbWVTaW5rKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVm
ZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgSW1hZ2VGcmFtZVNpbmsqIGZyYW1lID0g
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c3RhdHVzKCkg
IT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVyKQorICAgICAgICAvLyBE
ZWNvZGUgdGhpcyBmcmFtZS4KKyAgICAgICAgZGVjb2RlKCk7CisgICAgcmV0dXJuIGZyYW1lOwor
fQorI2Vsc2UKIFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKQEAgLTE4Miw2ICsyNzksNyBAQCBS
R0JBMzJCdWZmZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBp
bmRleCkKICAgICAgICAgZGVjb2RlKCk7CiAgICAgcmV0dXJuICZmcmFtZTsKIH0KKyNlbmRpZgog
CiAvLyBGZWVkIGRhdGEgdG8gdGhlIFBORyByZWFkZXIuCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCkBAIC0xODksOSArMjg3LDE4IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkKICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAg
IHJldHVybjsKIAorCisjaWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxF
KQorICAgIG1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgc2l6ZU9ubHkpOworI2Vsc2UKICAgICBt
X3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKKyNlbmRpZgogICAg
IAorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBpZiAobV9mYWlsZWQgfHwgIW1fZnJhbWVC
dWZmZXJDYWNoZVswXSB8fCBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0tPnN0YXR1cygpID09IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkgeworI2Vsc2UgCiAgICAgaWYgKG1fZmFpbGVkIHx8ICgh
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3Rh
dHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkgeworI2VuZGlmCiAgICAgICAg
IGRlbGV0ZSBtX3JlYWRlcjsKICAgICAgICAgbV9yZWFkZXIgPSAwOwogICAgIH0KQEAgLTIzNyw2
ICszNDQsOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAK
ICAgICAvLyBXZSBjYW4gZmlsbCBpbiB0aGUgc2l6ZSBub3cgdGhhdCB0aGUgaGVhZGVyIGlzIGF2
YWlsYWJsZS4KICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpIHsKKyNp
ZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2Fy
eSgpOworI2VuZGlmCiAgICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgewogICAg
ICAgICAgICAgLy8gU2l6ZSB1bnJlYXNvbmFibGUsIGJhaWwgb3V0LgogICAgICAgICAgICAgbG9u
Z2ptcChwbmctPmptcGJ1ZiwgMSk7CkBAIC0yOTQsNyArNDA0LDExIEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogCiAgICAgaWYgKHJlYWRlcigpLT5kZWNvZGluZ1Np
emVPbmx5KCkpIHsKICAgICAgICAgLy8gSWYgd2Ugb25seSBuZWVkZWQgdGhlIHNpemUsIGhhbHQg
dGhlIHJlYWRlci4gICAgIAorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1P
QklMRSkKKyAgICAgICAgcmVhZGVyKCktPnNldFJlYWRPZmZzZXQocmVhZGVyKCktPmN1cnJlbnRC
dWZmZXJTaXplKCkgLSBwbmctPmJ1ZmZlcl9zaXplKTsKKyNlbHNlCiAgICAgICAgIHJlYWRlcigp
LT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gcG5nLT5idWZmZXJfc2l6ZSk7CisjZW5k
aWYKICAgICAgICAgcG5nLT5idWZmZXJfc2l6ZSA9IDA7CiAgICAgfQogfQpAQCAtMzEwLDYgKzQy
NCwxMDQgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFy
KiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2Fj
aGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKworI2lmIFVTRShJTUFHRUZSQU1FU0lO
SykKKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fZnJhbWVC
dWZmZXJDYWNoZVswXSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlRnJhbWVTaW5rJiBidWZm
ZXIgPSAqbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CisgICAgICAgIGludCB3aWR0aCA9IG1fc2NhbGVk
ID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IG1fc2l6ZS53aWR0aCgpOworICAgICAgICBpbnQg
aGVpZ2h0ID0gbV9zY2FsZWQgPyBtX3NjYWxlZFJvd3Muc2l6ZSgpIDogbV9zaXplLmhlaWdodCgp
OworICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQsICFyZWFkZXIoKS0+
aGFzQWxwaGEoKSkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZl
cjo6RnJhbWVQYXJ0aWFsKTsKKworICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5
cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgorICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKworICAgICAgICBpZiAo
cmVhZGVyKCktPnBuZ1B0cigpLT5pbnRlcmxhY2VkKSB7CisgICAgICAgICAgICBpZiAoIXJlYWRl
cigpLT5jcmVhdGVJbnRlcmxhY2VCdWZmZXIobV9zaXplLmhlaWdodCgpLCAocmVhZGVyKCktPmhh
c0FscGhhKCkgPyA0IDogMykgKiBtX3NpemUud2lkdGgoKSkpIHsKKyAgICAgICAgICAgICAgICBt
X2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJvd0J1ZmZlciA9PSAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQgZGVzdFkgPSByb3dJbmRleDsKKyAgICBpZiAobV9zY2FsZWQpIHsKKyAg
ICAgICAgZGVzdFkgPSBzY2FsZWRZKGRlc3RZKTsKKyAgICAgICAgaWYgKGRlc3RZIDwgMCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwbmdfc3RydWN0cCBwbmcgPSByZWFkZXIo
KS0+cG5nUHRyKCk7CisgICAgYm9vbCBoYXNBbHBoYSA9IHJlYWRlcigpLT5oYXNBbHBoYSgpOwor
ICAgIHVuc2lnbmVkIGNvbG9yQ2hhbm5lbHMgPSBoYXNBbHBoYSA/IDQgOiAzOworICAgIHBuZ19i
eXRlcCByb3cgPSByZWFkZXIoKS0+aW50ZXJsYWNlQnVmZmVyKHJvd0luZGV4KTsKKyAgICBpZiAo
cm93KQorICAgICAgICBwbmdfcHJvZ3Jlc3NpdmVfY29tYmluZV9yb3cocG5nLCByb3csIHJvd0J1
ZmZlcik7CisgICAgZWxzZQorICAgICAgICByb3cgPSByb3dCdWZmZXI7CisKKyAgICAvLyBDb3B5
IHRoZSBkYXRhIGludG8gb3VyIGJ1ZmZlci4KKyAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAgICAg
aW50IGNvbHVtbnMgPSBtX3NjYWxlZENvbHVtbnMuc2l6ZSgpOworICAgICAgICAvLyBlcXVpdmFs
ZW50IHRvIGlmICghaGFzQWxwaGEpCisgICAgICAgIGlmIChidWZmZXIuaXMxNmJpdCgpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCogZHN0MTYgPSAodW5zaWduZWQgc2hvcnQqKWJ1ZmZl
ci5ieXRlcygpICsgZGVzdFkgKiBidWZmZXIuYnVmZmVyV2lkdGgoKTsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY29sdW1uczsgaSsrKSB7CisgICAgICAgICAgICAgICAgcG5nX2J5
dGVwIHBpeGVsID0gcm93ICsgbV9zY2FsZWRDb2x1bW5zW2ldICogMzsKKyAgICAgICAgICAgICAg
ICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdDE2KyssIHBpeGVsWzBdLCBwaXhlbFsxXSwg
cGl4ZWxbMl0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dW5zaWduZWQqIGRzdCA9ICh1bnNpZ25lZCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZl
ci5idWZmZXJXaWR0aCgpOworICAgICAgICAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNB
bHBoYSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyBtX3NjYWxlZENvbHVtbnNb
aV0gKiA0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gcGl4ZWxbM107CisgICAg
ICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQkEoKmRzdCsrLCBwaXhlbFswXSwgcGl4
ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgaWYgKCFzYXdBbHBoYSAm
JiBhbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBzYXdBbHBoYSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBp
bnQgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgLy8gZXF1aXZhbGVudCB0byBpZiAo
IWhhc0FscGhhKQorICAgICAgICBpZiAoYnVmZmVyLmlzMTZiaXQoKSkgeworICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQqIGRzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilidWZmZXIuYnl0ZXMoKSAr
IHJvd0luZGV4ICogYnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAq
cm93Kys7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAqcm93Kys7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICpyb3crKzsKKyAgICAgICAgICAgICAgICBJbWFnZUZy
YW1lU2luazo6c2V0UkdCMTYoKmRzdDE2KyssIHJlZCwgZ3JlZW4sIGJsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQqIGRzdCA9ICh1bnNp
Z25lZCopYnVmZmVyLmJ5dGVzKCkgKyByb3dJbmRleCAqIHdpZHRoOworICAgICAgICAgICAgYm9v
bCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gKnJv
dysrOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKnJvdysrOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSAqcm93Kys7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSAqcm93Kys7CisgICAgICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQkEo
KmRzdCsrLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgaWYgKCFz
YXdBbHBoYSAmJiBhbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBzYXdBbHBoYSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgYnVm
ZmVyLmVuc3VyZUhlaWdodChyb3dJbmRleCArIDEpOworI2Vsc2UKICAgICAvLyBJbml0aWFsaXpl
IHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJC
dWZmZXI6OkZyYW1lRW1wdHkpIHsKQEAgLTM4NSw2ICs1OTcsNyBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93
SW5kZXgsCiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgIH0K
ICAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBwbmdDb21wbGV0ZShwbmdfc3RydWN0cCBwbmcsIHBu
Z19pbmZvcCBpbmZvKQpAQCAtMzk3LDkgKzYxMCwxNSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
cG5nQ29tcGxldGUoKQogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKKyAjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorCW1fcmVhZGVyLT5zZXRD
b21wbGV0ZSgpOworCWlmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0pCisJCW1fZnJhbWVCdWZmZXJD
YWNoZVswXS0+c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CisjZWxzZQog
ICAgIC8vIEhhbmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZlbiBpZiB0
aGUgaW1hZ2UgZW5kZWQgdXAgYmVpbmcgZW1wdHkuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmgKaW5kZXggM2MwNTM1Yi4uYzk1OWNlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxl
LCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ3LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUg
aW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1NpemVBdmFpbGFibGUoKTsKIAorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgdmly
dHVhbCBJbWFnZUZyYW1lU2luayogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Cisj
ZWxzZQogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCk7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGRlY29kZShib29sIHNpemVPbmx5
ID0gZmFsc2UpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33341</attachid>
            <date>2009-07-23 09:48:09 -0700</date>
            <delta_ts>2009-08-13 13:57:49 -0700</delta_ts>
            <desc>make image decoders use ImageFrameSink</desc>
            <filename>image_decoder_use_imageframesink.patch</filename>
            <type>text/plain</type>
            <size>43111</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTQxZWY1Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBA
IC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKwllbnVtIE1h
dGNoVHlwZXsKKwkJRXhhY3QsCisJCVVwcGVyQm91bmQsCisJCUxvd2VyQm91bmQKKwl9OworfQor
Cit0ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IHN0YXRpYyBpbnQgZ2V0U2NhbGVkVmFsdWUoY29u
c3QgVmVjdG9yPGludD4mIHNjYWxlZFZhbHVlcywgaW50IG9yaWcsIGludCBzZWFyY2hTdGFydCkK
K3sKKwlpbnQgc2l6ZSA9IHNjYWxlZFZhbHVlcy5zaXplKCk7CisgICAgY29uc3QgaW50KiBkYXRh
U3RhcnQgPSBzY2FsZWRWYWx1ZXMuZGF0YSgpOworICAgIGNvbnN0IGludCogZGF0YUVuZCA9IGRh
dGFTdGFydCArIHNpemU7CisgICAgY29uc3QgaW50KiBwb3MgPSBzdGQ6Omxvd2VyX2JvdW5kKGRh
dGFTdGFydCArIHNlYXJjaFN0YXJ0LCBkYXRhRW5kLCBvcmlnKTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBFeGFjdDoKKyAgICAgICAgICAgIHJldHVybiBwb3MgIT0gZGF0YUVu
ZCAmJiAqcG9zID09IG9yaWcgPyBwb3MgLSBkYXRhU3RhcnQgOiAtMTsKKyAgICAgICAgY2FzZSBM
b3dlckJvdW5kOgorICAgICAgICAgICAgcmV0dXJuIHBvcyAhPSBkYXRhRW5kICYmICpwb3MgPT0g
b3JpZyA/IHBvcyAtIGRhdGFTdGFydCA6IHBvcyAtIGRhdGFTdGFydCAtIDE7CisgICAgICAgIGNh
c2UgVXBwZXJCb3VuZDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBwb3Mg
IT0gZGF0YUVuZCA/IHBvcyAtIGRhdGFTdGFydCA6IC0xOworICAgIH0KK30KKworaW50IEltYWdl
RGVjb2Rlcjo6dXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCit7
CisJcmV0dXJuIGdldFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3Jp
Z1gsIHNlYXJjaFN0YXJ0KTsKK30KKworaW50IEltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxl
ZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCit7CisJcmV0dXJuIGdldFNjYWxlZFZhbHVl
PExvd2VyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3JpZ1gsIHNlYXJjaFN0YXJ0KTsKK30KKwor
aW50IEltYWdlRGVjb2Rlcjo6c2NhbGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCkKK3sK
KwlyZXR1cm4gZ2V0U2NhbGVkVmFsdWU8RXhhY3Q+KG1fc2NhbGVkUm93cywgb3JpZ1ksIHNlYXJj
aFN0YXJ0KTsKK30KKwordm9pZCBJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vz
c2FyeSgpIAoreworCWludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOworCWludCBoZWlnaHQgPSBt
X3NpemUuaGVpZ2h0KCk7CisJaW50IG51bVBpeGVscyA9IGhlaWdodCAqIHdpZHRoOworICAgIGlm
IChtX21heE51bVBpeGVscyA8PSAwIHx8IG51bVBpeGVscyA8PSBtX21heE51bVBpeGVscykgewor
CQltX3NjYWxlZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisJbV9zY2FsZWQg
PSB0cnVlOworCWRvdWJsZSBzaHJpbmsgPSBzcXJ0KG1fbWF4TnVtUGl4ZWxzIC8gKGRvdWJsZSlu
dW1QaXhlbHMpOworCWRvdWJsZSB6b29tID0gMS4gL3NocmluazsKKwltX3NjYWxlZENvbHVtbnMu
cmVzZXJ2ZUNhcGFjaXR5KHdpZHRoICogc2hyaW5rICsgMC41KTsKKwlmb3IgKGludCBzY2FsZWRY
ID0gMDs7KSB7CisJCWludCB4ID0gc2NhbGVkWCAqIHpvb20gKyAwLjU7CisJCWlmICh4IDwgd2lk
dGgpIHsKKwkJCW1fc2NhbGVkQ29sdW1ucy5hcHBlbmQoeCk7CisJCQkrK3NjYWxlZFg7CisJCX0g
ZWxzZQorCQkJYnJlYWs7CisJfQorCW1fc2NhbGVkUm93cy5yZXNlcnZlQ2FwYWNpdHkoaGVpZ2h0
ICogc2hyaW5rICsgMC41KTsKKwlmb3IgKGludCBzY2FsZWRZID0gMDs7KSB7CisJCWludCB5ID0g
c2NhbGVkWSAqIHpvb20gKyAwLjU7CisJCWlmICh5IDwgaGVpZ2h0KSB7CisJCQltX3NjYWxlZFJv
d3MuYXBwZW5kKHkpOworCQkJKytzY2FsZWRZOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KK30K
KworfQorCisjZW5kaWYgLy8gVVNFKElNQUdFRlJBTUVTSU5LKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggOWMyYTlkNy4uNWQ2NGRkMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2
ICszNCw5IEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykK
KyNpbmNsdWRlICJJbWFnZUZyYW1lU2luay5oIgorI2VuZGlmCiAKICNpZiBQTEFURk9STShTS0lB
KQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgpAQCAtNDEsNiArNDUsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIC8vIFRoZSBS
R0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBS
R0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwKICAgICAvLyBkZWNvZGVycyB3
cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBm
b3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBidWZmZXIuCiAgICAgY2xhc3MgUkdCQTMy
QnVmZmVyIHsKQEAgLTE3Niw2ICsxODEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGlu
aXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KICAgICB9OworI2VuZGlmIC8vICFVU0UoSU1BR0VG
UkFNRVNJTkspCiAKICAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBi
YXNlIGNsYXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQgZGVjb2RlcnMKICAgICAvLyAoZS5n
LiwgR0lGLCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNv
ZGUgaW50byBSR0JBMzIgZm9ybWF0CkBAIC0xODUsMTYgKzE5MSwzNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIEltYWdlRGVjb2RlcigpCiAgICAgICAgICAgICA6IG1fZmFpbGVkKGZh
bHNlKQogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCisjaWYgVVNFKElNQUdF
RlJBTUVTSU5LKQorICAgICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAg
ICAgICAgICAgLCBtX21heE51bVBpeGVscygtMSkKKyAgICAgICAgICAgICwgbV9zY2FsZWQoZmFs
c2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB+SW1h
Z2VEZWNvZGVyKCkge30KKyAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkKKyAgICAgICAg
eworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgICAgIGZvciAoVmVjdG9yPEltYWdl
RnJhbWVTaW5rKj46Oml0ZXJhdG9yIGkgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKTsgaSA8
IG1fZnJhbWVCdWZmZXJDYWNoZS5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgIEltYWdlRnJh
bWVTaW5rOjpkZWxldGVJbnN0YW5jZSgqaSk7CisjZW5kaWYKKyAgICAgICAgfQogCiAgICAgICAg
IC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFu
IHVuZGVjb2RlZCBpbWFnZSBvZiB0aGlzIHR5cGUuCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQor
ICAgICAgICBib29sIGlzQWxsRGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERh
dGFSZWNlaXZlZDsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Rh
dGEgPSBkYXRhOworICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNl
aXZlZDsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIg
cGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKSB7IG1fZGF0YSA9IGRhdGE7IH0KKyNlbmRpZgogCiAgICAgICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LiBU
aGlzIGRlZmF1bHQKICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRydWUg
aWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0IGFuZCB3ZSBoYXZlIG5vdApAQCAtMjM2LDEwICsyNjIs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0
aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFs
IGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQog
CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5r
KiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSA9IDA7CisgICAgICAgIHZvaWQgc2V0
TWF4TnVtUGl4ZWxzKGludCBtKSB7IG1fbWF4TnVtUGl4ZWxzID0gbTsgfQorICAgICAgICBTaGFy
ZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KKyNlbHNlCiAgICAgICAg
IC8vIENhbGxlZCB0byBvYnRhaW4gdGhlIFJHQkEzMkJ1ZmZlciBmdWxsIG9mIGRlY29kZWQgZGF0
YSBmb3IgcmVuZGVyaW5nLiAgVGhlCiAgICAgICAgIC8vIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVj
b2RlIGFzIG11Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUgaGFuZGluZwogICAgICAg
ICAvLyBiYWNrIHRoZSBidWZmZXIuCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSA9IDA7CisjZW5kaWYKIAogICAgICAgICAvLyBX
aGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQgZXZlbiBzdXBwb3J0cyBh
bHBoYSB0cmFuc3BhcmVuY3kuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMjU3LDEwICsyODksMjUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAg
ICAgICBpbnQgbV9tYXhOdW1QaXhlbHM7CisgICAgICAgIFZlY3RvcjxJbWFnZUZyYW1lU2luayo+
IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRDb2x1bW5z
OworICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZFJvd3M7CisgICAgICAgIGJvb2wgbV9zY2Fs
ZWQ7CisgICAgICAgIGJvb2wgbV9pc0FsbERhdGFSZWNlaXZlZDsKKyAgICAgICAgdm9pZCBwcmVw
YXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaW50IHVwcGVyQm91bmRTY2FsZWRY
KGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0ID0gMCk7CisgICAgICAgIGludCBsb3dlckJvdW5k
U2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCA9IDApOworICAgICAgICBpbnQgc2Nh
bGVkWShpbnQgb3JpZ1ksIGludCBzZWFyY2hTdGFydCA9IDApOworI2Vsc2UKICAgICAgICAgVmVj
dG9yPFJHQkEzMkJ1ZmZlcj4gbV9mcmFtZUJ1ZmZlckNhY2hlOworI2VuZGlmCiAgICAgICAgIGJv
b2wgbV9mYWlsZWQ7CiAKKyNpZiAhVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIHByaXZhdGU6Cisj
ZW5kaWYKICAgICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhl
IGltYWdlIGFzICJ3aWR0aCAqIGhlaWdodCAqIDQiCiAgICAgICAgIC8vIGFuZCByZXR1cm4gaXQg
YXMgYSAoc2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KICAgICAgICAgc3RhdGljIGJvb2wg
aXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAK
aW5kZXggMWM2YjYyZC4uNjczZjQ2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNSw5IEBAIHB1Ymxp
YzoKICAgICBHSUZJbWFnZURlY29kZXJQcml2YXRlKEdJRkltYWdlRGVjb2RlciogZGVjb2RlciA9
IDApCiAgICAgICAgIDogbV9yZWFkZXIoZGVjb2RlcikKICAgICAgICAgLCBtX3JlYWRPZmZzZXQo
MCkKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgICwgbV9qb2JDb21wbGV0ZShmYWxz
ZSkKKyNlbmRpZgogICAgIHsKICAgICB9CiAKQEAgLTQyLDYgKzQ2LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9yZWFkZXIuY2xvc2UoKTsKICAgICB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTksp
CisgICAgdm9pZCBzZXRDb21wbGV0ZSgpIHsgbV9qb2JDb21wbGV0ZSA9IHRydWU7IH0KKyNlbmRp
ZgorCiAgICAgYm9vbCBkZWNvZGUoU2hhcmVkQnVmZmVyKiBkYXRhLCAKICAgICAgICAgICAgICAg
ICBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5ID0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZG
dWxsUXVlcnksCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhbHRGcmFtZSA9IC0xKQpA
QCAtODEsMTggKzg5LDI4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR0lGSW1hZ2VSZWFkZXIg
bV9yZWFkZXI7CiAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OworI2lmIFVTRShJTUFHRUZSQU1F
U0lOSykKKyAgICBib29sIG1fam9iQ29tcGxldGU7CisjZW5kaWYKIH07CiAKIEdJRkltYWdlRGVj
b2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKCkKICAgICA6IG1fZnJhbWVDb3VudFZhbGlkKHRydWUpCiAg
ICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTG9vcE9uY2UpCiAgICAgLCBtX3JlYWRl
cigwKQorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAsIG1fY3VycmVudFJlYWRlcigwKQor
ICAgICwgbV9zZWNvbmRhcnlSZWFkZXIoMCkKKyNlbmRpZgogewogfQogCiBHSUZJbWFnZURlY29k
ZXI6On5HSUZJbWFnZURlY29kZXIoKQogewogICAgIGRlbGV0ZSBtX3JlYWRlcjsKKyNpZiBVU0Uo
SU1BR0VGUkFNRVNJTkspCisgICAgZGVsZXRlIG1fc2Vjb25kYXJ5UmVhZGVyOworI2VuZGlmCiB9
CiAKIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgpAQCAtMTA4LDggKzEyNiwxMyBAQCB2
b2lkIEdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQogICAgIG1fZnJhbWVDb3VudFZhbGlkID0gZmFsc2U7CiAKICAgICAvLyBD
cmVhdGUgdGhlIEdJRiByZWFkZXIuCi0gICAgaWYgKCFtX3JlYWRlciAmJiAhbV9mYWlsZWQpCisg
ICAgaWYgKCFtX3JlYWRlciAmJiAhbV9mYWlsZWQpIHsKICAgICAgICAgbV9yZWFkZXIgPSBuZXcg
R0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSh0aGlzKTsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisg
ICAgICAgIG1fc2Vjb25kYXJ5UmVhZGVyID0gbmV3IEdJRkltYWdlRGVjb2RlclByaXZhdGUodGhp
cyk7CisgICAgICAgIG1fY3VycmVudFJlYWRlciA9IG1fcmVhZGVyOworI2VuZGlmCisgICAgfQog
fQogCiAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNv
ZGVkIHlldC4KQEAgLTEyOCw2ICsxNTEsMjAgQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b3VudCgpCiAgICAgLy8gSWYgdGhlIGRlY29kZXIgaGFkIGFuIGVhcmxpZXIgZXJyb3IsIHdlIHdp
bGwganVzdCByZXR1cm4gd2hhdCB3ZSBoYWQgZGVjb2RlZAogICAgIC8vIHNvIGZhci4KICAgICBp
ZiAoIW1fZnJhbWVDb3VudFZhbGlkKSB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAg
ICBtX2N1cnJlbnRSZWFkZXIgPSBtX3NlY29uZGFyeVJlYWRlcjsKKyAgICAgICAgbV9zZWNvbmRh
cnlSZWFkZXItPmRlY29kZShtX2RhdGEuZ2V0KCksIEdJRkZyYW1lQ291bnRRdWVyeSk7CisgICAg
ICAgIG1fY3VycmVudFJlYWRlciA9IG1fcmVhZGVyOworCisgICAgICAgIHVuc2lnbmVkIG5ld0Nv
dW50ID0gbV9zZWNvbmRhcnlSZWFkZXItPmZyYW1lQ291bnQoKTsKKyAgICAgICAgdW5zaWduZWQg
b2xkQ291bnQgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOworICAgICAgICBpZiAobmV3Q291
bnQgPiBvbGRDb3VudCkgeworICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2VydmVD
YXBhY2l0eShuZXdDb3VudCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRDb3Vu
dDsgaSA8IG5ld0NvdW50OyArK2kpCisgICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
LmFwcGVuZChJbWFnZUZyYW1lU2luazo6Y3JlYXRlSW5zdGFuY2UoZmFsc2UpKTsKKyAgICAgICAg
fQorICAgICAgICBtX2ZyYW1lQ291bnRWYWxpZCA9IHRydWU7CisjZWxzZQogICAgICAgICAvLyBG
SVhNRTogU2Nhbm5pbmcgYWxsIHRoZSBkYXRhIGhhcyBPKG5eMikgYmVoYXZpb3IgaWYgdGhlIGRh
dGEgd2VyZSB0byBjb21lIGluIHJlYWxseQogICAgICAgICAvLyBzbG93bHkuICBNaWdodCBiZSBp
bnRlcmVzdGluZyB0byB0cnkgdG8gY2xvbmUgb3VyIGV4aXN0aW5nIHJlYWQgc2Vzc2lvbiB0byBw
cmVzZXJ2ZQogICAgICAgICAvLyBzdGF0ZSwgYnV0IGZvciBub3cgd2UganVzdCBjcmF3bCBhbGwg
dGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQKQEAgLTEzOSw2
ICsxNzYsNyBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKICAgICAgICAgcmVh
ZGVyLmRlY29kZShtX2RhdGEuZ2V0KCksIEdJRkZyYW1lQ291bnRRdWVyeSk7CiAgICAgICAgIG1f
ZnJhbWVDb3VudFZhbGlkID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6
ZShyZWFkZXIuZnJhbWVDb3VudCgpKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHJldHVybiBtX2Zy
YW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwpAQCAtMTQ3LDYgKzE4NSwxOSBAQCBpbnQgR0lGSW1hZ2VE
ZWNvZGVyOjpmcmFtZUNvdW50KCkKIC8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVy
Zm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCiBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0
aW9uQ291bnQoKSBjb25zdAogeworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBpZiAobV9y
ZWFkZXIpIHsKKyAgICAgICAgY29uc3QgaW50IHJlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5y
ZXBldGl0aW9uQ291bnQoKTsKKyAgICAgICAgaWYgKHJlcGV0aXRpb25Db3VudCAhPSBjTG9vcENv
dW50Tm90U2VlbikKKyAgICAgICAgICAgIHJldHVybiByZXBldGl0aW9uQ291bnQ7CisgICAgfQor
ICAgIGlmIChtX3NlY29uZGFyeVJlYWRlcikgeworICAgICAgICBjb25zdCBpbnQgcmVwZXRpdGlv
bkNvdW50ID0gbV9zZWNvbmRhcnlSZWFkZXItPnJlcGV0aXRpb25Db3VudCgpOworICAgICAgICBp
ZiAocmVwZXRpdGlvbkNvdW50ICE9IGNMb29wQ291bnROb3RTZWVuKQorICAgICAgICAgICAgcmV0
dXJuIHJlcGV0aXRpb25Db3VudDsKKyAgICB9CisgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25j
ZTsKKyNlbHNlCiAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYXJyaXZlIGF0IGFueSBwb2ludCBpbiB0
aGUgaW1hZ2UgZGF0YSBzdHJlYW0uICBNb3N0IEdJRnMKICAgICAvLyBpbiB0aGUgd2lsZCBkZWNs
YXJlIGl0IG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgc28gaXQgdXN1YWxseSBpcwog
ICAgIC8vIHNldCBieSB0aGUgdGltZSB3ZSd2ZSBkZWNvZGVkIHRoZSBzaXplLCBidXQgKGRlcGVu
ZGluZyBvbiB0aGUgR0lGIGFuZCB0aGUKQEAgLTE2Niw4ICsyMTcsMjIgQEAgaW50IEdJRkltYWdl
RGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAgICAgICAgIG1fcmVwZXRpdGlv
bkNvdW50ID0gcmVwZXRpdGlvbkNvdW50OwogICAgIH0KICAgICByZXR1cm4gbV9yZXBldGl0aW9u
Q291bnQ7CisjZW5kaWYKIH0KIAorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKK0ltYWdlRnJhbWVT
aW5rKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7
CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEltYWdlRnJhbWVTaW5rKiBmcmFtZSA9IG1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF07CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zdGF0dXMoKSAh
PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCisgICAgICAgIC8vIERl
Y29kZSB0aGlzIGZyYW1lLgorICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCsxKTsK
KyAgICByZXR1cm4gZnJhbWU7Cit9CisjZWxzZQogUkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4ID49
IHN0YXRpY19jYXN0PHNpemVfdD4oZnJhbWVDb3VudCgpKSkKQEAgLTE3OCw5ICsyNDMsMTIgQEAg
UkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgICAgIGRlY29kZShHSUZGdWxsUXVlcnksIGluZGV4ICsgMSk7IC8vIERlY29k
ZSB0aGlzIGZyYW1lLgogICAgIHJldHVybiAmZnJhbWU7CiB9CisjZW5kaWYKIAogdm9pZCBHSUZJ
bWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFt
ZSkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisjZWxzZQogICAgIC8vIEluIHNvbWUgY2Fz
ZXMsIGxpa2UgaWYgdGhlIGRlY29kZXIgd2FzIGRlc3Ryb3llZCB3aGlsZSBhbmltYXRpbmcsIHdl
CiAgICAgLy8gY2FuIGJlIGFza2VkIHRvIGNsZWFyIG1vcmUgZnJhbWVzIHRoYW4gd2UgY3VycmVu
dGx5IGhhdmUuCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC0yMjcs
NiArMjk1LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShz
aXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKICAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVFbXB0eSkKICAgICAgICAgICAgIGotPmNsZWFyKCk7CiAgICAgfQorI2Vu
ZGlmCiB9CiAKIC8vIEZlZWQgZGF0YSB0byB0aGUgR0lGIHJlYWRlci4KQEAgLTI0NiwxNiArMzE1
LDg0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXVlcnksIHVuc2ln
bmVkIGhhbHRBdEZyYW1lKQogLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCiBib29s
IEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KQogeworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgIHJldHVybiBzZXRTaXplKHdpZHRoLCBoZWln
aHQpOwogfQogCiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQg
Ynl0ZXNMZWZ0KQogeworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBtX2N1cnJlbnRSZWFk
ZXItPnNldFJlYWRPZmZzZXQobV9kYXRhLT5zaXplKCkgLSBieXRlc0xlZnQpOworI2Vsc2UKICAg
ICBtX3JlYWRlci0+c2V0UmVhZE9mZnNldChtX2RhdGEtPnNpemUoKSAtIGJ5dGVzTGVmdCk7Cisj
ZW5kaWYKIH0KIAogYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZUluZGV4KQogeworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAvLyBJbml0aWFs
aXplIHRoZSBmcmFtZSByZWN0IGluIG91ciBidWZmZXIuCisgICAgSW50UmVjdCBmcmFtZVJlY3Qo
bV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCksCisgICAg
ICAgIG1fcmVhZGVyLT5mcmFtZVdpZHRoKCksIG1fcmVhZGVyLT5mcmFtZUhlaWdodCgpKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgdGhlIGJv
dHRvbS1yaWdodCBvZiB0aGUgYnVmZmVyLgorICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IG1f
c2l6ZS53aWR0aCgpKQorICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgobV9zaXplLndpZHRoKCkg
LSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCkpOworICAgIGlmIChmcmFtZVJlY3QuYm90dG9tKCkg
PiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQobV9zaXplLmhl
aWdodCgpIC0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKTsKKworICAgIEltYWdlRnJhbWVTaW5r
JiBidWZmZXIgPSAqbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworICAgIGJ1ZmZlci5z
ZXRSZWN0KGZyYW1lUmVjdCk7CisKKyAgICBib29sIGlzU3ViUmVjdCA9IChmcmFtZVJlY3QueCgp
ID4gMCB8fCBmcmFtZVJlY3QueSgpID4gMCB8fAorICAgICAgICBmcmFtZVJlY3Qud2lkdGgoKSA8
IG1fc2l6ZS53aWR0aCgpIHx8CisgICAgICAgIGZyYW1lUmVjdC5oZWlnaHQoKSA8IG1fc2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhlIGNv
cnJlY3Qgd2lkdGgvaGVpZ2h0IGFuZCB0aGVuCisgICAgLy8gaW5pdGlhbGl6ZSBwb3J0aW9ucyBv
ZiBpdCBpZiBuZWVkZWQuCisgICAgaW50IHNocnVua1dpZHRoID0gbV9zY2FsZWQgPyBtX3NjYWxl
ZENvbHVtbnMuc2l6ZSgpIDogbV9zaXplLndpZHRoKCk7CisgICAgaW50IHNocnVua0hlaWdodCA9
IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6IG1fc2l6ZS5oZWlnaHQoKTsKKworICAg
IGlmICghYnVmZmVyLnNldFNpemUoc2hydW5rV2lkdGgsIHNocnVua0hlaWdodCwgZmFsc2UpKSB7
CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICB2b2lkKiBieXRlcyA9IGJ1ZmZlci5ieXRlcygpOworICAgIGludCB0b3RhbEJ5dGVzID0g
YnVmZmVyLnRvdGFsQnl0ZXMoKTsKKworICAgIEltYWdlRnJhbWVTaW5rKiBwcmV2aW91c0J1ZmZl
ciA9IChmcmFtZUluZGV4ID4gMCkgPyBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleC0xXSA6
IDA7CisgICAgaWYgKHByZXZpb3VzQnVmZmVyKSB7CisgICAgICAgIHdoaWxlIChmcmFtZUluZGV4
ID4gMCAmJiBwcmV2aW91c0J1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JBMzJCdWZmZXI6
OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykKKyAgICAgICAgICAgIHByZXZpb3VzQnVmZmVyID0g
bV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CisgICAgfQorCisgICAgLy8gV2hpY2gg
YnVmZmVyIHRvIGNvcHkgZnJvbT8KKyAgICBJbWFnZUZyYW1lU2luayogY29weUZyb207CisgICAg
aWYgKCFwcmV2aW91c0J1ZmZlcikKKyAgICAgICAgY29weUZyb20gPSAwOworICAgIGVsc2UgaWYg
KHByZXZpb3VzQnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9z
ZU5vdFNwZWNpZmllZCB8fCBwcmV2aW91c0J1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JB
MzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSB7CisgICAgICAgIGNvcHlGcm9tID0gcHJldmlvdXNCdWZm
ZXI7CisgICAgICAgIGJ1ZmZlci5zZXRDb21wb3NpdGVkV2l0aFByZXZpb3VzRnJhbWUoKTsKKyAg
ICB9IGVsc2UgaWYgKGlzU3ViUmVjdCkKKyAgICAgICAgY29weUZyb20gPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07CisgICAgZWxzZQorICAgICAgICBjb3B5RnJvbSA9IDA7CisKKyAgICBpZiAoY29w
eUZyb20pIHsKKyAgICAgICAgbWVtY3B5KGJ5dGVzLCBjb3B5RnJvbS0+Ynl0ZXMoKSwgdG90YWxC
eXRlcyk7CisgICAgICAgIGJ1ZmZlci5lbnN1cmVIZWlnaHQobV9zaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgaWYgKGNvcHlGcm9tLT51c2VzVHJhbnNwYXJlbnRDb2xvcigpKQorICAgICAgICAgICAg
YnVmZmVyLnNldFRyYW5zcGFyZW50Q29sb3IoY29weUZyb20tPnRyYW5zcGFyZW50Q29sb3IoKSk7
CisKKyAgICAgICAgaWYgKGNvcHlGcm9tLT5oYXNBbHBoYSgpKQorICAgICAgICAgICAgYnVmZmVy
LnNldEhhc0FscGhhKHRydWUpOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRv
IGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KKyAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZl
cjo6RnJhbWVQYXJ0aWFsKTsKKyNlbHNlCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVj
dCBpbiBvdXIgYnVmZmVyLgogICAgIEludFJlY3QgZnJhbWVSZWN0KG1fcmVhZGVyLT5mcmFtZVhP
ZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICAg
IG1fcmVhZGVyLT5mcmFtZVdpZHRoKCksIG1fcmVhZGVyLT5mcmFtZUhlaWdodCgpKTsKQEAgLTMy
NSw2ICs0NjIsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2ln
bmVkIGZyYW1lSW5kZXgpCiAKICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFs
bHkgY29tcGxldGUuCiAgICAgYnVmZmVyLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBh
cnRpYWwpOworI2VuZGlmCiAKICAgICAvLyBSZXNldCB0aGUgYWxwaGEgcGl4ZWwgdHJhY2tlciBm
b3IgdGhpcyBmcmFtZS4KICAgICBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9IGZhbHNlOwpAQCAt
MzM4LDYgKzQ3NiwxMjAgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVu
c2lnbmVkIGZyYW1lSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgcmVwZWF0Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogeworI2lmIFVTRShJTUFHRUZSQU1FU0lO
SykKKyAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XSB8fCBtX2ZhaWxlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIEltYWdlRnJhbWVTaW5rJiBidWZmZXIgPSAqbV9mcmFtZUJ1
ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOworCisgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JB
MzJCdWZmZXI6OkZyYW1lRW1wdHkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSB8fCAh
YnVmZmVyLmlzQnVmZmVyUmVhZHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJvd0J1
ZmZlciA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgc291cmNlV2lkdGggPSByb3dF
bmQgLSByb3dCdWZmZXI7CisgICAgaWYgKHNvdXJjZVdpZHRoIDw9IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIGludCBkZXN0WSA9IG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSArIHJvd051bWJl
cjsKKyAgICBpbnQgZGVzdFggPSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7CisgICAgaW50IGRl
c3RFbmRYID0gZGVzdFggKyBzb3VyY2VXaWR0aDsKKyAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAg
ICAgZGVzdFkgPSBzY2FsZWRZKGRlc3RZKTsKKyAgICAgICAgaWYgKGRlc3RZIDwgMCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZGVzdFggPSB1cHBlckJvdW5kU2NhbGVkWChkZXN0WCk7
CisgICAgICAgIGlmIChkZXN0WCA8IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRl
c3RFbmRYID0gbG93ZXJCb3VuZFNjYWxlZFgoZGVzdEVuZFggLSAxLCBkZXN0WCArIDEpOworICAg
ICAgICBpZiAoZGVzdEVuZFggPCBkZXN0WCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
KytkZXN0RW5kWDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb2xvck1hcFNpemU7CisgICAgdW5z
aWduZWQgY2hhciogY29sb3JNYXA7CisgICAgbV9yZWFkZXItPmdldENvbG9yTWFwKGNvbG9yTWFw
LCBjb2xvck1hcFNpemUpOworICAgIGlmICghY29sb3JNYXApCisgICAgICAgIHJldHVybjsKKwor
ICAgIGJvb2wgaGFzQWxwaGEgPSBtX3JlYWRlci0+aXNUcmFuc3BhcmVudCgpOyAKKyAgICBib29s
IHNhd0FscGhhID0gYnVmZmVyLnVzZXNUcmFuc3BhcmVudENvbG9yKCkgfHwgYnVmZmVyLmhhc0Fs
cGhhKCk7CisgICAgdW5zaWduZWQgY2hhciB0cmFuc3BhcmVudENvbG9yID0gbV9yZWFkZXItPnRy
YW5zcGFyZW50UGl4ZWwoKTsKKworICAgIHVuc2lnbmVkKiBkc3RFbmQgPSAodW5zaWduZWQqKWJ1
ZmZlci5ieXRlcygpICsgZGVzdFkgKiBidWZmZXIuYnVmZmVyV2lkdGgoKTsKKyAgICB1bnNpZ25l
ZCogZHN0ID0gZHN0RW5kICsgZGVzdFg7CisgICAgZHN0RW5kICs9IGRlc3RFbmRYOworICAgIHVu
c2lnbmVkKiBjdXJyRHN0ID0gZHN0OworICAgIHVuc2lnbmVkIGNoYXIqIGN1cnJlbnRSb3dCeXRl
ID0gcm93QnVmZmVyOworCisgICAgd2hpbGUgKGN1cnJEc3QgPCBkc3RFbmQpIHsKKyAgICAgICAg
dW5zaWduZWQgY2hhciBwaXhlbDsKKyAgICAgICAgaWYgKG1fc2NhbGVkKSB7CisgICAgICAgICAg
ICBpbnQgc291cmNlWCA9IG1fc2NhbGVkQ29sdW1uc1tjdXJyRHN0IC0gZHN0XSAtIG1fcmVhZGVy
LT5mcmFtZVlPZmZzZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChzb3VyY2VYID49IDAgJiYgc291
cmNlWCA8IHNvdXJjZVdpZHRoKTsKKyAgICAgICAgICAgIHBpeGVsID0gcm93QnVmZmVyW3NvdXJj
ZVhdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3dCeXRlID09
IHJvd0VuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHBpeGVsID0gKmN1
cnJlbnRSb3dCeXRlKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGl4ZWwgPj0gY29sb3JN
YXBTaXplKQorICAgICAgICAgICAgcGl4ZWwgPSB0cmFuc3BhcmVudENvbG9yOworICAgICAgICBi
b29sIHRyYW5zcGFyZW50ID0gaGFzQWxwaGEgJiYgcGl4ZWwgPT0gdHJhbnNwYXJlbnRDb2xvcjsK
KyAgICAgICAgaWYgKHRyYW5zcGFyZW50ICYmIGJ1ZmZlci5jb21wb3NpdGVkV2l0aFByZXZpb3Vz
RnJhbWUoKSkgeworICAgICAgICAgICAgLy8gTGVhdmUgdGhlIG9yaWdpbmFsIGNvbG9yIGluIHBy
ZXZpb3VzIGZyYW1lCisgICAgICAgIH0gZWxzZSBpZiAocGl4ZWwgPCBjb2xvck1hcFNpemUpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGNvbG9yID0gY29sb3JNYXAgKyBwaXhlbCAqIDM7
CisgICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAqY29sb3IrKzsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGdyZWVuID0gKmNvbG9yKys7CisgICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKmNvbG9y
OworICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQkEoKmN1cnJEc3QsIHJlZCwgZ3Jl
ZW4sIGJsdWUsIHRyYW5zcGFyZW50ID8gMCA6IDI1NSk7CisKKyAgICAgICAgICAgIGlmICh0cmFu
c3BhcmVudCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJIGFzc3VtZSB0aGF0IHRoZSB0
cmFuc3BhcmVudCBjb2xvciBuZXZlciBjaGFuZ2VzIGR1cmluZyBkZWNvZGluZyBhIHNpbmdsZSBm
cmFtZS4KKyAgICAgICAgICAgICAgICBpZiAoIXNhd0FscGhhKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNhd0FscGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKHRydWUpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0cmFuc3BhcmVu
dENvbG9yOworICAgICAgICAgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYodHJh
bnNwYXJlbnRDb2xvciwgcmVkLCBncmVlbiwgYmx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJ1
ZmZlci5zZXRUcmFuc3BhcmVudENvbG9yKHRyYW5zcGFyZW50Q29sb3IpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyLnVzZXNUcmFuc3BhcmVudENvbG9y
KCkpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBwaXhlbDE2OworICAgICAgICAg
ICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0IxNihwaXhlbDE2LCByZWQsIGdyZWVuLCBibHVl
KTsKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWwxNiA9PSBidWZmZXIudHJhbnNwYXJlbnRDb2xv
cigpKQorICAgICAgICAgICAgICAgICAgICBidWZmZXIuY2xlYXJUcmFuc3BhcmVudENvbG9yKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyB0cmFuc3Bh
cmVudENvbG9yIG11c3QgYmUgaW52YWxpZCB0b28KKyAgICAgICAgICAgIEltYWdlRnJhbWVTaW5r
OjpzZXRSR0JBKCpjdXJyRHN0LCAyNTUsIDI1NSwgMjU1LCB0cmFuc3BhcmVudCA/IDAgOiAyNTUp
OworICAgICAgICAgICAgaWYgKGJ1ZmZlci51c2VzVHJhbnNwYXJlbnRDb2xvcigpKQorICAgICAg
ICAgICAgICAgIGJ1ZmZlci5jbGVhclRyYW5zcGFyZW50Q29sb3IoKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCFzYXdBbHBoYSkgeworICAgICAgICAgICAgICAgIHNhd0FscGhhID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgY3VyckRzdCsrOworICAgIH0KKworICAgIGlmIChyZXBlYXRDb3Vu
dCA+IDEpIHsKKyAgICAgICAgLy8gQ29weSB0aGUgcm93IHxyZXBlYXRDb3VudHwtMSB0aW1lcy4K
KyAgICAgICAgdW5zaWduZWQgbnVtID0gY3VyckRzdCAtIGRzdDsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CisgICAgICAgIHVuc2lnbmVkIHdpZHRoID0g
YnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgIHVuc2lnbmVkKiBlbmQgPSAodW5zaWduZWQq
KSgodW5zaWduZWQgY2hhciopYnVmZmVyLmJ5dGVzKCkgKyBidWZmZXIudG90YWxCeXRlcygpKTsK
KyAgICAgICAgY3VyckRzdCA9IGRzdCArIHdpZHRoOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGN1cnJEc3QgKyBu
dW0gPiBlbmQpIC8vIFByb3RlY3QgYWdhaW5zdCBhIGJ1ZmZlciBvdmVycnVuIGZyb20gYSBib2d1
cyByZXBlYXRDb3VudC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1lbWNw
eShjdXJyRHN0LCBkc3QsIHNpemUpOworICAgICAgICAgICAgY3VyckRzdCArPSB3aWR0aDsKKyAg
ICAgICAgfQorICAgIH0KKyNlbHNlCiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3JkaW5h
dGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8vIG9y
aWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCiAgICAgLy8gKG1fcmVhZGVy
LT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKS4KQEAgLTM4NiwxMCAr
NjM4LDIyIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBm
cmFtZUluZGV4LAogICAgIC8vIFRlbGwgdGhlIGZyYW1lIHRvIGNvcHkgdGhlIHJvdyBkYXRhIGlm
IG5lZWQgYmUuCiAgICAgaWYgKHJlcGVhdENvdW50ID4gMSkKICAgICAgICAgYnVmZmVyLmNvcHlS
b3dOVGltZXMobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCB4LCB5LCBzdGQ6Om1pbih5ICsgc3Rh
dGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkpOworI2VuZGlmCiB9
CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5k
ZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1l
dGhvZCBkaXNwb3NhbE1ldGhvZCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgSW1h
Z2VGcmFtZVNpbmsqIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKyAg
ICBpZiAoYnVmZmVyKSB7CisgICAgICAgIGlmIChidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBidWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZy
YW1lQ29tcGxldGUpOworICAgICAgICBidWZmZXItPnNldER1cmF0aW9uKGZyYW1lRHVyYXRpb24p
OworICAgICAgICBidWZmZXItPnNldERpc3Bvc2FsTWV0aG9kKGRpc3Bvc2FsTWV0aG9kKTsKKyAg
ICAgICAgYnVmZmVyLT5lbnN1cmVIZWlnaHQobV9zaXplLmhlaWdodCgpKTsKKyAgICB9CisjZWxz
ZQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNvbWUgR0lGcyBp
bnNlcnQgZG8tbm90aGluZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciBy
ZWFjaCBoYXZlRGVjb2RlZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgUkdCQTMyQnVm
ZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CkBAIC00MzIsMTQg
KzY5NiwyNSBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBm
cmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLAogICAgICAgICAgICAgICAgIGJ1ZmZl
ci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIH0KIAogdm9p
ZCBHSUZJbWFnZURlY29kZXI6OmdpZkNvbXBsZXRlKCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJ
TkspCisgICAgbV9jdXJyZW50UmVhZGVyLT5zZXRDb21wbGV0ZSgpOworICAgIGlmIChtX3JlYWRl
ciA9PSBtX2N1cnJlbnRSZWFkZXIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fZnJh
bWVCdWZmZXJDYWNoZVtpXSkKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0t
PnNldENhbkZyZWVCdWZmZXIodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQogICAgIGlm
IChtX3JlYWRlcikKICAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+cmVwZXRp
dGlvbkNvdW50KCk7CiAgICAgZGVsZXRlIG1fcmVhZGVyOwogICAgIG1fcmVhZGVyID0gMDsKKyNl
bmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCmluZGV4IGNkMmEwYmMu
LjYxYTFmODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5p
bWF0aW9uIGxvb3AuCiAgICAgICAgIHZpcnR1YWwgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0
OwogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJs
ZVdpdGhvdXREZWNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsgfQorICAg
ICAgICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5rKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KTsKKyNlbHNlCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KTsKKyNlbmRpZgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpOwogCkBAIC04MSw2ICs4
NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50QnVmZmVy
U2F3QWxwaGE7CiAgICAgICAgIG11dGFibGUgaW50IG1fcmVwZXRpdGlvbkNvdW50OwogICAgICAg
ICBHSUZJbWFnZURlY29kZXJQcml2YXRlKiBtX3JlYWRlcjsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJ
TkspCisgICAgICAgIG11dGFibGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9zZWNvbmRhcnlS
ZWFkZXI7CisgICAgICAgIG11dGFibGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9jdXJyZW50
UmVhZGVyOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29k
ZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwCmluZGV4IDkzNjdiOGUuLmYwMWQwNjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAg
LTg5LDYgKzg5LDkgQEAgcHVibGljOgogICAgICAgICAsIG1fYnl0ZXNUb1NraXAoMCkKICAgICAg
ICAgLCBtX3N0YXRlKEpQRUdfSEVBREVSKQogICAgICAgICAsIG1fc2FtcGxlcygwKQorI2lmIFVT
RShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgLCBtX2pvYkNvbXBsZXRlKGZhbHNlKQorI2VuZGlm
CiAgICAgewogICAgICAgICBtZW1zZXQoJm1faW5mbywgMCwgc2l6ZW9mKGpwZWdfZGVjb21wcmVz
c19zdHJ1Y3QpKTsKICAKQEAgLTEzMSw2ICsxMzQsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faW5m
by5zcmMgPSAwOwogCiAgICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZtX2luZm8pOwor
I2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgbV9qb2JDb21wbGV0ZSA9IGZhbHNlOwor
I2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBza2lwQnl0ZXMobG9uZyBudW1fYnl0ZXMpIHsKQEAg
LTE0NSw2ICsxNTEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9ieXRlc1RvU2tpcCA9IDA7
CiAgICAgfQogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIHZvaWQgc2V0Q29tcGxldGUo
KSB7IG1fam9iQ29tcGxldGUgPSB0cnVlOyB9CisjZW5kaWYKKwogICAgIGJvb2wgZGVjb2RlKGNv
bnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBzaXplT25seSkgewogICAgICAgICBtX2RlY29k
aW5nU2l6ZU9ubHkgPSBzaXplT25seTsKICAgICAgICAgCkBAIC0zNTEsNiArMzYxLDkgQEAgcHJp
dmF0ZToKICAgICBqc3RhdGUgbV9zdGF0ZTsKIAogICAgIEpTQU1QQVJSQVkgbV9zYW1wbGVzOwor
I2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBib29sIG1fam9iQ29tcGxldGU7CisjZW5kaWYK
IH07CiAKIC8qIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlcnJvciBtZXRob2QgaW4gdGhlIElKRyBK
UEVHIGRlY29kZXIgY29kZS4gKi8KQEAgLTQxNyw2ICs0MzAsMjIgQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSgpOwogfQogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorSW1hZ2VGcmFtZVNp
bmsqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7
CisgICAgaWYgKGluZGV4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuYXBwZW5kKElt
YWdlRnJhbWVTaW5rOjpjcmVhdGVJbnN0YW5jZSh0cnVlKSk7CisKKyAgICBJbWFnZUZyYW1lU2lu
ayogZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYgKGZyYW1lICYmIGZyYW1l
LT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCisg
ICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1lLgorICAgICAgICBkZWNvZGUoKTsKKyAgICByZXR1
cm4gZnJhbWU7Cit9CisjZWxzZQogUkdCQTMyQnVmZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKQEAgLTQzMSw2
ICs0NjAsNyBAQCBSR0JBMzJCdWZmZXIqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpCiAgICAgICAgIGRlY29kZSgpOwogICAgIHJldHVybiAmZnJhbWU7
CiB9CisjZW5kaWYKIAogLy8gRmVlZCBkYXRhIHRvIHRoZSBKUEVHIHJlYWRlci4KIHZvaWQgSlBF
R0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCkBAIC00NDAsNyArNDcwLDEyIEBA
IHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCiAKICAgICBtX2Zh
aWxlZCA9ICFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKIAot
ICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSkpIHsKKyAgICBpZiAobV9mYWlsZWQKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAg
IHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAoIW1fZnJhbWVCdWZmZXJDYWNo
ZVswXSB8fCBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0tPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6
RnJhbWVDb21wbGV0ZSkpKSB7CisjZWxzZQorICAgICAgICB8fCAoIW1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKKyNlbmRpZgogICAgICAgICBkZWxldGUgbV9yZWFkZXI7
CiAgICAgICAgIG1fcmVhZGVyID0gMDsKICAgICB9CkBAIC00NDgsNiArNDgzLDczIEBAIHZvaWQg
SlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCiAKIGJvb2wgSlBFR0ltYWdl
RGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisg
ICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgfHwgIW1fZnJhbWVCdWZmZXJDYWNo
ZVswXSkgeworICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBSZXNpemUgdG8gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGlt
YWdlLgorICAgIEltYWdlRnJhbWVTaW5rKiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07
CisgICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7
CisgICAgICAgIGludCBzaHJ1bmtXaWR0aCA9IG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNp
emUoKSA6IG1fc2l6ZS53aWR0aCgpOworICAgICAgICBpbnQgc2hydW5rSGVpZ2h0ID0gbV9zY2Fs
ZWQgPyBtX3NjYWxlZFJvd3Muc2l6ZSgpIDogbV9zaXplLmhlaWdodCgpOworCisgICAgICAgIC8v
IExldCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUgY29ycmVjdCB3aWR0aC9oZWlnaHQu
CisgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNocnVua1dpZHRoLCBzaHJ1bmtIZWlnaHQs
IHRydWUpKSB7CisgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBi
ZSBwYXJ0aWFsbHkgY29tcGxldGUuCisgICAgICAgIGJ1ZmZlci0+c2V0U3RhdHVzKFJHQkEzMkJ1
ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKworICAgICAgICAvLyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBh
bHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KKyAgICAgICAgYnVmZmVyLT5zZXRSZWN0KElu
dFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworCisgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgYWxwaGEgKHRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgYnVm
ZmVyIGlzIGNvbnN0cnVjdGVkKS4KKyAgICB9CisKKyAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0
KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKKyAgICBKU0FNUEFSUkFZIHNhbXBsZXMgPSBtX3Jl
YWRlci0+c2FtcGxlcygpOworCisgICAgd2hpbGUgKGluZm8tPm91dHB1dF9zY2FubGluZSA8IGlu
Zm8tPm91dHB1dF9oZWlnaHQpIHsKKyAgICAgICAgaW50IHNvdXJjZVkgPSBpbmZvLT5vdXRwdXRf
c2NhbmxpbmU7CisgICAgICAgIGludCBzb3VyY2VSb3dzID0ganBlZ19yZWFkX3NjYW5saW5lcyhp
bmZvLCBzYW1wbGVzLCAxKTsKKyAgICAgICAgaWYgKHNvdXJjZVJvd3MgIT0gMSkgeworICAgICAg
ICAgICAgaWYgKHNvdXJjZVJvd3MgIT0gMCkKKyAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9zY2FsZWQpIHsKKyAgICAgICAgICAgIGludCBkZXN0WSA9IHNjYWxlZFkoc291cmNlWSk7Cisg
ICAgICAgICAgICBpZiAoZGVzdFkgPCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCogZHN0ID0gKHVuc2lnbmVkIHNob3J0KilidWZmZXIt
PmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci0+YnVmZmVyV2lkdGgoKTsKKyAgICAgICAgICAgIEpT
QU1QTEUgKmpCZWdpbiA9IHNhbXBsZXNbMF07CisgICAgICAgICAgICBpbnQgY29sdW1ucyA9IG1f
c2NhbGVkQ29sdW1ucy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNv
bHVtbnM7ICsreCkgeworICAgICAgICAgICAgICAgIEpTQU1QTEUgKmoxID0gakJlZ2luICsgbV9z
Y2FsZWRDb2x1bW5zW3hdICogMzsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSW1h
Z2VGcmFtZVNpbms6OnNldFJHQjE2KCpkc3QrKywgajFbMF0sIGoxWzFdLCBqMVsyXSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBidWZmZXItPmVuc3VyZUhlaWdodChkZXN0WSArIDEpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQqIGRzdCA9ICh1bnNp
Z25lZCBzaG9ydCopYnVmZmVyLT5ieXRlcygpICsgc291cmNlWSAqIGJ1ZmZlci0+YnVmZmVyV2lk
dGgoKTsKKyAgICAgICAgICAgIEpTQU1QTEUgKmoxID0gc2FtcGxlc1swXTsKKyAgICAgICAgICAg
IEpTQU1QTEUgKmpFbmQgPSBqMSArIGluZm8tPm91dHB1dF93aWR0aCArIGluZm8tPm91dHB1dF93
aWR0aCArIGluZm8tPm91dHB1dF93aWR0aDsKKyAgICAgICAgICAgIGZvciAoO2oxIDwgakVuZDsp
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCByID0gKmoxKys7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgZyA9ICpqMSsrOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGIgPSAqajErKzsK
KyAgICAgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdCsrLCByLCBnLCBi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlci0+ZW5zdXJlSGVpZ2h0KGluZm8t
Pm91dHB1dF9zY2FubGluZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cisj
ZWxzZQogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTQ4NCwxNiArNTg2LDIzIEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
b3V0cHV0U2NhbmxpbmVzKCkKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogfQog
CiB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmpwZWdDb21wbGV0ZSgpCiB7CisjaWYgVVNFKElNQUdF
RlJBTUVTSU5LKQorICAgIG1fcmVhZGVyLT5zZXRDb21wbGV0ZSgpOworICAgIGlmICghbV9mcmFt
ZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0pCisgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZVswXS0+c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZSk7CisjZWxzZQogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBIYW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVseSBzaXplZCBi
dWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdlIGVuZGVkIHVwIGJlaW5nIGVtcHR5LgogICAgIFJHQkEz
MkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyNlbmRpZgogfQogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuaAppbmRleCA1NmUwMDdkLi5mZmVkZDQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ3LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNp
emUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1NpemVBdmFpbGFibGUoKTsKIAorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAg
dmlydHVhbCBJbWFnZUZyYW1lU2luayogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7
CisjZWxzZQogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCk7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtNTcsNiArNjIsMjEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcygpOwog
ICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQor
ICAgICAgICBib29sIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAg
ICBpZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAgICAgIG1fZmFp
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSkgeworICAgICAgICAgICAgICAgIG1f
c2l6ZUF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXBhcmVTY2FsZURh
dGFJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyNl
bmRpZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlBFR0ltYWdlUmVhZGVyKiBtX3JlYWRlcjsK
ICAgICB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggZDE0MzMzZi4uMzZlZGMwYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
Y3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
CiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMjAwMSBtb3ppbGxhLm9yZwogICoK
QEAgLTczLDcgKzc0LDExIEBAIHB1YmxpYzoKICAgICBQTkdJbWFnZVJlYWRlcihQTkdJbWFnZURl
Y29kZXIqIGRlY29kZXIpCiAgICAgICAgIDogbV9yZWFkT2Zmc2V0KDApCiAgICAgICAgICwgbV9k
ZWNvZGluZ1NpemVPbmx5KGZhbHNlKQorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAg
LCBtX2pvYkNvbXBsZXRlKGZhbHNlKQorI2Vsc2UKICAgICAgICAgLCBtX2ludGVybGFjZUJ1ZmZl
cigwKQorI2VuZGlmCiAgICAgICAgICwgbV9oYXNBbHBoYSgwKQogICAgIHsKICAgICAgICAgbV9w
bmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwgZGVj
b2RpbmdGYWlsZWQsIGRlY29kaW5nV2FybmluZyk7CkBAIC04OSwxMSArOTQsNDkgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xvc2UoKSB7CiAgICAgICAgIGlmIChtX3BuZyAmJiBtX2luZm8pCiAgICAg
ICAgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmbV9wbmcsICZtX2luZm8sIDApOyAgLy8g
V2lsbCB6ZXJvIHRoZSBwb2ludGVycy4KKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAg
IG1fam9iQ29tcGxldGUgPSBmYWxzZTsKKyAgICAgICAgY2xlYXJJbnRlcmZhY2VCdWZmZXIoKTsK
KyNlbHNlCiAgICAgICAgIGRlbGV0ZSBbXW1faW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBtX2lu
dGVybGFjZUJ1ZmZlciA9IDA7CisjZW5kaWYKICAgICAgICAgbV9yZWFkT2Zmc2V0ID0gMDsKICAg
ICB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgdm9pZCBzZXRDb21wbGV0ZSgpIHsg
bV9qb2JDb21wbGV0ZSA9IHRydWU7IH0KKyAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyKHVu
c2lnbmVkIHJvdykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ludGVybGFjZUJ1ZmZl
ci5pc0VtcHR5KCkgPyAwIDogbV9pbnRlcmxhY2VCdWZmZXJbcm93XTsKKyAgICB9CisgICAgYm9v
bCBjcmVhdGVJbnRlcmxhY2VCdWZmZXIoaW50IHJvd3MsIGludCByb3dTaXplKSB7CisgICAgICAg
IGNsZWFySW50ZXJmYWNlQnVmZmVyKCk7CisgICAgICAgIE1lbW9yeUFsbG9jYXRpb25DYW5GYWls
IGNhbkZhaWw7CisgICAgICAgIHdoaWxlIChyb3dzLS0pIHsKKyAgICAgICAgICAgIGlmIChwbmdf
Ynl0ZSogYnVmZmVyID0gbmV3IHBuZ19ieXRlW3Jvd1NpemVdKQorICAgICAgICAgICAgICAgIG1f
aW50ZXJsYWNlQnVmZmVyLmFwcGVuZChidWZmZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgY2xlYXJJbnRlcmZhY2VCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHZvaWQgY2xlYXJJbnRlcmZhY2VCdWZmZXIoKQorICAgIHsKKyAgICAgICAg
Zm9yIChWZWN0b3I8cG5nX2J5dGVwPjo6aXRlcmF0b3IgaSA9IG1faW50ZXJsYWNlQnVmZmVyLmJl
Z2luKCkgOyBpICE9IG1faW50ZXJsYWNlQnVmZmVyLmVuZCgpIDsgKytpKQorICAgICAgICAgICAg
ZGVsZXRlW10gKmk7CisgICAgICAgIG1faW50ZXJsYWNlQnVmZmVyLmNsZWFyKCk7CisgICAgfQor
I2Vsc2UKKyAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlcmxhY2VCdWZmZXI7IH0KKyAgICB2b2lkIGNyZWF0ZUludGVybGFjZUJ1ZmZlcihpbnQgc2l6
ZSkKKyAgICB7CisgICAgICAgIG1faW50ZXJsYWNlQnVmZmVyID0gbmV3IHBuZ19ieXRlW3NpemVd
OworICAgIH0KKyNlbmRpZgorCiAgICAgdm9pZCBkZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBk
YXRhLCBib29sIHNpemVPbmx5KQogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0g
c2l6ZU9ubHk7CkBAIC0xMTYsMjggKzE1OSwzMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkZWNvZGlu
Z1NpemVPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1NpemVPbmx5OyB9CiAgICAgcG5n
X3N0cnVjdHAgcG5nUHRyKCkgY29uc3QgeyByZXR1cm4gbV9wbmc7IH0KICAgICBwbmdfaW5mb3Ag
aW5mb1B0cigpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQotICAgIHBuZ19ieXRlcCBpbnRlcmxh
Y2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2ludGVybGFjZUJ1ZmZlcjsgfQogICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAKICAgICB2b2lkIHNldFJl
YWRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fcmVhZE9mZnNldCA9IG9mZnNldDsgfQogICAg
IHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBiKSB7IG1faGFzQWxwaGEgPSBiOyB9CiAKLSAgICB2b2lk
IGNyZWF0ZUludGVybGFjZUJ1ZmZlcihpbnQgc2l6ZSkgewotICAgICAgICBtX2ludGVybGFjZUJ1
ZmZlciA9IG5ldyBwbmdfYnl0ZVtzaXplXTsKLSAgICB9Ci0KIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9yZWFkT2Zmc2V0OwogICAgIGJvb2wgbV9kZWNvZGluZ1NpemVPbmx5OwogICAgIHBuZ19z
dHJ1Y3RwIG1fcG5nOwogICAgIHBuZ19pbmZvcCBtX2luZm87CisjaWYgVVNFKElNQUdFRlJBTUVT
SU5LKQorICAgIFZlY3RvcjxwbmdfYnl0ZXA+IG1faW50ZXJsYWNlQnVmZmVyOworICAgIGJvb2wg
bV9qb2JDb21wbGV0ZTsKKyNlbHNlCiAgICAgcG5nX2J5dGVwIG1faW50ZXJsYWNlQnVmZmVyOwor
I2VuZGlmCiAgICAgYm9vbCBtX2hhc0FscGhhOwogfTsKIAogUE5HSW1hZ2VEZWNvZGVyOjpQTkdJ
bWFnZURlY29kZXIoKQogICAgIDogbV9yZWFkZXIoMCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJ
TkspCisgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmFwcGVuZChJbWFnZUZyYW1lU2luazo6Y3JlYXRl
SW5zdGFuY2UodHJ1ZSkpOworI2VuZGlmCiB9CiAKIFBOR0ltYWdlRGVjb2Rlcjo6flBOR0ltYWdl
RGVjb2RlcigpCkBAIC0xNjgsNiArMjE0LDE2IEBAIGJvb2wgUE5HSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
OwogfQogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorSW1hZ2VGcmFtZVNpbmsqIFBOR0ltYWdl
RGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBJbWFnZUZy
YW1lU2luayogZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYgKGZyYW1lICYm
IGZyYW1lLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFk
ZXIpCisgICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1lLgorICAgICAgICBkZWNvZGUoKTsKKyAg
ICByZXR1cm4gZnJhbWU7Cit9CisjZWxzZQogUkdCQTMyQnVmZmVyKiBQTkdJbWFnZURlY29kZXI6
OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQpAQCAt
MTgyLDYgKzIzOCw3IEBAIFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgICAgICBkZWNvZGUoKTsKICAgICByZXR1cm4gJmZy
YW1lOwogfQorI2VuZGlmCiAKIC8vIEZlZWQgZGF0YSB0byB0aGUgUE5HIHJlYWRlci4KIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkKQEAgLTE4OSw5ICsyNDYsMTQg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmRlY29kZShib29sIHNpemVPbmx5KQogICAgIGlmICht
X2ZhaWxlZCkKICAgICAgICAgcmV0dXJuOwogCisKICAgICBtX3JlYWRlci0+ZGVjb2RlKG1fZGF0
YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKICAgICAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisg
ICAgaWYgKG1fZmFpbGVkIHx8ICFtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0gfHwgbV9mcmFtZUJ1ZmZl
ckNhY2hlWzBdLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpIHsKKyNl
bHNlIAogICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkg
JiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSkpIHsKKyNlbmRpZgogICAgICAgICBkZWxldGUgbV9yZWFkZXI7CiAgICAgICAgIG1f
cmVhZGVyID0gMDsKICAgICB9CkBAIC0yMzcsNiArMjk5LDkgQEAgdm9pZCBQTkdJbWFnZURlY29k
ZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgCiAgICAgLy8gV2UgY2FuIGZpbGwgaW4gdGhlIHNp
emUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCiAgICAgaWYgKCFJbWFnZURlY29k
ZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAg
ICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgICAgICBpZiAoIXNl
dFNpemUod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgICAgIC8vIFNpemUgdW5yZWFzb25hYmxl
LCBiYWlsIG91dC4KICAgICAgICAgICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwpAQCAtMzEw
LDYgKzM3NSwxMDQgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25l
ZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgIGlmIChtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKworI2lmIFVTRShJTUFHRUZS
QU1FU0lOSykKKyAgICBpZiAobV9mYWlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1f
ZnJhbWVCdWZmZXJDYWNoZVswXSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlRnJhbWVTaW5r
JiBidWZmZXIgPSAqbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIGlmIChidWZmZXIuc3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CisgICAgICAgIGludCB3aWR0aCA9IG1f
c2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IG1fc2l6ZS53aWR0aCgpOworICAgICAg
ICBpbnQgaGVpZ2h0ID0gbV9zY2FsZWQgPyBtX3NjYWxlZFJvd3Muc2l6ZSgpIDogbV9zaXplLmhl
aWdodCgpOworICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQsICFyZWFk
ZXIoKS0+aGFzQWxwaGEoKSkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEz
MkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKworICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgorICAgICAgICBidWZmZXIuc2V0UmVjdChJ
bnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKworICAgICAg
ICBpZiAocmVhZGVyKCktPnBuZ1B0cigpLT5pbnRlcmxhY2VkKSB7CisgICAgICAgICAgICBpZiAo
IXJlYWRlcigpLT5jcmVhdGVJbnRlcmxhY2VCdWZmZXIobV9zaXplLmhlaWdodCgpLCAocmVhZGVy
KCktPmhhc0FscGhhKCkgPyA0IDogMykgKiBtX3NpemUud2lkdGgoKSkpIHsKKyAgICAgICAgICAg
ICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJvd0J1ZmZlciA9PSAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbnQgZGVzdFkgPSByb3dJbmRleDsKKyAgICBpZiAobV9zY2FsZWQp
IHsKKyAgICAgICAgZGVzdFkgPSBzY2FsZWRZKGRlc3RZKTsKKyAgICAgICAgaWYgKGRlc3RZIDwg
MCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwbmdfc3RydWN0cCBwbmcgPSBy
ZWFkZXIoKS0+cG5nUHRyKCk7CisgICAgYm9vbCBoYXNBbHBoYSA9IHJlYWRlcigpLT5oYXNBbHBo
YSgpOworICAgIHVuc2lnbmVkIGNvbG9yQ2hhbm5lbHMgPSBoYXNBbHBoYSA/IDQgOiAzOworICAg
IHBuZ19ieXRlcCByb3cgPSByZWFkZXIoKS0+aW50ZXJsYWNlQnVmZmVyKHJvd0luZGV4KTsKKyAg
ICBpZiAocm93KQorICAgICAgICBwbmdfcHJvZ3Jlc3NpdmVfY29tYmluZV9yb3cocG5nLCByb3cs
IHJvd0J1ZmZlcik7CisgICAgZWxzZQorICAgICAgICByb3cgPSByb3dCdWZmZXI7CisKKyAgICAv
LyBDb3B5IHRoZSBkYXRhIGludG8gb3VyIGJ1ZmZlci4KKyAgICBpZiAobV9zY2FsZWQpIHsKKyAg
ICAgICAgaW50IGNvbHVtbnMgPSBtX3NjYWxlZENvbHVtbnMuc2l6ZSgpOworICAgICAgICAvLyBl
cXVpdmFsZW50IHRvIGlmICghaGFzQWxwaGEpCisgICAgICAgIGlmIChidWZmZXIuaXMxNmJpdCgp
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCogZHN0MTYgPSAodW5zaWduZWQgc2hvcnQq
KWJ1ZmZlci5ieXRlcygpICsgZGVzdFkgKiBidWZmZXIuYnVmZmVyV2lkdGgoKTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uczsgaSsrKSB7CisgICAgICAgICAgICAgICAg
cG5nX2J5dGVwIHBpeGVsID0gcm93ICsgbV9zY2FsZWRDb2x1bW5zW2ldICogMzsKKyAgICAgICAg
ICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdDE2KyssIHBpeGVsWzBdLCBwaXhl
bFsxXSwgcGl4ZWxbMl0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdW5zaWduZWQqIGRzdCA9ICh1bnNpZ25lZCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0WSAq
IGJ1ZmZlci5idWZmZXJXaWR0aCgpOworICAgICAgICAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZl
ci5oYXNBbHBoYSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyBtX3NjYWxlZENv
bHVtbnNbaV0gKiA0OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gcGl4ZWxbM107
CisgICAgICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQkEoKmRzdCsrLCBwaXhlbFsw
XSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgaWYgKCFzYXdB
bHBoYSAmJiBhbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBzYXdBbHBoYSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBpbnQgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgLy8gZXF1aXZhbGVudCB0
byBpZiAoIWhhc0FscGhhKQorICAgICAgICBpZiAoYnVmZmVyLmlzMTZiaXQoKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQqIGRzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilidWZmZXIuYnl0
ZXMoKSArIHJvd0luZGV4ICogYnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWQgPSAqcm93Kys7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAqcm93Kys7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICpyb3crKzsKKyAgICAgICAgICAgICAgICBJ
bWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdDE2KyssIHJlZCwgZ3JlZW4sIGJsdWUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQqIGRzdCA9
ICh1bnNpZ25lZCopYnVmZmVyLmJ5dGVzKCkgKyByb3dJbmRleCAqIHdpZHRoOworICAgICAgICAg
ICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVk
ID0gKnJvdysrOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKnJvdysrOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAqcm93Kys7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgYWxwaGEgPSAqcm93Kys7CisgICAgICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNl
dFJHQkEoKmRzdCsrLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICAgICAg
aWYgKCFzYXdBbHBoYSAmJiBhbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBzYXdB
bHBoYSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYnVmZmVyLmVuc3VyZUhlaWdodChyb3dJbmRleCArIDEpOworI2Vsc2UKICAgICAvLyBJbml0
aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZm
ZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKQEAgLTM4NSw2ICs1NDgsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWdu
ZWQgcm93SW5kZXgsCiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAg
ICAgIH0KICAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBwbmdDb21wbGV0ZShwbmdfc3RydWN0cCBw
bmcsIHBuZ19pbmZvcCBpbmZvKQpAQCAtMzk3LDkgKzU2MSwxNSBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cG5nQ29tcGxldGUoKQogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKKyAjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorCW1fcmVhZGVy
LT5zZXRDb21wbGV0ZSgpOworCWlmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0pCisJCW1fZnJhbWVC
dWZmZXJDYWNoZVswXS0+c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7Cisj
ZWxzZQogICAgIC8vIEhhbmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZl
biBpZiB0aGUgaW1hZ2UgZW5kZWQgdXAgYmVpbmcgZW1wdHkuCiAgICAgUkdCQTMyQnVmZmVyJiBi
dWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JB
MzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmgKaW5kZXggM2MwNTM1Yi4uYzk1OWNlZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDcgKzQ3
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhl
IHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1NpemVBdmFpbGFibGUoKTsKIAorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAg
ICAgdmlydHVhbCBJbWFnZUZyYW1lU2luayogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCk7CisjZWxzZQogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCBpbmRleCk7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGRlY29kZShib29sIHNp
emVPbmx5ID0gZmFsc2UpOwogCg==
</data>
<flag name="review"
          id="17637"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33342</attachid>
            <date>2009-07-23 09:54:27 -0700</date>
            <delta_ts>2009-08-13 13:58:48 -0700</delta_ts>
            <desc>decode from stream source data</desc>
            <filename>image_decoder_use_stream_source.patch</filename>
            <type>text/plain</type>
            <size>12630</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCmluZGV4IDY3M2Y0NmEuLmZjZTQ1YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAt
MzgsNiArMzgsOSBAQCBwdWJsaWM6CiAjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQogICAgICAgICAs
IG1fam9iQ29tcGxldGUoZmFsc2UpCiAjZW5kaWYKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExB
VEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgICAgICwgbV9jdXJyZW50QnVmZmVyU2l6ZSgwKQorI2Vu
ZGlmCiAgICAgewogICAgIH0KIApAQCAtNTAsNiArNTMsNDMgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q29tcGxldGUoKSB7IG1fam9iQ29tcGxldGUgPSB0cnVlOyB9CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICB1bnNpZ25lZCBjdXJy
ZW50QnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEJ1ZmZlclNpemU7IH0KKyAg
ICBib29sIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEdJRkltYWdlRGVjb2Rlcjo6
R0lGUXVlcnkgcXVlcnkgPSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSwgdW5zaWduZWQg
aW50IGhhbHRGcmFtZSA9IC0xKQorICAgIHsKKyAgICAgICAgYm9vbCBxdWVyeVNpemUgPSBxdWVy
eSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeTsKKyAgICAgICAgaWYgKCFxdWVyeVNp
emUgJiYgbV9yZWFkZXIuaW1hZ2VzX2RlY29kZWQgPj0gKGludCloYWx0RnJhbWUpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBmb3IgKDshbV9qb2JDb21wbGV0ZTspIHsKKyAg
ICAgICAgICAgIGlmIChtX3JlYWRlci5jbGllbnRwdHIgJiYgbV9yZWFkZXIuY2xpZW50cHRyLT5m
YWlsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
bV9yZWFkT2Zmc2V0ID49IGRhdGEuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2pv
YkNvbXBsZXRlICYmIG1fcmVhZGVyLmNsaWVudHB0ciAmJiBtX3JlYWRlci5jbGllbnRwdHItPmlz
QWxsRGF0YVJlY2VpdmVkKCkpCisgICAgICAgICAgICAgICAgICAgIG1fcmVhZGVyLmNsaWVudHB0
ci0+Z2lmQ29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gbm8gbW9y
ZSBkYXRhCisgICAgICAgICAgICB9CisgICAgICAgICAgICBTaGFyZWRCdWZmZXJTZWdtZW50IHNl
Z21lbnQoZGF0YSwgbV9yZWFkT2Zmc2V0KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJ1ZmZlclNp
emUgPSBtX3JlYWRPZmZzZXQgKyBzZWdtZW50Lmxlbmd0aCgpOworICAgICAgICAgICAgdW5zaWdu
ZWQgb3JpZ09mZnNldCA9IG1fcmVhZE9mZnNldDsKKyAgICAgICAgICAgIGlmICghbV9yZWFkZXIu
cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopc2VnbWVudC5kYXRhKCksIHNlZ21lbnQubGVuZ3Ro
KCksIHF1ZXJ5LCBoYWx0RnJhbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYgKHF1ZXJ5U2l6ZSkgeworICAgICAgICAgICAgICAgIGlmIChtX3JlYWRl
ci5jbGllbnRwdHIgPyBtX3JlYWRlci5jbGllbnRwdHItPmlzU2l6ZUF2YWlsYWJsZVdpdGhvdXRE
ZWNvZGluZygpIDogbV9yZWFkT2Zmc2V0ICE9IG9yaWdPZmZzZXQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3JlYWRlci5pbWFnZXNf
ZGVjb2RlZCA+PSAoaW50KWhhbHRGcmFtZSkgeworICAgICAgICAgICAgICAgIGlmICghbV9qb2JD
b21wbGV0ZSAmJiBtX3JlYWRlci5jbGllbnRwdHIgJiYgbV9yZWFkZXIuY2xpZW50cHRyLT5pc1Np
emVBdmFpbGFibGVXaXRob3V0RGVjb2RpbmcoKSAmJiBtX3JlYWRlci5pbWFnZXNfZGVjb2RlZCA9
PSBtX3JlYWRlci5jbGllbnRwdHItPmZyYW1lQ291bnQoKSAmJiBtX3JlYWRlci5jbGllbnRwdHIt
PmlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgICAgICAgICAgICAgICAgIG1fcmVhZGVyLmNsaWVu
dHB0ci0+Z2lmQ29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gdXBkYXRl
IHJlYWQgb2Zmc2V0IGJ5IG91cnNlbHZlcy4KKyAgICAgICAgICAgIG1fcmVhZE9mZnNldCA9IG1f
Y3VycmVudEJ1ZmZlclNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorI2Vsc2UKICAgICBib29sIGRlY29kZShTaGFyZWRCdWZmZXIqIGRhdGEsIAogICAgICAgICAg
ICAgICAgIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnkgPSBHSUZJbWFnZURlY29kZXI6
OkdJRkZ1bGxRdWVyeSwKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFsdEZyYW1lID0g
LTEpCkBAIC01OCw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcXVlcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbHRGcmFtZSk7CiAgICAg
fQorI2VuZGlmCiAKICAgICB1bnNpZ25lZCBmcmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkZXIuaW1hZ2VzX2NvdW50OyB9CiAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVhZGVyLmxvb3BfY291bnQ7IH0KQEAgLTkyLDYgKzEzMyw5IEBAIHByaXZhdGU6
CiAjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIGJvb2wgbV9qb2JDb21wbGV0ZTsKICNlbmRp
ZgorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICB1bnNp
Z25lZCBtX2N1cnJlbnRCdWZmZXJTaXplOworI2VuZGlmCiB9OwogCiBHSUZJbWFnZURlY29kZXI6
OkdJRkltYWdlRGVjb2RlcigpCkBAIC0xNTMsNyArMTk3LDExIEBAIGludCBHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ291bnQoKQogICAgIGlmICghbV9mcmFtZUNvdW50VmFsaWQpIHsKICNpZiBVU0Uo
SU1BR0VGUkFNRVNJTkspCiAgICAgICAgIG1fY3VycmVudFJlYWRlciA9IG1fc2Vjb25kYXJ5UmVh
ZGVyOworI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICAg
ICAgbV9zZWNvbmRhcnlSZWFkZXItPmRlY29kZSgqbV9kYXRhLCBHSUZGcmFtZUNvdW50UXVlcnkp
OworI2Vsc2UKICAgICAgICAgbV9zZWNvbmRhcnlSZWFkZXItPmRlY29kZShtX2RhdGEuZ2V0KCks
IEdJRkZyYW1lQ291bnRRdWVyeSk7CisjZW5kaWYKICAgICAgICAgbV9jdXJyZW50UmVhZGVyID0g
bV9yZWFkZXI7CiAKICAgICAgICAgdW5zaWduZWQgbmV3Q291bnQgPSBtX3NlY29uZGFyeVJlYWRl
ci0+ZnJhbWVDb3VudCgpOwpAQCAtMTYzLDcgKzIxMSw2IEBAIGludCBHSUZJbWFnZURlY29kZXI6
OmZyYW1lQ291bnQoKQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkQ291bnQ7IGkg
PCBuZXdDb3VudDsgKytpKQogICAgICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5hcHBl
bmQoSW1hZ2VGcmFtZVNpbms6OmNyZWF0ZUluc3RhbmNlKGZhbHNlKSk7CiAgICAgICAgIH0KLSAg
ICAgICAgbV9mcmFtZUNvdW50VmFsaWQgPSB0cnVlOwogI2Vsc2UKICAgICAgICAgLy8gRklYTUU6
IFNjYW5uaW5nIGFsbCB0aGUgZGF0YSBoYXMgTyhuXjIpIGJlaGF2aW9yIGlmIHRoZSBkYXRhIHdl
cmUgdG8gY29tZSBpbiByZWFsbHkKICAgICAgICAgLy8gc2xvd2x5LiAgTWlnaHQgYmUgaW50ZXJl
c3RpbmcgdG8gdHJ5IHRvIGNsb25lIG91ciBleGlzdGluZyByZWFkIHNlc3Npb24gdG8gcHJlc2Vy
dmUKQEAgLTMwNCw3ICszNTEsMTEgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZShHSUZR
dWVyeSBxdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpCiAgICAgaWYgKG1fZmFpbGVkKQogICAg
ICAgICByZXR1cm47CiAKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJ
TEUpCisgICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPmRlY29kZSgqbV9kYXRhLCBxdWVyeSwgaGFs
dEF0RnJhbWUpOworI2Vsc2UKICAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0
YS5nZXQoKSwgcXVlcnksIGhhbHRBdEZyYW1lKTsKKyNlbmRpZgogICAgIAogICAgIGlmIChtX2Zh
aWxlZCkgewogICAgICAgICBkZWxldGUgbV9yZWFkZXI7CkBAIC0zMjMsOCArMzc0LDggQEAgYm9v
bCBHSUZJbWFnZURlY29kZXI6OnNpemVOb3dBdmFpbGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCkKIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVuc2ln
bmVkIGJ5dGVzTGVmdCkKIHsKLSNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCi0gICAgbV9jdXJyZW50
UmVhZGVyLT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsKKyNpZiBQ
TEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAgbV9jdXJyZW50UmVh
ZGVyLT5zZXRSZWFkT2Zmc2V0KG1fY3VycmVudFJlYWRlci0+Y3VycmVudEJ1ZmZlclNpemUoKSAt
IGJ5dGVzTGVmdCk7CiAjZWxzZQogICAgIG1fcmVhZGVyLT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+
c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IGYwMWQw
NjAuLmJmMzE2YTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE1NSw2ICsxNTUsNjUgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Q29tcGxldGUoKSB7IG1fam9iQ29tcGxldGUgPSB0cnVlOyB9CiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAg
ICBib29sIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgc2l6ZU9ubHkpIHsK
KyAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CisKKyAgICAgICAgdW5zaWdu
ZWQgbGFzdE9mZnNldCA9IC0xOworICAgICAgICBWZWN0b3I8dW5zaWduZWQgY2hhciwgODE5Mj4g
YnVmZmVyOworICAgICAgICBTaGFyZWRCdWZmZXJTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIGZv
ciAoOzspIHsKKyAgICAgICAgICAgIGlmIChtX2RlY29kZXItPmZhaWxlZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgdW5zaWduZWQgcmVhZE9mZnNldCA9
IG1fYnVmZmVyTGVuZ3RoIC0gbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOworICAgICAgICAg
ICAgaWYgKHJlYWRPZmZzZXQgPT0gbGFzdE9mZnNldCAmJiBtX2J1ZmZlckxlbmd0aCA9PSBkYXRh
LnNpemUoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9qb2JDb21wbGV0ZSAmJiBtX2RlY29k
ZXItPmlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+
anBlZ0NvbXBsZXRlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNlZ21lbnRMZW5ndGggPSAwOworICAgICAgICAgICAgaWYg
KHJlYWRPZmZzZXQgPT0gbGFzdE9mZnNldCkgeworICAgICAgICAgICAgICAgIC8vIE5lZWQgbW9y
ZSBkYXRhIHRvIHByb2NlZWQKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnNldChkYXRhLCByZWFkT2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VnbWVudExlbmd0aCA9IHNlZ21lbnQubGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoc2VnbWVudC5kYXRhKCksIHNlZ21lbnRMZW5n
dGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWdtZW50LnNldChkYXRh
LCByZWFkT2Zmc2V0ICsgYnVmZmVyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgc2VnbWVudExl
bmd0aCA9IHNlZ21lbnQubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChz
ZWdtZW50LmRhdGEoKSwgc2VnbWVudExlbmd0aCk7CisgICAgICAgICAgICAgICAgbV9pbmZvLnNy
Yy0+Ynl0ZXNfaW5fYnVmZmVyICs9IHNlZ21lbnRMZW5ndGg7CisgICAgICAgICAgICAgICAgbV9p
bmZvLnNyYy0+bmV4dF9pbnB1dF9ieXRlID0gKEpPQ1RFVCopYnVmZmVyLmRhdGEoKTsKKyAgICAg
ICAgICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IHJlYWRPZmZzZXQgKyBidWZmZXIuc2l6ZSgpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhcigpOworCisgICAgICAgICAgICAg
ICAgbGFzdE9mZnNldCA9IHJlYWRPZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBzZWdtZW50LnNl
dChkYXRhLCByZWFkT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gc2Vn
bWVudC5sZW5ndGgoKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IHJl
YWRPZmZzZXQgKyBzZWdtZW50TGVuZ3RoOworICAgICAgICAgICAgICAgIG1faW5mby5zcmMtPmJ5
dGVzX2luX2J1ZmZlciArPSB0b3RhbFNpemUgLSBtX2J1ZmZlckxlbmd0aDsKKyAgICAgICAgICAg
ICAgICBtX2luZm8uc3JjLT5uZXh0X2lucHV0X2J5dGUgPSAoSk9DVEVUKilzZWdtZW50LmRhdGEo
KTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0aWxsIGhhdmUgYnl0ZXMgdG8gc2tpcCwg
dHJ5IHRvIHNraXAgdGhvc2Ugbm93LgorICAgICAgICAgICAgICAgIGlmIChtX2J5dGVzVG9Ta2lw
KQorICAgICAgICAgICAgICAgICAgICBza2lwQnl0ZXMobV9ieXRlc1RvU2tpcCk7CisKKyAgICAg
ICAgICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IHRvdGFsU2l6ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghcnVuRGVjb2RpbmcoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoc2l6ZU9ubHkgJiYgbV9zdGF0ZSAhPSBKUEVHX0hFQURFUiB8
fCBtX2pvYkNvbXBsZXRlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbHNlCiAgICAgYm9vbCBkZWNvZGUoY29uc3QgVmVj
dG9yPGNoYXI+JiBkYXRhLCBib29sIHNpemVPbmx5KSB7CiAgICAgICAgIG1fZGVjb2RpbmdTaXpl
T25seSA9IHNpemVPbmx5OwogICAgICAgICAKQEAgLTE2OSw3ICsyMjgsMTggQEAgcHVibGljOgog
ICAgICAgICAgICAgc2tpcEJ5dGVzKG1fYnl0ZXNUb1NraXApOwogCiAgICAgICAgIG1fYnVmZmVy
TGVuZ3RoID0gZGF0YS5zaXplKCk7Ci0gICAgICAgIAorCisgICAgICAgIHJldHVybiBydW5EZWNv
ZGluZygpOworICAgIH0KKyNlbmRpZgorCisgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5m
bygpIHsgcmV0dXJuICZtX2luZm87IH0KKyAgICBKU0FNUEFSUkFZIHNhbXBsZXMoKSBjb25zdCB7
IHJldHVybiBtX3NhbXBsZXM7IH0KKyAgICBKUEVHSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCkgeyBy
ZXR1cm4gbV9kZWNvZGVyOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBydW5EZWNvZGluZygpCisg
ICAgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNl
IGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4KICAgICAgICAgaWYgKHNldGptcChtX2Vyci5zZXRqbXBf
YnVmZmVyKSkgewogICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBFR19UUkFJ
TEVSOwpAQCAtMzQ1LDExICs0MTUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8oKSB7IHJldHVybiAmbV9p
bmZvOyB9Ci0gICAgSlNBTVBBUlJBWSBzYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVz
OyB9Ci0gICAgSlBFR0ltYWdlRGVjb2RlciogZGVjb2RlcigpIHsgcmV0dXJuIG1fZGVjb2Rlcjsg
fQotCi1wcml2YXRlOgogICAgIEpQRUdJbWFnZURlY29kZXIqIG1fZGVjb2RlcjsKICAgICB1bnNp
Z25lZCBtX2J1ZmZlckxlbmd0aDsKICAgICBpbnQgbV9ieXRlc1RvU2tpcDsKQEAgLTQ2OCw3ICs1
MzMsMTEgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkKICAg
ICBpZiAobV9mYWlsZWQpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFBMQVRGT1JNKFdJTkNFKSAm
JiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVjb2Rl
KCptX2RhdGEsIHNpemVPbmx5KTsKKyNlbHNlCiAgICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPmRl
Y29kZShtX2RhdGEtPmJ1ZmZlcigpLCBzaXplT25seSk7CisjZW5kaWYKIAogICAgIGlmIChtX2Zh
aWxlZAogI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IDM2ZWRjMGEu
LjJiNDRhYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAtNDEsNiArNDEsMTYgQEAKICNpbmNsdWRlICJw
bmcuaCIKICNpbmNsdWRlICJhc3NlcnQuaCIKIAorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFU
Rk9STShUT1JDSE1PQklMRSkKKworc3RhdGljIHBuZ192b2lkcCBQTkdBUEkgcG5nX21hbGxvYyhw
bmdfc3RydWN0cCwgcG5nX3NpemVfdCBzKSB7CisJcmV0dXJuIE1lbW9yeU1hbmFnZXI6Om1fbWFs
bG9jKHMpOworfQorc3RhdGljIHZvaWQgUE5HQVBJIHBuZ19mcmVlKHBuZ19zdHJ1Y3RwLCBwbmdf
dm9pZHAgcCkgeworCU1lbW9yeU1hbmFnZXI6Om1fZnJlZShwKTsKK30KKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIEdhbW1hIGNvbnN0YW50cy4KQEAgLTc5LDkgKzg5LDE2IEBA
IHB1YmxpYzoKICNlbHNlCiAgICAgICAgICwgbV9pbnRlcmxhY2VCdWZmZXIoMCkKICNlbmRpZgor
I2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICAgICAgLCBt
X2N1cnJlbnRCdWZmZXJTaXplKDApCisjZW5kaWYKICAgICAgICAgLCBtX2hhc0FscGhhKDApCiAg
ICAgeworI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICAg
ICAgbV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0XzIoUE5HX0xJQlBOR19WRVJfU1RSSU5H
LCBOVUxMLCBkZWNvZGluZ0ZhaWxlZCwgZGVjb2RpbmdXYXJuaW5nICwgMCwgcG5nX21hbGxvYywg
cG5nX2ZyZWUpOworI2Vsc2UKICAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0
KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwgZGVjb2RpbmdGYWlsZWQsIGRlY29kaW5nV2Fybmlu
Zyk7CisjZW5kaWYKICAgICAgICAgbV9pbmZvID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdChtX3Bu
Zyk7CiAgICAgICAgIHBuZ19zZXRfcHJvZ3Jlc3NpdmVfcmVhZF9mbihtX3BuZywgZGVjb2Rlciwg
aGVhZGVyQXZhaWxhYmxlLCByb3dBdmFpbGFibGUsIHBuZ0NvbXBsZXRlKTsKICAgICB9CkBAIC0x
MzcsNiArMTU0LDM0IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJ
TkNFKSAmJiBQTEFURk9STShUT1JDSE1PQklMRSkKKyAgICB1bnNpZ25lZCBjdXJyZW50QnVmZmVy
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEJ1ZmZlclNpemU7IH0KKyAgICB2b2lkIGRl
Y29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgc2l6ZU9ubHkpCisgICAgeworICAg
ICAgICBtX2RlY29kaW5nU2l6ZU9ubHkgPSBzaXplT25seTsKKworICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4K
KyAgICAgICAgaWYgKHNldGptcChtX3BuZy0+am1wYnVmKSkKKyAgICAgICAgICAgIGNsb3NlKCk7
CisKKyAgICAgICAgUE5HSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gc3RhdGljX2Nhc3Q8UE5HSW1h
Z2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIobV9wbmcpKTsKKyAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgU2hhcmVkQnVmZmVyU2VnbWVudCBzZWdtZW50KGRhdGEsIG1f
cmVhZE9mZnNldCk7CisgICAgICAgICAgICBpZiAoIXNlZ21lbnQubGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fam9iQ29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRlY29kZXItPmlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWNvZGVyLT5wbmdDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcmVhZE9mZnNldCArPSBzZWdt
ZW50Lmxlbmd0aCgpOworICAgICAgICAgICAgbV9jdXJyZW50QnVmZmVyU2l6ZSA9IG1fcmVhZE9m
ZnNldDsKKyAgICAgICAgICAgIHBuZ19wcm9jZXNzX2RhdGEobV9wbmcsIG1faW5mbywgKHBuZ19i
eXRlcClzZWdtZW50LmRhdGEoKSwgc2VnbWVudC5sZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAo
KHNpemVPbmx5ICYmIGRlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB8fCBtX2pvYkNvbXBsZXRl
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAgIH0KKyNlbHNlCiAgICAg
dm9pZCBkZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIHNpemVPbmx5KQogICAg
IHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CkBAIC0xNTYsNiArMjAx
LDggQEAgcHVibGljOgogICAgICAgICBwbmdfcHJvY2Vzc19kYXRhKG1fcG5nLCBtX2luZm8sIChw
bmdfYnl0ZXApKGRhdGEuZGF0YSgpKSArIG9mZnNldCwgcmVtYWluaW5nKTsKICAgICB9CiAKKyNl
bmRpZgorCiAgICAgYm9vbCBkZWNvZGluZ1NpemVPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9kZWNv
ZGluZ1NpemVPbmx5OyB9CiAgICAgcG5nX3N0cnVjdHAgcG5nUHRyKCkgY29uc3QgeyByZXR1cm4g
bV9wbmc7IH0KICAgICBwbmdfaW5mb3AgaW5mb1B0cigpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsg
fQpAQCAtMTc1LDYgKzIyMiw5IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIHBuZ19ieXRlcCBtX2lu
dGVybGFjZUJ1ZmZlcjsKICNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiBQTEFURk9STShU
T1JDSE1PQklMRSkKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRCdWZmZXJTaXplOworI2VuZGlmCiAg
ICAgYm9vbCBtX2hhc0FscGhhOwogfTsKIApAQCAtMjQ3LDcgKzI5NywxMSBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCiAgICAgICAgIHJldHVybjsKIAogCisj
aWYgUExBVEZPUk0oV0lOQ0UpICYmIFBMQVRGT1JNKFRPUkNITU9CSUxFKQorICAgIG1fcmVhZGVy
LT5kZWNvZGUoKm1fZGF0YSwgc2l6ZU9ubHkpOworI2Vsc2UKICAgICBtX3JlYWRlci0+ZGVjb2Rl
KG1fZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKKyNlbmRpZgogICAgIAogI2lmIFVTRShJTUFH
RUZSQU1FU0lOSykKICAgICBpZiAobV9mYWlsZWQgfHwgIW1fZnJhbWVCdWZmZXJDYWNoZVswXSB8
fCBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0tPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSkgewpAQCAtMzU5LDcgKzQxMywxMSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVh
ZGVyQXZhaWxhYmxlKCkKIAogICAgIGlmIChyZWFkZXIoKS0+ZGVjb2RpbmdTaXplT25seSgpKSB7
CiAgICAgICAgIC8vIElmIHdlIG9ubHkgbmVlZGVkIHRoZSBzaXplLCBoYWx0IHRoZSByZWFkZXIu
ICAgICAKKyNpZiBQTEFURk9STShXSU5DRSkgJiYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCisgICAg
ICAgIHJlYWRlcigpLT5zZXRSZWFkT2Zmc2V0KHJlYWRlcigpLT5jdXJyZW50QnVmZmVyU2l6ZSgp
IC0gcG5nLT5idWZmZXJfc2l6ZSk7CisjZWxzZQogICAgICAgICByZWFkZXIoKS0+c2V0UmVhZE9m
ZnNldChtX2RhdGEtPnNpemUoKSAtIHBuZy0+YnVmZmVyX3NpemUpOworI2VuZGlmCiAgICAgICAg
IHBuZy0+YnVmZmVyX3NpemUgPSAwOwogICAgIH0KIH0K
</data>
<flag name="review"
          id="17638"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34772</attachid>
            <date>2009-08-13 12:44:05 -0700</date>
            <delta_ts>2010-06-10 18:47:23 -0700</delta_ts>
            <desc>1) ImageFrameSink</desc>
            <filename>27561_1.patch</filename>
            <type>text/plain</type>
            <size>12340</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRmNGFhYy4uOWExZTc0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0xMyAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJTkNFIFBPUlQ6IEltYWdlRnJhbWVTaW5rIGlzIGEgcmVwbGFjZW1l
bnQgb2YKKyAgICAgICAgUkdCQTMyQnVmZmVyIHdoaWNoIHN1cHBvcnRzIGJvdGggMTZiaXQgYW5k
IDMyYml0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NzU2MQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmsu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNp
bmtXaW5jZS5jcHA6IEFkZGVkLgorCiAyMDA5LTA4LTEzICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxv
Y2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmsuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmsuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFiOTdkCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUZyYW1lU2luay5oCkBAIC0wLDAg
KzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGkgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgSU1B
R0VfRlJBTUVfU0lOS19IXworI2RlZmluZSBJTUFHRV9GUkFNRV9TSU5LX0hfCisKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIG5hbWVzcGFjZSBSR0JB
MzJCdWZmZXIgeworICAgICAgICBlbnVtIEZyYW1lU3RhdHVzIHsKKyAgICAgICAgICAgIEZyYW1l
RW1wdHksCisgICAgICAgICAgICBGcmFtZVBhcnRpYWwsCisgICAgICAgICAgICBGcmFtZUNvbXBs
ZXRlCisgICAgICAgIH07CisgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhvZCB7CisgICAg
ICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwgbWFr
ZSBzdXJlIHlvdSBhdWRpdCBhbGwKKyAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBzb21lIHVzZXJz
IG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCisgICAgICAgICAg
ICBEaXNwb3NlTm90U3BlY2lmaWVkID0gMCwgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVi
dWZmZXIKKyAgICAgICAgICAgIERpc3Bvc2VLZWVwID0gMSwgICAgICAgICAgICAgICAvLyBMZWF2
ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgorICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29s
b3IgPSAyLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50CisgICAgICAgICAgICBEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXMgPSAzLCAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJh
bWVidWZmZXIgY29udGVudHMKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBjbGFzcyBJbWFnZUZy
YW1lU2luayB7CisgICAgcHVibGljOgorICAgICAgICBJbWFnZUZyYW1lU2luayhib29sIGNhbkZy
ZWVCdWZmZXIpCisgICAgICAgICAgICA6IG1fMTZiaXQoZmFsc2UpCisgICAgICAgICAgICAsIG1f
aW1hZ2VXaWR0aCgwKQorICAgICAgICAgICAgLCBtX2J1ZmZlcldpZHRoKDApCisgICAgICAgICAg
ICAsIG1faGVpZ2h0KDApCisgICAgICAgICAgICAsIG1fZXhwZWN0ZWRIZWlnaHQoMCkKKyAgICAg
ICAgICAgICwgbV9zdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICAgICAg
LCBtX2Rpc3Bvc2FsTWV0aG9kKFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU5vdFNwZWNpZmllZCkKKyAg
ICAgICAgICAgICwgbV9kdXJhdGlvbigwKQorICAgICAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNl
KQorICAgICAgICAgICAgLCBtX2NhbkZyZWVCdWZmZXIoY2FuRnJlZUJ1ZmZlcikKKyAgICAgICAg
ICAgICwgbV9zaG91bGRGcmVlQnVmZmVyKGZhbHNlKQorICAgICAgICAgICAgLCBtX3VzZXNUcmFu
c3BhcmVudENvbG9yKGZhbHNlKQorICAgICAgICAgICAgLCBtX3RyYW5zcGFyZW50Q29sb3IoMCkK
KyAgICAgICAgICAgICwgbV9jb21wb3NpdGVkV2l0aFByZXZpb3VzRnJhbWUoZmFsc2UpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5JbWFnZUZyYW1lU2luaygpIHsgZnJlZUJ1ZmZl
cigpOyB9CisKKyAgICAgICAgY29uc3Qgdm9pZCogYnl0ZXMoKSBjb25zdDsKKyAgICAgICAgdm9p
ZCogYnl0ZXMoKTsKKyAgICAgICAgYm9vbCBhbGxvY2F0ZUJ1ZmZlcigpOworICAgICAgICBOYXRp
dmVJbWFnZVB0ciBnZXRGcmFtZSgpOworICAgICAgICBib29sIGlzQnVmZmVyUmVhZHkoKSBjb25z
dDsKKyAgICAgICAgdm9pZCBmcmVlQnVmZmVyKCk7CisKKyAgICAgICAgYm9vbCBzaG91bGRGcmVl
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRGcmVlQnVmZmVyOyB9CisgICAgICAgIGJv
b2wgY2FuRnJlZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FuRnJlZUJ1ZmZlcjsgfQorICAg
ICAgICBib29sIGlzMTZiaXQoKSBjb25zdCB7IHJldHVybiBtXzE2Yml0OyB9CisgICAgICAgIGNv
bnN0IEludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICAgICAgdW5z
aWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICAgICAgdW5zaWdu
ZWQgYnVmZmVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcldpZHRoOyB9CisgICAgICAg
IHVuc2lnbmVkIGltYWdlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KKyAg
ICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBt
X3N0YXR1czsgfQorICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVyYXRpb247IH0KKyAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
QWxwaGE7IH0KKyAgICAgICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyV2lkdGggKiBtX2V4cGVjdGVkSGVpZ2h0IDw8IChtXzE2Yml0ID8gMSA6IDIpOyB9CisK
KyAgICAgICAgdm9pZCBzZXRDYW5GcmVlQnVmZmVyKGJvb2wgY2FuKTsKKyAgICAgICAgYm9vbCBz
ZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBpczE2Yml0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBtXzE2Yml0ID0gaXMxNmJpdDsKKyAgICAgICAgICAgIG1faW1hZ2VXaWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgbV9leHBlY3RlZEhlaWdodCA9IGhlaWdodDsKKyAgICAgICAg
ICAgIHJldHVybiBhbGxvY2F0ZUJ1ZmZlcigpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBlbnN1
cmVIZWlnaHQoaW50IHJvd0luZGV4KTsKKyAgICAgICAgdm9pZCBzZXRTdGF0dXMoUkdCQTMyQnVm
ZmVyOjpGcmFtZVN0YXR1cyBzKSB7IG1fc3RhdHVzID0gczsgfQorICAgICAgICB2b2lkIHNldER1
cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAg
ICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9
CisgICAgICAgIGJvb2wgdXNlc1RyYW5zcGFyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZXNUcmFuc3BhcmVudENvbG9yOyB9CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHRyYW5zcGFyZW50
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zcGFyZW50Q29sb3I7IH0KKyAgICAgICAgdm9p
ZCBzZXRUcmFuc3BhcmVudENvbG9yKHVuc2lnbmVkIHNob3J0IGNvbG9yKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX3RyYW5zcGFyZW50Q29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgIG1fdXNl
c1RyYW5zcGFyZW50Q29sb3IgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xlYXJU
cmFuc3BhcmVudENvbG9yKCkgeyBtX3VzZXNUcmFuc3BhcmVudENvbG9yID0gZmFsc2U7IH0KKyAg
ICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQorICAgICAgICB2b2lkIHNldERpc3Bv
c2FsTWV0aG9kKFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9k
aXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAgICBib29sIGNvbXBvc2l0ZWRXaXRoUHJl
dmlvdXNGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlZFdpdGhQcmV2aW91c0ZyYW1l
OyB9CisgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlZFdpdGhQcmV2aW91c0ZyYW1lKCkgeyBtX2Nv
bXBvc2l0ZWRXaXRoUHJldmlvdXNGcmFtZSA9IHRydWU7IH0KKworICAgICAgICBzdGF0aWMgdm9p
ZCBzZXRSR0JBKHVuc2lnbmVkJiBwb3MsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIHN0b3JlIHRoaXMg
ZGF0YSBwcmUtbXVsdGlwbGllZC4KKyAgICAgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgICAg
ICBwb3MgPSAociA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWxw
aGFQZXJjZW50ID0gYSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICAgICAgciA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgYiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiICogYWxwaGFQZXJjZW50KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcG9zID0gKGEgPDwgMjQgfCByIDw8IDE2IHwg
ZyA8PCA4IHwgYik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
dm9pZCBzZXRSR0IxNih1bnNpZ25lZCBzaG9ydCYgcG9zLCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiKQorICAgICAgICB7CisjaWYgSU1BR0VfTk9fQUxQSEFfVVNFX1JHQjU1NQor
ICAgICAgICAgICAgcG9zID0gdW5zaWduZWQgc2hvcnQoKHIgPj4gMyA8PCAxMCkgfCAoZyA+PiAz
IDw8IDUpIHwgKGIgPj4gMykpOworI2Vsc2UKKyAgICAgICAgICAgIHBvcyA9IHVuc2lnbmVkIHNo
b3J0KChyID4+IDMgPDwgMTEpIHwgKGcgPj4gMiA8PCA1KSB8IChiID4+IDMpKTsKKyNlbmRpZgor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEltYWdlRnJhbWVTaW5rKiBjcmVhdGVJbnN0YW5j
ZShib29sIGNhbkZyZWVCdWZmZXIpOworICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnN0YW5j
ZShJbWFnZUZyYW1lU2luayopOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBJbnRSZWN0IG1f
cmVjdDsgICAgLy8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRo
aW4gdGhlIG92ZXJhbGwgYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZy
YW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3
YXMgc21hbGxlciB0aGFuIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCisgICAgICAgIGludCBtX2lt
YWdlV2lkdGg7CisgICAgICAgIGludCBtX2J1ZmZlcldpZHRoOworICAgICAgICBpbnQgbV9oZWln
aHQ7IC8vIFRoZSBoZWlnaHQgKHRoZSBudW1iZXIgb2Ygcm93cyB3ZSd2ZSBmdWxseSBkZWNvZGVk
KS4KKyAgICAgICAgaW50IG1fZXhwZWN0ZWRIZWlnaHQ7CisgICAgICAgIFJHQkEzMkJ1ZmZlcjo6
RnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUgaXMgY29t
cGxldGVseSBmaW5pc2hlZCBkZWNvZGluZy4KKyAgICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZURp
c3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7IC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZy
YW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KKyAgICAgICAgdW5z
aWduZWQgbV9kdXJhdGlvbjsgLy8gVGhlIGFuaW1hdGlvbiBkZWxheS4KKyAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgbV90cmFuc3BhcmVudENvbG9yOyAvLyBwaXhlbCB2YWx1ZQorICAgICAgICBib29s
IG1fdXNlc1RyYW5zcGFyZW50Q29sb3I7CisgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsgLy8gV2hl
dGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlciBoYXZlIHRyYW5zcGFy
ZW5jeS4KKyAgICAgICAgYm9vbCBtX2NhbkZyZWVCdWZmZXI7CisgICAgICAgIGJvb2wgbV9zaG91
bGRGcmVlQnVmZmVyOworICAgICAgICBib29sIG1fMTZiaXQ7CisgICAgICAgIGJvb2wgbV9jb21w
b3NpdGVkV2l0aFByZXZpb3VzRnJhbWU7CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgICAgIFJl
ZlB0cjxTaGFyZWRCaXRtYXA+IG1fYm1wOworICAgICAgICB2b2lkIGZpbmlzaEJpdG1hcCgpOwor
I2VuZGlmCisgICAgfTsKKworfQorCisjZW5kaWYgLy8gSU1BR0VfRlJBTUVfU0lOS19IXwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUZyYW1lU2lua1dp
bmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmtX
aW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzNGY5OAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFt
ZVNpbmtXaW5jZS5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVTaW5rLmgiCisKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaWYgSU1BR0Vf
Tk9fQUxQSEFfVVNFX1JHQjU1NQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb252ZXJ0MTZUb1JH
Qih1bnNpZ25lZCBzaG9ydCBwaXhlbCkKK3sKKyAgICB1bnNpZ25lZCByID0gKHBpeGVsID4+IDcp
ICYgMHhGODsKKyAgICB1bnNpZ25lZCBnID0gKHBpeGVsID4+IDIpICYgMHhGODsKKyAgICB1bnNp
Z25lZCBiID0gKHBpeGVsIDw8IDMpICYgMHhGODsKKyAgICByZXR1cm4gUkdCKHIsIGcsIGIpOwor
fQorI2Vsc2UgLy8gUkdCNTY1CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbnZlcnQxNlRvUkdC
KHVuc2lnbmVkIHNob3J0IHBpeGVsKQoreworICAgIHVuc2lnbmVkIHIgPSAocGl4ZWwgPj4gOCkg
JiAweEY4OworICAgIHVuc2lnbmVkIGcgPSAocGl4ZWwgPj4gMykgJiAweEZDOworICAgIHVuc2ln
bmVkIGIgPSAocGl4ZWwgPDwgMykgJiAweEY4OworICAgIHJldHVybiBSR0IociwgZywgYik7Cit9
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCB2b2lkKiBJbWFnZUZyYW1l
U2luazo6Ynl0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2JtcCA/IG1fYm1wLT5ieXRlcygp
IDogMDsKK30KKwordm9pZCogSW1hZ2VGcmFtZVNpbms6OmJ5dGVzKCkKK3sKKyAgICByZXR1cm4g
bV9ibXAgPyBtX2JtcC0+Ynl0ZXMoKSA6IDA7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZVNpbms6OmFs
bG9jYXRlQnVmZmVyKCkKK3sKKyAgICBmcmVlQnVmZmVyKCk7CisKKyAgICBpZiAobV9pbWFnZVdp
ZHRoIDw9IDAgfHwgbV9leHBlY3RlZEhlaWdodCA8PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAobV8xNmJpdCkgeworICAgICAgICBtX2J1ZmZlcldpZHRoID0gbV9pbWFnZVdp
ZHRoID4+IDEgPDwgMTsKKyAgICAgICAgaWYgKG1fYnVmZmVyV2lkdGggIT0gbV9pbWFnZVdpZHRo
KQorICAgICAgICAgICAgbV9idWZmZXJXaWR0aCArPSAyOworICAgIH0gZWxzZQorICAgICAgICBt
X2J1ZmZlcldpZHRoID0gbV9pbWFnZVdpZHRoOworCisgICAgTWVtb3J5QWxsb2NhdGlvbkNhbkZh
aWwgY2FuRmFpbDsKKworICAgIGlmIChtX2JtcCA9IFNoYXJlZEJpdG1hcDo6Y3JlYXRlSW5zdGFu
Y2UobV8xNmJpdCwgbV9pbWFnZVdpZHRoLCBtX2V4cGVjdGVkSGVpZ2h0LCB0cnVlKSkgeworICAg
ICAgICBtX2JtcC0+bG9jaygpOworICAgICAgICBtX2JtcC0+c2V0VmFsaWRIZWlnaHQoMCk7Cisg
ICAgICAgIGlmIChtXzE2Yml0ICYmIG1fdXNlc1RyYW5zcGFyZW50Q29sb3IgJiYgIW1fYm1wLT51
c2VzVHJhbnNwYXJlbnRDb2xvcigpKQorICAgICAgICAgICAgbV9ibXAtPnNldFRyYW5zcGFyZW50
Q29sb3IoY29udmVydDE2VG9SR0IobV90cmFuc3BhcmVudENvbG9yKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbWFnZUZyYW1l
U2luazo6aXNCdWZmZXJSZWFkeSgpIGNvbnN0IHsgcmV0dXJuICEhbV9ibXA7IH0KK3ZvaWQgSW1h
Z2VGcmFtZVNpbms6OmZyZWVCdWZmZXIoKQoreworICAgIGlmIChtX2JtcCkgeworICAgICAgICBp
ZiAoIW1fYm1wLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIGZpbmlzaEJpdG1hcCgpOworICAg
ICAgICBtX2JtcCA9IDA7CisgICAgfQorfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lU2lu
azo6Z2V0RnJhbWUoKQoreworICAgIGlmIChtX3N0YXR1cyA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
RW1wdHkgfHwgIW1fYm1wKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fYm1wLT5zZXRIYXNB
bHBoYShoYXNBbHBoYSgpKTsKKyAgICBtX3Nob3VsZEZyZWVCdWZmZXIgPSBtX3N0YXR1cyA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7CisgICAgaWYgKG1fY2FuRnJlZUJ1ZmZlciAmJiBt
X3Nob3VsZEZyZWVCdWZmZXIpCisgICAgICAgIGZpbmlzaEJpdG1hcCgpOworCisgICAgcmV0dXJu
IG1fYm1wOworfQorCit2b2lkIEltYWdlRnJhbWVTaW5rOjpzZXRDYW5GcmVlQnVmZmVyKGJvb2wg
Y2FuKQoreworICAgIG1fY2FuRnJlZUJ1ZmZlciA9IGNhbjsKKyAgICBpZiAobV9jYW5GcmVlQnVm
ZmVyICYmIG1fc2hvdWxkRnJlZUJ1ZmZlcikKKyAgICAgICAgZmluaXNoQml0bWFwKCk7Cit9CisK
K3ZvaWQgSW1hZ2VGcmFtZVNpbms6OmZpbmlzaEJpdG1hcCgpCit7CisgICAgaWYgKG1fYm1wICYm
IG1fYm1wLT5sb2NrZWQoKSkgeworICAgICAgICBtX2JtcC0+dW5sb2NrKCk7CisgICAgICAgIGlm
IChtX3VzZXNUcmFuc3BhcmVudENvbG9yKQorICAgICAgICAgICAgbV9ibXAtPnNldFRyYW5zcGFy
ZW50Q29sb3IoY29udmVydDE2VG9SR0IobV90cmFuc3BhcmVudENvbG9yKSk7CisgICAgICAgIGlm
ICghbV8xNmJpdCAmJiAoIW1faGFzQWxwaGEgfHwgbV91c2VzVHJhbnNwYXJlbnRDb2xvcikpIHsK
KyAgICAgICAgICAgIG1fYm1wLT5zZXRIYXNBbHBoYShmYWxzZSk7CisgICAgICAgICAgICBtXzE2
Yml0ID0gbV9ibXAtPnRvMTZiaXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV8xNmJpdCkK
KyAgICAgICAgICAgIHNldEhhc0FscGhhKGZhbHNlKTsKKyAgICAgICAgbV9ibXAtPnNldEhhc0Fs
cGhhKGhhc0FscGhhKCkpOworICAgIH0KK307CisKK3ZvaWQgSW1hZ2VGcmFtZVNpbms6OmVuc3Vy
ZUhlaWdodChpbnQgcm93SW5kZXgpCit7CisgICAgaWYgKHJvd0luZGV4ID4gbV9oZWlnaHQpIHsK
KyAgICAgICAgbV9oZWlnaHQgPSByb3dJbmRleDsKKyAgICAgICAgaWYgKG1fYm1wKQorICAgICAg
ICAgICAgbV9ibXAtPnNldFZhbGlkSGVpZ2h0KG1faGVpZ2h0KTsKKyAgICB9Cit9CisKK0ltYWdl
RnJhbWVTaW5rKiBJbWFnZUZyYW1lU2luazo6Y3JlYXRlSW5zdGFuY2UoYm9vbCBjYW5GcmVlQnVm
ZmVyKQoreworICAgIHJldHVybiBuZXcgSW1hZ2VGcmFtZVNpbmsoY2FuRnJlZUJ1ZmZlcik7Cit9
CisKK3ZvaWQgSW1hZ2VGcmFtZVNpbms6OmRlbGV0ZUluc3RhbmNlKEltYWdlRnJhbWVTaW5rKiBp
KQoreworICAgIGRlbGV0ZSBpOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34782</attachid>
            <date>2009-08-13 13:57:49 -0700</date>
            <delta_ts>2009-08-14 09:57:23 -0700</delta_ts>
            <desc>2) use ImageFrameSink in decoders</desc>
            <filename>28272_1.patch</filename>
            <type>text/plain</type>
            <size>29820</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRmNGFhYy4uYmYwMGMyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wOC0xMyAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJTkNFIFBPUlQ6IFNoYXJlZEJpdG1hcCBpcyBhIGhlbHBlciBjbGFz
cyB1c2VkIGFzIAorICAgICAgICBOYXRpdmVJbWFnZVB0ciBmb3IgV0lOQ0UuIEl0J3Mgd2lkZSB1
c2VkIGJ5IFdJTkNFIGdyYXBoaWNzCisgICAgICAgIGZpbGVzIGFzIGEgcmVwbGFjZW1lbnQgb2Yg
SEJJVE1BUC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MjcyCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRt
YXAuaDogQWRkZWQuCisKIDIwMDktMDgtMTMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkN2RjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAKQEAgLTAsMCArMSw2OTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNoYXJlZEJpdG1hcC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisjaW5jbHVkZSAiV2luY2VHcmFwaGljc0V4dHJhcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVHCitzdHJ1Y3QgU2hhcmVkQml0bWFw
TGVha0NvdW50ZXIgeworICAgIH5TaGFyZWRCaXRtYXBMZWFrQ291bnRlcigpOworfTsKK3N0YXRp
YyBTaGFyZWRCaXRtYXBMZWFrQ291bnRlciBzaGFyZWRCaXRtYXBMZWFrQ291bnRlcjsKKyNlbmRp
ZgorCit0eXBlZGVmIEhhc2hTZXQ8U2hhcmVkQml0bWFwKj4gQml0bWFwTWFwOworQml0bWFwTWFw
IGdfYml0bWFwTWFwOworCisjaWZuZGVmIE5ERUJVRworU2hhcmVkQml0bWFwTGVha0NvdW50ZXI6
On5TaGFyZWRCaXRtYXBMZWFrQ291bnRlcigpCit7CisgICAgaWYgKCFnX2JpdG1hcE1hcC5pc0Vt
cHR5KCkpCisgICAgICAgIHByaW50ZigiXG5MRUFLOiAldSAlc1xuXG4iLCBnX2JpdG1hcE1hcC5z
aXplKCksICJTaGFyZWRCaXRtYXAgb2JqZWN0cyIpOworfQorI2VuZGlmCisKK3N0YXRpYyBTaGFy
ZWRCaXRtYXA6OkRyYXdQYXR0ZXJuRnVuYyBnX2RyYXdQYXR0ZXJuID0gMDsKK3N0YXRpYyBTaGFy
ZWRCaXRtYXA6OkRyYXdJbWFnZUZ1bmMgZ19kcmF3SW1hZ2UgPSAwOworCitpbnQgZGlzY2FyZEJp
dG1hcEhhbmRsZXMoKQoreworICAgIGludCBkZWxldGVkID0gMDsKKyAgICBmb3IgKEJpdG1hcE1h
cDo6aXRlcmF0b3IgaSA9IGdfYml0bWFwTWFwLmJlZ2luKCk7IGkgIT0gZ19iaXRtYXBNYXAuZW5k
KCk7ICsraSkgeworICAgICAgICBpZiAoKCppKS0+ZnJlZU1lbW9yeSgpKQorICAgICAgICAgICAg
KytkZWxldGVkOworICAgIH0KKyAgICByZXR1cm4gZGVsZXRlZDsKK30KKworU2hhcmVkQml0bWFw
OjpEcmF3SW1hZ2VGdW5jIFNoYXJlZEJpdG1hcDo6c2V0RHJhd0ltYWdlRnVuYyhEcmF3SW1hZ2VG
dW5jIGZ1bmMpCit7CisgICAgRHJhd0ltYWdlRnVuYyBvbGRGdW5jID0gZ19kcmF3SW1hZ2U7Cisg
ICAgZ19kcmF3SW1hZ2UgPSBmdW5jOworICAgIHJldHVybiBvbGRGdW5jOworfQorCitTaGFyZWRC
aXRtYXA6OkRyYXdQYXR0ZXJuRnVuYyBTaGFyZWRCaXRtYXA6OnNldERyYXdQYXR0ZXJuRnVuYyhE
cmF3UGF0dGVybkZ1bmMgZnVuYykKK3sKKyAgICBEcmF3UGF0dGVybkZ1bmMgb2xkRnVuYyA9IGdf
ZHJhd1BhdHRlcm47CisgICAgZ19kcmF3UGF0dGVybiA9IGZ1bmM7CisgICAgcmV0dXJuIG9sZEZ1
bmM7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBTaGFyZWRCaXRtYXA6OmNyZWF0ZUlu
c3RhbmNlKGJvb2wgaXMxNmJpdCwgaW50IHcsIGludCBoLCBib29sIGluaXRQaXhlbHMpCit7Cisg
ICAgU2hhcmVkQml0bWFwKiBydG4gPSBuZXcgU2hhcmVkQml0bWFwKGlzMTZiaXQsIHcsIGgsIGlu
aXRQaXhlbHMpOworICAgIGlmIChydG4gJiYgIXJ0bi0+Ynl0ZXMoKSkgeworICAgICAgICBkZWxl
dGUgcnRuOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKHJ0
bik7Cit9CisKK1NoYXJlZEJpdG1hcDo6U2hhcmVkQml0bWFwKGNvbnN0IEJpdG1hcEluZm8mIGJt
cEluZm8sIEhCSVRNQVAgaGJtcCwgdm9pZCogcGl4ZWxzKQorOiBtX2JtcEluZm8oYm1wSW5mbykK
KywgbV9sb2NrZWQoZmFsc2UpCissIG1fdXNlc1RyYW5zcGFyZW50Q29sb3IoZmFsc2UpCissIG1f
dHJhbnNwYXJlbnRDb2xvcihSR0IoMCwgMCwgMCkpCissIG1fcGl4ZWxzKHBpeGVscykKKywgbV9o
Yml0bWFwKGhibXApCissIG1faGFzQWxwaGEoZmFsc2UpCissIG1fdmFsaWRIZWlnaHQoYm1wSW5m
by5oZWlnaHQoKSkKK3sKKyAgICBnX2JpdG1hcE1hcC5hZGQodGhpcyk7Cit9CisKK1NoYXJlZEJp
dG1hcDo6U2hhcmVkQml0bWFwKGJvb2wgX2lzMTZiaXQsIGludCB3LCBpbnQgaCwgYm9vbCBpbml0
UGl4ZWxzKQorOiBtX2JtcEluZm8oX2lzMTZiaXQsIHcsIGgpCissIG1fcmVmZXJlbmNlKDEpCiss
IG1fbG9ja2VkKGZhbHNlKQorLCBtX3VzZXNUcmFuc3BhcmVudENvbG9yKGZhbHNlKQorLCBtX3Ry
YW5zcGFyZW50Q29sb3IoUkdCKDAsIDAsIDApKQorLCBtX3BpeGVscygwKQorLCBtX2hhc0FscGhh
KGZhbHNlKQorLCBtX3ZhbGlkSGVpZ2h0KGFicyhoKSkKKywgbV9oYml0bWFwKDApCit7CisgICAg
Z19iaXRtYXBNYXAuYWRkKHRoaXMpOworCisgICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IG1fYm1w
SW5mby5udW1QaXhlbHMoKTsKKyAgICBpZiAoX2lzMTZiaXQpCisgICAgICAgIGJ1ZmZlclNpemUg
Lz0gMjsKKworICAgIG1fcGl4ZWxzID0gbmV3IHVuc2lnbmVkW2J1ZmZlclNpemVdOworCisgICAg
aWYgKGluaXRQaXhlbHMpCisgICAgICAgIHJlc2V0UGl4ZWxzKCk7Cit9CitTaGFyZWRCaXRtYXA6
On5TaGFyZWRCaXRtYXAoKQoreworICAgIGdfYml0bWFwTWFwLnJlbW92ZSh0aGlzKTsKKyAgICBp
ZiAobV9oYml0bWFwKQorICAgICAgICBEZWxldGVPYmplY3QobV9oYml0bWFwKTsKKyAgICBlbHNl
CisgICAgICAgIGRlbGV0ZVtdIG1fcGl4ZWxzOworfQorCit2b2lkIFNoYXJlZEJpdG1hcDo6cmVz
ZXRQaXhlbHMoYm9vbCBibGFjaykKK3sKKyAgICBpZiAobV9waXhlbHMpIHsKKyAgICAgICAgdW5z
aWduZWQgYnVmZmVyU2l6ZSA9IG1fYm1wSW5mby5udW1QaXhlbHMoKTsKKyAgICAgICAgaWYgKGJs
YWNrKQorICAgICAgICAgICAgbWVtc2V0KG1fcGl4ZWxzLCAwLCBidWZmZXJTaXplICogKGlzMTZi
aXQoKSA/IDIgOiA0KSk7CisgICAgICAgIGVsc2UgaWYgKGlzMTZiaXQoKSkgeworICAgICAgICAg
ICAgLy8gRmlsbCBpdCB3aXRoIHdoaXRlIGNvbG9yCisjaWYgSU1BR0VfTk9fQUxQSEFfVVNFX1JH
QjU1NQorICAgICAgICAgICAgd21lbXNldCgod2NoYXJfdCopbV9waXhlbHMsIDB4N0ZGRiwgYnVm
ZmVyU2l6ZSk7CisjZWxzZQorICAgICAgICAgICAgd21lbXNldCgod2NoYXJfdCopbV9waXhlbHMs
IDB4RkZGRiwgYnVmZmVyU2l6ZSk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIE1ha2UgaXQgd2hpdGUgYnV0IHRyYW5zcGFyZW50CisgICAgICAgICAgICB1bnNpZ25l
ZCogcGl4ZWwgPSAodW5zaWduZWQqKW1fcGl4ZWxzOworICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQqIGNvbnN0IGJ1ZmZlckVuZCA9IHBpeGVsICsgYnVmZmVyU2l6ZTsKKyAgICAgICAgICAgIHdo
aWxlIChwaXhlbCA8IGJ1ZmZlckVuZCkKKyAgICAgICAgICAgICAgICAqcGl4ZWwrKyA9IDB4MDBG
RkZGRkY7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hv
cnQgY29udmVydDMyVG8xNih1bnNpZ25lZCBwaXhlbCkKK3sKKyNpZiBJTUFHRV9OT19BTFBIQV9V
U0VfUkdCNTU1CisgICAgdW5zaWduZWQgc2hvcnQgciA9IHVuc2lnbmVkIHNob3J0KChwaXhlbCAm
IDB4MDBGODAwMDApID4+IDkpOworICAgIHVuc2lnbmVkIHNob3J0IGcgPSB1bnNpZ25lZCBzaG9y
dCgocGl4ZWwgJiAweDAwMDBGODAwKSA+PiA2KTsKKyAgICB1bnNpZ25lZCBzaG9ydCBiID0gdW5z
aWduZWQgc2hvcnQoKHBpeGVsICYgMHgwMDAwMDBGOCkgPj4gMyk7CisjZWxzZSAvLyBSR0I1NjUK
KyAgICB1bnNpZ25lZCBzaG9ydCByID0gdW5zaWduZWQgc2hvcnQoKHBpeGVsICYgMHgwMEY4MDAw
MCkgPj4gOCk7CisgICAgdW5zaWduZWQgc2hvcnQgZyA9IHVuc2lnbmVkIHNob3J0KChwaXhlbCAm
IDB4MDAwMEZDMDApID4+IDUpOworICAgIHVuc2lnbmVkIHNob3J0IGIgPSB1bnNpZ25lZCBzaG9y
dCgocGl4ZWwgJiAweDAwMDAwMEY4KSA+PiAzKTsKKyNlbmRpZgorICAgIHJldHVybiByIHwgZyB8
IGI7Cit9CisKK2Jvb2wgU2hhcmVkQml0bWFwOjp0bzE2Yml0KCkKK3sKKyAgICBpZiAobV9sb2Nr
ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXMxNmJpdCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIEJpdG1hcEluZm8gbmV3Qm1wSW5mbyh0cnVlLCBtX2JtcEluZm8u
d2lkdGgoKSwgbV9ibXBJbmZvLmhlaWdodCgpKTsKKworICAgIE1lbW9yeUFsbG9jYXRpb25DYW5G
YWlsIGNhbkZhaWw7CisgICAgaW50IHdpZHRoID0gbmV3Qm1wSW5mby53aWR0aCgpOworICAgIGlu
dCBwYWRkZWRXaWR0aCA9IG5ld0JtcEluZm8ucGFkZGVkV2lkdGgoKTsKKyAgICBpbnQgYnVmZmVy
U2l6ZSA9IHBhZGRlZFdpZHRoICogbmV3Qm1wSW5mby5oZWlnaHQoKTsKKyAgICB2b2lkKiBuZXdQ
aXhlbHMgPSBuZXcgdW5zaWduZWRbYnVmZmVyU2l6ZSAvIDJdOworCisgICAgaWYgKCFuZXdQaXhl
bHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHNob3J0KiBwMTYgPSAo
dW5zaWduZWQgc2hvcnQqKW5ld1BpeGVsczsKKyAgICBjb25zdCB1bnNpZ25lZCogcDMyID0gKGNv
bnN0IHVuc2lnbmVkKiltX3BpeGVsczsKKworICAgIGNvbnN0IGJvb2wgc2tpcHMgPSBwYWRkZWRX
aWR0aCAhPSB3aWR0aDsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBjb25zdCBwMTZlbmQg
PSBwMTYgKyBidWZmZXJTaXplOworICAgIHdoaWxlIChwMTYgPCBwMTZlbmQpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBzaG9ydCogcDE2bGluZUVuZCA9IHAxNiArIHdpZHRoOyBwMTYgPCBwMTZs
aW5lRW5kOyApCisgICAgICAgICAgICAqcDE2KysgPSBjb252ZXJ0MzJUbzE2KCpwMzIrKyk7CisK
KyAgICAgICAgaWYgKHNraXBzKQorICAgICAgICAgICAgKnAxNisrID0gMDsKKyAgICB9CisKKwor
ICAgIGlmIChtX2hiaXRtYXApIHsKKyAgICAgICAgRGVsZXRlT2JqZWN0KG1faGJpdG1hcCk7Cisg
ICAgICAgIG1faGJpdG1hcCA9IDA7CisgICAgfSBlbHNlCisgICAgICAgIGRlbGV0ZVtdIG1fcGl4
ZWxzOworCisgICAgbV9waXhlbHMgPSBuZXdQaXhlbHM7CisgICAgbV9ibXBJbmZvID0gbmV3Qm1w
SW5mbzsKKworICAgIHNldEhhc0FscGhhKGZhbHNlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTaGFyZWRCaXRtYXA6OmZyZWVNZW1vcnkoKQoreworICAgIGlmICghbV9sb2NrZWQpIHsK
KyAgICAgICAgaWYgKG1faGJpdG1hcCkgeworICAgICAgICAgICAgRGVsZXRlT2JqZWN0KG1faGJp
dG1hcCk7CisgICAgICAgICAgICBtX2hiaXRtYXAgPSAwOworICAgICAgICAgICAgbV9waXhlbHMg
PSAwOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAobV9waXhl
bHMpIHsKKyAgICAgICAgICAgIGRlbGV0ZVtdIG1fcGl4ZWxzOworICAgICAgICAgICAgbV9waXhl
bHMgPSAwOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitIQklUTUFQIFNoYXJlZEJpdG1hcDo6Y3JlYXRlSGFuZGxlKHZv
aWQqKiBwaXhlbHMsIEJpdG1hcEluZm8qIGJtcEluZm8sIGludCBoLCBib29sIHVzZTE2Yml0KSBj
b25zdAoreworICAgIGlmICghbV9waXhlbHMpCisgICAgICAgIHJldHVybiAwOworCisgICAgTWVt
b3J5QWxsb2NhdGlvbkNhbkZhaWwgY2FuRmFpbDsKKworICAgIGlmIChoID09IC0xKQorICAgICAg
ICBoID0gaGVpZ2h0KCk7CisgICAgKmJtcEluZm8gPSBCaXRtYXBJbmZvKHVzZTE2Yml0IHx8IGlz
MTZiaXQoKSwgd2lkdGgoKSwgaCk7CisKKyAgICBIQklUTUFQIGhibXAgPSBNZW1vcnlNYW5hZ2Vy
OjpjcmVhdGVESUJTZWN0aW9uKGJtcEluZm8sIHBpeGVscyk7CisKKyAgICBpZiAoIWhibXApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgT3duUHRyPEhEQz4gYm1wREMoQ3JlYXRlQ29tcGF0aWJs
ZURDKDApKTsKKyAgICBIR0RJT0JKIGhPbGRCbXAgPSBTZWxlY3RPYmplY3QoYm1wREMuZ2V0KCks
IGhibXApOworCisgICAgU3RyZXRjaERJQml0cyhibXBEQy5nZXQoKSwgMCwgMCwgd2lkdGgoKSwg
aCwgMCwgMCwgd2lkdGgoKSwgaAorICAgICAgICAsIG1fcGl4ZWxzLCAmbV9ibXBJbmZvLCBESUJf
UkdCX0NPTE9SUywgU1JDQ09QWSk7CisKKyAgICBTZWxlY3RPYmplY3QoYm1wREMuZ2V0KCksIGhP
bGRCbXApOworCisgICAgcmV0dXJuIGhibXA7Cit9CisKK2Jvb2wgU2hhcmVkQml0bWFwOjplbnN1
cmVIYW5kbGUoKQoreworICAgIGlmIChtX2hiaXRtYXApCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKCFtX3BpeGVscykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
bG9ja2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBCaXRtYXBJbmZvIGJtcEluZm87
CisgICAgdm9pZCogcGl4ZWxzOworICAgIG1faGJpdG1hcCA9IGNyZWF0ZUhhbmRsZSgmcGl4ZWxz
LCAmYm1wSW5mbywgLTEsICFoYXNBbHBoYSgpKTsKKworICAgIGlmICghbV9oYml0bWFwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkZWxldGVbXSBtX3BpeGVsczsKKyAgICBtX3BpeGVs
cyA9IHBpeGVsczsKKyAgICBtX2JtcEluZm8gPSBibXBJbmZvOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgU2hhcmVkQml0bWFwOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3ApCit7CisgICAgaWYgKCFtX3BpeGVscykKKyAgICAgICAgcmV0dXJu
OworICAgIGN0eHQtPmRyYXdCaXRtYXAodGhpcywgZHN0UmVjdCwgc3JjUmVjdCwgY29tcG9zaXRl
T3ApOworfQorCit2b2lkIFNoYXJlZEJpdG1hcDo6ZHJhdyhIREMgaGRjLCBjb25zdCBJbnRSZWN0
JiBkc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcCkKK3sKKyAgICBpZiAoIW1fcGl4ZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoZHN0UmVjdC5pc0VtcHR5KCkgfHwgc3JjUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChnX2RyYXdJbWFnZSAmJiBnX2RyYXdJbWFnZSh0aGlzLCBoZGMsIGRzdFJl
Y3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSEJJVE1B
UCBoYml0bWFwID0gMDsKKyAgICBib29sIHVzaW5nSGFuZGxlID0gY29tcG9zaXRlT3AgPT0gQ29t
cG9zaXRlU291cmNlT3ZlciAmJiAoCisjaWYgIWRlZmluZWQoTk9fQUxQSEFCTEVORCkKKyAgICAg
ICAgaGFzQWxwaGEoKSB8fAorI2VuZGlmCisgICAgICAgIHVzZXNUcmFuc3BhcmVudENvbG9yKCkp
OworCisgICAgaWYgKHVzaW5nSGFuZGxlKSB7CisgICAgICAgIGlmIChlbnN1cmVIYW5kbGUoKSkK
KyAgICAgICAgICAgIGhiaXRtYXAgPSBtX2hiaXRtYXA7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdm9pZCogcGl4ZWxzOworICAgICAgICAgICAgQml0bWFwSW5mbyBibXBJbmZvOworICAg
ICAgICAgICAgaGJpdG1hcCA9IGNyZWF0ZUhhbmRsZSgmcGl4ZWxzLCAmYm1wSW5mbywgLTEsIHVz
ZXNUcmFuc3BhcmVudENvbG9yKCkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghaGJpdG1h
cCkgeworICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIGNvbXBvc2l0ZSBvcGVyYXRpb24g
dHlwZXM/CisgICAgICAgIERXT1JEIHJvcCA9IGNvbXBvc2l0ZU9wID09IENvbXBvc2l0ZUNvcHkg
PyBTUkNDT1BZCisgICAgICAgICAgICA6IGNvbXBvc2l0ZU9wID09IENvbXBvc2l0ZVhPUiA/IFBB
VElOVkVSVAorICAgICAgICAgICAgOiBjb21wb3NpdGVPcCA9PSBDb21wb3NpdGVDbGVhciA/IFdI
SVRFTkVTUworICAgICAgICAgICAgOiBTUkNDT1BZOworCisgICAgICAgIFN0cmV0Y2hESUJpdHMo
aGRjLCBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5o
ZWlnaHQoKQorICAgICAgICAgICAgLCBzcmNSZWN0LngoKSwgc3JjUmVjdC55KCksIHNyY1JlY3Qu
d2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgbV9waXhlbHMsICZtX2JtcEluZm8sIERJQl9SR0Jf
Q09MT1JTLCByb3ApOworICAgIH0gZWxzZSB7CisgICAgICAgIE93blB0cjxIREM+IGhtZW1kYyhD
cmVhdGVDb21wYXRpYmxlREMoaGRjKSk7CisgICAgICAgIEhHRElPQkogaE9sZEJtcCA9IFNlbGVj
dE9iamVjdChobWVtZGMuZ2V0KCksIGhiaXRtYXApOworCisjaWYgIWRlZmluZWQoTk9fQUxQSEFC
TEVORCkKKyAgICAgICAgaWYgKCF1c2VzVHJhbnNwYXJlbnRDb2xvcigpKSB7CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgQkxFTkRGVU5DVElPTiBibGVuZCA9IHsgQUNfU1JDX09WRVIsIDAsIDI1
NSwgQUNfU1JDX0FMUEhBIH07CisgICAgICAgICAgICBBbHBoYUJsZW5kKGhkYywgZHN0UmVjdC54
KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCksIGhtZW1k
Yy5nZXQoKQorICAgICAgICAgICAgICAgICwgc3JjUmVjdC54KCksIHNyY1JlY3QueSgpLCBzcmNS
ZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGJsZW5kKTsKKyAgICAgICAgfSBlbHNlCisj
ZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgVHJhbnNwYXJlbnRCbHQoaGRjLCBkc3RSZWN0
LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSwgaG1l
bWRjLmdldCgpCisgICAgICAgICAgICAgICAgLCBzcmNSZWN0LngoKSwgc3JjUmVjdC55KCksIHNy
Y1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgdHJhbnNwYXJlbnRDb2xvcigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFNlbGVjdE9iamVjdChobWVtZGMuZ2V0KCksIGhPbGRCbXApOwor
ICAgICAgICBpZiAoaGJpdG1hcCAhPSBtX2hiaXRtYXApCisgICAgICAgICAgICBEZWxldGVPYmpl
Y3QoaGJpdG1hcCk7CisgICAgfQorfQorCisKK0hCSVRNQVAgU2hhcmVkQml0bWFwOjpjbGlwQml0
bWFwKGNvbnN0IEludFJlY3QmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHVzZUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFw
SW5mbyYgYm1wSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqJiBw
aXhlbHMpCit7CisgICAgaWYgKCFieXRlcygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlu
dCBvbGRXaWR0aCA9IHdpZHRoKCk7CisgICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOworICAg
IGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbjxpbnQ+KHJlY3Qud2lkdGgoKSwgb2xkV2lkdGggLSBy
ZWN0LngoKSk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbjxpbnQ+KHJlY3QuaGVpZ2h0
KCksIG9sZEhlaWdodCAtIHJlY3QueSgpKTsKKyAgICBpZiAoIWNvcHlXaWR0aCB8fCAhY29weUhl
aWdodCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBibXBJbmZvID0gQml0bWFwSW5mbyghKHVz
ZUFscGhhICYmIGlzMzJiaXQoKSksIGNvcHlXaWR0aCwgY29weUhlaWdodCk7CisgICAgSEJJVE1B
UCBuZXdCbXAgPSBNZW1vcnlNYW5hZ2VyOjpjcmVhdGVESUJTZWN0aW9uKCZibXBJbmZvLCAmcGl4
ZWxzKTsKKworICAgIGlmIChuZXdCbXApIHsKKyAgICAgICAgT3duUHRyPEhEQz4gZGNOZXcoOjpD
cmVhdGVDb21wYXRpYmxlREMoMCkpOworICAgICAgICBIR0RJT0JKIHRtcE5ldyA9IDo6U2VsZWN0
T2JqZWN0KGRjTmV3LmdldCgpLCBuZXdCbXApOworCisgICAgICAgIFN0cmV0Y2hESUJpdHMoZGNO
ZXcuZ2V0KCksIDAsIDAsIGNvcHlXaWR0aCwgY29weUhlaWdodCwgcmVjdC54KCksIHJlY3QueSgp
LCBjb3B5V2lkdGgsIGNvcHlIZWlnaHQKKyAgICAgICAgICAgICwgYnl0ZXMoKSwgJmJpdG1hcElu
Zm8oKSwgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkpOworCisgICAgICAgIFNlbGVjdE9iamVjdChk
Y05ldy5nZXQoKSwgdG1wTmV3KTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3Qm1wOworfQorCisK
K1Bhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBTaGFyZWRCaXRtYXA6OmNsaXBCaXRtYXAoY29uc3Qg
SW50UmVjdCYgcmVjdCwgYm9vbCB1c2VBbHBoYSkKK3sKKyAgICBpbnQgb2xkV2lkdGggPSB3aWR0
aCgpOworICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKKyAgICBpbnQgY29weVdpZHRoID0g
c3RkOjptaW48aW50PihyZWN0LndpZHRoKCksIG9sZFdpZHRoIC0gcmVjdC54KCkpOworICAgIGlu
dCBjb3B5SGVpZ2h0ID0gc3RkOjptaW48aW50PihyZWN0LmhlaWdodCgpLCBvbGRIZWlnaHQgLSBy
ZWN0LnkoKSk7CisgICAgaWYgKCFjb3B5V2lkdGggfHwgIWNvcHlIZWlnaHQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgU2hhcmVkQml0bWFwKiBuZXdCbXAgPSBuZXcgU2hhcmVkQml0bWFwKCEo
dXNlQWxwaGEgJiYgaXMzMmJpdCgpKSwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LCBmYWxzZSk7CisK
KyAgICBpZiAoIW5ld0JtcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW5ld0JtcC0+
Ynl0ZXMoKSkgeworICAgICAgICBkZWxldGUgbmV3Qm1wOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBEQ0hvbGRlciBkY05ldyhuZXdCbXApOworCisgICAgU3RyZXRjaERJQml0cyhk
Y05ldy5nZXQoKSwgMCwgMCwgY29weVdpZHRoLCBjb3B5SGVpZ2h0LCByZWN0LngoKSwgcmVjdC55
KCksIGNvcHlXaWR0aCwgY29weUhlaWdodAorICAgICAgICAsIGJ5dGVzKCksICZiaXRtYXBJbmZv
KCksIERJQl9SR0JfQ09MT1JTLCBTUkNDT1BZKTsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXdC
bXApOworfQorCitzdGF0aWMgdm9pZCBkcmF3UGF0dGVyblNpbXBsZShIREMgaGRjLCBjb25zdCBS
RUNUJiBkZXN0UmVjdCwgSEJJVE1BUCBoYm1wLCBjb25zdCBQT0lOVCYgcGhhc2UpCit7CisgICAg
SEJSVVNIIGhCcnVzaCA9IENyZWF0ZVBhdHRlcm5CcnVzaChoYm1wKTsKKyAgICBpZiAoaEJydXNo
KSB7CisgICAgICAgIFBPSU5UIG9sZE9yZzsKKyAgICAgICAgU2V0QnJ1c2hPcmdFeChoZGMsIGRl
c3RSZWN0LmxlZnQgLSBwaGFzZS54LCBkZXN0UmVjdC50b3AgLSBwaGFzZS55LCAmb2xkT3JnKTsK
KyAgICAgICAgRmlsbFJlY3QoaGRjLCAmZGVzdFJlY3QsIGhCcnVzaCk7CisgICAgICAgIERlbGV0
ZU9iamVjdChoQnJ1c2gpOworICAgICAgICBTZXRCcnVzaE9yZ0V4KGhkYywgb2xkT3JnLngsIG9s
ZE9yZy55LCAwKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuU2ltcGxlKEhE
QyBoZGMsIGNvbnN0IFJFQ1QmIGRlc3RSZWN0LCBjb25zdCBTaGFyZWRCaXRtYXAqIGJtcCwgY29u
c3QgU0laRSYgYm1wU2l6ZSwgY29uc3QgUE9JTlQmIHBoYXNlKQoreworICAgIGludCBkc3RZID0g
ZGVzdFJlY3QudG9wOworICAgIGZvciAoaW50IHNvdXJjZVkgPSBwaGFzZS55OyBkc3RZIDwgZGVz
dFJlY3QuYm90dG9tOyApIHsKKyAgICAgICAgaW50IHNvdXJjZUggPSBzdGQ6Om1pbjxpbnQ+KGJt
cFNpemUuY3kgLSBzb3VyY2VZLCBkZXN0UmVjdC5ib3R0b20gLSBkc3RZKTsKKyAgICAgICAgaW50
IGRzdFggPSBkZXN0UmVjdC5sZWZ0OworICAgICAgICBmb3IgKGludCBzb3VyY2VYID0gcGhhc2Uu
eDsgZHN0WCA8IGRlc3RSZWN0LnJpZ2h0OyApIHsKKyAgICAgICAgICAgIGludCBzb3VyY2VXID0g
c3RkOjptaW48aW50PihibXBTaXplLmN4IC0gc291cmNlWCwgZGVzdFJlY3QucmlnaHQgLSBkc3RY
KTsKKworICAgICAgICAgICAgU3RyZXRjaERJQml0cyhoZGMsIGRzdFgsIGRzdFksIHNvdXJjZVcs
IHNvdXJjZUgsIHNvdXJjZVgsIHNvdXJjZVksIHNvdXJjZVcsIHNvdXJjZUgKKyAgICAgICAgICAg
ICAgICAsIGJtcC0+Ynl0ZXMoKSwgJmJtcC0+Yml0bWFwSW5mbygpLCBESUJfUkdCX0NPTE9SUywg
U1JDQ09QWSk7CisKKyAgICAgICAgICAgIGRzdFggKz0gc291cmNlVzsKKyAgICAgICAgICAgIHNv
dXJjZVggPSAwOworICAgICAgICB9CisKKyAgICAgICAgZHN0WSArPSBzb3VyY2VIOworICAgICAg
ICBzb3VyY2VZID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgbm9ybWFsaXplUGhhc2UoTE9ORyYgcGhh
c2UsIGludCBsaW1pdCkKK3sKKyAgICBpZiAoIXBoYXNlKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKGxpbWl0IDwgMikgeworICAgICAgICBwaGFzZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGxpbWl0ID09IDIpIHsKKyAgICAgICAgcGhhc2UgPSBwaGFzZSAmIDE7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBoYXNlIDwgMCkgeworICAgICAgICBwaGFz
ZSA9IC1waGFzZTsKKyAgICAgICAgaWYgKHBoYXNlID4gbGltaXQpCisgICAgICAgICAgICBwaGFz
ZSA9IChMT05HKSgodW5zaWduZWQpcGhhc2UgJSAodW5zaWduZWQpbGltaXQpOworICAgICAgICBp
ZiAocGhhc2UpCisgICAgICAgICAgICBwaGFzZSA9IGxpbWl0IC0gcGhhc2U7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHBoYXNlIDwgbGltaXQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHBoYXNlID0gKExPTkcpKCh1bnNpZ25lZClwaGFzZSAlICh1bnNpZ25lZClsaW1pdCk7Cisg
ICAgfQorfQorCit2b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKK3sKKyAgICBpZiAoIW1f
cGl4ZWxzKQorICAgICAgICByZXR1cm47CisgICAgY3R4dC0+ZHJhd0JpdG1hcFBhdHRlcm4odGhp
cywgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wLCBkZXN0UmVjdCwgb3Jp
Z1NvdXJjZVNpemUpOworfQorCit2b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oSERDIGhk
YywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdEluLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9y
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6
ZSYgb3JpZ1NvdXJjZVNpemUpCit7CisgICAgaWYgKCFtX3BpeGVscykKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGdfZHJhd1BhdHRlcm4pIHsKKyAgICAgICAgZ19kcmF3UGF0dGVybih0aGlz
LCBoZGMsIHRyYW5zZm9ybSwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9w
LCBkZXN0UmVjdCwgb3JpZ1NvdXJjZVNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHRpbGVSZWN0SW4ud2lkdGgoKSA8PSAwIHx8IHRpbGVSZWN0SW4uaGVpZ2h0KCkgPD0g
MCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB1c2VBbHBoYSA9IG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgJiYgaGFzQWxwaGEoKSAmJiBpczMyYml0KCk7CisKKyAgICBpbnQgYm1wV2lk
dGggPSB3aWR0aCgpOworICAgIGludCBibXBIZWlnaHQgPSBoZWlnaHQoKTsKKworICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCh0aWxlUmVjdEluKTsKKyAgICBpZiAoYm1wV2lkdGggIT0gb3JpZ1NvdXJj
ZVNpemUud2lkdGgoKSkgeworICAgICAgICBkb3VibGUgcmF0ZSA9IChkb3VibGUpYm1wV2lkdGgg
LyBvcmlnU291cmNlU2l6ZS53aWR0aCgpOworICAgICAgICBkb3VibGUgdGVtcCA9IHRpbGVSZWN0
LndpZHRoKCkgKiByYXRlOworICAgICAgICB0aWxlUmVjdC5zZXRYKHRpbGVSZWN0LngoKSAqIHJh
dGUpOworICAgICAgICB0aWxlUmVjdC5zZXRXaWR0aCh0ZW1wKTsKKyAgICAgICAgdGVtcCA9IHRp
bGVSZWN0LmhlaWdodCgpICogcmF0ZTsKKyAgICAgICAgdGlsZVJlY3Quc2V0WSh0aWxlUmVjdC55
KCkgKiByYXRlKTsKKyAgICAgICAgdGlsZVJlY3Quc2V0SGVpZ2h0KHRlbXApOworICAgIH0KKwor
ICAgIE93blB0cjxIQklUTUFQPiBjbGlwcGVkQm1wOworCisgICAgaWYgKHRpbGVSZWN0LngoKSB8
fCB0aWxlUmVjdC55KCkgfHwgdGlsZVJlY3Qud2lkdGgoKSAhPSBibXBXaWR0aCB8fCB0aWxlUmVj
dC5oZWlnaHQoKSAhPSBibXBIZWlnaHQpIHsKKyAgICAgICAgQml0bWFwSW5mbyBwYXR0ZXJuQm1w
SW5mbzsKKyAgICAgICAgdm9pZCogcGF0dGVyblBpeGVsczsKKyAgICAgICAgY2xpcHBlZEJtcC5z
ZXQoY2xpcEJpdG1hcChJbnRSZWN0KHRpbGVSZWN0KSwgdXNlQWxwaGEsIHBhdHRlcm5CbXBJbmZv
LCBwYXR0ZXJuUGl4ZWxzKSk7CisgICAgICAgIGlmICghY2xpcHBlZEJtcCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBibXBXaWR0aCA9IHRpbGVSZWN0LndpZHRoKCk7CisgICAgICAg
IGJtcEhlaWdodCA9IHRpbGVSZWN0LmhlaWdodCgpOworICAgIH0KKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRmID0gdHJhbnNmb3JtOworICAgIHRmICo9IHBhdHRlcm5UcmFuc2Zvcm07CisK
KyAgICBGbG9hdFJlY3QgdHJSZWN0ID0gdGYubWFwUmVjdChkZXN0UmVjdCk7CisKKyAgICBSRUNU
IGNsaXBCb3g7CisgICAgaW50IGNsaXBUeXBlID0gR2V0Q2xpcEJveChoZGMsICZjbGlwQm94KTsK
KyAgICBpZiAoY2xpcFR5cGUgPT0gU0lNUExFUkVHSU9OKQorICAgICAgICB0clJlY3QuaW50ZXJz
ZWN0KEZsb2F0UmVjdChjbGlwQm94LmxlZnQsIGNsaXBCb3gudG9wLCBjbGlwQm94LnJpZ2h0IC0g
Y2xpcEJveC5sZWZ0LCBjbGlwQm94LmJvdHRvbSAtIGNsaXBCb3gudG9wKSk7CisgICAgZWxzZSBp
ZiAoY2xpcFR5cGUgPT0gQ09NUExFWFJFR0lPTikgeworICAgICAgICBPd25QdHI8SFJHTj4gY2xp
cFJnbihDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKKyAgICAgICAgaWYgKEdldENsaXBSZ24o
aGRjLCBjbGlwUmduLmdldCgpKSA+IDApIHsKKyAgICAgICAgICAgIERXT1JEIHJlZ2lvbkRhdGFT
aXplID0gR2V0UmVnaW9uRGF0YShjbGlwUmduLmdldCgpLCBzaXplb2YoUkdOREFUQSksIDApOwor
ICAgICAgICAgICAgaWYgKHJlZ2lvbkRhdGFTaXplKSB7CisgICAgICAgICAgICAgICAgUkdOREFU
QSogcmVnaW9uRGF0YSA9IG5ldyBSR05EQVRBW3JlZ2lvbkRhdGFTaXplXTsKKyAgICAgICAgICAg
ICAgICBHZXRSZWdpb25EYXRhKGNsaXBSZ24uZ2V0KCksIHJlZ2lvbkRhdGFTaXplLCByZWdpb25E
YXRhKTsKKyAgICAgICAgICAgICAgICBSRUNUKiByZWN0ID0gKFJFQ1QqKXJlZ2lvbkRhdGEtPkJ1
ZmZlcjsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaW9uRGF0
YS0+cmRoLm5Db3VudDsgKytpLCArK3JlY3QpCisgICAgICAgICAgICAgICAgICAgIHRyUmVjdC5p
bnRlcnNlY3QoRmxvYXRSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsKKyAgICAgICAgICAgICAgICBk
ZWxldGVbXSByZWdpb25EYXRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHRyUmVjdC53aWR0aCgpIDw9IDAgfHwgdHJSZWN0LmhlaWdodCgpIDw9IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIHRyUmVjdC5pbmZsYXRlKDEpOworICAgIEludFJlY3QgdmlzaWJs
ZURzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRmLmludmVyc2UoKS5tYXBSZWN0KHRyUmVjdCkp
OworICAgIHZpc2libGVEc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KGRlc3RSZWN0KSk7CisKKyAg
ICBpZiAodmlzaWJsZURzdFJlY3Qud2lkdGgoKSA8PSAwIHx8IHZpc2libGVEc3RSZWN0LmhlaWdo
dCgpIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIHRyUmVjdCA9IHRmLm1hcFJlY3Qodmlz
aWJsZURzdFJlY3QpOworICAgIFJFQ1QgZHN0UmVjdFdpbiA9CisgICAgeworICAgICAgICBzdGFi
bGVSb3VuZCh0clJlY3QueCgpKSwKKyAgICAgICAgc3RhYmxlUm91bmQodHJSZWN0LnkoKSksCisg
ICAgICAgIHN0YWJsZVJvdW5kKHRyUmVjdC5yaWdodCgpKSwKKyAgICAgICAgc3RhYmxlUm91bmQo
dHJSZWN0LmJvdHRvbSgpKSwKKyAgICB9OworICAgIGlmIChkc3RSZWN0V2luLnJpZ2h0IDw9IGRz
dFJlY3RXaW4ubGVmdCB8fCBkc3RSZWN0V2luLmJvdHRvbSA8PSBkc3RSZWN0V2luLnRvcCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU0laRSBibXBTaXplID0geyBibXBXaWR0aCwgYm1wSGVpZ2h0
IH07CisKKyAgICAvLyBSZWxhdGl2ZSB0byBkZXN0aW5hdGlvbiwgaW4gYml0bWFwIHBpeGVscwor
ICAgIFBPSU5UIHBoYXNlV2luID0geyBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC54KCkgLSBw
aGFzZS54KCkpLCBzdGFibGVSb3VuZCh2aXNpYmxlRHN0UmVjdC55KCkgLSBwaGFzZS55KCkpIH07
CisgICAgbm9ybWFsaXplUGhhc2UocGhhc2VXaW4ueCwgYm1wU2l6ZS5jeCk7CisgICAgbm9ybWFs
aXplUGhhc2UocGhhc2VXaW4ueSwgYm1wU2l6ZS5jeSk7CisKKyAgICB7CisgICAgICAgIFJFQ1Qg
c3JjUmVjdFdpbiA9CisgICAgICAgIHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgc3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QucmlnaHQoKSkgLSBzdGFibGVS
b3VuZCh2aXNpYmxlRHN0UmVjdC54KCkpLAorICAgICAgICAgICAgc3RhYmxlUm91bmQodmlzaWJs
ZURzdFJlY3QuYm90dG9tKCkpIC0gc3RhYmxlUm91bmQodmlzaWJsZURzdFJlY3QueSgpKQorICAg
ICAgICB9OworICAgICAgICBpZiAoc3JjUmVjdFdpbi5yaWdodCA8PSAwIHx8IHNyY1JlY3RXaW4u
Ym90dG9tIDw9IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQml0bWFwSW5mbyBi
bXBJbmZvKCF1c2VBbHBoYSwgc3JjUmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0b20pOwor
ICAgICAgICB2b2lkKiBwaXhlbHM7CisgICAgICAgIE93blB0cjxIQklUTUFQPiBoYm1wVGVtcChN
ZW1vcnlNYW5hZ2VyOjpjcmVhdGVESUJTZWN0aW9uKCZibXBJbmZvLCAmcGl4ZWxzKSk7CisKKyAg
ICAgICAgaWYgKGhibXBUZW1wKSB7CisgICAgICAgICAgICBPd25QdHI8SERDPiBobWVtZGMoQ3Jl
YXRlQ29tcGF0aWJsZURDKGhkYykpOworICAgICAgICAgICAgSEdESU9CSiBvbGRCbXAgPSBTZWxl
Y3RPYmplY3QoaG1lbWRjLmdldCgpLCBoYm1wVGVtcC5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
Y2xpcHBlZEJtcCkKKyAgICAgICAgICAgICAgICBkcmF3UGF0dGVyblNpbXBsZShobWVtZGMuZ2V0
KCksIHNyY1JlY3RXaW4sIGNsaXBwZWRCbXAuZ2V0KCksIHBoYXNlV2luKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKChvcCAhPSBDb21wb3NpdGVTb3VyY2VPdmVyIHx8IGNhblVzZURJQml0cygpKSAm
JiBzcmNSZWN0V2luLnJpZ2h0IDw9IGJtcFNpemUuY3ggKiAyICYmIHNyY1JlY3RXaW4uYm90dG9t
IDw9IGJtcFNpemUuY3kgKiAyKQorICAgICAgICAgICAgICAgIGRyYXdQYXR0ZXJuU2ltcGxlKGht
ZW1kYy5nZXQoKSwgc3JjUmVjdFdpbiwgdGhpcywgYm1wU2l6ZSwgcGhhc2VXaW4pOworICAgICAg
ICAgICAgZWxzZSBpZiAoZW5zdXJlSGFuZGxlKCkpCisgICAgICAgICAgICAgICAgZHJhd1BhdHRl
cm5TaW1wbGUoaG1lbWRjLmdldCgpLCBzcmNSZWN0V2luLCBnZXRIYW5kbGUoKSwgcGhhc2VXaW4p
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdm9pZCogcGl4ZWxzOworICAg
ICAgICAgICAgICAgIEJpdG1hcEluZm8gYm1wSW5mbzsKKyAgICAgICAgICAgICAgICBpZiAoSEJJ
VE1BUCBoYm1wID0gY3JlYXRlSGFuZGxlKCZwaXhlbHMsICZibXBJbmZvLCAtMSwgZmFsc2UpKSB7
CisgICAgICAgICAgICAgICAgICAgIGRyYXdQYXR0ZXJuU2ltcGxlKGhtZW1kYy5nZXQoKSwgc3Jj
UmVjdFdpbiwgaGJtcCwgcGhhc2VXaW4pOworICAgICAgICAgICAgICAgICAgICBEZWxldGVPYmpl
Y3QoaGJtcCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
U2VsZWN0T2JqZWN0KGhtZW1kYy5nZXQoKSwgb2xkQm1wKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworI2lmIGRlZmluZWQo
Tk9fQUxQSEFCTEVORCkKKyAgICAgICAgICAgIGlmICh1c2VBbHBoYSB8fChvcCA9PSBDb21wb3Np
dGVTb3VyY2VPdmVyICYmIHVzZXNUcmFuc3BhcmVudENvbG9yKCkpKQorI2Vsc2UKKyAgICAgICAg
ICAgIGlmICh1c2VBbHBoYSkgeworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBCTEVOREZV
TkNUSU9OIGJsZW5kID0geyBBQ19TUkNfT1ZFUiwgMCwgMjU1LCBBQ19TUkNfQUxQSEEgfTsKKyAg
ICAgICAgICAgICAgICBBbHBoYUJsZW5kKGhkYywgZHN0UmVjdFdpbi5sZWZ0LCBkc3RSZWN0V2lu
LnRvcCwgZHN0UmVjdFdpbi5yaWdodCAtIGRzdFJlY3RXaW4ubGVmdCwgZHN0UmVjdFdpbi5ib3R0
b20gLSBkc3RSZWN0V2luLnRvcAorICAgICAgICAgICAgICAgICAgICAsIGhtZW1kYy5nZXQoKSwg
MCwgMCwgc3JjUmVjdFdpbi5yaWdodCwgc3JjUmVjdFdpbi5ib3R0b20sIGJsZW5kKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiB1c2VzVHJhbnNw
YXJlbnRDb2xvcigpKQorI2VuZGlmCisgICAgICAgICAgICAgICAgVHJhbnNwYXJlbnRCbHQoaGRj
LCBkc3RSZWN0V2luLmxlZnQsIGRzdFJlY3RXaW4udG9wLCBkc3RSZWN0V2luLnJpZ2h0IC0gZHN0
UmVjdFdpbi5sZWZ0CisgICAgICAgICAgICAgICAgICAgICwgZHN0UmVjdFdpbi5ib3R0b20gLSBk
c3RSZWN0V2luLnRvcCwgaG1lbWRjLmdldCgpLCAwLCAwLCBzcmNSZWN0V2luLnJpZ2h0LCBzcmNS
ZWN0V2luLmJvdHRvbSwgdHJhbnNwYXJlbnRDb2xvcigpKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIERXT1JEIGJtcE9wID0gb3AgPT0gQ29tcG9zaXRlQ29weSA/IFNSQ0NP
UFkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wID09IENvbXBvc2l0ZVNvdXJjZU92
ZXIgPyBTUkNDT1BZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvcCA9PSBDb21wb3Np
dGVYT1IgPyBQQVRJTlZFUlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG9wID09IENv
bXBvc2l0ZUNsZWFyID8gV0hJVEVORVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBT
UkNDT1BZOyAvLyBGSVhFTUU6IG90aGVyIHR5cGVzPworCisgICAgICAgICAgICAgICAgU3RyZXRj
aERJQml0cyhoZGMsIGRzdFJlY3RXaW4ubGVmdCwgZHN0UmVjdFdpbi50b3AsIGRzdFJlY3RXaW4u
cmlnaHQgLSBkc3RSZWN0V2luLmxlZnQKKyAgICAgICAgICAgICAgICAgICAgLCBkc3RSZWN0V2lu
LmJvdHRvbSAtIGRzdFJlY3RXaW4udG9wLCAwLCAwLCBzcmNSZWN0V2luLnJpZ2h0LCBzcmNSZWN0
V2luLmJvdHRvbQorICAgICAgICAgICAgICAgICAgICAsIHBpeGVscywgJmJtcEluZm8sIERJQl9S
R0JfQ09MT1JTLCBibXBPcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZWxlY3RPYmpl
Y3QoaG1lbWRjLmdldCgpLCBvbGRCbXApOworICAgICAgICB9CisgICAgfQorfQorCitTaGFyZWRC
aXRtYXA6OkRDUHJvdmlkZXIgZ19kY1Byb3ZpZGVyOworU2hhcmVkQml0bWFwOjpEQ1Byb3ZpZGVy
KiBTaGFyZWRCaXRtYXA6Om1fZGNQcm92aWRlciA9ICZnX2RjUHJvdmlkZXI7CisKK0hEQyBTaGFy
ZWRCaXRtYXA6OkRDUHJvdmlkZXI6OmdldERDKFNoYXJlZEJpdG1hcCogYm1wLCB1bnNpZ25lZCog
a2V5MSwgdW5zaWduZWQqIGtleTIpCit7CisgICAgaWYgKCFibXAgfHwgIWJtcC0+ZW5zdXJlSGFu
ZGxlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgSERDIGhkYyA9IDo6Q3JlYXRlQ29tcGF0
aWJsZURDKDApOworICAgIGlmIChoZGMpIHsKKyAgICAgICAgKmtleTEgPSAodW5zaWduZWQpU2Vs
ZWN0T2JqZWN0KGhkYywgYm1wLT5nZXRIYW5kbGUoKSk7CisgICAgICAgIFJFQ1QgcmVjdCA9IHsg
MCwgMCwgYm1wLT53aWR0aCgpLCBibXAtPmhlaWdodCgpIH07CisgICAgICAgIE93blB0cjxIUkdO
PiBjbGlwUmduKENyZWF0ZVJlY3RSZ25JbmRpcmVjdCgmcmVjdCkpOworICAgICAgICBTZWxlY3RD
bGlwUmduKGhkYywgY2xpcFJnbi5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGhkYzsKK30K
Kwordm9pZCBTaGFyZWRCaXRtYXA6OkRDUHJvdmlkZXI6OnJlbGVhc2VEQyhTaGFyZWRCaXRtYXAq
LCBIREMgaGRjLCB1bnNpZ25lZCBrZXkxLCB1bnNpZ25lZCBrZXkyKQoreworICAgIGlmICghaGRj
KQorICAgICAgICByZXR1cm47CisKKyAgICBTZWxlY3RPYmplY3QoaGRjLCAoSEdESU9CSilrZXkx
KTsKKyAgICBEZWxldGVEQyhoZGMpOworfQorCit2b2lkIFNoYXJlZEJpdG1hcDo6Y2xlYXJQaXhl
bHMoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoIW1fcGl4ZWxzKQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnRSZWN0IGJtcFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAg
IGJtcFJlY3QuaW50ZXJzZWN0KHIpOworICAgIGlmIChpczE2Yml0KCkpIHsKKyAgICAgICAgaW50
IHcgPSBtX2JtcEluZm8ucGFkZGVkV2lkdGgoKTsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQqIGRz
dCA9ICh1bnNpZ25lZCBzaG9ydCopbV9waXhlbHM7CisgICAgICAgIGRzdCArPSBibXBSZWN0Lnko
KSAqIHcgKyBibXBSZWN0LngoKTsKKyAgICAgICAgaW50IHdvcmRzVG9TZXQgPSBibXBSZWN0Lndp
ZHRoKCk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBkc3RFbmQgPSBkc3QgKyBibXBS
ZWN0LmhlaWdodCgpICogdzsKKyAgICAgICAgd2hpbGUgKGRzdCA8IGRzdEVuZCkgeworICAgICAg
ICAgICAgd21lbXNldCgod2NoYXJfdCopZHN0LCAwLCB3b3Jkc1RvU2V0KTsKKyAgICAgICAgICAg
IGRzdCArPSB3OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHcgPSB3aWR0
aCgpOworICAgICAgICB1bnNpZ25lZCogZHN0ID0gKHVuc2lnbmVkKiltX3BpeGVsczsKKyAgICAg
ICAgZHN0ICs9IGJtcFJlY3QueSgpICogdyArIGJtcFJlY3QueCgpOworICAgICAgICBpbnQgd29y
ZHNUb1NldCA9IGJtcFJlY3Qud2lkdGgoKSAqIDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkKiBk
c3RFbmQgPSBkc3QgKyBibXBSZWN0LmhlaWdodCgpICogdzsKKyAgICAgICAgd2hpbGUgKGRzdCA8
IGRzdEVuZCkgeworICAgICAgICAgICAgd21lbXNldCgod2NoYXJfdCopZHN0LCAwLCB3b3Jkc1Rv
U2V0KTsKKyAgICAgICAgICAgIGRzdCArPSB3OworICAgICAgICB9CisgICAgfQorfQorCit9CisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFw
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3Njc2NDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oCkBAIC0wLDAg
KzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQml0bWFwSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3aW5nZGkuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKKyAgICBjbGFzcyBGbG9hdFBv
aW50OworICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Cisg
ICAgY2xhc3MgSW50UmVjdDsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIFRyYW5zZm9y
bWF0aW9uTWF0cml4OworCisgICAgY2xhc3MgU2hhcmVkQml0bWFwOiBwdWJsaWMgUmVmQ291bnRl
ZDxTaGFyZWRCaXRtYXA+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5TaGFyZWRCaXRtYXAoKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBjcmVhdGVJbnN0YW5jZShi
b29sIGlzMTZiaXQsIGludCB3LCBpbnQgaCwgYm9vbCBpbml0UGl4ZWxzKTsKKyAgICAgICAgY29u
c3QgQml0bWFwSW5mbyYgYml0bWFwSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fYm1wSW5mbzsgfQor
ICAgICAgICB2b2lkKiBieXRlcygpIHsgcmV0dXJuIG1fcGl4ZWxzOyB9CisgICAgICAgIGNvbnN0
IHZvaWQqIGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHM7IH0KKyAgICAgICAgdW5zaWdu
ZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8ud2lkdGgoKTsgfQorICAgICAgICB1
bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8uaGVpZ2h0KCk7IH0KKyAg
ICAgICAgdW5zaWduZWQgdmFsaWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkSGVpZ2h0
OyB9CisgICAgICAgIHZvaWQgc2V0VmFsaWRIZWlnaHQodW5zaWduZWQgdmFsaWRIZWlnaHQpIHsg
bV92YWxpZEhlaWdodCA9IHZhbGlkSGVpZ2h0OyB9CisgICAgICAgIHZvaWQgcmVzZXRQaXhlbHMo
Ym9vbCBibGFjayA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBjbGVhclBpeGVscyhjb25zdCBJbnRS
ZWN0JiByKTsKKyAgICAgICAgYm9vbCBsb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2xvY2tlZDsg
fQorICAgICAgICB2b2lkIGxvY2soKSB7IG1fbG9ja2VkID0gdHJ1ZTsgfQorICAgICAgICB2b2lk
IHVubG9jaygpIHsgbV9sb2NrZWQgPSBmYWxzZTsgfQorICAgICAgICBib29sIGZyZWVNZW1vcnko
KTsKKyAgICAgICAgYm9vbCBpczE2Yml0KCkgY29uc3QgeyByZXR1cm4gbV9ibXBJbmZvLmlzMTZi
aXQoKTsgfQorICAgICAgICBib29sIGlzMzJiaXQoKSBjb25zdCB7IHJldHVybiBtX2JtcEluZm8u
aXMzMmJpdCgpOyB9CisgICAgICAgIGJvb2wgdG8xNmJpdCgpOworICAgICAgICBib29sIGhhc0Fs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQorICAgICAgICB2b2lkIHNldEhhc0Fs
cGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9CisgICAgICAgIGJvb2wgZW5z
dXJlSGFuZGxlKCk7CisgICAgICAgIEhCSVRNQVAgZ2V0SGFuZGxlKCkgeyByZXR1cm4gbV9oYml0
bWFwOyB9CisgICAgICAgIEhCSVRNQVAgY3JlYXRlSGFuZGxlKHZvaWQqKiBwaXhlbHMsIEJpdG1h
cEluZm8qIGJtcEluZm8sIGludCBoID0gLTEsIGJvb2wgdXNlMTZiaXQgPSB0cnVlKSBjb25zdDsK
KyAgICAgICAgYm9vbCB1c2VzVHJhbnNwYXJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
c1RyYW5zcGFyZW50Q29sb3I7IH0KKyAgICAgICAgQ09MT1JSRUYgdHJhbnNwYXJlbnRDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNwYXJlbnRDb2xvcjsgfQorICAgICAgICB2b2lkIHNldFRy
YW5zcGFyZW50Q29sb3IoQ09MT1JSRUYgYykKKyAgICAgICAgeworICAgICAgICAgICAgbV91c2Vz
VHJhbnNwYXJlbnRDb2xvciA9IHRydWU7CisgICAgICAgICAgICBtX3RyYW5zcGFyZW50Q29sb3Ig
PSBjOworICAgICAgICB9CisgICAgICAgIGJvb2wgY2FuVXNlRElCaXRzKCkgY29uc3QgeyByZXR1
cm4gIWhhc0FscGhhKCkgJiYgIXVzZXNUcmFuc3BhcmVudENvbG9yKCk7IH0KKworICAgICAgICBI
QklUTUFQIGNsaXBCaXRtYXAoY29uc3QgSW50UmVjdCYgcmVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgdXNlQWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRt
YXBJbmZvJiBibXBJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZComIHBpeGVs
cyk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCaXRtYXA+IGNsaXBCaXRtYXAoY29uc3Qg
SW50UmVjdCYgcmVjdCwgYm9vbCB1c2VBbHBoYSk7CisKKyAgICAgICAgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApOworICAgICAgICB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dEluLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1Nv
dXJjZVNpemUpOworICAgICAgICB2b2lkIGRyYXcoSERDLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCk7
CisgICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oSERDLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKKworICAgICAgICB0eXBlZGVm
IHZvaWQgKCpEcmF3UGF0dGVybkZ1bmMpKFNoYXJlZEJpdG1hcCogYm1wLCBIREMsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpOwor
ICAgICAgICB0eXBlZGVmIGJvb2wgKCpEcmF3SW1hZ2VGdW5jKSAoU2hhcmVkQml0bWFwKiBibXAs
IEhEQywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApOworCisgICAgICAgIHN0YXRpYyBEcmF3UGF0dGVy
bkZ1bmMgc2V0RHJhd1BhdHRlcm5GdW5jKERyYXdQYXR0ZXJuRnVuYyBmdW5jKTsKKyAgICAgICAg
c3RhdGljIERyYXdJbWFnZUZ1bmMgc2V0RHJhd0ltYWdlRnVuYyhEcmF3SW1hZ2VGdW5jIGZ1bmMp
OworCisgICAgICAgIGNsYXNzIERDUHJvdmlkZXIgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICB2aXJ0dWFsIEhEQyBnZXREQyhTaGFyZWRCaXRtYXAqLCB1bnNpZ25lZCoga2V5MSwgdW5z
aWduZWQqIGtleTIpOworICAgICAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VEQyhTaGFyZWRC
aXRtYXAqLCBIREMgaGRjLCB1bnNpZ25lZCBrZXkxLCB1bnNpZ25lZCBrZXkyKTsKKyAgICAgICAg
fTsKKworICAgICAgICBzdGF0aWMgRENQcm92aWRlciogbV9kY1Byb3ZpZGVyOworCisgICAgICAg
IEhEQyBnZXREQyh1bnNpZ25lZCoga2V5MSwgdW5zaWduZWQqIGtleTIpIHsgcmV0dXJuIG1fZGNQ
cm92aWRlci0+Z2V0REModGhpcywga2V5MSwga2V5Mik7IH0KKyAgICAgICAgdm9pZCByZWxlYXNl
REMoSERDIGhkYywgdW5zaWduZWQga2V5MSwgdW5zaWduZWQga2V5MikgeyBtX2RjUHJvdmlkZXIt
PnJlbGVhc2VEQyh0aGlzLCBoZGMsIGtleTEsIGtleTIpOyB9CisKKyAgICAgICAgY2xhc3MgRENI
b2xkZXIgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBEQ0hvbGRlcihTaGFyZWRCaXRt
YXAqIGJtcCA9IDApIHsgX3NldChibXApOyB9CisgICAgICAgICAgICB+RENIb2xkZXIoKSB7IF9j
bGVhcigpOyB9CisgICAgICAgICAgICB2b2lkIHNldChTaGFyZWRCaXRtYXAqIGJtcCA9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2NsZWFyKCk7CisgICAgICAgICAgICAgICAg
X3NldChibXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSERDIGdldCgpIGNvbnN0IHsg
cmV0dXJuIG1faGRjOyB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBEQ0hvbGRlciYg
b3BlcmF0b3I9KGNvbnN0IERDSG9sZGVyJik7CisgICAgICAgICAgICBEQ0hvbGRlcihjb25zdCBE
Q0hvbGRlciYpOworICAgICAgICAgICAgdm9pZCBfY2xlYXIoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChtX2hkYykKKyAgICAgICAgICAgICAgICAgICAgbV9iaXRtYXAtPnJl
bGVhc2VEQyhtX2hkYywgbV9rZXkxLCBtX2tleTIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdm9pZCBfc2V0KFNoYXJlZEJpdG1hcCogYm1wKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1fYml0bWFwID0gYm1wOworICAgICAgICAgICAgICAgIG1faGRjID0gYm1wID8gYm1w
LT5nZXREQygmbV9rZXkxLCAmbV9rZXkyKSA6IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBTaGFyZWRCaXRtYXAqIG1fYml0bWFwOworICAgICAgICAgICAgSERDIG1faGRjOworICAgICAg
ICAgICAgdW5zaWduZWQgbV9rZXkxOworICAgICAgICAgICAgdW5zaWduZWQgbV9rZXkyOworICAg
ICAgICB9OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgU2hhcmVkQml0bWFwKGJv
b2wgaXMxNmJpdCwgaW50IHcsIGludCBoLCBib29sIGluaXRQaXhlbHMpOworICAgICAgICBleHBs
aWNpdCBTaGFyZWRCaXRtYXAoY29uc3QgQml0bWFwSW5mbyYgYm1wSW5mbywgSEJJVE1BUCBoYm1w
LCB2b2lkKiBwaXhlbHMpOworICAgICAgICBCaXRtYXBJbmZvIG1fYm1wSW5mbzsKKyAgICAgICAg
aW50IG1fcmVmZXJlbmNlOworICAgICAgICBIQklUTUFQIG1faGJpdG1hcDsKKyAgICAgICAgdm9p
ZCogbV9waXhlbHM7CisgICAgICAgIENPTE9SUkVGIG1fdHJhbnNwYXJlbnRDb2xvcjsKKyAgICAg
ICAgaW50IG1fdmFsaWRIZWlnaHQ7CisgICAgICAgIGJvb2wgbV9sb2NrZWQ7CisgICAgICAgIGJv
b2wgbV91c2VzVHJhbnNwYXJlbnRDb2xvcjsKKyAgICAgICAgYm9vbCBtX2hhc0FscGhhOworICAg
IH07CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34783</attachid>
            <date>2009-08-13 13:58:48 -0700</date>
            <delta_ts>2009-08-14 09:57:33 -0700</delta_ts>
            <desc>3) able to directly write to scaled buffer</desc>
            <filename>27561_2.patch</filename>
            <type>text/plain</type>
            <size>13408</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWE3MjU3Ni4uMmI5YzI0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzNCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIEltYWdlIERlY29kZXIgZW5oYW5jZW1lbnQ6IGFibGUg
dG8gZGlyZWN0bHkgd3JpdGUKKyAgICAgICAgdG8gc2NhbGVkIG91dHB1dCBidWZmZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NTYxCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0U2NhbGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjp1cHBlckJvdW5kU2NhbGVkWCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
Omxvd2VyQm91bmRTY2FsZWRYKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2Nh
bGVkWSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNpemVO
b3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJh
bWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2Rl
ZFJvdyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmRlY29kZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKworMjAwOS0wOC0xMyAg
WW9uZyBMaSAgPHlvbmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEltYWdlIERlY29kZXIgZW5oYW5jZW1lbnQ6IHVz
ZSBJbWFnZUZyYW1lU2luayBpbnN0ZWFkCiAgICAgICAgIG9mIFJCR0EzMkJ1ZmZlcgogICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc1NjEKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggN2NmMzRhMi4uYmUwMTU0OSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTEyNyw4ICsx
MjcsMTMgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUg
ZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29k
ZXIgcGx1Z2luLgogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRv
IGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAg
IC8vIG1hZGUuCi0gICAgaWYgKCFtX2RlY29kZXIpCisgICAgaWYgKCFtX2RlY29kZXIpIHsKICAg
ICAgICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSk7CisjaWYgVVNF
KElNQUdFRlJBTUVTSU5LKQorICAgICAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICAgICAgbV9k
ZWNvZGVyLT5zZXRNYXhOdW1QaXhlbHMoMTAyNCAqIDEwMjQpOworI2VuZGlmCisgICAgfQogCiAg
ICAgaWYgKG1fZGVjb2RlcikKICAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERh
dGFSZWNlaXZlZCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0MWVmNQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmIFVTRShJTUFHRUZSQU1F
U0lOSykKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgor
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSB7CisJZW51bSBNYXRjaFR5cGV7CisJCUV4YWN0LAorCQlVcHBlckJvdW5kLAorCQlMb3dlckJv
dW5kCisJfTsKK30KKwordGVtcGxhdGUgPE1hdGNoVHlwZSB0eXBlPiBzdGF0aWMgaW50IGdldFNj
YWxlZFZhbHVlKGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1ZXMsIGludCBvcmlnLCBpbnQg
c2VhcmNoU3RhcnQpCit7CisJaW50IHNpemUgPSBzY2FsZWRWYWx1ZXMuc2l6ZSgpOworICAgIGNv
bnN0IGludCogZGF0YVN0YXJ0ID0gc2NhbGVkVmFsdWVzLmRhdGEoKTsKKyAgICBjb25zdCBpbnQq
IGRhdGFFbmQgPSBkYXRhU3RhcnQgKyBzaXplOworICAgIGNvbnN0IGludCogcG9zID0gc3RkOjps
b3dlcl9ib3VuZChkYXRhU3RhcnQgKyBzZWFyY2hTdGFydCwgZGF0YUVuZCwgb3JpZyk7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRXhhY3Q6CisgICAgICAgICAgICByZXR1cm4g
cG9zICE9IGRhdGFFbmQgJiYgKnBvcyA9PSBvcmlnID8gcG9zIC0gZGF0YVN0YXJ0IDogLTE7Cisg
ICAgICAgIGNhc2UgTG93ZXJCb3VuZDoKKyAgICAgICAgICAgIHJldHVybiBwb3MgIT0gZGF0YUVu
ZCAmJiAqcG9zID09IG9yaWcgPyBwb3MgLSBkYXRhU3RhcnQgOiBwb3MgLSBkYXRhU3RhcnQgLSAx
OworICAgICAgICBjYXNlIFVwcGVyQm91bmQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gcG9zICE9IGRhdGFFbmQgPyBwb3MgLSBkYXRhU3RhcnQgOiAtMTsKKyAgICB9Cit9
CisKK2ludCBJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRYKGludCBvcmlnWCwgaW50IHNl
YXJjaFN0YXJ0KQoreworCXJldHVybiBnZXRTY2FsZWRWYWx1ZTxVcHBlckJvdW5kPihtX3NjYWxl
ZENvbHVtbnMsIG9yaWdYLCBzZWFyY2hTdGFydCk7Cit9CisKK2ludCBJbWFnZURlY29kZXI6Omxv
d2VyQm91bmRTY2FsZWRYKGludCBvcmlnWCwgaW50IHNlYXJjaFN0YXJ0KQoreworCXJldHVybiBn
ZXRTY2FsZWRWYWx1ZTxMb3dlckJvdW5kPihtX3NjYWxlZENvbHVtbnMsIG9yaWdYLCBzZWFyY2hT
dGFydCk7Cit9CisKK2ludCBJbWFnZURlY29kZXI6OnNjYWxlZFkoaW50IG9yaWdZLCBpbnQgc2Vh
cmNoU3RhcnQpCit7CisJcmV0dXJuIGdldFNjYWxlZFZhbHVlPEV4YWN0PihtX3NjYWxlZFJvd3Ms
IG9yaWdZLCBzZWFyY2hTdGFydCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVyOjpwcmVwYXJlU2Nh
bGVEYXRhSWZOZWNlc3NhcnkoKSAKK3sKKwlpbnQgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKwlp
bnQgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOworCWludCBudW1QaXhlbHMgPSBoZWlnaHQgKiB3
aWR0aDsKKyAgICBpZiAobV9tYXhOdW1QaXhlbHMgPD0gMCB8fCBudW1QaXhlbHMgPD0gbV9tYXhO
dW1QaXhlbHMpIHsKKwkJbV9zY2FsZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworCW1fc2NhbGVkID0gdHJ1ZTsKKwlkb3VibGUgc2hyaW5rID0gc3FydChtX21heE51bVBpeGVs
cyAvIChkb3VibGUpbnVtUGl4ZWxzKTsKKwlkb3VibGUgem9vbSA9IDEuIC9zaHJpbms7CisJbV9z
Y2FsZWRDb2x1bW5zLnJlc2VydmVDYXBhY2l0eSh3aWR0aCAqIHNocmluayArIDAuNSk7CisJZm9y
IChpbnQgc2NhbGVkWCA9IDA7OykgeworCQlpbnQgeCA9IHNjYWxlZFggKiB6b29tICsgMC41Owor
CQlpZiAoeCA8IHdpZHRoKSB7CisJCQltX3NjYWxlZENvbHVtbnMuYXBwZW5kKHgpOworCQkJKytz
Y2FsZWRYOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwltX3NjYWxlZFJvd3MucmVzZXJ2ZUNh
cGFjaXR5KGhlaWdodCAqIHNocmluayArIDAuNSk7CisJZm9yIChpbnQgc2NhbGVkWSA9IDA7Oykg
eworCQlpbnQgeSA9IHNjYWxlZFkgKiB6b29tICsgMC41OworCQlpZiAoeSA8IGhlaWdodCkgewor
CQkJbV9zY2FsZWRSb3dzLmFwcGVuZCh5KTsKKwkJCSsrc2NhbGVkWTsKKwkJfSBlbHNlCisJCQli
cmVhazsKKwl9Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShJTUFHRUZSQU1FU0lOSykKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCmluZGV4IGMzM2NmZGEuLjNhOTdkMDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMzE1LDYg
KzMxNSw5IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXVlcnksIHVu
c2lnbmVkIGhhbHRBdEZyYW1lKQogLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCiBi
b29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0KQogeworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBwcmVwYXJlU2Nh
bGVEYXRhSWZOZWNlc3NhcnkoKTsKKyNlbmRpZgogICAgIHJldHVybiBzZXRTaXplKHdpZHRoLCBo
ZWlnaHQpOwogfQogCkBAIC0zNDcsNyArMzUwLDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKICAgICAgICAgZnJhbWVSZWN0Lndp
ZHRoKCkgPCBtX3NpemUud2lkdGgoKSB8fAogICAgICAgICBmcmFtZVJlY3QuaGVpZ2h0KCkgPCBt
X3NpemUuaGVpZ2h0KCkpOwogCi0gICAgaWYgKCFidWZmZXIuc2V0U2l6ZShtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCBmYWxzZSkpIHsKKyAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1
ZmZlciBub3cgdG8gdGhlIGNvcnJlY3Qgd2lkdGgvaGVpZ2h0IGFuZCB0aGVuCisgICAgLy8gaW5p
dGlhbGl6ZSBwb3J0aW9ucyBvZiBpdCBpZiBuZWVkZWQuCisgICAgaW50IHNocnVua1dpZHRoID0g
bV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnMuc2l6ZSgpIDogbV9zaXplLndpZHRoKCk7CisgICAg
aW50IHNocnVua0hlaWdodCA9IG1fc2NhbGVkID8gbV9zY2FsZWRSb3dzLnNpemUoKSA6IG1fc2l6
ZS5oZWlnaHQoKTsKKworICAgIGlmICghYnVmZmVyLnNldFNpemUoc2hydW5rV2lkdGgsIHNocnVu
a0hlaWdodCwgZmFsc2UpKSB7CiAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ4Niw2ICs0OTQsMTggQEAgdm9pZCBHSUZJbWFnZURlY29k
ZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsCiAgICAgaW50IGRlc3RZID0g
bV9yZWFkZXItPmZyYW1lWU9mZnNldCgpICsgcm93TnVtYmVyOwogICAgIGludCBkZXN0WCA9IG1f
cmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKICAgICBpbnQgZGVzdEVuZFggPSBkZXN0WCArIHNvdXJj
ZVdpZHRoOworICAgIGlmIChtX3NjYWxlZCkgeworICAgICAgICBkZXN0WSA9IHNjYWxlZFkoZGVz
dFkpOworICAgICAgICBpZiAoZGVzdFkgPCAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkZXN0WCA9IHVwcGVyQm91bmRTY2FsZWRYKGRlc3RYKTsKKyAgICAgICAgaWYgKGRlc3RYIDwg
MCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVzdEVuZFggPSBsb3dlckJvdW5kU2Nh
bGVkWChkZXN0RW5kWCAtIDEsIGRlc3RYICsgMSk7CisgICAgICAgIGlmIChkZXN0RW5kWCA8IGRl
c3RYKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICArK2Rlc3RFbmRYOworICAgIH0KIAog
ICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKICAgICB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsK
QEAgLTUwNSwxMCArNTI1LDE1IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJv
dyh1bnNpZ25lZCBmcmFtZUluZGV4LAogCiAgICAgd2hpbGUgKGN1cnJEc3QgPCBkc3RFbmQpIHsK
ICAgICAgICAgdW5zaWduZWQgY2hhciBwaXhlbDsKLQotICAgICAgICBpZiAoY3VycmVudFJvd0J5
dGUgPT0gcm93RW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHBpeGVsID0gKmN1cnJl
bnRSb3dCeXRlKys7CisgICAgICAgIGlmIChtX3NjYWxlZCkgeworICAgICAgICAgICAgaW50IHNv
dXJjZVggPSBtX3NjYWxlZENvbHVtbnNbY3VyckRzdCAtIGRzdF0gLSBtX3JlYWRlci0+ZnJhbWVZ
T2Zmc2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoc291cmNlWCA+PSAwICYmIHNvdXJjZVggPCBz
b3VyY2VXaWR0aCk7CisgICAgICAgICAgICBwaXhlbCA9IHJvd0J1ZmZlcltzb3VyY2VYXTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Um93Qnl0ZSA9PSByb3dFbmQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBwaXhlbCA9ICpjdXJyZW50Um93
Qnl0ZSsrOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHBpeGVsID49IGNvbG9yTWFwU2l6ZSkK
ICAgICAgICAgICAgIHBpeGVsID0gdHJhbnNwYXJlbnRDb2xvcjsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApp
bmRleCAxNzk5N2YzLi4wYzZhYjVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCkBAIC01NTcsNyArNTU3
LDExIEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAvLyBS
ZXNpemUgdG8gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGltYWdlLgogICAgIEltYWdlRnJh
bWVTaW5rKiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci0+
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlmICghYnVm
ZmVyLT5zZXRTaXplKG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHRydWUpKSB7Cisg
ICAgICAgIGludCBzaHJ1bmtXaWR0aCA9IG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUo
KSA6IG1fc2l6ZS53aWR0aCgpOworICAgICAgICBpbnQgc2hydW5rSGVpZ2h0ID0gbV9zY2FsZWQg
PyBtX3NjYWxlZFJvd3Muc2l6ZSgpIDogbV9zaXplLmhlaWdodCgpOworCisgICAgICAgIC8vIExl
dCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUgY29ycmVjdCB3aWR0aC9oZWlnaHQuCisg
ICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNocnVua1dpZHRoLCBzaHJ1bmtIZWlnaHQsIHRy
dWUpKSB7CiAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KQEAgLTU4Myw3ICs1ODcsMjAgQEAgYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKLSAgICAgICAgeworICAgICAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAgICAgICAgIGlu
dCBkZXN0WSA9IHNjYWxlZFkoc291cmNlWSk7CisgICAgICAgICAgICBpZiAoZGVzdFkgPCAwKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCog
ZHN0ID0gKHVuc2lnbmVkIHNob3J0KilidWZmZXItPmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci0+
YnVmZmVyV2lkdGgoKTsKKyAgICAgICAgICAgIEpTQU1QTEUgKmpCZWdpbiA9IHNhbXBsZXNbMF07
CisgICAgICAgICAgICBpbnQgY29sdW1ucyA9IG1fc2NhbGVkQ29sdW1ucy5zaXplKCk7CisgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvbHVtbnM7ICsreCkgeworICAgICAgICAgICAg
ICAgIEpTQU1QTEUgKmoxID0gakJlZ2luICsgbV9zY2FsZWRDb2x1bW5zW3hdICogMzsgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQjE2KCpkc3Qr
KywgajFbMF0sIGoxWzFdLCBqMVsyXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZm
ZXItPmVuc3VyZUhlaWdodChkZXN0WSArIDEpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQqIGRzdCA9ICh1bnNpZ25lZCBzaG9ydCopYnVmZmVyLT5ieXRlcygp
ICsgc291cmNlWSAqIGJ1ZmZlci0+YnVmZmVyV2lkdGgoKTsKICAgICAgICAgICAgIEpTQU1QTEUg
KmoxID0gc2FtcGxlc1swXTsKICAgICAgICAgICAgIEpTQU1QTEUgKmpFbmQgPSBqMSArIGluZm8t
Pm91dHB1dF93aWR0aCArIGluZm8tPm91dHB1dF93aWR0aCArIGluZm8tPm91dHB1dF93aWR0aDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5oCmluZGV4IDY3NGM3ZjYuLmZmZWRkNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAt
NzIsNiArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgbV9zaXpl
QXZhaWxhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJlcGFyZVNjYWxlRGF0YUlm
TmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCBlNjI0NmFlLi4zNmVkYzBhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAg
LTI5OSw2ICsyOTksOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkK
ICAgICAKICAgICAvLyBXZSBjYW4gZmlsbCBpbiB0aGUgc2l6ZSBub3cgdGhhdCB0aGUgaGVhZGVy
IGlzIGF2YWlsYWJsZS4KICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkp
IHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIHByZXBhcmVTY2FsZURhdGFJZk5l
Y2Vzc2FyeSgpOworI2VuZGlmCiAgICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkg
ewogICAgICAgICAgICAgLy8gU2l6ZSB1bnJlYXNvbmFibGUsIGJhaWwgb3V0LgogICAgICAgICAg
ICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CkBAIC0zODAsNyArMzgzLDkgQEAgdm9pZCBQTkdJ
bWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2ln
bmVkIHJvd0luZGV4LAogICAgICAgICByZXR1cm47CiAgICAgSW1hZ2VGcmFtZVNpbmsmIGJ1ZmZl
ciA9ICptX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZSht
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAhcmVhZGVyKCktPmhhc0FscGhhKCkpKSB7
CisgICAgICAgIGludCB3aWR0aCA9IG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6
IG1fc2l6ZS53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gbV9zY2FsZWQgPyBtX3NjYWxl
ZFJvd3Muc2l6ZSgpIDogbV9zaXplLmhlaWdodCgpOworICAgICAgICBpZiAoIWJ1ZmZlci5zZXRT
aXplKHdpZHRoLCBoZWlnaHQsICFyZWFkZXIoKS0+aGFzQWxwaGEoKSkpIHsKICAgICAgICAgICAg
IG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDAx
LDYgKzQwNiwxMSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVk
IGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGludCBkZXN0WSA9IHJvd0luZGV4OworICAgIGlmIChtX3NjYWxlZCkgeworICAgICAgICBk
ZXN0WSA9IHNjYWxlZFkoZGVzdFkpOworICAgICAgICBpZiAoZGVzdFkgPCAwKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KIAogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IHJlYWRlcigpLT5wbmdQ
dHIoKTsKICAgICBib29sIGhhc0FscGhhID0gcmVhZGVyKCktPmhhc0FscGhhKCk7CkBAIC00MTIs
NyArNDIyLDI5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQg
Y2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAgcm93ID0gcm93QnVm
ZmVyOwogCiAgICAgLy8gQ29weSB0aGUgZGF0YSBpbnRvIG91ciBidWZmZXIuCi0gICAgeworICAg
IGlmIChtX3NjYWxlZCkgeworICAgICAgICBpbnQgY29sdW1ucyA9IG1fc2NhbGVkQ29sdW1ucy5z
aXplKCk7CisgICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gaWYgKCFoYXNBbHBoYSkKKyAgICAgICAg
aWYgKGJ1ZmZlci5pczE2Yml0KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBkc3Qx
NiA9ICh1bnNpZ25lZCBzaG9ydCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci5idWZm
ZXJXaWR0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyBtX3NjYWxlZENvbHVt
bnNbaV0gKiAzOworICAgICAgICAgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0IxNigqZHN0
MTYrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCogZHN0ID0gKHVuc2lnbmVkKilidWZm
ZXIuYnl0ZXMoKSArIGRlc3RZICogYnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgICAgICBi
b29sIHNhd0FscGhhID0gYnVmZmVyLmhhc0FscGhhKCk7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvbHVtbnM7IGkrKykgeworICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhl
bCA9IHJvdyArIG1fc2NhbGVkQ29sdW1uc1tpXSAqIDQ7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYWxwaGEgPSBwaXhlbFszXTsKKyAgICAgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0
UkdCQSgqZHN0KyssIHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNhd0FscGhhICYmIGFscGhhIDwgMjU1KSB7CisgICAgICAgICAgICAg
ICAgICAgIHNhd0FscGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhh
c0FscGhhKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CiAgICAgICAgIGludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwogICAg
ICAgICAvLyBlcXVpdmFsZW50IHRvIGlmICghaGFzQWxwaGEpCiAgICAgICAgIGlmIChidWZmZXIu
aXMxNmJpdCgpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34784</attachid>
            <date>2009-08-13 13:59:26 -0700</date>
            <delta_ts>2009-08-14 09:57:43 -0700</delta_ts>
            <desc>4) able to read from segmented buffer or data stream</desc>
            <filename>28272_3.patch</filename>
            <type>text/plain</type>
            <size>12340</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRmNGFhYy4uYTMwMDhiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0xMyAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJTkNFIFBPUlQ6IEltYWdlRnJhbWVTaW5rIGlzIGEgcmVwbGFjZW1l
bnQgb2YKKyAgICAgICAgUkdCQTMyQnVmZmVyIHdoaWNoIHN1cHBvcnRzIGJvdGggMTZiaXQgYW5k
IDMyYml0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODI3MgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmsu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNp
bmtXaW5jZS5jcHA6IEFkZGVkLgorCiAyMDA5LTA4LTEzICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxv
Y2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmsuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmsuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFiOTdkCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUZyYW1lU2luay5oCkBAIC0wLDAg
KzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGkgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgSU1B
R0VfRlJBTUVfU0lOS19IXworI2RlZmluZSBJTUFHRV9GUkFNRV9TSU5LX0hfCisKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIG5hbWVzcGFjZSBSR0JB
MzJCdWZmZXIgeworICAgICAgICBlbnVtIEZyYW1lU3RhdHVzIHsKKyAgICAgICAgICAgIEZyYW1l
RW1wdHksCisgICAgICAgICAgICBGcmFtZVBhcnRpYWwsCisgICAgICAgICAgICBGcmFtZUNvbXBs
ZXRlCisgICAgICAgIH07CisgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhvZCB7CisgICAg
ICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwgbWFr
ZSBzdXJlIHlvdSBhdWRpdCBhbGwKKyAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBzb21lIHVzZXJz
IG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCisgICAgICAgICAg
ICBEaXNwb3NlTm90U3BlY2lmaWVkID0gMCwgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVi
dWZmZXIKKyAgICAgICAgICAgIERpc3Bvc2VLZWVwID0gMSwgICAgICAgICAgICAgICAvLyBMZWF2
ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgorICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29s
b3IgPSAyLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50CisgICAgICAgICAgICBEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXMgPSAzLCAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJh
bWVidWZmZXIgY29udGVudHMKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBjbGFzcyBJbWFnZUZy
YW1lU2luayB7CisgICAgcHVibGljOgorICAgICAgICBJbWFnZUZyYW1lU2luayhib29sIGNhbkZy
ZWVCdWZmZXIpCisgICAgICAgICAgICA6IG1fMTZiaXQoZmFsc2UpCisgICAgICAgICAgICAsIG1f
aW1hZ2VXaWR0aCgwKQorICAgICAgICAgICAgLCBtX2J1ZmZlcldpZHRoKDApCisgICAgICAgICAg
ICAsIG1faGVpZ2h0KDApCisgICAgICAgICAgICAsIG1fZXhwZWN0ZWRIZWlnaHQoMCkKKyAgICAg
ICAgICAgICwgbV9zdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICAgICAg
LCBtX2Rpc3Bvc2FsTWV0aG9kKFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU5vdFNwZWNpZmllZCkKKyAg
ICAgICAgICAgICwgbV9kdXJhdGlvbigwKQorICAgICAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNl
KQorICAgICAgICAgICAgLCBtX2NhbkZyZWVCdWZmZXIoY2FuRnJlZUJ1ZmZlcikKKyAgICAgICAg
ICAgICwgbV9zaG91bGRGcmVlQnVmZmVyKGZhbHNlKQorICAgICAgICAgICAgLCBtX3VzZXNUcmFu
c3BhcmVudENvbG9yKGZhbHNlKQorICAgICAgICAgICAgLCBtX3RyYW5zcGFyZW50Q29sb3IoMCkK
KyAgICAgICAgICAgICwgbV9jb21wb3NpdGVkV2l0aFByZXZpb3VzRnJhbWUoZmFsc2UpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5JbWFnZUZyYW1lU2luaygpIHsgZnJlZUJ1ZmZl
cigpOyB9CisKKyAgICAgICAgY29uc3Qgdm9pZCogYnl0ZXMoKSBjb25zdDsKKyAgICAgICAgdm9p
ZCogYnl0ZXMoKTsKKyAgICAgICAgYm9vbCBhbGxvY2F0ZUJ1ZmZlcigpOworICAgICAgICBOYXRp
dmVJbWFnZVB0ciBnZXRGcmFtZSgpOworICAgICAgICBib29sIGlzQnVmZmVyUmVhZHkoKSBjb25z
dDsKKyAgICAgICAgdm9pZCBmcmVlQnVmZmVyKCk7CisKKyAgICAgICAgYm9vbCBzaG91bGRGcmVl
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRGcmVlQnVmZmVyOyB9CisgICAgICAgIGJv
b2wgY2FuRnJlZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FuRnJlZUJ1ZmZlcjsgfQorICAg
ICAgICBib29sIGlzMTZiaXQoKSBjb25zdCB7IHJldHVybiBtXzE2Yml0OyB9CisgICAgICAgIGNv
bnN0IEludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICAgICAgdW5z
aWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICAgICAgdW5zaWdu
ZWQgYnVmZmVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcldpZHRoOyB9CisgICAgICAg
IHVuc2lnbmVkIGltYWdlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KKyAg
ICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBt
X3N0YXR1czsgfQorICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVyYXRpb247IH0KKyAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
QWxwaGE7IH0KKyAgICAgICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyV2lkdGggKiBtX2V4cGVjdGVkSGVpZ2h0IDw8IChtXzE2Yml0ID8gMSA6IDIpOyB9CisK
KyAgICAgICAgdm9pZCBzZXRDYW5GcmVlQnVmZmVyKGJvb2wgY2FuKTsKKyAgICAgICAgYm9vbCBz
ZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBpczE2Yml0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBtXzE2Yml0ID0gaXMxNmJpdDsKKyAgICAgICAgICAgIG1faW1hZ2VXaWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgbV9leHBlY3RlZEhlaWdodCA9IGhlaWdodDsKKyAgICAgICAg
ICAgIHJldHVybiBhbGxvY2F0ZUJ1ZmZlcigpOworICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBlbnN1
cmVIZWlnaHQoaW50IHJvd0luZGV4KTsKKyAgICAgICAgdm9pZCBzZXRTdGF0dXMoUkdCQTMyQnVm
ZmVyOjpGcmFtZVN0YXR1cyBzKSB7IG1fc3RhdHVzID0gczsgfQorICAgICAgICB2b2lkIHNldER1
cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAg
ICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9
CisgICAgICAgIGJvb2wgdXNlc1RyYW5zcGFyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZXNUcmFuc3BhcmVudENvbG9yOyB9CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHRyYW5zcGFyZW50
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zcGFyZW50Q29sb3I7IH0KKyAgICAgICAgdm9p
ZCBzZXRUcmFuc3BhcmVudENvbG9yKHVuc2lnbmVkIHNob3J0IGNvbG9yKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX3RyYW5zcGFyZW50Q29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgIG1fdXNl
c1RyYW5zcGFyZW50Q29sb3IgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZvaWQgY2xlYXJU
cmFuc3BhcmVudENvbG9yKCkgeyBtX3VzZXNUcmFuc3BhcmVudENvbG9yID0gZmFsc2U7IH0KKyAg
ICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQorICAgICAgICB2b2lkIHNldERpc3Bv
c2FsTWV0aG9kKFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9k
aXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAgICBib29sIGNvbXBvc2l0ZWRXaXRoUHJl
dmlvdXNGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlZFdpdGhQcmV2aW91c0ZyYW1l
OyB9CisgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlZFdpdGhQcmV2aW91c0ZyYW1lKCkgeyBtX2Nv
bXBvc2l0ZWRXaXRoUHJldmlvdXNGcmFtZSA9IHRydWU7IH0KKworICAgICAgICBzdGF0aWMgdm9p
ZCBzZXRSR0JBKHVuc2lnbmVkJiBwb3MsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIHN0b3JlIHRoaXMg
ZGF0YSBwcmUtbXVsdGlwbGllZC4KKyAgICAgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgICAg
ICBwb3MgPSAociA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWxw
aGFQZXJjZW50ID0gYSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICAgICAgciA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgYiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiICogYWxwaGFQZXJjZW50KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcG9zID0gKGEgPDwgMjQgfCByIDw8IDE2IHwg
ZyA8PCA4IHwgYik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
dm9pZCBzZXRSR0IxNih1bnNpZ25lZCBzaG9ydCYgcG9zLCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiKQorICAgICAgICB7CisjaWYgSU1BR0VfTk9fQUxQSEFfVVNFX1JHQjU1NQor
ICAgICAgICAgICAgcG9zID0gdW5zaWduZWQgc2hvcnQoKHIgPj4gMyA8PCAxMCkgfCAoZyA+PiAz
IDw8IDUpIHwgKGIgPj4gMykpOworI2Vsc2UKKyAgICAgICAgICAgIHBvcyA9IHVuc2lnbmVkIHNo
b3J0KChyID4+IDMgPDwgMTEpIHwgKGcgPj4gMiA8PCA1KSB8IChiID4+IDMpKTsKKyNlbmRpZgor
ICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEltYWdlRnJhbWVTaW5rKiBjcmVhdGVJbnN0YW5j
ZShib29sIGNhbkZyZWVCdWZmZXIpOworICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnN0YW5j
ZShJbWFnZUZyYW1lU2luayopOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBJbnRSZWN0IG1f
cmVjdDsgICAgLy8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRo
aW4gdGhlIG92ZXJhbGwgYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZy
YW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3
YXMgc21hbGxlciB0aGFuIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCisgICAgICAgIGludCBtX2lt
YWdlV2lkdGg7CisgICAgICAgIGludCBtX2J1ZmZlcldpZHRoOworICAgICAgICBpbnQgbV9oZWln
aHQ7IC8vIFRoZSBoZWlnaHQgKHRoZSBudW1iZXIgb2Ygcm93cyB3ZSd2ZSBmdWxseSBkZWNvZGVk
KS4KKyAgICAgICAgaW50IG1fZXhwZWN0ZWRIZWlnaHQ7CisgICAgICAgIFJHQkEzMkJ1ZmZlcjo6
RnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUgaXMgY29t
cGxldGVseSBmaW5pc2hlZCBkZWNvZGluZy4KKyAgICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZURp
c3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7IC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZy
YW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KKyAgICAgICAgdW5z
aWduZWQgbV9kdXJhdGlvbjsgLy8gVGhlIGFuaW1hdGlvbiBkZWxheS4KKyAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgbV90cmFuc3BhcmVudENvbG9yOyAvLyBwaXhlbCB2YWx1ZQorICAgICAgICBib29s
IG1fdXNlc1RyYW5zcGFyZW50Q29sb3I7CisgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsgLy8gV2hl
dGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlciBoYXZlIHRyYW5zcGFy
ZW5jeS4KKyAgICAgICAgYm9vbCBtX2NhbkZyZWVCdWZmZXI7CisgICAgICAgIGJvb2wgbV9zaG91
bGRGcmVlQnVmZmVyOworICAgICAgICBib29sIG1fMTZiaXQ7CisgICAgICAgIGJvb2wgbV9jb21w
b3NpdGVkV2l0aFByZXZpb3VzRnJhbWU7CisjaWYgUExBVEZPUk0oV0lOQ0UpCisgICAgICAgIFJl
ZlB0cjxTaGFyZWRCaXRtYXA+IG1fYm1wOworICAgICAgICB2b2lkIGZpbmlzaEJpdG1hcCgpOwor
I2VuZGlmCisgICAgfTsKKworfQorCisjZW5kaWYgLy8gSU1BR0VfRlJBTUVfU0lOS19IXwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUZyYW1lU2lua1dp
bmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFtZVNpbmtX
aW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzNGY5OAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VGcmFt
ZVNpbmtXaW5jZS5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVTaW5rLmgiCisKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaWYgSU1BR0Vf
Tk9fQUxQSEFfVVNFX1JHQjU1NQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb252ZXJ0MTZUb1JH
Qih1bnNpZ25lZCBzaG9ydCBwaXhlbCkKK3sKKyAgICB1bnNpZ25lZCByID0gKHBpeGVsID4+IDcp
ICYgMHhGODsKKyAgICB1bnNpZ25lZCBnID0gKHBpeGVsID4+IDIpICYgMHhGODsKKyAgICB1bnNp
Z25lZCBiID0gKHBpeGVsIDw8IDMpICYgMHhGODsKKyAgICByZXR1cm4gUkdCKHIsIGcsIGIpOwor
fQorI2Vsc2UgLy8gUkdCNTY1CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbnZlcnQxNlRvUkdC
KHVuc2lnbmVkIHNob3J0IHBpeGVsKQoreworICAgIHVuc2lnbmVkIHIgPSAocGl4ZWwgPj4gOCkg
JiAweEY4OworICAgIHVuc2lnbmVkIGcgPSAocGl4ZWwgPj4gMykgJiAweEZDOworICAgIHVuc2ln
bmVkIGIgPSAocGl4ZWwgPDwgMykgJiAweEY4OworICAgIHJldHVybiBSR0IociwgZywgYik7Cit9
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCB2b2lkKiBJbWFnZUZyYW1l
U2luazo6Ynl0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2JtcCA/IG1fYm1wLT5ieXRlcygp
IDogMDsKK30KKwordm9pZCogSW1hZ2VGcmFtZVNpbms6OmJ5dGVzKCkKK3sKKyAgICByZXR1cm4g
bV9ibXAgPyBtX2JtcC0+Ynl0ZXMoKSA6IDA7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZVNpbms6OmFs
bG9jYXRlQnVmZmVyKCkKK3sKKyAgICBmcmVlQnVmZmVyKCk7CisKKyAgICBpZiAobV9pbWFnZVdp
ZHRoIDw9IDAgfHwgbV9leHBlY3RlZEhlaWdodCA8PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAobV8xNmJpdCkgeworICAgICAgICBtX2J1ZmZlcldpZHRoID0gbV9pbWFnZVdp
ZHRoID4+IDEgPDwgMTsKKyAgICAgICAgaWYgKG1fYnVmZmVyV2lkdGggIT0gbV9pbWFnZVdpZHRo
KQorICAgICAgICAgICAgbV9idWZmZXJXaWR0aCArPSAyOworICAgIH0gZWxzZQorICAgICAgICBt
X2J1ZmZlcldpZHRoID0gbV9pbWFnZVdpZHRoOworCisgICAgTWVtb3J5QWxsb2NhdGlvbkNhbkZh
aWwgY2FuRmFpbDsKKworICAgIGlmIChtX2JtcCA9IFNoYXJlZEJpdG1hcDo6Y3JlYXRlSW5zdGFu
Y2UobV8xNmJpdCwgbV9pbWFnZVdpZHRoLCBtX2V4cGVjdGVkSGVpZ2h0LCB0cnVlKSkgeworICAg
ICAgICBtX2JtcC0+bG9jaygpOworICAgICAgICBtX2JtcC0+c2V0VmFsaWRIZWlnaHQoMCk7Cisg
ICAgICAgIGlmIChtXzE2Yml0ICYmIG1fdXNlc1RyYW5zcGFyZW50Q29sb3IgJiYgIW1fYm1wLT51
c2VzVHJhbnNwYXJlbnRDb2xvcigpKQorICAgICAgICAgICAgbV9ibXAtPnNldFRyYW5zcGFyZW50
Q29sb3IoY29udmVydDE2VG9SR0IobV90cmFuc3BhcmVudENvbG9yKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbWFnZUZyYW1l
U2luazo6aXNCdWZmZXJSZWFkeSgpIGNvbnN0IHsgcmV0dXJuICEhbV9ibXA7IH0KK3ZvaWQgSW1h
Z2VGcmFtZVNpbms6OmZyZWVCdWZmZXIoKQoreworICAgIGlmIChtX2JtcCkgeworICAgICAgICBp
ZiAoIW1fYm1wLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIGZpbmlzaEJpdG1hcCgpOworICAg
ICAgICBtX2JtcCA9IDA7CisgICAgfQorfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lU2lu
azo6Z2V0RnJhbWUoKQoreworICAgIGlmIChtX3N0YXR1cyA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
RW1wdHkgfHwgIW1fYm1wKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fYm1wLT5zZXRIYXNB
bHBoYShoYXNBbHBoYSgpKTsKKyAgICBtX3Nob3VsZEZyZWVCdWZmZXIgPSBtX3N0YXR1cyA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7CisgICAgaWYgKG1fY2FuRnJlZUJ1ZmZlciAmJiBt
X3Nob3VsZEZyZWVCdWZmZXIpCisgICAgICAgIGZpbmlzaEJpdG1hcCgpOworCisgICAgcmV0dXJu
IG1fYm1wOworfQorCit2b2lkIEltYWdlRnJhbWVTaW5rOjpzZXRDYW5GcmVlQnVmZmVyKGJvb2wg
Y2FuKQoreworICAgIG1fY2FuRnJlZUJ1ZmZlciA9IGNhbjsKKyAgICBpZiAobV9jYW5GcmVlQnVm
ZmVyICYmIG1fc2hvdWxkRnJlZUJ1ZmZlcikKKyAgICAgICAgZmluaXNoQml0bWFwKCk7Cit9CisK
K3ZvaWQgSW1hZ2VGcmFtZVNpbms6OmZpbmlzaEJpdG1hcCgpCit7CisgICAgaWYgKG1fYm1wICYm
IG1fYm1wLT5sb2NrZWQoKSkgeworICAgICAgICBtX2JtcC0+dW5sb2NrKCk7CisgICAgICAgIGlm
IChtX3VzZXNUcmFuc3BhcmVudENvbG9yKQorICAgICAgICAgICAgbV9ibXAtPnNldFRyYW5zcGFy
ZW50Q29sb3IoY29udmVydDE2VG9SR0IobV90cmFuc3BhcmVudENvbG9yKSk7CisgICAgICAgIGlm
ICghbV8xNmJpdCAmJiAoIW1faGFzQWxwaGEgfHwgbV91c2VzVHJhbnNwYXJlbnRDb2xvcikpIHsK
KyAgICAgICAgICAgIG1fYm1wLT5zZXRIYXNBbHBoYShmYWxzZSk7CisgICAgICAgICAgICBtXzE2
Yml0ID0gbV9ibXAtPnRvMTZiaXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV8xNmJpdCkK
KyAgICAgICAgICAgIHNldEhhc0FscGhhKGZhbHNlKTsKKyAgICAgICAgbV9ibXAtPnNldEhhc0Fs
cGhhKGhhc0FscGhhKCkpOworICAgIH0KK307CisKK3ZvaWQgSW1hZ2VGcmFtZVNpbms6OmVuc3Vy
ZUhlaWdodChpbnQgcm93SW5kZXgpCit7CisgICAgaWYgKHJvd0luZGV4ID4gbV9oZWlnaHQpIHsK
KyAgICAgICAgbV9oZWlnaHQgPSByb3dJbmRleDsKKyAgICAgICAgaWYgKG1fYm1wKQorICAgICAg
ICAgICAgbV9ibXAtPnNldFZhbGlkSGVpZ2h0KG1faGVpZ2h0KTsKKyAgICB9Cit9CisKK0ltYWdl
RnJhbWVTaW5rKiBJbWFnZUZyYW1lU2luazo6Y3JlYXRlSW5zdGFuY2UoYm9vbCBjYW5GcmVlQnVm
ZmVyKQoreworICAgIHJldHVybiBuZXcgSW1hZ2VGcmFtZVNpbmsoY2FuRnJlZUJ1ZmZlcik7Cit9
CisKK3ZvaWQgSW1hZ2VGcmFtZVNpbms6OmRlbGV0ZUluc3RhbmNlKEltYWdlRnJhbWVTaW5rKiBp
KQoreworICAgIGRlbGV0ZSBpOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34856</attachid>
            <date>2009-08-14 10:26:54 -0700</date>
            <delta_ts>2009-08-14 13:39:13 -0700</delta_ts>
            <desc>2) Use ImageFrameSink for JPEG, PNG, and GIF</desc>
            <filename>27561_using_framesink.patch</filename>
            <type>text/plain</type>
            <size>43464</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggMDQ2NTY3OS4u
NWVkZjIyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAg
LTI5LDEzICsyOSwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlU291
cmNlLmgiCiAKKy8vIEJNUCwgSUNPLCBYQk0gaGF2ZW4ndCBzdXBwb3J0ZWQgSW1hZ2VGcmFtZVNp
bmsgeWV0CisjaWYgIVVTRShJTUFHRUZSQU1FU0lOSykKICNpbmNsdWRlICJCTVBJbWFnZURlY29k
ZXIuaCIKLSNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJJQ09JbWFnZURl
Y29kZXIuaCIKKyNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIKKyNlbmRpZgorI2luY2x1ZGUg
IkdJRkltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKICNpbmNs
dWRlICJQTkdJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNs
dWRlICJYQk1JbWFnZURlY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Niw2
ICs2OSw5IEBAIEltYWdlRGVjb2RlciogY3JlYXRlRGVjb2Rlcihjb25zdCBWZWN0b3I8Y2hhcj4m
IGRhdGEpCiAgICAgICAgIHVDb250ZW50c1syXT09MHhGRikKICAgICAgICAgcmV0dXJuIG5ldyBK
UEVHSW1hZ2VEZWNvZGVyKCk7CiAKKyAgICAvLyBCTVAsIElDTywgWEJNIGhhdmVuJ3Qgc3VwcG9y
dGVkIEltYWdlRnJhbWVTaW5rIHlldAorI2lmICFVU0UoSU1BR0VGUkFNRVNJTkspCisKICAgICAv
LyBCTVAKICAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKICAgICAgICAg
cmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoKTsKQEAgLTgwLDYgKzg2LDggQEAgSW1hZ2VEZWNv
ZGVyKiBjcmVhdGVEZWNvZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKICAgICBpZiAobGVu
Z3RoID49IDggJiYgc3RybmNtcChjb250ZW50cywgIiNkZWZpbmUgIiwgOCkgPT0gMCkKICAgICAg
ICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKIAorI2VuZGlmIC8vICFVU0UoSU1BR0VG
UkFNRVNJTkspCisKICAgICAvLyBHaXZlIHVwLiBXZSBkb24ndCBrbm93IHdoYXQgdGhlIGhlY2sg
dGhpcyBpcy4KICAgICByZXR1cm4gMDsKIH0KQEAgLTE4Myw2ICsxOTEsMTQgQEAgTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAg
aWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiAwOwogCisjaWYgVVNFKElNQUdFRlJBTUVT
SU5LKQorICAgIEltYWdlRnJhbWVTaW5rKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVy
QXRJbmRleChpbmRleCk7CisKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gYnVmZmVyLT5nZXRGcmFtZSgpOworI2Vsc2UKICAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9
IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKICAgICBpZiAoIWJ1ZmZlciB8
fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xOTUsNiArMjExLDcgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgLy8gUmV0dXJuIHRoZSBidWZm
ZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuICBGb3Igc29tZSBwb3J0cywgdGhlIGRhdGEK
ICAgICAvLyBpcyBhbHJlYWR5IGluIGEgbmF0aXZlIGNvbnRhaW5lciwgYW5kIHRoaXMganVzdCBp
bmNyZW1lbnRzIGl0cyByZWZjb3VudC4KICAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUlt
YWdlKCk7CisjZW5kaWYKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJ
bmRleChzaXplX3QgaW5kZXgpCkBAIC0yMDIsNyArMjE5LDExIEBAIGJvb2wgSW1hZ2VTb3VyY2U6
OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmICghbV9kZWNvZGVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAg
SW1hZ2VGcmFtZVNpbmsqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGlu
ZGV4KTsKKyNlbHNlCiAgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1l
QnVmZmVyQXRJbmRleChpbmRleCk7CisjZW5kaWYKICAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZl
ci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlOwogfQogCkBAIC0yMTEs
NyArMjMyLDExIEBAIGZsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QgaW5kZXgpCiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiAwOwogCisjaWYg
VVNFKElNQUdFRlJBTUVTSU5LKQorICAgIEltYWdlRnJhbWVTaW5rKiBidWZmZXIgPSBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisjZWxzZQogICAgIFJHQkEzMkJ1ZmZlciog
YnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworI2VuZGlmCiAg
ICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
RW1wdHkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0yMjYsNiArMjUxLDE2IEBAIGZsb2F0IElt
YWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiAKIGJvb2wgSW1h
Z2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKKyNpZiBVU0Uo
SU1BR0VGUkFNRVNJTkspCisgICAgaWYgKCFtX2RlY29kZXIgfHwgIW1fZGVjb2Rlci0+c3VwcG9y
dHNBbHBoYSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbWFnZUZyYW1lU2luayog
YnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICgh
YnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYnVmZmVyLT5oYXNB
bHBoYSgpOworI2Vsc2UKICAgICAvLyBXaGVuIGEgZnJhbWUgaGFzIG5vdCBmaW5pc2hlZCBkZWNv
ZGluZywgYWx3YXlzIG1hcmsgaXQgYXMgaGF2aW5nIGFscGhhLgogICAgIC8vIFBvcnRzIHRoYXQg
Y2hlY2sgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGVpcgogICAg
IC8vIGNvbXBvc2l0aW5nIG9wIG5lZWQgdGhpcyBpbiBvcmRlciB0byBub3QgZHJhdyB0aGUgdW5k
ZWNvZGVkIHBvcnRpb24gYXMKQEAgLTIzNCw2ICsyNjksNyBAQCBib29sIEltYWdlU291cmNlOjpm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgLy8gaW4gdGhpcyBjYXNlLgog
ICAgIHJldHVybiBmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KSA/CiAgICAgICAgIG1fZGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KS0+aGFzQWxwaGEoKSA6IHRydWU7CisjZW5k
aWYKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgKaW5kZXggZmE0MmJkOS4uMWUzNzNjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0zNCw2ICszNCw5IEBACiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyNpbmNsdWRlICJJbWFnZUZyYW1l
U2luay5oIgorI2VuZGlmCiAKICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlU2tpYS5oIgpAQCAtNDIsNiArNDUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNp
ZiAhVVNFKElNQUdFRlJBTUVTSU5LKQogICAgIC8vIFRoZSBSR0JBMzJCdWZmZXIgb2JqZWN0IHJl
cHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBSR0JBMzIgZm9ybWF0LiAgVGhpcyBi
dWZmZXIgaXMgd2hhdCBhbGwKICAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBp
bnRvLiAgRnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBo
YW5kZWQgdGhpcyBidWZmZXIuCiAgICAgY2xhc3MgUkdCQTMyQnVmZmVyIHsKQEAgLTE3Nyw2ICsx
ODEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2Qg
bV9kaXNwb3NhbE1ldGhvZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoYXQg
dG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV4dCBm
cmFtZS4KICAgICB9OworI2VuZGlmIC8vICFVU0UoSU1BR0VGUkFNRVNJTkspCiAKICAgICAvLyBU
aGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWZp
YyBpbWFnZSBmb3JtYXQgZGVjb2RlcnMKICAgICAvLyAoZS5nLiwgR0lGLCBKUEcsIFBORywgSUNP
KSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNvZGUgaW50byBSR0JBMzIgZm9ybWF0
CkBAIC0xOTQsMTYgKzE5OSwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAs
IG1fbWF4TnVtUGl4ZWxzKC0xKQogICAgICAgICAgICAgLCBtX3NjYWxlZChmYWxzZSkKICNlbmRp
ZgorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgICAgICwgbV9pc0FsbERhdGFSZWNl
aXZlZChmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0
dWFsIH5JbWFnZURlY29kZXIoKSB7fQorICAgICAgICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKQor
ICAgICAgICB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICAgICAgZm9yIChWZWN0
b3I8SW1hZ2VGcmFtZVNpbmsqPjo6aXRlcmF0b3IgaSA9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdp
bigpOyBpIDwgbV9mcmFtZUJ1ZmZlckNhY2hlLmVuZCgpOyArK2kpCisgICAgICAgICAgICAgICAg
SW1hZ2VGcmFtZVNpbms6OmRlbGV0ZUluc3RhbmNlKCppKTsKKyNlbmRpZgorICAgICAgICB9CiAK
ICAgICAgICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdXN1YWxseSBhc3NvY2lhdGVk
IHdpdGggYW4gdW5kZWNvZGVkIGltYWdlIG9mIHRoaXMgdHlwZS4KICAgICAgICAgdmlydHVhbCBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCA9IDA7CiAKKyNpZiBVU0UoSU1BR0VGUkFN
RVNJTkspCisgICAgICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzQWxsRGF0YVJlY2VpdmVkOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgICAgICBtX2lzQWxsRGF0YVJlY2VpdmVkID0gYWxs
RGF0YVJlY2VpdmVkOworICAgICAgICB9CisjZWxzZQogICAgICAgICAvLyBBbGwgc3BlY2lmaWMg
ZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEgdGhleSBhcmUg
Z2l2ZW4uCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpIHsgbV9kYXRhID0gZGF0YTsgfQorI2VuZGlmCiAKICAgICAg
ICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2Rl
ZCB5ZXQuIFRoaXMgZGVmYXVsdAogICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBqdXN0IHJldHVy
bnMgdHJ1ZSBpZiB0aGUgc2l6ZSBoYXMgYmVlbiBzZXQgYW5kIHdlIGhhdmUgbm90CkBAIC0yNTYs
MTAgKzI3OSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRoZSBudW1iZXIg
b2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCiAgICAgICAg
IHZpcnR1YWwgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGNBbmltYXRpb25O
b25lOyB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIHZpcnR1YWwgSW1hZ2VG
cmFtZVNpbmsqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpID0gMDsKKyAgICAgICAg
U2hhcmVkQnVmZmVyKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CisjZWxzZQogICAg
ICAgICAvLyBDYWxsZWQgdG8gb2J0YWluIHRoZSBSR0JBMzJCdWZmZXIgZnVsbCBvZiBkZWNvZGVk
IGRhdGEgZm9yIHJlbmRlcmluZy4gIFRoZQogICAgICAgICAvLyBkZWNvZGVyIHBsdWdpbiB3aWxs
IGRlY29kZSBhcyBtdWNoIG9mIHRoZSBmcmFtZSBhcyBpdCBjYW4gYmVmb3JlIGhhbmRpbmcKICAg
ICAgICAgLy8gYmFjayB0aGUgYnVmZmVyLgogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciog
ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgPSAwOworI2VuZGlmCiAKICAgICAgICAgLy8gV2hl
dGhlciBvciBub3QgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxw
aGEgdHJhbnNwYXJlbmN5LgogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTI5NCwxMCArMzIyLDE3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwogICAgICAgICBib29sIG1f
c2NhbGVkOwogI2VuZGlmCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICBWZWN0b3I8
SW1hZ2VGcmFtZVNpbmsqPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7CisgICAgICAgIGJvb2wgbV9pc0Fs
bERhdGFSZWNlaXZlZDsKKyNlbHNlCiAgICAgICAgIFZlY3RvcjxSR0JBMzJCdWZmZXI+IG1fZnJh
bWVCdWZmZXJDYWNoZTsKKyNlbmRpZgogICAgICAgICBib29sIG1fZmFpbGVkOwogCisjaWYgIVVT
RShJTUFHRUZSQU1FU0lOSykKICAgICBwcml2YXRlOgorI2VuZGlmCiAgICAgICAgIC8vIFNvbWUg
Y29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBhcyAid2lkdGggKiBoZWln
aHQgKiA0IgogICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEgKHNpZ25lZCkgaW50LiAgQXZv
aWQgb3ZlcmZsb3cuCiAgICAgICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IDg3MDM2YzkuLjNlOTAxYTkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzQsNiArMzUsOSBAQCBwdWJsaWM6CiAgICAgR0lGSW1hZ2VEZWNvZGVy
UHJpdmF0ZShHSUZJbWFnZURlY29kZXIqIGRlY29kZXIgPSAwKQogICAgICAgICA6IG1fcmVhZGVy
KGRlY29kZXIpCiAgICAgICAgICwgbV9yZWFkT2Zmc2V0KDApCisjaWYgVVNFKElNQUdFRlJBTUVT
SU5LKQorICAgICAgICAsIG1fam9iQ29tcGxldGUoZmFsc2UpCisjZW5kaWYKICAgICB7CiAgICAg
fQogCkBAIC00Miw2ICs0NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVhZGVyLmNsb3NlKCk7
CiAgICAgfQogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIHZvaWQgc2V0Q29tcGxldGUo
KSB7IG1fam9iQ29tcGxldGUgPSB0cnVlOyB9CisjZW5kaWYKKwogICAgIGJvb2wgZGVjb2RlKFNo
YXJlZEJ1ZmZlciogZGF0YSwgCiAgICAgICAgICAgICAgICAgR0lGSW1hZ2VEZWNvZGVyOjpHSUZR
dWVyeSBxdWVyeSA9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LAogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBoYWx0RnJhbWUgPSAtMSkKQEAgLTgxLDE4ICs4OSwyOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEdJRkltYWdlUmVhZGVyIG1fcmVhZGVyOwogICAgIHVuc2lnbmVk
IG1fcmVhZE9mZnNldDsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgYm9vbCBtX2pvYkNv
bXBsZXRlOworI2VuZGlmCiB9OwogCiBHSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2Rlcigp
CiAgICAgOiBtX2ZyYW1lQ291bnRWYWxpZCh0cnVlKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQo
Y0FuaW1hdGlvbkxvb3BPbmNlKQogICAgICwgbV9yZWFkZXIoMCkKKyNpZiBVU0UoSU1BR0VGUkFN
RVNJTkspCisgICAgLCBtX2N1cnJlbnRSZWFkZXIoMCkKKyAgICAsIG1fc2Vjb25kYXJ5UmVhZGVy
KDApCisjZW5kaWYKIHsKIH0KIAogR0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1hZ2VEZWNvZGVyKCkK
IHsKICAgICBkZWxldGUgbV9yZWFkZXI7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIGRl
bGV0ZSBtX3NlY29uZGFyeVJlYWRlcjsKKyNlbmRpZgogfQogCiAvLyBUYWtlIHRoZSBkYXRhIGFu
ZCBzdG9yZSBpdC4KQEAgLTEwOCw4ICsxMjYsMTMgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNl
dERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICBtX2Zy
YW1lQ291bnRWYWxpZCA9IGZhbHNlOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBHSUYgcmVhZGVyLgot
ICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQorICAgIGlmICghbV9yZWFkZXIgJiYgIW1f
ZmFpbGVkKSB7CiAgICAgICAgIG1fcmVhZGVyID0gbmV3IEdJRkltYWdlRGVjb2RlclByaXZhdGUo
dGhpcyk7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICBtX3NlY29uZGFyeVJlYWRl
ciA9IG5ldyBHSUZJbWFnZURlY29kZXJQcml2YXRlKHRoaXMpOworICAgICAgICBtX2N1cnJlbnRS
ZWFkZXIgPSBtX3JlYWRlcjsKKyNlbmRpZgorICAgIH0KIH0KIAogLy8gV2hldGhlciBvciBub3Qg
dGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCkBAIC0xMjgsNiArMTUx
LDIwIEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgIC8vIElmIHRo
ZSBkZWNvZGVyIGhhZCBhbiBlYXJsaWVyIGVycm9yLCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHdoYXQg
d2UgaGFkIGRlY29kZWQKICAgICAvLyBzbyBmYXIuCiAgICAgaWYgKCFtX2ZyYW1lQ291bnRWYWxp
ZCkgeworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgbV9jdXJyZW50UmVhZGVyID0g
bV9zZWNvbmRhcnlSZWFkZXI7CisgICAgICAgIG1fc2Vjb25kYXJ5UmVhZGVyLT5kZWNvZGUobV9k
YXRhLmdldCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOworICAgICAgICBtX2N1cnJlbnRSZWFkZXIg
PSBtX3JlYWRlcjsKKworICAgICAgICB1bnNpZ25lZCBuZXdDb3VudCA9IG1fc2Vjb25kYXJ5UmVh
ZGVyLT5mcmFtZUNvdW50KCk7CisgICAgICAgIHVuc2lnbmVkIG9sZENvdW50ID0gbV9mcmFtZUJ1
ZmZlckNhY2hlLnNpemUoKTsKKyAgICAgICAgaWYgKG5ld0NvdW50ID4gb2xkQ291bnQpIHsKKyAg
ICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNlcnZlQ2FwYWNpdHkobmV3Q291bnQpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkQ291bnQ7IGkgPCBuZXdDb3VudDsgKytp
KQorICAgICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5hcHBlbmQoSW1hZ2VGcmFtZVNp
bms6OmNyZWF0ZUluc3RhbmNlKGZhbHNlKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9mcmFtZUNv
dW50VmFsaWQgPSB0cnVlOworI2Vsc2UKICAgICAgICAgLy8gRklYTUU6IFNjYW5uaW5nIGFsbCB0
aGUgZGF0YSBoYXMgTyhuXjIpIGJlaGF2aW9yIGlmIHRoZSBkYXRhIHdlcmUgdG8gY29tZSBpbiBy
ZWFsbHkKICAgICAgICAgLy8gc2xvd2x5LiAgTWlnaHQgYmUgaW50ZXJlc3RpbmcgdG8gdHJ5IHRv
IGNsb25lIG91ciBleGlzdGluZyByZWFkIHNlc3Npb24gdG8gcHJlc2VydmUKICAgICAgICAgLy8g
c3RhdGUsIGJ1dCBmb3Igbm93IHdlIGp1c3QgY3Jhd2wgYWxsIHRoZSBkYXRhLiAgTm90ZSB0aGF0
IHRoaXMgaXMgbm8gd29yc2UgdGhhbiB3aGF0CkBAIC0xMzksNiArMTc2LDcgQEAgc2l6ZV90IEdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiAgICAgICAgIHJlYWRlci5kZWNvZGUobV9kYXRh
LmdldCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwogICAgICAgICBtX2ZyYW1lQ291bnRWYWxpZCA9
IHRydWU7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUocmVhZGVyLmZyYW1lQ291
bnQoKSk7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNp
emUoKTsKQEAgLTE0Nyw2ICsxODUsMTkgQEAgc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b3VudCgpCiAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFu
aW1hdGlvbiBsb29wLgogaW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29u
c3QKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgaWYgKG1fcmVhZGVyKSB7CisgICAg
ICAgIGNvbnN0IGludCByZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+cmVwZXRpdGlvbkNvdW50
KCk7CisgICAgICAgIGlmIChyZXBldGl0aW9uQ291bnQgIT0gY0xvb3BDb3VudE5vdFNlZW4pCisg
ICAgICAgICAgICByZXR1cm4gcmVwZXRpdGlvbkNvdW50OworICAgIH0KKyAgICBpZiAobV9zZWNv
bmRhcnlSZWFkZXIpIHsKKyAgICAgICAgY29uc3QgaW50IHJlcGV0aXRpb25Db3VudCA9IG1fc2Vj
b25kYXJ5UmVhZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKKyAgICAgICAgaWYgKHJlcGV0aXRpb25D
b3VudCAhPSBjTG9vcENvdW50Tm90U2VlbikKKyAgICAgICAgICAgIHJldHVybiByZXBldGl0aW9u
Q291bnQ7CisgICAgfQorICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7CisjZWxzZQogICAg
IC8vIFRoaXMgdmFsdWUgY2FuIGFycml2ZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGltYWdlIGRhdGEg
c3RyZWFtLiAgTW9zdCBHSUZzCiAgICAgLy8gaW4gdGhlIHdpbGQgZGVjbGFyZSBpdCBuZWFyIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHNvIGl0IHVzdWFsbHkgaXMKICAgICAvLyBzZXQgYnkg
dGhlIHRpbWUgd2UndmUgZGVjb2RlZCB0aGUgc2l6ZSwgYnV0IChkZXBlbmRpbmcgb24gdGhlIEdJ
RiBhbmQgdGhlCkBAIC0xNjYsOCArMjE3LDIyIEBAIGludCBHSUZJbWFnZURlY29kZXI6OnJlcGV0
aXRpb25Db3VudCgpIGNvbnN0CiAgICAgICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IHJlcGV0
aXRpb25Db3VudDsKICAgICB9CiAgICAgcmV0dXJuIG1fcmVwZXRpdGlvbkNvdW50OworI2VuZGlm
CiB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCitJbWFnZUZyYW1lU2luayogR0lGSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChpbmRl
eCA8IDAgfHwgaW5kZXggPj0gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBJbWFnZUZyYW1lU2luayogZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
aW5kZXhdOworICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVy
OjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVyKQorICAgICAgICAvLyBEZWNvZGUgdGhpcyBmcmFt
ZS4KKyAgICAgICAgZGVjb2RlKEdJRkZ1bGxRdWVyeSwgaW5kZXgrMSk7CisgICAgcmV0dXJuIGZy
YW1lOworfQorI2Vsc2UKIFJHQkEzMkJ1ZmZlciogR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkp
CkBAIC0xNzgsOSArMjQzLDEyIEBAIFJHQkEzMkJ1ZmZlciogR0lGSW1hZ2VEZWNvZGVyOjpmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5
LCBpbmRleCArIDEpOyAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KICAgICByZXR1cm4gJmZyYW1lOwog
fQorI2VuZGlmCiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUo
c2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorI2Vs
c2UKICAgICAvLyBJbiBzb21lIGNhc2VzLCBsaWtlIGlmIHRoZSBkZWNvZGVyIHdhcyBkZXN0cm95
ZWQgd2hpbGUgYW5pbWF0aW5nLCB3ZQogICAgIC8vIGNhbiBiZSBhc2tlZCB0byBjbGVhciBtb3Jl
IGZyYW1lcyB0aGFuIHdlIGN1cnJlbnRseSBoYXZlLgogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2Fj
aGUuaXNFbXB0eSgpKQpAQCAtMjI3LDYgKzI5NSw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgICAgIGlm
IChqLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCiAgICAgICAgICAgICBq
LT5jbGVhcigpOwogICAgIH0KKyNlbmRpZgogfQogCiAvLyBGZWVkIGRhdGEgdG8gdGhlIEdJRiBy
ZWFkZXIuCkBAIC0yNDYsMTYgKzMxNSw5MCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2Rl
KEdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKIC8vIENhbGxiYWNrcyBmcm9t
IHRoZSBHSUYgcmVhZGVyLgogYm9vbCBHSUZJbWFnZURlY29kZXI6OnNpemVOb3dBdmFpbGFibGUo
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICByZXR1cm4gc2V0U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKKyAgICBib29sIGdvb2QgPSBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOwor
I2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCisgICAgaWYgKGdvb2QpCisg
ICAgICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOworI2VuZGlmCisgICAgcmV0dXJu
IGdvb2Q7CiB9CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0hhbHRlZCh1bnNpZ25l
ZCBieXRlc0xlZnQpCiB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIG1fY3VycmVudFJl
YWRlci0+c2V0UmVhZE9mZnNldChtX2RhdGEtPnNpemUoKSAtIGJ5dGVzTGVmdCk7CisjZWxzZQog
ICAgIG1fcmVhZGVyLT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsK
KyNlbmRpZgogfQogCiBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2ln
bmVkIGZyYW1lSW5kZXgpCiB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIC8vIEluaXRp
YWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KKyAgICBJbnRSZWN0IGZyYW1lUmVj
dChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSwKKyAg
ICAgICAgbV9yZWFkZXItPmZyYW1lV2lkdGgoKSwgbV9yZWFkZXItPmZyYW1lSGVpZ2h0KCkpOwor
CisgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZVJlY3QgZG9lc24ndCBleHRlbmQgcGFzdCB0aGUg
Ym90dG9tLXJpZ2h0IG9mIHRoZSBidWZmZXIuCisgICAgaWYgKGZyYW1lUmVjdC5yaWdodCgpID4g
bV9zaXplLndpZHRoKCkpCisgICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChtX3NpemUud2lkdGgo
KSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSk7CisgICAgaWYgKGZyYW1lUmVjdC5ib3R0b20o
KSA+IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChtX3NpemUu
aGVpZ2h0KCkgLSBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkpOworCisgICAgSW1hZ2VGcmFtZVNp
bmsmIGJ1ZmZlciA9ICptX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CisgICAgYnVmZmVy
LnNldFJlY3QoZnJhbWVSZWN0KTsKKworICAgIGJvb2wgaXNTdWJSZWN0ID0gKGZyYW1lUmVjdC54
KCkgPiAwIHx8IGZyYW1lUmVjdC55KCkgPiAwIHx8CisgICAgICAgIGZyYW1lUmVjdC53aWR0aCgp
IDwgbV9zaXplLndpZHRoKCkgfHwKKyAgICAgICAgZnJhbWVSZWN0LmhlaWdodCgpIDwgbV9zaXpl
LmhlaWdodCgpKTsKKworICAgIC8vIExldCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUg
Y29ycmVjdCB3aWR0aC9oZWlnaHQgYW5kIHRoZW4KKyAgICAvLyBpbml0aWFsaXplIHBvcnRpb25z
IG9mIGl0IGlmIG5lZWRlZC4KKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5H
KQorICAgIGludCBzaHJ1bmtXaWR0aCA9IG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUo
KSA6IG1fc2l6ZS53aWR0aCgpOworICAgIGludCBzaHJ1bmtIZWlnaHQgPSBtX3NjYWxlZCA/IG1f
c2NhbGVkUm93cy5zaXplKCkgOiBtX3NpemUuaGVpZ2h0KCk7CisKKyAgICBpZiAoIWJ1ZmZlci5z
ZXRTaXplKHNocnVua1dpZHRoLCBzaHJ1bmtIZWlnaHQsIGZhbHNlKSkgeworI2Vsc2UKKyAgICBp
ZiAoIWJ1ZmZlci5zZXRTaXplKG1fc2l6ZS53aWR0aCgpLCAgbV9zaXplLmhlaWdodCgpLCBmYWxz
ZSkpIHsKKyNlbmRpZgorICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgdm9pZCogYnl0ZXMgPSBidWZmZXIuYnl0ZXMoKTsKKyAgICBpbnQg
dG90YWxCeXRlcyA9IGJ1ZmZlci50b3RhbEJ5dGVzKCk7CisKKyAgICBJbWFnZUZyYW1lU2luayog
cHJldmlvdXNCdWZmZXIgPSAoZnJhbWVJbmRleCA+IDApID8gbV9mcmFtZUJ1ZmZlckNhY2hlW2Zy
YW1lSW5kZXgtMV0gOiAwOworICAgIGlmIChwcmV2aW91c0J1ZmZlcikgeworICAgICAgICB3aGls
ZSAoZnJhbWVJbmRleCA+IDAgJiYgcHJldmlvdXNCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0g
UkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpCisgICAgICAgICAgICBwcmV2
aW91c0J1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOworICAgIH0KKwor
ICAgIC8vIFdoaWNoIGJ1ZmZlciB0byBjb3B5IGZyb20/CisgICAgSW1hZ2VGcmFtZVNpbmsqIGNv
cHlGcm9tOworICAgIGlmICghcHJldmlvdXNCdWZmZXIpCisgICAgICAgIGNvcHlGcm9tID0gMDsK
KyAgICBlbHNlIGlmIChwcmV2aW91c0J1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JBMzJC
dWZmZXI6OkRpc3Bvc2VOb3RTcGVjaWZpZWQgfHwgcHJldmlvdXNCdWZmZXItPmRpc3Bvc2FsTWV0
aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlS2VlcCkgeworICAgICAgICBjb3B5RnJvbSA9
IHByZXZpb3VzQnVmZmVyOworICAgICAgICBidWZmZXIuc2V0Q29tcG9zaXRlZFdpdGhQcmV2aW91
c0ZyYW1lKCk7CisgICAgfSBlbHNlIGlmIChpc1N1YlJlY3QpCisgICAgICAgIGNvcHlGcm9tID0g
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIGVsc2UKKyAgICAgICAgY29weUZyb20gPSAwOwor
CisgICAgaWYgKGNvcHlGcm9tKSB7CisgICAgICAgIG1lbWNweShieXRlcywgY29weUZyb20tPmJ5
dGVzKCksIHRvdGFsQnl0ZXMpOworICAgICAgICBidWZmZXIuZW5zdXJlSGVpZ2h0KG1fc2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIGlmIChjb3B5RnJvbS0+dXNlc1RyYW5zcGFyZW50Q29sb3IoKSkK
KyAgICAgICAgICAgIGJ1ZmZlci5zZXRUcmFuc3BhcmVudENvbG9yKGNvcHlGcm9tLT50cmFuc3Bh
cmVudENvbG9yKCkpOworCisgICAgICAgIGlmIChjb3B5RnJvbS0+aGFzQWxwaGEoKSkKKyAgICAg
ICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUg
b3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCisgICAgYnVmZmVyLnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CisjZWxzZQogICAgIC8vIEluaXRpYWxpemUg
dGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBJbnRSZWN0IGZyYW1lUmVjdChtX3Jl
YWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICBtX3JlYWRlci0+ZnJhbWVXaWR0aCgpLCBtX3JlYWRlci0+ZnJhbWVIZWln
aHQoKSk7CkBAIC0zMjUsNiArNDY4LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFt
ZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogCiAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMg
dG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgogICAgIGJ1ZmZlci0+c2V0U3RhdHVzKFJHQkEzMkJ1
ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKyNlbmRpZgogCiAgICAgLy8gUmVzZXQgdGhlIGFscGhhIHBp
eGVsIHRyYWNrZXIgZm9yIHRoaXMgZnJhbWUuCiAgICAgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEg
PSBmYWxzZTsKQEAgLTMzOCw2ICs0ODIsMTI1IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZl
RGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscykKIHsKKyNpZiBVU0Uo
SU1BR0VGUkFNRVNJTkspCisgICAgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF0g
fHwgbV9mYWlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBJbWFnZUZyYW1lU2luayYgYnVmZmVy
ID0gKm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKworICAgIGlmIChidWZmZXIuc3Rh
dHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5ICYmICFpbml0RnJhbWVCdWZmZXIoZnJh
bWVJbmRleCkgfHwgIWJ1ZmZlci5pc0J1ZmZlclJlYWR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChyb3dCdWZmZXIgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHNvdXJj
ZVdpZHRoID0gcm93RW5kIC0gcm93QnVmZmVyOworICAgIGlmIChzb3VyY2VXaWR0aCA8PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnQgZGVzdFkgPSBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0
KCkgKyByb3dOdW1iZXI7CisgICAgaW50IGRlc3RYID0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgp
OworICAgIGludCBkZXN0RW5kWCA9IGRlc3RYICsgc291cmNlV2lkdGg7CisjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAobV9zY2FsZWQpIHsKKyAgICAgICAg
ZGVzdFkgPSBzY2FsZWRZKGRlc3RZKTsKKyAgICAgICAgaWYgKGRlc3RZIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZGVzdFggPSB1cHBlckJvdW5kU2NhbGVkWChkZXN0WCk7Cisg
ICAgICAgIGlmIChkZXN0WCA8IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlc3RF
bmRYID0gbG93ZXJCb3VuZFNjYWxlZFgoZGVzdEVuZFggLSAxLCBkZXN0WCArIDEpOworICAgICAg
ICBpZiAoZGVzdEVuZFggPCBkZXN0WCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgKytk
ZXN0RW5kWDsKKyAgICB9CisjZW5kaWYKKworICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsKKyAgICBtX3JlYWRlci0+Z2V0Q29sb3JNYXAoY29s
b3JNYXAsIGNvbG9yTWFwU2l6ZSk7CisgICAgaWYgKCFjb2xvck1hcCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5pc1RyYW5zcGFyZW50KCk7IAorICAg
IGJvb2wgc2F3QWxwaGEgPSBidWZmZXIudXNlc1RyYW5zcGFyZW50Q29sb3IoKSB8fCBidWZmZXIu
aGFzQWxwaGEoKTsKKyAgICB1bnNpZ25lZCBjaGFyIHRyYW5zcGFyZW50Q29sb3IgPSBtX3JlYWRl
ci0+dHJhbnNwYXJlbnRQaXhlbCgpOworCisgICAgdW5zaWduZWQqIGRzdEVuZCA9ICh1bnNpZ25l
ZCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci5idWZmZXJXaWR0aCgpOworICAgIHVu
c2lnbmVkKiBkc3QgPSBkc3RFbmQgKyBkZXN0WDsKKyAgICBkc3RFbmQgKz0gZGVzdEVuZFg7Cisg
ICAgdW5zaWduZWQqIGN1cnJEc3QgPSBkc3Q7CisgICAgdW5zaWduZWQgY2hhciogY3VycmVudFJv
d0J5dGUgPSByb3dCdWZmZXI7CisKKyAgICB3aGlsZSAoY3VyckRzdCA8IGRzdEVuZCkgeworICAg
ICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsOworI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05f
U0FNUExJTkcpCisgICAgICAgIGlmIChtX3NjYWxlZCkgeworICAgICAgICAgICAgaW50IHNvdXJj
ZVggPSBtX3NjYWxlZENvbHVtbnNbY3VyckRzdCAtIGRzdF0gLSBtX3JlYWRlci0+ZnJhbWVZT2Zm
c2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoc291cmNlWCA+PSAwICYmIHNvdXJjZVggPCBzb3Vy
Y2VXaWR0aCk7CisgICAgICAgICAgICBwaXhlbCA9IHJvd0J1ZmZlcltzb3VyY2VYXTsKKyAgICAg
ICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3dC
eXRlID09IHJvd0VuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHBpeGVs
ID0gKmN1cnJlbnRSb3dCeXRlKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGl4ZWwgPj0g
Y29sb3JNYXBTaXplKQorICAgICAgICAgICAgcGl4ZWwgPSB0cmFuc3BhcmVudENvbG9yOworICAg
ICAgICBib29sIHRyYW5zcGFyZW50ID0gaGFzQWxwaGEgJiYgcGl4ZWwgPT0gdHJhbnNwYXJlbnRD
b2xvcjsKKyAgICAgICAgaWYgKHRyYW5zcGFyZW50ICYmIGJ1ZmZlci5jb21wb3NpdGVkV2l0aFBy
ZXZpb3VzRnJhbWUoKSkgeworICAgICAgICAgICAgLy8gTGVhdmUgdGhlIG9yaWdpbmFsIGNvbG9y
IGluIHByZXZpb3VzIGZyYW1lCisgICAgICAgIH0gZWxzZSBpZiAocGl4ZWwgPCBjb2xvck1hcFNp
emUpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGNvbG9yID0gY29sb3JNYXAgKyBwaXhl
bCAqIDM7CisgICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAqY29sb3IrKzsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGdyZWVuID0gKmNvbG9yKys7CisgICAgICAgICAgICB1bnNpZ25lZCBibHVlID0g
KmNvbG9yOworICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQkEoKmN1cnJEc3QsIHJl
ZCwgZ3JlZW4sIGJsdWUsIHRyYW5zcGFyZW50ID8gMCA6IDI1NSk7CisKKyAgICAgICAgICAgIGlm
ICh0cmFuc3BhcmVudCkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJIGFzc3VtZSB0aGF0
IHRoZSB0cmFuc3BhcmVudCBjb2xvciBuZXZlciBjaGFuZ2VzIGR1cmluZyBkZWNvZGluZyBhIHNp
bmdsZSBmcmFtZS4KKyAgICAgICAgICAgICAgICBpZiAoIXNhd0FscGhhKSB7CisgICAgICAgICAg
ICAgICAgICAgIHNhd0FscGhhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNl
dEhhc0FscGhhKHRydWUpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0cmFu
c3BhcmVudENvbG9yOworICAgICAgICAgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdC
MTYodHJhbnNwYXJlbnRDb2xvciwgcmVkLCBncmVlbiwgYmx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlci5zZXRUcmFuc3BhcmVudENvbG9yKHRyYW5zcGFyZW50Q29sb3IpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyLnVzZXNUcmFuc3BhcmVu
dENvbG9yKCkpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBwaXhlbDE2OworICAg
ICAgICAgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0IxNihwaXhlbDE2LCByZWQsIGdyZWVu
LCBibHVlKTsKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWwxNiA9PSBidWZmZXIudHJhbnNwYXJl
bnRDb2xvcigpKQorICAgICAgICAgICAgICAgICAgICBidWZmZXIuY2xlYXJUcmFuc3BhcmVudENv
bG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyB0
cmFuc3BhcmVudENvbG9yIG11c3QgYmUgaW52YWxpZCB0b28KKyAgICAgICAgICAgIEltYWdlRnJh
bWVTaW5rOjpzZXRSR0JBKCpjdXJyRHN0LCAyNTUsIDI1NSwgMjU1LCB0cmFuc3BhcmVudCA/IDAg
OiAyNTUpOworICAgICAgICAgICAgaWYgKGJ1ZmZlci51c2VzVHJhbnNwYXJlbnRDb2xvcigpKQor
ICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhclRyYW5zcGFyZW50Q29sb3IoKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKCFzYXdBbHBoYSkgeworICAgICAgICAgICAgICAgIHNhd0FscGhhID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgY3VyckRzdCsrOworICAgIH0KKworICAgIGlmIChyZXBl
YXRDb3VudCA+IDEpIHsKKyAgICAgICAgLy8gQ29weSB0aGUgcm93IHxyZXBlYXRDb3VudHwtMSB0
aW1lcy4KKyAgICAgICAgdW5zaWduZWQgbnVtID0gY3VyckRzdCAtIGRzdDsKKyAgICAgICAgdW5z
aWduZWQgc2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CisgICAgICAgIHVuc2lnbmVkIHdp
ZHRoID0gYnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgIHVuc2lnbmVkKiBlbmQgPSAodW5z
aWduZWQqKSgodW5zaWduZWQgY2hhciopYnVmZmVyLmJ5dGVzKCkgKyBidWZmZXIudG90YWxCeXRl
cygpKTsKKyAgICAgICAgY3VyckRzdCA9IGRzdCArIHdpZHRoOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKGN1cnJE
c3QgKyBudW0gPiBlbmQpIC8vIFByb3RlY3QgYWdhaW5zdCBhIGJ1ZmZlciBvdmVycnVuIGZyb20g
YSBib2d1cyByZXBlYXRDb3VudC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IG1lbWNweShjdXJyRHN0LCBkc3QsIHNpemUpOworICAgICAgICAgICAgY3VyckRzdCArPSB3aWR0
aDsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNv
b3JkaW5hdGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAg
IC8vIG9yaWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCiAgICAgLy8gKG1f
cmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKS4KQEAgLTM4
NiwxMCArNjQ5LDIyIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNp
Z25lZCBmcmFtZUluZGV4LAogICAgIC8vIFRlbGwgdGhlIGZyYW1lIHRvIGNvcHkgdGhlIHJvdyBk
YXRhIGlmIG5lZWQgYmUuCiAgICAgaWYgKHJlcGVhdENvdW50ID4gMSkKICAgICAgICAgYnVmZmVy
LmNvcHlSb3dOVGltZXMobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCB4LCB5LCBzdGQ6Om1pbih5
ICsgc3RhdGljX2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZy
YW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNw
b3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisg
ICAgSW1hZ2VGcmFtZVNpbmsqIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIGlmIChidWZmZXItPnN0YXR1cygpID09IFJH
QkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBidWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUpOworICAgICAgICBidWZmZXItPnNldER1cmF0aW9uKGZyYW1lRHVy
YXRpb24pOworICAgICAgICBidWZmZXItPnNldERpc3Bvc2FsTWV0aG9kKGRpc3Bvc2FsTWV0aG9k
KTsKKyAgICAgICAgYnVmZmVyLT5lbnN1cmVIZWlnaHQobV9zaXplLmhlaWdodCgpKTsKKyAgICB9
CisjZWxzZQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNvbWUg
R0lGcyBpbnNlcnQgZG8tbm90aGluZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBu
ZXZlciByZWFjaCBoYXZlRGVjb2RlZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgUkdC
QTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CkBAIC00
MzIsMTQgKzcwNywyNSBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNp
Z25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLAogICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CisjZW5kaWYKIH0K
IAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmdpZkNvbXBsZXRlKCkKIHsKKyNpZiBVU0UoSU1BR0VG
UkFNRVNJTkspCisgICAgbV9jdXJyZW50UmVhZGVyLT5zZXRDb21wbGV0ZSgpOworICAgIGlmICht
X3JlYWRlciA9PSBtX2N1cnJlbnRSZWFkZXIpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYg
KG1fZnJhbWVCdWZmZXJDYWNoZVtpXSkKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbaV0tPnNldENhbkZyZWVCdWZmZXIodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQog
ICAgIGlmIChtX3JlYWRlcikKICAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+
cmVwZXRpdGlvbkNvdW50KCk7CiAgICAgZGVsZXRlIG1fcmVhZGVyOwogICAgIG1fcmVhZGVyID0g
MDsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCmluZGV4IDUy
MjdlYTMuLjAzZGFkMWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3Ig
YW4gYW5pbWF0aW9uIGxvb3AuCiAgICAgICAgIHZpcnR1YWwgaW50IHJlcGV0aXRpb25Db3VudCgp
IGNvbnN0OwogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICBib29sIGlzU2l6ZUF2
YWlsYWJsZVdpdGhvdXREZWNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsg
fQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5rKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90IGluZGV4KTsKKyNlbHNlCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyNlbmRpZgogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpOwogCkBAIC04
MSw2ICs4NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50
QnVmZmVyU2F3QWxwaGE7CiAgICAgICAgIG11dGFibGUgaW50IG1fcmVwZXRpdGlvbkNvdW50Owog
ICAgICAgICBHSUZJbWFnZURlY29kZXJQcml2YXRlKiBtX3JlYWRlcjsKKyNpZiBVU0UoSU1BR0VG
UkFNRVNJTkspCisgICAgICAgIG11dGFibGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9zZWNv
bmRhcnlSZWFkZXI7CisgICAgICAgIG11dGFibGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9j
dXJyZW50UmVhZGVyOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCmluZGV4IDFlODNkYTkuLjVmYWI4NWQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKQEAgLTEwMCw2ICsxMDAsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ieXRlc1RvU2tpcCgw
KQogICAgICAgICAsIG1fc3RhdGUoSlBFR19IRUFERVIpCiAgICAgICAgICwgbV9zYW1wbGVzKDAp
CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICAsIG1fam9iQ29tcGxldGUoZmFsc2Up
CisjZW5kaWYKICAgICB7CiAgICAgICAgIG1lbXNldCgmbV9pbmZvLCAwLCBzaXplb2YoanBlZ19k
ZWNvbXByZXNzX3N0cnVjdCkpOwogIApAQCAtMTQyLDYgKzE0NSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9pbmZvLnNyYyA9IDA7CiAKICAgICAgICAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJm1f
aW5mbyk7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICBtX2pvYkNvbXBsZXRlID0g
ZmFsc2U7CisjZW5kaWYKICAgICB9CiAKICAgICB2b2lkIHNraXBCeXRlcyhsb25nIG51bV9ieXRl
cykgewpAQCAtMTU2LDYgKzE2MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2J5dGVzVG9T
a2lwID0gMDsKICAgICB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgdm9pZCBzZXRD
b21wbGV0ZSgpIHsgbV9qb2JDb21wbGV0ZSA9IHRydWU7IH0KKyNlbmRpZgorCiAgICAgYm9vbCBk
ZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIHNpemVPbmx5KSB7CiAgICAgICAg
IG1fZGVjb2RpbmdTaXplT25seSA9IHNpemVPbmx5OwogICAgICAgICAKQEAgLTM2Niw2ICszNzYs
OSBAQCBwcml2YXRlOgogICAgIGpzdGF0ZSBtX3N0YXRlOwogCiAgICAgSlNBTVBBUlJBWSBtX3Nh
bXBsZXM7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIGJvb2wgbV9qb2JDb21wbGV0ZTsK
KyNlbmRpZgogfTsKIAogLyogT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGVycm9yIG1ldGhvZCBpbiB0
aGUgSUpHIEpQRUcgZGVjb2RlciBjb2RlLiAqLwpAQCAtNDMyLDYgKzQ0NSwyMiBAQCBib29sIEpQ
RUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCitJbWFn
ZUZyYW1lU2luayogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBp
bmRleCkKK3sKKyAgICBpZiAoaW5kZXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1f
ZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5h
cHBlbmQoSW1hZ2VGcmFtZVNpbms6OmNyZWF0ZUluc3RhbmNlKHRydWUpKTsKKworICAgIEltYWdl
RnJhbWVTaW5rKiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBpZiAoZnJhbWUg
JiYgZnJhbWUtPnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3Jl
YWRlcikKKyAgICAgICAgLy8gRGVjb2RlIHRoaXMgZnJhbWUuCisgICAgICAgIGRlY29kZSgpOwor
ICAgIHJldHVybiBmcmFtZTsKK30KKyNlbHNlCiBSR0JBMzJCdWZmZXIqIEpQRUdJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQpA
QCAtNDQ2LDYgKzQ3NSw3IEBAIFJHQkEzMkJ1ZmZlciogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAgICAgZGVjb2RlKCk7CiAgICAgcmV0dXJu
ICZmcmFtZTsKIH0KKyNlbmRpZgogCiAvLyBGZWVkIGRhdGEgdG8gdGhlIEpQRUcgcmVhZGVyLgog
dm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkKQEAgLTQ1NSwxMiAr
NDg1LDc5IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpCiAK
ICAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIHNpemVP
bmx5KTsKIAotICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVDb21wbGV0ZSkpIHsKKyAgICBpZiAobV9mYWlsZWQKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTksp
CisgICAgICAgIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAoIW1fZnJhbWVC
dWZmZXJDYWNoZVswXSB8fCBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0tPnN0YXR1cygpID09IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpKSB7CisjZWxzZQorICAgICAgICB8fCAoIW1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKKyNlbmRpZgogICAgICAgICBkZWxldGUg
bV9yZWFkZXI7CiAgICAgICAgIG1fcmVhZGVyID0gMDsKICAgICB9CiB9CiAKKyNpZiBVU0UoSU1B
R0VGUkFNRVNJTkspCitzdGF0aWMgdm9pZCBjb252ZXJ0Q01ZS1RvUkdCQShJbWFnZUZyYW1lU2lu
ayYgYnVmZmVyLCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgaW50IHNyY1dpZHRoCisjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgYm9vbCBzY2FsZWQsIGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRDb2x1bW5zCisj
ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKyNpZiBFTkFCTEUoSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIGlmIChzY2FsZWQpIHsKKyAgICAgICAgdW5z
aWduZWQgc2hvcnQqIGRzdCA9ICh1bnNpZ25lZCBzaG9ydCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0
WSAqIGJ1ZmZlci5idWZmZXJXaWR0aCgpOworICAgICAgICBpbnQgbnVtQ29sdW1ucyA9IHNjYWxl
ZENvbHVtbnMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7
ICsreCkgeworICAgICAgICAgICAgSlNBTVBMRSoganNhbXBsZSA9IHNyYyArIHNjYWxlZENvbHVt
bnNbeF0gKiAzOworICAgICAgICAgICAgdW5zaWduZWQgYyA9IGpzYW1wbGVbMF07CisgICAgICAg
ICAgICB1bnNpZ25lZCBtID0ganNhbXBsZVsxXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHkgPSBq
c2FtcGxlWzJdOworICAgICAgICAgICAgdW5zaWduZWQgayA9IGpzYW1wbGVbM107CisgICAgICAg
ICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdCsrLCBjICogayAvIDI1NSwgbSAqIGsg
LyAyNTUsIHkgKiBrIC8gMjU1KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisgICAgdW5zaWduZWQgc2hvcnQqIGRzdCA9ICh1bnNpZ25lZCBzaG9ydCopYnVmZmVy
LmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci5idWZmZXJXaWR0aCgpOworICAgIEpTQU1QTEUgKnNy
Y0VuZCA9IHNyYyArIHNyY1dpZHRoICsgc3JjV2lkdGggKyBzcmNXaWR0aDsKKyAgICB3aGlsZSAo
c3JjIDwgc3JjRW5kKSB7CisgICAgICAgIHVuc2lnbmVkIGMgPSAqc3JjKys7CisgICAgICAgIHVu
c2lnbmVkIG0gPSAqc3JjKys7CisgICAgICAgIHVuc2lnbmVkIHkgPSAqc3JjKys7CisgICAgICAg
IHVuc2lnbmVkIGsgPSAqc3JjKys7CisgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0IxNigq
ZHN0KyssIGMgKiBrIC8gMjU1LCBtICogayAvIDI1NSwgeSAqIGsgLyAyNTUpOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgY29udmVydFJHQlRvUkdCQShJbWFnZUZyYW1lU2luayYgYnVmZmVyLCBp
bnQgZGVzdFksIEpTQU1QUk9XIHNyYywgaW50IHNyY1dpZHRoCisjaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYm9v
bCBzY2FsZWQsIGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRDb2x1bW5zCisjZW5kaWYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9E
T1dOX1NBTVBMSU5HKQorICAgIGlmIChzY2FsZWQpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQq
IGRzdCA9ICh1bnNpZ25lZCBzaG9ydCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci5i
dWZmZXJXaWR0aCgpOworICAgICAgICBpbnQgbnVtQ29sdW1ucyA9IHNjYWxlZENvbHVtbnMuc2l6
ZSgpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7ICsreCkgeworICAg
ICAgICAgICAgSlNBTVBMRSoganNhbXBsZSA9IHNyYyArIHNjYWxlZENvbHVtbnNbeF0gKiAzOwor
ICAgICAgICAgICAgSW1hZ2VGcmFtZVNpbms6OnNldFJHQjE2KCpkc3QrKywganNhbXBsZVswXSwg
anNhbXBsZVsxXSwganNhbXBsZVsyXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorICAgIHVuc2lnbmVkIHNob3J0KiBkc3QgPSAodW5zaWduZWQgc2hvcnQqKWJ1
ZmZlci5ieXRlcygpICsgZGVzdFkgKiBidWZmZXIuYnVmZmVyV2lkdGgoKTsKKyAgICBKU0FNUExF
ICpzcmNFbmQgPSBzcmMgKyBzcmNXaWR0aCArIHNyY1dpZHRoICsgc3JjV2lkdGg7CisgICAgd2hp
bGUgKHNyYyA8IHNyY0VuZCkgeworICAgICAgICB1bnNpZ25lZCByID0gKnNyYysrOworICAgICAg
ICB1bnNpZ25lZCBnID0gKnNyYysrOworICAgICAgICB1bnNpZ25lZCBiID0gKnNyYysrOworICAg
ICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdCsrLCByLCBnLCBiKTsKKyAgICB9Cit9
CisKKyNlbHNlIC8vIFVTRShJTUFHRUZSQU1FU0lOSykKKwogc3RhdGljIHZvaWQgY29udmVydENN
WUtUb1JHQkEoUkdCQTMyQnVmZmVyJiBkZXN0LCBpbnQgZGVzdFksIEpTQU1QUk9XIHNyYywgaW50
IHNyY1dpZHRoCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgYm9vbCBzY2FsZWQsIGNvbnN0IFZlY3RvcjxpbnQ+
JiBzY2FsZWRDb2x1bW5zCkBAIC01MzcsMTMgKzYzNCwyNiBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0
UkdCVG9SR0JBKFJHQkEzMkJ1ZmZlciYgZGVzdCwgaW50IGRlc3RZLCBKU0FNUFJPVyBzcmMsIGlu
dCBzcgogICAgIH0KIH0KIAorI2VuZGlmIC8vIFVTRShJTUFHRUZSQU1FU0lOSykKKwogYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogeworI2lmIFVTRShJTUFHRUZSQU1F
U0lOSykKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSB8fCAhbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdKSB7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyNlbHNlCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCiAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBJ
bWFnZUZyYW1lU2luayYgYnVmZmVyID0gKm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyNlbHNlCiAg
ICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisjZW5kaWYK
ICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewog
ICAgICAgICBpbnQgYnVmZmVyV2lkdGggPSBzaXplKCkud2lkdGgoKTsKICAgICAgICAgaW50IGJ1
ZmZlckhlaWdodCA9IHNpemUoKS5oZWlnaHQoKTsKQEAgLTU1NSw3ICs2NjUsMTEgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICB9CiAjZW5kaWYKIAor
I2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShidWZm
ZXJXaWR0aCwgYnVmZmVySGVpZ2h0LCB0cnVlKSkgeworI2Vsc2UKICAgICAgICAgaWYgKCFidWZm
ZXIuc2V0U2l6ZShidWZmZXJXaWR0aCwgYnVmZmVySGVpZ2h0KSkgeworI2VuZGlmCiAgICAgICAg
ICAgICBtX2ZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KQEAgLTYwMCw2ICs3MTQsMTAgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYK
KworI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgYnVmZmVyLmVuc3VyZUhlaWdodChk
ZXN0WSArIDEpOworI2VuZGlmCiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC02MDcsMTIg
KzcyNSwxOCBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAKIHZv
aWQgSlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFN
RVNJTkspCisgICAgbV9yZWFkZXItPnNldENvbXBsZXRlKCk7CisgICAgaWYgKCFtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXSkKKyAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRl
KTsKKyNlbHNlCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEhhbmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZl
ciwgZXZlbiBpZiB0aGUgaW1hZ2UgZW5kZWQgdXAgYmVpbmcgZW1wdHkuCiAgICAgUkdCQTMyQnVm
ZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgYnVmZmVyLnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworI2VuZGlmCiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVy
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oCmluZGV4IGUyMWI2MmEuLjJlZTIzZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtNDcsNyArNDcs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUg
c2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KICAgICAgICAgdmlydHVhbCBi
b29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAg
ICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5rKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KTsKKyNlbHNlCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KTsKKyNlbmRpZgogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApp
bmRleCAyNTNhNTE5Li40M2NkZjZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTc0LDcgKzc0LDExIEBA
IHB1YmxpYzoKICAgICBQTkdJbWFnZVJlYWRlcihQTkdJbWFnZURlY29kZXIqIGRlY29kZXIpCiAg
ICAgICAgIDogbV9yZWFkT2Zmc2V0KDApCiAgICAgICAgICwgbV9kZWNvZGluZ1NpemVPbmx5KGZh
bHNlKQorI2lmIFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICAgICAgLCBtX2pvYkNvbXBsZXRlKGZh
bHNlKQorI2Vsc2UKICAgICAgICAgLCBtX2ludGVybGFjZUJ1ZmZlcigwKQorI2VuZGlmCiAgICAg
ICAgICwgbV9oYXNBbHBoYSgwKQogICAgIHsKICAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRlX3Jl
YWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwgZGVjb2RpbmdGYWlsZWQsIGRlY29k
aW5nV2FybmluZyk7CkBAIC05MCwxMSArOTQsNDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2Uo
KSB7CiAgICAgICAgIGlmIChtX3BuZyAmJiBtX2luZm8pCiAgICAgICAgICAgICBwbmdfZGVzdHJv
eV9yZWFkX3N0cnVjdCgmbV9wbmcsICZtX2luZm8sIDApOyAgLy8gV2lsbCB6ZXJvIHRoZSBwb2lu
dGVycy4KKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgICAgIG1fam9iQ29tcGxldGUgPSBm
YWxzZTsKKyAgICAgICAgY2xlYXJJbnRlcmZhY2VCdWZmZXIoKTsKKyNlbHNlCiAgICAgICAgIGRl
bGV0ZSBbXW1faW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9IDA7
CisjZW5kaWYKICAgICAgICAgbV9yZWFkT2Zmc2V0ID0gMDsKICAgICB9CiAKKyNpZiBVU0UoSU1B
R0VGUkFNRVNJTkspCisgICAgdm9pZCBzZXRDb21wbGV0ZSgpIHsgbV9qb2JDb21wbGV0ZSA9IHRy
dWU7IH0KKyAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyKHVuc2lnbmVkIHJvdykgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ludGVybGFjZUJ1ZmZlci5pc0VtcHR5KCkgPyAwIDog
bV9pbnRlcmxhY2VCdWZmZXJbcm93XTsKKyAgICB9CisgICAgYm9vbCBjcmVhdGVJbnRlcmxhY2VC
dWZmZXIoaW50IHJvd3MsIGludCByb3dTaXplKSB7CisgICAgICAgIGNsZWFySW50ZXJmYWNlQnVm
ZmVyKCk7CisgICAgICAgIE1lbW9yeUFsbG9jYXRpb25DYW5GYWlsIGNhbkZhaWw7CisgICAgICAg
IHdoaWxlIChyb3dzLS0pIHsKKyAgICAgICAgICAgIGlmIChwbmdfYnl0ZSogYnVmZmVyID0gbmV3
IHBuZ19ieXRlW3Jvd1NpemVdKQorICAgICAgICAgICAgICAgIG1faW50ZXJsYWNlQnVmZmVyLmFw
cGVuZChidWZmZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY2xlYXJJ
bnRlcmZhY2VCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHZvaWQg
Y2xlYXJJbnRlcmZhY2VCdWZmZXIoKQorICAgIHsKKyAgICAgICAgZm9yIChWZWN0b3I8cG5nX2J5
dGVwPjo6aXRlcmF0b3IgaSA9IG1faW50ZXJsYWNlQnVmZmVyLmJlZ2luKCkgOyBpICE9IG1faW50
ZXJsYWNlQnVmZmVyLmVuZCgpIDsgKytpKQorICAgICAgICAgICAgZGVsZXRlW10gKmk7CisgICAg
ICAgIG1faW50ZXJsYWNlQnVmZmVyLmNsZWFyKCk7CisgICAgfQorI2Vsc2UKKyAgICBwbmdfYnl0
ZXAgaW50ZXJsYWNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcmxhY2VCdWZmZXI7IH0K
KyAgICB2b2lkIGNyZWF0ZUludGVybGFjZUJ1ZmZlcihpbnQgc2l6ZSkKKyAgICB7CisgICAgICAg
IG1faW50ZXJsYWNlQnVmZmVyID0gbmV3IHBuZ19ieXRlW3NpemVdOworICAgIH0KKyNlbmRpZgor
CiAgICAgdm9pZCBkZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIHNpemVPbmx5
KQogICAgIHsKICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7CkBAIC0xMTcs
MjggKzE1OSwzMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkZWNvZGluZ1NpemVPbmx5KCkgY29uc3Qg
eyByZXR1cm4gbV9kZWNvZGluZ1NpemVPbmx5OyB9CiAgICAgcG5nX3N0cnVjdHAgcG5nUHRyKCkg
Y29uc3QgeyByZXR1cm4gbV9wbmc7IH0KICAgICBwbmdfaW5mb3AgaW5mb1B0cigpIGNvbnN0IHsg
cmV0dXJuIG1faW5mbzsgfQotICAgIHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIoKSBjb25zdCB7
IHJldHVybiBtX2ludGVybGFjZUJ1ZmZlcjsgfQogICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX2hhc0FscGhhOyB9CiAKICAgICB2b2lkIHNldFJlYWRPZmZzZXQodW5zaWduZWQg
b2Zmc2V0KSB7IG1fcmVhZE9mZnNldCA9IG9mZnNldDsgfQogICAgIHZvaWQgc2V0SGFzQWxwaGEo
Ym9vbCBiKSB7IG1faGFzQWxwaGEgPSBiOyB9CiAKLSAgICB2b2lkIGNyZWF0ZUludGVybGFjZUJ1
ZmZlcihpbnQgc2l6ZSkgewotICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9IG5ldyBwbmdfYnl0
ZVtzaXplXTsKLSAgICB9Ci0KIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0Owog
ICAgIGJvb2wgbV9kZWNvZGluZ1NpemVPbmx5OwogICAgIHBuZ19zdHJ1Y3RwIG1fcG5nOwogICAg
IHBuZ19pbmZvcCBtX2luZm87CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIFZlY3Rvcjxw
bmdfYnl0ZXA+IG1faW50ZXJsYWNlQnVmZmVyOworICAgIGJvb2wgbV9qb2JDb21wbGV0ZTsKKyNl
bHNlCiAgICAgcG5nX2J5dGVwIG1faW50ZXJsYWNlQnVmZmVyOworI2VuZGlmCiAgICAgYm9vbCBt
X2hhc0FscGhhOwogfTsKIAogUE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIoKQogICAg
IDogbV9yZWFkZXIoMCkKIHsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLmFwcGVuZChJbWFnZUZyYW1lU2luazo6Y3JlYXRlSW5zdGFuY2UodHJ1ZSkpOwor
I2VuZGlmCiB9CiAKIFBOR0ltYWdlRGVjb2Rlcjo6flBOR0ltYWdlRGVjb2RlcigpCkBAIC0xNjks
NiArMjE0LDE2IEBAIGJvb2wgUE5HSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAg
IHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCisjaWYgVVNFKElN
QUdFRlJBTUVTSU5LKQorSW1hZ2VGcmFtZVNpbmsqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBJbWFnZUZyYW1lU2luayogZnJhbWUgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zdGF0dXMoKSAh
PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCisgICAgICAgIC8vIERl
Y29kZSB0aGlzIGZyYW1lLgorICAgICAgICBkZWNvZGUoKTsKKyAgICByZXR1cm4gZnJhbWU7Cit9
CisjZWxzZQogUkdCQTMyQnVmZmVyKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQpAQCAtMTgzLDYgKzIzOCw3IEBAIFJH
QkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQogICAgICAgICBkZWNvZGUoKTsKICAgICByZXR1cm4gJmZyYW1lOwogfQorI2VuZGlmCiAK
IC8vIEZlZWQgZGF0YSB0byB0aGUgUE5HIHJlYWRlci4KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUoYm9vbCBzaXplT25seSkKQEAgLTE5MCw5ICsyNDYsMTQgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OmRlY29kZShib29sIHNpemVPbmx5KQogICAgIGlmIChtX2ZhaWxlZCkKICAgICAgICAg
cmV0dXJuOwogCisKICAgICBtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIHNpemVP
bmx5KTsKICAgICAKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgaWYgKG1fZmFpbGVkIHx8
ICFtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0gfHwgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLT5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpIHsKKyNlbHNlIAogICAgIGlmIChtX2Zh
aWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNh
Y2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKKyNlbmRp
ZgogICAgICAgICBkZWxldGUgbV9yZWFkZXI7CiAgICAgICAgIG1fcmVhZGVyID0gMDsKICAgICB9
CkBAIC0zMTUsNyArMzc2LDE0IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgorI2lm
IFVTRShJTUFHRUZSQU1FU0lOSykKKyAgICBpZiAobV9mYWlsZWQgfHwgIW1fZnJhbWVCdWZmZXJD
YWNoZVswXSkKKyAgICAgICAgcmV0dXJuOworICAgIEltYWdlRnJhbWVTaW5rJiBidWZmZXIgPSAq
bV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworI2Vsc2UKICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9
IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyNlbmRpZgorCiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpbnQgd2lkdGggPSBtX3NjYWxlZCA/IG1fc2NhbGVk
Q29sdW1ucy5zaXplKCkgOiBzaXplKCkud2lkdGgoKTsKQEAgLTMyNCw3ICszOTIsMTEgQEAgdm9p
ZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIs
IHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICBpbnQgd2lkdGggPSBzaXplKCkud2lkdGgoKTsK
ICAgICAgICAgaW50IGhlaWdodCA9IHNpemUoKS5oZWlnaHQoKTsKICNlbmRpZgorI2lmIFVTRShJ
TUFHRUZSQU1FU0lOSykKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0
LCAhcmVhZGVyKCktPmhhc0FscGhhKCkpKSB7CisjZWxzZQogICAgICAgICBpZiAoIWJ1ZmZlci5z
ZXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7CisjZW5kaWYKICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHJlYWRlcigpLT5wbmdQ
dHIoKSkpLT5kZWNvZGluZ0ZhaWxlZCgpOwogICAgICAgICAgICAgbG9uZ2ptcChyZWFkZXIoKS0+
cG5nUHRyKCktPmptcGJ1ZiwgMSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMzUsOCArNDA3
LDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciog
cm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAgLy8gRm9yIFBOR3MsIHRoZSBm
cmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KICAgICAgICAgYnVmZmVyLnNldFJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKIAotICAgICAgICBpZiAocmVhZGVyKCkt
PnBuZ1B0cigpLT5pbnRlcmxhY2VkKQorICAgICAgICBpZiAocmVhZGVyKCktPnBuZ1B0cigpLT5p
bnRlcmxhY2VkKSB7CisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgICAgICAgICAgaWYgKCFy
ZWFkZXIoKS0+Y3JlYXRlSW50ZXJsYWNlQnVmZmVyKHNpemUoKS5oZWlnaHQoKSwgKHJlYWRlcigp
LT5oYXNBbHBoYSgpID8gNCA6IDMpICogc2l6ZSgpLndpZHRoKCkpKSB7CisgICAgICAgICAgICAg
ICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyNlbHNlCiAgICAgICAgICAgICByZWFkZXIoKS0+Y3JlYXRlSW50ZXJsYWNlQnVmZmVyKChy
ZWFkZXIoKS0+aGFzQWxwaGEoKSA/IDQgOiAzKSAqIHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhl
aWdodCgpKTsKKyNlbmRpZgorICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJvd0J1ZmZlciA9
PSAwKQpAQCAtMzczLDYgKzQ1MywxMyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxh
YmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgcG5n
X3N0cnVjdHAgcG5nID0gcmVhZGVyKCktPnBuZ1B0cigpOwogICAgIGJvb2wgaGFzQWxwaGEgPSBy
ZWFkZXIoKS0+aGFzQWxwaGEoKTsKICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0gaGFzQWxw
aGEgPyA0IDogMzsKKyNpZiBVU0UoSU1BR0VGUkFNRVNJTkspCisgICAgcG5nX2J5dGVwIHJvdyA9
IHJlYWRlcigpLT5pbnRlcmxhY2VCdWZmZXIocm93SW5kZXgpOworICAgIGlmIChyb3cpCisgICAg
ICAgIHBuZ19wcm9ncmVzc2l2ZV9jb21iaW5lX3JvdyhwbmcsIHJvdywgcm93QnVmZmVyKTsKKyAg
ICBlbHNlCisgICAgICAgIHJvdyA9IHJvd0J1ZmZlcjsKKyNlbHNlCiAgICAgcG5nX2J5dGVwIHJv
dzsKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gcmVhZGVyKCktPmludGVybGFjZUJ1
ZmZlcigpOwogICAgIGlmIChpbnRlcmxhY2VCdWZmZXIpIHsKQEAgLTM4MSw2ICs0NjgsNjcgQEAg
dm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZm
ZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJvdyA9IHJv
d0J1ZmZlcjsKKyNlbmRpZgorCisjaWYgVVNFKElNQUdFRlJBTUVTSU5LKQorICAgIC8vIENvcHkg
dGhlIGRhdGEgaW50byBvdXIgYnVmZmVyLgorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05f
U0FNUExJTkcpCisgICAgaWYgKG1fc2NhbGVkKSB7CisgICAgICAgIGludCBkZXN0WSA9IHNjYWxl
ZFkocm93SW5kZXgpOworICAgICAgICBpZiAoZGVzdFkgPCAwKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpbnQgY29sdW1ucyA9IG1fc2NhbGVkQ29sdW1ucy5zaXplKCk7CisgICAgICAg
IC8vIGVxdWl2YWxlbnQgdG8gaWYgKCFoYXNBbHBoYSkKKyAgICAgICAgaWYgKGJ1ZmZlci5pczE2
Yml0KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBkc3QxNiA9ICh1bnNpZ25lZCBz
aG9ydCopYnVmZmVyLmJ5dGVzKCkgKyBkZXN0WSAqIGJ1ZmZlci5idWZmZXJXaWR0aCgpOworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyBtX3NjYWxlZENvbHVtbnNbaV0gKiAzOworICAg
ICAgICAgICAgICAgIEltYWdlRnJhbWVTaW5rOjpzZXRSR0IxNigqZHN0MTYrKywgcGl4ZWxbMF0s
IHBpeGVsWzFdLCBwaXhlbFsyXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCogZHN0ID0gKHVuc2lnbmVkKilidWZmZXIuYnl0ZXMoKSArIGRl
c3RZICogYnVmZmVyLmJ1ZmZlcldpZHRoKCk7CisgICAgICAgICAgICBib29sIHNhd0FscGhhID0g
YnVmZmVyLmhhc0FscGhhKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVt
bnM7IGkrKykgeworICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIG1fc2Nh
bGVkQ29sdW1uc1tpXSAqIDQ7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBwaXhl
bFszXTsKKyAgICAgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCQSgqZHN0KyssIHBp
eGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIGFscGhhKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXNhd0FscGhhICYmIGFscGhhIDwgMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIHNhd0FscGhh
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQor
I2VuZGlmCisgICAgeworICAgICAgICBpbnQgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKyAgICAg
ICAgLy8gZXF1aXZhbGVudCB0byBpZiAoIWhhc0FscGhhKQorICAgICAgICBpZiAoYnVmZmVyLmlz
MTZiaXQoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQqIGRzdDE2ID0gKHVuc2lnbmVk
IHNob3J0KilidWZmZXIuYnl0ZXMoKSArIHJvd0luZGV4ICogYnVmZmVyLmJ1ZmZlcldpZHRoKCk7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCByZWQgPSAqcm93Kys7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
Z3JlZW4gPSAqcm93Kys7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICpyb3crKzsK
KyAgICAgICAgICAgICAgICBJbWFnZUZyYW1lU2luazo6c2V0UkdCMTYoKmRzdDE2KyssIHJlZCwg
Z3JlZW4sIGJsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdW5zaWduZWQqIGRzdCA9ICh1bnNpZ25lZCopYnVmZmVyLmJ5dGVzKCkgKyByb3dJbmRleCAq
IHdpZHRoOworICAgICAgICAgICAgYm9vbCBzYXdBbHBoYSA9IGJ1ZmZlci5oYXNBbHBoYSgpOwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgcmVkID0gKnJvdysrOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdy
ZWVuID0gKnJvdysrOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAqcm93Kys7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAqcm93Kys7CisgICAgICAgICAgICAgICAg
SW1hZ2VGcmFtZVNpbms6OnNldFJHQkEoKmRzdCsrLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CisgICAgICAgICAgICAgICAgaWYgKCFzYXdBbHBoYSAmJiBhbHBoYSA8IDI1NSkgeworICAgICAg
ICAgICAgICAgICAgICBzYXdBbHBoYSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ci5zZXRIYXNBbHBoYSh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgYnVmZmVyLmVuc3VyZUhlaWdodChyb3dJbmRleCArIDEpOwor
I2Vsc2UKIAogICAgIC8vIENvcHkgdGhlIGRhdGEgaW50byBvdXIgYnVmZmVyLgogI2lmIEVOQUJM
RShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkBAIC00MjgsOSArNTc2LDE1IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0ZSgpCiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICNpZiBVU0UoSU1BR0VGUkFNRVNJTksp
CisJbV9yZWFkZXItPnNldENvbXBsZXRlKCk7CisJaWYgKG1fZnJhbWVCdWZmZXJDYWNoZVswXSkK
KwkJbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNv
bXBsZXRlKTsKKyNlbHNlCiAgICAgLy8gSGFuZCBiYWNrIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQg
YnVmZmVyLCBldmVuIGlmIHRoZSBpbWFnZSBlbmRlZCB1cCBiZWluZyBlbXB0eS4KICAgICBSR0JB
MzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBidWZmZXIuc2V0
U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CisjZW5kaWYKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAppbmRleCAzYzA1MzViLi5jOTU5Y2VmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDYsNyArNDcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBXaGV0aGVy
IG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KICAgICAg
ICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogCisjaWYgVVNFKElNQUdFRlJBTUVT
SU5LKQorICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWVTaW5rKiBmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KTsKKyNlbHNlCiAgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgZGVj
b2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>