<?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>28131</bug_id>
          
          <creation_ts>2009-08-09 07:39:57 -0700</creation_ts>
          <short_desc>[Haiku] Adding font-specific files to WebCore.</short_desc>
          <delta_ts>2009-09-03 01:50:46 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Other</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="Maxime Simon">simon.maxime</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>leavengood</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138507</commentid>
    <comment_count>0</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 07:39:57 -0700</bug_when>
    <thetext>I will post two patches in this bug for these font-specific files:
WebCore/platform/graphics/haiku/FontCustomPlatformData.cpp
WebCore/platform/graphics/haiku/FontCustomPlatformData.h
WebCore/platform/graphics/haiku/FontPlatformData.h
WebCore/platform/graphics/haiku/FontPlatformDataHaiku.cpp

WebCore/platform/graphics/haiku/FontCacheHaiku.cpp
WebCore/platform/graphics/haiku/FontDataHaiku.cpp
WebCore/platform/graphics/haiku/FontHaiku.cpp
WebCore/platform/graphics/haiku/SimpleFontHaiku.cpp

Regards,
Maxime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138511</commentid>
    <comment_count>1</comment_count>
      <attachid>34421</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 07:48:19 -0700</bug_when>
    <thetext>Created attachment 34421
Patch to add four font-specific files to WebCore/platform/graphics/haiku/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138513</commentid>
    <comment_count>2</comment_count>
      <attachid>34422</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-09 07:57:28 -0700</bug_when>
    <thetext>Created attachment 34422
Patch to add four other font-specific files to WebCore/platform/graphics/haiku/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138525</commentid>
    <comment_count>3</comment_count>
      <attachid>34421</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 08:41:34 -0700</bug_when>
    <thetext>Comment on attachment 34421
Patch to add four font-specific files to WebCore/platform/graphics/haiku/.

 39 static void releaseData(void* data)
looks to never be used, please remove it.

strange indenting here:
     struct FontCustomPlatformData : Noncopyable {
 33         public:
 34             FontCustomPlatformData() { }
 35

No need for the &quot;buffer&quot; argument name here:
 40     FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer* buffer);

Wrong:
  * This file is part of the internal font implementation.  It should not be included by anyone other than
 3  * FontMac.cpp, FontWin.cpp and Font.cpp.

So strange:
120     if (m_font &amp;&amp; m_font != hashTableDeletedFontValue())
 121         delete m_font;
That&apos;s gonna die a horrible death with this as a copy-constructor:
FontPlatformData::FontPlatformData(const FontPlatformData&amp; other)
 114 {
 115     *this = other;
 116 }
your&apos; going to be double-deleting pointers left and right.

Why does FontPlatformData use FontDescription at all?  the Mac version doesn&apos;t at least.  Shouldn&apos;t this just wrap a BFont?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138527</commentid>
    <comment_count>4</comment_count>
      <attachid>34422</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-09 08:53:28 -0700</bug_when>
    <thetext>Comment on attachment 34422
Patch to add four other font-specific files to WebCore/platform/graphics/haiku/.

naming style:
 71     static AtomicString s_DefaultStr(family);

This should indicate that it&apos;s a hack somehow:
1 // Fix temp routine to check the conversion works, please move it ASAP
 42 int charUnicodeToUtf8(unsigned short glyph, char* out)
it&apos;s not clear to me from reading that method name that this method isn&apos;t a good thing. :)  Although since I started at it enought o see what it does, you&apos;re basically just flattening all passed in chars to utf8 so that you can pass them off to B drawing routines.  This is a hack, and needs to be designated as such.

Shouldn&apos;t char* out be char[4]&amp; out?

Don&apos;t we already have typedefs making these casts uneeded?
2     BView* view = static_cast&lt;BView*&gt;(graphicsContext-&gt;platformContext());
 73     BFont* m_font = static_cast&lt;BFont*&gt;(font-&gt;platformData().font());

Why is the const_cast needed?
 79     GlyphBufferGlyph* glyphs = const_cast&lt;GlyphBufferGlyph*&gt;(glyphBuffer.glyphs(from));

Early return is preferred:
45     BFont* font = m_platformData.font();
 46     if (font) {
if (!font)
    return;

It seems the handling of m_smallCapsFontData is wrong on other ports.  But I&apos;m not convinced your handling is correct either.  It certainly is strange that SimpleFontData.cpp would try to delete it too.

     if (m_platformData.font())
 90         m_treatAsFixedPitch = m_platformData.font()-&gt;IsFixed();
 91     else
 92         m_treatAsFixedPitch = false;

m_treadAsFixedPitch = m_platformData.font() &amp;&amp; m_platformData.font()-&gt;IsFixed();

What is an &quot;escapement&quot;?  Wow a B-only term it seems:
http://www.acm.uiuc.edu/bug/Be%20Book/The%20Interface%20Kit/Font.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138955</commentid>
    <comment_count>5</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 07:34:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Why does FontPlatformData use FontDescription at all?  the Mac version doesn&apos;t
&gt; at least.  Shouldn&apos;t this just wrap a BFont?

At least the gtk port does it.
But with some simple tests it seems that the type of FontDescription is always NoFamily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138957</commentid>
    <comment_count>6</comment_count>
      <attachid>34556</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 07:44:53 -0700</bug_when>
    <thetext>Created attachment 34556
Patch to add four font-specific files to WebCore/platform/graphics/haiku/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138971</commentid>
    <comment_count>7</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 08:27:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It seems the handling of m_smallCapsFontData is wrong on other ports.  But I&apos;m
&gt; not convinced your handling is correct either.  It certainly is strange that
&gt; SimpleFontData.cpp would try to delete it too.

I took a look on other ports. It seems that gtk, win, wince, wx and mac are handling m_smallCapsFontData the same way I do (if I&apos;m right). But in fact it could be wrong.

&gt; What is an &quot;escapement&quot;?  Wow a B-only term it seems:
&gt; http://www.acm.uiuc.edu/bug/Be%20Book/The%20Interface%20Kit/Font.html

Eh Eh, an escapement is the B-term to design the width of a glyph. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138972</commentid>
    <comment_count>8</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 08:34:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Shouldn&apos;t char* out be char[4]&amp; out?

I tried with char[4]&amp; but it didn&apos;t compile. I got this output &quot;error: &apos;out&apos; was not declared in this scope.&quot;

&gt; Why is the const_cast needed?
&gt;  79     GlyphBufferGlyph* glyphs =
&gt; const_cast&lt;GlyphBufferGlyph*&gt;(glyphBuffer.glyphs(from));

This const_cast is needed because the glyphBuffer argument of the function is const, and the glyphs we are creating will be modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138974</commentid>
    <comment_count>9</comment_count>
      <attachid>34561</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-11 08:44:30 -0700</bug_when>
    <thetext>Created attachment 34561
Patch to add four other font-specific files to WebCore/platform/graphics/haiku/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140397</commentid>
    <comment_count>10</comment_count>
      <attachid>34556</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 17:37:07 -0700</bug_when>
    <thetext>Comment on attachment 34556
Patch to add four font-specific files to WebCore/platform/graphics/haiku/.

I would have put this in a static inline:

+    int32 numStyles = count_font_styles(family);
+    font_style fontStyle;
+    uint32 flags;
+
+    for (int i = 0; i &lt; numStyles; i++) {
+        if (get_font_style(family, i, &amp;fontStyle, &amp;flags) == B_OK) {
+            String style(fontStyle);
+            if ((m_oblique &amp;&amp; m_bold) &amp;&amp; (style == &quot;BoldItalic&quot; || style == &quot;Bold Oblique&quot;))
+                 break;
+            if ((m_oblique &amp;&amp; !m_bold) &amp;&amp; (style == &quot;Italic&quot; || style == &quot;Oblique&quot;))
+                 break;
+            if ((!m_oblique &amp;&amp; m_bold) &amp;&amp; style == &quot;Bold&quot;)
+                 break;
+            if ((!m_oblique &amp;&amp; !m_bold) &amp;&amp; (style == &quot;Roma&quot; || style == &quot;Book&quot;
+                || style == &quot;Condensed&quot; || style == &quot;Regular&quot; || style == &quot;Medium&quot;))
+                 break;
+            }
+        }

Something like findMatchingFontStyle(family, m_bold, m_oblique);


found is not used here:
+    if (BFont().SetFamilyAndStyle(BString(familyName.string()).String(), 0) == B_OK) {
+        strcpy(family, BString(familyName.string()).String());
+        found = true;
+    }
+
+    // If no font family is found for the given name, we use a generic font.
+    if (!found) {
+        int type = fontDescription.genericFamily();
+
+        if (BString(familyName.string()).FindFirst(&quot;Sans&quot;) != B_ERROR)
+            strcpy(family, &quot;DejaVu Sans&quot;);
+        else if (BString(familyName.string()).FindFirst(&quot;Serif&quot;) != B_ERROR)
+            strcpy(family, &quot;DejaVu Serif&quot;);
+        else if (BString(familyName.string()).FindFirst(&quot;Mono&quot;) != B_ERROR)
+            strcpy(family, &quot;DejaVu Mono&quot;);
+        else // This is the fallback font.
+            strcpy(family, &quot;DejaVu Sans&quot;);
+    }

Seems that should just be an else.

Again, I would have put the family lookup in a separate static inline.

font_family family = findMatchingFontFamily(familyName);

I think this could use on more round of cleanup.  In general, smaller functions are better. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140399</commentid>
    <comment_count>11</comment_count>
      <attachid>34561</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-14 17:42:06 -0700</bug_when>
    <thetext>Comment on attachment 34561
Patch to add four other font-specific files to WebCore/platform/graphics/haiku/.

Why execute the family code ever time when you&apos;re only creating the AtomicString once?
 69     font_family family;
 70     defaultFont-&gt;GetFamilyAndStyle(&amp;family, 0);
 71     static AtomicString defaultString(family);

Seems like a bad idea...
 bool FontData::containsCharacters(const UChar* characters, int length) const
 43 {
 44     notImplemented();
 45     return true;
 46 }

Certainly will make international sites look awful. :)

This is not an english sentence:
 41 // FIXME: Temp routine to check the conversion works.
I&apos;m not quite sure what you mean by that.

Is it possible to pass these through to the simple versions?
 97 float Font::floatWidthForComplexText(const TextRun&amp; run, HashSet&lt;const SimpleFontData*&gt;* fallbackFonts) const

I&apos;m not sure that it would help you any, but it might.

I take it Haiku does not have easy options for drawing complex text?

Not a good variable name:
 76         const FontPlatformData* pdata = new FontPlatformData(desc, desc.family().family());
 74         FontDescription desc = FontDescription(fontDescription);

Otherwise looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140460</commentid>
    <comment_count>12</comment_count>
      <attachid>34894</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-15 08:04:41 -0700</bug_when>
    <thetext>Created attachment 34894
Adding four font-specific files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140461</commentid>
    <comment_count>13</comment_count>
      <attachid>34895</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-15 08:17:02 -0700</bug_when>
    <thetext>Created attachment 34895
Adding three font-specific files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141785</commentid>
    <comment_count>14</comment_count>
      <attachid>34895</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-20 22:38:14 -0700</bug_when>
    <thetext>Comment on attachment 34895
Adding three font-specific files to WebCore.

r=me (again)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141788</commentid>
    <comment_count>15</comment_count>
      <attachid>34895</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-20 22:39:18 -0700</bug_when>
    <thetext>Comment on attachment 34895
Adding three font-specific files to WebCore.

I can&apos;t remember if this was landed or not.  But the commit-queue is smart enough to reject it if it&apos;s already been landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141790</commentid>
    <comment_count>16</comment_count>
      <attachid>34894</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-20 22:40:25 -0700</bug_when>
    <thetext>Comment on attachment 34894
Adding four font-specific files to WebCore.

&gt; +static font_family* findMatchingFontFamily(const AtomicString&amp; familyName)
&gt; +{
&gt; +    font_family family;
&gt; +
&gt; +    if (BFont().SetFamilyAndStyle(BString(familyName.string()).String(), 0)
== B_OK)
&gt; +	   strcpy(family, BString(familyName.string()).String());
Not sure where familyName comes from, but i suspect it&apos;s from CSS, and that
means you have a buffer overflow vulnerability here.  Never use strcpy --
always strncpy.  That said, wth is a font_family?  From reading this it looks
like it&apos;s just a string?

&gt; +    else {
&gt; +	   // If no font family is found for the given name, we use a generic
font.
&gt; +	   if (BString(familyName.string()).FindFirst(&quot;Sans&quot;) != B_ERROR)
&gt; +	       strcpy(family, &quot;DejaVu Sans&quot;);
&gt; +	   else if (BString(familyName.string()).FindFirst(&quot;Serif&quot;) != B_ERROR)

&gt; +	       strcpy(family, &quot;DejaVu Serif&quot;);
&gt; +	   else if (BString(familyName.string()).FindFirst(&quot;Mono&quot;) != B_ERROR)
&gt; +	       strcpy(family, &quot;DejaVu Mono&quot;);
&gt; +	   else // This is the fallback font.
&gt; +	       strcpy(family, &quot;DejaVu Serif&quot;);
This code seems to repeatedly create the same bstring, which seems
unnecessarily expensive.  More over i&apos;m fairly sure AtomicString has all the
logic you need to do this without ever creating a bstring anyway.

&gt; +    }
&gt; +
&gt; +    font_family* fontFamily = &amp;family;
&gt; +    return fontFamily;
You can&apos;t return a pointer to a stack allocated variable, it&apos;s just not okay --
the code structure implies that the compiler even warned you.

&gt; +}
&gt; +
&gt; +static font_style* findMatchingFontStyle(font_family family, bool bold, bool
oblique)
&gt; +{
&gt; +    font_style style;
...
&gt; +    font_style* fontStyle = &amp;style;
&gt; +    return fontStyle;
Once again, don&apos;t return pointers to locals -- you&apos;re far better off just using
out parameters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141796</commentid>
    <comment_count>17</comment_count>
      <attachid>34895</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-20 22:43:10 -0700</bug_when>
    <thetext>Comment on attachment 34895
Adding three font-specific files to WebCore.

Rejecting patch 34895 from commit-queue.  This patch will require manual commit.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;rebase&apos;]&quot;  exit_code: 1  cwd: None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141811</commentid>
    <comment_count>18</comment_count>
      <attachid>34895</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-20 22:55:44 -0700</bug_when>
    <thetext>Comment on attachment 34895
Adding three font-specific files to WebCore.

commit-queue error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141826</commentid>
    <comment_count>19</comment_count>
      <attachid>34895</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-20 23:08:09 -0700</bug_when>
    <thetext>Comment on attachment 34895
Adding three font-specific files to WebCore.

Rejecting patch 34895 from commit-queue.  This patch will require manual commit.

[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;] failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141843</commentid>
    <comment_count>20</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-21 01:22:06 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 34894 [details])
&gt; Not sure where familyName comes from, but i suspect it&apos;s from CSS, and that
&gt; means you have a buffer overflow vulnerability here.  Never use strcpy --
&gt; always strncpy.  That said, wth is a font_family?  From reading this it looks
&gt; like it&apos;s just a string?

font_family is in fact a simple array of chars.
definition from the BeBook:
typedef char font_family[B_FONT_FAMILY_LENGTH + 1]
But you&apos;re right using strncpy would be more secure than a simple strcpy.

&gt; &gt; +    else {
&gt; &gt; +	   // If no font family is found for the given name, we use a generic
&gt; font.
&gt; &gt; +	   if (BString(familyName.string()).FindFirst(&quot;Sans&quot;) != B_ERROR)
&gt; &gt; +	       strcpy(family, &quot;DejaVu Sans&quot;);
&gt; &gt; +	   else if (BString(familyName.string()).FindFirst(&quot;Serif&quot;) != B_ERROR)
&gt; 
&gt; &gt; +	       strcpy(family, &quot;DejaVu Serif&quot;);
&gt; &gt; +	   else if (BString(familyName.string()).FindFirst(&quot;Mono&quot;) != B_ERROR)
&gt; &gt; +	       strcpy(family, &quot;DejaVu Mono&quot;);
&gt; &gt; +	   else // This is the fallback font.
&gt; &gt; +	       strcpy(family, &quot;DejaVu Serif&quot;);
&gt; This code seems to repeatedly create the same bstring, which seems
&gt; unnecessarily expensive.  More over i&apos;m fairly sure AtomicString has all the
&gt; logic you need to do this without ever creating a bstring anyway.

Indeed, I should have investigate to see if AtomicString has some functions to find a motif in a string.

&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    font_family* fontFamily = &amp;family;
&gt; &gt; +    return fontFamily;
&gt; You can&apos;t return a pointer to a stack allocated variable, it&apos;s just not okay --
&gt; the code structure implies that the compiler even warned you.

If I wrote &quot;return &amp;family&quot; then the compiler warned me. But if I made it like this, it didn&apos;t complain (maybe an issue in our gcc version). Anyway, I made some tests and it works as it. It may be a stroke of luck and it will not work another time.

&gt; Once again, don&apos;t return pointers to locals -- you&apos;re far better off just using
&gt; out parameters

In fact, it should be better. :)
Thanks for the advices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141847</commentid>
    <comment_count>21</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-21 01:42:38 -0700</bug_when>
    <thetext>&gt; If I wrote &quot;return &amp;family&quot; then the compiler warned me. But if I made it like
&gt; this, it didn&apos;t complain (maybe an issue in our gcc version). Anyway, I made
&gt; some tests and it works as it. It may be a stroke of luck and it will not work
&gt; another time.

GCC was warning you precisely because return the address of a local is unsafe -- it may &quot;work&quot; but it is fundamentally unsound.  What your patch does is deliberately circumvent gcc attempting to tell you that your code is broken.

take (for example):

int* foo() {
    int bar = 3;
    return &amp;bar;
}

int main() {
   int* f = foo();
   printf(&quot;%d\n&quot;, *f);
   printf(&quot;%d\n&quot;, *f);
   return 0;
}

You will (probably) get two different numbers output, because you have returned the address of a local, eg. a pointer to some arbitrary location on the stack.  The next function you call uses the same section of the stack for whatever it needs to do and the value you thought you were pointing to is now gone.

In general when gcc warns you against do something it&apos;s better to not do it than to just try and make the warning go away :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141882</commentid>
    <comment_count>22</comment_count>
      <attachid>34895</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-21 09:16:29 -0700</bug_when>
    <thetext>Comment on attachment 34895
Adding three font-specific files to WebCore.

storage/database-lock-after-reload.html -&gt; failed

I think that test may be flakey.  adding back to cq.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141935</commentid>
    <comment_count>23</comment_count>
      <attachid>34895</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-21 12:16:29 -0700</bug_when>
    <thetext>Comment on attachment 34895
Adding three font-specific files to WebCore.

Clearing flags on attachment: 34895

Committed r47637: &lt;http://trac.webkit.org/changeset/47637&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141936</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-21 12:16:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141947</commentid>
    <comment_count>25</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-21 13:04:43 -0700</bug_when>
    <thetext>Except the patches have not all been landed -- one was r-&apos;d, and it was not obsoleted  because &apos;lo the patch you landed, and the r-&apos;d patch were different parts of this bug.

Please do not just automatically close bugs if there are unlanded non-obsolete attachments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142058</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-21 17:12:09 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Except the patches have not all been landed -- one was r-&apos;d, and it was not
&gt; obsoleted  because &apos;lo the patch you landed, and the r-&apos;d patch were different
&gt; parts of this bug.
&gt; 
&gt; Please do not just automatically close bugs if there are unlanded non-obsolete
&gt; attachments.

bug 28230 covers some of this.  Historically I made bugzilla-tool more aggressive because people don&apos;t always obsolete patches when they post a new one, so it was never closing bugs, even though the bug was &quot;done&quot;.

I&apos;m happy to make it less-aggressive about closing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142551</commentid>
    <comment_count>27</comment_count>
      <attachid>38538</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-25 02:56:38 -0700</bug_when>
    <thetext>Created attachment 38538
Adding four font-specific files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142552</commentid>
    <comment_count>28</comment_count>
      <attachid>38538</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-25 03:03:17 -0700</bug_when>
    <thetext>Comment on attachment 38538
Adding four font-specific files to WebCore.

For the sake of those of us who aren&apos;t familiar with haiku, make the font_family argument to findMatchingFontFamily a pointer, and dereference appropriately.  Also replace all uses of strcpy with strncpy (never use strcpy -- most modern analysis tools will flag any use of strcpy as being bad).

I don&apos;t know haiku idioms but
m_font-&gt;SetFamilyAndStyle(fontFamily, 0);
seems superfluous as it&apos;s immediately followed by
m_font-&gt;SetFamilyAndStyle(fontFamily, *fontStyle);

Fix those up and it will be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142553</commentid>
    <comment_count>29</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-25 03:17:15 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 38538 [details])
&gt; For the sake of those of us who aren&apos;t familiar with haiku, make the
&gt; font_family argument to findMatchingFontFamily a pointer, and dereference
&gt; appropriately. 

I tried, but it &quot;segfault&quot; when making str(n)py(*family…);

&gt; Also replace all uses of strcpy with strncpy (never use strcpy
&gt; -- most modern analysis tools will flag any use of strcpy as being bad).

I used strncpy for the copy which may be &quot;dangerous&quot;. Should I do the same even if the source string is known (and will not exceed 64)?

&gt; I don&apos;t know haiku idioms but
&gt; m_font-&gt;SetFamilyAndStyle(fontFamily, 0);
&gt; seems superfluous as it&apos;s immediately followed by
&gt; m_font-&gt;SetFamilyAndStyle(fontFamily, *fontStyle);

Strange, I thought I passed m_font to findMatchingFontStyle(), but in fact not. So indeed this should be removed. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142567</commentid>
    <comment_count>30</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-25 05:53:12 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; (From update of attachment 38538 [details] [details])
&gt; &gt; For the sake of those of us who aren&apos;t familiar with haiku, make the
&gt; &gt; font_family argument to findMatchingFontFamily a pointer, and dereference
&gt; &gt; appropriately. 
&gt; 
&gt; I tried, but it &quot;segfault&quot; when making str(n)py(*family…);

It seems normal… I must initialize the family before using it (Silly me). So I put a &quot;static_cast&lt;font_family*&gt;(malloc(sizeof(font_family)));&quot; when creating the font_family pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142574</commentid>
    <comment_count>31</comment_count>
      <attachid>38545</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-25 08:19:58 -0700</bug_when>
    <thetext>Created attachment 38545
Adding four font-specific files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142703</commentid>
    <comment_count>32</comment_count>
      <attachid>38545</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-25 14:50:57 -0700</bug_when>
    <thetext>Comment on attachment 38545
Adding four font-specific files to WebCore.


&gt; +    font_family* fontFamily = static_cast&lt;font_family*&gt;(malloc(sizeof(font_family)));
&gt; +    findMatchingFontFamily(familyName, fontFamily);

You are leaking the fontFamily allocation, this should be done as
&gt; +    font_family fontFamily;
&gt; +    findMatchingFontFamily(familyName, &amp;fontFamily);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142965</commentid>
    <comment_count>33</comment_count>
      <attachid>38638</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-26 13:59:53 -0700</bug_when>
    <thetext>Created attachment 38638
Adding four font-specific files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142967</commentid>
    <comment_count>34</comment_count>
      <attachid>38638</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-26 14:09:35 -0700</bug_when>
    <thetext>Comment on attachment 38638
Adding four font-specific files to WebCore.

Not needed:
+#include &quot;NotImplemented.h&quot;

I probably wouldn&apos;t have bothered to maintain these copyrights after such extensive modification:
2  * Copyright (C) 2006 Apple Computer, Inc.
 3  * Copyright (C) 2006 Zack Rusin &lt;zack@kde.org&gt;
 4  * Copyright (C) 2006 Dirk Mueller &lt;mueller@kde.org&gt;
 5  * Copyright (C) 2006 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
 6  * Copyright (C) 2007 Ryan Leavengood &lt;leavengood@gmail.com&gt;
 7  * Copyright (C) 2009 Maxime Simon &lt;simon.maxime@gmail.com&gt;

This:
115     if (m_font)
 116         return m_font-&gt;Spacing() == B_FIXED_SPACING;
 117 
 118     return false;
Should just be:

return m_font &amp;&amp; m_font-&gt;Spacing() == B_FIXED_SPACING;

Why is this needed?
09     if (m_font &amp;&amp; m_font != hashTableDeletedFontValue())
 110         m_font = 0;
Seems useless in the destructor.  setting the raw pointer to 0 does nothing. :)

So you&apos;re leaking m_font.  I think you meant to make it an OwnPtr&lt;BFont&gt;

This is going to need at least one more round of review since there were still obvious leaks in this one. :(  Do you all have any way to check for leaks on Haiku?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142968</commentid>
    <comment_count>35</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-08-26 14:16:59 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; 
&gt; I probably wouldn&apos;t have bothered to maintain these copyrights after such
&gt; extensive modification:
&gt; 2  * Copyright (C) 2006 Apple Computer, Inc.
&gt;  3  * Copyright (C) 2006 Zack Rusin &lt;zack@kde.org&gt;
&gt;  4  * Copyright (C) 2006 Dirk Mueller &lt;mueller@kde.org&gt;
&gt;  5  * Copyright (C) 2006 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
&gt;  6  * Copyright (C) 2007 Ryan Leavengood &lt;leavengood@gmail.com&gt;
&gt;  7  * Copyright (C) 2009 Maxime Simon &lt;simon.maxime@gmail.com&gt;

I was always pretty worried about this in my original port as copyright stuff can be pretty tricky, especially in the US. But if you think it is OK, I say Maxime can probably remove most of those (maybe even me.)
 
&gt; This is going to need at least one more round of review since there were still
&gt; obvious leaks in this one. :(  Do you all have any way to check for leaks on
&gt; Haiku?

I at least tried rigging up a LeakChecker.h that overrode new and delete for our work on the new browser, but it didn&apos;t work that well in my testing. We could definitely work to improve this area though, as memory leaking in browsers has always really, really annoyed me. It wouldn&apos;t do to have my browser so leaky!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142970</commentid>
    <comment_count>36</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-26 14:24:05 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; I was always pretty worried about this in my original port as copyright stuff
&gt; can be pretty tricky, especially in the US. But if you think it is OK, I say
&gt; Maxime can probably remove most of those (maybe even me.)

I am not a lawyer, so certainly my comments should not be construed as legal advice.  But looking at this case, there is nothing interesting in the header that you actually copied.  It would be impossible for a reviewer to tell if you copied that or wrote it yourself.

My general rule of thumb is that if I am copying any code of substance I bring along copyrights.  Otherwise new files like this are mostly all typed by hand anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143088</commentid>
    <comment_count>37</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-27 02:16:44 -0700</bug_when>
    <thetext>&gt; I at least tried rigging up a LeakChecker.h that overrode new and delete for
&gt; our work on the new browser, but it didn&apos;t work that well in my testing. We
&gt; could definitely work to improve this area though, as memory leaking in
&gt; browsers has always really, really annoyed me. It wouldn&apos;t do to have my
&gt; browser so leaky!

I tried using LeakTracker.h with HaikuLauncher, and it doesn&apos;t work at all. It didn&apos;t even compile. And in fact, memory leaking is really annoying. :-/
( In OSX it&apos;s easier as they have a tool named leaks which detect them. )

Actually, I can&apos;t delete the m_font as it. (because of the copy-constructor).
Eric, you suggested using OwPtr, why not RefPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143090</commentid>
    <comment_count>38</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-27 02:35:38 -0700</bug_when>
    <thetext>&gt; I tried using LeakTracker.h with HaikuLauncher, and it doesn&apos;t work at all. It
&gt; didn&apos;t even compile.

Sorry, the fault was mine. I used the wrong #ifdef … #endif.
And even if I didn&apos;t delete the font, it didn&apos;t detect any leak… I supposed this tool isn&apos;t perfect. :)
We would really need a tool like valgrind or leaks in Haiku. Especially for our WebKit port and the browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143555</commentid>
    <comment_count>39</comment_count>
      <attachid>38793</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-30 08:46:55 -0700</bug_when>
    <thetext>Created attachment 38793
Adding three font-specific files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143556</commentid>
    <comment_count>40</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-30 08:49:34 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=38793) [details]
&gt; Adding three font-specific files to WebCore.

As the three other files than FontPlatformDataHaiku.cpp are mostly correct I fill a patch for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144428</commentid>
    <comment_count>41</comment_count>
      <attachid>38793</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 01:34:04 -0700</bug_when>
    <thetext>Comment on attachment 38793
Adding three font-specific files to WebCore.

Yay for small patches!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144439</commentid>
    <comment_count>42</comment_count>
      <attachid>38793</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 01:50:40 -0700</bug_when>
    <thetext>Comment on attachment 38793
Adding three font-specific files to WebCore.

Clearing flags on attachment: 38793

Committed r48006: &lt;http://trac.webkit.org/changeset/48006&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144440</commentid>
    <comment_count>43</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 01:50:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34421</attachid>
            <date>2009-08-09 07:48:19 -0700</date>
            <delta_ts>2009-08-11 07:44:53 -0700</delta_ts>
            <desc>Patch to add four font-specific files to WebCore/platform/graphics/haiku/.</desc>
            <filename>Adding-four-font-specific-files-to-WebCore.patch</filename>
            <type>text/plain</type>
            <size>14545</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyNTc2NjkwN2ZlYWRiYjA0NDdlODRmNjlmNTljYjUyM2Y0YjcyNGJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFN1biwgOSBBdWcgMjAwOSAxNjo0Mzo1MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGluZyBmb3VyIGZvbnQtc3BlY2lmaWMgZmlsZXMgdG8gV2ViQ29yZS4KCi0tLQogV2ViQ29yZS9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsrKysKIC4u
Li9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAgICAgIHwgICA1MCAr
KysrKysrCiAuLi4vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICAgICAg
ICB8ICAgNDQgKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0
Zm9ybURhdGEuaCB8ICAgODQgKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9Gb250UGxh
dGZvcm1EYXRhSGFpa3UuY3BwICAgICAgIHwgIDE1NiArKysrKysrKysrKysrKysrKysrKwogNSBm
aWxlcyBjaGFuZ2VkLCAzNjYgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGEuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0
YUhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMzFiYTA0OC4uZDlkOWVlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAwOS0wOC0wOSAg
TWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyBmb3VyIGZvbnQt
c3BlY2lmaWMgZmlsZXMgdG8gV2ViQ29yZToKKyAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAsIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCwKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0
YS5oIGFuZCBGb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzMQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OmJvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
b2JsaXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoVGFibGVE
ZWxldGVkRm9udFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
UGxhdGZvcm1EYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6aXNGaXhlZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlv
bik6CisKIDIwMDktMDgtMDggIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2QyYmI3Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEoKQoreworfQor
CitGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURh
dGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRSZW5kZXJpbmdNb2RlKQor
eworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKHNpemUsIGJvbGQsIGl0YWxpYyk7Cit9CisK
K3N0YXRpYyB2b2lkIHJlbGVhc2VEYXRhKHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGljX2Nhc3Q8
U2hhcmVkQnVmZmVyKj4oZGF0YSktPmRlcmVmKCk7Cit9CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCit7
CisgICAgLy8gRklYTUU6IFdlIG5lZWQgc3VwcG9ydCBpbiBIYWlrdSB0byByZWFkIGZvbnRzIGZy
b20gbWVtb3J5IHRvIGltcGxlbWVudCB0aGlzLgorICAgIHJldHVybiAwOworfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmQ0MTQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGFfaAorI2RlZmluZSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKworI2luY2x1ZGUg
IkZvbnRSZW5kZXJpbmdNb2RlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CisgICAgY2xh
c3MgU2hhcmVkQnVmZmVyOworCisgICAgc3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBO
b25jb3B5YWJsZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoKSB7IH0KKyAgICAgICAgICAgIH5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCk7CisK
KyAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJp
bmdNb2RlKTsKKyAgICB9OworCisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcik7CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9y
bURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0
YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzRhOWEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURh
dGEuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGlu
dGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5
IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQu
Y3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFfSAor
I2RlZmluZSBGb250UGxhdGZvcm1EYXRhX0gKKworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8aW50ZXJmYWNlL0ZvbnQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7Cisg
ICAgcHVibGljOgorICAgICAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkKKyAgICAgICAgICAgIDogbV9mb250KGhhc2hUYWJsZURlbGV0ZWRGb250VmFs
dWUoKSkKKyAgICAgICAgICAgIHsgfQorCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoKQorICAg
ICAgICAgICAgOiBtX2ZvbnQoMCkKKyAgICAgICAgICAgIHsgfQorCisgICAgICAgIEZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHkpOworICAgICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9v
bCBvYmxpcXVlKTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJik7CisKKyAgICAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKKworICAgICAgICBCRm9udCog
Zm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQorCisgICAgICAgIGJvb2wgaXNGaXhlZFBp
dGNoKCk7CisgICAgICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICAgICAgYm9vbCBib2xkKCkgY29uc3QgeyByZXR1cm4gbV9ib2xkOyB9CisgICAgICAgIGJvb2wg
b2JsaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JsaXF1ZTsgfQorCisgICAgICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0OworCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikg
Y29uc3Q7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0OworI2VuZGlmCisKKyAgICAgICAgQkZvbnQqIG1fZm9udDsKKyAgICAgICAgZmxvYXQgbV9z
aXplOworICAgICAgICBib29sIG1fYm9sZDsKKyAgICAgICAgYm9vbCBtX29ibGlxdWU7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgQkZvbnQqIGhhc2hUYWJsZURlbGV0ZWRGb250VmFs
dWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJGb250Kj4oLTEpOyB9CisgICAgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTUxODkKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5j
cHAKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50
ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkg
YW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5j
cHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgor
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSA8Rm9udC5oPgorI2luY2x1ZGUgPHN1cHBvcnQvU3RyaW5nLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWUpCisgICAgOiBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCkpCisgICAgLCBtX2JvbGQoZm9udERlc2NyaXB0aW9uLndlaWdodCgp
ID09IEZvbnRXZWlnaHRCb2xkKQorICAgICwgbV9vYmxpcXVlKGZvbnREZXNjcmlwdGlvbi5pdGFs
aWMoKSkKK3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9udF9mYW1pbHkgZmFtaWx5
OworCisgICAgaWYgKEJGb250KCkuU2V0RmFtaWx5QW5kU3R5bGUoQlN0cmluZyhmYW1pbHlOYW1l
LnN0cmluZygpKS5TdHJpbmcoKSwgMCkgPT0gQl9PSykgeworICAgICAgICBzdHJjcHkoZmFtaWx5
LCBCU3RyaW5nKGZhbWlseU5hbWUuc3RyaW5nKCkpLlN0cmluZygpKTsKKyAgICAgICAgZm91bmQg
PSB0cnVlOworICAgIH0KKworICAgIC8vIElmIG5vIGZvbnQgZmFtaWx5IGlzIGZvdW5kIGZvciB0
aGUgZ2l2ZW4gbmFtZSwgd2UgdXNlIGEgZ2VuZXJpYyBmb250LgorICAgIGlmICghZm91bmQpIHsK
KyAgICAgICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOworCisg
ICAgICAgIGlmICh0eXBlID09IEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHkKKyAgICAgICAg
ICAgIHx8IEJTdHJpbmcoZmFtaWx5TmFtZS5zdHJpbmcoKSkuRmluZEZpcnN0KCJTYW5zIikgIT0g
Ql9FUlJPUikKKyAgICAgICAgICAgIHN0cmNweShmYW1pbHksICJEZWphVnUgU2FucyIpOworICAg
ICAgICBlbHNlIGlmICh0eXBlID09IEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5Cisg
ICAgICAgICAgICAgICAgIHx8IEJTdHJpbmcoZmFtaWx5TmFtZS5zdHJpbmcoKSkuRmluZEZpcnN0
KCJTZXJpZiIpICE9IEJfRVJST1IpCisgICAgICAgICAgICBzdHJjcHkoZmFtaWx5LCAiRGVqYVZ1
IFNlcmlmIik7CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRm9udERlc2NyaXB0aW9uOjpNb25v
c3BhY2VGYW1pbHkKKyAgICAgICAgICAgICAgICAgfHwgQlN0cmluZyhmYW1pbHlOYW1lLnN0cmlu
ZygpKS5GaW5kRmlyc3QoIk1vbm8iKSAhPSBCX0VSUk9SKQorICAgICAgICAgICAgc3RyY3B5KGZh
bWlseSwgIkRlamFWdSBNb25vIik7CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRm9udERlc2Ny
aXB0aW9uOjpTdGFuZGFyZEZhbWlseSkKKyAgICAgICAgICAgIHN0cmNweShmYW1pbHksICJEZWph
VnUgU2VyaWYiKTsKKyAgICAgICAgZWxzZSAvLyBUaGlzIGlzIHRoZSBmYWxsYmFjayBmb250Lgor
ICAgICAgICAgICAgc3RyY3B5KGZhbWlseSwgIkRlamFWdSBTYW5zIik7CisgICAgfQorCisgICAg
bV9mb250ID0gbmV3IEJGb250KCk7CisgICAgbV9mb250LT5TZXRGYW1pbHlBbmRTdHlsZShmYW1p
bHksIDApOworICAgIG1fZm9udC0+U2V0U2l6ZShtX3NpemUpOworCisgICAgaW50MzIgbnVtU3R5
bGVzID0gY291bnRfZm9udF9zdHlsZXMoZmFtaWx5KTsKKyAgICBmb250X3N0eWxlIGZvbnRTdHls
ZTsKKyAgICB1aW50MzIgZmxhZ3M7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVN0eWxl
czsgaSsrKSB7CisgICAgICAgIGlmIChnZXRfZm9udF9zdHlsZShmYW1pbHksIGksICZmb250U3R5
bGUsICZmbGFncykgPT0gQl9PSykgeworICAgICAgICAgICAgU3RyaW5nIHN0eWxlKGZvbnRTdHls
ZSk7CisgICAgICAgICAgICBpZiAoKG1fb2JsaXF1ZSAmJiBtX2JvbGQpICYmIChzdHlsZSA9PSAi
Qm9sZEl0YWxpYyIgfHwgc3R5bGUgPT0gIkJvbGQgT2JsaXF1ZSIpKQorICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmICgobV9vYmxpcXVlICYmICFtX2JvbGQpICYmIChzdHls
ZSA9PSAiSXRhbGljIiB8fCBzdHlsZSA9PSAiT2JsaXF1ZSIpKQorICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGlmICgoIW1fb2JsaXF1ZSAmJiBtX2JvbGQpICYmIHN0eWxlID09
ICJCb2xkIikKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKCFtX29i
bGlxdWUgJiYgIW1fYm9sZCkgJiYgKHN0eWxlID09ICJSb21hIiB8fCBzdHlsZSA9PSAiQm9vayIK
KyAgICAgICAgICAgICAgICB8fCBzdHlsZSA9PSAiQ29uZGVuc2VkIiB8fCBzdHlsZSA9PSAiUmVn
dWxhciIgfHwgc3R5bGUgPT0gIk1lZGl1bSIpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgbV9mb250LT5TZXRGYW1pbHlBbmRTdHlsZShm
YW1pbHksIGZvbnRTdHlsZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCisgICAgOiBtX2ZvbnQoMCkK
KyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9ib2xkKGJvbGQpCisgICAgLCBtX29ibGlxdWUo
b2JsaXF1ZSkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKK3sKKyAgICAqdGhpcyA9IG90aGVyOworfQorCitG
b250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgaWYgKG1fZm9udCAm
JiBtX2ZvbnQgIT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQorICAgICAgICBkZWxldGUg
bV9mb250OworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCit7Cisg
ICAgaWYgKG1fZm9udCkKKyAgICAgICAgcmV0dXJuIG1fZm9udC0+U3BhY2luZygpID09IEJfRklY
RURfU1BBQ0lORzsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordW5zaWduZWQgRm9udFBsYXRm
b3JtRGF0YTo6aGFzaCgpIGNvbnN0Cit7CisgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsg
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fZm9udCkgfTsKKyAgICByZXR1cm4gU3RyaW5n
SW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNp
emVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udDsKK30KKworYm9vbCBGb250UGxhdGZv
cm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Zm9udCA9PSBoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCk7Cit9CisKKyNpZm5kZWYgTkRFQlVH
CitTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0g
CjEuNi4zLjIKCg==
</data>
<flag name="review"
          id="18599"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34422</attachid>
            <date>2009-08-09 07:57:28 -0700</date>
            <delta_ts>2009-08-11 08:44:30 -0700</delta_ts>
            <desc>Patch to add four other font-specific files to WebCore/platform/graphics/haiku/.</desc>
            <filename>Adding-four-font-specific-files-to-WebCore-platform-.patch</filename>
            <type>text/plain</type>
            <size>16726</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBmMWZlMTc3NDI1YTc2NDBjMjM2MzNmMTk2YjVjOGI0YTIyZDg5YTY5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFN1biwgOSBBdWcgMjAwOSAxNjo1NTo0MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGluZyBmb3VyIGZvbnQtc3BlY2lmaWMgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDM1ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250Q2FjaGVIYWlrdS5jcHAgfCAgIDg3ICsrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcCAgfCAgIDQ5ICsrKysrKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAgICAgICB8ICAxMTYgKysr
KysrKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1
LmNwcCAgICAgICAgIHwgIDEwOSArKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwg
Mzk2IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnREYXRhSGFpa3Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFiYTA0OC4uZWUxYTEzMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzOCBAQAorMjAwOS0wOC0wOSAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbSGFp
a3VdIEFkZGluZyBmb3VyIGZvbnQtc3BlY2lmaWMgZmlsZXMgdG8gV2ViQ29yZToKKyAgICAgICAg
Rm9udENhY2hlSGFpa3UuY3BwLCBGb250RGF0YUhhaWt1LmNwcCwgRm9udEhhaWt1LmNwcAorICAg
ICAgICBhbmQgU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTMxCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpn
ZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpn
ZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0VHJhaXRzSW5GYW1pbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnREYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpjb250
YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoY2hhclVuaWNvZGVUb1V0ZjgpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxl
Rm9udERhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxs
Q2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpjb250YWlu
c0NoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWlu
ZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgpOgorCiAyMDA5LTA4LTA4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWRjZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAKQEAgLTAsMCAr
MSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdv
b2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKK30KKworY29uc3Qg
U2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQoreworICAg
IEZvbnRQbGF0Zm9ybURhdGEgZGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250LmZhbWls
eSgpLmZhbWlseSgpKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEoJmRhdGEpOworfQor
CitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQoreworCisgICAg
Y29uc3QgQkZvbnQqIGRlZmF1bHRGb250ID0gYmVfcGxhaW5fZm9udDsKKyAgICBpZiAoZm9udERl
c2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZh
bWlseSkKKyAgICAgICAgZGVmYXVsdEZvbnQgPSBiZV9maXhlZF9mb250OworICAgIGVsc2UgaWYg
KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBGb250V2VpZ2h0Qm9sZCkKKyAgICAgICAgZGVm
YXVsdEZvbnQgPSBiZV9ib2xkX2ZvbnQ7CisKKyAgICBmb250X2ZhbWlseSBmYW1pbHk7CisgICAg
ZGVmYXVsdEZvbnQtPkdldEZhbWlseUFuZFN0eWxlKCZmYW1pbHksIDApOworICAgIHN0YXRpYyBB
dG9taWNTdHJpbmcgc19EZWZhdWx0U3RyKGZhbWlseSk7CisKKyAgICByZXR1cm4gZ2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIHNfRGVmYXVsdFN0cik7Cit9CisKK0Zv
bnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwg
ZmFtaWx5KTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnREYXRhSGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTNlZmZiCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcApA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8
bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxo
YXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxz
dGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRm9udERhdGE6OmNvbnRh
aW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvRm9udEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9u
dEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzNhZDY0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFp
a3UuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4g
TGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisj
aW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNs
dWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPGludGVyZmFjZS9Gb250Lmg+CisjaW5j
bHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKKy8vIEZpeCB0ZW1wIHJvdXRp
bmUgdG8gY2hlY2sgdGhlIGNvbnZlcnNpb24gd29ya3MsIHBsZWFzZSBtb3ZlIGl0IEFTQVAKK2lu
dCBjaGFyVW5pY29kZVRvVXRmOCh1bnNpZ25lZCBzaG9ydCBnbHlwaCwgY2hhciogb3V0KQorewor
ICAgIGludCBpID0gMDsKKworICAgIGlmIChnbHlwaCA8IDB4MDA4MCkKKyAgICAgICAgb3V0W2kr
K10gPSBzdGF0aWNfY2FzdDxjaGFyPihnbHlwaCk7CisgICAgZWxzZSBpZiAoZ2x5cGggPCAweDA4
MDApIHsgLy90d28gYnl0ZXMKKyAgICAgICAgb3V0W2krK10gPSAweGMwIHwgKGdseXBoID4+IDYp
OworICAgICAgICBvdXRbaSsrXSA9IDB4ODAgfCAoZ2x5cGggJiAweDNGKTsKKyAgICB9IGVsc2Ug
aWYgKGdseXBoID4gMHgwODAwKSB7IC8vMyBieXRlcworICAgICAgICBvdXRbaSsrXSA9IDB4ZTAg
fCAoZ2x5cGggPj4gMTIpOworICAgICAgICBvdXRbaSsrXSA9IDB4ODAgfCAoKGdseXBoID4+IDYp
ICYgMHgzRik7CisgICAgICAgIG91dFtpKytdID0gMHg4MCB8IChnbHlwaCAmIDB4M0YpOworICAg
IH0KKworICAgIG91dFtpXSA9ICdcMCc7CisgICAgcmV0dXJuIGk7Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRl
eHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
K3sKKyAgICBDb2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCk7CisgICAg
QlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxCVmlldyo+KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkpOworICAgIEJGb250KiBtX2ZvbnQgPSBzdGF0aWNfY2FzdDxCRm9udCo+KGZv
bnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CisKKyAgICBncmFwaGljc0NvbnRleHQtPnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICB2aWV3LT5TZXRIaWdo
Q29sb3IoY29sb3IpOworICAgIHZpZXctPlNldEZvbnQobV9mb250KTsKKworICAgIEdseXBoQnVm
ZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVm
ZmVyLmdseXBocyhmcm9tKSk7CisgICAgZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHsKKyAgICAgICAgY2hhciBvdXRbNF07
CisgICAgICAgIGNoYXJVbmljb2RlVG9VdGY4KGdseXBoc1tpXSwgb3V0KTsKKworICAgICAgICB2
aWV3LT5EcmF3U3RyaW5nKG91dCwgc2l6ZW9mKG91dCksIEJQb2ludChvZmZzZXQsIHBvaW50Lnko
KSkpOworICAgICAgICBvZmZzZXQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBpKTsK
KyAgICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFs
bGJhY2tGb250cykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAz
OworfQorCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50LCBpbnQpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2ludCBGb250
OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQsIGJv
b2wpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44YWVkYTRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcApAQCAtMCwwICsxLDEw
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSA8UmVjdC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNs
dWRlIDx1bmljb2RlL3Vub3JtLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIEJGb250KiBmb250ID0gbV9wbGF0
Zm9ybURhdGEuZm9udCgpOworICAgIGlmIChmb250KSB7CisgICAgICAgIGZvbnRfaGVpZ2h0IGhl
aWdodDsKKyAgICAgICAgZm9udC0+R2V0SGVpZ2h0KCZoZWlnaHQpOworICAgICAgICBtX2FzY2Vu
dCA9IHN0YXRpY19jYXN0PGludD4oaGVpZ2h0LmFzY2VudCk7CisgICAgICAgIG1fZGVzY2VudCA9
IHN0YXRpY19jYXN0PGludD4oaGVpZ2h0LmRlc2NlbnQpOworICAgICAgICBtX2xpbmVTcGFjaW5n
ID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQ7CisgICAgICAgIG1feEhlaWdodCA9IGhlaWdodC5hc2Nl
bnQgKiAwLjU2ZjsgLy8gSGFjayB0YWtlbiBmcm9tIHRoZSB3aW4gcG9ydC4KKyAgICAgICAgbV9s
aW5lR2FwID0gaGVpZ2h0LmxlYWRpbmc7CisgICAgfQorfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMC5mOwor
ICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOworICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK3Zv
aWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgZGVsZXRlIG1fc21h
bGxDYXBzRm9udERhdGE7CisgICAgbV9zbWFsbENhcHNGb250RGF0YSA9IDA7Cit9CisKK1NpbXBs
ZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3NtYWxsQ2Fw
c0ZvbnREYXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZSgwLjcw
ZiAqIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CisgICAgICAgIGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEqIHBkYXRhID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1p
bHkoKS5mYW1pbHkoKSk7CisgICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcgU2ltcGxl
Rm9udERhdGEoKnBkYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7
Cit9CisKK2Jvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2Ugd2ls
bCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIHRvIGxvYWQgbm9uLUFTQ0lJIGVuY29kaW5nIHNpdGVz
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKQorICAgICAgICBtX3RyZWF0
QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpLT5Jc0ZpeGVkKCk7CisgICAgZWxz
ZQorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7Cit9CisKK2Zsb2F0IFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7Cisg
ICAgY29uc3QgY2hhciBjaGFyQXJyYXlbMV0gPSB7IGdseXBoIH07CisgICAgZmxvYXQgZXNjYXBl
bWVudHNbMV07CisKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEuZm9udCgpKSB7CisgICAgICAgIG1f
cGxhdGZvcm1EYXRhLmZvbnQoKS0+R2V0RXNjYXBlbWVudHMoY2hhckFycmF5LCAxLCBlc2NhcGVt
ZW50cyk7CisgICAgICAgIHJldHVybiBlc2NhcGVtZW50c1swXSAqIG1fcGxhdGZvcm1EYXRhLmZv
bnQoKS0+U2l6ZSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKLS0gCjEuNi4zLjIKCg==
</data>
<flag name="review"
          id="18600"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34556</attachid>
            <date>2009-08-11 07:44:53 -0700</date>
            <delta_ts>2009-08-15 08:03:42 -0700</delta_ts>
            <desc>Patch to add four font-specific files to WebCore/platform/graphics/haiku/.</desc>
            <filename>Adding-four-font-specific-files-to-WebCore.patch</filename>
            <type>text/plain</type>
            <size>13911</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAzMWJiMjQyZmM5MWJkMGYxZjAzNmFmZjQ5M2U1MWY1ZGQ0ZDU2ZDYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMTEgQXVnIDIwMDkgMTY6NDE6MjggKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRpbmcgZm91ciBmb250LXNwZWNpZmljIGZpbGVzIHRvIFdlYkNvcmUuCgotLS0KIFdlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArKysrKwog
Li4uL2dyYXBoaWNzL2hhaWt1L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwICAgICAgfCAgIDUw
ICsrKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggICAg
ICAgIHwgICA0NCArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBs
YXRmb3JtRGF0YS5oIHwgICA4MSArKysrKysrKysrKwogLi4uL2dyYXBoaWNzL2hhaWt1L0ZvbnRQ
bGF0Zm9ybURhdGFIYWlrdS5jcHAgICAgICAgfCAgMTQ3ICsrKysrKysrKysrKysrKysrKysrCiA1
IGZpbGVzIGNoYW5nZWQsIDM1NCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1E
YXRhSGFpa3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMDI1NWMzLi4zNzVhNmY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDA5LTA4LTEx
ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtIYWlrdV0gQWRkaW5nIGZvdXIgZm9u
dC1zcGVjaWZpYyBmaWxlcyB0byBXZWJDb3JlOgorICAgICAgICBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcCwgRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oLAorICAgICAgICBGb250UGxhdGZvcm1E
YXRhLmggYW5kIEZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTMxCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Ym9sZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpvYmxpcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2hUYWJs
ZURlbGV0ZWRGb250VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRQbGF0Zm9ybURhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0
aW9uKToKKwogMjAwOS0wOC0xMSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChidWlsZCBmaXgpLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkMmJiNwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhKCkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpm
b250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVu
ZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBp
dGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lkKiBkYXRhKQoreworICAg
IHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigpOworfQorCitGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZl
ciogYnVmZmVyKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHN1cHBvcnQgaW4gSGFpa3UgdG8g
cmVhZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gMDsK
K30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jNWE4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9o
CisKKyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZvcm1E
YXRhOworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKKworICAgIHN0cnVjdCBGb250Q3VzdG9tUGxh
dGZvcm1EYXRhIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSgpIHsgfQorICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwor
CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdN
b2RlKTsKKyAgICB9OworCisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1
c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYWI4ZQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1E
YXRhX0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGludGVyZmFjZS9G
b250Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURh
dGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fZm9udChoYXNoVGFibGVEZWxldGVk
Rm9udFZhbHVlKCkpCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250UGxhdGZvcm1EYXRh
KCkKKyAgICAgICAgICAgIDogbV9mb250KDApCisgICAgICAgICAgICB7IH0KKworICAgICAgICBG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgb2JsaXF1ZSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpOworCisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAgICAg
QkZvbnQqIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKworICAgICAgICBib29sIGlz
Rml4ZWRQaXRjaCgpOworICAgICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisgICAgICAgIGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAgICAg
ICBib29sIG9ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX29ibGlxdWU7IH0KKworICAgICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpIGNvbnN0OworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBTdHJpbmcgZGVzY3JpcHRp
b24oKSBjb25zdDsKKyNlbmRpZgorCisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAgICAgIGZs
b2F0IG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2JvbGQ7CisgICAgICAgIGJvb2wgbV9vYmxpcXVl
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIEJGb250KiBoYXNoVGFibGVEZWxldGVk
Rm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCRm9udCo+KC0xKTsgfQorICAg
IH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzM0MjI3Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRh
SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3Mg
PHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11
ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2
ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxh
bmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2lt
b24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSA8Rm9udC5oPgorI2luY2x1ZGUgPHN1cHBvcnQvU3RyaW5nLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eU5hbWUpCisgICAgOiBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29t
cHV0ZWRTaXplKCkpCisgICAgLCBtX2JvbGQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID09IEZv
bnRXZWlnaHRCb2xkKQorICAgICwgbV9vYmxpcXVlKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkK
K3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9udF9mYW1pbHkgZmFtaWx5OworCisg
ICAgaWYgKEJGb250KCkuU2V0RmFtaWx5QW5kU3R5bGUoQlN0cmluZyhmYW1pbHlOYW1lLnN0cmlu
ZygpKS5TdHJpbmcoKSwgMCkgPT0gQl9PSykgeworICAgICAgICBzdHJjcHkoZmFtaWx5LCBCU3Ry
aW5nKGZhbWlseU5hbWUuc3RyaW5nKCkpLlN0cmluZygpKTsKKyAgICAgICAgZm91bmQgPSB0cnVl
OworICAgIH0KKworICAgIC8vIElmIG5vIGZvbnQgZmFtaWx5IGlzIGZvdW5kIGZvciB0aGUgZ2l2
ZW4gbmFtZSwgd2UgdXNlIGEgZ2VuZXJpYyBmb250LgorICAgIGlmICghZm91bmQpIHsKKyAgICAg
ICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOworCisgICAgICAg
IGlmIChCU3RyaW5nKGZhbWlseU5hbWUuc3RyaW5nKCkpLkZpbmRGaXJzdCgiU2FucyIpICE9IEJf
RVJST1IpCisgICAgICAgICAgICBzdHJjcHkoZmFtaWx5LCAiRGVqYVZ1IFNhbnMiKTsKKyAgICAg
ICAgZWxzZSBpZiAoQlN0cmluZyhmYW1pbHlOYW1lLnN0cmluZygpKS5GaW5kRmlyc3QoIlNlcmlm
IikgIT0gQl9FUlJPUikKKyAgICAgICAgICAgIHN0cmNweShmYW1pbHksICJEZWphVnUgU2VyaWYi
KTsKKyAgICAgICAgZWxzZSBpZiAoQlN0cmluZyhmYW1pbHlOYW1lLnN0cmluZygpKS5GaW5kRmly
c3QoIk1vbm8iKSAhPSBCX0VSUk9SKQorICAgICAgICAgICAgc3RyY3B5KGZhbWlseSwgIkRlamFW
dSBNb25vIik7CisgICAgICAgIGVsc2UgLy8gVGhpcyBpcyB0aGUgZmFsbGJhY2sgZm9udC4KKyAg
ICAgICAgICAgIHN0cmNweShmYW1pbHksICJEZWphVnUgU2FucyIpOworICAgIH0KKworICAgIG1f
Zm9udCA9IG5ldyBCRm9udCgpOworICAgIG1fZm9udC0+U2V0RmFtaWx5QW5kU3R5bGUoZmFtaWx5
LCAwKTsKKyAgICBtX2ZvbnQtPlNldFNpemUobV9zaXplKTsKKworICAgIGludDMyIG51bVN0eWxl
cyA9IGNvdW50X2ZvbnRfc3R5bGVzKGZhbWlseSk7CisgICAgZm9udF9zdHlsZSBmb250U3R5bGU7
CisgICAgdWludDMyIGZsYWdzOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TdHlsZXM7
IGkrKykgeworICAgICAgICBpZiAoZ2V0X2ZvbnRfc3R5bGUoZmFtaWx5LCBpLCAmZm9udFN0eWxl
LCAmZmxhZ3MpID09IEJfT0spIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHlsZShmb250U3R5bGUp
OworICAgICAgICAgICAgaWYgKChtX29ibGlxdWUgJiYgbV9ib2xkKSAmJiAoc3R5bGUgPT0gIkJv
bGRJdGFsaWMiIHx8IHN0eWxlID09ICJCb2xkIE9ibGlxdWUiKSkKKyAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoKG1fb2JsaXF1ZSAmJiAhbV9ib2xkKSAmJiAoc3R5bGUg
PT0gIkl0YWxpYyIgfHwgc3R5bGUgPT0gIk9ibGlxdWUiKSkKKyAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoKCFtX29ibGlxdWUgJiYgbV9ib2xkKSAmJiBzdHlsZSA9PSAi
Qm9sZCIpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCghbV9vYmxp
cXVlICYmICFtX2JvbGQpICYmIChzdHlsZSA9PSAiUm9tYSIgfHwgc3R5bGUgPT0gIkJvb2siCisg
ICAgICAgICAgICAgICAgfHwgc3R5bGUgPT0gIkNvbmRlbnNlZCIgfHwgc3R5bGUgPT0gIlJlZ3Vs
YXIiIHx8IHN0eWxlID09ICJNZWRpdW0iKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgIG1fZm9udC0+U2V0RmFtaWx5QW5kU3R5bGUoZmFt
aWx5LCBmb250U3R5bGUpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQorICAgIDogbV9mb250KDApCisg
ICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYm9sZChib2xkKQorICAgICwgbV9vYmxpcXVlKG9i
bGlxdWUpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworRm9u
dFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmIChtX2ZvbnQgJiYg
bV9mb250ICE9IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAgICAgICAgbV9mb250ID0g
MDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIGlm
IChtX2ZvbnQpCisgICAgICAgIHJldHVybiBtX2ZvbnQtPlNwYWNpbmcoKSA9PSBCX0ZJWEVEX1NQ
QUNJTkc7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURh
dGE6Omhhc2goKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2ZvbnQpIH07CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2Yo
aGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6
Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQ7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0
YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQg
PT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworfQorCisjaWZuZGVmIE5ERUJVRworU3Ry
aW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYu
NAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34561</attachid>
            <date>2009-08-11 08:44:30 -0700</date>
            <delta_ts>2009-08-15 08:04:05 -0700</delta_ts>
            <desc>Patch to add four other font-specific files to WebCore/platform/graphics/haiku/.</desc>
            <filename>Adding-four-font-specific-files-to-WebCore-platform-.patch</filename>
            <type>text/plain</type>
            <size>16615</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA2YmIzODZmN2U2OTM0YWZlYTViNmI3OTk1OWUxMjUzZTBjMWQ1MGIwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMTEgQXVnIDIwMDkgMTc6NDI6NDIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRpbmcgZm91ciBmb250LXNwZWNpZmljIGZpbGVzIHRvIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UuCgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAzNSArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udENhY2hlSGFpa3UuY3BwIHwgICA4NyArKysrKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAgIHwgICA0OSArKysrKysrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwICAgICAgfCAgMTE2ICsr
KysrKysrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlr
dS5jcHAgICAgICAgICB8ICAxMDcgKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQs
IDM5NCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYwMjU1YzMuLjYyYTJmNzUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzggQEAKKzIwMDktMDgtMTEgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0hh
aWt1XSBBZGRpbmcgZm91ciBmb250LXNwZWNpZmljIGZpbGVzIHRvIFdlYkNvcmU6CisgICAgICAg
IEZvbnRDYWNoZUhhaWt1LmNwcCwgRm9udERhdGFIYWlrdS5jcHAsIEZvbnRIYWlrdS5jcHAKKyAg
ICAgICAgYW5kIFNpbXBsZUZvbnREYXRhSGFpa3UuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzMQorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmdldFRyYWl0c0luRmFtaWx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250RGF0YUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YTo6Y29u
dGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNoYXJVbmljb2RlVG9VdGY4SEFDSyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRX
aWR0aEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3Np
dGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9T
aW1wbGVGb250RGF0YUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0
ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaCk6CisKIDIwMDktMDgtMTEgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoYnVpbGQgZml4
KS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hl
SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyNjM5OQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFp
a3UuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBN
dWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPFN0cmluZy5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgp
Cit7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhIGRhdGEoZm9udC5mb250RGVzY3JpcHRp
b24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnRE
YXRhKCZkYXRhKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFy
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0
TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikKK3sKKworICAgIGNvbnN0IEJGb250KiBkZWZhdWx0Rm9udCA9IGJlX3BsYWluX2ZvbnQ7
CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0gRm9udERlc2NyaXB0
aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgICAgIGRlZmF1bHRGb250ID0gYmVfZml4ZWRfZm9u
dDsKKyAgICBlbHNlIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPT0gRm9udFdlaWdodEJv
bGQpCisgICAgICAgIGRlZmF1bHRGb250ID0gYmVfYm9sZF9mb250OworCisgICAgZm9udF9mYW1p
bHkgZmFtaWx5OworICAgIGRlZmF1bHRGb250LT5HZXRGYW1pbHlBbmRTdHlsZSgmZmFtaWx5LCAw
KTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGRlZmF1bHRTdHJpbmcoZmFtaWx5KTsKKworICAg
IHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZGVmYXVs
dFN0cmluZyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0
c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVk
PiYgdHJhaXRzTWFza3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ZvbnREYXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250RGF0YUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTNl
ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250RGF0YUhhaWt1LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41MDRmZGYxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPFN0cmlu
Zy5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKyNpbmNsdWRlIDxpbnRlcmZhY2UvRm9udC5oPgorCisK
Ky8vIEZJWE1FOiBUZW1wIHJvdXRpbmUgdG8gY2hlY2sgdGhlIGNvbnZlcnNpb24gd29ya3MuCitp
bnQgY2hhclVuaWNvZGVUb1V0ZjhIQUNLKHVuc2lnbmVkIHNob3J0IGdseXBoLCBjaGFyKiBvdXQp
Cit7CisgICAgaW50IGkgPSAwOworCisgICAgaWYgKGdseXBoIDwgMHgwMDgwKQorICAgICAgICBv
dXRbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+KGdseXBoKTsKKyAgICBlbHNlIGlmIChnbHlwaCA8
IDB4MDgwMCkgeyAvL3R3byBieXRlcworICAgICAgICBvdXRbaSsrXSA9IDB4YzAgfCAoZ2x5cGgg
Pj4gNik7CisgICAgICAgIG91dFtpKytdID0gMHg4MCB8IChnbHlwaCAmIDB4M0YpOworICAgIH0g
ZWxzZSBpZiAoZ2x5cGggPiAweDA4MDApIHsgLy8zIGJ5dGVzCisgICAgICAgIG91dFtpKytdID0g
MHhlMCB8IChnbHlwaCA+PiAxMik7CisgICAgICAgIG91dFtpKytdID0gMHg4MCB8ICgoZ2x5cGgg
Pj4gNikgJiAweDNGKTsKKyAgICAgICAgb3V0W2krK10gPSAweDgwIHwgKGdseXBoICYgMHgzRik7
CisgICAgfQorCisgICAgb3V0W2ldID0gJ1wwJzsKKyAgICByZXR1cm4gaTsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21w
bGV4VGV4dCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OmRyYXdHbHlw
aHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAoreworICAgIENvbG9yIGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsK
KyAgICBCVmlldyogdmlldyA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgQkZvbnQqIG1fZm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKKworICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIp
OworICAgIHZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgdmlldy0+U2V0Rm9udChtX2Zv
bnQpOworCisgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3RfY2FzdDxHbHlwaEJ1
ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKKyAgICBmbG9hdCBvZmZzZXQg
PSBwb2ludC54KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewor
ICAgICAgICBjaGFyIG91dFs0XTsKKyAgICAgICAgY2hhclVuaWNvZGVUb1V0ZjhIQUNLKGdseXBo
c1tpXSwgb3V0KTsKKworICAgICAgICB2aWV3LT5EcmF3U3RyaW5nKG91dCwgc2l6ZW9mKG91dCks
IEJQb2ludChvZmZzZXQsIHBvaW50LnkoKSkpOworICAgICAgICBvZmZzZXQgKz0gZ2x5cGhCdWZm
ZXIuYWR2YW5jZUF0KGZyb20gKyBpKTsKKyAgICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK2Zsb2F0IEZvbnQ6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAzOworfQorCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9u
UmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCwg
aW50LCBpbnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxv
YXRSZWN0KCk7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBpbnQsIGJvb2wpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGYzN2ZiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0
YUhhaWt1LmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8UmVjdC5oPgorI2luY2x1ZGUg
PHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQorewor
ICAgIEJGb250KiBmb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOworICAgIGlmICghZm9udCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9udF9oZWlnaHQgaGVpZ2h0OworICAgIGZvbnQtPkdl
dEhlaWdodCgmaGVpZ2h0KTsKKyAgICBtX2FzY2VudCA9IHN0YXRpY19jYXN0PGludD4oaGVpZ2h0
LmFzY2VudCk7CisgICAgbV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQuZGVzY2Vu
dCk7CisgICAgbV9saW5lU3BhY2luZyA9IG1fYXNjZW50ICsgbV9kZXNjZW50OworICAgIG1feEhl
aWdodCA9IGhlaWdodC5hc2NlbnQgKiAwLjU2ZjsgLy8gSGFjayB0YWtlbiBmcm9tIHRoZSB3aW4g
cG9ydC4KKyAgICBtX2xpbmVHYXAgPSBoZWlnaHQubGVhZGluZzsKK30KKwordm9pZCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJXaWR0aCA9
IDAuZjsKKyAgICBtX21heENoYXJXaWR0aCA9IDAuZjsKKyAgICBpbml0Q2hhcldpZHRocygpOwor
fQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGRlbGV0
ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSAwOworfQor
CitTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGlmICghbV9z
bWFsbENhcHNGb250RGF0YSkgeworICAgICAgICBGb250RGVzY3JpcHRpb24gZGVzYyA9IEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBkZXNjLnNldFNwZWNpZmllZFNp
emUoMC43MGYgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgICAgICBjb25z
dCBGb250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRl
c2MuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3
IFNpbXBsZUZvbnREYXRhKCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fwc0Zv
bnREYXRhOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IFdlIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyB0byBsb2FkIG5vbi1BU0NJSSBlbmNvZGlu
ZyBzaXRlcworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRl
cm1pbmVQaXRjaCgpCit7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSAmJiBtX3BsYXRmb3JtRGF0YS5mb250KCktPklzRml4ZWQoKTsKK30KKworZmxvYXQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
K3sKKyAgICBjb25zdCBjaGFyIGNoYXJBcnJheVsxXSA9IHsgZ2x5cGggfTsKKyAgICBmbG9hdCBl
c2NhcGVtZW50c1sxXTsKKworICAgIGlmIChtX3BsYXRmb3JtRGF0YS5mb250KCkpIHsKKyAgICAg
ICAgbV9wbGF0Zm9ybURhdGEuZm9udCgpLT5HZXRFc2NhcGVtZW50cyhjaGFyQXJyYXksIDEsIGVz
Y2FwZW1lbnRzKTsKKyAgICAgICAgcmV0dXJuIGVzY2FwZW1lbnRzWzBdICogbV9wbGF0Zm9ybURh
dGEuZm9udCgpLT5TaXplKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34894</attachid>
            <date>2009-08-15 08:04:41 -0700</date>
            <delta_ts>2009-08-25 02:56:18 -0700</delta_ts>
            <desc>Adding four font-specific files to WebCore.</desc>
            <filename>bug-28131-20090815170430.patch</filename>
            <type>text/plain</type>
            <size>13305</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2ViMWY1NS4uMmRlNzM1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzOCBAQAogMjAwOS0wOC0xNSAgTWF4aW1lIFNpbW9u
ICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyBmb3VyIGZvbnQtc3BlY2lmaWMgZmls
ZXMgdG8gV2ViQ29yZToKKyAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAsIEZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCwKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YS5oIGFuZCBGb250
UGxhdGZvcm1EYXRhSGFpa3UuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yODEzMQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRm
b3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmJvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6b2JsaXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRNYXRjaGluZ0ZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE1hdGNo
aW5nRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbik6CisKKzIwMDktMDgt
MTUgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKICAgICAgICAgW0hhaWt1XSBBZGRpbmcgdHdvIG5ldyBm
aWxlcyB0byBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1OgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3ZTQ0ZQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKK30KKworRm9u
dFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGlu
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSkKK3sKKyAg
ICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitGb250
Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1
ZmZlciogYnVmZmVyKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHN1cHBvcnQgaW4gSGFpa3Ug
dG8gcmVhZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4g
MDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jNWE4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0
YV9oCisKKyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZv
cm1EYXRhOworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKKworICAgIHN0cnVjdCBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YSgpIHsgfQorICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgp
OworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJp
bmdNb2RlKTsKKyAgICB9OworCisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqKTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYWI4ZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWls
LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBn
bWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZv
cm1EYXRhX0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGludGVyZmFj
ZS9Gb250Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0Zm9y
bURhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fZm9udChoYXNoVGFibGVEZWxl
dGVkRm9udFZhbHVlKCkpCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250UGxhdGZvcm1E
YXRhKCkKKyAgICAgICAgICAgIDogbV9mb250KDApCisgICAgICAgICAgICB7IH0KKworICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgb2JsaXF1ZSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYpOworCisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAg
ICAgQkZvbnQqIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKworICAgICAgICBib29s
IGlzRml4ZWRQaXRjaCgpOworICAgICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CisgICAgICAgIGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAg
ICAgICBib29sIG9ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX29ibGlxdWU7IH0KKworICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpIGNvbnN0OworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBTdHJpbmcgZGVzY3Jp
cHRpb24oKSBjb25zdDsKKyNlbmRpZgorCisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAgICAg
IGZsb2F0IG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2JvbGQ7CisgICAgICAgIGJvb2wgbV9vYmxp
cXVlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIEJGb250KiBoYXNoVGFibGVEZWxl
dGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCRm9udCo+KC0xKTsgfQor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2M2Y2MyCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1E
YXRhSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlr
b3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIg
PG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNr
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5p
IDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUg
U2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKwor
I2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSA8Rm9udC5oPgorI2luY2x1ZGUgPHN1cHBvcnQvU3RyaW5nLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgZm9udF9mYW1pbHkqIGZpbmRNYXRjaGluZ0ZvbnRGYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQoreworICAgIGZvbnRfZmFtaWx5IGZh
bWlseTsKKworICAgIGlmIChCRm9udCgpLlNldEZhbWlseUFuZFN0eWxlKEJTdHJpbmcoZmFtaWx5
TmFtZS5zdHJpbmcoKSkuU3RyaW5nKCksIDApID09IEJfT0spCisgICAgICAgIHN0cmNweShmYW1p
bHksIEJTdHJpbmcoZmFtaWx5TmFtZS5zdHJpbmcoKSkuU3RyaW5nKCkpOworICAgIGVsc2Ugewor
ICAgICAgICAvLyBJZiBubyBmb250IGZhbWlseSBpcyBmb3VuZCBmb3IgdGhlIGdpdmVuIG5hbWUs
IHdlIHVzZSBhIGdlbmVyaWMgZm9udC4KKyAgICAgICAgaWYgKEJTdHJpbmcoZmFtaWx5TmFtZS5z
dHJpbmcoKSkuRmluZEZpcnN0KCJTYW5zIikgIT0gQl9FUlJPUikKKyAgICAgICAgICAgIHN0cmNw
eShmYW1pbHksICJEZWphVnUgU2FucyIpOworICAgICAgICBlbHNlIGlmIChCU3RyaW5nKGZhbWls
eU5hbWUuc3RyaW5nKCkpLkZpbmRGaXJzdCgiU2VyaWYiKSAhPSBCX0VSUk9SKQorICAgICAgICAg
ICAgc3RyY3B5KGZhbWlseSwgIkRlamFWdSBTZXJpZiIpOworICAgICAgICBlbHNlIGlmIChCU3Ry
aW5nKGZhbWlseU5hbWUuc3RyaW5nKCkpLkZpbmRGaXJzdCgiTW9ubyIpICE9IEJfRVJST1IpCisg
ICAgICAgICAgICBzdHJjcHkoZmFtaWx5LCAiRGVqYVZ1IE1vbm8iKTsKKyAgICAgICAgZWxzZSAv
LyBUaGlzIGlzIHRoZSBmYWxsYmFjayBmb250LgorICAgICAgICAgICAgc3RyY3B5KGZhbWlseSwg
IkRlamFWdSBTZXJpZiIpOworICAgIH0KKworICAgIGZvbnRfZmFtaWx5KiBmb250RmFtaWx5ID0g
JmZhbWlseTsKKyAgICByZXR1cm4gZm9udEZhbWlseTsKK30KKworc3RhdGljIGZvbnRfc3R5bGUq
IGZpbmRNYXRjaGluZ0ZvbnRTdHlsZShmb250X2ZhbWlseSBmYW1pbHksIGJvb2wgYm9sZCwgYm9v
bCBvYmxpcXVlKQoreworICAgIGZvbnRfc3R5bGUgc3R5bGU7CisgICAgaW50MzIgbnVtU3R5bGVz
ID0gY291bnRfZm9udF9zdHlsZXMoZmFtaWx5KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtU3R5bGVzOyBpKyspIHsKKyAgICAgICAgaWYgKGdldF9mb250X3N0eWxlKGZhbWlseSwgaSwg
JnN0eWxlKSA9PSBCX09LKSB7CisgICAgICAgICAgICBTdHJpbmcgc3R5bGVOYW1lKHN0eWxlKTsK
KyAgICAgICAgICAgIGlmICgob2JsaXF1ZSAmJiBib2xkKSAmJiAoc3R5bGVOYW1lID09ICJCb2xk
SXRhbGljIiB8fCBzdHlsZU5hbWUgPT0gIkJvbGQgT2JsaXF1ZSIpKQorICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmICgob2JsaXF1ZSAmJiAhYm9sZCkgJiYgKHN0eWxlTmFt
ZSA9PSAiSXRhbGljIiB8fCBzdHlsZU5hbWUgPT0gIk9ibGlxdWUiKSkKKyAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKCFvYmxpcXVlICYmIGJvbGQpICYmIHN0eWxlTmFt
ZSA9PSAiQm9sZCIpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCgh
b2JsaXF1ZSAmJiAhYm9sZCkgJiYgKHN0eWxlTmFtZSA9PSAiUm9tYSIgfHwgc3R5bGVOYW1lID09
ICJCb29rIgorICAgICAgICAgICAgICAgIHx8IHN0eWxlTmFtZSA9PSAiQ29uZGVuc2VkIiB8fCBz
dHlsZU5hbWUgPT0gIlJlZ3VsYXIiIHx8IHN0eWxlTmFtZSA9PSAiTWVkaXVtIikpCisgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9udF9zdHlsZSogZm9u
dFN0eWxlID0gJnN0eWxlOworICAgIHJldHVybiBmb250U3R5bGU7Cit9CisKK0ZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKKyAgICA6IG1fZm9udChuZXcg
QkZvbnQoKSkKKyAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpCisg
ICAgLCBtX2JvbGQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID09IEZvbnRXZWlnaHRCb2xkKQor
ICAgICwgbV9vYmxpcXVlKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKK3sKKyAgICBtX2ZvbnQt
PlNldFNpemUobV9zaXplKTsKKworICAgIGZvbnRfZmFtaWx5KiBmb250RmFtaWx5ID0gZmluZE1h
dGNoaW5nRm9udEZhbWlseShmYW1pbHlOYW1lKTsKKyAgICBtX2ZvbnQtPlNldEZhbWlseUFuZFN0
eWxlKCpmb250RmFtaWx5LCAwKTsKKworICAgIGZvbnRfc3R5bGUqIGZvbnRTdHlsZSA9IGZpbmRN
YXRjaGluZ0ZvbnRTdHlsZSgqZm9udEZhbWlseSwgbV9ib2xkLCBtX29ibGlxdWUpOworICAgIG1f
Zm9udC0+U2V0RmFtaWx5QW5kU3R5bGUoKmZvbnRGYW1pbHksICpmb250U3R5bGUpOworfQorCitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwg
Ym9vbCBvYmxpcXVlKQorICAgIDogbV9mb250KDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAs
IG1fYm9sZChib2xkKQorICAgICwgbV9vYmxpcXVlKG9ibGlxdWUpCit7Cit9CisKK0ZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
Cit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0
Zm9ybURhdGEoKQoreworICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IGhhc2hUYWJsZURlbGV0
ZWRGb250VmFsdWUoKSkKKyAgICAgICAgbV9mb250ID0gMDsKK30KKworYm9vbCBGb250UGxhdGZv
cm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIGlmIChtX2ZvbnQpCisgICAgICAgIHJldHVy
biBtX2ZvbnQtPlNwYWNpbmcoKSA9PSBCX0ZJWEVEX1NQQUNJTkc7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAoreworICAg
IHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Piht
X2ZvbnQpIH07CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0
X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hh
cikpOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5t
X2ZvbnQ7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRW
YWx1ZSgpOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRl
c2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34895</attachid>
            <date>2009-08-15 08:17:02 -0700</date>
            <delta_ts>2009-08-25 02:56:27 -0700</delta_ts>
            <desc>Adding three font-specific files to WebCore.</desc>
            <filename>bug-28131-20090815171659.patch</filename>
            <type>text/plain</type>
            <size>13221</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2ViMWY1NS4uMTk5Yzk4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNyBAQAogMjAwOS0wOC0xNSAgTWF4aW1lIFNpbW9u
ICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyB0aHJlZSBmb250LXNwZWNpZmljIGZp
bGVzIHRvIFdlYkNvcmU6CisgICAgICAgIEZvbnRDYWNoZUhhaWt1LmNwcCwgRm9udEhhaWt1LmNw
cCwgYW5kIFNpbXBsZUZvbnREYXRhSGFpa3UuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODEzMQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0
Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpn
ZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dFRyYWl0c0luRmFtaWx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNoYXJVbmljb2RlVG9VVEY4SEFDSyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRX
aWR0aEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3Np
dGlvbkZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9T
aW1wbGVGb250RGF0YUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNv
bnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0
ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaCk6CisKKzIwMDktMDgtMTUgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGlt
ZUBnbWFpbC5jb20+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKICAgICAg
ICAgW0hhaWt1XSBBZGRpbmcgdHdvIG5ldyBmaWxlcyB0byBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
OgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVI
YWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTliZjQyCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlr
dS5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0
YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8U3RyaW5nLmg+CisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkK
K3sKK30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEgZGF0YShmb250LmZvbnREZXNjcmlwdGlv
bigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEoJmRhdGEpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRM
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQoreworICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdl
dCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgorICAgIC8vIEZvciBub3cgd2UnbGwgcGlj
ayB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFu
eSBwcmVmcy4KKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGRlZmF1bHRTdHJpbmcoIkRlamFWdSBT
ZXJpZiIpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlw
dGlvbiwgZGVmYXVsdFN0cmluZyk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKwordm9pZCBGb250Q2Fj
aGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVj
dG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ZvbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDg3NDRkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udEhhaWt1LmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxGb250Lmg+CisjaW5j
bHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKKy8vIEZJWE1FOiBUZW1wIHJv
dXRpbmUgdG8gY29udmVydCB1bmljb2RlIGNoYXJhY3RlciB0byBVVEY4LgoraW50IGNoYXJVbmlj
b2RlVG9VVEY4SEFDSyh1bnNpZ25lZCBzaG9ydCBnbHlwaCwgY2hhciogb3V0KQoreworICAgIGlu
dCBpID0gMDsKKworICAgIGlmIChnbHlwaCA8IDB4MDA4MCkKKyAgICAgICAgb3V0W2krK10gPSBz
dGF0aWNfY2FzdDxjaGFyPihnbHlwaCk7CisgICAgZWxzZSBpZiAoZ2x5cGggPCAweDA4MDApIHsg
IC8vIDIgYnl0ZXMKKyAgICAgICAgb3V0W2krK10gPSAweGMwIHwgKGdseXBoID4+IDYpOworICAg
ICAgICBvdXRbaSsrXSA9IDB4ODAgfCAoZ2x5cGggJiAweDNGKTsKKyAgICB9IGVsc2UgaWYgKGds
eXBoID4gMHgwODAwKSB7ICAvLyAzIGJ5dGVzCisgICAgICAgIG91dFtpKytdID0gMHhlMCB8IChn
bHlwaCA+PiAxMik7CisgICAgICAgIG91dFtpKytdID0gMHg4MCB8ICgoZ2x5cGggPj4gNikgJiAw
eDNGKTsKKyAgICAgICAgb3V0W2krK10gPSAweDgwIHwgKGdseXBoICYgMHgzRik7CisgICAgfQor
CisgICAgb3V0W2ldID0gJ1wwJzsKKyAgICByZXR1cm4gaTsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAor
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50
IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIENvbG9yIGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsKKyAgICBCVmll
dyogdmlldyA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgQkZvbnQq
IG1fZm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKKworICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIHZp
ZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgdmlldy0+U2V0Rm9udChtX2ZvbnQpOworCisg
ICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3RfY2FzdDxHbHlwaEJ1ZmZlckdseXBo
Kj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKKyAgICBmbG9hdCBvZmZzZXQgPSBwb2ludC54
KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgeworICAgICAgICBj
aGFyIG91dFs0XTsKKyAgICAgICAgY2hhclVuaWNvZGVUb1VURjhIQUNLKGdseXBoc1tpXSwgb3V0
KTsKKworICAgICAgICB2aWV3LT5EcmF3U3RyaW5nKG91dCwgc2l6ZW9mKG91dCksIEJQb2ludChv
ZmZzZXQsIHBvaW50LnkoKSkpOworICAgICAgICBvZmZzZXQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGZyb20gKyBpKTsKKyAgICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lk
dGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxl
Rm9udERhdGEqPiogZmFsbGJhY2tGb250cykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQb2ludCYsIGludCwgaW50LCBpbnQp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7
Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mLCBpbnQsIGJvb2wpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk0MWMwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNw
cApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBN
YXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPFJl
Y3QuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8dW5pY29kZS91bm9y
bS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1Jbml0KCkKK3sKKyAgICBCRm9udCogZm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsK
KyAgICBpZiAoIWZvbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbnRfaGVpZ2h0IGhlaWdo
dDsKKyAgICBmb250LT5HZXRIZWlnaHQoJmhlaWdodCk7CisgICAgbV9hc2NlbnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGhlaWdodC5hc2NlbnQpOworICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0PGlu
dD4oaGVpZ2h0LmRlc2NlbnQpOworICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVz
Y2VudDsKKyAgICBtX3hIZWlnaHQgPSBoZWlnaHQuYXNjZW50ICogMC41NmY7IC8vIEhhY2sgdGFr
ZW4gZnJvbSB0aGUgd2luIHBvcnQuCisgICAgbV9saW5lR2FwID0gaGVpZ2h0LmxlYWRpbmc7Cit9
CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAg
bV9hdmdDaGFyV2lkdGggPSAwLmY7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5p
dENoYXJXaWR0aHMoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95
KCkKK3sKKyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0Zv
bnREYXRhID0gMDsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENh
cHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVz
Yy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgp
KTsKKyAgICAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YSA9IG5l
dyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgICAg
ICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250UGxhdGZvcm1E
YXRhKTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wg
U2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgaW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2Ugd2lsbCBuZWVkIHRvIGlt
cGxlbWVudCB0aGlzIHRvIGxvYWQgbm9uLUFTQ0lJIGVuY29kaW5nIHNpdGVzCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAg
ICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpICYmIG1fcGxhdGZv
cm1EYXRhLmZvbnQoKS0+SXNGaXhlZCgpOworfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIGNvbnN0IGNoYXIg
Y2hhckFycmF5WzFdID0geyBnbHlwaCB9OworICAgIGZsb2F0IGVzY2FwZW1lbnRzWzFdOworCisg
ICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgeworICAgICAgICBtX3BsYXRmb3JtRGF0YS5m
b250KCktPkdldEVzY2FwZW1lbnRzKGNoYXJBcnJheSwgMSwgZXNjYXBlbWVudHMpOworICAgICAg
ICByZXR1cm4gZXNjYXBlbWVudHNbMF0gKiBtX3BsYXRmb3JtRGF0YS5mb250KCktPlNpemUoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38538</attachid>
            <date>2009-08-25 02:56:38 -0700</date>
            <delta_ts>2009-08-25 08:19:38 -0700</delta_ts>
            <desc>Adding four font-specific files to WebCore.</desc>
            <filename>bug-28131-20090825115636.patch</filename>
            <type>text/plain</type>
            <size>13098</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODkxNDA4Yy4uNjk0YmJmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0wOC0yNSAgTWF4aW1lIFNpbW9u
ICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyBmb3VyIGZvbnQtc3BlY2lmaWMgZmls
ZXMgdG8gV2ViQ29yZToKKyAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAsIEZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCwKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YS5oIGFuZCBGb250
UGxhdGZvcm1EYXRhSGFpa3UuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yODEzMQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRm
b3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmJvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6b2JsaXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRNYXRjaGluZ0ZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE1hdGNo
aW5nRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbik6CisKIDIwMDktMDgt
MjQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwOGJiMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGEuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKK30KKworRm9udFBsYXRm
b3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1
cm4gRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciog
YnVmZmVyKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHN1cHBvcnQgaW4gSGFpa3UgdG8gcmVh
ZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gMDsKK30K
KworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
NWE4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisK
KyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKKworICAgIHN0cnVjdCBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YSgpIHsgfQorICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOworCisg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2Rl
KTsKKyAgICB9OworCisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRh
X0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGludGVyZmFjZS9Gb250
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGEg
eworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkpCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250UGxhdGZvcm1EYXRhKCkK
KyAgICAgICAgICAgIDogbV9mb250KDApCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOworCisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAgICAgQkZv
bnQqIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKworICAgICAgICBib29sIGlzRml4
ZWRQaXRjaCgpOworICAgICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CisgICAgICAgIGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAgICAgICBi
b29sIG9ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX29ibGlxdWU7IH0KKworICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpIGNvbnN0OworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKyNlbmRpZgorCisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAgICAgIGZsb2F0
IG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2JvbGQ7CisgICAgICAgIGJvb2wgbV9vYmxpcXVlOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIEJGb250KiBoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCRm9udCo+KC0xKTsgfQorICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjIyYWE0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFp
a3UuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRy
ZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24g
PHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1
ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSA8Rm9udC5oPgorI2luY2x1ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIHZvaWQgZmluZE1hdGNoaW5nRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseU5hbWUsIGZvbnRfZmFtaWx5IGZhbWlseSkKK3sKKyAgICBpZiAoQkZvbnQoKS5TZXRG
YW1pbHlBbmRTdHlsZShCU3RyaW5nKGZhbWlseU5hbWUuc3RyaW5nKCkpLlN0cmluZygpLCAwKSA9
PSBCX09LKQorICAgICAgICBzdHJuY3B5KGZhbWlseSwgQlN0cmluZyhmYW1pbHlOYW1lLnN0cmlu
ZygpKS5TdHJpbmcoKSwgQl9GT05UX0ZBTUlMWV9MRU5HVEggKyAxKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgLy8gSWYgbm8gZm9udCBmYW1pbHkgaXMgZm91bmQgZm9yIHRoZSBnaXZlbiBuYW1lLCB3
ZSB1c2UgYSBnZW5lcmljIGZvbnQuCisgICAgICAgIGlmIChmYW1pbHlOYW1lLmNvbnRhaW5zKCJT
YW5zIiwgZmFsc2UpICE9IEJfRVJST1IpCisgICAgICAgICAgICBzdHJjcHkoZmFtaWx5LCAiRGVq
YVZ1IFNhbnMiKTsKKyAgICAgICAgZWxzZSBpZiAoZmFtaWx5TmFtZS5jb250YWlucygiU2VyaWYi
LCBmYWxzZSkgIT0gQl9FUlJPUikKKyAgICAgICAgICAgIHN0cmNweShmYW1pbHksICJEZWphVnUg
U2VyaWYiKTsKKyAgICAgICAgZWxzZSBpZiAoZmFtaWx5TmFtZS5jb250YWlucygiTW9ubyIsIGZh
bHNlKSAhPSBCX0VSUk9SKQorICAgICAgICAgICAgc3RyY3B5KGZhbWlseSwgIkRlamFWdSBNb25v
Iik7CisgICAgICAgIGVsc2UgLy8gVGhpcyBpcyB0aGUgZmFsbGJhY2sgZm9udC4KKyAgICAgICAg
ICAgIHN0cmNweShmYW1pbHksICJEZWphVnUgU2VyaWYiKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGZpbmRNYXRjaGluZ0ZvbnRTdHlsZShmb250X2ZhbWlseSBmYW1pbHksIGJvb2wgYm9sZCwg
Ym9vbCBvYmxpcXVlLCBmb250X3N0eWxlKiBzdHlsZSkKK3sKKyAgICBpbnQzMiBudW1TdHlsZXMg
PSBjb3VudF9mb250X3N0eWxlcyhmYW1pbHkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1TdHlsZXM7IGkrKykgeworICAgICAgICBpZiAoZ2V0X2ZvbnRfc3R5bGUoZmFtaWx5LCBpLCBz
dHlsZSkgPT0gQl9PSykgeworICAgICAgICAgICAgU3RyaW5nIHN0eWxlTmFtZSgqc3R5bGUpOwor
ICAgICAgICAgICAgaWYgKChvYmxpcXVlICYmIGJvbGQpICYmIChzdHlsZU5hbWUgPT0gIkJvbGRJ
dGFsaWMiIHx8IHN0eWxlTmFtZSA9PSAiQm9sZCBPYmxpcXVlIikpCisgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKChvYmxpcXVlICYmICFib2xkKSAmJiAoc3R5bGVOYW1l
ID09ICJJdGFsaWMiIHx8IHN0eWxlTmFtZSA9PSAiT2JsaXF1ZSIpKQorICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmICgoIW9ibGlxdWUgJiYgYm9sZCkgJiYgc3R5bGVOYW1l
ID09ICJCb2xkIikKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKCFv
YmxpcXVlICYmICFib2xkKSAmJiAoc3R5bGVOYW1lID09ICJSb21hIiB8fCBzdHlsZU5hbWUgPT0g
IkJvb2siCisgICAgICAgICAgICAgICAgfHwgc3R5bGVOYW1lID09ICJDb25kZW5zZWQiIHx8IHN0
eWxlTmFtZSA9PSAiUmVndWxhciIgfHwgc3R5bGVOYW1lID09ICJNZWRpdW0iKSkKKyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKKyAgICA6IG1fZm9udChuZXcgQkZvbnQo
KSkKKyAgICAsIG1fc2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpCisgICAgLCBt
X2JvbGQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID09IEZvbnRXZWlnaHRCb2xkKQorICAgICwg
bV9vYmxpcXVlKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKK3sKKyAgICBtX2ZvbnQtPlNldFNp
emUobV9zaXplKTsKKworICAgIGZvbnRfZmFtaWx5IGZvbnRGYW1pbHk7CisgICAgZmluZE1hdGNo
aW5nRm9udEZhbWlseShmYW1pbHlOYW1lLCBmb250RmFtaWx5KTsKKyAgICBtX2ZvbnQtPlNldEZh
bWlseUFuZFN0eWxlKGZvbnRGYW1pbHksIDApOworCisgICAgZm9udF9zdHlsZSogZm9udFN0eWxl
OworICAgIGZpbmRNYXRjaGluZ0ZvbnRTdHlsZShmb250RmFtaWx5LCBtX2JvbGQsIG1fb2JsaXF1
ZSwgZm9udFN0eWxlKTsKKyAgICBtX2ZvbnQtPlNldEZhbWlseUFuZFN0eWxlKGZvbnRGYW1pbHks
ICpmb250U3R5bGUpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZs
b2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQorICAgIDogbV9mb250KDApCisgICAg
LCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYm9sZChib2xkKQorICAgICwgbV9vYmxpcXVlKG9ibGlx
dWUpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgb3RoZXIpCit7CisgICAgKnRoaXMgPSBvdGhlcjsKK30KKworRm9udFBs
YXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmIChtX2ZvbnQgJiYgbV9m
b250ICE9IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAgICAgICAgbV9mb250ID0gMDsK
K30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIGlmICht
X2ZvbnQpCisgICAgICAgIHJldHVybiBtX2ZvbnQtPlNwYWNpbmcoKSA9PSBCX0ZJWEVEX1NQQUNJ
Tkc7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6
Omhhc2goKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihtX2ZvbnQpIH07CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNv
bXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFz
aENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQ7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQgPT0g
aGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworfQorCisjaWZuZGVmIE5ERUJVRworU3RyaW5n
IEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38545</attachid>
            <date>2009-08-25 08:19:58 -0700</date>
            <delta_ts>2009-08-26 13:59:33 -0700</delta_ts>
            <desc>Adding four font-specific files to WebCore.</desc>
            <filename>bug-28131-20090825171954.patch</filename>
            <type>text/plain</type>
            <size>13240</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODkxNDA4Yy4uNjk0YmJmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0wOC0yNSAgTWF4aW1lIFNpbW9u
ICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyBmb3VyIGZvbnQtc3BlY2lmaWMgZmls
ZXMgdG8gV2ViQ29yZToKKyAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAsIEZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCwKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YS5oIGFuZCBGb250
UGxhdGZvcm1EYXRhSGFpa3UuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yODEzMQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRm
b3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmJvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6b2JsaXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRNYXRjaGluZ0ZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE1hdGNo
aW5nRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbik6CisKIDIwMDktMDgt
MjQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwOGJiMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGEuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKK30KKworRm9udFBsYXRm
b3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1
cm4gRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciog
YnVmZmVyKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHN1cHBvcnQgaW4gSGFpa3UgdG8gcmVh
ZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gMDsKK30K
KworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
NWE4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisK
KyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKKworICAgIHN0cnVjdCBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YSgpIHsgfQorICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOworCisg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2Rl
KTsKKyAgICB9OworCisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRh
X0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGludGVyZmFjZS9Gb250
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGEg
eworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkpCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250UGxhdGZvcm1EYXRhKCkK
KyAgICAgICAgICAgIDogbV9mb250KDApCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOworCisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAgICAgQkZv
bnQqIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKworICAgICAgICBib29sIGlzRml4
ZWRQaXRjaCgpOworICAgICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CisgICAgICAgIGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAgICAgICBi
b29sIG9ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX29ibGlxdWU7IH0KKworICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpIGNvbnN0OworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKyNlbmRpZgorCisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAgICAgIGZsb2F0
IG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2JvbGQ7CisgICAgICAgIGJvb2wgbV9vYmxpcXVlOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIEJGb250KiBoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCRm9udCo+KC0xKTsgfQorICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDZlODU5Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFp
a3UuY3BwCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRy
ZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24g
PHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1
ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSA8Rm9udC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgZmluZE1h
dGNoaW5nRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIGZvbnRfZmFt
aWx5KiBmYW1pbHkpCit7CisgICAgaWYgKEJGb250KCkuU2V0RmFtaWx5QW5kU3R5bGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZmFtaWx5TmFtZS5jaGFyYWN0ZXJzKCkpLCAwKSA9PSBC
X09LKQorICAgICAgICBzdHJuY3B5KCpmYW1pbHksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGZhbWlseU5hbWUuY2hhcmFjdGVycygpKSwgQl9GT05UX0ZBTUlMWV9MRU5HVEggKyAxKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgbm8gZm9udCBmYW1pbHkgaXMgZm91bmQgZm9yIHRo
ZSBnaXZlbiBuYW1lLCB3ZSB1c2UgYSBnZW5lcmljIGZvbnQuCisgICAgICAgIGlmIChmYW1pbHlO
YW1lLmNvbnRhaW5zKCJTYW5zIiwgZmFsc2UpICE9IEJfRVJST1IpCisgICAgICAgICAgICBzdHJu
Y3B5KCpmYW1pbHksICJEZWphVnUgU2FucyIsIEJfRk9OVF9GQU1JTFlfTEVOR1RIICsgMSk7Cisg
ICAgICAgIGVsc2UgaWYgKGZhbWlseU5hbWUuY29udGFpbnMoIlNlcmlmIiwgZmFsc2UpICE9IEJf
RVJST1IpCisgICAgICAgICAgICBzdHJuY3B5KCpmYW1pbHksICJEZWphVnUgU2VyaWYiLCBCX0ZP
TlRfRkFNSUxZX0xFTkdUSCArIDEpOworICAgICAgICBlbHNlIGlmIChmYW1pbHlOYW1lLmNvbnRh
aW5zKCJNb25vIiwgZmFsc2UpICE9IEJfRVJST1IpCisgICAgICAgICAgICBzdHJuY3B5KCpmYW1p
bHksICJEZWphVnUgTW9ubyIsIEJfRk9OVF9GQU1JTFlfTEVOR1RIICsgMSk7CisgICAgICAgIGVs
c2UgLy8gVGhpcyBpcyB0aGUgZmFsbGJhY2sgZm9udC4KKyAgICAgICAgICAgIHN0cm5jcHkoKmZh
bWlseSwgIkRlamFWdSBTZXJpZiIsIEJfRk9OVF9GQU1JTFlfTEVOR1RIICsgMSk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCBmaW5kTWF0Y2hpbmdGb250U3R5bGUoZm9udF9mYW1pbHkqIGZhbWls
eSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGZvbnRfc3R5bGUqIHN0eWxlKQoreworICAgIGlu
dDMyIG51bVN0eWxlcyA9IGNvdW50X2ZvbnRfc3R5bGVzKCpmYW1pbHkpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1TdHlsZXM7IGkrKykgeworICAgICAgICBpZiAoZ2V0X2ZvbnRfc3R5
bGUoKmZhbWlseSwgaSwgc3R5bGUpID09IEJfT0spIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHls
ZU5hbWUoKnN0eWxlKTsKKyAgICAgICAgICAgIGlmICgob2JsaXF1ZSAmJiBib2xkKSAmJiAoc3R5
bGVOYW1lID09ICJCb2xkSXRhbGljIiB8fCBzdHlsZU5hbWUgPT0gIkJvbGQgT2JsaXF1ZSIpKQor
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgob2JsaXF1ZSAmJiAhYm9s
ZCkgJiYgKHN0eWxlTmFtZSA9PSAiSXRhbGljIiB8fCBzdHlsZU5hbWUgPT0gIk9ibGlxdWUiKSkK
KyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKCFvYmxpcXVlICYmIGJv
bGQpICYmIHN0eWxlTmFtZSA9PSAiQm9sZCIpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKCghb2JsaXF1ZSAmJiAhYm9sZCkgJiYgKHN0eWxlTmFtZSA9PSAiUm9tYSIg
fHwgc3R5bGVOYW1lID09ICJCb29rIgorICAgICAgICAgICAgICAgIHx8IHN0eWxlTmFtZSA9PSAi
Q29uZGVuc2VkIiB8fCBzdHlsZU5hbWUgPT0gIlJlZ3VsYXIiIHx8IHN0eWxlTmFtZSA9PSAiTWVk
aXVtIikpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBt
X2ZvbnQobmV3IEJGb250KCkpCisgICAgLCBtX3NpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpKQorICAgICwgbV9ib2xkKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBGb250V2Vp
Z2h0Qm9sZCkKKyAgICAsIG1fb2JsaXF1ZShmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCit7Cisg
ICAgbV9mb250LT5TZXRTaXplKG1fc2l6ZSk7CisKKyAgICBmb250X2ZhbWlseSogZm9udEZhbWls
eSA9IHN0YXRpY19jYXN0PGZvbnRfZmFtaWx5Kj4obWFsbG9jKHNpemVvZihmb250X2ZhbWlseSkp
KTsKKyAgICBmaW5kTWF0Y2hpbmdGb250RmFtaWx5KGZhbWlseU5hbWUsIGZvbnRGYW1pbHkpOwor
CisgICAgZm9udF9zdHlsZSogZm9udFN0eWxlOworICAgIGZpbmRNYXRjaGluZ0ZvbnRTdHlsZShm
b250RmFtaWx5LCBtX2JvbGQsIG1fb2JsaXF1ZSwgZm9udFN0eWxlKTsKKyAgICBtX2ZvbnQtPlNl
dEZhbWlseUFuZFN0eWxlKCpmb250RmFtaWx5LCAqZm9udFN0eWxlKTsKK30KKworRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2Js
aXF1ZSkKKyAgICA6IG1fZm9udCgwKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2JvbGQo
Ym9sZCkKKyAgICAsIG1fb2JsaXF1ZShvYmxpcXVlKQoreworfQorCitGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQoreworICAg
ICp0aGlzID0gb3RoZXI7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRh
KCkKK3sKKyAgICBpZiAobV9mb250ICYmIG1fZm9udCAhPSBoYXNoVGFibGVEZWxldGVkRm9udFZh
bHVlKCkpCisgICAgICAgIG1fZm9udCA9IDA7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6
aXNGaXhlZFBpdGNoKCkKK3sKKyAgICBpZiAobV9mb250KQorICAgICAgICByZXR1cm4gbV9mb250
LT5TcGFjaW5nKCkgPT0gQl9GSVhFRF9TUEFDSU5HOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKK3sKKyAgICB1aW50cHRy
X3QgaGFzaENvZGVzWzFdID0geyByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9mb250KSB9
OworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVD
aGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKK30K
KworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIubV9mb250Owor
fQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9mb250ID09IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKTsK
K30KKworI2lmbmRlZiBOREVCVUcKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38638</attachid>
            <date>2009-08-26 13:59:53 -0700</date>
            <delta_ts>2009-08-30 08:46:38 -0700</delta_ts>
            <desc>Adding four font-specific files to WebCore.</desc>
            <filename>bug-28131-20090826225950.patch</filename>
            <type>text/plain</type>
            <size>13230</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODkxNDA4Yy4uNDJkODVjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAwOS0wOC0yNiAgTWF4aW1lIFNpbW9u
ICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyBmb3VyIGZvbnQtc3BlY2lmaWMgZmls
ZXMgdG8gV2ViQ29yZToKKyAgICAgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAsIEZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCwKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YS5oIGFuZCBGb250
UGxhdGZvcm1EYXRhSGFpa3UuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yODEzMQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Rm9udEN1c3RvbVBsYXRm
b3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmJvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6b2JsaXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmZpbmRNYXRjaGluZ0ZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE1hdGNo
aW5nRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhl
ZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbik6CisKIDIwMDktMDgt
MjQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwOGJiMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZv
bnRQbGF0Zm9ybURhdGEuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKK30KKworRm9udFBsYXRm
b3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSkKK3sKKyAgICByZXR1
cm4gRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciog
YnVmZmVyKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHN1cHBvcnQgaW4gSGFpa3UgdG8gcmVh
ZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gMDsKK30K
KworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
NWE4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisK
KyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZvcm1EYXRh
OworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKKworICAgIHN0cnVjdCBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YSgpIHsgfQorICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOworCisg
ICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5kZXJpbmdNb2Rl
KTsKKyAgICB9OworCisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRh
X0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGludGVyZmFjZS9Gb250
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGEg
eworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fZm9udChoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkpCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250UGxhdGZvcm1EYXRhKCkK
KyAgICAgICAgICAgIDogbV9mb250KDApCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgb2JsaXF1ZSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOworCisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAgICAgICAgQkZv
bnQqIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKworICAgICAgICBib29sIGlzRml4
ZWRQaXRjaCgpOworICAgICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CisgICAgICAgIGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQorICAgICAgICBi
b29sIG9ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX29ibGlxdWU7IH0KKworICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpIGNvbnN0OworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKyNlbmRpZgorCisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAgICAgIGZsb2F0
IG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2JvbGQ7CisgICAgICAgIGJvb2wgbV9vYmxpcXVlOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIEJGb250KiBoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCRm9udCo+KC0xKTsgfQorICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjE4MWY4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFp
a3UuY3BwCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRy
ZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24g
PHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1
ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSA8Rm9udC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgZmluZE1h
dGNoaW5nRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIGZvbnRfZmFt
aWx5KiBmb250RmFtaWx5KQoreworICAgIGlmIChCRm9udCgpLlNldEZhbWlseUFuZFN0eWxlKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGZhbWlseU5hbWUuY2hhcmFjdGVycygpKSwgMCkg
PT0gQl9PSykKKyAgICAgICAgc3RybmNweSgqZm9udEZhbWlseSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZmFtaWx5TmFtZS5jaGFyYWN0ZXJzKCkpLCBCX0ZPTlRfRkFNSUxZX0xFTkdU
SCArIDEpOworICAgIGVsc2UgeworICAgICAgICAvLyBJZiBubyBmb250IGZhbWlseSBpcyBmb3Vu
ZCBmb3IgdGhlIGdpdmVuIG5hbWUsIHdlIHVzZSBhIGdlbmVyaWMgZm9udC4KKyAgICAgICAgaWYg
KGZhbWlseU5hbWUuY29udGFpbnMoIlNhbnMiLCBmYWxzZSkgIT0gQl9FUlJPUikKKyAgICAgICAg
ICAgIHN0cm5jcHkoKmZvbnRGYW1pbHksICJEZWphVnUgU2FucyIsIEJfRk9OVF9GQU1JTFlfTEVO
R1RIICsgMSk7CisgICAgICAgIGVsc2UgaWYgKGZhbWlseU5hbWUuY29udGFpbnMoIlNlcmlmIiwg
ZmFsc2UpICE9IEJfRVJST1IpCisgICAgICAgICAgICBzdHJuY3B5KCpmb250RmFtaWx5LCAiRGVq
YVZ1IFNlcmlmIiwgQl9GT05UX0ZBTUlMWV9MRU5HVEggKyAxKTsKKyAgICAgICAgZWxzZSBpZiAo
ZmFtaWx5TmFtZS5jb250YWlucygiTW9ubyIsIGZhbHNlKSAhPSBCX0VSUk9SKQorICAgICAgICAg
ICAgc3RybmNweSgqZm9udEZhbWlseSwgIkRlamFWdSBNb25vIiwgQl9GT05UX0ZBTUlMWV9MRU5H
VEggKyAxKTsKKyAgICAgICAgZWxzZSAvLyBUaGlzIGlzIHRoZSBmYWxsYmFjayBmb250LgorICAg
ICAgICAgICAgc3RybmNweSgqZm9udEZhbWlseSwgIkRlamFWdSBTZXJpZiIsIEJfRk9OVF9GQU1J
TFlfTEVOR1RIICsgMSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmaW5kTWF0Y2hpbmdGb250
U3R5bGUoZm9udF9mYW1pbHkqIGZvbnRGYW1pbHksIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBm
b250X3N0eWxlKiBmb250U3R5bGUpCit7CisgICAgaW50MzIgbnVtU3R5bGVzID0gY291bnRfZm9u
dF9zdHlsZXMoKmZvbnRGYW1pbHkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TdHls
ZXM7IGkrKykgeworICAgICAgICBpZiAoZ2V0X2ZvbnRfc3R5bGUoKmZvbnRGYW1pbHksIGksIGZv
bnRTdHlsZSkgPT0gQl9PSykgeworICAgICAgICAgICAgU3RyaW5nIHN0eWxlTmFtZSgqZm9udFN0
eWxlKTsKKyAgICAgICAgICAgIGlmICgob2JsaXF1ZSAmJiBib2xkKSAmJiAoc3R5bGVOYW1lID09
ICJCb2xkSXRhbGljIiB8fCBzdHlsZU5hbWUgPT0gIkJvbGQgT2JsaXF1ZSIpKQorICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgob2JsaXF1ZSAmJiAhYm9sZCkgJiYgKHN0
eWxlTmFtZSA9PSAiSXRhbGljIiB8fCBzdHlsZU5hbWUgPT0gIk9ibGlxdWUiKSkKKyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKCFvYmxpcXVlICYmIGJvbGQpICYmIHN0
eWxlTmFtZSA9PSAiQm9sZCIpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKCghb2JsaXF1ZSAmJiAhYm9sZCkgJiYgKHN0eWxlTmFtZSA9PSAiUm9tYSIgfHwgc3R5bGVO
YW1lID09ICJCb29rIgorICAgICAgICAgICAgICAgIHx8IHN0eWxlTmFtZSA9PSAiQ29uZGVuc2Vk
IiB8fCBzdHlsZU5hbWUgPT0gIlJlZ3VsYXIiIHx8IHN0eWxlTmFtZSA9PSAiTWVkaXVtIikpCisg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBtX2ZvbnQobmV3
IEJGb250KCkpCisgICAgLCBtX3NpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKQor
ICAgICwgbV9ib2xkKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBGb250V2VpZ2h0Qm9sZCkK
KyAgICAsIG1fb2JsaXF1ZShmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCit7CisgICAgbV9mb250
LT5TZXRTaXplKG1fc2l6ZSk7CisKKyAgICBmb250X2ZhbWlseSBmb250RmFtaWx5OworICAgIGZp
bmRNYXRjaGluZ0ZvbnRGYW1pbHkoZmFtaWx5TmFtZSwgJmZvbnRGYW1pbHkpOworCisgICAgZm9u
dF9zdHlsZSBmb250U3R5bGU7CisgICAgZmluZE1hdGNoaW5nRm9udFN0eWxlKCZmb250RmFtaWx5
LCBtX2JvbGQsIG1fb2JsaXF1ZSwgJmZvbnRTdHlsZSk7CisgICAgbV9mb250LT5TZXRGYW1pbHlB
bmRTdHlsZShmb250RmFtaWx5LCBmb250U3R5bGUpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQorICAg
IDogbV9mb250KDApCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYm9sZChib2xkKQorICAg
ICwgbV9vYmxpcXVlKG9ibGlxdWUpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCit7CisgICAgKnRoaXMgPSBv
dGhlcjsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAg
IGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSkKKyAg
ICAgICAgbV9mb250ID0gMDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0
Y2goKQoreworICAgIGlmIChtX2ZvbnQpCisgICAgICAgIHJldHVybiBtX2ZvbnQtPlNwYWNpbmco
KSA9PSBCX0ZJWEVEX1NQQUNJTkc7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVk
IEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBoYXNoQ29k
ZXNbMV0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2ZvbnQpIH07CisgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNo
Q29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIEZv
bnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQ7Cit9CisKK2Jvb2wg
Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ZvbnQgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworfQorCisjaWZu
ZGVmIE5ERUJVRworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQor
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38793</attachid>
            <date>2009-08-30 08:46:55 -0700</date>
            <delta_ts>2009-09-03 01:50:40 -0700</delta_ts>
            <desc>Adding three font-specific files to WebCore.</desc>
            <filename>bug-28131-20090830174651.patch</filename>
            <type>text/plain</type>
            <size>7400</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Zjk4NDRkMS4uNWU2ZjQ4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAwOS0wOC0zMCAgTWF4aW1lIFNpbW9u
ICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbSGFpa3VdIEFkZGluZyB0aHJlZSBmb250LXNwZWNpZmljIGZp
bGVzIHRvIFdlYkNvcmU6CisgICAgICAgIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwLCBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgsCisgICAgICAgIGFuZCBGb250UGxhdGZvcm1EYXRhLmgKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTMxCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRD
dXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
Ym9sZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvYmxpcXVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2hUYWJsZURlbGV0ZWRGb250VmFs
dWUpOgorCiAyMDA5LTA4LTI5ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwOGJiMQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZv
bnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKK30KKwor
Rm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRh
KGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSkKK3sK
KyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitG
b250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJl
ZEJ1ZmZlciogYnVmZmVyKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHN1cHBvcnQgaW4gSGFp
a3UgdG8gcmVhZCBmb250cyBmcm9tIG1lbW9yeSB0byBpbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1
cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jNWE4MTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YV9oCisKKyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxh
dGZvcm1EYXRhOworICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKKworICAgIHN0cnVjdCBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSgpIHsgfQorICAgICAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0
YSgpOworCisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEgZm9udFBsYXRmb3JtRGF0YShpbnQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5k
ZXJpbmdNb2RlKTsKKyAgICB9OworCisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRl
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqKTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0
YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYWI4ZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5o
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGlt
ZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxh
dGZvcm1EYXRhX0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGludGVy
ZmFjZS9Gb250Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZvbnRQbGF0
Zm9ybURhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgICAgICA6IG1fZm9udChoYXNoVGFibGVE
ZWxldGVkRm9udFZhbHVlKCkpCisgICAgICAgICAgICB7IH0KKworICAgICAgICBGb250UGxhdGZv
cm1EYXRhKCkKKyAgICAgICAgICAgIDogbV9mb250KDApCisgICAgICAgICAgICB7IH0KKworICAg
ICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpOworCisgICAgICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7CisKKyAg
ICAgICAgQkZvbnQqIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KKworICAgICAgICBi
b29sIGlzRml4ZWRQaXRjaCgpOworICAgICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisgICAgICAgIGJvb2wgYm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9sZDsgfQor
ICAgICAgICBib29sIG9ibGlxdWUoKSBjb25zdCB7IHJldHVybiBtX29ibGlxdWU7IH0KKworICAg
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpIGNvbnN0OworCisjaWZuZGVmIE5ERUJVRworICAgICAgICBTdHJpbmcgZGVz
Y3JpcHRpb24oKSBjb25zdDsKKyNlbmRpZgorCisgICAgICAgIEJGb250KiBtX2ZvbnQ7CisgICAg
ICAgIGZsb2F0IG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2JvbGQ7CisgICAgICAgIGJvb2wgbV9v
YmxpcXVlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIEJGb250KiBoYXNoVGFibGVE
ZWxldGVkRm9udFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCRm9udCo+KC0xKTsg
fQorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCis=
</data>

          </attachment>
      

    </bug>

</bugzilla>