<?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>108835</bug_id>
          
          <creation_ts>2013-02-04 09:46:48 -0800</creation_ts>
          <short_desc>Optimize GlyphPage for case where all glyphs are available in the same font.</short_desc>
          <delta_ts>2013-02-26 11:42:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Performance</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109019</dependson>
    
    <dependson>109850</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>darin</cc>
    
    <cc>falken</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>824467</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-04 09:46:48 -0800</bug_when>
    <thetext>We could save large amounts of memory by detecting that all glyphs in a GlyphPage are from the same SimpleFontData* and not storing an array of font data pointers for every glyph in that case.
An initial draft shows a 4.98 MB improvement on Membuster3, though I&apos;m not 100% sure of its correctness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824473</commentid>
    <comment_count>1</comment_count>
      <attachid>186404</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-04 09:53:57 -0800</bug_when>
    <thetext>Created attachment 186404
Sneak preview for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824482</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 09:57:20 -0800</bug_when>
    <thetext>Attachment 186404 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/platform/graphics/GlyphPage.h&apos;, u&apos;Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/GlyphPage.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824737</commentid>
    <comment_count>3</comment_count>
      <attachid>186457</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-04 14:01:42 -0800</bug_when>
    <thetext>Created attachment 186457
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825617</commentid>
    <comment_count>4</comment_count>
      <attachid>186457</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-05 10:36:43 -0800</bug_when>
    <thetext>Comment on attachment 186457
Proposed patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        4.98 MB progression on Membuster3.

Nice!

&gt; Source/WebCore/ChangeLog:24
&gt; +            There are now three ways of constructing a GlyphPage. createZeroed() and createCopy()
&gt; +            are only used when creating the system fallback page.

createCopiedSystemFallbackPage/createZeroedSystemFallbackPage then perhaps?

&gt; Source/WebCore/platform/graphics/GlyphPage.h:138
&gt; +        // -1 is a placeholder before we have an initial SimpleFontData*.
&gt; +        if (m_fontDataForAllGlyphs == reinterpret_cast&lt;const SimpleFontData*&gt;(-1))
&gt; +            m_fontDataForAllGlyphs = fontData;

Uhhuh. At least make it a named constant, unitializeFontData() or something

&gt; Source/WebCore/platform/graphics/GlyphPage.h:207
&gt; +    bool m_allGlyphsAreFromSameFont;
&gt; +    union {
&gt; +        const SimpleFontData* m_fontDataForAllGlyphs;
&gt; +        const SimpleFontData** m_glyphFontData;
&gt; +    };

Using union here doesn&apos;t seem to gain much. Without it you wouldn&apos;t need m_allGlyphsAreFromSameFont bit and the memory usage would be unchanged. The code would probably be clearer. I suppose it documents these are mutually exclusive...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825836</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-02-05 14:41:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/13157042&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825838</commentid>
    <comment_count>6</comment_count>
      <attachid>186710</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-05 14:43:12 -0800</bug_when>
    <thetext>Created attachment 186710
Proposed patch v2

@Antti: Sure thing brah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825846</commentid>
    <comment_count>7</comment_count>
      <attachid>186710</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-05 14:57:10 -0800</bug_when>
    <thetext>Comment on attachment 186710
Proposed patch v2

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

&gt; Source/WebCore/platform/graphics/GlyphPage.h:191
&gt; +        : m_fontDataForAllGlyphs(undefinedFontDataValue())

This may be a stupid question but why can&apos;t this just be null?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825903</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-05 15:52:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 186710 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186710&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GlyphPage.h:191
&gt; &gt; +        : m_fontDataForAllGlyphs(undefinedFontDataValue())
&gt; 
&gt; This may be a stupid question but why can&apos;t this just be null?

Good point! I thought I was guarding against a sequence like:

[0] glyph=1234, fontData=0x0
[1] glyph=4567, fontData=0x00031337

But that doesn&apos;t actually happen in practice, since only glyph=0 will have a null font data pointer, and we handle that separately. I&apos;ll add an assertion for that instead and land without the -1 gunk.

Thanks for reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825913</commentid>
    <comment_count>9</comment_count>
      <attachid>186457</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-05 16:08:15 -0800</bug_when>
    <thetext>Comment on attachment 186457
Proposed patch

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

&gt; Source/WebCore/platform/graphics/GlyphPage.h:80
&gt; +    ~GlyphPage()
&gt; +    {
&gt; +        if (!m_allGlyphsAreFromSameFont)
&gt; +            fastFree(m_glyphFontData);
&gt;      }

Is it important to make this inline?

&gt; Source/WebCore/platform/graphics/GlyphPage.h:95
&gt; +        if (UNLIKELY(!glyph))
&gt; +            return GlyphData(0, 0);

Why is this needed? I presume because we got bogus answers when we ask if a font includes a glyph for 0?

&gt; Source/WebCore/platform/graphics/GlyphPage.h:115
&gt;      const SimpleFontData* fontDataForCharacter(UChar32 c) const
&gt;      {
&gt; +        Glyph glyph = m_glyphs[indexForCharacter(c)];
&gt; +        if (UNLIKELY(!glyph))
&gt; +            return 0;
&gt; +        if (m_allGlyphsAreFromSameFont)
&gt; +            return m_fontDataForAllGlyphs;
&gt;          return m_glyphFontData[indexForCharacter(c)];
&gt;      }

Irritating that this repeats half of the glyphDataForIndex function. I suggest we refactor so they can share code in the future.

&gt;&gt; Source/WebCore/platform/graphics/GlyphPage.h:138
&gt;&gt; +        // -1 is a placeholder before we have an initial SimpleFontData*.
&gt;&gt; +        if (m_fontDataForAllGlyphs == reinterpret_cast&lt;const SimpleFontData*&gt;(-1))
&gt;&gt; +            m_fontDataForAllGlyphs = fontData;
&gt; 
&gt; Uhhuh. At least make it a named constant, unitializeFontData() or something

Can’t we use a named constant for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825914</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-05 16:08:43 -0800</bug_when>
    <thetext>Sorry about my late comments. I started reviewing yesterday and never hit the submit button.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825925</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-05 16:25:06 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 186457 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186457&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GlyphPage.h:80
&gt; &gt; +    ~GlyphPage()
&gt; &gt; +    {
&gt; &gt; +        if (!m_allGlyphsAreFromSameFont)
&gt; &gt; +            fastFree(m_glyphFontData);
&gt; &gt;      }
&gt; 
&gt; Is it important to make this inline?

Not really. I stuck with inline methods since there was no corresponding .cpp file for this class already.

&gt; &gt; Source/WebCore/platform/graphics/GlyphPage.h:95
&gt; &gt; +        if (UNLIKELY(!glyph))
&gt; &gt; +            return GlyphData(0, 0);
&gt; 
&gt; Why is this needed? I presume because we got bogus answers when we ask if a font includes a glyph for 0?

Correct.

&gt; &gt; Source/WebCore/platform/graphics/GlyphPage.h:115
&gt; &gt;      const SimpleFontData* fontDataForCharacter(UChar32 c) const
&gt; &gt;      {
&gt; &gt; +        Glyph glyph = m_glyphs[indexForCharacter(c)];
&gt; &gt; +        if (UNLIKELY(!glyph))
&gt; &gt; +            return 0;
&gt; &gt; +        if (m_allGlyphsAreFromSameFont)
&gt; &gt; +            return m_fontDataForAllGlyphs;
&gt; &gt;          return m_glyphFontData[indexForCharacter(c)];
&gt; &gt;      }
&gt; 
&gt; Irritating that this repeats half of the glyphDataForIndex function. I suggest we refactor so they can share code in the future.

True, it could just be:
return glyphDataForIndex(indexForCharacter(c)).fontData;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825990</commentid>
    <comment_count>12</comment_count>
      <attachid>186739</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-05 18:15:30 -0800</bug_when>
    <thetext>Created attachment 186739
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826017</commentid>
    <comment_count>13</comment_count>
      <attachid>186739</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 18:51:50 -0800</bug_when>
    <thetext>Comment on attachment 186739
Patch for landing

Clearing flags on attachment: 186739

Committed r141961: &lt;http://trac.webkit.org/changeset/141961&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826018</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 18:51:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826124</commentid>
    <comment_count>15</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-02-05 23:51:05 -0800</bug_when>
    <thetext>It looks like this patch caused assertion failures on the following tests:

svg/W3C-SVG-1.1/fonts-glyph-04-t.svg
svg/W3C-SVG-1.1/fonts-glyph-03-t.svg
svg/custom/glyph-selection-lang-attribute.svg
svg/text/alt-glpyh-on-fallback-font-crash.svg

See for example: http://build.webkit.org/builders/Apple%20Lion%20Debug%20WK2%20%28Tests%29/builds/7165/steps/layout-test/logs/stdio

Sample stack trace:
   ASSERTION FAILED: fontData
   /Volumes/Data/slave/lion-debug/build/Source/WebCore/platform/graphics/GlyphPage.h(139) : void WebCore::GlyphPage::setGlyphDataForIndex(unsigned int, Glyph, const WebCore::SimpleFontData *)
   1   0x108778665 WebCore::GlyphPage::setGlyphDataForIndex(unsigned int, unsigned short, WebCore::SimpleFontData const*)
   2   0x108775e25 WebCore::GlyphPage::setGlyphDataForCharacter(int, unsigned short, WebCore::SimpleFontData const*)
   3   0x1095fb718 WebCore::SVGTextRunRenderingContext::glyphDataForCharacter(WebCore::Font const&amp;, WebCore::TextRun const&amp;, WebCore::WidthIterator&amp;, int, bool, int, unsigned int&amp;)
   4   0x109b64c0d WebCore::WidthIterator::glyphDataForCharacter(int, bool, int, unsigned int&amp;)
   5   0x109b668cb unsigned int WebCore::WidthIterator::advanceInternal&lt;WebCore::SurrogatePairAwareTextIterator&gt;(WebCore::SurrogatePairAwareTextIterator&amp;, WebCore::GlyphBuffer*)
   6   0x109b64d4d WebCore::WidthIterator::advance(int, WebCore::GlyphBuffer*)
   7   0x1095fc40f WebCore::SVGTextMetricsBuilder::advanceSimpleText()
   8   0x1095fc1cc WebCore::SVGTextMetricsBuilder::advance()
   9   0x1095fc925 WebCore::SVGTextMetricsBuilder::measureTextRenderer(WebCore::RenderSVGInlineText*, WebCore::MeasureTextData*)
   10  0x1095fcca8 WebCore::SVGTextMetricsBuilder::walkTree(WebCore::RenderObject*, WebCore::RenderSVGInlineText*, WebCore::MeasureTextData*)
   11  0x1095f6730 WebCore::SVGTextMetricsBuilder::buildMetricsAndLayoutAttributes(WebCore::RenderSVGText*, WebCore::RenderSVGInlineText*, WTF::HashMap&lt;unsigned int, WebCore::SVGCharacterData, WTF::IntHash&lt;unsigned int&gt;, WTF::HashTraits&lt;unsigned int&gt;, WTF::HashTraits&lt;WebCore::SVGCharacterData&gt; &gt;&amp;)
   12  0x1095e4d18 WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForForSubtree(WebCore::RenderSVGText*)
   13  0x1095e4453 WebCore::RenderSVGText::layout()
   14  0x1095c8b98 WebCore::SVGRenderSupport::layoutChildren(WebCore::RenderObject*, bool)
   15  0x1095c878e WebCore::RenderSVGContainer::layout()
   16  0x1095c8b98 WebCore::SVGRenderSupport::layoutChildren(WebCore::RenderObject*, bool)
   17  0x1095c878e WebCore::RenderSVGContainer::layout()
   18  0x1095c8b98 WebCore::SVGRenderSupport::layoutChildren(WebCore::RenderObject*, bool)
   19  0x1095e0439 WebCore::RenderSVGRoot::layout()
   20  0x1093cc60c WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&amp;, WebCore::LayoutUnit&amp;, WebCore::LayoutUnit&amp;)
   21  0x1093c2aa7 WebCore::RenderBlock::layoutBlockChildren(bool, WebCore::LayoutUnit&amp;)
   22  0x1093c00d7 WebCore::RenderBlock::layoutBlock(bool, WebCore::LayoutUnit)
   23  0x1093bf0de WebCore::RenderBlock::layout()
   24  0x109695b24 WebCore::RenderView::layoutContent(WebCore::LayoutState const&amp;)
   25  0x109696457 WebCore::RenderView::layout()
   26  0x1087db67d WebCore::FrameView::layout(bool)
   27  0x10848732d WebCore::Document::implicitClose()
   28  0x1087b102b WebCore::FrameLoader::checkCallImplicitClose()
   29  0x1087b0cf3 WebCore::FrameLoader::checkCompleted()
   30  0x1087af9b3 WebCore::FrameLoader::finishedParsing()
   31  0x108491509 WebCore::Document::finishedParsing()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826152</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-06 00:14:16 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 109019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826354</commentid>
    <comment_count>17</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-06 05:10:56 -0800</bug_when>
    <thetext>Committed r141990: &lt;http://trac.webkit.org/changeset/141990&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832749</commentid>
    <comment_count>18</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-02-13 23:07:33 -0800</bug_when>
    <thetext>It seems this regressed performance on Chromium&apos;s intl2 page cycler test:

http://chromium-perf.appspot.com/?tab=mac-release-10.6-webkit-latest&amp;graph=times&amp;trace=t&amp;rev=181260&amp;history=150&amp;master=ChromiumWebkit&amp;testSuite=page_cycler_intl2&amp;details=true

The spikes in the graph correlate to:
r141961: the first landing of the GlyphPage patch
r141976: rollout of the patch
r141990: relanding

I&apos;m not sure it needs fixing as it looks like the patch is a deliberate decision to optimize for cases where there are not multiple fonts or font fallback, which occurs more often on international pages.

Locally, the pages that regressed the most are copies of BBC Arabic and BBC Tamil, though running the cycler on just those pages in isolation does not reproduce the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833275</commentid>
    <comment_count>19</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-02-14 11:35:36 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; I&apos;m not sure it needs fixing as it looks like the patch is a deliberate decision to optimize for cases where there are not multiple fonts or font fallback, which occurs more often on international pages.

A 5% performance regression on something that isn&apos;t a micro-benchmark definitely needs fixing. 

&gt; Locally, the pages that regressed the most are copies of BBC Arabic and BBC Tamil, though running the cycler on just those pages in isolation does not reproduce the regression.

I think you misread the output.

Before:http://build.chromium.org/f/chromium/perf/mac-release-10.6-webkit-latest/intl2/details.html?cl=180871&amp;graph=times&amp;trace=t
After: http://build.chromium.org/f/chromium/perf/mac-release-10.6-webkit-latest/intl2/details.html?cl=180898&amp;graph=times&amp;trace=t

The pages that regressed the most were:
arabicnews.google.com
bn.wikipedia.org
ml.wikipedia.org
sgkalesh.blogspot.com

sgkalesh.blogspot.com had a nearly 200% regression!

alking, I can&apos;t get you a copy of this if you want for digging into it. Ideally you&apos;d rollback first so that we can ensure that the regression is fully resolved and doesn&apos;t come back with the fixed up version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833279</commentid>
    <comment_count>20</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-02-14 11:45:31 -0800</bug_when>
    <thetext>s/can&apos;t/can obviously. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833280</commentid>
    <comment_count>21</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-14 11:47:38 -0800</bug_when>
    <thetext>Ouch. Sure, I&apos;ll roll this out and try to fix the regression. Thanks for the poke.
Oh, and I already have a copy of the page cyclers somewhere :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833283</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 11:49:32 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 109850</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834945</commentid>
    <comment_count>23</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-16 23:25:10 -0800</bug_when>
    <thetext>Looking at the way those sites use this code, it looks like this may be a case of overzealous UNLIKELY() branch prediction hints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834948</commentid>
    <comment_count>24</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-17 00:11:09 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Looking at the way those sites use this code, it looks like this may be a case of overzealous UNLIKELY() branch prediction hints.

Local testing shows that removing the branch prediction hints removes the regression. I&apos;m going to reland with that changed and see how it fares on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834949</commentid>
    <comment_count>25</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-17 00:19:44 -0800</bug_when>
    <thetext>Committed r143125: &lt;http://trac.webkit.org/changeset/143125&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834999</commentid>
    <comment_count>26</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-02-17 09:42:31 -0800</bug_when>
    <thetext>No luck. :(

http://chromium-perf.appspot.com/?tab=mac-release-10.6-webkit-latest&amp;graph=times&amp;trace=t&amp;rev=183037&amp;history=50&amp;master=ChromiumWebkit&amp;testSuite=page_cycler_intl2&amp;details=true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835039</commentid>
    <comment_count>27</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-17 14:16:48 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; No luck. :(
&gt; 
&gt; http://chromium-perf.appspot.com/?tab=mac-release-10.6-webkit-latest&amp;graph=times&amp;trace=t&amp;rev=183037&amp;history=50&amp;master=ChromiumWebkit&amp;testSuite=page_cycler_intl2&amp;details=true

Ugh. I can&apos;t get seem to get stable numbers locally, and it&apos;s hard to tell from a profile what&apos;s different between to runs. I have a speculative patch that streamlines the per-glyph fontdata paths that I&apos;d like to try before rolling it out. Uploading for review shortly..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835043</commentid>
    <comment_count>28</comment_count>
      <attachid>188776</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-17 14:31:02 -0800</bug_when>
    <thetext>Created attachment 188776
Speculative optimization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835052</commentid>
    <comment_count>29</comment_count>
      <attachid>188776</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-02-17 15:24:22 -0800</bug_when>
    <thetext>Comment on attachment 188776
Speculative optimization

Seems plausible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835053</commentid>
    <comment_count>30</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-17 15:28:09 -0800</bug_when>
    <thetext>Committed r143137: &lt;http://trac.webkit.org/changeset/143137&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835915</commentid>
    <comment_count>31</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-02-18 20:28:52 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Committed r143137: &lt;http://trac.webkit.org/changeset/143137&gt;

Unfortunately, it looks like this didn&apos;t help:

http://chromium-perf.appspot.com/?tab=mac-release-10.6-webkit-latest&amp;graph=times&amp;trace=t&amp;rev=183149&amp;history=150&amp;master=ChromiumWebkit&amp;testSuite=page_cycler_intl2&amp;details=true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835924</commentid>
    <comment_count>32</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-18 20:58:19 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; Committed r143137: &lt;http://trac.webkit.org/changeset/143137&gt;
&gt; 
&gt; Unfortunately, it looks like this didn&apos;t help:
&gt; 
&gt; http://chromium-perf.appspot.com/?tab=mac-release-10.6-webkit-latest&amp;graph=times&amp;trace=t&amp;rev=183149&amp;history=150&amp;master=ChromiumWebkit&amp;testSuite=page_cycler_intl2&amp;details=true

Hm. Confusing. So, just to make sure I&apos;m understanding everything, this is a regression on Chromium/Mac only, and this perf bot is running Snow Leopard?

You&apos;d think that at leasts the 2x regression on sgkalesh.blogspot.com would be reproducible in the applemac port if we&apos;re using the same codepaths. Does Chromium/Mac use the same fonts implementation as the Apple Mac port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835945</commentid>
    <comment_count>33</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-02-18 22:00:14 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Hm. Confusing. So, just to make sure I&apos;m understanding everything, this is a regression on Chromium/Mac only, and this perf bot is running Snow Leopard?

Yes, the intl2 regression we only see on Chromium/Mac, running on Snow Leopard.

There is also a smaller intl1 regression visible on Chromium/Linux:
http://chromium-perf.appspot.com/?tab=linux-release-webkit-latest&amp;graph=times&amp;trace=t&amp;rev=183149&amp;history=150&amp;master=ChromiumWebkit&amp;testSuite=page_cycler_intl1&amp;details=true


&gt; You&apos;d think that at leasts the 2x regression on sgkalesh.blogspot.com would be reproducible in the applemac port if we&apos;re using the same codepaths. Does Chromium/Mac use the same fonts implementation as the Apple Mac port?

It looks like unlike other Chromium builds, the Mac one uses the same fonts implementation as in WebCore. Based on comments in WebCore.gyp like: &quot;The Mac currently uses FontCustomPlatformData.cpp from platform/graphics/mac&quot;

One place they can possibly differ is in default per-script font settings, but this seems unlikely since sgkalesh.blogspot.com doesn&apos;t set the HTML &apos;lang&apos; attribute.

I actually could not reproduce this locally either, on Chromium/Mac running on Mountain Lion. The BBC pages seemed to regress, and sgkalesh.blogspot.com actually got a little faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836083</commentid>
    <comment_count>34</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-19 00:30:41 -0800</bug_when>
    <thetext>I&apos;m gonna try to rewrite this so that GlyphPage is always a single allocation, in case the regression is caused by the indirection in accessing the per-glyph array. I just need some sleep first if I&apos;m gonna get it right. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838372</commentid>
    <comment_count>35</comment_count>
      <attachid>189517</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-21 06:13:36 -0800</bug_when>
    <thetext>Created attachment 189517
Mildly desperate patch

Okay, here&apos;s a patch that allocates GlyphPage and the per-glyph font data array in a single block instead.
Now that I see the diff, it&apos;s actually kind of beautiful. Wish I&apos;d written it this way from the beginning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838402</commentid>
    <comment_count>36</comment_count>
      <attachid>189517</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-21 07:28:00 -0800</bug_when>
    <thetext>Comment on attachment 189517
Mildly desperate patch

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

Nice, r=me

&gt; Source/WebCore/platform/graphics/GlyphPage.h:59
&gt; +#if COMPILER(MSVC)
&gt; +#pragma warning(push)
&gt; +#pragma warning(disable: 4200) // Disable &quot;zero-sized array in struct/union&quot; warning
&gt; +#endif

Could this silly warning be disabled globally?

&gt; Source/WebCore/platform/graphics/GlyphPage.h:158
&gt; +        // This method should only be called on the system fallback page, which is never single-font.
&gt; +        ASSERT(hasPerGlyphFontData());

Maybe add &quot;system fallback page&quot; to the function name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838417</commentid>
    <comment_count>37</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-21 07:46:00 -0800</bug_when>
    <thetext>Committed r143601: &lt;http://trac.webkit.org/changeset/143601&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839398</commentid>
    <comment_count>38</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-22 02:09:42 -0800</bug_when>
    <thetext>Committed r143707: &lt;http://trac.webkit.org/changeset/143707&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839403</commentid>
    <comment_count>39</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-22 02:11:56 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; Committed r143707: &lt;http://trac.webkit.org/changeset/143707&gt;

Slapped ALWAYS_INLINE on the relevant getters to see if this is an inlining problem. webkit-patch added the &quot;Reviewed by Antti Koivisto&quot; line for some reason. Bad webkit-patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839428</commentid>
    <comment_count>40</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-22 03:12:05 -0800</bug_when>
    <thetext>Sigh. It appears that didn&apos;t help either. Would someone be able to grab a profile of this test on a machine where it&apos;s reproducible? I&apos;m at a loss here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841524</commentid>
    <comment_count>41</comment_count>
    <who name="Matt Falkenhagen">falken</who>
    <bug_when>2013-02-25 19:01:42 -0800</bug_when>
    <thetext>Thanks for working on fixing this. Sorry it&apos;s such a pain :-(

I don&apos;t know if we can get a profile. I haven&apos;t been able to reproduce locally on my machine and don&apos;t think we have duplicate machines other than the actual one running the test.

Somewhat good news is there is talk of replacing the intl tests, but this won&apos;t happen soon: http://crbug.com/175050

Do you think you can rollout the patch? It would be bad if another regression sneaks in while it&apos;s in the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841576</commentid>
    <comment_count>42</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2013-02-25 20:32:32 -0800</bug_when>
    <thetext>We often have trouble with the Intl2 tester when optimizing the glyph cache, the font cache, or other such things, because it uses more different scripts than is remotely likely for a single user. Our own page load speed benchmark which includes some non-Latin script pages but not quite so many different ones doesn&apos;t show a regression from this rev.

Historically we&apos;ve tried to deal with this by dynamically scaling for more fonts or more glyphs on a timer - this makes Intl2 happy without regressing memory use for more realistic cases. Perhaps that would make sense to do here.

Unfortunately, it&apos;s hard to do that in this case without a profile or ability to reproduce the benchmark.

If we just roll out the change with no further info, we&apos;ll be regressing memory for normal users for the sake of an artificial benchmark, with no obvious path to getting it back, since no one outside Google has a profile or can run the benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841704</commentid>
    <comment_count>43</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-26 00:30:39 -0800</bug_when>
    <thetext>This patch appears to reduce the memory usage by roughly 6% on the same intl1 test:
http://build.chromium.org/f/chromium/perf/mac-release-10.6-webkit-latest/intl1/report.html?history=250&amp;rev=184424&amp;graph=commit_charge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842229</commentid>
    <comment_count>44</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-02-26 11:42:30 -0800</bug_when>
    <thetext>We&apos;re chatting about this on the Chromium bug and it sounds like there&apos;s general agreement that this is one of the rare times it makes sense to leave a regression in given all the details and that akling has done pretty much all that can be done to try to address it. 

Also, there&apos;s talk of trying to replace this test suite with a more realistic workload.

http://crbug.com/175050 if you care.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186404</attachid>
            <date>2013-02-04 09:53:57 -0800</date>
            <delta_ts>2013-02-04 14:01:42 -0800</delta_ts>
            <desc>Sneak preview for EWS</desc>
            <filename>ews-108835.diff</filename>
            <type>text/plain</type>
            <size>8886</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKaW5kZXggNDUy
YmMzMC4uOWMxYjMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhQYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhQYWdlLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKQEAg
LTYyLDI0ICs2MywzNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIHRvIGJlIG92ZXJyaWRpbmcg
dGhlIHBhcmVudCdzIG5vZGUsIGJ1dCBwcm92aWRlIG5vIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24u
CiBjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZShHbHlwaFBhZ2VUcmVl
Tm9kZSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVVbmlu
aXRpYWxpemVkKEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcikKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgR2x5cGhQYWdlKG93bmVyKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgR2x5cGhQYWdlKG93bmVyLCBmYWxzZSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGluLTEgaW4gYSBzaW5nbGUgcGFnZS4K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZVplcm9lZChHbHlwaFBhZ2VU
cmVlTm9kZSogb3duZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBo
UGFnZShvd25lciwgdHJ1ZSkpOworICAgIH0KKworICAgIH5HbHlwaFBhZ2UoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2FsbEdseXBoc0FyZUZyb21TYW1lRm9udCkKKyAgICAgICAgICAgIGZhc3RG
cmVlKG1fZ2x5cGhGb250RGF0YSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
aXplID0gMjU2OyAvLyBDb3ZlcnMgYWxsIG9mIExhdGluLTEgaW4gYSBzaW5nbGUgcGFnZS4KIAog
ICAgIHVuc2lnbmVkIGluZGV4Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QgeyByZXR1cm4g
YyAlIHNpemU7IH0KICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIg
YykgY29uc3QKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhGb3JDaGFyYWN0
ZXIoYyk7Ci0gICAgICAgIHJldHVybiBHbHlwaERhdGEobV9nbHlwaHNbaW5kZXhdLCBtX2dseXBo
Rm9udERhdGFbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvckluZGV4KGluZGV4
Rm9yQ2hhcmFjdGVyKGMpKTsKICAgICB9CiAKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5k
ZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaW5kZXggPCBz
aXplKTsKLSAgICAgICAgcmV0dXJuIEdseXBoRGF0YShtX2dseXBoc1tpbmRleF0sIG1fZ2x5cGhG
b250RGF0YVtpbmRleF0pOworICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4XTsK
KyAgICAgICAgaWYgKG1fYWxsR2x5cGhzQXJlRnJvbVNhbWVGb250KQorICAgICAgICAgICAgcmV0
dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIDogMCk7
CisgICAgICAgIHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIGdseXBoID8gbV9nbHlwaEZvbnREYXRh
W2luZGV4XSA6IDApOwogICAgIH0KIAogICAgIEdseXBoIGdseXBoQXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0CkBAIC05MCw3ICsxMDQsMTAgQEAgcHVibGljOgogCiAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2dseXBoRm9udERhdGFbaW5kZXhGb3JDaGFyYWN0ZXIoYyldOworICAgICAg
ICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4Rm9yQ2hhcmFjdGVyKGMpXTsKKyAgICAgICAg
aWYgKG1fYWxsR2x5cGhzQXJlRnJvbVNhbWVGb250KQorICAgICAgICAgICAgcmV0dXJuIGdseXBo
ID8gbV9mb250RGF0YUZvckFsbEdseXBocyA6IDA7CisgICAgICAgIHJldHVybiBnbHlwaCA/IG1f
Z2x5cGhGb250RGF0YVtpbmRleEZvckNoYXJhY3RlcihjKV0gOiAwOwogICAgIH0KIAogICAgIHZv
aWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgU2lt
cGxlRm9udERhdGEqIGYpCkBAIC05OCwzMiArMTE1LDYyIEBAIHB1YmxpYzoKICAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXhGb3JDaGFyYWN0ZXIoYyksIGcsIGYpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIEdseXBoIGcsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmKQorICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5z
aWduZWQgaW5kZXgsIEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEp
CiAgICAgewogICAgICAgICBBU1NFUlQoaW5kZXggPCBzaXplKTsKLSAgICAgICAgbV9nbHlwaHNb
aW5kZXhdID0gZzsKLSAgICAgICAgbV9nbHlwaEZvbnREYXRhW2luZGV4XSA9IGY7CisgICAgICAg
IG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoOworCisgICAgICAgIC8vIEdseXBoUGFnZSBnZXR0ZXJz
IHdpbGwgYWx3YXlzIHJldHVybiBhIG51bGwgU2ltcGxlRm9udERhdGEqIGZvciBnbHlwaCAjMC4K
KyAgICAgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
IW1fYWxsR2x5cGhzQXJlRnJvbVNhbWVGb250KSB7CisgICAgICAgICAgICBtX2dseXBoRm9udERh
dGFbaW5kZXhdID0gZm9udERhdGE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobV9mb250RGF0YUZvckFsbEdseXBocyA9PSByZWludGVycHJldF9jYXN0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4oLTEpKQorICAgICAgICAgICAgbV9mb250RGF0YUZvckFsbEds
eXBocyA9IGZvbnREYXRhOworCisgICAgICAgIGlmIChtX2ZvbnREYXRhRm9yQWxsR2x5cGhzID09
IGZvbnREYXRhKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBvbGRGb250RGF0YSA9IG1fZm9udERhdGFGb3JBbGxHbHlwaHM7CisgICAgICAgIG1f
YWxsR2x5cGhzQXJlRnJvbVNhbWVGb250ID0gZmFsc2U7CisgICAgICAgIG1fZ2x5cGhGb250RGF0
YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKio+KGZhc3RNYWxsb2Moc2l6ZSAq
IHNpemVvZihTaW1wbGVGb250RGF0YSopKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBtX2dseXBoRm9udERhdGFbaV0gPSBvbGRGb250
RGF0YTsKKyAgICAgICAgbV9nbHlwaEZvbnREYXRhW2luZGV4XSA9IGZvbnREYXRhOwogICAgIH0K
IAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGNvbnN0IEds
eXBoRGF0YSYgZ2x5cGhEYXRhKQogICAgIHsKICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgo
aW5kZXgsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRhLmZvbnREYXRhKTsKICAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb3B5RnJvbShjb25zdCBHbHlwaFBhZ2UmIG90aGVyKQotICAgIHsKLSAgICAg
ICAgbWVtY3B5KG1fZ2x5cGhzLCBvdGhlci5tX2dseXBocywgc2l6ZW9mKG1fZ2x5cGhzKSk7Ci0g
ICAgICAgIG1lbWNweShtX2dseXBoRm9udERhdGEsIG90aGVyLm1fZ2x5cGhGb250RGF0YSwgc2l6
ZW9mKG1fZ2x5cGhGb250RGF0YSkpOwotICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKQorICAgIFBh
c3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5KEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcikg
Y29uc3QKICAgICB7Ci0gICAgICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhz
KSk7Ci0gICAgICAgIG1lbXNldChtX2dseXBoRm9udERhdGEsIDAsIHNpemVvZihtX2dseXBoRm9u
dERhdGEpKTsKKyAgICAgICAgUmVmUHRyPEdseXBoUGFnZT4gcGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlVW5pbml0aWFsaXplZChvd25lcik7CisgICAgICAgIHBhZ2UtPm1fYWxsR2x5cGhzQXJlRnJv
bVNhbWVGb250ID0gbV9hbGxHbHlwaHNBcmVGcm9tU2FtZUZvbnQ7CisgICAgICAgIG1lbWNweShw
YWdlLT5tX2dseXBocywgbV9nbHlwaHMsIHNpemVvZihtX2dseXBocykpOworICAgICAgICBpZiAo
bV9hbGxHbHlwaHNBcmVGcm9tU2FtZUZvbnQpCisgICAgICAgICAgICBwYWdlLT5tX2ZvbnREYXRh
Rm9yQWxsR2x5cGhzID0gbV9mb250RGF0YUZvckFsbEdseXBoczsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBwYWdlLT5tX2dseXBoRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSoqPihmYXN0TWFsbG9jKHNpemUgKiBzaXplb2YoU2ltcGxlRm9udERhdGEqKSkp
OworICAgICAgICAgICAgbWVtY3B5KHBhZ2UtPm1fZ2x5cGhGb250RGF0YSwgbV9nbHlwaEZvbnRE
YXRhLCBzaXplICogc2l6ZW9mKFNpbXBsZUZvbnREYXRhKikpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBwYWdlLnJlbGVhc2UoKTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFyRm9yRm9udERh
dGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIHsKKyAgICAgICAgaWYgKG1f
YWxsR2x5cGhzQXJlRnJvbVNhbWVGb250KSB7CisgICAgICAgICAgICBpZiAobV9mb250RGF0YUZv
ckFsbEdseXBocyA9PSBmb250RGF0YSkgeworICAgICAgICAgICAgICAgIG1lbXNldChtX2dseXBo
cywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CisgICAgICAgICAgICAgICAgbV9mb250RGF0YUZvckFs
bEdseXBocyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAg
ICAgIGlmIChtX2dseXBoRm9udERhdGFbaV0gPT0gZm9udERhdGEpIHsKICAgICAgICAgICAgICAg
ICBtX2dseXBoc1tpXSA9IDA7CkBAIC0xMzgsMTYgKzE4NSwyMiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogY2hhcmFjdGVy
QnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CiAK
IHByaXZhdGU6Ci0gICAgR2x5cGhQYWdlKEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcikKLSAgICAg
ICAgOiBtX293bmVyKG93bmVyKQorICAgIEdseXBoUGFnZShHbHlwaFBhZ2VUcmVlTm9kZSogb3du
ZXIsIGJvb2wgY2xlYXJHbHlwaHMpCisgICAgICAgIDogbV9hbGxHbHlwaHNBcmVGcm9tU2FtZUZv
bnQodHJ1ZSkKKyAgICAgICAgLCBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPigtMSkpCisgICAgICAgICwgbV9vd25lcihvd25lcikK
ICAgICB7CisgICAgICAgIGlmIChjbGVhckdseXBocykKKyAgICAgICAgICAgIG1lbXNldChtX2ds
eXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgfQogCi0gICAgLy8gU2VwYXJhdGUgYXJy
YXlzLCByYXRoZXIgdGhhbiBhcnJheSBvZiBHbHlwaERhdGEsIHRvIHNhdmUgc3BhY2UuCi0gICAg
R2x5cGggbV9nbHlwaHNbc2l6ZV07Ci0gICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZ2x5cGhG
b250RGF0YVtzaXplXTsKLQorICAgIGJvb2wgbV9hbGxHbHlwaHNBcmVGcm9tU2FtZUZvbnQ7Cisg
ICAgdW5pb24geworICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0YUZvckFs
bEdseXBoczsKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqKiBtX2dseXBoRm9udERhdGE7
CisgICAgfTsKICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbV9vd25lcjsKKyAgICBHbHlwaCBtX2ds
eXBoc1tzaXplXTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAppbmRl
eCBjMTE2NTdiLi40N2Q4YzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkBAIC0yMDAsOCArMjAwLDggQEAgdm9p
ZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9udERhdGEqIGZvbnRE
YXRhLCB1bnNpZ25lZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2kgKiAyICsg
MV0gPSBVMTZfVFJBSUwoYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZSh0aGlzKTsK
KworICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVVbmluaXRpYWxpemVkKHRo
aXMpOwogCiAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGZ1bGwgb2Yg
Y2hhcmFjdGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBhbiBhcnJheQogICAgICAgICAgICAgLy8g
b2YgZ2x5cGggaW5kaWNlcy4gIFRoaXMgcGFydCBpbnZvbHZlcyBjYWxsaW5nIGludG8gdGhlIHBs
YXRmb3JtLXNwZWNpZmljIApAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5v
ZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFn
ZU51CiAgICAgICAgICAgICAgICAgICAgIGludCB0byA9IDEgKyBtaW4oc3RhdGljX2Nhc3Q8aW50
PihyYW5nZS50bygpKSAtIHN0YXRpY19jYXN0PGludD4oc3RhcnQpLCBzdGF0aWNfY2FzdDxpbnQ+
KEdseXBoUGFnZTo6c2l6ZSkgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb20gPCBz
dGF0aWNfY2FzdDxpbnQ+KEdseXBoUGFnZTo6c2l6ZSkgJiYgdG8gPiAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaGF2ZUdseXBocyAmJiAhc2NyYXRjaFBhZ2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlKHRoaXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hQYWdlID0gR2x5cGhQYWdlOjpj
cmVhdGVVbmluaXRpYWxpemVkKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
Z2VUb0ZpbGwgPSBzY3JhdGNoUGFnZS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQ
YWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAgICAg
ICAgICAgbV9wYWdlID0gcGFyZW50UGFnZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgLy8gQ29tYmluZSB0aGUgcGFyZW50J3MgZ2x5cGhzIGFuZCBvdXJzIHRvIGZvcm0g
YSBuZXcgbW9yZSBjb21wbGV0ZSBwYWdlLgotICAgICAgICAgICAgICAgIG1fcGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgICAgIG1fcGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh0aGlzKTsKIAogICAgICAgICAgICAgICAgIC8vIE92ZXJsYXkg
dGhlIHBhcmVudCBwYWdlIG9uIHRoZSBmYWxsYmFjayBwYWdlLiBDaGVjayBpZiB0aGUgZmFsbGJh
Y2sgZm9udAogICAgICAgICAgICAgICAgIC8vIGhhcyBhZGRlZCBhbnl0aGluZy4KQEAgLTMwMCwx
NSArMzAwLDE0IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0
IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZSh0
aGlzKTsKICAgICAgICAgLy8gU3lzdGVtIGZhbGxiYWNrLiBJbml0aWFsaXplZCB3aXRoIHRoZSBw
YXJlbnQncyBwYWdlIGhlcmUsIGFzIGluZGl2aWR1YWwKICAgICAgICAgLy8gZW50cmllcyBtYXkg
dXNlIGRpZmZlcmVudCBmb250cyBkZXBlbmRpbmcgb24gY2hhcmFjdGVyLiBJZiB0aGUgRm9udAog
ICAgICAgICAvLyBldmVyIGZpbmRzIGl0IG5lZWRzIGEgZ2x5cGggb3V0IG9mIHRoZSBzeXN0ZW0g
ZmFsbGJhY2sgcGFnZSwgaXQgd2lsbAogICAgICAgICAvLyBhc2sgdGhlIHN5c3RlbSBmb3IgdGhl
IGJlc3QgZm9udCB0byB1c2UgYW5kIGZpbGwgdGhhdCBnbHlwaCBpbiBmb3IgdXMuCiAgICAgICAg
IGlmIChwYXJlbnRQYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5jb3B5RnJvbSgqcGFyZW50UGFn
ZSk7CisgICAgICAgICAgICBtX3BhZ2UgPSBwYXJlbnRQYWdlLT5jcmVhdGVDb3B5KHRoaXMpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhZ2UtPmNsZWFyKCk7CisgICAgICAgICAgICBt
X3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVplcm9lZCh0aGlzKTsKICAgICB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186457</attachid>
            <date>2013-02-04 14:01:42 -0800</date>
            <delta_ts>2013-02-05 16:08:15 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-108835.diff</filename>
            <type>text/plain</type>
            <size>11191</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjOWRjMGMxLi5iMDg1NzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDQgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIE9wdGltaXplIEdseXBoUGFnZSBmb3IgY2FzZSB3aGVyZSBhbGwgZ2x5cGhzIGFyZSBhdmFp
bGFibGUgaW4gdGhlIHNhbWUgZm9udC4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA4
ODM1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExl
dCBHbHlwaFBhZ2UgYmVnaW4gb3B0aW1pc3RpY2FsbHkgYXNzdW1pbmcgdGhhdCBhbGwgaXRzIGds
eXBocyB3aWxsIGJlIHJlcHJlc2VudGVkIGluCisgICAgICAgIHRoZSBzYW1lIFNpbXBsZUZvbnRE
YXRhKi4gSW4gdGhpcyAodmVyeSBjb21tb24pIGNhc2UsIG9ubHkga2VlcCBhIHNpbmdsZSBTaW1w
bGVGb250RGF0YSouCisKKyAgICAgICAgSWYgZ2x5cGhzIGZyb20gbXVsdGlwbGUgZm9udHMgYXJl
IG1peGVkIGluIG9uZSBwYWdlLCBhbiBhcnJheSBvZiBwZXItZ2x5cGggU2ltcGxlRm9udERhdGEq
CisgICAgICAgIGlzIGFsbG9jYXRlZCB0cmFuc3BhcmVudGx5LgorCisgICAgICAgIDQuOTggTUIg
cHJvZ3Jlc3Npb24gb24gTWVtYnVzdGVyMy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVO
b2RlOjppbml0aWFsaXplUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpjcmVhdGVaZXJvZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlOjpjcmVhdGVDb3B5KToKKworICAgICAgICAgICAgVGhlcmUgYXJl
IG5vdyB0aHJlZSB3YXlzIG9mIGNvbnN0cnVjdGluZyBhIEdseXBoUGFnZS4gY3JlYXRlWmVyb2Vk
KCkgYW5kIGNyZWF0ZUNvcHkoKQorICAgICAgICAgICAgYXJlIG9ubHkgdXNlZCB3aGVuIGNyZWF0
aW5nIHRoZSBzeXN0ZW0gZmFsbGJhY2sgcGFnZS4KKworICAgICAgICAoV2ViQ29yZTo6R2x5cGhQ
YWdlOjpzZXRHbHlwaERhdGFGb3JJbmRleCk6CisKKyAgICAgICAgICAgIEhvbGQgb2ZmIGNyZWF0
aW5nIGEgU2ltcGxlRm9udERhdGEqIGFycmF5IHVudGlsIHdlJ3JlIHN1cmUgdGhlcmUgYXJlIHR3
byBkaWZmZXJlbnQKKyAgICAgICAgICAgIFNpbXBsZUZvbnREYXRhKiBiYWNraW5nIHRoZSBnbHlw
aHMgaW4gdGhpcyBwYWdlLgorICAgICAgICAgICAgV2UgZG9uJ3Qgc3RvcmUgYW55IGZvbnQgZGF0
YSBmb3IgZ2x5cGggIzAsIGluc3RlYWQgd2UgbGV0IHRoZSBnZXR0ZXJzIGFsd2F5cyByZXR1cm4K
KyAgICAgICAgICAgIG51bGwgZm9yIGl0LgorCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
On5HbHlwaFBhZ2UpOgorCisgICAgICAgICAgICBGcmVlIHRoZSBTaW1wbGVGb250RGF0YSogYXJy
YXkgaWYgbmVlZGVkLgorCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmdseXBoRGF0YUZv
ckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmdseXBoRGF0YUZvcklu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIp
OgorCisgICAgICAgICAgICBUaGUgZm9udCBkYXRhIGZvciBnbHlwaCAjMCBpcyBhbHdheXMgYSBu
dWxsIHBvaW50ZXIgbm93LgorCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmNsZWFyRm9y
Rm9udERhdGEpOgorCisgICAgICAgICAgICBVcGRhdGVkIGZvciBuZXcgc3RvcmFnZSBmb3JtYXQu
CisKIDIwMTMtMDItMDQgIERpbWEgR29yYmlrICA8ZGdvcmJpa0BhcHBsZS5jb20+CiAKICAgICAg
ICAgSW1wbGVtZXQgOmxhbmcoKSBwc2V1ZG8gY2xhc3Mgc3VwcG9ydCBmb3IgdGhlIFdlYlZUVCA6
OmN1ZSBwc2V1ZG8gZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhQYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2UuaAppbmRleCA0NTJiYzMwLi5mMjZiNWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkdseXBoLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDkgKzYzLDIwIEBAIHN0
cnVjdCBHbHlwaERhdGEgewogLy8gdG8gYmUgb3ZlcnJpZGluZyB0aGUgcGFyZW50J3Mgbm9kZSwg
YnV0IHByb3ZpZGUgbm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KIGNsYXNzIEdseXBoUGFnZSA6
IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlKEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcikKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoR2x5cGhQYWdl
VHJlZU5vZGUqIG93bmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlw
aFBhZ2Uob3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2Uob3du
ZXIsIGZhbHNlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBj
cmVhdGVaZXJvZWQoR2x5cGhQYWdlVHJlZU5vZGUqIG93bmVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2Uob3duZXIsIHRydWUpKTsKKyAgICB9CisKKyAgICB+
R2x5cGhQYWdlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9hbGxHbHlwaHNBcmVGcm9tU2FtZUZv
bnQpCisgICAgICAgICAgICBmYXN0RnJlZShtX2dseXBoRm9udERhdGEpOwogICAgIH0KIAogICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGluLTEgaW4gYSBz
aW5nbGUgcGFnZS4KQEAgLTcyLDE0ICs4NCwxOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5k
ZXhGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdCB7IHJldHVybiBjICUgc2l6ZTsgfQogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogICAgIHsK
LSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZvckNoYXJhY3RlcihjKTsKLSAgICAgICAg
cmV0dXJuIEdseXBoRGF0YShtX2dseXBoc1tpbmRleF0sIG1fZ2x5cGhGb250RGF0YVtpbmRleF0p
OworICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9ySW5kZXgoaW5kZXhGb3JDaGFyYWN0ZXIoYykp
OwogICAgIH0KIAogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmRleCA8IHNpemUpOwotICAgICAgICBy
ZXR1cm4gR2x5cGhEYXRhKG1fZ2x5cGhzW2luZGV4XSwgbV9nbHlwaEZvbnREYXRhW2luZGV4XSk7
CisgICAgICAgIEdseXBoIGdseXBoID0gbV9nbHlwaHNbaW5kZXhdOworICAgICAgICBpZiAoVU5M
SUtFTFkoIWdseXBoKSkKKyAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEoMCwgMCk7CisgICAg
ICAgIGlmIChtX2FsbEdseXBoc0FyZUZyb21TYW1lRm9udCkKKyAgICAgICAgICAgIHJldHVybiBH
bHlwaERhdGEoZ2x5cGgsIG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICByZXR1cm4g
R2x5cGhEYXRhKGdseXBoLCBtX2dseXBoRm9udERhdGFbaW5kZXhdKTsKICAgICB9CiAKICAgICBH
bHlwaCBnbHlwaEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdApAQCAtOTAsNiArMTA2LDExIEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyIGMpIGNvbnN0CiAgICAgeworICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2lu
ZGV4Rm9yQ2hhcmFjdGVyKGMpXTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFnbHlwaCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKG1fYWxsR2x5cGhzQXJlRnJvbVNhbWVGb250
KQorICAgICAgICAgICAgcmV0dXJuIG1fZm9udERhdGFGb3JBbGxHbHlwaHM7CiAgICAgICAgIHJl
dHVybiBtX2dseXBoRm9udERhdGFbaW5kZXhGb3JDaGFyYWN0ZXIoYyldOwogICAgIH0KIApAQCAt
OTgsMzIgKzExOSw2NCBAQCBwdWJsaWM6CiAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGlu
ZGV4Rm9yQ2hhcmFjdGVyKGMpLCBnLCBmKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEdseXBoRGF0
YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnLCBjb25zdCBTaW1wbGVGb250RGF0YSog
ZikKKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBn
bHlwaCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGluZGV4IDwgc2l6ZSk7Ci0gICAgICAgIG1fZ2x5cGhzW2luZGV4XSA9IGc7Ci0gICAgICAg
IG1fZ2x5cGhGb250RGF0YVtpbmRleF0gPSBmOworICAgICAgICBtX2dseXBoc1tpbmRleF0gPSBn
bHlwaDsKKworICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFsd2F5cyByZXR1cm4g
YSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAsIHNvIGRvbid0IHdvcnJ5IGFib3V0
IHRoZSBwb2ludGVyIGZvciB0aGVtLgorICAgICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghbV9hbGxHbHlwaHNBcmVGcm9tU2FtZUZvbnQpIHsKKyAg
ICAgICAgICAgIG1fZ2x5cGhGb250RGF0YVtpbmRleF0gPSBmb250RGF0YTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIC0xIGlzIGEgcGxhY2Vob2xkZXIgYmVm
b3JlIHdlIGhhdmUgYW4gaW5pdGlhbCBTaW1wbGVGb250RGF0YSouCisgICAgICAgIGlmIChtX2Zv
bnREYXRhRm9yQWxsR2x5cGhzID09IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERh
dGEqPigtMSkpCisgICAgICAgICAgICBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzID0gZm9udERhdGE7
CisKKyAgICAgICAgaWYgKG1fZm9udERhdGFGb3JBbGxHbHlwaHMgPT0gZm9udERhdGEpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gVGhpcyBHbHlwaFBhZ2UgaG91c2VzIGdseXBo
cyBmcm9tIG11bHRpcGxlIGZvbnRzLCB0cmFuc2l0aW9uIHRvIGFuIGFycmF5IG9mIFNpbXBsZUZv
bnREYXRhIHBvaW50ZXJzLgorICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogb2xkRm9udERh
dGEgPSBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzOworICAgICAgICBtX2FsbEdseXBoc0FyZUZyb21T
YW1lRm9udCA9IGZhbHNlOworICAgICAgICBtX2dseXBoRm9udERhdGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBTaW1wbGVGb250RGF0YSoqPihmYXN0TWFsbG9jKHNpemUgKiBzaXplb2YoU2ltcGxlRm9u
dERhdGEqKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICAgICAgbV9nbHlwaEZvbnREYXRhW2ldID0gb2xkRm9udERhdGE7CisgICAgICAgIG1f
Z2x5cGhGb250RGF0YVtpbmRleF0gPSBmb250RGF0YTsKICAgICB9CiAKICAgICB2b2lkIHNldEds
eXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0
YSkKICAgICB7CiAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4LCBnbHlwaERhdGEu
Z2x5cGgsIGdseXBoRGF0YS5mb250RGF0YSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgY29weUZy
b20oY29uc3QgR2x5cGhQYWdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIG1lbWNweShtX2dseXBo
cywgb3RoZXIubV9nbHlwaHMsIHNpemVvZihtX2dseXBocykpOwotICAgICAgICBtZW1jcHkobV9n
bHlwaEZvbnREYXRhLCBvdGhlci5tX2dseXBoRm9udERhdGEsIHNpemVvZihtX2dseXBoRm9udERh
dGEpKTsKLSAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCkKKyAgICBQYXNzUmVmUHRyPEdseXBoUGFn
ZT4gY3JlYXRlQ29weShHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIpIGNvbnN0CiAgICAgewotICAg
ICAgICBtZW1zZXQobV9nbHlwaHMsIDAsIHNpemVvZihtX2dseXBocykpOwotICAgICAgICBtZW1z
ZXQobV9nbHlwaEZvbnREYXRhLCAwLCBzaXplb2YobV9nbHlwaEZvbnREYXRhKSk7CisgICAgICAg
IFJlZlB0cjxHbHlwaFBhZ2U+IHBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
b3duZXIpOworICAgICAgICBwYWdlLT5tX2FsbEdseXBoc0FyZUZyb21TYW1lRm9udCA9IG1fYWxs
R2x5cGhzQXJlRnJvbVNhbWVGb250OworICAgICAgICBtZW1jcHkocGFnZS0+bV9nbHlwaHMsIG1f
Z2x5cGhzLCBzaXplb2YobV9nbHlwaHMpKTsKKyAgICAgICAgaWYgKG1fYWxsR2x5cGhzQXJlRnJv
bVNhbWVGb250KQorICAgICAgICAgICAgcGFnZS0+bV9mb250RGF0YUZvckFsbEdseXBocyA9IG1f
Zm9udERhdGFGb3JBbGxHbHlwaHM7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFnZS0+
bV9nbHlwaEZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqKj4oZmFz
dE1hbGxvYyhzaXplICogc2l6ZW9mKFNpbXBsZUZvbnREYXRhKikpKTsKKyAgICAgICAgICAgIG1l
bWNweShwYWdlLT5tX2dseXBoRm9udERhdGEsIG1fZ2x5cGhGb250RGF0YSwgc2l6ZSAqIHNpemVv
ZihTaW1wbGVGb250RGF0YSopKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFnZS5yZWxl
YXNlKCk7CiAgICAgfQogCiAgICAgdm9pZCBjbGVhckZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSkKICAgICB7CisgICAgICAgIGlmIChtX2FsbEdseXBoc0FyZUZyb21T
YW1lRm9udCkgeworICAgICAgICAgICAgaWYgKG1fZm9udERhdGFGb3JBbGxHbHlwaHMgPT0gZm9u
dERhdGEpIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQobV9nbHlwaHMsIDAsIHNpemVvZihtX2ds
eXBocykpOworICAgICAgICAgICAgICAgIG1fZm9udERhdGFGb3JBbGxHbHlwaHMgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oLTEpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobV9nbHlwaEZvbnREYXRhW2ldID09IGZv
bnREYXRhKSB7CiAgICAgICAgICAgICAgICAgbV9nbHlwaHNbaV0gPSAwOwpAQCAtMTM4LDE2ICsx
OTEsMjIgQEAgcHVibGljOgogICAgIGJvb2wgZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBTaW1wbGVGb250RGF0YSopOwogCiBwcml2YXRlOgotICAgIEdseXBoUGFnZShHbHlwaFBh
Z2VUcmVlTm9kZSogb3duZXIpCi0gICAgICAgIDogbV9vd25lcihvd25lcikKKyAgICBHbHlwaFBh
Z2UoR2x5cGhQYWdlVHJlZU5vZGUqIG93bmVyLCBib29sIGNsZWFyR2x5cGhzKQorICAgICAgICA6
IG1fYWxsR2x5cGhzQXJlRnJvbVNhbWVGb250KHRydWUpCisgICAgICAgICwgbV9mb250RGF0YUZv
ckFsbEdseXBocyhyZWludGVycHJldF9jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oLTEpKQor
ICAgICAgICAsIG1fb3duZXIob3duZXIpCiAgICAgeworICAgICAgICBpZiAoY2xlYXJHbHlwaHMp
CisgICAgICAgICAgICBtZW1zZXQobV9nbHlwaHMsIDAsIHNpemVvZihtX2dseXBocykpOwogICAg
IH0KIAotICAgIC8vIFNlcGFyYXRlIGFycmF5cywgcmF0aGVyIHRoYW4gYXJyYXkgb2YgR2x5cGhE
YXRhLCB0byBzYXZlIHNwYWNlLgotICAgIEdseXBoIG1fZ2x5cGhzW3NpemVdOwotICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBtX2dseXBoRm9udERhdGFbc2l6ZV07Ci0KKyAgICBib29sIG1fYWxs
R2x5cGhzQXJlRnJvbVNhbWVGb250OworICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG1fZm9udERhdGFGb3JBbGxHbHlwaHM7CisgICAgICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiogbV9nbHlwaEZvbnREYXRhOworICAgIH07CiAgICAgR2x5cGhQYWdlVHJlZU5vZGUq
IG1fb3duZXI7CisgICAgR2x5cGggbV9nbHlwaHNbc2l6ZV07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2VUcmVlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaFBhZ2VUcmVlTm9kZS5jcHAKaW5kZXggYzExNjU3Yi4uNDdkOGM0YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNw
cApAQCAtMjAwLDggKzIwMCw4IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQ
YWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9wYWdlID0g
R2x5cGhQYWdlOjpjcmVhdGUodGhpcyk7CisKKyAgICAgICAgICAgIG1fcGFnZSA9IEdseXBoUGFn
ZTo6Y3JlYXRlVW5pbml0aWFsaXplZCh0aGlzKTsKIAogICAgICAgICAgICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sg
YW4gYXJyYXkKICAgICAgICAgICAgIC8vIG9mIGdseXBoIGluZGljZXMuICBUaGlzIHBhcnQgaW52
b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyAKQEAgLTIyNSw3ICsyMjUs
NyBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0
YSogZm9udERhdGEsIHVuc2lnbmVkIHBhZ2VOdQogICAgICAgICAgICAgICAgICAgICBpbnQgdG8g
PSAxICsgbWluKHN0YXRpY19jYXN0PGludD4ocmFuZ2UudG8oKSkgLSBzdGF0aWNfY2FzdDxpbnQ+
KHN0YXJ0KSwgc3RhdGljX2Nhc3Q8aW50PihHbHlwaFBhZ2U6OnNpemUpIC0gMSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChmcm9tIDwgc3RhdGljX2Nhc3Q8aW50PihHbHlwaFBhZ2U6OnNpemUp
ICYmIHRvID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhdmVHbHlwaHMgJiYg
IXNjcmF0Y2hQYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFBhZ2Ug
PSBHbHlwaFBhZ2U6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoUGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlVW5pbml0aWFsaXplZCh0aGlzKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYWdlVG9GaWxsID0gc2NyYXRjaFBhZ2UuZ2V0KCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIEdseXBo
UGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSogZm9udERhdGEsIHVu
c2lnbmVkIHBhZ2VOdQogICAgICAgICAgICAgICAgIG1fcGFnZSA9IHBhcmVudFBhZ2U7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbWJpbmUgdGhlIHBhcmVudCdz
IGdseXBocyBhbmQgb3VycyB0byBmb3JtIGEgbmV3IG1vcmUgY29tcGxldGUgcGFnZS4KLSAgICAg
ICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodGhpcyk7CiAKICAg
ICAgICAgICAgICAgICAvLyBPdmVybGF5IHRoZSBwYXJlbnQgcGFnZSBvbiB0aGUgZmFsbGJhY2sg
cGFnZS4gQ2hlY2sgaWYgdGhlIGZhbGxiYWNrIGZvbnQKICAgICAgICAgICAgICAgICAvLyBoYXMg
YWRkZWQgYW55dGhpbmcuCkBAIC0zMDAsMTUgKzMwMCwxNCBAQCB2b2lkIEdseXBoUGFnZVRyZWVO
b2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIHBh
Z2VOdQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9w
YWdlID0gR2x5cGhQYWdlOjpjcmVhdGUodGhpcyk7CiAgICAgICAgIC8vIFN5c3RlbSBmYWxsYmFj
ay4gSW5pdGlhbGl6ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGFnZSBoZXJlLCBhcyBpbmRpdmlkdWFs
CiAgICAgICAgIC8vIGVudHJpZXMgbWF5IHVzZSBkaWZmZXJlbnQgZm9udHMgZGVwZW5kaW5nIG9u
IGNoYXJhY3Rlci4gSWYgdGhlIEZvbnQKICAgICAgICAgLy8gZXZlciBmaW5kcyBpdCBuZWVkcyBh
IGdseXBoIG91dCBvZiB0aGUgc3lzdGVtIGZhbGxiYWNrIHBhZ2UsIGl0IHdpbGwKICAgICAgICAg
Ly8gYXNrIHRoZSBzeXN0ZW0gZm9yIHRoZSBiZXN0IGZvbnQgdG8gdXNlIGFuZCBmaWxsIHRoYXQg
Z2x5cGggaW4gZm9yIHVzLgogICAgICAgICBpZiAocGFyZW50UGFnZSkKLSAgICAgICAgICAgIG1f
cGFnZS0+Y29weUZyb20oKnBhcmVudFBhZ2UpOworICAgICAgICAgICAgbV9wYWdlID0gcGFyZW50
UGFnZS0+Y3JlYXRlQ29weSh0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wYWdl
LT5jbGVhcigpOworICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVaZXJvZWQo
dGhpcyk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186710</attachid>
            <date>2013-02-05 14:43:12 -0800</date>
            <delta_ts>2013-02-05 18:15:30 -0800</delta_ts>
            <desc>Proposed patch v2</desc>
            <filename>bug-108835-v2.diff</filename>
            <type>text/plain</type>
            <size>11497</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNzgxOGIzLi4yMDUwNzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAg
QEAKKzIwMTMtMDItMDUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIE9wdGltaXplIEdseXBoUGFnZSBmb3IgY2FzZSB3aGVyZSBhbGwgZ2x5cGhzIGFyZSBhdmFp
bGFibGUgaW4gdGhlIHNhbWUgZm9udC4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA4
ODM1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxNTcwNDI+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IEdseXBoUGFnZSBiZWdpbiBvcHRp
bWlzdGljYWxseSBhc3N1bWluZyB0aGF0IGFsbCBpdHMgZ2x5cGhzIHdpbGwgYmUgcmVwcmVzZW50
ZWQgaW4KKyAgICAgICAgdGhlIHNhbWUgU2ltcGxlRm9udERhdGEqLiBJbiB0aGlzICh2ZXJ5IGNv
bW1vbikgY2FzZSwgb25seSBrZWVwIGEgc2luZ2xlIFNpbXBsZUZvbnREYXRhKi4KKworICAgICAg
ICBJZiBnbHlwaHMgZnJvbSBtdWx0aXBsZSBmb250cyBhcmUgbWl4ZWQgaW4gb25lIHBhZ2UsIGFu
IGFycmF5IG9mIHBlci1nbHlwaCBTaW1wbGVGb250RGF0YSoKKyAgICAgICAgaXMgYWxsb2NhdGVk
IHRyYW5zcGFyZW50bHkuCisKKyAgICAgICAgNC45OCBNQiBwcm9ncmVzc2lvbiBvbiBNZW1idXN0
ZXIzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdseXBoUGFnZTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2U6OmNyZWF0ZVplcm9lZFN5c3RlbUZhbGxiYWNrUGFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaFBhZ2U6OmNyZWF0ZUNvcGllZFN5c3RlbUZhbGxiYWNrUGFnZSk6CisKKyAgICAg
ICAgICAgIFRoZXJlIGFyZSBub3cgdGhyZWUgd2F5cyBvZiBjb25zdHJ1Y3RpbmcgYSBHbHlwaFBh
Z2UsIHR3byBvZiB0aGVtIGFyZSBvbmx5IHVzZWQgZm9yCisgICAgICAgICAgICBjcmVhdGluZyBz
eXN0ZW0gZmFsbGJhY2sgcGFnZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6dW5k
ZWZpbmVkRm9udERhdGFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OnNldEds
eXBoRGF0YUZvckluZGV4KToKKworICAgICAgICAgICAgSG9sZCBvZmYgY3JlYXRpbmcgYSBTaW1w
bGVGb250RGF0YSogYXJyYXkgdW50aWwgd2UncmUgc3VyZSB0aGVyZSBhcmUgdHdvIGRpZmZlcmVu
dAorICAgICAgICAgICAgU2ltcGxlRm9udERhdGEqIGJhY2tpbmcgdGhlIGdseXBocyBpbiB0aGlz
IHBhZ2UuCisgICAgICAgICAgICBXZSBkb24ndCBzdG9yZSBmb250IGRhdGEgZm9yIGdseXBoICMw
LCBpbnN0ZWFkIHdlIGxldCB0aGUgZ2V0dGVycyBhbHdheXMgcmV0dXJuIG51bGwgZm9yIGl0Lgor
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6On5HbHlwaFBhZ2UpOgorCisgICAgICAgICAg
ICBGcmVlIHRoZSBTaW1wbGVGb250RGF0YSogYXJyYXkgaWYgbmVlZGVkLgorCisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2U6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaFBhZ2U6OmdseXBoRGF0YUZvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZTo6Zm9udERhdGFGb3JDaGFyYWN0ZXIpOgorCisgICAgICAgICAgICBUaGUgZm9udCBk
YXRhIGZvciBnbHlwaCAjMCBpcyBhbHdheXMgYSBudWxsIHBvaW50ZXIgbm93LgorCisgICAgICAg
IChXZWJDb3JlOjpHbHlwaFBhZ2U6OmNsZWFyRm9yRm9udERhdGEpOgorCisgICAgICAgICAgICBV
cGRhdGVkIGZvciBuZXcgc3RvcmFnZSBmb3JtYXQuCisKIDIwMTMtMDItMDUgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIxNDE5MDUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZS5oCmluZGV4IDk3ZDkzNWYuLmVjMDQ5ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
R2x5cGguaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjIsOSArNjMsMzIgQEAgc3Ry
dWN0IEdseXBoRGF0YSB7CiAvLyB0byBiZSBvdmVycmlkaW5nIHRoZSBwYXJlbnQncyBub2RlLCBi
dXQgcHJvdmlkZSBubyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogY2xhc3MgR2x5cGhQYWdlIDog
cHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGUoR2x5cGhQYWdlVHJlZU5vZGUqIG93bmVyKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlVW5pbml0aWFsaXplZChHbHlwaFBhZ2VU
cmVlTm9kZSogb3duZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBo
UGFnZShvd25lcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShvd25l
ciwgZmFsc2UpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNy
ZWF0ZVplcm9lZFN5c3RlbUZhbGxiYWNrUGFnZShHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShvd25lciwgdHJ1ZSkp
OworICAgIH0KKworICAgIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3BpZWRTeXN0ZW1G
YWxsYmFja1BhZ2UoR2x5cGhQYWdlVHJlZU5vZGUqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgUmVmUHRyPEdseXBoUGFnZT4gcGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChvd25lcik7CisgICAgICAgIG1lbWNweShwYWdlLT5tX2dseXBocywgbV9nbHlwaHMsIHNpemVv
ZihtX2dseXBocykpOworICAgICAgICBwYWdlLT5tX2ZvbnREYXRhRm9yQWxsR2x5cGhzID0gbV9m
b250RGF0YUZvckFsbEdseXBoczsKKyAgICAgICAgaWYgKG1fcGVyR2x5cGhGb250RGF0YSkgewor
ICAgICAgICAgICAgcGFnZS0+bV9wZXJHbHlwaEZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
U2ltcGxlRm9udERhdGEqKj4oZmFzdE1hbGxvYyhzaXplICogc2l6ZW9mKFNpbXBsZUZvbnREYXRh
KikpKTsKKyAgICAgICAgICAgIG1lbWNweShwYWdlLT5tX3BlckdseXBoRm9udERhdGEsIG1fcGVy
R2x5cGhGb250RGF0YSwgc2l6ZSAqIHNpemVvZihTaW1wbGVGb250RGF0YSopKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcGFnZS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgfkdseXBoUGFn
ZSgpCisgICAgeworICAgICAgICBpZiAobV9wZXJHbHlwaEZvbnREYXRhKQorICAgICAgICAgICAg
ZmFzdEZyZWUobV9wZXJHbHlwaEZvbnREYXRhKTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IHNpemUgPSAyNTY7IC8vIENvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCkBA
IC03MiwxNCArOTYsMTggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4Rm9yQ2hhcmFjdGVy
KFVDaGFyMzIgYykgY29uc3QgeyByZXR1cm4gYyAlIHNpemU7IH0KICAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKICAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gaW5kZXhGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgIHJldHVybiBHbHlwaERh
dGEobV9nbHlwaHNbaW5kZXhdLCBtX2dseXBoRm9udERhdGFbaW5kZXhdKTsKKyAgICAgICAgcmV0
dXJuIGdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9yQ2hhcmFjdGVyKGMpKTsKICAgICB9CiAKICAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHNpemUp
OwotICAgICAgICByZXR1cm4gR2x5cGhEYXRhKG1fZ2x5cGhzW2luZGV4XSwgbV9nbHlwaEZvbnRE
YXRhW2luZGV4XSk7CisgICAgICAgIEdseXBoIGdseXBoID0gbV9nbHlwaHNbaW5kZXhdOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIWdseXBoKSkKKyAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEo
MCwgMCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghIW1fcGVyR2x5cGhGb250RGF0YSkpCisgICAg
ICAgICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBtX3BlckdseXBoRm9udERhdGFbaW5kZXhd
KTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgbV9mb250RGF0YUZvckFsbEdseXBo
cyk7CiAgICAgfQogCiAgICAgR2x5cGggZ2x5cGhBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAg
LTkwLDcgKzExOCwxMiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fZ2x5cGhGb250RGF0YVtpbmRleEZvckNoYXJhY3RlcihjKV07CisgICAgICAgIEdseXBoIGds
eXBoID0gbV9nbHlwaHNbaW5kZXhGb3JDaGFyYWN0ZXIoYyldOworICAgICAgICBpZiAoVU5MSUtF
TFkoIWdseXBoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoVU5MSUtFTFko
ISFtX3BlckdseXBoRm9udERhdGEpKQorICAgICAgICAgICAgcmV0dXJuIG1fcGVyR2x5cGhGb250
RGF0YVtpbmRleEZvckNoYXJhY3RlcihjKV07CisgICAgICAgIHJldHVybiBtX2ZvbnREYXRhRm9y
QWxsR2x5cGhzOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYywgR2x5cGggZywgY29uc3QgU2ltcGxlRm9udERhdGEqIGYpCkBAIC05OCwzNiArMTMx
LDUyIEBAIHB1YmxpYzoKICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5kZXhGb3JDaGFy
YWN0ZXIoYyksIGcsIGYpOwogICAgIH0KIAotICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgo
dW5zaWduZWQgaW5kZXgsIEdseXBoIGcsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmKQorICAgIHZv
aWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIEdseXBoIGdseXBoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHNpemUpOwotICAgICAgICBtX2dseXBoc1tpbmRl
eF0gPSBnOwotICAgICAgICBtX2dseXBoRm9udERhdGFbaW5kZXhdID0gZjsKKyAgICAgICAgbV9n
bHlwaHNbaW5kZXhdID0gZ2x5cGg7CisKKyAgICAgICAgLy8gR2x5cGhQYWdlIGdldHRlcnMgd2ls
bCBhbHdheXMgcmV0dXJuIGEgbnVsbCBTaW1wbGVGb250RGF0YSogZm9yIGdseXBoICMwLCBzbyBk
b24ndCB3b3JyeSBhYm91dCB0aGUgcG9pbnRlciBmb3IgdGhlbS4KKyAgICAgICAgaWYgKCFnbHlw
aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV9wZXJHbHlwaEZvbnREYXRh
KSB7CisgICAgICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdID0gZm9udERhdGE7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9mb250RGF0YUZv
ckFsbEdseXBocyA9PSB1bmRlZmluZWRGb250RGF0YVZhbHVlKCkpCisgICAgICAgICAgICBtX2Zv
bnREYXRhRm9yQWxsR2x5cGhzID0gZm9udERhdGE7CisKKyAgICAgICAgaWYgKG1fZm9udERhdGFG
b3JBbGxHbHlwaHMgPT0gZm9udERhdGEpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Ly8gVGhpcyBHbHlwaFBhZ2UgaG91c2VzIGdseXBocyBmcm9tIG11bHRpcGxlIGZvbnRzLCB0cmFu
c2l0aW9uIHRvIGFuIGFycmF5IG9mIFNpbXBsZUZvbnREYXRhIHBvaW50ZXJzLgorICAgICAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogb2xkRm9udERhdGEgPSBtX2ZvbnREYXRhRm9yQWxsR2x5cGhz
OworICAgICAgICBtX3BlckdseXBoRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVG
b250RGF0YSoqPihmYXN0TWFsbG9jKHNpemUgKiBzaXplb2YoU2ltcGxlRm9udERhdGEqKSkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAg
bV9wZXJHbHlwaEZvbnREYXRhW2ldID0gb2xkRm9udERhdGE7CisgICAgICAgIG1fcGVyR2x5cGhG
b250RGF0YVtpbmRleF0gPSBmb250RGF0YTsKICAgICB9CiAKICAgICB2b2lkIHNldEdseXBoRGF0
YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YSkKICAg
ICB7CiAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4LCBnbHlwaERhdGEuZ2x5cGgs
IGdseXBoRGF0YS5mb250RGF0YSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgY29weUZyb20oY29u
c3QgR2x5cGhQYWdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIG1lbWNweShtX2dseXBocywgb3Ro
ZXIubV9nbHlwaHMsIHNpemVvZihtX2dseXBocykpOwotICAgICAgICBtZW1jcHkobV9nbHlwaEZv
bnREYXRhLCBvdGhlci5tX2dseXBoRm9udERhdGEsIHNpemVvZihtX2dseXBoRm9udERhdGEpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1lbXNldChtX2dseXBo
cywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7Ci0gICAgICAgIG1lbXNldChtX2dseXBoRm9udERhdGEs
IDAsIHNpemVvZihtX2dseXBoRm9udERhdGEpKTsKLSAgICB9CiAKICAgICB2b2lkIGNsZWFyRm9y
Rm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIHsKKyAgICAgICAg
aWYgKCFtX3BlckdseXBoRm9udERhdGEpIHsKKyAgICAgICAgICAgIGlmIChtX2ZvbnREYXRhRm9y
QWxsR2x5cGhzID09IGZvbnREYXRhKSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KG1fZ2x5cGhz
LCAwLCBzaXplb2YobV9nbHlwaHMpKTsKKyAgICAgICAgICAgICAgICBtX2ZvbnREYXRhRm9yQWxs
R2x5cGhzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KC0xKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fZ2x5cGhG
b250RGF0YVtpXSA9PSBmb250RGF0YSkgeworICAgICAgICAgICAgaWYgKG1fcGVyR2x5cGhGb250
RGF0YVtpXSA9PSBmb250RGF0YSkgewogICAgICAgICAgICAgICAgIG1fZ2x5cGhzW2ldID0gMDsK
LSAgICAgICAgICAgICAgICBtX2dseXBoRm9udERhdGFbaV0gPSAwOworICAgICAgICAgICAgICAg
IG1fcGVyR2x5cGhGb250RGF0YVtpXSA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMzgsMTYgKzE4NywyMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBmaWxsKHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKik7CiAKIHByaXZhdGU6Ci0gICAg
R2x5cGhQYWdlKEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcikKLSAgICAgICAgOiBtX293bmVyKG93
bmVyKQorICAgIEdseXBoUGFnZShHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIsIGJvb2wgY2xlYXJH
bHlwaHMpCisgICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyh1bmRlZmluZWRGb250RGF0
YVZhbHVlKCkpCisgICAgICAgICwgbV9wZXJHbHlwaEZvbnREYXRhKDApCisgICAgICAgICwgbV9v
d25lcihvd25lcikKICAgICB7CisgICAgICAgIGlmIChjbGVhckdseXBocykKKyAgICAgICAgICAg
IG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CiAgICAgfQogCi0gICAgLy8g
U2VwYXJhdGUgYXJyYXlzLCByYXRoZXIgdGhhbiBhcnJheSBvZiBHbHlwaERhdGEsIHRvIHNhdmUg
c3BhY2UuCi0gICAgR2x5cGggbV9nbHlwaHNbc2l6ZV07Ci0gICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIG1fZ2x5cGhGb250RGF0YVtzaXplXTsKKyAgICBzdGF0aWMgY29uc3QgU2ltcGxlRm9udERh
dGEqIHVuZGVmaW5lZEZvbnREYXRhVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4oLTEpOyB9CisKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
bV9mb250RGF0YUZvckFsbEdseXBoczsKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSoqIG1fcGVy
R2x5cGhGb250RGF0YTsKIAogICAgIEdseXBoUGFnZVRyZWVOb2RlKiBtX293bmVyOworICAgIEds
eXBoIG1fZ2x5cGhzW3NpemVdOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwCmluZGV4IGMxMTY1N2IuLjc1N2YzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKQEAgLTIwMCw4ICsyMDAs
OCBAQCB2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0
YSogZm9udERhdGEsIHVuc2lnbmVkIHBhZ2VOdQogICAgICAgICAgICAgICAgICAgICBidWZmZXJb
aSAqIDIgKyAxXSA9IFUxNl9UUkFJTChjKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fcGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRl
KHRoaXMpOworCisgICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQodGhpcyk7CiAKICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIg
ZnVsbCBvZiBjaGFyYWN0ZXJzLCB3ZSB3YW50IHRvIGdldCBiYWNrIGFuIGFycmF5CiAgICAgICAg
ICAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiAgVGhpcyBwYXJ0IGludm9sdmVzIGNhbGxpbmcgaW50
byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBHbHlwaFBh
Z2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNp
Z25lZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAgaW50IHRvID0gMSArIG1pbihzdGF0aWNf
Y2FzdDxpbnQ+KHJhbmdlLnRvKCkpIC0gc3RhdGljX2Nhc3Q8aW50PihzdGFydCksIHN0YXRpY19j
YXN0PGludD4oR2x5cGhQYWdlOjpzaXplKSAtIDEpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
ZnJvbSA8IHN0YXRpY19jYXN0PGludD4oR2x5cGhQYWdlOjpzaXplKSAmJiB0byA+IDApIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXZlR2x5cGhzICYmICFzY3JhdGNoUGFnZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hQYWdlID0gR2x5cGhQYWdlOjpjcmVh
dGUodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFBhZ2UgPSBHbHlw
aFBhZ2U6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFnZVRvRmlsbCA9IHNjcmF0Y2hQYWdlLmdldCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogCkBAIC0yNzksNyArMjc5LDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5p
dGlhbGl6ZVBhZ2UoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnUKICAg
ICAgICAgICAgICAgICBtX3BhZ2UgPSBwYXJlbnRQYWdlOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAvLyBDb21iaW5lIHRoZSBwYXJlbnQncyBnbHlwaHMgYW5kIG91cnMg
dG8gZm9ybSBhIG5ldyBtb3JlIGNvbXBsZXRlIHBhZ2UuCi0gICAgICAgICAgICAgICAgbV9wYWdl
ID0gR2x5cGhQYWdlOjpjcmVhdGUodGhpcyk7CisgICAgICAgICAgICAgICAgbV9wYWdlID0gR2x5
cGhQYWdlOjpjcmVhdGVVbmluaXRpYWxpemVkKHRoaXMpOwogCiAgICAgICAgICAgICAgICAgLy8g
T3ZlcmxheSB0aGUgcGFyZW50IHBhZ2Ugb24gdGhlIGZhbGxiYWNrIHBhZ2UuIENoZWNrIGlmIHRo
ZSBmYWxsYmFjayBmb250CiAgICAgICAgICAgICAgICAgLy8gaGFzIGFkZGVkIGFueXRoaW5nLgpA
QCAtMzAwLDE1ICszMDAsMTQgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBh
Z2UoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnUKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlKHRoaXMpOwogICAgICAgICAvLyBTeXN0ZW0gZmFsbGJhY2suIEluaXRpYWxpemVkIHdp
dGggdGhlIHBhcmVudCdzIHBhZ2UgaGVyZSwgYXMgaW5kaXZpZHVhbAogICAgICAgICAvLyBlbnRy
aWVzIG1heSB1c2UgZGlmZmVyZW50IGZvbnRzIGRlcGVuZGluZyBvbiBjaGFyYWN0ZXIuIElmIHRo
ZSBGb250CiAgICAgICAgIC8vIGV2ZXIgZmluZHMgaXQgbmVlZHMgYSBnbHlwaCBvdXQgb2YgdGhl
IHN5c3RlbSBmYWxsYmFjayBwYWdlLCBpdCB3aWxsCiAgICAgICAgIC8vIGFzayB0aGUgc3lzdGVt
IGZvciB0aGUgYmVzdCBmb250IHRvIHVzZSBhbmQgZmlsbCB0aGF0IGdseXBoIGluIGZvciB1cy4K
ICAgICAgICAgaWYgKHBhcmVudFBhZ2UpCi0gICAgICAgICAgICBtX3BhZ2UtPmNvcHlGcm9tKCpw
YXJlbnRQYWdlKTsKKyAgICAgICAgICAgIG1fcGFnZSA9IHBhcmVudFBhZ2UtPmNyZWF0ZUNvcGll
ZFN5c3RlbUZhbGxiYWNrUGFnZSh0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9w
YWdlLT5jbGVhcigpOworICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVaZXJv
ZWRTeXN0ZW1GYWxsYmFja1BhZ2UodGhpcyk7CiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="206262"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186739</attachid>
            <date>2013-02-05 18:15:30 -0800</date>
            <delta_ts>2013-02-21 06:13:36 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>land-108835.diff</filename>
            <type>text/plain</type>
            <size>11504</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNzgxOGIzLi5kYjRjZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIE9wdGltaXplIEdseXBoUGFnZSBmb3IgY2FzZSB3aGVyZSBhbGwgZ2x5cGhzIGFyZSBhdmFp
bGFibGUgaW4gdGhlIHNhbWUgZm9udC4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA4
ODM1PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMxNTcwNDI+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgTGV0IEdseXBoUGFnZSBiZWdpbiBvcHRp
bWlzdGljYWxseSBhc3N1bWluZyB0aGF0IGFsbCBpdHMgZ2x5cGhzIHdpbGwgYmUgcmVwcmVzZW50
ZWQgaW4KKyAgICAgICAgdGhlIHNhbWUgU2ltcGxlRm9udERhdGEqLiBJbiB0aGlzICh2ZXJ5IGNv
bW1vbikgY2FzZSwgb25seSBrZWVwIGEgc2luZ2xlIFNpbXBsZUZvbnREYXRhKi4KKworICAgICAg
ICBJZiBnbHlwaHMgZnJvbSBtdWx0aXBsZSBmb250cyBhcmUgbWl4ZWQgaW4gb25lIHBhZ2UsIGFu
IGFycmF5IG9mIHBlci1nbHlwaCBTaW1wbGVGb250RGF0YSoKKyAgICAgICAgaXMgYWxsb2NhdGVk
IHRyYW5zcGFyZW50bHkuCisKKyAgICAgICAgNC45OCBNQiBwcm9ncmVzc2lvbiBvbiBNZW1idXN0
ZXIzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdseXBoUGFnZTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2U6OmNyZWF0ZVplcm9lZFN5c3RlbUZhbGxiYWNrUGFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaFBhZ2U6OmNyZWF0ZUNvcGllZFN5c3RlbUZhbGxiYWNrUGFnZSk6CisKKyAgICAg
ICAgICAgIFRoZXJlIGFyZSBub3cgdGhyZWUgd2F5cyBvZiBjb25zdHJ1Y3RpbmcgYSBHbHlwaFBh
Z2UsIHR3byBvZiB0aGVtIGFyZSBvbmx5IHVzZWQgZm9yCisgICAgICAgICAgICBjcmVhdGluZyBz
eXN0ZW0gZmFsbGJhY2sgcGFnZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6c2V0
R2x5cGhEYXRhRm9ySW5kZXgpOgorCisgICAgICAgICAgICBIb2xkIG9mZiBjcmVhdGluZyBhIFNp
bXBsZUZvbnREYXRhKiBhcnJheSB1bnRpbCB3ZSdyZSBzdXJlIHRoZXJlIGFyZSB0d28gZGlmZmVy
ZW50CisgICAgICAgICAgICBTaW1wbGVGb250RGF0YSogYmFja2luZyB0aGUgZ2x5cGhzIGluIHRo
aXMgcGFnZS4KKyAgICAgICAgICAgIFdlIGRvbid0IHN0b3JlIGZvbnQgZGF0YSBmb3IgZ2x5cGgg
IzAsIGluc3RlYWQgd2UgbGV0IHRoZSBnZXR0ZXJzIGFsd2F5cyByZXR1cm4gbnVsbCBmb3IgaXQu
CisKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6fkdseXBoUGFnZSk6CisKKyAgICAgICAg
ICAgIEZyZWUgdGhlIFNpbXBsZUZvbnREYXRhKiBhcnJheSBpZiBuZWVkZWQuCisKKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoUGFnZTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoUGFnZTo6Z2x5cGhEYXRhRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
R2x5cGhQYWdlOjpmb250RGF0YUZvckNoYXJhY3Rlcik6CisKKyAgICAgICAgICAgIFRoZSBmb250
IGRhdGEgZm9yIGdseXBoICMwIGlzIGFsd2F5cyBhIG51bGwgcG9pbnRlciBub3cuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Y2xlYXJGb3JGb250RGF0YSk6CisKKyAgICAgICAgICAg
IFVwZGF0ZWQgZm9yIG5ldyBzdG9yYWdlIGZvcm1hdC4KKwogMjAxMy0wMi0wNSAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE0MTkwNS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhQYWdlLmgKaW5kZXggOTdkOTM1Zi4uOTZmNTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNjIsOSArNjMsMzIgQEAgc3RydWN0IEdseXBoRGF0YSB7CiAvLyB0byBiZSBvdmVycmlk
aW5nIHRoZSBwYXJlbnQncyBub2RlLCBidXQgcHJvdmlkZSBubyBhZGRpdGlvbmFsIGluZm9ybWF0
aW9uLgogY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGUoR2x5cGhQYWdl
VHJlZU5vZGUqIG93bmVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRl
VW5pbml0aWFsaXplZChHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShvd25lcikpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdseXBoUGFnZShvd25lciwgZmFsc2UpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZVplcm9lZFN5c3RlbUZhbGxiYWNrUGFnZShHbHlw
aFBhZ2VUcmVlTm9kZSogb3duZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEdseXBoUGFnZShvd25lciwgdHJ1ZSkpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8R2x5cGhQ
YWdlPiBjcmVhdGVDb3BpZWRTeXN0ZW1GYWxsYmFja1BhZ2UoR2x5cGhQYWdlVHJlZU5vZGUqIG93
bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVmUHRyPEdseXBoUGFnZT4gcGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlVW5pbml0aWFsaXplZChvd25lcik7CisgICAgICAgIG1lbWNweShwYWdlLT5t
X2dseXBocywgbV9nbHlwaHMsIHNpemVvZihtX2dseXBocykpOworICAgICAgICBwYWdlLT5tX2Zv
bnREYXRhRm9yQWxsR2x5cGhzID0gbV9mb250RGF0YUZvckFsbEdseXBoczsKKyAgICAgICAgaWYg
KG1fcGVyR2x5cGhGb250RGF0YSkgeworICAgICAgICAgICAgcGFnZS0+bV9wZXJHbHlwaEZvbnRE
YXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqKj4oZmFzdE1hbGxvYyhzaXpl
ICogc2l6ZW9mKFNpbXBsZUZvbnREYXRhKikpKTsKKyAgICAgICAgICAgIG1lbWNweShwYWdlLT5t
X3BlckdseXBoRm9udERhdGEsIG1fcGVyR2x5cGhGb250RGF0YSwgc2l6ZSAqIHNpemVvZihTaW1w
bGVGb250RGF0YSopKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFnZS5yZWxlYXNlKCk7
CisgICAgfQorCisgICAgfkdseXBoUGFnZSgpCisgICAgeworICAgICAgICBpZiAobV9wZXJHbHlw
aEZvbnREYXRhKQorICAgICAgICAgICAgZmFzdEZyZWUobV9wZXJHbHlwaEZvbnREYXRhKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7IC8vIENvdmVycyBMYXRp
bi0xIGluIGEgc2luZ2xlIHBhZ2UuCkBAIC03MiwxNCArOTYsMTggQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGluZGV4Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QgeyByZXR1cm4gYyAlIHNp
emU7IH0KICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29u
c3QKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhGb3JDaGFyYWN0ZXIoYyk7
Ci0gICAgICAgIHJldHVybiBHbHlwaERhdGEobV9nbHlwaHNbaW5kZXhdLCBtX2dseXBoRm9udERh
dGFbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9yQ2hh
cmFjdGVyKGMpKTsKICAgICB9CiAKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5kZXgodW5z
aWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpbmRleCA8IHNpemUpOwotICAgICAgICByZXR1cm4gR2x5cGhEYXRhKG1fZ2x5
cGhzW2luZGV4XSwgbV9nbHlwaEZvbnREYXRhW2luZGV4XSk7CisgICAgICAgIEdseXBoIGdseXBo
ID0gbV9nbHlwaHNbaW5kZXhdOworICAgICAgICBpZiAoVU5MSUtFTFkoIWdseXBoKSkKKyAgICAg
ICAgICAgIHJldHVybiBHbHlwaERhdGEoMCwgMCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghIW1f
cGVyR2x5cGhGb250RGF0YSkpCisgICAgICAgICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBt
X3BlckdseXBoRm9udERhdGFbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlw
aCwgbV9mb250RGF0YUZvckFsbEdseXBocyk7CiAgICAgfQogCiAgICAgR2x5cGggZ2x5cGhBdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTkwLDcgKzExOCw3IEBAIHB1YmxpYzoKIAogICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gbV9nbHlwaEZvbnREYXRhW2luZGV4Rm9yQ2hhcmFjdGVy
KGMpXTsKKyAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9yQ2hhcmFjdGVy
KGMpKS5mb250RGF0YTsKICAgICB9CiAKICAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmKQpAQCAtOTgsMzYg
KzEyNiw1NSBAQCBwdWJsaWM6CiAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9y
Q2hhcmFjdGVyKGMpLCBnLCBmKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEdseXBoRGF0YUZvcklu
ZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnLCBjb25zdCBTaW1wbGVGb250RGF0YSogZikKKyAg
ICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBzaXplKTsKLSAgICAgICAgbV9nbHlwaHNb
aW5kZXhdID0gZzsKLSAgICAgICAgbV9nbHlwaEZvbnREYXRhW2luZGV4XSA9IGY7CisgICAgICAg
IG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoOworCisgICAgICAgIC8vIEdseXBoUGFnZSBnZXR0ZXJz
IHdpbGwgYWx3YXlzIHJldHVybiBhIG51bGwgU2ltcGxlRm9udERhdGEqIGZvciBnbHlwaCAjMCwg
c28gZG9uJ3Qgd29ycnkgYWJvdXQgdGhlIHBvaW50ZXIgZm9yIHRoZW0uCisgICAgICAgIGlmICgh
Z2x5cGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQSBnbHlwaCBpbmRleCB3
aXRob3V0IGEgZm9udCBkYXRhIHBvaW50ZXIgbWFrZXMgbm8gc2Vuc2UuCisgICAgICAgIEFTU0VS
VChmb250RGF0YSk7CisKKyAgICAgICAgaWYgKG1fcGVyR2x5cGhGb250RGF0YSkgeworICAgICAg
ICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGZvbnREYXRhOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2ZvbnREYXRhRm9yQWxsR2x5cGhz
KQorICAgICAgICAgICAgbV9mb250RGF0YUZvckFsbEdseXBocyA9IGZvbnREYXRhOworCisgICAg
ICAgIGlmIChtX2ZvbnREYXRhRm9yQWxsR2x5cGhzID09IGZvbnREYXRhKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIC8vIFRoaXMgR2x5cGhQYWdlIGhvdXNlcyBnbHlwaHMgZnJvbSBt
dWx0aXBsZSBmb250cywgdHJhbnNpdGlvbiB0byBhbiBhcnJheSBvZiBTaW1wbGVGb250RGF0YSBw
b2ludGVycy4KKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG9sZEZvbnREYXRhID0gbV9m
b250RGF0YUZvckFsbEdseXBoczsKKyAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqKj4oZmFzdE1hbGxvYyhzaXplICogc2l6ZW9mKFNp
bXBsZUZvbnREYXRhKikpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgICAgIG1fcGVyR2x5cGhGb250RGF0YVtpXSA9IG9sZEZvbnREYXRhOwor
ICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdID0gZm9udERhdGE7CiAgICAgfQogCiAg
ICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgY29uc3QgR2x5cGhE
YXRhJiBnbHlwaERhdGEpCiAgICAgewogICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRl
eCwgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udERhdGEpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvcHlGcm9tKGNvbnN0IEdseXBoUGFnZSYgb3RoZXIpCi0gICAgewotICAgICAgICBt
ZW1jcHkobV9nbHlwaHMsIG90aGVyLm1fZ2x5cGhzLCBzaXplb2YobV9nbHlwaHMpKTsKLSAgICAg
ICAgbWVtY3B5KG1fZ2x5cGhGb250RGF0YSwgb3RoZXIubV9nbHlwaEZvbnREYXRhLCBzaXplb2Yo
bV9nbHlwaEZvbnREYXRhKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAg
ICAgICBtZW1zZXQobV9nbHlwaHMsIDAsIHNpemVvZihtX2dseXBocykpOwotICAgICAgICBtZW1z
ZXQobV9nbHlwaEZvbnREYXRhLCAwLCBzaXplb2YobV9nbHlwaEZvbnREYXRhKSk7Ci0gICAgfQog
CiAgICAgdm9pZCBjbGVhckZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSkKICAgICB7CisgICAgICAgIGlmICghbV9wZXJHbHlwaEZvbnREYXRhKSB7CisgICAgICAgICAg
ICBpZiAobV9mb250RGF0YUZvckFsbEdseXBocyA9PSBmb250RGF0YSkgeworICAgICAgICAgICAg
ICAgIG1lbXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7CisgICAgICAgICAgICAg
ICAgbV9mb250RGF0YUZvckFsbEdseXBocyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX2dseXBoRm9udERhdGFbaV0gPT0gZm9udERhdGEp
IHsKKyAgICAgICAgICAgIGlmIChtX3BlckdseXBoRm9udERhdGFbaV0gPT0gZm9udERhdGEpIHsK
ICAgICAgICAgICAgICAgICBtX2dseXBoc1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9nbHlw
aEZvbnREYXRhW2ldID0gMDsKKyAgICAgICAgICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaV0g
PSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTM4LDE4ICsxODUsMjIg
QEAgcHVibGljOgogICAgIGJvb2wgZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBT
aW1wbGVGb250RGF0YSopOwogCiBwcml2YXRlOgotICAgIEdseXBoUGFnZShHbHlwaFBhZ2VUcmVl
Tm9kZSogb3duZXIpCi0gICAgICAgIDogbV9vd25lcihvd25lcikKKyAgICBHbHlwaFBhZ2UoR2x5
cGhQYWdlVHJlZU5vZGUqIG93bmVyLCBib29sIGNsZWFyR2x5cGhzKQorICAgICAgICA6IG1fZm9u
dERhdGFGb3JBbGxHbHlwaHMoMCkKKyAgICAgICAgLCBtX3BlckdseXBoRm9udERhdGEoMCkKKyAg
ICAgICAgLCBtX293bmVyKG93bmVyKQogICAgIHsKKyAgICAgICAgaWYgKGNsZWFyR2x5cGhzKQor
ICAgICAgICAgICAgbWVtc2V0KG1fZ2x5cGhzLCAwLCBzaXplb2YobV9nbHlwaHMpKTsKICAgICB9
CiAKLSAgICAvLyBTZXBhcmF0ZSBhcnJheXMsIHJhdGhlciB0aGFuIGFycmF5IG9mIEdseXBoRGF0
YSwgdG8gc2F2ZSBzcGFjZS4KLSAgICBHbHlwaCBtX2dseXBoc1tzaXplXTsKLSAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogbV9nbHlwaEZvbnREYXRhW3NpemVdOworICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzOworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiogbV9wZXJHbHlwaEZvbnREYXRhOwogCiAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1fb3duZXI7
CisgICAgR2x5cGggbV9nbHlwaHNbc2l6ZV07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBHbHlwaFBhZ2VUcmVlTm9kZV9oCisjZW5kaWYgLy8gR2x5cGhQYWdlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRy
ZWVOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRy
ZWVOb2RlLmNwcAppbmRleCBjMTE2NTdiLi43NTdmM2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCkBAIC0yMDAs
OCArMjAwLDggQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3Qg
Rm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyW2kgKiAyICsgMV0gPSBVMTZfVFJBSUwoYyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6
OmNyZWF0ZSh0aGlzKTsKKworICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVV
bmluaXRpYWxpemVkKHRoaXMpOwogCiAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEg
YnVmZmVyIGZ1bGwgb2YgY2hhcmFjdGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBhbiBhcnJheQog
ICAgICAgICAgICAgLy8gb2YgZ2x5cGggaW5kaWNlcy4gIFRoaXMgcGFydCBpbnZvbHZlcyBjYWxs
aW5nIGludG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIApAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQg
R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAgICAgICAgICAgICAgIGludCB0byA9IDEgKyBtaW4o
c3RhdGljX2Nhc3Q8aW50PihyYW5nZS50bygpKSAtIHN0YXRpY19jYXN0PGludD4oc3RhcnQpLCBz
dGF0aWNfY2FzdDxpbnQ+KEdseXBoUGFnZTo6c2l6ZSkgLSAxKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KEdseXBoUGFnZTo6c2l6ZSkgJiYgdG8gPiAw
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGF2ZUdseXBocyAmJiAhc2NyYXRjaFBh
Z2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUGFnZSA9IEdseXBoUGFn
ZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hQYWdl
ID0gR2x5cGhQYWdlOjpjcmVhdGVVbmluaXRpYWxpemVkKHRoaXMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhZ2VUb0ZpbGwgPSBzY3JhdGNoUGFnZS5nZXQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KIApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5v
ZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFn
ZU51CiAgICAgICAgICAgICAgICAgbV9wYWdlID0gcGFyZW50UGFnZTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tYmluZSB0aGUgcGFyZW50J3MgZ2x5cGhzIGFu
ZCBvdXJzIHRvIGZvcm0gYSBuZXcgbW9yZSBjb21wbGV0ZSBwYWdlLgotICAgICAgICAgICAgICAg
IG1fcGFnZSA9IEdseXBoUGFnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgICAgIG1fcGFn
ZSA9IEdseXBoUGFnZTo6Y3JlYXRlVW5pbml0aWFsaXplZCh0aGlzKTsKIAogICAgICAgICAgICAg
ICAgIC8vIE92ZXJsYXkgdGhlIHBhcmVudCBwYWdlIG9uIHRoZSBmYWxsYmFjayBwYWdlLiBDaGVj
ayBpZiB0aGUgZmFsbGJhY2sgZm9udAogICAgICAgICAgICAgICAgIC8vIGhhcyBhZGRlZCBhbnl0
aGluZy4KQEAgLTMwMCwxNSArMzAwLDE0IEBAIHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRp
YWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFnZU51CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX3BhZ2UgPSBHbHlw
aFBhZ2U6OmNyZWF0ZSh0aGlzKTsKICAgICAgICAgLy8gU3lzdGVtIGZhbGxiYWNrLiBJbml0aWFs
aXplZCB3aXRoIHRoZSBwYXJlbnQncyBwYWdlIGhlcmUsIGFzIGluZGl2aWR1YWwKICAgICAgICAg
Ly8gZW50cmllcyBtYXkgdXNlIGRpZmZlcmVudCBmb250cyBkZXBlbmRpbmcgb24gY2hhcmFjdGVy
LiBJZiB0aGUgRm9udAogICAgICAgICAvLyBldmVyIGZpbmRzIGl0IG5lZWRzIGEgZ2x5cGggb3V0
IG9mIHRoZSBzeXN0ZW0gZmFsbGJhY2sgcGFnZSwgaXQgd2lsbAogICAgICAgICAvLyBhc2sgdGhl
IHN5c3RlbSBmb3IgdGhlIGJlc3QgZm9udCB0byB1c2UgYW5kIGZpbGwgdGhhdCBnbHlwaCBpbiBm
b3IgdXMuCiAgICAgICAgIGlmIChwYXJlbnRQYWdlKQotICAgICAgICAgICAgbV9wYWdlLT5jb3B5
RnJvbSgqcGFyZW50UGFnZSk7CisgICAgICAgICAgICBtX3BhZ2UgPSBwYXJlbnRQYWdlLT5jcmVh
dGVDb3BpZWRTeXN0ZW1GYWxsYmFja1BhZ2UodGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fcGFnZS0+Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGFnZSA9IEdseXBoUGFnZTo6Y3Jl
YXRlWmVyb2VkU3lzdGVtRmFsbGJhY2tQYWdlKHRoaXMpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188776</attachid>
            <date>2013-02-17 14:31:02 -0800</date>
            <delta_ts>2013-02-21 06:13:36 -0800</delta_ts>
            <desc>Speculative optimization</desc>
            <filename>perf-108835.diff</filename>
            <type>text/plain</type>
            <size>3670</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MjQzN2VmLi5iOTA0NzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTMtMDItMTcgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIFJFR1JFU1NJT04ocjE0MzEyNSk6IH41JSBwZXJmb3JtYW5jZSBoaXQgb24gQ2hyb21pdW0n
cyBpbnRsMiBwYWdlIGN5Y2xlci4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA4ODM1
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0cmVh
bWxpbmUgdGhlIGNhc2Ugd2hlcmUgR2x5cGhQYWdlIGhhcyBhIHBlci1nbHlwaCBTaW1wbGVGb250
RGF0YSogbG9va3VwIHRhYmxlIHRvIGFsbG93CisgICAgICAgIHRha2luZyBlYXJsaWVyIGJyYW5j
aGVzIG9uIHBhZ2VzIHdpdGggbG90cyBvZiBtaXhlZC1mb250IHRleHQuCisgICAgICAgIFdlIGFj
Y29tcGxpc2ggdGhpcyBieSBleHBsaWNpdGx5IHN0b3JpbmcgYSBudWxsIFNpbXBsZUZvbnREYXRh
KiBmb3IgZ2x5cGggIzAgaW4gdGhlIHBlci1nbHlwaAorICAgICAgICBsb29rdXAgdGFibGUgaW5z
dGVhZCBvZiByZWx5aW5nIG9uICJpZiAoIWdseXBoKSIgY2hlY2tzIGluIGdldHRlcnMuCisKKyAg
ICAgICAgVGhpcyBpcyBhIHNwZWN1bGF0aXZlIG9wdGltaXphdGlvbiwgSSBjYW4ndCBnZXQgc3Rh
YmxlIGVub3VnaCBudW1iZXJzIGxvY2FsbHkgdG8gdGVsbCBpZiB0aGlzCisgICAgICAgIHdpbGwg
cmVzb2x2ZSB0aGUgaXNzdWUgb24gdGhlIGJvdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Z2x5cGhEYXRh
Rm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmb250RGF0YUZvckNoYXJh
Y3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OnNldEdseXBoRGF0YUZvckluZGV4
KToKKwogMjAxMy0wMi0xNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYlNwZWVjaDogcGx1bWIgdGhyb3VnaCBhIG1ldGhvZCB0byBnZW5lcmF0ZSBm
YWtlIHNwZWVjaCBqb2JzIGZvciB0ZXN0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IDk2NzU4NWQuLjcwYjdmYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCkBAIC0xMDMsMTAgKzEwMywxMCBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihpbmRleCA8IHNpemUpOwogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4XTsK
LSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEoMCwgMCk7
CiAgICAgICAgIGlmIChtX3BlckdseXBoRm9udERhdGEpCiAgICAgICAgICAgICByZXR1cm4gR2x5
cGhEYXRhKGdseXBoLCBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdKTsKKyAgICAgICAgaWYgKCFn
bHlwaCkKKyAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEoMCwgMCk7CiAgICAgICAgIHJldHVy
biBHbHlwaERhdGEoZ2x5cGgsIG1fZm9udERhdGFGb3JBbGxHbHlwaHMpOwogICAgIH0KIApAQCAt
MTE4LDcgKzExOCwxMyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IGdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9yQ2hhcmFjdGVyKGMpKS5mb250RGF0YTsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgaWYgKG1f
cGVyR2x5cGhGb250RGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX3BlckdseXBoRm9udERhdGFb
aW5kZXhdOworICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4XTsKKyAgICAgICAg
aWYgKCFnbHlwaCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9mb250
RGF0YUZvckFsbEdseXBoczsKICAgICB9CiAKICAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmKQpAQCAtMTMx
LDE4ICsxMzcsMTggQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihpbmRleCA8IHNpemUpOwogICAgICAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaDsK
IAotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFsd2F5cyByZXR1cm4gYSBudWxs
IFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAsIHNvIGRvbid0IHdvcnJ5IGFib3V0IHRoZSBw
b2ludGVyIGZvciB0aGVtLgorICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFsd2F5
cyByZXR1cm4gYSBudWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBu
byBwZXItZ2x5cGggZm9udCBhcnJheS4KKyAgICAgICAgaWYgKG1fcGVyR2x5cGhGb250RGF0YSkg
eworICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBoID8gZm9udERh
dGEgOiAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgaWYgKCFn
bHlwaCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBBIGdseXBoIGluZGV4IHdp
dGhvdXQgYSBmb250IGRhdGEgcG9pbnRlciBtYWtlcyBubyBzZW5zZS4KICAgICAgICAgQVNTRVJU
KGZvbnREYXRhKTsKIAotICAgICAgICBpZiAobV9wZXJHbHlwaEZvbnREYXRhKSB7Ci0gICAgICAg
ICAgICBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdID0gZm9udERhdGE7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoIW1fZm9udERhdGFGb3JBbGxHbHlwaHMp
CiAgICAgICAgICAgICBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzID0gZm9udERhdGE7CiAKQEAgLTE1
Myw3ICsxNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBvbGRG
b250RGF0YSA9IG1fZm9udERhdGFGb3JBbGxHbHlwaHM7CiAgICAgICAgIG1fcGVyR2x5cGhGb250
RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKio+KGZhc3RNYWxsb2Moc2l6
ZSAqIHNpemVvZihTaW1wbGVGb250RGF0YSopKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaV0gPSBv
bGRGb250RGF0YTsKKyAgICAgICAgICAgIG1fcGVyR2x5cGhGb250RGF0YVtpXSA9IG1fZ2x5cGhz
W2ldID8gb2xkRm9udERhdGEgOiAwOwogICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaW5kZXhd
ID0gZm9udERhdGE7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="208989"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189517</attachid>
            <date>2013-02-21 06:13:36 -0800</date>
            <delta_ts>2013-02-21 07:28:00 -0800</delta_ts>
            <desc>Mildly desperate patch</desc>
            <filename>perf2-108835.diff</filename>
            <type>text/plain</type>
            <size>12075</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNGZkZmI0Li4xZjgyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEg
QEAKKzIwMTMtMDItMjEgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIEdseXBoUGFnZTogQmFrZSBwZXItZ2x5cGggZm9udCBkYXRhIGFycmF5IGludG8gc2FtZSBh
bGxvY2F0aW9uIGFzIEdseXBoUGFnZS4KKworICAgICAgICBBIGhvcGVmdWwgZml4IGZvciBSRUdS
RVNTSU9OKHIxNDMxMjUpOiB+NSUgcGVyZm9ybWFuY2UgaGl0IG9uIENocm9taXVtJ3MgaW50bDIg
cGFnZSBjeWNsZXIKKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA4ODM1PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld2lyZSBHbHlwaFBh
Z2Ugc28gdGhhdCB3ZSBoYXZlIHRvIGRlY2lkZSBhdCBjcmVhdGlvbiB0aW1lIHdoZXRoZXIgdGhl
cmUgd2lsbCBiZSBhIHBlci1nbHlwaAorICAgICAgICBhcnJheSBvZiBTaW1wbGVGb250RGF0YSog
b3Igbm90LiBUaGlzIHJlbW92ZXMgb25lIGFsbG9jYXRpb24gYW5kIG9uZSBzdGVwIG9mIGluZGly
ZWN0aW9uIGZvcgorICAgICAgICBwYWdlcyB3aXRoIGdseXBocyBmcm9tIG1peGVkIGZvbnRzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmg6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2U6OmNyZWF0ZUNvcGllZFN5c3RlbUZhbGxiYWNrUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2U6On5HbHlwaFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQ
YWdlOjpnbHlwaERhdGFGb3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZv
bnREYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6c2V0R2x5
cGhEYXRhRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpjbGVhckZvckZv
bnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6R2x5cGhQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6aGFzUGVyR2x5cGhGb250RGF0YSk6CisgICAgICAgIChH
bHlwaFBhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2Rl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFn
ZSk6CisKIDIwMTMtMDItMjAgIFdlaSBKYW1lcyAgPGphbWVzLndlaUBpbnRlbC5jb20+CiAKICAg
ICAgICAgQ2hhbm5lbE1lcmdlck5vZGUgbWF5IG5lZWQgY2hlY2sgZm9yIGRlZmVycmVkIHVwZGF0
aW5nIG9mIG91dHB1dCBjaGFubmVscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaFBhZ2UuaAppbmRleCA3MGI3ZmI2Li40ZTc5NzRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtNTMsNiArNTMsMTEgQEAgc3RydWN0
IEdseXBoRGF0YSB7CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhOwogfTsKIAor
I2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlOiA0MjAwKSAvLyBEaXNhYmxlICJ6ZXJvLXNpemVkIGFycmF5IGluIHN0cnVjdC91
bmlvbiIgd2FybmluZworI2VuZGlmCisKIC8vIEEgR2x5cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQt
c2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1hcHBpbmdzIGZvciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdl
IG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVuaWNvZGUgY29kZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUg
aW5kZXhlZAogLy8gc3RhcnRpbmcgZnJvbSAwIGFuZCBpbmNyZW1lbnRpbmcgZm9yIGVhY2ggMjU2
IGdseXBocy4KQEAgLTYzLDMzICs2OCwzMyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIHRvIGJl
IG92ZXJyaWRpbmcgdGhlIHBhcmVudCdzIG5vZGUsIGJ1dCBwcm92aWRlIG5vIGFkZGl0aW9uYWwg
aW5mb3JtYXRpb24uCiBjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBh
Z2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQoR2x5cGhQYWdlVHJlZU5vZGUqIG93bmVyKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdseXBoUGFnZT4gY3JlYXRlRm9yTWl4ZWRGb250RGF0YShHbHlwaFBhZ2VUcmVlTm9kZSog
b3duZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShvd25l
ciwgZmFsc2UpKTsKKyAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBo
UGFnZSkgKyBzaXplb2YoU2ltcGxlRm9udERhdGEqKSAqIEdseXBoUGFnZTo6c2l6ZSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNsb3QpIEdseXBoUGFnZShvd25lcikpOwogICAgIH0K
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlWmVyb2VkU3lzdGVtRmFs
bGJhY2tQYWdlKEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvclNpbmdsZUZvbnREYXRhKEdseXBoUGFnZVRyZWVOb2RlKiBv
d25lciwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2Uob3duZXIsIHRydWUpKTsKKyAgICAgICAgQVNTRVJU
KGZvbnREYXRhKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2Uob3duZXIs
IGZvbnREYXRhKSk7CiAgICAgfQogCiAgICAgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUNv
cGllZFN5c3RlbUZhbGxiYWNrUGFnZShHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIpIGNvbnN0CiAg
ICAgewotICAgICAgICBSZWZQdHI8R2x5cGhQYWdlPiBwYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVV
bmluaXRpYWxpemVkKG93bmVyKTsKKyAgICAgICAgUmVmUHRyPEdseXBoUGFnZT4gcGFnZSA9IEds
eXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YShvd25lcik7CiAgICAgICAgIG1lbWNweShw
YWdlLT5tX2dseXBocywgbV9nbHlwaHMsIHNpemVvZihtX2dseXBocykpOwotICAgICAgICBwYWdl
LT5tX2ZvbnREYXRhRm9yQWxsR2x5cGhzID0gbV9mb250RGF0YUZvckFsbEdseXBoczsKLSAgICAg
ICAgaWYgKG1fcGVyR2x5cGhGb250RGF0YSkgewotICAgICAgICAgICAgcGFnZS0+bV9wZXJHbHlw
aEZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqKj4oZmFzdE1hbGxv
YyhzaXplICogc2l6ZW9mKFNpbXBsZUZvbnREYXRhKikpKTsKLSAgICAgICAgICAgIG1lbWNweShw
YWdlLT5tX3BlckdseXBoRm9udERhdGEsIG1fcGVyR2x5cGhGb250RGF0YSwgc2l6ZSAqIHNpemVv
ZihTaW1wbGVGb250RGF0YSopKTsKKyAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkK
KyAgICAgICAgICAgIG1lbWNweShwYWdlLT5tX3BlckdseXBoRm9udERhdGEsIG1fcGVyR2x5cGhG
b250RGF0YSwgc2l6ZW9mKFNpbXBsZUZvbnREYXRhKikgKiBHbHlwaFBhZ2U6OnNpemUpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR2x5cGhQYWdl
OjpzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBwYWdlLT5tX3BlckdseXBoRm9udERhdGFb
aV0gPSBtX2dseXBoc1tpXSA/IG1fZm9udERhdGFGb3JBbGxHbHlwaHMgOiAwOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwYWdlLnJlbGVhc2UoKTsKICAgICB9CiAK
LSAgICB+R2x5cGhQYWdlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3BlckdseXBoRm9udERhdGEp
Ci0gICAgICAgICAgICBmYXN0RnJlZShtX3BlckdseXBoRm9udERhdGEpOwotICAgIH0KKyAgICB+
R2x5cGhQYWdlKCkgeyB9CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7IC8v
IENvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCiAKQEAgLTEwMywxMSArMTA4LDkgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aW5kZXggPCBzaXplKTsKICAgICAgICAgR2x5cGggZ2x5cGggPSBtX2dseXBoc1tpbmRleF07Ci0g
ICAgICAgIGlmIChtX3BlckdseXBoRm9udERhdGEpCisgICAgICAgIGlmIChoYXNQZXJHbHlwaEZv
bnREYXRhKCkpCiAgICAgICAgICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBtX3BlckdseXBo
Rm9udERhdGFbaW5kZXhdKTsKLSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHJldHVy
biBHbHlwaERhdGEoMCwgMCk7Ci0gICAgICAgIHJldHVybiBHbHlwaERhdGEoZ2x5cGgsIG1fZm9u
dERhdGFGb3JBbGxHbHlwaHMpOworICAgICAgICByZXR1cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlw
aCA/IG1fZm9udERhdGFGb3JBbGxHbHlwaHMgOiAwKTsKICAgICB9CiAKICAgICBHbHlwaCBnbHlw
aEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdApAQCAtMTE5LDEyICsxMjIsOSBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykg
Y29uc3QKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhGb3JDaGFyYWN0ZXIo
Yyk7Ci0gICAgICAgIGlmIChtX3BlckdseXBoRm9udERhdGEpCisgICAgICAgIGlmIChoYXNQZXJH
bHlwaEZvbnREYXRhKCkpCiAgICAgICAgICAgICByZXR1cm4gbV9wZXJHbHlwaEZvbnREYXRhW2lu
ZGV4XTsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBtX2dseXBoc1tpbmRleF07Ci0gICAgICAgIGlm
ICghZ2x5cGgpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fZm9udERh
dGFGb3JBbGxHbHlwaHM7CisgICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF0gPyBtX2ZvbnRE
YXRhRm9yQWxsR2x5cGhzIDogMDsKICAgICB9CiAKICAgICB2b2lkIHNldEdseXBoRGF0YUZvckNo
YXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmKQpAQCAt
MTM4LDI5ICsxMzgsMTMgQEAgcHVibGljOgogICAgICAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlw
aDsKIAogICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3aWxsIGFsd2F5cyByZXR1cm4gYSBu
dWxsIFNpbXBsZUZvbnREYXRhKiBmb3IgZ2x5cGggIzAgaWYgdGhlcmUncyBubyBwZXItZ2x5cGgg
Zm9udCBhcnJheS4KLSAgICAgICAgaWYgKG1fcGVyR2x5cGhGb250RGF0YSkgeworICAgICAgICBp
ZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKSB7CiAgICAgICAgICAgICBtX3BlckdseXBoRm9udERh
dGFbaW5kZXhdID0gZ2x5cGggPyBmb250RGF0YSA6IDA7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIC8vIEEgZ2x5cGggaW5kZXggd2l0aG91dCBhIGZvbnQgZGF0YSBwb2ludGVyIG1ha2Vz
IG5vIHNlbnNlLgotICAgICAgICBBU1NFUlQoZm9udERhdGEpOwotCi0gICAgICAgIGlmICghbV9m
b250RGF0YUZvckFsbEdseXBocykKLSAgICAgICAgICAgIG1fZm9udERhdGFGb3JBbGxHbHlwaHMg
PSBmb250RGF0YTsKLQotICAgICAgICBpZiAobV9mb250RGF0YUZvckFsbEdseXBocyA9PSBmb250
RGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGlzIEdseXBoUGFnZSBo
b3VzZXMgZ2x5cGhzIGZyb20gbXVsdGlwbGUgZm9udHMsIHRyYW5zaXRpb24gdG8gYW4gYXJyYXkg
b2YgU2ltcGxlRm9udERhdGEgcG9pbnRlcnMuCi0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBvbGRGb250RGF0YSA9IG1fZm9udERhdGFGb3JBbGxHbHlwaHM7Ci0gICAgICAgIG1fcGVyR2x5
cGhGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKio+KGZhc3RNYWxs
b2Moc2l6ZSAqIHNpemVvZihTaW1wbGVGb250RGF0YSopKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBtX3BlckdseXBoRm9udERhdGFb
aV0gPSBtX2dseXBoc1tpXSA/IG9sZEZvbnREYXRhIDogMDsKLSAgICAgICAgbV9wZXJHbHlwaEZv
bnREYXRhW2luZGV4XSA9IGZvbnREYXRhOworICAgICAgICAvLyBBIHNpbmdsZS1mb250IEdseXBo
UGFnZSBhbHJlYWR5IGFzc2lnbmVkIG1fZm9udERhdGFGb3JBbGxHbHlwaHMgaW4gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZvbnREYXRhID09IG1fZm9udERhdGFG
b3JBbGxHbHlwaHMpOwogICAgIH0KIAogICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5z
aWduZWQgaW5kZXgsIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhKQpAQCAtMTcwLDEzICsxNTQs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyRm9yRm9udERhdGEoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3BlckdseXBoRm9udERhdGEp
IHsKLSAgICAgICAgICAgIGlmIChtX2ZvbnREYXRhRm9yQWxsR2x5cGhzID09IGZvbnREYXRhKSB7
Ci0gICAgICAgICAgICAgICAgbWVtc2V0KG1fZ2x5cGhzLCAwLCBzaXplb2YobV9nbHlwaHMpKTsK
LSAgICAgICAgICAgICAgICBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzID0gMDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIHN5c3RlbSBmYWxsYmFjayBwYWdlLCB3aGlj
aCBpcyBuZXZlciBzaW5nbGUtZm9udC4KKyAgICAgICAgQVNTRVJUKGhhc1BlckdseXBoRm9udERh
dGEoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICBpZiAobV9wZXJHbHlwaEZvbnREYXRhW2ldID09IGZvbnREYXRhKSB7CiAgICAgICAg
ICAgICAgICAgbV9nbHlwaHNbaV0gPSAwOwpAQCAtMTkxLDIyICsxNzAsMjkgQEAgcHVibGljOgog
ICAgIGJvb2wgZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGNo
YXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0
YSopOwogCiBwcml2YXRlOgotICAgIEdseXBoUGFnZShHbHlwaFBhZ2VUcmVlTm9kZSogb3duZXIs
IGJvb2wgY2xlYXJHbHlwaHMpCi0gICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocygwKQot
ICAgICAgICAsIG1fcGVyR2x5cGhGb250RGF0YSgwKQorICAgIGV4cGxpY2l0IEdseXBoUGFnZShH
bHlwaFBhZ2VUcmVlTm9kZSogb3duZXIsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZv
ckFsbEdseXBocyA9IDApCisgICAgICAgIDogbV9mb250RGF0YUZvckFsbEdseXBocyhmb250RGF0
YUZvckFsbEdseXBocykKICAgICAgICAgLCBtX293bmVyKG93bmVyKQogICAgIHsKLSAgICAgICAg
aWYgKGNsZWFyR2x5cGhzKQotICAgICAgICAgICAgbWVtc2V0KG1fZ2x5cGhzLCAwLCBzaXplb2Yo
bV9nbHlwaHMpKTsKKyAgICAgICAgbWVtc2V0KG1fZ2x5cGhzLCAwLCBzaXplb2YobV9nbHlwaHMp
KTsKKyAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKKyAgICAgICAgICAgIG1lbXNl
dChtX3BlckdseXBoRm9udERhdGEsIDAsIHNpemVvZihTaW1wbGVGb250RGF0YSopICogR2x5cGhQ
YWdlOjpzaXplKTsKICAgICB9CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9mb250RGF0
YUZvckFsbEdseXBoczsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSoqIG1fcGVyR2x5cGhGb250
RGF0YTsKKyAgICBib29sIGhhc1BlckdseXBoRm9udERhdGEoKSBjb25zdCB7IHJldHVybiAhbV9m
b250RGF0YUZvckFsbEdseXBoczsgfQogCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9u
dERhdGFGb3JBbGxHbHlwaHM7CiAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1fb3duZXI7CiAgICAg
R2x5cGggbV9nbHlwaHNbc2l6ZV07CisKKyAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5
cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2ZvbnREYXRhRm9yQWxsR2x5cGhzIGlzIG51bGwu
CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fcGVyR2x5cGhGb250RGF0YVswXTsKIH07CiAK
KyNpZiBDT01QSUxFUihNU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBHbHlwaFBhZ2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCmlu
ZGV4IDdlN2NlN2UuLjliZDQxNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKQEAgLTIwMSwxNSArMjAxLDE3IEBA
IHZvaWQgR2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBm
b250RGF0YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dGhpcyk7Ci0KICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIgZnVsbCBv
ZiBjaGFyYWN0ZXJzLCB3ZSB3YW50IHRvIGdldCBiYWNrIGFuIGFycmF5CiAgICAgICAgICAgICAv
LyBvZiBnbHlwaCBpbmRpY2VzLiAgVGhpcyBwYXJ0IGludm9sdmVzIGNhbGxpbmcgaW50byB0aGUg
cGxhdGZvcm0tc3BlY2lmaWMgCiAgICAgICAgICAgICAvLyByb3V0aW5lIG9mIG91ciBnbHlwaCBt
YXAgZm9yIGFjdHVhbGx5IGZpbGxpbmcgaW4gdGhlIHBhZ2Ugd2l0aCB0aGUgZ2x5cGhzLgogICAg
ICAgICAgICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVz
IGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCiAgICAgICAgICAgICAv
LyBmb3Igb25seSAxMjggb3V0IG9mIDI1NiBjaGFyYWN0ZXJzLgogICAgICAgICAgICAgYm9vbCBo
YXZlR2x5cGhzOwotICAgICAgICAgICAgaWYgKGZvbnREYXRhLT5pc1NlZ21lbnRlZCgpKSB7Cisg
ICAgICAgICAgICBpZiAoIWZvbnREYXRhLT5pc1NlZ21lbnRlZCgpKSB7CisgICAgICAgICAgICAg
ICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5nbGVGb250RGF0YSh0aGlzLCBzdGF0
aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KGZvbnREYXRhKSk7CisgICAgICAgICAgICAg
ICAgaGF2ZUdseXBocyA9IGZpbGwobV9wYWdlLmdldCgpLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoLCBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KGZv
bnREYXRhKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fcGFnZSA9
IEdseXBoUGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSh0aGlzKTsKICAgICAgICAgICAgICAg
ICBoYXZlR2x5cGhzID0gZmFsc2U7CiAKICAgICAgICAgICAgICAgICBjb25zdCBTZWdtZW50ZWRG
b250RGF0YSogc2VnbWVudGVkRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWdtZW50ZWRG
b250RGF0YSo+KGZvbnREYXRhKTsKQEAgLTIyNSw3ICsyMjcsNyBAQCB2b2lkIEdseXBoUGFnZVRy
ZWVOb2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVk
IHBhZ2VOdQogICAgICAgICAgICAgICAgICAgICBpbnQgdG8gPSAxICsgbWluKHN0YXRpY19jYXN0
PGludD4ocmFuZ2UudG8oKSkgLSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXJ0KSwgc3RhdGljX2Nhc3Q8
aW50PihHbHlwaFBhZ2U6OnNpemUpIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmcm9t
IDwgc3RhdGljX2Nhc3Q8aW50PihHbHlwaFBhZ2U6OnNpemUpICYmIHRvID4gMCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhdmVHbHlwaHMgJiYgIXNjcmF0Y2hQYWdlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFBh
Z2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udERhdGEodGhpcyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFnZVRvRmlsbCA9IHNjcmF0Y2hQYWdlLmdldCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDYsOCArMjQ4LDcgQEAgdm9pZCBHbHlwaFBhZ2VU
cmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25l
ZCBwYWdlTnUKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IGhhdmVHbHlwaHMgPSBmaWxsKG1fcGFnZS5nZXQoKSwgMCwgR2x5cGhQYWdlOjpzaXplLCBidWZm
ZXIsIGJ1ZmZlckxlbmd0aCwgc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250
RGF0YSkpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIWhhdmVHbHlwaHMpCiAg
ICAgICAgICAgICAgICAgbV9wYWdlID0gMDsKQEAgLTI3OSw3ICsyODAsNyBAQCB2b2lkIEdseXBo
UGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSogZm9udERhdGEsIHVu
c2lnbmVkIHBhZ2VOdQogICAgICAgICAgICAgICAgIG1fcGFnZSA9IHBhcmVudFBhZ2U7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbWJpbmUgdGhlIHBhcmVudCdz
IGdseXBocyBhbmQgb3VycyB0byBmb3JtIGEgbmV3IG1vcmUgY29tcGxldGUgcGFnZS4KLSAgICAg
ICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodGhpcyk7
CisgICAgICAgICAgICAgICAgbV9wYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRE
YXRhKHRoaXMpOwogCiAgICAgICAgICAgICAgICAgLy8gT3ZlcmxheSB0aGUgcGFyZW50IHBhZ2Ug
b24gdGhlIGZhbGxiYWNrIHBhZ2UuIENoZWNrIGlmIHRoZSBmYWxsYmFjayBmb250CiAgICAgICAg
ICAgICAgICAgLy8gaGFzIGFkZGVkIGFueXRoaW5nLgpAQCAtMzA3LDcgKzMwOCw3IEBAIHZvaWQg
R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YSwgdW5zaWduZWQgcGFnZU51CiAgICAgICAgIGlmIChwYXJlbnRQYWdlKQogICAgICAgICAgICAg
bV9wYWdlID0gcGFyZW50UGFnZS0+Y3JlYXRlQ29waWVkU3lzdGVtRmFsbGJhY2tQYWdlKHRoaXMp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZVpl
cm9lZFN5c3RlbUZhbGxiYWNrUGFnZSh0aGlzKTsKKyAgICAgICAgICAgIG1fcGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlRm9yTWl4ZWRGb250RGF0YSh0aGlzKTsKICAgICB9CiB9CiAK
</data>
<flag name="review"
          id="209945"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>