<?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>39672</bug_id>
          
          <creation_ts>2010-05-25 06:05:56 -0700</creation_ts>
          <short_desc>Make sure skia is not Chromium specific</short_desc>
          <delta_ts>2010-10-25 21:25:29 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>46162</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>beergun</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>joybro201</cc>
    
    <cc>maniagoon</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xhiloh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230238</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-05-25 06:05:56 -0700</bug_when>
    <thetext>platform/graphics/skia is hardcoded with Chromimum specific code. Add PLATFORM(CHROMIUM) guard for skia/ext (PlatformCanvas and resampling) so other ports can use skia.

This is a bit ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230239</commentid>
    <comment_count>1</comment_count>
      <attachid>57011</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-05-25 06:09:58 -0700</bug_when>
    <thetext>Created attachment 57011
Patch

Don&apos;t use skia/ext/platform_canvas.h and skia/ext/image_operations.h which are only available in Chromium source tree.

This patch is for BREW MP right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231059</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-26 20:57:01 -0700</bug_when>
    <thetext>I&apos;m pretty sure this isn&apos;t the way to do re-use these files but I&apos;m cc&apos;ing someone who should be more familiar with this area than I.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231187</commentid>
    <comment_count>3</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-05-27 01:53:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I&apos;m pretty sure this isn&apos;t the way to do re-use these files but I&apos;m cc&apos;ing someone who should be more familiar with this area than I.

Thank you. I need to someone to discuss this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237457</commentid>
    <comment_count>4</comment_count>
      <attachid>57011</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-12 20:50:06 -0700</bug_when>
    <thetext>Comment on attachment 57011
Patch

This approach feels wrong to me too.  r- based on above comments.  You&apos;ll need to track someone down over in #chromium or on chromium-dev.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237923</commentid>
    <comment_count>5</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-06-14 11:09:00 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 57011 [details])
&gt; This approach feels wrong to me too.  r- based on above comments.  You&apos;ll need to track someone down over in #chromium or on chromium-dev.

Okay. I will try to find somebody to discuss this issue on #chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255292</commentid>
    <comment_count>6</comment_count>
      <attachid>62408</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-07-23 04:03:12 -0700</bug_when>
    <thetext>Created attachment 62408
Patch (add typedef for canvas)

This is only a part of attachment 57011.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262723</commentid>
    <comment_count>7</comment_count>
      <attachid>62408</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-10 09:54:12 -0700</bug_when>
    <thetext>Comment on attachment 62408
Patch (add typedef for canvas)

WebCore/platform/graphics/skia/PlatformContextSkia.cpp:594
 +      return m_canvas-&gt;getTopPlatformDevice().IsVectorial();
Why is this Chromium only?

WebCore/platform/graphics/skia/PlatformContextSkia.h:48
 +  typedef SkCanvas PlatformContextCanvasType;
Is skia not normally namespaced?

Looks OK, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264347</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-13 07:01:44 -0700</bug_when>
    <thetext>Not sure what the status of this patch is, but it looks like an ok workaround for now.

Ideally, we&apos;d upstream all the stuff from the chromium repo (chromium/src/skia/ext) into Skia proper, then everyone could use it.  Let me know if you&apos;re interested in working on that, and I can help you land it in Skia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270443</commentid>
    <comment_count>9</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-08-27 05:34:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Not sure what the status of this patch is, but it looks like an ok workaround for now.
&gt; 
&gt; Ideally, we&apos;d upstream all the stuff from the chromium repo (chromium/src/skia/ext) into Skia proper, then everyone could use it.  Let me know if you&apos;re interested in working on that, and I can help you land it in Skia.

I think it is a good idea to upstream Chromium&apos;s chromium/src/skia/ext to Skia repo so that other WebKit ports can use it. Please help me do the job.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271452</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-08-30 09:02:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Not sure what the status of this patch is, but it looks like an ok workaround for now.
&gt; &gt; 
&gt; &gt; Ideally, we&apos;d upstream all the stuff from the chromium repo (chromium/src/skia/ext) into Skia proper, then everyone could use it.  Let me know if you&apos;re interested in working on that, and I can help you land it in Skia.
&gt; 
&gt; I think it is a good idea to upstream Chromium&apos;s chromium/src/skia/ext to Skia repo so that other WebKit ports can use it. Please help me do the job.

After looking at it a bit, it seems as if this is not quite as clean as I thought.  It seems that skia/ext depends on some things in chromium/base.  So the first job would be to get rid of those dependencies.  This will require some knowledge of the chromium project, and some ideas of how to replace those dependencies (I don&apos;t have all the answers here).

After that, it would be a matter of reformatting the code to be more skia-friendly (getting rid of chrome-specific relative paths, for example), and then creating a patch for Skia to add the content of the (new) /ext directory, and uploading it to codereview.appspot.com for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272601</commentid>
    <comment_count>11</comment_count>
      <attachid>62408</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-31 20:10:26 -0700</bug_when>
    <thetext>Comment on attachment 62408
Patch (add typedef for canvas)

I&apos;m not an expert here, but this doesn&apos;t look like the right solution.  Moving skia/ext out of the chromium repo is probably better than these ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274781</commentid>
    <comment_count>12</comment_count>
      <attachid>66669</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-06 14:29:32 -0700</bug_when>
    <thetext>Created attachment 66669
Move FontCustomPlatformData to platform/skia

Move FontCustomPlatformData to platform/skia. There is no chromium specific code in FontCustomPlatformData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274784</commentid>
    <comment_count>13</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-06 14:38:01 -0700</bug_when>
    <thetext>&gt; After looking at it a bit, it seems as if this is not quite as clean as I thought.  It seems that skia/ext depends on some things in chromium/base.  So the first job would be to get rid of those dependencies.  This will require some knowledge of the chromium project, and some ideas of how to replace those dependencies (I don&apos;t have all the answers here).
&gt; 
&gt; After that, it would be a matter of reformatting the code to be more skia-friendly (getting rid of chrome-specific relative paths, for example), and then creating a patch for Skia to add the content of the (new) /ext directory, and uploading it to codereview.appspot.com for review.

I will build Chromium and will do the job as you suggested. 

There are other patches not related to skia/ext such as moving FontCustomPlatformData to platform/skia. I will submit those patches first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275374</commentid>
    <comment_count>14</comment_count>
      <attachid>66669</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-07 16:18:33 -0700</bug_when>
    <thetext>Comment on attachment 66669
Move FontCustomPlatformData to platform/skia

This looks great, but could you do an &quot;svn mv&quot; instead of a remove/add pair so that metadata is preserved for these files?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275599</commentid>
    <comment_count>15</comment_count>
      <attachid>66841</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-07 21:44:57 -0700</bug_when>
    <thetext>Created attachment 66841
Move FontCustomPlatformData to platform/skia

The same patch, but used &apos;svn mv&apos; this time as James suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276560</commentid>
    <comment_count>16</comment_count>
      <attachid>67055</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-09 10:33:40 -0700</bug_when>
    <thetext>Created attachment 67055
Move Image::loadPlatformResource to ImageChromium.cpp

Move Chromium-specific Image::loadPlatformResource out of ImageSkia.cpp to ImageChromium.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276561</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 10:34:34 -0700</bug_when>
    <thetext>Attachment 67055 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/WebCore.gyp/WebCore.gyp:1230:  Line contains tab character.  [whitespace/tab] [5]
WebCore/platform/graphics/chromium/ImageChromium.cpp:33:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/chromium/ImageChromium.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/platform/graphics/chromium/ImageChromium.cpp:45:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276564</commentid>
    <comment_count>18</comment_count>
      <attachid>67056</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-09 10:41:24 -0700</bug_when>
    <thetext>Created attachment 67056
Move Image::loadPlatformResource to ImageChromium.cpp

Fix style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276565</commentid>
    <comment_count>19</comment_count>
      <attachid>66841</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-09 10:43:15 -0700</bug_when>
    <thetext>Comment on attachment 66841
Move FontCustomPlatformData to platform/skia

Looks good!  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276570</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-09 10:49:09 -0700</bug_when>
    <thetext>The loadPlatformResource patch also looks all right, but I&apos;ll let the EWS bot compile check it first.  Have you compile checked this on Chromium mac?  I can check it myself if you don&apos;t have the hardware available if you give me a day or two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276574</commentid>
    <comment_count>21</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-09 10:52:09 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; The loadPlatformResource patch also looks all right, but I&apos;ll let the EWS bot compile check it first.  Have you compile checked this on Chromium mac?  I can check it myself if you don&apos;t have the hardware available if you give me a day or two.

I checked it on Chromium Linux, but not on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276713</commentid>
    <comment_count>22</comment_count>
      <attachid>66841</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-09 13:33:15 -0700</bug_when>
    <thetext>Comment on attachment 66841
Move FontCustomPlatformData to platform/skia

Clearing flags on attachment: 66841

Committed r67109: &lt;http://trac.webkit.org/changeset/67109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276917</commentid>
    <comment_count>23</comment_count>
      <attachid>67056</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-09 18:29:56 -0700</bug_when>
    <thetext>Comment on attachment 67056
Move Image::loadPlatformResource to ImageChromium.cpp

Compile tested on chromium mac, seems to work fine here as well.  R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277106</commentid>
    <comment_count>24</comment_count>
      <attachid>67056</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-10 03:58:14 -0700</bug_when>
    <thetext>Comment on attachment 67056
Move Image::loadPlatformResource to ImageChromium.cpp

Clearing flags on attachment: 67056

Committed r67187: &lt;http://trac.webkit.org/changeset/67187&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277107</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-10 03:58:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277273</commentid>
    <comment_count>26</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-10 10:11:16 -0700</bug_when>
    <thetext>Reopen the bug as I have more patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277276</commentid>
    <comment_count>27</comment_count>
      <attachid>67199</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-10 10:14:02 -0700</bug_when>
    <thetext>Created attachment 67199
Move FontCacheLinux.cpp to platform/graphics/skia/FontCacheSkia.cpp

FontCacheLinux is not Linux specific implementation of FontCache. Move it to platform/graphics/skia and rename it to FontCacheSkia.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277904</commentid>
    <comment_count>28</comment_count>
      <attachid>67199</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-12 15:24:33 -0700</bug_when>
    <thetext>Comment on attachment 67199
Move FontCacheLinux.cpp to platform/graphics/skia/FontCacheSkia.cpp

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

I&apos;m not so sure about this one - the file still is clearly Chromium specific (it directly uses ChromiumBridge for one) and isn&apos;t really more skia specific than linux specific.  Moving a chromium-specific file from /chromium to /skia seems like it would be a regression for your purposes, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277916</commentid>
    <comment_count>29</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-12 16:44:45 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 67199 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67199&amp;action=prettypatch
&gt; 
&gt; I&apos;m not so sure about this one - the file still is clearly Chromium specific (it directly uses ChromiumBridge for one) and isn&apos;t really more skia specific than linux specific.  Moving a chromium-specific file from /chromium to /skia seems like it would be a regression for your purposes, no?

Yes, you are right. FontCache::getFontDataForCharacters replies on ChromiumBridge. In Brew MP, I changed the method:


const SimpleFontData* FontCache::getFontDataForCharacters(const Font&amp; font,
                                                          const UChar* characters,
                                                          int length)
{
    return font.primaryFont();
}


Except for this method, there is no chromium specific code. I will submit the patch again after separating Chromium specific code. Thanks for your review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278960</commentid>
    <comment_count>30</comment_count>
      <attachid>67199</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-14 09:20:32 -0700</bug_when>
    <thetext>Comment on attachment 67199
Move FontCacheLinux.cpp to platform/graphics/skia/FontCacheSkia.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281798</commentid>
    <comment_count>31</comment_count>
      <attachid>68133</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-20 14:01:54 -0700</bug_when>
    <thetext>Created attachment 68133
Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp

GlyphPageTreeNodeLinux does not depend on Linux or Chromium. Move GGlyphPageTreeNodeLinux to platform/graphics/skia and rename it to GlyphPageTreeNodeSkia.cpp so that other ports can use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281952</commentid>
    <comment_count>32</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-20 17:36:46 -0700</bug_when>
    <thetext>My idea is to move FontCacheLinux.cpp, GlyphPageTreeNodeLinux.cpp, SimpleFontDataLinux.cpp to skia because they are not Linux-specific nor Chromium-specific. 

I successfully compiled those files in Brew MP without modification. FontCache::getFontDataForCharacters was the only exception because it uses ChromiumBridge::getFontFamilyForCharacters.

What&apos;s your opinion, James? Is this a good direction or do you want me to duplicate the code for Brew MP?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281973</commentid>
    <comment_count>33</comment_count>
      <attachid>68133</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-20 17:54:17 -0700</bug_when>
    <thetext>Comment on attachment 68133
Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp

Looks pretty good.  I&apos;ll let the cr-linux bot compile check this before touching the review? flag.

Overall I prefer this direction to duplicating code.  Just keep in mind that until the BREWMP port gets a buildbot on build.webkit.org, any changes to common files like this may break your build in a way that the patch contributor will probably not notice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282032</commentid>
    <comment_count>34</comment_count>
      <attachid>68133</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-20 19:19:31 -0700</bug_when>
    <thetext>Comment on attachment 68133
Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp

R=me, cr-linux is happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282058</commentid>
    <comment_count>35</comment_count>
      <attachid>68133</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-20 20:45:37 -0700</bug_when>
    <thetext>Comment on attachment 68133
Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp

Clearing flags on attachment: 68133

Committed r67918: &lt;http://trac.webkit.org/changeset/67918&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282059</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-20 20:45:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282075</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-20 21:11:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67918 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282080</commentid>
    <comment_count>38</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-20 21:23:48 -0700</bug_when>
    <thetext>Reverting..that&apos;s not a very good start.

Compiler output:

3&gt;------ Build started: Project: webcore_platform, Configuration: Release Win32 ------
3&gt;Compiling...
3&gt;GlyphPageTreeNodeSkia.cpp
3&gt;..\platform\graphics\skia\GlyphPageTreeNodeSkia.cpp(51) : error C2039: &apos;setupPaint&apos; : is not a member of &apos;WebCore::FontPlatformData&apos;
3&gt;        c:\webkitbuildslave\chromium-win-release\build\webcore\platform\graphics\chromium\FontPlatformDataChromiumWin.h(50) : see declaration of &apos;WebCore::FontPlatformData&apos;
3&gt;Build log was saved at &quot;file://C:\WebKitBuildSlave\chromium-win-release\build\WebKit\chromium\Release\obj\webcore_platform\BuildLog.htm&quot;
3&gt;webcore_platform - 1 error(s), 0 warning(s)
========== Build: 2 succeeded, 1 failed, 80 up-to-date, 0 skipped ==========</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282094</commentid>
    <comment_count>39</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-20 22:08:59 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Reverting..that&apos;s not a very good start.
&gt; 
&gt; Compiler output:
&gt; 
&gt; 3&gt;------ Build started: Project: webcore_platform, Configuration: Release Win32 ------
&gt; 3&gt;Compiling...
&gt; 3&gt;GlyphPageTreeNodeSkia.cpp
&gt; 3&gt;..\platform\graphics\skia\GlyphPageTreeNodeSkia.cpp(51) : error C2039: &apos;setupPaint&apos; : is not a member of &apos;WebCore::FontPlatformData&apos;
&gt; 3&gt;        c:\webkitbuildslave\chromium-win-release\build\webcore\platform\graphics\chromium\FontPlatformDataChromiumWin.h(50) : see declaration of &apos;WebCore::FontPlatformData&apos;
&gt; 3&gt;Build log was saved at &quot;file://C:\WebKitBuildSlave\chromium-win-release\build\WebKit\chromium\Release\obj\webcore_platform\BuildLog.htm&quot;
&gt; 3&gt;webcore_platform - 1 error(s), 0 warning(s)
&gt; ========== Build: 2 succeeded, 1 failed, 80 up-to-date, 0 skipped ==========

It seems &quot;[&apos;exclude&apos;, &apos;platform/graphics/skia/GlyphPageTreeNodeSkia\\.cpp$&apos;]&quot; does not exclude the file. 

I will test the Chromium Win too before submitting the patch. Sorry for the inconvenience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282099</commentid>
    <comment_count>40</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-20 22:16:43 -0700</bug_when>
    <thetext>BTW, why is there no status bubble for cr-win?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282680</commentid>
    <comment_count>41</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-09-21 17:22:41 -0700</bug_when>
    <thetext>Reopen the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296256</commentid>
    <comment_count>42</comment_count>
      <attachid>71180</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-19 10:16:53 -0700</bug_when>
    <thetext>Created attachment 71180
Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp

Second try! I built it on Chromium Win and Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296410</commentid>
    <comment_count>43</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-19 14:26:53 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; BTW, why is there no status bubble for cr-win?

Setting up a chromium build with visual studio express is nearly impossible.  But if someone is interested in trying, there are instructions and I can get you access to an EC2 instance with windows on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297802</commentid>
    <comment_count>44</comment_count>
      <attachid>71180</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-10-21 20:07:39 -0700</bug_when>
    <thetext>Comment on attachment 71180
Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297806</commentid>
    <comment_count>45</comment_count>
      <attachid>71180</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-21 20:40:02 -0700</bug_when>
    <thetext>Comment on attachment 71180
Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp

Clearing flags on attachment: 71180

Committed r70287: &lt;http://trac.webkit.org/changeset/70287&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297807</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-21 20:40:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299068</commentid>
    <comment_count>47</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-25 13:14:00 -0700</bug_when>
    <thetext>We open the bug as I have more patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299071</commentid>
    <comment_count>48</comment_count>
      <attachid>71787</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-25 13:15:21 -0700</bug_when>
    <thetext>Created attachment 71787
Move SimpleFontDataLinux.cpp to platform/graphics/skia/SimpleFontDataSkia.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299265</commentid>
    <comment_count>49</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-25 21:19:44 -0700</bug_when>
    <thetext>Please new bugs for new patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299267</commentid>
    <comment_count>50</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2010-10-25 21:25:29 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; Please new bugs for new patches.

Oops. Okay.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57011</attachid>
            <date>2010-05-25 06:09:58 -0700</date>
            <delta_ts>2010-09-20 15:21:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>svn.patch</filename>
            <type>text/plain</type>
            <size>11440</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDE1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMjUgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYSBpcyBoYXJkY29kZWQgd2l0aCBDaHJvbWltdW0gc3BlY2lmaWMgY29k
ZS4gQWRkIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBndWFyZCBmb3Igc2tpYS9leHQgKFBs
YXRmb3JtQ2FudmFzIGFuZCByZXNhbXBsaW5nKSBzbyBvdGhlciBwb3J0cyBjYW4gdXNlIHNraWEu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcDoK
KyAgICAgICAgKE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEpOgorICAgICAgICAoUGxhdGZv
cm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKToKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6
OmlzUHJpbnRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5oOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2FudmFzKToKKwog
MjAxMC0wNS0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNjAwNTgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDEwIEBACiAjaW5jbHVkZSAiU2tDb3JuZXJQ
YXRoRWZmZWN0LmgiCiAjaW5jbHVkZSAiU2tTaGFkZXIuaCIKICNpbmNsdWRlICJTa2lhVXRpbHMu
aCIKKworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3Jt
X2NhbnZhcy5oIgorI2VuZGlmCiAKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA2MDA1OCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSwxMCArNTksMTkgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAog
ICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKICAgICBpZiAoIW1fZGF0YS5tX2NhbnZhcy5pbml0aWFsaXplKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpKSB7CiAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyNlbHNlCisgICAgU2tCaXRtYXAgICAgYml0bWFwOworCisg
ICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgYml0
bWFwLmVyYXNlQ29sb3IoMCk7CisgICAgbV9kYXRhLm1fY2FudmFzLnNldEJpdG1hcERldmljZShi
aXRtYXApOworI2VuZGlmCiAKICAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFz
KCZtX2RhdGEubV9jYW52YXMpOwogICAgIG1fY29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4
dCgmbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gNjAwNTgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKLSNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAt
NDUsOCArNDQsMTEgQEAKICNpbmNsdWRlICJTa1JlY3QuaCIKICNpbmNsdWRlICJTa1NoYWRlci5o
IgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIK
ICNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAic2tpYS9l
eHQvcGxhdGZvcm1fY2FudmFzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xMzMsNiArMTM1LDggQEAgc3RhdGljIFJlc2FtcGxpbmdNb2RlIGNvbXB1dGVSZXNhbXBsaW5n
TQogICAgIHJldHVybiBSRVNBTVBMRV9BV0VTT01FOwogfQogCisjaWYgUExBVEZPUk0oQ0hST01J
VU0pCisKIC8vIERyYXdzIHRoZSBnaXZlbiBiaXRtYXAgdG8gdGhlIGdpdmVuIGNhbnZhcy4gVGhl
IHN1YnNldCBvZiB0aGUgc291cmNlIGJpdG1hcAogLy8gaWRlbnRpZmllZCBieSBzcmNfcmVjdCBp
cyBkcmF3biB0byB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcmVjdC4gVGhlIGJpdG1hcAogLy8gd2ls
bCBiZSByZXNhbXBsZWQgdG8gcmVzYW1wbGVfd2lkdGggKiByZXNhbXBsZV9oZWlnaHQgKHRoaXMg
aXMgdGhlIHNpemUgb2YKQEAgLTIxNCw2ICsyMTgsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UmVzYW1w
bGVkQml0bWFwKFNrQ2FudmFzCiAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChyZXNhbXBs
ZWQsIDAsIG9mZnNldERlc3RSZWN0LCAmcGFpbnQpOwogICAgIH0KIH0KKyNlbmRpZgogCiBzdGF0
aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QsIGNvbnN0IFNrWGZlcm1vZGU6Ok1vZGUmIGNvbXBPcCkK
IHsKQEAgLTIyNyw2ICsyMzIsNyBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3Jt
Q29udGV4CiAgICAgICAgIGFscGhhID0gMDsKICAgICBwYWludC5zZXRBbHBoYShhbHBoYSk7CiAK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFz
ID0gcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsKIAogICAgIFJlc2FtcGxpbmdNb2RlIHJlc2Ft
cGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPmlzUHJpbnRpbmcoKSA/IFJFU0FNUExFX05PTkUgOgpA
QCAtMjQzLDYgKzI0OSwxMCBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29u
dGV4CiAgICAgICAgIC8vIHdlIGRvbid0IHNlbmQgZXh0cmEgcGl4ZWxzLgogICAgICAgICBjYW52
YXMtPmRyYXdCaXRtYXBSZWN0KGJpdG1hcCwgJnNyY1JlY3QsIGRlc3RSZWN0LCAmcGFpbnQpOwog
ICAgIH0KKyNlbHNlCisgICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2Fu
dmFzKCk7CisgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRtYXAsICZzcmNSZWN0LCBkZXN0
UmVjdCwgJnBhaW50KTsKKyNlbmRpZgogfQogCiAvLyBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBkaW1l
bnNpb25zIHdpdGggdGhlIGdpdmVuIG1hdHJpeC4gVXNlZCB0byBzZWUgaG93IGJpZwpAQCAtMjkz
LDEwICszMDMsMTIgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogUGFzc1JlZlB0
cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7
CiAgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKG5h
bWUpOwogfQorI2VuZGlmCiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZmxv
YXRTcmNSZWN0LApAQCAtMzMzLDYgKzM0NSw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCoKIAogICAgIC8vIENvbXB1dGUgdGhlIHJlc2FtcGxpbmcgbW9kZS4KICAg
ICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nOworCiAgICAgaWYgKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5pc1ByaW50aW5nKCkpCiAgICAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElO
RUFSOwogICAgIGVsc2UgewpAQCAtMzQ0LDYgKzM1Nyw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICAvLyBMb2FkIHRoZSB0cmFuc2Zvcm0gV2ViS2l0IHJl
cXVlc3RlZC4KICAgICBTa01hdHJpeCBtYXRyaXgocGF0dGVyblRyYW5zZm9ybSk7CiAKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKICAgICBpZiAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01F
KSB7CiAgICAgICAgIC8vIERvIG5pY2UgcmVzYW1wbGluZy4KICAgICAgICAgU2tCaXRtYXAgcmVz
YW1wbGVkOwpAQCAtMzY2LDkgKzM4MCwxMiBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqCiAgICAgICAgIG1hdHJpeC5zZXRTY2FsZVgoU2tJbnRUb1NjYWxhcigxKSk7
CiAgICAgICAgIG1hdHJpeC5zZXRTY2FsZVkoU2tJbnRUb1NjYWxhcigxKSk7CiAgICAgfSBlbHNl
IHsKKyNlbmRpZgogICAgICAgICAvLyBObyBuZWVkIHRvIGRvIG5pY2UgcmVzYW1wbGluZy4KICAg
ICAgICAgc2hhZGVyID0gU2tTaGFkZXI6OkNyZWF0ZUJpdG1hcFNoYWRlcihzcmNTdWJzZXQsIFNr
U2hhZGVyOjprUmVwZWF0X1RpbGVNb2RlLCBTa1NoYWRlcjo6a1JlcGVhdF9UaWxlTW9kZSk7Cisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgfQorI2VuZGlmCiAKICAgICAvLyBXZSBhbHNvIG5l
ZWQgdG8gdHJhbnNsYXRlIGl0IHN1Y2ggdGhhdCB0aGUgb3JpZ2luIG9mIHRoZSBwYXR0ZXJuIGlz
IHRoZQogICAgIC8vIG9yaWdpbiBvZiB0aGUgZGVzdGluYXRpb24gcmVjdCwgd2hpY2ggaXMgd2hh
dCBXZWJLaXQgZXhwZWN0cy4gU2tpYSB1c2VzCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gNjAwNTgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1hZ2VTa2lhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDEzIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAot
I2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKLQogI2luY2x1ZGUgIk5hdGl2
ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0aW9ucy5oIgorI2VuZGlmCisK
IE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKCkKICAgICA6IG1faXNEYXRhQ29tcGxl
dGUoZmFsc2UpLAogICAgICAgbV9sYXN0UmVxdWVzdFNpemUoMCwgMCksCkBAIC02Myw4ICs2NSwx
MCBAQCBib29sIE5hdGl2ZUltYWdlU2tpYTo6aGFzUmVzaXplZEJpdG1hcChpCiAKIFNrQml0bWFw
IE5hdGl2ZUltYWdlU2tpYTo6cmVzaXplZEJpdG1hcChpbnQgdywgaW50IGgpIGNvbnN0CiB7Cisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgaWYgKG1fcmVzaXplZEltYWdlLndpZHRoKCkgIT0g
dyB8fCBtX3Jlc2l6ZWRJbWFnZS5oZWlnaHQoKSAhPSBoKQogICAgICAgICBtX3Jlc2l6ZWRJbWFn
ZSA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKCp0aGlzLCBza2lhOjpJbWFnZU9wZXJh
dGlvbnM6OlJFU0laRV9MQU5DWk9TMywgdywgaCk7CisjZW5kaWYKIAogICAgIHJldHVybiBtX3Jl
c2l6ZWRJbWFnZTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDYwMDU4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxNSArMzUsMTcgQEAKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxz
LmgiCi0KLSNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
c2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0KICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2lu
Y2x1ZGUgIlNrQ29sb3JQcml2LmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKICNpbmNsdWRlICJT
a1NoYWRlci5oIgogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKIAorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE3OCw3ICsxODAs
MTEgQEAgU2tDb2xvciBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbAogLy8gUGxhdGZv
cm1Db250ZXh0U2tpYSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogLy8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lh
KHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCisjZWxzZQorUGxhdGZvcm1Db250ZXh0U2tp
YTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyogY2FudmFzKQorI2VuZGlmCiAgICAgOiBt
X2NhbnZhcyhjYW52YXMpCiAjaWYgT1MoV0lORE9XUykKICAgICAsIG1fZHJhd2luZ1RvSW1hZ2VC
dWZmZXIoZmFsc2UpCkBAIC0xOTIsNyArMTk4LDExIEBAIFBsYXRmb3JtQ29udGV4dFNraWE6On5Q
bGF0Zm9ybUNvbnRleHRTa2kKIHsKIH0KIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZh
cykKKyNlbHNlCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhTa0NhbnZhcyog
Y2FudmFzKQorI2VuZGlmCiB7CiAgICAgbV9jYW52YXMgPSBjYW52YXM7CiB9CkBAIC01NjAsNyAr
NTcwLDExIEBAIGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXQKIAogYm9v
bCBQbGF0Zm9ybUNvbnRleHRTa2lhOjppc1ByaW50aW5nKCkKIHsKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkKICAgICByZXR1cm4gbV9jYW52YXMtPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuSXNWZWN0
b3JpYWwoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKICNpZiBPUyhM
SU5VWCkgfHwgT1MoV0lORE9XUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gNjAwNTgpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgogCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKICNp
bmNsdWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCiAjaW5jbHVkZSAiU2tEcmF3TG9vcGVyLmgiCiAj
aW5jbHVkZSAiU2tEZXF1ZS5oIgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5o
IgogI2luY2x1ZGUgIlNrUGFpbnQuaCIKICNpbmNsdWRlICJTa1BhdGguaCIKIAorI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorI2Vu
ZGlmCisKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIC8vIFRoaXMgY2xhc3MgaG9sZHMgdGhl
IHBsYXRmb3JtLXNwZWNpZmljIHN0YXRlIGZvciBHcmFwaGljc0NvbnRleHQuIFdlIHB1dApAQCAt
NjQsMTIgKzY4LDIwIEBAIGNsYXNzIFBsYXRmb3JtQ29udGV4dFNraWEgOiBwdWJsaWMgTm9uY28K
IHB1YmxpYzoKICAgICAvLyBGb3IgcHJpbnRpbmcsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgY2Fu
dmFzLiBjYW52YXMgY2FuIGJlIE5VTEwuIElmIHlvdQogICAgIC8vIHN1cHBseSBhIE5VTEwgY2Fu
dmFzLCB5b3UgY2FuIGFsc28gY2FsbCBzZXRDYW52YXMgbGF0ZXIuCisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9ybUNhbnZhcyopOwor
I2Vsc2UKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKik7CisjZW5kaWYKICAgICB+
UGxhdGZvcm1Db250ZXh0U2tpYSgpOwogCiAgICAgLy8gU2V0cyB0aGUgY2FudmFzIGFzc29jaWF0
ZWQgd2l0aCB0aGlzIGNvbnRleHQuIFVzZSB3aGVuIHN1cHBseWluZyBOVUxMCiAgICAgLy8gdG8g
dGhlIGNvbnN0cnVjdG9yLgorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIHZvaWQgc2V0Q2Fu
dmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKik7CisjZWxzZQorICAgIHZvaWQgc2V0Q2FudmFzKFNr
Q2FudmFzKik7CisjZW5kaWYKIAogI2lmIE9TKFdJTkRPV1MpCiAgICAgLy8gSWYgZmFsc2Ugd2Un
cmUgcmVuZGVyaW5nIHRvIGEgR3JhcGhpY3NDb250ZXh0IGZvciBhIHdlYiBwYWdlLCBpZiBmYWxz
ZQpAQCAtMTQ1LDcgKzE1NywxMSBAQCBwdWJsaWM6CiAgICAgLy8gYnkgdGhlIGN1cnJlbnQgYWxw
aGEuCiAgICAgU2tDb2xvciBlZmZlY3RpdmVTdHJva2VDb2xvcigpIGNvbnN0OwogCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCiAgICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcygpIHsgcmV0
dXJuIG1fY2FudmFzOyB9CisjZWxzZQorICAgIFNrQ2FudmFzKiBjYW52YXMoKSB7IHJldHVybiBt
X2NhbnZhczsgfQorI2VuZGlmCiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGVk
IGRvd24gdG8gR3JhcGhpY3NDb250ZXh0LgogICAgIHZvaWQgZHJhd1JlY3QoU2tSZWN0IHJlY3Qp
OwpAQCAtMTYwLDcgKzE3NiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gV2FybmluZzogVGhpcyBmdW5j
dGlvbiBpcyBkZXByZWNhdGVkIHNvIHRoZSB1c2VycyBhcmUgcmVtaW5kZWQgdGhhdCB0aGV5CiAg
ICAgLy8gc2hvdWxkIHVzZSB0aGlzIGxheWVyIG9mIGluZGlyZWN0aW9uIGluc3RlYWQgb2YgdXNp
bmcgdGhlIGNhbnZhcwogICAgIC8vIGRpcmVjdGx5LiBUaGlzIGlzIHRvIGhlbHAgd2l0aCB0aGUg
ZXZlbnR1YWwgc2VyaWFsaXphdGlvbi4KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBza2lh
OjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKCkgY29uc3Q7CisjZWxzZQorICAgIFNrQ2FudmFzKiBj
YW52YXMoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBp
cyBhIHByaW50aW5nIGNvbnRleHQgaW5zdGVhZCBvZiBhIGRpc3BsYXkKICAgICAvLyBjb250ZXh0
LiBCaXRtYXAgc2hvdWxkbid0IGJlIHJlc2FtcGxlZCB3aGVuIHByaW50aW5nIHRvIGtlZXAgdGhl
IGJlc3QKQEAgLTE3OSw3ICsxOTksMTEgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3RhdGU7CiAK
ICAgICAvLyBOVUxMIGluZGljYXRlcyBwYWludGluZyBpcyBkaXNhYmxlZC4gTmV2ZXIgZGVsZXRl
IHRoaXMgb2JqZWN0LgorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIHNraWE6OlBsYXRmb3Jt
Q2FudmFzKiBtX2NhbnZhczsKKyNlbHNlCisgICAgU2tDYW52YXMqIG1fY2FudmFzOworI2VuZGlm
CiAKICAgICAvLyBTdGF0ZXMgc3RhY2suIEVuYWJsZXMgbG9jYWwgZHJhd2luZyBzdGF0ZSBjaGFu
Z2Ugd2l0aCBzYXZlKCkvcmVzdG9yZSgpCiAgICAgLy8gY2FsbHMuCg==
</data>
<flag name="review"
          id="41510"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62408</attachid>
            <date>2010-07-23 04:03:12 -0700</date>
            <delta_ts>2010-08-31 20:10:26 -0700</delta_ts>
            <desc>Patch (add typedef for canvas)</desc>
            <filename>bug-39672.patch</filename>
            <type>text/plain</type>
            <size>5527</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDYzOTU4KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDIwIEBADQorMjAxMC0wNy0yMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAg
VXNlIGEgdHlwZGVmIGZvciB0aGUgY2FudmFzIHR5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOiBSZW1vdmUgbmVlZGxlc3MgaGVh
ZGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lh
KToKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyk6CisgICAgICAgIChQ
bGF0Zm9ybUNvbnRleHRTa2lhOjppc1ByaW50aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4
dFNraWE6OmNhbnZhcyk6CisKIDIwMTAtMDctMjMgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWpp
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAkocmV2aXNpb24gNjI1NDcpDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtNDgs
NyArNDgsNiBAQA0KICNpbmNsdWRlICJTa0Nvcm5lclBhdGhFZmZlY3QuaCIKICNpbmNsdWRlICJT
a1NoYWRlci5oIgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgotI2luY2x1ZGUgInNraWEvZXh0L3Bs
YXRmb3JtX2NhbnZhcy5oIgogCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDYyNTQ3KQ0KKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2lu
ZyBjb3B5KQ0KQEAgLTM2LDE0ICszNiwxNiBAQA0KICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRT
a2lhLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKLSNpbmNsdWRlICJza2lhL2V4dC9pbWFn
ZV9vcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0K
ICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCisjaW5jbHVk
ZSAiU2tEZXZpY2UuaCIgCiAjaW5jbHVkZSAiU2tTaGFkZXIuaCIKICNpbmNsdWRlICJTa0Rhc2hQ
YXRoRWZmZWN0LmgiCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJza2lhL2V4
dC9pbWFnZV9vcGVyYXRpb25zLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xOTQsNyArMTk2LDcgQEANCiAvLyBQ
bGF0Zm9ybUNvbnRleHRTa2lhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBEYW5nZXI6IGNhbnZhcyBjYW4gYmUgTlVMTC4KLVBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52
YXMqIGNhbnZhcykKK1BsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoUGxh
dGZvcm1Db250ZXh0Q2FudmFzVHlwZSogY2FudmFzKQogICAgIDogbV9jYW52YXMoY2FudmFzKQog
I2lmIE9TKFdJTkRPV1MpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQpAQCAt
MjA4LDcgKzIxMCw3IEBADQogewogfQogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENh
bnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQordm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpzZXRDYW52YXMoUGxhdGZvcm1Db250ZXh0Q2FudmFzVHlwZSogY2FudmFzKQogewogICAg
IG1fY2FudmFzID0gY2FudmFzOwogfQpAQCAtNTg4LDcgKzU5MCwxMSBAQA0KIAogYm9vbCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjppc1ByaW50aW5nKCkKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkK
ICAgICByZXR1cm4gbV9jYW52YXMtPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuSXNWZWN0b3JpYWwo
KTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6Z2V0SW1hZ2VSZXNhbXBsaW5nSGludChXZWJDb3JlOjpJbnRTaXplKiBzcmNT
aXplLCBXZWJDb3JlOjpGbG9hdFNpemUqIGRzdFNpemUpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAko
cmV2aXNpb24gNjI1NDcpDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQ0KQEAgLTM0LDEzICszNCwyMCBAQA0KICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb25jb3B5YWJsZS5oIgogCisj
aW5jbHVkZSAiU2tDYW52YXMuaCIKICNpbmNsdWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCiAjaW5j
bHVkZSAiU2tEcmF3TG9vcGVyLmgiCiAjaW5jbHVkZSAiU2tEZXF1ZS5oIgotI2luY2x1ZGUgInNr
aWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgogI2luY2x1ZGUgIlNrUGFpbnQuaCIKICNpbmNsdWRl
ICJTa1BhdGguaCIKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgInNraWEvZXh0
L3BsYXRmb3JtX2NhbnZhcy5oIgordHlwZWRlZiBza2lhOjpQbGF0Zm9ybUNhbnZhcyBQbGF0Zm9y
bUNvbnRleHRDYW52YXNUeXBlOworI2Vsc2UKK3R5cGVkZWYgU2tDYW52YXMgUGxhdGZvcm1Db250
ZXh0Q2FudmFzVHlwZTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAvLyBU
aGlzIGNsYXNzIGhvbGRzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBzdGF0ZSBmb3IgR3JhcGhpY3ND
b250ZXh0LiBXZSBwdXQKQEAgLTY0LDEyICs3MSwxMiBAQA0KIHB1YmxpYzoKICAgICAvLyBGb3Ig
cHJpbnRpbmcsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgY2FudmFzLiBjYW52YXMgY2FuIGJlIE5V
TEwuIElmIHlvdQogICAgIC8vIHN1cHBseSBhIE5VTEwgY2FudmFzLCB5b3UgY2FuIGFsc28gY2Fs
bCBzZXRDYW52YXMgbGF0ZXIuCi0gICAgUGxhdGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9y
bUNhbnZhcyopOworICAgIFBsYXRmb3JtQ29udGV4dFNraWEoUGxhdGZvcm1Db250ZXh0Q2FudmFz
VHlwZSopOwogICAgIH5QbGF0Zm9ybUNvbnRleHRTa2lhKCk7CiAKICAgICAvLyBTZXRzIHRoZSBj
YW52YXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4gVXNlIHdoZW4gc3VwcGx5aW5nIE5V
TEwKICAgICAvLyB0byB0aGUgY29uc3RydWN0b3IuCi0gICAgdm9pZCBzZXRDYW52YXMoc2tpYTo6
UGxhdGZvcm1DYW52YXMqKTsKKyAgICB2b2lkIHNldENhbnZhcyhQbGF0Zm9ybUNvbnRleHRDYW52
YXNUeXBlKik7CiAKICNpZiBPUyhXSU5ET1dTKQogICAgIC8vIElmIGZhbHNlIHdlJ3JlIHJlbmRl
cmluZyB0byBhIEdyYXBoaWNzQ29udGV4dCBmb3IgYSB3ZWIgcGFnZSwgaWYgZmFsc2UKQEAgLTE0
NSw3ICsxNTIsNyBAQA0KICAgICAvLyBieSB0aGUgY3VycmVudCBhbHBoYS4KICAgICBTa0NvbG9y
IGVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkgY29uc3Q7CiAKLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZh
cyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAgICBQbGF0Zm9ybUNvbnRleHRDYW52
YXNUeXBlKiBjYW52YXMoKSB7IHJldHVybiBtX2NhbnZhczsgfQogCiAgICAgV2ViQ29yZTo6SW50
ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdDsKICAgICB2b2lk
IHNldEludGVycG9sYXRpb25RdWFsaXR5KFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5IGlu
dGVycG9sYXRpb25RdWFsaXR5KTsKQEAgLTE2Myw3ICsxNzAsNyBAQA0KICAgICAvLyBXYXJuaW5n
OiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc28gdGhlIHVzZXJzIGFyZSByZW1pbmRlZCB0
aGF0IHRoZXkKICAgICAvLyBzaG91bGQgdXNlIHRoaXMgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gaW5z
dGVhZCBvZiB1c2luZyB0aGUgY2FudmFzCiAgICAgLy8gZGlyZWN0bHkuIFRoaXMgaXMgdG8gaGVs
cCB3aXRoIHRoZSBldmVudHVhbCBzZXJpYWxpemF0aW9uLgotICAgIHNraWE6OlBsYXRmb3JtQ2Fu
dmFzKiBjYW52YXMoKSBjb25zdDsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYW52YXNUeXBlKiBjYW52
YXMoKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRleHQgaXMgYSBwcmludGlu
ZyBjb250ZXh0IGluc3RlYWQgb2YgYSBkaXNwbGF5CiAgICAgLy8gY29udGV4dC4gQml0bWFwIHNo
b3VsZG4ndCBiZSByZXNhbXBsZWQgd2hlbiBwcmludGluZyB0byBrZWVwIHRoZSBiZXN0CkBAIC0x
ODcsNyArMTk0LDcgQEANCiAgICAgc3RydWN0IFN0YXRlOwogCiAgICAgLy8gTlVMTCBpbmRpY2F0
ZXMgcGFpbnRpbmcgaXMgZGlzYWJsZWQuIE5ldmVyIGRlbGV0ZSB0aGlzIG9iamVjdC4KLSAgICBz
a2lhOjpQbGF0Zm9ybUNhbnZhcyogbV9jYW52YXM7CisgICAgUGxhdGZvcm1Db250ZXh0Q2FudmFz
VHlwZSogbV9jYW52YXM7CiAKICAgICAvLyBTdGF0ZXMgc3RhY2suIEVuYWJsZXMgbG9jYWwgZHJh
d2luZyBzdGF0ZSBjaGFuZ2Ugd2l0aCBzYXZlKCkvcmVzdG9yZSgpCiAgICAgLy8gY2FsbHMuCg==
</data>
<flag name="review"
          id="50594"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66669</attachid>
            <date>2010-09-06 14:29:32 -0700</date>
            <delta_ts>2010-09-07 21:44:57 -0700</delta_ts>
            <desc>Move FontCustomPlatformData to platform/skia</desc>
            <filename>FontCustomPlatformData.patch</filename>
            <type>text/plain</type>
            <size>24389</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Njg0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDktMDYgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YSBpcyBub3QgQ2hyb21pdW0tc3BlY2lmaWMuIE1vdmUgaXQgdG8gcGxh
dGZvcm0vc2tpYS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIHB1cmUg
cmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRD
dXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3Jt
RGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVbmlxdWVG
b250TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVGb250U3RyZWFtOjpSZW1vdGVGb250
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90ZUZvbnRTdHJlYW06On5SZW1vdGVGb250
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90ZUZvbnRTdHJlYW06OnJld2luZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdGVGb250U3RyZWFtOjpyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3JtYXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGEp
OgorCiAyMDEwLTA5LTA2ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gNjY4NDgpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MjI4NCw4ICsyMjg0LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRm
b3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwJywKQEAgLTI0NTgsNiArMjQ1Niw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UG9pbnRTa2lh
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lh
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhZGllbnRTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCcsCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDY2ODQ4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTIyMCw3ICsxMjIwLDcgQEAKIAogICAgICAg
ICAgICAgIyBUaGUgTWFjIGN1cnJlbnRseSB1c2VzIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
IGZyb20KICAgICAgICAgICAgICMgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjLCBpbmNsdWRlZCBieSBy
ZWdleCBhYm92ZSwgaW5zdGVhZC4KLSAgICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCisgICAgICAgICAgICAnLi4vcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAKICAgICAg
ICAgICAgICMgVGhlIE1hYyBjdXJyZW50bHkgdXNlcyBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
Lm1tLCB3aGljaCBpcyBub3QKICAgICAgICAgICAgICMgcmVsYXRlZCB0byBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtLmNwcC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24g
NjY4NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxMyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDcsIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKLQotI2lm
IE9TKFdJTkRPV1MpCi0jaW5jbHVkZSAiQmFzZTY0LmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKLSNpbmNsdWRlICJPcGVuVHlwZVV0aWxpdGllcy5oIgotI2VsaWYgT1MoTElOVVgpCi0j
aW5jbHVkZSAiU2tTdHJlYW0uaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0
YS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiT3BlblR5cGVTYW5p
dGl6ZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQotI2lmIE9TKFdJTkRPV1MpCi0j
aW5jbHVkZSA8b2JqYmFzZS5oPgotI2VsaWYgT1MoTElOVVgpCi0jaW5jbHVkZSA8Y3N0cmluZz4K
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZvbnRDdXN0b21QbGF0Zm9ybURhdGE6
On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIGlmICht
X2ZvbnRSZWZlcmVuY2UpCi0gICAgICAgIFJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KG1fZm9udFJl
ZmVyZW5jZSk7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBpZiAobV9mb250UmVmZXJlbmNlKQotICAg
ICAgICBtX2ZvbnRSZWZlcmVuY2UtPnVucmVmKCk7Ci0jZW5kaWYKLX0KLQotRm9udFBsYXRmb3Jt
RGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgaXRhbGljLCBGb250UmVuZGVyaW5nTW9kZSBtb2RlKQotewotI2lmIE9T
KFdJTkRPV1MpCi0gICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7Ci0KLSAgICBMT0dGT05UIGxv
Z0ZvbnQ7Ci0gICAgLy8gbV9uYW1lIGNvbWVzIGZyb20gY3JlYXRlVW5pcXVlRm9udE5hbWUsIHdo
aWNoLCBpbiB0dXJuLCBnZXRzCi0gICAgLy8gaXQgZnJvbSBiYXNlNjQtZW5jb2RlZCB1dWlkICgx
MjgtYml0KS4gU28sIG1fbmFtZQotICAgIC8vIGNhbiBuZXZlciBiZSBsb25nZXIgdGhhbiBMRl9G
QUNFU0laRSAoMzIpLgotICAgIGlmIChtX25hbWUubGVuZ3RoKCkgKyAxID49IExGX0ZBQ0VTSVpF
KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRm9udFBs
YXRmb3JtRGF0YSgpOwotICAgIH0KLSAgICBtZW1jcHkobG9nRm9udC5sZkZhY2VOYW1lLCBtX25h
bWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwKLSAgICAgICAgICAgc2l6ZW9mKGxv
Z0ZvbnQubGZGYWNlTmFtZVswXSkgKiAoMSArIG1fbmFtZS5sZW5ndGgoKSkpOwotCi0gICAgLy8g
RklYTUU6IGFsbW9zdCBpZGVudGljYWwgdG8gRmlsbExvZ0ZvbnQgaW4gRm9udENhY2hlV2luLmNw
cC4KLSAgICAvLyBOZWVkIHRvIHJlZmFjdG9yLiAKLSAgICBsb2dGb250LmxmSGVpZ2h0ID0gLXNp
emU7Ci0gICAgbG9nRm9udC5sZldpZHRoID0gMDsKLSAgICBsb2dGb250LmxmRXNjYXBlbWVudCA9
IDA7Ci0gICAgbG9nRm9udC5sZk9yaWVudGF0aW9uID0gMDsKLSAgICBsb2dGb250LmxmVW5kZXJs
aW5lID0gZmFsc2U7Ci0gICAgbG9nRm9udC5sZlN0cmlrZU91dCA9IGZhbHNlOwotICAgIGxvZ0Zv
bnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwotICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNp
b24gPSBPVVRfVFRfT05MWV9QUkVDSVM7Ci0gICAgbG9nRm9udC5sZlF1YWxpdHkgPSBDaHJvbWl1
bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBOT05B
TlRJQUxJQVNFRF9RVUFMSVRZIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUVVB
TElUWTsgLy8gSG9ub3IgdXNlcidzIGRlc2t0b3Agc2V0dGluZ3MuCi0gICAgbG9nRm9udC5sZlBp
dGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFOwotICAgIGxvZ0ZvbnQu
bGZJdGFsaWMgPSBpdGFsaWM7Ci0gICAgbG9nRm9udC5sZldlaWdodCA9IGJvbGQgPyA3MDAgOiA0
MDA7Ci0KLSAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCk7Ci0g
ICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNpemUpOwotI2VsaWYgT1MoTElOVVgp
Ci0gICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURh
dGEobV9mb250UmVmZXJlbmNlLCAiIiwgc2l6ZSwgYm9sZCAmJiAhbV9mb250UmVmZXJlbmNlLT5p
c0JvbGQoKSwgaXRhbGljICYmICFtX2ZvbnRSZWZlcmVuY2UtPmlzSXRhbGljKCkpOwotI2Vsc2UK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKCk7Ci0j
ZW5kaWYKLX0KLQotI2lmIE9TKFdJTkRPV1MpCi0vLyBDcmVhdGVzIGEgdW5pcXVlIGFuZCB1bnBy
ZWRpY3RhYmxlIGZvbnQgbmFtZSwgaW4gb3JkZXIgdG8gYXZvaWQgY29sbGlzaW9ucyBhbmQgdG8K
LS8vIG5vdCBhbGxvdyBhY2Nlc3MgZnJvbSBDU1MuCi1zdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaXF1
ZUZvbnROYW1lKCkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gZm9udFV1aWQoc2l6ZW9mKEdVSUQpKTsK
LSAgICBDb0NyZWF0ZUd1aWQocmVpbnRlcnByZXRfY2FzdDxHVUlEKj4oZm9udFV1aWQuZGF0YSgp
KSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZm9udE5hbWVWZWN0b3I7Ci0gICAgYmFzZTY0RW5jb2Rl
KGZvbnRVdWlkLCBmb250TmFtZVZlY3Rvcik7Ci0gICAgQVNTRVJUKGZvbnROYW1lVmVjdG9yLnNp
emUoKSA8IExGX0ZBQ0VTSVpFKTsKLSAgICByZXR1cm4gU3RyaW5nKGZvbnROYW1lVmVjdG9yLmRh
dGEoKSwgZm9udE5hbWVWZWN0b3Iuc2l6ZSgpKTsKLX0KLSNlbmRpZgotCi0jaWYgT1MoTElOVVgp
Ci1jbGFzcyBSZW1vdGVGb250U3RyZWFtIDogcHVibGljIFNrU3RyZWFtIHsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBSZW1vdGVGb250U3RyZWFtKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZm
ZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fb2Zmc2V0KDApCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgflJlbW90ZUZvbnRTdHJlYW0oKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcmV3aW5kKCkKLSAgICB7Ci0gICAgICAgIG1fb2Zmc2V0
ID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmlydHVhbCBzaXplX3Qg
cmVhZCh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKCFidWZm
ZXIgJiYgIXNpemUpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVxdWVzdCBmb3IgdGhlIGxl
bmd0aCBvZiB0aGUgc3RyZWFtLgotICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLT5zaXplKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFidWZmZXIpIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSByZXF1ZXN0IHRvIHNraXAgYnl0ZXMuIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0
ZWQuCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICAvLyBUaGlzIGlz
IGEgcmVxdWVzdCB0byByZWFkIGJ5dGVzLgotICAgICAgICBpZiAoIW1fYnVmZmVyLT5kYXRhKCkg
fHwgIW1fYnVmZmVyLT5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgc2l6
ZV90IGxlZnQgPSBtX2J1ZmZlci0+c2l6ZSgpIC0gbV9vZmZzZXQ7Ci0gICAgICAgIHNpemVfdCB0
b1JlYWQgPSAobGVmdCA+IHNpemUpID8gc2l6ZSA6IGxlZnQ7Ci0gICAgICAgIHN0ZDo6bWVtY3B5
KGJ1ZmZlciwgbV9idWZmZXItPmRhdGEoKSArIG1fb2Zmc2V0LCB0b1JlYWQpOwotICAgICAgICBt
X29mZnNldCArPSB0b1JlYWQ7Ci0gICAgICAgIHJldHVybiB0b1JlYWQ7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fYnVmZmVyOwotICAgIHNpemVfdCBtX29m
ZnNldDsKLX07Ci0jZW5kaWYKLQotRm9udEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1
c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlRfQVJH
KGJ1ZmZlciwgYnVmZmVyKTsKLQotI2lmIEVOQUJMRShPUEVOVFlQRV9TQU5JVElaRVIpCi0gICAg
T3BlblR5cGVTYW5pdGl6ZXIgc2FuaXRpemVyKGJ1ZmZlcik7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gdHJhbnNjb2RlQnVmZmVyID0gc2FuaXRpemVyLnNhbml0aXplKCk7Ci0gICAgaWYgKCF0
cmFuc2NvZGVCdWZmZXIpCi0gICAgICAgIHJldHVybiAwOyAvLyB2YWxpZGF0aW9uIGZhaWxlZC4K
LSAgICBidWZmZXIgPSB0cmFuc2NvZGVCdWZmZXIuZ2V0KCk7Ci0jZW5kaWYKLQotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgLy8gSW50cm9kdWNlIHRoZSBmb250IHRvIEdESS4gQWRkRm9udE1lbVJlc291
cmNlRXggc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlLCBiZWNhdXNlIGl0IHdpbGwgcG9sbHV0ZSB0
aGUgcHJvY2VzcydzCi0gICAgLy8gZm9udCBuYW1lc3BhY2UgKFdpbmRvd3MgaGFzIG5vIEFQSSBm
b3IgY3JlYXRpbmcgYW4gSEZPTlQgZnJvbSBkYXRhIHdpdGhvdXQgZXhwb3NpbmcgdGhlIGZvbnQg
dG8gdGhlCi0gICAgLy8gZW50aXJlIHByb2Nlc3MgZmlyc3QpLgotICAgIFN0cmluZyBmb250TmFt
ZSA9IGNyZWF0ZVVuaXF1ZUZvbnROYW1lKCk7Ci0gICAgSEFORExFIGZvbnRSZWZlcmVuY2UgPSBy
ZW5hbWVBbmRBY3RpdmF0ZUZvbnQoYnVmZmVyLCBmb250TmFtZSk7Ci0gICAgaWYgKCFmb250UmVm
ZXJlbmNlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0
Zm9ybURhdGEoZm9udFJlZmVyZW5jZSwgZm9udE5hbWUpOwotI2VsaWYgT1MoTElOVVgpCi0gICAg
UmVtb3RlRm9udFN0cmVhbSogc3RyZWFtID0gbmV3IFJlbW90ZUZvbnRTdHJlYW0oYnVmZmVyKTsK
LSAgICBTa1R5cGVmYWNlKiB0eXBlZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21TdHJlYW0o
c3RyZWFtKTsKLSAgICBpZiAoIXR5cGVmYWNlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEodHlwZWZhY2UpOwotI2Vsc2UKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLWJvb2wgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YTo6c3VwcG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3JtYXQpCi17Ci0g
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgInRydWV0eXBlIikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZm9ybWF0LCAib3BlbnR5cGUiKQotI2lmIEVOQUJMRShPUEVOVFlQRV9TQU5J
VElaRVIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgIndvZmYiKQotI2Vu
ZGlmCi0gICAgOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkocmV2aXNpb24g
NjY4NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDcsIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhX2gKLSNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9o
Ci0KLSNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLSNpZiBPUyhXSU5ET1dTKQotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VsaWYgT1Mo
TElOVVgpCi0jaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQot
c3RydWN0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEgOiBOb25jb3B5YWJsZSB7Ci0jaWYgT1MoV0lO
RE9XUykKLSAgICBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKEhBTkRMRSBmb250UmVmZXJlbmNlLCBj
b25zdCBTdHJpbmcmIG5hbWUpCi0gICAgICAgIDogbV9mb250UmVmZXJlbmNlKGZvbnRSZWZlcmVu
Y2UpCi0gICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAge30KLSNlbGlmIE9TKExJTlVYKQotICAg
IGV4cGxpY2l0IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSogdHlwZWZhY2UpCi0g
ICAgICAgIDogbV9mb250UmVmZXJlbmNlKHR5cGVmYWNlKQotICAgIHt9Ci0jZW5kaWYKLQotICAg
IH5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQ
bGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVu
ZGVyaW5nTW9kZSk7Ci0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJp
bmcmKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgSEFORExFIG1fZm9udFJlZmVyZW5jZTsKLSAg
ICBTdHJpbmcgbV9uYW1lOwotI2VsaWYgT1MoTElOVVgpCi0gICAgU2tUeXBlZmFjZSogbV9mb250
UmVmZXJlbmNlOwotI2VuZGlmCi19OwotCi1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVG
b250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciopOwotfQotCi0jZW5kaWYgLy8gRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YV9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4
LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCisKKyNpZiBPUyhXSU5ET1dT
KQorI2luY2x1ZGUgIkJhc2U2NC5oIgorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5j
bHVkZSAiT3BlblR5cGVVdGlsaXRpZXMuaCIKKyNlbGlmIE9TKExJTlVYKQorI2luY2x1ZGUgIlNr
U3RyZWFtLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9wZW5UeXBlU2FuaXRpemVyLmgiCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPG9i
amJhc2UuaD4KKyNlbGlmIE9TKExJTlVYKQorI2luY2x1ZGUgPGNzdHJpbmc+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3Rv
bVBsYXRmb3JtRGF0YSgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICBpZiAobV9mb250UmVmZXJl
bmNlKQorICAgICAgICBSZW1vdmVGb250TWVtUmVzb3VyY2VFeChtX2ZvbnRSZWZlcmVuY2UpOwor
I2VsaWYgT1MoTElOVVgpCisgICAgaWYgKG1fZm9udFJlZmVyZW5jZSkKKyAgICAgICAgbV9mb250
UmVmZXJlbmNlLT51bnJlZigpOworI2VuZGlmCit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYywgRm9udFJlbmRlcmluZ01vZGUgbW9kZSkKK3sKKyNpZiBPUyhXSU5ET1dTKQor
ICAgIEFTU0VSVChtX2ZvbnRSZWZlcmVuY2UpOworCisgICAgTE9HRk9OVCBsb2dGb250OworICAg
IC8vIG1fbmFtZSBjb21lcyBmcm9tIGNyZWF0ZVVuaXF1ZUZvbnROYW1lLCB3aGljaCwgaW4gdHVy
biwgZ2V0cworICAgIC8vIGl0IGZyb20gYmFzZTY0LWVuY29kZWQgdXVpZCAoMTI4LWJpdCkuIFNv
LCBtX25hbWUKKyAgICAvLyBjYW4gbmV2ZXIgYmUgbG9uZ2VyIHRoYW4gTEZfRkFDRVNJWkUgKDMy
KS4KKyAgICBpZiAobV9uYW1lLmxlbmd0aCgpICsgMSA+PSBMRl9GQUNFU0laRSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEo
KTsKKyAgICB9CisgICAgbWVtY3B5KGxvZ0ZvbnQubGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksCisgICAgICAgICAgIHNpemVvZihsb2dGb250LmxmRmFj
ZU5hbWVbMF0pICogKDEgKyBtX25hbWUubGVuZ3RoKCkpKTsKKworICAgIC8vIEZJWE1FOiBhbG1v
c3QgaWRlbnRpY2FsIHRvIEZpbGxMb2dGb250IGluIEZvbnRDYWNoZVdpbi5jcHAuCisgICAgLy8g
TmVlZCB0byByZWZhY3Rvci4gCisgICAgbG9nRm9udC5sZkhlaWdodCA9IC1zaXplOworICAgIGxv
Z0ZvbnQubGZXaWR0aCA9IDA7CisgICAgbG9nRm9udC5sZkVzY2FwZW1lbnQgPSAwOworICAgIGxv
Z0ZvbnQubGZPcmllbnRhdGlvbiA9IDA7CisgICAgbG9nRm9udC5sZlVuZGVybGluZSA9IGZhbHNl
OworICAgIGxvZ0ZvbnQubGZTdHJpa2VPdXQgPSBmYWxzZTsKKyAgICBsb2dGb250LmxmQ2hhclNl
dCA9IERFRkFVTFRfQ0hBUlNFVDsKKyAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RU
X09OTFlfUFJFQ0lTOworICAgIGxvZ0ZvbnQubGZRdWFsaXR5ID0gQ2hyb21pdW1CcmlkZ2U6Omxh
eW91dFRlc3RNb2RlKCkgPworICAgICAgICAgICAgICAgICAgICAgICAgTk9OQU5USUFMSUFTRURf
UVVBTElUWSA6CisgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1FVQUxJVFk7IC8vIEhv
bm9yIHVzZXIncyBkZXNrdG9wIHNldHRpbmdzLgorICAgIGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWls
eSA9IERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsKKyAgICBsb2dGb250LmxmSXRhbGljID0g
aXRhbGljOworICAgIGxvZ0ZvbnQubGZXZWlnaHQgPSBib2xkID8gNzAwIDogNDAwOworCisgICAg
SEZPTlQgaGZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QoJmxvZ0ZvbnQpOworICAgIHJldHVybiBG
b250UGxhdGZvcm1EYXRhKGhmb250LCBzaXplKTsKKyNlbGlmIE9TKExJTlVYKQorICAgIEFTU0VS
VChtX2ZvbnRSZWZlcmVuY2UpOworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udFJl
ZmVyZW5jZSwgIiIsIHNpemUsIGJvbGQgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNCb2xkKCksIGl0
YWxpYyAmJiAhbV9mb250UmVmZXJlbmNlLT5pc0l0YWxpYygpKTsKKyNlbHNlCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YSgpOworI2VuZGlmCit9CisK
KyNpZiBPUyhXSU5ET1dTKQorLy8gQ3JlYXRlcyBhIHVuaXF1ZSBhbmQgdW5wcmVkaWN0YWJsZSBm
b250IG5hbWUsIGluIG9yZGVyIHRvIGF2b2lkIGNvbGxpc2lvbnMgYW5kIHRvCisvLyBub3QgYWxs
b3cgYWNjZXNzIGZyb20gQ1NTLgorc3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgp
Cit7CisgICAgVmVjdG9yPGNoYXI+IGZvbnRVdWlkKHNpemVvZihHVUlEKSk7CisgICAgQ29DcmVh
dGVHdWlkKHJlaW50ZXJwcmV0X2Nhc3Q8R1VJRCo+KGZvbnRVdWlkLmRhdGEoKSkpOworCisgICAg
VmVjdG9yPGNoYXI+IGZvbnROYW1lVmVjdG9yOworICAgIGJhc2U2NEVuY29kZShmb250VXVpZCwg
Zm9udE5hbWVWZWN0b3IpOworICAgIEFTU0VSVChmb250TmFtZVZlY3Rvci5zaXplKCkgPCBMRl9G
QUNFU0laRSk7CisgICAgcmV0dXJuIFN0cmluZyhmb250TmFtZVZlY3Rvci5kYXRhKCksIGZvbnRO
YW1lVmVjdG9yLnNpemUoKSk7Cit9CisjZW5kaWYKKworI2lmIE9TKExJTlVYKQorY2xhc3MgUmVt
b3RlRm9udFN0cmVhbSA6IHB1YmxpYyBTa1N0cmVhbSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
UmVtb3RlRm9udFN0cmVhbShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQorICAgICAg
ICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5SZW1vdGVGb250U3RyZWFtKCkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIHJld2luZCgpCisgICAgeworICAgICAgICBtX29mZnNldCA9IDA7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgc2l6ZV90IHJlYWQodm9pZCog
YnVmZmVyLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghYnVmZmVyICYmICFzaXpl
KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHJlcXVlc3QgZm9yIHRoZSBsZW5ndGggb2YgdGhl
IHN0cmVhbS4KKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci0+c2l6ZSgpOworICAgICAgICB9
CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVxdWVz
dCB0byBza2lwIGJ5dGVzLiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhpcyBpcyBhIHJlcXVlc3Qg
dG8gcmVhZCBieXRlcy4KKyAgICAgICAgaWYgKCFtX2J1ZmZlci0+ZGF0YSgpIHx8ICFtX2J1ZmZl
ci0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHNpemVfdCBsZWZ0ID0g
bV9idWZmZXItPnNpemUoKSAtIG1fb2Zmc2V0OworICAgICAgICBzaXplX3QgdG9SZWFkID0gKGxl
ZnQgPiBzaXplKSA/IHNpemUgOiBsZWZ0OworICAgICAgICBzdGQ6Om1lbWNweShidWZmZXIsIG1f
YnVmZmVyLT5kYXRhKCkgKyBtX29mZnNldCwgdG9SZWFkKTsKKyAgICAgICAgbV9vZmZzZXQgKz0g
dG9SZWFkOworICAgICAgICByZXR1cm4gdG9SZWFkOworICAgIH0KKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2J1ZmZlcjsKKyAgICBzaXplX3QgbV9vZmZzZXQ7Cit9Owor
I2VuZGlmCisKK0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9y
bURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCit7CisgICAgQVNTRVJUX0FSRyhidWZmZXIsIGJ1
ZmZlcik7CisKKyNpZiBFTkFCTEUoT1BFTlRZUEVfU0FOSVRJWkVSKQorICAgIE9wZW5UeXBlU2Fu
aXRpemVyIHNhbml0aXplcihidWZmZXIpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHRyYW5z
Y29kZUJ1ZmZlciA9IHNhbml0aXplci5zYW5pdGl6ZSgpOworICAgIGlmICghdHJhbnNjb2RlQnVm
ZmVyKQorICAgICAgICByZXR1cm4gMDsgLy8gdmFsaWRhdGlvbiBmYWlsZWQuCisgICAgYnVmZmVy
ID0gdHJhbnNjb2RlQnVmZmVyLmdldCgpOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAg
IC8vIEludHJvZHVjZSB0aGUgZm9udCB0byBHREkuIEFkZEZvbnRNZW1SZXNvdXJjZUV4IHNob3Vs
ZCBiZSB1c2VkIHdpdGggY2FyZSwgYmVjYXVzZSBpdCB3aWxsIHBvbGx1dGUgdGhlIHByb2Nlc3Mn
cworICAgIC8vIGZvbnQgbmFtZXNwYWNlIChXaW5kb3dzIGhhcyBubyBBUEkgZm9yIGNyZWF0aW5n
IGFuIEhGT05UIGZyb20gZGF0YSB3aXRob3V0IGV4cG9zaW5nIHRoZSBmb250IHRvIHRoZQorICAg
IC8vIGVudGlyZSBwcm9jZXNzIGZpcnN0KS4KKyAgICBTdHJpbmcgZm9udE5hbWUgPSBjcmVhdGVV
bmlxdWVGb250TmFtZSgpOworICAgIEhBTkRMRSBmb250UmVmZXJlbmNlID0gcmVuYW1lQW5kQWN0
aXZhdGVGb250KGJ1ZmZlciwgZm9udE5hbWUpOworICAgIGlmICghZm9udFJlZmVyZW5jZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGZv
bnRSZWZlcmVuY2UsIGZvbnROYW1lKTsKKyNlbGlmIE9TKExJTlVYKQorICAgIFJlbW90ZUZvbnRT
dHJlYW0qIHN0cmVhbSA9IG5ldyBSZW1vdGVGb250U3RyZWFtKGJ1ZmZlcik7CisgICAgU2tUeXBl
ZmFjZSogdHlwZWZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tU3RyZWFtKHN0cmVhbSk7Cisg
ICAgaWYgKCF0eXBlZmFjZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhKHR5cGVmYWNlKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitib29sIEZvbnRDdXN0b21QbGF0Zm9ybURh
dGE6OnN1cHBvcnRzRm9ybWF0KGNvbnN0IFN0cmluZyYgZm9ybWF0KQoreworICAgIHJldHVybiBl
cXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJ0cnVldHlwZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KGZvcm1hdCwgIm9wZW50eXBlIikKKyNpZiBFTkFCTEUoT1BFTlRZUEVfU0FOSVRJWkVSKQorICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQsICJ3b2ZmIikKKyNlbmRpZgorICAgIDsK
K30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisjZGVm
aW5lIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAorCisjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01v
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgPHdpbmRvd3MuaD4KKyNlbGlmIE9TKExJTlVYKQorI2luY2x1ZGUgIlNrVHlwZWZhY2Uu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURh
dGE7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK3N0cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
IDogTm9uY29weWFibGUgeworI2lmIE9TKFdJTkRPV1MpCisgICAgRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YShIQU5ETEUgZm9udFJlZmVyZW5jZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6
IG1fZm9udFJlZmVyZW5jZShmb250UmVmZXJlbmNlKQorICAgICAgICAsIG1fbmFtZShuYW1lKQor
ICAgIHt9CisjZWxpZiBPUyhMSU5VWCkKKyAgICBleHBsaWNpdCBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhKFNrVHlwZWZhY2UqIHR5cGVmYWNlKQorICAgICAgICA6IG1fZm9udFJlZmVyZW5jZSh0eXBl
ZmFjZSkKKyAgICB7fQorI2VuZGlmCisKKyAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwor
CisgICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJv
bGQsIGJvb2wgaXRhbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
b250UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOworCisgICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJik7CisKKyNpZiBPUyhXSU5ET1dTKQorICAg
IEhBTkRMRSBtX2ZvbnRSZWZlcmVuY2U7CisgICAgU3RyaW5nIG1fbmFtZTsKKyNlbGlmIE9TKExJ
TlVYKQorICAgIFNrVHlwZWZhY2UqIG1fZm9udFJlZmVyZW5jZTsKKyNlbmRpZgorfTsKKworRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRC
dWZmZXIqKTsKK30KKworI2VuZGlmIC8vIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAo=
</data>
<flag name="review"
          id="55748"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66841</attachid>
            <date>2010-09-07 21:44:57 -0700</date>
            <delta_ts>2010-09-09 13:33:15 -0700</delta_ts>
            <desc>Move FontCustomPlatformData to platform/skia</desc>
            <filename>FontCustomPlatformData.patch</filename>
            <type>text/plain</type>
            <size>24118</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Njk0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDktMDcgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YSBpcyBub3QgQ2hyb21pdW0tc3BlY2lmaWMuIE1vdmUgaXQgdG8gcGxh
dGZvcm0vc2tpYS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIHB1cmUg
cmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6
IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oLgorCiAyMDEwLTA5LTA3ICBKYW4g
RSBIYW5zc2VuICA8amhhbnNzZW5Ac2VuY2hhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
bmRyZWFzIEtsaW5nLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY2OTQzKQorKysgV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIyODQsOCArMjI4NCw2IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdp
bi5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcCcsCkBA
IC0yNDU4LDYgKzI0NTYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA2Njk0MykK
KysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MjAsNyArMTIyMCw3IEBACiAKICAgICAgICAgICAgICMgVGhlIE1hYyBjdXJyZW50bHkgdXNlcyBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBmcm9tCiAgICAgICAgICAgICAjIHBsYXRmb3JtL2dy
YXBoaWNzL21hYywgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGluc3RlYWQuCi0gICAgICAgICAg
ICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAnLAorICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAnLAogCiAgICAgICAgICAgICAjIFRoZSBNYWMgY3VycmVudGx5IHVzZXMg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbSwgd2hpY2ggaXMgbm90CiAgICAgICAgICAgICAj
IHJlbGF0ZWQgdG8gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAuCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDY2OTQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwyMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRl
ciwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmgiCi0KLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgIkJhc2U2NC5o
IgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCi0jaW5jbHVkZSAiT3BlblR5cGVVdGlsaXRp
ZXMuaCIKLSNlbGlmIE9TKExJTlVYKQotI2luY2x1ZGUgIlNrU3RyZWFtLmgiCi0jZW5kaWYKLQot
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIk9wZW5UeXBlU2FuaXRpemVyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCi0KLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgPG9iamJhc2UuaD4KLSNlbGlmIE9TKExJ
TlVYKQotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1Gb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCi17Ci0j
aWYgT1MoV0lORE9XUykKLSAgICBpZiAobV9mb250UmVmZXJlbmNlKQotICAgICAgICBSZW1vdmVG
b250TWVtUmVzb3VyY2VFeChtX2ZvbnRSZWZlcmVuY2UpOwotI2VsaWYgT1MoTElOVVgpCi0gICAg
aWYgKG1fZm9udFJlZmVyZW5jZSkKLSAgICAgICAgbV9mb250UmVmZXJlbmNlLT51bnJlZigpOwot
I2VuZGlmCi19Ci0KLUZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9u
dFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udFJlbmRl
cmluZ01vZGUgbW9kZSkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIEFTU0VSVChtX2ZvbnRSZWZl
cmVuY2UpOwotCi0gICAgTE9HRk9OVCBsb2dGb250OwotICAgIC8vIG1fbmFtZSBjb21lcyBmcm9t
IGNyZWF0ZVVuaXF1ZUZvbnROYW1lLCB3aGljaCwgaW4gdHVybiwgZ2V0cwotICAgIC8vIGl0IGZy
b20gYmFzZTY0LWVuY29kZWQgdXVpZCAoMTI4LWJpdCkuIFNvLCBtX25hbWUKLSAgICAvLyBjYW4g
bmV2ZXIgYmUgbG9uZ2VyIHRoYW4gTEZfRkFDRVNJWkUgKDMyKS4KLSAgICBpZiAobV9uYW1lLmxl
bmd0aCgpICsgMSA+PSBMRl9GQUNFU0laRSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoKTsKLSAgICB9Ci0gICAgbWVtY3B5
KGxvZ0ZvbnQubGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCksCi0gICAgICAgICAgIHNpemVvZihsb2dGb250LmxmRmFjZU5hbWVbMF0pICogKDEgKyBtX25h
bWUubGVuZ3RoKCkpKTsKLQotICAgIC8vIEZJWE1FOiBhbG1vc3QgaWRlbnRpY2FsIHRvIEZpbGxM
b2dGb250IGluIEZvbnRDYWNoZVdpbi5jcHAuCi0gICAgLy8gTmVlZCB0byByZWZhY3Rvci4gCi0g
ICAgbG9nRm9udC5sZkhlaWdodCA9IC1zaXplOwotICAgIGxvZ0ZvbnQubGZXaWR0aCA9IDA7Ci0g
ICAgbG9nRm9udC5sZkVzY2FwZW1lbnQgPSAwOwotICAgIGxvZ0ZvbnQubGZPcmllbnRhdGlvbiA9
IDA7Ci0gICAgbG9nRm9udC5sZlVuZGVybGluZSA9IGZhbHNlOwotICAgIGxvZ0ZvbnQubGZTdHJp
a2VPdXQgPSBmYWxzZTsKLSAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsK
LSAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwotICAgIGxv
Z0ZvbnQubGZRdWFsaXR5ID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPwotICAg
ICAgICAgICAgICAgICAgICAgICAgTk9OQU5USUFMSUFTRURfUVVBTElUWSA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9wIHNl
dHRpbmdzLgotICAgIGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0ggfCBG
Rl9ET05UQ0FSRTsKLSAgICBsb2dGb250LmxmSXRhbGljID0gaXRhbGljOwotICAgIGxvZ0ZvbnQu
bGZXZWlnaHQgPSBib2xkID8gNzAwIDogNDAwOwotCi0gICAgSEZPTlQgaGZvbnQgPSBDcmVhdGVG
b250SW5kaXJlY3QoJmxvZ0ZvbnQpOwotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGhmb250
LCBzaXplKTsKLSNlbGlmIE9TKExJTlVYKQotICAgIEFTU0VSVChtX2ZvbnRSZWZlcmVuY2UpOwot
ICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKG1fZm9udFJlZmVyZW5jZSwgIiIsIHNpemUsIGJv
bGQgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNCb2xkKCksIGl0YWxpYyAmJiAhbV9mb250UmVmZXJl
bmNlLT5pc0l0YWxpYygpKTsKLSNlbHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gRm9udFBsYXRmb3JtRGF0YSgpOwotI2VuZGlmCi19Ci0KLSNpZiBPUyhXSU5ET1dTKQotLy8g
Q3JlYXRlcyBhIHVuaXF1ZSBhbmQgdW5wcmVkaWN0YWJsZSBmb250IG5hbWUsIGluIG9yZGVyIHRv
IGF2b2lkIGNvbGxpc2lvbnMgYW5kIHRvCi0vLyBub3QgYWxsb3cgYWNjZXNzIGZyb20gQ1NTLgot
c3RhdGljIFN0cmluZyBjcmVhdGVVbmlxdWVGb250TmFtZSgpCi17Ci0gICAgVmVjdG9yPGNoYXI+
IGZvbnRVdWlkKHNpemVvZihHVUlEKSk7Ci0gICAgQ29DcmVhdGVHdWlkKHJlaW50ZXJwcmV0X2Nh
c3Q8R1VJRCo+KGZvbnRVdWlkLmRhdGEoKSkpOwotCi0gICAgVmVjdG9yPGNoYXI+IGZvbnROYW1l
VmVjdG9yOwotICAgIGJhc2U2NEVuY29kZShmb250VXVpZCwgZm9udE5hbWVWZWN0b3IpOwotICAg
IEFTU0VSVChmb250TmFtZVZlY3Rvci5zaXplKCkgPCBMRl9GQUNFU0laRSk7Ci0gICAgcmV0dXJu
IFN0cmluZyhmb250TmFtZVZlY3Rvci5kYXRhKCksIGZvbnROYW1lVmVjdG9yLnNpemUoKSk7Ci19
Ci0jZW5kaWYKLQotI2lmIE9TKExJTlVYKQotY2xhc3MgUmVtb3RlRm9udFN0cmVhbSA6IHB1Ymxp
YyBTa1N0cmVhbSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVtb3RlRm9udFN0cmVhbShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikK
LSAgICAgICAgLCBtX29mZnNldCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5SZW1v
dGVGb250U3RyZWFtKCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIHJld2luZCgp
Ci0gICAgewotICAgICAgICBtX29mZnNldCA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHZpcnR1YWwgc2l6ZV90IHJlYWQodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkK
LSAgICB7Ci0gICAgICAgIGlmICghYnVmZmVyICYmICFzaXplKSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlzIHJlcXVlc3QgZm9yIHRoZSBsZW5ndGggb2YgdGhlIHN0cmVhbS4KLSAgICAgICAgICAg
IHJldHVybiBtX2J1ZmZlci0+c2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYnVmZmVy
KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVxdWVzdCB0byBza2lwIGJ5dGVzLiBUaGlz
IG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gVGhpcyBpcyBhIHJlcXVlc3QgdG8gcmVhZCBieXRlcy4KLSAgICAg
ICAgaWYgKCFtX2J1ZmZlci0+ZGF0YSgpIHx8ICFtX2J1ZmZlci0+c2l6ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHNpemVfdCBsZWZ0ID0gbV9idWZmZXItPnNpemUoKSAtIG1f
b2Zmc2V0OwotICAgICAgICBzaXplX3QgdG9SZWFkID0gKGxlZnQgPiBzaXplKSA/IHNpemUgOiBs
ZWZ0OwotICAgICAgICBzdGQ6Om1lbWNweShidWZmZXIsIG1fYnVmZmVyLT5kYXRhKCkgKyBtX29m
ZnNldCwgdG9SZWFkKTsKLSAgICAgICAgbV9vZmZzZXQgKz0gdG9SZWFkOwotICAgICAgICByZXR1
cm4gdG9SZWFkOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2J1ZmZlcjsKLSAgICBzaXplX3QgbV9vZmZzZXQ7Ci19OwotI2VuZGlmCi0KLUZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEqIGNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBi
dWZmZXIpCi17Ci0gICAgQVNTRVJUX0FSRyhidWZmZXIsIGJ1ZmZlcik7Ci0KLSNpZiBFTkFCTEUo
T1BFTlRZUEVfU0FOSVRJWkVSKQotICAgIE9wZW5UeXBlU2FuaXRpemVyIHNhbml0aXplcihidWZm
ZXIpOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHRyYW5zY29kZUJ1ZmZlciA9IHNhbml0aXpl
ci5zYW5pdGl6ZSgpOwotICAgIGlmICghdHJhbnNjb2RlQnVmZmVyKQotICAgICAgICByZXR1cm4g
MDsgLy8gdmFsaWRhdGlvbiBmYWlsZWQuCi0gICAgYnVmZmVyID0gdHJhbnNjb2RlQnVmZmVyLmdl
dCgpOwotI2VuZGlmCi0KLSNpZiBPUyhXSU5ET1dTKQotICAgIC8vIEludHJvZHVjZSB0aGUgZm9u
dCB0byBHREkuIEFkZEZvbnRNZW1SZXNvdXJjZUV4IHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZSwg
YmVjYXVzZSBpdCB3aWxsIHBvbGx1dGUgdGhlIHByb2Nlc3MncwotICAgIC8vIGZvbnQgbmFtZXNw
YWNlIChXaW5kb3dzIGhhcyBubyBBUEkgZm9yIGNyZWF0aW5nIGFuIEhGT05UIGZyb20gZGF0YSB3
aXRob3V0IGV4cG9zaW5nIHRoZSBmb250IHRvIHRoZQotICAgIC8vIGVudGlyZSBwcm9jZXNzIGZp
cnN0KS4KLSAgICBTdHJpbmcgZm9udE5hbWUgPSBjcmVhdGVVbmlxdWVGb250TmFtZSgpOwotICAg
IEhBTkRMRSBmb250UmVmZXJlbmNlID0gcmVuYW1lQW5kQWN0aXZhdGVGb250KGJ1ZmZlciwgZm9u
dE5hbWUpOwotICAgIGlmICghZm9udFJlZmVyZW5jZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGZvbnRSZWZlcmVuY2UsIGZvbnROYW1l
KTsKLSNlbGlmIE9TKExJTlVYKQotICAgIFJlbW90ZUZvbnRTdHJlYW0qIHN0cmVhbSA9IG5ldyBS
ZW1vdGVGb250U3RyZWFtKGJ1ZmZlcik7Ci0gICAgU2tUeXBlZmFjZSogdHlwZWZhY2UgPSBTa1R5
cGVmYWNlOjpDcmVhdGVGcm9tU3RyZWFtKHN0cmVhbSk7Ci0gICAgaWYgKCF0eXBlZmFjZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKHR5
cGVmYWNlKTsKLSNlbHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLSNl
bmRpZgotfQotCi1ib29sIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OnN1cHBvcnRzRm9ybWF0KGNv
bnN0IFN0cmluZyYgZm9ybWF0KQotewotICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShmb3Jt
YXQsICJ0cnVldHlwZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZvcm1hdCwgIm9wZW50eXBlIikK
LSNpZiBFTkFCTEUoT1BFTlRZUEVfU0FOSVRJWkVSKQotICAgICAgICB8fCBlcXVhbElnbm9yaW5n
Q2FzZShmb3JtYXQsICJ3b2ZmIikKLSNlbmRpZgotICAgIDsKLX0KLQotfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDY2OTQzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwg
SW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCi0jZGVmaW5l
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaAotCi0jaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUu
aCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgotCi0jaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgPHdpbmRvd3MuaD4KLSNlbGlmIE9TKExJTlVYKQotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7
Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLXN0cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhIDog
Tm9uY29weWFibGUgewotI2lmIE9TKFdJTkRPV1MpCi0gICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0
YShIQU5ETEUgZm9udFJlZmVyZW5jZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgICAgICA6IG1f
Zm9udFJlZmVyZW5jZShmb250UmVmZXJlbmNlKQotICAgICAgICAsIG1fbmFtZShuYW1lKQotICAg
IHt9Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBleHBsaWNpdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KFNrVHlwZWZhY2UqIHR5cGVmYWNlKQotICAgICAgICA6IG1fZm9udFJlZmVyZW5jZSh0eXBlZmFj
ZSkKLSAgICB7fQotI2VuZGlmCi0KLSAgICB+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpOwotCi0g
ICAgRm9udFBsYXRmb3JtRGF0YSBmb250UGxhdGZvcm1EYXRhKGludCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250
UmVuZGVyaW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwotCi0gICAgc3RhdGljIGJvb2wg
c3VwcG9ydHNGb3JtYXQoY29uc3QgU3RyaW5nJik7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEhB
TkRMRSBtX2ZvbnRSZWZlcmVuY2U7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSNlbGlmIE9TKExJTlVY
KQotICAgIFNrVHlwZWZhY2UqIG1fZm9udFJlZmVyZW5jZTsKLSNlbmRpZgotfTsKLQotRm9udEN1
c3RvbVBsYXRmb3JtRGF0YSogY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShTaGFyZWRCdWZm
ZXIqKTsKLX0KLQotI2VuZGlmIC8vIEZvbnRDdXN0b21QbGF0Zm9ybURhdGFfaApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcAkocmV2aXNpb24gNjY5NDgpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6NjY5NDgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCwgMjAwOSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNs
dWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIk9w
ZW5UeXBlVXRpbGl0aWVzLmgiCisjZWxpZiBPUyhMSU5VWCkKKyNpbmNsdWRlICJTa1N0cmVhbS5o
IgorI2VuZGlmCisKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPcGVuVHlwZVNhbml0aXplci5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorCisjaWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDxvYmpiYXNlLmg+
CisjZWxpZiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0Zm9y
bURhdGEoKQoreworI2lmIE9TKFdJTkRPV1MpCisgICAgaWYgKG1fZm9udFJlZmVyZW5jZSkKKyAg
ICAgICAgUmVtb3ZlRm9udE1lbVJlc291cmNlRXgobV9mb250UmVmZXJlbmNlKTsKKyNlbGlmIE9T
KExJTlVYKQorICAgIGlmIChtX2ZvbnRSZWZlcmVuY2UpCisgICAgICAgIG1fZm9udFJlZmVyZW5j
ZS0+dW5yZWYoKTsKKyNlbmRpZgorfQorCitGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFs
aWMsIEZvbnRSZW5kZXJpbmdNb2RlIG1vZGUpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICBBU1NF
UlQobV9mb250UmVmZXJlbmNlKTsKKworICAgIExPR0ZPTlQgbG9nRm9udDsKKyAgICAvLyBtX25h
bWUgY29tZXMgZnJvbSBjcmVhdGVVbmlxdWVGb250TmFtZSwgd2hpY2gsIGluIHR1cm4sIGdldHMK
KyAgICAvLyBpdCBmcm9tIGJhc2U2NC1lbmNvZGVkIHV1aWQgKDEyOC1iaXQpLiBTbywgbV9uYW1l
CisgICAgLy8gY2FuIG5ldmVyIGJlIGxvbmdlciB0aGFuIExGX0ZBQ0VTSVpFICgzMikuCisgICAg
aWYgKG1fbmFtZS5sZW5ndGgoKSArIDEgPj0gTEZfRkFDRVNJWkUpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKCk7CisgICAg
fQorICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIG1fbmFtZS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLAorICAgICAgICAgICBzaXplb2YobG9nRm9udC5sZkZhY2VOYW1lWzBd
KSAqICgxICsgbV9uYW1lLmxlbmd0aCgpKSk7CisKKyAgICAvLyBGSVhNRTogYWxtb3N0IGlkZW50
aWNhbCB0byBGaWxsTG9nRm9udCBpbiBGb250Q2FjaGVXaW4uY3BwLgorICAgIC8vIE5lZWQgdG8g
cmVmYWN0b3IuIAorICAgIGxvZ0ZvbnQubGZIZWlnaHQgPSAtc2l6ZTsKKyAgICBsb2dGb250Lmxm
V2lkdGggPSAwOworICAgIGxvZ0ZvbnQubGZFc2NhcGVtZW50ID0gMDsKKyAgICBsb2dGb250Lmxm
T3JpZW50YXRpb24gPSAwOworICAgIGxvZ0ZvbnQubGZVbmRlcmxpbmUgPSBmYWxzZTsKKyAgICBs
b2dGb250LmxmU3RyaWtlT3V0ID0gZmFsc2U7CisgICAgbG9nRm9udC5sZkNoYXJTZXQgPSBERUZB
VUxUX0NIQVJTRVQ7CisgICAgbG9nRm9udC5sZk91dFByZWNpc2lvbiA9IE9VVF9UVF9PTkxZX1BS
RUNJUzsKKyAgICBsb2dGb250LmxmUXVhbGl0eSA9IENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0
TW9kZSgpID8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5PTkFOVElBTElBU0VEX1FVQUxJVFkg
OgorICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9RVUFMSVRZOyAvLyBIb25vciB1c2Vy
J3MgZGVza3RvcCBzZXR0aW5ncy4KKyAgICBsb2dGb250LmxmUGl0Y2hBbmRGYW1pbHkgPSBERUZB
VUxUX1BJVENIIHwgRkZfRE9OVENBUkU7CisgICAgbG9nRm9udC5sZkl0YWxpYyA9IGl0YWxpYzsK
KyAgICBsb2dGb250LmxmV2VpZ2h0ID0gYm9sZCA/IDcwMCA6IDQwMDsKKworICAgIEhGT05UIGhm
b250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZsb2dGb250KTsKKyAgICByZXR1cm4gRm9udFBsYXRm
b3JtRGF0YShoZm9udCwgc2l6ZSk7CisjZWxpZiBPUyhMSU5VWCkKKyAgICBBU1NFUlQobV9mb250
UmVmZXJlbmNlKTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRSZWZlcmVuY2Us
ICIiLCBzaXplLCBib2xkICYmICFtX2ZvbnRSZWZlcmVuY2UtPmlzQm9sZCgpLCBpdGFsaWMgJiYg
IW1fZm9udFJlZmVyZW5jZS0+aXNJdGFsaWMoKSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoKTsKKyNlbmRpZgorfQorCisjaWYgT1Mo
V0lORE9XUykKKy8vIENyZWF0ZXMgYSB1bmlxdWUgYW5kIHVucHJlZGljdGFibGUgZm9udCBuYW1l
LCBpbiBvcmRlciB0byBhdm9pZCBjb2xsaXNpb25zIGFuZCB0bworLy8gbm90IGFsbG93IGFjY2Vz
cyBmcm9tIENTUy4KK3N0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlRm9udE5hbWUoKQoreworICAg
IFZlY3RvcjxjaGFyPiBmb250VXVpZChzaXplb2YoR1VJRCkpOworICAgIENvQ3JlYXRlR3VpZChy
ZWludGVycHJldF9jYXN0PEdVSUQqPihmb250VXVpZC5kYXRhKCkpKTsKKworICAgIFZlY3Rvcjxj
aGFyPiBmb250TmFtZVZlY3RvcjsKKyAgICBiYXNlNjRFbmNvZGUoZm9udFV1aWQsIGZvbnROYW1l
VmVjdG9yKTsKKyAgICBBU1NFUlQoZm9udE5hbWVWZWN0b3Iuc2l6ZSgpIDwgTEZfRkFDRVNJWkUp
OworICAgIHJldHVybiBTdHJpbmcoZm9udE5hbWVWZWN0b3IuZGF0YSgpLCBmb250TmFtZVZlY3Rv
ci5zaXplKCkpOworfQorI2VuZGlmCisKKyNpZiBPUyhMSU5VWCkKK2NsYXNzIFJlbW90ZUZvbnRT
dHJlYW0gOiBwdWJsaWMgU2tTdHJlYW0geworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbW90ZUZv
bnRTdHJlYW0oUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKKyAgICAgICAgOiBtX2J1
ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB+UmVtb3RlRm9udFN0cmVhbSgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
Ym9vbCByZXdpbmQoKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXQgPSAwOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHNpemVfdCByZWFkKHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAoIWJ1ZmZlciAmJiAhc2l6ZSkgeworICAg
ICAgICAgICAgLy8gVGhpcyBpcyByZXF1ZXN0IGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJlYW0u
CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXItPnNpemUoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlcXVlc3QgdG8gc2tp
cCBieXRlcy4gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgaXMgYSByZXF1ZXN0IHRvIHJlYWQg
Ynl0ZXMuCisgICAgICAgIGlmICghbV9idWZmZXItPmRhdGEoKSB8fCAhbV9idWZmZXItPnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBzaXplX3QgbGVmdCA9IG1fYnVmZmVy
LT5zaXplKCkgLSBtX29mZnNldDsKKyAgICAgICAgc2l6ZV90IHRvUmVhZCA9IChsZWZ0ID4gc2l6
ZSkgPyBzaXplIDogbGVmdDsKKyAgICAgICAgc3RkOjptZW1jcHkoYnVmZmVyLCBtX2J1ZmZlci0+
ZGF0YSgpICsgbV9vZmZzZXQsIHRvUmVhZCk7CisgICAgICAgIG1fb2Zmc2V0ICs9IHRvUmVhZDsK
KyAgICAgICAgcmV0dXJuIHRvUmVhZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9idWZmZXI7CisgICAgc2l6ZV90IG1fb2Zmc2V0OworfTsKKyNlbmRpZgor
CitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNo
YXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIEFTU0VSVF9BUkcoYnVmZmVyLCBidWZmZXIpOwor
CisjaWYgRU5BQkxFKE9QRU5UWVBFX1NBTklUSVpFUikKKyAgICBPcGVuVHlwZVNhbml0aXplciBz
YW5pdGl6ZXIoYnVmZmVyKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0cmFuc2NvZGVCdWZm
ZXIgPSBzYW5pdGl6ZXIuc2FuaXRpemUoKTsKKyAgICBpZiAoIXRyYW5zY29kZUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIDA7IC8vIHZhbGlkYXRpb24gZmFpbGVkLgorICAgIGJ1ZmZlciA9IHRyYW5z
Y29kZUJ1ZmZlci5nZXQoKTsKKyNlbmRpZgorCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBJbnRy
b2R1Y2UgdGhlIGZvbnQgdG8gR0RJLiBBZGRGb250TWVtUmVzb3VyY2VFeCBzaG91bGQgYmUgdXNl
ZCB3aXRoIGNhcmUsIGJlY2F1c2UgaXQgd2lsbCBwb2xsdXRlIHRoZSBwcm9jZXNzJ3MKKyAgICAv
LyBmb250IG5hbWVzcGFjZSAoV2luZG93cyBoYXMgbm8gQVBJIGZvciBjcmVhdGluZyBhbiBIRk9O
VCBmcm9tIGRhdGEgd2l0aG91dCBleHBvc2luZyB0aGUgZm9udCB0byB0aGUKKyAgICAvLyBlbnRp
cmUgcHJvY2VzcyBmaXJzdCkuCisgICAgU3RyaW5nIGZvbnROYW1lID0gY3JlYXRlVW5pcXVlRm9u
dE5hbWUoKTsKKyAgICBIQU5ETEUgZm9udFJlZmVyZW5jZSA9IHJlbmFtZUFuZEFjdGl2YXRlRm9u
dChidWZmZXIsIGZvbnROYW1lKTsKKyAgICBpZiAoIWZvbnRSZWZlcmVuY2UpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBuZXcgRm9udEN1c3RvbVBsYXRmb3JtRGF0YShmb250UmVmZXJl
bmNlLCBmb250TmFtZSk7CisjZWxpZiBPUyhMSU5VWCkKKyAgICBSZW1vdGVGb250U3RyZWFtKiBz
dHJlYW0gPSBuZXcgUmVtb3RlRm9udFN0cmVhbShidWZmZXIpOworICAgIFNrVHlwZWZhY2UqIHR5
cGVmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbVN0cmVhbShzdHJlYW0pOworICAgIGlmICgh
dHlwZWZhY2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgRm9udEN1c3RvbVBs
YXRmb3JtRGF0YSh0eXBlZmFjZSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7CisjZW5kaWYKK30KKworYm9vbCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpzdXBw
b3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UoZm9ybWF0LCAidHJ1ZXR5cGUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShmb3JtYXQs
ICJvcGVudHlwZSIpCisjaWYgRU5BQkxFKE9QRU5UWVBFX1NBTklUSVpFUikKKyAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UoZm9ybWF0LCAid29mZiIpCisjZW5kaWYKKyAgICA7Cit9CisKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gNjY5NDMpCShmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oOjY2OTQzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDgsIDIwMDks
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhX2gKKyNkZWZpbmUgRm9udEN1c3RvbVBsYXRmb3JtRGF0YV9oCisKKyNpbmNsdWRlICJG
b250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYgT1MoTElOVVgpCisjaW5jbHVk
ZSAiU2tUeXBlZmFjZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworc3RydWN0IEZvbnRDdXN0
b21QbGF0Zm9ybURhdGEgOiBOb25jb3B5YWJsZSB7CisjaWYgT1MoV0lORE9XUykKKyAgICBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhKEhBTkRMRSBmb250UmVmZXJlbmNlLCBjb25zdCBTdHJpbmcmIG5h
bWUpCisgICAgICAgIDogbV9mb250UmVmZXJlbmNlKGZvbnRSZWZlcmVuY2UpCisgICAgICAgICwg
bV9uYW1lKG5hbWUpCisgICAge30KKyNlbGlmIE9TKExJTlVYKQorICAgIGV4cGxpY2l0IEZvbnRD
dXN0b21QbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSogdHlwZWZhY2UpCisgICAgICAgIDogbV9mb250
UmVmZXJlbmNlKHR5cGVmYWNlKQorICAgIHt9CisjZW5kaWYKKworICAgIH5Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhIGZvbnRQbGF0Zm9ybURhdGEoaW50
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZvbnRSZW5kZXJpbmdNb2RlID0gTm9ybWFsUmVuZGVyaW5nTW9kZSk7CisK
KyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Zvcm1hdChjb25zdCBTdHJpbmcmKTsKKworI2lmIE9T
KFdJTkRPV1MpCisgICAgSEFORExFIG1fZm9udFJlZmVyZW5jZTsKKyAgICBTdHJpbmcgbV9uYW1l
OworI2VsaWYgT1MoTElOVVgpCisgICAgU2tUeXBlZmFjZSogbV9mb250UmVmZXJlbmNlOworI2Vu
ZGlmCit9OworCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZv
cm1EYXRhKFNoYXJlZEJ1ZmZlciopOworfQorCisjZW5kaWYgLy8gRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67055</attachid>
            <date>2010-09-09 10:33:40 -0700</date>
            <delta_ts>2010-09-09 10:41:24 -0700</delta_ts>
            <desc>Move Image::loadPlatformResource to ImageChromium.cpp</desc>
            <filename>image.patch</filename>
            <type>text/plain</type>
            <size>5333</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzA5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDktMDkgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgTW92ZSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UgdG8gcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VDaHJvbWl1bS5jcHAuCisgICAgICAgIE90aGVyIHBvcnRzIGNhbiB1c2UgSW1hZ2VTa2lh
LmNwcC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIHB1cmUgcmVmYWNv
dHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VD
aHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5j
cHA6CisKIDIwMTAtMDktMDkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2
NzA4OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzA4LDYg
KzIzMDgsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25D
aHJvbWl1bU1hYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ljb25DaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlQnVmZmVyRGF0YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgnLApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA2NzA4OSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjYsNiArMTIyNiwxMCBA
QAogICAgICAgICAgICAgIyByZWxhdGVkIHRvIFNjcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwLgog
ICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0u
Y3BwJywKIAorICAgICAgICAgICAgIyBUaGUgTWFjIGN1cnJlbnRseSB1c2VzIEltYWdlQ2hyb21p
dW1NYWMubW0gZnJvbQorCSAgICAjIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtLCBpbmNsdWRl
ZCBieSByZWdleCBhYm92ZSwgaW5zdGVhZC4KKyAgICAgICAgICAgICcuLi9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcCcsCisKICAgICAgICAgICAgICMgVGhlIE1h
YyB1c2VzIEltYWdlU291cmNlQ0cuY3BwIGZyb20gcGxhdGZvcm0vZ3JhcGhpY3MvY2csIGluY2x1
ZGVkCiAgICAgICAgICAgICAjIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgogICAgICAgICAgICAg
Jy4uL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCcsCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDA4LTIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE90aGVyIEltYWdlIG1ldGhvZHMgYXJl
IGltcGxlbWVudGVkIGluIEltYWdlU2tpYS5jcHAKKworUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgcmV0dXJuIENo
cm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKG5hbWUpOworfQorCit9ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlU2tpYS5jcHAJKHJldmlzaW9uIDY3MDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYg
QEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgogI2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCi0jaW5jbHVkZSAiQ2hy
b21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgpAQCAtMzExLDExICszMTAsNiBA
QCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
Y29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQbGF0
Zm9ybUltYWdlUmVzb3VyY2UobmFtZSk7Ci19Ci0KIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UmVjdCYgZmxvYXRTcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67056</attachid>
            <date>2010-09-09 10:41:24 -0700</date>
            <delta_ts>2010-09-10 03:58:14 -0700</delta_ts>
            <desc>Move Image::loadPlatformResource to ImageChromium.cpp</desc>
            <filename>image.patch</filename>
            <type>text/plain</type>
            <size>5339</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzA5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDktMDkgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgTW92ZSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UgdG8gcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VDaHJvbWl1bS5jcHAuCisgICAgICAgIE90aGVyIHBvcnRzIGNhbiB1c2UgSW1hZ2VTa2lh
LmNwcC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIGlzIHB1cmUgcmVmYWNv
dHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VD
aHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5j
cHA6CisKIDIwMTAtMDktMDkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2
NzA4OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzA4LDYg
KzIzMDgsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25D
aHJvbWl1bU1hYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ljb25DaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlQnVmZmVyRGF0YS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgnLApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiA2NzA4OSkKKysrIFdlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjYsNiArMTIyNiwxMCBA
QAogICAgICAgICAgICAgIyByZWxhdGVkIHRvIFNjcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwLgog
ICAgICAgICAgICAgJy4uL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0u
Y3BwJywKIAorICAgICAgICAgICAgIyBUaGUgTWFjIGN1cnJlbnRseSB1c2VzIEltYWdlQ2hyb21p
dW1NYWMubW0gZnJvbQorICAgICAgICAgICAgIyBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwg
aW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGluc3RlYWQuCisgICAgICAgICAgICAnLi4vcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAnLAorCiAgICAgICAgICAgICAj
IFRoZSBNYWMgdXNlcyBJbWFnZVNvdXJjZUNHLmNwcCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
LCBpbmNsdWRlZAogICAgICAgICAgICAgIyBieSByZWdleCBhYm92ZSwgaW5zdGVhZC4KICAgICAg
ICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAnLApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBPdGhlciBJbWFnZSBtZXRo
b2RzIGFyZSBpbXBsZW1lbnRlZCBpbiBJbWFnZVNraWEuY3BwCisKK1Bhc3NSZWZQdHI8SW1hZ2U+
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQoreworICAgIHJl
dHVybiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShuYW1lKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHJldmlzaW9uIDY3MDg5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDYgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCi0jaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgpAQCAtMzExLDExICsz
MTAsNiBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6Omxv
YWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UobmFtZSk7Ci19Ci0KIHZvaWQgSW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UmVjdCYgZmxvYXRTcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67199</attachid>
            <date>2010-09-10 10:14:02 -0700</date>
            <delta_ts>2010-09-14 09:20:31 -0700</delta_ts>
            <desc>Move FontCacheLinux.cpp to platform/graphics/skia/FontCacheSkia.cpp</desc>
            <filename>FontCacheSkia.patch</filename>
            <type>text/plain</type>
            <size>15570</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzIxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDktMTAgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgRm9udENh
Y2hlTGludXggaXMgbm90IExpbnV4IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEZvbnRDYWNo
ZS4KKyAgICAgICAgTW92ZSBGb250Q2FjaGVMaW51eC5jcHAgdG8gcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYSBhbmQgcmVuYW1lIGl0IHRvCisgICAgICAgIEZvbnRDYWhjZVNraWEuY3BwLgorCisgICAg
ICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNraWEu
Y3BwOiBBZGRlZC4KKwogMjAxMC0wOS0xMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA2NzIwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0y
Mjk2LDcgKzIyOTYsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLm1tJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2lu
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRm
b3JtRGF0YS5oJywKQEAgLTI0NzEsNiArMjQ3MCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UG9pbnRTa2lhLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNw
cCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDY3MjA0KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTE0Miw3ICsx
MTQyLDYgQEAKICAgICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICAjIENoZXJyeS1w
aWNrIGZpbGVzIGV4Y2x1ZGVkIGJ5IHRoZSBicm9hZGVyIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYWJv
dmUuCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vS2V5Q29kZUNv
bnZlcnNpb25HdGtcXC5jcHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4XFwuY3BwJCdd
LAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRQbGF0Zm9ybURhdGFMaW51eFxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4XFwuY3BwJCdd
LApAQCAtMTI3Niw2ICsxMjc1LDExIEBACiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL1NraWFG
b250V2luXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJy9UcmFuc3BhcmVuY3lX
aW5cXC5jcHAkJ10sCiAgICAgICAgICAgXSwKKyAgICAgICAgICAnc291cmNlcyEnOiBbCisgICAg
ICAgICAgICAjIFRoZSBDaHJvbWl1bSBXaW4gdXNlcyBGb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAg
ZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwgaW5jbHVkZWQKKyAgICAgICAgICAgICMg
YnkgcmVnZXggYWJvdmUsIGluc3RlYWQuCisgICAgICAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9Gb250Q2FjaGVTa2lhLmNwcCcsCisgICAgICAgICAgXSwKICAgICAgICAgfV0sCiAg
ICAgICAgIFsnT1MhPSJsaW51eCIgYW5kIE9TIT0iZnJlZWJzZCInLCB7CiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogW1snZXhjbHVkZScsICcoR3RrfExpbnV4KVxcLmNwcCQnXV0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXgu
Y3BwCShyZXZpc2lvbiA2NzIwNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udENhY2hlTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgotCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLSNpbmNsdWRlICJGb250LmgiCi0j
aW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJTa1BhaW50LmgiCi0jaW5jbHVk
ZSAiU2tUeXBlZmFjZS5oIgotI2luY2x1ZGUgIlNrVXRpbHMuaCIKLQotI2luY2x1ZGUgPHVuaWNv
ZGUvdXRmMTYuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKLXsKLX0K
LQotY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnQmIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxl
bmd0aCkKLXsKLSAgICBTdHJpbmcgZmFtaWx5ID0gQ2hyb21pdW1CcmlkZ2U6OmdldEZvbnRGYW1p
bHlGb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgaWYgKGZhbWlseS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQXRvbWljU3RyaW5nIGF0b21pY0ZhbWls
eShmYW1pbHkpOwotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGF0b21pY0ZhbWlseSwgZmFsc2UpKTsK
LX0KLQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotU2ltcGxlRm9udERh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQotewotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgc2Fu
c1N0cigiU2FucyIpOwotICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgc2VyaWZTdHIoIlNl
cmlmIik7Ci0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBtb25vc3BhY2VTdHIoIk1vbm9z
cGFjZSIpOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YSA9IDA7Ci0g
ICAgc3dpdGNoIChkZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsKLSAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6Ci0gICAgICAgIGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRD
YWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBzZXJpZlN0cik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAg
IGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9u
LCBtb25vc3BhY2VTdHIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6U2Fuc1NlcmlmRmFtaWx5OgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZvbnRQbGF0Zm9ybURh
dGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBzYW5zU3RyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQVNTRVJUKGZvbnRQbGF0Zm9ybURhdGEpOwotICAg
IHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250UGxhdGZvcm1EYXRhKTsKLX0KLQotdm9pZCBG
b250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+JiB0
cmFpdHNNYXNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Gb250UGxhdGZvcm1E
YXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17Ci0gICAgY29u
c3QgY2hhciogbmFtZSA9IDA7Ci0gICAgQ1N0cmluZyBzOwotCi0gICAgLy8gSWYgd2UncmUgY3Jl
YXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcuICItd2Via2l0LW1vbm9zcGFjZSIpLCBjb252ZXJ0
IHRoZSBuYW1lIGludG8KLSAgICAvLyB0aGUgZmFsbGJhY2sgbmFtZSAobGlrZSAibW9ub3NwYWNl
IikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3RhbmRzLgotICAgIGlmICghZmFtaWx5Lmxlbmd0aCgp
IHx8IGZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgewotICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlw
ZSBtVHlwZTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1OYW1lOwotICAgICAgICB9IGZvbnRE
ZXNjcmlwdGlvbnNbXSA9IHsKLSAgICAgICAgICAgIHsgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZh
bWlseSwgInNlcmlmIiB9LAotICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246OlNhbnNTZXJp
ZkZhbWlseSwgInNhbnMtc2VyaWYiIH0sCi0gICAgICAgICAgICB7IEZvbnREZXNjcmlwdGlvbjo6
TW9ub3NwYWNlRmFtaWx5LCAibW9ub3NwYWNlIiB9LAotICAgICAgICAgICAgeyBGb250RGVzY3Jp
cHRpb246OkN1cnNpdmVGYW1pbHksICJjdXJzaXZlIiB9LAotICAgICAgICAgICAgeyBGb250RGVz
Y3JpcHRpb246OkZhbnRhc3lGYW1pbHksICJmYW50YXN5IiB9Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSB0eXBlID0gZm9udERlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFNL
X0FSUkFZX0NPVU5UKGZvbnREZXNjcmlwdGlvbnMpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0
eXBlID09IGZvbnREZXNjcmlwdGlvbnNbaV0ubVR5cGUpIHsKLSAgICAgICAgICAgICAgICBuYW1l
ID0gZm9udERlc2NyaXB0aW9uc1tpXS5tTmFtZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIW5hbWUpCi0gICAgICAgICAgICBu
YW1lID0gIiI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gY29udmVydCB0aGUgbmFtZSB0byB1
dGY4Ci0gICAgICAgIHMgPSBmYW1pbHkuc3RyaW5nKCkudXRmOCgpOwotICAgICAgICBuYW1lID0g
cy5kYXRhKCk7Ci0gICAgfQotCi0gICAgaW50IHN0eWxlID0gU2tUeXBlZmFjZTo6a05vcm1hbDsK
LSAgICBpZiAoZm9udERlc2NyaXB0aW9uLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKQotICAg
ICAgICBzdHlsZSB8PSBTa1R5cGVmYWNlOjprQm9sZDsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9u
Lml0YWxpYygpKQotICAgICAgICBzdHlsZSB8PSBTa1R5cGVmYWNlOjprSXRhbGljOwotCi0gICAg
U2tUeXBlZmFjZSogdGYgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tTmFtZShuYW1lLCBzdGF0aWNf
Y2FzdDxTa1R5cGVmYWNlOjpTdHlsZT4oc3R5bGUpKTsKLSAgICBpZiAoIXRmKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHJlc3VsdCA9Ci0gICAgICAgIG5ldyBG
b250UGxhdGZvcm1EYXRhKHRmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHlsZSAmIFNrVHlwZWZhY2U6OmtC
b2xkKSAmJiAhdGYtPmlzQm9sZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5
bGUgJiBTa1R5cGVmYWNlOjprSXRhbGljKSAmJiAhdGYtPmlzSXRhbGljKCkpOwotICAgIHRmLT51
bnJlZigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDYWNoZVNr
aWEuY3BwCShyZXZpc2lvbiA2NzIwNCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHA6NjcyMDQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRm9udENhY2hlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIlNrUGFpbnQuaCIK
KyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAiU2tVdGlscy5oIgorCisjaW5jbHVk
ZSA8dW5pY29kZS91dGYxNi5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQo
KQoreworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZv
ckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGVuZ3RoKQoreworICAgIFN0cmluZyBmYW1pbHkgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0
Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICBpZiAoZmFt
aWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBdG9taWNTdHJpbmcgYXRv
bWljRmFtaWx5KGZhbWlseSk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgYXRvbWljRmFtaWx5LCBm
YWxzZSkpOworfQorCitTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIHJldHVybiAwOworfQorCitTaW1w
bGVGb250RGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0
cmluZyBzYW5zU3RyKCJTYW5zIik7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBzZXJp
ZlN0cigiU2VyaWYiKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nIG1vbm9zcGFjZVN0
cigiTW9ub3NwYWNlIik7CisKKyAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRh
ID0gMDsKKyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgeworICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKKyAgICAgICAgZm9udFBsYXRmb3JtRGF0
YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIHNlcmlmU3RyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToK
KyAgICAgICAgZm9udFBsYXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVz
Y3JpcHRpb24sIG1vbm9zcGFjZVN0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgZGVmYXVsdDoKKyAgICAgICAgZm9udFBs
YXRmb3JtRGF0YSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZGVzY3JpcHRpb24sIHNhbnNT
dHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0
YSk7CisgICAgcmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGZvbnRQbGF0Zm9ybURhdGEpOworfQor
Cit2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4mIHRyYWl0c01hc2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sK
KyAgICBjb25zdCBjaGFyKiBuYW1lID0gMDsKKyAgICBDU3RyaW5nIHM7CisKKyAgICAvLyBJZiB3
ZSdyZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJraXQtbW9ub3NwYWNlIiks
IGNvbnZlcnQgdGhlIG5hbWUgaW50bworICAgIC8vIHRoZSBmYWxsYmFjayBuYW1lIChsaWtlICJt
b25vc3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCisgICAgaWYgKCFmYW1pbHku
bGVuZ3RoKCkgfHwgZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpIHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb246OkdlbmVyaWNG
YW1pbHlUeXBlIG1UeXBlOworICAgICAgICAgICAgY29uc3QgY2hhciogbU5hbWU7CisgICAgICAg
IH0gZm9udERlc2NyaXB0aW9uc1tdID0geworICAgICAgICAgICAgeyBGb250RGVzY3JpcHRpb246
OlNlcmlmRmFtaWx5LCAic2VyaWYiIH0sCisgICAgICAgICAgICB7IEZvbnREZXNjcmlwdGlvbjo6
U2Fuc1NlcmlmRmFtaWx5LCAic2Fucy1zZXJpZiIgfSwKKyAgICAgICAgICAgIHsgRm9udERlc2Ny
aXB0aW9uOjpNb25vc3BhY2VGYW1pbHksICJtb25vc3BhY2UiIH0sCisgICAgICAgICAgICB7IEZv
bnREZXNjcmlwdGlvbjo6Q3Vyc2l2ZUZhbWlseSwgImN1cnNpdmUiIH0sCisgICAgICAgICAgICB7
IEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSwgImZhbnRhc3kiIH0KKyAgICAgICAgfTsK
KworICAgICAgICBGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlUeXBlIHR5cGUgPSBmb250
RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgU0tfQVJSQVlfQ09VTlQoZm9udERlc2NyaXB0aW9ucyk7IGkrKykgeworICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gZm9udERlc2NyaXB0aW9uc1tpXS5tVHlwZSkgeworICAgICAgICAgICAg
ICAgIG5hbWUgPSBmb250RGVzY3JpcHRpb25zW2ldLm1OYW1lOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbmFtZSkKKyAgICAg
ICAgICAgIG5hbWUgPSAiIjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBjb252ZXJ0IHRoZSBu
YW1lIHRvIHV0ZjgKKyAgICAgICAgcyA9IGZhbWlseS5zdHJpbmcoKS51dGY4KCk7CisgICAgICAg
IG5hbWUgPSBzLmRhdGEoKTsKKyAgICB9CisKKyAgICBpbnQgc3R5bGUgPSBTa1R5cGVmYWNlOjpr
Tm9ybWFsOworICAgIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJv
bGQpCisgICAgICAgIHN0eWxlIHw9IFNrVHlwZWZhY2U6OmtCb2xkOworICAgIGlmIChmb250RGVz
Y3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIHN0eWxlIHw9IFNrVHlwZWZhY2U6OmtJdGFsaWM7
CisKKyAgICBTa1R5cGVmYWNlKiB0ZiA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21OYW1lKG5hbWUs
IHN0YXRpY19jYXN0PFNrVHlwZWZhY2U6OlN0eWxlPihzdHlsZSkpOworICAgIGlmICghdGYpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgRm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IEZvbnRQbGF0Zm9ybURhdGEodGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBl
ZmFjZTo6a0JvbGQpICYmICF0Zi0+aXNCb2xkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdHlsZSAmIFNrVHlwZWZhY2U6OmtJdGFsaWMpICYmICF0Zi0+aXNJdGFsaWMoKSk7Cisg
ICAgdGYtPnVucmVmKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68133</attachid>
            <date>2010-09-20 14:01:54 -0700</date>
            <delta_ts>2010-10-19 10:16:53 -0700</delta_ts>
            <desc>Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp</desc>
            <filename>GlyphPageTreeNode.patch</filename>
            <type>text/plain</type>
            <size>9709</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzg4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDktMjAgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgR0dseXBo
UGFnZVRyZWVOb2RlTGludXggZG9lcyBub3QgZGVwZW5kIG9uIExpbnV4IG9yIENocm9taXVtLgor
ICAgICAgICBNb3ZlIEdHbHlwaFBhZ2VUcmVlTm9kZUxpbnV4IHRvIHBsYXRmb3JtL2dyYXBoaWNz
L3NraWEgYW5kIHJlbmFtZSBpdCB0bworICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3Bw
IHNvIHRoYXQgb3RoZXIgcG9ydHMgY2FuIHVzZSBpdC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tpYS5j
cHA6IEFkZGVkLgorCiAyMDEwLTA5LTIwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY3ODc0
KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIzMTYsNyArMjMx
Niw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBh
Z2VUcmVlTm9kZUNocm9taXVtV2luLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNr
aWEuY3BwJywKQEAgLTI0ODQsNiArMjQ4Myw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNz
Q29udGV4dFNraWEuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24g
Njc4NzQpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQ4LDcgKzEwNDgsNiBAQAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4XFwuY3BwJCddLAogICAgICAgICAgICAg
WydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eFxcLmNwcCQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250UGxhdGZvcm1EYXRhTGludXhcXC5jcHAkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eFxcLmNwcCQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUxpbnV4XFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH1dLApA
QCAtMTI5Nyw2ICsxMjk2LDkgQEAKICAgICAgICAgWydPUz09IndpbiInLCB7CiAgICAgICAgICAg
J3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3BwJCddLAor
ICAgICAgICAgICAgIyBUaGUgQ2hyb21pdW0gV2luIHVzZXMgR2x5cGhQYWdlVHJlZU5vZGVDaHJv
bWl1bVdpbi5jcHAgZnJvbSBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwKKyAgICAgICAgICAg
ICMgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGluc3RlYWQuCisgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWFcXC5jcHAk
J10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnL29wZW50eXBlLyddLAogICAgICAgICAgICAg
WydpbmNsdWRlJywgJy9TY3JvbGxBbmltYXRvcldpblxcLmNwcCQnXSwKICAgICAgICAgICAgIFsn
aW5jbHVkZScsICcvU2Nyb2xsQW5pbWF0b3JXaW5cXC5oJCddLApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVO
b2RlTGludXguY3BwCShyZXZpc2lvbiA2Nzg3OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlw
aFBhZ2VUcmVlTm9kZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCi0KLSNpbmNsdWRlICJTa1RlbXBsYXRlcy5oIgotI2luY2x1ZGUgIlNrUGFpbnQu
aCIKLSNpbmNsdWRlICJTa1V0aWxzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBH
bHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQotewotICAgIGlmIChTa1VURjE2X0lzSGlnaFN1cnJvZ2F0ZShidWZmZXJbYnVmZmVyTGVu
Z3RoLTFdKSkgewotICAgICAgICBTa0RlYnVnZigiJXMgbGFzdCBjaGFyIGlzIGhpZ2gtc3Vycm9n
YXRlIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICBTa1BhaW50IHBhaW50OwotICAgIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBh
aW50KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9U
ZXh0RW5jb2RpbmcpOwotICAgIAotICAgIFNrQXV0b1NUTWFsbG9jIDxHbHlwaFBhZ2U6OnNpemUs
IHVpbnQxNl90PiBnbHlwaFN0b3JhZ2UobGVuZ3RoKTsKLSAgICB1aW50MTZfdCogZ2x5cGhzID0g
Z2x5cGhTdG9yYWdlLmdldCgpOwotICAgIC8vIHRleHRUb0dseXBocyB0YWtlcyBhIGJ5dGUgY291
bnQsIG5vdCBhIGdseXBoIGNvdW50IHNvIHdlIG11bHRpcGx5IGJ5IHR3by4KLSAgICB1bnNpZ25l
ZCBjb3VudCA9IHBhaW50LnRleHRUb0dseXBocyhidWZmZXIsIGJ1ZmZlckxlbmd0aCAqIDIsIGds
eXBocyk7Ci0gICAgaWYgKGNvdW50ICE9IGxlbmd0aCkgewotICAgICAgICBTa0RlYnVnZigiJXMg
Y291bnQgIT0gbGVuZ3RoXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYWxsR2x5cGhzID0gMDsgLy8gdHJhY2sgaWYgYW55IG9m
IHRoZSBnbHlwaElEcyBhcmUgbm9uLXplcm8KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwg
Z2x5cGhzW2ldLCBnbHlwaHNbaV0gPyBmb250RGF0YSA6IE5VTEwpOwotICAgICAgICBhbGxHbHlw
aHMgfD0gZ2x5cGhzW2ldOwotICAgIH0KLQotICAgIHJldHVybiBhbGxHbHlwaHMgIT0gMDsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCShyZXZpc2lv
biA2Nzg3OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBh
Z2VUcmVlTm9kZUxpbnV4LmNwcDo2Nzg3OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJl
ZU5vZGUuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgorCisjaW5jbHVkZSAiU2tUZW1wbGF0ZXMuaCIKKyNpbmNsdWRlICJTa1BhaW50LmgiCisjaW5j
bHVkZSAiU2tVdGlscy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdl
OjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sK
KyAgICBpZiAoU2tVVEYxNl9Jc0hpZ2hTdXJyb2dhdGUoYnVmZmVyW2J1ZmZlckxlbmd0aC0xXSkp
IHsKKyAgICAgICAgU2tEZWJ1Z2YoIiVzIGxhc3QgY2hhciBpcyBoaWdoLXN1cnJvZ2F0ZSIsIF9f
RlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgU2tQ
YWludCBwYWludDsKKyAgICBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuc2V0dXBQYWludCgmcGFp
bnQpOworICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVuY29k
aW5nKTsKKyAgICAKKyAgICBTa0F1dG9TVE1hbGxvYyA8R2x5cGhQYWdlOjpzaXplLCB1aW50MTZf
dD4gZ2x5cGhTdG9yYWdlKGxlbmd0aCk7CisgICAgdWludDE2X3QqIGdseXBocyA9IGdseXBoU3Rv
cmFnZS5nZXQoKTsKKyAgICAvLyB0ZXh0VG9HbHlwaHMgdGFrZXMgYSBieXRlIGNvdW50LCBub3Qg
YSBnbHlwaCBjb3VudCBzbyB3ZSBtdWx0aXBseSBieSB0d28uCisgICAgdW5zaWduZWQgY291bnQg
PSBwYWludC50ZXh0VG9HbHlwaHMoYnVmZmVyLCBidWZmZXJMZW5ndGggKiAyLCBnbHlwaHMpOwor
ICAgIGlmIChjb3VudCAhPSBsZW5ndGgpIHsKKyAgICAgICAgU2tEZWJ1Z2YoIiVzIGNvdW50ICE9
IGxlbmd0aFxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHVuc2lnbmVkIGFsbEdseXBocyA9IDA7IC8vIHRyYWNrIGlmIGFueSBvZiB0aGUgZ2x5
cGhJRHMgYXJlIG5vbi16ZXJvCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KG9mZnNldCArIGksIGdseXBoc1tp
XSwgZ2x5cGhzW2ldID8gZm9udERhdGEgOiBOVUxMKTsKKyAgICAgICAgYWxsR2x5cGhzIHw9IGds
eXBoc1tpXTsKKyAgICB9CisKKyAgICByZXR1cm4gYWxsR2x5cGhzICE9IDA7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71180</attachid>
            <date>2010-10-19 10:16:53 -0700</date>
            <delta_ts>2010-10-21 20:40:02 -0700</delta_ts>
            <desc>Move GlyphPageTreeNodeLinux.cpp to platform/graphics/skia/GlyphPageTreeNodeSkia.cpp</desc>
            <filename>GlyphPageTreeNode.patch</filename>
            <type>text/plain</type>
            <size>9684</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDAxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMTAtMTggIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgR2x5cGhQ
YWdlVHJlZU5vZGVMaW51eCBkb2VzIG5vdCBkZXBlbmQgb24gTGludXggb3IgQ2hyb21pdW0uCisg
ICAgICAgIE1vdmUgR2x5cGhQYWdlVHJlZU5vZGVMaW51eCB0byBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhIGFuZCByZW5hbWUgaXQgdG8KKyAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcCBz
byB0aGF0IG90aGVyIHBvcnRzIGNhbiB1c2UgaXQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3Bw
OiBBZGRlZC4KKwogMjAxMC0xMC0xOCAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5nZWxpc0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNzAwMTEpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtMjQxNyw3ICsyNDE3LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HTEVTMkNhbnZhcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9t
aXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhp
Y3NMYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0hhcmZidXp6U2tpYS5jcHAnLApAQCAtMjYxNCw2ICsyNjEzLDcgQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UmVjdFNraWEuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9k
ZVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50
U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCShyZXZpc2lvbiA3MDAxMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNzYsNyArMTA3Niw2IEBACiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXhcXC5jcHAkJ10s
CiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dExpbnV4XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eFxcLmNwcCQnXSwKLSAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9k
ZUxpbnV4XFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgXSwK
ICAgICAgICAgfV0sCkBAIC0xMjA1LDYgKzEyMDQsMTAgQEAKICAgICAgICAgWydPUz09IndpbiIn
LCB7CiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bv
c2l4XFwuY3BwJCddLAorCisgICAgICAgICAgICAjIFRoZSBDaHJvbWl1bSBXaW4gY3VycmVudGx5
IHVzZXMgR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAgZnJvbQorICAgICAgICAgICAg
IyBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGlu
c3RlYWQuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
bHlwaFBhZ2VUcmVlTm9kZVNraWFcXC5jcHAkJ10KICAgICAgICAgICBdLAogICAgICAgICB9XSwK
ICAgICAgICAgWyciRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTj0xIiBpbiBmZWF0dXJl
X2RlZmluZXMnLCB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ds
eXBoUGFnZVRyZWVOb2RlTGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eC5jcHAJKHJldmlzaW9uIDcw
MDExKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVl
Tm9kZUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChjKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCi0KLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgIlNr
VGVtcGxhdGVzLmgiCi0jaW5jbHVkZSAiU2tQYWludC5oIgotI2luY2x1ZGUgIlNrVXRpbHMuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgaWYgKFNrVVRGMTZf
SXNIaWdoU3Vycm9nYXRlKGJ1ZmZlcltidWZmZXJMZW5ndGgtMV0pKSB7Ci0gICAgICAgIFNrRGVi
dWdmKCIlcyBsYXN0IGNoYXIgaXMgaGlnaC1zdXJyb2dhdGUiLCBfX0ZVTkNUSU9OX18pOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAg
Zm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnNldHVwUGFpbnQoJnBhaW50KTsKLSAgICBwYWludC5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7Ci0gICAgCi0gICAg
U2tBdXRvU1RNYWxsb2MgPEdseXBoUGFnZTo6c2l6ZSwgdWludDE2X3Q+IGdseXBoU3RvcmFnZShs
ZW5ndGgpOwotICAgIHVpbnQxNl90KiBnbHlwaHMgPSBnbHlwaFN0b3JhZ2UuZ2V0KCk7Ci0gICAg
Ly8gdGV4dFRvR2x5cGhzIHRha2VzIGEgYnl0ZSBjb3VudCwgbm90IGEgZ2x5cGggY291bnQgc28g
d2UgbXVsdGlwbHkgYnkgdHdvLgotICAgIHVuc2lnbmVkIGNvdW50ID0gcGFpbnQudGV4dFRvR2x5
cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoICogMiwgZ2x5cGhzKTsKLSAgICBpZiAoY291bnQgIT0g
bGVuZ3RoKSB7Ci0gICAgICAgIFNrRGVidWdmKCIlcyBjb3VudCAhPSBsZW5ndGhcbiIsIF9fRlVO
Q1RJT05fXyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBh
bGxHbHlwaHMgPSAwOyAvLyB0cmFjayBpZiBhbnkgb2YgdGhlIGdseXBoSURzIGFyZSBub24temVy
bwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaHNbaV0sIGdseXBoc1tpXSA/IGZv
bnREYXRhIDogTlVMTCk7Ci0gICAgICAgIGFsbEdseXBocyB8PSBnbHlwaHNbaV07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGFsbEdseXBocyAhPSAwOwotfQotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2Rl
U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ds
eXBoUGFnZVRyZWVOb2RlU2tpYS5jcHAJKHJldmlzaW9uIDcwMDExKQkoZnJvbSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlTGludXguY3BwOjcwMDEx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgorCisjaW5jbHVkZSAiRm9u
dC5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJTa1RlbXBsYXRl
cy5oIgorI2luY2x1ZGUgIlNrUGFpbnQuaCIKKyNpbmNsdWRlICJTa1V0aWxzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIGlmIChTa1VURjE2X0lzSGlnaFN1
cnJvZ2F0ZShidWZmZXJbYnVmZmVyTGVuZ3RoLTFdKSkgeworICAgICAgICBTa0RlYnVnZigiJXMg
bGFzdCBjaGFyIGlzIGhpZ2gtc3Vycm9nYXRlIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBTa1BhaW50IHBhaW50OworICAgIGZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuc2V0VGV4dEVu
Y29kaW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOworICAgIAorICAgIFNrQXV0b1NU
TWFsbG9jIDxHbHlwaFBhZ2U6OnNpemUsIHVpbnQxNl90PiBnbHlwaFN0b3JhZ2UobGVuZ3RoKTsK
KyAgICB1aW50MTZfdCogZ2x5cGhzID0gZ2x5cGhTdG9yYWdlLmdldCgpOworICAgIC8vIHRleHRU
b0dseXBocyB0YWtlcyBhIGJ5dGUgY291bnQsIG5vdCBhIGdseXBoIGNvdW50IHNvIHdlIG11bHRp
cGx5IGJ5IHR3by4KKyAgICB1bnNpZ25lZCBjb3VudCA9IHBhaW50LnRleHRUb0dseXBocyhidWZm
ZXIsIGJ1ZmZlckxlbmd0aCAqIDIsIGdseXBocyk7CisgICAgaWYgKGNvdW50ICE9IGxlbmd0aCkg
eworICAgICAgICBTa0RlYnVnZigiJXMgY291bnQgIT0gbGVuZ3RoXG4iLCBfX0ZVTkNUSU9OX18p
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgYWxsR2x5cGhz
ID0gMDsgLy8gdHJhY2sgaWYgYW55IG9mIHRoZSBnbHlwaElEcyBhcmUgbm9uLXplcm8KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgc2V0R2x5cGhE
YXRhRm9ySW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGhzW2ldLCBnbHlwaHNbaV0gPyBmb250RGF0YSA6
IE5VTEwpOworICAgICAgICBhbGxHbHlwaHMgfD0gZ2x5cGhzW2ldOworICAgIH0KKworICAgIHJl
dHVybiBhbGxHbHlwaHMgIT0gMDsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71787</attachid>
            <date>2010-10-25 13:15:21 -0700</date>
            <delta_ts>2010-10-25 21:19:56 -0700</delta_ts>
            <desc>Move SimpleFontDataLinux.cpp to platform/graphics/skia/SimpleFontDataSkia.cpp</desc>
            <filename>SimpleFontData.patch</filename>
            <type>text/plain</type>
            <size>37098</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTAtMjUgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55
MTAwLm5ldD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNYWtlIHN1cmUgc2tpYSBpcyBub3QgQ2hyb21pdW0gc3BlY2lmaWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NjcyCisKKyAgICAgICAgU2ltcGxl
Rm9udERhdGFMaW51eCBkb2VzIG5vdCBkZXBlbmQgb24gTGludXggb3IgQ2hyb21pdW0uCisgICAg
ICAgIE1vdmUgU2ltcGxlRm9udERhdGFMaW51eCB0byBwbGF0Zm9ybS9ncmFwaGljcy9za2lhIGFu
ZCByZW5hbWUgaXQgdG8KKyAgICAgICAgU2ltcGxlRm9udERhdGFTa2lhLmNwcCBzbyB0aGF0IG90
aGVyIHBvcnRzIGNhbiB1c2UgaXQuCisgICAgICAgIAorICAgICAgICBBbHNvIG1vdmUgVkRNWFBh
cnNlci5jcHB8aCBiZWNhdXNlIG9ubHkgU2ltcGxlRm9udERhdGFMaW51eCBkZXBlbmRzIG9uIFZE
TVhQYXJzZXIuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2lt
cGxlRm9udERhdGFMaW51eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVkRNWFBhcnNlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcDogQ29waWVkIGZyb20gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1ZETVhQYXJzZXIuY3BwOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZETVhQYXJzZXIuY3BwLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvVkRNWFBhcnNlci5oOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZETVhQYXJzZXIuaC4KKwogMjAx
MC0xMC0yNSAgQ3JpcyBOZWNrYXIgIDxjZG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MDQ3MikKKysrIFdlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDM5LDcgKzI0MzksNiBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRm
b3JtSWNvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1w
bGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwJywKQEAg
LTI0NTAsOCArMjQ0OSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9GcmFtZUNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFyc2VyLmNwcCcsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YS5o
JywKQEAgLTI2MzAsMTEgKzI2MjcsMTQgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUdyYXBoaWNzLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NraWFVdGlscy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1RyYW5zZm9ybWF0aW9uTWF0cml4U2tpYS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvVkRNWFBhcnNlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvVkRNWFBhcnNlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24u
aCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlzaW9uIDcwNDcyKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTA3Nyw3ICsx
MDc3LDYgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250Q2FjaGVMaW51eFxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXhcXC5jcHAkJ10sCiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUxpbnV4XFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXhcXC5jcHAkJ10sCiAgICAgICAgICAgXSwK
ICAgICAgICAgfV0sCiAgICAgICAgIFsnT1M9PSJtYWMiJywgewpAQCAtMTIwNiw2ICsxMjA1LDEx
IEBACiAgICAgICAgICAgJ3NvdXJjZXMvJzogWwogICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bv
c2l4XFwuY3BwJCddLAogCisgICAgICAgICAgICAjIFRoZSBDaHJvbWl1bSBXaW4gY3VycmVudGx5
IHVzZXMgU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAgZnJvbQorICAgICAgICAgICAgIyBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bSwgaW5jbHVkZWQgYnkgcmVnZXggYWJvdmUsIGluc3Rl
YWQuCisgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9WRE1Y
UGFyc2VyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYVxcLmNwcCQnXSwKKwogICAgICAgICAgICAg
IyBUaGUgQ2hyb21pdW0gV2luIGN1cnJlbnRseSB1c2VzIEdseXBoUGFnZVRyZWVOb2RlQ2hyb21p
dW1XaW4uY3BwIGZyb20KICAgICAgICAgICAgICMgcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0s
IGluY2x1ZGVkIGJ5IHJlZ2V4IGFib3ZlLCBpbnN0ZWFkLgogICAgICAgICAgICAgWydleGNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhXFwuY3BwJCdd
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRh
TGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAJKHJldmlzaW9uIDcwNDczKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiVkRNWFBhcnNlci5o
IgotCi0jaW5jbHVkZSAiU2tGb250SG9zdC5oIgotI2luY2x1ZGUgIlNrUGFpbnQuaCIKLSNpbmNs
dWRlICJTa1RpbWUuaCIKLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiU2tUeXBl
cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFNtYWxsY2FwcyB2ZXJzaW9ucyBvZiBm
b250cyBhcmUgNzAlIHRoZSBzaXplIG9mIHRoZSBub3JtYWwgZm9udC4KLXN0YXRpYyBjb25zdCBm
bG9hdCBzbWFsbENhcHNGcmFjdGlvbiA9IDAuN2Y7Ci0vLyBUaGlzIGlzIHRoZSBsYXJnZXN0IFZE
TVggdGFibGUgd2hpY2ggd2UnbGwgdHJ5IHRvIGxvYWQgYW5kIHBhcnNlLgotc3RhdGljIGNvbnN0
IHNpemVfdCBtYXhWRE1YVGFibGVTaXplID0gMTAyNCAqIDEwMjQ7ICAvLyAxIE1CCi0KLXZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgU2tQYWludCBwYWludDsKLSAg
ICBTa1BhaW50OjpGb250TWV0cmljcyBtZXRyaWNzOwotCi0gICAgbV9wbGF0Zm9ybURhdGEuc2V0
dXBQYWludCgmcGFpbnQpOwotICAgIHBhaW50LmdldEZvbnRNZXRyaWNzKCZtZXRyaWNzKTsKLSAg
ICBjb25zdCBTa0ZvbnRJRCBmb250SUQgPSBtX3BsYXRmb3JtRGF0YS51bmlxdWVJRCgpOwotCi0g
ICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHZkbXhUYWcgPSBTa1NldEZvdXJCeXRlVGFnKCdWJywg
J0QnLCAnTScsICdYJyk7Ci0gICAgaW50IHBpeGVsU2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUo
KSArIDAuNTsKLSAgICBpbnQgdmRteEFzY2VudCwgdmRteERlc2NlbnQ7Ci0gICAgYm9vbCBpc1ZE
TVhWYWxpZCA9IGZhbHNlOwotCi0gICAgc2l6ZV90IHZkbXhTaXplID0gU2tGb250SG9zdDo6R2V0
VGFibGVTaXplKGZvbnRJRCwgdmRteFRhZyk7Ci0gICAgaWYgKHZkbXhTaXplICYmIHZkbXhTaXpl
IDwgbWF4VkRNWFRhYmxlU2l6ZSkgewotICAgICAgICB1aW50OF90KiB2ZG14VGFibGUgPSAodWlu
dDhfdCopIGZhc3RNYWxsb2ModmRteFNpemUpOwotICAgICAgICBpZiAodmRteFRhYmxlCi0gICAg
ICAgICAgICAmJiBTa0ZvbnRIb3N0OjpHZXRUYWJsZURhdGEoZm9udElELCB2ZG14VGFnLCAwLCB2
ZG14U2l6ZSwgdmRteFRhYmxlKSA9PSB2ZG14U2l6ZQotICAgICAgICAgICAgJiYgcGFyc2VWRE1Y
KCZ2ZG14QXNjZW50LCAmdmRteERlc2NlbnQsIHZkbXhUYWJsZSwgdmRteFNpemUsIHBpeGVsU2l6
ZSkpCi0gICAgICAgICAgICBpc1ZETVhWYWxpZCA9IHRydWU7Ci0gICAgICAgIGZhc3RGcmVlKHZk
bXhUYWJsZSk7Ci0gICAgfQotCi0gICAgLy8gQmV3YXJlIHRob3NlIHdobyBzdGVwIGhlcmU6IFRo
aXMgY29kZSBpcyBkZXNpZ25lZCB0byBtYXRjaCBXaW4zMiBmb250Ci0gICAgLy8gbWV0cmljcyAq
ZXhhY3RseSouCi0gICAgaWYgKGlzVkRNWFZhbGlkKSB7Ci0gICAgICAgIG1fYXNjZW50ID0gdmRt
eEFzY2VudDsKLSAgICAgICAgbV9kZXNjZW50ID0gLXZkbXhEZXNjZW50OwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIFNrU2NhbGFyIGhlaWdodCA9IC1tZXRyaWNzLmZBc2NlbnQgKyBtZXRyaWNzLmZE
ZXNjZW50ICsgbWV0cmljcy5mTGVhZGluZzsKLSAgICAgICAgbV9hc2NlbnQgPSBTa1NjYWxhclJv
dW5kKC1tZXRyaWNzLmZBc2NlbnQpOwotICAgICAgICBtX2Rlc2NlbnQgPSBTa1NjYWxhclJvdW5k
KGhlaWdodCkgLSBtX2FzY2VudDsKLSAgICB9Ci0KLSAgICBpZiAobWV0cmljcy5mWEhlaWdodCkK
LSAgICAgICAgbV94SGVpZ2h0ID0gbWV0cmljcy5mWEhlaWdodDsKLSAgICBlbHNlIHsKLSAgICAg
ICAgLy8gaGFjayB0YWtlbiBmcm9tIHRoZSBXaW5kb3dzIHBvcnQKLSAgICAgICAgbV94SGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fYXNjZW50KSAqIDAuNTY7Ci0gICAgfQotCi0gICAgbV9s
aW5lR2FwID0gU2tTY2FsYXJSb3VuZChtZXRyaWNzLmZMZWFkaW5nKTsKLSAgICBtX2xpbmVTcGFj
aW5nID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7Ci0KLSAgICAvLyBJbiBXZWJL
aXQvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAsIG1fc3BhY2VX
aWR0aCBpcwotICAgIC8vIGNhbGN1bGF0ZWQgZm9yIHVzLCBidXQgd2UgbmVlZCB0byBjYWxjdWxh
dGUgbV9tYXhDaGFyV2lkdGggYW5kCi0gICAgLy8gbV9hdmdDaGFyV2lkdGggaW4gb3JkZXIgZm9y
IHRleHQgZW50cnkgd2lkZ2V0cyB0byBiZSBzaXplZCBjb3JyZWN0bHkuCi0KLSAgICBTa1NjYWxh
ciB4UmFuZ2UgPSBtZXRyaWNzLmZYTWF4IC0gbWV0cmljcy5mWE1pbjsKLSAgICBtX21heENoYXJX
aWR0aCA9IFNrU2NhbGFyUm91bmQoeFJhbmdlICogU2tTY2FsYXJSb3VuZChtX3BsYXRmb3JtRGF0
YS5zaXplKCkpKTsKLQotICAgIGlmIChtZXRyaWNzLmZBdmdDaGFyV2lkdGgpCi0gICAgICAgIG1f
YXZnQ2hhcldpZHRoID0gU2tTY2FsYXJSb3VuZChtZXRyaWNzLmZBdmdDaGFyV2lkdGgpOwotICAg
IGVsc2UgewotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IG1feEhlaWdodDsKLQotICAgICAgICBH
bHlwaFBhZ2UqIGdseXBoUGFnZVplcm8gPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxk
KHRoaXMsIDApLT5wYWdlKCk7Ci0KLSAgICAgICAgaWYgKGdseXBoUGFnZVplcm8pIHsKLSAgICAg
ICAgICAgIHN0YXRpYyBjb25zdCBVQ2hhcjMyIHhfY2hhciA9ICd4JzsKLSAgICAgICAgICAgIGNv
bnN0IEdseXBoIHhHbHlwaCA9IGdseXBoUGFnZVplcm8tPmdseXBoRGF0YUZvckNoYXJhY3Rlcih4
X2NoYXIpLmdseXBoOwotCi0gICAgICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgICAg
IG1fYXZnQ2hhcldpZHRoID0gd2lkdGhGb3JHbHlwaCh4R2x5cGgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewot
ICAgIC8vIGNoYXJ3aWR0aHMgYXJlIHNldCBpbiBwbGF0Zm9ybUluaXQuCi19Ci0KLXZvaWQgU2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgZGVsZXRlIG1fc21hbGxDYXBz
Rm9udERhdGE7Ci0gICAgbV9zbWFsbENhcHNGb250RGF0YSA9IDA7Ci19Ci0KLVNpbXBsZUZvbnRE
YXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnRE
YXRhKSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHNtYWxsQ2Fwc1NpemUgPSBscm91bmRmKGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHNtYWxsQ2Fwc0ZyYWN0aW9uKTsKLSAgICAgICAg
bV9zbWFsbENhcHNGb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRh
KG1fcGxhdGZvcm1EYXRhLCBzbWFsbENhcHNTaXplKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
c21hbGxDYXBzRm9udERhdGE7Ci19Ci0KLWJvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5zQ2hh
cmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKLXsKLSAg
ICBTa1BhaW50IHBhaW50OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhCdWZmZXJDb3Vu
dCA9IDY0OwotICAgIHVpbnQxNl90IGdseXBoc1ttYXhCdWZmZXJDb3VudF07Ci0KLSAgICBtX3Bs
YXRmb3JtRGF0YS5zZXR1cFBhaW50KCZwYWludCk7Ci0gICAgcGFpbnQuc2V0VGV4dEVuY29kaW5n
KFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOwotCi0gICAgd2hpbGUgKGxlbmd0aCA+IDAp
IHsKLSAgICAgICAgaW50IG4gPSBTa01pbjMyKGxlbmd0aCwgU0tfQVJSQVlfQ09VTlQoZ2x5cGhz
KSk7Ci0KLSAgICAgICAgLy8gdGV4dFRvR2x5cGhzIHRha2VzIGEgYnl0ZSBjb3VudCBzbyB3ZSBk
b3VibGUgdGhlIGNoYXJhY3RlciBjb3VudC4KLSAgICAgICAgaW50IGNvdW50ID0gcGFpbnQudGV4
dFRvR2x5cGhzKGNoYXJhY3RlcnMsIG4gKiAyLCBnbHlwaHMpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmICgwID09IGdseXBoc1tpXSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgIC8vIG1pc3NpbmcgZ2x5cGgKLSAg
ICAgICAgfQotCi0gICAgICAgIGNoYXJhY3RlcnMgKz0gbjsKLSAgICAgICAgbGVuZ3RoIC09IG47
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2ltcGxlRm9udERhdGE6OmRl
dGVybWluZVBpdGNoKCkKLXsKLSAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gcGxhdGZvcm1EYXRh
KCkuaXNGaXhlZFBpdGNoKCk7Ci19Ci0KLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7
Ci19Ci0gICAgCi1mbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAotewotICAgIFNrQVNTRVJUKHNpemVvZihnbHlwaCkgPT0gMik7ICAg
Ly8gY29tcGlsZS10aW1lIGFzc2VydAotCi0gICAgU2tQYWludCBwYWludDsKLQotICAgIG1fcGxh
dGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKLQotICAgIHBhaW50LnNldFRleHRFbmNvZGlu
ZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwotICAgIFNrU2NhbGFyIHdpZHRoID0g
cGFpbnQubWVhc3VyZVRleHQoJmdseXBoLCAyKTsKLQotICAgIC8vIFRob3VnaCBXZWJLaXQgc3Vw
cG9ydHMgbm9uLWludGVncmFsIGFkdmFuY2VzLCBTa2lhIG9ubHkgc3VwcG9ydHMgdGhlbQotICAg
IC8vIGZvciAic3VicGl4ZWwiIChkaXN0aW5jdCBmcm9tIExDRCBzdWJwaXhlbCBhbnRpYWxpYXNp
bmcpIHRleHQsIHdoaWNoCi0gICAgLy8gd2UgZG9uJ3QgdXNlLgotICAgIHJldHVybiByb3VuZChT
a1NjYWxhclRvRmxvYXQod2lkdGgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFyc2Vy
LmNwcAkocmV2aXNpb24gNzA0NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZETVhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJp
bmcuaD4KLQotLy8gRm9yIGh0b25zL250b2hzCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0KLS8v
IEJ1ZmZlciBoZWxwZXIgY2xhc3MKLS8vCi0vLyBUaGlzIGNsYXNzIHBlcmZvcm0gc29tZSB0cml2
YWwgYnVmZmVyIG9wZXJhdGlvbnMgd2hpbGUgY2hlY2tpbmcgZm9yCi0vLyBvdXQtb2YtYm91bmRz
IGVycm9ycy4gQXMgYSBmYW1pbHkgdGhleSByZXR1cm4gZmFsc2UgaWYgYW55dGhpbmcgaXMgYW1p
c3MsCi0vLyB1cGRhdGluZyB0aGUgY3VycmVudCBvZmZzZXQgb3RoZXJ3aXNlLgotY2xhc3MgQnVm
ZmVyIHsKLXB1YmxpYzoKLSAgICBCdWZmZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3Qg
bGVuZ3RoKQotICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCi0gICAgICAgICwgbV9vZmZzZXQoMCkgeyB9Ci0KLSAgICBib29sIHNraXAoc2l6ZV90
IG51bUJ5dGVzKQotICAgIHsKLSAgICAgICAgaWYgKG1fb2Zmc2V0ICsgbnVtQnl0ZXMgPiBtX2xl
bmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9vZmZzZXQgKz0gbnVt
Qnl0ZXM7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgcmVhZFU4KHVp
bnQ4X3QqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKG1fb2Zmc2V0ICsgc2l6ZW9mKHVpbnQ4
X3QpID4gbV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICp2YWx1
ZSA9IG1fYnVmZmVyW21fb2Zmc2V0XTsKLSAgICAgICAgbV9vZmZzZXQgKz0gc2l6ZW9mKHVpbnQ4
X3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHJlYWRVMTYodWlu
dDE2X3QqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKG1fb2Zmc2V0ICsgc2l6ZW9mKHVpbnQx
Nl90KSA+IG1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtZW1j
cHkodmFsdWUsIG1fYnVmZmVyICsgbV9vZmZzZXQsIHNpemVvZih1aW50MTZfdCkpOwotICAgICAg
ICAqdmFsdWUgPSBudG9ocygqdmFsdWUpOwotICAgICAgICBtX29mZnNldCArPSBzaXplb2YodWlu
dDE2X3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHJlYWRTMTYo
aW50MTZfdCogdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gcmVhZFUxNihyZWludGVycHJl
dF9jYXN0PHVpbnQxNl90Kj4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgb2Zmc2V0KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKLSAgICB9Ci0KLSAgICB2b2lk
IHNldE9mZnNldChzaXplX3QgbmV3b2Zmc2V0KQotICAgIHsKLSAgICAgICAgbV9vZmZzZXQgPSBu
ZXdvZmZzZXQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IHVpbnQ4X3QgKmNvbnN0IG1f
YnVmZmVyOwotICAgIGNvbnN0IHNpemVfdCBtX2xlbmd0aDsKLSAgICBzaXplX3QgbV9vZmZzZXQ7
Ci19OwotCi0vLyBWRE1YIHBhcnNpbmcgY29kZS4KLS8vCi0vLyBWRE1YIHRhYmxlcyBhcmUgZm91
bmQgaW4gc29tZSBUcnVlVHlwZS9PcGVuVHlwZSBmb250cyBhbmQgY29udGFpbgotLy8gYXNjZW5k
ZXIvZGVzY2VuZGVyIG92ZXJyaWRlcyBmb3IgY2VydGFpbiAodXN1YWxseSBzbWFsbCkgc2l6ZXMu
IFRoaXMgaXMKLS8vIG5lZWRlZCBpbiBvcmRlciB0byBtYXRjaCBmb250IG1ldHJpY3Mgb24gV2lu
ZG93cy4KLS8vCi0vLyBGcmVldHlwZSBkb2VzIG5vdCBwYXJzZSB0aGVzZSB0YWJsZXMgc28gd2Ug
ZG8gc28gaGVyZS4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBQYXJzZSBhIFRydWVUeXBl
IFZETVggdGFibGUuCi0vLyAgIHlNYXg6IChvdXRwdXQpIHRoZSBhc2NlbmRlciB2YWx1ZSBmcm9t
IHRoZSB0YWJsZQotLy8gICB5TWluOiAob3V0cHV0KSB0aGUgZGVzY2VuZGVyIHZhbHVlIGZyb20g
dGhlIHRhYmxlIChuZWdhdGl2ZSEpCi0vLyAgIHZkbXg6IHRoZSB0YWJsZSBieXRlcwotLy8gICB2
ZG14TGVuZ3RoOiBsZW5ndGggb2YgQHZkbXgsIGluIGJ5dGVzCi0vLyAgIHRhcmdldFBpeGVsU2l6
ZTogdGhlIHBpeGVsIHNpemUgb2YgdGhlIGZvbnQgKGUuZy4gMTYpCi0vLwotLy8gUmV0dXJucyB0
cnVlIGlmZiBhIHN1aXRhYmxlIG1hdGNoIGFyZSBmb3VuZC4gT3RoZXJ3aXNlLCAqeU1heCBhbmQg
KnlNaW4gYXJlCi0vLyB1bnRvdWNoZWQuIHNpemVfdCBtdXN0IGJlIDMyLWJpdHMgdG8gYXZvaWQg
b3ZlcmZsb3cuCi0vLwotLy8gU2VlIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9vcGVudHlwZS9v
dHNwZWMvdmRteC5odG0KLWJvb2wgcGFyc2VWRE1YKGludCogeU1heCwgaW50KiB5TWluLAotICAg
ICAgICAgICAgICAgY29uc3QgdWludDhfdCogdmRteCwgc2l6ZV90IHZkbXhMZW5ndGgsCi0gICAg
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXRQaXhlbFNpemUpCi17Ci0gICAgQnVmZmVyIGJ1Zih2
ZG14LCB2ZG14TGVuZ3RoKTsKLQotICAgIC8vIFdlIGlnbm9yZSB0aGUgdmVyc2lvbi4gRnV0dXJl
IHRhYmxlcyBzaG91bGQgYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aAotICAgIC8vIHRoaXMg
bGF5b3V0LgotICAgIHVpbnQxNl90IG51bVJhdGlvczsKLSAgICBpZiAoIWJ1Zi5za2lwKDQpIHx8
ICFidWYucmVhZFUxNigmbnVtUmF0aW9zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gTm93IHdlIGhhdmUgdHdvIHRhYmxlcy4gRmlyc3RseSB3ZSBoYXZlIEBudW1SYXRpb3MgUmF0
aW8gcmVjb3JkcywgdGhlbiBhCi0gICAgLy8gbWF0Y2hpbmcgYXJyYXkgb2YgQG51bVJhdGlvcyBv
ZmZzZXRzLiBXZSBzYXZlIHRoZSBvZmZzZXQgb2YgdGhlIGJlZ2lubmluZwotICAgIC8vIG9mIHRo
aXMgc2Vjb25kIHRhYmxlLgotICAgIC8vCi0gICAgLy8gUmFuZ2UgNiA8PSB4IDw9IDI2MjE0Ngot
ICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0VGFibGVPZmZzZXQgPQotICAgICAgICBidWYub2Zmc2V0
KCkgKyA0IC8qIHNpemVvZiBzdHJ1Y3QgcmF0aW8gKi8gKiBudW1SYXRpb3M7Ci0KLSAgICB1bnNp
Z25lZCBkZXNpcmVkUmF0aW8gPSAweGZmZmZmZmZmOwotICAgIC8vIFdlIHJlYWQgNCBieXRlcyBw
ZXIgcmVjb3JkLCBzbyB0aGUgb2Zmc2V0IHJhbmdlIGlzCi0gICAgLy8gICA2IDw9IHggPD0gNTI0
Mjg2Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJhdGlvczsgKytpKSB7Ci0gICAg
ICAgIHVpbnQ4X3QgeFJhdGlvLCB5UmF0aW8xLCB5UmF0aW8yOwotCi0gICAgICAgIGlmICghYnVm
LnNraXAoMSkKLSAgICAgICAgICAgIHx8ICFidWYucmVhZFU4KCZ4UmF0aW8pCi0gICAgICAgICAg
ICB8fCAhYnVmLnJlYWRVOCgmeVJhdGlvMSkKLSAgICAgICAgICAgIHx8ICFidWYucmVhZFU4KCZ5
UmF0aW8yKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBUaGlzIGVp
dGhlciBjb3ZlcnMgMToxLCBvciB0aGlzIGlzIHRoZSBkZWZhdWx0IGVudHJ5ICgwLCAwLCAwKQot
ICAgICAgICBpZiAoKHhSYXRpbyA9PSAxICYmIHlSYXRpbzEgPD0gMSAmJiB5UmF0aW8yID49IDEp
Ci0gICAgICAgICAgICB8fCAoeFJhdGlvID09IDAgJiYgeVJhdGlvMSA9PSAwICYmIHlSYXRpbzIg
PT0gMCkpIHsKLSAgICAgICAgICAgIGRlc2lyZWRSYXRpbyA9IGk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZXNpcmVkUmF0aW8gPT0gMHhmZmZmZmZm
ZikgLy8gbm8gcmF0aW8gZm91bmQKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gUmFu
Z2UgMTAgPD0geCA8PSAzOTMyMTYKLSAgICBidWYuc2V0T2Zmc2V0KG9mZnNldFRhYmxlT2Zmc2V0
ICsgc2l6ZW9mKHVpbnQxNl90KSAqIGRlc2lyZWRSYXRpbyk7Ci0KLSAgICAvLyBOb3cgd2UgcmVh
ZCBmcm9tIHRoZSBvZmZzZXQgdGFibGUgdG8gZ2V0IHRoZSBvZmZzZXQgb2YgYW5vdGhlciBhcnJh
eQotICAgIHVpbnQxNl90IGdyb3VwT2Zmc2V0OwotICAgIGlmICghYnVmLnJlYWRVMTYoJmdyb3Vw
T2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFJhbmdlIDAgPD0geCA8PSA2
NTUzNQotICAgIGJ1Zi5zZXRPZmZzZXQoZ3JvdXBPZmZzZXQpOwotCi0gICAgdWludDE2X3QgbnVt
UmVjb3JkczsKLSAgICBpZiAoIWJ1Zi5yZWFkVTE2KCZudW1SZWNvcmRzKSB8fCAhYnVmLnNraXAo
c2l6ZW9mKHVpbnQxNl90KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHJl
YWQgNiBieXRlcyBwZXIgcmVjb3JkLCBzbyB0aGUgb2Zmc2V0IHJhbmdlIGlzCi0gICAgLy8gICA0
IDw9IHggPD0gNDU4NzQ5Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJlY29yZHM7
ICsraSkgewotICAgICAgICB1aW50MTZfdCBwaXhlbFNpemU7Ci0gICAgICAgIGlmICghYnVmLnJl
YWRVMTYoJnBpeGVsU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8v
IHRoZSBlbnRyaWVzIGFyZSBzb3J0ZWQsIHNvIHdlIGNhbiBhYm9ydCBlYXJseSBpZiBuZWVkIGJl
Ci0gICAgICAgIGlmIChwaXhlbFNpemUgPiB0YXJnZXRQaXhlbFNpemUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHBpeGVsU2l6ZSA9PSB0YXJnZXRQaXhlbFNpemUp
IHsKLSAgICAgICAgICAgIGludDE2X3QgdGVtcFlNYXgsIHRlbXBZTWluOwotICAgICAgICAgICAg
aWYgKCFidWYucmVhZFMxNigmdGVtcFlNYXgpCi0gICAgICAgICAgICAgICAgfHwgIWJ1Zi5yZWFk
UzE2KCZ0ZW1wWU1pbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgKnlNaW4gPSB0ZW1wWU1pbjsKLSAgICAgICAgICAgICp5TWF4ID0gdGVtcFlNYXg7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWJ1Zi5za2lwKDIg
KiBzaXplb2YoaW50MTZfdCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFyc2VyLmgJKHJldmlz
aW9uIDcwNDczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFy
c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFZETVhQYXJzZXJf
aAotI2RlZmluZSBWRE1YUGFyc2VyX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGJvb2wg
cGFyc2VWRE1YKGludCogeW1heCwgaW50KiB5bWluLAotICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHZkbXgsIHNpemVfdCB2ZG14TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHRhcmdldFBpeGVsU2l6ZSk7Ci19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNr
aWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1w
bGVGb250RGF0YVNraWEuY3BwCShyZXZpc2lvbiA3MDQ3MykJKGZyb20gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcDo3MDQ3MykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAy
MDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJWRE1YUGFyc2Vy
LmgiCisKKyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2lu
Y2x1ZGUgIlNrVGltZS5oIgorI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNpbmNsdWRlICJTa1R5
cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU21hbGxjYXBzIHZlcnNpb25zIG9m
IGZvbnRzIGFyZSA3MCUgdGhlIHNpemUgb2YgdGhlIG5vcm1hbCBmb250Lgorc3RhdGljIGNvbnN0
IGZsb2F0IHNtYWxsQ2Fwc0ZyYWN0aW9uID0gMC43ZjsKKy8vIFRoaXMgaXMgdGhlIGxhcmdlc3Qg
VkRNWCB0YWJsZSB3aGljaCB3ZSdsbCB0cnkgdG8gbG9hZCBhbmQgcGFyc2UuCitzdGF0aWMgY29u
c3Qgc2l6ZV90IG1heFZETVhUYWJsZVNpemUgPSAxMDI0ICogMTAyNDsgIC8vIDEgTUIKKwordm9p
ZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBTa1BhaW50IHBhaW50Owor
ICAgIFNrUGFpbnQ6OkZvbnRNZXRyaWNzIG1ldHJpY3M7CisKKyAgICBtX3BsYXRmb3JtRGF0YS5z
ZXR1cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuZ2V0Rm9udE1ldHJpY3MoJm1ldHJpY3MpOwor
ICAgIGNvbnN0IFNrRm9udElEIGZvbnRJRCA9IG1fcGxhdGZvcm1EYXRhLnVuaXF1ZUlEKCk7CisK
KyAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgdmRteFRhZyA9IFNrU2V0Rm91ckJ5dGVUYWcoJ1Yn
LCAnRCcsICdNJywgJ1gnKTsKKyAgICBpbnQgcGl4ZWxTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6
ZSgpICsgMC41OworICAgIGludCB2ZG14QXNjZW50LCB2ZG14RGVzY2VudDsKKyAgICBib29sIGlz
VkRNWFZhbGlkID0gZmFsc2U7CisKKyAgICBzaXplX3QgdmRteFNpemUgPSBTa0ZvbnRIb3N0OjpH
ZXRUYWJsZVNpemUoZm9udElELCB2ZG14VGFnKTsKKyAgICBpZiAodmRteFNpemUgJiYgdmRteFNp
emUgPCBtYXhWRE1YVGFibGVTaXplKSB7CisgICAgICAgIHVpbnQ4X3QqIHZkbXhUYWJsZSA9ICh1
aW50OF90KikgZmFzdE1hbGxvYyh2ZG14U2l6ZSk7CisgICAgICAgIGlmICh2ZG14VGFibGUKKyAg
ICAgICAgICAgICYmIFNrRm9udEhvc3Q6OkdldFRhYmxlRGF0YShmb250SUQsIHZkbXhUYWcsIDAs
IHZkbXhTaXplLCB2ZG14VGFibGUpID09IHZkbXhTaXplCisgICAgICAgICAgICAmJiBwYXJzZVZE
TVgoJnZkbXhBc2NlbnQsICZ2ZG14RGVzY2VudCwgdmRteFRhYmxlLCB2ZG14U2l6ZSwgcGl4ZWxT
aXplKSkKKyAgICAgICAgICAgIGlzVkRNWFZhbGlkID0gdHJ1ZTsKKyAgICAgICAgZmFzdEZyZWUo
dmRteFRhYmxlKTsKKyAgICB9CisKKyAgICAvLyBCZXdhcmUgdGhvc2Ugd2hvIHN0ZXAgaGVyZTog
VGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIG1hdGNoIFdpbjMyIGZvbnQKKyAgICAvLyBtZXRyaWNz
ICpleGFjdGx5Ki4KKyAgICBpZiAoaXNWRE1YVmFsaWQpIHsKKyAgICAgICAgbV9hc2NlbnQgPSB2
ZG14QXNjZW50OworICAgICAgICBtX2Rlc2NlbnQgPSAtdmRteERlc2NlbnQ7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgU2tTY2FsYXIgaGVpZ2h0ID0gLW1ldHJpY3MuZkFzY2VudCArIG1ldHJpY3Mu
ZkRlc2NlbnQgKyBtZXRyaWNzLmZMZWFkaW5nOworICAgICAgICBtX2FzY2VudCA9IFNrU2NhbGFy
Um91bmQoLW1ldHJpY3MuZkFzY2VudCk7CisgICAgICAgIG1fZGVzY2VudCA9IFNrU2NhbGFyUm91
bmQoaGVpZ2h0KSAtIG1fYXNjZW50OworICAgIH0KKworICAgIGlmIChtZXRyaWNzLmZYSGVpZ2h0
KQorICAgICAgICBtX3hIZWlnaHQgPSBtZXRyaWNzLmZYSGVpZ2h0OworICAgIGVsc2UgeworICAg
ICAgICAvLyBoYWNrIHRha2VuIGZyb20gdGhlIFdpbmRvd3MgcG9ydAorICAgICAgICBtX3hIZWln
aHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9hc2NlbnQpICogMC41NjsKKyAgICB9CisKKyAgICBt
X2xpbmVHYXAgPSBTa1NjYWxhclJvdW5kKG1ldHJpY3MuZkxlYWRpbmcpOworICAgIG1fbGluZVNw
YWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudCArIG1fbGluZUdhcDsKKworICAgIC8vIEluIFdl
YktpdC9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCwgbV9zcGFj
ZVdpZHRoIGlzCisgICAgLy8gY2FsY3VsYXRlZCBmb3IgdXMsIGJ1dCB3ZSBuZWVkIHRvIGNhbGN1
bGF0ZSBtX21heENoYXJXaWR0aCBhbmQKKyAgICAvLyBtX2F2Z0NoYXJXaWR0aCBpbiBvcmRlciBm
b3IgdGV4dCBlbnRyeSB3aWRnZXRzIHRvIGJlIHNpemVkIGNvcnJlY3RseS4KKworICAgIFNrU2Nh
bGFyIHhSYW5nZSA9IG1ldHJpY3MuZlhNYXggLSBtZXRyaWNzLmZYTWluOworICAgIG1fbWF4Q2hh
cldpZHRoID0gU2tTY2FsYXJSb3VuZCh4UmFuZ2UgKiBTa1NjYWxhclJvdW5kKG1fcGxhdGZvcm1E
YXRhLnNpemUoKSkpOworCisgICAgaWYgKG1ldHJpY3MuZkF2Z0NoYXJXaWR0aCkKKyAgICAgICAg
bV9hdmdDaGFyV2lkdGggPSBTa1NjYWxhclJvdW5kKG1ldHJpY3MuZkF2Z0NoYXJXaWR0aCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gbV94SGVpZ2h0OworCisgICAgICAg
IEdseXBoUGFnZSogZ2x5cGhQYWdlWmVybyA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hp
bGQodGhpcywgMCktPnBhZ2UoKTsKKworICAgICAgICBpZiAoZ2x5cGhQYWdlWmVybykgeworICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IFVDaGFyMzIgeF9jaGFyID0gJ3gnOworICAgICAgICAgICAg
Y29uc3QgR2x5cGggeEdseXBoID0gZ2x5cGhQYWdlWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KHhfY2hhcikuZ2x5cGg7CisKKyAgICAgICAgICAgIGlmICh4R2x5cGgpCisgICAgICAgICAgICAg
ICAgbV9hdmdDaGFyV2lkdGggPSB3aWR0aEZvckdseXBoKHhHbHlwaCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7
CisgICAgLy8gY2hhcndpZHRocyBhcmUgc2V0IGluIHBsYXRmb3JtSW5pdC4KK30KKwordm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBkZWxldGUgbV9zbWFsbENh
cHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gMDsKK30KKworU2ltcGxlRm9u
dERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9u
dERhdGEpIHsKKyAgICAgICAgY29uc3QgZmxvYXQgc21hbGxDYXBzU2l6ZSA9IGxyb3VuZGYoZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc21hbGxDYXBzRnJhY3Rpb24pOworICAgICAg
ICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9ybURh
dGEobV9wbGF0Zm9ybURhdGEsIHNtYWxsQ2Fwc1NpemUpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bV9zbWFsbENhcHNGb250RGF0YTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnND
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAorewor
ICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEJ1ZmZlckNv
dW50ID0gNjQ7CisgICAgdWludDE2X3QgZ2x5cGhzW21heEJ1ZmZlckNvdW50XTsKKworICAgIG1f
cGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBwYWludC5zZXRUZXh0RW5jb2Rp
bmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7CisKKyAgICB3aGlsZSAobGVuZ3RoID4g
MCkgeworICAgICAgICBpbnQgbiA9IFNrTWluMzIobGVuZ3RoLCBTS19BUlJBWV9DT1VOVChnbHlw
aHMpKTsKKworICAgICAgICAvLyB0ZXh0VG9HbHlwaHMgdGFrZXMgYSBieXRlIGNvdW50IHNvIHdl
IGRvdWJsZSB0aGUgY2hhcmFjdGVyIGNvdW50LgorICAgICAgICBpbnQgY291bnQgPSBwYWludC50
ZXh0VG9HbHlwaHMoY2hhcmFjdGVycywgbiAqIDIsIGdseXBocyk7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKDAgPT0gZ2x5cGhzW2ld
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgLy8gbWlzc2luZyBnbHlwaAor
ICAgICAgICB9CisKKyAgICAgICAgY2hhcmFjdGVycyArPSBuOworICAgICAgICBsZW5ndGggLT0g
bjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6
ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBwbGF0Zm9ybURh
dGEoKS5pc0ZpeGVkUGl0Y2goKTsKK30KKworRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKK30KKyAgICAKK2Zsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgU2tBU1NFUlQoc2l6ZW9mKGdseXBoKSA9PSAyKTsg
ICAvLyBjb21waWxlLXRpbWUgYXNzZXJ0CisKKyAgICBTa1BhaW50IHBhaW50OworCisgICAgbV9w
bGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOworCisgICAgcGFpbnQuc2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgU2tTY2FsYXIgd2lkdGgg
PSBwYWludC5tZWFzdXJlVGV4dCgmZ2x5cGgsIDIpOworCisgICAgLy8gVGhvdWdoIFdlYktpdCBz
dXBwb3J0cyBub24taW50ZWdyYWwgYWR2YW5jZXMsIFNraWEgb25seSBzdXBwb3J0cyB0aGVtCisg
ICAgLy8gZm9yICJzdWJwaXhlbCIgKGRpc3RpbmN0IGZyb20gTENEIHN1YnBpeGVsIGFudGlhbGlh
c2luZykgdGV4dCwgd2hpY2gKKyAgICAvLyB3ZSBkb24ndCB1c2UuCisgICAgcmV0dXJuIHJvdW5k
KFNrU2NhbGFyVG9GbG9hdCh3aWR0aCkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1ZETVhQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9WRE1YUGFyc2VyLmNwcAko
cmV2aXNpb24gNzA0NzMpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VkRNWFBhcnNlci5jcHA6NzA0NzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
VkRNWFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCisvLyBGb3IgaHRvbnMvbnRvaHMKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworLy8gQnVm
ZmVyIGhlbHBlciBjbGFzcworLy8KKy8vIFRoaXMgY2xhc3MgcGVyZm9ybSBzb21lIHRyaXZhbCBi
dWZmZXIgb3BlcmF0aW9ucyB3aGlsZSBjaGVja2luZyBmb3IKKy8vIG91dC1vZi1ib3VuZHMgZXJy
b3JzLiBBcyBhIGZhbWlseSB0aGV5IHJldHVybiBmYWxzZSBpZiBhbnl0aGluZyBpcyBhbWlzcywK
Ky8vIHVwZGF0aW5nIHRoZSBjdXJyZW50IG9mZnNldCBvdGhlcndpc2UuCitjbGFzcyBCdWZmZXIg
eworcHVibGljOgorICAgIEJ1ZmZlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBsZW5n
dGgpCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0
aCkKKyAgICAgICAgLCBtX29mZnNldCgwKSB7IH0KKworICAgIGJvb2wgc2tpcChzaXplX3QgbnVt
Qnl0ZXMpCisgICAgeworICAgICAgICBpZiAobV9vZmZzZXQgKyBudW1CeXRlcyA+IG1fbGVuZ3Ro
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX29mZnNldCArPSBudW1CeXRl
czsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCByZWFkVTgodWludDhf
dCogdmFsdWUpCisgICAgeworICAgICAgICBpZiAobV9vZmZzZXQgKyBzaXplb2YodWludDhfdCkg
PiBtX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgKnZhbHVlID0g
bV9idWZmZXJbbV9vZmZzZXRdOworICAgICAgICBtX29mZnNldCArPSBzaXplb2YodWludDhfdCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgcmVhZFUxNih1aW50MTZf
dCogdmFsdWUpCisgICAgeworICAgICAgICBpZiAobV9vZmZzZXQgKyBzaXplb2YodWludDE2X3Qp
ID4gbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1lbWNweSh2
YWx1ZSwgbV9idWZmZXIgKyBtX29mZnNldCwgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgICAgICp2
YWx1ZSA9IG50b2hzKCp2YWx1ZSk7CisgICAgICAgIG1fb2Zmc2V0ICs9IHNpemVvZih1aW50MTZf
dCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgcmVhZFMxNihpbnQx
Nl90KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWFkVTE2KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDE2X3QqPih2YWx1ZSkpOworICAgIH0KKworICAgIHNpemVfdCBvZmZzZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQgc2V0
T2Zmc2V0KHNpemVfdCBuZXdvZmZzZXQpCisgICAgeworICAgICAgICBtX29mZnNldCA9IG5ld29m
ZnNldDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgdWludDhfdCAqY29uc3QgbV9idWZm
ZXI7CisgICAgY29uc3Qgc2l6ZV90IG1fbGVuZ3RoOworICAgIHNpemVfdCBtX29mZnNldDsKK307
CisKKy8vIFZETVggcGFyc2luZyBjb2RlLgorLy8KKy8vIFZETVggdGFibGVzIGFyZSBmb3VuZCBp
biBzb21lIFRydWVUeXBlL09wZW5UeXBlIGZvbnRzIGFuZCBjb250YWluCisvLyBhc2NlbmRlci9k
ZXNjZW5kZXIgb3ZlcnJpZGVzIGZvciBjZXJ0YWluICh1c3VhbGx5IHNtYWxsKSBzaXplcy4gVGhp
cyBpcworLy8gbmVlZGVkIGluIG9yZGVyIHRvIG1hdGNoIGZvbnQgbWV0cmljcyBvbiBXaW5kb3dz
LgorLy8KKy8vIEZyZWV0eXBlIGRvZXMgbm90IHBhcnNlIHRoZXNlIHRhYmxlcyBzbyB3ZSBkbyBz
byBoZXJlLgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFBhcnNlIGEgVHJ1ZVR5cGUgVkRN
WCB0YWJsZS4KKy8vICAgeU1heDogKG91dHB1dCkgdGhlIGFzY2VuZGVyIHZhbHVlIGZyb20gdGhl
IHRhYmxlCisvLyAgIHlNaW46IChvdXRwdXQpIHRoZSBkZXNjZW5kZXIgdmFsdWUgZnJvbSB0aGUg
dGFibGUgKG5lZ2F0aXZlISkKKy8vICAgdmRteDogdGhlIHRhYmxlIGJ5dGVzCisvLyAgIHZkbXhM
ZW5ndGg6IGxlbmd0aCBvZiBAdmRteCwgaW4gYnl0ZXMKKy8vICAgdGFyZ2V0UGl4ZWxTaXplOiB0
aGUgcGl4ZWwgc2l6ZSBvZiB0aGUgZm9udCAoZS5nLiAxNikKKy8vCisvLyBSZXR1cm5zIHRydWUg
aWZmIGEgc3VpdGFibGUgbWF0Y2ggYXJlIGZvdW5kLiBPdGhlcndpc2UsICp5TWF4IGFuZCAqeU1p
biBhcmUKKy8vIHVudG91Y2hlZC4gc2l6ZV90IG11c3QgYmUgMzItYml0cyB0byBhdm9pZCBvdmVy
Zmxvdy4KKy8vCisvLyBTZWUgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL29wZW50eXBlL290c3Bl
Yy92ZG14Lmh0bQorYm9vbCBwYXJzZVZETVgoaW50KiB5TWF4LCBpbnQqIHlNaW4sCisgICAgICAg
ICAgICAgICBjb25zdCB1aW50OF90KiB2ZG14LCBzaXplX3QgdmRteExlbmd0aCwKKyAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldFBpeGVsU2l6ZSkKK3sKKyAgICBCdWZmZXIgYnVmKHZkbXgs
IHZkbXhMZW5ndGgpOworCisgICAgLy8gV2UgaWdub3JlIHRoZSB2ZXJzaW9uLiBGdXR1cmUgdGFi
bGVzIHNob3VsZCBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoCisgICAgLy8gdGhpcyBsYXlv
dXQuCisgICAgdWludDE2X3QgbnVtUmF0aW9zOworICAgIGlmICghYnVmLnNraXAoNCkgfHwgIWJ1
Zi5yZWFkVTE2KCZudW1SYXRpb3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBO
b3cgd2UgaGF2ZSB0d28gdGFibGVzLiBGaXJzdGx5IHdlIGhhdmUgQG51bVJhdGlvcyBSYXRpbyBy
ZWNvcmRzLCB0aGVuIGEKKyAgICAvLyBtYXRjaGluZyBhcnJheSBvZiBAbnVtUmF0aW9zIG9mZnNl
dHMuIFdlIHNhdmUgdGhlIG9mZnNldCBvZiB0aGUgYmVnaW5uaW5nCisgICAgLy8gb2YgdGhpcyBz
ZWNvbmQgdGFibGUuCisgICAgLy8KKyAgICAvLyBSYW5nZSA2IDw9IHggPD0gMjYyMTQ2CisgICAg
dW5zaWduZWQgbG9uZyBvZmZzZXRUYWJsZU9mZnNldCA9CisgICAgICAgIGJ1Zi5vZmZzZXQoKSAr
IDQgLyogc2l6ZW9mIHN0cnVjdCByYXRpbyAqLyAqIG51bVJhdGlvczsKKworICAgIHVuc2lnbmVk
IGRlc2lyZWRSYXRpbyA9IDB4ZmZmZmZmZmY7CisgICAgLy8gV2UgcmVhZCA0IGJ5dGVzIHBlciBy
ZWNvcmQsIHNvIHRoZSBvZmZzZXQgcmFuZ2UgaXMKKyAgICAvLyAgIDYgPD0geCA8PSA1MjQyODYK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUmF0aW9zOyArK2kpIHsKKyAgICAgICAg
dWludDhfdCB4UmF0aW8sIHlSYXRpbzEsIHlSYXRpbzI7CisKKyAgICAgICAgaWYgKCFidWYuc2tp
cCgxKQorICAgICAgICAgICAgfHwgIWJ1Zi5yZWFkVTgoJnhSYXRpbykKKyAgICAgICAgICAgIHx8
ICFidWYucmVhZFU4KCZ5UmF0aW8xKQorICAgICAgICAgICAgfHwgIWJ1Zi5yZWFkVTgoJnlSYXRp
bzIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFRoaXMgZWl0aGVy
IGNvdmVycyAxOjEsIG9yIHRoaXMgaXMgdGhlIGRlZmF1bHQgZW50cnkgKDAsIDAsIDApCisgICAg
ICAgIGlmICgoeFJhdGlvID09IDEgJiYgeVJhdGlvMSA8PSAxICYmIHlSYXRpbzIgPj0gMSkKKyAg
ICAgICAgICAgIHx8ICh4UmF0aW8gPT0gMCAmJiB5UmF0aW8xID09IDAgJiYgeVJhdGlvMiA9PSAw
KSkgeworICAgICAgICAgICAgZGVzaXJlZFJhdGlvID0gaTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlc2lyZWRSYXRpbyA9PSAweGZmZmZmZmZmKSAv
LyBubyByYXRpbyBmb3VuZAorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSYW5nZSAx
MCA8PSB4IDw9IDM5MzIxNgorICAgIGJ1Zi5zZXRPZmZzZXQob2Zmc2V0VGFibGVPZmZzZXQgKyBz
aXplb2YodWludDE2X3QpICogZGVzaXJlZFJhdGlvKTsKKworICAgIC8vIE5vdyB3ZSByZWFkIGZy
b20gdGhlIG9mZnNldCB0YWJsZSB0byBnZXQgdGhlIG9mZnNldCBvZiBhbm90aGVyIGFycmF5Cisg
ICAgdWludDE2X3QgZ3JvdXBPZmZzZXQ7CisgICAgaWYgKCFidWYucmVhZFUxNigmZ3JvdXBPZmZz
ZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gUmFuZ2UgMCA8PSB4IDw9IDY1NTM1
CisgICAgYnVmLnNldE9mZnNldChncm91cE9mZnNldCk7CisKKyAgICB1aW50MTZfdCBudW1SZWNv
cmRzOworICAgIGlmICghYnVmLnJlYWRVMTYoJm51bVJlY29yZHMpIHx8ICFidWYuc2tpcChzaXpl
b2YodWludDE2X3QpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgcmVhZCA2
IGJ5dGVzIHBlciByZWNvcmQsIHNvIHRoZSBvZmZzZXQgcmFuZ2UgaXMKKyAgICAvLyAgIDQgPD0g
eCA8PSA0NTg3NDkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUmVjb3JkczsgKytp
KSB7CisgICAgICAgIHVpbnQxNl90IHBpeGVsU2l6ZTsKKyAgICAgICAgaWYgKCFidWYucmVhZFUx
NigmcGl4ZWxTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gdGhl
IGVudHJpZXMgYXJlIHNvcnRlZCwgc28gd2UgY2FuIGFib3J0IGVhcmx5IGlmIG5lZWQgYmUKKyAg
ICAgICAgaWYgKHBpeGVsU2l6ZSA+IHRhcmdldFBpeGVsU2l6ZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBpZiAocGl4ZWxTaXplID09IHRhcmdldFBpeGVsU2l6ZSkgewor
ICAgICAgICAgICAgaW50MTZfdCB0ZW1wWU1heCwgdGVtcFlNaW47CisgICAgICAgICAgICBpZiAo
IWJ1Zi5yZWFkUzE2KCZ0ZW1wWU1heCkKKyAgICAgICAgICAgICAgICB8fCAhYnVmLnJlYWRTMTYo
JnRlbXBZTWluKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAq
eU1pbiA9IHRlbXBZTWluOworICAgICAgICAgICAgKnlNYXggPSB0ZW1wWU1heDsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghYnVmLnNraXAoMiAqIHNp
emVvZihpbnQxNl90KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvVkRNWFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9WRE1YUGFyc2VyLmgJKHJldmlzaW9uIDcwNDczKQko
ZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZETVhQYXJzZXIuaDo3MDQ3
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9WRE1YUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFZETVhQYXJzZXJfaAorI2RlZmluZSBW
RE1YUGFyc2VyX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGJvb2wgcGFyc2VWRE1YKGlu
dCogeW1heCwgaW50KiB5bWluLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZk
bXgsIHNpemVfdCB2ZG14TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dFBpeGVsU2l6ZSk7Cit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>