<?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>20237</bug_id>
          
          <creation_ts>2008-07-30 17:23:55 -0700</creation_ts>
          <short_desc>Zero width and space characters are displayed incorrectly if not contained in a fallback font.</short_desc>
          <delta_ts>2008-09-08 17:36:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brett Wilson (Google)">brettw</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimitri</cc>
    
    <cc>hyatt</cc>
    
    <cc>jshin</cc>
    
    <cc>mitz</cc>
    
    <cc>nickshanks</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>87452</commentid>
    <comment_count>0</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-07-30 17:23:55 -0700</bug_when>
    <thetext>If I have a character like U+200B (non-breaking space) in a document, WebCore will go ask the font system for it. Some fonts include a &quot;glyph&quot; for this character with the correct rendering (nothing) and advance (space). I&apos;m pretty sure the fallback font shipped with Mac/Safari does this and all is well. The same is true for Arial Unicode MS which ships with MS Office on Windows.

However, if these fonts are unavailable, this glyph will not be found in Arial or Times and will be mapped to the 0 glyph (since it doesn&apos;t exist). This glyph is a box in most fonts. You want this behavior for most nonexistant glyphs since if you don&apos;t have a Chinese font installed, you want to see boxes rather than nothing if you visit a Chinese site so you know you&apos;re missing something. For characters that should be treated as space or zero width space, this is not the case.

The same happens for U+200E (LTR marker) and the like. These should be rendered as zero width spaces. When we get mapped to the 0 glyph, it turns into a box.

I think these two classes of characters need to be special cased to work without a pan-Unicode font that includes these characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87453</commentid>
    <comment_count>1</comment_count>
      <attachid>22570</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-07-30 17:24:52 -0700</bug_when>
    <thetext>Created attachment 22570
Test case

This patch shows a ZWSP and LTR characters. If you don&apos;t have Apple&apos;s fallback font or Arial Unicode MS on Windows, then these will be rendered as squares.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87537</commentid>
    <comment_count>2</comment_count>
      <attachid>22591</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-07-31 16:56:27 -0700</bug_when>
    <thetext>Created attachment 22591
Patch

This patch makes boxes for directional markers and nonbreaking spaces disappear when there is no fallback font that supports them. It hardcodes that the width of &quot;zero width space&quot; characters is 0. Platforms will also have to hardcode that the glyph for such characters is the space glyph. I&apos;ve added this to the Windows code.

Mac doesn&apos;t seem to have this problem because the fonts are less crappy. If Mac wanted to implement it, it would be best in wkGetGlyphVectorFirstRecord which looks like isn&apos;t public.

I added a parameter to the glyph width getter so it gets the original character. I also use this for an optimization for Chinese characters which I hope to submit soon; it&apos;s very helpful for the width computation code to actually know what character we&apos;re talking about.

The changes in the Font.h file are to make the zero width space (and a few related chars) actually return true in the treatAsZeroWidthSpace function().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87636</commentid>
    <comment_count>3</comment_count>
      <attachid>22591</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-01 15:33:30 -0700</bug_when>
    <thetext>Comment on attachment 22591
Patch

Hyatt says that mitz is the man to review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87837</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-08-04 23:05:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I added a parameter to the glyph width getter so it gets the original
&gt; character. I also use this for an optimization for Chinese characters which I
&gt; hope to submit soon; it&apos;s very helpful for the width computation code to
&gt; actually know what character we&apos;re talking about.

I am not too happy with the extra work in widthForGlyph, and not particularly happy with breaking the separation between character space and glyph space (what are we going to pass down to that function when we have ligatures and other features that break the 1:1 character:glyph ratio?), and I can think of a different way to address this bug, so I would like to know more about your planned optimization for Chinese.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87960</commentid>
    <comment_count>5</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-08-06 07:42:02 -0700</bug_when>
    <thetext>With our CJK optimization, it looks like this:

SimpleFontData::widthForGlyph(UChar32 c, Glyph glyph) const
{
    bool is_CJK = IsCJKCodePoint(c);
    float width = is_CJK ? m_cjkGlyphWidth : m_glyphToWidthMap.widthForGlyph(glyph);

#ifndef NDEBUG
    // Test our optimization that assuming all CGK glyphs have the same width
    if (is_CJK) {
        const float actual_width = platformWidthForGlyph(glyph);
        ASSERT((cGlyphWidthUnknown == width) || (actual_width == width));
    }
#endif

    if (c &gt; &apos; &apos; &amp;&amp; Font::treatAsZeroWidthSpace(c))
        return 0.0f;

    if (width != cGlyphWidthUnknown)
        return width;

    width = platformWidthForGlyph(glyph);

    if (is_CJK) {
        m_cjkGlyphWidth = width;
    } else {
        m_glyphToWidthMap.setWidthForGlyph(glyph, width);
    }
    
    return width;
}

So basically, this caches the widths of the first CJK character seen in a font, and uses that for all subsequent ones. If I recall correctly, this, along with making the widths 16-bit fixed point, saves us ~150MB for a page cycler run with a lot of different CJK pages in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88000</commentid>
    <comment_count>6</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2008-08-06 15:53:09 -0700</bug_when>
    <thetext>There are a whole bunch of characters to fall into &apos;zero-width&apos; category. 
It might be better to use | u_hasBinaryProperty(c, UCHAR_DEFAULT_IGNORABLE_CODE_POINT) |  ( http://www.icu-project.org/apiref/icu4c/uchar_8h.html#25c5c820d4141e4099acc15ca83572a5 ).

Firefox does not use the set (as it is) but defines its own (derived from the default ignorable). 

Some characters with default ignorable property cannot be ignored but as long as they&apos;re in &apos;simple script&apos; code path, I think it&apos;s ok. 


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88079</commentid>
    <comment_count>7</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2008-08-07 17:01:15 -0700</bug_when>
    <thetext>mitz: Can you comment on the overall approach. I&apos;ll try to come up with better patch using Jungshik&apos;s suggestions, but I would like to know how best to integrate the new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88404</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-08-13 09:46:58 -0700</bug_when>
    <thetext>I think it would be best to keep character-to-glyph mapping separate from glyph-to-width mapping, and I think the goals of your changes could be achieved by creating separate FontData objects, such as one that has a zero-width invisible glyph (the underlying platform font can be any font with a space glyph; the width map changed to give it zero width) which could be used for characters that should render as zero-width space; and such as one that shares the same underlying platform font with another FontData, has a &apos;monospace&apos; bit set, has no width map, which could be used for all CJK characters in the font.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88896</commentid>
    <comment_count>9</comment_count>
      <attachid>22591</attachid>
    <who name="">mitz</who>
    <bug_when>2008-08-19 22:34:50 -0700</bug_when>
    <thetext>Comment on attachment 22591
Patch

r- to remove this from the queue while you consider my comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89403</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov">dimitri</who>
    <bug_when>2008-08-26 11:24:20 -0700</bug_when>
    <thetext>... trying to figure out how this will work. So, in your view, these FontData instances be would be sub-classes of SimpleFontData (say, ZeroWidthFontData and CJKFontData), each offering a different widthForGlyph implementation?

Then, in GlyphPage::fill, we supply either an instance of SimpleFontData (for most chars), ZeroWidthFontData (for ZWS and alike), or CJKFontData (for CJK chars).

WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89952</commentid>
    <comment_count>11</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-02 16:31:08 -0700</bug_when>
    <thetext>I think subclassing and making widthForGlyph() virtual might be bad for performance, but if you have a patch that does that I can try and measure it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90179</commentid>
    <comment_count>12</comment_count>
      <attachid>23174</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-09-04 12:43:47 -0700</bug_when>
    <thetext>Created attachment 23174
Updated Patch

As discussed on #webkit w/mitz, here&apos;s an updated patch. There are opportunities for optimization, but I thought I&apos;d first get the basics right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90278</commentid>
    <comment_count>13</comment_count>
      <attachid>23174</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-05 10:06:04 -0700</bug_when>
    <thetext>Comment on attachment 23174
Updated Patch

+// static
Why is this here?

I think this patch tries to do too many things at once.  This bug is related to the display of zero width characters, and thus, the patch should try and address only that issue.  Please file another bug about the potential CJK optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90280</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-05 10:10:52 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 23174 [edit])
&gt; +// static
&gt; Why is this here?

it seems to be part of the Google C++ Style guidelines (thus what most Google engineers are familiar with).  I don&apos;t see it listed in the external c++ style guidelines though.  It will take a while for many of us to learn the differences between WebKit/Google style. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90288</commentid>
    <comment_count>15</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-09-05 11:31:52 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (From update of attachment 23174 [edit] [edit])
&gt; &gt; +// static
&gt; &gt; Why is this here?
&gt; 
&gt; it seems to be part of the Google C++ Style guidelines (thus what most Google
&gt; engineers are familiar with).  I don&apos;t see it listed in the external c++ style
&gt; guidelines though.  It will take a while for many of us to learn the
&gt; differences between WebKit/Google style. :)

Yes, I&apos;ve been kinda sorta trying to merge both styles. I will split up CJK opt and resubmit.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90301</commentid>
    <comment_count>16</comment_count>
      <attachid>23200</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-09-05 14:18:46 -0700</bug_when>
    <thetext>Created attachment 23200
Updated: ZWS fix only

Removed CJK optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90375</commentid>
    <comment_count>17</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-06 14:42:20 -0700</bug_when>
    <thetext>I am confused. From the initial description of the bug it sounded as if this is only a problem in the system fallback case, so I expected the substitution to happen only in the end of Font::glyphDataForCharacter(). What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90389</commentid>
    <comment_count>18</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-07 00:02:02 -0700</bug_when>
    <thetext>The more I look at the bug description, and the more testing I do in Safari on Windows, the less I understand how this bug works, even in the system fallback case.

The only exception is U+FFFC (OBJECT REPLACEMENT CHARACTER) which is not treatAsZeroWidthSpace(), even though it is ZWS-ed out in GlyphPageTreeNode::initializePage. In all other cases, I expect a missing glyph (square) to be rendered only if no font on the system has a glyph for ZWS. As far as I can tell, Times New Roman, plain ol&apos; Arial, and other fonts on Windows have correct glyphs for ZWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90558</commentid>
    <comment_count>19</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-09-08 10:35:52 -0700</bug_when>
    <thetext>Well, I dug some more, using a pristine (font-wise) XP install and here&apos;s what happens for the ZWS chars for a standard Win font, using Times New Roman as an example.

wkGetGlyphs returns 0 for the 0x200B char, so the glyph doesn&apos;t exist in the font, but FontCache::getFontDataForCharacters is able to scare up the glyph using font-linking (the glyph is borrowed from Lucida Sans Unicode).

In the case of 0xFFFC, the same path is followed, except no glyph is found using font-linking, so we fall back into Uniscribe, drawing the string into a metafile. Unlucky for us, this succeeds with (woot!) &quot;Times New Roman&quot;, which brings back the original font, which in turn draws a square in place of the character.

So, the proposed patch, IMHO (I am not a fonts expert, please correct me if I am wrong) eliminates the need to dip into the IMLang linking business and avoids creating metafile objects for drawing the ORC char.

I don&apos;t have a strong opinion about moving the SimpleFontData substitution logic to Font::glyphDataForCharacter. My thinking was to initialize the FontCache with the substituted objects to begin with, so that there&apos;s no additional checking while drawing each character.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90568</commentid>
    <comment_count>20</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-08 11:44:06 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; In the case of 0xFFFC, the same path is followed, except no glyph is found
&gt; using font-linking [...]

But we should never be asking for a glyph for U+FFFC. We should -- and we currently don&apos;t -- ask for a glyph for zero-width space instead. The reason we don&apos;t is that even though GlyphPageTreeNode::initializePage() is aware of this substitution, Font::treatAsZeroWidthSpace() is not, and the latter is what&apos;s used in the &quot;system fallback&quot; case near the end of glyphDataForCharacter(). Just adding U+FFFC to treatAsZeroWidthSpace() OR would make the problem go away, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90587</commentid>
    <comment_count>21</comment_count>
      <attachid>23276</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-09-08 15:25:59 -0700</bug_when>
    <thetext>Created attachment 23276
With just the 0xFFFC check

Shedding another pound of code after healthy mitzpettel&apos;s workout. This patch leaves finding ZWS glyphs up to IMLang font-linking, instead of using a separate FontData instance.

So, the only change is making Font:treatAsZeroWidthSpace(c) react to 0xFFFC properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90590</commentid>
    <comment_count>22</comment_count>
      <attachid>23276</attachid>
    <who name="">mitz</who>
    <bug_when>2008-09-08 16:03:57 -0700</bug_when>
    <thetext>Comment on attachment 23276
With just the 0xFFFC check

+        Adds an extra check for Object Replacement Character (0xFFFF) to address

Typo: should say FFFC.

Unfortunately, a layout test does not seem possible because our test configurations have ZWS mapped to a glyph even in non-fallback fonts, so assuming no existing layout tests break, r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90609</commentid>
    <comment_count>23</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-08 17:36:07 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/36276&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22570</attachid>
            <date>2008-07-30 17:24:52 -0700</date>
            <delta_ts>2008-07-30 17:24:52 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>ltr.html</filename>
            <type>text/html</type>
            <size>41</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">YiYjeDIwMEI7YiAtIFpXU1A8YnI+DQphJiN4MjAwRTthIC0gTFRSDQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22591</attachid>
            <date>2008-07-31 16:56:27 -0700</date>
            <delta_ts>2008-08-19 22:34:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>zwsp.diff</filename>
            <type>text/plain</type>
            <size>10666</size>
            <attacher name="Brett Wilson (Google)">brettw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTUwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDgtMDctMzEgIE1hcnZpbiBEZWNrZXIgIDxtYXJ2LmRlY2tlckBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdDogZmFzdC90ZXh0L3plcm8td2lkdGgtc3BhY2UuaHRtbAorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dHJlYXRBc1pl
cm9XaWR0aFNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6d2lkdGhGb3JHbHlwaCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9X
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxsKToKKwogMjAwOC0wNy0z
MSAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJDb3Jl
IHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzYxMTY2NTA+IFRleHQtb25seSB6b29tIHNldHRpbmcg
c2hvdWxkIGJlIHN0b3JlZCBpbiBXZWJLaXQgcHJlZnMKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmNwcAkocmV2aXNpb24gMzU1MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBXaWR0aEl0
ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIAogICAgICAgICAgICAgZmxvYXQgdGFiV2lkdGgg
PSBtX2ZvbnQtPnRhYldpZHRoKCk7CiAgICAgICAgICAgICB3aWR0aCA9IHRhYldpZHRoIC0gZm1v
ZGYobV9ydW4ueFBvcygpICsgcnVuV2lkdGhTb0ZhciwgdGFiV2lkdGgpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgd2lkdGggPSBmb250RGF0YS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7
CisgICAgICAgICAgICB3aWR0aCA9IGZvbnREYXRhLT53aWR0aEZvckdseXBoKGMsIGdseXBoKTsK
ICAgICAgICAgICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBzcGFjZXMgaW4gdHdvIHdheXMgd2hlbiBh
cHBseWluZyB3b3JkIHJvdW5kaW5nLgogICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHJvdW5kIHNw
YWNlcyB0byBhbiBhZGp1c3RlZCB3aWR0aCBpbiBhbGwgZm9udHMuCiAgICAgICAgICAgICAvLyBT
ZWNvbmQsIGluIGZpeGVkLXBpdGNoIGZvbnRzIHdlIGVuc3VyZSB0aGF0IGFsbCBjaGFyYWN0ZXJz
IHRoYXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAzNTUwMikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUs
NyArMTc1LDcgQEAgcHVibGljOgogICAgIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29u
c3Q7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCB0cmVhdEFzU3BhY2UoVUNoYXIgYykgeyByZXR1
cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09IDB4MDBBMDsgfQot
ICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiBj
IDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IDB4MjAwZSB8fCBjID09
IDB4MjAwZiB8fCBjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZTsgfQorICAgIHN0YXRpYyBib29s
IHRyZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAoYyA+
PSAweDdGICYmIGMgPCAweEEwKSB8fCAgKGMgPj0gMHgyMDBiICYmIGMgPD0gMHgyMDBmKSB8fCAo
YyA+PSAweDIwMmEgJiYgYyA8PSAweDIwMmUpOyB9CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQog
ICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gMzU1MDIpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCiAKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaWYgRU5B
QkxFKFNWR19GT05UUykKICNpbmNsdWRlICJTVkdGb250RGF0YS5oIgpAQCAtOTIsNyArOTMsNyBA
QCBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3QgRm9uCiAgICAgLy8gSWYgdGhl
IGZvbnQgaXMgbW9ub3NwYWNlIG9yIGZha2UgbW9ub3NwYWNlIHdlIGNlaWwgdG8gZW5zdXJlIHRo
YXQgCiAgICAgLy8gZXZlcnkgY2hhcmFjdGVyIGFuZCB0aGUgc3BhY2UgYXJlIHRoZSBzYW1lIHdp
ZHRoLiAgT3RoZXJ3aXNlIHdlIHJvdW5kLgogICAgIG1fc3BhY2VHbHlwaCA9IGdseXBoUGFnZVpl
cm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmdseXBoOwotICAgIGZsb2F0IHdpZHRoID0g
d2lkdGhGb3JHbHlwaChtX3NwYWNlR2x5cGgpOworICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGb3JH
bHlwaCgnICcsIG1fc3BhY2VHbHlwaCk7CiAgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7CiAgICAg
ZGV0ZXJtaW5lUGl0Y2goKTsKICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0Zp
eGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwpAQCAtMTI4LDggKzEyOSwx
OCBAQCBTaW1wbGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRhKCkKICAgICAgICAgcGxhdGZvcm1E
ZXN0cm95KCk7CiB9CiAKLWZsb2F0IFNpbXBsZUZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAorZmxvYXQgU2ltcGxlRm9udERhdGE6OndpZHRoRm9yR2x5cGgoVUNoYXIz
MiBjb3JyZXNwb25kaW5nQ2hhciwgR2x5cGggZ2x5cGgpIGNvbnN0CiB7CisgICAgLy8gU29tZSBj
aGFyYWN0ZXJzIHNob3VsZCBiZSB6ZXJvIHdpZHRoIGFuZCB3ZSB3YW50IHRvIGlnbm9yZSB3aGF0
ZXZlcgorICAgIC8vIGNyYXp5IHN0dWZmIHRoZSBmb250IG1heSBoYXZlIChvciBub3QgZGVmaW5l
ZCkuIElmIHRoZSBmb250IGRvZXNuJ3QKKyAgICAvLyBkZWZpbmUgaXQsIHdlIGRvbid0IHdhbnQg
dG8gbWVhc3VyZSB0aGUgd2lkdGggb2YgdGhlICJpbnZhbGlkIGNoYXJhY3RlciIKKyAgICAvLyBi
b3gsIGZvciBleGFtcGxlLgorICAgIC8vCisgICAgLy8gV2UgZXhwbGljaXRseSBkb24ndCB3YW50
IHRvIGhhbmRsZSBjb250cm9sIGNoYXJhY3RlcnMgdGhpcyB3YXksIHNpbmNlCisgICAgLy8gd2Ug
d2FudCB0byB1c2UgdGhlIHJlZ3VsYXIgT1MgZHJhd2luZyBmb3IgdGhlbS4KKyAgICBpZiAoY29y
cmVzcG9uZGluZ0NoYXIgPiAnICcgJiYgRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGNvcnJl
c3BvbmRpbmdDaGFyKSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKICAgICBmbG9hdCB3aWR0aCA9
IG1fZ2x5cGhUb1dpZHRoTWFwLndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogICAgIGlmICh3aWR0aCAh
PSBjR2x5cGhXaWR0aFVua25vd24pCiAgICAgICAgIHJldHVybiB3aWR0aDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHJldmlzaW9uIDM1NTAyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCB4SGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV94SGVpZ2h0OyB9CiAgICAgdW5zaWduZWQgdW5pdHNQZXJFbSgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5pdHNQZXJFbTsgfQogCi0gICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkg
Y29uc3Q7CisgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChVQ2hhcjMyIGNvcnJlc3BvbmRpbmdDaGFy
LCBHbHlwaCkgY29uc3Q7CiAgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAJKHJldmlz
aW9uIDM1NTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJl
ZU5vZGVDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCisjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTUzLDkgKzU0LDIzIEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9m
ZnNldCwgdW4KICAgICBEV09SRCByZXN1bHQgPSBHZXRHbHlwaEluZGljZXMoZGMsIGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBsb2NhbEdseXBoQnVmZmVyLCAwKTsKICAgICBib29sIHN1Y2Nlc3MgPSBy
ZXN1bHQgIT0gR0RJX0VSUk9SICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpID09IGJ1
ZmZlckxlbmd0aDsKICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICBXT1JEIHNwYWNlR2x5cGgg
PSAwOyAgLy8gR2x5cGggZm9yIGEgc3BhY2UuIExhemlseSBmaWxsZWQsIHNlZSBiZWxvdy4KICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAvLyBXaGVuIHRoaXMgY2hhcmFjdGVyIHNob3VsZCBiZSBhIHNwYWNlLCB3ZSBpZ25vcmUgd2hh
dGV2ZXIgdGhlCisgICAgICAgICAgICAvLyBmb250IHNheXMgYW5kIHVzZSBhIHNwYWNlLiBPdGhl
cndpc2UsIGlmIHRoZSBmb250cyBkb24ndCBtYXAgb25lCisgICAgICAgICAgICAvLyBvZiB0aGVz
ZSBzcGFjZSBvciB6ZXJvIHdpZHRoIGdseXBocywgd2Ugd2lsbCBnZXQgYSBib3guCiAgICAgICAg
ICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07Ci0gICAgICAgICAgICBpZiAo
IWdseXBoKQorICAgICAgICAgICAgaWYgKGMgPiAnICcgJiYKKyAgICAgICAgICAgICAgICAoRm9u
dDo6dHJlYXRBc1NwYWNlKGJ1ZmZlcltpXSkgfHwKKyAgICAgICAgICAgICAgICAgRm9udDo6dHJl
YXRBc1plcm9XaWR0aFNwYWNlKGJ1ZmZlcltpXSkpKSB7CisgICAgICAgICAgICAgICAgLy8gSGFy
ZCBjb2RlIHRoZSBnbHlwaCBpbmRpY2VzIGZvciBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIGJlCisg
ICAgICAgICAgICAgICAgLy8gdHJlYXRlZCBsaWtlIHNwYWNlcy4KKyAgICAgICAgICAgICAgICBp
ZiAoIXNwYWNlR2x5cGgpIHsKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgc3BhY2UgPSAnICc7
CisgICAgICAgICAgICAgICAgICAgIEdldEdseXBoSW5kaWNlcyhkYywgJnNwYWNlLCAmc3BhY2VH
bHlwaCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIGksIHNwYWNlR2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWdseXBoKQogICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KG9mZnNldCArIGksIDAsIDApOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDM1NTAyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDgtMDctMzEgIE1hcnZpbiBEZWNrZXIgIDxtYXJ2LmRl
Y2tlckBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBDaGFuZ2VMb2c6CisgICAgICAgICogZmFzdC90ZXh0L3plcm8td2lkdGgtc3Bh
Y2UuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC96ZXJvLXdp
ZHRoLXNwYWNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMDgtMDctMzEgIERhdmlkIEQuIEtp
bHplciAgPGRka2lsemVyQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGxheW91dCB0ZXN0IHJl
c3VsdHMgZm9yIHdlYmFyY2hpdmUvdGVzdC14bWwtc3R5bGVzaGVldC54bWwKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLXNwYWNlLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC90ZXh0L3plcm8td2lkdGgtc3BhY2UuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLXNwYWNlLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjMgQEAKKzxodG1sPjxoZWFkPgorPC9oZWFkPjxib2R5PgorPHA+VGVzdHMg
dGhhdCBzcGFjZXMgYXJlIHNwYWNlcywgYW5kIHplcm8gd2lkdGggc3BhY2VzIChhbmQgc2ltaWxh
ciBjb250cm9sCitjaGFyYWN0ZXJzKSBhcmUgcHJpbnRlZCBhcyBub3RoaW5nLiBUaGlzIHdpbGwg
Z2VuZXJhbGx5IHBhc3MgaWYgeW91IGhhdmUgYSBnb29kCitmYWxsYmFjayBmb250IG9uIHlvdXIg
c3lzdGVtIG5vIG1hdHRlciB3aGF0IChiZWNhdXNlIGl0IHdpbGwgZGVmaW5lIHRoZXNlCitjaGFy
YWN0ZXJzKSwgYnV0IG1heSBmYWlsIG9uIHNvbWUgcGxhdGZvcm1zIHdpdGggc29tZSBmb250cyBp
ZiB0aGV5IGRvbid0CitoYW5kbGUgdGhlc2Ugc3BlY2lhbCBjYXNlcyBwcm9wZXJseS4gPGEgaHJl
Zj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9MjI1NzAiPkJ1ZyAy
MjU3MDwvYT4uPC9wPgorCis8cD5UaGVzZSBzaG91bGQgYmUgbm8gc3BhY2VzIG9yIGJveGVzIGlu
IGFueSBvZiB0aGVzZSBsaW5lczo8L3A+CisKKzx1bD4KKzxsaT56dyYjeDIwMEI7c3A8L2xpPgor
PGxpPmwmI3gyMDBFO3RyPC9saT4KKzwvdWw+CisKKzxwPlRoZXNlIGxpbmVzIHNob3VsZCBsb29r
IGlkZW50aWNhbDo8L3A+CisKKzx1bD4KKzxsaT5oZWxsbyB3b3JsZDwvbGk+Cis8bGk+aGVsbG8m
I3hBMDt3b3JsZDwvbGk+Cis8L3VsPgorCis8L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLXNwYWNlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC90ZXh0L3plcm8td2lk
dGgtc3BhY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2Zhc3QvdGV4dC96ZXJvLXdpZHRoLXNwYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzOSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRl
clZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJv
ZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU3NgorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0
ICgwLDApIHNpemUgNzg0eDU0CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDc4NHg1NAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDc4NDogIlRlc3Rz
IHRoYXQgc3BhY2VzIGFyZSBzcGFjZXMsIGFuZCB6ZXJvIHdpZHRoIHNwYWNlcyAoYW5kIHNpbWls
YXIgY29udHJvbCBjaGFyYWN0ZXJzKSBhcmUgcHJpbnRlZCBhcyBub3RoaW5nLiBUaGlzIHdpbGwg
Z2VuZXJhbGx5IgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0aCA3ODM6ICJwYXNz
IGlmIHlvdSBoYXZlIGEgZ29vZCBmYWxsYmFjayBmb250IG9uIHlvdXIgc3lzdGVtIG5vIG1hdHRl
ciB3aGF0IChiZWNhdXNlIGl0IHdpbGwgZGVmaW5lIHRoZXNlIGNoYXJhY3RlcnMpLCBidXQgbWF5
IGZhaWwgb24iCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRoIDUxMDogInNvbWUg
cGxhdGZvcm1zIHdpdGggc29tZSBmb250cyBpZiB0aGV5IGRvbid0IGhhbmRsZSB0aGVzZSBzcGVj
aWFsIGNhc2VzIHByb3Blcmx5LiAiCisgICAgICAgIFJlbmRlcklubGluZSB7QX0gYXQgKDAsMCkg
c2l6ZSA3MXgxOCBbY29sb3I9IzAwMDBFRV0KKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDUxMCwzNikgc2l6ZSA3MXgxOAorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDUxMCwzNikg
d2lkdGggNzE6ICJCdWcgMjI1NzAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNTgx
LDM2KSBzaXplIDR4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNTgxLDM2KSB3aWR0aCA0OiAi
LiIKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw3MCkgc2l6ZSA3ODR4MTgKKyAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzU5eDE4CisgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMzU5OiAiVGhlc2Ugc2hvdWxkIGJlIG5vIHNwYWNlcyBvciBib3hl
cyBpbiBhbnkgb2YgdGhlc2UgbGluZXM6IgorICAgICAgUmVuZGVyQmxvY2sge1VMfSBhdCAoMCwx
MDQpIHNpemUgNzg0eDM2CisgICAgICAgIFJlbmRlckxpc3RJdGVtIHtMSX0gYXQgKDQwLDApIHNp
emUgNzQ0eDE4CisgICAgICAgICAgUmVuZGVyTGlzdE1hcmtlciBhdCAoLTE3LDApIHNpemUgN3gx
ODogYnVsbGV0CisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzN4
MTgKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMzOiAiendceHsyMDBCfXNw
IgorICAgICAgICBSZW5kZXJMaXN0SXRlbSB7TEl9IGF0ICg0MCwxOCkgc2l6ZSA3NDR4MTgKKyAg
ICAgICAgICBSZW5kZXJMaXN0TWFya2VyIGF0ICgtMTcsMCkgc2l6ZSA3eDE4OiBidWxsZXQKKyAg
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAxM3gxOAorICAgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTM6ICJsXHh7MjAwRX10ciIKKyAgICAgIFJlbmRl
ckJsb2NrIHtQfSBhdCAoMCwxNTYpIHNpemUgNzg0eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDIxMHgxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDIxMDogIlRoZXNlIGxpbmVzIHNob3VsZCBsb29rIGlkZW50aWNhbDoiCisgICAgICBSZW5k
ZXJCbG9jayB7VUx9IGF0ICgwLDE5MCkgc2l6ZSA3ODR4MzYKKyAgICAgICAgUmVuZGVyTGlzdEl0
ZW0ge0xJfSBhdCAoNDAsMCkgc2l6ZSA3NDR4MTgKKyAgICAgICAgICBSZW5kZXJMaXN0TWFya2Vy
IGF0ICgtMTcsMCkgc2l6ZSA3eDE4OiBidWxsZXQKKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDAsMCkgc2l6ZSA3MngxOAorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggNzI6ICJoZWxsbyB3b3JsZCIKKyAgICAgICAgUmVuZGVyTGlzdEl0ZW0ge0xJfSBhdCAoNDAs
MTgpIHNpemUgNzQ0eDE4CisgICAgICAgICAgUmVuZGVyTGlzdE1hcmtlciBhdCAoLTE3LDApIHNp
emUgN3gxODogYnVsbGV0CisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNp
emUgNzJ4MTgKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDcyOiAiaGVsbG8g
d29ybGQiCg==
</data>
<flag name="review"
          id="9984"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23174</attachid>
            <date>2008-09-04 12:43:47 -0700</date>
            <delta_ts>2008-09-05 14:18:46 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>20237-2.patch</filename>
            <type>text/plain</type>
            <size>11556</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjA5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDgtMDktMDQgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAKKyAgICAgICAgRml4ZXMgYSBsYXlvdXQgdGVzdCAoZmFzdC90ZXh0L3plcm8td2lkdGgtY2hh
cmFjdGVycy5odG1sKSBhbmQgYWRkcmVzc2VzCisgICAgICAgIG1pdHogY29tbWVudHMgaW4gcmVz
cG9uc2UgdG8gb3JpZ2luYWwgcGF0Y2ggZm9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIzNworCisgICAgICAgIFRoaXMgY2hhbmdlIGJyaW5ncyBo
YW5kbGluZyBvZiB0aGUgWldTIGFuZCBDSksgY2hhcmFjdGVyIHdpZHRocyBkb3duIHRvCisgICAg
ICAgIHRoZSBsZXZlbCBvZiBTaW1wbGVGb250RGF0YSBieSBjcmVhdGluZyBzcGVjaWFsIChzdWIt
Y2xhc3NlZCkKKyAgICAgICAgU2ltcGxlRm9udERhdGEgb2JqZWN0cyB0aGF0IGFyZSB1c2VkIGlu
IEdseXBoRGF0YS4gVGhlc2UgaW5zdGFuY2VzIGFyZQorICAgICAgICBjcmVhdGVkIHdoZW4gdGhl
IGdseXBoIGNhY2hlIGlzIGJlaW5nIGZpbGxlZCAoR2x5cGhQYWdlOjpmaWxsKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
aXNDSktDb2RlUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6Onplcm9XaWR0aEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjpjamtXaWR0aEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Olpl
cm9XaWR0aEZvbnREYXRhOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNKS1dpZHRoRm9udERh
dGE6OkNKS1dpZHRoRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q0pLV2lkdGhGb250RGF0
YTo6d2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Olplcm9XaWR0aEZvbnREYXRhOjp3aWR0aEZvckds
eXBoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
R1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgorCiAyMDA4LTA5
LTA0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0
YW1wZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAko
cmV2aXNpb24gMzYwOTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKICNpZiBVU0UoSUNVX1VOSUNPREUpCiAj
aW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXNjcmlwdC5oPgog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC04MzYsNCArODM3LDE3IEBAIEZvbnRT
ZWxlY3RvciogRm9udDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9mb250TGlz
dCA/IG1fZm9udExpc3QtPmZvbnRTZWxlY3RvcigpIDogMDsKIH0KIAorLy8gc3RhdGljCitib29s
IEZvbnQ6OmlzQ0pLQ29kZVBvaW50KFVDaGFyMzIgYykKK3sKKyAgICAvLyBBQzAwLi5EN0FGOyBI
YW5ndWwgU3lsbGFibGVzCisgICAgaWYgKCgweEFDMDAgPD0gYykgJiYgKGMgPD0gMHhEN0FGKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBDSksgaWRlb2dyYXBocworICAgIFVFcnJv
ckNvZGUgZXJyb3JDb2RlID0gVV9aRVJPX0VSUk9SOyAgLy8gaGFzIHRvIGJlIGluaXRpYWxpemVk
LgorICAgIHJldHVybiB1c2NyaXB0X2dldFNjcmlwdChjLCAmZXJyb3JDb2RlKSA9PSBVU0NSSVBU
X0hBTiAmJgorICAgICAgICBVX1NVQ0NFU1MoZXJyb3JDb2RlKTsKK30KKwogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDM2MDk2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCB0cmVhdEFzU3BhY2UoVUNoYXIgYykgeyByZXR1
cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09IDB4MDBBMDsgfQog
ICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiBj
IDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IDB4MjAwZSB8fCBjID09
IDB4MjAwZiB8fCBjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZTsgfQorICAgIHN0YXRpYyBib29s
IGlzQ0pLQ29kZVBvaW50KFVDaGFyMzIpOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBi
b29sIGlzU1ZHRm9udCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHAJKHJldmlzaW9uIDM2MDk2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5
LDggQEAgU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbgogICAgICwgbV9p
c0N1c3RvbUZvbnQoY3VzdG9tRm9udCkKICAgICAsIG1faXNMb2FkaW5nKGxvYWRpbmcpCiAgICAg
LCBtX3NtYWxsQ2Fwc0ZvbnREYXRhKDApCisgICAgLCBtX3plcm9XaWR0aEZvbnREYXRhKG5ldyBa
ZXJvV2lkdGhGb250RGF0YSgpKQorICAgICwgbV9jamtXaWR0aEZvbnREYXRhKG5ldyBDSktXaWR0
aEZvbnREYXRhKCkpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykgJiYgIVBMQVRGT1JNKFFUKQog
ICAgIGlmIChTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCA9IHN2Z0ZvbnRE
YXRhID8gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpIDogMCkgewpAQCAtNzAsNiAr
NzIsOCBAQCBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3QgRm9uCiAgICAgICAg
IGRldGVybWluZVBpdGNoKCk7CiAgICAgICAgIG1fbWlzc2luZ0dseXBoRGF0YS5mb250RGF0YSA9
IHRoaXM7CiAgICAgICAgIG1fbWlzc2luZ0dseXBoRGF0YS5nbHlwaCA9IDA7CisgICAgICAgIG1f
emVyb1dpZHRoRm9udERhdGEtPmluaXQodGhpcyk7CisgICAgICAgIG1fY2prV2lkdGhGb250RGF0
YS0+aW5pdCh0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtODUsNiAr
ODksOCBAQCBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3QgRm9uCiAgICAgICAg
IGRldGVybWluZVBpdGNoKCk7CiAgICAgICAgIG1fbWlzc2luZ0dseXBoRGF0YS5mb250RGF0YSA9
IHRoaXM7CiAgICAgICAgIG1fbWlzc2luZ0dseXBoRGF0YS5nbHlwaCA9IDA7CisgICAgICAgIG1f
emVyb1dpZHRoRm9udERhdGEtPmluaXQodGhpcyk7CisgICAgICAgIG1fY2prV2lkdGhGb250RGF0
YS0+aW5pdCh0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTcsNiArMTAzLDEz
IEBAIFNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb24KICAgICBkZXRlcm1p
bmVQaXRjaCgpOwogICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gbV90cmVhdEFzRml4ZWRQaXRj
aCA/IGNlaWxmKHdpZHRoKSA6IHJvdW5kZih3aWR0aCk7CiAKKyAgICAvLyBGSVhNRTogSW52ZXN0
aWdhdGUgYW5kIGltcGxlbWVudCBhY3Jvc3MgcGxhdGZvcm1zLCBpZiBuZWVkZWQKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgLy8gWkVSTyBXSURUSCBTUEFDRVMgYXJlIGV4cGxpY2l0bHkgbWFwcGVk
IHRvIHNoYXJlIHRoZSBnbHlwaAorICAgIC8vIHdpdGggU1BBQ0UgKHdpdGggd2lkdGggYWRqdXN0
ZWQgdG8gMCkgZHVyaW5nIEdseXBoUGFnZTo6ZmlsbAorICAgIC8vIFRoaXMgaXMgY3VycmVudGx5
IG9ubHkgaW1wbGVtZW50ZWQgZm9yIFdpbmRvd3MgcG9ydC4gVGhlIEZvbnREYXRhCisgICAgLy8g
cmVtYXBwaW5nIG1heSB2ZXJ5IHdlbGwgYmUgbmVlZGVkIGZvciBvdGhlciBwbGF0Zm9ybXMuCisj
ZWxzZQogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3IgWkVSTyBXSURUSCBTUEFDRSB0byBoYXZl
IHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQgd2l0aCBTUEFDRS4KICAgICAvLyBIZWx2
ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJvIHdpZHRoIFpFUk8gV0lEVEggU1BBQ0Ug
Z2x5cGguCiAgICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzE3OD4KQEAgLTEwOSw5ICsxMjIsMjMgQEAgU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnRE
YXRhKGNvbnN0IEZvbgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBMT0dfRVJST1IoIkZvbnQg
bWFwcyBTUEFDRSBhbmQgWkVSTyBXSURUSCBTUEFDRSB0byB0aGUgc2FtZSBnbHlwaC4gR2x5cGgg
d2lkdGggbm90IG92ZXJyaWRkZW4uIik7CiAgICAgfQorI2VuZGlmCiAKICAgICBtX21pc3NpbmdH
bHlwaERhdGEuZm9udERhdGEgPSB0aGlzOwogICAgIG1fbWlzc2luZ0dseXBoRGF0YS5nbHlwaCA9
IDA7CisgICAgbV96ZXJvV2lkdGhGb250RGF0YS0+aW5pdCh0aGlzKTsKKyAgICBtX2Nqa1dpZHRo
Rm9udERhdGEtPmluaXQodGhpcyk7Cit9CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0
YSgpCisgICAgOiBtX3RyZWF0QXNGaXhlZFBpdGNoKGZhbHNlKQorI2lmIEVOQUJMRShTVkdfRk9O
VFMpCisgICAgLCBtX3N2Z0ZvbnREYXRhKDApCisjZW5kaWYKKyAgICAsIG1faXNDdXN0b21Gb250
KDApCisgICAgLCBtX2lzTG9hZGluZygwKQorICAgICwgbV9zbWFsbENhcHNGb250RGF0YSgwKQor
ewogfQogCiBTaW1wbGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRhKCkKQEAgLTE1MCw0ICsxNzcs
NTcgQEAgYm9vbCBTaW1wbGVGb250RGF0YTo6aXNTZWdtZW50ZWQoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorY29uc3QgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjp6ZXJv
V2lkdGhGb250RGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1femVyb1dpZHRoRm9udERhdGEu
Z2V0KCk7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6Y2prV2lk
dGhGb250RGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2prV2lkdGhGb250RGF0YS5nZXQo
KTsKK30KKwordm9pZCBaZXJvV2lkdGhGb250RGF0YTo6aW5pdChTaW1wbGVGb250RGF0YSogZm9u
dERhdGEpCit7CisgICAgbV9mb250ID0gZm9udERhdGEtPm1fZm9udDsKKyAgICBtX3NtYWxsQ2Fw
c0ZvbnREYXRhID0gZm9udERhdGEtPm1fc21hbGxDYXBzRm9udERhdGE7CisgICAgbV9hc2NlbnQg
PSBmb250RGF0YS0+bV9hc2NlbnQ7CisgICAgbV9kZXNjZW50ID0gZm9udERhdGEtPm1fZGVzY2Vu
dDsKKyAgICBtX2xpbmVTcGFjaW5nID0gZm9udERhdGEtPm1fbGluZVNwYWNpbmc7CisgICAgbV9s
aW5lR2FwID0gZm9udERhdGEtPm1fbGluZUdhcDsKKyAgICBtX3hIZWlnaHQgPSBmb250RGF0YS0+
bV94SGVpZ2h0OworICAgIG1fdW5pdHNQZXJFbSA9IGZvbnREYXRhLT5tX3VuaXRzUGVyRW07Cisg
ICAgbV9zcGFjZVdpZHRoID0gMDsKKyAgICBtX3NwYWNlR2x5cGggPSAwOworICAgIG1fYWRqdXN0
ZWRTcGFjZVdpZHRoID0gZm9udERhdGEtPm1fYWRqdXN0ZWRTcGFjZVdpZHRoOworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICBtX3NjcmlwdENhY2hlID0gMDsKKyAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0
aWVzID0gMDsKKyAgICBtX2lzU3lzdGVtRm9udCA9IGZhbHNlOworICAgIG1fc3ludGhldGljQm9s
ZE9mZnNldCA9IDAuMGY7CisjZW5kaWYKK30KKworQ0pLV2lkdGhGb250RGF0YTo6Q0pLV2lkdGhG
b250RGF0YSgpCisgICAgOiBtX2Nqa0dseXBoV2lkdGgoY0dseXBoV2lkdGhVbmtub3duKQorewor
fQorCitmbG9hdCBDSktXaWR0aEZvbnREYXRhOjp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBj
b25zdAoreworICAgIGlmIChtX2Nqa0dseXBoV2lkdGggIT0gY0dseXBoV2lkdGhVbmtub3duKQor
ICAgICAgICByZXR1cm4gbV9jamtHbHlwaFdpZHRoOworCisgICAgZmxvYXQgd2lkdGggPSBwbGF0
Zm9ybVdpZHRoRm9yR2x5cGgoZ2x5cGgpOworICAgIG1fY2prR2x5cGhXaWR0aCA9IHdpZHRoOwor
CisjaWZuZGVmIE5ERUJVRworICAgIC8vIFRlc3Qgb3VyIG9wdGltaXphdGlvbiB0aGF0IGFzc3Vt
aW5nIGFsbCBDR0sgZ2x5cGhzIGhhdmUgdGhlIHNhbWUgd2lkdGgKKyAgICBjb25zdCBmbG9hdCBh
Y3R1YWxfd2lkdGggPSBwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoZ2x5cGgpOworICAgIEFTU0VSVCgo
Y0dseXBoV2lkdGhVbmtub3duID09IHdpZHRoKSB8fCAoYWN0dWFsX3dpZHRoID09IHdpZHRoKSk7
CisjZW5kaWYKKworICAgIHJldHVybiB3aWR0aDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2
aXNpb24gMzYwOTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0
YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFNWR0ZvbnREYXRhOwogY2xhc3MgV2lkdGhN
YXA7CitjbGFzcyBaZXJvV2lkdGhGb250RGF0YTsKK2NsYXNzIENKS1dpZHRoRm9udERhdGE7CiAK
IGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxlUGl0Y2ggfTsK
IApAQCAtNTYsNiArNTgsMTAgQEAgcHVibGljOgogICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmLCBib29sIGN1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBsb2FkaW5nID0g
ZmFsc2UsIFNWR0ZvbnREYXRhKiBkYXRhID0gMCk7CiAgICAgdmlydHVhbCB+U2ltcGxlRm9udERh
dGEoKTsKIAorcHJvdGVjdGVkOgorICAgIC8vIHN1Yi1jbGFzcyBjb25zdHJ1Y3RvcgorICAgIFNp
bXBsZUZvbnREYXRhKCk7CisKIHB1YmxpYzoKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBw
bGF0Zm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KICAgICBTaW1wbGVGb250RGF0
YSogc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0OwpAQCAtNjgsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgeEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1feEhlaWdodDsgfQogICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0oKSBj
b25zdCB7IHJldHVybiBtX3VuaXRzUGVyRW07IH0KIAotICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgo
R2x5cGgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkgY29u
c3Q7CiAgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFy
MzIpIGNvbnN0OwpAQCAtMTE4LDYgKzEyNCw5IEBAIHB1YmxpYzoKICAgICB3eEZvbnQgZ2V0V3hG
b250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZvbnQoKTsgfQogI2VuZGlmCiAKKyAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogemVyb1dpZHRoRm9udERhdGEoKSBjb25zdDsKKyAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogY2prV2lkdGhGb250RGF0YSgpIGNvbnN0OworCiBwcml2YXRlOgogICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKQEAgLTE3
Nyw2ICsxODYsMzMgQEAgcHVibGljOgogICAgIG11dGFibGUgU0NSSVBUX0NBQ0hFIG1fc2NyaXB0
Q2FjaGU7CiAgICAgbXV0YWJsZSBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFBy
b3BlcnRpZXM7CiAjZW5kaWYKKworcHJpdmF0ZToKKyAgICBPd25QdHI8WmVyb1dpZHRoRm9udERh
dGE+IG1femVyb1dpZHRoRm9udERhdGE7CisgICAgT3duUHRyPENKS1dpZHRoRm9udERhdGE+IG1f
Y2prV2lkdGhGb250RGF0YTsKK307CisKKy8vIFNpbXBsZUZvbnREYXRhIHN1Yi1jbGFzc2VzOgor
CisvLyBIYXMgYSBzaW5nbGUgemVyby13aWR0aCBnbHlwaCwgdXNlZCBmb3IgWldTIGNoYXJhY3Rl
cnMKK2NsYXNzIFplcm9XaWR0aEZvbnREYXRhIDogcHVibGljIFNpbXBsZUZvbnREYXRhIHsKK3B1
YmxpYzoKKyAgICB2b2lkIGluaXQoU2ltcGxlRm9udERhdGEqKTsKKyAgICB2aXJ0dWFsIGZsb2F0
IHdpZHRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0IHsgcmV0dXJuIDAuMGY7IH0KK307CisKKy8vIE1v
bm9zcGFjZWQsIHNpbmdsZSBnbHlwaCBhbmQgd2lkdGgsIHVzZWQgZm9yIENKSyBjaGFyYWN0ZXJz
CisvLyBUaGUgYXNzdW1wdGlvbiBtYWRlIGhlcmUgY2FuIGJyZWFrIGZvciBzb21lIGhpZ2gtcXVh
bGl0eSBDSksgZm9udHMgd2l0aAorLy8gcHJvcG9ydGlvbmFsIENKSyBnbHlwaHMuCitjbGFzcyBD
SktXaWR0aEZvbnREYXRhIDogcHVibGljIFplcm9XaWR0aEZvbnREYXRhIHsKK3B1YmxpYzoKKyAg
ICBDSktXaWR0aEZvbnREYXRhKCk7CisKKyAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoRm9yR2x5cGgo
R2x5cGgpIGNvbnN0OworCitwcml2YXRlOgorICAgIC8vIE9wdGltaXphdGlvbiBmb3IgQ0pLIGds
eXBocworICAgIG11dGFibGUgZmxvYXQgbV9jamtHbHlwaFdpZHRoOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9uIDM2MDk2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMu
aCIKKyNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKQEAg
LTQyLDE2ICs0NCwzMyBAQCBib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVu
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwor
ICAgIENHR2x5cGggc3BhY2VHbHlwaCA9IDA7CiAgICAgQ0dHbHlwaCBsb2NhbEdseXBoQnVmZmVy
W0dseXBoUGFnZTo6c2l6ZV07CiAgICAgd2tHZXRHbHlwaHMoZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLmNnRm9udCgpLCBidWZmZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0aCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEdseXBo
IGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKLSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAg
ICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBo
LCBmb250RGF0YSk7CisgICAgICAgIENHR2x5cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ld
OworICAgICAgICBVQ2hhciBjID0gYnVmZmVyW2ldOworICAgICAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogZ2x5cGhGb250RGF0YSA9IGZvbnREYXRhOworICAgICAgICBpZiAoYyA9PSB6ZXJvV2lk
dGhTcGFjZSkgeworICAgICAgICAgICAgaWYgKCFnbHlwaCkgeworICAgICAgICAgICAgICAgIHN0
YXRpYyBVQ2hhciBzcGFjZSA9ICcgJzsKKyAgICAgICAgICAgICAgICBpZiAoIXNwYWNlR2x5cGgp
CisgICAgICAgICAgICAgICAgICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSwgJnNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Bh
Y2VHbHlwaCwgMSk7CisgICAgICAgICAgICAgICAgZ2x5cGggPSBzcGFjZUdseXBoOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZ2x5cGhGb250RGF0YSA9IGZvbnREYXRhLT56ZXJvV2lkdGhG
b250RGF0YSgpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWdseXBoKSB7CisgICAgICAgICAgICAvLyBXZWJLaXQgZXhwZWN0cyBib3RoIHRoZSBn
bHlwaCBpbmRleCBhbmQgRm9udERhdGEKKyAgICAgICAgICAgIC8vIHBvaW50ZXIgdG8gYmUgTlVM
TCBpZiB0aGUgZ2x5cGggaXMgbm90IHByZXNlbnQKKyAgICAgICAgICAgIGdseXBoRm9udERhdGEg
PSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKEZvbnQ6OmlzQ0pLQ29kZVBv
aW50KGMpKQorICAgICAgICAgICAgICAgIGdseXBoRm9udERhdGEgPSBmb250RGF0YS0+Y2prV2lk
dGhGb250RGF0YSgpOwogICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgIH0K
KyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGdseXBoRm9u
dERhdGEpOwogICAgIH0KICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0K
</data>
<flag name="review"
          id="10314"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23200</attachid>
            <date>2008-09-05 14:18:46 -0700</date>
            <delta_ts>2008-09-08 15:25:59 -0700</delta_ts>
            <desc>Updated: ZWS fix only</desc>
            <filename>20237-3.patch</filename>
            <type>text/plain</type>
            <size>8469</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjExNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDgtMDktMDUgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKyAgICAgICAKKyAg
ICAgICAgRml4ZXMgYSBsYXlvdXQgdGVzdCAoZmFzdC90ZXh0L3plcm8td2lkdGgtY2hhcmFjdGVy
cy5odG1sKSBhbmQgYWRkcmVzc2VzCisgICAgICAgIG1pdHogY29tbWVudHMgaW4gcmVzcG9uc2Ug
dG8gb3JpZ2luYWwgcGF0Y2ggZm9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDIzNworCisgICAgICAgIFRoaXMgY2hhbmdlIGJyaW5ncyBoYW5kbGlu
ZyBvZiB0aGUgWldTIGNoYXJhY3RlciB3aWR0aCBkb3duIHRvCisgICAgICAgIHRoZSBsZXZlbCBv
ZiBTaW1wbGVGb250RGF0YSBieSBjcmVhdGluZyBzcGVjaWFsIChzdWItY2xhc3NlZCkKKyAgICAg
ICAgU2ltcGxlRm9udERhdGEgb2JqZWN0cyB0aGF0IGFyZSB1c2VkIGluIEdseXBoRGF0YS4gVGhl
c2UgaW5zdGFuY2VzIGFyZQorICAgICAgICBjcmVhdGVkIHdoZW4gdGhlIGdseXBoIGNhY2hlIGlz
IGJlaW5nIGZpbGxlZCAoR2x5cGhQYWdlOjpmaWxsKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6Onplcm9XaWR0aEZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
Olplcm9XaWR0aEZvbnREYXRhOjppbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6WmVyb1dpZHRoRm9udERhdGE6Ondp
ZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VU
cmVlTm9kZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisK
IDIwMDgtMDktMDUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAg
IFF0IGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuY3BwCShyZXZpc2lvbiAzNjExNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIFNp
bXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb24KICAgICAsIG1faXNDdXN0b21G
b250KGN1c3RvbUZvbnQpCiAgICAgLCBtX2lzTG9hZGluZyhsb2FkaW5nKQogICAgICwgbV9zbWFs
bENhcHNGb250RGF0YSgwKQorICAgICwgbV96ZXJvV2lkdGhGb250RGF0YShuZXcgWmVyb1dpZHRo
Rm9udERhdGEoKSkKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKSAmJiAhUExBVEZPUk0oUVQpCiAg
ICAgaWYgKFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0gc3ZnRm9udERh
dGEgPyBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCkgOiAwKSB7CkBAIC03MCw2ICs3
MSw3IEBAIFNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb24KICAgICAgICAg
ZGV0ZXJtaW5lUGl0Y2goKTsKICAgICAgICAgbV9taXNzaW5nR2x5cGhEYXRhLmZvbnREYXRhID0g
dGhpczsKICAgICAgICAgbV9taXNzaW5nR2x5cGhEYXRhLmdseXBoID0gMDsKKyAgICAgICAgbV96
ZXJvV2lkdGhGb250RGF0YS0+aW5pdCh0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgpAQCAtODUsNiArODcsNyBAQCBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29u
c3QgRm9uCiAgICAgICAgIGRldGVybWluZVBpdGNoKCk7CiAgICAgICAgIG1fbWlzc2luZ0dseXBo
RGF0YS5mb250RGF0YSA9IHRoaXM7CiAgICAgICAgIG1fbWlzc2luZ0dseXBoRGF0YS5nbHlwaCA9
IDA7CisgICAgICAgIG1femVyb1dpZHRoRm9udERhdGEtPmluaXQodGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTk3LDYgKzEwMCwxMyBAQCBTaW1wbGVGb250RGF0YTo6U2ltcGxl
Rm9udERhdGEoY29uc3QgRm9uCiAgICAgZGV0ZXJtaW5lUGl0Y2goKTsKICAgICBtX2FkanVzdGVk
U3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYo
d2lkdGgpOwogCisgICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGFuZCBpbXBsZW1lbnQgYWNyb3Nz
IHBsYXRmb3JtcywgaWYgbmVlZGVkCisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIFpFUk8gV0lE
VEggU1BBQ0VTIGFyZSBleHBsaWNpdGx5IG1hcHBlZCB0byBzaGFyZSB0aGUgZ2x5cGgKKyAgICAv
LyB3aXRoIFNQQUNFICh3aXRoIHdpZHRoIGFkanVzdGVkIHRvIDApIGR1cmluZyBHbHlwaFBhZ2U6
OmZpbGwKKyAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBXaW5k
b3dzIHBvcnQuIFRoZSBGb250RGF0YQorICAgIC8vIHJlbWFwcGluZyBtYXkgdmVyeSB3ZWxsIGJl
IG5lZWRlZCBmb3Igb3RoZXIgcGxhdGZvcm1zLgorI2Vsc2UKICAgICAvLyBGb3JjZSB0aGUgZ2x5
cGggZm9yIFpFUk8gV0lEVEggU1BBQ0UgdG8gaGF2ZSB6ZXJvIHdpZHRoLCB1bmxlc3MgaXQgaXMg
c2hhcmVkIHdpdGggU1BBQ0UuCiAgICAgLy8gSGVsdmV0aWNhIGlzIGFuIGV4YW1wbGUgb2YgYSBu
b24temVybyB3aWR0aCBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgogICAgIC8vIFNlZSA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNzg+CkBAIC0xMDksOSArMTE5LDIy
IEBAIFNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb24KICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgTE9HX0VSUk9SKCJGb250IG1hcHMgU1BBQ0UgYW5kIFpFUk8gV0lEVEgg
U1BBQ0UgdG8gdGhlIHNhbWUgZ2x5cGguIEdseXBoIHdpZHRoIG5vdCBvdmVycmlkZGVuLiIpOwog
ICAgIH0KKyNlbmRpZgogCiAgICAgbV9taXNzaW5nR2x5cGhEYXRhLmZvbnREYXRhID0gdGhpczsK
ICAgICBtX21pc3NpbmdHbHlwaERhdGEuZ2x5cGggPSAwOworICAgIG1femVyb1dpZHRoRm9udERh
dGEtPmluaXQodGhpcyk7Cit9CisKK1NpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YSgpCisg
ICAgOiBtX3RyZWF0QXNGaXhlZFBpdGNoKGZhbHNlKQorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisg
ICAgLCBtX3N2Z0ZvbnREYXRhKDApCisjZW5kaWYKKyAgICAsIG1faXNDdXN0b21Gb250KDApCisg
ICAgLCBtX2lzTG9hZGluZygwKQorICAgICwgbV9zbWFsbENhcHNGb250RGF0YSgwKQorewogfQog
CiBTaW1wbGVGb250RGF0YTo6flNpbXBsZUZvbnREYXRhKCkKQEAgLTE1MCw0ICsxNzMsMzAgQEAg
Ym9vbCBTaW1wbGVGb250RGF0YTo6aXNTZWdtZW50ZWQoKSBjb25zdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorY29uc3QgU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjp6ZXJvV2lkdGhG
b250RGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1femVyb1dpZHRoRm9udERhdGEuZ2V0KCk7
Cit9CisKK3ZvaWQgWmVyb1dpZHRoRm9udERhdGE6OmluaXQoU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQoreworICAgIG1fZm9udCA9IGZvbnREYXRhLT5tX2ZvbnQ7CisgICAgbV9zbWFsbENhcHNG
b250RGF0YSA9IGZvbnREYXRhLT5tX3NtYWxsQ2Fwc0ZvbnREYXRhOworICAgIG1fYXNjZW50ID0g
Zm9udERhdGEtPm1fYXNjZW50OworICAgIG1fZGVzY2VudCA9IGZvbnREYXRhLT5tX2Rlc2NlbnQ7
CisgICAgbV9saW5lU3BhY2luZyA9IGZvbnREYXRhLT5tX2xpbmVTcGFjaW5nOworICAgIG1fbGlu
ZUdhcCA9IGZvbnREYXRhLT5tX2xpbmVHYXA7CisgICAgbV94SGVpZ2h0ID0gZm9udERhdGEtPm1f
eEhlaWdodDsKKyAgICBtX3VuaXRzUGVyRW0gPSBmb250RGF0YS0+bV91bml0c1BlckVtOworICAg
IG1fc3BhY2VXaWR0aCA9IDA7CisgICAgbV9zcGFjZUdseXBoID0gMDsKKyAgICBtX2FkanVzdGVk
U3BhY2VXaWR0aCA9IGZvbnREYXRhLT5tX2FkanVzdGVkU3BhY2VXaWR0aDsKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgbV9zY3JpcHRDYWNoZSA9IDA7CisgICAgbV9zY3JpcHRGb250UHJvcGVydGll
cyA9IDA7CisgICAgbV9pc1N5c3RlbUZvbnQgPSBmYWxzZTsKKyAgICBtX3N5bnRoZXRpY0JvbGRP
ZmZzZXQgPSAwLjBmOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHJldmlzaW9uIDM2
MTE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CiBjbGFz
cyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTVkdGb250RGF0YTsKIGNsYXNzIFdpZHRoTWFwOworY2xh
c3MgWmVyb1dpZHRoRm9udERhdGE7CiAKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVk
UGl0Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKIApAQCAtNTYsNiArNTcsMTAgQEAgcHVibGljOgogICAg
IFNpbXBsZUZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGN1c3RvbUZvbnQg
PSBmYWxzZSwgYm9vbCBsb2FkaW5nID0gZmFsc2UsIFNWR0ZvbnREYXRhKiBkYXRhID0gMCk7CiAg
ICAgdmlydHVhbCB+U2ltcGxlRm9udERhdGEoKTsKIAorcHJvdGVjdGVkOgorICAgIC8vIHN1Yi1j
bGFzcyBjb25zdHJ1Y3RvcgorICAgIFNpbXBsZUZvbnREYXRhKCk7CisKIHB1YmxpYzoKICAgICBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnQ7IH0KICAgICBTaW1wbGVGb250RGF0YSogc21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0OwpAQCAtNjgsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgZmxvYXQgeEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1feEhlaWdodDsgfQogICAg
IHVuc2lnbmVkIHVuaXRzUGVyRW0oKSBjb25zdCB7IHJldHVybiBtX3VuaXRzUGVyRW07IH0KIAot
ICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQg
d2lkdGhGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckds
eXBoKEdseXBoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwpAQCAtMTE4LDYgKzEyMyw4IEBAIHB1
YmxpYzoKICAgICB3eEZvbnQgZ2V0V3hGb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZvbnQo
KTsgfQogI2VuZGlmCiAKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogemVyb1dpZHRoRm9udERh
dGEoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogICAgIHZv
aWQgcGxhdGZvcm1EZXN0cm95KCk7CkBAIC0xNzcsNiArMTg0LDE4IEBAIHB1YmxpYzoKICAgICBt
dXRhYmxlIFNDUklQVF9DQUNIRSBtX3NjcmlwdENhY2hlOwogICAgIG11dGFibGUgU0NSSVBUX0ZP
TlRQUk9QRVJUSUVTKiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwogI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgT3duUHRyPFplcm9XaWR0aEZvbnREYXRhPiBtX3plcm9XaWR0aEZvbnREYXRhOworfTsK
KworLy8gU2ltcGxlRm9udERhdGEgc3ViLWNsYXNzZXM6CisKKy8vIEhhcyBhIHNpbmdsZSB6ZXJv
LXdpZHRoIGdseXBoLCB1c2VkIGZvciBaV1MgY2hhcmFjdGVycworY2xhc3MgWmVyb1dpZHRoRm9u
dERhdGEgOiBwdWJsaWMgU2ltcGxlRm9udERhdGEgeworcHVibGljOgorICAgIHZvaWQgaW5pdChT
aW1wbGVGb250RGF0YSopOworICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCkg
Y29uc3QgeyByZXR1cm4gMC4wZjsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdl
VHJlZU5vZGVDR1dpbi5jcHAJKHJldmlzaW9uIDM2MTE1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2VU
cmVlTm9kZS5oIgogCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKQEAgLTQyLDE2ICs0NCwzMSBAQCBi
b29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVuCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIENHR2x5cGggc3BhY2VH
bHlwaCA9IDA7CiAgICAgQ0dHbHlwaCBsb2NhbEdseXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07
CiAgICAgd2tHZXRHbHlwaHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBidWZm
ZXIsIGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlw
aEJ1ZmZlcltpXTsKLSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoLCBmb250RGF0YSk7CisgICAg
ICAgIENHR2x5cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOworICAgICAgICBVQ2hhciBj
ID0gYnVmZmVyW2ldOworICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZ2x5cGhGb250RGF0
YSA9IGZvbnREYXRhOworICAgICAgICBpZiAoYyA9PSB6ZXJvV2lkdGhTcGFjZSkgeworICAgICAg
ICAgICAgaWYgKCFnbHlwaCkgeworICAgICAgICAgICAgICAgIHN0YXRpYyBVQ2hhciBzcGFjZSA9
ICcgJzsKKyAgICAgICAgICAgICAgICBpZiAoIXNwYWNlR2x5cGgpCisgICAgICAgICAgICAgICAg
ICAgIHdrR2V0R2x5cGhzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgJnNwYWNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3BhY2VHbHlwaCwgMSk7CisgICAg
ICAgICAgICAgICAgZ2x5cGggPSBzcGFjZUdseXBoOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZ2x5cGhGb250RGF0YSA9IGZvbnREYXRhLT56ZXJvV2lkdGhGb250RGF0YSgpOworICAgICAg
ICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoIWdseXBoKSB7Cisg
ICAgICAgICAgICAvLyBXZWJLaXQgZXhwZWN0cyBib3RoIHRoZSBnbHlwaCBpbmRleCBhbmQgRm9u
dERhdGEKKyAgICAgICAgICAgIC8vIHBvaW50ZXIgdG8gYmUgTlVMTCBpZiB0aGUgZ2x5cGggaXMg
bm90IHByZXNlbnQKKyAgICAgICAgICAgIGdseXBoRm9udERhdGEgPSAwOworICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgIH0KKyAgICAgICAg
c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGdseXBoRm9udERhdGEpOwog
ICAgIH0KICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23276</attachid>
            <date>2008-09-08 15:25:59 -0700</date>
            <delta_ts>2008-09-08 16:03:57 -0700</delta_ts>
            <desc>With just the 0xFFFC check</desc>
            <filename>patch-20237-3.diff</filename>
            <type>text/plain</type>
            <size>1433</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjI3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDgtMDktMDggIGRnbGF6a292QGdvb2dsZS5jb20gIDxkZ2xhemtv
dkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZHMgYW4gZXh0cmEgY2hlY2sgZm9yIE9iamVjdCBSZXBsYWNlbWVudCBDaGFyYWN0
ZXIgKDB4RkZGRikgdG8gYWRkcmVzcworICAgICAgICB0aGUgaXNzdWUgd2l0aCBmYXN0L3RleHQv
emVyby13aWR0aC1jaGFyYWN0ZXJzLmh0bWwgdGVzdCB3aGVuIHJ1bgorICAgICAgICB3aXRoIFdp
bmRvd3Mgc3lzdGVtIGRlZmF1bHQgZm9udHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Lmg6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2Up
OgorCiAyMDA4LTA5LTA4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCShyZXZpc2lvbiAzNjExNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCB0
cmVhdEFzU3BhY2UoVUNoYXIgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMg
PT0gJ1xuJyB8fCBjID09IDB4MDBBMDsgfQotICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lk
dGhTcGFjZShVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAw
eEEwKSB8fCBjID09IDB4MjAwZSB8fCBjID09IDB4MjAwZiB8fCBjID49IDB4MjAyYSAmJiBjIDw9
IDB4MjAyZTsgfQorICAgIHN0YXRpYyBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZShVQ2hhciBj
KSB7IHJldHVybiBjIDwgMHgyMCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IDB4
MjAwZSB8fCBjID09IDB4MjAwZiB8fCBjID49IDB4MjAyYSAmJiBjIDw9IDB4MjAyZSB8fCBjID09
IDB4RkZGQzsgfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBib29sIGlzU1ZHRm9udCgp
IGNvbnN0Owo=
</data>
<flag name="review"
          id="10365"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>