<?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>54474</bug_id>
          
          <creation_ts>2011-02-15 09:51:57 -0800</creation_ts>
          <short_desc>Pixel tests differences on 10.6.6 32bit vs. 64bit</short_desc>
          <delta_ts>2014-05-12 06:09:01 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>72254</dependson>
          <blocked>62204</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>mihaip</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>vanuan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>351363</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-15 09:51:57 -0800</bug_when>
    <thetext>When I generate a SVG pixel test baseline using my vanilla 10.6.6 installation, on my old Core Duo MacBook Pro (32bit), copy it over to my Core 2 Duo MacBook Pro (64bit) there are numerous of differences in the results, they faill in two categories:
a) Just one-pixel diff, not visible, only if you look really close (below 0.01% difference), probably explainable as CGFloat is float on 32bit / double on 64bit, causing very tiny rendering differences at some positions.
b) Whole text fragments are moved a tiny amount in x/y direction, scale seems to vary a bit on several tests, all in all pretty weird.

The goal is to have a baseline, that can be generated on eg. a 32bit SL machine, that passes with tolerance 0 on the 32bit machine, and tolerance 0.01 on the 64bit machine. Currently there are 250+ differences
So there&apos;s nothing we can do about a), as CGFloat is typedef&apos;ed to float on 32bit, and double on 64bit.

had to debug quite a lot, to find out what&apos;s causing b), patch is coming soon, with more explainations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351997</commentid>
    <comment_count>1</comment_count>
      <attachid>82618</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 05:21:46 -0800</bug_when>
    <thetext>Created attachment 82618
Patch v1

Uploading a first version for a EWS check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352007</commentid>
    <comment_count>2</comment_count>
      <attachid>82618</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-16 05:48:14 -0800</bug_when>
    <thetext>Comment on attachment 82618
Patch v1

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

LGTM. r=me. You should land this on weekend. It&apos;s more likely that you get the results fixed on weekend than today. But it is up to you.

&gt; Source/WebCore/ChangeLog:16
&gt; +        b) Failures &gt;0.1px (text origin/scale is slightly different, user-visible).

s/px/%/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352008</commentid>
    <comment_count>3</comment_count>
      <attachid>82618</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-02-16 05:49:31 -0800</bug_when>
    <thetext>Comment on attachment 82618
Patch v1

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

&gt; Source/WebCore/svg/SVGSVGElement.cpp:137
&gt; +    FloatPoint origin;
&gt; +    if (!isOutermostSVG())
&gt; +        origin = FloatPoint(x().value(this), y().value(this));
&gt; +
&gt; +    FloatSize size(width().value(this), height().value(this));
&gt; +    return viewBoxToViewTransform(size.width(), size.height()).mapRect(FloatRect(origin, size));

Talked on IRC about it. I think it is better readable to use a FloatRect from the beginning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352052</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 07:23:30 -0800</bug_when>
    <thetext>Landed in r78704, including a first set of pixel test rebaselines.
Landed second chunk of pixel test updates in r78706.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352058</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 07:35:28 -0800</bug_when>
    <thetext>Landed third chunk in r78707.
Landing the fourth chunk hangs, I have to leave for 1h, back then landing the rest of the baseline.
Bots should be fine though, as I already landed the text changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352069</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-16 07:51:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78704 might have broken Qt Linux Release
The following tests are not passing:
svg/custom/non-scaling-stroke-markers.svg
svg/custom/text-rotated-gradient.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352113</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 09:00:16 -0800</bug_when>
    <thetext>Ossy updated Qt baselines in r78709.
I landed the fourth chunk in r78711.
Michail landed Chromium baselines in r78712.
I forgot to include the WebCore ChangeLog, fixed in r78713.

Now landing last chunk of pixel test results...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352127</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 09:15:16 -0800</bug_when>
    <thetext>Landed the last chunk of pixel test results in r78714.
Landed gtk/win/mac-leopard text result updates in r78716.

Now all bots should be happy again, closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352152</commentid>
    <comment_count>9</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 10:00:15 -0800</bug_when>
    <thetext>Oops, webkit-patch rebaseline doesn&apos;t generate new platforms for win, if the test result isn&apos;t already present, but instead rebaselines mac - I mixed up win/mac-leopard results in my last commit.
Fixed in r78720.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352169</commentid>
    <comment_count>10</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 10:21:07 -0800</bug_when>
    <thetext>Updated gtk results using the 64bit debug bot in r78722. I fear gtk exposes another rounding bug.
Reopening bug, eventually we have to skip some tests on gtk, awaiting results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352171</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-16 10:23:35 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Updated gtk results using the 64bit debug bot in r78722. I fear gtk exposes another rounding bug.
&gt; Reopening bug, eventually we have to skip some tests on gtk, awaiting results.

Do you mind giving a bit more information about the rounding bug you&apos;ve uncovered on GTK+ and where it might reside?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352185</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 10:44:56 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Updated gtk results using the 64bit debug bot in r78722. I fear gtk exposes another rounding bug.
&gt; &gt; Reopening bug, eventually we have to skip some tests on gtk, awaiting results.
&gt; 
&gt; Do you mind giving a bit more information about the rounding bug you&apos;ve uncovered on GTK+ and where it might reside?

For the record, talking with mrobinsons on IRC:
[19:42] WildFox: I just had two issues with text results
[19:42] WildFox: but the reason is pretty simple to find
[19:42] WildFox: width=12, can be stored in a FloatRect, as 11.99999996 or 12.00000004, whenever we use enclosingIntRect() we have a problem, as &apos;width&apos; is ceil&apos;ed, that means ceil(11.999..) = 12, ceil(12.0004) = 13
[19:43] WildFox: that&apos;s mostly the reason for differ&apos;ing textual dumps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352252</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-16 12:18:17 -0800</bug_when>
    <thetext>(12:08:54 PM) WildFox: mrobinson: could you post your findings as well on the br
(12:09:25 PM) mrobinson: Sure.
(12:09:48 PM) WildFox: maybe mention that you&apos;ll see the same problem as I saw before

I debugged this locally and found the following issue on my 64-bit GTK+ setup:

WebCore::RenderSVGRoot::clippedOverflowRectForRepaint calls
WebCore::SVGRenderSupport::clippedOverflowRectForRepaint calls
WebCore::AffineTransform::mapRect
@ line 285: repaintRect = localToBorderBoxTransform().mapRect(repaintRect); 
AffineTransformation::mapRect(IntRect) calls @ line 306
return enclosingIntRect(mapRect(FloatRect(rect)));

The return value of mapRect(FloatRect(rect)) is
(const WebCore::FloatRect &amp;) @0x7fffffffd230: {m_location = {m_x = 99.9999847, m_y = 0}, m_size = {m_width = 300, m_height = 300}}

And thus the enclosingIntRect is:
 {m_location = {m_x = 99, m_y = 0}, m_size = {m_width = 301, m_height = 300}}

And that&apos;s the root of the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352305</commentid>
    <comment_count>14</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-16 13:39:25 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; And that&apos;s the root of the problem.

My statement here is incorrect. The root of the problem seems to be 
SVGPreserveAspectRatio::getCTM. It call transform.translate (which accepts double paramters) with the float arguments.. As a proof of concept, this change seems to fix the 64-bit rounding issue with 
LayoutTests/svg/W3C-SVG-1.1/struct-frag-03-t.svg.


diff --git a/Source/WebCore/svg/SVGPreserveAspectRatio.cpp b/Source/WebCore/svg/SVGPreserveAspectRatio.cpp
index 2ebcc1f..82b9bb9 100644
--- a/Source/WebCore/svg/SVGPreserveAspectRatio.cpp
+++ b/Source/WebCore/svg/SVGPreserveAspectRatio.cpp
@@ -262,13 +262,19 @@ AffineTransform SVGPreserveAspectRatio::getCTM(float logicX, float logicY, float
         return transform;
     }
 
+    double logicXD = logicX;
+    double logicWidthD = logicWidth;
+    double logicHeightD = logicHeight;
+    double physWidthD = physWidth;
+    double physHeightD = physHeight;
+
     if ((logicalRatio &lt; physRatio &amp;&amp; (m_meetOrSlice == SVG_MEETORSLICE_MEET)) || (logicalRatio &gt;= physRatio &amp;&amp; (m_meetOrSlice == SVG_MEETORSLICE_SLICE))) {
         transform.scaleNonUniform(physHeight / logicHeight, physHeight / logicHeight);
 
         if (m_align == SVG_PRESERVEASPECTRATIO_XMINYMIN || m_align == SVG_PRESERVEASPECTRATIO_XMINYMID || m_align == SVG_PRESERVEASPECTRATIO_XMINYMAX)
             transform.translate(-logicX, -logicY);
         else if (m_align == SVG_PRESERVEASPECTRATIO_XMIDYMIN || m_align == SVG_PRESERVEASPECTRATIO_XMIDYMID || m_align == SVG_PRESERVEASPECTRATIO_XMIDYMAX)
-            transform.translate(-logicX - (logicWidth - physWidth * logicHeight / physHeight) / 2, -logicY);
+            transform.translate(-logicXD - (logicWidthD - physWidthD * logicHeightD / physHeightD) / 2, -logicY);
         else
             transform.translate(-logicX - (logicWidth - physWidth * logicHeight / physHeight), -logicY);

Perhaps the solution here is for SVGPreserveAspectRatio::getCTM to accept double parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352445</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-16 16:30:48 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78722 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352625</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-16 23:26:34 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; And that&apos;s the root of the problem.
&gt; 
&gt; My statement here is incorrect. The root of the problem seems to be 
&gt; SVGPreserveAspectRatio::getCTM. It call transform.translate (which accepts double paramters) with the float arguments.. As a proof of concept, this change seems to fix the 64-bit rounding issue with 
&gt; LayoutTests/svg/W3C-SVG-1.1/struct-frag-03-t.svg.
&gt; 
&gt; 
&gt; diff --git a/Source/WebCore/svg/SVGPreserveAspectRatio.cpp b/Source/WebCore/svg/SVGPreserveAspectRatio.cpp
&gt; index 2ebcc1f..82b9bb9 100644
&gt; --- a/Source/WebCore/svg/SVGPreserveAspectRatio.cpp
&gt; +++ b/Source/WebCore/svg/SVGPreserveAspectRatio.cpp
&gt; @@ -262,13 +262,19 @@ AffineTransform SVGPreserveAspectRatio::getCTM(float logicX, float logicY, float
&gt;          return transform;
&gt;      }
&gt; 
&gt; +    double logicXD = logicX;
&gt; +    double logicWidthD = logicWidth;
&gt; +    double logicHeightD = logicHeight;
&gt; +    double physWidthD = physWidth;
&gt; +    double physHeightD = physHeight;
&gt; +
&gt;      if ((logicalRatio &lt; physRatio &amp;&amp; (m_meetOrSlice == SVG_MEETORSLICE_MEET)) || (logicalRatio &gt;= physRatio &amp;&amp; (m_meetOrSlice == SVG_MEETORSLICE_SLICE))) {
&gt;          transform.scaleNonUniform(physHeight / logicHeight, physHeight / logicHeight);
&gt; 
&gt;          if (m_align == SVG_PRESERVEASPECTRATIO_XMINYMIN || m_align == SVG_PRESERVEASPECTRATIO_XMINYMID || m_align == SVG_PRESERVEASPECTRATIO_XMINYMAX)
&gt;              transform.translate(-logicX, -logicY);
&gt;          else if (m_align == SVG_PRESERVEASPECTRATIO_XMIDYMIN || m_align == SVG_PRESERVEASPECTRATIO_XMIDYMID || m_align == SVG_PRESERVEASPECTRATIO_XMIDYMAX)
&gt; -            transform.translate(-logicX - (logicWidth - physWidth * logicHeight / physHeight) / 2, -logicY);
&gt; +            transform.translate(-logicXD - (logicWidthD - physWidthD * logicHeightD / physHeightD) / 2, -logicY);
&gt;          else
&gt;              transform.translate(-logicX - (logicWidth - physWidth * logicHeight / physHeight), -logicY);
&gt; 
&gt; Perhaps the solution here is for SVGPreserveAspectRatio::getCTM to accept double parameters.
Look at my patch, I reverted just _that_. It was causing trouble for me between mac machines. Internally we use float everywhere in SVG, except for AffineTransform which is double based...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352860</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-17 07:28:49 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; Perhaps the solution here is for SVGPreserveAspectRatio::getCTM to accept double parameters.
&gt; Look at my patch, I reverted just _that_. It was causing trouble for me between mac machines. Internally we use float everywhere in SVG, except for AffineTransform which is double based...

Right. I discovered this shortly after while talking to Dirk. The change seems suspicious as it throws away precision in this situation. I&apos;m not surprised it introduced rounding errors. Perhaps there is some other way to achieve what you want for Mac, without affecting other platform detrimentally. Perhaps AffineTransformation could also accept floats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352953</commentid>
    <comment_count>18</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-17 09:10:03 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; &gt; Perhaps the solution here is for SVGPreserveAspectRatio::getCTM to accept double parameters.
&gt; &gt; Look at my patch, I reverted just _that_. It was causing trouble for me between mac machines. Internally we use float everywhere in SVG, except for AffineTransform which is double based...
&gt; 
&gt; Right. I discovered this shortly after while talking to Dirk. The change seems suspicious as it throws away precision in this situation. I&apos;m not surprised it introduced rounding errors. Perhaps there is some other way to achieve what you want for Mac, without affecting other platform detrimentally. Perhaps AffineTransformation could also accept floats.

It seems specializing float operations within AffineTransformation can also fix this issue.


diff --git a/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp b/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp
index a1ffa30..f8c52b5 100644
--- a/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp
+++ b/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp
@@ -295,10 +295,10 @@ IntPoint AffineTransform::mapPoint(const IntPoint&amp; point) const
 
 FloatPoint AffineTransform::mapPoint(const FloatPoint&amp; point) const
 {
-    double x2, y2;
-    map(point.x(), point.y(), x2, y2);
+    float x2 = (narrowPrecisionToFloat(m_transform[0]) * point.x() + narrowPrecisionToFloat(m_transform[2]) * point.y() + narrowPrecisionToFloat(m_transform[4]));
+    float y2 = (narrowPrecisionToFloat(m_transform[1]) * point.x() + narrowPrecisionToFloat(m_transform[3]) * point.y() + narrowPrecisionToFloat(m_transform[5]));
 
-    return FloatPoint(narrowPrecisionToFloat(x2), narrowPrecisionToFloat(y2));
+    return FloatPoint(x2, y2);
 }
 
 IntRect AffineTransform::mapRect(const IntRect &amp;rect) const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438151</commentid>
    <comment_count>19</comment_count>
      <attachid>82618</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-16 09:17:34 -0700</bug_when>
    <thetext>Comment on attachment 82618
Patch v1

Clearing review flag since this was reopened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500282</commentid>
    <comment_count>20</comment_count>
    <who name="">vanuan</who>
    <bug_when>2011-11-10 14:22:55 -0800</bug_when>
    <thetext>Might be a duplicate of bug https://bugs.webkit.org/show_bug.cgi?id=62204</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501530</commentid>
    <comment_count>21</comment_count>
    <who name="">vanuan</who>
    <bug_when>2011-11-13 11:35:43 -0800</bug_when>
    <thetext>I&apos;ve managed to have all rounding related tests pass with 32bit gtk build by using these additional flags:


Index: GNUmakefile.am
===================================================================
--- GNUmakefile.am	(revision 99472)
+++ GNUmakefile.am	(working copy)
@@ -116,7 +116,8 @@
 	-Wformat -Wformat-security -Wno-format-y2k -Wundef \
 	-Wmissing-format-attribute -Wpointer-arith -Wwrite-strings \
 	-Wno-unused-parameter -Wno-parentheses \
-	-fno-exceptions -DENABLE_GLIB_SUPPORT=1
+	-fno-exceptions -DENABLE_GLIB_SUPPORT=1 \
+	-march=pentium4 -msse2 -mfpmath=sse
 
 
 global_cxxflags += \


The description of these flags and why they are needed is here: http://codesearch.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/build/common.gypi&amp;q=file:build/common.gypi&amp;exact_package=chromium&amp;l=1718

Should I create a patch? What do you think about this approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501584</commentid>
    <comment_count>22</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-13 20:01:56 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; I&apos;ve managed to have all rounding related tests pass with 32bit gtk build by using these additional flags:
&gt; 
&gt; 
&gt; Index: GNUmakefile.am
&gt; ===================================================================
&gt; --- GNUmakefile.am    (revision 99472)
&gt; +++ GNUmakefile.am    (working copy)
&gt; @@ -116,7 +116,8 @@
&gt;      -Wformat -Wformat-security -Wno-format-y2k -Wundef \
&gt;      -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings \
&gt;      -Wno-unused-parameter -Wno-parentheses \
&gt; -    -fno-exceptions -DENABLE_GLIB_SUPPORT=1
&gt; +    -fno-exceptions -DENABLE_GLIB_SUPPORT=1 \
&gt; +    -march=pentium4 -msse2 -mfpmath=sse
&gt; 
&gt; 
&gt;  global_cxxflags += \
&gt; 

Awesome! Do you mind opening a new bug that addresses GTK+ specifically. I&apos;d prefer that this work-around only be applied when building via build-webkit, because I&apos;m not sure if it has any performance implications otherwise. You can ensure that it only affects build-webkit, by modifying Tools/Scripts/webkitdirs.pm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501739</commentid>
    <comment_count>23</comment_count>
    <who name="">vanuan</who>
    <bug_when>2011-11-14 02:12:49 -0800</bug_when>
    <thetext>I&apos;m not sure how to do that. Can you help me with it?

Opened a new bug:
https://bugs.webkit.org/show_bug.cgi?id=72254</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502853</commentid>
    <comment_count>24</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-15 06:15:17 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; &gt; Perhaps the solution here is for SVGPreserveAspectRatio::getCTM to accept double parameters.
&gt; &gt; &gt; Look at my patch, I reverted just _that_. It was causing trouble for me between mac machines. Internally we use float everywhere in SVG, except for AffineTransform which is double based...
&gt; &gt; 
&gt; &gt; Right. I discovered this shortly after while talking to Dirk. The change seems suspicious as it throws away precision in this situation. I&apos;m not surprised it introduced rounding errors. Perhaps there is some other way to achieve what you want for Mac, without affecting other platform detrimentally. Perhaps AffineTransformation could also accept floats.
&gt; 
&gt; It seems specializing float operations within AffineTransformation can also fix this issue.
I came to another conclusion. mapPoint is only used directly in the SVG rendering code for hit testing, for anything else mapRect is used (computeRectForRepaint, etc.) which is used to dump the position of SVG renderers.

mapRect currently uses FloatQuad. The four corners are rounded individually, and FloatRect(left, top, right - left, top - bottom) is returned, but each of the corners is rounded on their own.
I&apos;m now trying to preserver precision as long as possible (calculating the - in doubles now, instead of floats). This affects several test results on Mac, I hope they are progressions for Gtk, see bug 47467 for the recent work towards fixing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510627</commentid>
    <comment_count>25</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-29 02:09:00 -0800</bug_when>
    <thetext>I&apos;ve heard that the Lion baseline is supposed to be sharable - at least Timothy &amp; Dirk could share a baseline that passed with tolerance 0 on both their machines which differed.

Does anyone have Lion machines to test this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008553</commentid>
    <comment_count>26</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2014-05-12 06:09:01 -0700</bug_when>
    <thetext>We don&apos;t even support 10.6 anymore IIRC.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82618</attachid>
            <date>2011-02-16 05:21:46 -0800</date>
            <delta_ts>2011-07-16 09:17:34 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>FirstAttempt.diff</filename>
            <type>text/plain</type>
            <size>23656</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4Njg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMDItMTUgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGl4ZWwgdGVzdHMgZGlmZmVyZW5jZXMgb24gMTAu
Ni42IDMyYml0IHZzLiA2NGJpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQ0NzQKKworICAgICAgICBXaGVuIGdlbmVyYXRpbmcgYSBTVkcgcGl4ZWwg
dGVzdCBiYXNlbGluZSB3aXRoIGEgdmFuaWxsYSAxMC42LjYgaW5zdGFsbGF0aW9uIG9uIGEgMzJi
aXQgbWFjaGluZSAoQ29yZSBEdW8gTUJQKQorICAgICAgICBhbmQgY29tcGFyaW5nIHRoZSBydW4g
d2l0aCBhIHNvZnR3YXJlLWlkZW50aWNhbCA2NGJpdCBtYWNoaW5lIChDb3JlIDIgRHVvIE1CUCks
IHRoZXJlIGFyZSBhYm91dCAyNTAgZGlmZmVyZW5jZXMuCisKKyAgICAgICAgVGhlc2UgZmFsbCBp
biB0d28gY2F0ZWdvcmllczoKKyAgICAgICAgYSkgMXB4IGRpZmZlcmVuY2VzIGluIHRleHQgQUEs
IG9yIHdoZW4gZHJhd2luZyBjaXJjbGVzIChhbGwgX2JlbG93XyBhIHRvbGVyYW5jZSBvZiAwLjAx
KS4gT25seSB2aXNpYmxlIGluIHRoZSBzdWJ0cmFjdGVkIGRpZmZlcmVuY2UgaW1hZ2UuCisgICAg
ICAgICAgIFRoZSByZWFzb24gaXMgcHJvYmFibHkgQ0dGbG9hdCBiZWluZyB0eXBlZGVmZWQgdG8g
ZG91YmxlIG9uIDY0Yml0IG1hY2hpbmVzLCBhbmQgZmxvYXQgb24gMzJiaXQgbWFjaGluZXMuCisg
ICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBzdG9yZXMgZG91Ymxlcywgc28gb24gMzJiaXQgbWFj
aGluZXMgd2UgbG9vc2UgcHJlY2lzaW9uIGZyb20gQWZmaW5lVHJhbnNmb3JtIC0+IENHQWZmaW5l
VHJhbnNmb3JtLgorCisgICAgICAgIGIpIEZhaWx1cmVzID4wLjFweCAodGV4dCBvcmlnaW4vc2Nh
bGUgaXMgc2xpZ2h0bHkgZGlmZmVyZW50LCB1c2VyLXZpc2libGUpLgorICAgICAgICAgICBDYXVz
ZWQgYnkgc2V2ZXJhbCBzb3VyY2VzIG9mIG51bWVyaWNhbCBpbnN0YWJpbGl0aWVzIHdpdGhpbiB0
aGUgU1ZHIHJlbmRlcmluZyBjb2RlLgorCisgICAgICAgICAgIC0+IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW86OmdldENUTSgpIGNvbXB1dGVzIGFuIEFmZmluZVRyYW5zZm9ybSB1c2luZyBkb3VibGVz
IGFzIGlucHV0IHBhcmFtZXRlcnMsIGJ1dCBmbG9hdHMgYXJlIHBhc3NlZCAobGlrZSBldmVyeXdo
ZXJlIGVsc2UgaW4gU1ZHKS4KKyAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBj
b21wdXRlIHRoZSB2aWV3Qm94IEFmZmluZVRyYW5zZm9ybSwgdGhhdCBhZmZlY3RzIHRoZSByZW5k
ZXJpbmcgb2YgZXZlcnkgY29udGVudCBpbiB0aGUgZG9jdW1lbnQuIFJlbmRlclNWR1Jvb3QgY29u
Y2F0cworICAgICAgICAgICAgICB0aGlzIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byB0aGUgR3Jh
cGhpY3NDb250ZXh0IENUTSwgcmVzdWx0aW5nIGluIGEgc291cmNlIG9mIG51bWVyaWNhbCBpbXBy
ZWNpc2lvbi4KKworICAgICAgICAgICAtPiBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRo
U2hhZG93cygpIGNhbGN1bGF0ZXMgYSBzY2FsaW5nIGZhY3RvciBmb3IgdGV4dCwgdG8gc2NhbGUg
dXAgdGhlIHNwZWNpZmllZCBmb250IHNpemUsIHRvIHRoZSBhY3R1YWwgb24tc2NyZWVuIHNpemUu
CisgICAgICAgICAgICAgIFNWR0lubGluZVRleHRCb3ggdXNlcyB0aGUgc2NhbGVkIEZvbnQgb2Jq
ZWN0LCB0byBkcmF3IGluIGFuIHVuc2NhbGVkIGNvbnRleHQsIHRoYXQgZ2V0cyBzY2FsZWQgdXAg
YWdhaW4gYWZ0ZXJ3YXJkcy4KKyAgICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoMSAvIHNjYWxp
bmdGYWN0b3IpOyBzY2FsZWRGb250LmRyYXdUZXh0KCk7IGNvbnRleHQtPnNjYWxlKHNjYWxpbmdG
YWN0b3IpOworCisgICAgICAgICAgICAgIFRvIHJlbW92ZSB0aGUgc2NhbGUgZnJvbSB0aGUgY3Vy
cmVudCBHcmFwaGljc0NvbnRleHQgQ1RNLCAiY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBz
Y2FsaW5nRmFjdG9yLCAuLi4pIiBpcyB1c2VkLiBBcyBBZmZpbmVUcmFuc2Zvcm0gc3RvcmVzCisg
ICAgICAgICAgICAgIGRvdWJsZXMgaW50ZXJuYWxseSwgaXQncyBsaWtlbHkgdGhhdCAiY29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBjdG0uYSgpLCAuLiIgZG9lc24ndCBnaXZlIHlvdSBhIG1h
dHJpeCB3aXRoIGE9MSwgYnV0IHNvbWV0aGluZyBjbG9zZSB0byAxLgorICAgICAgICAgICAgICBV
c2luZyAiY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnNjYWxlKDEgLyBjdG0u
YSgpLCAuLi4iIGNvdWxkIGJlIHVzZWQgYXMgd29ya2Fyb3VuZCwgdG8gcHJlc2VydmUgZG91Ymxl
IHByZWNpc2lvbi4KKyAgICAgICAgICAgICAgRml4aW5nIHRoYXQgYnJpbmdzIHVzIGRvd24gdG8g
anVzdCBhIGZldyBwaXhlbCB0ZXN0cyB0aGF0IGRpZmZlciBiZXR3ZWVuIDMyICYgNjRiaXQuIFRo
ZXJlIGlzIHN0aWxsIG51bWVyaWNhbCBpbXByZWNpc2lvbiwgYXMgZmxvYXRpbmctcG9pbnQKKyAg
ICAgICAgICAgICAgbnVtYmVyIHJlcHJlc2VudGF0aW9ucyBhcmVuJ3QgYWx3YXlzIHByZWNpc2Uu
IFVuZm9ydHVuYXRlbHkgQ29yZUdyYXBoaWNzIGRvZXNuJ3QgcHJvdmlkZSBhIHB1YmxpYyB3YXkg
dG8ganVzdCBzZXQgYSBDVE0sIGl0IG9ubHkgYWxsb3dzIHRvIGNvbmNhdCB0aGVtLgorICAgICAg
ICAgICAgICBGb3J0dW5hdGVseSBDR0NvbnRleHRTZXRDVE0oKSBpcyBhdmFpbGFibGUsIGFzIHBy
aXZhdGUgbWV0aG9kLCB0aGF0IGFsbG93cyBtZSB0byBzd2l0Y2ggdGhlIGNvbnRleHQgQ1RNIHRv
IGFueSBhcmJpdGFyeSBDR0FmZmluZVRyYW5zZm9ybS4KKworICAgICAgICAgICAgICAtPiBBZGQg
R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgYW5kIGltcGxl
bWVudCBpdCBmb3IgYWxsIHBsYXRmb3JtcyAoZWFjaCBleHBsaWNpdGVseSBleHBvc2VzIGEgJ3Nl
dENUTScgY29uY2VwdCwgZXhjZXB0IENHKQorICAgICAgICAgICAgICAgICBVc2UgQ0dDb250ZXh0
U2V0Q1RNKCkgZm9yIENHLCB3aGljaCBhcHBlYXJzIHRvIGJlIHByZXNlbnQgc2luY2UgYXQgbGVh
c3QgMTAuNCwgQ2Fpcm8gaXMgdXNpbmcgaXQgZm9yIHRoZSBzYW1lIHB1cnBvc2Ugc2luY2Ugc29t
ZSB5ZWFycyEKKworICAgICAgICAgICAgICAtPiBJbnN0ZWFkIG9mIHNjYWxpbmcgdGhlIEdyYXBo
aWNzQ29udGV4dCBiZWZvcmUgZHJhd2luZyB0ZXh0LCBncmFiIHRoZSBjdXJyZW50IENUTSB1c2lu
ZyBjb250ZXh0LT5nZXRDVE0oKSwgc2NhbGUgaXQgYnkgJzEgLyBzY2FsaW5nRmFjdG9yJworICAg
ICAgICAgICAgICAgICBub3JtYWxpemUgdGhlIHRyYW5zZm9ybSAobG9vayBmb3IgdmFsdWVzIGNs
b3NlIHRvIDAvMSB1c2luZyBmbG9hdCBwcmVjaXNpb24sIGFuZCByb3VuZCEpLCBhbmQgYXNzaWdu
IGl0IHVzaW5nIGNvbnRleHQtPnNldENUTShub3JtYWxpemVkVHJhbnNmb3JtKS4KKyAgICAgICAg
ICAgICAgICAgQWZ0ZXIgZHJhd2luZywganVzdCBzd2l0Y2ggYmFjayB0byB0aGUgcHJlc2VydmVk
IG9yaWdpbmFsIENUTSwgYm90aCBvcGVyYXRpb25zIG5lZWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
VE0uCisgICAgICAgICAgICAgICAgIFRoaXMgZml4ZXMgYWxsIHBpeGVsIHRlc3QgZGlmZmVyZW5j
ZXMgYmV0d2VlbiAzMi82NCBiaXQgbWFjaGluZXMgdGhhdCBmYWxsIGludG8gY2F0ZWdvcnkgYiku
CisgICAgICAgICAgICAgICAgIFRoZSB1c2Ugb2YgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oKSBh
bGxvd3MgdG8gc3dpdGNoIGJldHdlZW4gYXJiaXRhcnkgY29udGV4dCB0cmFuc2Zvcm1hdGlvbnMg
X3dpdGhvdXRfIGluZHVjaW5nIGFjY3VtdWxhdGVkIHJvdW5kaW5nIGltcHJlY2lzaW9uLgorCisg
ICAgICAgIFRoZXNlIGNvbWJpbmVkIHBhdGNoZXMgZml4IHRoZSBwaXhlbCB0ZXN0IGJhc2VsaW5l
IGNoYW5nZXMuCisKKyAgICAgICAgVXBkYXRlZCBleGlzdGluZyBTbm93IExlb3BhcmQgcGl4ZWwg
dGVzdCBiYXNlbGluZSB3aXRoIGEgMzJiaXQgbWFjaGluZSwgcGFzc2VzIGhlcmUgd2l0aCB0b2xl
cmFuY2UgMC4KKyAgICAgICAgVGhlIDY0Yml0IG1hY2hpbmUgcGFzc2VzIHRoZSBiYXNlbGluZSB3
aXRoIHRvbGVyYW5jZSAwLjAxLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0Lmg6IEFkZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgbWV0aG9kLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKTogSW1wbGVtZW50
IHNldENUTS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpzZXRDVE0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldENUTSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmg6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldENUTSk6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzZXRDVE0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0Q1RNKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q1RNKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnNldENUTSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0Q1RNKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwOiBVc2Ugc2V0Q1RNKCkgdG8gc3dpdGNoIHRvIGEgc2Nh
bGUtZnJlZSBBZmZpbmVUcmFuc2Zvcm0sIGFuZCBhbHNvIHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBv
cmlnaW5hbCBDVE0gYWZ0ZXIgcmVuZGVyaW5nIHRleHQuCisgICAgICAgIChXZWJDb3JlOjpub3Jt
YWxpemVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFp
bnREZWNvcmF0aW9uV2l0aFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRC
b3g6OnBhaW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKiBzdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5jcHA6IHMvZG91YmxlL2Zsb2F0Ly4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1ByZXNl
cnZlQXNwZWN0UmF0aW86OmdldENUTSk6CisgICAgICAgICogc3ZnL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uaDoKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6IFNpbXBsaWZ5IHZpZXdw
b3J0KCkgY29kZSwgYXZvaWQgdXNpbmcgZG91Ymxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NW
R0VsZW1lbnQ6OnZpZXdwb3J0KToKKwogMjAxMS0wMi0xNSAgSm9obiBTdWxsaXZhbiAgPHN1bGxp
dmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCShyZXZpc2lvbiA3ODE4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgS1VS
TCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKKyAgICAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdDsKIAogI2lmIE9TKFdJ
TkNFKSAmJiAhUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CShyZXZpc2lvbiA3ODE4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM4LDYgKzgz
OCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgbV9k
YXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y3I7CisgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgbWF0cml4ID0gY2Fpcm9fbWF0cml4X3Qo
dHJhbnNmb3JtKTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAmbWF0cml4KTsKKyAgICBtX2Rh
dGEtPnNldENUTSh0cmFuc2Zvcm0pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oCShyZXZpc2lvbiA3ODE4NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZUNhaXJvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgcm90YXRlKGZsb2F0KTsKICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxv
YXQpOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZv
aWQgY29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50Kys7IH0KICAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50LS07IH0KICAgICB2b2lkIHN5bmNDb250ZXh0
KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcik7CkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJvdGF0ZShmbG9hdCkge30KICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxv
YXQpIHt9CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikge30KLSAg
ICB2b2lkIGNvbmNhdENUTShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIHt9CisgICAgdm9p
ZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikge30KICAgICB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoKSB7fQogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSB7fQogICAg
IHZvaWQgc3luY0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKSB7fQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNzgxODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDYgKzY1LDExIEBACiAKICNlbmRpZgogCisvLyBVbmRvY3VtZW50ZWQgQ0dDb250ZXh0U2V0
Q1RNIGZ1bmN0aW9uLCBhdmFpbGFibGUgYXQgbGVhc3Qgc2luY2UgMTAuNC4KK2V4dGVybiAiQyIg
eworICAgIENHX0VYVEVSTiB2b2lkIENHQ29udGV4dFNldENUTShDR0NvbnRleHRSZWYsIENHQWZm
aW5lVHJhbnNmb3JtKTsKK307CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTEwODUsNiArMTA5MCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IEFmCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3du
VG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKKyAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOworICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OworfQorCiBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAog
ewogICAgIENHQWZmaW5lVHJhbnNmb3JtIHQgPSBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250
ZXh0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
CShyZXZpc2lvbiA3ODE4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDYgKzU5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcm90YXRlKGZsb2F0KSB7fQogICAgIHZvaWQg
dHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkge30KICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSB7fQorICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IHt9CiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKCkge30KICAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkge30KICNlbmRpZgpAQCAtNzQsNiArNzUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByb3RhdGUoZmxvYXQpOwogICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCk7
CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdm9pZCBz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5j
eUxheWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50Kys7IH0KICAgICB2b2lkIGVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgeyBtX3RyYW5zcGFyZW5jeUNvdW50LS07IH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2Fu
dmFzLmNwcAkocmV2aXNpb24gNzgxODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Nyw2ICsy
NDcsMTEgQEAgdm9pZCBHTEVTMkNhbnZhczo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZQogICAgIG1f
c3RhdGUtPm1fY3RtICo9IGFmZmluZTsKIH0KIAordm9pZCBHTEVTMkNhbnZhczo6c2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQoreworICAgIG1fc3RhdGUtPm1fY3RtID0gYWZm
aW5lOworfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewogICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCShyZXZpc2lvbiA3
ODE4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwor
ICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYpOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhh
aWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHJldmlzaW9uIDc4MTg2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNiArNDQzLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Ojpjb25jYXRDVE0oY29uc3QgQWYKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNo
b3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNz
Q29udGV4dE9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHJldmlzaW9uIDc4MTg2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29u
dGV4dE9wZW5WRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCw2ICs0NTgsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZgogICAgIG1fZGF0YS0+Y29uY2F0VHJh
bnNmb3JtYXRpb24odHJhbnNmb3JtYXRpb24pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtYXRpb24pCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5zZXRU
cmFuc2Zvcm1hdGlvbih0cmFuc2Zvcm1hdGlvbik7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZp
c2lvbiA3ODE4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OSw2ICsxMTk5LDE0IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWYKICAgICBtX2RhdGEtPnAoKS0+
c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cnVlKTsKIH0KIAordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAo
KS0+c2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9u
IDc4MTg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2LDYgKzQzNiwxNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5jb25jYXQoYWZmaW5lKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZSkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0
KCktPnVzZUdQVSgpKQorICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNl
dENUTShhZmZpbmUpOworCisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5zZXRNYXRy
aXgoYWZmaW5lKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29u
KHNpemVfdCBudW1Qb2ludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5jcHAJKHJldmlzaW9uIDc4MTg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw0ICsx
OTcsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbgogICAgIE1v
ZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGlmICghbV9oZGMpCisgICAgICAgIHJldHVy
bjsKKworICAgIFhGT1JNIHhmb3JtID0gdHJhbnNmb3JtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgo
KTsKKyAgICBTZXRXb3JsZFRyYW5zZm9ybShtX2hkYywgJnhmb3JtKTsKK30KKwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2lu
Q0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkocmV2aXNpb24gNzgxODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMSArMjA2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV90
cmFuc2Zvcm0ucm90YXRlKHJhZDJkZWcocmFkaWFucykpOwogICAgIH0KIAotICAgIHZvaWQgIGNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKKyAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICB7CiAgICAgICAgIG1f
dHJhbnNmb3JtICo9IHRyYW5zZm9ybTsKICAgICB9CiAKKyAgICB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKKyAgICB7CisgICAgICAgIG1fdHJhbnNmb3JtID0g
dHJhbnNmb3JtOworICAgIH0KKwogICAgIEludFJlY3QgbWFwUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVj
dCk7CkBAIC0xMTI0LDYgKzExMjksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENU
TShjb25zdCBBZgogICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CiB9CiAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit7CisgICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKK30KKwogQWZmaW5lVHJhbnNmb3Jt
JiBHcmFwaGljc0NvbnRleHQ6OmFmZmluZVRyYW5zZm9ybSgpCiB7CiAgICAgcmV0dXJuIG1fZGF0
YS0+bV90cmFuc2Zvcm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCShyZXZpc2lvbiA3ODE4NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCwxOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmCiAgICAgcmV0dXJuOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShXWEdD
KQorICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IG1fZGF0YS0+Y29udGV4dC0+R2V0R3JhcGhp
Y3NDb250ZXh0KCk7CisgICAgaWYgKGdjKQorICAgICAgICBnYy0+U2V0VHJhbnNmb3JtKHRyYW5z
Zm9ybSk7CisjZW5kaWYKKyAgICByZXR1cm47Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA3ODE4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
OSw2ICs1MTksMjkgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oRwog
ICAgIH0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG5vcm1hbGl6ZVRyYW5zZm9ybShBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICAvLyBPYnRhaW4gY29uc2lzdGVudCBudW1lcmlj
YWwgcmVzdWx0cyBmb3IgdGhlIEFmZmluZVRyYW5zZm9ybSBvbiBib3RoIDMyLzY0Yml0IHBsYXRm
b3Jtcy4KKyAgICAvLyBUZXN0ZWQgd2l0aCBTbm93TGVvcGFyZCBvbiBDb3JlIER1byB2cy4gQ29y
ZSAyIER1by4KKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgc19mbG9hdEVwc2lsb24gPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpOworCisgICAgaWYgKGZhYnModHJhbnNmb3Jt
LmEoKSAtIDEpIDw9IHNfZmxvYXRFcHNpbG9uKQorICAgICAgICB0cmFuc2Zvcm0uc2V0QSgxKTsK
KyAgICBlbHNlIGlmIChmYWJzKHRyYW5zZm9ybS5hKCkgKyAxKSA8PSBzX2Zsb2F0RXBzaWxvbikK
KyAgICAgICAgdHJhbnNmb3JtLnNldEEoLTEpOworCisgICAgaWYgKGZhYnModHJhbnNmb3JtLmQo
KSAtIDEpIDw9IHNfZmxvYXRFcHNpbG9uKQorICAgICAgICB0cmFuc2Zvcm0uc2V0RCgxKTsKKyAg
ICBlbHNlIGlmIChmYWJzKHRyYW5zZm9ybS5kKCkgKyAxKSA8PSBzX2Zsb2F0RXBzaWxvbikKKyAg
ICAgICAgdHJhbnNmb3JtLnNldEQoLTEpOworCisgICAgaWYgKGZhYnModHJhbnNmb3JtLmUoKSkg
PD0gc19mbG9hdEVwc2lsb24pCisgICAgICAgIHRyYW5zZm9ybS5zZXRFKDApOworCisgICAgaWYg
KGZhYnModHJhbnNmb3JtLmYoKSkgPD0gc19mbG9hdEVwc2lsb24pCisgICAgICAgIHRyYW5zZm9y
bS5zZXRGKDApOworfQorCiB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldp
dGhTdHlsZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEVUZXh0RGVjb3JhdGlvbiBkZWNvcmF0
aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBSZW5kZXJPYmplY3QqIGRlY29y
YXRpb25SZW5kZXJlcikKIHsKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CkBAIC01
NDYsNyArNTY5LDEyIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kK
ICAgICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKSB7CiAgICAgICAgIHdpZHRoICo9IHNjYWxpbmdG
YWN0b3I7CiAgICAgICAgIGRlY29yYXRpb25PcmlnaW4uc2NhbGUoc2NhbGluZ0ZhY3Rvciwgc2Nh
bGluZ0ZhY3Rvcik7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gc2NhbGlu
Z0ZhY3RvciwgMSAvIHNjYWxpbmdGYWN0b3IpKTsKKworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
bmV3VHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CisgICAgICAgIG5ld1RyYW5zZm9ybS5z
Y2FsZSgxIC8gc2NhbGluZ0ZhY3Rvcik7CisgICAgICAgIG5vcm1hbGl6ZVRyYW5zZm9ybShuZXdU
cmFuc2Zvcm0pOworCisgICAgICAgIGNvbnRleHQtPnNldENUTShuZXdUcmFuc2Zvcm0pOwogICAg
IH0KIAogICAgIGRlY29yYXRpb25PcmlnaW4ubW92ZSgwLCAtc2NhbGVkRm9udE1ldHJpY3MuZmxv
YXRBc2NlbnQoKSArIHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBzY2Fs
ZWRGb250TWV0cmljcywgdGhpY2tuZXNzKSk7CkBAIC01ODksMTMgKzYxNywyMSBAQCB2b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkCiAgICAgICAgIGlmIChzaGFkb3cpCiAg
ICAgICAgICAgICBleHRyYU9mZnNldCA9IGFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHQoY29u
dGV4dCwgc2hhZG93LCBzaGFkb3dSZWN0LCBmYWxzZSAvKiBzdHJva2VkICovLCB0cnVlIC8qIG9w
YXF1ZSAqLywgdHJ1ZSAvKiBob3Jpem9udGFsICovKTsKIAotICAgICAgICBpZiAoc2NhbGluZ0Zh
Y3RvciAhPSAxKQotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBzY2Fs
aW5nRmFjdG9yLCAxIC8gc2NhbGluZ0ZhY3RvcikpOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
b3JpZ2luYWxUcmFuc2Zvcm07CisgICAgICAgIGlmIChzY2FsaW5nRmFjdG9yICE9IDEpIHsKKyAg
ICAgICAgICAgIG9yaWdpbmFsVHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CisKKyAgICAg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBvcmlnaW5hbFRyYW5zZm9ybTsK
KyAgICAgICAgICAgIG5ld1RyYW5zZm9ybS5zY2FsZSgxIC8gc2NhbGluZ0ZhY3Rvcik7CisgICAg
ICAgICAgICBub3JtYWxpemVUcmFuc2Zvcm0obmV3VHJhbnNmb3JtKTsKKworICAgICAgICAgICAg
Y29udGV4dC0+c2V0Q1RNKG5ld1RyYW5zZm9ybSk7CisgICAgICAgIH0KIAogICAgICAgICBzY2Fs
ZWRGb250LmRyYXdUZXh0KGNvbnRleHQsIHRleHRSdW4sIHRleHRPcmlnaW4gKyBleHRyYU9mZnNl
dCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgICAgIGlmIChzY2FsaW5nRmFj
dG9yICE9IDEpCi0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoc2NhbGluZ0Zh
Y3Rvciwgc2NhbGluZ0ZhY3RvcikpOworICAgICAgICAgICAgY29udGV4dC0+c2V0Q1RNKG9yaWdp
bmFsVHJhbnNmb3JtKTsKIAogICAgICAgICByZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0
UGFpbnRpbmcoY29udGV4dCwgdGV4dFJ1bik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlzaW9uIDc4MTg2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDcsMTUgKzI0NywxNCBAQCB2b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9y
bVJlCiAgICAgfQogfQogCi0vLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBmbG9hdHMgaGVyZSwgbGlr
ZSBldmVyeXdoZXJlIGVsc2UhCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHUHJlc2VydmVBc3BlY3RSYXRp
bzo6Z2V0Q1RNKGRvdWJsZSBsb2dpY1gsIGRvdWJsZSBsb2dpY1ksIGRvdWJsZSBsb2dpY1dpZHRo
LCBkb3VibGUgbG9naWNIZWlnaHQsIGRvdWJsZSBwaHlzV2lkdGgsIGRvdWJsZSBwaHlzSGVpZ2h0
KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldENUTShm
bG9hdCBsb2dpY1gsIGZsb2F0IGxvZ2ljWSwgZmxvYXQgbG9naWNXaWR0aCwgZmxvYXQgbG9naWNI
ZWlnaHQsIGZsb2F0IHBoeXNXaWR0aCwgZmxvYXQgcGh5c0hlaWdodCkgY29uc3QKIHsKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwogICAgIGlmIChtX2FsaWduID09IFNWR19QUkVTRVJW
RUFTUEVDVFJBVElPX1VOS05PV04pCiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CiAKLSAgICBk
b3VibGUgbG9naWNhbFJhdGlvID0gbG9naWNXaWR0aCAvIGxvZ2ljSGVpZ2h0OwotICAgIGRvdWJs
ZSBwaHlzUmF0aW8gPSBwaHlzV2lkdGggLyBwaHlzSGVpZ2h0OworICAgIGZsb2F0IGxvZ2ljYWxS
YXRpbyA9IGxvZ2ljV2lkdGggLyBsb2dpY0hlaWdodDsKKyAgICBmbG9hdCBwaHlzUmF0aW8gPSBw
aHlzV2lkdGggLyBwaHlzSGVpZ2h0OwogCiAgICAgaWYgKG1fYWxpZ24gPT0gU1ZHX1BSRVNFUlZF
QVNQRUNUUkFUSU9fTk9ORSkgewogICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHBo
eXNXaWR0aCAvIGxvZ2ljV2lkdGgsIHBoeXNIZWlnaHQgLyBsb2dpY0hlaWdodCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHJldmlzaW9uIDc4
MTg2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsOSArNjIsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHRyYW5zZm9y
bVJlY3QoRmxvYXRSZWN0JiBkZXN0UmVjdCwgRmxvYXRSZWN0JiBzcmNSZWN0KTsKIAotICAgIEFm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oZG91YmxlIGxvZ2ljWCwgZG91YmxlIGxvZ2ljWSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsb2dpY1dpZHRoLCBkb3VibGUgbG9naWNIZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgcGh5c1dpZHRoLCBkb3VibGUg
cGh5c0hlaWdodCkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBsb2dp
Y1gsIGZsb2F0IGxvZ2ljWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxvZ2lj
V2lkdGgsIGZsb2F0IGxvZ2ljSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgcGh5c1dpZHRoLCBmbG9hdCBwaHlzSGVpZ2h0KSBjb25zdDsKIAogICAgIHRlbXBsYXRlPGNs
YXNzIENvbnN1bWVyPgogICAgIHN0YXRpYyBib29sIHBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyhD
b25zdW1lciogY29uc3VtZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgdmFsaWRhdGUgPSB0
cnVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gNzgx
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOSwyMCArMTI5LDEyIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFN0
eWxlVHlwZSgKIAogRmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6OnZpZXdwb3J0KCkgY29uc3QKIHsK
LSAgICBkb3VibGUgeCA9IDA7Ci0gICAgZG91YmxlIHkgPSAwOwotICAgIGlmICghaXNPdXRlcm1v
c3RTVkcoKSkgewotICAgICAgICB4ID0gdGhpcy0+eCgpLnZhbHVlKHRoaXMpOwotICAgICAgICB5
ID0gdGhpcy0+eSgpLnZhbHVlKHRoaXMpOwotICAgIH0KLSAgICBmbG9hdCB3ID0gd2lkdGgoKS52
YWx1ZSh0aGlzKTsKLSAgICBmbG9hdCBoID0gaGVpZ2h0KCkudmFsdWUodGhpcyk7Ci0gICAgQWZm
aW5lVHJhbnNmb3JtIHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOwotICAg
IGRvdWJsZSB3RG91YmxlID0gdzsKLSAgICBkb3VibGUgaERvdWJsZSA9IGg7Ci0gICAgdmlld0Jv
eC5tYXAoeCwgeSwgeCwgeSk7Ci0gICAgdmlld0JveC5tYXAodywgaCwgd0RvdWJsZSwgaERvdWJs
ZSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdDo6bmFycm93UHJlY2lzaW9uKHgsIHksIHdEb3VibGUs
IGhEb3VibGUpOworICAgIEZsb2F0UG9pbnQgb3JpZ2luOworICAgIGlmICghaXNPdXRlcm1vc3RT
VkcoKSkKKyAgICAgICAgb3JpZ2luID0gRmxvYXRQb2ludCh4KCkudmFsdWUodGhpcyksIHkoKS52
YWx1ZSh0aGlzKSk7CisKKyAgICBGbG9hdFNpemUgc2l6ZSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBo
ZWlnaHQoKS52YWx1ZSh0aGlzKSk7CisgICAgcmV0dXJuIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0o
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW4sIHNp
emUpKTsKIH0KIAogaW50IFNWR1NWR0VsZW1lbnQ6OnJlbGF0aXZlV2lkdGhWYWx1ZSgpIGNvbnN0
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>